@appartmint/mint 2.4.4 → 2.5.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
@@ -1,5 +1,85 @@
1
1
  /******/ var __webpack_modules__ = ({
2
2
 
3
+ /***/ "./src/ts/imports/abstract/attaches-events.ts":
4
+ /*!****************************************************!*\
5
+ !*** ./src/ts/imports/abstract/attaches-events.ts ***!
6
+ \****************************************************/
7
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8
+
9
+ __webpack_require__.r(__webpack_exports__);
10
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11
+ /* harmony export */ MintAttachesEvents: () => (/* binding */ MintAttachesEvents)
12
+ /* harmony export */ });
13
+ /**
14
+ * Imports
15
+ */
16
+ /**
17
+ * Attaches Events
18
+ * @description Extended by classes that attach and detach events
19
+ */
20
+ class MintAttachesEvents {
21
+ /**
22
+ * Event handlers
23
+ */
24
+ events = [];
25
+ /**
26
+ * Attach event to the given element
27
+ * @param element - Element to attach event to
28
+ * @param event - Event to attach
29
+ * @param handler - Handler to attach
30
+ */
31
+ attachEvent(element, event, handler) {
32
+ if (element) {
33
+ let oldElement = this.events.find(e => e.el === element);
34
+ if (oldElement) {
35
+ oldElement.handlers.push(handler);
36
+ oldElement.events.push(event);
37
+ }
38
+ else {
39
+ this.events.push({
40
+ el: element,
41
+ handlers: [handler],
42
+ events: [event]
43
+ });
44
+ }
45
+ element.addEventListener(event, handler);
46
+ }
47
+ }
48
+ /**
49
+ * Detach events
50
+ */
51
+ detachEvents() {
52
+ this.events.forEach(event => {
53
+ event.handlers.forEach((handler, index) => {
54
+ event.el?.removeEventListener(event.events[index], handler);
55
+ });
56
+ });
57
+ this.events = [];
58
+ }
59
+ }
60
+
61
+
62
+ /***/ }),
63
+
64
+ /***/ "./src/ts/imports/abstract/index.ts":
65
+ /*!******************************************!*\
66
+ !*** ./src/ts/imports/abstract/index.ts ***!
67
+ \******************************************/
68
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
69
+
70
+ __webpack_require__.r(__webpack_exports__);
71
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
72
+ /* harmony export */ MintAttachesEvents: () => (/* reexport safe */ _attaches_events__WEBPACK_IMPORTED_MODULE_0__.MintAttachesEvents)
73
+ /* harmony export */ });
74
+ /* harmony import */ var _attaches_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attaches-events */ "./src/ts/imports/abstract/attaches-events.ts");
75
+ /**
76
+ * Forward all abstract exports
77
+ */
78
+
79
+
80
+
81
+ /***/ }),
82
+
3
83
  /***/ "./src/ts/imports/components/grid.ts":
4
84
  /*!*******************************************!*\
5
85
  !*** ./src/ts/imports/components/grid.ts ***!
@@ -468,10 +548,14 @@ class MintHeader {
468
548
  __webpack_require__.r(__webpack_exports__);
469
549
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
470
550
  /* harmony export */ MintGrid: () => (/* reexport safe */ _grid__WEBPACK_IMPORTED_MODULE_0__.MintGrid),
471
- /* harmony export */ MintHeader: () => (/* reexport safe */ _header__WEBPACK_IMPORTED_MODULE_1__.MintHeader)
551
+ /* harmony export */ MintHeader: () => (/* reexport safe */ _header__WEBPACK_IMPORTED_MODULE_1__.MintHeader),
552
+ /* harmony export */ MintMenu: () => (/* reexport safe */ _menu__WEBPACK_IMPORTED_MODULE_2__.MintMenu),
553
+ /* harmony export */ MintTray: () => (/* reexport safe */ _tray__WEBPACK_IMPORTED_MODULE_3__.MintTray)
472
554
  /* harmony export */ });
473
555
  /* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./grid */ "./src/ts/imports/components/grid.ts");
