From e54dde116a54fe6d800c3507af6e6304b9aeb6d3 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Tue, 28 Mar 2023 22:06:10 +0800 Subject: [PATCH 01/11] fix: copy-paste jsx-runtime types for global JSX namespace registration Otherwise TypeScript will raise TS2322 errors. I have no idea why and how does the fix work. But it does. Even importing the `ReservedProps` and `NativeElements` types from `jsx-runtime` instead of declaring them in the module would fail the tests. I have no idea why, either. The failing tests are at https://github.com/vuejs/ecosystem-ci/actions/runs/4538928668/jobs/7998297656#step:7:3 --- packages/vue/jsx.d.ts | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/packages/vue/jsx.d.ts b/packages/vue/jsx.d.ts index 4057d6afc9c..756654b70b4 100644 --- a/packages/vue/jsx.d.ts +++ b/packages/vue/jsx.d.ts @@ -1,15 +1,34 @@ // global JSX namespace registration -import { JSX as JSXInternal } from './jsx-runtime' +// somehow we have to copy=pase the jsx-runtime types here to make TypeScript happy +import { VNode, VNodeRef } from '@vue/runtime-dom' +import { IntrinsicElementAttributes } from './jsx-runtime/dom' + +export type ReservedProps = { + key?: string | number | symbol + ref?: VNodeRef + ref_for?: boolean + ref_key?: string +} + +export type NativeElements = { + [K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] & + ReservedProps +} declare global { namespace JSX { - interface Element extends JSXInternal.Element {} - interface ElementClass extends JSXInternal.ElementClass {} - interface ElementAttributesProperty - extends JSXInternal.ElementAttributesProperty {} - interface IntrinsicElements extends JSXInternal.IntrinsicElements {} - interface IntrinsicAttributes extends JSXInternal.IntrinsicAttributes {} + export interface Element extends VNode {} + export interface ElementClass { + $props: {} + } + export interface ElementAttributesProperty { + $props: {} + } + export interface IntrinsicElements extends NativeElements { + // allow arbitrary elements + // @ts-ignore suppress ts:2374 = Duplicate string index signature. + [name: string]: any + } + export interface IntrinsicAttributes extends ReservedProps {} } } - -export {} From 5d36547a6430695da2d35cd153d7d06cdf5ec605 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Tue, 28 Mar 2023 23:30:58 +0800 Subject: [PATCH 02/11] fix: re-export all jsx dom types --- packages/vue/jsx.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/vue/jsx.d.ts b/packages/vue/jsx.d.ts index 756654b70b4..947a9904419 100644 --- a/packages/vue/jsx.d.ts +++ b/packages/vue/jsx.d.ts @@ -3,6 +3,8 @@ import { VNode, VNodeRef } from '@vue/runtime-dom' import { IntrinsicElementAttributes } from './jsx-runtime/dom' +export * from './jsx-runtime/dom' + export type ReservedProps = { key?: string | number | symbol ref?: VNodeRef From bd4580076ccda1ec4d3d0497d21d11191b8a6528 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Tue, 28 Mar 2023 23:40:42 +0800 Subject: [PATCH 03/11] fix: re-export in the `jsx-register` module --- packages/vue/types/jsx-register.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/vue/types/jsx-register.d.ts b/packages/vue/types/jsx-register.d.ts index a626f798c2a..af5d5f29023 100644 --- a/packages/vue/types/jsx-register.d.ts +++ b/packages/vue/types/jsx-register.d.ts @@ -2,3 +2,5 @@ // imports the global JSX namespace registration for compat. // TODO: remove in 3.4 import '../jsx' + +export * from '../jsx-runtime/dom' From 5088bd41c3b466df538a8c7adb26bd705d28ad00 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 29 Mar 2023 13:48:28 +0800 Subject: [PATCH 04/11] fix: augment JSX types from `@vue/runtime-dom` should work Fixes use cases such as https://github.com/vuetifyjs/vuetify/blob/29777628ac8839c0548e869d3d350ed9fdcbb149/packages/vuetify/src/shims.d.ts#L18-L25 Adds a new `./jsx.d.ts` entry in `@vue/runtime-dom` to avoid duplication in `vue`. It should be removed in 3.4 when we stop registering global JSX namespace by default. --- packages/runtime-dom/jsx.d.ts | 1322 +++++++++++++++++++++++++++ packages/runtime-dom/types/jsx.d.ts | 16 + packages/vue/jsx-runtime/dom.d.ts | 1322 +-------------------------- 3 files changed, 1339 insertions(+), 1321 deletions(-) create mode 100644 packages/runtime-dom/jsx.d.ts create mode 100644 packages/runtime-dom/types/jsx.d.ts diff --git a/packages/runtime-dom/jsx.d.ts b/packages/runtime-dom/jsx.d.ts new file mode 100644 index 00000000000..ad6d94427c5 --- /dev/null +++ b/packages/runtime-dom/jsx.d.ts @@ -0,0 +1,1322 @@ +// TODO: move to vue/jsx-runtime/dom in 3.4 +// Note: this file is auto concatenated to the end of the bundled d.ts during +// build. + +// This code is based on react definition in DefinitelyTyped published under the MIT license. +// Repository: https://github.com/DefinitelyTyped/DefinitelyTyped +// Path in the repository: types/react/index.d.ts +// +// Copyrights of original definition are: +// AssureSign +// Microsoft +// John Reilly +// Benoit Benezech +// Patricio Zavolinsky +// Digiguru +// Eric Anderson +// Dovydas Navickas +// Josh Rutherford +// Guilherme Hübner +// Ferdy Budhidharma +// Johann Rakotoharisoa +// Olivier Pascal +// Martin Hochel +// Frank Li +// Jessica Franco +// Saransh Kataria +// Kanitkorn Sujautra +// Sebastian Silbermann + +import * as CSS from 'csstype' + +export interface CSSProperties + extends CSS.Properties, + CSS.PropertiesHyphen { + /** + * The index signature was removed to enable closed typing for style + * using CSSType. You're able to use type assertion or module augmentation + * to add properties or an index signature of your own. + * + * For examples and more information, visit: + * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors + */ + [v: `--${string}`]: string | number | undefined +} + +type Booleanish = boolean | 'true' | 'false' +type Numberish = number | string + +// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ +interface AriaAttributes { + /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ + 'aria-activedescendant'?: string + /** 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 + /** + * 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' + /** 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 + /** + * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. + * @see aria-pressed @see aria-selected. + */ + 'aria-checked'?: Booleanish | 'mixed' + /** + * Defines the total number of columns in a table, grid, or treegrid. + * @see aria-colindex. + */ + 'aria-colcount'?: Numberish + /** + * 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'?: Numberish + /** + * 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'?: Numberish + /** + * Identifies the element (or elements) whose contents or presence are controlled by the current element. + * @see aria-owns. + */ + 'aria-controls'?: string + /** Indicates the element that represents the current item within a container or set of related elements. */ + 'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time' + /** + * Identifies the element (or elements) that describes the object. + * @see aria-labelledby + */ + 'aria-describedby'?: string + /** + * Identifies the element that provides a detailed, extended description for the object. + * @see aria-describedby. + */ + 'aria-details'?: string + /** + * 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 + /** + * 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' + /** + * Identifies the element that provides an error message for the object. + * @see aria-invalid @see aria-describedby. + */ + 'aria-errormessage'?: string + /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ + 'aria-expanded'?: Booleanish + /** + * 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 + /** + * Indicates an element's "grabbed" state in a drag-and-drop operation. + * @deprecated in ARIA 1.1 + */ + 'aria-grabbed'?: Booleanish + /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */ + 'aria-haspopup'?: Booleanish | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' + /** + * Indicates whether the element is exposed to an accessibility API. + * @see aria-disabled. + */ + 'aria-hidden'?: Booleanish + /** + * Indicates the entered value does not conform to the format expected by the application. + * @see aria-errormessage. + */ + 'aria-invalid'?: Booleanish | 'grammar' | 'spelling' + /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ + 'aria-keyshortcuts'?: string + /** + * Defines a string value that labels the current element. + * @see aria-labelledby. + */ + 'aria-label'?: string + /** + * Identifies the element (or elements) that labels the current element. + * @see aria-describedby. + */ + 'aria-labelledby'?: string + /** Defines the hierarchical level of an element within a structure. */ + 'aria-level'?: Numberish + /** 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' + /** Indicates whether an element is modal when displayed. */ + 'aria-modal'?: Booleanish + /** Indicates whether a text box accepts multiple lines of input or only a single line. */ + 'aria-multiline'?: Booleanish + /** Indicates that the user may select more than one item from the current selectable descendants. */ + 'aria-multiselectable'?: Booleanish + /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ + 'aria-orientation'?: 'horizontal' | 'vertical' + /** + * 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 + /** + * 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 + /** + * 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'?: Numberish + /** + * Indicates the current "pressed" state of toggle buttons. + * @see aria-checked @see aria-selected. + */ + 'aria-pressed'?: Booleanish | 'mixed' + /** + * Indicates that the element is not editable, but is otherwise operable. + * @see aria-disabled. + */ + 'aria-readonly'?: Booleanish + /** + * 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 text' | 'all' | 'removals' | 'text' + /** Indicates that user input is required on the element before a form may be submitted. */ + 'aria-required'?: Booleanish + /** Defines a human-readable, author-localized description for the role of an element. */ + 'aria-roledescription'?: string + /** + * Defines the total number of rows in a table, grid, or treegrid. + * @see aria-rowindex. + */ + 'aria-rowcount'?: Numberish + /** + * 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'?: Numberish + /** + * 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'?: Numberish + /** + * Indicates the current "selected" state of various widgets. + * @see aria-checked @see aria-pressed. + */ + 'aria-selected'?: Booleanish + /** + * 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'?: Numberish + /** Indicates if items in a table or grid are sorted in ascending or descending order. */ + 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' + /** Defines the maximum allowed value for a range widget. */ + 'aria-valuemax'?: Numberish + /** Defines the minimum allowed value for a range widget. */ + 'aria-valuemin'?: Numberish + /** + * Defines the current value for a range widget. + * @see aria-valuetext. + */ + 'aria-valuenow'?: Numberish + /** Defines the human readable text alternative of aria-valuenow for a range widget. */ + 'aria-valuetext'?: string +} + +// Vue's style normalization supports nested arrays +export type StyleValue = string | CSSProperties | Array + +export interface HTMLAttributes extends AriaAttributes, EventHandlers { + innerHTML?: string + + class?: any + style?: StyleValue + + // Standard HTML Attributes + accesskey?: string + contenteditable?: Booleanish | 'inherit' + contextmenu?: string + dir?: string + draggable?: Booleanish + hidden?: Booleanish + id?: string + lang?: string + placeholder?: string + spellcheck?: Booleanish + tabindex?: Numberish + title?: string + translate?: 'yes' | 'no' + + // Unknown + radiogroup?: string // , + + // WAI-ARIA + role?: string + + // RDFa Attributes + about?: string + datatype?: string + inlist?: any + prefix?: string + property?: string + resource?: string + typeof?: string + vocab?: string + + // Non-standard Attributes + autocapitalize?: string + autocorrect?: string + autosave?: string + color?: string + itemprop?: string + itemscope?: Booleanish + itemtype?: string + itemid?: string + itemref?: string + results?: Numberish + security?: string + unselectable?: 'on' | 'off' + + // 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' + /** + * 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 +} + +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?: any + href?: string + hreflang?: string + media?: string + ping?: string + rel?: string + target?: string + type?: string + referrerpolicy?: HTMLAttributeReferrerPolicy +} + +export interface AreaHTMLAttributes extends HTMLAttributes { + alt?: string + coords?: string + download?: any + href?: string + hreflang?: string + media?: string + referrerpolicy?: HTMLAttributeReferrerPolicy + rel?: string + shape?: string + target?: string +} + +export interface AudioHTMLAttributes extends MediaHTMLAttributes {} + +export interface BaseHTMLAttributes extends HTMLAttributes { + href?: string + target?: string +} + +export interface BlockquoteHTMLAttributes extends HTMLAttributes { + cite?: string +} + +export interface ButtonHTMLAttributes extends HTMLAttributes { + autofocus?: Booleanish + disabled?: Booleanish + form?: string + formaction?: string + formenctype?: string + formmethod?: string + formnovalidate?: Booleanish + formtarget?: string + name?: string + type?: 'submit' | 'reset' | 'button' + value?: string | string[] | number +} + +export interface CanvasHTMLAttributes extends HTMLAttributes { + height?: Numberish + width?: Numberish +} + +export interface ColHTMLAttributes extends HTMLAttributes { + span?: Numberish + width?: Numberish +} + +export interface ColgroupHTMLAttributes extends HTMLAttributes { + span?: Numberish +} + +export interface DataHTMLAttributes extends HTMLAttributes { + value?: string | string[] | number +} + +export interface DetailsHTMLAttributes extends HTMLAttributes { + open?: Booleanish +} + +export interface DelHTMLAttributes extends HTMLAttributes { + cite?: string + datetime?: string +} + +export interface DialogHTMLAttributes extends HTMLAttributes { + open?: Booleanish +} + +export interface EmbedHTMLAttributes extends HTMLAttributes { + height?: Numberish + src?: string + type?: string + width?: Numberish +} + +export interface FieldsetHTMLAttributes extends HTMLAttributes { + disabled?: Booleanish + form?: string + name?: string +} + +export interface FormHTMLAttributes extends HTMLAttributes { + acceptcharset?: string + action?: string + autocomplete?: string + enctype?: string + method?: string + name?: string + novalidate?: Booleanish + target?: string +} + +export interface HtmlHTMLAttributes extends HTMLAttributes { + manifest?: string +} + +export interface IframeHTMLAttributes extends HTMLAttributes { + allow?: string + allowfullscreen?: Booleanish + allowtransparency?: Booleanish + frameborder?: Numberish + height?: Numberish + marginheight?: Numberish + marginwidth?: Numberish + name?: string + referrerpolicy?: HTMLAttributeReferrerPolicy + sandbox?: string + scrolling?: string + seamless?: Booleanish + src?: string + srcdoc?: string + width?: Numberish +} + +export interface ImgHTMLAttributes extends HTMLAttributes { + alt?: string + crossorigin?: 'anonymous' | 'use-credentials' | '' + decoding?: 'async' | 'auto' | 'sync' + height?: Numberish + referrerpolicy?: HTMLAttributeReferrerPolicy + sizes?: string + src?: string + srcset?: string + usemap?: string + width?: Numberish +} + +export interface InsHTMLAttributes extends HTMLAttributes { + cite?: string + datetime?: string +} + +export interface InputHTMLAttributes extends HTMLAttributes { + accept?: string + alt?: string + autocomplete?: string + autofocus?: Booleanish + capture?: boolean | 'user' | 'environment' // https://www.w3.org/tr/html-media-capture/#the-capture-attribute + checked?: Booleanish | any[] | Set // for IDE v-model multi-checkbox support + crossorigin?: string + disabled?: Booleanish + form?: string + formaction?: string + formenctype?: string + formmethod?: string + formnovalidate?: Booleanish + formtarget?: string + height?: Numberish + indeterminate?: boolean + list?: string + max?: Numberish + maxlength?: Numberish + min?: Numberish + minlength?: Numberish + multiple?: Booleanish + name?: string + pattern?: string + placeholder?: string + readonly?: Booleanish + required?: Booleanish + size?: Numberish + src?: string + step?: Numberish + type?: string + value?: any // we support :value to be bound to anything w/ v-model + width?: Numberish +} + +export interface KeygenHTMLAttributes extends HTMLAttributes { + autofocus?: Booleanish + challenge?: string + disabled?: Booleanish + form?: string + keytype?: string + keyparams?: string + name?: string +} + +export interface LabelHTMLAttributes extends HTMLAttributes { + for?: string + form?: string +} + +export interface LiHTMLAttributes extends HTMLAttributes { + value?: string | string[] | number +} + +export interface LinkHTMLAttributes extends HTMLAttributes { + as?: string + crossorigin?: string + href?: string + hreflang?: string + integrity?: string + media?: string + referrerpolicy?: HTMLAttributeReferrerPolicy + rel?: string + sizes?: string + type?: string +} + +export interface MapHTMLAttributes extends HTMLAttributes { + name?: string +} + +export interface MenuHTMLAttributes extends HTMLAttributes { + type?: string +} + +export interface MediaHTMLAttributes extends HTMLAttributes { + autoplay?: Booleanish + controls?: Booleanish + controlslist?: string + crossorigin?: string + loop?: Booleanish + mediagroup?: string + muted?: Booleanish + playsinline?: Booleanish + preload?: string + src?: string +} + +export interface MetaHTMLAttributes extends HTMLAttributes { + charset?: string + content?: string + httpequiv?: string + name?: string +} + +export interface MeterHTMLAttributes extends HTMLAttributes { + form?: string + high?: Numberish + low?: Numberish + max?: Numberish + min?: Numberish + optimum?: Numberish + value?: string | string[] | number +} + +export interface QuoteHTMLAttributes extends HTMLAttributes { + cite?: string +} + +export interface ObjectHTMLAttributes extends HTMLAttributes { + classid?: string + data?: string + form?: string + height?: Numberish + name?: string + type?: string + usemap?: string + width?: Numberish + wmode?: string +} + +export interface OlHTMLAttributes extends HTMLAttributes { + reversed?: Booleanish + start?: Numberish + type?: '1' | 'a' | 'A' | 'i' | 'I' +} + +export interface OptgroupHTMLAttributes extends HTMLAttributes { + disabled?: Booleanish + label?: string +} + +export interface OptionHTMLAttributes extends HTMLAttributes { + disabled?: Booleanish + label?: string + selected?: Booleanish + value?: any // we support :value to be bound to anything w/ v-model +} + +export interface OutputHTMLAttributes extends HTMLAttributes { + for?: string + form?: string + name?: string +} + +export interface ParamHTMLAttributes extends HTMLAttributes { + name?: string + value?: string | string[] | number +} + +export interface ProgressHTMLAttributes extends HTMLAttributes { + max?: Numberish + value?: string | string[] | number +} + +export interface ScriptHTMLAttributes extends HTMLAttributes { + async?: Booleanish + charset?: string + crossorigin?: string + defer?: Booleanish + integrity?: string + nomodule?: Booleanish + referrerpolicy?: HTMLAttributeReferrerPolicy + nonce?: string + src?: string + type?: string +} + +export interface SelectHTMLAttributes extends HTMLAttributes { + autocomplete?: string + autofocus?: Booleanish + disabled?: Booleanish + form?: string + multiple?: Booleanish + name?: string + required?: Booleanish + size?: Numberish + value?: any // we support :value to be bound to anything w/ v-model +} + +export interface SourceHTMLAttributes extends HTMLAttributes { + media?: string + sizes?: string + src?: string + srcset?: string + type?: string +} + +export interface StyleHTMLAttributes extends HTMLAttributes { + media?: string + nonce?: string + scoped?: Booleanish + type?: string +} + +export interface TableHTMLAttributes extends HTMLAttributes { + cellpadding?: Numberish + cellspacing?: Numberish + summary?: string +} + +export interface TextareaHTMLAttributes extends HTMLAttributes { + autocomplete?: string + autofocus?: Booleanish + cols?: Numberish + dirname?: string + disabled?: Booleanish + form?: string + maxlength?: Numberish + minlength?: Numberish + name?: string + placeholder?: string + readonly?: boolean + required?: Booleanish + rows?: Numberish + value?: string | string[] | number + wrap?: string +} + +export interface TdHTMLAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' + colspan?: Numberish + headers?: string + rowspan?: Numberish + scope?: string + valign?: 'top' | 'middle' | 'bottom' | 'baseline' +} + +export interface ThHTMLAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' + colspan?: Numberish + headers?: string + rowspan?: Numberish + scope?: string +} + +export interface TimeHTMLAttributes extends HTMLAttributes { + datetime?: string +} + +export interface TrackHTMLAttributes extends HTMLAttributes { + default?: Booleanish + kind?: string + label?: string + src?: string + srclang?: string +} + +export interface VideoHTMLAttributes extends MediaHTMLAttributes { + height?: Numberish + playsinline?: Booleanish + poster?: string + width?: Numberish + disablePictureInPicture?: Booleanish +} + +export interface WebViewHTMLAttributes extends HTMLAttributes { + allowfullscreen?: Booleanish + allowpopups?: Booleanish + autoFocus?: Booleanish + autosize?: Booleanish + blinkfeatures?: string + disableblinkfeatures?: string + disableguestresize?: Booleanish + disablewebsecurity?: Booleanish + guestinstance?: string + httpreferrer?: string + nodeintegration?: Booleanish + partition?: string + plugins?: Booleanish + preload?: string + src?: string + useragent?: string + webpreferences?: string +} + +export interface SVGAttributes extends AriaAttributes, EventHandlers { + innerHTML?: string + + /** + * SVG Styling Attributes + * @see https://www.w3.org/TR/SVG/styling.html#ElementSpecificStyling + */ + class?: any + style?: string | CSSProperties + + color?: string + height?: Numberish + id?: string + lang?: string + max?: Numberish + media?: string + method?: string + min?: Numberish + name?: string + target?: string + type?: string + width?: Numberish + + // Other HTML properties supported by SVG elements in browsers + role?: string + tabindex?: Numberish + + // SVG Specific attributes + 'accent-height'?: Numberish + accumulate?: 'none' | 'sum' + additive?: 'replace' | 'sum' + 'alignment-baseline'?: + | 'auto' + | 'baseline' + | 'before-edge' + | 'text-before-edge' + | 'middle' + | 'central' + | 'after-edge' + | 'text-after-edge' + | 'ideographic' + | 'alphabetic' + | 'hanging' + | 'mathematical' + | 'inherit' + allowReorder?: 'no' | 'yes' + alphabetic?: Numberish + amplitude?: Numberish + 'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated' + ascent?: Numberish + attributeName?: string + attributeType?: string + autoReverse?: Numberish + azimuth?: Numberish + baseFrequency?: Numberish + 'baseline-shift'?: Numberish + baseProfile?: Numberish + bbox?: Numberish + begin?: Numberish + bias?: Numberish + by?: Numberish + calcMode?: Numberish + 'cap-height'?: Numberish + clip?: Numberish + 'clip-path'?: string + clipPathUnits?: Numberish + 'clip-rule'?: Numberish + 'color-interpolation'?: Numberish + 'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' + 'color-profile'?: Numberish + 'color-rendering'?: Numberish + contentScriptType?: Numberish + contentStyleType?: Numberish + cursor?: Numberish + cx?: Numberish + cy?: Numberish + d?: string + decelerate?: Numberish + descent?: Numberish + diffuseConstant?: Numberish + direction?: Numberish + display?: Numberish + divisor?: Numberish + 'dominant-baseline'?: Numberish + dur?: Numberish + dx?: Numberish + dy?: Numberish + edgeMode?: Numberish + elevation?: Numberish + 'enable-background'?: Numberish + end?: Numberish + exponent?: Numberish + externalResourcesRequired?: Numberish + fill?: string + 'fill-opacity'?: Numberish + 'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit' + filter?: string + filterRes?: Numberish + filterUnits?: Numberish + 'flood-color'?: Numberish + 'flood-opacity'?: Numberish + focusable?: Numberish + 'font-family'?: string + 'font-size'?: Numberish + 'font-size-adjust'?: Numberish + 'font-stretch'?: Numberish + 'font-style'?: Numberish + 'font-variant'?: Numberish + 'font-weight'?: Numberish + format?: Numberish + from?: Numberish + fx?: Numberish + fy?: Numberish + g1?: Numberish + g2?: Numberish + 'glyph-name'?: Numberish + 'glyph-orientation-horizontal'?: Numberish + 'glyph-orientation-vertical'?: Numberish + glyphRef?: Numberish + gradientTransform?: string + gradientUnits?: string + hanging?: Numberish + 'horiz-adv-x'?: Numberish + 'horiz-origin-x'?: Numberish + href?: string + ideographic?: Numberish + 'image-rendering'?: Numberish + in2?: Numberish + in?: string + intercept?: Numberish + k1?: Numberish + k2?: Numberish + k3?: Numberish + k4?: Numberish + k?: Numberish + kernelMatrix?: Numberish + kernelUnitLength?: Numberish + kerning?: Numberish + keyPoints?: Numberish + keySplines?: Numberish + keyTimes?: Numberish + lengthAdjust?: Numberish + 'letter-spacing'?: Numberish + 'lighting-color'?: Numberish + limitingConeAngle?: Numberish + local?: Numberish + 'marker-end'?: string + markerHeight?: Numberish + 'marker-mid'?: string + 'marker-start'?: string + markerUnits?: Numberish + markerWidth?: Numberish + mask?: string + maskContentUnits?: Numberish + maskUnits?: Numberish + mathematical?: Numberish + mode?: Numberish + numOctaves?: Numberish + offset?: Numberish + opacity?: Numberish + operator?: Numberish + order?: Numberish + orient?: Numberish + orientation?: Numberish + origin?: Numberish + overflow?: Numberish + 'overline-position'?: Numberish + 'overline-thickness'?: Numberish + 'paint-order'?: Numberish + 'panose-1'?: Numberish + pathLength?: Numberish + patternContentUnits?: string + patternTransform?: Numberish + patternUnits?: string + 'pointer-events'?: Numberish + points?: string + pointsAtX?: Numberish + pointsAtY?: Numberish + pointsAtZ?: Numberish + preserveAlpha?: Numberish + preserveAspectRatio?: string + primitiveUnits?: Numberish + r?: Numberish + radius?: Numberish + refX?: Numberish + refY?: Numberish + renderingIntent?: Numberish + repeatCount?: Numberish + repeatDur?: Numberish + requiredExtensions?: Numberish + requiredFeatures?: Numberish + restart?: Numberish + result?: string + rotate?: Numberish + rx?: Numberish + ry?: Numberish + scale?: Numberish + seed?: Numberish + 'shape-rendering'?: Numberish + slope?: Numberish + spacing?: Numberish + specularConstant?: Numberish + specularExponent?: Numberish + speed?: Numberish + spreadMethod?: string + startOffset?: Numberish + stdDeviation?: Numberish + stemh?: Numberish + stemv?: Numberish + stitchTiles?: Numberish + 'stop-color'?: string + 'stop-opacity'?: Numberish + 'strikethrough-position'?: Numberish + 'strikethrough-thickness'?: Numberish + string?: Numberish + stroke?: string + 'stroke-dasharray'?: Numberish + 'stroke-dashoffset'?: Numberish + 'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit' + 'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit' + 'stroke-miterlimit'?: Numberish + 'stroke-opacity'?: Numberish + 'stroke-width'?: Numberish + surfaceScale?: Numberish + systemLanguage?: Numberish + tableValues?: Numberish + targetX?: Numberish + targetY?: Numberish + 'text-anchor'?: string + 'text-decoration'?: Numberish + textLength?: Numberish + 'text-rendering'?: Numberish + to?: Numberish + transform?: string + u1?: Numberish + u2?: Numberish + 'underline-position'?: Numberish + 'underline-thickness'?: Numberish + unicode?: Numberish + 'unicode-bidi'?: Numberish + 'unicode-range'?: Numberish + 'unitsPer-em'?: Numberish + 'v-alphabetic'?: Numberish + values?: string + 'vector-effect'?: Numberish + version?: string + 'vert-adv-y'?: Numberish + 'vert-origin-x'?: Numberish + 'vert-origin-y'?: Numberish + 'v-hanging'?: Numberish + 'v-ideographic'?: Numberish + viewBox?: string + viewTarget?: Numberish + visibility?: Numberish + 'v-mathematical'?: Numberish + widths?: Numberish + 'word-spacing'?: Numberish + 'writing-mode'?: Numberish + x1?: Numberish + x2?: Numberish + x?: Numberish + xChannelSelector?: string + 'x-height'?: Numberish + xlinkActuate?: string + xlinkArcrole?: string + xlinkHref?: string + xlinkRole?: string + xlinkShow?: string + xlinkTitle?: string + xlinkType?: string + xmlns?: string + y1?: Numberish + y2?: Numberish + y?: Numberish + yChannelSelector?: string + z?: Numberish + zoomAndPan?: string +} + +export interface IntrinsicElementAttributes { + a: AnchorHTMLAttributes + abbr: HTMLAttributes + address: HTMLAttributes + area: AreaHTMLAttributes + article: HTMLAttributes + aside: HTMLAttributes + audio: AudioHTMLAttributes + b: HTMLAttributes + base: BaseHTMLAttributes + bdi: HTMLAttributes + bdo: 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 + 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 + 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 + animateMotion: SVGAttributes + animateTransform: SVGAttributes + 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 +} + +export interface Events { + // clipboard events + onCopy: ClipboardEvent + onCut: ClipboardEvent + onPaste: ClipboardEvent + + // composition events + onCompositionend: CompositionEvent + onCompositionstart: CompositionEvent + onCompositionupdate: CompositionEvent + + // drag drop events + onDrag: DragEvent + onDragend: DragEvent + onDragenter: DragEvent + onDragexit: DragEvent + onDragleave: DragEvent + onDragover: DragEvent + onDragstart: DragEvent + onDrop: DragEvent + + // focus events + onFocus: FocusEvent + onFocusin: FocusEvent + onFocusout: FocusEvent + onBlur: FocusEvent + + // form events + onChange: Event + onBeforeinput: Event + onInput: Event + onReset: Event + onSubmit: Event + onInvalid: Event + + // image events + onLoad: Event + onError: Event + + // keyboard events + onKeydown: KeyboardEvent + onKeypress: KeyboardEvent + onKeyup: KeyboardEvent + + // mouse events + onAuxclick: MouseEvent + onClick: MouseEvent + onContextmenu: MouseEvent + onDblclick: MouseEvent + onMousedown: MouseEvent + onMouseenter: MouseEvent + onMouseleave: MouseEvent + onMousemove: MouseEvent + onMouseout: MouseEvent + onMouseover: MouseEvent + onMouseup: MouseEvent + + // media events + onAbort: Event + onCanplay: Event + onCanplaythrough: Event + onDurationchange: Event + onEmptied: Event + onEncrypted: Event + onEnded: Event + onLoadeddata: Event + onLoadedmetadata: Event + onLoadstart: Event + onPause: Event + onPlay: Event + onPlaying: Event + onProgress: Event + onRatechange: Event + onSeeked: Event + onSeeking: Event + onStalled: Event + onSuspend: Event + onTimeupdate: Event + onVolumechange: Event + onWaiting: Event + + // selection events + onSelect: Event + + // UI events + onScroll: UIEvent + + // touch events + onTouchcancel: TouchEvent + onTouchend: TouchEvent + onTouchmove: TouchEvent + onTouchstart: TouchEvent + + // pointer events + onPointerdown: PointerEvent + onPointermove: PointerEvent + onPointerup: PointerEvent + onPointercancel: PointerEvent + onPointerenter: PointerEvent + onPointerleave: PointerEvent + onPointerover: PointerEvent + onPointerout: PointerEvent + + // wheel events + onWheel: WheelEvent + + // animation events + onAnimationstart: AnimationEvent + onAnimationend: AnimationEvent + onAnimationiteration: AnimationEvent + + // transition events + onTransitionend: TransitionEvent + onTransitionstart: TransitionEvent +} + +type EventHandlers = { + [K in keyof E]?: E[K] extends (...args: any) => any + ? E[K] + : (payload: E[K]) => void +} diff --git a/packages/runtime-dom/types/jsx.d.ts b/packages/runtime-dom/types/jsx.d.ts new file mode 100644 index 00000000000..93b625f2806 --- /dev/null +++ b/packages/runtime-dom/types/jsx.d.ts @@ -0,0 +1,16 @@ +// Note: this will be removed from the runtime-dom package in 3.4 +// If you are using JSX and needs to augment the related interfaces, +// you should augment the `vue/jsx-runtime/dom` module instead. +// That is, instead of: +// declare module '@vue/runtime-dom' { +// export interface HTMLAttributes { +// ... +// } +// } +// You should do: +// declare module 'vue/jsx-runtime/dom' { +// export interface HTMLAttributes { +// ... +// } +// } +export * from '../jsx' diff --git a/packages/vue/jsx-runtime/dom.d.ts b/packages/vue/jsx-runtime/dom.d.ts index c4da2cdd08a..f57aef0a3a1 100644 --- a/packages/vue/jsx-runtime/dom.d.ts +++ b/packages/vue/jsx-runtime/dom.d.ts @@ -1,1321 +1 @@ -// Note: this file is auto concatenated to the end of the bundled d.ts during -// build. - -// This code is based on react definition in DefinitelyTyped published under the MIT license. -// Repository: https://github.com/DefinitelyTyped/DefinitelyTyped -// Path in the repository: types/react/index.d.ts -// -// Copyrights of original definition are: -// AssureSign -// Microsoft -// John Reilly -// Benoit Benezech -// Patricio Zavolinsky -// Digiguru -// Eric Anderson -// Dovydas Navickas -// Josh Rutherford -// Guilherme Hübner -// Ferdy Budhidharma -// Johann Rakotoharisoa -// Olivier Pascal -// Martin Hochel -// Frank Li -// Jessica Franco -// Saransh Kataria -// Kanitkorn Sujautra -// Sebastian Silbermann - -import * as CSS from 'csstype' - -export interface CSSProperties - extends CSS.Properties, - CSS.PropertiesHyphen { - /** - * The index signature was removed to enable closed typing for style - * using CSSType. You're able to use type assertion or module augmentation - * to add properties or an index signature of your own. - * - * For examples and more information, visit: - * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors - */ - [v: `--${string}`]: string | number | undefined -} - -type Booleanish = boolean | 'true' | 'false' -type Numberish = number | string - -// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ -interface AriaAttributes { - /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ - 'aria-activedescendant'?: string - /** 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 - /** - * 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' - /** 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 - /** - * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. - * @see aria-pressed @see aria-selected. - */ - 'aria-checked'?: Booleanish | 'mixed' - /** - * Defines the total number of columns in a table, grid, or treegrid. - * @see aria-colindex. - */ - 'aria-colcount'?: Numberish - /** - * 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'?: Numberish - /** - * 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'?: Numberish - /** - * Identifies the element (or elements) whose contents or presence are controlled by the current element. - * @see aria-owns. - */ - 'aria-controls'?: string - /** Indicates the element that represents the current item within a container or set of related elements. */ - 'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time' - /** - * Identifies the element (or elements) that describes the object. - * @see aria-labelledby - */ - 'aria-describedby'?: string - /** - * Identifies the element that provides a detailed, extended description for the object. - * @see aria-describedby. - */ - 'aria-details'?: string - /** - * 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 - /** - * 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' - /** - * Identifies the element that provides an error message for the object. - * @see aria-invalid @see aria-describedby. - */ - 'aria-errormessage'?: string - /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ - 'aria-expanded'?: Booleanish - /** - * 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 - /** - * Indicates an element's "grabbed" state in a drag-and-drop operation. - * @deprecated in ARIA 1.1 - */ - 'aria-grabbed'?: Booleanish - /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */ - 'aria-haspopup'?: Booleanish | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' - /** - * Indicates whether the element is exposed to an accessibility API. - * @see aria-disabled. - */ - 'aria-hidden'?: Booleanish - /** - * Indicates the entered value does not conform to the format expected by the application. - * @see aria-errormessage. - */ - 'aria-invalid'?: Booleanish | 'grammar' | 'spelling' - /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ - 'aria-keyshortcuts'?: string - /** - * Defines a string value that labels the current element. - * @see aria-labelledby. - */ - 'aria-label'?: string - /** - * Identifies the element (or elements) that labels the current element. - * @see aria-describedby. - */ - 'aria-labelledby'?: string - /** Defines the hierarchical level of an element within a structure. */ - 'aria-level'?: Numberish - /** 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' - /** Indicates whether an element is modal when displayed. */ - 'aria-modal'?: Booleanish - /** Indicates whether a text box accepts multiple lines of input or only a single line. */ - 'aria-multiline'?: Booleanish - /** Indicates that the user may select more than one item from the current selectable descendants. */ - 'aria-multiselectable'?: Booleanish - /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ - 'aria-orientation'?: 'horizontal' | 'vertical' - /** - * 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 - /** - * 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 - /** - * 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'?: Numberish - /** - * Indicates the current "pressed" state of toggle buttons. - * @see aria-checked @see aria-selected. - */ - 'aria-pressed'?: Booleanish | 'mixed' - /** - * Indicates that the element is not editable, but is otherwise operable. - * @see aria-disabled. - */ - 'aria-readonly'?: Booleanish - /** - * 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 text' | 'all' | 'removals' | 'text' - /** Indicates that user input is required on the element before a form may be submitted. */ - 'aria-required'?: Booleanish - /** Defines a human-readable, author-localized description for the role of an element. */ - 'aria-roledescription'?: string - /** - * Defines the total number of rows in a table, grid, or treegrid. - * @see aria-rowindex. - */ - 'aria-rowcount'?: Numberish - /** - * 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'?: Numberish - /** - * 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'?: Numberish - /** - * Indicates the current "selected" state of various widgets. - * @see aria-checked @see aria-pressed. - */ - 'aria-selected'?: Booleanish - /** - * 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'?: Numberish - /** Indicates if items in a table or grid are sorted in ascending or descending order. */ - 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' - /** Defines the maximum allowed value for a range widget. */ - 'aria-valuemax'?: Numberish - /** Defines the minimum allowed value for a range widget. */ - 'aria-valuemin'?: Numberish - /** - * Defines the current value for a range widget. - * @see aria-valuetext. - */ - 'aria-valuenow'?: Numberish - /** Defines the human readable text alternative of aria-valuenow for a range widget. */ - 'aria-valuetext'?: string -} - -// Vue's style normalization supports nested arrays -export type StyleValue = string | CSSProperties | Array - -export interface HTMLAttributes extends AriaAttributes, EventHandlers { - innerHTML?: string - - class?: any - style?: StyleValue - - // Standard HTML Attributes - accesskey?: string - contenteditable?: Booleanish | 'inherit' - contextmenu?: string - dir?: string - draggable?: Booleanish - hidden?: Booleanish - id?: string - lang?: string - placeholder?: string - spellcheck?: Booleanish - tabindex?: Numberish - title?: string - translate?: 'yes' | 'no' - - // Unknown - radiogroup?: string // , - - // WAI-ARIA - role?: string - - // RDFa Attributes - about?: string - datatype?: string - inlist?: any - prefix?: string - property?: string - resource?: string - typeof?: string - vocab?: string - - // Non-standard Attributes - autocapitalize?: string - autocorrect?: string - autosave?: string - color?: string - itemprop?: string - itemscope?: Booleanish - itemtype?: string - itemid?: string - itemref?: string - results?: Numberish - security?: string - unselectable?: 'on' | 'off' - - // 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' - /** - * 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 -} - -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?: any - href?: string - hreflang?: string - media?: string - ping?: string - rel?: string - target?: string - type?: string - referrerpolicy?: HTMLAttributeReferrerPolicy -} - -export interface AreaHTMLAttributes extends HTMLAttributes { - alt?: string - coords?: string - download?: any - href?: string - hreflang?: string - media?: string - referrerpolicy?: HTMLAttributeReferrerPolicy - rel?: string - shape?: string - target?: string -} - -export interface AudioHTMLAttributes extends MediaHTMLAttributes {} - -export interface BaseHTMLAttributes extends HTMLAttributes { - href?: string - target?: string -} - -export interface BlockquoteHTMLAttributes extends HTMLAttributes { - cite?: string -} - -export interface ButtonHTMLAttributes extends HTMLAttributes { - autofocus?: Booleanish - disabled?: Booleanish - form?: string - formaction?: string - formenctype?: string - formmethod?: string - formnovalidate?: Booleanish - formtarget?: string - name?: string - type?: 'submit' | 'reset' | 'button' - value?: string | string[] | number -} - -export interface CanvasHTMLAttributes extends HTMLAttributes { - height?: Numberish - width?: Numberish -} - -export interface ColHTMLAttributes extends HTMLAttributes { - span?: Numberish - width?: Numberish -} - -export interface ColgroupHTMLAttributes extends HTMLAttributes { - span?: Numberish -} - -export interface DataHTMLAttributes extends HTMLAttributes { - value?: string | string[] | number -} - -export interface DetailsHTMLAttributes extends HTMLAttributes { - open?: Booleanish -} - -export interface DelHTMLAttributes extends HTMLAttributes { - cite?: string - datetime?: string -} - -export interface DialogHTMLAttributes extends HTMLAttributes { - open?: Booleanish -} - -export interface EmbedHTMLAttributes extends HTMLAttributes { - height?: Numberish - src?: string - type?: string - width?: Numberish -} - -export interface FieldsetHTMLAttributes extends HTMLAttributes { - disabled?: Booleanish - form?: string - name?: string -} - -export interface FormHTMLAttributes extends HTMLAttributes { - acceptcharset?: string - action?: string - autocomplete?: string - enctype?: string - method?: string - name?: string - novalidate?: Booleanish - target?: string -} - -export interface HtmlHTMLAttributes extends HTMLAttributes { - manifest?: string -} - -export interface IframeHTMLAttributes extends HTMLAttributes { - allow?: string - allowfullscreen?: Booleanish - allowtransparency?: Booleanish - frameborder?: Numberish - height?: Numberish - marginheight?: Numberish - marginwidth?: Numberish - name?: string - referrerpolicy?: HTMLAttributeReferrerPolicy - sandbox?: string - scrolling?: string - seamless?: Booleanish - src?: string - srcdoc?: string - width?: Numberish -} - -export interface ImgHTMLAttributes extends HTMLAttributes { - alt?: string - crossorigin?: 'anonymous' | 'use-credentials' | '' - decoding?: 'async' | 'auto' | 'sync' - height?: Numberish - referrerpolicy?: HTMLAttributeReferrerPolicy - sizes?: string - src?: string - srcset?: string - usemap?: string - width?: Numberish -} - -export interface InsHTMLAttributes extends HTMLAttributes { - cite?: string - datetime?: string -} - -export interface InputHTMLAttributes extends HTMLAttributes { - accept?: string - alt?: string - autocomplete?: string - autofocus?: Booleanish - capture?: boolean | 'user' | 'environment' // https://www.w3.org/tr/html-media-capture/#the-capture-attribute - checked?: Booleanish | any[] | Set // for IDE v-model multi-checkbox support - crossorigin?: string - disabled?: Booleanish - form?: string - formaction?: string - formenctype?: string - formmethod?: string - formnovalidate?: Booleanish - formtarget?: string - height?: Numberish - indeterminate?: boolean - list?: string - max?: Numberish - maxlength?: Numberish - min?: Numberish - minlength?: Numberish - multiple?: Booleanish - name?: string - pattern?: string - placeholder?: string - readonly?: Booleanish - required?: Booleanish - size?: Numberish - src?: string - step?: Numberish - type?: string - value?: any // we support :value to be bound to anything w/ v-model - width?: Numberish -} - -export interface KeygenHTMLAttributes extends HTMLAttributes { - autofocus?: Booleanish - challenge?: string - disabled?: Booleanish - form?: string - keytype?: string - keyparams?: string - name?: string -} - -export interface LabelHTMLAttributes extends HTMLAttributes { - for?: string - form?: string -} - -export interface LiHTMLAttributes extends HTMLAttributes { - value?: string | string[] | number -} - -export interface LinkHTMLAttributes extends HTMLAttributes { - as?: string - crossorigin?: string - href?: string - hreflang?: string - integrity?: string - media?: string - referrerpolicy?: HTMLAttributeReferrerPolicy - rel?: string - sizes?: string - type?: string -} - -export interface MapHTMLAttributes extends HTMLAttributes { - name?: string -} - -export interface MenuHTMLAttributes extends HTMLAttributes { - type?: string -} - -export interface MediaHTMLAttributes extends HTMLAttributes { - autoplay?: Booleanish - controls?: Booleanish - controlslist?: string - crossorigin?: string - loop?: Booleanish - mediagroup?: string - muted?: Booleanish - playsinline?: Booleanish - preload?: string - src?: string -} - -export interface MetaHTMLAttributes extends HTMLAttributes { - charset?: string - content?: string - httpequiv?: string - name?: string -} - -export interface MeterHTMLAttributes extends HTMLAttributes { - form?: string - high?: Numberish - low?: Numberish - max?: Numberish - min?: Numberish - optimum?: Numberish - value?: string | string[] | number -} - -export interface QuoteHTMLAttributes extends HTMLAttributes { - cite?: string -} - -export interface ObjectHTMLAttributes extends HTMLAttributes { - classid?: string - data?: string - form?: string - height?: Numberish - name?: string - type?: string - usemap?: string - width?: Numberish - wmode?: string -} - -export interface OlHTMLAttributes extends HTMLAttributes { - reversed?: Booleanish - start?: Numberish - type?: '1' | 'a' | 'A' | 'i' | 'I' -} - -export interface OptgroupHTMLAttributes extends HTMLAttributes { - disabled?: Booleanish - label?: string -} - -export interface OptionHTMLAttributes extends HTMLAttributes { - disabled?: Booleanish - label?: string - selected?: Booleanish - value?: any // we support :value to be bound to anything w/ v-model -} - -export interface OutputHTMLAttributes extends HTMLAttributes { - for?: string - form?: string - name?: string -} - -export interface ParamHTMLAttributes extends HTMLAttributes { - name?: string - value?: string | string[] | number -} - -export interface ProgressHTMLAttributes extends HTMLAttributes { - max?: Numberish - value?: string | string[] | number -} - -export interface ScriptHTMLAttributes extends HTMLAttributes { - async?: Booleanish - charset?: string - crossorigin?: string - defer?: Booleanish - integrity?: string - nomodule?: Booleanish - referrerpolicy?: HTMLAttributeReferrerPolicy - nonce?: string - src?: string - type?: string -} - -export interface SelectHTMLAttributes extends HTMLAttributes { - autocomplete?: string - autofocus?: Booleanish - disabled?: Booleanish - form?: string - multiple?: Booleanish - name?: string - required?: Booleanish - size?: Numberish - value?: any // we support :value to be bound to anything w/ v-model -} - -export interface SourceHTMLAttributes extends HTMLAttributes { - media?: string - sizes?: string - src?: string - srcset?: string - type?: string -} - -export interface StyleHTMLAttributes extends HTMLAttributes { - media?: string - nonce?: string - scoped?: Booleanish - type?: string -} - -export interface TableHTMLAttributes extends HTMLAttributes { - cellpadding?: Numberish - cellspacing?: Numberish - summary?: string -} - -export interface TextareaHTMLAttributes extends HTMLAttributes { - autocomplete?: string - autofocus?: Booleanish - cols?: Numberish - dirname?: string - disabled?: Booleanish - form?: string - maxlength?: Numberish - minlength?: Numberish - name?: string - placeholder?: string - readonly?: boolean - required?: Booleanish - rows?: Numberish - value?: string | string[] | number - wrap?: string -} - -export interface TdHTMLAttributes extends HTMLAttributes { - align?: 'left' | 'center' | 'right' | 'justify' | 'char' - colspan?: Numberish - headers?: string - rowspan?: Numberish - scope?: string - valign?: 'top' | 'middle' | 'bottom' | 'baseline' -} - -export interface ThHTMLAttributes extends HTMLAttributes { - align?: 'left' | 'center' | 'right' | 'justify' | 'char' - colspan?: Numberish - headers?: string - rowspan?: Numberish - scope?: string -} - -export interface TimeHTMLAttributes extends HTMLAttributes { - datetime?: string -} - -export interface TrackHTMLAttributes extends HTMLAttributes { - default?: Booleanish - kind?: string - label?: string - src?: string - srclang?: string -} - -export interface VideoHTMLAttributes extends MediaHTMLAttributes { - height?: Numberish - playsinline?: Booleanish - poster?: string - width?: Numberish - disablePictureInPicture?: Booleanish -} - -export interface WebViewHTMLAttributes extends HTMLAttributes { - allowfullscreen?: Booleanish - allowpopups?: Booleanish - autoFocus?: Booleanish - autosize?: Booleanish - blinkfeatures?: string - disableblinkfeatures?: string - disableguestresize?: Booleanish - disablewebsecurity?: Booleanish - guestinstance?: string - httpreferrer?: string - nodeintegration?: Booleanish - partition?: string - plugins?: Booleanish - preload?: string - src?: string - useragent?: string - webpreferences?: string -} - -export interface SVGAttributes extends AriaAttributes, EventHandlers { - innerHTML?: string - - /** - * SVG Styling Attributes - * @see https://www.w3.org/TR/SVG/styling.html#ElementSpecificStyling - */ - class?: any - style?: string | CSSProperties - - color?: string - height?: Numberish - id?: string - lang?: string - max?: Numberish - media?: string - method?: string - min?: Numberish - name?: string - target?: string - type?: string - width?: Numberish - - // Other HTML properties supported by SVG elements in browsers - role?: string - tabindex?: Numberish - - // SVG Specific attributes - 'accent-height'?: Numberish - accumulate?: 'none' | 'sum' - additive?: 'replace' | 'sum' - 'alignment-baseline'?: - | 'auto' - | 'baseline' - | 'before-edge' - | 'text-before-edge' - | 'middle' - | 'central' - | 'after-edge' - | 'text-after-edge' - | 'ideographic' - | 'alphabetic' - | 'hanging' - | 'mathematical' - | 'inherit' - allowReorder?: 'no' | 'yes' - alphabetic?: Numberish - amplitude?: Numberish - 'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated' - ascent?: Numberish - attributeName?: string - attributeType?: string - autoReverse?: Numberish - azimuth?: Numberish - baseFrequency?: Numberish - 'baseline-shift'?: Numberish - baseProfile?: Numberish - bbox?: Numberish - begin?: Numberish - bias?: Numberish - by?: Numberish - calcMode?: Numberish - 'cap-height'?: Numberish - clip?: Numberish - 'clip-path'?: string - clipPathUnits?: Numberish - 'clip-rule'?: Numberish - 'color-interpolation'?: Numberish - 'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' - 'color-profile'?: Numberish - 'color-rendering'?: Numberish - contentScriptType?: Numberish - contentStyleType?: Numberish - cursor?: Numberish - cx?: Numberish - cy?: Numberish - d?: string - decelerate?: Numberish - descent?: Numberish - diffuseConstant?: Numberish - direction?: Numberish - display?: Numberish - divisor?: Numberish - 'dominant-baseline'?: Numberish - dur?: Numberish - dx?: Numberish - dy?: Numberish - edgeMode?: Numberish - elevation?: Numberish - 'enable-background'?: Numberish - end?: Numberish - exponent?: Numberish - externalResourcesRequired?: Numberish - fill?: string - 'fill-opacity'?: Numberish - 'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit' - filter?: string - filterRes?: Numberish - filterUnits?: Numberish - 'flood-color'?: Numberish - 'flood-opacity'?: Numberish - focusable?: Numberish - 'font-family'?: string - 'font-size'?: Numberish - 'font-size-adjust'?: Numberish - 'font-stretch'?: Numberish - 'font-style'?: Numberish - 'font-variant'?: Numberish - 'font-weight'?: Numberish - format?: Numberish - from?: Numberish - fx?: Numberish - fy?: Numberish - g1?: Numberish - g2?: Numberish - 'glyph-name'?: Numberish - 'glyph-orientation-horizontal'?: Numberish - 'glyph-orientation-vertical'?: Numberish - glyphRef?: Numberish - gradientTransform?: string - gradientUnits?: string - hanging?: Numberish - 'horiz-adv-x'?: Numberish - 'horiz-origin-x'?: Numberish - href?: string - ideographic?: Numberish - 'image-rendering'?: Numberish - in2?: Numberish - in?: string - intercept?: Numberish - k1?: Numberish - k2?: Numberish - k3?: Numberish - k4?: Numberish - k?: Numberish - kernelMatrix?: Numberish - kernelUnitLength?: Numberish - kerning?: Numberish - keyPoints?: Numberish - keySplines?: Numberish - keyTimes?: Numberish - lengthAdjust?: Numberish - 'letter-spacing'?: Numberish - 'lighting-color'?: Numberish - limitingConeAngle?: Numberish - local?: Numberish - 'marker-end'?: string - markerHeight?: Numberish - 'marker-mid'?: string - 'marker-start'?: string - markerUnits?: Numberish - markerWidth?: Numberish - mask?: string - maskContentUnits?: Numberish - maskUnits?: Numberish - mathematical?: Numberish - mode?: Numberish - numOctaves?: Numberish - offset?: Numberish - opacity?: Numberish - operator?: Numberish - order?: Numberish - orient?: Numberish - orientation?: Numberish - origin?: Numberish - overflow?: Numberish - 'overline-position'?: Numberish - 'overline-thickness'?: Numberish - 'paint-order'?: Numberish - 'panose-1'?: Numberish - pathLength?: Numberish - patternContentUnits?: string - patternTransform?: Numberish - patternUnits?: string - 'pointer-events'?: Numberish - points?: string - pointsAtX?: Numberish - pointsAtY?: Numberish - pointsAtZ?: Numberish - preserveAlpha?: Numberish - preserveAspectRatio?: string - primitiveUnits?: Numberish - r?: Numberish - radius?: Numberish - refX?: Numberish - refY?: Numberish - renderingIntent?: Numberish - repeatCount?: Numberish - repeatDur?: Numberish - requiredExtensions?: Numberish - requiredFeatures?: Numberish - restart?: Numberish - result?: string - rotate?: Numberish - rx?: Numberish - ry?: Numberish - scale?: Numberish - seed?: Numberish - 'shape-rendering'?: Numberish - slope?: Numberish - spacing?: Numberish - specularConstant?: Numberish - specularExponent?: Numberish - speed?: Numberish - spreadMethod?: string - startOffset?: Numberish - stdDeviation?: Numberish - stemh?: Numberish - stemv?: Numberish - stitchTiles?: Numberish - 'stop-color'?: string - 'stop-opacity'?: Numberish - 'strikethrough-position'?: Numberish - 'strikethrough-thickness'?: Numberish - string?: Numberish - stroke?: string - 'stroke-dasharray'?: Numberish - 'stroke-dashoffset'?: Numberish - 'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit' - 'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit' - 'stroke-miterlimit'?: Numberish - 'stroke-opacity'?: Numberish - 'stroke-width'?: Numberish - surfaceScale?: Numberish - systemLanguage?: Numberish - tableValues?: Numberish - targetX?: Numberish - targetY?: Numberish - 'text-anchor'?: string - 'text-decoration'?: Numberish - textLength?: Numberish - 'text-rendering'?: Numberish - to?: Numberish - transform?: string - u1?: Numberish - u2?: Numberish - 'underline-position'?: Numberish - 'underline-thickness'?: Numberish - unicode?: Numberish - 'unicode-bidi'?: Numberish - 'unicode-range'?: Numberish - 'unitsPer-em'?: Numberish - 'v-alphabetic'?: Numberish - values?: string - 'vector-effect'?: Numberish - version?: string - 'vert-adv-y'?: Numberish - 'vert-origin-x'?: Numberish - 'vert-origin-y'?: Numberish - 'v-hanging'?: Numberish - 'v-ideographic'?: Numberish - viewBox?: string - viewTarget?: Numberish - visibility?: Numberish - 'v-mathematical'?: Numberish - widths?: Numberish - 'word-spacing'?: Numberish - 'writing-mode'?: Numberish - x1?: Numberish - x2?: Numberish - x?: Numberish - xChannelSelector?: string - 'x-height'?: Numberish - xlinkActuate?: string - xlinkArcrole?: string - xlinkHref?: string - xlinkRole?: string - xlinkShow?: string - xlinkTitle?: string - xlinkType?: string - xmlns?: string - y1?: Numberish - y2?: Numberish - y?: Numberish - yChannelSelector?: string - z?: Numberish - zoomAndPan?: string -} - -export interface IntrinsicElementAttributes { - a: AnchorHTMLAttributes - abbr: HTMLAttributes - address: HTMLAttributes - area: AreaHTMLAttributes - article: HTMLAttributes - aside: HTMLAttributes - audio: AudioHTMLAttributes - b: HTMLAttributes - base: BaseHTMLAttributes - bdi: HTMLAttributes - bdo: 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 - 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 - 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 - animateMotion: SVGAttributes - animateTransform: SVGAttributes - 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 -} - -export interface Events { - // clipboard events - onCopy: ClipboardEvent - onCut: ClipboardEvent - onPaste: ClipboardEvent - - // composition events - onCompositionend: CompositionEvent - onCompositionstart: CompositionEvent - onCompositionupdate: CompositionEvent - - // drag drop events - onDrag: DragEvent - onDragend: DragEvent - onDragenter: DragEvent - onDragexit: DragEvent - onDragleave: DragEvent - onDragover: DragEvent - onDragstart: DragEvent - onDrop: DragEvent - - // focus events - onFocus: FocusEvent - onFocusin: FocusEvent - onFocusout: FocusEvent - onBlur: FocusEvent - - // form events - onChange: Event - onBeforeinput: Event - onInput: Event - onReset: Event - onSubmit: Event - onInvalid: Event - - // image events - onLoad: Event - onError: Event - - // keyboard events - onKeydown: KeyboardEvent - onKeypress: KeyboardEvent - onKeyup: KeyboardEvent - - // mouse events - onAuxclick: MouseEvent - onClick: MouseEvent - onContextmenu: MouseEvent - onDblclick: MouseEvent - onMousedown: MouseEvent - onMouseenter: MouseEvent - onMouseleave: MouseEvent - onMousemove: MouseEvent - onMouseout: MouseEvent - onMouseover: MouseEvent - onMouseup: MouseEvent - - // media events - onAbort: Event - onCanplay: Event - onCanplaythrough: Event - onDurationchange: Event - onEmptied: Event - onEncrypted: Event - onEnded: Event - onLoadeddata: Event - onLoadedmetadata: Event - onLoadstart: Event - onPause: Event - onPlay: Event - onPlaying: Event - onProgress: Event - onRatechange: Event - onSeeked: Event - onSeeking: Event - onStalled: Event - onSuspend: Event - onTimeupdate: Event - onVolumechange: Event - onWaiting: Event - - // selection events - onSelect: Event - - // UI events - onScroll: UIEvent - - // touch events - onTouchcancel: TouchEvent - onTouchend: TouchEvent - onTouchmove: TouchEvent - onTouchstart: TouchEvent - - // pointer events - onPointerdown: PointerEvent - onPointermove: PointerEvent - onPointerup: PointerEvent - onPointercancel: PointerEvent - onPointerenter: PointerEvent - onPointerleave: PointerEvent - onPointerover: PointerEvent - onPointerout: PointerEvent - - // wheel events - onWheel: WheelEvent - - // animation events - onAnimationstart: AnimationEvent - onAnimationend: AnimationEvent - onAnimationiteration: AnimationEvent - - // transition events - onTransitionend: TransitionEvent - onTransitionstart: TransitionEvent -} - -type EventHandlers = { - [K in keyof E]?: E[K] extends (...args: any) => any - ? E[K] - : (payload: E[K]) => void -} +export * from '@vue/runtime-dom/jsx' From 0dc1894050df2063d39d89d4e4c32d621908dffd Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 29 Mar 2023 14:01:39 +0800 Subject: [PATCH 05/11] fix: add `jsx.d.ts` to `files` --- packages/runtime-dom/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index a2a3f5b4db2..b0355dc8729 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -8,6 +8,7 @@ "unpkg": "dist/runtime-dom.global.js", "files": [ "index.js", + "jsx.d.ts", "dist" ], "sideEffects": false, From 241d222740eaff12ce6a2809b495d2c7d0f6e057 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 29 Mar 2023 15:58:43 +0800 Subject: [PATCH 06/11] fix(wip): move JSX DOM types back to `@vue/runtime-dom` Drops `vue/jsx-runtime/dom`. The previous commits didn't work because imported (and re-exported) types cannot be augmented. So I give up on the idea of moving the DOM types to `vue/jsx-runtime`. They don't pollute the global namespace anyway. There's still one caveat that I have to import the `IntrinsicElementAttributes` type from `@vue/runtime-dom/dist/runtime-dom` rather than using the package name as entry. Seems because in this monorepo, TypeScript always picks up the source file (`index.ts`) over the built file (`dist/runtime-dom.d.ts` as specified in the `types` field in `package.json`) --- packages/runtime-dom/jsx.d.ts | 1322 ------------------------- packages/runtime-dom/package.json | 1 - packages/runtime-dom/types/jsx.d.ts | 1337 +++++++++++++++++++++++++- packages/vue/jsx-runtime/dom.d.ts | 1 - packages/vue/jsx-runtime/index.d.ts | 7 +- packages/vue/jsx.d.ts | 9 +- packages/vue/types/jsx-register.d.ts | 2 - 7 files changed, 1331 insertions(+), 1348 deletions(-) delete mode 100644 packages/runtime-dom/jsx.d.ts delete mode 100644 packages/vue/jsx-runtime/dom.d.ts diff --git a/packages/runtime-dom/jsx.d.ts b/packages/runtime-dom/jsx.d.ts deleted file mode 100644 index ad6d94427c5..00000000000 --- a/packages/runtime-dom/jsx.d.ts +++ /dev/null @@ -1,1322 +0,0 @@ -// TODO: move to vue/jsx-runtime/dom in 3.4 -// Note: this file is auto concatenated to the end of the bundled d.ts during -// build. - -// This code is based on react definition in DefinitelyTyped published under the MIT license. -// Repository: https://github.com/DefinitelyTyped/DefinitelyTyped -// Path in the repository: types/react/index.d.ts -// -// Copyrights of original definition are: -// AssureSign -// Microsoft -// John Reilly -// Benoit Benezech -// Patricio Zavolinsky -// Digiguru -// Eric Anderson -// Dovydas Navickas -// Josh Rutherford -// Guilherme Hübner -// Ferdy Budhidharma -// Johann Rakotoharisoa -// Olivier Pascal -// Martin Hochel -// Frank Li -// Jessica Franco -// Saransh Kataria -// Kanitkorn Sujautra -// Sebastian Silbermann - -import * as CSS from 'csstype' - -export interface CSSProperties - extends CSS.Properties, - CSS.PropertiesHyphen { - /** - * The index signature was removed to enable closed typing for style - * using CSSType. You're able to use type assertion or module augmentation - * to add properties or an index signature of your own. - * - * For examples and more information, visit: - * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors - */ - [v: `--${string}`]: string | number | undefined -} - -type Booleanish = boolean | 'true' | 'false' -type Numberish = number | string - -// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ -interface AriaAttributes { - /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ - 'aria-activedescendant'?: string - /** 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 - /** - * 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' - /** 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 - /** - * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. - * @see aria-pressed @see aria-selected. - */ - 'aria-checked'?: Booleanish | 'mixed' - /** - * Defines the total number of columns in a table, grid, or treegrid. - * @see aria-colindex. - */ - 'aria-colcount'?: Numberish - /** - * 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'?: Numberish - /** - * 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'?: Numberish - /** - * Identifies the element (or elements) whose contents or presence are controlled by the current element. - * @see aria-owns. - */ - 'aria-controls'?: string - /** Indicates the element that represents the current item within a container or set of related elements. */ - 'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time' - /** - * Identifies the element (or elements) that describes the object. - * @see aria-labelledby - */ - 'aria-describedby'?: string - /** - * Identifies the element that provides a detailed, extended description for the object. - * @see aria-describedby. - */ - 'aria-details'?: string - /** - * 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 - /** - * 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' - /** - * Identifies the element that provides an error message for the object. - * @see aria-invalid @see aria-describedby. - */ - 'aria-errormessage'?: string - /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ - 'aria-expanded'?: Booleanish - /** - * 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 - /** - * Indicates an element's "grabbed" state in a drag-and-drop operation. - * @deprecated in ARIA 1.1 - */ - 'aria-grabbed'?: Booleanish - /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */ - 'aria-haspopup'?: Booleanish | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' - /** - * Indicates whether the element is exposed to an accessibility API. - * @see aria-disabled. - */ - 'aria-hidden'?: Booleanish - /** - * Indicates the entered value does not conform to the format expected by the application. - * @see aria-errormessage. - */ - 'aria-invalid'?: Booleanish | 'grammar' | 'spelling' - /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ - 'aria-keyshortcuts'?: string - /** - * Defines a string value that labels the current element. - * @see aria-labelledby. - */ - 'aria-label'?: string - /** - * Identifies the element (or elements) that labels the current element. - * @see aria-describedby. - */ - 'aria-labelledby'?: string - /** Defines the hierarchical level of an element within a structure. */ - 'aria-level'?: Numberish - /** 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' - /** Indicates whether an element is modal when displayed. */ - 'aria-modal'?: Booleanish - /** Indicates whether a text box accepts multiple lines of input or only a single line. */ - 'aria-multiline'?: Booleanish - /** Indicates that the user may select more than one item from the current selectable descendants. */ - 'aria-multiselectable'?: Booleanish - /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ - 'aria-orientation'?: 'horizontal' | 'vertical' - /** - * 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 - /** - * 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 - /** - * 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'?: Numberish - /** - * Indicates the current "pressed" state of toggle buttons. - * @see aria-checked @see aria-selected. - */ - 'aria-pressed'?: Booleanish | 'mixed' - /** - * Indicates that the element is not editable, but is otherwise operable. - * @see aria-disabled. - */ - 'aria-readonly'?: Booleanish - /** - * 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 text' | 'all' | 'removals' | 'text' - /** Indicates that user input is required on the element before a form may be submitted. */ - 'aria-required'?: Booleanish - /** Defines a human-readable, author-localized description for the role of an element. */ - 'aria-roledescription'?: string - /** - * Defines the total number of rows in a table, grid, or treegrid. - * @see aria-rowindex. - */ - 'aria-rowcount'?: Numberish - /** - * 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'?: Numberish - /** - * 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'?: Numberish - /** - * Indicates the current "selected" state of various widgets. - * @see aria-checked @see aria-pressed. - */ - 'aria-selected'?: Booleanish - /** - * 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'?: Numberish - /** Indicates if items in a table or grid are sorted in ascending or descending order. */ - 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' - /** Defines the maximum allowed value for a range widget. */ - 'aria-valuemax'?: Numberish - /** Defines the minimum allowed value for a range widget. */ - 'aria-valuemin'?: Numberish - /** - * Defines the current value for a range widget. - * @see aria-valuetext. - */ - 'aria-valuenow'?: Numberish - /** Defines the human readable text alternative of aria-valuenow for a range widget. */ - 'aria-valuetext'?: string -} - -// Vue's style normalization supports nested arrays -export type StyleValue = string | CSSProperties | Array - -export interface HTMLAttributes extends AriaAttributes, EventHandlers { - innerHTML?: string - - class?: any - style?: StyleValue - - // Standard HTML Attributes - accesskey?: string - contenteditable?: Booleanish | 'inherit' - contextmenu?: string - dir?: string - draggable?: Booleanish - hidden?: Booleanish - id?: string - lang?: string - placeholder?: string - spellcheck?: Booleanish - tabindex?: Numberish - title?: string - translate?: 'yes' | 'no' - - // Unknown - radiogroup?: string // , - - // WAI-ARIA - role?: string - - // RDFa Attributes - about?: string - datatype?: string - inlist?: any - prefix?: string - property?: string - resource?: string - typeof?: string - vocab?: string - - // Non-standard Attributes - autocapitalize?: string - autocorrect?: string - autosave?: string - color?: string - itemprop?: string - itemscope?: Booleanish - itemtype?: string - itemid?: string - itemref?: string - results?: Numberish - security?: string - unselectable?: 'on' | 'off' - - // 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' - /** - * 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 -} - -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?: any - href?: string - hreflang?: string - media?: string - ping?: string - rel?: string - target?: string - type?: string - referrerpolicy?: HTMLAttributeReferrerPolicy -} - -export interface AreaHTMLAttributes extends HTMLAttributes { - alt?: string - coords?: string - download?: any - href?: string - hreflang?: string - media?: string - referrerpolicy?: HTMLAttributeReferrerPolicy - rel?: string - shape?: string - target?: string -} - -export interface AudioHTMLAttributes extends MediaHTMLAttributes {} - -export interface BaseHTMLAttributes extends HTMLAttributes { - href?: string - target?: string -} - -export interface BlockquoteHTMLAttributes extends HTMLAttributes { - cite?: string -} - -export interface ButtonHTMLAttributes extends HTMLAttributes { - autofocus?: Booleanish - disabled?: Booleanish - form?: string - formaction?: string - formenctype?: string - formmethod?: string - formnovalidate?: Booleanish - formtarget?: string - name?: string - type?: 'submit' | 'reset' | 'button' - value?: string | string[] | number -} - -export interface CanvasHTMLAttributes extends HTMLAttributes { - height?: Numberish - width?: Numberish -} - -export interface ColHTMLAttributes extends HTMLAttributes { - span?: Numberish - width?: Numberish -} - -export interface ColgroupHTMLAttributes extends HTMLAttributes { - span?: Numberish -} - -export interface DataHTMLAttributes extends HTMLAttributes { - value?: string | string[] | number -} - -export interface DetailsHTMLAttributes extends HTMLAttributes { - open?: Booleanish -} - -export interface DelHTMLAttributes extends HTMLAttributes { - cite?: string - datetime?: string -} - -export interface DialogHTMLAttributes extends HTMLAttributes { - open?: Booleanish -} - -export interface EmbedHTMLAttributes extends HTMLAttributes { - height?: Numberish - src?: string - type?: string - width?: Numberish -} - -export interface FieldsetHTMLAttributes extends HTMLAttributes { - disabled?: Booleanish - form?: string - name?: string -} - -export interface FormHTMLAttributes extends HTMLAttributes { - acceptcharset?: string - action?: string - autocomplete?: string - enctype?: string - method?: string - name?: string - novalidate?: Booleanish - target?: string -} - -export interface HtmlHTMLAttributes extends HTMLAttributes { - manifest?: string -} - -export interface IframeHTMLAttributes extends HTMLAttributes { - allow?: string - allowfullscreen?: Booleanish - allowtransparency?: Booleanish - frameborder?: Numberish - height?: Numberish - marginheight?: Numberish - marginwidth?: Numberish - name?: string - referrerpolicy?: HTMLAttributeReferrerPolicy - sandbox?: string - scrolling?: string - seamless?: Booleanish - src?: string - srcdoc?: string - width?: Numberish -} - -export interface ImgHTMLAttributes extends HTMLAttributes { - alt?: string - crossorigin?: 'anonymous' | 'use-credentials' | '' - decoding?: 'async' | 'auto' | 'sync' - height?: Numberish - referrerpolicy?: HTMLAttributeReferrerPolicy - sizes?: string - src?: string - srcset?: string - usemap?: string - width?: Numberish -} - -export interface InsHTMLAttributes extends HTMLAttributes { - cite?: string - datetime?: string -} - -export interface InputHTMLAttributes extends HTMLAttributes { - accept?: string - alt?: string - autocomplete?: string - autofocus?: Booleanish - capture?: boolean | 'user' | 'environment' // https://www.w3.org/tr/html-media-capture/#the-capture-attribute - checked?: Booleanish | any[] | Set // for IDE v-model multi-checkbox support - crossorigin?: string - disabled?: Booleanish - form?: string - formaction?: string - formenctype?: string - formmethod?: string - formnovalidate?: Booleanish - formtarget?: string - height?: Numberish - indeterminate?: boolean - list?: string - max?: Numberish - maxlength?: Numberish - min?: Numberish - minlength?: Numberish - multiple?: Booleanish - name?: string - pattern?: string - placeholder?: string - readonly?: Booleanish - required?: Booleanish - size?: Numberish - src?: string - step?: Numberish - type?: string - value?: any // we support :value to be bound to anything w/ v-model - width?: Numberish -} - -export interface KeygenHTMLAttributes extends HTMLAttributes { - autofocus?: Booleanish - challenge?: string - disabled?: Booleanish - form?: string - keytype?: string - keyparams?: string - name?: string -} - -export interface LabelHTMLAttributes extends HTMLAttributes { - for?: string - form?: string -} - -export interface LiHTMLAttributes extends HTMLAttributes { - value?: string | string[] | number -} - -export interface LinkHTMLAttributes extends HTMLAttributes { - as?: string - crossorigin?: string - href?: string - hreflang?: string - integrity?: string - media?: string - referrerpolicy?: HTMLAttributeReferrerPolicy - rel?: string - sizes?: string - type?: string -} - -export interface MapHTMLAttributes extends HTMLAttributes { - name?: string -} - -export interface MenuHTMLAttributes extends HTMLAttributes { - type?: string -} - -export interface MediaHTMLAttributes extends HTMLAttributes { - autoplay?: Booleanish - controls?: Booleanish - controlslist?: string - crossorigin?: string - loop?: Booleanish - mediagroup?: string - muted?: Booleanish - playsinline?: Booleanish - preload?: string - src?: string -} - -export interface MetaHTMLAttributes extends HTMLAttributes { - charset?: string - content?: string - httpequiv?: string - name?: string -} - -export interface MeterHTMLAttributes extends HTMLAttributes { - form?: string - high?: Numberish - low?: Numberish - max?: Numberish - min?: Numberish - optimum?: Numberish - value?: string | string[] | number -} - -export interface QuoteHTMLAttributes extends HTMLAttributes { - cite?: string -} - -export interface ObjectHTMLAttributes extends HTMLAttributes { - classid?: string - data?: string - form?: string - height?: Numberish - name?: string - type?: string - usemap?: string - width?: Numberish - wmode?: string -} - -export interface OlHTMLAttributes extends HTMLAttributes { - reversed?: Booleanish - start?: Numberish - type?: '1' | 'a' | 'A' | 'i' | 'I' -} - -export interface OptgroupHTMLAttributes extends HTMLAttributes { - disabled?: Booleanish - label?: string -} - -export interface OptionHTMLAttributes extends HTMLAttributes { - disabled?: Booleanish - label?: string - selected?: Booleanish - value?: any // we support :value to be bound to anything w/ v-model -} - -export interface OutputHTMLAttributes extends HTMLAttributes { - for?: string - form?: string - name?: string -} - -export interface ParamHTMLAttributes extends HTMLAttributes { - name?: string - value?: string | string[] | number -} - -export interface ProgressHTMLAttributes extends HTMLAttributes { - max?: Numberish - value?: string | string[] | number -} - -export interface ScriptHTMLAttributes extends HTMLAttributes { - async?: Booleanish - charset?: string - crossorigin?: string - defer?: Booleanish - integrity?: string - nomodule?: Booleanish - referrerpolicy?: HTMLAttributeReferrerPolicy - nonce?: string - src?: string - type?: string -} - -export interface SelectHTMLAttributes extends HTMLAttributes { - autocomplete?: string - autofocus?: Booleanish - disabled?: Booleanish - form?: string - multiple?: Booleanish - name?: string - required?: Booleanish - size?: Numberish - value?: any // we support :value to be bound to anything w/ v-model -} - -export interface SourceHTMLAttributes extends HTMLAttributes { - media?: string - sizes?: string - src?: string - srcset?: string - type?: string -} - -export interface StyleHTMLAttributes extends HTMLAttributes { - media?: string - nonce?: string - scoped?: Booleanish - type?: string -} - -export interface TableHTMLAttributes extends HTMLAttributes { - cellpadding?: Numberish - cellspacing?: Numberish - summary?: string -} - -export interface TextareaHTMLAttributes extends HTMLAttributes { - autocomplete?: string - autofocus?: Booleanish - cols?: Numberish - dirname?: string - disabled?: Booleanish - form?: string - maxlength?: Numberish - minlength?: Numberish - name?: string - placeholder?: string - readonly?: boolean - required?: Booleanish - rows?: Numberish - value?: string | string[] | number - wrap?: string -} - -export interface TdHTMLAttributes extends HTMLAttributes { - align?: 'left' | 'center' | 'right' | 'justify' | 'char' - colspan?: Numberish - headers?: string - rowspan?: Numberish - scope?: string - valign?: 'top' | 'middle' | 'bottom' | 'baseline' -} - -export interface ThHTMLAttributes extends HTMLAttributes { - align?: 'left' | 'center' | 'right' | 'justify' | 'char' - colspan?: Numberish - headers?: string - rowspan?: Numberish - scope?: string -} - -export interface TimeHTMLAttributes extends HTMLAttributes { - datetime?: string -} - -export interface TrackHTMLAttributes extends HTMLAttributes { - default?: Booleanish - kind?: string - label?: string - src?: string - srclang?: string -} - -export interface VideoHTMLAttributes extends MediaHTMLAttributes { - height?: Numberish - playsinline?: Booleanish - poster?: string - width?: Numberish - disablePictureInPicture?: Booleanish -} - -export interface WebViewHTMLAttributes extends HTMLAttributes { - allowfullscreen?: Booleanish - allowpopups?: Booleanish - autoFocus?: Booleanish - autosize?: Booleanish - blinkfeatures?: string - disableblinkfeatures?: string - disableguestresize?: Booleanish - disablewebsecurity?: Booleanish - guestinstance?: string - httpreferrer?: string - nodeintegration?: Booleanish - partition?: string - plugins?: Booleanish - preload?: string - src?: string - useragent?: string - webpreferences?: string -} - -export interface SVGAttributes extends AriaAttributes, EventHandlers { - innerHTML?: string - - /** - * SVG Styling Attributes - * @see https://www.w3.org/TR/SVG/styling.html#ElementSpecificStyling - */ - class?: any - style?: string | CSSProperties - - color?: string - height?: Numberish - id?: string - lang?: string - max?: Numberish - media?: string - method?: string - min?: Numberish - name?: string - target?: string - type?: string - width?: Numberish - - // Other HTML properties supported by SVG elements in browsers - role?: string - tabindex?: Numberish - - // SVG Specific attributes - 'accent-height'?: Numberish - accumulate?: 'none' | 'sum' - additive?: 'replace' | 'sum' - 'alignment-baseline'?: - | 'auto' - | 'baseline' - | 'before-edge' - | 'text-before-edge' - | 'middle' - | 'central' - | 'after-edge' - | 'text-after-edge' - | 'ideographic' - | 'alphabetic' - | 'hanging' - | 'mathematical' - | 'inherit' - allowReorder?: 'no' | 'yes' - alphabetic?: Numberish - amplitude?: Numberish - 'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated' - ascent?: Numberish - attributeName?: string - attributeType?: string - autoReverse?: Numberish - azimuth?: Numberish - baseFrequency?: Numberish - 'baseline-shift'?: Numberish - baseProfile?: Numberish - bbox?: Numberish - begin?: Numberish - bias?: Numberish - by?: Numberish - calcMode?: Numberish - 'cap-height'?: Numberish - clip?: Numberish - 'clip-path'?: string - clipPathUnits?: Numberish - 'clip-rule'?: Numberish - 'color-interpolation'?: Numberish - 'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' - 'color-profile'?: Numberish - 'color-rendering'?: Numberish - contentScriptType?: Numberish - contentStyleType?: Numberish - cursor?: Numberish - cx?: Numberish - cy?: Numberish - d?: string - decelerate?: Numberish - descent?: Numberish - diffuseConstant?: Numberish - direction?: Numberish - display?: Numberish - divisor?: Numberish - 'dominant-baseline'?: Numberish - dur?: Numberish - dx?: Numberish - dy?: Numberish - edgeMode?: Numberish - elevation?: Numberish - 'enable-background'?: Numberish - end?: Numberish - exponent?: Numberish - externalResourcesRequired?: Numberish - fill?: string - 'fill-opacity'?: Numberish - 'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit' - filter?: string - filterRes?: Numberish - filterUnits?: Numberish - 'flood-color'?: Numberish - 'flood-opacity'?: Numberish - focusable?: Numberish - 'font-family'?: string - 'font-size'?: Numberish - 'font-size-adjust'?: Numberish - 'font-stretch'?: Numberish - 'font-style'?: Numberish - 'font-variant'?: Numberish - 'font-weight'?: Numberish - format?: Numberish - from?: Numberish - fx?: Numberish - fy?: Numberish - g1?: Numberish - g2?: Numberish - 'glyph-name'?: Numberish - 'glyph-orientation-horizontal'?: Numberish - 'glyph-orientation-vertical'?: Numberish - glyphRef?: Numberish - gradientTransform?: string - gradientUnits?: string - hanging?: Numberish - 'horiz-adv-x'?: Numberish - 'horiz-origin-x'?: Numberish - href?: string - ideographic?: Numberish - 'image-rendering'?: Numberish - in2?: Numberish - in?: string - intercept?: Numberish - k1?: Numberish - k2?: Numberish - k3?: Numberish - k4?: Numberish - k?: Numberish - kernelMatrix?: Numberish - kernelUnitLength?: Numberish - kerning?: Numberish - keyPoints?: Numberish - keySplines?: Numberish - keyTimes?: Numberish - lengthAdjust?: Numberish - 'letter-spacing'?: Numberish - 'lighting-color'?: Numberish - limitingConeAngle?: Numberish - local?: Numberish - 'marker-end'?: string - markerHeight?: Numberish - 'marker-mid'?: string - 'marker-start'?: string - markerUnits?: Numberish - markerWidth?: Numberish - mask?: string - maskContentUnits?: Numberish - maskUnits?: Numberish - mathematical?: Numberish - mode?: Numberish - numOctaves?: Numberish - offset?: Numberish - opacity?: Numberish - operator?: Numberish - order?: Numberish - orient?: Numberish - orientation?: Numberish - origin?: Numberish - overflow?: Numberish - 'overline-position'?: Numberish - 'overline-thickness'?: Numberish - 'paint-order'?: Numberish - 'panose-1'?: Numberish - pathLength?: Numberish - patternContentUnits?: string - patternTransform?: Numberish - patternUnits?: string - 'pointer-events'?: Numberish - points?: string - pointsAtX?: Numberish - pointsAtY?: Numberish - pointsAtZ?: Numberish - preserveAlpha?: Numberish - preserveAspectRatio?: string - primitiveUnits?: Numberish - r?: Numberish - radius?: Numberish - refX?: Numberish - refY?: Numberish - renderingIntent?: Numberish - repeatCount?: Numberish - repeatDur?: Numberish - requiredExtensions?: Numberish - requiredFeatures?: Numberish - restart?: Numberish - result?: string - rotate?: Numberish - rx?: Numberish - ry?: Numberish - scale?: Numberish - seed?: Numberish - 'shape-rendering'?: Numberish - slope?: Numberish - spacing?: Numberish - specularConstant?: Numberish - specularExponent?: Numberish - speed?: Numberish - spreadMethod?: string - startOffset?: Numberish - stdDeviation?: Numberish - stemh?: Numberish - stemv?: Numberish - stitchTiles?: Numberish - 'stop-color'?: string - 'stop-opacity'?: Numberish - 'strikethrough-position'?: Numberish - 'strikethrough-thickness'?: Numberish - string?: Numberish - stroke?: string - 'stroke-dasharray'?: Numberish - 'stroke-dashoffset'?: Numberish - 'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit' - 'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit' - 'stroke-miterlimit'?: Numberish - 'stroke-opacity'?: Numberish - 'stroke-width'?: Numberish - surfaceScale?: Numberish - systemLanguage?: Numberish - tableValues?: Numberish - targetX?: Numberish - targetY?: Numberish - 'text-anchor'?: string - 'text-decoration'?: Numberish - textLength?: Numberish - 'text-rendering'?: Numberish - to?: Numberish - transform?: string - u1?: Numberish - u2?: Numberish - 'underline-position'?: Numberish - 'underline-thickness'?: Numberish - unicode?: Numberish - 'unicode-bidi'?: Numberish - 'unicode-range'?: Numberish - 'unitsPer-em'?: Numberish - 'v-alphabetic'?: Numberish - values?: string - 'vector-effect'?: Numberish - version?: string - 'vert-adv-y'?: Numberish - 'vert-origin-x'?: Numberish - 'vert-origin-y'?: Numberish - 'v-hanging'?: Numberish - 'v-ideographic'?: Numberish - viewBox?: string - viewTarget?: Numberish - visibility?: Numberish - 'v-mathematical'?: Numberish - widths?: Numberish - 'word-spacing'?: Numberish - 'writing-mode'?: Numberish - x1?: Numberish - x2?: Numberish - x?: Numberish - xChannelSelector?: string - 'x-height'?: Numberish - xlinkActuate?: string - xlinkArcrole?: string - xlinkHref?: string - xlinkRole?: string - xlinkShow?: string - xlinkTitle?: string - xlinkType?: string - xmlns?: string - y1?: Numberish - y2?: Numberish - y?: Numberish - yChannelSelector?: string - z?: Numberish - zoomAndPan?: string -} - -export interface IntrinsicElementAttributes { - a: AnchorHTMLAttributes - abbr: HTMLAttributes - address: HTMLAttributes - area: AreaHTMLAttributes - article: HTMLAttributes - aside: HTMLAttributes - audio: AudioHTMLAttributes - b: HTMLAttributes - base: BaseHTMLAttributes - bdi: HTMLAttributes - bdo: 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 - 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 - 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 - animateMotion: SVGAttributes - animateTransform: SVGAttributes - 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 -} - -export interface Events { - // clipboard events - onCopy: ClipboardEvent - onCut: ClipboardEvent - onPaste: ClipboardEvent - - // composition events - onCompositionend: CompositionEvent - onCompositionstart: CompositionEvent - onCompositionupdate: CompositionEvent - - // drag drop events - onDrag: DragEvent - onDragend: DragEvent - onDragenter: DragEvent - onDragexit: DragEvent - onDragleave: DragEvent - onDragover: DragEvent - onDragstart: DragEvent - onDrop: DragEvent - - // focus events - onFocus: FocusEvent - onFocusin: FocusEvent - onFocusout: FocusEvent - onBlur: FocusEvent - - // form events - onChange: Event - onBeforeinput: Event - onInput: Event - onReset: Event - onSubmit: Event - onInvalid: Event - - // image events - onLoad: Event - onError: Event - - // keyboard events - onKeydown: KeyboardEvent - onKeypress: KeyboardEvent - onKeyup: KeyboardEvent - - // mouse events - onAuxclick: MouseEvent - onClick: MouseEvent - onContextmenu: MouseEvent - onDblclick: MouseEvent - onMousedown: MouseEvent - onMouseenter: MouseEvent - onMouseleave: MouseEvent - onMousemove: MouseEvent - onMouseout: MouseEvent - onMouseover: MouseEvent - onMouseup: MouseEvent - - // media events - onAbort: Event - onCanplay: Event - onCanplaythrough: Event - onDurationchange: Event - onEmptied: Event - onEncrypted: Event - onEnded: Event - onLoadeddata: Event - onLoadedmetadata: Event - onLoadstart: Event - onPause: Event - onPlay: Event - onPlaying: Event - onProgress: Event - onRatechange: Event - onSeeked: Event - onSeeking: Event - onStalled: Event - onSuspend: Event - onTimeupdate: Event - onVolumechange: Event - onWaiting: Event - - // selection events - onSelect: Event - - // UI events - onScroll: UIEvent - - // touch events - onTouchcancel: TouchEvent - onTouchend: TouchEvent - onTouchmove: TouchEvent - onTouchstart: TouchEvent - - // pointer events - onPointerdown: PointerEvent - onPointermove: PointerEvent - onPointerup: PointerEvent - onPointercancel: PointerEvent - onPointerenter: PointerEvent - onPointerleave: PointerEvent - onPointerover: PointerEvent - onPointerout: PointerEvent - - // wheel events - onWheel: WheelEvent - - // animation events - onAnimationstart: AnimationEvent - onAnimationend: AnimationEvent - onAnimationiteration: AnimationEvent - - // transition events - onTransitionend: TransitionEvent - onTransitionstart: TransitionEvent -} - -type EventHandlers = { - [K in keyof E]?: E[K] extends (...args: any) => any - ? E[K] - : (payload: E[K]) => void -} diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index b0355dc8729..a2a3f5b4db2 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -8,7 +8,6 @@ "unpkg": "dist/runtime-dom.global.js", "files": [ "index.js", - "jsx.d.ts", "dist" ], "sideEffects": false, diff --git a/packages/runtime-dom/types/jsx.d.ts b/packages/runtime-dom/types/jsx.d.ts index 93b625f2806..c4da2cdd08a 100644 --- a/packages/runtime-dom/types/jsx.d.ts +++ b/packages/runtime-dom/types/jsx.d.ts @@ -1,16 +1,1321 @@ -// Note: this will be removed from the runtime-dom package in 3.4 -// If you are using JSX and needs to augment the related interfaces, -// you should augment the `vue/jsx-runtime/dom` module instead. -// That is, instead of: -// declare module '@vue/runtime-dom' { -// export interface HTMLAttributes { -// ... -// } -// } -// You should do: -// declare module 'vue/jsx-runtime/dom' { -// export interface HTMLAttributes { -// ... -// } -// } -export * from '../jsx' +// Note: this file is auto concatenated to the end of the bundled d.ts during +// build. + +// This code is based on react definition in DefinitelyTyped published under the MIT license. +// Repository: https://github.com/DefinitelyTyped/DefinitelyTyped +// Path in the repository: types/react/index.d.ts +// +// Copyrights of original definition are: +// AssureSign +// Microsoft +// John Reilly +// Benoit Benezech +// Patricio Zavolinsky +// Digiguru +// Eric Anderson +// Dovydas Navickas +// Josh Rutherford +// Guilherme Hübner +// Ferdy Budhidharma +// Johann Rakotoharisoa +// Olivier Pascal +// Martin Hochel +// Frank Li +// Jessica Franco +// Saransh Kataria +// Kanitkorn Sujautra +// Sebastian Silbermann + +import * as CSS from 'csstype' + +export interface CSSProperties + extends CSS.Properties, + CSS.PropertiesHyphen { + /** + * The index signature was removed to enable closed typing for style + * using CSSType. You're able to use type assertion or module augmentation + * to add properties or an index signature of your own. + * + * For examples and more information, visit: + * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors + */ + [v: `--${string}`]: string | number | undefined +} + +type Booleanish = boolean | 'true' | 'false' +type Numberish = number | string + +// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ +interface AriaAttributes { + /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ + 'aria-activedescendant'?: string + /** 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 + /** + * 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' + /** 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 + /** + * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. + * @see aria-pressed @see aria-selected. + */ + 'aria-checked'?: Booleanish | 'mixed' + /** + * Defines the total number of columns in a table, grid, or treegrid. + * @see aria-colindex. + */ + 'aria-colcount'?: Numberish + /** + * 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'?: Numberish + /** + * 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'?: Numberish + /** + * Identifies the element (or elements) whose contents or presence are controlled by the current element. + * @see aria-owns. + */ + 'aria-controls'?: string + /** Indicates the element that represents the current item within a container or set of related elements. */ + 'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time' + /** + * Identifies the element (or elements) that describes the object. + * @see aria-labelledby + */ + 'aria-describedby'?: string + /** + * Identifies the element that provides a detailed, extended description for the object. + * @see aria-describedby. + */ + 'aria-details'?: string + /** + * 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 + /** + * 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' + /** + * Identifies the element that provides an error message for the object. + * @see aria-invalid @see aria-describedby. + */ + 'aria-errormessage'?: string + /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ + 'aria-expanded'?: Booleanish + /** + * 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 + /** + * Indicates an element's "grabbed" state in a drag-and-drop operation. + * @deprecated in ARIA 1.1 + */ + 'aria-grabbed'?: Booleanish + /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */ + 'aria-haspopup'?: Booleanish | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' + /** + * Indicates whether the element is exposed to an accessibility API. + * @see aria-disabled. + */ + 'aria-hidden'?: Booleanish + /** + * Indicates the entered value does not conform to the format expected by the application. + * @see aria-errormessage. + */ + 'aria-invalid'?: Booleanish | 'grammar' | 'spelling' + /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ + 'aria-keyshortcuts'?: string + /** + * Defines a string value that labels the current element. + * @see aria-labelledby. + */ + 'aria-label'?: string + /** + * Identifies the element (or elements) that labels the current element. + * @see aria-describedby. + */ + 'aria-labelledby'?: string + /** Defines the hierarchical level of an element within a structure. */ + 'aria-level'?: Numberish + /** 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' + /** Indicates whether an element is modal when displayed. */ + 'aria-modal'?: Booleanish + /** Indicates whether a text box accepts multiple lines of input or only a single line. */ + 'aria-multiline'?: Booleanish + /** Indicates that the user may select more than one item from the current selectable descendants. */ + 'aria-multiselectable'?: Booleanish + /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ + 'aria-orientation'?: 'horizontal' | 'vertical' + /** + * 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 + /** + * 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 + /** + * 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'?: Numberish + /** + * Indicates the current "pressed" state of toggle buttons. + * @see aria-checked @see aria-selected. + */ + 'aria-pressed'?: Booleanish | 'mixed' + /** + * Indicates that the element is not editable, but is otherwise operable. + * @see aria-disabled. + */ + 'aria-readonly'?: Booleanish + /** + * 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 text' | 'all' | 'removals' | 'text' + /** Indicates that user input is required on the element before a form may be submitted. */ + 'aria-required'?: Booleanish + /** Defines a human-readable, author-localized description for the role of an element. */ + 'aria-roledescription'?: string + /** + * Defines the total number of rows in a table, grid, or treegrid. + * @see aria-rowindex. + */ + 'aria-rowcount'?: Numberish + /** + * 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'?: Numberish + /** + * 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'?: Numberish + /** + * Indicates the current "selected" state of various widgets. + * @see aria-checked @see aria-pressed. + */ + 'aria-selected'?: Booleanish + /** + * 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'?: Numberish + /** Indicates if items in a table or grid are sorted in ascending or descending order. */ + 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' + /** Defines the maximum allowed value for a range widget. */ + 'aria-valuemax'?: Numberish + /** Defines the minimum allowed value for a range widget. */ + 'aria-valuemin'?: Numberish + /** + * Defines the current value for a range widget. + * @see aria-valuetext. + */ + 'aria-valuenow'?: Numberish + /** Defines the human readable text alternative of aria-valuenow for a range widget. */ + 'aria-valuetext'?: string +} + +// Vue's style normalization supports nested arrays +export type StyleValue = string | CSSProperties | Array + +export interface HTMLAttributes extends AriaAttributes, EventHandlers { + innerHTML?: string + + class?: any + style?: StyleValue + + // Standard HTML Attributes + accesskey?: string + contenteditable?: Booleanish | 'inherit' + contextmenu?: string + dir?: string + draggable?: Booleanish + hidden?: Booleanish + id?: string + lang?: string + placeholder?: string + spellcheck?: Booleanish + tabindex?: Numberish + title?: string + translate?: 'yes' | 'no' + + // Unknown + radiogroup?: string // , + + // WAI-ARIA + role?: string + + // RDFa Attributes + about?: string + datatype?: string + inlist?: any + prefix?: string + property?: string + resource?: string + typeof?: string + vocab?: string + + // Non-standard Attributes + autocapitalize?: string + autocorrect?: string + autosave?: string + color?: string + itemprop?: string + itemscope?: Booleanish + itemtype?: string + itemid?: string + itemref?: string + results?: Numberish + security?: string + unselectable?: 'on' | 'off' + + // 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' + /** + * 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 +} + +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?: any + href?: string + hreflang?: string + media?: string + ping?: string + rel?: string + target?: string + type?: string + referrerpolicy?: HTMLAttributeReferrerPolicy +} + +export interface AreaHTMLAttributes extends HTMLAttributes { + alt?: string + coords?: string + download?: any + href?: string + hreflang?: string + media?: string + referrerpolicy?: HTMLAttributeReferrerPolicy + rel?: string + shape?: string + target?: string +} + +export interface AudioHTMLAttributes extends MediaHTMLAttributes {} + +export interface BaseHTMLAttributes extends HTMLAttributes { + href?: string + target?: string +} + +export interface BlockquoteHTMLAttributes extends HTMLAttributes { + cite?: string +} + +export interface ButtonHTMLAttributes extends HTMLAttributes { + autofocus?: Booleanish + disabled?: Booleanish + form?: string + formaction?: string + formenctype?: string + formmethod?: string + formnovalidate?: Booleanish + formtarget?: string + name?: string + type?: 'submit' | 'reset' | 'button' + value?: string | string[] | number +} + +export interface CanvasHTMLAttributes extends HTMLAttributes { + height?: Numberish + width?: Numberish +} + +export interface ColHTMLAttributes extends HTMLAttributes { + span?: Numberish + width?: Numberish +} + +export interface ColgroupHTMLAttributes extends HTMLAttributes { + span?: Numberish +} + +export interface DataHTMLAttributes extends HTMLAttributes { + value?: string | string[] | number +} + +export interface DetailsHTMLAttributes extends HTMLAttributes { + open?: Booleanish +} + +export interface DelHTMLAttributes extends HTMLAttributes { + cite?: string + datetime?: string +} + +export interface DialogHTMLAttributes extends HTMLAttributes { + open?: Booleanish +} + +export interface EmbedHTMLAttributes extends HTMLAttributes { + height?: Numberish + src?: string + type?: string + width?: Numberish +} + +export interface FieldsetHTMLAttributes extends HTMLAttributes { + disabled?: Booleanish + form?: string + name?: string +} + +export interface FormHTMLAttributes extends HTMLAttributes { + acceptcharset?: string + action?: string + autocomplete?: string + enctype?: string + method?: string + name?: string + novalidate?: Booleanish + target?: string +} + +export interface HtmlHTMLAttributes extends HTMLAttributes { + manifest?: string +} + +export interface IframeHTMLAttributes extends HTMLAttributes { + allow?: string + allowfullscreen?: Booleanish + allowtransparency?: Booleanish + frameborder?: Numberish + height?: Numberish + marginheight?: Numberish + marginwidth?: Numberish + name?: string + referrerpolicy?: HTMLAttributeReferrerPolicy + sandbox?: string + scrolling?: string + seamless?: Booleanish + src?: string + srcdoc?: string + width?: Numberish +} + +export interface ImgHTMLAttributes extends HTMLAttributes { + alt?: string + crossorigin?: 'anonymous' | 'use-credentials' | '' + decoding?: 'async' | 'auto' | 'sync' + height?: Numberish + referrerpolicy?: HTMLAttributeReferrerPolicy + sizes?: string + src?: string + srcset?: string + usemap?: string + width?: Numberish +} + +export interface InsHTMLAttributes extends HTMLAttributes { + cite?: string + datetime?: string +} + +export interface InputHTMLAttributes extends HTMLAttributes { + accept?: string + alt?: string + autocomplete?: string + autofocus?: Booleanish + capture?: boolean | 'user' | 'environment' // https://www.w3.org/tr/html-media-capture/#the-capture-attribute + checked?: Booleanish | any[] | Set // for IDE v-model multi-checkbox support + crossorigin?: string + disabled?: Booleanish + form?: string + formaction?: string + formenctype?: string + formmethod?: string + formnovalidate?: Booleanish + formtarget?: string + height?: Numberish + indeterminate?: boolean + list?: string + max?: Numberish + maxlength?: Numberish + min?: Numberish + minlength?: Numberish + multiple?: Booleanish + name?: string + pattern?: string + placeholder?: string + readonly?: Booleanish + required?: Booleanish + size?: Numberish + src?: string + step?: Numberish + type?: string + value?: any // we support :value to be bound to anything w/ v-model + width?: Numberish +} + +export interface KeygenHTMLAttributes extends HTMLAttributes { + autofocus?: Booleanish + challenge?: string + disabled?: Booleanish + form?: string + keytype?: string + keyparams?: string + name?: string +} + +export interface LabelHTMLAttributes extends HTMLAttributes { + for?: string + form?: string +} + +export interface LiHTMLAttributes extends HTMLAttributes { + value?: string | string[] | number +} + +export interface LinkHTMLAttributes extends HTMLAttributes { + as?: string + crossorigin?: string + href?: string + hreflang?: string + integrity?: string + media?: string + referrerpolicy?: HTMLAttributeReferrerPolicy + rel?: string + sizes?: string + type?: string +} + +export interface MapHTMLAttributes extends HTMLAttributes { + name?: string +} + +export interface MenuHTMLAttributes extends HTMLAttributes { + type?: string +} + +export interface MediaHTMLAttributes extends HTMLAttributes { + autoplay?: Booleanish + controls?: Booleanish + controlslist?: string + crossorigin?: string + loop?: Booleanish + mediagroup?: string + muted?: Booleanish + playsinline?: Booleanish + preload?: string + src?: string +} + +export interface MetaHTMLAttributes extends HTMLAttributes { + charset?: string + content?: string + httpequiv?: string + name?: string +} + +export interface MeterHTMLAttributes extends HTMLAttributes { + form?: string + high?: Numberish + low?: Numberish + max?: Numberish + min?: Numberish + optimum?: Numberish + value?: string | string[] | number +} + +export interface QuoteHTMLAttributes extends HTMLAttributes { + cite?: string +} + +export interface ObjectHTMLAttributes extends HTMLAttributes { + classid?: string + data?: string + form?: string + height?: Numberish + name?: string + type?: string + usemap?: string + width?: Numberish + wmode?: string +} + +export interface OlHTMLAttributes extends HTMLAttributes { + reversed?: Booleanish + start?: Numberish + type?: '1' | 'a' | 'A' | 'i' | 'I' +} + +export interface OptgroupHTMLAttributes extends HTMLAttributes { + disabled?: Booleanish + label?: string +} + +export interface OptionHTMLAttributes extends HTMLAttributes { + disabled?: Booleanish + label?: string + selected?: Booleanish + value?: any // we support :value to be bound to anything w/ v-model +} + +export interface OutputHTMLAttributes extends HTMLAttributes { + for?: string + form?: string + name?: string +} + +export interface ParamHTMLAttributes extends HTMLAttributes { + name?: string + value?: string | string[] | number +} + +export interface ProgressHTMLAttributes extends HTMLAttributes { + max?: Numberish + value?: string | string[] | number +} + +export interface ScriptHTMLAttributes extends HTMLAttributes { + async?: Booleanish + charset?: string + crossorigin?: string + defer?: Booleanish + integrity?: string + nomodule?: Booleanish + referrerpolicy?: HTMLAttributeReferrerPolicy + nonce?: string + src?: string + type?: string +} + +export interface SelectHTMLAttributes extends HTMLAttributes { + autocomplete?: string + autofocus?: Booleanish + disabled?: Booleanish + form?: string + multiple?: Booleanish + name?: string + required?: Booleanish + size?: Numberish + value?: any // we support :value to be bound to anything w/ v-model +} + +export interface SourceHTMLAttributes extends HTMLAttributes { + media?: string + sizes?: string + src?: string + srcset?: string + type?: string +} + +export interface StyleHTMLAttributes extends HTMLAttributes { + media?: string + nonce?: string + scoped?: Booleanish + type?: string +} + +export interface TableHTMLAttributes extends HTMLAttributes { + cellpadding?: Numberish + cellspacing?: Numberish + summary?: string +} + +export interface TextareaHTMLAttributes extends HTMLAttributes { + autocomplete?: string + autofocus?: Booleanish + cols?: Numberish + dirname?: string + disabled?: Booleanish + form?: string + maxlength?: Numberish + minlength?: Numberish + name?: string + placeholder?: string + readonly?: boolean + required?: Booleanish + rows?: Numberish + value?: string | string[] | number + wrap?: string +} + +export interface TdHTMLAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' + colspan?: Numberish + headers?: string + rowspan?: Numberish + scope?: string + valign?: 'top' | 'middle' | 'bottom' | 'baseline' +} + +export interface ThHTMLAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' + colspan?: Numberish + headers?: string + rowspan?: Numberish + scope?: string +} + +export interface TimeHTMLAttributes extends HTMLAttributes { + datetime?: string +} + +export interface TrackHTMLAttributes extends HTMLAttributes { + default?: Booleanish + kind?: string + label?: string + src?: string + srclang?: string +} + +export interface VideoHTMLAttributes extends MediaHTMLAttributes { + height?: Numberish + playsinline?: Booleanish + poster?: string + width?: Numberish + disablePictureInPicture?: Booleanish +} + +export interface WebViewHTMLAttributes extends HTMLAttributes { + allowfullscreen?: Booleanish + allowpopups?: Booleanish + autoFocus?: Booleanish + autosize?: Booleanish + blinkfeatures?: string + disableblinkfeatures?: string + disableguestresize?: Booleanish + disablewebsecurity?: Booleanish + guestinstance?: string + httpreferrer?: string + nodeintegration?: Booleanish + partition?: string + plugins?: Booleanish + preload?: string + src?: string + useragent?: string + webpreferences?: string +} + +export interface SVGAttributes extends AriaAttributes, EventHandlers { + innerHTML?: string + + /** + * SVG Styling Attributes + * @see https://www.w3.org/TR/SVG/styling.html#ElementSpecificStyling + */ + class?: any + style?: string | CSSProperties + + color?: string + height?: Numberish + id?: string + lang?: string + max?: Numberish + media?: string + method?: string + min?: Numberish + name?: string + target?: string + type?: string + width?: Numberish + + // Other HTML properties supported by SVG elements in browsers + role?: string + tabindex?: Numberish + + // SVG Specific attributes + 'accent-height'?: Numberish + accumulate?: 'none' | 'sum' + additive?: 'replace' | 'sum' + 'alignment-baseline'?: + | 'auto' + | 'baseline' + | 'before-edge' + | 'text-before-edge' + | 'middle' + | 'central' + | 'after-edge' + | 'text-after-edge' + | 'ideographic' + | 'alphabetic' + | 'hanging' + | 'mathematical' + | 'inherit' + allowReorder?: 'no' | 'yes' + alphabetic?: Numberish + amplitude?: Numberish + 'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated' + ascent?: Numberish + attributeName?: string + attributeType?: string + autoReverse?: Numberish + azimuth?: Numberish + baseFrequency?: Numberish + 'baseline-shift'?: Numberish + baseProfile?: Numberish + bbox?: Numberish + begin?: Numberish + bias?: Numberish + by?: Numberish + calcMode?: Numberish + 'cap-height'?: Numberish + clip?: Numberish + 'clip-path'?: string + clipPathUnits?: Numberish + 'clip-rule'?: Numberish + 'color-interpolation'?: Numberish + 'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' + 'color-profile'?: Numberish + 'color-rendering'?: Numberish + contentScriptType?: Numberish + contentStyleType?: Numberish + cursor?: Numberish + cx?: Numberish + cy?: Numberish + d?: string + decelerate?: Numberish + descent?: Numberish + diffuseConstant?: Numberish + direction?: Numberish + display?: Numberish + divisor?: Numberish + 'dominant-baseline'?: Numberish + dur?: Numberish + dx?: Numberish + dy?: Numberish + edgeMode?: Numberish + elevation?: Numberish + 'enable-background'?: Numberish + end?: Numberish + exponent?: Numberish + externalResourcesRequired?: Numberish + fill?: string + 'fill-opacity'?: Numberish + 'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit' + filter?: string + filterRes?: Numberish + filterUnits?: Numberish + 'flood-color'?: Numberish + 'flood-opacity'?: Numberish + focusable?: Numberish + 'font-family'?: string + 'font-size'?: Numberish + 'font-size-adjust'?: Numberish + 'font-stretch'?: Numberish + 'font-style'?: Numberish + 'font-variant'?: Numberish + 'font-weight'?: Numberish + format?: Numberish + from?: Numberish + fx?: Numberish + fy?: Numberish + g1?: Numberish + g2?: Numberish + 'glyph-name'?: Numberish + 'glyph-orientation-horizontal'?: Numberish + 'glyph-orientation-vertical'?: Numberish + glyphRef?: Numberish + gradientTransform?: string + gradientUnits?: string + hanging?: Numberish + 'horiz-adv-x'?: Numberish + 'horiz-origin-x'?: Numberish + href?: string + ideographic?: Numberish + 'image-rendering'?: Numberish + in2?: Numberish + in?: string + intercept?: Numberish + k1?: Numberish + k2?: Numberish + k3?: Numberish + k4?: Numberish + k?: Numberish + kernelMatrix?: Numberish + kernelUnitLength?: Numberish + kerning?: Numberish + keyPoints?: Numberish + keySplines?: Numberish + keyTimes?: Numberish + lengthAdjust?: Numberish + 'letter-spacing'?: Numberish + 'lighting-color'?: Numberish + limitingConeAngle?: Numberish + local?: Numberish + 'marker-end'?: string + markerHeight?: Numberish + 'marker-mid'?: string + 'marker-start'?: string + markerUnits?: Numberish + markerWidth?: Numberish + mask?: string + maskContentUnits?: Numberish + maskUnits?: Numberish + mathematical?: Numberish + mode?: Numberish + numOctaves?: Numberish + offset?: Numberish + opacity?: Numberish + operator?: Numberish + order?: Numberish + orient?: Numberish + orientation?: Numberish + origin?: Numberish + overflow?: Numberish + 'overline-position'?: Numberish + 'overline-thickness'?: Numberish + 'paint-order'?: Numberish + 'panose-1'?: Numberish + pathLength?: Numberish + patternContentUnits?: string + patternTransform?: Numberish + patternUnits?: string + 'pointer-events'?: Numberish + points?: string + pointsAtX?: Numberish + pointsAtY?: Numberish + pointsAtZ?: Numberish + preserveAlpha?: Numberish + preserveAspectRatio?: string + primitiveUnits?: Numberish + r?: Numberish + radius?: Numberish + refX?: Numberish + refY?: Numberish + renderingIntent?: Numberish + repeatCount?: Numberish + repeatDur?: Numberish + requiredExtensions?: Numberish + requiredFeatures?: Numberish + restart?: Numberish + result?: string + rotate?: Numberish + rx?: Numberish + ry?: Numberish + scale?: Numberish + seed?: Numberish + 'shape-rendering'?: Numberish + slope?: Numberish + spacing?: Numberish + specularConstant?: Numberish + specularExponent?: Numberish + speed?: Numberish + spreadMethod?: string + startOffset?: Numberish + stdDeviation?: Numberish + stemh?: Numberish + stemv?: Numberish + stitchTiles?: Numberish + 'stop-color'?: string + 'stop-opacity'?: Numberish + 'strikethrough-position'?: Numberish + 'strikethrough-thickness'?: Numberish + string?: Numberish + stroke?: string + 'stroke-dasharray'?: Numberish + 'stroke-dashoffset'?: Numberish + 'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit' + 'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit' + 'stroke-miterlimit'?: Numberish + 'stroke-opacity'?: Numberish + 'stroke-width'?: Numberish + surfaceScale?: Numberish + systemLanguage?: Numberish + tableValues?: Numberish + targetX?: Numberish + targetY?: Numberish + 'text-anchor'?: string + 'text-decoration'?: Numberish + textLength?: Numberish + 'text-rendering'?: Numberish + to?: Numberish + transform?: string + u1?: Numberish + u2?: Numberish + 'underline-position'?: Numberish + 'underline-thickness'?: Numberish + unicode?: Numberish + 'unicode-bidi'?: Numberish + 'unicode-range'?: Numberish + 'unitsPer-em'?: Numberish + 'v-alphabetic'?: Numberish + values?: string + 'vector-effect'?: Numberish + version?: string + 'vert-adv-y'?: Numberish + 'vert-origin-x'?: Numberish + 'vert-origin-y'?: Numberish + 'v-hanging'?: Numberish + 'v-ideographic'?: Numberish + viewBox?: string + viewTarget?: Numberish + visibility?: Numberish + 'v-mathematical'?: Numberish + widths?: Numberish + 'word-spacing'?: Numberish + 'writing-mode'?: Numberish + x1?: Numberish + x2?: Numberish + x?: Numberish + xChannelSelector?: string + 'x-height'?: Numberish + xlinkActuate?: string + xlinkArcrole?: string + xlinkHref?: string + xlinkRole?: string + xlinkShow?: string + xlinkTitle?: string + xlinkType?: string + xmlns?: string + y1?: Numberish + y2?: Numberish + y?: Numberish + yChannelSelector?: string + z?: Numberish + zoomAndPan?: string +} + +export interface IntrinsicElementAttributes { + a: AnchorHTMLAttributes + abbr: HTMLAttributes + address: HTMLAttributes + area: AreaHTMLAttributes + article: HTMLAttributes + aside: HTMLAttributes + audio: AudioHTMLAttributes + b: HTMLAttributes + base: BaseHTMLAttributes + bdi: HTMLAttributes + bdo: 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 + 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 + 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 + animateMotion: SVGAttributes + animateTransform: SVGAttributes + 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 +} + +export interface Events { + // clipboard events + onCopy: ClipboardEvent + onCut: ClipboardEvent + onPaste: ClipboardEvent + + // composition events + onCompositionend: CompositionEvent + onCompositionstart: CompositionEvent + onCompositionupdate: CompositionEvent + + // drag drop events + onDrag: DragEvent + onDragend: DragEvent + onDragenter: DragEvent + onDragexit: DragEvent + onDragleave: DragEvent + onDragover: DragEvent + onDragstart: DragEvent + onDrop: DragEvent + + // focus events + onFocus: FocusEvent + onFocusin: FocusEvent + onFocusout: FocusEvent + onBlur: FocusEvent + + // form events + onChange: Event + onBeforeinput: Event + onInput: Event + onReset: Event + onSubmit: Event + onInvalid: Event + + // image events + onLoad: Event + onError: Event + + // keyboard events + onKeydown: KeyboardEvent + onKeypress: KeyboardEvent + onKeyup: KeyboardEvent + + // mouse events + onAuxclick: MouseEvent + onClick: MouseEvent + onContextmenu: MouseEvent + onDblclick: MouseEvent + onMousedown: MouseEvent + onMouseenter: MouseEvent + onMouseleave: MouseEvent + onMousemove: MouseEvent + onMouseout: MouseEvent + onMouseover: MouseEvent + onMouseup: MouseEvent + + // media events + onAbort: Event + onCanplay: Event + onCanplaythrough: Event + onDurationchange: Event + onEmptied: Event + onEncrypted: Event + onEnded: Event + onLoadeddata: Event + onLoadedmetadata: Event + onLoadstart: Event + onPause: Event + onPlay: Event + onPlaying: Event + onProgress: Event + onRatechange: Event + onSeeked: Event + onSeeking: Event + onStalled: Event + onSuspend: Event + onTimeupdate: Event + onVolumechange: Event + onWaiting: Event + + // selection events + onSelect: Event + + // UI events + onScroll: UIEvent + + // touch events + onTouchcancel: TouchEvent + onTouchend: TouchEvent + onTouchmove: TouchEvent + onTouchstart: TouchEvent + + // pointer events + onPointerdown: PointerEvent + onPointermove: PointerEvent + onPointerup: PointerEvent + onPointercancel: PointerEvent + onPointerenter: PointerEvent + onPointerleave: PointerEvent + onPointerover: PointerEvent + onPointerout: PointerEvent + + // wheel events + onWheel: WheelEvent + + // animation events + onAnimationstart: AnimationEvent + onAnimationend: AnimationEvent + onAnimationiteration: AnimationEvent + + // transition events + onTransitionend: TransitionEvent + onTransitionstart: TransitionEvent +} + +type EventHandlers = { + [K in keyof E]?: E[K] extends (...args: any) => any + ? E[K] + : (payload: E[K]) => void +} diff --git a/packages/vue/jsx-runtime/dom.d.ts b/packages/vue/jsx-runtime/dom.d.ts deleted file mode 100644 index f57aef0a3a1..00000000000 --- a/packages/vue/jsx-runtime/dom.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@vue/runtime-dom/jsx' diff --git a/packages/vue/jsx-runtime/index.d.ts b/packages/vue/jsx-runtime/index.d.ts index a05a7293da0..cfea7f832e7 100644 --- a/packages/vue/jsx-runtime/index.d.ts +++ b/packages/vue/jsx-runtime/index.d.ts @@ -1,5 +1,8 @@ -import { VNode, VNodeRef } from '@vue/runtime-dom' -import { IntrinsicElementAttributes } from './dom' +import type { + VNode, + VNodeRef, + IntrinsicElementAttributes +} from '@vue/runtime-dom/dist/runtime-dom' export type ReservedProps = { key?: string | number | symbol diff --git a/packages/vue/jsx.d.ts b/packages/vue/jsx.d.ts index 947a9904419..1cf06d71755 100644 --- a/packages/vue/jsx.d.ts +++ b/packages/vue/jsx.d.ts @@ -1,9 +1,10 @@ // global JSX namespace registration // somehow we have to copy=pase the jsx-runtime types here to make TypeScript happy -import { VNode, VNodeRef } from '@vue/runtime-dom' -import { IntrinsicElementAttributes } from './jsx-runtime/dom' - -export * from './jsx-runtime/dom' +import type { + VNode, + VNodeRef, + IntrinsicElementAttributes +} from '@vue/runtime-dom/dist/runtime-dom' export type ReservedProps = { key?: string | number | symbol diff --git a/packages/vue/types/jsx-register.d.ts b/packages/vue/types/jsx-register.d.ts index af5d5f29023..a626f798c2a 100644 --- a/packages/vue/types/jsx-register.d.ts +++ b/packages/vue/types/jsx-register.d.ts @@ -2,5 +2,3 @@ // imports the global JSX namespace registration for compat. // TODO: remove in 3.4 import '../jsx' - -export * from '../jsx-runtime/dom' From 429717f3d959cbd2d13f1e81e4c6bff387773902 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 Mar 2023 17:44:57 +0800 Subject: [PATCH 07/11] wip: save --- packages/vue/types/jsx-register.d.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/vue/types/jsx-register.d.ts b/packages/vue/types/jsx-register.d.ts index af5d5f29023..a626f798c2a 100644 --- a/packages/vue/types/jsx-register.d.ts +++ b/packages/vue/types/jsx-register.d.ts @@ -2,5 +2,3 @@ // imports the global JSX namespace registration for compat. // TODO: remove in 3.4 import '../jsx' - -export * from '../jsx-runtime/dom' From 042e9d7f243e375090983cee5194c31285f3601d Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 Mar 2023 17:52:26 +0800 Subject: [PATCH 08/11] refactor: move shared types --- packages/runtime-dom/types/jsx.d.ts | 12 ++++++++++++ packages/vue/jsx-runtime/index.d.ts | 16 +++------------- packages/vue/jsx.d.ts | 16 +++------------- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/packages/runtime-dom/types/jsx.d.ts b/packages/runtime-dom/types/jsx.d.ts index c4da2cdd08a..1f910727038 100644 --- a/packages/runtime-dom/types/jsx.d.ts +++ b/packages/runtime-dom/types/jsx.d.ts @@ -1319,3 +1319,15 @@ type EventHandlers = { ? E[K] : (payload: E[K]) => void } + +export type ReservedProps = { + key?: string | number | symbol + ref?: VNodeRef + ref_for?: boolean + ref_key?: string +} + +export type NativeElements = { + [K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] & + ReservedProps +} diff --git a/packages/vue/jsx-runtime/index.d.ts b/packages/vue/jsx-runtime/index.d.ts index cfea7f832e7..7d1c6ef78a8 100644 --- a/packages/vue/jsx-runtime/index.d.ts +++ b/packages/vue/jsx-runtime/index.d.ts @@ -1,21 +1,11 @@ import type { VNode, VNodeRef, - IntrinsicElementAttributes + IntrinsicElementAttributes, + ReservedProps, + NativeElements } from '@vue/runtime-dom/dist/runtime-dom' -export type ReservedProps = { - key?: string | number | symbol - ref?: VNodeRef - ref_for?: boolean - ref_key?: string -} - -export type NativeElements = { - [K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] & - ReservedProps -} - /** * JSX namespace for usage with @jsxImportsSource directive * when ts compilerOptions.jsx is 'react-jsx' or 'react-jsxdev' diff --git a/packages/vue/jsx.d.ts b/packages/vue/jsx.d.ts index 1cf06d71755..06af115b834 100644 --- a/packages/vue/jsx.d.ts +++ b/packages/vue/jsx.d.ts @@ -3,21 +3,11 @@ import type { VNode, VNodeRef, - IntrinsicElementAttributes + IntrinsicElementAttributes, + ReservedProps, + NativeElements } from '@vue/runtime-dom/dist/runtime-dom' -export type ReservedProps = { - key?: string | number | symbol - ref?: VNodeRef - ref_for?: boolean - ref_key?: string -} - -export type NativeElements = { - [K in keyof IntrinsicElementAttributes]: IntrinsicElementAttributes[K] & - ReservedProps -} - declare global { namespace JSX { export interface Element extends VNode {} From 1e04aae53cf6ae1448098931e6ae81a2c638a541 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 Mar 2023 17:58:33 +0800 Subject: [PATCH 09/11] fix: VNodeRef --- packages/runtime-dom/types/jsx.d.ts | 2 ++ packages/vue/jsx-runtime/index.d.ts | 1 - packages/vue/jsx.d.ts | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/runtime-dom/types/jsx.d.ts b/packages/runtime-dom/types/jsx.d.ts index 1f910727038..d103278c6e6 100644 --- a/packages/runtime-dom/types/jsx.d.ts +++ b/packages/runtime-dom/types/jsx.d.ts @@ -1320,6 +1320,8 @@ type EventHandlers = { : (payload: E[K]) => void } +import { VNodeRef } from '@vue/runtime-core' + export type ReservedProps = { key?: string | number | symbol ref?: VNodeRef diff --git a/packages/vue/jsx-runtime/index.d.ts b/packages/vue/jsx-runtime/index.d.ts index 7d1c6ef78a8..e259c470122 100644 --- a/packages/vue/jsx-runtime/index.d.ts +++ b/packages/vue/jsx-runtime/index.d.ts @@ -1,6 +1,5 @@ import type { VNode, - VNodeRef, IntrinsicElementAttributes, ReservedProps, NativeElements diff --git a/packages/vue/jsx.d.ts b/packages/vue/jsx.d.ts index 06af115b834..52c1fd127a4 100644 --- a/packages/vue/jsx.d.ts +++ b/packages/vue/jsx.d.ts @@ -2,7 +2,6 @@ // somehow we have to copy=pase the jsx-runtime types here to make TypeScript happy import type { VNode, - VNodeRef, IntrinsicElementAttributes, ReservedProps, NativeElements From ba9a2d5df154aa167fa22d18a6ad0ce2038f87d7 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 Mar 2023 18:03:29 +0800 Subject: [PATCH 10/11] refactor: move jsx to source --- packages/runtime-dom/src/index.ts | 2 ++ packages/runtime-dom/{types/jsx.d.ts => src/jsx.ts} | 0 packages/vue/jsx-runtime/index.d.ts | 2 +- packages/vue/jsx.d.ts | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) rename packages/runtime-dom/{types/jsx.d.ts => src/jsx.ts} (100%) diff --git a/packages/runtime-dom/src/index.ts b/packages/runtime-dom/src/index.ts index 19b2ce51abe..354cc4c5bf5 100644 --- a/packages/runtime-dom/src/index.ts +++ b/packages/runtime-dom/src/index.ts @@ -252,3 +252,5 @@ export const initDirectivesForSSR = __SSR__ // re-export everything from core // h, Component, reactivity API, nextTick, flags & types export * from '@vue/runtime-core' + +export * from './jsx' diff --git a/packages/runtime-dom/types/jsx.d.ts b/packages/runtime-dom/src/jsx.ts similarity index 100% rename from packages/runtime-dom/types/jsx.d.ts rename to packages/runtime-dom/src/jsx.ts diff --git a/packages/vue/jsx-runtime/index.d.ts b/packages/vue/jsx-runtime/index.d.ts index e259c470122..a44382cfbb1 100644 --- a/packages/vue/jsx-runtime/index.d.ts +++ b/packages/vue/jsx-runtime/index.d.ts @@ -3,7 +3,7 @@ import type { IntrinsicElementAttributes, ReservedProps, NativeElements -} from '@vue/runtime-dom/dist/runtime-dom' +} from '@vue/runtime-dom' /** * JSX namespace for usage with @jsxImportsSource directive diff --git a/packages/vue/jsx.d.ts b/packages/vue/jsx.d.ts index 52c1fd127a4..afc1039e46d 100644 --- a/packages/vue/jsx.d.ts +++ b/packages/vue/jsx.d.ts @@ -5,7 +5,7 @@ import type { IntrinsicElementAttributes, ReservedProps, NativeElements -} from '@vue/runtime-dom/dist/runtime-dom' +} from '@vue/runtime-dom' declare global { namespace JSX { From 08fd197d4a32750907744347d04280274ec7d975 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 Mar 2023 18:19:24 +0800 Subject: [PATCH 11/11] build: fix dts rewrite to avoid exporting non-exported types --- rollup.dts.config.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/rollup.dts.config.js b/rollup.dts.config.js index 84a6138b44b..ca811d349d5 100644 --- a/rollup.dts.config.js +++ b/rollup.dts.config.js @@ -88,7 +88,21 @@ function patchTypes(pkg) { return false } + const isExported = new Set() const shouldRemoveExport = new Set() + + // pass 0: check all exported types + for (const node of ast.program.body) { + if (node.type === 'ExportNamedDeclaration' && !node.source) { + for (let i = 0; i < node.specifiers.length; i++) { + const spec = node.specifiers[i] + if (spec.type === 'ExportSpecifier') { + isExported.add(spec.local.name) + } + } + } + } + // pass 1: remove internals + add exports for (const node of ast.program.body) { if ( @@ -96,10 +110,13 @@ function patchTypes(pkg) { node.type === 'TSInterfaceDeclaration') && !node.id.name.startsWith(`_`) ) { - shouldRemoveExport.add(node.id.name) + const name = node.id.name + shouldRemoveExport.add(name) if (!removeInternal(node)) { - // @ts-ignore - s.prependLeft(node.start, `export `) + if (isExported.has(name)) { + // @ts-ignore + s.prependLeft(node.start, `export `) + } // traverse further for internal properties if (node.type === 'TSInterfaceDeclaration') { node.body.body.forEach(removeInternal)