|
7 | 7 | {
|
8 | 8 | ripple,
|
9 | 9 | unbounded: false,
|
| 10 | + color, |
10 | 11 | disabled: !!$$props.disabled,
|
11 |
| - classForward: (classes) => (rippleClasses = classes), |
| 12 | + addClass, |
| 13 | + removeClass, |
12 | 14 | },
|
13 | 15 | ],
|
14 | 16 | forwardEvents,
|
15 | 17 | ...use,
|
16 | 18 | ]}
|
17 |
| - class="mdc-fab {className} {rippleClasses.join(' ')} {mini |
| 19 | + class="mdc-fab {className} {Object.keys(internalClasses).join(' ')} {mini |
18 | 20 | ? 'mdc-fab--mini'
|
19 | 21 | : ''} {exited ? 'mdc-fab--exited' : ''} {extended
|
20 | 22 | ? 'mdc-fab--extended'
|
21 |
| - : ''} {color === 'primary' ? 'smui-fab--color-primary' : ''}" |
| 23 | + : ''} {color === 'primary' ? 'smui-fab--color-primary' : ''} {touch |
| 24 | + ? 'mdc-fab--touch' |
| 25 | + : ''}" |
22 | 26 | {...exclude($$props, [
|
23 | 27 | 'use',
|
24 | 28 | 'class',
|
|
27 | 31 | 'mini',
|
28 | 32 | 'exited',
|
29 | 33 | 'extended',
|
| 34 | + 'touch', |
30 | 35 | 'component',
|
31 | 36 | ])}
|
32 |
| - >{#if ripple}<div class="mdc-fab__ripple" />{/if}<slot /></svelte:component |
| 37 | + ><div class="mdc-fab__ripple" /> |
| 38 | + <slot />{#if touch}<div class="mdc-fab__touch" />{/if}</svelte:component |
33 | 39 | >
|
34 | 40 |
|
35 | 41 | <script>
|
|
50 | 56 | export let mini = false;
|
51 | 57 | export let exited = false;
|
52 | 58 | export let extended = false;
|
| 59 | + export let touch = false; |
53 | 60 | // Purposely left out of props exclude.
|
54 | 61 | export let href = null;
|
55 | 62 |
|
56 | 63 | let element;
|
57 |
| - let rippleClasses = []; |
| 64 | + let internalClasses = {}; |
58 | 65 |
|
59 | 66 | export let component = href == null ? Button : A;
|
60 | 67 |
|
61 | 68 | setContext('SMUI:label:context', 'fab');
|
62 | 69 | setContext('SMUI:icon:context', 'fab');
|
63 | 70 |
|
| 71 | + function addClass(className) { |
| 72 | + // Doesn't need hasClass. |
| 73 | + if (!internalClasses[className]) { |
| 74 | + internalClasses[className] = true; |
| 75 | + } |
| 76 | + } |
| 77 | +
|
| 78 | + function removeClass(className) { |
| 79 | + // Doesn't need hasClass. |
| 80 | + if (internalClasses[className]) { |
| 81 | + delete internalClasses[className]; |
| 82 | + internalClasses = internalClasses; |
| 83 | + } |
| 84 | + } |
| 85 | +
|
64 | 86 | export function getElement() {
|
65 | 87 | return element.getElement();
|
66 | 88 | }
|
|
0 commit comments