474
556
  /* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header */ "./src/ts/imports/components/header.ts");
557
+ /* 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");
475
559
  /**
476
560
  * Forward all exports from the components directory
477
561
  */
@@ -479,6 +563,473 @@ __webpack_require__.r(__webpack_exports__);
479
563
 
480
564
 
481
565
 
566
+
567
+
568
+ /***/ }),
569
+
570
+ /***/ "./src/ts/imports/components/menu.ts":
571
+ /*!*******************************************!*\
572
+ !*** ./src/ts/imports/components/menu.ts ***!
573
+ \*******************************************/
574
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
575
+
576
+ __webpack_require__.r(__webpack_exports__);
577
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
578
+ /* harmony export */ MintMenu: () => (/* binding */ MintMenu)
579
+ /* harmony export */ });
580
+ /* harmony import */ var _abstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../abstract */ "./src/ts/imports/abstract/index.ts");
581
+ /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ "./src/ts/imports/util/index.ts");
582
+ /**
583
+ * Imports
584
+ */
585
+ // Mint
586
+
587
+
588
+ /**
589
+ * Menu (dropdown) functionality
590
+ * @public
591
+ */
592
+ class MintMenu extends _abstract__WEBPACK_IMPORTED_MODULE_0__.MintAttachesEvents {
593
+ /**
594
+ * Tray settings
595
+ */
596
+ settings = {};
597
+ /**
598
+ * Frequently-referenced elements
599
+ */
600
+ el = {};
601
+ /**
602
+ * Initializes and closes the tray
603
+ */
604
+ constructor(settings) {
605
+ super();
606
+ this.settings = { ...this.settings, ...settings };
607
+ if (!this.settings.wrapperId) {
608
+ throw new Error('Wrapper ID is required');
609
+ }
610
+ this.attachElements();
611
+ this.attachEvents();
612
+ requestAnimationFrame(() => {
613
+ this.closeAllMenus();
614
+ });
615
+ }
616
+ /**
617
+ * Adds elements to {@link el | `this.el`}
618
+ */
619
+ attachElements() {
620
+ this.el.wrapper = document.getElementById(this.settings.wrapperId);
621
+ }
622
+ /**
623
+ * Adds events to the dom
624
+ */
625
+ attachEvents() {
626
+ 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 }));
627
+ const focusables = this.el.wrapper?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.focusable);
628
+ focusables?.forEach((focusable) => {
629
+ this.attachEvent(focusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_1__.MintEvent.throttleEvent(this.eHandleKeypress.bind(this)));
630
+ });
631
+ const menuButtons = this.el.wrapper?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.controls());
632
+ menuButtons?.forEach((menuButton) => {
633
+ 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 }));
634
+ });
635
+ }
636
+ /**
637
+ * Sets the state of the provided button's menu
638
+ * @param button - Button element to set
639
+ * @param open - `true` to open the menu or `false` to close it
640
+ */
641
+ setMenu(button, open = false) {
642
+ let ariaExpanded = open ? 'true' : 'false', menu = button?.nextElementSibling;
643
+ if (button && menu) {
644
+ button.setAttribute('aria-expanded', ariaExpanded);
645
+ if (open) {
646
+ _util__WEBPACK_IMPORTED_MODULE_1__.MintDisplay.show(menu);
647
+ }
648
+ else {
649
+ _util__WEBPACK_IMPORTED_MODULE_1__.MintDisplay.hide(menu);
650
+ this.closeSubMenus(button);
651
+ }
652
+ }
653
+ }
654
+ /**
655
+ * Toggles the state of the provided button's menu
656
+ * @param button - Button element to toggle
657
+ */
658
+ toggleMenu(button) {
659
+ this.setMenu(button, button?.getAttribute('aria-expanded')?.toLowerCase() !== 'true');
660
+ }
661
+ /**
662
+ * Closes all submenus of the provided button's menu
663
+ * @param button - Button element of the parent menu
664
+ */
665
+ closeSubMenus(button) {
666
+ let menu = button?.nextElementSibling, subMenus = menu?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenuButtons);
667
+ subMenus.forEach((child) => {
668
+ // setMenu calls this function, so ignore subsub menus
669
+ if (child.parentElement?.parentElement === menu) {
670
+ this.setMenu(child);
671
+ }
672
+ });
673
+ }
674
+ /**
675
+ * Closes all sibling menus of the provided button's menu
676
+ * @param button - Button element of the sibling menus
677
+ */
678
+ closeSiblingMenus(button) {
679
+ let menu = button?.parentElement, siblingMenus = menu?.parentElement?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenuButtons);
680
+ siblingMenus.forEach((child) => {
681
+ if (child !== button) {
682
+ this.setMenu(child);
683
+ }
684
+ });
685
+ }
686
+ /**
687
+ * Closes all submenus of the menu
688
+ */
689
+ closeAllMenus() {
690
+ let menuButtons = this.el.wrapper?.querySelectorAll(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenuButtons);
691
+ menuButtons?.forEach((menuButton) => {
692
+ this.setMenu(menuButton);
693
+ });
694
+ }
695
+ /**
696
+ * Opens the menu closest to the document's focus
697
+ */
698
+ openClosestMenu() {
699
+ let activeButton = document.activeElement, activeMenu = activeButton?.nextElementSibling, showing = activeButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true';
700
+ if (activeButton?.getAttribute('aria-controls') === this.settings.wrapperId) {
701
+ activeMenu = this.el.wrapper;
702
+ }
703
+ if (activeButton?.getAttribute('aria-controls') && activeMenu && !showing) {
704
+ activeButton.click();
705
+ let firstFocusable = activeMenu.querySelector(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.focusable);
706
+ firstFocusable?.focus();
707
+ }
708
+ }
709
+ /**
710
+ * Closes the menu closest to the document's focus
711
+ */
712
+ closeClosestMenu() {
713
+ let activeElement = document.activeElement, activeMenu = activeElement?.closest(_util__WEBPACK_IMPORTED_MODULE_1__.MintSelectors.subMenu), activeButton = activeMenu?.previousElementSibling;
714
+ if (activeElement?.getAttribute('aria-controls') && activeElement?.getAttribute('aria-expanded')?.toLowerCase() === 'true') {
715
+ activeButton = activeElement;
716
+ }
717
+ if (activeButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true') {
718
+ activeButton?.click();
719
+ activeButton?.focus();
720
+ }
721
+ }
722
+ /**
723
+ * Toggles the menu closest to the document's focus
724
+ */
725
+ toggleClosestMenu() {
726
+ if (document.activeElement?.getAttribute('aria-expanded')?.toLowerCase() === 'true') {
727
+ this.closeClosestMenu();
728
+ }
729
+ else {
730
+ this.openClosestMenu();
731
+ }
732
+ }
733
+ /**
734
+ * Closes all submenus when the page is scrolled
735
+ */
736
+ eHandleScroll() {
737
+ this.closeAllMenus();
738
+ }
739
+ /**
740
+ * Handles keypresses on menu buttons
741
+ * @param e - Keyboard event
742
+ */
743
+ eHandleButtonKeypress(e) {
744
+ let target = e.target, subMenu = target?.closest('li');
745
+ switch (e.key.toLowerCase()) {
746
+ case 'escape':
747
+ if (subMenu?.classList.contains('mint-open')) {
748
+ this.setMenu(subMenu);
749
+ }
750
+ break;
751
+ case 'arrowleft':
752
+ this.closeClosestMenu();
753
+ break;
754
+ case 'arrowright':
755
+ this.openClosestMenu();
756
+ break;
757
+ case 'enter':
758
+ case 'space':
759
+ target?.click();
760
+ break;
761
+ }
762
+ }
763
+ /**
764
+ * Handles keypresses on menu links
765
+ * @param e - Keyboard event
766
+ */
767
+ eHandleLinkKeypress(e) {
768
+ let target = e.target;
769
+ switch (e.key.toLowerCase()) {
770
+ case 'escape':
771
+ case 'arrowleft':
772
+ this.closeClosestMenu();
773
+ break;
774
+ case 'arrowright':
775
+ this.openClosestMenu();
776
+ break;
777
+ case 'enter':
778
+ case 'space':
779
+ target?.click();
780
+ break;
781
+ }
782
+ }
783
+ /**
784
+ * Handles keypresses on the menu
785
+ * @param e - Keyboard event
786
+ */
787
+ eHandleKeypress(e) {
788
+ if (e.key.toLowerCase() !== 'tab') {
789
+ e.preventDefault();
790
+ }
791
+ const target = e.target;
792
+ switch (target?.tagName.toLowerCase()) {
793
+ case 'a':
794
+ this.eHandleLinkKeypress(e);
795
+ break;
796
+ case 'button':
797
+ this.eHandleButtonKeypress(e);
798
+ break;
799
+ }
800
+ }
801
+ /**
802
+ * Toggles the clicked submenu
803
+ * @param e - Mouse event
804
+ */
805
+ eToggleMenu(e) {
806
+ let target = e.target;
807
+ this.closeSiblingMenus(target);
808
+ this.toggleMenu(target);
809
+ }
810
+ }
811
+ ;
812
+
813
+
814
+ /***/ }),
815
+
816
+ /***/ "./src/ts/imports/components/tray.ts":
817
+ /*!*******************************************!*\
818
+ !*** ./src/ts/imports/components/tray.ts ***!
819
+ \*******************************************/
820
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
821
+
822
+ __webpack_require__.r(__webpack_exports__);
823
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
824
+ /* harmony export */ MintTray: () => (/* binding */ MintTray)
825
+ /* harmony export */ });
826
+ /* harmony import */ var _enums_side__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums/side */ "./src/ts/imports/enums/side.ts");
827
+ /* harmony import */ var _abstract__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../abstract */ "./src/ts/imports/abstract/index.ts");
828
+ /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util */ "./src/ts/imports/util/index.ts");
829
+ /**
830
+ * Imports
831
+ */
832
+
833
+
834
+
835
+ /**
836
+ * Tray (sidebar) functionality
837
+ * @public
838
+ */
839
+ class MintTray extends _abstract__WEBPACK_IMPORTED_MODULE_1__.MintAttachesEvents {
840
+ /**
841
+ * Tray settings
842
+ */
843
+ settings = {
844
+ title: 'tray',
845
+ from: _enums_side__WEBPACK_IMPORTED_MODULE_0__.EMintSide.Top,
846
+ fixed: true
847
+ };
848
+ /**
849
+ * Frequently-referenced elements
850
+ */
851
+ el = {};
852
+ /**
853
+ * Initializes and closes the tray
854
+ */
855
+ constructor(settings) {
856
+ super();
857
+ this.settings = { ...this.settings, ...settings };
858
+ if (!this.settings.id || !this.settings.wrapperId) {
859
+ throw new Error('Tray ID and wrapper ID are required');
860
+ }
861
+ this.attachElements();
862
+ this.attachEvents();
863
+ this.addClasses();
864
+ requestAnimationFrame(() => {
865
+ this.setTray();
866
+ });
867
+ }
868
+ /**
869
+ * Adds elements to {@link el | `this.el`}
870
+ */
871
+ attachElements() {
872
+ this.el.html = document.querySelector('html');
873
+ this.el.main = document.querySelector('main');
874
+ this.el.tray = document.getElementById(this.settings.id);
875
+ 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;
877
+ }
878
+ /**
879
+ * Adds events to the dom
880
+ */
881
+ attachEvents() {
882
+ this.attachEvent(window, 'resize', _util__WEBPACK_IMPORTED_MODULE_2__.MintEvent.throttleEvent(this.eHandleResize.bind(this), _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.default));
883
+ 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);
885
+ focusables?.forEach(focusable => {
886
+ this.attachEvent(focusable, 'keydown', _util__WEBPACK_IMPORTED_MODULE_2__.MintEvent.throttleEvent(this.eWrapTab.bind(this)));
887
+ });
888
+ this.attachEvent(this.el.toggleButton, 'click', _util__WEBPACK_IMPORTED_MODULE_2__.MintEvent.throttleEvent(this.eToggle.bind(this), _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.slow, { trailing: false }));
889
+ this.attachEvent(this.el.wrapper, 'transitionend', this.eTransitionEnd.bind(this));
890
+ }
891
+ /**
892
+ * Adds classes that inform the styles based on settings
893
+ */
894
+ addClasses() {
895
+ 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
+ }
906
+ }
907
+ if (this.settings.tray) {
908
+ this.el.tray?.classList.add('mint-tray');
909
+ }
910
+ }
911
+ /**
912
+ * Sets the state of the tray
913
+ * @param open - `true` to open the tray or `false` to close it
914
+ */
915
+ setTray(open = false) {
916
+ let ariaExpanded = open ? 'true' : 'false', ariaLabel = open ? `close ${this.settings.title}` : `open ${this.settings.title}`;
917
+ this.el.toggleButton?.setAttribute('aria-expanded', ariaExpanded);
918
+ setTimeout(() => {
919
+ this.el.toggleButton?.setAttribute('aria-label', ariaLabel);
920
+ }, _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.delay.fast);
921
+ if (open) {
922
+ // Close other trays
923
+ if (this.settings.fixed !== true) {
924
+ window.scroll({
925
+ top: 0,
926
+ left: 0,
927
+ behavior: 'smooth'
928
+ });
929
+ }
930
+ setTimeout(() => {
931
+ if (this.el.html) {
932
+ let isMobile = _util__WEBPACK_IMPORTED_MODULE_2__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.break.sm, overflow = 'auto';
933
+ if (this.settings.tray) {
934
+ if (isMobile) {
935
+ overflow = 'hidden';
936
+ }
937
+ }
938
+ else {
939
+ overflow = 'hidden';
940
+ }
941
+ this.el.html.style.overflow = overflow;
942
+ }
943
+ }, 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);
944
+ if (this.el.wrapper) {
945
+ this.el.wrapper.style.display = 'flex';
946
+ }
947
+ requestAnimationFrame(() => {
948
+ this.el.wrapper?.classList.add('mint-open');
949
+ });
950
+ }
951
+ else {
952
+ if (this.el.html) {
953
+ this.el.html.style.overflow = 'auto';
954
+ }
955
+ requestAnimationFrame(() => {
956
+ this.el.wrapper?.classList.remove('mint-open');
957
+ });
958
+ }
959
+ }
960
+ /**
961
+ * Toggles the state of the tray
962
+ */
963
+ toggleTray() {
964
+ this.setTray(this.el.toggleButton?.getAttribute('aria-expanded')?.toLowerCase() === 'false');
965
+ }
966
+ /**
967
+ * Closes the tray when the window resizes
968
+ */
969
+ eHandleResize() {
970
+ const isMobile = _util__WEBPACK_IMPORTED_MODULE_2__.MintWindow.width() <= _util__WEBPACK_IMPORTED_MODULE_2__.MintSettings.break.sm;
971
+ let closeMenu = true;
972
+ if (this.el.tray?.classList.contains('mint-tray')) {
973
+ closeMenu = false;
974
+ }
975
+ else if (!this.el.tray?.classList.contains('mint-expand')) {
976
+ closeMenu = false;
977
+ }
978
+ if (!isMobile && closeMenu) {
979
+ this.setTray(false);
980
+ }
981
+ const isOpen = this.el.toggleButton?.getAttribute('aria-expanded')?.toLowerCase() === 'true';
982
+ let overflow = 'auto';
983
+ if (isOpen) {
984
+ if (this.settings.tray) {
985
+ if (isMobile) {
986
+ overflow = 'hidden';
987
+ }
988
+ }
989
+ else {
990
+ overflow = 'hidden';
991
+ }
992
+ }
993
+ if (this.el.html) {
994
+ this.el.html.style.overflow = overflow;
995
+ }
996
+ }
997
+ /**
998
+ * Sends the focus to the toggle button after tabbing past the last focusable element
999
+ * @param e - Keyboard event
1000
+ */
1001
+ 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;
1003
+ if (isTab && wrapTab) {
1004
+ this.el.toggleButton?.focus();
1005
+ if (document.activeElement === this.el.toggleButton) {
1006
+ e.preventDefault();
1007
+ }
1008
+ }
1009
+ }
1010
+ /**
1011
+ * Toggles the tray
1012
+ */
1013
+ eToggle() {
1014
+ this.toggleTray();
1015
+ }
1016
+ /**
1017
+ * Closes the tray
1018
+ */
1019
+ eClose() {
1020
+ this.setTray(false);
1021
+ }
1022
+ /**
1023
+ * Runs after the tray transitions
1024
+ */
1025
+ eTransitionEnd() {
1026
+ if (this.el.wrapper?.classList.contains('mint-open') === false) {
1027
+ this.el.wrapper.style.display = 'none';
1028
+ }
1029
+ }
1030
+ }
1031
+
1032
+
482
1033
  /***/ }),
