@teiler/svelte 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/teiler-svelte.cjs.js +1 -1
- package/dist/teiler-svelte.cjs.js.map +1 -1
- package/dist/teiler-svelte.d.ts +80 -11
- package/dist/teiler-svelte.esm.js +1 -1
- package/dist/teiler-svelte.esm.js.map +1 -1
- package/dist/teiler-svelte.umd.js +1 -1
- package/dist/teiler-svelte.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/Styled.svelte +5 -1
- package/src/ThemeProvider.svelte +14 -0
- package/src/component.ts +59 -0
- package/src/index.ts +2 -59
- package/tsconfig.json +2 -1
- package/src/tags.ts +0 -140
package/src/component.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Compile, HTMLElements, Properties, Style, TeilerComponent } from '@teiler/core'
|
|
2
|
+
import type { ComponentType, SvelteComponent } from 'svelte'
|
|
3
|
+
|
|
4
|
+
import { component, global, keyframes, styled, tags } from '@teiler/core'
|
|
5
|
+
import Styled from './Styled.svelte'
|
|
6
|
+
|
|
7
|
+
type SvelteTeilerComponent<Target, Props> = TeilerComponent<Target, Props> & ComponentType<SvelteComponent>
|
|
8
|
+
|
|
9
|
+
const createComponent = <Target extends HTMLElements, Props>(compile: Compile, tag: Target, styles: Array<Style<Props>>): SvelteTeilerComponent<Target, Props> => {
|
|
10
|
+
return class extends Styled {
|
|
11
|
+
static styles = styles
|
|
12
|
+
static tag = tag
|
|
13
|
+
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super({
|
|
16
|
+
...options,
|
|
17
|
+
props: {
|
|
18
|
+
...options.props,
|
|
19
|
+
compile,
|
|
20
|
+
tag,
|
|
21
|
+
styles,
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
type InferProps<Component, Props> = Component extends SvelteTeilerComponent<HTMLElements, infer P> ? P & Props : Props
|
|
29
|
+
type InferComponent<Component, Props> = Component extends SvelteTeilerComponent<infer E, infer P> ? SvelteTeilerComponent<E, Props & P> : SvelteTeilerComponent<HTMLElements, Props>
|
|
30
|
+
|
|
31
|
+
type Component<Target extends HTMLElements> = {
|
|
32
|
+
<Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<Props>[]): SvelteTeilerComponent<Target, Props>
|
|
33
|
+
<Component>(binded: Component): <Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<InferProps<Component, Props>>[]) => InferComponent<Component, Props>
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type Global = {
|
|
37
|
+
<Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<Props>[]): SvelteTeilerComponent<unknown, Props>
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type ComponentWithTags = Component<'div'> & { [K in HTMLElements]: Component<K> }
|
|
41
|
+
|
|
42
|
+
const construct = <Target extends HTMLElements>(tag: Target, compile: Compile) => {
|
|
43
|
+
return <Props extends object = {}>(stringOrBinded: TeilerComponent<Target, Props> | TemplateStringsArray, ...properties: Properties<Props>[]) => {
|
|
44
|
+
const binded = createComponent.bind(null, compile, (stringOrBinded as TeilerComponent<Target, Props>).tag || tag)
|
|
45
|
+
return styled<Props, SvelteTeilerComponent<Target, Props>>(binded, stringOrBinded, ...properties)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const baseComponent = construct('div', component)
|
|
50
|
+
|
|
51
|
+
tags.forEach((tag) => {
|
|
52
|
+
baseComponent[tag] = construct(tag, component)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
const svelteComponent = baseComponent as ComponentWithTags
|
|
56
|
+
|
|
57
|
+
const svelteGlobal = construct(null, global) as Global
|
|
58
|
+
|
|
59
|
+
export { svelteComponent as component, svelteGlobal as global, keyframes, createComponent }
|
package/src/index.ts
CHANGED
|
@@ -1,59 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { component, global, keyframes, styled } from '@teiler/core'
|
|
5
|
-
import Styled from './Styled.svelte'
|
|
6
|
-
import tags from './tags'
|
|
7
|
-
|
|
8
|
-
type SvelteTeilerComponent<Target, Props> = TeilerComponent<Target, Props> & ComponentType<SvelteComponent>
|
|
9
|
-
|
|
10
|
-
const createComponent = <Target, Props>(compile: Compile, tag: Target, styles: Array<Style<Props>>): SvelteTeilerComponent<Target, Props> => {
|
|
11
|
-
return class extends Styled {
|
|
12
|
-
static styles = styles
|
|
13
|
-
static tag = tag
|
|
14
|
-
|
|
15
|
-
constructor(options) {
|
|
16
|
-
super({
|
|
17
|
-
...options,
|
|
18
|
-
props: {
|
|
19
|
-
...options.props,
|
|
20
|
-
compile,
|
|
21
|
-
tag,
|
|
22
|
-
styles,
|
|
23
|
-
},
|
|
24
|
-
})
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
type InferProps<Component, Props> = Component extends SvelteTeilerComponent<Target, infer P> ? P & Props : Props
|
|
30
|
-
type InferComponent<Component, Props> = Component extends SvelteTeilerComponent<infer E, infer P> ? SvelteTeilerComponent<E, Props & P> : SvelteTeilerComponent<Target, Props>
|
|
31
|
-
|
|
32
|
-
type Component<Target> = {
|
|
33
|
-
<Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<Props>[]): SvelteTeilerComponent<Target, Props>
|
|
34
|
-
<Component>(binded: Component): <Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<InferProps<Component, Props>>[]) => InferComponent<Component, Props>
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
type Global = {
|
|
38
|
-
<Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<Props>[]): SvelteTeilerComponent<unknown, Props>
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
type ComponentWithTags = Component<'div'> & { [K in (typeof tags)[number]]: Component<K> }
|
|
42
|
-
|
|
43
|
-
const construct = (tag: string, compile: Compile) => {
|
|
44
|
-
return <Props extends object = {}>(stringOrBinded: TeilerComponent<Target, Props> | TemplateStringsArray, ...properties: Properties<Props>[]) => {
|
|
45
|
-
const binded = createComponent.bind(null, compile, (stringOrBinded as TeilerComponent<Target, Props>).tag || tag)
|
|
46
|
-
return styled<Props, SvelteTeilerComponent<Target, Props>>(binded, stringOrBinded, ...properties)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const svelteComponent = construct('div', component)
|
|
51
|
-
|
|
52
|
-
tags.forEach((tag) => {
|
|
53
|
-
svelteComponent[tag] = construct(tag, component)
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
const svelteGlobal = construct(null, global) as Global
|
|
57
|
-
|
|
58
|
-
export { svelteGlobal as global, keyframes, createComponent }
|
|
59
|
-
export default svelteComponent as ComponentWithTags
|
|
1
|
+
export { component, global, keyframes, createComponent } from './component'
|
|
2
|
+
export { default as ThemeProvider } from './ThemeProvider.svelte'
|
package/tsconfig.json
CHANGED
package/src/tags.ts
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
const tags = [
|
|
2
|
-
'a',
|
|
3
|
-
'abbr',
|
|
4
|
-
'address',
|
|
5
|
-
'area',
|
|
6
|
-
'article',
|
|
7
|
-
'aside',
|
|
8
|
-
'audio',
|
|
9
|
-
'b',
|
|
10
|
-
'base',
|
|
11
|
-
'bdi',
|
|
12
|
-
'bdo',
|
|
13
|
-
'big',
|
|
14
|
-
'blockquote',
|
|
15
|
-
'body',
|
|
16
|
-
'br',
|
|
17
|
-
'button',
|
|
18
|
-
'canvas',
|
|
19
|
-
'caption',
|
|
20
|
-
'cite',
|
|
21
|
-
'code',
|
|
22
|
-
'col',
|
|
23
|
-
'colgroup',
|
|
24
|
-
'data',
|
|
25
|
-
'datalist',
|
|
26
|
-
'dd',
|
|
27
|
-
'del',
|
|
28
|
-
'details',
|
|
29
|
-
'dfn',
|
|
30
|
-
'dialog',
|
|
31
|
-
'div',
|
|
32
|
-
'dl',
|
|
33
|
-
'dt',
|
|
34
|
-
'em',
|
|
35
|
-
'embed',
|
|
36
|
-
'fieldset',
|
|
37
|
-
'figcaption',
|
|
38
|
-
'figure',
|
|
39
|
-
'footer',
|
|
40
|
-
'form',
|
|
41
|
-
'h1',
|
|
42
|
-
'h2',
|
|
43
|
-
'h3',
|
|
44
|
-
'h4',
|
|
45
|
-
'h5',
|
|
46
|
-
'h6',
|
|
47
|
-
'head',
|
|
48
|
-
'header',
|
|
49
|
-
'hgroup',
|
|
50
|
-
'hr',
|
|
51
|
-
'html',
|
|
52
|
-
'i',
|
|
53
|
-
'iframe',
|
|
54
|
-
'img',
|
|
55
|
-
'input',
|
|
56
|
-
'ins',
|
|
57
|
-
'kbd',
|
|
58
|
-
'keygen',
|
|
59
|
-
'label',
|
|
60
|
-
'legend',
|
|
61
|
-
'li',
|
|
62
|
-
'link',
|
|
63
|
-
'main',
|
|
64
|
-
'map',
|
|
65
|
-
'mark',
|
|
66
|
-
'marquee',
|
|
67
|
-
'menu',
|
|
68
|
-
'menuitem',
|
|
69
|
-
'meta',
|
|
70
|
-
'meter',
|
|
71
|
-
'nav',
|
|
72
|
-
'noscript',
|
|
73
|
-
'object',
|
|
74
|
-
'ol',
|
|
75
|
-
'optgroup',
|
|
76
|
-
'option',
|
|
77
|
-
'output',
|
|
78
|
-
'p',
|
|
79
|
-
'param',
|
|
80
|
-
'picture',
|
|
81
|
-
'pre',
|
|
82
|
-
'progress',
|
|
83
|
-
'q',
|
|
84
|
-
'rp',
|
|
85
|
-
'rt',
|
|
86
|
-
'ruby',
|
|
87
|
-
's',
|
|
88
|
-
'samp',
|
|
89
|
-
'script',
|
|
90
|
-
'section',
|
|
91
|
-
'select',
|
|
92
|
-
'small',
|
|
93
|
-
'source',
|
|
94
|
-
'span',
|
|
95
|
-
'strong',
|
|
96
|
-
'style',
|
|
97
|
-
'sub',
|
|
98
|
-
'summary',
|
|
99
|
-
'sup',
|
|
100
|
-
'table',
|
|
101
|
-
'tbody',
|
|
102
|
-
'td',
|
|
103
|
-
'textarea',
|
|
104
|
-
'tfoot',
|
|
105
|
-
'th',
|
|
106
|
-
'thead',
|
|
107
|
-
'time',
|
|
108
|
-
'title',
|
|
109
|
-
'tr',
|
|
110
|
-
'track',
|
|
111
|
-
'u',
|
|
112
|
-
'ul',
|
|
113
|
-
'var',
|
|
114
|
-
'video',
|
|
115
|
-
'wbr',
|
|
116
|
-
|
|
117
|
-
// SVG
|
|
118
|
-
'circle',
|
|
119
|
-
'clipPath',
|
|
120
|
-
'defs',
|
|
121
|
-
'ellipse',
|
|
122
|
-
'foreignObject',
|
|
123
|
-
'g',
|
|
124
|
-
'image',
|
|
125
|
-
'line',
|
|
126
|
-
'linearGradient',
|
|
127
|
-
'mask',
|
|
128
|
-
'path',
|
|
129
|
-
'pattern',
|
|
130
|
-
'polygon',
|
|
131
|
-
'polyline',
|
|
132
|
-
'radialGradient',
|
|
133
|
-
'rect',
|
|
134
|
-
'stop',
|
|
135
|
-
'svg',
|
|
136
|
-
'text',
|
|
137
|
-
'tspan'
|
|
138
|
-
] as const
|
|
139
|
-
|
|
140
|
-
export default tags
|