@appartmint/mint 2.5.0 → 2.6.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/dist/js/index.js CHANGED
@@ -118,14 +118,14 @@ class MintGrid {
118
118
 
119
119
  __webpack_require__.r(__webpack_exports__);
120
120
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
121
- /* harmony export */ MintHeader: () => (/* binding */ MintHeader),
122
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
121
+ /* harmony export */ MintHeader: () => (/* binding */ MintHeader)
123
122
  /* harmony export */ });
124
- /* harmony import */ var _enums_side__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/side */ "./src/ts/imports/enums/side.ts");
125
- /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ "./src/ts/imports/util/index.ts");
123
+ /* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./panel */ "./src/ts/imports/components/panel.ts");
124
+ /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu */ "./src/ts/imports/components/menu.ts");
126
125
  /**
127
126
  * Imports
128
127
  */
128
+ // Mint
129
129
 
130
130
 
131
131
  /**
@@ -137,7 +137,9 @@ class MintHeader {
137
137
  * Navbar settings
138
138
  */
139
139
  settings = {
140
- from: _enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide.Top,
140
+ id: 'mint-menu',
141
+ wrapperId: 'mint-wrapper',
142
+ title: 'menu',
141
143
  fixed: true
142
144
  };
143
145
  /**
@@ -145,396 +147,42 @@ class MintHeader {
145
147
  */
146
148
  el = {};
147
149
  /**
148
- * Event handlers
150
+ * Navigation functionality
149
151
  */
150
- events = [];
152
+ panel;
153
+ menu;
151
154
  /**
152
155
  * Initializes and closes the menu
153
156
  */
154
157
  constructor(settings) {
155
158
  this.settings = { ...this.settings, ...settings };
159
+ this.panel = new _panel__WEBPACK_IMPORTED_MODULE_0__.MintPanel(this.settings);
160
+ this.menu = new _menu__WEBPACK_IMPORTED_MODULE_1__.MintMenu(this.settings);
156
161
  this.attachElements();
157
- this.attachEvents();
158
162
  this.addClasses();
159
163
  }
160
164
  /**
161
- * Destroys the header
165
+ * Detach events
162
166
  */
163
- destroy() {
164
- console.log('npm destroy', this.events);
165
- this.events.forEach(event => {
166
- event.handlers.forEach((handler, index) => {
167
- event.el?.removeEventListener(event.events[index], handler);
168
- });
169
- });
170
- this.events = [];
167
+ detachEvents() {
168
+ this.panel?.detachEvents();
169
+ this.menu?.detachEvents();
171
170
  }
172
171
  /**
173
172
  * Adds elements to {@link el | `this.el`}
174
173
  */
175
174
  attachElements() {
176
- this.el.html = document.querySelector('html');
177
175
  this.el.body = document.querySelector('body');
178
- this.el.header = document.getElementById('mint-header');
179
- this.el.mobileButton = this.el.header?.querySelector(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.controls('mint-wrapper')) || null;
180
- this.el.wrapper = document.getElementById('mint-wrapper');
181
- this.el.main = document.getElementsByTagName('main')[0];
182
- }
183
- /**
184
- * Attach event to the given element
185
- * @param element - Element to attach event to
186
- * @param event - Event to attach
187
- * @param handler - Handler to attach
188
- */
189
- attachEvent(element, event, handler) {
190
- if (element) {
191
- let oldElement = this.events.find(e => e.el === element);
192
- if (oldElement) {
193
- oldElement.handlers.push(handler);
194
- oldElement.events.push(event);
195
- }
196
- else {
197
- this.events.push({
198
- el: element,
199
- handlers: [handler],
200
- events: [event]
201
- });
202
- }
203
- element.addEventListener(event, handler);
204
- }
205
- }
206
- /**
207
- * Adds events to the dom
208
- */
209
- attachEvents() {
210
- this.attachEvent(window, 'resize', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleResize.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default));
211
- this.attachEvent(window, 'scroll', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleScroll.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default, { trailing: false }));
212
- this.attachEvent(this.el.main, 'click', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eCloseMobileMenu.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default, { trailing: false }));
213
- let focusables = this.el.header?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.focusable), lastFocusable = focusables?.[focusables?.length - 1];
214
- this.attachEvent(lastFocusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eWrapTab.bind(this)));
215
- focusables?.forEach((focusable) => {
216
- this.attachEvent(focusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleKeypress.bind(this)));
217
- });
218
- let menuButtons = this.el.wrapper?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.controls());
219
- menuButtons?.forEach((menuButton) => {
220
- this.attachEvent(menuButton, 'click', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eToggleMenu.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.slow, { trailing: false }));
221
- });
222
- this.attachEvent(this.el.mobileButton, 'click', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eToggleMobileMenu.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.slow, { trailing: false }));
223
- this.attachEvent(this.el.wrapper, 'transitionend', this.eTransitionEnd.bind(this));
224
176
  }
