@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.
@@ -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
- import type { Compile, Properties, Style, Target, TeilerComponent } from '@teiler/core'
2
- import type { ComponentType, SvelteComponent } from 'svelte'
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
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "include": [
3
- "src/**/*"
3
+ "src/**/*",
4
+ "stories/stories.d.ts"
4
5
  ],
5
6
  "exclude": [
6
7
  "node_modules"
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