@appartmint/mint 2.1.3 → 2.1.5

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.
@@ -15,16 +15,35 @@ export declare class MintHeader {
15
15
  el: {
16
16
  [key: string]: HTMLElement | null;
17
17
  };
18
+ /**
19
+ * Event handlers
20
+ */
21
+ events: {
22
+ el: HTMLElement | Window | null;
23
+ handlers: EventListener[];
24
+ events: string[];
25
+ }[];
18
26
  /**
19
27
  * Initializes and closes the menu
20
28
  */
21
29
  constructor(settings?: {
22
30
  [key: string]: any;
23
31
  });
32
+ /**
33
+ * Destroys the header
34
+ */
35
+ destroy(): void;
24
36
  /**
25
37
  * Adds elements to {@link el | `this.el`}
26
38
  */
27
39
  attachElements(): void;
40
+ /**
41
+ * Attach event to the given element
42
+ * @param element - Element to attach event to
43
+ * @param event - Event to attach
44
+ * @param handler - Handler to attach
45
+ */
46
+ attachEvent(element: HTMLElement | Window | null | undefined, event: string, handler: EventListener): void;
28
47
  /**
29
48
  * Adds events to the dom
30
49
  */
@@ -111,6 +130,10 @@ export declare class MintHeader {
111
130
  * Toggles the mobile menu
112
131
  */
113
132
  eToggleMobileMenu(): void;
133
+ /**
134
+ * Closes the mobile menu
135
+ */
136
+ eCloseMobileMenu(): void;
114
137
  /**
115
138
  * Toggles the clicked submenu
116
139
  * @param e - Mouse event
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/ts/imports/components/header.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,qBAAa,UAAU;IACnB;;OAEG;IACF,QAAQ,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAG7B;IAEF;;OAEG;IACH,EAAE,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAA;KAAC,CAAM;IAE7C;;OAEG;gBACU,QAAQ,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAQ5C;;OAEG;IACH,cAAc,IAAM,IAAI;IAQxB;;OAEG;IACH,YAAY,IAAM,IAAI;IAoBtB;;OAEG;IACH,UAAU,IAAM,IAAI;IAYpB;;;OAGG;IACH,aAAa,CAAE,IAAI,GAAE,OAAe,GAAI,IAAI;IAsD5C;;OAEG;IACH,gBAAgB,IAAM,IAAI;IAI1B;;;;OAIG;IACH,OAAO,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,EAC3B,IAAI,GAAE,OAAe,GAAI,IAAI;IActC;;;OAGG;IACH,UAAU,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAI,IAAI;IAI/C;;;OAGG;IACH,aAAa,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAI,IAAI;IAWlD;;;OAGG;IACH,iBAAiB,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAI,IAAI;IAUtD;;OAEG;IACH,aAAa,IAAM,IAAI;IAOvB;;OAEG;IACH,eAAe,IAAM,IAAI;IAezB;;OAEG;IACH,gBAAgB,IAAM,IAAI;IAc1B;;OAEG;IACH,iBAAiB,IAAM,IAAI;IAQ3B;;OAEG;IACH,aAAa,IAAM,IAAI;IAoBvB;;OAEG;IACH,aAAa,IAAM,IAAI;IAIvB;;;OAGG;IACH,QAAQ,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IASlC;;;OAGG;IACH,qBAAqB,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IAyB/C;;;OAGG;IACH,mBAAmB,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IAiB7C;;;OAGG;IACH,eAAe,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IAezC;;OAEG;IACH,iBAAiB,IAAM,IAAI;IAI3B;;;OAGG;IACH,WAAW,CAAE,CAAC,EAAE,UAAU,GAAI,IAAI;IAMlC;;OAEG;IACH,cAAc,IAAM,IAAI;CAK3B;AACD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/ts/imports/components/header.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,qBAAa,UAAU;IAEtB;;OAEM;IACF,QAAQ,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAG7B;IAEF;;OAEG;IACH,EAAE,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAA;KAAC,CAAM;IAEhD;;OAEG;IACH,MAAM,EAAE;QACP,EAAE,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC;QAChC,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,CAAA;KAChB,EAAE,CAAM;IAGN;;OAEG;gBACU,QAAQ,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAQ/C;;OAEG;IACH,OAAO,IAAM,IAAI;IASd;;OAEG;IACH,cAAc,IAAM,IAAI;IAS3B;;;;;OAKG;IACH,WAAW,CAAE,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAI,IAAI;IAiBzG;;OAEG;IACH,YAAY,IAAM,IAAI;IAqBtB;;OAEG;IACH,UAAU,IAAM,IAAI;IAYpB;;;OAGG;IACH,aAAa,CAAE,IAAI,GAAE,OAAe,GAAI,IAAI;IAsD5C;;OAEG;IACH,gBAAgB,IAAM,IAAI;IAI1B;;;;OAIG;IACH,OAAO,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,EAC3B,IAAI,GAAE,OAAe,GAAI,IAAI;IActC;;;OAGG;IACH,UAAU,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAI,IAAI;IAI/C;;;OAGG;IACH,aAAa,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAI,IAAI;IAWlD;;;OAGG;IACH,iBAAiB,CAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAI,IAAI;IAUtD;;OAEG;IACH,aAAa,IAAM,IAAI;IAOvB;;OAEG;IACH,eAAe,IAAM,IAAI;IAezB;;OAEG;IACH,gBAAgB,IAAM,IAAI;IAc1B;;OAEG;IACH,iBAAiB,IAAM,IAAI;IAQ3B;;OAEG;IACH,aAAa,IAAM,IAAI;IAgCvB;;OAEG;IACH,aAAa,IAAM,IAAI;IAIvB;;;OAGG;IACH,QAAQ,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IASlC;;;OAGG;IACH,qBAAqB,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IAyB/C;;;OAGG;IACH,mBAAmB,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IAiB7C;;;OAGG;IACH,eAAe,CAAE,CAAC,EAAE,aAAa,GAAI,IAAI;IAezC;;OAEG;IACH,iBAAiB,IAAM,IAAI;IAI9B;;OAEG;IACH,gBAAgB,IAAM,IAAI;IAIvB;;;OAGG;IACH,WAAW,CAAE,CAAC,EAAE,UAAU,GAAI,IAAI;IAMlC;;OAEG;IACH,cAAc,IAAM,IAAI;CAK3B;AACD,eAAe,UAAU,CAAC"}
package/dist/js/index.js CHANGED
@@ -34,6 +34,10 @@ class MintHeader {
34
34
  * Frequently-referenced elements
35
35
  */
36
36
  el = {};
37
+ /**
38
+ * Event handlers
39
+ */
40
+ events = [];
37
41
  /**
38
42
  * Initializes and closes the menu
39
43
  */
@@ -43,6 +47,17 @@ class MintHeader {
43
47
  this.attachEvents();
44
48
  this.addClasses();
45
49
  }
50
+ /**
51
+ * Destroys the header
52
+ */
53
+ destroy() {
54
+ this.events.forEach(event => {
55
+ event.handlers.forEach((handler, index) => {
56
+ event.el?.removeEventListener(event.events[index], handler);
57
+ });
58
+ });
59
+ this.events = [];
60
+ }
46
61
  /**
47
62
  * Adds elements to {@link el | `this.el`}
48
63
  */
@@ -52,24 +67,49 @@ class MintHeader {
52
67
  this.el.header = document.getElementById('mint-header');
53
68
  this.el.mobileButton = this.el.header?.querySelector(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.controls('mint-wrapper')) || null;
54
69
  this.el.wrapper = document.getElementById('mint-wrapper');
70
+ this.el.main = document.getElementsByTagName('main')[0];
71
+ }
72
+ /**
73
+ * Attach event to the given element
74
+ * @param element - Element to attach event to
75
+ * @param event - Event to attach
76
+ * @param handler - Handler to attach
77
+ */
78
+ attachEvent(element, event, handler) {
79
+ if (element) {
80
+ let oldElement = this.events.find(e => e.el === element);
81
+ if (oldElement) {
82
+ oldElement.handlers.push(handler);
83
+ oldElement.events.push(event);
84
+ }
85
+ else {
86
+ this.events.push({
87
+ el: element,
88
+ handlers: [handler],
89
+ events: [event]
90
+ });
91
+ }
92
+ element.addEventListener(event, handler);
93
+ }
55
94
  }
56
95
  /**
57
96
  * Adds events to the dom
58
97
  */
59
98
  attachEvents() {
60
- window.addEventListener('resize', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleResize.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default));
61
- window.addEventListener('scroll', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleScroll.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default, { trailing: false }));
99
+ this.attachEvent(window, 'resize', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleResize.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.default));
100
+ 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 }));
101
+ 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 }));
62
102
  let focusables = this.el.header?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.focusable), lastFocusable = focusables?.[focusables?.length - 1];