225
177
  /**
226
178
  * Adds classes that inform the styles based on settings
227
179
  */
228
180
  addClasses() {
229
- this.el.header?.classList.remove('mint-top', 'mint-right', 'mint-bottom', 'mint-left');
230
- this.el.header?.classList.add(`mint-${_enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide[this.settings.from ?? 0].toLowerCase()}`);
231
181
  if (this.settings.fixed) {
232
182
  this.el.body?.classList.add('mint-fixed');
233
183
  }
234
- if (this.settings.tray) {
235
- this.el.header?.classList.add('mint-tray');
236
- }
237
184
  }
238
- /**
239
- * Sets the state of the mobile menu
240
- * @param open - `true` to open the menu or `false` to close it
241
- */
242
- setMobileMenu(open = false) {
243
- let ariaExpanded = open ? 'true' : 'false', ariaLabel = open ? 'close menu' : 'open menu';
244
- this.el.mobileButton?.setAttribute('aria-expanded', ariaExpanded);
245
- setTimeout(() => {
246
- this.el.mobileButton?.setAttribute('aria-label', ariaLabel);
247
- }, _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.fast);
248
- if (open) {
249
- if (this.settings.fixed !== true) {
250
- window.scroll({
251
- top: 0,
252
- left: 0,
253
- behavior: 'smooth'
254
- });
255
- }
256
- setTimeout(() => {
257
- if (this.el.html) {
258
- let isMobile = _util__WEBPACK_IMPORTED_MODULE_1__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.break.sm, overflow = 'auto';
259
- if (this.settings.tray) {
260
- if (isMobile) {
261
- overflow = 'hidden';
262
- }
263
- }
264
- else {
265
- overflow = 'hidden';
266
- }
267
- this.el.html.style.overflow = overflow;
268
- }
269
- }, this.settings.from === _enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide.Left ? _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default : _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.instant);
270
- if (this.el.wrapper) {
271
- this.el.wrapper.style.display = 'flex';
272
- }
273
- requestAnimationFrame(() => {
274
- this.el.wrapper?.classList.add('mint-open');
275
- });
276
- }
277
- else {
278
- if (this.el.html) {
279
- this.el.html.style.overflow = 'auto';
280
- }
281
- requestAnimationFrame(() => {
282
- this.el.wrapper?.classList.remove('mint-open');
283
- });
284
- this.closeAllMenus();
285
- }
286
- }
287
- /**
288
- * Toggles the state of the mobile menu
289
- */
290
- toggleMobileMenu() {
291
- this.setMobileMenu(this.el.mobileButton?.getAttribute('aria-expanded')?.toLowerCase() === 'false');
292
- }
293
- /**
294
- * Sets the state of the provided button's menu
295
- * @param button - Button element to set
296
- * @param open - `true` to open the menu or `false` to close it
297
- */
298
- setMenu(button, open = false) {
299
- let ariaExpanded = open ? 'true' : 'false', menu = button?.nextElementSibling;
300
- if (button && menu) {
301
- button.setAttribute('aria-expanded', ariaExpanded);
302
- if (open) {
303
- _util__WEBPACK_IMPORTED_MODULE_1__.MintDisplay.show(menu);
304
- }
305
- else {
306
- _util__WEBPACK_IMPORTED_MODULE_1__.MintDisplay.hide(menu);
307
- this.closeSubMenus(button);
308
- }
309
- }
310
- }
311
- /**
312
- * Toggles the state of the provided button's menu
313
- * @param button - Button element to toggle
314
- */
315
- toggleMenu(button) {
316
- this.setMenu(button, button?.getAttribute('aria-expanded')?.toLowerCase() !== 'true');
317
- }
318
- /**
319
- * Closes all submenus of the provided button's menu
320
- * @param button - Button element of the parent menu
321
- */
322
- closeSubMenus(button) {
323
- let menu = button?.nextElementSibling, subMenus = menu?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenuButtons);
324
- subMenus.forEach((child) => {
325
- // setMenu calls this function, so ignore subsub menus
326
- if (child.parentElement?.parentElement === menu) {
327
- this.setMenu(child);
328
- }
329
- });
330
- }
331
- /**
332
- * Closes all sibling menus of the provided button's menu
333
- * @param button - Button element of the sibling menus
334
- */
335
- closeSiblingMenus(button) {
336
- let menu = button?.parentElement, siblingMenus = menu?.parentElement?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenuButtons);
337
- siblingMenus.forEach((child) => {
338
- if (child !== button) {
339
- this.setMenu(child);
340
- }
341
- });
342
- }
343
- /**
344
- * Closes all submenus of the n4vbar
345
- */
346
- closeAllMenus() {
347
- let menuButtons = this.el.wrapper?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenuButtons);
348
- menuButtons?.forEach((menuButton) => {
349
- this.setMenu(menuButton);
350
- });
351
- }
352
- /**
353
- * Opens the menu closest to the document's focus
354
- */
355
- openClosestMenu() {
356
- let activeButton = document.activeElement, activeMenu = activeButton?.nextElementSibling, showing = activeButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true';
357
- if (activeButton?.getAttribute('aria-controls') === 'mint-wrapper') {
358
- activeMenu = this.el.wrapper;
359
- }
360
- if (activeButton?.getAttribute('aria-controls') && activeMenu && !showing) {
361
- activeButton.click();
362
- let firstFocusable = activeMenu.querySelector(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.focusable);
363
- firstFocusable?.focus();
364
- }
365
- }
366
- /**
367
- * Closes the menu closest to the document's focus
368
- */
369
- closeClosestMenu() {
370
- let activeElement = document.activeElement, activeMenu = activeElement?.closest(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenu), activeButton = activeMenu?.previousElementSibling ? activeMenu.previousElementSibling : this.el.mobileButton;
371
- if (activeElement?.getAttribute('aria-controls') && activeElement?.getAttribute('aria-expanded')?.toLowerCase() === 'true') {
372
- activeButton = activeElement;
373
- }
374
- if (activeButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true') {
375
- activeButton?.click();
376
- activeButton?.focus();
377
- }
378
- }
379
- /**
380
- * Toggles the menu closest to the document's focus
381
- */
382
- toggleClosestMenu() {
383
- if (document.activeElement?.getAttribute('aria-expanded')?.toLowerCase() === 'true') {
384
- this.closeClosestMenu();
385
- }
386
- else {
387
- this.openClosestMenu();
388
- }
389
- }
390
- /**
391
- * Closes the mobile menu when the window resizes
392
- */
393
- eHandleResize() {
394
- const isMobile = _util__WEBPACK_IMPORTED_MODULE_1__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.break.sm;
395
- let closeMenu = true;
396
- if (this.el.header?.classList.contains('mint-tray')) {
397
- closeMenu = false;
398
- }
399
- else if (!this.el.header?.classList.contains('mint-expand')) {
400
- closeMenu = false;
401
- }
402
- if (!isMobile && closeMenu) {
403
- this.setMobileMenu(false);
404
- }
405
- const isOpen = this.el.mobileButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true';
406
- let overflow = 'auto';
407
- if (isOpen) {
408
- if (this.settings.tray) {
409
- if (isMobile) {
410
- overflow = 'hidden';
411
- }
412
- }
413
- else {
414
- overflow = 'hidden';
415
- }
416
- }
417
- if (this.el.html) {
418
- this.el.html.style.overflow = overflow;
419
- }
420
- }
421
- /**
422
- * Closes all submenus when the page is scrolled
423
- */
424
- eHandleScroll() {
425
- this.closeAllMenus();
426
- }
427
- /**
428
- * Sends the focus to the menu button after tabbing past the last menu item
429
- * @param e - Keyboard event
430
- */
431
- eWrapTab(e) {
432
- if (e.key.toLowerCase() === 'tab' && !e.shiftKey) {
433
- this.el.mobileButton?.focus();
434
- if (document.activeElement === this.el.mobileButton) {
435
- e.preventDefault();
436
- }
437
- }
438
- }
439
- /**
440
- * Handles keypresses on n4vbar buttons
441
- * @param e - Keyboard event
442
- */
443
- eHandleButtonKeypress(e) {
444
- let target = e.target, subMenu = target?.closest('li');
445
- switch (e.key.toLowerCase()) {
446
- case 'escape':
447
- if (subMenu?.classList.contains('mint-open')) {
448
- this.setMenu(subMenu);
449
- }
450
- else {
451
- this.setMobileMenu();
452
- this.el.menuButton?.focus();
453
- }
454
- break;
455
- case 'arrowleft':
456
- this.closeClosestMenu();
457
- break;
458
- case 'arrowright':
459
- this.openClosestMenu();
460
- break;
461
- case 'enter':
462
- case 'space':
463
- target?.click();
464
- break;
465
- }
466
- }
467
- /**
468
- * Handles keypresses on n4vbar links
469
- * @param e - Keyboard event
470
- */
471
- eHandleLinkKeypress(e) {
472
- let target = e.target;
473
- switch (e.key.toLowerCase()) {
474
- case 'escape':
475
- case 'arrowleft':
476
- this.closeClosestMenu();
477
- break;
478
- case 'arrowright':
479
- this.openClosestMenu();
480
- break;
481
- case 'enter':
482
- case 'space':
483
- target?.click();
484
- break;
485
- }
486
- }
487
- /**
488
- * Handles keypresses on the n4vbar
489
- * @param e - Keyboard event
490
- */
491
- eHandleKeypress(e) {
492
- if (e.key.toLowerCase() !== 'tab') {
493
- e.preventDefault();
494
- }
495
- const target = e.target;
496
- switch (target?.tagName.toLowerCase()) {
497
- case 'a':
498
- this.eHandleLinkKeypress(e);
499
- break;
500
- case 'button':
501
- this.eHandleButtonKeypress(e);
502
- break;
503
- }
504
- }
505
- /**
506
- * Toggles the mobile menu
507
- */
508
- eToggleMobileMenu() {
509
- this.toggleMobileMenu();
510
- }
511
- /**
512
- * Closes the mobile menu
513
- */
514
- eCloseMobileMenu() {
515
- this.setMobileMenu(false);
516
- }
517
- /**
518
- * Toggles the clicked submenu
519
- * @param e - Mouse event
520
- */
521
- eToggleMenu(e) {
522
- let target = e.target;
523
- this.closeSiblingMenus(target);
524
- this.toggleMenu(target);
525
- }
526
- /**
527
- * Runs after the mobile menu transitions
528
- */
529
- eTransitionEnd() {
530
- if (this.el.wrapper?.classList.contains('mint-open') === false) {
531
- this.el.wrapper.style.display = 'none';
532
- }
533
- }
534
- ;
535
185
  }
