Skip to content

Commit

Permalink
fix: list item ripples and menus
Browse files Browse the repository at this point in the history
  • Loading branch information
hperrin committed Mar 30, 2021
1 parent d405de5 commit 4010556
Show file tree
Hide file tree
Showing 18 changed files with 297 additions and 101 deletions.
1 change: 1 addition & 0 deletions packages/button/Button.svelte
Expand Up @@ -114,5 +114,6 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
</script>
2 changes: 1 addition & 1 deletion packages/checkbox/Checkbox.svelte
Expand Up @@ -165,7 +165,7 @@
addChangeHandler(handleChange);
}
onMount(async () => {
onMount(() => {
if (instantiate !== false) {
checkbox = new MDCCheckbox(element);
} else {
Expand Down
2 changes: 1 addition & 1 deletion packages/data-table/DataTable.svelte
Expand Up @@ -72,7 +72,7 @@
removeLayoutListener = addLayoutListener(layout);
}
onMount(async () => {
onMount(() => {
dataTable = new MDCDataTable(element);
checkBoxHeaderPromiseResolve(dataTable.headerRowCheckbox_);
checkBoxListPromiseResolve(dataTable.rowCheckboxList_);
Expand Down
1 change: 1 addition & 0 deletions packages/drawer/Drawer.svelte
Expand Up @@ -152,6 +152,7 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
function handleScrimClick() {
Expand Down
1 change: 1 addition & 0 deletions packages/icon-button/IconButton.svelte
Expand Up @@ -148,6 +148,7 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
function addAttr(name, value) {
Expand Down
2 changes: 2 additions & 0 deletions packages/list/Item.svelte
Expand Up @@ -176,6 +176,7 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
function addAttr(name, value) {
Expand All @@ -184,6 +185,7 @@
function removeAttr(name) {
delete internalAttrs[name];
internalAttrs = internalAttrs;
}
function getPrimaryText() {
Expand Down
5 changes: 4 additions & 1 deletion packages/list/List.svelte
Expand Up @@ -166,7 +166,7 @@
removeLayoutListener = addLayoutListener(layout);
}
onMount(async () => {
onMount(() => {
instance = new MDCListFoundation({
addClassForElementIndex,
focusItemAtIndex,
Expand Down Expand Up @@ -235,9 +235,11 @@
);
},
});
if (singleSelection || radiolist || checklist) {
selectedIndex = getSelectedIndex();
}
dispatch(element, 'SMUI:list:mount', {
get element() {
return getElement();
Expand All @@ -252,6 +254,7 @@
setAttributeForElementIndex,
removeAttributeForElementIndex,
});
instance.init();
return () => {
Expand Down
17 changes: 11 additions & 6 deletions packages/menu-surface/MenuSurface.svelte
Expand Up @@ -135,7 +135,7 @@
instance.setAnchorMargin(anchorMargin);
}
onMount(async () => {
onMount(() => {
instance = new MDCMenuSurfaceFoundation({
addClass,
removeClass,
Expand Down Expand Up @@ -173,10 +173,12 @@
previousFocus = document.activeElement;
},
restoreFocus: () => {
if (element.contains(document.activeElement)) {
if (previousFocus && previousFocus.focus) {
previousFocus.focus();
}
if (
element.contains(document.activeElement) &&
previousFocus &&
previousFocus.focus
) {
previousFocus.focus();
}
},
Expand Down Expand Up @@ -211,6 +213,7 @@
internalStyles.maxHeight = height;
},
});
dispatch(element, 'SMUI:menu-surface:mount', {
get open() {
return open;
Expand All @@ -220,11 +223,12 @@
},
closeProgrammatic,
});
instance.init();
return () => {
const isHoisted = instance.isHoistedElement;
menuSurface.destroy();
instance.destroy();
if (isHoisted) {
element.parentNode.removeChild(element);
}
Expand All @@ -244,6 +248,7 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
export function isOpen() {
Expand Down
2 changes: 1 addition & 1 deletion packages/menu/Menu.svelte
Expand Up @@ -43,7 +43,7 @@
let menuSurfaceAccessor;
let listAccessor;
onMount(async () => {
onMount(() => {
instance = new MDCMenuFoundation({
addClassToElementAtIndex: (index, className) => {
listAccessor.addClassForElementIndex(index, className);
Expand Down
47 changes: 23 additions & 24 deletions packages/ripple/Ripple.js
Expand Up @@ -20,9 +20,30 @@ export default function Ripple(
let removeLayoutListener;

function handleProps() {
if (ripple) {
switch (color) {
case 'surface':
addClass('mdc-ripple-surface');
removeClass('mdc-ripple-surface--primary');
removeClass('mdc-ripple-surface--accent');
return;
case 'primary':
addClass('mdc-ripple-surface');
addClass('mdc-ripple-surface--primary');
removeClass('mdc-ripple-surface--accent');
return;
case 'secondary':
addClass('mdc-ripple-surface');
removeClass('mdc-ripple-surface--primary');
addClass('mdc-ripple-surface--accent');
return;
}
}
removeClass('mdc-ripple-surface');
removeClass('mdc-ripple-surface--primary');
removeClass('mdc-ripple-surface--accent');

if (ripple && !instance) {
// Override the Ripple component's adapter, so that we can forward classes
// to Svelte components that overwrite Ripple's classes.
instance = new MDCRippleFoundation({
addClass,
browserSupportsCssVars: () => util.supportsCssVariables(window),
Expand Down Expand Up @@ -64,28 +85,6 @@ export default function Ripple(
instance.destroy();
instance = null;
}
if (ripple) {
switch (color) {
case 'surface':
addClass('mdc-ripple-surface');
removeClass('mdc-ripple-surface--primary');
removeClass('mdc-ripple-surface--accent');
return;
case 'primary':
addClass('mdc-ripple-surface');
addClass('mdc-ripple-surface--primary');
removeClass('mdc-ripple-surface--accent');
return;
case 'secondary':
addClass('mdc-ripple-surface');
removeClass('mdc-ripple-surface--primary');
addClass('mdc-ripple-surface--accent');
return;
}
}
removeClass('mdc-ripple-surface');
removeClass('mdc-ripple-surface--primary');
removeClass('mdc-ripple-surface--accent');
}

handleProps();
Expand Down
3 changes: 2 additions & 1 deletion packages/select/Select.svelte
Expand Up @@ -224,7 +224,7 @@
removeLayoutListener = addLayoutListener(layout);
}
onMount(async () => {
onMount(() => {
select = new MDCSelect(element);
menuPromiseResolve(select.menu_);
Expand Down Expand Up @@ -252,6 +252,7 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
function getMenuInstancePromise() {
Expand Down
2 changes: 1 addition & 1 deletion packages/tab-indicator/TabIndicator.svelte
Expand Up @@ -65,7 +65,7 @@
let instantiate = getContext('SMUI:tab-indicator:instantiate');
let getInstance = getContext('SMUI:tab-indicator:getInstance');
onMount(async () => {
onMount(() => {
if (instantiate !== false) {
tabIndicator = new MDCTabIndicator(element);
} else {
Expand Down
2 changes: 1 addition & 1 deletion packages/tab-scroller/TabScroller.svelte
Expand Up @@ -46,7 +46,7 @@
let instantiate = getContext('SMUI:tab-scroller:instantiate');
let getInstance = getContext('SMUI:tab-scroller:getInstance');
onMount(async () => {
onMount(() => {
if (instantiate !== false) {
tabScroller = new MDCTabScroller(element);
} else {
Expand Down
2 changes: 1 addition & 1 deletion packages/tab/Tab.svelte
Expand Up @@ -122,7 +122,7 @@
tab.focusOnActivate = focusOnActivate;
}
onMount(async () => {
onMount(() => {
if (instantiate !== false) {
tab = new MDCTab(element);
} else {
Expand Down
1 change: 1 addition & 0 deletions packages/textfield/Input.svelte
Expand Up @@ -49,6 +49,7 @@
$: if (type === 'file') {
delete valueProp.value;
valueProp = valueProp;
} else {
valueProp.value = value === undefined ? '' : value;
}
Expand Down
1 change: 1 addition & 0 deletions packages/top-app-bar/TopAppBar.svelte
Expand Up @@ -173,6 +173,7 @@
function removeClass(className) {
delete internalClasses[className];
internalClasses = internalClasses;
}
function addStyle(name, value) {
Expand Down
28 changes: 23 additions & 5 deletions site/src/routes/demo/button.scss
@@ -1,5 +1,5 @@
@import "@material/button/mixins";
@import "@material/shape/variables";
@import '@material/button/mixins';
@import '@material/shape/variables';

.button-shaped-round {
@include mdc-button-shape-radius(999px);
Expand All @@ -9,6 +9,24 @@
--notchSize: #{$mdc-shape-small-component-radius * 2};

// source: https://css-tricks.com/notched-boxes/
-webkit-clip-path: polygon(0% var(--notchSize), var(--notchSize) 0%, calc(100% - var(--notchSize)) 0%, 100% var(--notchSize), 100% calc(100% - var(--notchSize)), calc(100% - var(--notchSize)) 100%, var(--notchSize) 100%, 0% calc(100% - var(--notchSize)));
clip-path: polygon(0% var(--notchSize), var(--notchSize) 0%, calc(100% - var(--notchSize)) 0%, 100% var(--notchSize), 100% calc(100% - var(--notchSize)), calc(100% - var(--notchSize)) 100%, var(--notchSize) 100%, 0% calc(100% - var(--notchSize)));
}
-webkit-clip-path: polygon(
0% var(--notchSize),
var(--notchSize) 0%,
calc(100% - var(--notchSize)) 0%,
100% var(--notchSize),
100% calc(100% - var(--notchSize)),
calc(100% - var(--notchSize)) 100%,
var(--notchSize) 100%,
0% calc(100% - var(--notchSize))
);
clip-path: polygon(
0% var(--notchSize),
var(--notchSize) 0%,
calc(100% - var(--notchSize)) 0%,
100% var(--notchSize),
100% calc(100% - var(--notchSize)),
calc(100% - var(--notchSize)) 100%,
var(--notchSize) 100%,
0% calc(100% - var(--notchSize))
);
}

0 comments on commit 4010556

Please sign in to comment.