From a5b6775c0a8e27354ed54afc486cc1d08f522c72 Mon Sep 17 00:00:00 2001 From: cqh963852 Date: Wed, 28 Feb 2024 22:13:52 +0800 Subject: [PATCH] feat: add jsx-type --- packages/inula/package.json | 33 +- packages/inula/rollup.config.js | 30 + packages/inula/src/jsx-dev-runtime.ts | 21 +- packages/inula/src/jsx-runtime.ts | 36 +- packages/inula/src/jsx-type.ts | 1703 +++++++++++++++++++++++++ 5 files changed, 1779 insertions(+), 44 deletions(-) create mode 100644 packages/inula/rollup.config.js create mode 100644 packages/inula/src/jsx-type.ts diff --git a/packages/inula/package.json b/packages/inula/package.json index 6e5e1ea7..83f6f8d1 100644 --- a/packages/inula/package.json +++ b/packages/inula/package.json @@ -14,22 +14,39 @@ "node": ">=0.10.0" }, "scripts": { - "build": "rollup --config ./scripts/rollup/rollup.config.js", - "build-types": "tsc -p tsconfig.build.json || echo \"WARNING: TSC exited with status $?\" && rollup -c ./scripts/rollup/build-types.js", - "build:watch": "rollup --watch --config ./scripts/rollup/rollup.config.js", + "build": "rollup --config rollup.config.js --bundleConfigAsCjs && pnpm build-types", + "build-types": "tsc -v && tsc -b -v", + "build:watch": "rollup --watch --config rollup.config.js --bundleConfigAsCjs", "debug-test": "yarn test --debug", "lint": "eslint . --ext .ts --fix", "test": "jest --config=jest.config.js", "watch-test": "yarn test --watch --dev" }, - "files": ["build/**/*", "README.md"], - "types": "./build/@types/index.d.ts", + "files": [ + "build/**/*", + "README.md" + ], "exports": { ".": { "default": "./build/index.js" }, - "./package.json":"./package.json", - "./jsx-runtime": "./build/jsx-runtime.js", - "./jsx-dev-runtime": "./build/jsx-dev-runtime.js" + "./package.json": "./package.json", + "./jsx-runtime": { + "require": "./dist/umd/index.js", + "import": "./dist/esm/index.js", + "types": "./build/jsx-runtime.d.ts" + }, + "./jsx-dev-runtime": { + "require": "./dist/umd/index.js", + "import": "./dist/esm/index.js", + "types": "./build/jsx-runtime.d.ts" + } + }, + "dependencies": { + "csstype": "^3.1.3" + }, + "devDependencies": { + "rollup-plugin-esbuild": "^6.1.1", + "rollup-plugin-visualizer": "^5.12.0" } } diff --git a/packages/inula/rollup.config.js b/packages/inula/rollup.config.js new file mode 100644 index 00000000..78638355 --- /dev/null +++ b/packages/inula/rollup.config.js @@ -0,0 +1,30 @@ +import { defineConfig } from 'rollup'; +import esbuild from 'rollup-plugin-esbuild'; +import { visualizer } from 'rollup-plugin-visualizer'; + +const config = defineConfig([ + { + input: ['./src/index.ts'], + plugins: [ + esbuild(), + visualizer({ + emitFile: true, + filename: 'stats.html', + }), + ], + output: [ + { + dir: 'build/umd', + name: 'index', + format: 'umd', + }, + { + dir: 'build/esm', + name: 'index', + format: 'esm', + }, + ], + }, +]); + +export default config; diff --git a/packages/inula/src/jsx-dev-runtime.ts b/packages/inula/src/jsx-dev-runtime.ts index ee14fff9..00923971 100644 --- a/packages/inula/src/jsx-dev-runtime.ts +++ b/packages/inula/src/jsx-dev-runtime.ts @@ -1,19 +1,2 @@ -/* - * Copyright (c) 2023 Huawei Technologies Co.,Ltd. - * - * openInula is licensed under Mulan PSL v2. - * You can use this software according to the terms and conditions of the Mulan PSL v2. - * You may obtain a copy of Mulan PSL v2 at: - * - * http://license.coscl.org.cn/MulanPSL2 - * - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - */ - -import { TYPE_FRAGMENT as Fragment } from './external/JSXElementType'; -import { jsx as jsxDEV } from './external/JSXElement'; - -export { jsxDEV, Fragment }; +export * from "./index"; +export * from "./jsx-runtime"; diff --git a/packages/inula/src/jsx-runtime.ts b/packages/inula/src/jsx-runtime.ts index b0c51818..7335833c 100644 --- a/packages/inula/src/jsx-runtime.ts +++ b/packages/inula/src/jsx-runtime.ts @@ -1,19 +1,21 @@ -/* - * Copyright (c) 2023 Huawei Technologies Co.,Ltd. - * - * openInula is licensed under Mulan PSL v2. - * You can use this software according to the terms and conditions of the Mulan PSL v2. - * You may obtain a copy of Mulan PSL v2 at: - * - * http://license.coscl.org.cn/MulanPSL2 - * - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PSL v2 for more details. - */ +import { InnerElement, InulaElement, JSXElementType, Key, TagOption } from './jsx-type'; -import { TYPE_FRAGMENT as Fragment } from './external/JSXElementType'; -import { jsx, jsx as jsxs } from './external/JSXElement'; +export namespace JSX { + export type ElementType = string | JSXElementType; + export interface ElementAttributesProperty { + props: object; + } + export interface ElementChildrenAttribute { + children: object; + } -export { jsx, jsxs, Fragment }; + export interface Element extends InulaElement {} + + export interface IntrinsicAttributes { + key?: Key; + } + + export type IntrinsicElements = { + [K in keyof InnerElement]: TagOption; + }; +} diff --git a/packages/inula/src/jsx-type.ts b/packages/inula/src/jsx-type.ts new file mode 100644 index 00000000..477d8bc3 --- /dev/null +++ b/packages/inula/src/jsx-type.ts @@ -0,0 +1,1703 @@ +import CSS from 'csstype'; + +export type InulaElement = Element; + +export type JSXElementType

