mtrl 0.8.0-next.39 → 0.8.0-next.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/drawer/config.d.ts +1 -0
- package/dist/components/drawer/config.js +2 -0
- package/dist/components/drawer/constants.d.ts +2 -0
- package/dist/components/drawer/constants.js +1 -0
- package/dist/components/drawer/features/items.js +13 -0
- package/dist/components/drawer/types.d.ts +6 -0
- package/dist/core/compose/features/ripple.d.ts +6 -0
- package/dist/core/compose/features/ripple.js +1 -1
- package/dist/index.cjs +12 -12
- package/dist/package.json +1 -1
- package/dist/styles/badge.css +1 -1
- package/dist/styles/base.css +1 -1
- package/dist/styles/bottom-app-bar.css +1 -1
- package/dist/styles/bottom-sheet.css +1 -1
- package/dist/styles/button-group.css +1 -1
- package/dist/styles/button.css +1 -1
- package/dist/styles/card.css +1 -1
- package/dist/styles/carousel.css +1 -1
- package/dist/styles/checkbox.css +1 -1
- package/dist/styles/chips.css +1 -1
- package/dist/styles/dialog.css +1 -1
- package/dist/styles/divider.css +1 -1
- package/dist/styles/drawer.css +2 -2
- package/dist/styles/extended-fab.css +1 -1
- package/dist/styles/fab.css +1 -1
- package/dist/styles/icon-button.css +1 -1
- package/dist/styles/list.css +1 -1
- package/dist/styles/loading-indicator.css +1 -1
- package/dist/styles/menu.css +1 -1
- package/dist/styles/navigation.css +1 -1
- package/dist/styles/progress.css +1 -1
- package/dist/styles/radios.css +1 -1
- package/dist/styles/search.css +1 -1
- package/dist/styles/segmented-button.css +1 -1
- package/dist/styles/select.css +1 -1
- package/dist/styles/side-sheet.css +1 -1
- package/dist/styles/slider.css +1 -1
- package/dist/styles/snackbar.css +1 -1
- package/dist/styles/split-button.css +1 -1
- package/dist/styles/switch.css +1 -1
- package/dist/styles/tabs.css +1 -1
- package/dist/styles/textfield.css +1 -1
- package/dist/styles/timepicker.css +1 -1
- package/dist/styles/top-app-bar.css +1 -1
- package/dist/styles/utilities.css +1 -1
- package/dist/styles.css +2 -2
- package/dist/themes/autumn.css +1 -1
- package/dist/themes/baseline.css +1 -1
- package/dist/themes/brownbeige.css +1 -1
- package/dist/themes/browngreen.css +1 -1
- package/dist/themes/desert.css +1 -1
- package/dist/themes/forest.css +1 -1
- package/dist/themes/highcontrast.css +1 -1
- package/dist/themes/legacy.css +1 -1
- package/dist/themes/material.css +1 -1
- package/dist/themes/ocean.css +1 -1
- package/dist/themes/sageivory.css +1 -1
- package/dist/themes/spring.css +1 -1
- package/dist/themes/summer.css +1 -1
- package/dist/themes/sunset.css +1 -1
- package/dist/themes/tealcaramel.css +1 -1
- package/dist/themes/winter.css +1 -1
- package/package.json +1 -1
- package/src/styles/components/_drawer.scss +76 -90
|
@@ -72,6 +72,7 @@ export declare const getApiConfig: (comp: {
|
|
|
72
72
|
setItems: (items: DrawerConfig["items"]) => void;
|
|
73
73
|
getItems: () => DrawerConfig["items"];
|
|
74
74
|
setBadge: (id: string, badge: string) => void;
|
|
75
|
+
destroy: () => void;
|
|
75
76
|
};
|
|
76
77
|
drawerHeadline: {
|
|
77
78
|
setHeadline: (text: string) => void;
|
|
@@ -6,6 +6,7 @@ export const defaultConfig = {
|
|
|
6
6
|
open: DRAWER_DEFAULTS.OPEN,
|
|
7
7
|
dismissible: DRAWER_DEFAULTS.DISMISSIBLE,
|
|
8
8
|
width: DRAWER_DEFAULTS.WIDTH,
|
|
9
|
+
ripple: DRAWER_DEFAULTS.RIPPLE,
|
|
9
10
|
items: [],
|
|
10
11
|
};
|
|
11
12
|
export const createBaseConfig = (config = {}) => createComponentConfig(defaultConfig, config, "drawer");
|
|
@@ -57,6 +58,7 @@ export const getApiConfig = (comp) => ({
|
|
|
57
58
|
if (comp._stateCleanup) {
|
|
58
59
|
comp._stateCleanup();
|
|
59
60
|
}
|
|
61
|
+
comp.drawerItems.destroy();
|
|
60
62
|
comp.lifecycle.destroy();
|
|
61
63
|
},
|
|
62
64
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DRAWER_EVENTS } from "../constants.js";
|
|
2
|
+
import { createRipple, } from "../../../core/compose/features/ripple.js";
|
|
2
3
|
const createItemElement = (item, getClass) => {
|
|
3
4
|
const el = document.createElement("button");
|
|
4
5
|
el.className = getClass("drawer__item");
|
|
@@ -55,6 +56,12 @@ export const withItems = (config) => (component) => {
|
|
|
55
56
|
let currentItems = config.items || [];
|
|
56
57
|
let activeId = null;
|
|
57
58
|
let itemsContainer = null;
|
|
59
|
+
const ripple = config.ripple !== false ? createRipple() : null;
|
|
60
|
+
let rippled = [];
|
|
61
|
+
const unmountRipples = () => {
|
|
62
|
+
rippled.forEach((element) => ripple?.unmount(element));
|
|
63
|
+
rippled = [];
|
|
64
|
+
};
|
|
58
65
|
const initialActive = currentItems.find((item) => item.type !== "divider" && item.type !== "section" && item.active && !item.disabled);
|
|
59
66
|
if (initialActive?.id) {
|
|
60
67
|
activeId = initialActive.id;
|
|
@@ -62,6 +69,7 @@ export const withItems = (config) => (component) => {
|
|
|
62
69
|
const renderItems = () => {
|
|
63
70
|
if (!itemsContainer)
|
|
64
71
|
return;
|
|
72
|
+
unmountRipples();
|
|
65
73
|
itemsContainer.innerHTML = "";
|
|
66
74
|
let navIndex = 0;
|
|
67
75
|
currentItems.forEach((item) => {
|
|
@@ -92,6 +100,10 @@ export const withItems = (config) => (component) => {
|
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
});
|
|
103
|
+
if (ripple && !item.disabled) {
|
|
104
|
+
ripple.mount(itemEl);
|
|
105
|
+
rippled.push(itemEl);
|
|
106
|
+
}
|
|
95
107
|
itemsContainer.appendChild(itemEl);
|
|
96
108
|
});
|
|
97
109
|
};
|
|
@@ -197,6 +209,7 @@ export const withItems = (config) => (component) => {
|
|
|
197
209
|
getItems,
|
|
198
210
|
setBadge,
|
|
199
211
|
renderItems,
|
|
212
|
+
destroy: unmountRipples,
|
|
200
213
|
},
|
|
201
214
|
};
|
|
202
215
|
};
|
|
@@ -102,6 +102,12 @@ export interface DrawerConfig extends BaseComponentConfig {
|
|
|
102
102
|
* @default false
|
|
103
103
|
*/
|
|
104
104
|
dense?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Whether items show a ripple on press. The ripple is clipped to the
|
|
107
|
+
* item shape, so it reads as part of the active indicator.
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
110
|
+
ripple?: boolean;
|
|
105
111
|
/**
|
|
106
112
|
* Additional CSS classes to add to the drawer
|
|
107
113
|
*/
|
|
@@ -46,6 +46,12 @@ export interface RippleFeatureConfig {
|
|
|
46
46
|
export interface RippleComponent extends BaseComponent {
|
|
47
47
|
ripple: RippleController;
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a ripple controller for managing ripple effects
|
|
51
|
+
* @param config - Ripple configuration
|
|
52
|
+
* @returns Ripple controller
|
|
53
|
+
*/
|
|
54
|
+
export declare const createRipple: (config?: RippleConfig) => RippleController;
|
|
49
55
|
declare global {
|
|
50
56
|
interface HTMLElement {
|
|
51
57
|
__rippleHandlers?: Array<(e: MouseEvent) => void>;
|