483
1034
 
484
1035
  /***/ "./src/ts/imports/enums/index.ts":
@@ -533,30 +1084,34 @@ var EMintSide;
533
1084
 
534
1085
  __webpack_require__.r(__webpack_exports__);
535
1086
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
536
- /* harmony export */ EMintSide: () => (/* reexport safe */ _enums__WEBPACK_IMPORTED_MODULE_1__.EMintSide),
537
- /* harmony export */ MintAsync: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintAsync),
538
- /* harmony export */ MintDisplay: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintDisplay),
539
- /* harmony export */ MintEvent: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintEvent),
540
- /* harmony export */ MintGrid: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_0__.MintGrid),
541
- /* harmony export */ MintHeader: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_0__.MintHeader),
542
- /* harmony export */ MintIcon: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintIcon),
543
- /* harmony export */ MintItem: () => (/* reexport safe */ _models__WEBPACK_IMPORTED_MODULE_2__.MintItem),
544
- /* harmony export */ MintList: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintList),
545
- /* harmony export */ MintMath: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintMath),
546
- /* harmony export */ MintObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintObject),
547
- /* harmony export */ MintScroll: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintScroll),
548
- /* harmony export */ MintSelectors: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintSelectors),
549
- /* harmony export */ MintSettings: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintSettings),
550
- /* harmony export */ MintText: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintText),
551
- /* harmony export */ MintWindow: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_3__.MintWindow),
552
- /* harmony export */ mintColor: () => (/* reexport safe */ _models__WEBPACK_IMPORTED_MODULE_2__.mintColor)
1087
+ /* harmony export */ EMintSide: () => (/* reexport safe */ _enums__WEBPACK_IMPORTED_MODULE_2__.EMintSide),
1088
+ /* harmony export */ MintAsync: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintAsync),
1089
+ /* harmony export */ MintAttachesEvents: () => (/* reexport safe */ _abstract__WEBPACK_IMPORTED_MODULE_0__.MintAttachesEvents),
1090
+ /* harmony export */ MintDisplay: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintDisplay),
1091
+ /* harmony export */ MintEvent: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintEvent),
1092
+ /* harmony export */ MintGrid: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintGrid),
1093
+ /* harmony export */ MintHeader: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintHeader),
1094
+ /* harmony export */ MintIcon: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintIcon),
1095
+ /* harmony export */ MintItem: () => (/* reexport safe */ _models__WEBPACK_IMPORTED_MODULE_3__.MintItem),
1096
+ /* harmony export */ MintList: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintList),
1097
+ /* harmony export */ MintMath: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintMath),
1098
+ /* harmony export */ MintMenu: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintMenu),
1099
+ /* harmony export */ MintObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintObject),
1100
+ /* harmony export */ MintScroll: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintScroll),
1101
+ /* harmony export */ MintSelectors: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintSelectors),
1102
+ /* harmony export */ MintSettings: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintSettings),
1103
+ /* harmony export */ MintText: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintText),
1104
+ /* harmony export */ MintTray: () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_1__.MintTray),
1105
+ /* harmony export */ MintWindow: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_4__.MintWindow),
1106
+ /* harmony export */ mintColor: () => (/* reexport safe */ _models__WEBPACK_IMPORTED_MODULE_3__.mintColor)
553
1107
  /* harmony export */ });