= (props: P) => InulaNode | InulaElement; + +export type InulaNode = InulaElement | PrimitiveChild | InulaNode[] | null; + +export type Primitive = string | number | boolean | bigint; +export type Key = number | string | symbol; +export type PrimitiveChild = Primitive; + +interface EventHandler { + (event: E): void; +} + +export interface DOMAttributes { + // Clipboard Events + onCopy?: EventHandler | undefined; + onCopyCapture?: EventHandler | undefined; + onCut?: EventHandler | undefined; + onCutCapture?: EventHandler | undefined; + onPaste?: EventHandler | undefined; + onPasteCapture?: EventHandler | undefined; + + // Composition Events + onCompositionEnd?: EventHandler | undefined; + onCompositionEndCapture?: EventHandler | undefined; + onCompositionStart?: EventHandler | undefined; + onCompositionStartCapture?: EventHandler | undefined; + onCompositionUpdate?: EventHandler | undefined; + onCompositionUpdateCapture?: EventHandler | undefined; + + // Focus Events + onFocus?: EventHandler | undefined; + onFocusCapture?: EventHandler | undefined; + onBlur?: EventHandler | undefined; + onBlurCapture?: EventHandler | undefined; + + // Form Events + onChange?: EventHandler | undefined; + onChangeCapture?: EventHandler | undefined; + onBeforeInput?: EventHandler | undefined; + onBeforeInputCapture?: EventHandler | undefined; + onInput?: EventHandler | undefined; + onInputCapture?: EventHandler | undefined; + onReset?: EventHandler | undefined; + onResetCapture?: EventHandler | undefined; + onSubmit?: EventHandler | undefined; + onSubmitCapture?: EventHandler | undefined; + onInvalid?: EventHandler | undefined; + onInvalidCapture?: EventHandler | undefined; + + // Image Events + onLoad?: EventHandler | undefined; + onLoadCapture?: EventHandler | undefined; + onError?: EventHandler | undefined; // also a Media Event + onErrorCapture?: EventHandler | undefined; // also a Media Event + + // Keyboard Events + onKeyDown?: EventHandler | undefined; + onKeyDownCapture?: EventHandler | undefined; + /** @deprecated */ + onKeyPress?: EventHandler | undefined; + /** @deprecated */ + onKeyPressCapture?: EventHandler | undefined; + onKeyUp?: EventHandler | undefined; + onKeyUpCapture?: EventHandler | undefined; + + // Media Events + onAbort?: EventHandler | undefined; + onAbortCapture?: EventHandler | undefined; + onCanPlay?: EventHandler | undefined; + onCanPlayCapture?: EventHandler | undefined; + onCanPlayThrough?: EventHandler | undefined; + onCanPlayThroughCapture?: EventHandler | undefined; + onDurationChange?: EventHandler | undefined; + onDurationChangeCapture?: EventHandler | undefined; + onEmptied?: EventHandler | undefined; + onEmptiedCapture?: EventHandler | undefined; + onEncrypted?: EventHandler | undefined; + onEncryptedCapture?: EventHandler | undefined; + onEnded?: EventHandler | undefined; + onEndedCapture?: EventHandler | undefined; + onLoadedData?: EventHandler | undefined; + onLoadedDataCapture?: EventHandler | undefined; + onLoadedMetadata?: EventHandler | undefined; + onLoadedMetadataCapture?: EventHandler | undefined; + onLoadStart?: EventHandler | undefined; + onLoadStartCapture?: EventHandler | undefined; + onPause?: EventHandler | undefined; + onPauseCapture?: EventHandler | undefined; + onPlay?: EventHandler | undefined; + onPlayCapture?: EventHandler | undefined; + onPlaying?: EventHandler | undefined; + onPlayingCapture?: EventHandler | undefined; + onProgress?: EventHandler | undefined; + onProgressCapture?: EventHandler | undefined; + onRateChange?: EventHandler | undefined; + onRateChangeCapture?: EventHandler | undefined; + onSeeked?: EventHandler | undefined; + onSeekedCapture?: EventHandler | undefined; + onSeeking?: EventHandler | undefined; + onSeekingCapture?: EventHandler | undefined; + onStalled?: EventHandler | undefined; + onStalledCapture?: EventHandler | undefined; + onSuspend?: EventHandler | undefined; + onSuspendCapture?: EventHandler | undefined; + onTimeUpdate?: EventHandler | undefined; + onTimeUpdateCapture?: EventHandler | undefined; + onVolumeChange?: EventHandler | undefined; + onVolumeChangeCapture?: EventHandler | undefined; + onWaiting?: EventHandler | undefined; + onWaitingCapture?: EventHandler | undefined; + + // MouseEvents + onAuxClick?: EventHandler | undefined; + onAuxClickCapture?: EventHandler | undefined; + onClick?: EventHandler | undefined; + onClickCapture?: EventHandler | undefined; + onContextMenu?: EventHandler | undefined; + onContextMenuCapture?: EventHandler | undefined; + onDoubleClick?: EventHandler | undefined; + onDoubleClickCapture?: EventHandler | undefined; + onDrag?: EventHandler | undefined; + onDragCapture?: EventHandler | undefined; + onDragEnd?: EventHandler | undefined; + onDragEndCapture?: EventHandler | undefined; + onDragEnter?: EventHandler | undefined; + onDragEnterCapture?: EventHandler | undefined; + onDragExit?: EventHandler | undefined; + onDragExitCapture?: EventHandler | undefined; + onDragLeave?: EventHandler | undefined; + onDragLeaveCapture?: EventHandler | undefined; + onDragOver?: EventHandler | undefined; + onDragOverCapture?: EventHandler | undefined; + onDragStart?: EventHandler | undefined; + onDragStartCapture?: EventHandler | undefined; + onDrop?: EventHandler | undefined; + onDropCapture?: EventHandler | undefined; + onMouseDown?: EventHandler | undefined; + onMouseDownCapture?: EventHandler | undefined; + onMouseEnter?: EventHandler | undefined; + onMouseLeave?: EventHandler | undefined; + onMouseMove?: EventHandler | undefined; + onMouseMoveCapture?: EventHandler | undefined; + onMouseOut?: EventHandler | undefined; + onMouseOutCapture?: EventHandler | undefined; + onMouseOver?: EventHandler | undefined; + onMouseOverCapture?: EventHandler | undefined; + onMouseUp?: EventHandler | undefined; + onMouseUpCapture?: EventHandler | undefined; + + // Selection Events + onSelect?: EventHandler | undefined; + onSelectCapture?: EventHandler | undefined; + + // Touch Events + onTouchCancel?: EventHandler | undefined; + onTouchCancelCapture?: EventHandler | undefined; + onTouchEnd?: EventHandler | undefined; + onTouchEndCapture?: EventHandler | undefined; + onTouchMove?: EventHandler | undefined; + onTouchMoveCapture?: EventHandler | undefined; + onTouchStart?: EventHandler | undefined; + onTouchStartCapture?: EventHandler | undefined; + + // Pointer Events + onPointerDown?: EventHandler | undefined; + onPointerDownCapture?: EventHandler | undefined; + onPointerMove?: EventHandler | undefined; + onPointerMoveCapture?: EventHandler | undefined; + onPointerUp?: EventHandler | undefined; + onPointerUpCapture?: EventHandler | undefined; + onPointerCancel?: EventHandler | undefined; + onPointerCancelCapture?: EventHandler | undefined; + onPointerEnter?: EventHandler | undefined; + onPointerEnterCapture?: EventHandler | undefined; + onPointerLeave?: EventHandler | undefined; + onPointerLeaveCapture?: EventHandler | undefined; + onPointerOver?: EventHandler | undefined; + onPointerOverCapture?: EventHandler | undefined; + onPointerOut?: EventHandler | undefined; + onPointerOutCapture?: EventHandler | undefined; + onGotPointerCapture?: EventHandler | undefined; + onGotPointerCaptureCapture?: EventHandler | undefined; + onLostPointerCapture?: EventHandler | undefined; + onLostPointerCaptureCapture?: EventHandler | undefined; + + // UI Events + onScroll?: EventHandler | undefined; + onScrollCapture?: EventHandler | undefined; + + // Wheel Events + onWheel?: EventHandler | undefined; + onWheelCapture?: EventHandler | undefined; + + // Animation Events + onAnimationStart?: EventHandler | undefined; + onAnimationStartCapture?: EventHandler | undefined; + onAnimationEnd?: EventHandler | undefined; + onAnimationEndCapture?: EventHandler | undefined; + onAnimationIteration?: EventHandler | undefined; + onAnimationIterationCapture?: EventHandler | undefined; + + // Transition Events + onTransitionEnd?: EventHandler | undefined; + onTransitionEndCapture?: EventHandler | undefined; +} + +type Booleanish = boolean | 'true' | 'false'; +type CrossOrigin = 'anonymous' | 'use-credentials' | '' | undefined; + +interface AriaAttributes { + /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ + 'aria-activedescendant'?: string | undefined; + /** 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'?: Booleanish | undefined; + /** + * 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'?: 'none' | 'inline' | 'list' | 'both' | undefined; + /** 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'?: Booleanish | undefined; + /** + * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. + * @see aria-pressed @see aria-selected. + */ + 'aria-checked'?: boolean | 'false' | 'mixed' | 'true' | undefined; + /** + * Defines the total number of columns in a table, grid, or treegrid. + * @see aria-colindex. + */ + 'aria-colcount'?: number | undefined; + /** + * 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'?: number | undefined; + /** + * 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'?: number | undefined; + /** + * Identifies the element (or elements) whose contents or presence are controlled by the current element. + * @see aria-owns. + */ + 'aria-controls'?: string | undefined; + /** Indicates the element that represents the current item within a container or set of related elements. */ + 'aria-current'?: boolean | 'false' | 'true' | 'page' | 'step' | 'location' | 'date' | 'time' | undefined; + /** + * Identifies the element (or elements) that describes the object. + * @see aria-labelledby + */ + 'aria-describedby'?: string | undefined; + /** + * Identifies the element that provides a detailed, extended description for the object. + * @see aria-describedby. + */ + 'aria-details'?: string | undefined; + /** + * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. + * @see aria-hidden @see aria-readonly. + */ + 'aria-disabled'?: Booleanish | undefined; + /** + * Indicates what functions can be performed when a dragged object is released on the drop target. + * @deprecated in ARIA 1.1 + */ + 'aria-dropeffect'?: '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'?: string | undefined; + /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ + 'aria-expanded'?: Booleanish | undefined; + /** + * 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'?: string | undefined; + /** + * Indicates an element's "grabbed" state in a drag-and-drop operation. + * @deprecated in ARIA 1.1 + */ + 'aria-grabbed'?: Booleanish | undefined; + /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */ + 'aria-haspopup'?: boolean | 'false' | 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | undefined; + /** + * Indicates whether the element is exposed to an accessibility API. + * @see aria-disabled. + */ + 'aria-hidden'?: Booleanish | undefined; + /** + * Indicates the entered value does not conform to the format expected by the application. + * @see aria-errormessage. + */ + 'aria-invalid'?: boolean | 'false' | 'true' | 'grammar' | 'spelling' | undefined; + /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ + 'aria-keyshortcuts'?: string | undefined; + /** + * Defines a string value that labels the current element. + * @see aria-labelledby. + */ + 'aria-label'?: string | undefined; + /** + * Identifies the element (or elements) that labels the current element. + * @see aria-describedby. + */ + 'aria-labelledby'?: string | undefined; + /** Defines the hierarchical level of an element within a structure. */ + 'aria-level'?: number | undefined; + /** 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'?: 'off' | 'assertive' | 'polite' | undefined; + /** Indicates whether an element is modal when displayed. */ + 'aria-modal'?: Booleanish | undefined; + /** Indicates whether a text box accepts multiple lines of input or only a single line. */ + 'aria-multiline'?: Booleanish | undefined; + /** Indicates that the user may select more than one item from the current selectable descendants. */ + 'aria-multiselectable'?: Booleanish | undefined; + /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ + 'aria-orientation'?: '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'?: string | undefined; + /** + * 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'?: string | undefined; + /** + * 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'?: number | undefined; + /** + * Indicates the current "pressed" state of toggle buttons. + * @see aria-checked @see aria-selected. + */ + 'aria-pressed'?: boolean | 'false' | 'mixed' | 'true' | undefined; + /** + * Indicates that the element is not editable, but is otherwise operable. + * @see aria-disabled. + */ + 'aria-readonly'?: Booleanish | undefined; + /** + * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. + * @see aria-atomic. + */ + 'aria-relevant'?: + | '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'?: Booleanish | undefined; + /** Defines a human-readable, author-localized description for the role of an element. */ + 'aria-roledescription'?: string | undefined; + /** + * Defines the total number of rows in a table, grid, or treegrid. + * @see aria-rowindex. + */ + 'aria-rowcount'?: number | undefined; + /** + * 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'?: number | undefined; + /** + * 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'?: number | undefined; + /** + * Indicates the current "selected" state of various widgets. + * @see aria-checked @see aria-pressed. + */ + 'aria-selected'?: Booleanish | undefined; + /** + * 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'?: number | undefined; + /** Indicates if items in a table or grid are sorted in ascending or descending order. */ + 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' | undefined; + /** Defines the maximum allowed value for a range widget. */ + 'aria-valuemax'?: number | undefined; + /** Defines the minimum allowed value for a range widget. */ + 'aria-valuemin'?: number | undefined; + /** + * Defines the current value for a range widget. + * @see aria-valuetext. + */ + 'aria-valuenow'?: number | undefined; + /** Defines the human readable text alternative of aria-valuenow for a range widget. */ + 'aria-valuetext'?: string | undefined; +} + +type AriaRole = + | 'alert' + | 'alertdialog' + | 'application' + | 'article' + | 'banner' + | 'button' + | 'cell' + | 'checkbox' + | 'columnheader' + | 'combobox' + | 'complementary' + | 'contentinfo' + | 'definition' + | 'dialog' + | 'directory' + | 'document' + | 'feed' + | 'figure' + | 'form' + | 'grid' + | 'gridcell' + | 'group' + | 'heading' + | 'img' + | 'link' + | 'list' + | 'listbox' + | 'listitem' + | 'log' + | 'main' + | 'marquee' + | 'math' + | 'menu' + | 'menubar' + | 'menuitem' + | 'menuitemcheckbox' + | 'menuitemradio' + | 'navigation' + | 'none' + | 'note' + | 'option' + | 'presentation' + | 'progressbar' + | 'radio' + | 'radiogroup' + | 'region' + | 'row' + | 'rowgroup' + | 'rowheader' + | 'scrollbar' + | 'search' + | 'searchbox' + | 'separator' + | 'slider' + | 'spinbutton' + | 'status' + | 'switch' + | 'tab' + | 'table' + | 'tablist' + | 'tabpanel' + | 'term' + | 'textbox' + | 'timer' + | 'toolbar' + | 'tooltip' + | 'tree' + | 'treegrid' + | 'treeitem' + | (string & object); + +interface EventHandler { + (event: E): void; +} + +export interface DOMAttributes { + // Clipboard Events + onCopy?: EventHandler | undefined; + onCopyCapture?: EventHandler | undefined; + onCut?: EventHandler | undefined; + onCutCapture?: EventHandler | undefined; + onPaste?: EventHandler | undefined; + onPasteCapture?: EventHandler | undefined; + + // Composition Events + onCompositionEnd?: EventHandler | undefined; + onCompositionEndCapture?: EventHandler | undefined; + onCompositionStart?: EventHandler | undefined; + onCompositionStartCapture?: EventHandler | undefined; + onCompositionUpdate?: EventHandler | undefined; + onCompositionUpdateCapture?: EventHandler | undefined; + + // Focus Events + onFocus?: EventHandler | undefined; + onFocusCapture?: EventHandler | undefined; + onBlur?: EventHandler | undefined; + onBlurCapture?: EventHandler | undefined; + + // Form Events + onChange?: EventHandler | undefined; + onChangeCapture?: EventHandler | undefined; + onBeforeInput?: EventHandler | undefined; + onBeforeInputCapture?: EventHandler | undefined; + onInput?: EventHandler | undefined; + onInputCapture?: EventHandler | undefined; + onReset?: EventHandler | undefined; + onResetCapture?: EventHandler | undefined; + onSubmit?: EventHandler | undefined; + onSubmitCapture?: EventHandler | undefined; + onInvalid?: EventHandler | undefined; + onInvalidCapture?: EventHandler | undefined; + + // Image Events + onLoad?: EventHandler | undefined; + onLoadCapture?: EventHandler | undefined; + onError?: EventHandler | undefined; // also a Media Event + onErrorCapture?: EventHandler | undefined; // also a Media Event + + // Keyboard Events + onKeyDown?: EventHandler | undefined; + onKeyDownCapture?: EventHandler | undefined; + /** @deprecated */ + onKeyPress?: EventHandler | undefined; + /** @deprecated */ + onKeyPressCapture?: EventHandler | undefined; + onKeyUp?: EventHandler | undefined; + onKeyUpCapture?: EventHandler | undefined; + + // Media Events + onAbort?: EventHandler | undefined; + onAbortCapture?: EventHandler | undefined; + onCanPlay?: EventHandler | undefined; + onCanPlayCapture?: EventHandler | undefined; + onCanPlayThrough?: EventHandler | undefined; + onCanPlayThroughCapture?: EventHandler | undefined; + onDurationChange?: EventHandler | undefined; + onDurationChangeCapture?: EventHandler | undefined; + onEmptied?: EventHandler | undefined; + onEmptiedCapture?: EventHandler | undefined; + onEncrypted?: EventHandler | undefined; + onEncryptedCapture?: EventHandler | undefined; + onEnded?: EventHandler | undefined; + onEndedCapture?: EventHandler | undefined; + onLoadedData?: EventHandler | undefined; + onLoadedDataCapture?: EventHandler | undefined; + onLoadedMetadata?: EventHandler | undefined; + onLoadedMetadataCapture?: EventHandler | undefined; + onLoadStart?: EventHandler | undefined; + onLoadStartCapture?: EventHandler | undefined; + onPause?: EventHandler | undefined; + onPauseCapture?: EventHandler | undefined; + onPlay?: EventHandler | undefined; + onPlayCapture?: EventHandler | undefined; + onPlaying?: EventHandler | undefined; + onPlayingCapture?: EventHandler | undefined; + onProgress?: EventHandler | undefined; + onProgressCapture?: EventHandler | undefined; + onRateChange?: EventHandler | undefined; + onRateChangeCapture?: EventHandler | undefined; + onSeeked?: EventHandler | undefined; + onSeekedCapture?: EventHandler | undefined; + onSeeking?: EventHandler | undefined; + onSeekingCapture?: EventHandler | undefined; + onStalled?: EventHandler | undefined; + onStalledCapture?: EventHandler | undefined; + onSuspend?: EventHandler | undefined; + onSuspendCapture?: EventHandler | undefined; + onTimeUpdate?: EventHandler | undefined; + onTimeUpdateCapture?: EventHandler | undefined; + onVolumeChange?: EventHandler | undefined; + onVolumeChangeCapture?: EventHandler | undefined; + onWaiting?: EventHandler | undefined; + onWaitingCapture?: EventHandler | undefined; + + // MouseEvents + onAuxClick?: EventHandler | undefined; + onAuxClickCapture?: EventHandler | undefined; + onClick?: EventHandler | undefined; + onClickCapture?: EventHandler | undefined; + onContextMenu?: EventHandler | undefined; + onContextMenuCapture?: EventHandler | undefined; + onDoubleClick?: EventHandler | undefined; + onDoubleClickCapture?: EventHandler | undefined; + onDrag?: EventHandler | undefined; + onDragCapture?: EventHandler | undefined; + onDragEnd?: EventHandler | undefined; + onDragEndCapture?: EventHandler | undefined; + onDragEnter?: EventHandler | undefined; + onDragEnterCapture?: EventHandler | undefined; + onDragExit?: EventHandler | undefined; + onDragExitCapture?: EventHandler | undefined; + onDragLeave?: EventHandler | undefined; + onDragLeaveCapture?: EventHandler | undefined; + onDragOver?: EventHandler | undefined; + onDragOverCapture?: EventHandler | undefined; + onDragStart?: EventHandler | undefined; + onDragStartCapture?: EventHandler | undefined; + onDrop?: EventHandler | undefined; + onDropCapture?: EventHandler | undefined; + onMouseDown?: EventHandler | undefined; + onMouseDownCapture?: EventHandler | undefined; + onMouseEnter?: EventHandler | undefined; + onMouseLeave?: EventHandler | undefined; + onMouseMove?: EventHandler | undefined; + onMouseMoveCapture?: EventHandler | undefined; + onMouseOut?: EventHandler | undefined; + onMouseOutCapture?: EventHandler | undefined; + onMouseOver?: EventHandler | undefined; + onMouseOverCapture?: EventHandler | undefined; + onMouseUp?: EventHandler | undefined; + onMouseUpCapture?: EventHandler | undefined; + + // Selection Events + onSelect?: EventHandler | undefined; + onSelectCapture?: EventHandler | undefined; + + // Touch Events + onTouchCancel?: EventHandler | undefined; + onTouchCancelCapture?: EventHandler | undefined; + onTouchEnd?: EventHandler | undefined; + onTouchEndCapture?: EventHandler | undefined; + onTouchMove?: EventHandler | undefined; + onTouchMoveCapture?: EventHandler | undefined; + onTouchStart?: EventHandler | undefined; + onTouchStartCapture?: EventHandler | undefined; + + // Pointer Events + onPointerDown?: EventHandler | undefined; + onPointerDownCapture?: EventHandler | undefined; + onPointerMove?: EventHandler | undefined; + onPointerMoveCapture?: EventHandler | undefined; + onPointerUp?: EventHandler | undefined; + onPointerUpCapture?: EventHandler | undefined; + onPointerCancel?: EventHandler | undefined; + onPointerCancelCapture?: EventHandler | undefined; + onPointerEnter?: EventHandler | undefined; + onPointerEnterCapture?: EventHandler | undefined; + onPointerLeave?: EventHandler | undefined; + onPointerLeaveCapture?: EventHandler | undefined; + onPointerOver?: EventHandler | undefined; + onPointerOverCapture?: EventHandler | undefined; + onPointerOut?: EventHandler | undefined; + onPointerOutCapture?: EventHandler | undefined; + onGotPointerCapture?: EventHandler | undefined; + onGotPointerCaptureCapture?: EventHandler | undefined; + onLostPointerCapture?: EventHandler | undefined; + onLostPointerCaptureCapture?: EventHandler | undefined; + + // UI Events + onScroll?: EventHandler | undefined; + onScrollCapture?: EventHandler | undefined; + + // Wheel Events + onWheel?: EventHandler | undefined; + onWheelCapture?: EventHandler | undefined; + + // Animation Events + onAnimationStart?: EventHandler | undefined; + onAnimationStartCapture?: EventHandler | undefined; + onAnimationEnd?: EventHandler | undefined; + onAnimationEndCapture?: EventHandler | undefined; + onAnimationIteration?: EventHandler | undefined; + onAnimationIterationCapture?: EventHandler | undefined; + + // Transition Events + onTransitionEnd?: EventHandler | undefined; + onTransitionEndCapture?: EventHandler | undefined; +} + +export interface ReactiveAttributes { + ref?: T; + children?: InulaNode; + key?: Key; +} + +export interface HTMLAttributes extends AriaAttributes, DOMAttributes, ReactiveAttributes { + // Standard HTML Attributes + accessKey?: string | undefined; + autoFocus?: boolean | undefined; + className?: string | undefined; + contentEditable?: Booleanish | 'inherit' | undefined; + contextMenu?: string | undefined; + dir?: string | undefined; + draggable?: Booleanish | undefined; + hidden?: boolean | undefined; + id?: string | undefined; + lang?: string | undefined; + nonce?: string | undefined; + placeholder?: string | undefined; + slot?: string | undefined; + spellCheck?: Booleanish | undefined; + style?: CSS.Properties | undefined; + tabIndex?: number | undefined; + title?: string | undefined; + translate?: 'yes' | 'no' | undefined; + + // Unknown + radioGroup?: string | undefined; // , + + // WAI-ARIA + role?: AriaRole | undefined; + + // RDFa Attributes + about?: string | undefined; + content?: string | undefined; + datatype?: string | undefined; + inlist?: unknown; + prefix?: string | undefined; + property?: string | undefined; + rel?: string | undefined; + resource?: string | undefined; + rev?: string | undefined; + typeof?: string | undefined; + vocab?: string | undefined; + + // Non-standard Attributes + autoCapitalize?: string | undefined; + autoCorrect?: string | undefined; + autoSave?: string | undefined; + color?: string | undefined; + itemProp?: string | undefined; + itemScope?: boolean | undefined; + itemType?: string | undefined; + itemID?: string | undefined; + itemRef?: string | undefined; + results?: number | undefined; + security?: string | undefined; + unselectable?: 'on' | 'off' | undefined; + + // Living Standard + /** + * Hints at the type of data that might be entered by the user while editing the element or its contents + * @see https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute + */ + inputMode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search' | undefined; + /** + * Specify that a standard HTML element should behave like a defined custom built-in element + * @see https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is + */ + is?: string | undefined; +} + +export interface SVGAttributes extends AriaAttributes, DOMAttributes, ReactiveAttributes { + // Attributes which also defined in HTMLAttributes + // See comment in SVGDOMPropertyConfig.js + className?: string | undefined; + color?: string | undefined; + height?: number | string | undefined; + id?: string | undefined; + lang?: string | undefined; + max?: number | string | undefined; + media?: string | undefined; + method?: string | undefined; + min?: number | string | undefined; + name?: string | undefined; + style?: CSS.Properties | undefined; + target?: string | undefined; + type?: string | undefined; + width?: number | string | undefined; + + // Other HTML properties supported by SVG elements in browsers + role?: AriaRole | undefined; + tabIndex?: number | undefined; + crossOrigin?: CrossOrigin; + + // SVG Specific Attributes + accentHeight?: number | string | undefined; + accumulate?: 'none' | 'sum' | undefined; + additive?: 'replace' | 'sum' | undefined; + alignmentBaseline?: + | 'auto' + | 'baseline' + | 'before-edge' + | 'text-before-edge' + | 'middle' + | 'central' + | 'after-edge' + | 'text-after-edge' + | 'ideographic' + | 'alphabetic' + | 'hanging' + | 'mathematical' + | 'inherit' + | undefined; + allowReorder?: 'no' | 'yes' | undefined; + alphabetic?: number | string | undefined; + amplitude?: number | string | undefined; + arabicForm?: 'initial' | 'medial' | 'terminal' | 'isolated' | undefined; + ascent?: number | string | undefined; + attributeName?: string | undefined; + attributeType?: string | undefined; + autoReverse?: Booleanish | undefined; + azimuth?: number | string | undefined; + baseFrequency?: number | string | undefined; + baselineShift?: number | string | undefined; + baseProfile?: number | string | undefined; + bbox?: number | string | undefined; + begin?: number | string | undefined; + bias?: number | string | undefined; + by?: number | string | undefined; + calcMode?: number | string | undefined; + capHeight?: number | string | undefined; + clip?: number | string | undefined; + clipPath?: string | undefined; + clipPathUnits?: number | string | undefined; + clipRule?: number | string | undefined; + colorInterpolation?: number | string | undefined; + colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' | undefined; + colorProfile?: number | string | undefined; + colorRendering?: number | string | undefined; + contentScriptType?: number | string | undefined; + contentStyleType?: number | string | undefined; + cursor?: number | string | undefined; + cx?: number | string | undefined; + cy?: number | string | undefined; + d?: string | undefined; + decelerate?: number | string | undefined; + descent?: number | string | undefined; + diffuseConstant?: number | string | undefined; + direction?: number | string | undefined; + display?: number | string | undefined; + divisor?: number | string | undefined; + dominantBaseline?: number | string | undefined; + dur?: number | string | undefined; + dx?: number | string | undefined; + dy?: number | string | undefined; + edgeMode?: number | string | undefined; + elevation?: number | string | undefined; + enableBackground?: number | string | undefined; + end?: number | string | undefined; + exponent?: number | string | undefined; + externalResourcesRequired?: Booleanish | undefined; + fill?: string | undefined; + fillOpacity?: number | string | undefined; + fillRule?: 'nonzero' | 'evenodd' | 'inherit' | undefined; + filter?: string | undefined; + filterRes?: number | string | undefined; + filterUnits?: number | string | undefined; + floodColor?: number | string | undefined; + floodOpacity?: number | string | undefined; + focusable?: Booleanish | 'auto' | undefined; + fontFamily?: string | undefined; + fontSize?: number | string | undefined; + fontSizeAdjust?: number | string | undefined; + fontStretch?: number | string | undefined; + fontStyle?: number | string | undefined; + fontVariant?: number | string | undefined; + fontWeight?: number | string | undefined; + format?: number | string | undefined; + fr?: number | string | undefined; + from?: number | string | undefined; + fx?: number | string | undefined; + fy?: number | string | undefined; + g1?: number | string | undefined; + g2?: number | string | undefined; + glyphName?: number | string | undefined; + glyphOrientationHorizontal?: number | string | undefined; + glyphOrientationVertical?: number | string | undefined; + glyphRef?: number | string | undefined; + gradientTransform?: string | undefined; + gradientUnits?: string | undefined; + hanging?: number | string | undefined; + horizAdvX?: number | string | undefined; + horizOriginX?: number | string | undefined; + href?: string | undefined; + ideographic?: number | string | undefined; + imageRendering?: number | string | undefined; + in2?: number | string | undefined; + in?: string | undefined; + intercept?: number | string | undefined; + k1?: number | string | undefined; + k2?: number | string | undefined; + k3?: number | string | undefined; + k4?: number | string | undefined; + k?: number | string | undefined; + kernelMatrix?: number | string | undefined; + kernelUnitLength?: number | string | undefined; + kerning?: number | string | undefined; + keyPoints?: number | string | undefined; + keySplines?: number | string | undefined; + keyTimes?: number | string | undefined; + lengthAdjust?: number | string | undefined; + letterSpacing?: number | string | undefined; + lightingColor?: number | string | undefined; + limitingConeAngle?: number | string | undefined; + local?: number | string | undefined; + markerEnd?: string | undefined; + markerHeight?: number | string | undefined; + markerMid?: string | undefined; + markerStart?: string | undefined; + markerUnits?: number | string | undefined; + markerWidth?: number | string | undefined; + mask?: string | undefined; + maskContentUnits?: number | string | undefined; + maskUnits?: number | string | undefined; + mathematical?: number | string | undefined; + mode?: number | string | undefined; + numOctaves?: number | string | undefined; + offset?: number | string | undefined; + opacity?: number | string | undefined; + operator?: number | string | undefined; + order?: number | string | undefined; + orient?: number | string | undefined; + orientation?: number | string | undefined; + origin?: number | string | undefined; + overflow?: number | string | undefined; + overlinePosition?: number | string | undefined; + overlineThickness?: number | string | undefined; + paintOrder?: number | string | undefined; + panose1?: number | string | undefined; + path?: string | undefined; + pathLength?: number | string | undefined; + patternContentUnits?: string | undefined; + patternTransform?: number | string | undefined; + patternUnits?: string | undefined; + pointerEvents?: number | string | undefined; + points?: string | undefined; + pointsAtX?: number | string | undefined; + pointsAtY?: number | string | undefined; + pointsAtZ?: number | string | undefined; + preserveAlpha?: Booleanish | undefined; + preserveAspectRatio?: string | undefined; + primitiveUnits?: number | string | undefined; + r?: number | string | undefined; + radius?: number | string | undefined; + refX?: number | string | undefined; + refY?: number | string | undefined; + renderingIntent?: number | string | undefined; + repeatCount?: number | string | undefined; + repeatDur?: number | string | undefined; + requiredExtensions?: number | string | undefined; + requiredFeatures?: number | string | undefined; + restart?: number | string | undefined; + result?: string | undefined; + rotate?: number | string | undefined; + rx?: number | string | undefined; + ry?: number | string | undefined; + scale?: number | string | undefined; + seed?: number | string | undefined; + shapeRendering?: number | string | undefined; + slope?: number | string | undefined; + spacing?: number | string | undefined; + specularConstant?: number | string | undefined; + specularExponent?: number | string | undefined; + speed?: number | string | undefined; + spreadMethod?: string | undefined; + startOffset?: number | string | undefined; + stdDeviation?: number | string | undefined; + stemh?: number | string | undefined; + stemv?: number | string | undefined; + stitchTiles?: number | string | undefined; + stopColor?: string | undefined; + stopOpacity?: number | string | undefined; + strikethroughPosition?: number | string | undefined; + strikethroughThickness?: number | string | undefined; + string?: number | string | undefined; + stroke?: string | undefined; + strokeDasharray?: string | number | undefined; + strokeDashoffset?: string | number | undefined; + strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit' | undefined; + strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit' | undefined; + strokeMiterlimit?: number | string | undefined; + strokeOpacity?: number | string | undefined; + strokeWidth?: number | string | undefined; + surfaceScale?: number | string | undefined; + systemLanguage?: number | string | undefined; + tableValues?: number | string | undefined; + targetX?: number | string | undefined; + targetY?: number | string | undefined; + textAnchor?: string | undefined; + textDecoration?: number | string | undefined; + textLength?: number | string | undefined; + textRendering?: number | string | undefined; + to?: number | string | undefined; + transform?: string | undefined; + u1?: number | string | undefined; + u2?: number | string | undefined; + underlinePosition?: number | string | undefined; + underlineThickness?: number | string | undefined; + unicode?: number | string | undefined; + unicodeBidi?: number | string | undefined; + unicodeRange?: number | string | undefined; + unitsPerEm?: number | string | undefined; + vAlphabetic?: number | string | undefined; + values?: string | undefined; + vectorEffect?: number | string | undefined; + version?: string | undefined; + vertAdvY?: number | string | undefined; + vertOriginX?: number | string | undefined; + vertOriginY?: number | string | undefined; + vHanging?: number | string | undefined; + vIdeographic?: number | string | undefined; + viewBox?: string | undefined; + viewTarget?: number | string | undefined; + visibility?: number | string | undefined; + vMathematical?: number | string | undefined; + widths?: number | string | undefined; + wordSpacing?: number | string | undefined; + writingMode?: number | string | undefined; + x1?: number | string | undefined; + x2?: number | string | undefined; + x?: number | string | undefined; + xChannelSelector?: string | undefined; + xHeight?: number | string | undefined; + xlinkActuate?: string | undefined; + xlinkArcrole?: string | undefined; + xlinkHref?: string | undefined; + xlinkRole?: string | undefined; + xlinkShow?: string | undefined; + xlinkTitle?: string | undefined; + xlinkType?: string | undefined; + xmlBase?: string | undefined; + xmlLang?: string | undefined; + xmlns?: string | undefined; + xmlnsXlink?: string | undefined; + xmlSpace?: string | undefined; + y1?: number | string | undefined; + y2?: number | string | undefined; + y?: number | string | undefined; + yChannelSelector?: string | undefined; + z?: number | string | undefined; + zoomAndPan?: string | undefined; +} + +type HTMLAttributeAnchorTarget = '_self' | '_blank' | '_parent' | '_top' | (string & object); + +type HTMLAttributeReferrerPolicy = + | '' + | 'no-referrer' + | 'no-referrer-when-downgrade' + | 'origin' + | 'origin-when-cross-origin' + | 'same-origin' + | 'strict-origin' + | 'strict-origin-when-cross-origin' + | 'unsafe-url'; + +export interface AnchorHTMLAttributes extends HTMLAttributes { + download?: unknown; + href?: string | undefined; + hrefLang?: string | undefined; + media?: string | undefined; + ping?: string | undefined; + target?: HTMLAttributeAnchorTarget | undefined; + type?: string | undefined; + referrerPolicy?: HTMLAttributeReferrerPolicy | undefined; +} + +export interface AreaHTMLAttributes extends HTMLAttributes { + alt?: string | undefined; + coords?: string | undefined; + download?: unknown; + href?: string | undefined; + hrefLang?: string | undefined; + media?: string | undefined; + referrerPolicy?: HTMLAttributeReferrerPolicy | undefined; + shape?: string | undefined; + target?: string | undefined; +} + +export interface MediaHTMLAttributes extends HTMLAttributes { + autoPlay?: boolean | undefined; + controls?: boolean | undefined; + controlsList?: string | undefined; + crossOrigin?: CrossOrigin; + loop?: boolean | undefined; + mediaGroup?: string | undefined; + muted?: boolean | undefined; + playsInline?: boolean | undefined; + preload?: string | undefined; + src?: string | undefined; +} + +export interface AudioHTMLAttributes extends MediaHTMLAttributes {} + +export interface BaseHTMLAttributes extends HTMLAttributes { + href?: string | undefined; + target?: string | undefined; +} + +export interface BlockquoteHTMLAttributes extends HTMLAttributes { + cite?: string | undefined; +} + +export interface ButtonHTMLAttributes extends HTMLAttributes { + disabled?: boolean | undefined; + form?: string | undefined; + formAction?: string | undefined; + formEncType?: string | undefined; + formMethod?: string | undefined; + formNoValidate?: boolean | undefined; + formTarget?: string | undefined; + name?: string | undefined; + type?: 'submit' | 'reset' | 'button' | undefined; + value?: string | ReadonlyArray | number | undefined; +} + +export interface CanvasHTMLAttributes extends HTMLAttributes { + height?: number | string | undefined; + width?: number | string | undefined; +} + +export interface ColHTMLAttributes extends HTMLAttributes { + span?: number | undefined; + width?: number | string | undefined; +} + +export interface ColgroupHTMLAttributes extends HTMLAttributes { + span?: number | undefined; +} + +export interface DataHTMLAttributes extends HTMLAttributes { + value?: string | ReadonlyArray | number | undefined; +} + +export interface DetailsHTMLAttributes extends HTMLAttributes { + open?: boolean | undefined; + onToggle?: Event | undefined; +} + +export interface DelHTMLAttributes extends HTMLAttributes { + cite?: string | undefined; + dateTime?: string | undefined; +} + +export interface DialogHTMLAttributes extends HTMLAttributes { + onCancel?: Event | undefined; + onClose?: Event | undefined; + open?: boolean | undefined; +} + +export interface EmbedHTMLAttributes extends HTMLAttributes { + height?: number | string | undefined; + src?: string | undefined; + type?: string | undefined; + width?: number | string | undefined; +} + +export interface FieldsetHTMLAttributes extends HTMLAttributes { + disabled?: boolean | undefined; + form?: string | undefined; + name?: string | undefined; +} + +export interface FormHTMLAttributes extends HTMLAttributes { + acceptCharset?: string | undefined; + action?: string | undefined; + autoComplete?: string | undefined; + encType?: string | undefined; + method?: string | undefined; + name?: string | undefined; + noValidate?: boolean | undefined; + target?: string | undefined; +} + +export interface HtmlHTMLAttributes extends HTMLAttributes { + manifest?: string | undefined; +} + +export interface IframeHTMLAttributes extends HTMLAttributes { + allow?: string | undefined; + allowFullScreen?: boolean | undefined; + allowTransparency?: boolean | undefined; + /** @deprecated */ + frameBorder?: number | string | undefined; + height?: number | string | undefined; + loading?: 'eager' | 'lazy' | undefined; + /** @deprecated */ + marginHeight?: number | undefined; + /** @deprecated */ + marginWidth?: number | undefined; + name?: string | undefined; + referrerPolicy?: HTMLAttributeReferrerPolicy | undefined; + sandbox?: string | undefined; + /** @deprecated */ + scrolling?: string | undefined; + seamless?: boolean | undefined; + src?: string | undefined; + srcDoc?: string | undefined; + width?: number | string | undefined; +} + +export interface ImgHTMLAttributes extends HTMLAttributes { + alt?: string | undefined; + crossOrigin?: CrossOrigin; + decoding?: 'async' | 'auto' | 'sync' | undefined; + height?: number | string | undefined; + loading?: 'eager' | 'lazy' | undefined; + referrerPolicy?: HTMLAttributeReferrerPolicy | undefined; + sizes?: string | undefined; + src?: string | undefined; + srcSet?: string | undefined; + useMap?: string | undefined; + width?: number | string | undefined; +} + +export interface InsHTMLAttributes extends HTMLAttributes { + cite?: string | undefined; + dateTime?: string | undefined; +} + +type HTMLInputTypeAttribute = + | 'button' + | 'checkbox' + | 'color' + | 'date' + | 'datetime-local' + | 'email' + | 'file' + | 'hidden' + | 'image' + | 'month' + | 'number' + | 'password' + | 'radio' + | 'range' + | 'reset' + | 'search' + | 'submit' + | 'tel' + | 'text' + | 'time' + | 'url' + | 'week' + | (string & object); + +export interface InputHTMLAttributes extends HTMLAttributes { + accept?: string | undefined; + alt?: string | undefined; + autoComplete?: string | undefined; + capture?: boolean | 'user' | 'environment' | undefined; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute + checked?: boolean | undefined; + disabled?: boolean | undefined; + enterKeyHint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined; + form?: string | undefined; + formAction?: string | undefined; + formEncType?: string | undefined; + formMethod?: string | undefined; + formNoValidate?: boolean | undefined; + formTarget?: string | undefined; + height?: number | string | undefined; + list?: string | undefined; + max?: number | string | undefined; + maxLength?: number | undefined; + min?: number | string | undefined; + minLength?: number | undefined; + multiple?: boolean | undefined; + name?: string | undefined; + pattern?: string | undefined; + placeholder?: string | undefined; + readOnly?: boolean | undefined; + required?: boolean | undefined; + size?: number | undefined; + src?: string | undefined; + step?: number | string | undefined; + type?: HTMLInputTypeAttribute | undefined; + value?: string | ReadonlyArray | number | undefined; + width?: number | string | undefined; + + onChange?: EventHandler | undefined; +} + +export interface KeygenHTMLAttributes extends HTMLAttributes { + challenge?: string | undefined; + disabled?: boolean | undefined; + form?: string | undefined; + keyType?: string | undefined; + keyParams?: string | undefined; + name?: string | undefined; +} + +export interface LabelHTMLAttributes extends HTMLAttributes { + form?: string | undefined; + htmlFor?: string | undefined; +} + +export interface LiHTMLAttributes extends HTMLAttributes { + value?: string | ReadonlyArray | number | undefined; +} + +export interface LinkHTMLAttributes extends HTMLAttributes { + as?: string | undefined; + crossOrigin?: CrossOrigin; + fetchPriority?: 'high' | 'low' | 'auto'; + href?: string | undefined; + hrefLang?: string | undefined; + integrity?: string | undefined; + media?: string | undefined; + imageSrcSet?: string | undefined; + referrerPolicy?: HTMLAttributeReferrerPolicy | undefined; + sizes?: string | undefined; + type?: string | undefined; + charSet?: string | undefined; +} + +export interface MapHTMLAttributes extends HTMLAttributes { + name?: string | undefined; +} + +export interface MenuHTMLAttributes extends HTMLAttributes { + type?: string | undefined; +} + +export interface MetaHTMLAttributes extends HTMLAttributes { + charSet?: string | undefined; + httpEquiv?: string | undefined; + name?: string | undefined; + media?: string | undefined; +} + +export interface MeterHTMLAttributes extends HTMLAttributes { + form?: string | undefined; + high?: number | undefined; + low?: number | undefined; + max?: number | string | undefined; + min?: number | string | undefined; + optimum?: number | undefined; + value?: string | ReadonlyArray | number | undefined; +} + +export interface QuoteHTMLAttributes extends HTMLAttributes { + cite?: string | undefined; +} + +export interface ObjectHTMLAttributes extends HTMLAttributes { + classID?: string | undefined; + data?: string | undefined; + form?: string | undefined; + height?: number | string | undefined; + name?: string | undefined; + type?: string | undefined; + useMap?: string | undefined; + width?: number | string | undefined; + wmode?: string | undefined; +} + +export interface OlHTMLAttributes extends HTMLAttributes { + reversed?: boolean | undefined; + start?: number | undefined; + type?: '1' | 'a' | 'A' | 'i' | 'I' | undefined; +} + +export interface OptgroupHTMLAttributes extends HTMLAttributes { + disabled?: boolean | undefined; + label?: string | undefined; +} + +export interface OptionHTMLAttributes extends HTMLAttributes { + disabled?: boolean | undefined; + label?: string | undefined; + selected?: boolean | undefined; + value?: string | ReadonlyArray | number | undefined; +} + +export interface OutputHTMLAttributes extends HTMLAttributes { + form?: string | undefined; + htmlFor?: string | undefined; + name?: string | undefined; +} + +export interface ParamHTMLAttributes extends HTMLAttributes { + name?: string | undefined; + value?: string | ReadonlyArray | number | undefined; +} + +export interface ProgressHTMLAttributes extends HTMLAttributes { + max?: number | string | undefined; + value?: string | ReadonlyArray | number | undefined; +} + +export interface SlotHTMLAttributes extends HTMLAttributes { + name?: string | undefined; +} + +export interface ScriptHTMLAttributes extends HTMLAttributes { + async?: boolean | undefined; + /** @deprecated */ + charSet?: string | undefined; + crossOrigin?: CrossOrigin; + defer?: boolean | undefined; + integrity?: string | undefined; + noModule?: boolean | undefined; + referrerPolicy?: HTMLAttributeReferrerPolicy | undefined; + src?: string | undefined; + type?: string | undefined; +} + +export interface SelectHTMLAttributes extends HTMLAttributes { + autoComplete?: string | undefined; + disabled?: boolean | undefined; + form?: string | undefined; + multiple?: boolean | undefined; + name?: string | undefined; + required?: boolean | undefined; + size?: number | undefined; + value?: string | ReadonlyArray | number | undefined; + onChange?: EventHandler | undefined; +} + +export interface SourceHTMLAttributes extends HTMLAttributes { + height?: number | string | undefined; + media?: string | undefined; + sizes?: string | undefined; + src?: string | undefined; + srcSet?: string | undefined; + type?: string | undefined; + width?: number | string | undefined; +} + +export interface StyleHTMLAttributes extends HTMLAttributes { + media?: string | undefined; + scoped?: boolean | undefined; + type?: string | undefined; +} + +export interface TableHTMLAttributes extends HTMLAttributes { + cellPadding?: number | string | undefined; + cellSpacing?: number | string | undefined; + summary?: string | undefined; + width?: number | string | undefined; +} + +export interface TextareaHTMLAttributes extends HTMLAttributes { + autoComplete?: string | undefined; + cols?: number | undefined; + dirName?: string | undefined; + disabled?: boolean | undefined; + form?: string | undefined; + maxLength?: number | undefined; + minLength?: number | undefined; + name?: string | undefined; + placeholder?: string | undefined; + readOnly?: boolean | undefined; + required?: boolean | undefined; + rows?: number | undefined; + value?: string | ReadonlyArray | number | undefined; + wrap?: string | undefined; + + onChange?: EventHandler | undefined; +} + +export interface TdHTMLAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined; + colSpan?: number | undefined; + headers?: string | undefined; + rowSpan?: number | undefined; + scope?: string | undefined; + abbr?: string | undefined; + height?: number | string | undefined; + width?: number | string | undefined; + valign?: 'top' | 'middle' | 'bottom' | 'baseline' | undefined; +} + +export interface ThHTMLAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined; + colSpan?: number | undefined; + headers?: string | undefined; + rowSpan?: number | undefined; + scope?: string | undefined; + abbr?: string | undefined; +} + +export interface TimeHTMLAttributes extends HTMLAttributes { + dateTime?: string | undefined; +} + +export interface TrackHTMLAttributes extends HTMLAttributes { + default?: boolean | undefined; + kind?: string | undefined; + label?: string | undefined; + src?: string | undefined; + srcLang?: string | undefined; +} + +export interface VideoHTMLAttributes extends MediaHTMLAttributes { + height?: number | string | undefined; + playsInline?: boolean | undefined; + poster?: string | undefined; + width?: number | string | undefined; + disablePictureInPicture?: boolean | undefined; + disableRemotePlayback?: boolean | undefined; +} + +export interface WebViewHTMLAttributes extends HTMLAttributes { + allowFullScreen?: boolean | undefined; + allowpopups?: boolean | undefined; + autosize?: boolean | undefined; + blinkfeatures?: string | undefined; + disableblinkfeatures?: string | undefined; + disableguestresize?: boolean | undefined; + disablewebsecurity?: boolean | undefined; + guestinstance?: string | undefined; + httpreferrer?: string | undefined; + nodeintegration?: boolean | undefined; + partition?: string | undefined; + plugins?: boolean | undefined; + preload?: string | undefined; + src?: string | undefined; + useragent?: string | undefined; + webpreferences?: string | undefined; +} + +export interface InnerElement { + a: AnchorHTMLAttributes; + abbr: HTMLAttributes; + address: HTMLAttributes; + area: AreaHTMLAttributes; + article: HTMLAttributes; + aside: HTMLAttributes; + audio: AudioHTMLAttributes; + b: HTMLAttributes; + base: BaseHTMLAttributes; + bdi: HTMLAttributes; + bdo: HTMLAttributes; + big: HTMLAttributes; + blockquote: BlockquoteHTMLAttributes; + body: HTMLAttributes; + br: HTMLAttributes; + button: ButtonHTMLAttributes; + canvas: CanvasHTMLAttributes; + caption: HTMLAttributes; + cite: HTMLAttributes; + code: HTMLAttributes; + col: ColHTMLAttributes; + colgroup: ColgroupHTMLAttributes; + data: DataHTMLAttributes; + datalist: HTMLAttributes; + dd: HTMLAttributes; + del: DelHTMLAttributes; + details: DetailsHTMLAttributes; + dfn: HTMLAttributes; + dialog: DialogHTMLAttributes; + div: HTMLAttributes; + dl: HTMLAttributes; + dt: HTMLAttributes; + em: HTMLAttributes; + embed: EmbedHTMLAttributes; + fieldset: FieldsetHTMLAttributes; + figcaption: HTMLAttributes; + figure: HTMLAttributes; + footer: HTMLAttributes; + form: FormHTMLAttributes; + h1: HTMLAttributes; + h2: HTMLAttributes; + h3: HTMLAttributes; + h4: HTMLAttributes; + h5: HTMLAttributes; + h6: HTMLAttributes; + head: HTMLAttributes; + header: HTMLAttributes; + hgroup: HTMLAttributes; + hr: HTMLAttributes; + html: HtmlHTMLAttributes; + i: HTMLAttributes; + iframe: IframeHTMLAttributes; + img: ImgHTMLAttributes; + input: InputHTMLAttributes; + ins: InsHTMLAttributes; + kbd: HTMLAttributes; + keygen: KeygenHTMLAttributes; + label: LabelHTMLAttributes; + legend: HTMLAttributes; + li: LiHTMLAttributes; + link: LinkHTMLAttributes; + main: HTMLAttributes; + map: MapHTMLAttributes; + mark: HTMLAttributes; + menu: MenuHTMLAttributes; + menuitem: HTMLAttributes; + meta: MetaHTMLAttributes; + meter: MeterHTMLAttributes; + nav: HTMLAttributes; + noindex: HTMLAttributes; + noscript: HTMLAttributes; + object: ObjectHTMLAttributes; + ol: OlHTMLAttributes; + optgroup: OptgroupHTMLAttributes; + option: OptionHTMLAttributes; + output: OutputHTMLAttributes; + p: HTMLAttributes; + param: ParamHTMLAttributes; + picture: HTMLAttributes; + pre: HTMLAttributes; + progress: ProgressHTMLAttributes; + q: QuoteHTMLAttributes; + rp: HTMLAttributes; + rt: HTMLAttributes; + ruby: HTMLAttributes; + s: HTMLAttributes; + samp: HTMLAttributes; + slot: SlotHTMLAttributes; + script: ScriptHTMLAttributes; + section: HTMLAttributes; + select: SelectHTMLAttributes; + small: HTMLAttributes; + source: SourceHTMLAttributes; + span: HTMLAttributes; + strong: HTMLAttributes; + style: StyleHTMLAttributes; + sub: HTMLAttributes; + summary: HTMLAttributes; + sup: HTMLAttributes; + table: TableHTMLAttributes; + template: HTMLAttributes; + tbody: HTMLAttributes; + td: TdHTMLAttributes; + textarea: TextareaHTMLAttributes; + tfoot: HTMLAttributes; + th: ThHTMLAttributes; + thead: HTMLAttributes; + time: TimeHTMLAttributes; + title: HTMLAttributes; + tr: HTMLAttributes; + track: TrackHTMLAttributes; + u: HTMLAttributes; + ul: HTMLAttributes; + var: HTMLAttributes; + video: VideoHTMLAttributes; + wbr: HTMLAttributes; + webview: WebViewHTMLAttributes; + + // SVG + svg: SVGAttributes; + + animate: SVGAttributes; // TODO: It is SVGAnimateElement but is not in TypeScript's lib.dom.d.ts for now. + animateMotion: SVGAttributes; + animateTransform: SVGAttributes; // TODO: It is SVGAnimateTransformElement but is not in TypeScript's lib.dom.d.ts for now. + circle: SVGAttributes; + clipPath: SVGAttributes; + defs: SVGAttributes; + desc: SVGAttributes; + ellipse: SVGAttributes; + feBlend: SVGAttributes; + feColorMatrix: SVGAttributes; + feComponentTransfer: SVGAttributes; + feComposite: SVGAttributes; + feConvolveMatrix: SVGAttributes; + feDiffuseLighting: SVGAttributes; + feDisplacementMap: SVGAttributes; + feDistantLight: SVGAttributes; + feDropShadow: SVGAttributes; + feFlood: SVGAttributes; + feFuncA: SVGAttributes; + feFuncB: SVGAttributes; + feFuncG: SVGAttributes; + feFuncR: SVGAttributes; + feGaussianBlur: SVGAttributes; + feImage: SVGAttributes; + feMerge: SVGAttributes; + feMergeNode: SVGAttributes; + feMorphology: SVGAttributes; + feOffset: SVGAttributes; + fePointLight: SVGAttributes; + feSpecularLighting: SVGAttributes; + feSpotLight: SVGAttributes; + feTile: SVGAttributes; + feTurbulence: SVGAttributes; + filter: SVGAttributes; + foreignObject: SVGAttributes; + g: SVGAttributes; + image: SVGAttributes; + line: SVGAttributes; + linearGradient: SVGAttributes; + marker: SVGAttributes; + mask: SVGAttributes; + metadata: SVGAttributes; + mpath: SVGAttributes; + path: SVGAttributes; + pattern: SVGAttributes; + polygon: SVGAttributes; + polyline: SVGAttributes; + radialGradient: SVGAttributes; + rect: SVGAttributes; + stop: SVGAttributes; + switch: SVGAttributes; + symbol: SVGAttributes; + text: SVGAttributes; + textPath: SVGAttributes; + tspan: SVGAttributes; + use: SVGAttributes; + view: SVGAttributes; +} + +type OrReactiveAttribute = { + [K in keyof T]: T[K]; +}; + +export type TagOption = OrReactiveAttribute< + Omit +> & + Pick; -- Gitee