Skip to content

Commit bf7b2a4

Browse files
committed
feat: new typing method gets rid of separate type files, keeps html prop autocomplete
1 parent 1e2d3ea commit bf7b2a4

21 files changed

+75
-527
lines changed

packages/button/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@
4545
"@material/ripple": "^13.0.0",
4646
"@material/theme": "^13.0.0",
4747
"@smui/common": "^6.1.0",
48-
"@smui/ripple": "^6.1.0",
49-
"svelte2tsx": "^0.5.12"
48+
"@smui/ripple": "^6.1.0"
5049
},
5150
"devDependencies": {
5251
"@tsconfig/svelte": "^3.0.0",

packages/button/src/Button.svelte

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
>
5353

5454
<script lang="ts">
55-
import type { ComponentType } from 'svelte';
55+
import type { ComponentType, SvelteComponent } from 'svelte';
5656
import { setContext, getContext } from 'svelte';
5757
import { get_current_component } from 'svelte/internal';
5858
import type { ActionArray } from '@smui/common/internal';
@@ -62,14 +62,12 @@
6262
dispatch,
6363
} from '@smui/common/internal';
6464
import Ripple from '@smui/ripple';
65-
import type { SmuiComponent } from '@smui/common';
65+
import type { SmuiElementTagNameMap } from '@smui/common';
6666
import { SmuiElement } from '@smui/common';
6767
68-
type TagName = $$Generic<
69-
keyof HTMLElementTagNameMap | keyof SVGElementTagNameMap
70-
>;
71-
type Component = $$Generic<SmuiComponent<TagName>>;
72-
type $$Props = svelteHTML.IntrinsicElements[TagName] & {
68+
type TagName = $$Generic<keyof SmuiElementTagNameMap>;
69+
type Component = $$Generic<ComponentType<SvelteComponent>>;
70+
type OwnProps = {
7371
use?: ActionArray;
7472
class?: string;
7573
style?: string;
@@ -81,9 +79,15 @@
8179
action?: string;
8280
defaultAction?: boolean;
8381
secondary?: boolean;
84-
component?: ComponentType<Component>;
82+
component?: Component;
8583
tag?: TagName;
8684
};
85+
type $$Props = {
86+
[P in Exclude<
87+
keyof svelteHTML.IntrinsicElements[TagName],
88+
keyof OwnProps
89+
>]?: svelteHTML.IntrinsicElements[TagName][P];
90+
} & OwnProps;
8791
8892
const forwardEvents = forwardEventsBuilder(get_current_component());
8993
@@ -101,15 +105,18 @@
101105
export let defaultAction = false;
102106
export let secondary = false;
103107
104-
let element: Component;
108+
let element: SvelteComponent;
105109
let internalClasses: { [k: string]: boolean } = {};
106110
let internalStyles: { [k: string]: string } = {};
107111
let context = getContext<string | undefined>('SMUI:button:context');
108112
109-
export let component: ComponentType<Component> =
110-
SmuiElement as ComponentType<Component>;
113+
export let component: Component = SmuiElement as unknown as Component;
111114
export let tag: TagName | undefined = (
112-
component === SmuiElement ? (href == null ? 'button' : 'a') : undefined
115+
component === (SmuiElement as unknown as Component)
116+
? href == null
117+
? 'button'
118+
: 'a'
119+
: undefined
113120
) as TagName | undefined;
114121
115122
$: actionProp =
@@ -169,11 +176,7 @@
169176
}
170177
}
171178
172-
<<<<<<< HEAD
173179
export function getElement() {
174-
=======
175-
export function getElement(): HTMLElement {
176-
>>>>>>> v7
177180
return element.getElement();
178181
}
179182
</script>

packages/button/src/Button.types.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

packages/button/src/Group.svelte

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@
2121
useActions,
2222
} from '@smui/common/internal';
2323
24+
type OwnProps = {
25+
use?: ActionArray;
26+
class?: string;
27+
variant?: 'text' | 'raised' | 'unelevated' | 'outlined';
28+
};
29+
type $$Props = {
30+
[P in Exclude<
31+
keyof svelteHTML.IntrinsicElements['div'],
32+
keyof OwnProps
33+
>]?: svelteHTML.IntrinsicElements['div'][P];
34+
} & OwnProps;
35+
2436
const forwardEvents = forwardEventsBuilder(get_current_component());
2537
2638
// Remember to update types file if you add/remove/rename props.

packages/button/src/Group.types.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/button/src/ambient.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
/// <reference types="svelte" />
2-
/// <reference types="svelte2tsx/svelte-jsx" />

packages/button/src/index.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
1-
import type { ComponentType } from 'svelte';
2-
31
import Button from './Button.svelte';
4-
export * from './Button.types.js';
52

6-
import GroupComponent from './Group.svelte';
7-
import type { GroupComponentDev } from './Group.types.js';
8-
export * from './Group.types.js';
9-
const Group = GroupComponent as ComponentType<GroupComponentDev>;
3+
import Group from './Group.svelte';
104
import GroupItem from './GroupItem.js';
115
import { Label, Icon } from '@smui/common';
126

packages/common/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
},
6363
"dependencies": {
6464
"@material/dom": "^13.0.0",
65-
"@tsconfig/svelte": "^3.0.0",
66-
"svelte2tsx": "^0.5.12"
65+
"@tsconfig/svelte": "^3.0.0"
6766
}
6867
}

packages/common/src/CommonIcon.svelte

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@
1919
>
2020

2121
<script lang="ts">
22-
import type { ComponentType } from 'svelte';
22+
import type { ComponentType, SvelteComponent } from 'svelte';
2323
import { getContext } from 'svelte';
2424
import { get_current_component } from 'svelte/internal';
2525
2626
import type { ActionArray } from './internal/useActions.js';
2727
import { forwardEventsBuilder, classMap } from './internal/index.js';
28-
import type { SmuiComponent, SmuiElementTagNameMap } from './smui.types.js';
28+
import type { SmuiElementTagNameMap } from './smui.types.js';
2929
import { SmuiElement } from './index.js';
3030
3131
type TagName = $$Generic<keyof SmuiElementTagNameMap>;
32-
type Component = $$Generic<SmuiComponent<TagName>>;
32+
type Component = $$Generic<ComponentType<SvelteComponent>>;
3333
type OwnProps = {
3434
use?: ActionArray;
3535
class?: string;
3636
on?: boolean;
37-
component?: ComponentType<Component>;
37+
component?: Component;
3838
tag?: TagName;
3939
};
4040
type $$Props = {
@@ -52,12 +52,11 @@
5252
export { className as class };
5353
export let on = false;
5454
55-
let element: Component;
55+
let element: SvelteComponent;
5656
57-
export let component: ComponentType<Component> =
58-
SmuiElement as ComponentType<Component>;
57+
export let component: Component = SmuiElement as unknown as Component;
5958
export let tag: TagName | undefined = (
60-
component === SmuiElement ? 'svg' : undefined
59+
component === (SmuiElement as unknown as Component) ? 'svg' : undefined
6160
) as TagName | undefined;
6261
6362
const context = getContext<string | undefined>('SMUI:icon:context');

packages/common/src/CommonIcon.types.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)