554
- /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components */ "./src/ts/imports/components/index.ts");
555
- /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enums */ "./src/ts/imports/enums/index.ts");
556
- /* harmony import */ var _models__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./models */ "./src/ts/imports/models/index.ts");
557
- /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/ts/imports/util/index.ts");
1108
+ /* harmony import */ var _abstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./abstract */ "./src/ts/imports/abstract/index.ts");
1109
+ /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components */ "./src/ts/imports/components/index.ts");
1110
+ /* harmony import */ var _enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./enums */ "./src/ts/imports/enums/index.ts");
1111
+ /* harmony import */ var _models__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./models */ "./src/ts/imports/models/index.ts");
1112
+ /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/ts/imports/util/index.ts");
558
1113
  /**
559
- * Forward all exports from the imports directory
1114
+ * Forward all imports exports
560
1115
  */
561
1116
 
562
1117
 
@@ -564,6 +1119,7 @@ __webpack_require__.r(__webpack_exports__);
564
1119
 
565
1120
 
566
1121
 
1122
+
567
1123
  /***/ }),
568
1124
 
569
1125
  /***/ "./src/ts/imports/models/color.ts":
@@ -670,6 +1226,18 @@ class mintColor {
670
1226
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mintColor);
671
1227
 
672
1228
 
1229
+ /***/ }),
1230
+
1231
+ /***/ "./src/ts/imports/models/event.ts":
1232
+ /*!****************************************!*\
1233
+ !*** ./src/ts/imports/models/event.ts ***!
1234
+ \****************************************/
1235
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1236
+
1237
+ __webpack_require__.r(__webpack_exports__);
1238
+
1239
+
1240
+
673
1241
  /***/ }),
