@soyfri/template 1.0.0 → 1.0.3

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.
Files changed (477) hide show
  1. package/dist/assets/fonticon/fonticon.css +282 -0
  2. package/dist/assets/fonticon/fonticon.eot +0 -0
  3. package/dist/assets/fonticon/fonticon.scss +362 -0
  4. package/dist/assets/fonticon/fonticon.svg +273 -0
  5. package/dist/assets/fonticon/fonticon.ttf +0 -0
  6. package/dist/assets/fonticon/fonticon.woff +0 -0
  7. package/dist/assets/fonticon/fonticon.woff2 +0 -0
  8. package/dist/assets/keenicons/duotone/Read Me.txt +7 -0
  9. package/dist/assets/keenicons/duotone/demo-files/demo.css +152 -0
  10. package/dist/assets/keenicons/duotone/demo-files/demo.js +30 -0
  11. package/dist/assets/keenicons/duotone/demo.html +8060 -0
  12. package/dist/assets/keenicons/duotone/fonts/keenicons-duotone.eot +0 -0
  13. package/dist/assets/keenicons/duotone/fonts/keenicons-duotone.svg +1720 -0
  14. package/dist/assets/keenicons/duotone/fonts/keenicons-duotone.ttf +0 -0
  15. package/dist/assets/keenicons/duotone/fonts/keenicons-duotone.woff +0 -0
  16. package/dist/assets/keenicons/duotone/selection.json +1 -0
  17. package/dist/assets/keenicons/duotone/style.css +8678 -0
  18. package/dist/assets/keenicons/outline/Read Me.txt +7 -0
  19. package/dist/assets/keenicons/outline/demo-files/demo.css +152 -0
  20. package/dist/assets/keenicons/outline/demo-files/demo.js +30 -0
  21. package/dist/assets/keenicons/outline/demo.html +8060 -0
  22. package/dist/assets/keenicons/outline/fonts/keenicons-outline.eot +0 -0
  23. package/dist/assets/keenicons/outline/fonts/keenicons-outline.svg +583 -0
  24. package/dist/assets/keenicons/outline/fonts/keenicons-outline.ttf +0 -0
  25. package/dist/assets/keenicons/outline/fonts/keenicons-outline.woff +0 -0
  26. package/dist/assets/keenicons/outline/selection.json +1 -0
  27. package/dist/assets/keenicons/outline/style.css +1746 -0
  28. package/dist/assets/keenicons/solid/Read Me.txt +7 -0
  29. package/dist/assets/keenicons/solid/demo-files/demo.css +152 -0
  30. package/dist/assets/keenicons/solid/demo-files/demo.js +30 -0
  31. package/dist/assets/keenicons/solid/demo.html +8060 -0
  32. package/dist/assets/keenicons/solid/fonts/keenicons-solid.eot +0 -0
  33. package/dist/assets/keenicons/solid/fonts/keenicons-solid.svg +583 -0
  34. package/dist/assets/keenicons/solid/fonts/keenicons-solid.ttf +0 -0
  35. package/dist/assets/keenicons/solid/fonts/keenicons-solid.woff +0 -0
  36. package/dist/assets/keenicons/solid/selection.json +1 -0
  37. package/dist/assets/keenicons/solid/style.css +1746 -0
  38. package/dist/assets/sass/_init.scss +32 -0
  39. package/dist/assets/sass/components/_btn-secondary.scss +36 -0
  40. package/dist/assets/sass/components/_landing.scss +136 -0
  41. package/dist/assets/sass/components/_variables.custom.scss +6 -0
  42. package/dist/assets/sass/components/_variables.override.scss +15 -0
  43. package/dist/assets/sass/components/components.scss +8 -0
  44. package/dist/assets/sass/components/stepper/_multistep.scss +42 -0
  45. package/dist/assets/sass/core/base/_functions.scss +10 -0
  46. package/dist/assets/sass/core/base/_mixins.scss +11 -0
  47. package/dist/assets/sass/core/base/functions/_get.scss +82 -0
  48. package/dist/assets/sass/core/base/functions/_math.scss +15 -0
  49. package/dist/assets/sass/core/base/functions/_set.scss +43 -0
  50. package/dist/assets/sass/core/base/functions/_theme-colors.scss +15 -0
  51. package/dist/assets/sass/core/base/functions/_valueif.scss +13 -0
  52. package/dist/assets/sass/core/base/mixins/_breakpoints.scss +25 -0
  53. package/dist/assets/sass/core/base/mixins/_browsers.scss +23 -0
  54. package/dist/assets/sass/core/base/mixins/_fixes.scss +15 -0
  55. package/dist/assets/sass/core/base/mixins/_placeholder.scss +16 -0
  56. package/dist/assets/sass/core/base/mixins/_property.scss +9 -0
  57. package/dist/assets/sass/core/base/mixins/_reset.scss +23 -0
  58. package/dist/assets/sass/core/components/_accordion.scss +107 -0
  59. package/dist/assets/sass/core/components/_alert.scss +15 -0
  60. package/dist/assets/sass/core/components/_anchor.scss +37 -0
  61. package/dist/assets/sass/core/components/_animation.scss +81 -0
  62. package/dist/assets/sass/core/components/_badge.scss +85 -0
  63. package/dist/assets/sass/core/components/_blockui.scss +53 -0
  64. package/dist/assets/sass/core/components/_bootstrap-icon.scss +22 -0
  65. package/dist/assets/sass/core/components/_breadcrumb.scss +69 -0
  66. package/dist/assets/sass/core/components/_bullet.scss +33 -0
  67. package/dist/assets/sass/core/components/_buttons.scss +7 -0
  68. package/dist/assets/sass/core/components/_card.scss +327 -0
  69. package/dist/assets/sass/core/components/_carousel.scss +130 -0
  70. package/dist/assets/sass/core/components/_code.scss +24 -0
  71. package/dist/assets/sass/core/components/_cookiealert.scss +8 -0
  72. package/dist/assets/sass/core/components/_drawer.scss +78 -0
  73. package/dist/assets/sass/core/components/_dropdown.scss +35 -0
  74. package/dist/assets/sass/core/components/_engage.scss +118 -0
  75. package/dist/assets/sass/core/components/_explore.scss +104 -0
  76. package/dist/assets/sass/core/components/_fixed.scss +18 -0
  77. package/dist/assets/sass/core/components/_forms.scss +13 -0
  78. package/dist/assets/sass/core/components/_helpers.scss +12 -0
  79. package/dist/assets/sass/core/components/_hover.scss +53 -0
  80. package/dist/assets/sass/core/components/_image-input.scss +111 -0
  81. package/dist/assets/sass/core/components/_image.scss +17 -0
  82. package/dist/assets/sass/core/components/_indicator.scss +17 -0
  83. package/dist/assets/sass/core/components/_menu.scss +7 -0
  84. package/dist/assets/sass/core/components/_mixins.scss +13 -0
  85. package/dist/assets/sass/core/components/_modal.scss +7 -0
  86. package/dist/assets/sass/core/components/_nav-line-tabs.scss +68 -0
  87. package/dist/assets/sass/core/components/_nav-pills-custom.scss +91 -0
  88. package/dist/assets/sass/core/components/_nav.scss +99 -0
  89. package/dist/assets/sass/core/components/_offcanvas.scss +6 -0
  90. package/dist/assets/sass/core/components/_overlay.scss +35 -0
  91. package/dist/assets/sass/core/components/_page-loader.scss +28 -0
  92. package/dist/assets/sass/core/components/_pagination.scss +176 -0
  93. package/dist/assets/sass/core/components/_popover.scss +58 -0
  94. package/dist/assets/sass/core/components/_print.scss +34 -0
  95. package/dist/assets/sass/core/components/_progress.scss +27 -0
  96. package/dist/assets/sass/core/components/_pulse.scss +39 -0
  97. package/dist/assets/sass/core/components/_rating.scss +62 -0
  98. package/dist/assets/sass/core/components/_reboot.scss +7 -0
  99. package/dist/assets/sass/core/components/_ribbon.scss +195 -0
  100. package/dist/assets/sass/core/components/_root.scss +332 -0
  101. package/dist/assets/sass/core/components/_rotate.scss +47 -0
  102. package/dist/assets/sass/core/components/_scroll.scss +119 -0
  103. package/dist/assets/sass/core/components/_scrolltop.scss +69 -0
  104. package/dist/assets/sass/core/components/_separator.scss +66 -0
  105. package/dist/assets/sass/core/components/_shape.scss +13 -0
  106. package/dist/assets/sass/core/components/_stepper.scss +8 -0
  107. package/dist/assets/sass/core/components/_svg-icon.scss +30 -0
  108. package/dist/assets/sass/core/components/_symbol.scss +133 -0
  109. package/dist/assets/sass/core/components/_tables.scss +269 -0
  110. package/dist/assets/sass/core/components/_testimonials-slider.scss +65 -0
  111. package/dist/assets/sass/core/components/_theme-mode.scss +38 -0
  112. package/dist/assets/sass/core/components/_timeline-label.scss +59 -0
  113. package/dist/assets/sass/core/components/_timeline.scss +96 -0
  114. package/dist/assets/sass/core/components/_title-reports.scss +81 -0
  115. package/dist/assets/sass/core/components/_toasts.scss +17 -0
  116. package/dist/assets/sass/core/components/_toggle.scss +19 -0
  117. package/dist/assets/sass/core/components/_tooltip.scss +32 -0
  118. package/dist/assets/sass/core/components/_tree.scss +92 -0
  119. package/dist/assets/sass/core/components/_type.scss +9 -0
  120. package/dist/assets/sass/core/components/_utilities.scss +134 -0
  121. package/dist/assets/sass/core/components/_variables-dark.scss +333 -0
  122. package/dist/assets/sass/core/components/_variables.scss +1313 -0
  123. package/dist/assets/sass/core/components/buttons/_base.scss +129 -0
  124. package/dist/assets/sass/core/components/buttons/_theme.scss +307 -0
  125. package/dist/assets/sass/core/components/buttons_new/_base.scss +74 -0
  126. package/dist/assets/sass/core/components/buttons_new/_theme.scss +21 -0
  127. package/dist/assets/sass/core/components/components.scss +72 -0
  128. package/dist/assets/sass/core/components/forms/_floating-labels.scss +20 -0
  129. package/dist/assets/sass/core/components/forms/_form-check.scss +193 -0
  130. package/dist/assets/sass/core/components/forms/_form-control.scss +70 -0
  131. package/dist/assets/sass/core/components/forms/_form-select.scss +68 -0
  132. package/dist/assets/sass/core/components/forms/_input-group.scss +36 -0
  133. package/dist/assets/sass/core/components/forms/_labels.scss +8 -0
  134. package/dist/assets/sass/core/components/forms/_required.scss +14 -0
  135. package/dist/assets/sass/core/components/helpers/_background.scss +269 -0
  136. package/dist/assets/sass/core/components/helpers/_borders.scss +123 -0
  137. package/dist/assets/sass/core/components/helpers/_flex.scss +57 -0
  138. package/dist/assets/sass/core/components/helpers/_opacity.scss +18 -0
  139. package/dist/assets/sass/core/components/helpers/_shadow.scss +19 -0
  140. package/dist/assets/sass/core/components/helpers/_text.scss +146 -0
  141. package/dist/assets/sass/core/components/helpers/_transform.scss +8 -0
  142. package/dist/assets/sass/core/components/menu/_base.scss +316 -0
  143. package/dist/assets/sass/core/components/menu/_theme.scss +519 -0
  144. package/dist/assets/sass/core/components/mixins/_buttons.scss +84 -0
  145. package/dist/assets/sass/core/components/mixins/_ki.scss +18 -0
  146. package/dist/assets/sass/core/components/mixins/_menu.scss +301 -0
  147. package/dist/assets/sass/core/components/mixins/_scroll.scss +34 -0
  148. package/dist/assets/sass/core/components/mixins/_shape.scss +29 -0
  149. package/dist/assets/sass/core/components/mixins/_svg-bg-icon.scss +68 -0
  150. package/dist/assets/sass/core/components/mixins/_svg-icon.scss +11 -0
  151. package/dist/assets/sass/core/components/mixins/_symbol.scss +42 -0
  152. package/dist/assets/sass/core/components/stepper/_base.scss +112 -0
  153. package/dist/assets/sass/core/components/stepper/_links.scss +57 -0
  154. package/dist/assets/sass/core/components/stepper/_pills.scss +201 -0
  155. package/dist/assets/sass/core/components/wizard/wizard.scss +47 -0
  156. package/dist/assets/sass/core/components/wizard.scss +6 -0
  157. package/dist/assets/sass/core/layout/_base.scss +50 -0
  158. package/dist/assets/sass/core/layout/base/_container.scss +30 -0
  159. package/dist/assets/sass/core/layout/base/_content.scss +24 -0
  160. package/dist/assets/sass/core/layout/base/_footer.scss +99 -0
  161. package/dist/assets/sass/core/layout/base/_hero.scss +13 -0
  162. package/dist/assets/sass/core/layout/base/_layout-builder.scss +19 -0
  163. package/dist/assets/sass/core/layout/base/_layout.scss +29 -0
  164. package/dist/assets/sass/core/layout/base/_main.scss +96 -0
  165. package/dist/assets/sass/core/layout/base/_navbar.scss +19 -0
  166. package/dist/assets/sass/core/layout/base/_page-loader.scss +31 -0
  167. package/dist/assets/sass/core/layout/base/_page.scss +7 -0
  168. package/dist/assets/sass/core/layout/base/_print.scss +34 -0
  169. package/dist/assets/sass/core/layout/base/_reboot.scss +65 -0
  170. package/dist/assets/sass/core/layout/base/_root.scss +368 -0
  171. package/dist/assets/sass/core/layout/base/_toolbar.scss +171 -0
  172. package/dist/assets/sass/core/layout/base/_variables.scss +615 -0
  173. package/dist/assets/sass/core/layout/base/_wrapper.scss +100 -0
  174. package/dist/assets/sass/core/layout/base/aside/_aside.scss +275 -0
  175. package/dist/assets/sass/core/layout/base/header/_header-primary.scss +135 -0
  176. package/dist/assets/sass/core/layout/base/header/_header-secondary.scss +139 -0
  177. package/dist/assets/sass/core/layout/base/header/_header-tertiary.scss +138 -0
  178. package/dist/assets/sass/core/layout/base/header/_header.scss +239 -0
  179. package/dist/assets/sass/core/layout/base/mixins/_layout-minimize.scss +41 -0
  180. package/dist/assets/sass/core/layout/base/mixins/_layout-transition.scss +7 -0
  181. package/dist/assets/sass/core/layout/base/sidebar/_sidebar-panel.scss +281 -0
  182. package/dist/assets/sass/core/layout/base/sidebar/_sidebar-primary.scss +230 -0
  183. package/dist/assets/sass/core/layout/base/sidebar/_sidebar-secondary.scss +274 -0
  184. package/dist/assets/sass/core/layout/base/sidebar/_sidebar.scss +284 -0
  185. package/dist/assets/sass/core/vendors/plugins/_apexcharts.scss +129 -0
  186. package/dist/assets/sass/core/vendors/plugins/_bootstrap-maxlength.scss +16 -0
  187. package/dist/assets/sass/core/vendors/plugins/_ckeditor.scss +54 -0
  188. package/dist/assets/sass/core/vendors/plugins/_datatables.scss +292 -0
  189. package/dist/assets/sass/core/vendors/plugins/_daterangepicker.scss +272 -0
  190. package/dist/assets/sass/core/vendors/plugins/_draggable.scss +28 -0
  191. package/dist/assets/sass/core/vendors/plugins/_dropzone.scss +188 -0
  192. package/dist/assets/sass/core/vendors/plugins/_flatpickr.scss +407 -0
  193. package/dist/assets/sass/core/vendors/plugins/_formvalidation.scss +20 -0
  194. package/dist/assets/sass/core/vendors/plugins/_fslightbox.scss +11 -0
  195. package/dist/assets/sass/core/vendors/plugins/_fullcalendar.scss +297 -0
  196. package/dist/assets/sass/core/vendors/plugins/_gmaps.scss +18 -0
  197. package/dist/assets/sass/core/vendors/plugins/_jkanban.scss +94 -0
  198. package/dist/assets/sass/core/vendors/plugins/_jstree.scss +150 -0
  199. package/dist/assets/sass/core/vendors/plugins/_keenicons.scss +12 -0
  200. package/dist/assets/sass/core/vendors/plugins/_leaflet.scss +23 -0
  201. package/dist/assets/sass/core/vendors/plugins/_mixins.scss +5 -0
  202. package/dist/assets/sass/core/vendors/plugins/_nouislider.scss +103 -0
  203. package/dist/assets/sass/core/vendors/plugins/_plugins.angular.scss +12 -0
  204. package/dist/assets/sass/core/vendors/plugins/_plugins.react.scss +12 -0
  205. package/dist/assets/sass/core/vendors/plugins/_plugins.scss +34 -0
  206. package/dist/assets/sass/core/vendors/plugins/_plugins.vue.scss +12 -0
  207. package/dist/assets/sass/core/vendors/plugins/_prismjs.scss +84 -0
  208. package/dist/assets/sass/core/vendors/plugins/_quill.scss +196 -0
  209. package/dist/assets/sass/core/vendors/plugins/_recaptcha.scss +32 -0
  210. package/dist/assets/sass/core/vendors/plugins/_root.scss +36 -0
  211. package/dist/assets/sass/core/vendors/plugins/_select2.scss +418 -0
  212. package/dist/assets/sass/core/vendors/plugins/_sweetalert2.scss +112 -0
  213. package/dist/assets/sass/core/vendors/plugins/_tagify.scss +222 -0
  214. package/dist/assets/sass/core/vendors/plugins/_tempus-dominus.scss +163 -0
  215. package/dist/assets/sass/core/vendors/plugins/_tiny-slider.scss +141 -0
  216. package/dist/assets/sass/core/vendors/plugins/_tinymce.scss +13 -0
  217. package/dist/assets/sass/core/vendors/plugins/_toastr.scss +87 -0
  218. package/dist/assets/sass/core/vendors/plugins/_variables-dark.scss +18 -0
  219. package/dist/assets/sass/core/vendors/plugins/_variables.scss +27 -0
  220. package/dist/assets/sass/core/vendors/plugins/_vis-timeline.scss +131 -0
  221. package/dist/assets/sass/core/vendors/plugins/mixins/_nouislider.scss +13 -0
  222. package/dist/assets/sass/layout/_aside.scss +22 -0
  223. package/dist/assets/sass/layout/_content.scss +22 -0
  224. package/dist/assets/sass/layout/_layout.scss +17 -0
  225. package/dist/assets/sass/layout/_main.scss +21 -0
  226. package/dist/assets/sass/layout/_page-title.scss +14 -0
  227. package/dist/assets/sass/layout/_root.scss +49 -0
  228. package/dist/assets/sass/layout/_toolbar.scss +42 -0
  229. package/dist/assets/sass/layout/_variables.custom.scss +132 -0
  230. package/dist/assets/sass/layout/header/_header-dark.scss +77 -0
  231. package/dist/assets/sass/layout/header/_header-sidebar-light.scss +56 -0
  232. package/dist/assets/sass/layout/header/_header.scss +170 -0
  233. package/dist/assets/sass/layout/sidebar/_sidebar-dark.scss +105 -0
  234. package/dist/assets/sass/layout/sidebar/_sidebar-light.scss +105 -0
  235. package/dist/assets/sass/layout/sidebar/_sidebar-minimize.scss +64 -0
  236. package/dist/assets/sass/layout/sidebar/_sidebar.scss +53 -0
  237. package/dist/assets/sass/style.react.scss +28 -0
  238. package/dist/assets/sass/style.scss +14 -0
  239. package/dist/assets/sass/vendors/react-select.scss +199 -0
  240. package/dist/assets/ts/_utils/DomHelpers.js +68 -100
  241. package/dist/assets/ts/_utils/DomHelpers.ts +478 -0
  242. package/dist/assets/ts/_utils/ElementAnimateUtil.js +38 -46
  243. package/dist/assets/ts/_utils/ElementAnimateUtil.ts +111 -0
  244. package/dist/assets/ts/_utils/EventHandlerUtil.js +44 -52
  245. package/dist/assets/ts/_utils/EventHandlerUtil.ts +144 -0
  246. package/dist/assets/ts/_utils/_DOMEventHandlerUtil.js +16 -23
  247. package/dist/assets/ts/_utils/_DOMEventHandlerUtil.ts +60 -0
  248. package/dist/assets/ts/_utils/_DataUtil.js +26 -33
  249. package/dist/assets/ts/_utils/_DataUtil.ts +72 -0
  250. package/dist/assets/ts/_utils/_ElementStyleUtil.js +8 -15
  251. package/dist/assets/ts/_utils/_ElementStyleUtil.ts +17 -0
  252. package/dist/assets/ts/_utils/_TypesHelpers.js +8 -14
  253. package/dist/assets/ts/_utils/_TypesHelpers.ts +54 -0
  254. package/dist/assets/ts/_utils/index.js +9 -25
  255. package/dist/assets/ts/_utils/index.ts +12 -0
  256. package/dist/assets/ts/_utils/models/OffsetModel.js +1 -2
  257. package/dist/assets/ts/_utils/models/OffsetModel.ts +4 -0
  258. package/dist/assets/ts/_utils/models/ViewPortModel.js +1 -2
  259. package/dist/assets/ts/_utils/models/ViewPortModel.ts +4 -0
  260. package/dist/assets/ts/components/MenuComponent.js +687 -691
  261. package/dist/assets/ts/components/MenuComponent.ts +1090 -0
  262. package/dist/assets/ts/components/SearchComponent.js +248 -249
  263. package/dist/assets/ts/components/SearchComponent.ts +478 -0
  264. package/dist/assets/ts/components/_CookieComponent.js +17 -31
  265. package/dist/assets/ts/components/_CookieComponent.ts +60 -0
  266. package/dist/assets/ts/components/_DrawerComponent.js +250 -259
  267. package/dist/assets/ts/components/_DrawerComponent.ts +388 -0
  268. package/dist/assets/ts/components/_FeedbackComponent.js +92 -96
  269. package/dist/assets/ts/components/_FeedbackComponent.ts +152 -0
  270. package/dist/assets/ts/components/_ImageInputComponent.js +110 -117
  271. package/dist/assets/ts/components/_ImageInputComponent.ts +229 -0
  272. package/dist/assets/ts/components/_PasswordMeterComponent.js +82 -92
  273. package/dist/assets/ts/components/_PasswordMeterComponent.ts +271 -0
  274. package/dist/assets/ts/components/_ScrollComponent.js +215 -223
  275. package/dist/assets/ts/components/_ScrollComponent.ts +312 -0
  276. package/dist/assets/ts/components/_ScrollTopComponent.js +79 -83
  277. package/dist/assets/ts/components/_ScrollTopComponent.ts +148 -0
  278. package/dist/assets/ts/components/_StepperComponent.js +210 -213
  279. package/dist/assets/ts/components/_StepperComponent.ts +332 -0
  280. package/dist/assets/ts/components/_StickyComponent.js +193 -196
  281. package/dist/assets/ts/components/_StickyComponent.ts +297 -0
  282. package/dist/assets/ts/components/_SwapperComponent.js +79 -97
  283. package/dist/assets/ts/components/_SwapperComponent.ts +210 -0
  284. package/dist/assets/ts/components/_ToggleComponent.js +125 -130
  285. package/dist/assets/ts/components/_ToggleComponent.ts +200 -0
  286. package/dist/assets/ts/components/index.js +13 -29
  287. package/dist/assets/ts/components/index.ts +14 -0
  288. package/dist/assets/ts/index.js +2 -28
  289. package/dist/assets/ts/index.ts +43 -0
  290. package/dist/assets/ts/layout/ThemeMode.js +164 -176
  291. package/dist/assets/ts/layout/ThemeMode.ts +211 -0
  292. package/dist/assets/ts/layout/index.js +1 -17
  293. package/dist/assets/ts/layout/index.ts +1 -0
  294. package/dist/helpers/AssetHelpers.js +9 -17
  295. package/dist/helpers/RouterHelpers.js +3 -8
  296. package/dist/helpers/components/KTCard.js +7 -13
  297. package/dist/helpers/components/KTCardBody.js +7 -13
  298. package/dist/helpers/components/KTIcon.js +9 -26
  299. package/dist/helpers/components/KTSVG.js +3 -11
  300. package/dist/helpers/crud-helper/consts.js +2 -5
  301. package/dist/helpers/crud-helper/helpers.js +22 -45
  302. package/dist/helpers/crud-helper/models.js +10 -13
  303. package/dist/helpers/dataExamples.js +6 -13
  304. package/dist/helpers/icons-config/icons.js +2 -4
  305. package/dist/helpers/index.js +11 -27
  306. package/dist/helpers/react18MigrationHelpers.js +5 -8
  307. package/dist/i18n/Metronici18n.js +13 -42
  308. package/dist/i18n/i18nProvider.js +16 -23
  309. package/dist/i18n/index.d.ts +2 -0
  310. package/dist/i18n/index.js +11 -0
  311. package/dist/index.d.ts +3 -0
  312. package/dist/index.js +10 -23
  313. package/dist/layout/MasterInit.js +23 -30
  314. package/dist/layout/MasterLayout.js +32 -38
  315. package/dist/layout/components/content/Content.js +15 -23
  316. package/dist/layout/components/content/index.js +1 -17
  317. package/dist/layout/components/footer/Footer.js +21 -28
  318. package/dist/layout/components/footer/FooterWrapper.js +10 -17
  319. package/dist/layout/components/footer/index.js +1 -17
  320. package/dist/layout/components/header/Header.js +26 -53
  321. package/dist/layout/components/header/HeaderWrapper.js +30 -38
  322. package/dist/layout/components/header/Navbar.js +35 -42
  323. package/dist/layout/components/header/header-menus/MegaMenu.js +67 -73
  324. package/dist/layout/components/header/header-menus/MenuInner.js +42 -49
  325. package/dist/layout/components/header/header-menus/MenuInnerWithSub.js +21 -51
  326. package/dist/layout/components/header/header-menus/MenuItem.js +19 -26
  327. package/dist/layout/components/header/header-menus/index.js +1 -17
  328. package/dist/layout/components/header/index.js +1 -17
  329. package/dist/layout/components/scroll-top/ScrollTop.js +23 -30
  330. package/dist/layout/components/scroll-top/index.js +1 -17
  331. package/dist/layout/components/sidebar/Sidebar.js +54 -85
  332. package/dist/layout/components/sidebar/SidebarFooter.js +9 -15
  333. package/dist/layout/components/sidebar/SidebarLogo.js +27 -34
  334. package/dist/layout/components/sidebar/index.js +1 -17
  335. package/dist/layout/components/sidebar/sidebar-menu/SidebarMenu.js +8 -14
  336. package/dist/layout/components/sidebar/sidebar-menu/SidebarMenuItem.js +20 -28
  337. package/dist/layout/components/sidebar/sidebar-menu/SidebarMenuItemWithSub.js +21 -29
  338. package/dist/layout/components/sidebar/sidebar-menu/SidebarMenuMain.js +51 -57
  339. package/dist/layout/components/toolbar/Toolbar.js +39 -47
  340. package/dist/layout/components/toolbar/ToolbarWrapper.js +19 -26
  341. package/dist/layout/components/toolbar/index.js +1 -17
  342. package/dist/layout/components/toolbar/page-title/PageTitle.js +21 -28
  343. package/dist/layout/components/toolbar/page-title/PageTitleWrapper.js +8 -15
  344. package/dist/layout/components/toolbar/page-title/index.js +1 -17
  345. package/dist/layout/components/toolbar/toolbars/ToolbarAccounting.js +39 -65
  346. package/dist/layout/components/toolbar/toolbars/ToolbarClassic.js +22 -29
  347. package/dist/layout/components/toolbar/toolbars/ToolbarExtended.js +44 -70
  348. package/dist/layout/components/toolbar/toolbars/ToolbarReports.js +30 -56
  349. package/dist/layout/components/toolbar/toolbars/ToolbarSaas.js +30 -56
  350. package/dist/layout/components/toolbar/toolbars/index.js +5 -21
  351. package/dist/layout/core/MetronicSplashScreen.js +18 -47
  352. package/dist/layout/core/PageData.js +33 -65
  353. package/dist/layout/core/_LayoutConfig.js +1 -4
  354. package/dist/layout/core/_LayoutProvider.js +48 -89
  355. package/dist/layout/core/_LayoutSetup.js +86 -100
  356. package/dist/layout/core/_Models.js +1 -2
  357. package/dist/layout/core/index.js +6 -22
  358. package/dist/layout/index.js +12 -28
  359. package/dist/partials/chat/ChatInner.js +48 -89
  360. package/dist/partials/content/activity/Item1.js +43 -49
  361. package/dist/partials/content/activity/Item2.js +16 -22
  362. package/dist/partials/content/activity/Item3.js +33 -39
  363. package/dist/partials/content/activity/Item4.js +18 -24
  364. package/dist/partials/content/activity/Item5.js +33 -39
  365. package/dist/partials/content/activity/Item6.js +17 -23
  366. package/dist/partials/content/activity/Item7.js +24 -30
  367. package/dist/partials/content/activity/Item8.js +16 -22
  368. package/dist/partials/content/activity/index.js +8 -24
  369. package/dist/partials/content/cards/Card1.js +20 -27
  370. package/dist/partials/content/cards/Card2.js +26 -31
  371. package/dist/partials/content/cards/Card3.js +21 -28
  372. package/dist/partials/content/cards/Card4.js +11 -18
  373. package/dist/partials/content/cards/Card5.js +25 -32
  374. package/dist/partials/content/code-highlight/CodeBlock.js +20 -59
  375. package/dist/partials/content/dropdown/Dropdown1.js +33 -40
  376. package/dist/partials/content/dropdown/Dropdown2.js +28 -34
  377. package/dist/partials/content/dropdown/Dropdown3.js +32 -38
  378. package/dist/partials/content/editor/EditorToolbar.js +1 -4
  379. package/dist/partials/content/portal/Portal.js +8 -12
  380. package/dist/partials/index.js +22 -38
  381. package/dist/partials/layout/InboxCompose.js +67 -94
  382. package/dist/partials/layout/RightToolbar.js +11 -17
  383. package/dist/partials/layout/SearchModal.js +50 -57
  384. package/dist/partials/layout/activity-drawer/ActivityDrawer.js +33 -39
  385. package/dist/partials/layout/create-app/CreateApp.js +4 -10
  386. package/dist/partials/layout/drawer-messenger/DrawerMessenger.js +20 -26
  387. package/dist/partials/layout/header-menus/HeaderNotificationsMenu.js +48 -54
  388. package/dist/partials/layout/header-menus/HeaderUserMenu.js +50 -56
  389. package/dist/partials/layout/header-menus/Languages.js +27 -33
  390. package/dist/partials/layout/help-drawer/HelpDrawer.js +53 -59
  391. package/dist/partials/layout/help-drawer/ToggleHelpDrawer.js +3 -9
  392. package/dist/partials/layout/purchase/PurchaseButton.js +4 -10
  393. package/dist/partials/layout/quick-links/QuicLinks.js +32 -38
  394. package/dist/partials/layout/search/Search.js +265 -291
  395. package/dist/partials/layout/search/SearchInner.js +10 -36
  396. package/dist/partials/layout/theme-mode/ThemeModeProvider.js +34 -66
  397. package/dist/partials/layout/theme-mode/ThemeModeSwitcher.js +31 -38
  398. package/dist/partials/modals/create-app-stepper/CreateAppModal.js +96 -134
  399. package/dist/partials/modals/create-app-stepper/IAppModels.js +1 -4
  400. package/dist/partials/modals/create-app-stepper/steps/Step1.js +68 -83
  401. package/dist/partials/modals/create-app-stepper/steps/Step2.js +49 -56
  402. package/dist/partials/modals/create-app-stepper/steps/Step3.js +65 -80
  403. package/dist/partials/modals/create-app-stepper/steps/Step4.js +39 -46
  404. package/dist/partials/modals/create-app-stepper/steps/Step5.js +11 -17
  405. package/dist/partials/modals/invite-users/InviteUsers.js +45 -51
  406. package/dist/partials/modals/select-location/SelectLocationModal.js +22 -49
  407. package/dist/partials/modals/upgrade-plan/UpgradePlan.js +63 -89
  408. package/dist/partials/widgets/_new/cards/CardsWidget17.js +48 -78
  409. package/dist/partials/widgets/_new/cards/CardsWidget20.js +17 -26
  410. package/dist/partials/widgets/_new/cards/CardsWidget7.js +22 -31
  411. package/dist/partials/widgets/_new/engage/EngageWidget10.js +22 -31
  412. package/dist/partials/widgets/_new/lists/ListsWidget26.js +14 -43
  413. package/dist/partials/widgets/charts/ChartsWidget1.js +31 -61
  414. package/dist/partials/widgets/charts/ChartsWidget2.js +29 -59
  415. package/dist/partials/widgets/charts/ChartsWidget3.js +28 -58
  416. package/dist/partials/widgets/charts/ChartsWidget4.js +31 -61
  417. package/dist/partials/widgets/charts/ChartsWidget5.js +29 -59
  418. package/dist/partials/widgets/charts/ChartsWidget6.js +29 -59
  419. package/dist/partials/widgets/charts/ChartsWidget7.js +34 -64
  420. package/dist/partials/widgets/charts/ChartsWidget8.js +34 -64
  421. package/dist/partials/widgets/engage/EngageWidget1.js +15 -22
  422. package/dist/partials/widgets/engage/EngageWidget2.js +12 -19
  423. package/dist/partials/widgets/engage/EngageWidget3.js +31 -38
  424. package/dist/partials/widgets/feeds/FeedsWidget2.js +33 -40
  425. package/dist/partials/widgets/feeds/FeedsWidget3.js +52 -59
  426. package/dist/partials/widgets/feeds/FeedsWidget4.js +33 -40
  427. package/dist/partials/widgets/feeds/FeedsWidget5.js +35 -42
  428. package/dist/partials/widgets/feeds/FeedsWidget6.js +35 -42
  429. package/dist/partials/widgets/index.js +71 -87
  430. package/dist/partials/widgets/lists/ListsWidget1.js +50 -57
  431. package/dist/partials/widgets/lists/ListsWidget2.js +43 -50
  432. package/dist/partials/widgets/lists/ListsWidget3.js +61 -68
  433. package/dist/partials/widgets/lists/ListsWidget4.js +69 -76
  434. package/dist/partials/widgets/lists/ListsWidget5.js +60 -67
  435. package/dist/partials/widgets/lists/ListsWidget6.js +41 -47
  436. package/dist/partials/widgets/lists/ListsWidget7.js +47 -53
  437. package/dist/partials/widgets/lists/ListsWidget8.js +67 -73
  438. package/dist/partials/widgets/lists/ListsWidget9.js +76 -83
  439. package/dist/partials/widgets/mixed/MixedWidget1.js +62 -69
  440. package/dist/partials/widgets/mixed/MixedWidget10.js +27 -57
  441. package/dist/partials/widgets/mixed/MixedWidget11.js +26 -56
  442. package/dist/partials/widgets/mixed/MixedWidget13.js +25 -55
  443. package/dist/partials/widgets/mixed/MixedWidget14.js +22 -52
  444. package/dist/partials/widgets/mixed/MixedWidget15.js +40 -49
  445. package/dist/partials/widgets/mixed/MixedWidget2.js +43 -73
  446. package/dist/partials/widgets/mixed/MixedWidget3.js +43 -73
  447. package/dist/partials/widgets/mixed/MixedWidget4.js +35 -42
  448. package/dist/partials/widgets/mixed/MixedWidget5.js +21 -28
  449. package/dist/partials/widgets/mixed/MixedWidget6.js +50 -80
  450. package/dist/partials/widgets/mixed/MixedWidget7.js +36 -66
  451. package/dist/partials/widgets/mixed/MixedWidget8.js +59 -89
  452. package/dist/partials/widgets/mixed/MixedWidget9.js +66 -96
  453. package/dist/partials/widgets/statistics/StatisticsWidget1.js +10 -17
  454. package/dist/partials/widgets/statistics/StatisticsWidget2.js +10 -17
  455. package/dist/partials/widgets/statistics/StatisticsWidget3.js +27 -57
  456. package/dist/partials/widgets/statistics/StatisticsWidget4.js +29 -59
  457. package/dist/partials/widgets/statistics/StatisticsWidget5.js +9 -16
  458. package/dist/partials/widgets/statistics/StatisticsWidget6.js +11 -18
  459. package/dist/partials/widgets/tables/TablesWidget1.js +109 -116
  460. package/dist/partials/widgets/tables/TablesWidget10.js +165 -172
  461. package/dist/partials/widgets/tables/TablesWidget11.js +154 -161
  462. package/dist/partials/widgets/tables/TablesWidget12.js +219 -226
  463. package/dist/partials/widgets/tables/TablesWidget13.js +178 -185
  464. package/dist/partials/widgets/tables/TablesWidget2.js +105 -112
  465. package/dist/partials/widgets/tables/TablesWidget3.js +75 -82
  466. package/dist/partials/widgets/tables/TablesWidget4.js +349 -356
  467. package/dist/partials/widgets/tables/TablesWidget5.js +220 -227
  468. package/dist/partials/widgets/tables/TablesWidget6.js +241 -248
  469. package/dist/partials/widgets/tables/TablesWidget7.js +241 -248
  470. package/dist/partials/widgets/tables/TablesWidget8.js +214 -221
  471. package/dist/partials/widgets/tables/TablesWidget9.js +165 -172
  472. package/dist/partials/widgets/tiles/TilesWidget1.js +9 -16
  473. package/dist/partials/widgets/tiles/TilesWidget2.js +12 -19
  474. package/dist/partials/widgets/tiles/TilesWidget3.js +11 -18
  475. package/dist/partials/widgets/tiles/TilesWidget4.js +10 -17
  476. package/dist/partials/widgets/tiles/TilesWidget5.js +12 -18
  477. package/package.json +5 -3
