|
17 | 17 | <slot />
|
18 | 18 | </aside>
|
19 | 19 |
|
20 |
| -<script> |
| 20 | +<script lang="ts"> |
21 | 21 | import {
|
22 | 22 | MDCDismissibleDrawerFoundation,
|
23 | 23 | MDCModalDrawerFoundation,
|
|
30 | 30 | classMap,
|
31 | 31 | useActions,
|
32 | 32 | dispatch,
|
| 33 | + ActionArray, |
33 | 34 | } from '@smui/common/internal';
|
34 | 35 | const { FocusTrap } = domFocusTrap;
|
35 | 36 |
|
36 | 37 | const forwardEvents = forwardEventsBuilder(get_current_component());
|
37 | 38 |
|
38 |
| - export let use = []; |
| 39 | + export let use: ActionArray = []; |
39 | 40 | let className = '';
|
40 | 41 | export { className as class };
|
41 |
| - export let variant = null; |
| 42 | + export let variant: 'dismissible' | 'modal' | undefined = undefined; |
42 | 43 | export let open = false;
|
43 | 44 | export let fixed = true;
|
44 | 45 |
|
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; |
51 | 55 |
|
52 | 56 | setContext('SMUI:list:nav', true);
|
53 | 57 | setContext('SMUI:list:item:nav', true);
|
|
92 | 96 | }
|
93 | 97 |
|
94 | 98 | if (variant === 'modal') {
|
95 |
| - scrim = element.parentNode.querySelector('.mdc-drawer-scrim'); |
| 99 | + scrim = element.parentNode?.querySelector('.mdc-drawer-scrim') ?? false; |
96 | 100 | if (scrim) {
|
97 | 101 | scrim.addEventListener('SMUIDrawerScrim:click', handleScrimClick);
|
98 | 102 | }
|
99 | 103 | }
|
100 | 104 |
|
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; |
105 | 111 |
|
106 | 112 | return Foundation
|
107 | 113 | ? new Foundation({
|
|
114 | 120 | restoreFocus: () => {
|
115 | 121 | if (
|
116 | 122 | previousFocus &&
|
117 |
| - previousFocus.focus && |
| 123 | + 'focus' in previousFocus && |
118 | 124 | element.contains(document.activeElement)
|
119 | 125 | ) {
|
120 |
| - previousFocus.focus(); |
| 126 | + (previousFocus as HTMLInputElement).focus(); |
121 | 127 | }
|
122 | 128 | },
|
123 | 129 | focusActiveNavigationItem: () => {
|
124 |
| - const activeNavItemEl = element.querySelector( |
| 130 | + const activeNavItemEl = element.querySelector<HTMLInputElement>( |
125 | 131 | '.mdc-list-item--activated,.mdc-deprecated-list-item--activated'
|
126 | 132 | );
|
127 | 133 | if (activeNavItemEl) {
|
|
142 | 148 | : undefined;
|
143 | 149 | }
|
144 | 150 |
|
145 |
| - function hasClass(className) { |
| 151 | + function hasClass(className: string) { |
146 | 152 | return className in internalClasses
|
147 | 153 | ? internalClasses[className]
|
148 | 154 | : getElement().classList.contains(className);
|
149 | 155 | }
|
150 | 156 |
|
151 |
| - function addClass(className) { |
| 157 | + function addClass(className: string) { |
152 | 158 | if (!internalClasses[className]) {
|
153 | 159 | internalClasses[className] = true;
|
154 | 160 | }
|
155 | 161 | }
|
156 | 162 |
|
157 |
| - function removeClass(className) { |
| 163 | + function removeClass(className: string) { |
158 | 164 | if (!(className in internalClasses) || internalClasses[className]) {
|
159 | 165 | internalClasses[className] = false;
|
160 | 166 | }
|
161 | 167 | }
|
162 | 168 |
|
163 | 169 | function handleScrimClick() {
|
164 |
| - instance && instance.handleScrimClick(); |
| 170 | + instance && 'handleScrimClick' in instance && instance.handleScrimClick(); |
165 | 171 | }
|
166 | 172 |
|
167 |
| - export function setOpen(value) { |
| 173 | + export function setOpen(value: boolean) { |
168 | 174 | open = value;
|
169 | 175 | }
|
170 | 176 |
|
|
0 commit comments