674
1242
 
675
1243
  /***/ "./src/ts/imports/models/file.ts":
@@ -692,15 +1260,16 @@ __webpack_require__.r(__webpack_exports__);
692
1260
 
693
1261
  __webpack_require__.r(__webpack_exports__);
694
1262
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
695
- /* harmony export */ MintItem: () => (/* reexport safe */ _item__WEBPACK_IMPORTED_MODULE_2__.MintItem),
1263
+ /* harmony export */ MintItem: () => (/* reexport safe */ _item__WEBPACK_IMPORTED_MODULE_3__.MintItem),
696
1264
  /* harmony export */ mintColor: () => (/* reexport safe */ _color__WEBPACK_IMPORTED_MODULE_0__.mintColor)
697
1265
  /* harmony export */ });
698
1266
  /* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color */ "./src/ts/imports/models/color.ts");
699
- /* harmony import */ var _file__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file */ "./src/ts/imports/models/file.ts");
700
- /* harmony import */ var _item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./item */ "./src/ts/imports/models/item.ts");
701
- /* harmony import */ var _minify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minify */ "./src/ts/imports/models/minify.ts");
702
- /* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./page */ "./src/ts/imports/models/page.ts");
703
- /* harmony import */ var _recaptcha__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./recaptcha */ "./src/ts/imports/models/recaptcha.ts");
1267
+ /* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./event */ "./src/ts/imports/models/event.ts");
1268
+ /* harmony import */ var _file__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./file */ "./src/ts/imports/models/file.ts");
1269
+ /* harmony import */ var _item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./item */ "./src/ts/imports/models/item.ts");
1270
+ /* harmony import */ var _minify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./minify */ "./src/ts/imports/models/minify.ts");
1271
+ /* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./page */ "./src/ts/imports/models/page.ts");
1272
+ /* harmony import */ var _recaptcha__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./recaptcha */ "./src/ts/imports/models/recaptcha.ts");
704
1273
  /**
705
1274
  * Forward all exports from the models directory
706
1275
  */
