mirror of https://github.com/sveltejs/svelte
feat: move svelteHTML to load the correct svelte/element (#9070)
Make IntrinsicElements extends SvelteHTMLElements so it can be extend with declare module converting to module so it can extend without needing another type alias --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>pull/9096/head
parent
8b1cdde548
commit
05f99d20f9
@ -0,0 +1,5 @@
|
||||
---
|
||||
'svelte': minor
|
||||
---
|
||||
|
||||
feat: move `svelteHTML` from language-tools into core to load the correct `svelte/element` types
|
@ -0,0 +1,252 @@
|
||||
/// <reference lib="dom" />
|
||||
// This file is deliberately not exposed through the exports map.
|
||||
// It's meant to be loaded directly by the Svelte language server
|
||||
/* eslint-disable @typescript-eslint/no-empty-interface */
|
||||
|
||||
import * as svelteElements from './elements.js';
|
||||
|
||||
/**
|
||||
* @internal do not use
|
||||
*/
|
||||
type HTMLProps<Property extends string, Override> = Omit<
|
||||
import('./elements.js').SvelteHTMLElements[Property],
|
||||
keyof Override
|
||||
> &
|
||||
Override;
|
||||
|
||||
declare global {
|
||||
/**
|
||||
* This namespace does not exist in the runtime, it is only used for typings
|
||||
*/
|
||||
namespace svelteHTML {
|
||||
// Every namespace eligible for use needs to implement the following two functions
|
||||
/**
|
||||
* @internal do not use
|
||||
*/
|
||||
function mapElementTag<K extends keyof ElementTagNameMap>(tag: K): ElementTagNameMap[K];
|
||||
function mapElementTag<K extends keyof SVGElementTagNameMap>(tag: K): SVGElementTagNameMap[K];
|
||||
function mapElementTag(tag: any): any; // needs to be any because used in context of <svelte:element>
|
||||
|
||||
/**
|
||||
* @internal do not use
|
||||
*/
|
||||
function createElement<Elements extends IntrinsicElements, Key extends keyof Elements>(
|
||||
// "undefined | null" because of <svelte:element>
|
||||
element: Key | undefined | null,
|
||||
attrs: string extends Key ? svelteElements.HTMLAttributes<any> : Elements[Key]
|
||||
): Key extends keyof ElementTagNameMap
|
||||
? ElementTagNameMap[Key]
|
||||
: Key extends keyof SVGElementTagNameMap
|
||||
? SVGElementTagNameMap[Key]
|
||||
: any;
|
||||
function createElement<Elements extends IntrinsicElements, Key extends keyof Elements, T>(
|
||||
// "undefined | null" because of <svelte:element>
|
||||
element: Key | undefined | null,
|
||||
attrsEnhancers: T,
|
||||
attrs: (string extends Key ? svelteElements.HTMLAttributes<any> : Elements[Key]) & T
|
||||
): Key extends keyof ElementTagNameMap
|
||||
? ElementTagNameMap[Key]
|
||||
: Key extends keyof SVGElementTagNameMap
|
||||
? SVGElementTagNameMap[Key]
|
||||
: any;
|
||||
|
||||
// For backwards-compatibility and ease-of-use, in case someone enhanced the typings from import('svelte/elements').HTMLAttributes/SVGAttributes
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
interface HTMLAttributes<T extends EventTarget = any> {}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
interface SVGAttributes<T extends EventTarget = any> {}
|
||||
|
||||
/**
|
||||
* Avoid using this interface directly. Instead use the `SvelteHTMLElements` interface exported by `svelte/elements`
|
||||
* This should only be used if you need to extend the interface with custom elements
|
||||
*/
|
||||
interface IntrinsicElements extends svelteElements.SvelteHTMLElements {
|
||||
a: HTMLProps<'a', HTMLAttributes>;
|
||||
abbr: HTMLProps<'abbr', HTMLAttributes>;
|
||||
address: HTMLProps<'address', HTMLAttributes>;
|
||||
area: HTMLProps<'area', HTMLAttributes>;
|
||||
article: HTMLProps<'article', HTMLAttributes>;
|
||||
aside: HTMLProps<'aside', HTMLAttributes>;
|
||||
audio: HTMLProps<'audio', HTMLAttributes>;
|
||||
b: HTMLProps<'b', HTMLAttributes>;
|
||||
base: HTMLProps<'base', HTMLAttributes>;
|
||||
bdi: HTMLProps<'bdi', HTMLAttributes>;
|
||||
bdo: HTMLProps<'bdo', HTMLAttributes>;
|
||||
big: HTMLProps<'big', HTMLAttributes>;
|
||||
blockquote: HTMLProps<'blockquote', HTMLAttributes>;
|
||||
body: HTMLProps<'body', HTMLAttributes>;
|
||||
br: HTMLProps<'br', HTMLAttributes>;
|
||||
button: HTMLProps<'button', HTMLAttributes>;
|
||||
canvas: HTMLProps<'canvas', HTMLAttributes>;
|
||||
caption: HTMLProps<'caption', HTMLAttributes>;
|
||||
cite: HTMLProps<'cite', HTMLAttributes>;
|
||||
code: HTMLProps<'code', HTMLAttributes>;
|
||||
col: HTMLProps<'col', HTMLAttributes>;
|
||||
colgroup: HTMLProps<'colgroup', HTMLAttributes>;
|
||||
data: HTMLProps<'data', HTMLAttributes>;
|
||||
datalist: HTMLProps<'datalist', HTMLAttributes>;
|
||||
dd: HTMLProps<'dd', HTMLAttributes>;
|
||||
del: HTMLProps<'del', HTMLAttributes>;
|
||||
details: HTMLProps<'details', HTMLAttributes>;
|
||||
dfn: HTMLProps<'dfn', HTMLAttributes>;
|
||||
dialog: HTMLProps<'dialog', HTMLAttributes>;
|
||||
div: HTMLProps<'div', HTMLAttributes>;
|
||||
dl: HTMLProps<'dl', HTMLAttributes>;
|
||||
dt: HTMLProps<'dt', HTMLAttributes>;
|
||||
em: HTMLProps<'em', HTMLAttributes>;
|
||||
embed: HTMLProps<'embed', HTMLAttributes>;
|
||||
fieldset: HTMLProps<'fieldset', HTMLAttributes>;
|
||||
figcaption: HTMLProps<'figcaption', HTMLAttributes>;
|
||||
figure: HTMLProps<'figure', HTMLAttributes>;
|
||||
footer: HTMLProps<'footer', HTMLAttributes>;
|
||||
form: HTMLProps<'form', HTMLAttributes>;
|
||||
h1: HTMLProps<'h1', HTMLAttributes>;
|
||||
h2: HTMLProps<'h2', HTMLAttributes>;
|
||||
h3: HTMLProps<'h3', HTMLAttributes>;
|
||||
h4: HTMLProps<'h4', HTMLAttributes>;
|
||||
h5: HTMLProps<'h5', HTMLAttributes>;
|
||||
h6: HTMLProps<'h6', HTMLAttributes>;
|
||||
head: HTMLProps<'head', HTMLAttributes>;
|
||||
header: HTMLProps<'header', HTMLAttributes>;
|
||||
hgroup: HTMLProps<'hgroup', HTMLAttributes>;
|
||||
hr: HTMLProps<'hr', HTMLAttributes>;
|
||||
html: HTMLProps<'html', HTMLAttributes>;
|
||||
i: HTMLProps<'i', HTMLAttributes>;
|
||||
iframe: HTMLProps<'iframe', HTMLAttributes>;
|
||||
img: HTMLProps<'img', HTMLAttributes>;
|
||||
input: HTMLProps<'input', HTMLAttributes>;
|
||||
ins: HTMLProps<'ins', HTMLAttributes>;
|
||||
kbd: HTMLProps<'kbd', HTMLAttributes>;
|
||||
keygen: HTMLProps<'keygen', HTMLAttributes>;
|
||||
label: HTMLProps<'label', HTMLAttributes>;
|
||||
legend: HTMLProps<'legend', HTMLAttributes>;
|
||||
li: HTMLProps<'li', HTMLAttributes>;
|
||||
link: HTMLProps<'link', HTMLAttributes>;
|
||||
main: HTMLProps<'main', HTMLAttributes>;
|
||||
map: HTMLProps<'map', HTMLAttributes>;
|
||||
mark: HTMLProps<'mark', HTMLAttributes>;
|
||||
menu: HTMLProps<'menu', HTMLAttributes>;
|
||||
menuitem: HTMLProps<'menuitem', HTMLAttributes>;
|
||||
meta: HTMLProps<'meta', HTMLAttributes>;
|
||||
meter: HTMLProps<'meter', HTMLAttributes>;
|
||||
nav: HTMLProps<'nav', HTMLAttributes>;
|
||||
noscript: HTMLProps<'noscript', HTMLAttributes>;
|
||||
object: HTMLProps<'object', HTMLAttributes>;
|
||||
ol: HTMLProps<'ol', HTMLAttributes>;
|
||||
optgroup: HTMLProps<'optgroup', HTMLAttributes>;
|
||||
option: HTMLProps<'option', HTMLAttributes>;
|
||||
output: HTMLProps<'output', HTMLAttributes>;
|
||||
p: HTMLProps<'p', HTMLAttributes>;
|
||||
param: HTMLProps<'param', HTMLAttributes>;
|
||||
picture: HTMLProps<'picture', HTMLAttributes>;
|
||||
pre: HTMLProps<'pre', HTMLAttributes>;
|
||||
progress: HTMLProps<'progress', HTMLAttributes>;
|
||||
q: HTMLProps<'q', HTMLAttributes>;
|
||||
rp: HTMLProps<'rp', HTMLAttributes>;
|
||||
rt: HTMLProps<'rt', HTMLAttributes>;
|
||||
ruby: HTMLProps<'ruby', HTMLAttributes>;
|
||||
s: HTMLProps<'s', HTMLAttributes>;
|
||||
samp: HTMLProps<'samp', HTMLAttributes>;
|
||||
slot: HTMLProps<'slot', HTMLAttributes>;
|
||||
script: HTMLProps<'script', HTMLAttributes>;
|
||||
section: HTMLProps<'section', HTMLAttributes>;
|
||||
select: HTMLProps<'select', HTMLAttributes>;
|
||||
small: HTMLProps<'small', HTMLAttributes>;
|
||||
source: HTMLProps<'source', HTMLAttributes>;
|
||||
span: HTMLProps<'span', HTMLAttributes>;
|
||||
strong: HTMLProps<'strong', HTMLAttributes>;
|
||||
style: HTMLProps<'style', HTMLAttributes>;
|
||||
sub: HTMLProps<'sub', HTMLAttributes>;
|
||||
summary: HTMLProps<'summary', HTMLAttributes>;
|
||||
sup: HTMLProps<'sup', HTMLAttributes>;
|
||||
table: HTMLProps<'table', HTMLAttributes>;
|
||||
template: HTMLProps<'template', HTMLAttributes>;
|
||||
tbody: HTMLProps<'tbody', HTMLAttributes>;
|
||||
td: HTMLProps<'td', HTMLAttributes>;
|
||||
textarea: HTMLProps<'textarea', HTMLAttributes>;
|
||||
tfoot: HTMLProps<'tfoot', HTMLAttributes>;
|
||||
th: HTMLProps<'th', HTMLAttributes>;
|
||||
thead: HTMLProps<'thead', HTMLAttributes>;
|
||||
time: HTMLProps<'time', HTMLAttributes>;
|
||||
title: HTMLProps<'title', HTMLAttributes>;
|
||||
tr: HTMLProps<'tr', HTMLAttributes>;
|
||||
track: HTMLProps<'track', HTMLAttributes>;
|
||||
u: HTMLProps<'u', HTMLAttributes>;
|
||||
ul: HTMLProps<'ul', HTMLAttributes>;
|
||||
var: HTMLProps<'var', HTMLAttributes>;
|
||||
video: HTMLProps<'video', HTMLAttributes>;
|
||||
wbr: HTMLProps<'wbr', HTMLAttributes>;
|
||||
webview: HTMLProps<'webview', HTMLAttributes>;
|
||||
// SVG
|
||||
svg: HTMLProps<'svg', SVGAttributes>;
|
||||
|
||||
animate: HTMLProps<'animate', SVGAttributes>;
|
||||
animateMotion: HTMLProps<'animateMotion', SVGAttributes>;
|
||||
animateTransform: HTMLProps<'animateTransform', SVGAttributes>;
|
||||
circle: HTMLProps<'circle', SVGAttributes>;
|
||||
clipPath: HTMLProps<'clipPath', SVGAttributes>;
|
||||
defs: HTMLProps<'defs', SVGAttributes>;
|
||||
desc: HTMLProps<'desc', SVGAttributes>;
|
||||
ellipse: HTMLProps<'ellipse', SVGAttributes>;
|
||||
feBlend: HTMLProps<'feBlend', SVGAttributes>;
|
||||
feColorMatrix: HTMLProps<'feColorMatrix', SVGAttributes>;
|
||||
feComponentTransfer: HTMLProps<'feComponentTransfer', SVGAttributes>;
|
||||
feComposite: HTMLProps<'feComposite', SVGAttributes>;
|
||||
feConvolveMatrix: HTMLProps<'feConvolveMatrix', SVGAttributes>;
|
||||
feDiffuseLighting: HTMLProps<'feDiffuseLighting', SVGAttributes>;
|
||||
feDisplacementMap: HTMLProps<'feDisplacementMap', SVGAttributes>;
|
||||
feDistantLight: HTMLProps<'feDistantLight', SVGAttributes>;
|
||||
feDropShadow: HTMLProps<'feDropShadow', SVGAttributes>;
|
||||
feFlood: HTMLProps<'feFlood', SVGAttributes>;
|
||||
feFuncA: HTMLProps<'feFuncA', SVGAttributes>;
|
||||
feFuncB: HTMLProps<'feFuncB', SVGAttributes>;
|
||||
feFuncG: HTMLProps<'feFuncG', SVGAttributes>;
|
||||
feFuncR: HTMLProps<'feFuncR', SVGAttributes>;
|
||||
feGaussianBlur: HTMLProps<'feGaussianBlur', SVGAttributes>;
|
||||
feImage: HTMLProps<'feImage', SVGAttributes>;
|
||||
feMerge: HTMLProps<'feMerge', SVGAttributes>;
|
||||
feMergeNode: HTMLProps<'feMergeNode', SVGAttributes>;
|
||||
feMorphology: HTMLProps<'feMorphology', SVGAttributes>;
|
||||
feOffset: HTMLProps<'feOffset', SVGAttributes>;
|
||||
fePointLight: HTMLProps<'fePointLight', SVGAttributes>;
|
||||
feSpecularLighting: HTMLProps<'feSpecularLighting', SVGAttributes>;
|
||||
feSpotLight: HTMLProps<'feSpotLight', SVGAttributes>;
|
||||
feTile: HTMLProps<'feTile', SVGAttributes>;
|
||||
feTurbulence: HTMLProps<'feTurbulence', SVGAttributes>;
|
||||
filter: HTMLProps<'filter', SVGAttributes>;
|
||||
foreignObject: HTMLProps<'foreignObject', SVGAttributes>;
|
||||
g: HTMLProps<'g', SVGAttributes>;
|
||||
image: HTMLProps<'image', SVGAttributes>;
|
||||
line: HTMLProps<'line', SVGAttributes>;
|
||||
linearGradient: HTMLProps<'linearGradient', SVGAttributes>;
|
||||
marker: HTMLProps<'marker', SVGAttributes>;
|
||||
mask: HTMLProps<'mask', SVGAttributes>;
|
||||
metadata: HTMLProps<'metadata', SVGAttributes>;
|
||||
mpath: HTMLProps<'mpath', SVGAttributes>;
|
||||
path: HTMLProps<'path', SVGAttributes>;
|
||||
pattern: HTMLProps<'pattern', SVGAttributes>;
|
||||
polygon: HTMLProps<'polygon', SVGAttributes>;
|
||||
polyline: HTMLProps<'polyline', SVGAttributes>;
|
||||
radialGradient: HTMLProps<'radialGradient', SVGAttributes>;
|
||||
rect: HTMLProps<'rect', SVGAttributes>;
|
||||
stop: HTMLProps<'stop', SVGAttributes>;
|
||||
switch: HTMLProps<'switch', SVGAttributes>;
|
||||
symbol: HTMLProps<'symbol', SVGAttributes>;
|
||||
text: HTMLProps<'text', SVGAttributes>;
|
||||
textPath: HTMLProps<'textPath', SVGAttributes>;
|
||||
tspan: HTMLProps<'tspan', SVGAttributes>;
|
||||
use: HTMLProps<'use', SVGAttributes>;
|
||||
view: HTMLProps<'view', SVGAttributes>;
|
||||
|
||||
// Svelte specific
|
||||
'svelte:window': HTMLProps<'svelte:window', HTMLAttributes>;
|
||||
'svelte:body': HTMLProps<'svelte:body', HTMLAttributes>;
|
||||
'svelte:document': HTMLProps<'svelte:document', HTMLAttributes>;
|
||||
'svelte:fragment': { slot?: string };
|
||||
'svelte:options': HTMLProps<'svelte:options', HTMLAttributes>;
|
||||
'svelte:head': { [name: string]: any };
|
||||
|
||||
[name: string]: { [name: string]: any };
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue