Skip to content

Commit 4a85665

Browse files
committed
feat: updated Floating Actio Button for MDC v10
1 parent 6b5aa98 commit 4a85665

17 files changed

+256
-375
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ I've started working on migrating SMUI to use the latest upstream version of [Ma
204204
Update Progress Checklist:
205205
206206
- [x] Buttons
207-
- [ ] Floating Action Buttons
207+
- [x] Floating Action Buttons
208208
- [x] Icon Buttons
209209
- [ ] Cards
210210
- [ ] Chips

packages/button/Button.svelte

+2-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,8 @@
4646
'component',
4747
...dialogExcludes,
4848
])}
49-
>{#if ripple}<div class="mdc-button__ripple" />{/if}<slot />{#if touch}<div
50-
class="mdc-button__touch"
51-
/>{/if}</svelte:component
49+
><div class="mdc-button__ripple" />
50+
<slot />{#if touch}<div class="mdc-button__touch" />{/if}</svelte:component
5251
>
5352

5453
<script>

packages/drawer/Drawer.svelte

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
.filter((className) => internalClasses[className])
77
.join(' ')} {variant === 'dismissible'
88
? 'mdc-drawer--dismissible'
9-
: ''} {variant === 'modal' ? 'mdc-drawer--modal' : ''}"
9+
: ''} {variant === 'modal' ? 'mdc-drawer--modal' : ''} {fixed
10+
? ''
11+
: 'smui-drawer__static'}"
1012
on:keydown={(event) => instance && instance.handleKeydown(event)}
1113
on:transitionend={(event) => instance && instance.handleTransitionEnd(event)}
12-
{...exclude($$props, ['use', 'class', 'variant', 'open'])}
14+
{...exclude($$props, ['use', 'class', 'variant', 'open', 'fixed'])}
1315
>
1416
<slot />
1517
</aside>
@@ -39,6 +41,7 @@
3941
export { className as class };
4042
export let variant = null;
4143
export let open = false;
44+
export let fixed = true;
4245
4346
let element;
4447
let instance;

packages/drawer/_style.scss

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
@include drawer.dismissible-core-styles;
55
@include drawer.modal-core-styles;
66

7+
.mdc-drawer.smui-drawer__static {
8+
position: static;
9+
}
10+
711
.mdc-drawer-scrim.smui-drawer-scrim__absolute {
812
position: absolute;
913
}

packages/fab/Fab.svelte

+27-5
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@
77
{
88
ripple,
99
unbounded: false,
10+
color,
1011
disabled: !!$$props.disabled,
11-
classForward: (classes) => (rippleClasses = classes),
12+
addClass,
13+
removeClass,
1214
},
1315
],
1416
forwardEvents,
1517
...use,
1618
]}
17-
class="mdc-fab {className} {rippleClasses.join(' ')} {mini
19+
class="mdc-fab {className} {Object.keys(internalClasses).join(' ')} {mini
1820
? 'mdc-fab--mini'
1921
: ''} {exited ? 'mdc-fab--exited' : ''} {extended
2022
? 'mdc-fab--extended'
21-
: ''} {color === 'primary' ? 'smui-fab--color-primary' : ''}"
23+
: ''} {color === 'primary' ? 'smui-fab--color-primary' : ''} {touch
24+
? 'mdc-fab--touch'
25+
: ''}"
2226
{...exclude($$props, [
2327
'use',
2428
'class',
@@ -27,9 +31,11 @@
2731
'mini',
2832
'exited',
2933
'extended',
34+
'touch',
3035
'component',
3136
])}
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
3339
>
3440

3541
<script>
@@ -50,17 +56,33 @@
5056
export let mini = false;
5157
export let exited = false;
5258
export let extended = false;
59+
export let touch = false;
5360
// Purposely left out of props exclude.
5461
export let href = null;
5562
5663
let element;
57-
let rippleClasses = [];
64+
let internalClasses = {};
5865
5966
export let component = href == null ? Button : A;
6067
6168
setContext('SMUI:label:context', 'fab');
6269
setContext('SMUI:icon:context', 'fab');
6370
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+
6486
export function getElement() {
6587
return element.getElement();
6688
}

packages/fab/_index.scss

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
@import "smui-theme";
2-
@import "./style";
1+
@use 'smui-theme';
2+
@use './style';

packages/fab/_mixins.scss

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
1-
@import "@material/feature-targeting/functions";
1+
@use '@material/feature-targeting';
2+
@use '@material/ripple';
3+
@use '@material/fab';
24

3-
@mixin smui-fab-core-styles($query: mdc-feature-all()) {
4-
@include smui-fab-without-ripple($query);
5-
@include smui-fab-ripple($query);
5+
@mixin core-styles($query: feature-targeting.all()) {
6+
@include without-ripple($query);
7+
@include ripple($query);
68
}
79

8-
@mixin smui-fab-without-ripple($query: mdc-feature-all()) {
10+
@mixin without-ripple($query: feature-targeting.all()) {
911
.smui-fab--color-primary {
10-
@include mdc-fab-container-color(primary, $query: $query);
11-
@include mdc-fab-ink-color(on-primary, $query: $query);
12+
@include fab.container-color(primary, $query: $query);
13+
@include fab.ink-color(on-primary, $query: $query);
1214
}
1315
}
1416

15-
@mixin smui-fab-ripple($query: mdc-feature-all()) {
17+
@mixin ripple($query: feature-targeting.all()) {
1618
.smui-fab--color-primary {
17-
@include mdc-states(on-primary, $query: $query);
19+
@include ripple.states(
20+
on-primary,
21+
$query: $query,
22+
$ripple-target: fab.$ripple-target
23+
);
1824
}
19-
}
25+
}

packages/fab/_style.scss

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
@import "@material/fab/mdc-fab";
2-
@import "@smui/ripple/style";
3-
@import "./mixins";
4-
@include smui-fab-core-styles;
1+
@use '@material/fab';
2+
@use '@smui/ripple/style';
3+
@use './mixins';
4+
5+
@include fab.core-styles;
6+
@include mixins.core-styles;

0 commit comments

Comments
 (0)