@@ -712,6 +1281,7 @@ __webpack_require__.r(__webpack_exports__);
712
1281
 
713
1282
 
714
1283
 
1284
+
715
1285
  /***/ }),
716
1286
 
717
1287
  /***/ "./src/ts/imports/models/item.ts":
@@ -2112,6 +2682,7 @@ __webpack_require__.r(__webpack_exports__);
2112
2682
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2113
2683
  /* harmony export */ EMintSide: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.EMintSide),
2114
2684
  /* harmony export */ MintAsync: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintAsync),
2685
+ /* harmony export */ MintAttachesEvents: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintAttachesEvents),
2115
2686
  /* harmony export */ MintDisplay: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintDisplay),
2116
2687
  /* harmony export */ MintEvent: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintEvent),
2117
2688
  /* harmony export */ MintGrid: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintGrid),
@@ -2120,11 +2691,13 @@ __webpack_require__.r(__webpack_exports__);
2120
2691
  /* harmony export */ MintItem: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintItem),
2121
2692
  /* harmony export */ MintList: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintList),
2122
2693
  /* harmony export */ MintMath: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintMath),
2694
+ /* harmony export */ MintMenu: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintMenu),
2123
2695
  /* harmony export */ MintObject: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintObject),
2124
2696
  /* harmony export */ MintScroll: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintScroll),