536
- ;
537
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MintHeader);
538
186
 
539
187
 
540
188
  /***/ }),
@@ -550,12 +198,12 @@ __webpack_require__.r(__webpack_exports__);
550
198
  /* harmony export */ MintGrid: () => (/* reexport safe */ _grid__WEBPACK_IMPORTED_MODULE_0__.MintGrid),
551
199
  /* harmony export */ MintHeader: () => (/* reexport safe */ _header__WEBPACK_IMPORTED_MODULE_1__.MintHeader),
552
200
  /* harmony export */ MintMenu: () => (/* reexport safe */ _menu__WEBPACK_IMPORTED_MODULE_2__.MintMenu),
553
- /* harmony export */ MintTray: () => (/* reexport safe */ _tray__WEBPACK_IMPORTED_MODULE_3__.MintTray)
201
+ /* harmony export */ MintPanel: () => (/* reexport safe */ _panel__WEBPACK_IMPORTED_MODULE_3__.MintPanel)
554
202
  /* harmony export */ });
555
203
  /* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./grid */ "./src/ts/imports/components/grid.ts");
556
204
  /* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header */ "./src/ts/imports/components/header.ts");
557
205
  /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./menu */ "./src/ts/imports/components/menu.ts");
558
- /* harmony import */ var _tray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tray */ "./src/ts/imports/components/tray.ts");
206
+ /* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./panel */ "./src/ts/imports/components/panel.ts");
559
207
  /**
560
208
  * Forward all exports from the components directory
561
209
  */
