diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/element-attributes/expectedv2.json b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/element-attributes/expectedv2.json index c39d0a9e7..f6c59f911 100644 --- a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/element-attributes/expectedv2.json +++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/element-attributes/expectedv2.json @@ -3,7 +3,7 @@ "range": { "start": { "line": 9, "character": 5 }, "end": { "line": 9, "character": 19 } }, "severity": 1, "source": "ts", - "message": "Argument of type '{ \"this-is\": string; }' is not assignable to parameter of type 'HTMLProps'.\n Object literal may only specify known properties, and '\"this-is\"' does not exist in type 'HTMLProps'.", + "message": "Argument of type '{ \"this-is\": string; }' is not assignable to parameter of type 'HTMLAttributes<...> & EventsWithColon> & svelteHTML.HTMLAttributes<...>'.\n Object literal may only specify known properties, and '\"this-is\"' does not exist in type 'HTMLAttributes<...> & EventsWithColon> & svelteHTML.HTMLAttributes<...>'.", "code": 2345, "tags": [] }, @@ -11,7 +11,7 @@ "range": { "start": { "line": 10, "character": 6 }, "end": { "line": 10, "character": 9 } }, "severity": 1, "source": "ts", - "message": "Argument of type '{ bar: string; }' is not assignable to parameter of type 'HTMLProps'.\n Object literal may only specify known properties, and 'bar' does not exist in type 'HTMLProps'.", + "message": "Argument of type '{ bar: string; }' is not assignable to parameter of type 'HTMLAttributes<...> & EventsWithColon> & svelteHTML.HTMLAttributes<...>'.\n Object literal may only specify known properties, and 'bar' does not exist in type 'HTMLAttributes<...> & EventsWithColon> & svelteHTML.HTMLAttributes<...>'.", "code": 2345, "tags": [] } diff --git a/packages/svelte2tsx/svelte-html-do-not-use.d.ts b/packages/svelte2tsx/svelte-html-do-not-use.d.ts new file mode 100644 index 000000000..8a85f1302 --- /dev/null +++ b/packages/svelte2tsx/svelte-html-do-not-use.d.ts @@ -0,0 +1,1582 @@ +// DO NOT USE THESE TYPINGS DIRECTLY IN YOUR PROJECTS! These are here only for a short time and will be moved some place official eventually. +// Type definitions for Svelte HTML, based on JSX React 18 typings +// Original Project/Authors: +// Type definitions for React 18.0 +// Project: http://facebook.github.io/react/ +// Definitions by: Asana +// AssureSign +// Microsoft +// John Reilly +// Benoit Benezech +// Patricio Zavolinsky +// 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 +// Kyle Scully +// Cong Zhang +// Dimitri Mitropoulos +// JongChan Choi +// Victor Magalhães +// Dale Tan +// Priyanshu Rav +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.8 + +// Note: We also allow `null` as a valid value because Svelte treats this the same as `undefined` + +type Booleanish = boolean | 'true' | 'false'; + +// +// Event Handler Types +// ---------------------------------------------------------------------- + +type EventHandler = +(event: E & { currentTarget: EventTarget & T}) => any; + +export type ClipboardEventHandler = EventHandler; +export type CompositionEventHandler = EventHandler; +export type DragEventHandler = EventHandler; +export type FocusEventHandler = EventHandler; +export type FormEventHandler = EventHandler; +export type ChangeEventHandler = EventHandler; +export type KeyboardEventHandler = EventHandler; +export type MouseEventHandler = EventHandler; +export type TouchEventHandler = EventHandler; +export type PointerEventHandler = EventHandler; +export type UIEventHandler = EventHandler; +export type WheelEventHandler = EventHandler; +export type AnimationEventHandler = EventHandler; +export type TransitionEventHandler = EventHandler; +export type MessageEventHandler = EventHandler; + +// +// DOM Attributes +// ---------------------------------------------------------------------- + +export interface DOMAttributes { + // Clipboard Events + 'on:copy'?: ClipboardEventHandler | undefined | null; + 'on:cut'?: ClipboardEventHandler | undefined | null; + 'on:paste'?: ClipboardEventHandler | undefined | null; + + // Composition Events + 'on:compositionend'?: CompositionEventHandler | undefined | null; + 'on:compositionstart'?: CompositionEventHandler | undefined | null; + 'on:compositionupdate'?: CompositionEventHandler | undefined | null; + + // Focus Events + 'on:focus'?: FocusEventHandler | undefined | null; + 'on:focusin'?: FocusEventHandler | undefined | null; + 'on:focusout'?: FocusEventHandler | undefined | null; + 'on:blur'?: FocusEventHandler | undefined | null; + + // Form Events + 'on:change'?: FormEventHandler | undefined | null; + 'on:beforeinput'?: EventHandler | undefined | null; + 'on:input'?: FormEventHandler | undefined | null; + 'on:reset'?: FormEventHandler | undefined | null; + 'on:submit'?: EventHandler | undefined | null; // TODO make this SubmitEvent once we require TS>=4.4 + 'on:invalid'?: EventHandler | undefined | null; + + + // Image Events + 'on:load'?: EventHandler | undefined | null; + 'on:error'?: EventHandler | undefined | null; // also a Media Event + + // Detail Events + 'on:toggle'?: EventHandler | undefined | null; + + // Keyboard Events + 'on:keydown'?: KeyboardEventHandler | undefined | null; + 'on:keypress'?: KeyboardEventHandler | undefined | null; + 'on:keyup'?: KeyboardEventHandler | undefined | null; + + // Media Events + 'on:abort'?: EventHandler | undefined | null; + 'on:canplay'?: EventHandler | undefined | null; + 'on:canplaythrough'?: EventHandler | undefined | null; + 'on:cuechange'?: EventHandler | undefined | null; + 'on:durationchange'?: EventHandler | undefined | null; + 'on:emptied'?: EventHandler | undefined | null; + 'on:encrypted'?: EventHandler | undefined | null; + 'on:ended'?: EventHandler | undefined | null; + 'on:loadeddata'?: EventHandler | undefined | null; + 'on:loadedmetadata'?: EventHandler | undefined | null; + 'on:loadstart'?: EventHandler | undefined | null; + 'on:pause'?: EventHandler | undefined | null; + 'on:play'?: EventHandler | undefined | null; + 'on:playing'?: EventHandler | undefined | null; + 'on:progress'?: EventHandler | undefined | null; + 'on:ratechange'?: EventHandler | undefined | null; + 'on:seeked'?: EventHandler | undefined | null; + 'on:seeking'?: EventHandler | undefined | null; + 'on:stalled'?: EventHandler | undefined | null; + 'on:suspend'?: EventHandler | undefined | null; + 'on:timeupdate'?: EventHandler | undefined | null; + 'on:volumechange'?: EventHandler | undefined | null; + 'on:waiting'?: EventHandler | undefined | null; + + // MouseEvents + 'on:auxclick'?: MouseEventHandler | undefined | null; + 'on:click'?: MouseEventHandler | undefined | null; + 'on:contextmenu'?: MouseEventHandler | undefined | null; + 'on:dblclick'?: MouseEventHandler | undefined | null; + 'on:drag'?: DragEventHandler | undefined | null; + 'on:dragend'?: DragEventHandler | undefined | null; + 'on:dragenter'?: DragEventHandler | undefined | null; + 'on:dragexit'?: DragEventHandler | undefined | null; + 'on:dragleave'?: DragEventHandler | undefined | null; + 'on:dragover'?: DragEventHandler | undefined | null; + 'on:dragstart'?: DragEventHandler | undefined | null; + 'on:drop'?: DragEventHandler | undefined | null; + 'on:mousedown'?: MouseEventHandler | undefined | null; + 'on:mouseenter'?: MouseEventHandler | undefined | null; + 'on:mouseleave'?: MouseEventHandler | undefined | null; + 'on:mousemove'?: MouseEventHandler | undefined | null; + 'on:mouseout'?: MouseEventHandler | undefined | null; + 'on:mouseover'?: MouseEventHandler | undefined | null; + 'on:mouseup'?: MouseEventHandler | undefined | null; + + // Selection Events + 'on:select'?: EventHandler | undefined | null; + 'on:selectionchange'?: EventHandler | undefined | null; + 'on:selectstart'?: EventHandler | undefined | null; + + // Touch Events + 'on:touchcancel'?: TouchEventHandler | undefined | null; + 'on:touchend'?: TouchEventHandler | undefined | null; + 'on:touchmove'?: TouchEventHandler | undefined | null; + 'on:touchstart'?: TouchEventHandler | undefined | null; + + // Pointer Events + 'on:gotpointercapture'?: PointerEventHandler | undefined | null; + 'on:pointercancel'?: PointerEventHandler | undefined | null; + 'on:pointerdown'?: PointerEventHandler | undefined | null; + 'on:pointerenter'?: PointerEventHandler | undefined | null; + 'on:pointerleave'?: PointerEventHandler | undefined | null; + 'on:pointermove'?: PointerEventHandler | undefined | null; + 'on:pointerout'?: PointerEventHandler | undefined | null; + 'on:pointerover'?: PointerEventHandler | undefined | null; + 'on:pointerup'?: PointerEventHandler | undefined | null; + 'on:lostpointercapture'?: PointerEventHandler | undefined | null; + + // UI Events + 'on:scroll'?: UIEventHandler | undefined | null; + 'on:resize'?: UIEventHandler | undefined | null; + + // Wheel Events + 'on:wheel'?: WheelEventHandler | undefined | null; + + // Animation Events + 'on:animationstart'?: AnimationEventHandler | undefined | null; + 'on:animationend'?: AnimationEventHandler | undefined | null; + 'on:animationiteration'?: AnimationEventHandler | undefined | null; + + // Transition Events + 'on:transitionstart'?: TransitionEventHandler | undefined | null; + 'on:transitionrun'?: TransitionEventHandler | undefined | null; + 'on:transitionend'?: TransitionEventHandler | undefined | null; + 'on:transitioncancel'?: TransitionEventHandler | undefined | null; + + // Svelte Transition Events + 'on:outrostart'?: EventHandler, T> | undefined | null; + 'on:outroend'?: EventHandler, T> | undefined | null; + 'on:introstart'?: EventHandler, T> | undefined | null; + 'on:introend'?: EventHandler, T> | undefined | null; + + // Message Events + 'on:message'?: MessageEventHandler | undefined | null; + 'on:messageerror'?: MessageEventHandler | undefined | null; + + // Global Events + 'on:cancel'?: EventHandler | undefined | null; + 'on:close'?: EventHandler | undefined | null; + 'on:fullscreenchange'?: EventHandler | undefined | null; + 'on:fullscreenerror'?: EventHandler | undefined | null; +} + +// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/ +export interface AriaAttributes { + /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */ + 'aria-activedescendant'?: string | undefined | null; + /** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */ + 'aria-atomic'?: Booleanish | undefined | null; + /** + * Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be + * presented if they are made. + */ + 'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both' | undefined | null; + /** Indicates an element is being modified and that assistive technologies MAY want to wait until the modifications are complete before exposing them to the user. */ + 'aria-busy'?: Booleanish | undefined | null; + /** + * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. + * @see aria-pressed @see aria-selected. + */ + 'aria-checked'?: boolean | 'false' | 'mixed' | 'true' | undefined | null; + /** + * Defines the total number of columns in a table, grid, or treegrid. + * @see aria-colindex. + */ + 'aria-colcount'?: number | undefined | null; + /** + * Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid. + * @see aria-colcount @see aria-colspan. + */ + 'aria-colindex'?: number | undefined | null; + /** + * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid. + * @see aria-colindex @see aria-rowspan. + */ + 'aria-colspan'?: number | undefined | null; + /** + * Identifies the element (or elements) whose contents or presence are controlled by the current element. + * @see aria-owns. + */ + 'aria-controls'?: string | undefined | null; + /** Indicates the element that represents the current item within a container or set of related elements. */ + 'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time' | undefined | null; + /** + * Identifies the element (or elements) that describes the object. + * @see aria-labelledby + */ + 'aria-describedby'?: string | undefined | null; + /** + * Identifies the element that provides a detailed, extended description for the object. + * @see aria-describedby. + */ + 'aria-details'?: string | undefined | null; + /** + * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. + * @see aria-hidden @see aria-readonly. + */ + 'aria-disabled'?: Booleanish | undefined | null; + /** + * Indicates what functions can be performed when a dragged object is released on the drop target. + * @deprecated in ARIA 1.1 + */ + 'aria-dropeffect'?: 'none' | 'copy' | 'execute' | 'link' | 'move' | 'popup' | undefined | null; + /** + * Identifies the element that provides an error message for the object. + * @see aria-invalid @see aria-describedby. + */ + 'aria-errormessage'?: string | undefined | null; + /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */ + 'aria-expanded'?: Booleanish | undefined | null; + /** + * Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion, + * allows assistive technology to override the general default of reading in document source order. + */ + 'aria-flowto'?: string | undefined | null; + /** + * Indicates an element's "grabbed" state in a drag-and-drop operation. + * @deprecated in ARIA 1.1 + */ + 'aria-grabbed'?: Booleanish | undefined | null; + /** 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' | undefined | null; + /** + * Indicates whether the element is exposed to an accessibility API. + * @see aria-disabled. + */ + 'aria-hidden'?: Booleanish | undefined | null; + /** + * Indicates the entered value does not conform to the format expected by the application. + * @see aria-errormessage. + */ + 'aria-invalid'?: Booleanish | 'grammar' | 'spelling' | undefined | null; + /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */ + 'aria-keyshortcuts'?: string | undefined | null; + /** + * Defines a string value that labels the current element. + * @see aria-labelledby. + */ + 'aria-label'?: string | undefined | null; + /** + * Identifies the element (or elements) that labels the current element. + * @see aria-describedby. + */ + 'aria-labelledby'?: string | undefined | null; + /** Defines the hierarchical level of an element within a structure. */ + 'aria-level'?: number | undefined | null; + /** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */ + 'aria-live'?: 'off' | 'assertive' | 'polite' | undefined | null; + /** Indicates whether an element is modal when displayed. */ + 'aria-modal'?: Booleanish | undefined | null; + /** Indicates whether a text box accepts multiple lines of input or only a single line. */ + 'aria-multiline'?: Booleanish | undefined | null; + /** Indicates that the user may select more than one item from the current selectable descendants. */ + 'aria-multiselectable'?: Booleanish | undefined | null; + /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */ + 'aria-orientation'?: 'horizontal' | 'vertical' | undefined | null; + /** + * Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship + * between DOM elements where the DOM hierarchy cannot be used to represent the relationship. + * @see aria-controls. + */ + 'aria-owns'?: string | undefined | null; + /** + * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. + * A hint could be a sample value or a brief description of the expected format. + */ + 'aria-placeholder'?: string | undefined | null; + /** + * Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. + * @see aria-setsize. + */ + 'aria-posinset'?: number | undefined | null; + /** + * Indicates the current "pressed" state of toggle buttons. + * @see aria-checked @see aria-selected. + */ + 'aria-pressed'?: boolean | 'false' | 'mixed' | 'true' | undefined | null; + /** + * Indicates that the element is not editable, but is otherwise operable. + * @see aria-disabled. + */ + 'aria-readonly'?: Booleanish | undefined | null; + /** + * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. + * @see aria-atomic. + */ + 'aria-relevant'?: 'additions' | 'additions removals' | 'additions text' | 'all' | 'removals' | 'removals additions' | 'removals text' | 'text' | 'text additions' | 'text removals' | undefined | null; + /** Indicates that user input is required on the element before a form may be submitted. */ + 'aria-required'?: Booleanish | undefined | null; + /** Defines a human-readable, author-localized description for the role of an element. */ + 'aria-roledescription'?: string | undefined | null; + /** + * Defines the total number of rows in a table, grid, or treegrid. + * @see aria-rowindex. + */ + 'aria-rowcount'?: number | undefined | null; + /** + * Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid. + * @see aria-rowcount @see aria-rowspan. + */ + 'aria-rowindex'?: number | undefined | null; + /** + * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid. + * @see aria-rowindex @see aria-colspan. + */ + 'aria-rowspan'?: number | undefined | null; + /** + * Indicates the current "selected" state of various widgets. + * @see aria-checked @see aria-pressed. + */ + 'aria-selected'?: Booleanish | undefined | null; + /** + * Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. + * @see aria-posinset. + */ + 'aria-setsize'?: number | undefined | null; + /** Indicates if items in a table or grid are sorted in ascending or descending order. */ + 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other' | undefined | null; + /** Defines the maximum allowed value for a range widget. */ + 'aria-valuemax'?: number | undefined | null; + /** Defines the minimum allowed value for a range widget. */ + 'aria-valuemin'?: number | undefined | null; + /** + * Defines the current value for a range widget. + * @see aria-valuetext. + */ + 'aria-valuenow'?: number | undefined | null; + /** Defines the human readable text alternative of aria-valuenow for a range widget. */ + 'aria-valuetext'?: string | undefined | null; +} + +// All the WAI-ARIA 1.1 role attribute values from https://www.w3.org/TR/wai-aria-1.1/#role_definitions +export type AriaRole = + | 'alert' + | 'alertdialog' + | 'application' + | 'article' + | 'banner' + | 'button' + | 'cell' + | 'checkbox' + | 'columnheader' + | 'combobox' + | 'complementary' + | 'contentinfo' + | 'definition' + | 'dialog' + | 'directory' + | 'document' + | 'feed' + | 'figure' + | 'form' + | 'grid' + | 'gridcell' + | 'group' + | 'heading' + | 'img' + | 'link' + | 'list' + | 'listbox' + | 'listitem' + | 'log' + | 'main' + | 'marquee' + | 'math' + | 'menu' + | 'menubar' + | 'menuitem' + | 'menuitemcheckbox' + | 'menuitemradio' + | 'navigation' + | 'none' + | 'note' + | 'option' + | 'presentation' + | 'progressbar' + | 'radio' + | 'radiogroup' + | 'region' + | 'row' + | 'rowgroup' + | 'rowheader' + | 'scrollbar' + | 'search' + | 'searchbox' + | 'separator' + | 'slider' + | 'spinbutton' + | 'status' + | 'switch' + | 'tab' + | 'table' + | 'tablist' + | 'tabpanel' + | 'term' + | 'textbox' + | 'timer' + | 'toolbar' + | 'tooltip' + | 'tree' + | 'treegrid' + | 'treeitem' + | (string & {}); + +export interface HTMLAttributes extends AriaAttributes, DOMAttributes { + // Standard HTML Attributes + accesskey?: string | undefined | null; + autofocus?: boolean | undefined | null; + class?: string | undefined | null; + contenteditable?: Booleanish | 'inherit' | undefined | null; + contextmenu?: string | undefined | null; + dir?: string | undefined | null; + draggable?: Booleanish | undefined | null; + enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined | null; + hidden?: boolean | undefined | null; + id?: string | undefined | null; + lang?: string | undefined | null; + placeholder?: string | undefined | null; + slot?: string | undefined | null; + spellcheck?: Booleanish | undefined | null; + style?: string | undefined | null; + tabindex?: number | undefined | null; + title?: string | undefined | null; + translate?: 'yes' | 'no' | '' | undefined | null; + inert?: boolean | undefined | null; + + // Unknown + radiogroup?: string | undefined | null; // , + + // WAI-ARIA + role?: AriaRole | undefined | null; + + // RDFa Attributes + about?: string | undefined | null; + datatype?: string | undefined | null; + inlist?: any; + prefix?: string | undefined | null; + property?: string | undefined | null; + resource?: string | undefined | null; + typeof?: string | undefined | null; + vocab?: string | undefined | null; + + // Non-standard Attributes + autocapitalize?: string | undefined | null; + autocorrect?: string | undefined | null; + autosave?: string | undefined | null; + color?: string | undefined | null; + itemprop?: string | undefined | null; + itemscope?: boolean | undefined | null; + itemtype?: string | undefined | null; + itemid?: string | undefined | null; + itemref?: string | undefined | null; + results?: number | undefined | null; + security?: string | undefined | null; + unselectable?: 'on' | 'off' | undefined | null; + + // Living Standard + /** + * Hints at the type of data that might be entered by the user while editing the element or its contents + * @see https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute + */ + inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search' | undefined | null; + /** + * Specify that a standard HTML element should behave like a defined custom built-in element + * @see https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is + */ + is?: string | undefined | null; + + /** + * Elements with the contenteditable attribute support innerHTML and textContent bindings. + */ + 'bind:innerHTML'?: string | undefined | null; + /** + * Elements with the contenteditable attribute support innerHTML and textContent bindings. + */ + 'bind:textContent'?: string | undefined | null; +} + +export type HTMLAttributeAnchorTarget = + | '_self' + | '_blank' + | '_parent' + | '_top' + | (string & {}); + +export interface HTMLAnchorAttributes extends HTMLAttributes { + download?: any; + href?: string | undefined | null; + hreflang?: string | undefined | null; + media?: string | undefined | null; + ping?: string | undefined | null; + rel?: string | undefined | null; + target?: HTMLAttributeAnchorTarget | undefined | null; + type?: string | undefined | null; + referrerpolicy?: ReferrerPolicy | undefined | null; + + // SvelteKit + 'sveltekit:noscroll'?: true | undefined | null; + 'sveltekit:prefetch'?: true | undefined | null; + 'sveltekit:reload'?: true | undefined | null; + + // Sapper + 'sapper:noscroll'?: true | undefined | null; + 'sapper:prefetch'?: true | undefined | null; +} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface HTMLAudioAttributes extends HTMLMediaAttributes {} + +export interface HTMLAreaAttributes extends HTMLAttributes { + alt?: string | undefined | null; + coords?: string | undefined | null; + download?: any; + href?: string | undefined | null; + hreflang?: string | undefined | null; + media?: string | undefined | null; + referrerpolicy?: ReferrerPolicy | undefined | null; + rel?: string | undefined | null; + shape?: string | undefined | null; + target?: string | undefined | null; + ping?: string | undefined | null; +} + +export interface HTMLBaseAttributes extends HTMLAttributes { + href?: string | undefined | null; + target?: string | undefined | null; +} + +export interface HTMLBlockquoteAttributes extends HTMLAttributes { + cite?: string | undefined | null; +} + +export interface HTMLButtonAttributes extends HTMLAttributes { + disabled?: boolean | undefined | null; + form?: string | undefined | null; + formaction?: string | undefined | null; + formenctype?: string | undefined | null; + formmethod?: string | undefined | null; + formnovalidate?: boolean | undefined | null; + formtarget?: string | undefined | null; + name?: string | undefined | null; + type?: 'submit' | 'reset' | 'button' | undefined | null; + value?: string | string[] | number | undefined | null; +} + +export interface HTMLCanvasAttributes extends HTMLAttributes { + height?: number | string | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLColAttributes extends HTMLAttributes { + span?: number | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLColgroupAttributes extends HTMLAttributes { + span?: number | undefined | null; +} + +export interface HTMLDataAttributes extends HTMLAttributes { + value?: string | string[] | number | undefined | null; +} + +export interface HTMLDetailsAttributes extends HTMLAttributes { + open?: boolean | undefined | null; + + 'bind:open'?: boolean | undefined | null; +} + +export interface HTMLDelAttributes extends HTMLAttributes { + cite?: string | undefined | null; + datetime?: string | undefined | null; +} + +export interface HTMLDialogAttributes extends HTMLAttributes { + open?: boolean | undefined | null; +} + +export interface HTMLEmbedAttributes extends HTMLAttributes { + height?: number | string | undefined | null; + src?: string | undefined | null; + type?: string | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLFieldsetAttributes extends HTMLAttributes { + disabled?: boolean | undefined | null; + form?: string | undefined | null; + name?: string | undefined | null; +} + +export interface HTMLFormAttributes extends HTMLAttributes { + acceptcharset?: string | undefined | null; + action?: string | undefined | null; + autocomplete?: string | undefined | null; + enctype?: string | undefined | null; + method?: string | undefined | null; + name?: string | undefined | null; + novalidate?: boolean | undefined | null; + target?: string | undefined | null; + rel?: string | undefined | null; +} + +export interface HTMLHtmlAttributes extends HTMLAttributes { + manifest?: string | undefined | null; +} + +export interface HTMLIframeAttributes extends HTMLAttributes { + allow?: string | undefined | null; + allowfullscreen?: boolean | undefined | null; + allowtransparency?: boolean | undefined | null; + /** @deprecated */ + frameborder?: number | string | undefined | null; + height?: number | string | undefined | null; + loading?: 'eager' | 'lazy' | undefined | null; + /** @deprecated */ + marginheight?: number | undefined | null; + /** @deprecated */ + marginwidth?: number | undefined | null; + name?: string | undefined | null; + referrerpolicy?: ReferrerPolicy | undefined | null; + sandbox?: string | undefined | null; + /** @deprecated */ + scrolling?: string | undefined | null; + seamless?: boolean | undefined | null; + src?: string | undefined | null; + srcdoc?: string | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLImgAttributes extends HTMLAttributes { + alt?: string | undefined | null; + crossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null; + decoding?: 'async' | 'auto' | 'sync' | undefined | null; + height?: number | string | undefined | null; + ismap?: boolean | undefined | null; + loading?: 'eager' | 'lazy' | undefined | null; + referrerpolicy?: ReferrerPolicy | undefined | null; + sizes?: string | undefined | null; + src?: string | undefined | null; + srcset?: string | undefined | null; + usemap?: string | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLInsAttributes extends HTMLAttributes { + cite?: string | undefined | null; + datetime?: string | undefined | null; +} + +export type HTMLInputTypeAttribute = + | 'button' + | 'checkbox' + | 'color' + | 'date' + | 'datetime-local' + | 'email' + | 'file' + | 'hidden' + | 'image' + | 'month' + | 'number' + | 'password' + | 'radio' + | 'range' + | 'reset' + | 'search' + | 'submit' + | 'tel' + | 'text' + | 'time' + | 'url' + | 'week' + | (string & {}); + +export interface HTMLInputAttributes extends HTMLAttributes { + accept?: string | undefined | null; + alt?: string | undefined | null; + autocomplete?: string | undefined | null; + capture?: boolean | 'user' | 'environment' | undefined | null; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute + checked?: boolean | undefined | null; + crossorigin?: string | undefined | null; + disabled?: boolean | undefined | null; + form?: string | undefined | null; + formaction?: string | undefined | null; + formenctype?: string | undefined | null; + formmethod?: string | undefined | null; + formnovalidate?: boolean | undefined | null; + formtarget?: string | undefined | null; + height?: number | string | undefined | null; + list?: string | undefined | null; + max?: number | string | undefined | null; + maxlength?: number | undefined | null; + min?: number | string | undefined | null; + minlength?: number | undefined | null; + multiple?: boolean | undefined | null; + name?: string | undefined | null; + pattern?: string | undefined | null; + placeholder?: string | undefined | null; + readonly?: boolean | undefined | null; + required?: boolean | undefined | null; + size?: number | undefined | null; + src?: string | undefined | null; + step?: number | string | undefined | null; + type?: HTMLInputTypeAttribute | undefined | null; + value?: any; + width?: number | string | undefined | null; + + 'on:change'?: ChangeEventHandler | undefined | null; + + 'bind:checked'?: boolean | undefined | null; + 'bind:value'?: any; + 'bind:group'?: any | undefined | null; + 'bind:files'?: FileList | undefined | null; + 'bind:indeterminate'?: boolean | undefined | null; +} + +export interface HTMLKeygenAttributes extends HTMLAttributes { + challenge?: string | undefined | null; + disabled?: boolean | undefined | null; + form?: string | undefined | null; + keytype?: string | undefined | null; + keyparams?: string | undefined | null; + name?: string | undefined | null; +} + +export interface HTMLLabelAttributes extends HTMLAttributes { + form?: string | undefined | null; + for?: string | undefined | null; +} + +export interface HTMLLiAttributes extends HTMLAttributes { + value?: string | string[] | number | undefined | null; +} + +export interface HTMLLinkAttributes extends HTMLAttributes { + as?: string | undefined | null; + crossorigin?: string | undefined | null; + href?: string | undefined | null; + hreflang?: string | undefined | null; + integrity?: string | undefined | null; + media?: string | undefined | null; + imagesrcset?: string | undefined | null; + imagesizes?: string | undefined | null; + referrerpolicy?: ReferrerPolicy | undefined | null; + rel?: string | undefined | null; + sizes?: string | undefined | null; + type?: string | undefined | null; + charset?: string | undefined | null; +} + +export interface HTMLMapAttributes extends HTMLAttributes { + name?: string | undefined | null; +} + +export interface HTMLMenuAttributes extends HTMLAttributes { + type?: string | undefined | null; +} + +export interface HTMLMediaAttributes extends HTMLAttributes { + autoplay?: boolean | undefined | null; + controls?: boolean | undefined | null; + controlslist?: 'nodownload' | 'nofullscreen' | 'noplaybackrate' | 'noremoteplayback' | (string & {}) | undefined | null; + crossorigin?: string | undefined | null; + currenttime?: number | undefined | null; + defaultmuted?: boolean | undefined | null; + defaultplaybackrate?: number | undefined | null; + loop?: boolean | undefined | null; + mediagroup?: string | undefined | null; + muted?: boolean | undefined | null; + playsinline?: boolean | undefined | null; + preload?: string | undefined | null; + src?: string | undefined | null; + /** + * a value between 0 and 1 + */ + volume?: number | undefined | null; + + readonly 'bind:duration'?: number | undefined | null; + readonly 'bind:buffered'?: SvelteMediaTimeRange[] | undefined | null; + readonly 'bind:played'?: SvelteMediaTimeRange[] | undefined | null; + readonly 'bind:seekable'?: SvelteMediaTimeRange[] | undefined | null; + readonly 'bind:seeking'?: boolean | undefined | null; + readonly 'bind:ended'?: boolean | undefined | null; + 'bind:muted'?: boolean | undefined | null; + 'bind:volume'?: number | undefined | null; + /** + * the current playback time in the video, in seconds + */ + 'bind:currentTime'?: number | undefined | null; + /** + * how fast or slow to play the video, where 1 is 'normal' + */ + 'bind:playbackRate'?: number | undefined | null; + 'bind:paused'?: boolean | undefined | null; +} + +export interface HTMLMetaAttributes extends HTMLAttributes { + charSet?: string | undefined | null; + content?: string | undefined | null; + httpequiv?: string | undefined | null; + name?: string | undefined | null; + media?: string | undefined | null; +} + +export interface HTMLMeterAttributes extends HTMLAttributes { + form?: string | undefined | null; + high?: number | undefined | null; + low?: number | undefined | null; + max?: number | string | undefined | null; + min?: number | string | undefined | null; + optimum?: number | undefined | null; + value?: string | string[] | number | undefined | null; +} + +export interface HTMLQuoteAttributes extends HTMLAttributes { + cite?: string | undefined | null; +} + +export interface HTMLObjectAttributes extends HTMLAttributes { + classid?: string | undefined | null; + data?: string | undefined | null; + form?: string | undefined | null; + height?: number | string | undefined | null; + name?: string | undefined | null; + type?: string | undefined | null; + usemap?: string | undefined | null; + width?: number | string | undefined | null; + wmode?: string | undefined | null; +} + +export interface HTMLOlAttributes extends HTMLAttributes { + reversed?: boolean | undefined | null; + start?: number | undefined | null; + type?: '1' | 'a' | 'A' | 'i' | 'I' | undefined | null; +} + +export interface HTMLOptgroupAttributes extends HTMLAttributes { + disabled?: boolean | undefined | null; + label?: string | undefined | null; +} + +export interface HTMLOptionAttributes extends HTMLAttributes { + disabled?: boolean | undefined | null; + label?: string | undefined | null; + selected?: boolean | undefined | null; + value?: any; +} + +export interface HTMLOutputAttributes extends HTMLAttributes { + form?: string | undefined | null; + for?: string | undefined | null; + name?: string | undefined | null; +} + +export interface HTMLParamAttributes extends HTMLAttributes { + name?: string | undefined | null; + value?: string | string[] | number | undefined | null; +} + +export interface HTMLProgressAttributes extends HTMLAttributes { + max?: number | string | undefined | null; + value?: string | string[] | number | undefined | null; +} + +export interface HTMLSlotAttributes extends HTMLAttributes { + name?: string | undefined | null; +} + +export interface HTMLScriptAttributes extends HTMLAttributes { + async?: boolean | undefined | null; + /** @deprecated */ + charset?: string | undefined | null; + crossorigin?: string | undefined | null; + defer?: boolean | undefined | null; + integrity?: string | undefined | null; + nomodule?: boolean | undefined | null; + nonce?: string | undefined | null; + referrerpolicy?: ReferrerPolicy | undefined | null; + src?: string | undefined | null; + type?: string | undefined | null; +} + +export interface HTMLSelectAttributes extends HTMLAttributes { + autocomplete?: string | undefined | null; + disabled?: boolean | undefined | null; + form?: string | undefined | null; + multiple?: boolean | undefined | null; + name?: string | undefined | null; + required?: boolean | undefined | null; + size?: number | undefined | null; + value?: any; + + 'on:change'?: ChangeEventHandler | undefined | null; + + 'bind:value'?: any; +} + +export interface HTMLSourceAttributes extends HTMLAttributes { + height?: number | string | undefined | null; + media?: string | undefined | null; + sizes?: string | undefined | null; + src?: string | undefined | null; + srcset?: string | undefined | null; + type?: string | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLStyleAttributes extends HTMLAttributes { + media?: string | undefined | null; + nonce?: string | undefined | null; + scoped?: boolean | undefined | null; + type?: string | undefined | null; +} + +export interface HTMLTableAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | undefined | null; + bgcolor?: string | undefined | null; + border?: number | undefined | null; + cellpadding?: number | string | undefined | null; + cellspacing?: number | string | undefined | null; + frame?: boolean | undefined | null; + rules?: 'none' | 'groups' | 'rows' | 'columns' | 'all' | undefined | null; + summary?: string | undefined | null; + width?: number | string | undefined | null; +} + +export interface HTMLTextareaAttributes extends HTMLAttributes { + autocomplete?: string | undefined | null; + cols?: number | undefined | null; + dirname?: string | undefined | null; + disabled?: boolean | undefined | null; + form?: string | undefined | null; + maxlength?: number | undefined | null; + minlength?: number | undefined | null; + name?: string | undefined | null; + placeholder?: string | undefined | null; + readonly?: boolean | undefined | null; + required?: boolean | undefined | null; + rows?: number | undefined | null; + value?: string | string[] | number | undefined | null; + wrap?: string | undefined | null; + + 'on:change'?: ChangeEventHandler | undefined | null; + + 'bind:value'?: any; +} + +export interface HTMLTdAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined | null; + colspan?: number | undefined | null; + headers?: string | undefined | null; + rowspan?: number | undefined | null; + scope?: string | undefined | null; + abbr?: string | undefined | null; + height?: number | string | undefined | null; + width?: number | string | undefined | null; + valign?: 'top' | 'middle' | 'bottom' | 'baseline' | undefined | null; +} + +export interface HTMLThAttributes extends HTMLAttributes { + align?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined | null; + colspan?: number | undefined | null; + headers?: string | undefined | null; + rowspan?: number | undefined | null; + scope?: string | undefined | null; + abbr?: string | undefined | null; +} + +export interface HTMLTimeAttributes extends HTMLAttributes { + datetime?: string | undefined | null; +} + +export interface HTMLTrackAttributes extends HTMLAttributes { + default?: boolean | undefined | null; + kind?: string | undefined | null; + label?: string | undefined | null; + src?: string | undefined | null; + srclang?: string | undefined | null; +} + +export interface HTMLVideoAttributes extends HTMLMediaAttributes { + height?: number | string | undefined | null; + playsinline?: boolean | undefined | null; + poster?: string | undefined | null; + width?: number | string | undefined | null; + disablepictureinpicture?: boolean | undefined | null; + disableremoteplayback?: boolean | undefined | null; + + readonly 'bind:videoWidth'?: number | undefined | null; + readonly 'bind:videoHeight'?: number | undefined | null; +} + +export interface SvelteMediaTimeRange { + start: number; + end: number; +} + +export interface SvelteWindowAttributes extends HTMLAttributes { + readonly 'bind:innerWidth'?: Window['innerWidth'] | undefined | null; + readonly 'bind:innerHeight'?: Window['innerHeight'] | undefined | null; + readonly 'bind:outerWidth'?: Window['outerWidth'] | undefined | null; + readonly 'bind:outerHeight'?: Window['outerHeight'] | undefined | null; + 'bind:scrollX'?: Window['scrollX'] | undefined | null; + 'bind:scrollY'?: Window['scrollY'] | undefined | null; + readonly 'bind:online'?: Window['navigator']['onLine'] | undefined | null; + + // SvelteKit + 'on:sveltekit:start'?: EventHandler | undefined | null; + 'on:sveltekit:navigation-start'?: EventHandler | undefined | null; + 'on:sveltekit:navigation-end'?: EventHandler | undefined | null; + + 'on:devicelight'?: EventHandler | undefined | null; + 'on:beforeinstallprompt'?: EventHandler | undefined | null; + 'on:deviceproximity'?: EventHandler | undefined | null; + 'on:paint'?: EventHandler | undefined | null; + 'on:userproximity'?: EventHandler | undefined | null; + 'on:beforeprint'?: EventHandler | undefined | null; + 'on:afterprint'?: EventHandler | undefined | null; + 'on:languagechange'?: EventHandler | undefined | null; + 'on:orientationchange'?: EventHandler | undefined | null; + 'on:message'?: EventHandler | undefined | null; + 'on:messageerror'?: EventHandler | undefined | null; + 'on:offline'?: EventHandler | undefined | null; + 'on:online'?: EventHandler | undefined | null; + 'on:beforeunload'?: EventHandler | undefined | null; + 'on:unload'?: EventHandler | undefined | null; + 'on:storage'?: EventHandler | undefined | null; + 'on:hashchange'?: EventHandler | undefined | null; + 'on:pagehide'?: EventHandler | undefined | null; + 'on:pageshow'?: EventHandler | undefined | null; + 'on:popstate'?: EventHandler | undefined | null; + 'on:devicemotion'?: EventHandler | undefined | null; + 'on:deviceorientation'?: EventHandler | undefined | null; + 'on:deviceorientationabsolute'?: EventHandler | undefined | null; + 'on:unhandledrejection'?: EventHandler | undefined | null; + 'on:rejectionhandled'?: EventHandler | undefined | null; +} + +export interface SVGAttributes extends AriaAttributes, DOMAttributes { + // Attributes which also defined in HTMLAttributes + className?: string | undefined | null; + class?: string | undefined | null; + color?: string | undefined | null; + height?: number | string | undefined | null; + id?: string | undefined | null; + lang?: string | undefined | null; + max?: number | string | undefined | null; + media?: string | undefined | null; + method?: string | undefined | null; + min?: number | string | undefined | null; + name?: string | undefined | null; + style?: string | undefined | null; + target?: string | undefined | null; + type?: string | undefined | null; + width?: number | string | undefined | null; + + // Other HTML properties supported by SVG elements in browsers + role?: AriaRole | undefined | null; + tabindex?: number | undefined | null; + crossorigin?: 'anonymous' | 'use-credentials' | '' | undefined | null; + + // SVG Specific attributes + 'accent-height'?: number | string | undefined | null; + accumulate?: 'none' | 'sum' | undefined | null; + additive?: 'replace' | 'sum' | undefined | null; + 'alignment-baseline'?: 'auto' | 'baseline' | 'before-edge' | 'text-before-edge' | 'middle' | + 'central' | 'after-edge' | 'text-after-edge' | 'ideographic' | 'alphabetic' | 'hanging' | + 'mathematical' | 'inherit' | undefined | null; + allowReorder?: 'no' | 'yes' | undefined | null; + alphabetic?: number | string | undefined | null; + amplitude?: number | string | undefined | null; + 'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated' | undefined | null; + ascent?: number | string | undefined | null; + attributeName?: string | undefined | null; + attributeType?: string | undefined | null; + autoReverse?: number | string | undefined | null; + azimuth?: number | string | undefined | null; + baseFrequency?: number | string | undefined | null; + 'baseline-shift'?: number | string | undefined | null; + baseProfile?: number | string | undefined | null; + bbox?: number | string | undefined | null; + begin?: number | string | undefined | null; + bias?: number | string | undefined | null; + by?: number | string | undefined | null; + calcMode?: number | string | undefined | null; + 'cap-height'?: number | string | undefined | null; + clip?: number | string | undefined | null; + 'clip-path'?: string | undefined | null; + clipPathUnits?: number | string | undefined | null; + 'clip-rule'?: number | string | undefined | null; + 'color-interpolation'?: number | string | undefined | null; + 'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit' | undefined | null; + 'color-profile'?: number | string | undefined | null; + 'color-rendering'?: number | string | undefined | null; + contentScriptType?: number | string | undefined | null; + contentStyleType?: number | string | undefined | null; + cursor?: number | string | undefined | null; + cx?: number | string | undefined | null; + cy?: number | string | undefined | null; + d?: string | undefined | null; + decelerate?: number | string | undefined | null; + descent?: number | string | undefined | null; + diffuseConstant?: number | string | undefined | null; + direction?: number | string | undefined | null; + display?: number | string | undefined | null; + divisor?: number | string | undefined | null; + 'dominant-baseline'?: number | string | undefined | null; + dur?: number | string | undefined | null; + dx?: number | string | undefined | null; + dy?: number | string | undefined | null; + edgeMode?: number | string | undefined | null; + elevation?: number | string | undefined | null; + 'enable-background'?: number | string | undefined | null; + end?: number | string | undefined | null; + exponent?: number | string | undefined | null; + externalResourcesRequired?: number | string | undefined | null; + fill?: string | undefined | null; + 'fill-opacity'?: number | string | undefined | null; + 'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit' | undefined | null; + filter?: string | undefined | null; + filterRes?: number | string | undefined | null; + filterUnits?: number | string | undefined | null; + 'flood-color'?: number | string | undefined | null; + 'flood-opacity'?: number | string | undefined | null; + focusable?: number | string | undefined | null; + 'font-family'?: string | undefined | null; + 'font-size'?: number | string | undefined | null; + 'font-size-adjust'?: number | string | undefined | null; + 'font-stretch'?: number | string | undefined | null; + 'font-style'?: number | string | undefined | null; + 'font-variant'?: number | string | undefined | null; + 'font-weight'?: number | string | undefined | null; + format?: number | string | undefined | null; + from?: number | string | undefined | null; + fx?: number | string | undefined | null; + fy?: number | string | undefined | null; + g1?: number | string | undefined | null; + g2?: number | string | undefined | null; + 'glyph-name'?: number | string | undefined | null; + 'glyph-orientation-horizontal'?: number | string | undefined | null; + 'glyph-orientation-vertical'?: number | string | undefined | null; + glyphRef?: number | string | undefined | null; + gradientTransform?: string | undefined | null; + gradientUnits?: string | undefined | null; + hanging?: number | string | undefined | null; + href?: string | undefined | null; + 'horiz-adv-x'?: number | string | undefined | null; + 'horiz-origin-x'?: number | string | undefined | null; + ideographic?: number | string | undefined | null; + 'image-rendering'?: number | string | undefined | null; + in2?: number | string | undefined | null; + in?: string | undefined | null; + intercept?: number | string | undefined | null; + k1?: number | string | undefined | null; + k2?: number | string | undefined | null; + k3?: number | string | undefined | null; + k4?: number | string | undefined | null; + k?: number | string | undefined | null; + kernelMatrix?: number | string | undefined | null; + kernelUnitLength?: number | string | undefined | null; + kerning?: number | string | undefined | null; + keyPoints?: number | string | undefined | null; + keySplines?: number | string | undefined | null; + keyTimes?: number | string | undefined | null; + lengthAdjust?: number | string | undefined | null; + 'letter-spacing'?: number | string | undefined | null; + 'lighting-color'?: number | string | undefined | null; + limitingConeAngle?: number | string | undefined | null; + local?: number | string | undefined | null; + 'marker-end'?: string | undefined | null; + markerHeight?: number | string | undefined | null; + 'marker-mid'?: string | undefined | null; + 'marker-start'?: string | undefined | null; + markerUnits?: number | string | undefined | null; + markerWidth?: number | string | undefined | null; + mask?: string | undefined | null; + maskContentUnits?: number | string | undefined | null; + maskUnits?: number | string | undefined | null; + mathematical?: number | string | undefined | null; + mode?: number | string | undefined | null; + numOctaves?: number | string | undefined | null; + offset?: number | string | undefined | null; + opacity?: number | string | undefined | null; + operator?: number | string | undefined | null; + order?: number | string | undefined | null; + orient?: number | string | undefined | null; + orientation?: number | string | undefined | null; + origin?: number | string | undefined | null; + overflow?: number | string | undefined | null; + 'overline-position'?: number | string | undefined | null; + 'overline-thickness'?: number | string | undefined | null; + 'paint-order'?: number | string | undefined | null; + 'panose-1'?: number | string | undefined | null; + path?: string | undefined | null; + pathLength?: number | string | undefined | null; + patternContentUnits?: string | undefined | null; + patternTransform?: number | string | undefined | null; + patternUnits?: string | undefined | null; + 'pointer-events'?: number | string | undefined | null; + points?: string | undefined | null; + pointsAtX?: number | string | undefined | null; + pointsAtY?: number | string | undefined | null; + pointsAtZ?: number | string | undefined | null; + preserveAlpha?: number | string | undefined | null; + preserveAspectRatio?: string | undefined | null; + primitiveUnits?: number | string | undefined | null; + r?: number | string | undefined | null; + radius?: number | string | undefined | null; + refX?: number | string | undefined | null; + refY?: number | string | undefined | null; + 'rendering-intent'?: number | string | undefined | null; + repeatCount?: number | string | undefined | null; + repeatDur?: number | string | undefined | null; + requiredExtensions?: number | string | undefined | null; + requiredFeatures?: number | string | undefined | null; + restart?: number | string | undefined | null; + result?: string | undefined | null; + rotate?: number | string | undefined | null; + rx?: number | string | undefined | null; + ry?: number | string | undefined | null; + scale?: number | string | undefined | null; + seed?: number | string | undefined | null; + 'shape-rendering'?: number | string | undefined | null; + slope?: number | string | undefined | null; + spacing?: number | string | undefined | null; + specularConstant?: number | string | undefined | null; + specularExponent?: number | string | undefined | null; + speed?: number | string | undefined | null; + spreadMethod?: string | undefined | null; + startOffset?: number | string | undefined | null; + stdDeviation?: number | string | undefined | null; + stemh?: number | string | undefined | null; + stemv?: number | string | undefined | null; + stitchTiles?: number | string | undefined | null; + 'stop-color'?: string | undefined | null; + 'stop-opacity'?: number | string | undefined | null; + 'strikethrough-position'?: number | string | undefined | null; + 'strikethrough-thickness'?: number | string | undefined | null; + string?: number | string | undefined | null; + stroke?: string | undefined | null; + 'stroke-dasharray'?: string | number | undefined | null; + 'stroke-dashoffset'?: string | number | undefined | null; + 'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit' | undefined | null; + 'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit' | undefined | null; + 'stroke-miterlimit'?: string | undefined | null; + 'stroke-opacity'?: number | string | undefined | null; + 'stroke-width'?: number | string | undefined | null; + surfaceScale?: number | string | undefined | null; + systemLanguage?: number | string | undefined | null; + tableValues?: number | string | undefined | null; + targetX?: number | string | undefined | null; + targetY?: number | string | undefined | null; + 'text-anchor'?: string | undefined | null; + 'text-decoration'?: number | string | undefined | null; + textLength?: number | string | undefined | null; + 'text-rendering'?: number | string | undefined | null; + to?: number | string | undefined | null; + transform?: string | undefined | null; + u1?: number | string | undefined | null; + u2?: number | string | undefined | null; + 'underline-position'?: number | string | undefined | null; + 'underline-thickness'?: number | string | undefined | null; + unicode?: number | string | undefined | null; + 'unicode-bidi'?: number | string | undefined | null; + 'unicode-range'?: number | string | undefined | null; + 'units-per-em'?: number | string | undefined | null; + 'v-alphabetic'?: number | string | undefined | null; + values?: string | undefined | null; + 'vector-effect'?: number | string | undefined | null; + version?: string | undefined | null; + 'vert-adv-y'?: number | string | undefined | null; + 'vert-origin-x'?: number | string | undefined | null; + 'vert-origin-y'?: number | string | undefined | null; + 'v-hanging'?: number | string | undefined | null; + 'v-ideographic'?: number | string | undefined | null; + viewBox?: string | undefined | null; + viewTarget?: number | string | undefined | null; + visibility?: number | string | undefined | null; + 'v-mathematical'?: number | string | undefined | null; + widths?: number | string | undefined | null; + 'word-spacing'?: number | string | undefined | null; + 'writing-mode'?: number | string | undefined | null; + x1?: number | string | undefined | null; + x2?: number | string | undefined | null; + x?: number | string | undefined | null; + xChannelSelector?: string | undefined | null; + 'x-height'?: number | string | undefined | null; + 'xlink:actuate'?: string | undefined | null; + 'xlink:arcrole'?: string | undefined | null; + 'xlink:href'?: string | undefined | null; + 'xlink:role'?: string | undefined | null; + 'xlink:show'?: string | undefined | null; + 'xlink:title'?: string | undefined | null; + 'xlink:type'?: string | undefined | null; + 'xml:base'?: string | undefined | null; + 'xml:lang'?: string | undefined | null; + xmlns?: string | undefined | null; + 'xmlns:xlink'?: string | undefined | null; + 'xml:space'?: string | undefined | null; + y1?: number | string | undefined | null; + y2?: number | string | undefined | null; + y?: number | string | undefined | null; + yChannelSelector?: string | undefined | null; + z?: number | string | undefined | null; + zoomAndPan?: string | undefined | null; +} + +export interface HTMLWebViewAttributes extends HTMLAttributes { + allowfullscreen?: boolean | undefined | null; + allowpopups?: boolean | undefined | null; + autosize?: boolean | undefined | null; + blinkfeatures?: string | undefined | null; + disableblinkfeatures?: string | undefined | null; + disableguestresize?: boolean | undefined | null; + disablewebsecurity?: boolean | undefined | null; + guestinstance?: string | undefined | null; + httpreferrer?: string | undefined | null; + nodeintegration?: boolean | undefined | null; + partition?: string | undefined | null; + plugins?: boolean | undefined | null; + preload?: string | undefined | null; + src?: string | undefined | null; + useragent?: string | undefined | null; + webpreferences?: string | undefined | null; +} + +// +// DOM Elements +// ---------------------------------------------------------------------- + +export interface SvelteHTMLElements { + a: HTMLAnchorAttributes; + abbr: HTMLAttributes; + address: HTMLAttributes; + area: HTMLAreaAttributes; + article: HTMLAttributes; + aside: HTMLAttributes; + audio: HTMLAudioAttributes; + b: HTMLAttributes; + base: HTMLBaseAttributes; + bdi: HTMLAttributes; + bdo: HTMLAttributes; + big: HTMLAttributes; + blockquote: HTMLBlockquoteAttributes; + body: HTMLAttributes; + br: HTMLAttributes; + button: HTMLButtonAttributes; + canvas: HTMLCanvasAttributes; + caption: HTMLAttributes; + cite: HTMLAttributes; + code: HTMLAttributes; + col: HTMLColAttributes; + colgroup: HTMLColgroupAttributes; + data: HTMLDataAttributes; + datalist: HTMLAttributes; + dd: HTMLAttributes; + del: HTMLDelAttributes; + details: HTMLDetailsAttributes; + dfn: HTMLAttributes; + dialog: HTMLDialogAttributes; + div: HTMLAttributes; + dl: HTMLAttributes; + dt: HTMLAttributes; + em: HTMLAttributes; + embed: HTMLEmbedAttributes; + fieldset: HTMLFieldsetAttributes; + figcaption: HTMLAttributes; + figure: HTMLAttributes; + footer: HTMLAttributes; + form: HTMLFormAttributes; + 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: HTMLIframeAttributes; + img: HTMLImgAttributes; + input: HTMLInputAttributes; + ins: HTMLInsAttributes; + kbd: HTMLAttributes; + keygen: HTMLKeygenAttributes; + label: HTMLLabelAttributes; + legend: HTMLAttributes; + li: HTMLLiAttributes; + link: HTMLLinkAttributes; + main: HTMLAttributes; + map: HTMLMapAttributes; + mark: HTMLAttributes; + menu: HTMLMenuAttributes; + menuitem: HTMLAttributes; + meta: HTMLMetaAttributes; + meter: HTMLMeterAttributes; + nav: HTMLAttributes; + noscript: HTMLAttributes; + object: HTMLObjectAttributes; + ol: HTMLOlAttributes; + optgroup: HTMLOptgroupAttributes; + option: HTMLOptionAttributes; + output: HTMLOutputAttributes; + p: HTMLAttributes; + param: HTMLParamAttributes; + picture: HTMLAttributes; + pre: HTMLAttributes; + progress: HTMLProgressAttributes; + q: HTMLQuoteAttributes; + rp: HTMLAttributes; + rt: HTMLAttributes; + ruby: HTMLAttributes; + s: HTMLAttributes; + samp: HTMLAttributes; + slot: HTMLSlotAttributes; + script: HTMLScriptAttributes; + section: HTMLAttributes; + select: HTMLSelectAttributes; + small: HTMLAttributes; + source: HTMLSourceAttributes; + span: HTMLAttributes; + strong: HTMLAttributes; + style: HTMLStyleAttributes; + sub: HTMLAttributes; + summary: HTMLAttributes; + sup: HTMLAttributes; + table: HTMLTableAttributes; + template: HTMLAttributes; + tbody: HTMLAttributes; + td: HTMLTdAttributes; + textarea: HTMLTextareaAttributes; + tfoot: HTMLAttributes; + th: HTMLThAttributes; + thead: HTMLAttributes; + time: HTMLTimeAttributes; + title: HTMLAttributes; + tr: HTMLAttributes; + track: HTMLTrackAttributes; + u: HTMLAttributes; + ul: HTMLAttributes; + var: HTMLAttributes; + video: HTMLVideoAttributes; + wbr: HTMLAttributes; + webview: HTMLWebViewAttributes; + // 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; + + // Svelte specific + 'svelte:window': SvelteWindowAttributes; + 'svelte:body': HTMLAttributes; + 'svelte:fragment': { slot?: string }; + 'svelte:options': { [name: string]: any }; + 'svelte:head': { [name: string]: any }; + + [name: string]: { [name: string]: any }; +} diff --git a/packages/svelte2tsx/svelte-jsx.d.ts b/packages/svelte2tsx/svelte-jsx.d.ts index 5f21c1f61..28ec8f3c4 100644 --- a/packages/svelte2tsx/svelte-jsx.d.ts +++ b/packages/svelte2tsx/svelte-jsx.d.ts @@ -22,14 +22,6 @@ declare namespace svelteHTML { element: Key | undefined | null, attrsEnhancers: T, attrs: Elements[Key] & T ): Key extends keyof ElementTagNameMap ? ElementTagNameMap[Key] : Key extends keyof SVGElementTagNameMap ? SVGElementTagNameMap[Key] : any; - type NativeElement = HTMLElement; - - // TypeScript SVGElement has no `dataset` (Chrome 55+, Firefox 51+). - type Element = NativeElement & { - dataset: DOMStringMap; - }; - - // // Event Handler Types // ---------------------------------------------------------------------- type EventHandler = @@ -51,581 +43,15 @@ declare namespace svelteHTML { type TransitionEventHandler = svelte.JSX.TransitionEventHandler; type MessageEventHandler = svelte.JSX.MessageEventHandler; - // See CSS 3 CSS-wide keywords https://www.w3.org/TR/css3-values/#common-keywords - // See CSS 3 Explicit Defaulting https://www.w3.org/TR/css-cascade-3/#defaulting-keywords - // "all CSS properties can accept these values" - type CSSWideKeyword = svelte.JSX.CSSWideKeyword; - - // See CSS 3 type https://drafts.csswg.org/css-values-3/#percentages - type CSSPercentage = svelte.JSX.CSSPercentage; - - // See CSS 3 type https://drafts.csswg.org/css-values-3/#lengths - type CSSLength = svelte.JSX.CSSLength; - - // This interface is not complete. Only properties accepting - // unit-less numbers are listed here (see CSSProperty.js in React) - - interface DOMAttributes { - // Clipboard Events - "on:copy"?: ClipboardEventHandler | undefined | null; - "on:cut"?: ClipboardEventHandler | undefined | null; - "on:paste"?: ClipboardEventHandler | undefined | null; - - // Composition Events - "on:compositionend"?: CompositionEventHandler | undefined | null; - "on:compositionstart"?: CompositionEventHandler | undefined | null; - "on:compositionupdate"?: CompositionEventHandler | undefined | null; - - // Focus Events - "on:focus"?: FocusEventHandler | undefined | null; - "on:focusin"?: FocusEventHandler | undefined | null; - "on:focusout"?: FocusEventHandler | undefined | null; - "on:blur"?: FocusEventHandler | undefined | null; - - // Form Events - "on:change"?: FormEventHandler | undefined | null; - "on:input"?: FormEventHandler | undefined | null; - "on:reset"?: FormEventHandler | undefined | null; - "on:submit"?: EventHandler | undefined | null; - "on:invalid"?: EventHandler | undefined | null; - "on:beforeinput"?: EventHandler | undefined | null; - - // Image Events - "on:load"?: EventHandler | undefined | null; - "on:error"?: EventHandler | undefined | null; // also a Media Event - - // Detail Events - "on:toggle"?: EventHandler | undefined | null; - - // Keyboard Events - "on:keydown"?: KeyboardEventHandler | undefined | null; - "on:keypress"?: KeyboardEventHandler | undefined | null; - "on:keyup"?: KeyboardEventHandler | undefined | null; - - // Media Events - "on:abort"?: EventHandler | undefined | null; - "on:canplay"?: EventHandler | undefined | null; - "on:canplaythrough"?: EventHandler | undefined | null; - "on:cuechange"?: EventHandler | undefined | null; - "on:durationchange"?: EventHandler | undefined | null; - "on:emptied"?: EventHandler | undefined | null; - "on:encrypted"?: EventHandler | undefined | null; - "on:ended"?: EventHandler | undefined | null; - "on:loadeddata"?: EventHandler | undefined | null; - "on:loadedmetadata"?: EventHandler | undefined | null; - "on:loadstart"?: EventHandler | undefined | null; - "on:pause"?: EventHandler | undefined | null; - "on:play"?: EventHandler | undefined | null; - "on:playing"?: EventHandler | undefined | null; - "on:progress"?: EventHandler | undefined | null; - "on:ratechange"?: EventHandler | undefined | null; - "on:seeked"?: EventHandler | undefined | null; - "on:seeking"?: EventHandler | undefined | null; - "on:stalled"?: EventHandler | undefined | null; - "on:suspend"?: EventHandler | undefined | null; - "on:timeupdate"?: EventHandler | undefined | null; - "on:volumechange"?: EventHandler | undefined | null; - "on:waiting"?: EventHandler | undefined | null; - - // MouseEvents - "on:auxclick"?: MouseEventHandler | undefined | null; - "on:click"?: MouseEventHandler | undefined | null; - "on:contextmenu"?: MouseEventHandler | undefined | null; - "on:dblclick"?: MouseEventHandler | undefined | null; - "on:drag"?: DragEventHandler | undefined | null; - "on:dragend"?: DragEventHandler | undefined | null; - "on:dragenter"?: DragEventHandler | undefined | null; - "on:dragexit"?: DragEventHandler | undefined | null; - "on:dragleave"?: DragEventHandler | undefined | null; - "on:dragover"?: DragEventHandler | undefined | null; - "on:dragstart"?: DragEventHandler | undefined | null; - "on:drop"?: DragEventHandler | undefined | null; - "on:mousedown"?: MouseEventHandler | undefined | null; - "on:mouseenter"?: MouseEventHandler | undefined | null; - "on:mouseleave"?: MouseEventHandler | undefined | null; - "on:mousemove"?: MouseEventHandler | undefined | null; - "on:mouseout"?: MouseEventHandler | undefined | null; - "on:mouseover"?: MouseEventHandler | undefined | null; - "on:mouseup"?: MouseEventHandler | undefined | null; - - // Selection Events - "on:select"?: EventHandler | undefined | null; - "on:selectionchange"?: EventHandler | undefined | null; - "on:selectstart"?: EventHandler | undefined | null; - - // Touch Events - "on:touchcancel"?: TouchEventHandler | undefined | null; - "on:touchend"?: TouchEventHandler | undefined | null; - "on:touchmove"?: TouchEventHandler | undefined | null; - "on:touchstart"?: TouchEventHandler | undefined | null; - - // Pointer Events - "on:gotpointercapture"?: PointerEventHandler | undefined | null; - "on:pointercancel"?: PointerEventHandler | undefined | null; - "on:pointerdown"?: PointerEventHandler | undefined | null; - "on:pointerenter"?: PointerEventHandler | undefined | null; - "on:pointerleave"?: PointerEventHandler | undefined | null; - "on:pointermove"?: PointerEventHandler | undefined | null; - "on:pointerout"?: PointerEventHandler | undefined | null; - "on:pointerover"?: PointerEventHandler | undefined | null; - "on:pointerup"?: PointerEventHandler | undefined | null; - "on:lostpointercapture"?: PointerEventHandler | undefined | null; - - // UI Events - "on:scroll"?: UIEventHandler | undefined | null; - "on:resize"?: UIEventHandler | undefined | null; - - // Wheel Events - "on:wheel"?: WheelEventHandler | undefined | null; - - // Animation Events - "on:animationstart"?: AnimationEventHandler | undefined | null; - "on:animationend"?: AnimationEventHandler | undefined | null; - "on:animationiteration"?: AnimationEventHandler | undefined | null; - - // Transition Events - "on:transitionstart"?: TransitionEventHandler | undefined | null; - "on:transitionrun"?: TransitionEventHandler | undefined | null; - "on:transitionend"?: TransitionEventHandler | undefined | null; - "on:transitioncancel"?: TransitionEventHandler | undefined | null; - - // Svelte Transition Events - "on:outrostart"?: EventHandler, T> | undefined | null; - "on:outroend"?: EventHandler, T> | undefined | null; - "on:introstart"?: EventHandler, T> | undefined | null; - "on:introend"?: EventHandler, T> | undefined | null; - - // Message Events - "on:message"?: MessageEventHandler | undefined | null; - "on:messageerror"?: MessageEventHandler | undefined | null; - - // Global Events - "on:cancel"?: EventHandler | undefined | null; - "on:close"?: EventHandler | undefined | null; - "on:fullscreenchange"?: EventHandler | undefined | null; - "on:fullscreenerror"?: EventHandler | undefined | null; - } - + // For backwards-compatibility, in case someone enhanced the typings from svelteHtml.HTMLAttributes // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface AriaAttributes extends svelte.JSX.AriaAttributes {} - - interface HTMLAttributes extends AriaAttributes, DOMAttributes { - // Standard HTML Attributes - class?: string | undefined | null; - dataset?: object | undefined | null; // eslint-disable-line - accept?: string | undefined | null; - acceptcharset?: string | undefined | null; - accesskey?: string | undefined | null; - action?: string | undefined | null; - allow?: string | undefined | null; - allowfullscreen?: boolean | undefined | null; - allowtransparency?: boolean | undefined | null; - allowpaymentrequest?: boolean | undefined | null; - alt?: string | undefined | null; - as?: string | undefined | null; - async?: boolean | undefined | null; - autocomplete?: string | undefined | null; - autofocus?: boolean | undefined | null; - autoplay?: boolean | undefined | null; - capture?: 'environment' | 'user' | boolean | undefined | null; - cellpadding?: number | string | undefined | null; - cellspacing?: number | string | undefined | null; - charset?: string | undefined | null; - challenge?: string | undefined | null; - checked?: boolean | undefined | null; - cite?: string | undefined | null; - classid?: string | undefined | null; - cols?: number | undefined | null; - colspan?: number | undefined | null; - content?: string | undefined | null; - contenteditable?: 'true' | 'false' | boolean | undefined | null; - - // Doesn't work when used as HTML attribute - /** - * Elements with the contenteditable attribute support innerHTML and textContent bindings. - */ - innerHTML?: string | undefined | null; - // Doesn't work when used as HTML attribute - /** - * Elements with the contenteditable attribute support innerHTML and textContent bindings. - */ - - textContent?: string | undefined | null; - - contextmenu?: string | undefined | null; - controls?: boolean | undefined | null; - coords?: string | undefined | null; - crossorigin?: string | undefined | null; - currenttime?: number | undefined | null; - decoding?: 'async' | 'sync' | 'auto' | undefined | null; - data?: string | undefined | null; - datetime?: string | undefined | null; - default?: boolean | undefined | null; - defaultmuted?: boolean | undefined | null; - defaultplaybackrate?: number | undefined | null; - defer?: boolean | undefined | null; - dir?: string | undefined | null; - dirname?: string | undefined | null; - disabled?: boolean | undefined | null; - download?: any | undefined | null; - draggable?: boolean | 'true' | 'false' | undefined | null; - enctype?: string | undefined | null; - enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined | null; - for?: string | undefined | null; - form?: string | undefined | null; - formaction?: string | undefined | null; - formenctype?: string | undefined | null; - formmethod?: string | undefined | null; - formnovalidate?: boolean | undefined | null; - formtarget?: string | undefined | null; - frameborder?: number | string | undefined | null; - headers?: string | undefined | null; - height?: number | string | undefined | null; - hidden?: boolean | undefined | null; - high?: number | undefined | null; - href?: string | undefined | null; - hreflang?: string | undefined | null; - htmlfor?: string | undefined | null; - httpequiv?: string | undefined | null; - id?: string | undefined | null; - inputmode?: string | undefined | null; - integrity?: string | undefined | null; - is?: string | undefined | null; - ismap?: boolean | undefined | null; - keyparams?: string | undefined | null; - keytype?: string | undefined | null; - kind?: string | undefined | null; - label?: string | undefined | null; - lang?: string | undefined | null; - list?: string | undefined | null; - loading?: string | undefined | null; - loop?: boolean | undefined | null; - low?: number | undefined | null; - manifest?: string | undefined | null; - marginheight?: number | undefined | null; - marginwidth?: number | undefined | null; - max?: number | string | undefined | null; - maxlength?: number | undefined | null; - media?: string | undefined | null; - mediagroup?: string | undefined | null; - method?: string | undefined | null; - min?: number | string | undefined | null; - minlength?: number | undefined | null; - multiple?: boolean | undefined | null; - muted?: boolean | undefined | null; - name?: string | undefined | null; - nonce?: string | undefined | null; - novalidate?: boolean | undefined | null; - open?: boolean | undefined | null; - optimum?: number | undefined | null; - part?: string | undefined | null; - pattern?: string | undefined | null; - placeholder?: string | undefined | null; - playsinline?: boolean | undefined | null; - ping?: string | undefined | null; - poster?: string | undefined | null; - preload?: string | undefined | null; - radiogroup?: string | undefined | null; - readonly?: boolean | undefined | null; - referrerpolicy?: string | undefined | null; - rel?: string | undefined | null; - required?: boolean | undefined | null; - reversed?: boolean | undefined | null; - role?: string | undefined | null; - rows?: number | undefined | null; - rowspan?: number | undefined | null; - sandbox?: string | undefined | null; - scope?: string | undefined | null; - scoped?: boolean | undefined | null; - scrolling?: string | undefined | null; - seamless?: boolean | undefined | null; - selected?: boolean | undefined | null; - shape?: string | undefined | null; - size?: number | undefined | null; - sizes?: string | undefined | null; - slot?: string | undefined | null; - span?: number | undefined | null; - spellcheck?: boolean | 'true' | 'false' | undefined | null; - src?: string | undefined | null; - srcdoc?: string | undefined | null; - srclang?: string | undefined | null; - srcset?: string | undefined | null; - start?: number | undefined | null; - step?: number | string | undefined | null; - style?: string | undefined | null; - summary?: string | undefined | null; - tabindex?: number | undefined | null; - target?: string | undefined | null; - title?: string | undefined | null; - translate?: "yes" | "no" | "" | undefined | null; - type?: string | undefined | null; - usemap?: string | undefined | null; - value?: any | undefined | null; - /** - * a value between 0 and 1 - */ - volume?: number | undefined | null; - width?: number | string | undefined | null; - wmode?: string | undefined | null; - wrap?: string | undefined | null; - - // RDFa Attributes - about?: string | undefined | null; - datatype?: string | undefined | null; - inlist?: any | undefined | null; - prefix?: string | undefined | null; - property?: string | undefined | null; - resource?: string | undefined | null; - typeof?: string | undefined | null; - vocab?: string | undefined | null; - - // Non-standard Attributes - autocapitalize?: string | undefined | null; - autocorrect?: string | undefined | null; - autosave?: string | undefined | null; - color?: string | undefined | null; - controlslist?: 'nodownload' | 'nofullscreen' | 'noplaybackrate' | 'noremoteplayback'; - itemprop?: string | undefined | null; - itemscope?: boolean | undefined | null; - itemtype?: string | undefined | null; - itemid?: string | undefined | null; - itemref?: string | undefined | null; - results?: number | undefined | null; - security?: string | undefined | null; - unselectable?: boolean | undefined | null; - } + interface HTMLAttributes {} - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SVGAttributes extends svelte.JSX.SVGAttributes { - 'xlink:actuate'?: string | undefined; - 'xlink:arcrole'?: string | undefined; - 'xlink:href'?: string | undefined; - 'xlink:role'?: string | undefined; - 'xlink:show'?: string | undefined; - 'xlink:title'?: string | undefined; - 'xlink:type'?: string | undefined; - 'xml:base'?: string | undefined; - 'xml:lang'?: string | undefined; - 'xml:space'?: string | undefined; - 'xmlns'?: string | undefined; - 'xmlns:xlink'?: string | undefined; - } - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface HTMLProps extends HTMLAttributes {} - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SVGProps extends SVGAttributes {} - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SvelteInputProps extends svelte.JSX.SvelteInputProps {} - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SvelteWindowProps extends svelte.JSX.SvelteWindowProps {} - - interface SapperAnchorProps { - "sapper:noscroll"?: true | undefined | null; - "sapper:prefetch"?: true | undefined | null; - } - - interface SvelteKitAnchorProps { - "sveltekit:noscroll"?: true | undefined | null; - "sveltekit:prefetch"?: true | undefined | null; - "sveltekit:reload"?: true | undefined | null; - } - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SvelteMediaTimeRange extends svelte.JSX.SvelteMediaTimeRange {} - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SvelteMediaProps extends svelte.JSX.SvelteMediaProps {} - - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface SvelteVideoProps extends svelte.JSX.SvelteVideoProps {} + type EventsWithColon = {[Property in keyof T as Property extends `on${infer Key}` ? `on:${Key}` : Property]?: T[Property] } + type WithOldJsxTypings = {[Property in keyof T]?: T[Property] & EventsWithColon & HTMLAttributes } // no "extends svelte.JSX" because else we wouldn't get the references to the right interfaces - interface IntrinsicElements { - // HTML - a: HTMLProps & SapperAnchorProps & SvelteKitAnchorProps; - abbr: HTMLProps; - address: HTMLProps; - area: HTMLProps; - article: HTMLProps; - aside: HTMLProps; - audio: HTMLProps & SvelteMediaProps; - b: HTMLProps; - base: HTMLProps; - bdi: HTMLProps; - bdo: HTMLProps; - big: HTMLProps; - blockquote: HTMLProps; - body: HTMLProps; - br: HTMLProps; - button: HTMLProps; - canvas: HTMLProps; - caption: HTMLProps; - cite: HTMLProps; - code: HTMLProps; - col: HTMLProps; - colgroup: HTMLProps; - data: HTMLProps; - datalist: HTMLProps; - dd: HTMLProps; - del: HTMLProps; - details: HTMLProps; - dfn: HTMLProps; - dialog: HTMLProps; - div: HTMLProps; - dl: HTMLProps; - dt: HTMLProps; - em: HTMLProps; - embed: HTMLProps; - fieldset: HTMLProps; - figcaption: HTMLProps; - figure: HTMLProps; - footer: HTMLProps; - form: HTMLProps; - h1: HTMLProps; - h2: HTMLProps; - h3: HTMLProps; - h4: HTMLProps; - h5: HTMLProps; - h6: HTMLProps; - head: HTMLProps; - header: HTMLProps; - hgroup: HTMLProps; - hr: HTMLProps; - html: HTMLProps; - i: HTMLProps; - iframe: HTMLProps; - img: HTMLProps; - input: SvelteInputProps; - ins: HTMLProps; - kbd: HTMLProps; - keygen: HTMLProps; - label: HTMLProps; - legend: HTMLProps; - li: HTMLProps; - link: HTMLProps; - main: HTMLProps; - map: HTMLProps; - mark: HTMLProps; - menu: HTMLProps; - menuitem: HTMLProps; - meta: HTMLProps; - meter: HTMLProps; - nav: HTMLProps; - noindex: HTMLProps; - noscript: HTMLProps; - object: HTMLProps; - ol: HTMLProps; - optgroup: HTMLProps; - option: HTMLProps; - output: HTMLProps; - p: HTMLProps; - param: HTMLProps; - picture: HTMLProps; - pre: HTMLProps; - progress: HTMLProps; - q: HTMLProps; - rp: HTMLProps; - rt: HTMLProps; - ruby: HTMLProps; - s: HTMLProps; - samp: HTMLProps; - script: HTMLProps; - section: HTMLProps; - select: HTMLProps; - small: HTMLProps; - source: HTMLProps; - span: HTMLProps; - strong: HTMLProps; - style: HTMLProps; - sub: HTMLProps; - summary: HTMLProps; - sup: HTMLProps; - table: HTMLProps; - tbody: HTMLProps; - td: HTMLProps; - textarea: HTMLProps; - tfoot: HTMLProps; - th: HTMLProps; - thead: HTMLProps; - time: HTMLProps; - title: HTMLProps; - tr: HTMLProps; - track: HTMLProps; - u: HTMLProps; - ul: HTMLProps; - var: HTMLProps; - video: HTMLProps & SvelteVideoProps; - wbr: HTMLProps; - - svg: SVGProps; - - animate: SVGProps; // @TODO: It is SVGAnimateElement but not in dom.d.ts for now. - circle: SVGProps; - clipPath: SVGProps; - defs: SVGProps; - desc: SVGProps; - ellipse: SVGProps; - feBlend: SVGProps; - feColorMatrix: SVGProps; - feComponentTransfer: SVGProps; - feComposite: SVGProps; - feConvolveMatrix: SVGProps; - feDiffuseLighting: SVGProps; - feDisplacementMap: SVGProps; - feDistantLight: SVGProps; - feFlood: SVGProps; - feFuncA: SVGProps; - feFuncB: SVGProps; - feFuncG: SVGProps; - feFuncR: SVGProps; - feGaussianBlur: SVGProps; - feImage: SVGProps; - feMerge: SVGProps; - feMergeNode: SVGProps; - feMorphology: SVGProps; - feOffset: SVGProps; - fePointLight: SVGProps; - feSpecularLighting: SVGProps; - feSpotLight: SVGProps; - feTile: SVGProps; - feTurbulence: SVGProps; - filter: SVGProps; - foreignObject: SVGProps; - g: SVGProps; - image: SVGProps; - line: SVGProps; - linearGradient: SVGProps; - marker: SVGProps; - mask: SVGProps; - metadata: SVGProps; - path: SVGProps; - pattern: SVGProps; - polygon: SVGProps; - polyline: SVGProps; - radialGradient: SVGProps; - rect: SVGProps; - stop: SVGProps; - switch: SVGProps; - symbol: SVGProps; - text: SVGProps; - textPath: SVGProps; - tspan: SVGProps; - use: SVGProps; - view: SVGProps; - - // Svelte specific - 'svelte:window': HTMLProps & SvelteWindowProps; - 'svelte:body': HTMLProps; - 'svelte:fragment': { slot?: string; }; - 'svelte:options': { [name: string]: any }; - 'svelte:head': { [name: string]: any }; - - [name: string]: { [name: string]: any }; - } + interface IntrinsicElements extends WithOldJsxTypings {} } /** @@ -650,21 +76,10 @@ declare namespace svelte.JSX { /* html jsx */ - - export type Child = Node | Node[] | string | number; - export type Children = Child | Child[]; - - type NativeElement = HTMLElement; - interface IntrinsicAttributes { slot?: string; } - // TypeScript SVGElement has no `dataset` (Chrome 55+, Firefox 51+). - type Element = NativeElement & { - dataset: DOMStringMap; - }; - // // Event Handler Types // ---------------------------------------------------------------------- @@ -687,19 +102,6 @@ declare namespace svelte.JSX { type TransitionEventHandler = EventHandler; type MessageEventHandler = EventHandler; - // See CSS 3 CSS-wide keywords https://www.w3.org/TR/css3-values/#common-keywords - // See CSS 3 Explicit Defaulting https://www.w3.org/TR/css-cascade-3/#defaulting-keywords - // "all CSS properties can accept these values" - type CSSWideKeyword = 'initial' | 'inherit' | 'unset'; - - // See CSS 3 type https://drafts.csswg.org/css-values-3/#percentages - type CSSPercentage = string; - - // See CSS 3 type https://drafts.csswg.org/css-values-3/#lengths - type CSSLength = number | string; - - // This interface is not complete. Only properties accepting - // unit-less numbers are listed here (see CSSProperty.js in React) interface DOMAttributes { // jsx-dom specific diff --git a/packages/svelte2tsx/svelte-native-jsx.d.ts b/packages/svelte2tsx/svelte-native-jsx.d.ts index 402e0ad7b..fd4163440 100644 --- a/packages/svelte2tsx/svelte-native-jsx.d.ts +++ b/packages/svelte2tsx/svelte-native-jsx.d.ts @@ -7,7 +7,10 @@ declare namespace svelteNative.JSX { ): any; function createElement( - element: Key, attrs: Elements[Key] + element: Key | undefined | null, attrs: Elements[Key] + ): any; + function createElement( + element: Key | undefined | null, attrEnhancers: T, attrs: Elements[Key] & T ): any;