2125
2697
  /* harmony export */ MintSelectors: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintSelectors),
2126
2698
  /* harmony export */ MintSettings: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintSettings),
2127
2699
  /* harmony export */ MintText: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintText),
2700
+ /* harmony export */ MintTray: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintTray),
2128
2701
  /* harmony export */ MintWindow: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.MintWindow),
2129
2702
  /* harmony export */ mintColor: () => (/* reexport safe */ _imports__WEBPACK_IMPORTED_MODULE_0__.mintColor)
2130
2703
  /* harmony export */ });
@@ -2143,6 +2716,7 @@ __webpack_require__.r(__webpack_exports__);
2143
2716
 
2144
2717
  var __webpack_exports__EMintSide = __webpack_exports__.EMintSide;
2145
2718
  var __webpack_exports__MintAsync = __webpack_exports__.MintAsync;
2719
+ var __webpack_exports__MintAttachesEvents = __webpack_exports__.MintAttachesEvents;
2146
2720
  var __webpack_exports__MintDisplay = __webpack_exports__.MintDisplay;
2147
2721
  var __webpack_exports__MintEvent = __webpack_exports__.MintEvent;
2148
2722
  var __webpack_exports__MintGrid = __webpack_exports__.MintGrid;
@@ -2151,13 +2725,15 @@ var __webpack_exports__MintIcon = __webpack_exports__.MintIcon;
2151
2725
  var __webpack_exports__MintItem = __webpack_exports__.MintItem;