@@ -813,15 +461,15 @@ class MintMenu extends _abstract__WEBPACK_IMPORTED_MODULE_0__.MintAttachesEvents
813
461
 
814
462
  /***/ }),
815
463
 
816
- /***/ "./src/ts/imports/components/tray.ts":
817
- /*!*******************************************!*\
818
- !*** ./src/ts/imports/components/tray.ts ***!
819
- \*******************************************/
464
+ /***/ "./src/ts/imports/components/panel.ts":
465
+ /*!********************************************!*\
466
+ !*** ./src/ts/imports/components/panel.ts ***!
467
+ \********************************************/
820
468
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
821
469
 
822
470
  __webpack_require__.r(__webpack_exports__);
823
471
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
824
- /* harmony export */ MintTray: () => (/* binding */ MintTray)
472
+ /* harmony export */ MintPanel: () => (/* binding */ MintPanel)
825
473
  /* harmony export */ });
826
474
  /* harmony import */ var _enums_side__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/side */ "./src/ts/imports/enums/side.ts");
827
475
  /* harmony import */ var _abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../abstract */ "./src/ts/imports/abstract/index.ts");
@@ -833,15 +481,15 @@ __webpack_require__.r(__webpack_exports__);
833
481
 
834
482
 
835
483
  /**
836
- * Tray (sidebar) functionality
484
+ * Panel (sidebar) functionality
837
485
  * @public
838
486
  */