@@ -0,0 +1,1090 @@
1
+ import {createPopper, VirtualElement} from '@popperjs/core'
2
+ import {
3
+ getElementChild,
4
+ getElementParents,
5
+ getAttributeValueByBreakpoint,
6
+ getUniqueIdWithPrefix,
7
+ DataUtil,
8
+ ElementStyleUtil,
9
+ EventHandlerUtil,
10
+ insertAfterElement,
11
+ slideUp,
12
+ slideDown,
13
+ DOMEventHandlerUtil,
14
+ throttle,
15
+ getHighestZindex,
16
+ } from '../_utils/index'
17
+
18
+ export interface MenuOptions {
19
+ dropdown: {
20
+ hoverTimeout: number
21
+ zindex: number
22
+ }
23
+ accordion: {
24
+ slideSpeed: number
25
+ expand: boolean
26
+ }
27
+ }
28
+
29
+ const defaultMenuOptions: MenuOptions = {
30
+ dropdown: {
31
+ hoverTimeout: 200,
32
+ zindex: 105,
33
+ },
34
+ accordion: {
35
+ slideSpeed: 250,
36
+ expand: false,
37
+ },
38
+ }
39
+
40
+ type PopperPlacement =
41
+ | 'right'
42
+ | 'auto'
43
+ | 'auto-start'
44
+ | 'auto-end'
45
+ | 'top'
46
+ | 'bottom'
47
+ | 'left'
48
+ | 'top-start'
49
+ | 'top-end'
50
+ | 'bottom-start'
51
+ | 'bottom-end'
52
+ | 'right-start'
53
+ | 'right-end'
54
+ | 'left-start'
55
+ | 'left-end'
56
+ | undefined
57
+
58
+ class MenuComponent {
59
+ element: HTMLElement
60
+ options: MenuOptions
61
+ instanceUid: string
62
+ triggerElement: HTMLElement | null = null
63
+
64
+ constructor(_element: HTMLElement, options: MenuOptions) {
65
+ this.element = _element
66
+ this.options = Object.assign(defaultMenuOptions, options)
67
+ this.instanceUid = getUniqueIdWithPrefix('menu')
68
+ // this.element.setAttribute('data-kt-menu', 'true')
69
+ this._setTriggerElement()
70
+ this._update()
71
+ DataUtil.set(this.element, 'menu', this)
72
+ return this
73
+ }
74
+
75
+ // Set external trigger element
76
+ private _setTriggerElement = () => {
77
+ const target = document.querySelector(
78
+ `[data-kt-menu-target="#${this.element.getAttribute('id')}"`
79
+ )
80
+
81
+ if (target) {
82
+ this.triggerElement = target as HTMLElement
83
+ } else if (this.element.closest('[data-kt-menu-trigger]')) {
84
+ this.triggerElement = this.element.closest('[data-kt-menu-trigger]') as HTMLElement
85
+ } else if (
86
+ this.element.parentNode &&
87
+ getElementChild(this.element.parentNode as HTMLElement, '[data-kt-menu-trigger]')
88
+ ) {
89
+ const child = getElementChild(
90
+ this.element.parentNode as HTMLElement,
91
+ '[data-kt-menu-trigger]'
92
+ )
93
+ if (child) {
94
+ this.triggerElement = child
95
+ }
96
+ }
97
+
98
+ if (this.triggerElement) {
99
+ DataUtil.set(this.triggerElement, 'menu', this)
100
+ }
101
+ }
102
+
103
+ // Test if menu has external trigger element
104
+ private _isTriggerElement = (item: HTMLElement) => {
105
+ return this.triggerElement === item
106
+ }
107
+
108
+ // Get item option(through html attributes)
109
+ private _getItemOption = (item: HTMLElement, name: string) => {
110
+ let value: string | JSON | null | boolean = null
111
+ if (item && item.hasAttribute('data-kt-menu-' + name)) {
112
+ const attr = item.getAttribute('data-kt-menu-' + name) || ''
113
+ value = getAttributeValueByBreakpoint(attr)
114
+ if (value !== null && String(value) === 'true') {
115
+ value = true
116
+ } else if (value !== null && String(value) === 'false') {
117
+ value = false
118
+ }
119
+ }
120
+ return value
121
+ }
122
+
123
+ // Get item element
124
+ private _getItemElement = (_element: HTMLElement): HTMLElement | undefined => {
125
+ // Element is the external trigger element
126
+ if (this._isTriggerElement(_element)) {
127
+ return _element
128
+ }
129
+
130
+ // Element has item toggler attribute
131
+ if (_element.hasAttribute('data-kt-menu-trigger')) {
132
+ return _element
133
+ }
134
+
135
+ // Element has item DOM reference in it's data storage
136
+ const itemElement = DataUtil.get(_element, 'item')
137
+ if (itemElement) {
138
+ return itemElement as HTMLElement
139
+ }
140
+
141
+ // Item is parent of element
142
+ const item = _element.closest<HTMLElement>('.menu-item[data-kt-menu-trigger]')
143
+ if (item) {
144
+ return item
145
+ }
146
+
147
+ // Element's parent has item DOM reference in it's data storage
148
+ const sub = _element.closest('.menu-sub')
149
+ if (sub) {
150
+ const subItem = DataUtil.get(sub as HTMLElement, 'item')
151
+ if (subItem) {
152
+ return subItem as HTMLElement
153
+ }
154
+ }
155
+ }
156
+
157
+ // Get item parent element
158
+ private _getItemParentElement = (item: HTMLElement) => {
159
+ const sub = item.closest<HTMLElement>('.menu-sub')
160
+ if (!sub) {
161
+ return null
162
+ }
163
+
164
+ const subItem = DataUtil.get(sub, 'item')
165
+ if (subItem) {
166
+ return subItem as HTMLElement
167
+ }
168
+
169
+ const parentItem = sub.closest<HTMLElement>('.menu-item[data-kt-menu-trigger]')
170
+ if (sub && parentItem) {
171
+ return parentItem
172
+ }
173
+
174
+ return null
175
+ }
176
+
177
+ // Get item parent elements
178
+ private _getItemParentElements = (item: HTMLElement) => {
179
+ const parents: Array<HTMLElement> = []
180
+ let parent: HTMLElement | null
181
+ let i = 0
182
+ let buffer: HTMLElement = item
183
+
184
+ do {
185
+ parent = this._getItemParentElement(buffer)
186
+ if (parent) {
187
+ parents.push(parent)
188
+ buffer = parent as HTMLElement
189
+ }
190
+
191
+ i++
192
+ } while (parent !== null && i < 20)
193
+
194
+ if (this.triggerElement) {
195
+ parents.unshift(this.triggerElement)
196
+ }
197
+
198
+ return parents
199
+ }
200
+
201
+ // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)
202
+ private _getDropdownPopperConfig = (item: HTMLElement) => {
203
+ // Placement
204
+ const placementOption = this._getItemOption(item, 'placement')
205
+ let placement: PopperPlacement = 'right'
206
+ if (placementOption) {
207
+ placement = placementOption as PopperPlacement
208
+ }
209
+
210
+ // Flip
211
+ // const flipValue = this._getItemOption(item, 'flip')
212
+ // const flip = flipValue ? flipValue.toString().split(',') : []
213
+
214
+ // Offset
215
+ const offsetValue = this._getItemOption(item, 'offset')
216
+ const offset = offsetValue ? offsetValue.toString().split(',') : []
217
+
218
+ // Strategy
219
+ const strategy: 'absolute' | 'fixed' | undefined =
220
+ this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed'
221
+
222
+ return {
223
+ placement: placement,
224
+ strategy: strategy,
225
+ modifiers: [
226
+ {
227
+ name: 'offset',
228
+ options: {
229
+ offset: offset,
230
+ },
231
+ },
232
+ {
233
+ name: 'preventOverflow',
234
+ },
235
+ {
236
+ name: 'flip',
237
+ options: {
238
+ // altBoundary: true,
239
+ // fallbackPlacements: flip,
240
+ flipVariations: false,
241
+ },
242
+ },
243
+ ],
244
+ }
245
+ }
246
+
247
+ // Get item child element
248
+ private _getItemChildElement = (item: HTMLElement): HTMLElement | null => {
249
+ let selector = item
250
+
251
+ const subItem = DataUtil.get(item, 'sub')
252
+ if (subItem) {
253
+ selector = subItem as HTMLElement
254
+ }
255
+
256
+ if (selector) {
257
+ //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');
258
+ const element = selector.querySelector<HTMLElement>('.menu-item[data-kt-menu-trigger]')
259
+ if (element) {
260
+ return element
261
+ }
262
+ }
263
+ return null
264
+ }
265
+
266
+ // Get item child elements
267
+ private _getItemChildElements = (item: HTMLElement) => {
268
+ const children: Array<HTMLElement> = []
269
+ let child: HTMLElement | null
270
+ let i = 0
271
+ let buffer = item
272
+ do {
273
+ child = this._getItemChildElement(buffer)
274
+ if (child) {
275
+ children.push(child)
276
+ buffer = child as HTMLElement
277
+ }
278
+
279
+ i++
280
+ } while (child !== null && i < 20)
281
+
282
+ return children
283
+ }
284
+
285
+ // Get item sub element
286
+ private _getItemSubElement = (item: HTMLElement): HTMLElement | null => {
287
+ if (!item) {
288
+ return null
289
+ }
290
+
291
+ if (this._isTriggerElement(item)) {
292
+ return this.element
293
+ }
294
+
295
+ if (item.classList.contains('menu-sub')) {
296
+ return item
297
+ } else if (DataUtil.has(item, 'sub')) {
298
+ const itemSub = DataUtil.get(item, 'sub')
299
+ return itemSub ? (itemSub as HTMLElement) : null
300
+ } else {
301
+ return getElementChild(item, '.menu-sub')
302
+ }
303
+ }
304
+
305
+ private _getCss = (el: HTMLElement, styleProp: string) => {
306
+ const defaultView = (el.ownerDocument || document).defaultView
307
+ if (!defaultView) {
308
+ return ''
309
+ }
310
+
311
+ // sanitize property name to css notation
312
+ // (hyphen separated words eg. font-Size)
313
+ styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()
314
+
315
+ return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)
316
+ }
317
+
318
+ // Get item sub type
319
+ private _getItemSubType = (element: HTMLElement) => {
320
+ const sub = this._getItemSubElement(element)
321
+ if (sub && parseInt(this._getCss(sub as HTMLElement, 'z-index')) > 0) {
322
+ return 'dropdown'
323
+ } else {
324
+ return 'accordion'
325
+ }
326
+ }
327
+
328
+ // Test if item's sub is shown
329
+ private _isItemSubShown = (item: HTMLElement) => {
330
+ const sub = this._getItemSubElement(item)
331
+ if (sub) {
332
+ if (this._getItemSubType(item) === 'dropdown') {
333
+ const subHTMLElement = sub as HTMLElement
334
+ return (
335
+ subHTMLElement.classList.contains('show') &&
336
+ subHTMLElement.hasAttribute('data-popper-placement')
337
+ )
338
+ } else {
339
+ return item.classList.contains('show')
340
+ }
341
+ }
342
+
343
+ return false
344
+ }
345
+
346
+ // Test if item dropdown is permanent
347
+ private _isItemDropdownPermanent = (item: HTMLElement) => {
348
+ return this._getItemOption(item, 'permanent') === true
349
+ }
350
+
351
+ // Test if item's parent is shown
352
+ private _isItemParentShown = (item: HTMLElement) => {
353
+ return getElementParents(item, '.menu-item.show').length > 0
354
+ }
355
+
356
+ // Test of it is item sub element
357
+ private _isItemSubElement = (item: HTMLElement) => {
358
+ return item.classList.contains('menu-sub')
359
+ }
360
+
361
+ // Test if item has sub
362
+ private _hasItemSub = (item: HTMLElement) => {
363
+ return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger')
364
+ }
365
+
366
+ // Get link element
367
+ private _getItemLinkElement = (item: HTMLElement) => {
368
+ return getElementChild(item, '.menu-link')
369
+ }
370
+
371
+ // Get toggle element
372
+ private _getItemToggleElement = (item: HTMLElement) => {
373
+ if (this.triggerElement) {
374
+ return this.triggerElement
375
+ }
376
+
377
+ return this._getItemLinkElement(item)
378
+ }
379
+
380
+ // Show item dropdown
381
+ private _showDropdown = (item: HTMLElement) => {
382
+ if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {
383
+ return
384
+ }
385
+
386
+ // Hide all currently shown dropdowns except current one
387
+ MenuComponent.hideDropdowns(item)
388
+
389
+ // const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);
390
+ const sub = this._getItemSubElement(item)
391
+ const width = this._getItemOption(item, 'width')
392
+ const height = this._getItemOption(item, 'height')
393
+
394
+ let zindex = this.options.dropdown.zindex
395
+ const parentZindex = getHighestZindex(item) // update
396
+ // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update
397
+ if (parentZindex !== null && parentZindex >= zindex) {
398
+ zindex = parentZindex + 1
399
+ }
400
+
401
+ if (zindex && sub) {
402
+ ElementStyleUtil.set(sub, 'z-index', zindex)
403
+ }
404
+
405
+ if (width && sub) {
406
+ ElementStyleUtil.set(sub, 'width', width)
407
+ }
408
+
409
+ if (height && sub) {
410
+ ElementStyleUtil.set(sub, 'height', height)
411
+ }
412
+
413
+ this.initDropdownPopper(item, sub as HTMLElement)
414
+
415
+ item.classList.add('show')
416
+ item.classList.add('menu-dropdown')
417
+ sub?.classList.add('show')
418
+
419
+ // Append the sub the the root of the menu
420
+ if (this._getItemOption(item, 'overflow') === true) {
421
+ if (sub) {
422
+ document.body.appendChild(sub)
423
+ DataUtil.set(item, 'sub', sub)
424
+ DataUtil.set(sub, 'item', item)
425
+ DataUtil.set(sub, 'menu', this)
426
+ }
427
+ } else {
428
+ if (sub) {
429
+ DataUtil.set(sub, 'item', item)
430
+ }
431
+ }
432
+
433
+ EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown')
434
+ }
435
+
436
+ // Init dropdown popper(new)
437
+ private initDropdownPopper = (item: HTMLElement, sub: HTMLElement) => {
438
+ // Setup popper instance
439
+ let reference
440
+ const attach = this._getItemOption(item, 'attach') as string
441
+
442
+ if (attach) {
443
+ if (attach === 'parent') {
444
+ reference = item.parentNode
445
+ } else {
446
+ reference = document.querySelector(attach)
447
+ }
448
+ } else {
449
+ reference = item
450
+ }
451
+
452
+ if (reference) {
453
+ const popper = createPopper(
454
+ reference as Element | VirtualElement,
455
+ sub,
456
+ this._getDropdownPopperConfig(item)
457
+ )
458
+ DataUtil.set(item, 'popper', popper)
459
+ }
460
+ }
461
+
462
+ // Hide item dropdown
463
+ private _hideDropdown = (item: HTMLElement) => {
464
+ if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {
465
+ return
466
+ }
467
+
468
+ const sub = this._getItemSubElement(item)
469
+ if (sub) {
470
+ ElementStyleUtil.set(sub, 'z-index', '')
471
+ ElementStyleUtil.set(sub, 'width', '')
472
+ ElementStyleUtil.set(sub, 'height', '')
473
+ }
474
+
475
+ item.classList.remove('show')
476
+ item.classList.remove('menu-dropdown')
477
+ if (sub) {
478
+ sub.classList.remove('show')
479
+ }
480
+
481
+ // Append the sub back to it's parent
482
+ if (this._getItemOption(item, 'overflow') === true) {
483
+ if (item.classList.contains('menu-item')) {
484
+ if (sub) {
485
+ item.appendChild(sub)
486
+ }
487
+ } else {
488
+ insertAfterElement(this.element, item)
489
+ }
490
+
491
+ if (sub) {
492
+ DataUtil.remove(item, 'sub')
493
+ DataUtil.remove(sub, 'item')
494
+ DataUtil.remove(sub, 'menu')
495
+ }
496
+ }
497
+
498
+ if (DataUtil.has(item, 'popper') === true) {
499
+ // @ts-ignore
500
+ DataUtil.get(item, 'popper').destroy()
501
+ DataUtil.remove(item, 'popper')
502
+ }
503
+
504
+ // Destroy popper(new)
505
+ this.destroyDropdownPopper(item)
506
+ EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')
507
+ }
508
+
509
+ // Destroy dropdown popper(new)
510
+ private destroyDropdownPopper = (item: HTMLElement) => {
511
+ if (DataUtil.has(item, 'popper') === true) {
512
+ // @ts-ignore
513
+ DataUtil.get(item, 'popper').destroy()
514
+ DataUtil.remove(item, 'popper')
515
+ }
516
+
517
+ EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')
518
+ }
519
+
520
+ private _showAccordion = (item: HTMLElement) => {
521
+ if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {
522
+ return
523
+ }
524
+
525
+ if (this.options.accordion.expand === false) {
526
+ this._hideAccordions(item)
527
+ }
528
+
529
+ if (DataUtil.has(item, 'popper') === true) {
530
+ this._hideDropdown(item)
531
+ }
532
+
533
+ item.classList.add('hover') // updateWW
534
+ item.classList.add('showing')
535
+
536
+ const subElement = this._getItemSubElement(item)
537
+ if (subElement) {
538
+ const sub = subElement as HTMLElement
539
+ slideDown(sub, this.options.accordion.slideSpeed, () => {
540
+ item.classList.remove('showing')
541
+ item.classList.add('show')
542
+ sub.classList.add('show')
543
+ EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown')
544
+ })
545
+ }
546
+ }
547
+
548
+ private _hideAccordion = (item: HTMLElement) => {
549
+ if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {
550
+ return
551
+ }
552
+
553
+ const sub = this._getItemSubElement(item)
554
+ item.classList.add('hiding')
555
+
556
+ if (sub) {
557
+ slideUp(sub, this.options.accordion.slideSpeed, () => {
558
+ item.classList.remove('hiding')
559
+ item.classList.remove('show')
560
+ sub.classList.remove('show')
561
+ item.classList.remove('hover') // update
562
+ EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden')
563
+ })
564
+ }
565
+ }
566
+
567
+ // Hide all shown accordions of item
568
+ private _hideAccordions = (item: HTMLElement) => {
569
+ const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]')
570
+ if (itemsToHide && itemsToHide.length > 0) {
571
+ for (let i = 0, len = itemsToHide.length; i < len; i++) {
572
+ const itemToHide = itemsToHide[i] as HTMLElement
573
+
574
+ if (
575
+ this._getItemSubType(itemToHide) === 'accordion' &&
576
+ itemToHide !== item &&
577
+ item.contains(itemToHide) === false &&
578
+ itemToHide.contains(item) === false
579
+ ) {
580
+ this._hideAccordion(itemToHide)
581
+ }
582
+ }
583
+ }
584
+ }
585
+
586
+ // Event Handlers
587
+ // Reset item state classes if item sub type changed
588
+ private _reset = (item: HTMLElement) => {
589
+ if (this._hasItemSub(item) === false) {
590
+ return
591
+ }
592
+
593
+ const sub = this._getItemSubElement(item)
594
+
595
+ // Reset sub state if sub type is changed during the window resize
596
+ if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {
597
+ // updated
598
+ item.classList.remove('hover')
599
+ item.classList.remove('show')
600
+ item.classList.remove('show')
601
+ if (sub) {
602
+ sub.classList.remove('show')
603
+ }
604
+ } // updated
605
+ }
606
+
607
+ // TODO: not done
608
+ private _destroy = () => {}
609
+
610
+ // Update all item state classes if item sub type changed
611
+ private _update = () => {
612
+ const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]')
613
+ items.forEach((el) => this._reset(el as HTMLElement))
614
+ }
615
+
616
+ // Hide item sub
617
+ private _hide = (item: HTMLElement) => {
618
+ if (!item) {
619
+ return
620
+ }
621
+
622
+ if (this._isItemSubShown(item) === false) {
623
+ return
624
+ }
625
+
626
+ if (this._getItemSubType(item) === 'dropdown') {
627
+ this._hideDropdown(item)
628
+ } else if (this._getItemSubType(item) === 'accordion') {
629
+ this._hideAccordion(item)
630
+ }
631
+ }
632
+
633
+ // Show item sub
634
+ private _show = (item: HTMLElement) => {
635
+ if (!item) {
636
+ return
637
+ }
638
+
639
+ if (this._isItemSubShown(item) === true) {
640
+ return
641
+ }
642
+
643
+ if (this._getItemSubType(item) === 'dropdown') {
644
+ this._showDropdown(item) // // show current dropdown
645
+ } else if (this._getItemSubType(item) === 'accordion') {
646
+ this._showAccordion(item)
647
+ }
648
+
649
+ // Remember last submenu type
650
+
651
+ DataUtil.set(item, 'type', this._getItemSubType(item)) // updated
652
+ }
653
+
654
+ // Toggle item sub
655
+ private _toggle = (item: HTMLElement) => {
656
+ if (!item) {
657
+ return
658
+ }
659
+
660
+ if (this._isItemSubShown(item) === true) {
661
+ this._hide(item)
662
+ } else {
663
+ this._show(item)
664
+ }
665
+ }
666
+
667
+ // Mouseout handle
668
+ private _mouseout = (element: HTMLElement, e: MouseEvent) => {
669
+ const item = this._getItemElement(element)
670
+ if (!item) {
671
+ return
672
+ }
673
+
674
+ if (this._getItemOption(item, 'trigger') !== 'hover') {
675
+ return
676
+ }
677
+
678
+ const timeout = setTimeout(() => {
679
+ if (DataUtil.get(item, 'hover') === '1') {
680
+ this._hide(item)
681
+ }
682
+ }, this.options.dropdown.hoverTimeout)
683
+
684
+ DataUtil.set(item, 'hover', '1')
685
+ DataUtil.set(item, 'timeout', timeout)
686
+ }
687
+
688
+ // Mouseover handle
689
+ private _mouseover = (element: HTMLElement, e: MouseEvent) => {
690
+ const item = this._getItemElement(element)
691
+ if (!item) {
692
+ return
693
+ }
694
+
695
+ if (this._getItemOption(item, 'trigger') !== 'hover') {
696
+ return
697
+ }
698
+
699
+ if (DataUtil.get(item, 'hover') === '1') {
700
+ const timeout = DataUtil.get(item, 'timeout')
701
+ if (timeout) {
702
+ clearTimeout(timeout as number)
703
+ }
704
+ DataUtil.remove(item, 'hover')
705
+ DataUtil.remove(item, 'timeout')
706
+ }
707
+
708
+ this._show(item)
709
+ }
710
+
711
+ // Dismiss handler
712
+ private _dismiss = (element: HTMLElement, e: Event) => {
713
+ const item = this._getItemElement(element)
714
+ if (!item) {
715
+ return
716
+ }
717
+ const items = this._getItemChildElements(item)
718
+ //if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {
719
+ const itemSubType = this._getItemSubType(item)
720
+ if (item !== null && itemSubType === 'dropdown') {
721
+ this._hide(item) // hide items dropdown
722
+
723
+ // Hide all child elements as well
724
+ if (items.length > 0) {
725
+ for (let i = 0, len = items.length; i < len; i++) {
726
+ //if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {
727
+ if (items[i] !== null && this._getItemSubType(items[i] as HTMLElement) === 'dropdown') {
728
+ this._hide(items[i] as HTMLElement)
729
+ }
730
+ }
731
+ }
732
+ }
733
+ }
734
+
735
+ // Link handler
736
+ private _link = (element: HTMLElement, e: Event) => {
737
+ if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {
738
+ return
739
+ }
740
+
741
+ // Dismiss all shown dropdowns
742
+ MenuComponent.hideDropdowns(undefined)
743
+ EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked')
744
+ }
745
+
746
+ private _click = (element: HTMLElement, e: Event) => {
747
+ e.preventDefault()
748
+ const item = this._getItemElement(element)
749
+ if (item) {
750
+ if (this._getItemOption(item, 'trigger') !== 'click') {
751
+ return
752
+ }
753
+
754
+ if (this._getItemOption(item, 'toggle') === false) {
755
+ this._show(item)
756
+ } else {
757
+ this._toggle(item)
758
+ }
759
+ }
760
+ }
761
+
762
+ ///////////////////////
763
+ // ** Public API ** //
764
+ ///////////////////////
765
+ public click = (element: HTMLElement, e: Event) => {
766
+ return this._click(element, e)
767
+ }
768
+
769
+ public link = (element: HTMLElement, e: Event) => {
770
+ return this._link(element, e)
771
+ }
772
+
773
+ public dismiss = (element: HTMLElement, e: Event) => {
774
+ return this._dismiss(element, e)
775
+ }
776
+
777
+ public mouseover = (element: HTMLElement, e: Event) => {
778
+ return this._mouseover(element, e as MouseEvent)
779
+ }
780
+
781
+ public mouseout = (element: HTMLElement, e: Event) => {
782
+ return this._mouseout(element, e as MouseEvent)
783
+ }
784
+
785
+ // General Methods
786
+ public getItemTriggerType = (item: HTMLElement) => {
787
+ return this._getItemOption(item, 'trigger')
788
+ }
789
+
790
+ public getItemSubType = (element: HTMLElement) => {
791
+ return this._getItemSubType(element)
792
+ }
793
+
794
+ public show = (item: HTMLElement) => {
795
+ return this._show(item)
796
+ }
797
+
798
+ public hide = (item: HTMLElement) => {
799
+ return this._hide(item)
800
+ }
801
+
802
+ public reset = (item: HTMLElement) => {
803
+ return this._reset(item)
804
+ }
805
+
806
+ public update = () => {
807
+ return this._update()
808
+ }
809
+
810
+ public getElement = () => {
811
+ return this.element
812
+ }
813
+
814
+ public getItemLinkElement = (item: HTMLElement) => {
815
+ return this._getItemLinkElement(item)
816
+ }
817
+
818
+ public getItemToggleElement = (item: HTMLElement) => {
819
+ return this._getItemToggleElement(item)
820
+ }
821
+
822
+ public getItemSubElement = (item: HTMLElement) => {
823
+ return this._getItemSubElement(item)
824
+ }
825
+
826
+ public getItemParentElements = (item: HTMLElement) => {
827
+ return this._getItemParentElements(item)
828
+ }
829
+
830
+ public isItemSubShown = (item: HTMLElement) => {
831
+ return this._isItemSubShown(item)
832
+ }
833
+
834
+ public isItemParentShown = (item: HTMLElement) => {
835
+ return this._isItemParentShown(item)
836
+ }
837
+
838
+ public getTriggerElement = () => {
839
+ return this.triggerElement
840
+ }
841
+
842
+ public isItemDropdownPermanent = (item: HTMLElement) => {
843
+ return this._isItemDropdownPermanent(item)
844
+ }
845
+
846
+ // Accordion Mode Methods
847
+ public hideAccordions = (item: HTMLElement) => {
848
+ return this._hideAccordions(item)
849
+ }
850
+
851
+ // Event API
852
+ public on = (name: string, handler: any) => {
853
+ return EventHandlerUtil.on(this.element, name, handler)
854
+ }
855
+
856
+ public one = (name: string, handler: any) => {
857
+ return EventHandlerUtil.one(this.element, name, handler)
858
+ }
859
+
860
+ public off = (name: string, handlerId: string) => {
861
+ return EventHandlerUtil.off(this.element, name, handlerId)
862
+ }
863
+
864
+ // public static methods
865
+ // Get KTMenu instance by element
866
+ public static getInstance = (element: HTMLElement): MenuComponent | null => {
867
+ // Element has menu DOM reference in it's DATA storage
868
+ const elementMenu = DataUtil.get(element, 'menu')
869
+ if (elementMenu) {
870
+ return elementMenu as MenuComponent
871
+ }
872
+
873
+ // Element has .menu parent
874
+ const menu = element.closest('.menu')
875
+ if (menu) {
876
+ const menuData = DataUtil.get(menu as HTMLElement, 'menu')
877
+ if (menuData) {
878
+ return menuData as MenuComponent
879
+ }
880
+ }
881
+
882
+ // Element has a parent with DOM reference to .menu in it's DATA storage
883
+ if (element.classList.contains('menu-link')) {
884
+ const sub = element.closest('.menu-sub')
885
+ if (sub) {
886
+ const subMenu = DataUtil.get(sub as HTMLElement, 'menu')
887
+ if (subMenu) {
888
+ return subMenu as MenuComponent
889
+ }
890
+ }
891
+ }
892
+
893
+ return null
894
+ }
895
+
896
+ // Hide all dropdowns and skip one if provided
897
+ public static hideDropdowns = (skip: HTMLElement | undefined) => {
898
+ const items = document.querySelectorAll<HTMLElement>(
899
+ '.show.menu-dropdown[data-kt-menu-trigger]'
900
+ )
901
+
902
+ if (items && items.length > 0) {
903
+ for (let i = 0, len = items.length; i < len; i++) {
904
+ const item = items[i]
905
+ const menu = MenuComponent.getInstance(item as HTMLElement)
906
+
907
+ if (menu && menu.getItemSubType(item) === 'dropdown') {
908
+ if (skip) {
909
+ if (
910
+ // @ts-ignore
911
+ menu.getItemSubElement(item).contains(skip) === false &&
912
+ item.contains(skip) === false &&
913
+ item !== skip
914
+ ) {
915
+ menu.hide(item)
916
+ }
917
+ } else {
918
+ menu.hide(item)
919
+ }
920
+ }
921
+ }
922
+ }
923
+ }
924
+
925
+ public static updateDropdowns = () => {
926
+ const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')
927
+ if (items && items.length > 0) {
928
+ for (let i = 0, len = items.length; i < len; i++) {
929
+ const item = items[i]
930
+
931
+ if (DataUtil.has(item as HTMLElement, 'popper')) {
932
+ // @ts-ignore
933
+ DataUtil.get(item as HTMLElement, 'popper').forceUpdate()
934
+ }
935
+ }
936
+ }
937
+ }
938
+
939
+ // Global handlers
940
+ public static createInstances = (selector: string) => {
941
+ // Initialize menus
942
+ document.querySelectorAll(selector).forEach((el) => {
943
+ const menuItem = el as HTMLElement
944
+ let menuInstance = MenuComponent.getInstance(menuItem)
945
+ if (!menuInstance) {
946
+ menuInstance = new MenuComponent(el as HTMLElement, defaultMenuOptions)
947
+ }
948
+ })
949
+ }
950
+
951
+ public static initGlobalHandlers = () => {
952
+ // Dropdown handler
953
+ document.addEventListener('click', (e) => {
954
+ const menuItems = document.querySelectorAll(
955
+ '.show.menu-dropdown[data-kt-menu-trigger]:not([data-kt-menu-static="true"])'
956
+ )
957
+ if (menuItems && menuItems.length > 0) {
958
+ for (let i = 0; i < menuItems.length; i++) {
959
+ const item = menuItems[i] as HTMLElement
960
+ const menuObj = MenuComponent.getInstance(item) as MenuComponent
961
+ if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {
962
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
963
+ const menu = menuObj.getElement()
964
+ const sub = menuObj.getItemSubElement(item) as HTMLElement
965
+ if (item === e.target || item.contains(e.target as HTMLElement)) {
966
+ continue
967
+ }
968
+
969
+ if (sub && (sub === e.target || sub.contains(e.target as HTMLElement))) {
970
+ continue
971
+ }
972
+ menuObj.hide(item)
973
+ }
974
+ }
975
+ }
976
+ })
977
+
978
+ // Sub toggle handler
979
+ DOMEventHandlerUtil.on(
980
+ document.body,
981
+ '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger="auto"])',
982
+ 'click',
983
+ function (this: HTMLElement, e: Event) {
984
+ const menu = MenuComponent.getInstance(this) as MenuComponent
985
+ if (menu) {
986
+ return menu.click(this, e)
987
+ }
988
+ }
989
+ )
990
+
991
+ // // Link handler
992
+ DOMEventHandlerUtil.on(
993
+ document.body,
994
+ '.menu-item:not([data-kt-menu-trigger]) > .menu-link',
995
+ 'click',
996
+ function (this: HTMLElement, e: Event) {
997
+ e.stopPropagation()
998
+ const menu = MenuComponent.getInstance(this)
999
+ if (menu && menu.link) {
1000
+ return menu.link(this, e)
1001
+ }
1002
+ }
1003
+ )
1004
+
1005
+ // Dismiss handler
1006
+ DOMEventHandlerUtil.on(
1007
+ document.body,
1008
+ '[data-kt-menu-dismiss="true"]',
1009
+ 'click',
1010
+ function (this: HTMLElement, e: Event) {
1011
+ const menu = MenuComponent.getInstance(this) as MenuComponent
1012
+ if (menu) {
1013
+ return menu.dismiss(this, e)
1014
+ }
1015
+ }
1016
+ )
1017
+
1018
+ // Mouseover handler
1019
+ DOMEventHandlerUtil.on(
1020
+ document.body,
1021
+ '[data-kt-menu-trigger], .menu-sub',
1022
+ 'mouseover',
1023
+ function (this: HTMLElement, e: Event) {
1024
+ const menu = MenuComponent.getInstance(this) as MenuComponent
1025
+ if (menu && menu.getItemSubType(this) === 'dropdown') {
1026
+ return menu.mouseover(this, e)
1027
+ }
1028
+ }
1029
+ )
1030
+
1031
+ // Mouseout handler
1032
+ DOMEventHandlerUtil.on(
1033
+ document.body,
1034
+ '[data-kt-menu-trigger], .menu-sub',
1035
+ 'mouseout',
1036
+ function (this: HTMLElement, e: Event) {
1037
+ const menu = MenuComponent.getInstance(this) as MenuComponent
1038
+ if (menu && menu.getItemSubType(this) === 'dropdown') {
1039
+ return menu.mouseout(this, e)
1040
+ }
1041
+ }
1042
+ )
1043
+
1044
+ // Resize handler
1045
+ window.addEventListener('resize', () => {
1046
+ let timer
1047
+ throttle(
1048
+ timer,
1049
+ () => {
1050
+ // Locate and update Drawer instances on window resize
1051
+ const elements = document.querySelectorAll('[data-kt-menu="true"]')
1052
+ elements.forEach((el) => {
1053
+ const menu = MenuComponent.getInstance(el as HTMLElement)
1054
+ if (menu) {
1055
+ menu.update()
1056
+ }
1057
+ })
1058
+ },
1059
+ 200
1060
+ )
1061
+ })
1062
+ }
1063
+
1064
+ public static bootstrap = () => {
1065
+ MenuComponent.initGlobalHandlers()
1066
+ MenuComponent.createInstances('[data-kt-menu="true"]')
1067
+ }
1068
+
1069
+ public static reinitialization = () => {
1070
+ MenuComponent.createInstances('[data-kt-menu="true"]')
1071
+ }
1072
+
1073
+ public static createInsance = (
1074
+ selector: string,
1075
+ options: MenuOptions = defaultMenuOptions
1076
+ ): MenuComponent | undefined => {
1077
+ const element = document.body.querySelector(selector)
1078
+ if (!element) {
1079
+ return
1080
+ }
1081
+ const item = element as HTMLElement
1082
+ let menu = MenuComponent.getInstance(item)
1083
+ if (!menu) {
1084
+ menu = new MenuComponent(item, options)
1085
+ }
1086
+ return menu
1087
+ }
1088
+ }
1089
+
1090
+ export {MenuComponent, defaultMenuOptions}