mtrl 0.2.6 → 0.2.7
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/index.ts +18 -0
- package/package.json +1 -1
- package/src/components/badge/_styles.scss +117 -109
- package/src/components/badge/api.ts +57 -59
- package/src/components/badge/badge.ts +16 -2
- package/src/components/badge/config.ts +65 -11
- package/src/components/badge/constants.ts +22 -12
- package/src/components/badge/features.ts +44 -40
- package/src/components/badge/types.ts +42 -30
- package/src/components/bottom-app-bar/_styles.scss +103 -0
- package/src/components/bottom-app-bar/bottom-app-bar.ts +196 -0
- package/src/components/bottom-app-bar/config.ts +73 -0
- package/src/components/bottom-app-bar/index.ts +11 -0
- package/src/components/bottom-app-bar/types.ts +108 -0
- package/src/components/button/_styles.scss +0 -10
- package/src/components/button/api.ts +5 -0
- package/src/components/button/config.ts +5 -0
- package/src/components/button/types.ts +6 -0
- package/src/components/card/card.ts +13 -25
- package/src/components/card/config.ts +67 -22
- package/src/components/card/features.ts +3 -0
- package/src/components/card/types.ts +28 -0
- package/src/components/checkbox/_styles.scss +0 -2
- package/src/components/datepicker/_styles.scss +358 -0
- package/src/components/datepicker/api.ts +272 -0
- package/src/components/datepicker/config.ts +144 -0
- package/src/components/datepicker/constants.ts +98 -0
- package/src/components/datepicker/datepicker.ts +346 -0
- package/src/components/datepicker/index.ts +9 -0
- package/src/components/datepicker/render.ts +452 -0
- package/src/components/datepicker/types.ts +268 -0
- package/src/components/datepicker/utils.ts +290 -0
- package/src/components/dialog/_styles.scss +174 -128
- package/src/components/dialog/api.ts +48 -13
- package/src/components/dialog/config.ts +9 -5
- package/src/components/dialog/dialog.ts +6 -3
- package/src/components/dialog/features.ts +290 -130
- package/src/components/dialog/types.ts +7 -4
- package/src/components/divider/_styles.scss +57 -0
- package/src/components/divider/config.ts +81 -0
- package/src/components/divider/divider.ts +37 -0
- package/src/components/divider/features.ts +207 -0
- package/src/components/divider/index.ts +5 -0
- package/src/components/divider/types.ts +55 -0
- package/src/components/extended-fab/_styles.scss +267 -0
- package/src/components/extended-fab/api.ts +141 -0
- package/src/components/extended-fab/config.ts +108 -0
- package/src/components/extended-fab/constants.ts +36 -0
- package/src/components/extended-fab/extended-fab.ts +125 -0
- package/src/components/extended-fab/index.ts +4 -0
- package/src/components/extended-fab/types.ts +287 -0
- package/src/components/fab/_styles.scss +225 -0
- package/src/components/fab/api.ts +97 -0
- package/src/components/fab/config.ts +94 -0
- package/src/components/fab/constants.ts +41 -0
- package/src/components/fab/fab.ts +67 -0
- package/src/components/fab/index.ts +4 -0
- package/src/components/fab/types.ts +234 -0
- package/src/components/navigation/_styles.scss +1 -0
- package/src/components/navigation/api.ts +78 -50
- package/src/components/navigation/features/items.ts +280 -0
- package/src/components/navigation/nav-item.ts +72 -23
- package/src/components/navigation/navigation.ts +54 -2
- package/src/components/navigation/types.ts +210 -188
- package/src/components/search/_styles.scss +306 -0
- package/src/components/search/api.ts +203 -0
- package/src/components/search/config.ts +87 -0
- package/src/components/search/constants.ts +21 -0
- package/src/components/search/features/index.ts +4 -0
- package/src/components/search/features/search.ts +718 -0
- package/src/components/search/features/states.ts +165 -0
- package/src/components/search/features/structure.ts +198 -0
- package/src/components/search/index.ts +10 -0
- package/src/components/search/search.ts +52 -0
- package/src/components/search/types.ts +163 -0
- package/src/components/segmented-button/_styles.scss +117 -0
- package/src/components/segmented-button/config.ts +67 -0
- package/src/components/segmented-button/constants.ts +42 -0
- package/src/components/segmented-button/index.ts +4 -0
- package/src/components/segmented-button/segment.ts +155 -0
- package/src/components/segmented-button/segmented-button.ts +250 -0
- package/src/components/segmented-button/types.ts +219 -0
- package/src/components/slider/_styles.scss +83 -24
- package/src/components/slider/accessibility.md +5 -5
- package/src/components/slider/api.ts +41 -120
- package/src/components/slider/config.ts +51 -47
- package/src/components/slider/features/handlers.ts +495 -0
- package/src/components/slider/features/index.ts +1 -2
- package/src/components/slider/features/slider.ts +66 -84
- package/src/components/slider/features/states.ts +195 -0
- package/src/components/slider/features/structure.ts +136 -206
- package/src/components/slider/features/ui.ts +145 -206
- package/src/components/slider/index.ts +2 -11
- package/src/components/slider/slider.ts +9 -12
- package/src/components/slider/types.ts +39 -24
- package/src/components/switch/_styles.scss +0 -2
- package/src/components/tabs/_styles.scss +94 -32
- package/src/components/tabs/features.ts +4 -2
- package/src/components/tabs/indicator.ts +73 -13
- package/src/components/tabs/types.ts +10 -2
- package/src/components/timepicker/README.md +277 -0
- package/src/components/timepicker/_styles.scss +451 -0
- package/src/components/timepicker/api.ts +632 -0
- package/src/components/timepicker/clockdial.ts +482 -0
- package/src/components/timepicker/config.ts +130 -0
- package/src/components/timepicker/constants.ts +138 -0
- package/src/components/timepicker/index.ts +8 -0
- package/src/components/timepicker/render.ts +613 -0
- package/src/components/timepicker/timepicker.ts +117 -0
- package/src/components/timepicker/types.ts +336 -0
- package/src/components/timepicker/utils.ts +241 -0
- package/src/components/top-app-bar/_styles.scss +225 -0
- package/src/components/top-app-bar/config.ts +83 -0
- package/src/components/top-app-bar/index.ts +11 -0
- package/src/components/top-app-bar/top-app-bar.ts +316 -0
- package/src/components/top-app-bar/types.ts +140 -0
- package/src/core/build/_ripple.scss +6 -6
- package/src/core/build/ripple.ts +72 -95
- package/src/core/compose/features/icon.ts +3 -1
- package/src/core/compose/features/ripple.ts +4 -1
- package/src/core/compose/features/textlabel.ts +26 -2
- package/src/core/dom/create.ts +5 -0
- package/src/index.ts +9 -0
- package/src/styles/abstract/_theme.scss +9 -1
- package/src/styles/themes/_autumn.scss +21 -0
- package/src/styles/themes/_base-theme.scss +61 -0
- package/src/styles/themes/_baseline.scss +58 -0
- package/src/styles/themes/_bluekhaki.scss +125 -0
- package/src/styles/themes/_brownbeige.scss +125 -0
- package/src/styles/themes/_browngreen.scss +125 -0
- package/src/styles/themes/_forest.scss +6 -0
- package/src/styles/themes/_greenbeige.scss +125 -0
- package/src/styles/themes/_material.scss +125 -0
- package/src/styles/themes/_ocean.scss +6 -0
- package/src/styles/themes/_sageivory.scss +125 -0
- package/src/styles/themes/_spring.scss +6 -0
- package/src/styles/themes/_summer.scss +5 -0
- package/src/styles/themes/_sunset.scss +5 -0
- package/src/styles/themes/_tealcaramel.scss +125 -0
- package/src/styles/themes/_winter.scss +6 -0
- package/src/components/navigation/features/items.js +0 -192
- package/src/components/slider/features/appearance.ts +0 -94
- package/src/components/slider/features/disabled.ts +0 -68
- package/src/components/slider/features/events.ts +0 -164
- package/src/components/slider/features/interactions.ts +0 -396
- package/src/components/slider/features/keyboard.ts +0 -233
- package/src/core/collection/adapters/mongodb.js +0 -232
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// src/components/slider/features/appearance.ts
|
|
2
|
-
import { SLIDER_COLORS, SLIDER_SIZES } from '../constants';
|
|
3
|
-
import { SliderConfig } from '../types';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Add appearance management features to slider component
|
|
7
|
-
* @param config Slider configuration
|
|
8
|
-
* @returns Component enhancer with appearance features
|
|
9
|
-
*/
|
|
10
|
-
export const withAppearance = (config: SliderConfig) => component => {
|
|
11
|
-
return {
|
|
12
|
-
...component,
|
|
13
|
-
appearance: {
|
|
14
|
-
/**
|
|
15
|
-
* Sets slider color
|
|
16
|
-
* @param color Color variant
|
|
17
|
-
*/
|
|
18
|
-
setColor(color: keyof typeof SLIDER_COLORS | SLIDER_COLORS) {
|
|
19
|
-
// Remove existing color classes
|
|
20
|
-
Object.values(SLIDER_COLORS).forEach(colorName => {
|
|
21
|
-
component.element.classList.remove(`${component.getClass('slider')}--${colorName}`);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// Add new color class if not primary (default)
|
|
25
|
-
if (color !== SLIDER_COLORS.PRIMARY) {
|
|
26
|
-
component.element.classList.add(`${component.getClass('slider')}--${color}`);
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Gets slider color
|
|
32
|
-
* @returns Current color name
|
|
33
|
-
*/
|
|
34
|
-
getColor() {
|
|
35
|
-
// Find which color class is active
|
|
36
|
-
const colorClass = Object.values(SLIDER_COLORS).find(colorName =>
|
|
37
|
-
component.element.classList.contains(`${component.getClass('slider')}--${colorName}`)
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
return colorClass || SLIDER_COLORS.PRIMARY;
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Sets slider size
|
|
45
|
-
* @param size Size variant
|
|
46
|
-
*/
|
|
47
|
-
setSize(size: keyof typeof SLIDER_SIZES | SLIDER_SIZES) {
|
|
48
|
-
// Remove existing size classes
|
|
49
|
-
Object.values(SLIDER_SIZES).forEach(sizeName => {
|
|
50
|
-
component.element.classList.remove(`${component.getClass('slider')}--${sizeName}`);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
// Add new size class if not medium (default)
|
|
54
|
-
if (size !== SLIDER_SIZES.MEDIUM) {
|
|
55
|
-
component.element.classList.add(`${component.getClass('slider')}--${size}`);
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Gets slider size
|
|
61
|
-
* @returns Current size name
|
|
62
|
-
*/
|
|
63
|
-
getSize() {
|
|
64
|
-
// Find which size class is active
|
|
65
|
-
const sizeClass = Object.values(SLIDER_SIZES).find(sizeName =>
|
|
66
|
-
component.element.classList.contains(`${component.getClass('slider')}--${sizeName}`)
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
return sizeClass || SLIDER_SIZES.MEDIUM;
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Shows or hides tick marks
|
|
74
|
-
* @param show Whether to show ticks
|
|
75
|
-
*/
|
|
76
|
-
showTicks(show: boolean) {
|
|
77
|
-
config.ticks = show;
|
|
78
|
-
|
|
79
|
-
// Regenerate ticks if slider is initialized
|
|
80
|
-
if (component.slider) {
|
|
81
|
-
component.slider.regenerateTicks();
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Shows or hides current value bubble while dragging
|
|
87
|
-
* @param show Whether to show value bubble
|
|
88
|
-
*/
|
|
89
|
-
showCurrentValue(show: boolean) {
|
|
90
|
-
config.showValue = show;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
// src/components/slider/features/disabled.ts
|
|
2
|
-
import { SliderConfig } from '../types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Add disabled state functionality to component
|
|
6
|
-
* @param config Slider configuration
|
|
7
|
-
* @returns Component enhancer with disabled functionality
|
|
8
|
-
*/
|
|
9
|
-
export const withDisabled = (config: SliderConfig) => component => {
|
|
10
|
-
// Initial disabled state
|
|
11
|
-
const isDisabled = config.disabled === true;
|
|
12
|
-
|
|
13
|
-
// Apply initial disabled state if needed
|
|
14
|
-
if (isDisabled && component.structure) {
|
|
15
|
-
setTimeout(() => {
|
|
16
|
-
disableComponent();
|
|
17
|
-
}, 0);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function disableComponent() {
|
|
21
|
-
component.element.classList.add(`${component.getClass('slider')}--disabled`);
|
|
22
|
-
component.element.setAttribute('aria-disabled', 'true');
|
|
23
|
-
|
|
24
|
-
// Ensure thumbs cannot receive focus when disabled
|
|
25
|
-
if (component.structure.thumb) {
|
|
26
|
-
component.structure.thumb.tabIndex = -1;
|
|
27
|
-
component.structure.thumb.setAttribute('aria-disabled', 'true');
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (config.range && component.structure.secondThumb) {
|
|
31
|
-
component.structure.secondThumb.tabIndex = -1;
|
|
32
|
-
component.structure.secondThumb.setAttribute('aria-disabled', 'true');
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function enableComponent() {
|
|
37
|
-
component.element.classList.remove(`${component.getClass('slider')}--disabled`);
|
|
38
|
-
component.element.setAttribute('aria-disabled', 'false');
|
|
39
|
-
|
|
40
|
-
// Re-enable focus on thumbs
|
|
41
|
-
if (component.structure.thumb) {
|
|
42
|
-
component.structure.thumb.tabIndex = 0;
|
|
43
|
-
component.structure.thumb.setAttribute('aria-disabled', 'false');
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (config.range && component.structure.secondThumb) {
|
|
47
|
-
component.structure.secondThumb.tabIndex = 0;
|
|
48
|
-
component.structure.secondThumb.setAttribute('aria-disabled', 'false');
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return {
|
|
53
|
-
...component,
|
|
54
|
-
disabled: {
|
|
55
|
-
enable() {
|
|
56
|
-
enableComponent();
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
disable() {
|
|
60
|
-
disableComponent();
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
isDisabled() {
|
|
64
|
-
return component.element.classList.contains(`${component.getClass('slider')}--disabled`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
};
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
// src/components/slider/features/events.ts
|
|
2
|
-
import { SliderEvent } from '../types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Create event helper functions for the slider component
|
|
6
|
-
*
|
|
7
|
-
* @param state Slider state object
|
|
8
|
-
* @returns Event helper methods
|
|
9
|
-
*/
|
|
10
|
-
export const createEventHelpers = (state) => {
|
|
11
|
-
/**
|
|
12
|
-
* Triggers a slider event
|
|
13
|
-
* @param eventName Name of the event to trigger
|
|
14
|
-
* @param originalEvent Original DOM event if applicable
|
|
15
|
-
* @returns Event data object
|
|
16
|
-
*/
|
|
17
|
-
const triggerEvent = (eventName, originalEvent = null) => {
|
|
18
|
-
// Create event data object
|
|
19
|
-
const eventData: SliderEvent = {
|
|
20
|
-
slider: state.component,
|
|
21
|
-
value: state.value,
|
|
22
|
-
secondValue: state.secondValue,
|
|
23
|
-
originalEvent,
|
|
24
|
-
preventDefault: () => { eventData.defaultPrevented = true; },
|
|
25
|
-
defaultPrevented: false
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// Add a component events facade if it doesn't exist
|
|
29
|
-
if (!state.component.events) {
|
|
30
|
-
state.component.events = {
|
|
31
|
-
trigger: () => {},
|
|
32
|
-
on: () => {},
|
|
33
|
-
off: () => {}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Now we can safely trigger the event
|
|
38
|
-
state.component.events.trigger(eventName, eventData);
|
|
39
|
-
|
|
40
|
-
return eventData;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Set up event listeners for slider elements
|
|
45
|
-
* @param interactionHandlers Mouse/touch interaction handlers
|
|
46
|
-
* @param keyboardHandlers Keyboard interaction handlers
|
|
47
|
-
*/
|
|
48
|
-
const setupEventListeners = (interactionHandlers, keyboardHandlers) => {
|
|
49
|
-
// Ensure needed component parts exist
|
|
50
|
-
if (!state.component || !state.component.structure) {
|
|
51
|
-
console.warn('Cannot set up event listeners: component structure is missing');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const {
|
|
56
|
-
track = null,
|
|
57
|
-
thumb = null,
|
|
58
|
-
secondThumb = null
|
|
59
|
-
} = state.component.structure;
|
|
60
|
-
|
|
61
|
-
if (!track || !thumb) {
|
|
62
|
-
console.warn('Cannot set up event listeners: track or thumb is missing');
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const {
|
|
67
|
-
handleThumbMouseDown,
|
|
68
|
-
handleTrackMouseDown
|
|
69
|
-
} = interactionHandlers;
|
|
70
|
-
|
|
71
|
-
const {
|
|
72
|
-
handleKeyDown,
|
|
73
|
-
handleFocus,
|
|
74
|
-
handleBlur
|
|
75
|
-
} = keyboardHandlers;
|
|
76
|
-
|
|
77
|
-
// Track events
|
|
78
|
-
track.addEventListener('mousedown', handleTrackMouseDown);
|
|
79
|
-
track.addEventListener('touchstart', handleTrackMouseDown, { passive: false });
|
|
80
|
-
|
|
81
|
-
// Thumb events
|
|
82
|
-
thumb.addEventListener('mousedown', (e) => handleThumbMouseDown(e, false));
|
|
83
|
-
thumb.addEventListener('touchstart', (e) => handleThumbMouseDown(e, false), { passive: false });
|
|
84
|
-
thumb.addEventListener('keydown', (e) => handleKeyDown(e, false));
|
|
85
|
-
thumb.addEventListener('focus', (e) => handleFocus(e, false));
|
|
86
|
-
thumb.addEventListener('blur', (e) => handleBlur(e, false));
|
|
87
|
-
|
|
88
|
-
// Second thumb events for range slider
|
|
89
|
-
if (state.component.config && state.component.config.range && secondThumb) {
|
|
90
|
-
secondThumb.addEventListener('mousedown', (e) => handleThumbMouseDown(e, true));
|
|
91
|
-
secondThumb.addEventListener('touchstart', (e) => handleThumbMouseDown(e, true), { passive: false });
|
|
92
|
-
secondThumb.addEventListener('keydown', (e) => handleKeyDown(e, true));
|
|
93
|
-
secondThumb.addEventListener('focus', (e) => handleFocus(e, true));
|
|
94
|
-
secondThumb.addEventListener('blur', (e) => handleBlur(e, true));
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Clean up event listeners
|
|
100
|
-
* @param interactionHandlers Mouse/touch interaction handlers
|
|
101
|
-
* @param keyboardHandlers Keyboard interaction handlers
|
|
102
|
-
*/
|
|
103
|
-
const cleanupEventListeners = (interactionHandlers, keyboardHandlers) => {
|
|
104
|
-
// Ensure needed component parts exist
|
|
105
|
-
if (!state.component || !state.component.structure) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const {
|
|
110
|
-
track = null,
|
|
111
|
-
thumb = null,
|
|
112
|
-
secondThumb = null
|
|
113
|
-
} = state.component.structure;
|
|
114
|
-
|
|
115
|
-
if (!track || !thumb) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const {
|
|
120
|
-
handleThumbMouseDown,
|
|
121
|
-
handleTrackMouseDown,
|
|
122
|
-
handleMouseMove,
|
|
123
|
-
handleMouseUp
|
|
124
|
-
} = interactionHandlers;
|
|
125
|
-
|
|
126
|
-
const {
|
|
127
|
-
handleKeyDown,
|
|
128
|
-
handleFocus,
|
|
129
|
-
handleBlur
|
|
130
|
-
} = keyboardHandlers;
|
|
131
|
-
|
|
132
|
-
// Track events
|
|
133
|
-
track.removeEventListener('mousedown', handleTrackMouseDown);
|
|
134
|
-
track.removeEventListener('touchstart', handleTrackMouseDown);
|
|
135
|
-
|
|
136
|
-
// Thumb events
|
|
137
|
-
thumb.removeEventListener('mousedown', (e) => handleThumbMouseDown(e, false));
|
|
138
|
-
thumb.removeEventListener('touchstart', (e) => handleThumbMouseDown(e, false));
|
|
139
|
-
thumb.removeEventListener('keydown', (e) => handleKeyDown(e, false));
|
|
140
|
-
thumb.removeEventListener('focus', (e) => handleFocus(e, false));
|
|
141
|
-
thumb.removeEventListener('blur', (e) => handleBlur(e, false));
|
|
142
|
-
|
|
143
|
-
// Second thumb events
|
|
144
|
-
if (state.component.config && state.component.config.range && secondThumb) {
|
|
145
|
-
secondThumb.removeEventListener('mousedown', (e) => handleThumbMouseDown(e, true));
|
|
146
|
-
secondThumb.removeEventListener('touchstart', (e) => handleThumbMouseDown(e, true));
|
|
147
|
-
secondThumb.removeEventListener('keydown', (e) => handleKeyDown(e, true));
|
|
148
|
-
secondThumb.removeEventListener('focus', (e) => handleFocus(e, true));
|
|
149
|
-
secondThumb.removeEventListener('blur', (e) => handleBlur(e, true));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Global events
|
|
153
|
-
document.removeEventListener('mousemove', handleMouseMove);
|
|
154
|
-
document.removeEventListener('mouseup', handleMouseUp);
|
|
155
|
-
document.removeEventListener('touchmove', handleMouseMove);
|
|
156
|
-
document.removeEventListener('touchend', handleMouseUp);
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
triggerEvent,
|
|
161
|
-
setupEventListeners,
|
|
162
|
-
cleanupEventListeners
|
|
163
|
-
};
|
|
164
|
-
};
|