839
- class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents {
487
+ class MintPanel extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents {
840
488
  /**
841
- * Tray settings
489
+ * Panel settings
842
490
  */
843
491
  settings = {
844
- title: 'tray',
492
+ title: 'panel',
845
493
  from: _enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide.Top,
846
494
  fixed: true
847
495
  };
@@ -850,19 +498,19 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
850
498
  */
851
499
  el = {};
852
500
  /**
853
- * Initializes and closes the tray
501
+ * Initializes and closes the panel
854
502
  */
855
503
  constructor(settings) {
856
504
  super();
857
505
  this.settings = { ...this.settings, ...settings };
858
506
  if (!this.settings.id || !this.settings.wrapperId) {
859
- throw new Error('Tray ID and wrapper ID are required');
507
+ throw new Error('Panel ID and wrapper ID are required');
860
508
  }
861
509
  this.attachElements();
862
510
  this.attachEvents();
863
511
  this.addClasses();
864
512
  requestAnimationFrame(() => {
865
- this.setTray();
513
+ this.setPanel();
866
514
  });
867
515
  }
868
516
  /**
@@ -871,9 +519,9 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
871
519
  attachElements() {
872
520
  this.el.html = document.querySelector('html');
873
521
  this.el.main = document.querySelector('main');
874
- this.el.tray = document.getElementById(this.settings.id);
522
+ this.el.panel = document.getElementById(this.settings.id);
875
523
  this.el.wrapper = document.getElementById(this.settings.wrapperId);
876
- this.el.toggleButton = this.el.tray?.querySelector(_util__WEBPACK_IMPORTED_MODULE_2__.MintSelectors.controls(this.settings.wrapperId)) || null;
524
+ this.el.toggleButton = this.el.panel?.querySelector(_util__WEBPACK_IMPORTED_MODULE_2__.MintSelectors.controls(this.settings.wrapperId)) || null;
877
525
  }
878
526
  /**
879
527
  * Adds events to the dom
@@ -881,7 +529,7 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
881
529
  attachEvents() {
882
530
  this.attachEvent(window, 'resize', _util__WEBPACK_IMPORTED_MODULE_2__.MintEvent.throttleEvent(this.eHandleResize.bind(this), _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.default));
883
531
  this.attachEvent(this.el.main, 'click', _util__WEBPACK_IMPORTED_MODULE_2__.MintEvent.throttleEvent(this.eClose.bind(this), _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.default, { trailing: false }));
884
- const focusables = _util__WEBPACK_IMPORTED_MODULE_2__.MintSelectors.getFocusables(this.el.tray);
532
+ const focusables = _util__WEBPACK_IMPORTED_MODULE_2__.MintSelectors.getFocusables(this.el.panel);
885
533
  focusables?.forEach(focusable => {
886
534
  this.attachEvent(focusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_2__.MintEvent.throttleEvent(this.eWrapTab.bind(this)));
887
535
  });
@@ -892,34 +540,29 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
892
540
  * Adds classes that inform the styles based on settings
893
541
  */
894
542
  addClasses() {
543
+ this.el.panel?.classList.add('mint-panel');
544
+ this.el.wrapper?.classList.add('mint-panel-wrapper');
545
+ this.el.toggleButton?.classList.add('mint-panel-toggle');
895
546
  if (this.settings.from) {
896
- this.el.tray?.classList.remove('mint-top', 'mint-right', 'mint-bottom', 'mint-left');
897
- this.el.tray?.classList.add(`mint-${_enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide[this.settings.from].toLowerCase()}`);
898
- }
899
- else {
900
- if (!this.el.tray?.classList.contains('mint-top')
901
- && !this.el.tray?.classList.contains('mint-bottom')
902
- && !this.el.tray?.classList.contains('mint-left')
903
- && !this.el.tray?.classList.contains('mint-right')) {
904
- this.el.tray?.classList.add('mint-top');
905
- }
547
+ this.el.panel?.classList.remove('mint-top', 'mint-right', 'mint-bottom', 'mint-left');
548
+ this.el.panel?.classList.add(`mint-${_enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide[this.settings.from].toLowerCase()}`);
906
549
  }
907
550
  if (this.settings.tray) {
908
- this.el.tray?.classList.add('mint-tray');
551
+ this.el.panel?.classList.add('mint-tray');
909
552
  }
910
553
  }
911
554
  /**
912
- * Sets the state of the tray
913
- * @param open - `true` to open the tray or `false` to close it
555
+ * Sets the state of the panel
556
+ * @param open - `true` to open the panel or `false` to close it
914
557
  */
915
- setTray(open = false) {
558
+ setPanel(open = false) {
916
559
  let ariaExpanded = open ? 'true' : 'false', ariaLabel = open ? `close ${this.settings.title}` : `open ${this.settings.title}`;
917
560
  this.el.toggleButton?.setAttribute('aria-expanded', ariaExpanded);
918
561
  setTimeout(() => {
919
562
  this.el.toggleButton?.setAttribute('aria-label', ariaLabel);
920
563
  }, _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.fast);
921
564
  if (open) {
922
- // Close other trays
565
+ this.closeOtherPanels();
923
566
  if (this.settings.fixed !== true) {
924
567
  window.scroll({
925
568
  top: 0,
@@ -938,6 +581,7 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
938
581
  else {
939
582
  overflow = 'hidden';
940
583
  }
584
+ console.log('Overflow', overflow, isMobile, this.settings.tray);
941
585
  this.el.html.style.overflow = overflow;
942
586
  }
943
587
  }, this.settings.from === _enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide.Left ? _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.default : _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.instant);
@@ -958,25 +602,33 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
958
602
  }
959
603
  }
960
604
  /**
961
- * Toggles the state of the tray
605
+ * Toggles the state of the panel
606
+ */
607
+ togglePanel() {
608
+ this.setPanel(this.el.toggleButton?.getAttribute('aria-expanded')?.toLowerCase() === 'false');
609
+ }
610
+ /**
611
+ * Closes other panels
962
612
  */
963
- toggleTray() {
964
- this.setTray(this.el.toggleButton?.getAttribute('aria-expanded')?.toLowerCase() === 'false');
613
+ closeOtherPanels() {
614
+ const openPanelSelector = `.mint-panel-toggle[aria-expanded="true"]:not([aria-controls="${this.settings.wrapperId}"])`;
615
+ const toggleBtn = document.querySelector(openPanelSelector);
616
+ toggleBtn?.click();
965
617
  }
966
618
  /**
967
- * Closes the tray when the window resizes
619
+ * Closes the panel when the window resizes
968
620
  */
969
621
  eHandleResize() {
970
622
  const isMobile = _util__WEBPACK_IMPORTED_MODULE_2__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.break.sm;
971
623
  let closeMenu = true;
972
- if (this.el.tray?.classList.contains('mint-tray')) {
624
+ if (this.el.panel?.classList.contains('mint-tray')) {
973
625
  closeMenu = false;
974
626
  }
975
- else if (!this.el.tray?.classList.contains('mint-expand')) {
627
+ else if (!this.el.panel?.classList.contains('mint-expand')) {
976
628
  closeMenu = false;
977
629
  }
978
630
  if (!isMobile && closeMenu) {
979
- this.setTray(false);
631
+ this.setPanel(false);
980
632
  }
981
633
  const isOpen = this.el.toggleButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true';
982
634
  let overflow = 'auto';
@@ -999,7 +651,7 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
999
651
  * @param e - Keyboard event
1000
652
  */
1001
653
  eWrapTab(e) {
1002
- const focusables = _util__WEBPACK_IMPORTED_MODULE_2__.MintSelectors.getFocusables(this.el.tray), lastFocusable = focusables?.[focusables?.length - 1], wrapTab = focusables?.length > 1 && document.activeElement === lastFocusable, isTab = e.key.toLowerCase() === 'tab' && !e.shiftKey;
654
+ const focusables = _util__WEBPACK_IMPORTED_MODULE_2__.MintSelectors.getFocusables(this.el.panel), lastFocusable = focusables?.[focusables?.length - 1], wrapTab = focusables?.length > 1 && document.activeElement === lastFocusable, isTab = e.key.toLowerCase() === 'tab' && !e.shiftKey;
1003
655
  if (isTab && wrapTab) {
1004
656
  this.el.toggleButton?.focus();
1005
657
  if (document.activeElement === this.el.toggleButton) {
@@ -1008,19 +660,19 @@ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents
1008
660
  }
1009
661
  }
1010
662
  /**
1011
- * Toggles the tray
663
+ * Toggles the panel
1012
664
  */
1013
665
  eToggle() {
1014
- this.toggleTray();
666
+ this.togglePanel();
1015
667
  }
1016
668
  /**
1017
- * Closes the tray
669
+ * Closes the panel
1018
670
  */
1019
671
  eClose() {
1020
- this.setTray(false);
672
+ this.setPanel(false);
1021
673
  }
1022
674
  /**
1023
- * Runs after the tray transitions
675
+ * Runs after the panel transitions
1024
676
  */
1025
677
  eTransitionEnd() {
1026
678
  if (this.el.wrapper?.classList.contains('mint-open') === false) {
@@ -1097,11 +749,11 @@ __webpack_require__.r(__webpack_exports__);
1097
749
  /* harmony export */ MintMath: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintMath),
1098
750
  /* harmony export */ MintMenu: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintMenu),
1099
751
  /* harmony export */ MintObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintObject),
752
+ /* harmony export */ MintPanel: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintPanel),
1100
753
  /* harmony export */ MintScroll: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintScroll),
1101
754
  /* harmony export */ MintSelectors: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintSelectors),
1102
755
  /* harmony export */ MintSettings: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintSettings),
1103
756
  /* harmony export */ MintText: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintText),
1104
- /* harmony export */ MintTray: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintTray),
1105
757
  /* harmony export */ MintWindow: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintWindow),
