Skip to content

Commit 223b72b

Browse files
committed
feat: migrate drawer to typescript
1 parent a146d9e commit 223b72b

20 files changed

+90
-678
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import type { SMUIComponent } from '@smui/common';
12
import { classAdderBuilder } from '@smui/common/internal';
23
import Div from '@smui/common/Div.svelte';
34

45
export default classAdderBuilder({
56
class: 'mdc-drawer-app-content',
6-
component: Div,
7+
component: Div as typeof SMUIComponent,
78
});
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import type { SMUIComponent } from '@smui/common';
12
import { classAdderBuilder } from '@smui/common/internal';
23
import Div from '@smui/common/Div.svelte';
34

45
export default classAdderBuilder({
56
class: 'mdc-drawer__content',
6-
component: Div,
7+
component: Div as typeof SMUIComponent,
78
});

packages/drawer/Drawer.svelte

+28-22
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<slot />
1818
</aside>
1919

20-
<script>
20+
<script lang="ts">
2121
import {
2222
MDCDismissibleDrawerFoundation,
2323
MDCModalDrawerFoundation,
@@ -30,24 +30,28 @@
3030
classMap,
3131
useActions,
3232
dispatch,
33+
ActionArray,
3334
} from '@smui/common/internal';
3435
const { FocusTrap } = domFocusTrap;
3536
3637
const forwardEvents = forwardEventsBuilder(get_current_component());
3738
38-
export let use = [];
39+
export let use: ActionArray = [];
3940
let className = '';
4041
export { className as class };
41-
export let variant = null;
42+
export let variant: 'dismissible' | 'modal' | undefined = undefined;
4243
export let open = false;
4344
export let fixed = true;
4445
45-
let element;
46-
let instance;
47-
let internalClasses = {};
48-
let previousFocus;
49-
let focusTrap;
50-
let scrim = false;
46+
let element: HTMLElement;
47+
let instance:
48+
| MDCDismissibleDrawerFoundation
49+
| MDCModalDrawerFoundation
50+
| undefined = undefined;
51+
let internalClasses: { [k: string]: boolean } = {};
52+
let previousFocus: Element | null = null;
53+
let focusTrap: domFocusTrap.FocusTrap;
54+
let scrim: Element | false = false;
5155
5256
setContext('SMUI:list:nav', true);
5357
setContext('SMUI:list:item:nav', true);
@@ -92,16 +96,18 @@
9296
}
9397
9498
if (variant === 'modal') {
95-
scrim = element.parentNode.querySelector('.mdc-drawer-scrim');
99+
scrim = element.parentNode?.querySelector('.mdc-drawer-scrim') ?? false;
96100
if (scrim) {
97101
scrim.addEventListener('SMUIDrawerScrim:click', handleScrimClick);
98102
}
99103
}
100104
101-
const Foundation = {
102-
dismissible: MDCDismissibleDrawerFoundation,
103-
modal: MDCModalDrawerFoundation,
104-
}[variant];
105+
const Foundation =
106+
variant === 'dismissible'
107+
? MDCDismissibleDrawerFoundation
108+
: variant === 'modal'
109+
? MDCModalDrawerFoundation
110+
: undefined;
105111
106112
return Foundation
107113
? new Foundation({
@@ -114,14 +120,14 @@
114120
restoreFocus: () => {
115121
if (
116122
previousFocus &&
117-
previousFocus.focus &&
123+
'focus' in previousFocus &&
118124
element.contains(document.activeElement)
119125
) {
120-
previousFocus.focus();
126+
(previousFocus as HTMLInputElement).focus();
121127
}
122128
},
123129
focusActiveNavigationItem: () => {
124-
const activeNavItemEl = element.querySelector(
130+
const activeNavItemEl = element.querySelector<HTMLInputElement>(
125131
'.mdc-list-item--activated,.mdc-deprecated-list-item--activated'
126132
);
127133
if (activeNavItemEl) {
@@ -142,29 +148,29 @@
142148
: undefined;
143149
}
144150
145-
function hasClass(className) {
151+
function hasClass(className: string) {
146152
return className in internalClasses
147153
? internalClasses[className]
148154
: getElement().classList.contains(className);
149155
}
150156
151-
function addClass(className) {
157+
function addClass(className: string) {
152158
if (!internalClasses[className]) {
153159
internalClasses[className] = true;
154160
}
155161
}
156162
157-
function removeClass(className) {
163+
function removeClass(className: string) {
158164
if (!(className in internalClasses) || internalClasses[className]) {
159165
internalClasses[className] = false;
160166
}
161167
}
162168
163169
function handleScrimClick() {
164-
instance && instance.handleScrimClick();
170+
instance && 'handleScrimClick' in instance && instance.handleScrimClick();
165171
}
166172
167-
export function setOpen(value) {
173+
export function setOpen(value: boolean) {
168174
open = value;
169175
}
170176
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import type { SMUIComponent } from '@smui/common';
12
import { classAdderBuilder } from '@smui/common/internal';
23
import Div from '@smui/common/Div.svelte';
34

45
export default classAdderBuilder({
56
class: 'mdc-drawer__header',
6-
component: Div,
7+
component: Div as typeof SMUIComponent,
78
});

packages/drawer/Scrim.svelte

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,25 @@
1313
<slot />
1414
</svelte:component>
1515

16-
<script>
16+
<script lang="ts">
17+
import type { SMUIComponent } from '@smui/common';
1718
import { get_current_component } from 'svelte/internal';
1819
import {
1920
forwardEventsBuilder,
2021
classMap,
2122
dispatch,
23+
ActionArray,
2224
} from '@smui/common/internal';
2325
import Div from '@smui/common/Div.svelte';
2426
2527
const forwardEvents = forwardEventsBuilder(get_current_component());
2628
27-
export let use = [];
29+
export let use: ActionArray = [];
2830
let className = '';
2931
export { className as class };
3032
export let fixed = true;
3133
32-
let element;
34+
let element: SMUIComponent;
3335
3436
export let component = Div;
3537
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import type { SMUIComponent } from '@smui/common';
12
import { classAdderBuilder } from '@smui/common/internal';
23
import H2 from '@smui/common/H2.svelte';
34

45
export default classAdderBuilder({
56
class: 'mdc-drawer__subtitle',
6-
component: H2,
7+
component: H2 as typeof SMUIComponent,
78
});
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import type { SMUIComponent } from '@smui/common';
12
import { classAdderBuilder } from '@smui/common/internal';
23
import H1 from '@smui/common/H1.svelte';
34

45
export default classAdderBuilder({
56
class: 'mdc-drawer__title',
6-
component: H1,
7+
component: H1 as typeof SMUIComponent,
78
});

packages/drawer/bare.js

-2
This file was deleted.

packages/drawer/bare.ts

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './index';
2+
export { default } from './index';

packages/drawer/index.js

-12
This file was deleted.

packages/drawer/index.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import Drawer from './Drawer.svelte';
2+
3+
import AppContent from './AppContent';
4+
import Content from './Content';
5+
import Header from './Header';
6+
import Title from './Title';
7+
import Subtitle from './Subtitle';
8+
import Scrim from './Scrim.svelte';
9+
10+
export default Drawer;
11+
12+
export { AppContent, Content, Header, Title, Subtitle, Scrim };

0 commit comments

Comments
 (0)