2152
2726
  var __webpack_exports__MintList = __webpack_exports__.MintList;
2153
2727
  var __webpack_exports__MintMath = __webpack_exports__.MintMath;
2728
+ var __webpack_exports__MintMenu = __webpack_exports__.MintMenu;
2154
2729
  var __webpack_exports__MintObject = __webpack_exports__.MintObject;
2155
2730
  var __webpack_exports__MintScroll = __webpack_exports__.MintScroll;
2156
2731
  var __webpack_exports__MintSelectors = __webpack_exports__.MintSelectors;
2157
2732
  var __webpack_exports__MintSettings = __webpack_exports__.MintSettings;
2158
2733
  var __webpack_exports__MintText = __webpack_exports__.MintText;
2734
+ var __webpack_exports__MintTray = __webpack_exports__.MintTray;
2159
2735
  var __webpack_exports__MintWindow = __webpack_exports__.MintWindow;
2160
2736
  var __webpack_exports__mintColor = __webpack_exports__.mintColor;
2161
- export { __webpack_exports__EMintSide as EMintSide, __webpack_exports__MintAsync as MintAsync, __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__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__MintWindow as MintWindow, __webpack_exports__mintColor as 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 };
2162
2738
 
2163
2739
  //# sourceMappingURL=index.js.map