1106
758
  /* harmony export */ mintColor: () => (/* reexport safe */ _models__WEBPACK_IMPORTED_MODULE_3__.mintColor)
1107
759
  /* harmony export */ });
@@ -2693,11 +2345,11 @@ __webpack_require__.r(__webpack_exports__);
2693
2345
  /* harmony export */ MintMath: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintMath),
2694
2346
  /* harmony export */ MintMenu: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintMenu),
2695
2347
  /* harmony export */ MintObject: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintObject),
2348
+ /* harmony export */ MintPanel: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintPanel),
2696
2349
  /* harmony export */ MintScroll: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintScroll),
2697
2350
  /* harmony export */ MintSelectors: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintSelectors),
2698
2351
  /* harmony export */ MintSettings: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintSettings),
2699
2352
  /* harmony export */ MintText: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintText),
2700
- /* harmony export */ MintTray: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintTray),
2701
2353
  /* harmony export */ MintWindow: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintWindow),
2702
2354
  /* harmony export */ mintColor: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.mintColor)
2703
2355
  /* harmony export */ });
@@ -2727,13 +2379,13 @@ var __webpack_exports__MintList = __webpack_exports__.MintList;
2727
2379
  var __webpack_exports__MintMath = __webpack_exports__.MintMath;
2728
2380
  var __webpack_exports__MintMenu = __webpack_exports__.MintMenu;
