|
1 |
| -{#if href} |
2 |
| - <a |
3 |
| - use:useActions={use} |
4 |
| - use:forwardEvents |
5 |
| - class=" |
6 |
| - mdc-button |
7 |
| - {className} |
8 |
| - {variant === 'raised' ? 'mdc-button--raised' : ''} |
9 |
| - {variant === 'unelevated' ? 'mdc-button--unelevated' : ''} |
10 |
| - {variant === 'outlined' ? 'mdc-button--outlined' : ''} |
11 |
| - {dense ? 'mdc-button--dense' : ''} |
12 |
| - {color === 'secondary' ? 'smui-button--color-secondary' : ''} |
13 |
| - {context === 'card:action' ? 'mdc-card__action' : ''} |
14 |
| - {context === 'card:action' ? 'mdc-card__action--button' : ''} |
15 |
| - {context === 'dialog:action' ? 'mdc-dialog__button' : ''} |
16 |
| - {context === 'top-app-bar:navigation' ? 'mdc-top-app-bar__navigation-icon' : ''} |
17 |
| - {context === 'top-app-bar:action' ? 'mdc-top-app-bar__action-item' : ''} |
18 |
| - {context === 'snackbar' ? 'mdc-snackbar__action' : ''} |
19 |
| - " |
20 |
| - use:Ripple={[ripple, {unbounded: false}]} |
21 |
| - {href} |
22 |
| - {...actionProp} |
23 |
| - {...defaultProp} |
24 |
| - {...props} |
25 |
| - ><slot></slot></a> |
26 |
| -{:else} |
27 |
| - <button |
28 |
| - use:useActions={use} |
29 |
| - use:forwardEvents |
30 |
| - class=" |
31 |
| - mdc-button |
32 |
| - {className} |
33 |
| - {variant === 'raised' ? 'mdc-button--raised' : ''} |
34 |
| - {variant === 'unelevated' ? 'mdc-button--unelevated' : ''} |
35 |
| - {variant === 'outlined' ? 'mdc-button--outlined' : ''} |
36 |
| - {dense ? 'mdc-button--dense' : ''} |
37 |
| - {color === 'secondary' ? 'smui-button--color-secondary' : ''} |
38 |
| - {context === 'card:action' ? 'mdc-card__action' : ''} |
39 |
| - {context === 'card:action' ? 'mdc-card__action--button' : ''} |
40 |
| - {context === 'dialog:action' ? 'mdc-dialog__button' : ''} |
41 |
| - {context === 'top-app-bar:navigation' ? 'mdc-top-app-bar__navigation-icon' : ''} |
42 |
| - {context === 'top-app-bar:action' ? 'mdc-top-app-bar__action-item' : ''} |
43 |
| - {context === 'snackbar' ? 'mdc-snackbar__action' : ''} |
44 |
| - " |
45 |
| - use:Ripple={[ripple, {unbounded: false}]} |
46 |
| - {...actionProp} |
47 |
| - {...defaultProp} |
48 |
| - {...props} |
49 |
| - ><slot></slot></button> |
50 |
| -{/if} |
| 1 | +<svelte:component |
| 2 | + this={component} |
| 3 | + use={[forwardEvents, [Ripple, [ripple, {unbounded: false}]], ...use]} |
| 4 | + class=" |
| 5 | + mdc-button |
| 6 | + {className} |
| 7 | + {variant === 'raised' ? 'mdc-button--raised' : ''} |
| 8 | + {variant === 'unelevated' ? 'mdc-button--unelevated' : ''} |
| 9 | + {variant === 'outlined' ? 'mdc-button--outlined' : ''} |
| 10 | + {dense ? 'mdc-button--dense' : ''} |
| 11 | + {color === 'secondary' ? 'smui-button--color-secondary' : ''} |
| 12 | + {context === 'card:action' ? 'mdc-card__action' : ''} |
| 13 | + {context === 'card:action' ? 'mdc-card__action--button' : ''} |
| 14 | + {context === 'dialog:action' ? 'mdc-dialog__button' : ''} |
| 15 | + {context === 'top-app-bar:navigation' ? 'mdc-top-app-bar__navigation-icon' : ''} |
| 16 | + {context === 'top-app-bar:action' ? 'mdc-top-app-bar__action-item' : ''} |
| 17 | + {context === 'snackbar' ? 'mdc-snackbar__action' : ''} |
| 18 | + " |
| 19 | + {...actionProp} |
| 20 | + {...defaultProp} |
| 21 | + {...exclude($$props, ['use', 'class', 'ripple', 'color', 'variant', 'dense', ...dialogExcludes])} |
| 22 | +><slot></slot></svelte:component> |
51 | 23 |
|
52 | 24 | <script>
|
53 | 25 | import {setContext, getContext} from 'svelte';
|
54 | 26 | import {current_component} from 'svelte/internal';
|
55 | 27 | import {forwardEventsBuilder} from '@smui/common/forwardEvents.js';
|
56 | 28 | import {exclude} from '@smui/common/exclude.js';
|
57 | 29 | import {useActions} from '@smui/common/useActions.js';
|
| 30 | + import A from '@smui/common/A.svelte'; |
| 31 | + import Button from '@smui/common/Button.svelte'; |
58 | 32 | import Ripple from '@smui/ripple/bare.js';
|
59 | 33 |
|
60 | 34 | const forwardEvents = forwardEventsBuilder(current_component);
|
|
66 | 40 | export let color = 'primary';
|
67 | 41 | export let variant = 'text';
|
68 | 42 | export let dense = false;
|
| 43 | + // Purposely left out of props exclude. |
69 | 44 | export let href = null;
|
70 | 45 | export let action = 'close';
|
71 | 46 | let defaultAction = false;
|
72 | 47 | export {defaultAction as default};
|
| 48 | + export let component = href == null ? Button : A; |
73 | 49 |
|
74 | 50 | let context = getContext('SMUI:button:context');
|
75 | 51 |
|
76 | 52 | $: dialogExcludes = (context === 'dialog:action') ? ['action', 'default'] : [];
|
77 | 53 |
|
78 |
| - $: props = exclude($$props, ['use', 'class', 'ripple', 'color', 'variant', 'dense', 'href', ...dialogExcludes]); |
79 |
| -
|
80 | 54 | $: actionProp = (context === 'dialog:action' && action !== null) ? {'data-mdc-dialog-action': action} : {};
|
81 | 55 | $: defaultProp = (context === 'dialog:action' && defaultAction) ? {'data-mdc-dialog-button-default': ''} : {};
|
82 | 56 |
|
|
0 commit comments