kmaterialize 2.0.0 → 2.3.3-1.0.0
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/LICENSE +21 -21
- package/README.md +55 -91
- package/components/appbar/_navbar.old.scss +223 -0
- package/components/appbar/appbar.css +235 -0
- package/components/appbar/appbar.mjs +54 -0
- package/components/appbar/appbar.test.mjs +9 -0
- package/components/atomic/atomic.mjs +19 -0
- package/components/atomic/component.mjs +67 -0
- package/components/badge/_badges.scss +75 -0
- package/components/badge/badge.mjs +11 -0
- package/components/breadcrumb/_breadcrumb.scss +27 -0
- package/components/button/_buttons.scss +352 -0
- package/components/button/button.mjs +11 -0
- package/components/button/buttons.stories.ts +150 -0
- package/components/button/buttons.ts +282 -0
- package/components/button/examples.iso.js +18 -0
- package/components/button/fabSpec.js +65 -0
- package/components/button/test-button.mjs +16 -0
- package/components/card/_cards.scss +229 -0
- package/components/card/card.mjs +10 -0
- package/components/card/cards.ts +185 -0
- package/components/card/cardsSpec.js +269 -0
- package/components/carousel/_carousel.scss +93 -0
- package/components/carousel/_slider.scss +119 -0
- package/components/carousel/carousel.ts +693 -0
- package/components/carousel/carouselSpec.js +61 -0
- package/components/carousel/slider.ts +431 -0
- package/components/carousel/sliderSpec.js +99 -0
- package/components/checkbox/_checkboxes.scss +281 -0
- package/components/checkbox/checkbox.mdx +24 -0
- package/components/checkbox/checkbox.stories.ts +120 -0
- package/components/chip/chip.mjs +37 -0
- package/components/chip/chip.test.mjs +10 -0
- package/components/chip/chips.css +126 -0
- package/components/chip/chips.mdx +33 -0
- package/components/chip/chips.ts +440 -0
- package/components/chip/chipsSpec.js +165 -0
- package/components/chip/readme.md +323 -0
- package/components/collapsible/_collapsible.scss +82 -0
- package/components/collapsible/collapsible.ts +230 -0
- package/components/collapsible/collapsibleSpec.js +240 -0
- package/components/datepicker/_datepicker.scss +268 -0
- package/components/datepicker/datepicker.ts +1450 -0
- package/components/datepicker/datepickerSpec.js +162 -0
- package/components/dialog/_materialbox.scss +42 -0
- package/components/dialog/_modal.scss +79 -0
- package/components/dialog/materialbox.ts +446 -0
- package/components/dialog/materialboxSpec.js +37 -0
- package/components/dialog/modal.ts +111 -0
- package/components/dialog/modalSpec.js +83 -0
- package/components/dialog/readme.md +5 -0
- package/components/divider/readme.md +15 -0
- package/components/dropdown/_dropdown.scss +83 -0
- package/components/dropdown/dropdown.ts +653 -0
- package/components/dropdown/dropdownSpec.js +108 -0
- package/components/list/_collection.scss +114 -0
- package/components/list/_list.scss +6 -0
- package/components/list/list.mjs +58 -0
- package/components/list/list.test.mjs +16 -0
- package/components/loading/loading.mjs +26 -0
- package/components/loading/loading.test.mjs +10 -0
- package/components/navigation-bar/_old +582 -0
- package/components/navigation-bar/navigation-bar.mdx +20 -0
- package/components/navigation-bar/navigation-bar.stories.ts +39 -0
- package/components/navigation-drawer/_sidenav.scss +247 -0
- package/components/navigation-drawer/sidenav.ts +546 -0
- package/components/navigation-drawer/sidenavSpec.js +124 -0
- package/components/pagination/_pagination.scss +47 -0
- package/components/progress/_preloader.scss +416 -0
- package/components/radio-button/_radio-buttons.scss +112 -0
- package/components/radio-button/radio-buttons.mdx +28 -0
- package/components/radio-button/radio-buttons.stories.ts +51 -0
- package/components/search/autocomplete.ts +620 -0
- package/components/search/autocompleteSpec.js +321 -0
- package/components/slider/_range.scss +157 -0
- package/components/slider/range.ts +216 -0
- package/components/snackbar/_toast.scss +68 -0
- package/components/snackbar/toastSpec.js +132 -0
- package/components/snackbar/toasts.ts +312 -0
- package/components/switch/_switches.scss +121 -0
- package/components/tabs/_tabs.scss +171 -0
- package/components/tabs/tabs.mjs +31 -0
- package/components/tabs/tabs.ts +358 -0
- package/components/tabs/tabsSpec.js +180 -0
- package/components/textfield/_file-input.scss +41 -0
- package/components/textfield/_input-fields.scss +368 -0
- package/components/textfield/_select.scss +104 -0
- package/components/textfield/formfields.css +311 -0
- package/components/textfield/forms.ts +182 -0
- package/components/textfield/formsSpec.js +142 -0
- package/components/textfield/select.ts +472 -0
- package/components/textfield/selectSpec.js +390 -0
- package/components/textfield/textfield.mjs +29 -0
- package/components/textfield/textfield.test.mjs +10 -0
- package/components/timepicker/_timepicker.scss +362 -0
- package/components/timepicker/timepicker.ts +905 -0
- package/components/tooltip/_tooltip.scss +40 -0
- package/components/tooltip/tooltip.ts +380 -0
- package/components/tooltip/tooltipSpec.js +145 -0
- package/dist/css/materialize.colors.min.css +6 -0
- package/dist/css/materialize.css +7578 -6326
- package/dist/css/materialize.min.css +6 -13
- package/dist/css/materialize.min.css.map +1 -0
- package/dist/js/materialize.cjs.js +8410 -0
- package/dist/js/materialize.d.ts +2625 -0
- package/dist/js/materialize.js +8415 -12374
- package/dist/js/materialize.min.js +6 -6
- package/dist/js/materialize.mjs +8382 -0
- package/package.json +82 -47
- package/sass/_colors.scss +417 -0
- package/sass/_global.scss +490 -0
- package/sass/_grid.scss +172 -0
- package/sass/_table_of_contents.scss +28 -0
- package/sass/_tapTarget.scss +102 -0
- package/sass/_typography.scss +58 -0
- package/sass/_variables.scss +56 -0
- package/sass/materialize.scss +51 -0
- package/sass/mixins.module.scss +168 -0
- package/extras/noUiSlider/nouislider.css +0 -406
- package/extras/noUiSlider/nouislider.js +0 -2147
- package/extras/noUiSlider/nouislider.min.js +0 -1
- package/js/anime.min.js +0 -34
- package/js/autocomplete.js +0 -448
- package/js/buttons.js +0 -354
- package/js/cards.js +0 -40
- package/js/carousel.js +0 -717
- package/js/cash.js +0 -960
- package/js/characterCounter.js +0 -136
- package/js/chips.js +0 -481
- package/js/collapsible.js +0 -275
- package/js/component.js +0 -44
- package/js/datepicker.js +0 -975
- package/js/dropdown.js +0 -635
- package/js/forms.js +0 -275
- package/js/global.js +0 -444
- package/js/materialbox.js +0 -453
- package/js/modal.js +0 -382
- package/js/parallax.js +0 -138
- package/js/pushpin.js +0 -148
- package/js/range.js +0 -263
- package/js/scrollspy.js +0 -295
- package/js/select.js +0 -450
- package/js/sidenav.js +0 -580
- package/js/slider.js +0 -359
- package/js/tabs.js +0 -402
- package/js/tapTarget.js +0 -314
- package/js/timepicker.js +0 -647
- package/js/toasts.js +0 -310
- package/js/tooltip.js +0 -303
- package/js/waves.js +0 -335
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
describe('Datepicker Plugin', () => {
|
|
2
|
+
const fixture = `<div class="row">
|
|
3
|
+
<div class="input-field col s12">
|
|
4
|
+
<input type="text" class="datepicker" id="datepickerInput">
|
|
5
|
+
</div>
|
|
6
|
+
</div>`;
|
|
7
|
+
|
|
8
|
+
beforeEach(() => XloadHtml(fixture));
|
|
9
|
+
afterEach(() => XunloadFixtures());
|
|
10
|
+
|
|
11
|
+
describe('Datepicker', () => {
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
M.Datepicker.getInstance(document.querySelector('.datepicker')).destroy();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('can have a string format', (done) => {
|
|
17
|
+
const input = document.querySelector('#datepickerInput');
|
|
18
|
+
const today = new Date();
|
|
19
|
+
M.Datepicker.init(input, { format: 'mm/dd/yyyy', openByDefault: true });
|
|
20
|
+
const datepicker = M.Datepicker.getInstance(input);
|
|
21
|
+
//datepicker.open();
|
|
22
|
+
setTimeout(() => {
|
|
23
|
+
const day1 = document.querySelector('.datepicker-container button[data-day="1"]');
|
|
24
|
+
day1.click();
|
|
25
|
+
// Removed since autoSubmit option
|
|
26
|
+
// document.querySelector('.datepicker-done').click();
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
const year = today.getFullYear();
|
|
29
|
+
const month = today.getMonth() + 1;
|
|
30
|
+
const value = datepicker.toString();
|
|
31
|
+
expect(value).toEqual(`${month < 10 ? `0${month}` : month}/01/${year}`);
|
|
32
|
+
done();
|
|
33
|
+
}, 400);
|
|
34
|
+
}, 400);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('can have a format function', (done) => {
|
|
38
|
+
const input = document.querySelector('#datepickerInput');
|
|
39
|
+
const today = new Date();
|
|
40
|
+
const formatFn = `${today.getFullYear() - 100}-${today.getMonth() + 1}-99`;
|
|
41
|
+
M.Datepicker.init(input, { format: formatFn, openByDefault: true });
|
|
42
|
+
const datepicker = M.Datepicker.getInstance(input);
|
|
43
|
+
//datepicker.open();
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
const day1 = document.querySelector('.datepicker-container button[data-day="1"]');
|
|
46
|
+
day1.click();
|
|
47
|
+
// Removed since autoSubmit option
|
|
48
|
+
// document.querySelector('.datepicker-done').click();
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
const year = today.getFullYear() - 100;
|
|
51
|
+
const month = today.getMonth() + 1;
|
|
52
|
+
expect(datepicker.toString()).toEqual(`${year}-${month}-99`);
|
|
53
|
+
done();
|
|
54
|
+
}, 400);
|
|
55
|
+
}, 400);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('can change the calendar modal selected date by input', (done) => {
|
|
59
|
+
const input = document.querySelector('#datepickerInput');
|
|
60
|
+
M.Datepicker.init(input, { format: 'mm/dd/yyyy', openByDefault: true });
|
|
61
|
+
const today = new Date();
|
|
62
|
+
const month = today.getMonth();
|
|
63
|
+
const year = today.getFullYear() - 44;
|
|
64
|
+
const day = 11;
|
|
65
|
+
input.value = `${month + 1}/${day}/${year}`;
|
|
66
|
+
input.dispatchEvent(new InputEvent('change', { bubbles: true, cancelable: true }));
|
|
67
|
+
input.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, keyCode: 13 }));
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
const selectMonthElem = document.querySelector('.datepicker-select.orig-select-month');
|
|
70
|
+
const selectYearElem = document.querySelector('.datepicker-select.orig-select-year');
|
|
71
|
+
const selectedDayElem = document.querySelector(`.datepicker-row td[data-day="${day}"]`);
|
|
72
|
+
expect(selectMonthElem.querySelector('option[selected="selected"]').value)
|
|
73
|
+
.withContext(
|
|
74
|
+
'selected month does not match'
|
|
75
|
+
).toBe((month).toString());
|
|
76
|
+
expect(selectYearElem.querySelector('option[selected="selected"]').value)
|
|
77
|
+
.withContext(
|
|
78
|
+
'selected year does not match'
|
|
79
|
+
).toBe(year.toString());
|
|
80
|
+
expect(selectedDayElem.classList.contains('is-selected')).withContext(
|
|
81
|
+
'selected day does not match'
|
|
82
|
+
).toBe(true);
|
|
83
|
+
done();
|
|
84
|
+
}, 10);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('should have a date range input field if date range option is enabled', (done) => {
|
|
88
|
+
const input = document.querySelector('#datepickerInput');
|
|
89
|
+
M.Datepicker.init(input, { isDateRange: true, openByDefault: true });
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
expect(document.querySelector('.datepicker-end-date')).toExist(
|
|
92
|
+
'end date input should exist'
|
|
93
|
+
);
|
|
94
|
+
done();
|
|
95
|
+
}, 10);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('should have multiple input fields if multiple select option is enabled and multiple dates are selected', (done) => {
|
|
99
|
+
const input = document.querySelector('#datepickerInput');
|
|
100
|
+
M.Datepicker.init(input, { isMultipleSelection: true, openByDefault: true });
|
|
101
|
+
const datepicker = M.Datepicker.getInstance(input);
|
|
102
|
+
datepicker.open();
|
|
103
|
+
setTimeout(() => {
|
|
104
|
+
for (let i = 1; i <= 3; i++) {
|
|
105
|
+
setTimeout(() => {
|
|
106
|
+
document.querySelector(`.datepicker-container button[data-day="${i}"]`).click();
|
|
107
|
+
}, i * 10);
|
|
108
|
+
}
|
|
109
|
+
setTimeout(() => {
|
|
110
|
+
// Removed since autoSubmit option
|
|
111
|
+
// document.querySelector('.datepicker-done').click();
|
|
112
|
+
expect(document.querySelectorAll('.datepicker').length === 3).toEqual(true);
|
|
113
|
+
done();
|
|
114
|
+
}, 40);
|
|
115
|
+
}, 10);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('should integrate action util buttons by option', (done) => {
|
|
119
|
+
const input = document.querySelector('#datepickerInput');
|
|
120
|
+
M.Datepicker.init(input, { format: 'mm/dd/yyyy', autoSubmit: false, showClearBtn: true });
|
|
121
|
+
const today = new Date();
|
|
122
|
+
const clearBtn = document.querySelector('.datepicker-clear');
|
|
123
|
+
const cancelBtn = document.querySelector('.btn-cancel');
|
|
124
|
+
const confirmBtn = document.querySelector('.btn-confirm');
|
|
125
|
+
const year = today.getFullYear();
|
|
126
|
+
const month = today.getMonth() + 1;
|
|
127
|
+
const day = today.getDay() <= 26 ? today.getDay() + 2 : today.getDay() - 2;
|
|
128
|
+
|
|
129
|
+
setTimeout(() => {
|
|
130
|
+
expect(clearBtn).toExist('clear button should exist');
|
|
131
|
+
expect(cancelBtn).toExist('cancel should exist');
|
|
132
|
+
expect(confirmBtn).toExist('confirm should exist');
|
|
133
|
+
let dayEl = document.querySelector(`.datepicker-container button[data-day="${day}"]`);
|
|
134
|
+
dayEl.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
|
|
135
|
+
confirmBtn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
|
|
136
|
+
setTimeout(() => {
|
|
137
|
+
expect(input.value)
|
|
138
|
+
.withContext('value should change with confirm interaction')
|
|
139
|
+
.toEqual(`${month < 10 ? `0${month}` : month}/${day < 10 ? '0' + day : day}/${year}`);
|
|
140
|
+
dayEl = document.querySelector('.datepicker-container button[data-day="1"]');
|
|
141
|
+
dayEl.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
|
|
142
|
+
cancelBtn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
|
|
143
|
+
setTimeout(() => {
|
|
144
|
+
expect(input.value)
|
|
145
|
+
.withContext('value should not change with cancel interaction')
|
|
146
|
+
.toEqual(`${month < 10 ? `0${month}` : month}/${day < 10 ? '0' + day : day}/${year}`);
|
|
147
|
+
clearBtn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
|
|
148
|
+
setTimeout(() => {
|
|
149
|
+
expect(input.value.length)
|
|
150
|
+
.withContext('input field should be empty with clear interaction')
|
|
151
|
+
.toEqual(0);
|
|
152
|
+
expect(document.querySelector('.datepicker-container button.is-selected'))
|
|
153
|
+
.withContext('there should be no selected day with clear interaction')
|
|
154
|
+
.toBe(null);
|
|
155
|
+
done();
|
|
156
|
+
}, 10);
|
|
157
|
+
}, 10);
|
|
158
|
+
}, 10);
|
|
159
|
+
}, 10);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
.materialboxed {
|
|
2
|
+
display: block;
|
|
3
|
+
cursor: zoom-in;
|
|
4
|
+
position: relative;
|
|
5
|
+
transition: opacity .4s;
|
|
6
|
+
-webkit-backface-visibility: hidden;
|
|
7
|
+
|
|
8
|
+
&:hover {
|
|
9
|
+
&:not(.active) {
|
|
10
|
+
opacity: .8;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
&.active {
|
|
14
|
+
cursor: zoom-out;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
#materialbox-overlay {
|
|
19
|
+
position:fixed;
|
|
20
|
+
top: 0;
|
|
21
|
+
right: 0;
|
|
22
|
+
bottom: 0;
|
|
23
|
+
left: 0;
|
|
24
|
+
background-color: var(--md-sys-color-background);
|
|
25
|
+
z-index: 1000;
|
|
26
|
+
will-change: opacity;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.materialbox-caption {
|
|
30
|
+
position: fixed;
|
|
31
|
+
display: none;
|
|
32
|
+
color: var(--md-sys-color-on-background);
|
|
33
|
+
line-height: 50px;
|
|
34
|
+
bottom: 0;
|
|
35
|
+
left: 0;
|
|
36
|
+
width: 100%;
|
|
37
|
+
text-align: center;
|
|
38
|
+
padding: 0% 15%;
|
|
39
|
+
height: 50px;
|
|
40
|
+
z-index: 1000;
|
|
41
|
+
-webkit-font-smoothing: antialiased;
|
|
42
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
@use '../../sass/variables' as *;
|
|
2
|
+
@use '../../sass/global' as *;
|
|
3
|
+
|
|
4
|
+
// use with dialog html element
|
|
5
|
+
.modal {
|
|
6
|
+
--modal-footer-divider-height: 1px;
|
|
7
|
+
--modal-border-radius: 28px;
|
|
8
|
+
--modal-padding: 24px;
|
|
9
|
+
--modal-padding-bottom: 16px;
|
|
10
|
+
--modal-background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-surface-tint) 17%);
|
|
11
|
+
|
|
12
|
+
@extend .z-depth-5;
|
|
13
|
+
border: none;
|
|
14
|
+
outline: none;
|
|
15
|
+
padding: 0;
|
|
16
|
+
max-height: 70%;
|
|
17
|
+
width: 55%;
|
|
18
|
+
border-radius: var(--modal-border-radius);
|
|
19
|
+
will-change: top, opacity;
|
|
20
|
+
background-color: var(--modal-background-color);
|
|
21
|
+
|
|
22
|
+
// Dialog open
|
|
23
|
+
&[open] {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@media #{$medium-and-down} {
|
|
29
|
+
width: 80%;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// custom backdrop blur
|
|
33
|
+
&::backdrop {
|
|
34
|
+
backdrop-filter: blur(1px);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.modal-header {
|
|
38
|
+
padding: var(--modal-padding);
|
|
39
|
+
padding-bottom: var(--modal-padding-bottom);
|
|
40
|
+
flex-shrink: 0;
|
|
41
|
+
position: sticky;
|
|
42
|
+
top: 0;
|
|
43
|
+
// disabled since background color inheritance from parent element
|
|
44
|
+
// background-color: var(--modal-background-color);
|
|
45
|
+
}
|
|
46
|
+
.modal-content {
|
|
47
|
+
padding: 0 var(--modal-padding);
|
|
48
|
+
}
|
|
49
|
+
.modal-footer {
|
|
50
|
+
display: flex;
|
|
51
|
+
border-radius: 0 0 var(--modal-border-radius) var(--modal-border-radius);
|
|
52
|
+
padding: var(--modal-padding);
|
|
53
|
+
text-align: right;
|
|
54
|
+
flex-shrink: 0;
|
|
55
|
+
position: sticky;
|
|
56
|
+
bottom: 0;
|
|
57
|
+
// disabled since background color inheritance from parent element
|
|
58
|
+
// background-color: var(--modal-background-color);
|
|
59
|
+
justify-content: space-between;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.modal-close {
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// todo: remove maybe
|
|
67
|
+
h1,h2,h3,h4,h5,h6 {
|
|
68
|
+
margin: 0;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Modal Bottom Sheet Style
|
|
73
|
+
.modal.bottom-sheet {
|
|
74
|
+
margin-bottom: 0;
|
|
75
|
+
max-height: 45%;
|
|
76
|
+
border-bottom-left-radius: 0;
|
|
77
|
+
border-bottom-right-radius: 0;
|
|
78
|
+
will-change: bottom, opacity;
|
|
79
|
+
}
|