2729
2381
  var __webpack_exports__MintObject = __webpack_exports__.MintObject;
2382
+ var __webpack_exports__MintPanel = __webpack_exports__.MintPanel;
2730
2383
  var __webpack_exports__MintScroll = __webpack_exports__.MintScroll;
2731
2384
  var __webpack_exports__MintSelectors = __webpack_exports__.MintSelectors;
2732
2385
  var __webpack_exports__MintSettings = __webpack_exports__.MintSettings;
2733
2386
  var __webpack_exports__MintText = __webpack_exports__.MintText;
2734
- var __webpack_exports__MintTray = __webpack_exports__.MintTray;
2735
2387
  var __webpack_exports__MintWindow = __webpack_exports__.MintWindow;
2736
2388
  var __webpack_exports__mintColor = __webpack_exports__.mintColor;
2737
- export { __webpack_exports__EMintSide as EMintSide, __webpack_exports__MintAsync as MintAsync, __webpack_exports__MintAttachesEvents as MintAttachesEvents, __webpack_exports__MintDisplay as MintDisplay, __webpack_exports__MintEvent as MintEvent, __webpack_exports__MintGrid as MintGrid, __webpack_exports__MintHeader as MintHeader, __webpack_exports__MintIcon as MintIcon, __webpack_exports__MintItem as MintItem, __webpack_exports__MintList as MintList, __webpack_exports__MintMath as MintMath, __webpack_exports__MintMenu as MintMenu, __webpack_exports__MintObject as MintObject, __webpack_exports__MintScroll as MintScroll, __webpack_exports__MintSelectors as MintSelectors, __webpack_exports__MintSettings as MintSettings, __webpack_exports__MintText as MintText, __webpack_exports__MintTray as MintTray, __webpack_exports__MintWindow as MintWindow, __webpack_exports__mintColor as mintColor };
2389
+ export { __webpack_exports__EMintSide as EMintSide, __webpack_exports__MintAsync as MintAsync, __webpack_exports__MintAttachesEvents as MintAttachesEvents, __webpack_exports__MintDisplay as MintDisplay, __webpack_exports__MintEvent as MintEvent, __webpack_exports__MintGrid as MintGrid, __webpack_exports__MintHeader as MintHeader, __webpack_exports__MintIcon as MintIcon, __webpack_exports__MintItem as MintItem, __webpack_exports__MintList as MintList, __webpack_exports__MintMath as MintMath, __webpack_exports__MintMenu as MintMenu, __webpack_exports__MintObject as MintObject, __webpack_exports__MintPanel as MintPanel, __webpack_exports__MintScroll as MintScroll, __webpack_exports__MintSelectors as MintSelectors, __webpack_exports__MintSettings as MintSettings, __webpack_exports__MintText as MintText, __webpack_exports__MintWindow as MintWindow, __webpack_exports__mintColor as mintColor };
2738
2390
 
2739
2391
  //# sourceMappingURL=index.js.map