63
- lastFocusable?.addEventListener('keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eWrapTab.bind(this)));
103
+ this.attachEvent(lastFocusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eWrapTab.bind(this)));
64
104
  focusables?.forEach((focusable) => {
65
- focusable.addEventListener('keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleKeypress.bind(this)));
105
+ this.attachEvent(focusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleKeypress.bind(this)));
66
106
  });
67
107
  let menuButtons = this.el.wrapper?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.controls());
68
108
  menuButtons?.forEach((menuButton) => {
69
- menuButton.addEventListener('click', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eToggleMenu.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.slow, { trailing: false }));
109
+ 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 }));
70
110
  });
71
- this.el.mobileButton?.addEventListener('click', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eToggleMobileMenu.bind(this), _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.delay.slow, { trailing: false }));
72
- this.el.wrapper?.addEventListener('transitionend', this.eTransitionEnd.bind(this));
111
+ 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 }));
112
+ this.attachEvent(this.el.wrapper, 'transitionend', this.eTransitionEnd.bind(this));
73
113
  }
74
114
  /**
75
115
  * Adds classes that inform the styles based on settings
@@ -240,7 +280,19 @@ class MintHeader {
240
280
  * Closes the mobile menu when the window resizes
241
281
  */
242
282
  eHandleResize() {
243
- let isOpen = this.el.mobileButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true', isMobile = _util__WEBPACK_IMPORTED_MODULE_1__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.break.sm, overflow = 'auto';
283
+ const isMobile = _util__WEBPACK_IMPORTED_MODULE_1__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_1__.MintSettings.break.sm;
284
+ let closeMenu = true;
285
+ if (this.el.header?.classList.contains('mint-tray')) {
286
+ closeMenu = false;
287
+ }
288
+ else if (!this.el.header?.classList.contains('mint-expand')) {
289
+ closeMenu = false;
290
+ }
291
+ if (!isMobile && closeMenu) {
292
+ this.setMobileMenu(false);
293
+ }
294
+ const isOpen = this.el.mobileButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true';
295
+ let overflow = 'auto';
244
296
  if (isOpen) {
245
297
  if (this.settings.tray) {
246
298
  if (isMobile) {
@@ -345,6 +397,12 @@ class MintHeader {
345
397
  eToggleMobileMenu() {
346
398
  this.toggleMobileMenu();
347
399
  }
400
+ /**
401
+ * Closes the mobile menu
402
+ */
403
+ eCloseMobileMenu() {
404
+ this.setMobileMenu(false);
405
+ }
348
406
  /**
349
407
  * Toggles the clicked submenu
350
408
  * @param e - Mouse event