@syncfusion/ej2-navigations 16.4.47 → 16.4.52-46585

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 (910) hide show
  1. package/.eslintrc.json +259 -0
  2. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +63 -0
  3. package/.github/PULL_REQUEST_TEMPLATE/feature.md +39 -0
  4. package/CHANGELOG.md +1419 -0
  5. package/README.md +226 -112
  6. package/appbar.d.ts +4 -0
  7. package/appbar.js +4 -0
  8. package/breadcrumb.d.ts +4 -0
  9. package/breadcrumb.js +4 -0
  10. package/carousel.d.ts +4 -0
  11. package/carousel.js +4 -0
  12. package/dist/ej2-navigations.min.js +1 -0
  13. package/dist/ej2-navigations.umd.min.js +1 -10
  14. package/dist/ej2-navigations.umd.min.js.map +1 -1
  15. package/dist/es6/ej2-navigations.es2015.js +8469 -2261
  16. package/dist/es6/ej2-navigations.es2015.js.map +1 -1
  17. package/dist/es6/ej2-navigations.es5.js +8157 -1833
  18. package/dist/es6/ej2-navigations.es5.js.map +1 -1
  19. package/dist/global/ej2-navigations.min.js +1 -10
  20. package/dist/global/ej2-navigations.min.js.map +1 -1
  21. package/dist/global/index.d.ts +0 -9
  22. package/helpers/e2e/accordionHelper.d.ts +56 -0
  23. package/helpers/e2e/accordionHelper.js +71 -0
  24. package/helpers/e2e/contextmenuHelper.d.ts +37 -0
  25. package/helpers/e2e/contextmenuHelper.js +53 -0
  26. package/helpers/e2e/index.d.ts +7 -0
  27. package/helpers/e2e/index.js +14 -0
  28. package/helpers/e2e/menuHelper.d.ts +37 -0
  29. package/helpers/e2e/menuHelper.js +53 -0
  30. package/helpers/e2e/sidebarHelper.d.ts +94 -0
  31. package/helpers/e2e/sidebarHelper.js +110 -0
  32. package/helpers/e2e/tabHelper.d.ts +60 -0
  33. package/helpers/e2e/tabHelper.js +74 -0
  34. package/helpers/e2e/toolbarHelper.d.ts +60 -0
  35. package/helpers/e2e/toolbarHelper.js +74 -0
  36. package/helpers/e2e/treeview.d.ts +50 -0
  37. package/helpers/e2e/treeview.js +80 -0
  38. package/package.json +105 -105
  39. package/src/accordion/accordion-model.d.ts +122 -45
  40. package/src/accordion/accordion.d.ts +169 -48
  41. package/src/accordion/accordion.js +530 -230
  42. package/src/appbar/appbar-model.d.ts +76 -0
  43. package/src/appbar/appbar.d.ts +115 -0
  44. package/src/appbar/appbar.js +220 -0
  45. package/src/appbar/index.d.ts +3 -0
  46. package/src/appbar/index.js +2 -0
  47. package/src/breadcrumb/breadcrumb-model.d.ts +161 -0
  48. package/src/breadcrumb/breadcrumb.d.ts +285 -0
  49. package/src/breadcrumb/breadcrumb.js +789 -0
  50. package/src/breadcrumb/index.d.ts +5 -0
  51. package/src/breadcrumb/index.js +4 -0
  52. package/src/carousel/carousel-model.d.ts +223 -0
  53. package/src/carousel/carousel.d.ts +344 -0
  54. package/src/carousel/carousel.js +1100 -0
  55. package/src/carousel/index.d.ts +3 -0
  56. package/src/carousel/index.js +2 -0
  57. package/src/common/h-scroll-model.d.ts +1 -0
  58. package/src/common/h-scroll.d.ts +21 -10
  59. package/src/common/h-scroll.js +58 -36
  60. package/src/common/index.d.ts +2 -0
  61. package/src/common/index.js +2 -0
  62. package/src/common/menu-base-model.d.ts +77 -22
  63. package/src/common/menu-base.d.ts +192 -41
  64. package/src/common/menu-base.js +1104 -366
  65. package/src/common/menu-scroll.d.ts +29 -0
  66. package/src/common/menu-scroll.js +103 -0
  67. package/src/common/v-scroll-model.d.ts +1 -0
  68. package/src/common/v-scroll.d.ts +20 -9
  69. package/src/common/v-scroll.js +47 -20
  70. package/src/context-menu/context-menu-model.d.ts +7 -3
  71. package/src/context-menu/context-menu.d.ts +25 -10
  72. package/src/context-menu/context-menu.js +27 -15
  73. package/src/index.d.ts +3 -0
  74. package/src/index.js +3 -0
  75. package/src/menu/menu-model.d.ts +34 -1
  76. package/src/menu/menu.d.ts +60 -6
  77. package/src/menu/menu.js +144 -18
  78. package/src/sidebar/sidebar-model.d.ts +54 -25
  79. package/src/sidebar/sidebar.d.ts +117 -22
  80. package/src/sidebar/sidebar.js +250 -120
  81. package/src/tab/tab-model.d.ts +156 -37
  82. package/src/tab/tab.d.ts +286 -61
  83. package/src/tab/tab.js +1136 -331
  84. package/src/toolbar/toolbar-model.d.ts +110 -29
  85. package/src/toolbar/toolbar.d.ts +185 -55
  86. package/src/toolbar/toolbar.js +595 -234
  87. package/src/treeview/treeview-model.d.ts +269 -83
  88. package/src/treeview/treeview.d.ts +497 -74
  89. package/src/treeview/treeview.js +2006 -409
  90. package/styles/accordion/_all.scss +0 -1
  91. package/styles/accordion/_bootstrap-dark-definition.scss +171 -67
  92. package/styles/accordion/_bootstrap-definition.scss +115 -11
  93. package/styles/accordion/_bootstrap4-definition.scss +182 -0
  94. package/styles/accordion/_bootstrap5-dark-definition.scss +1 -0
  95. package/styles/accordion/_bootstrap5-definition.scss +180 -0
  96. package/styles/accordion/_fabric-dark-definition.scss +171 -69
  97. package/styles/accordion/_fabric-definition.scss +119 -15
  98. package/styles/accordion/_fluent-dark-definition.scss +1 -0
  99. package/styles/accordion/_fluent-definition.scss +179 -0
  100. package/styles/accordion/_fusionnew-definition.scss +180 -0
  101. package/styles/accordion/_highcontrast-definition.scss +122 -23
  102. package/styles/accordion/_highcontrast-light-definition.scss +192 -95
  103. package/styles/accordion/_layout.scss +100 -162
  104. package/styles/accordion/_material-dark-definition.scss +173 -70
  105. package/styles/accordion/_material-definition.scss +115 -11
  106. package/styles/accordion/_tailwind-dark-definition.scss +1 -0
  107. package/styles/accordion/_tailwind-definition.scss +178 -0
  108. package/styles/accordion/_theme.scss +219 -224
  109. package/styles/accordion/bootstrap-dark.css +267 -181
  110. package/styles/accordion/bootstrap-dark.scss +1 -0
  111. package/styles/accordion/bootstrap.css +258 -172
  112. package/styles/accordion/bootstrap.scss +1 -0
  113. package/styles/accordion/bootstrap4.css +525 -0
  114. package/styles/accordion/bootstrap4.scss +4 -0
  115. package/styles/accordion/bootstrap5-dark.css +527 -0
  116. package/styles/accordion/bootstrap5-dark.scss +4 -0
  117. package/styles/accordion/bootstrap5.css +527 -0
  118. package/styles/accordion/bootstrap5.scss +4 -0
  119. package/styles/accordion/fabric-dark.css +266 -164
  120. package/styles/accordion/fabric-dark.scss +1 -0
  121. package/styles/accordion/fabric.css +266 -164
  122. package/styles/accordion/fabric.scss +1 -0
  123. package/styles/accordion/fluent-dark.css +526 -0
  124. package/styles/accordion/fluent-dark.scss +4 -0
  125. package/styles/accordion/fluent.css +526 -0
  126. package/styles/accordion/fluent.scss +4 -0
  127. package/styles/accordion/highcontrast-light.css +525 -0
  128. package/styles/accordion/highcontrast-light.scss +4 -0
  129. package/styles/accordion/highcontrast.css +243 -232
  130. package/styles/accordion/highcontrast.scss +1 -0
  131. package/styles/accordion/{_icons.scss → icons/_bootstrap-dark.scss} +3 -3
  132. package/styles/accordion/icons/_bootstrap.scss +17 -0
  133. package/styles/accordion/icons/_bootstrap4.scss +17 -0
  134. package/styles/accordion/icons/_bootstrap5-dark.scss +1 -0
  135. package/styles/accordion/icons/_bootstrap5.scss +17 -0
  136. package/styles/accordion/icons/_fabric-dark.scss +17 -0
  137. package/styles/accordion/icons/_fabric.scss +17 -0
  138. package/styles/accordion/icons/_fluent-dark.scss +1 -0
  139. package/styles/accordion/icons/_fluent.scss +17 -0
  140. package/styles/accordion/icons/_fusionnew.scss +17 -0
  141. package/styles/accordion/icons/_highcontrast-light.scss +17 -0
  142. package/styles/accordion/icons/_highcontrast.scss +17 -0
  143. package/styles/accordion/icons/_material-dark.scss +17 -0
  144. package/styles/accordion/icons/_material.scss +17 -0
  145. package/styles/accordion/icons/_material3.scss +17 -0
  146. package/styles/accordion/icons/_tailwind-dark.scss +1 -0
  147. package/styles/accordion/icons/_tailwind.scss +17 -0
  148. package/styles/accordion/material-dark.css +268 -173
  149. package/styles/accordion/material-dark.scss +1 -0
  150. package/styles/accordion/material.css +264 -169
  151. package/styles/accordion/material.scss +1 -0
  152. package/styles/accordion/tailwind-dark.css +527 -0
  153. package/styles/accordion/tailwind-dark.scss +4 -0
  154. package/styles/accordion/tailwind.css +527 -0
  155. package/styles/accordion/tailwind.scss +4 -0
  156. package/styles/appbar/_all.scss +2 -0
  157. package/styles/appbar/_bootstrap-dark-definition.scss +8 -0
  158. package/styles/appbar/_bootstrap-definition.scss +8 -0
  159. package/styles/appbar/_bootstrap4-definition.scss +8 -0
  160. package/styles/appbar/_bootstrap5-dark-definition.scss +1 -0
  161. package/styles/appbar/_bootstrap5-definition.scss +8 -0
  162. package/styles/appbar/_fabric-dark-definition.scss +8 -0
  163. package/styles/appbar/_fabric-definition.scss +8 -0
  164. package/styles/appbar/_fluent-dark-definition.scss +1 -0
  165. package/styles/appbar/_fluent-definition.scss +8 -0
  166. package/styles/appbar/_fusionnew-definition.scss +8 -0
  167. package/styles/appbar/_highcontrast-definition.scss +8 -0
  168. package/styles/appbar/_highcontrast-light-definition.scss +8 -0
  169. package/styles/appbar/_layout.scss +84 -0
  170. package/styles/appbar/_material-dark-definition.scss +8 -0
  171. package/styles/appbar/_material-definition.scss +8 -0
  172. package/styles/appbar/_tailwind-dark-definition.scss +1 -0
  173. package/styles/appbar/_tailwind-definition.scss +8 -0
  174. package/styles/appbar/_theme.scss +208 -0
  175. package/styles/appbar/bootstrap-dark.css +247 -0
  176. package/styles/appbar/bootstrap-dark.scss +3 -0
  177. package/styles/appbar/bootstrap.css +247 -0
  178. package/styles/appbar/bootstrap.scss +3 -0
  179. package/styles/appbar/bootstrap4.css +247 -0
  180. package/styles/appbar/bootstrap4.scss +3 -0
  181. package/styles/appbar/bootstrap5-dark.css +247 -0
  182. package/styles/appbar/bootstrap5-dark.scss +3 -0
  183. package/styles/appbar/bootstrap5.css +247 -0
  184. package/styles/appbar/bootstrap5.scss +3 -0
  185. package/styles/appbar/fabric-dark.css +247 -0
  186. package/styles/appbar/fabric-dark.scss +3 -0
  187. package/styles/appbar/fabric.css +247 -0
  188. package/styles/appbar/fabric.scss +3 -0
  189. package/styles/appbar/fluent-dark.css +247 -0
  190. package/styles/appbar/fluent-dark.scss +3 -0
  191. package/styles/appbar/fluent.css +247 -0
  192. package/styles/appbar/fluent.scss +3 -0
  193. package/styles/appbar/highcontrast-light.css +247 -0
  194. package/styles/appbar/highcontrast-light.scss +3 -0
  195. package/styles/appbar/highcontrast.css +247 -0
  196. package/styles/appbar/highcontrast.scss +3 -0
  197. package/styles/appbar/material-dark.css +248 -0
  198. package/styles/appbar/material-dark.scss +3 -0
  199. package/styles/appbar/material.css +248 -0
  200. package/styles/appbar/material.scss +3 -0
  201. package/styles/appbar/tailwind-dark.css +248 -0
  202. package/styles/appbar/tailwind-dark.scss +3 -0
  203. package/styles/appbar/tailwind.css +248 -0
  204. package/styles/appbar/tailwind.scss +3 -0
  205. package/styles/bootstrap-dark.css +5500 -3485
  206. package/styles/bootstrap-dark.scss +4 -0
  207. package/styles/bootstrap.css +5417 -3557
  208. package/styles/bootstrap.scss +4 -0
  209. package/styles/bootstrap4.css +10166 -0
  210. package/styles/bootstrap4.scss +13 -0
  211. package/styles/bootstrap5-dark.css +10207 -0
  212. package/styles/bootstrap5-dark.scss +13 -0
  213. package/styles/bootstrap5.css +10207 -0
  214. package/styles/bootstrap5.scss +13 -0
  215. package/styles/breadcrumb/_all.scss +3 -0
  216. package/styles/breadcrumb/_bootstrap-dark-definition.scss +54 -0
  217. package/styles/breadcrumb/_bootstrap-definition.scss +54 -0
  218. package/styles/breadcrumb/_bootstrap4-definition.scss +54 -0
  219. package/styles/breadcrumb/_bootstrap5-dark-definition.scss +1 -0
  220. package/styles/breadcrumb/_bootstrap5-definition.scss +59 -0
  221. package/styles/breadcrumb/_fabric-dark-definition.scss +59 -0
  222. package/styles/breadcrumb/_fabric-definition.scss +59 -0
  223. package/styles/breadcrumb/_fluent-dark-definition.scss +1 -0
  224. package/styles/breadcrumb/_fluent-definition.scss +62 -0
  225. package/styles/breadcrumb/_fusionnew-definition.scss +59 -0
  226. package/styles/breadcrumb/_highcontrast-definition.scss +61 -0
  227. package/styles/breadcrumb/_highcontrast-light-definition.scss +61 -0
  228. package/styles/breadcrumb/_layout.scss +491 -0
  229. package/styles/breadcrumb/_material-dark-definition.scss +50 -0
  230. package/styles/breadcrumb/_material-definition.scss +50 -0
  231. package/styles/breadcrumb/_tailwind-dark-definition.scss +1 -0
  232. package/styles/breadcrumb/_tailwind-definition.scss +60 -0
  233. package/styles/breadcrumb/_theme.scss +176 -0
  234. package/styles/breadcrumb/bootstrap-dark.css +395 -0
  235. package/styles/breadcrumb/bootstrap-dark.scss +4 -0
  236. package/styles/breadcrumb/bootstrap.css +395 -0
  237. package/styles/breadcrumb/bootstrap.scss +4 -0
  238. package/styles/breadcrumb/bootstrap4.css +395 -0
  239. package/styles/breadcrumb/bootstrap4.scss +4 -0
  240. package/styles/breadcrumb/bootstrap5-dark.css +409 -0
  241. package/styles/breadcrumb/bootstrap5-dark.scss +4 -0
  242. package/styles/breadcrumb/bootstrap5.css +409 -0
  243. package/styles/breadcrumb/bootstrap5.scss +4 -0
  244. package/styles/breadcrumb/fabric-dark.css +395 -0
  245. package/styles/breadcrumb/fabric-dark.scss +4 -0
  246. package/styles/breadcrumb/fabric.css +395 -0
  247. package/styles/breadcrumb/fabric.scss +4 -0
  248. package/styles/breadcrumb/fluent-dark.css +371 -0
  249. package/styles/breadcrumb/fluent-dark.scss +4 -0
  250. package/styles/breadcrumb/fluent.css +371 -0
  251. package/styles/breadcrumb/fluent.scss +4 -0
  252. package/styles/breadcrumb/highcontrast-light.css +402 -0
  253. package/styles/breadcrumb/highcontrast-light.scss +4 -0
  254. package/styles/breadcrumb/highcontrast.css +402 -0
  255. package/styles/breadcrumb/highcontrast.scss +4 -0
  256. package/styles/breadcrumb/icons/_bootstrap-dark.scss +14 -0
  257. package/styles/breadcrumb/icons/_bootstrap.scss +14 -0
  258. package/styles/breadcrumb/icons/_bootstrap4.scss +14 -0
  259. package/styles/breadcrumb/icons/_bootstrap5-dark.scss +1 -0
  260. package/styles/breadcrumb/icons/_bootstrap5.scss +25 -0
  261. package/styles/breadcrumb/icons/_fabric-dark.scss +14 -0
  262. package/styles/breadcrumb/icons/_fabric.scss +14 -0
  263. package/styles/breadcrumb/icons/_fluent-dark.scss +1 -0
  264. package/styles/breadcrumb/icons/_fluent.scss +25 -0
  265. package/styles/breadcrumb/icons/_fusionnew.scss +25 -0
  266. package/styles/breadcrumb/icons/_highcontrast-light.scss +14 -0
  267. package/styles/breadcrumb/icons/_highcontrast.scss +14 -0
  268. package/styles/breadcrumb/icons/_material-dark.scss +25 -0
  269. package/styles/breadcrumb/icons/_material.scss +25 -0
  270. package/styles/breadcrumb/icons/_material3.scss +25 -0
  271. package/styles/breadcrumb/icons/_tailwind-dark.scss +25 -0
  272. package/styles/breadcrumb/icons/_tailwind.scss +25 -0
  273. package/styles/breadcrumb/material-dark.css +379 -0
  274. package/styles/breadcrumb/material-dark.scss +4 -0
  275. package/styles/breadcrumb/material.css +379 -0
  276. package/styles/breadcrumb/material.scss +4 -0
  277. package/styles/breadcrumb/tailwind-dark.css +402 -0
  278. package/styles/breadcrumb/tailwind-dark.scss +4 -0
  279. package/styles/breadcrumb/tailwind.css +402 -0
  280. package/styles/breadcrumb/tailwind.scss +4 -0
  281. package/styles/carousel/_all.scss +2 -0
  282. package/styles/carousel/_bootstrap-dark-definition.scss +22 -0
  283. package/styles/carousel/_bootstrap-definition.scss +22 -0
  284. package/styles/carousel/_bootstrap4-definition.scss +22 -0
  285. package/styles/carousel/_bootstrap5-dark-definition.scss +1 -0
  286. package/styles/carousel/_bootstrap5-definition.scss +22 -0
  287. package/styles/carousel/_fabric-dark-definition.scss +22 -0
  288. package/styles/carousel/_fabric-definition.scss +22 -0
  289. package/styles/carousel/_fluent-dark-definition.scss +1 -0
  290. package/styles/carousel/_fluent-definition.scss +22 -0
  291. package/styles/carousel/_fusionnew-definition.scss +22 -0
  292. package/styles/carousel/_highcontrast-definition.scss +22 -0
  293. package/styles/carousel/_highcontrast-light-definition.scss +22 -0
  294. package/styles/carousel/_layout.scss +225 -0
  295. package/styles/carousel/_material-dark-definition.scss +22 -0
  296. package/styles/carousel/_material-definition.scss +22 -0
  297. package/styles/carousel/_tailwind-dark-definition.scss +1 -0
  298. package/styles/carousel/_tailwind-definition.scss +22 -0
  299. package/styles/carousel/_theme.scss +56 -0
  300. package/styles/carousel/bootstrap-dark.css +264 -0
  301. package/styles/carousel/bootstrap-dark.scss +5 -0
  302. package/styles/carousel/bootstrap.css +264 -0
  303. package/styles/carousel/bootstrap.scss +5 -0
  304. package/styles/carousel/bootstrap4.css +264 -0
  305. package/styles/carousel/bootstrap4.scss +5 -0
  306. package/styles/carousel/bootstrap5-dark.css +264 -0
  307. package/styles/carousel/bootstrap5-dark.scss +5 -0
  308. package/styles/carousel/bootstrap5.css +264 -0
  309. package/styles/carousel/bootstrap5.scss +5 -0
  310. package/styles/carousel/fabric-dark.css +264 -0
  311. package/styles/carousel/fabric-dark.scss +5 -0
  312. package/styles/carousel/fabric.css +264 -0
  313. package/styles/carousel/fabric.scss +5 -0
  314. package/styles/carousel/fluent-dark.css +264 -0
  315. package/styles/carousel/fluent-dark.scss +5 -0
  316. package/styles/carousel/fluent.css +264 -0
  317. package/styles/carousel/fluent.scss +5 -0
  318. package/styles/carousel/highcontrast-light.css +264 -0
  319. package/styles/carousel/highcontrast-light.scss +5 -0
  320. package/styles/carousel/highcontrast.css +264 -0
  321. package/styles/carousel/highcontrast.scss +5 -0
  322. package/styles/carousel/icons/_bootstrap-dark.scss +30 -0
  323. package/styles/carousel/icons/_bootstrap.scss +30 -0
  324. package/styles/carousel/icons/_bootstrap4.scss +30 -0
  325. package/styles/carousel/icons/_bootstrap5-dark.scss +1 -0
  326. package/styles/carousel/icons/_bootstrap5.scss +30 -0
  327. package/styles/carousel/icons/_fabric-dark.scss +30 -0
  328. package/styles/carousel/icons/_fabric.scss +30 -0
  329. package/styles/carousel/icons/_fluent-dark.scss +1 -0
  330. package/styles/carousel/icons/_fluent.scss +30 -0
  331. package/styles/carousel/icons/_fusionnew.scss +30 -0
  332. package/styles/carousel/icons/_highcontrast-light.scss +30 -0
  333. package/styles/carousel/icons/_highcontrast.scss +30 -0
  334. package/styles/carousel/icons/_material-dark.scss +30 -0
  335. package/styles/carousel/icons/_material.scss +30 -0
  336. package/styles/carousel/icons/_material3.scss +30 -0
  337. package/styles/carousel/icons/_tailwind-dark.scss +1 -0
  338. package/styles/carousel/icons/_tailwind.scss +30 -0
  339. package/styles/carousel/material-dark.css +265 -0
  340. package/styles/carousel/material-dark.scss +5 -0
  341. package/styles/carousel/material.css +265 -0
  342. package/styles/carousel/material.scss +5 -0
  343. package/styles/carousel/tailwind-dark.css +265 -0
  344. package/styles/carousel/tailwind-dark.scss +5 -0
  345. package/styles/carousel/tailwind.css +265 -0
  346. package/styles/carousel/tailwind.scss +5 -0
  347. package/styles/context-menu/_bootstrap-dark-definition.scss +49 -50
  348. package/styles/context-menu/_bootstrap-definition.scss +1 -3
  349. package/styles/context-menu/_bootstrap4-definition.scss +50 -0
  350. package/styles/context-menu/_bootstrap5-dark-definition.scss +1 -0
  351. package/styles/context-menu/_bootstrap5-definition.scss +52 -0
  352. package/styles/context-menu/_fabric-dark-definition.scss +49 -50
  353. package/styles/context-menu/_fabric-definition.scss +0 -2
  354. package/styles/context-menu/_fluent-dark-definition.scss +1 -0
  355. package/styles/context-menu/_fluent-definition.scss +52 -0
  356. package/styles/context-menu/_fusionnew-definition.scss +52 -0
  357. package/styles/context-menu/_highcontrast-definition.scss +0 -2
  358. package/styles/context-menu/_highcontrast-light-definition.scss +2 -3
  359. package/styles/context-menu/_layout-mixin.scss +19 -14
  360. package/styles/context-menu/_layout.scss +88 -5
  361. package/styles/context-menu/_material-dark-definition.scss +49 -50
  362. package/styles/context-menu/_material-definition.scss +3 -5
  363. package/styles/context-menu/_tailwind-dark-definition.scss +1 -0
  364. package/styles/context-menu/_tailwind-definition.scss +53 -0
  365. package/styles/context-menu/_theme-mixin.scss +16 -12
  366. package/styles/context-menu/_theme.scss +15 -1
  367. package/styles/context-menu/bootstrap-dark.css +203 -112
  368. package/styles/context-menu/bootstrap-dark.scss +3 -0
  369. package/styles/context-menu/bootstrap.css +203 -111
  370. package/styles/context-menu/bootstrap.scss +3 -0
  371. package/styles/context-menu/bootstrap4.css +367 -0
  372. package/styles/context-menu/bootstrap4.scss +7 -0
  373. package/styles/context-menu/bootstrap5-dark.css +355 -0
  374. package/styles/context-menu/bootstrap5-dark.scss +7 -0
  375. package/styles/context-menu/bootstrap5.css +355 -0
  376. package/styles/context-menu/bootstrap5.scss +7 -0
  377. package/styles/context-menu/fabric-dark.css +204 -113
  378. package/styles/context-menu/fabric-dark.scss +3 -0
  379. package/styles/context-menu/fabric.css +202 -110
  380. package/styles/context-menu/fabric.scss +3 -0
  381. package/styles/context-menu/fluent-dark.css +363 -0
  382. package/styles/context-menu/fluent-dark.scss +7 -0
  383. package/styles/context-menu/fluent.css +363 -0
  384. package/styles/context-menu/fluent.scss +7 -0
  385. package/styles/context-menu/highcontrast-light.css +366 -0
  386. package/styles/context-menu/highcontrast-light.scss +7 -0
  387. package/styles/context-menu/highcontrast.css +202 -110
  388. package/styles/context-menu/highcontrast.scss +3 -0
  389. package/styles/context-menu/icons/_bootstrap-dark.scss +5 -2
  390. package/styles/context-menu/icons/_bootstrap.scss +5 -2
  391. package/styles/context-menu/icons/_bootstrap4.scss +33 -0
  392. package/styles/context-menu/icons/_bootstrap5-dark.scss +1 -0
  393. package/styles/context-menu/icons/_bootstrap5.scss +33 -0
  394. package/styles/context-menu/icons/_fabric-dark.scss +5 -2
  395. package/styles/context-menu/icons/_fabric.scss +5 -2
  396. package/styles/context-menu/icons/_fluent-dark.scss +1 -0
  397. package/styles/context-menu/icons/_fluent.scss +33 -0
  398. package/styles/context-menu/icons/_fusionnew.scss +33 -0
  399. package/styles/context-menu/icons/_highcontrast-light.scss +5 -2
  400. package/styles/context-menu/icons/_highcontrast.scss +5 -2
  401. package/styles/context-menu/icons/_material-dark.scss +5 -2
  402. package/styles/context-menu/icons/_material.scss +5 -2
  403. package/styles/context-menu/icons/_material3.scss +33 -0
  404. package/styles/context-menu/icons/_tailwind-dark.scss +33 -0
  405. package/styles/context-menu/icons/_tailwind.scss +33 -0
  406. package/styles/context-menu/material-dark.css +221 -112
  407. package/styles/context-menu/material-dark.scss +3 -0
  408. package/styles/context-menu/material.css +225 -114
  409. package/styles/context-menu/material.scss +3 -0
  410. package/styles/context-menu/tailwind-dark.css +380 -0
  411. package/styles/context-menu/tailwind-dark.scss +7 -0
  412. package/styles/context-menu/tailwind.css +380 -0
  413. package/styles/context-menu/tailwind.scss +7 -0
  414. package/styles/fabric-dark.css +6281 -4215
  415. package/styles/fabric-dark.scss +4 -0
  416. package/styles/fabric.css +5956 -4045
  417. package/styles/fabric.scss +4 -0
  418. package/styles/fluent-dark.css +10172 -0
  419. package/styles/fluent-dark.scss +13 -0
  420. package/styles/fluent.css +10172 -0
  421. package/styles/fluent.scss +13 -0
  422. package/styles/h-scroll/_all.scss +1 -1
  423. package/styles/h-scroll/_bootstrap-dark-definition.scss +46 -40
  424. package/styles/h-scroll/_bootstrap-definition.scss +14 -7
  425. package/styles/h-scroll/_bootstrap4-definition.scss +56 -0
  426. package/styles/h-scroll/_bootstrap5-dark-definition.scss +1 -0
  427. package/styles/h-scroll/_bootstrap5-definition.scss +83 -0
  428. package/styles/h-scroll/_fabric-dark-definition.scss +48 -42
  429. package/styles/h-scroll/_fabric-definition.scss +17 -9
  430. package/styles/h-scroll/_fluent-dark-definition.scss +1 -0
  431. package/styles/h-scroll/_fluent-definition.scss +83 -0
  432. package/styles/h-scroll/_fusionnew-definition.scss +83 -0
  433. package/styles/h-scroll/_highcontrast-definition.scss +15 -17
  434. package/styles/h-scroll/_highcontrast-light-definition.scss +49 -46
  435. package/styles/h-scroll/_layout.scss +15 -15
  436. package/styles/h-scroll/_material-dark-definition.scss +56 -51
  437. package/styles/h-scroll/_material-definition.scss +21 -15
  438. package/styles/h-scroll/_tailwind-dark-definition.scss +1 -0
  439. package/styles/h-scroll/_tailwind-definition.scss +83 -0
  440. package/styles/h-scroll/_theme.scss +15 -29
  441. package/styles/h-scroll/bootstrap-dark.css +53 -66
  442. package/styles/h-scroll/bootstrap-dark.scss +1 -0
  443. package/styles/h-scroll/bootstrap.css +32 -80
  444. package/styles/h-scroll/bootstrap4.css +260 -0
  445. package/styles/h-scroll/bootstrap4.scss +4 -0
  446. package/styles/h-scroll/bootstrap5-dark.css +280 -0
  447. package/styles/h-scroll/bootstrap5-dark.scss +4 -0
  448. package/styles/h-scroll/bootstrap5.css +280 -0
  449. package/styles/h-scroll/bootstrap5.scss +4 -0
  450. package/styles/h-scroll/fabric-dark.css +54 -67
  451. package/styles/h-scroll/fabric-dark.scss +1 -0
  452. package/styles/h-scroll/fabric.css +32 -80
  453. package/styles/h-scroll/fluent-dark.css +280 -0
  454. package/styles/h-scroll/fluent-dark.scss +4 -0
  455. package/styles/h-scroll/fluent.css +280 -0
  456. package/styles/h-scroll/fluent.scss +4 -0
  457. package/styles/h-scroll/highcontrast-light.css +259 -0
  458. package/styles/h-scroll/highcontrast-light.scss +4 -0
  459. package/styles/h-scroll/highcontrast.css +26 -89
  460. package/styles/h-scroll/{_icons.scss → icons/_bootstrap-dark.scss} +13 -13
  461. package/styles/h-scroll/icons/_bootstrap.scss +3 -4
  462. package/styles/h-scroll/icons/_bootstrap4.scss +49 -0
  463. package/styles/h-scroll/icons/_bootstrap5-dark.scss +1 -0
  464. package/styles/h-scroll/icons/_bootstrap5.scss +49 -0
  465. package/styles/h-scroll/icons/_fabric-dark.scss +49 -0
  466. package/styles/h-scroll/icons/_fabric.scss +5 -5
  467. package/styles/h-scroll/icons/_fluent-dark.scss +1 -0
  468. package/styles/h-scroll/icons/_fluent.scss +49 -0
  469. package/styles/h-scroll/icons/_fusionnew.scss +49 -0
  470. package/styles/h-scroll/icons/_highcontrast-light.scss +49 -0
  471. package/styles/h-scroll/icons/_highcontrast.scss +5 -5
  472. package/styles/h-scroll/icons/_material-dark.scss +49 -0
  473. package/styles/h-scroll/icons/_material.scss +3 -3
  474. package/styles/h-scroll/icons/_material3.scss +49 -0
  475. package/styles/h-scroll/icons/_tailwind-dark.scss +1 -0
  476. package/styles/h-scroll/icons/_tailwind.scss +49 -0
  477. package/styles/h-scroll/material-dark.css +56 -70
  478. package/styles/h-scroll/material-dark.scss +1 -0
  479. package/styles/h-scroll/material.css +33 -82
  480. package/styles/h-scroll/tailwind-dark.css +281 -0
  481. package/styles/h-scroll/tailwind-dark.scss +4 -0
  482. package/styles/h-scroll/tailwind.css +281 -0
  483. package/styles/h-scroll/tailwind.scss +4 -0
  484. package/styles/highcontrast-light.css +10029 -0
  485. package/styles/highcontrast-light.scss +13 -0
  486. package/styles/highcontrast.css +6035 -4466
  487. package/styles/highcontrast.scss +4 -0
  488. package/styles/material-dark.css +7913 -5586
  489. package/styles/material-dark.scss +4 -0
  490. package/styles/material.css +5982 -3808
  491. package/styles/material.scss +4 -0
  492. package/styles/menu/_bootstrap-dark-definition.scss +29 -21
  493. package/styles/menu/_bootstrap-definition.scss +8 -1
  494. package/styles/menu/_bootstrap4-definition.scss +64 -0
  495. package/styles/menu/_bootstrap5-dark-definition.scss +1 -0
  496. package/styles/menu/_bootstrap5-definition.scss +67 -0
  497. package/styles/menu/_fabric-dark-definition.scss +30 -22
  498. package/styles/menu/_fabric-definition.scss +8 -1
  499. package/styles/menu/_fluent-dark-definition.scss +1 -0
  500. package/styles/menu/_fluent-definition.scss +67 -0
  501. package/styles/menu/_fusionnew-definition.scss +67 -0
  502. package/styles/menu/_highcontrast-definition.scss +9 -2
  503. package/styles/menu/_highcontrast-light-definition.scss +8 -1
  504. package/styles/menu/_layout.scss +360 -39
  505. package/styles/menu/_material-dark-definition.scss +27 -19
  506. package/styles/menu/_material-definition.scss +7 -0
  507. package/styles/menu/_tailwind-dark-definition.scss +1 -0
  508. package/styles/menu/_tailwind-definition.scss +66 -0
  509. package/styles/menu/_theme.scss +199 -15
  510. package/styles/menu/bootstrap-dark.css +715 -320
  511. package/styles/menu/bootstrap.css +696 -302
  512. package/styles/menu/bootstrap.scss +1 -0
  513. package/styles/menu/bootstrap4.css +1126 -0
  514. package/styles/menu/bootstrap4.scss +8 -0
  515. package/styles/menu/bootstrap5-dark.css +1083 -0
  516. package/styles/menu/bootstrap5-dark.scss +8 -0
  517. package/styles/menu/bootstrap5.css +1083 -0
  518. package/styles/menu/bootstrap5.scss +8 -0
  519. package/styles/menu/fabric-dark.css +714 -319
  520. package/styles/menu/fabric.css +694 -299
  521. package/styles/menu/fabric.scss +1 -0
  522. package/styles/menu/fluent-dark.css +1106 -0
  523. package/styles/menu/fluent-dark.scss +8 -0
  524. package/styles/menu/fluent.css +1106 -0
  525. package/styles/menu/fluent.scss +8 -0
  526. package/styles/menu/highcontrast-light.css +1088 -0
  527. package/styles/menu/highcontrast-light.scss +8 -0
  528. package/styles/menu/highcontrast.css +696 -301
  529. package/styles/menu/highcontrast.scss +1 -0
  530. package/styles/menu/icons/_bootstrap-dark.scss +58 -3
  531. package/styles/menu/icons/_bootstrap.scss +58 -3
  532. package/styles/menu/icons/_bootstrap4.scss +134 -0
  533. package/styles/menu/icons/_bootstrap5-dark.scss +1 -0
  534. package/styles/menu/icons/_bootstrap5.scss +134 -0
  535. package/styles/menu/icons/_fabric-dark.scss +62 -7
  536. package/styles/menu/icons/_fabric.scss +62 -7
  537. package/styles/menu/icons/_fluent-dark.scss +1 -0
  538. package/styles/menu/icons/_fluent.scss +134 -0
  539. package/styles/menu/icons/_fusionnew.scss +134 -0
  540. package/styles/menu/icons/_highcontrast-light.scss +58 -3
  541. package/styles/menu/icons/_highcontrast.scss +58 -3
  542. package/styles/menu/icons/_material-dark.scss +58 -3
  543. package/styles/menu/icons/_material.scss +58 -3
  544. package/styles/menu/icons/_material3.scss +134 -0
  545. package/styles/menu/icons/_tailwind-dark.scss +134 -0
  546. package/styles/menu/icons/_tailwind.scss +134 -0
  547. package/styles/menu/material-dark.css +713 -320
  548. package/styles/menu/material.css +697 -304
  549. package/styles/menu/material.scss +1 -0
  550. package/styles/menu/tailwind-dark.css +1102 -0
  551. package/styles/menu/tailwind-dark.scss +8 -0
  552. package/styles/menu/tailwind.css +1102 -0
  553. package/styles/menu/tailwind.scss +8 -0
  554. package/styles/pager/_all.scss +2 -0
  555. package/styles/pager/_bootstrap-dark-definition.scss +131 -0
  556. package/styles/pager/_bootstrap-definition.scss +131 -0
  557. package/styles/pager/_bootstrap4-definition.scss +131 -0
  558. package/styles/pager/_bootstrap5-dark-definition.scss +1 -0
  559. package/styles/pager/_bootstrap5-definition.scss +146 -0
  560. package/styles/pager/_fabric-dark-definition.scss +131 -0
  561. package/styles/pager/_fabric-definition.scss +129 -0
  562. package/styles/pager/_fluent-dark-definition.scss +1 -0
  563. package/styles/pager/_fluent-definition.scss +133 -0
  564. package/styles/pager/_fusionnew-definition.scss +146 -0
  565. package/styles/pager/_highcontrast-definition.scss +129 -0
  566. package/styles/pager/_highcontrast-light-definition.scss +131 -0
  567. package/styles/pager/_layout.scss +896 -0
  568. package/styles/pager/_material-dark-definition.scss +132 -0
  569. package/styles/pager/_material-definition.scss +130 -0
  570. package/styles/pager/_tailwind-dark-definition.scss +1 -0
  571. package/styles/pager/_tailwind-definition.scss +132 -0
  572. package/styles/pager/_theme.scss +152 -0
  573. package/styles/pager/bootstrap-dark.css +688 -0
  574. package/styles/pager/bootstrap-dark.scss +4 -0
  575. package/styles/pager/bootstrap.css +688 -0
  576. package/styles/pager/bootstrap.scss +4 -0
  577. package/styles/pager/bootstrap4.css +688 -0
  578. package/styles/pager/bootstrap4.scss +4 -0
  579. package/styles/pager/bootstrap5-dark.css +723 -0
  580. package/styles/pager/bootstrap5-dark.scss +4 -0
  581. package/styles/pager/bootstrap5.css +723 -0
  582. package/styles/pager/bootstrap5.scss +4 -0
  583. package/styles/pager/fabric-dark.css +688 -0
  584. package/styles/pager/fabric-dark.scss +4 -0
  585. package/styles/pager/fabric.css +688 -0
  586. package/styles/pager/fabric.scss +4 -0
  587. package/styles/pager/fluent-dark.css +690 -0
  588. package/styles/pager/fluent-dark.scss +4 -0
  589. package/styles/pager/fluent.css +690 -0
  590. package/styles/pager/fluent.scss +4 -0
  591. package/styles/pager/highcontrast-light.css +688 -0
  592. package/styles/pager/highcontrast-light.scss +4 -0
  593. package/styles/pager/highcontrast.css +688 -0
  594. package/styles/pager/highcontrast.scss +4 -0
  595. package/styles/pager/icons/_bootstrap-dark.scss +50 -0
  596. package/styles/pager/icons/_bootstrap.scss +50 -0
  597. package/styles/pager/icons/_bootstrap4.scss +50 -0
  598. package/styles/pager/icons/_bootstrap5-dark.scss +1 -0
  599. package/styles/pager/icons/_bootstrap5.scss +50 -0
  600. package/styles/pager/icons/_fabric-dark.scss +50 -0
  601. package/styles/pager/icons/_fabric.scss +50 -0
  602. package/styles/pager/icons/_fluent-dark.scss +1 -0
  603. package/styles/pager/icons/_fluent.scss +50 -0
  604. package/styles/pager/icons/_fusionnew.scss +50 -0
  605. package/styles/pager/icons/_highcontrast-light.scss +50 -0
  606. package/styles/pager/icons/_highcontrast.scss +46 -0
  607. package/styles/pager/icons/_material-dark.scss +50 -0
  608. package/styles/pager/icons/_material.scss +46 -0
  609. package/styles/pager/icons/_material3.scss +50 -0
  610. package/styles/pager/icons/_tailwind-dark.scss +1 -0
  611. package/styles/pager/icons/_tailwind.scss +50 -0
  612. package/styles/pager/material-dark.css +689 -0
  613. package/styles/pager/material-dark.scss +4 -0
  614. package/styles/pager/material.css +689 -0
  615. package/styles/pager/material.scss +4 -0
  616. package/styles/pager/tailwind-dark.css +815 -0
  617. package/styles/pager/tailwind-dark.scss +4 -0
  618. package/styles/pager/tailwind.css +815 -0
  619. package/styles/pager/tailwind.scss +4 -0
  620. package/styles/sidebar/_bootstrap4-definition.scss +4 -0
  621. package/styles/sidebar/_bootstrap5-dark-definition.scss +1 -0
  622. package/styles/sidebar/_bootstrap5-definition.scss +6 -0
  623. package/styles/sidebar/_fabric-definition.scss +0 -2
  624. package/styles/sidebar/_fluent-dark-definition.scss +1 -0
  625. package/styles/sidebar/_fluent-definition.scss +6 -0
  626. package/styles/sidebar/_fusionnew-definition.scss +6 -0
  627. package/styles/sidebar/_highcontrast-definition.scss +1 -1
  628. package/styles/sidebar/_icons.scss +1 -1
  629. package/styles/sidebar/_layout.scss +1 -0
  630. package/styles/sidebar/_tailwind-dark-definition.scss +1 -0
  631. package/styles/sidebar/_tailwind-definition.scss +6 -0
  632. package/styles/sidebar/_theme.scss +56 -34
  633. package/styles/sidebar/bootstrap-dark.css +29 -25
  634. package/styles/sidebar/bootstrap.css +29 -25
  635. package/styles/sidebar/bootstrap4.css +149 -0
  636. package/styles/sidebar/bootstrap4.scss +3 -0
  637. package/styles/sidebar/bootstrap5-dark.css +147 -0
  638. package/styles/sidebar/bootstrap5-dark.scss +3 -0
  639. package/styles/sidebar/bootstrap5.css +147 -0
  640. package/styles/sidebar/bootstrap5.scss +3 -0
  641. package/styles/sidebar/fabric-dark.css +29 -25
  642. package/styles/sidebar/fabric.css +29 -25
  643. package/styles/sidebar/fluent-dark.css +147 -0
  644. package/styles/sidebar/fluent-dark.scss +3 -0
  645. package/styles/sidebar/fluent.css +147 -0
  646. package/styles/sidebar/fluent.scss +3 -0
  647. package/styles/sidebar/highcontrast-light.css +149 -0
  648. package/styles/sidebar/highcontrast-light.scss +3 -0
  649. package/styles/sidebar/highcontrast.css +30 -26
  650. package/styles/sidebar/material-dark.css +29 -25
  651. package/styles/sidebar/material.css +29 -25
  652. package/styles/sidebar/tailwind-dark.css +148 -0
  653. package/styles/sidebar/tailwind-dark.scss +3 -0
  654. package/styles/sidebar/tailwind.css +148 -0
  655. package/styles/sidebar/tailwind.scss +3 -0
  656. package/styles/tab/_bootstrap-dark-definition.scss +632 -374
  657. package/styles/tab/_bootstrap-definition.scss +279 -13
  658. package/styles/tab/_bootstrap4-definition.scss +666 -0
  659. package/styles/tab/_bootstrap5-dark-definition.scss +1 -0
  660. package/styles/tab/_bootstrap5-definition.scss +656 -0
  661. package/styles/tab/_fabric-dark-definition.scss +644 -385
  662. package/styles/tab/_fabric-definition.scss +281 -15
  663. package/styles/tab/_fluent-dark-definition.scss +1 -0
  664. package/styles/tab/_fluent-definition.scss +664 -0
  665. package/styles/tab/_fusionnew-definition.scss +656 -0
  666. package/styles/tab/_highcontrast-definition.scss +283 -17
  667. package/styles/tab/_highcontrast-light-definition.scss +667 -411
  668. package/styles/tab/_icons.scss +1 -0
  669. package/styles/tab/_layout.scss +697 -753
  670. package/styles/tab/_material-dark-definition.scss +627 -370
  671. package/styles/tab/_material-definition.scss +277 -11
  672. package/styles/tab/_tailwind-dark-definition.scss +1 -0
  673. package/styles/tab/_tailwind-definition.scss +685 -0
  674. package/styles/tab/_theme.scss +402 -537
  675. package/styles/tab/bootstrap-dark.css +1226 -1067
  676. package/styles/tab/bootstrap-dark.scss +1 -0
  677. package/styles/tab/bootstrap.css +1173 -1106
  678. package/styles/tab/bootstrap4.css +4031 -0
  679. package/styles/tab/bootstrap4.scss +5 -0
  680. package/styles/tab/bootstrap5-dark.css +4029 -0
  681. package/styles/tab/bootstrap5-dark.scss +5 -0
  682. package/styles/tab/bootstrap5.css +4029 -0
  683. package/styles/tab/bootstrap5.scss +5 -0
  684. package/styles/tab/fabric-dark.css +1212 -1096
  685. package/styles/tab/fabric-dark.scss +1 -0
  686. package/styles/tab/fabric.css +1173 -1148
  687. package/styles/tab/fluent-dark.css +4031 -0
  688. package/styles/tab/fluent-dark.scss +5 -0
  689. package/styles/tab/fluent.css +4031 -0
  690. package/styles/tab/fluent.scss +5 -0
  691. package/styles/tab/highcontrast-light.css +4022 -0
  692. package/styles/tab/highcontrast-light.scss +5 -0
  693. package/styles/tab/highcontrast.css +1086 -1215
  694. package/styles/tab/icons/_bootstrap-dark.scss +108 -0
  695. package/styles/tab/icons/_bootstrap.scss +11 -35
  696. package/styles/tab/icons/_bootstrap4.scss +115 -0
  697. package/styles/tab/icons/_bootstrap5-dark.scss +1 -0
  698. package/styles/tab/icons/_bootstrap5.scss +104 -0
  699. package/styles/tab/icons/_fabric-dark.scss +108 -0
  700. package/styles/tab/icons/_fabric.scss +11 -35
  701. package/styles/tab/icons/_fluent-dark.scss +1 -0
  702. package/styles/tab/icons/_fluent.scss +108 -0
  703. package/styles/tab/icons/_fusionnew.scss +104 -0
  704. package/styles/tab/icons/_highcontrast-light.scss +104 -0
  705. package/styles/tab/icons/_highcontrast.scss +11 -28
  706. package/styles/tab/icons/_material-dark.scss +104 -0
  707. package/styles/tab/icons/_material.scss +9 -37
  708. package/styles/tab/icons/_material3.scss +104 -0
  709. package/styles/tab/icons/_tailwind-dark.scss +1 -0
  710. package/styles/tab/icons/_tailwind.scss +104 -0
  711. package/styles/tab/material-dark.css +1334 -955
  712. package/styles/tab/material-dark.scss +1 -0
  713. package/styles/tab/material.css +1280 -992
  714. package/styles/tab/tailwind-dark.css +4046 -0
  715. package/styles/tab/tailwind-dark.scss +5 -0
  716. package/styles/tab/tailwind.css +4046 -0
  717. package/styles/tab/tailwind.scss +5 -0
  718. package/styles/tailwind-dark.css +10351 -0
  719. package/styles/tailwind-dark.scss +13 -0
  720. package/styles/tailwind.css +10351 -0
  721. package/styles/tailwind.scss +13 -0
  722. package/styles/toolbar/_all.scss +1 -1
  723. package/styles/toolbar/_bootstrap-dark-definition.scss +193 -121
  724. package/styles/toolbar/_bootstrap-definition.scss +107 -34
  725. package/styles/toolbar/_bootstrap4-definition.scss +211 -0
  726. package/styles/toolbar/_bootstrap5-dark-definition.scss +1 -0
  727. package/styles/toolbar/_bootstrap5-definition.scss +220 -0
  728. package/styles/toolbar/_fabric-dark-definition.scss +208 -140
  729. package/styles/toolbar/_fabric-definition.scss +97 -28
  730. package/styles/toolbar/_fluent-dark-definition.scss +1 -0
  731. package/styles/toolbar/_fluent-definition.scss +210 -0
  732. package/styles/toolbar/_fusionnew-definition.scss +220 -0
  733. package/styles/toolbar/_highcontrast-definition.scss +99 -30
  734. package/styles/toolbar/_highcontrast-light-definition.scss +219 -149
  735. package/styles/toolbar/_layout.scss +690 -1087
  736. package/styles/toolbar/_material-dark-definition.scss +216 -148
  737. package/styles/toolbar/_material-definition.scss +117 -46
  738. package/styles/toolbar/_tailwind-dark-definition.scss +1 -0
  739. package/styles/toolbar/_tailwind-definition.scss +210 -0
  740. package/styles/toolbar/_theme.scss +246 -263
  741. package/styles/toolbar/bootstrap-dark.css +768 -1105
  742. package/styles/toolbar/bootstrap-dark.scss +1 -0
  743. package/styles/toolbar/bootstrap.css +761 -1111
  744. package/styles/toolbar/bootstrap.scss +1 -0
  745. package/styles/toolbar/bootstrap4.css +1071 -0
  746. package/styles/toolbar/bootstrap4.scss +8 -0
  747. package/styles/toolbar/bootstrap5-dark.css +1082 -0
  748. package/styles/toolbar/bootstrap5-dark.scss +8 -0
  749. package/styles/toolbar/bootstrap5.css +1082 -0
  750. package/styles/toolbar/bootstrap5.scss +8 -0
  751. package/styles/toolbar/fabric-dark.css +779 -1042
  752. package/styles/toolbar/fabric-dark.scss +1 -0
  753. package/styles/toolbar/fabric.css +767 -1041
  754. package/styles/toolbar/fabric.scss +1 -0
  755. package/styles/toolbar/fluent-dark.css +1081 -0
  756. package/styles/toolbar/fluent-dark.scss +8 -0
  757. package/styles/toolbar/fluent.css +1081 -0
  758. package/styles/toolbar/fluent.scss +8 -0
  759. package/styles/toolbar/highcontrast-light.css +1070 -0
  760. package/styles/toolbar/highcontrast-light.scss +8 -0
  761. package/styles/toolbar/highcontrast.css +744 -1089
  762. package/styles/toolbar/highcontrast.scss +1 -0
  763. package/styles/toolbar/icons/_bootstrap-dark.scss +16 -0
  764. package/styles/toolbar/icons/_bootstrap.scss +1 -1
  765. package/styles/toolbar/icons/_bootstrap4.scss +16 -0
  766. package/styles/toolbar/icons/_bootstrap5-dark.scss +1 -0
  767. package/styles/toolbar/icons/_bootstrap5.scss +16 -0
  768. package/styles/toolbar/icons/_fabric-dark.scss +16 -0
  769. package/styles/toolbar/icons/_fabric.scss +1 -1
  770. package/styles/toolbar/icons/_fluent-dark.scss +1 -0
  771. package/styles/toolbar/icons/_fluent.scss +16 -0
  772. package/styles/toolbar/icons/_fusionnew.scss +16 -0
  773. package/styles/toolbar/icons/_highcontrast-light.scss +16 -0
  774. package/styles/toolbar/icons/_highcontrast.scss +1 -1
  775. package/styles/toolbar/icons/_material-dark.scss +16 -0
  776. package/styles/toolbar/icons/_material.scss +1 -1
  777. package/styles/toolbar/icons/_material3.scss +16 -0
  778. package/styles/toolbar/icons/_tailwind-dark.scss +1 -0
  779. package/styles/toolbar/icons/_tailwind.scss +16 -0
  780. package/styles/toolbar/material-dark.css +747 -1010
  781. package/styles/toolbar/material-dark.scss +1 -0
  782. package/styles/toolbar/material.css +753 -1027
  783. package/styles/toolbar/material.scss +1 -0
  784. package/styles/toolbar/tailwind-dark.css +1082 -0
  785. package/styles/toolbar/tailwind-dark.scss +8 -0
  786. package/styles/toolbar/tailwind.css +1082 -0
  787. package/styles/toolbar/tailwind.scss +8 -0
  788. package/styles/treeview/_all.scss +1 -1
  789. package/styles/treeview/_bootstrap-dark-definition.scss +104 -117
  790. package/styles/treeview/_bootstrap-definition.scss +24 -38
  791. package/styles/treeview/_bootstrap4-definition.scss +141 -0
  792. package/styles/treeview/_bootstrap5-dark-definition.scss +1 -0
  793. package/styles/treeview/_bootstrap5-definition.scss +120 -0
  794. package/styles/treeview/_fabric-dark-definition.scss +102 -116
  795. package/styles/treeview/_fabric-definition.scss +24 -38
  796. package/styles/treeview/_fluent-dark-definition.scss +1 -0
  797. package/styles/treeview/_fluent-definition.scss +120 -0
  798. package/styles/treeview/_fusionnew-definition.scss +120 -0
  799. package/styles/treeview/_highcontrast-definition.scss +24 -38
  800. package/styles/treeview/_highcontrast-light-definition.scss +112 -126
  801. package/styles/treeview/_layout.scss +619 -28
  802. package/styles/treeview/_material-dark-definition.scss +104 -116
  803. package/styles/treeview/_material-definition.scss +25 -39
  804. package/styles/treeview/_tailwind-dark-definition.scss +1 -0
  805. package/styles/treeview/_tailwind-definition.scss +124 -0
  806. package/styles/treeview/_theme.scss +128 -27
  807. package/styles/treeview/bootstrap-dark.css +230 -172
  808. package/styles/treeview/bootstrap.css +230 -168
  809. package/styles/treeview/bootstrap4.css +829 -0
  810. package/styles/treeview/bootstrap4.scss +6 -0
  811. package/styles/treeview/bootstrap5-dark.css +847 -0
  812. package/styles/treeview/bootstrap5-dark.scss +6 -0
  813. package/styles/treeview/bootstrap5.css +847 -0
  814. package/styles/treeview/bootstrap5.scss +6 -0
  815. package/styles/treeview/fabric-dark.css +230 -168
  816. package/styles/treeview/fabric.css +230 -168
  817. package/styles/treeview/fluent-dark.css +852 -0
  818. package/styles/treeview/fluent-dark.scss +6 -0
  819. package/styles/treeview/fluent.css +852 -0
  820. package/styles/treeview/fluent.scss +6 -0
  821. package/styles/treeview/highcontrast-light.css +736 -0
  822. package/styles/treeview/highcontrast-light.scss +6 -0
  823. package/styles/treeview/highcontrast.css +230 -171
  824. package/styles/treeview/icons/_bootstrap-dark.scss +2 -2
  825. package/styles/treeview/icons/_bootstrap.scss +2 -2
  826. package/styles/treeview/icons/_bootstrap4.scss +39 -0
  827. package/styles/treeview/icons/_bootstrap5-dark.scss +1 -0
  828. package/styles/treeview/icons/_bootstrap5.scss +43 -0
  829. package/styles/treeview/icons/_fabric-dark.scss +2 -2
  830. package/styles/treeview/icons/_fabric.scss +2 -2
  831. package/styles/treeview/icons/_fluent-dark.scss +1 -0
  832. package/styles/treeview/icons/_fluent.scss +43 -0
  833. package/styles/treeview/icons/_fusionnew.scss +43 -0
  834. package/styles/treeview/icons/_highcontrast-light.scss +2 -2
  835. package/styles/treeview/icons/_highcontrast.scss +2 -2
  836. package/styles/treeview/icons/_material-dark.scss +2 -2
  837. package/styles/treeview/icons/_material.scss +2 -2
  838. package/styles/treeview/icons/_material3.scss +43 -0
  839. package/styles/treeview/icons/_tailwind-dark.scss +43 -0
  840. package/styles/treeview/icons/_tailwind.scss +43 -0
  841. package/styles/treeview/material-dark.css +242 -172
  842. package/styles/treeview/material.css +238 -167
  843. package/styles/treeview/tailwind-dark.css +840 -0
  844. package/styles/treeview/tailwind-dark.scss +6 -0
  845. package/styles/treeview/tailwind.css +840 -0
  846. package/styles/treeview/tailwind.scss +6 -0
  847. package/styles/v-scroll/_all.scss +1 -1
  848. package/styles/v-scroll/_bootstrap-dark-definition.scss +39 -38
  849. package/styles/v-scroll/_bootstrap-definition.scss +8 -8
  850. package/styles/v-scroll/_bootstrap4-definition.scss +49 -0
  851. package/styles/v-scroll/_bootstrap5-dark-definition.scss +1 -0
  852. package/styles/v-scroll/_bootstrap5-definition.scss +49 -0
  853. package/styles/v-scroll/_fabric-dark-definition.scss +41 -40
  854. package/styles/v-scroll/_fabric-definition.scss +10 -10
  855. package/styles/v-scroll/_fluent-dark-definition.scss +1 -0
  856. package/styles/v-scroll/_fluent-definition.scss +49 -0
  857. package/styles/v-scroll/_fusionnew-definition.scss +49 -0
  858. package/styles/v-scroll/_highcontrast-definition.scss +10 -11
  859. package/styles/v-scroll/_highcontrast-light-definition.scss +41 -41
  860. package/styles/v-scroll/_layout.scss +4 -4
  861. package/styles/v-scroll/_material-dark-definition.scss +46 -45
  862. package/styles/v-scroll/_material-definition.scss +10 -10
  863. package/styles/v-scroll/_tailwind-dark-definition.scss +1 -0
  864. package/styles/v-scroll/_tailwind-definition.scss +49 -0
  865. package/styles/v-scroll/_theme.scss +2 -27
  866. package/styles/v-scroll/bootstrap-dark.css +25 -51
  867. package/styles/v-scroll/bootstrap-dark.scss +1 -0
  868. package/styles/v-scroll/bootstrap.css +13 -58
  869. package/styles/v-scroll/bootstrap4.css +202 -0
  870. package/styles/v-scroll/bootstrap4.scss +4 -0
  871. package/styles/v-scroll/bootstrap5-dark.css +202 -0
  872. package/styles/v-scroll/bootstrap5-dark.scss +4 -0
  873. package/styles/v-scroll/bootstrap5.css +202 -0
  874. package/styles/v-scroll/bootstrap5.scss +4 -0
  875. package/styles/v-scroll/fabric-dark.css +26 -52
  876. package/styles/v-scroll/fabric-dark.scss +1 -0
  877. package/styles/v-scroll/fabric.css +14 -59
  878. package/styles/v-scroll/fluent-dark.css +202 -0
  879. package/styles/v-scroll/fluent-dark.scss +4 -0
  880. package/styles/v-scroll/fluent.css +202 -0
  881. package/styles/v-scroll/fluent.scss +4 -0
  882. package/styles/v-scroll/highcontrast-light.css +201 -0
  883. package/styles/v-scroll/highcontrast-light.scss +4 -0
  884. package/styles/v-scroll/highcontrast.css +14 -74
  885. package/styles/v-scroll/icons/_bootstrap-dark.scss +27 -0
  886. package/styles/v-scroll/icons/_bootstrap.scss +1 -1
  887. package/styles/v-scroll/icons/_bootstrap4.scss +27 -0
  888. package/styles/v-scroll/icons/_bootstrap5-dark.scss +1 -0
  889. package/styles/v-scroll/icons/_bootstrap5.scss +27 -0
  890. package/styles/v-scroll/icons/_fabric-dark.scss +27 -0
  891. package/styles/v-scroll/icons/_fabric.scss +3 -2
  892. package/styles/v-scroll/icons/_fluent-dark.scss +1 -0
  893. package/styles/v-scroll/icons/_fluent.scss +27 -0
  894. package/styles/v-scroll/icons/_fusionnew.scss +27 -0
  895. package/styles/v-scroll/icons/_highcontrast-light.scss +27 -0
  896. package/styles/v-scroll/icons/_highcontrast.scss +3 -2
  897. package/styles/v-scroll/{_icons.scss → icons/_material-dark.scss} +4 -3
  898. package/styles/v-scroll/icons/_material.scss +1 -0
  899. package/styles/v-scroll/icons/_material3.scss +27 -0
  900. package/styles/v-scroll/icons/_tailwind-dark.scss +1 -0
  901. package/styles/v-scroll/icons/_tailwind.scss +27 -0
  902. package/styles/v-scroll/material-dark.css +23 -50
  903. package/styles/v-scroll/material-dark.scss +1 -0
  904. package/styles/v-scroll/material.css +12 -58
  905. package/styles/v-scroll/tailwind-dark.css +203 -0
  906. package/styles/v-scroll/tailwind-dark.scss +4 -0
  907. package/styles/v-scroll/tailwind.css +203 -0
  908. package/styles/v-scroll/tailwind.scss +4 -0
  909. package/tslint.json +111 -0
  910. package/styles/toolbar/_icons.scss +0 -35
@@ -4,7 +4,7 @@ var __extends = (this && this.__extends) || (function () {
4
4
  ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
5
  function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
6
  return extendStatics(d, b);
7
- }
7
+ };
8
8
  return function (d, b) {
9
9
  extendStatics(d, b);
10
10
  function __() { this.constructor = d; }
@@ -17,16 +17,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
17
17
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
18
  return c > 3 && r && Object.defineProperty(target, key, r), r;
19
19
  };
20
- import { Component, Property, ChildProperty, NotifyPropertyChanges } from '@syncfusion/ej2-base';
20
+ import { Component, Property, ChildProperty, NotifyPropertyChanges, isBlazor } from '@syncfusion/ej2-base';
21
21
  import { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';
22
22
  import { Animation } from '@syncfusion/ej2-base';
23
23
  import { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';
24
24
  import { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';
25
25
  import { ListBase } from '@syncfusion/ej2-lists';
26
26
  import { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';
27
+ import { SanitizeHtmlHelper } from '@syncfusion/ej2-base';
27
28
  import { getScrollableParent } from '@syncfusion/ej2-popups';
28
29
  import { HScroll } from '../common/h-scroll';
29
30
  import { VScroll } from '../common/v-scroll';
31
+ import { addScrolling, destroyScroll } from '../common/menu-scroll';
30
32
  var ENTER = 'enter';
31
33
  var ESCAPE = 'escape';
32
34
  var FOCUSED = 'e-focused';
@@ -39,6 +41,7 @@ var LEFTARROW = 'leftarrow';
39
41
  var RIGHTARROW = 'rightarrow';
40
42
  var HOME = 'home';
41
43
  var END = 'end';
44
+ var TAB = 'tab';
42
45
  var CARET = 'e-caret';
43
46
  var ITEM = 'e-menu-item';
44
47
  var DISABLED = 'e-disabled';
@@ -46,6 +49,7 @@ var HIDE = 'e-menu-hide';
46
49
  var ICONS = 'e-icons';
47
50
  var RTL = 'e-rtl';
48
51
  var POPUP = 'e-menu-popup';
52
+ var TEMPLATE_PROPERTY = 'Template';
49
53
  /**
50
54
  * Configures the field options of the Menu.
51
55
  */
@@ -128,41 +132,60 @@ var MenuAnimationSettings = /** @class */ (function (_super) {
128
132
  }(ChildProperty));
129
133
  export { MenuAnimationSettings };
130
134
  /**
131
- * @private
132
135
  * Base class for Menu and ContextMenu components.
136
+ *
137
+ * @private
133
138
  */
134
139
  var MenuBase = /** @class */ (function (_super) {
135
140
  __extends(MenuBase, _super);
136
141
  /**
137
142
  * Constructor for creating the widget.
143
+ *
138
144
  * @private
145
+ * @param {MenuBaseModel} options - Specifies the menu base model
146
+ * @param {string | HTMLUListElement} element - Specifies the element
139
147
  */
140
148
  function MenuBase(options, element) {
141
149
  var _this = _super.call(this, options, element) || this;
142
150
  _this.navIdx = [];
143
151
  _this.animation = new Animation({});
144
152
  _this.isTapHold = false;
153
+ _this.tempItem = [];
154
+ _this.showSubMenuOn = 'Auto';
145
155
  return _this;
146
156
  }
147
157
  /**
148
158
  * Initialized third party configuration settings.
159
+ *
149
160
  * @private
161
+ * @returns {void}
150
162
  */
151
163
  MenuBase.prototype.preRender = function () {
152
- if (this.element.tagName === 'EJS-CONTEXTMENU') {
153
- this.element.style.display = 'none';
154
- this.element.classList.remove('e-' + this.getModuleName());
155
- this.element.classList.remove('e-control');
156
- var ejInst = getValue('ej2_instances', this.element);
157
- var ul = this.createElement('ul');
158
- this.ngElement = this.element;
159
- this.element = ul;
160
- this.element.classList.add('e-control');
161
- this.element.classList.add('e-' + this.getModuleName());
162
- setValue('ej2_instances', ejInst, this.element);
163
- if (!this.element.id) {
164
- this.element.id = getUniqueID(this.getModuleName());
164
+ if (!this.isMenu) {
165
+ var ul = void 0;
166
+ if (this.element.tagName === 'EJS-CONTEXTMENU') {
167
+ ul = this.createElement('ul', {
168
+ id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()
169
+ });
170
+ var ejInst = getValue('ej2_instances', this.element);
171
+ removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);
172
+ this.clonedElement = this.element;
173
+ this.element = ul;
174
+ setValue('ej2_instances', ejInst, this.element);
175
+ }
176
+ else {
177
+ ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });
178
+ append([].slice.call(this.element.cloneNode(true).children), ul);
179
+ var refEle = this.element.nextElementSibling;
180
+ if (refEle) {
181
+ this.element.parentElement.insertBefore(ul, refEle);
182
+ }
183
+ else {
184
+ this.element.parentElement.appendChild(ul);
185
+ }
186
+ this.clonedElement = ul;
165
187
  }
188
+ this.clonedElement.style.display = 'none';
166
189
  }
167
190
  if (this.element.tagName === 'EJS-MENU') {
168
191
  var ele = this.element;
@@ -177,7 +200,7 @@ var MenuBase = /** @class */ (function (_super) {
177
200
  ele = ul;
178
201
  wrapper.appendChild(ele);
179
202
  setValue('ej2_instances', ejInstance, ele);
180
- this.ngElement = wrapper;
203
+ this.clonedElement = wrapper;
181
204
  this.element = ele;
182
205
  if (!this.element.id) {
183
206
  this.element.id = getUniqueID(this.getModuleName());
@@ -185,13 +208,24 @@ var MenuBase = /** @class */ (function (_super) {
185
208
  }
186
209
  };
187
210
  /**
188
- * Initialize the control rendering
211
+ * Initialize the control rendering.
212
+ *
189
213
  * @private
214
+ * @returns {void}
190
215
  */
191
216
  MenuBase.prototype.render = function () {
217
+ var _this = this;
192
218
  this.initialize();
193
219
  this.renderItems();
194
220
  this.wireEvents();
221
+ this.renderComplete();
222
+ var wrapper = this.getWrapper();
223
+ // eslint-disable-next-line
224
+ if (this.template && this.enableScrolling && (this.isReact || this.isAngular)) {
225
+ requestAnimationFrame(function () {
226
+ addScrolling(_this.createElement, wrapper, _this.element, 'hscroll', _this.enableRtl);
227
+ });
228
+ }
195
229
  };
196
230
  MenuBase.prototype.initialize = function () {
197
231
  var wrapper = this.getWrapper();
@@ -205,26 +239,47 @@ var MenuBase = /** @class */ (function (_super) {
205
239
  }
206
240
  }
207
241
  if (this.cssClass) {
208
- addClass([wrapper], this.cssClass.split(' '));
242
+ addClass([wrapper], this.cssClass.replace(/\s+/g, ' ').trim().split(' '));
209
243
  }
210
244
  if (this.enableRtl) {
211
245
  wrapper.classList.add(RTL);
212
246
  }
213
247
  wrapper.appendChild(this.element);
248
+ if (this.isMenu && this.hamburgerMode) {
249
+ if (!this.target) {
250
+ this.createHeaderContainer(wrapper);
251
+ }
252
+ }
253
+ this.defaultOption = this.showItemOnClick;
214
254
  };
215
255
  MenuBase.prototype.renderItems = function () {
216
256
  if (!this.items.length) {
217
257
  var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });
218
258
  this.setProperties({ items: items }, true);
219
- this.element.innerHTML = '';
259
+ if (isBlazor() && !this.isMenu) {
260
+ this.element = this.removeChildElement(this.element);
261
+ }
262
+ else {
263
+ this.element.innerHTML = '';
264
+ }
220
265
  }
221
266
  var ul = this.createItems(this.items);
222
267
  append(Array.prototype.slice.call(ul.children), this.element);
223
268
  this.element.classList.add('e-menu-parent');
224
- var wrapper = this.getWrapper();
225
- this.element.classList.contains('e-vertical') ?
226
- this.addScrolling(wrapper, this.element, 'vscroll', wrapper.offsetHeight, this.element.offsetHeight)
227
- : this.addScrolling(wrapper, this.element, 'hscroll', wrapper.offsetWidth, this.element.offsetWidth);
269
+ if (this.isMenu) {
270
+ if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {
271
+ this.setBlankIconStyle(this.element);
272
+ }
273
+ if (this.enableScrolling) {
274
+ var wrapper = this.getWrapper();
275
+ if (this.element.classList.contains('e-vertical')) {
276
+ addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl);
277
+ }
278
+ else {
279
+ addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);
280
+ }
281
+ }
282
+ }
228
283
  };
229
284
  MenuBase.prototype.wireEvents = function () {
230
285
  var wrapper = this.getWrapper();
@@ -233,17 +288,25 @@ var MenuBase = /** @class */ (function (_super) {
233
288
  var targetElems = selectAll(this.target);
234
289
  for (var i = 0, len = targetElems.length; i < len; i++) {
235
290
  target = targetElems[i];
236
- if (Browser.isIos) {
237
- new Touch(target, { tapHold: this.touchHandler.bind(this) });
291
+ if (this.isMenu) {
292
+ EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);
238
293
  }
239
294
  else {
240
- EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);
295
+ if (Browser.isIos) {
296
+ new Touch(target, { tapHold: this.touchHandler.bind(this) });
297
+ }
298
+ else {
299
+ EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);
300
+ }
241
301
  }
242
302
  }
243
303
  this.targetElement = target;
244
- for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {
245
- var parent_1 = _a[_i];
246
- EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);
304
+ if (!this.isMenu) {
305
+ EventHandler.add(this.targetElement, 'scroll', this.scrollHandler, this);
306
+ for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {
307
+ var parent_1 = _a[_i];
308
+ EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);
309
+ }
247
310
  }
248
311
  }
249
312
  if (!Browser.isDevice) {
@@ -269,6 +332,7 @@ var MenuBase = /** @class */ (function (_super) {
269
332
  if (this.isMenu) {
270
333
  keyConfigs.home = HOME;
271
334
  keyConfigs.end = END;
335
+ keyConfigs.tab = TAB;
272
336
  }
273
337
  new KeyboardEvents(element, {
274
338
  keyAction: this.keyBoardHandler.bind(this),
@@ -277,14 +341,15 @@ var MenuBase = /** @class */ (function (_super) {
277
341
  };
278
342
  MenuBase.prototype.mouseDownHandler = function (e) {
279
343
  if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()
280
- && !closest(e.target, '.e-' + this.getModuleName() + '-popup')) {
281
- this.closeMenu(this.navIdx.length, e);
344
+ && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {
345
+ this.closeMenu(this.isMenu ? null : this.navIdx.length, e);
282
346
  }
283
347
  };
284
348
  MenuBase.prototype.keyBoardHandler = function (e) {
285
349
  var actionName = '';
286
350
  var trgt = e.target;
287
- var actionNeeded = this.isMenu && !this.element.classList.contains('e-vertical') && this.navIdx.length < 1;
351
+ var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')
352
+ && this.navIdx.length < 1;
288
353
  e.preventDefault();
289
354
  if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {
290
355
  this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);
@@ -328,6 +393,7 @@ var MenuBase = /** @class */ (function (_super) {
328
393
  case UPARROW:
329
394
  case END:
330
395
  case HOME:
396
+ case TAB:
331
397
  this.upDownKeyHandler(e);
332
398
  break;
333
399
  case RIGHTARROW:
@@ -337,7 +403,12 @@ var MenuBase = /** @class */ (function (_super) {
337
403
  this.leftEscKeyHandler(e);
338
404
  break;
339
405
  case ENTER:
340
- this.rightEnterKeyHandler(e);
406
+ if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {
407
+ this.menuHeaderClickHandler(e);
408
+ }
409
+ else {
410
+ this.rightEnterKeyHandler(e);
411
+ }
341
412
  break;
342
413
  case ESCAPE:
343
414
  this.leftEscKeyHandler(e);
@@ -349,7 +420,7 @@ var MenuBase = /** @class */ (function (_super) {
349
420
  };
350
421
  MenuBase.prototype.upDownKeyHandler = function (e) {
351
422
  var cul = this.getUlByNavIdx();
352
- var defaultIdx = (e.action === DOWNARROW || e.action === HOME) ? 0 : cul.childElementCount - 1;
423
+ var defaultIdx = (e.action === DOWNARROW || e.action === HOME || e.action === TAB) ? 0 : cul.childElementCount - 1;
353
424
  var fliIdx = defaultIdx;
354
425
  var fli = this.getLIByClass(cul, FOCUSED);
355
426
  if (fli) {
@@ -358,7 +429,12 @@ var MenuBase = /** @class */ (function (_super) {
358
429
  }
359
430
  fli.classList.remove(FOCUSED);
360
431
  if (e.action !== END && e.action !== HOME) {
361
- e.action === DOWNARROW ? fliIdx++ : fliIdx--;
432
+ if (e.action === DOWNARROW) {
433
+ fliIdx++;
434
+ }
435
+ else {
436
+ fliIdx--;
437
+ }
362
438
  if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {
363
439
  fliIdx = defaultIdx;
364
440
  }
@@ -370,10 +446,21 @@ var MenuBase = /** @class */ (function (_super) {
370
446
  cul.children[fliIdx].focus();
371
447
  };
372
448
  MenuBase.prototype.isValidLI = function (cli, index, action) {
373
- var wrapper = this.getWrapper();
374
449
  var cul = this.getUlByNavIdx();
450
+ var defaultIdx = (action === DOWNARROW || action === HOME || action === TAB) ? 0 : cul.childElementCount - 1;
375
451
  if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {
376
- ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;
452
+ if (action === DOWNARROW && index === cul.childElementCount - 1) {
453
+ index = defaultIdx;
454
+ }
455
+ else if (action === UPARROW && index === 0) {
456
+ index = defaultIdx;
457
+ }
458
+ else if ((action === DOWNARROW) || (action === RIGHTARROW)) {
459
+ index++;
460
+ }
461
+ else {
462
+ index--;
463
+ }
377
464
  }
378
465
  cli = cul.children[index];
379
466
  if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {
@@ -398,25 +485,12 @@ var MenuBase = /** @class */ (function (_super) {
398
485
  if (fli) {
399
486
  var fliIdx = this.getIdx(cul, fli);
400
487
  var navIdx = this.navIdx.concat(fliIdx);
401
- var index = void 0;
402
488
  var item = this.getItem(navIdx);
403
489
  if (item.items.length) {
404
490
  this.navIdx.push(fliIdx);
405
- this.openMenu(fli, item, null, null, e);
406
- fli.classList.remove(FOCUSED);
407
- if (this.isMenu && this.navIdx.length === 1) {
408
- this.removeLIStateByClass([SELECTED], [this.getWrapper()]);
409
- }
410
- fli.classList.add(SELECTED);
411
- if (e.action === ENTER) {
412
- eventArgs = { element: fli, item: item };
413
- this.trigger('select', eventArgs);
414
- }
415
- fli.focus();
416
- cul = this.getUlByNavIdx();
417
- index = this.isValidLI(cul.children[0], 0, e.action);
418
- cul.children[index].classList.add(FOCUSED);
419
- cul.children[index].focus();
491
+ this.keyType = 'right';
492
+ this.action = e.action;
493
+ this.openMenu(fli, item, -1, -1, e);
420
494
  }
421
495
  else {
422
496
  if (e.action === ENTER) {
@@ -427,7 +501,7 @@ var MenuBase = /** @class */ (function (_super) {
427
501
  fli.classList.remove(FOCUSED);
428
502
  }
429
503
  fli.classList.add(SELECTED);
430
- eventArgs = { element: fli, item: item };
504
+ eventArgs = { element: fli, item: item, event: e };
431
505
  this.trigger('select', eventArgs);
432
506
  this.closeMenu(null, e);
433
507
  }
@@ -436,15 +510,8 @@ var MenuBase = /** @class */ (function (_super) {
436
510
  };
437
511
  MenuBase.prototype.leftEscKeyHandler = function (e) {
438
512
  if (this.navIdx.length) {
513
+ this.keyType = 'left';
439
514
  this.closeMenu(this.navIdx.length, e);
440
- var cul = this.getUlByNavIdx();
441
- var sli = this.getLIByClass(cul, SELECTED);
442
- if (sli) {
443
- sli.setAttribute('aria-expanded', 'false');
444
- sli.classList.remove(SELECTED);
445
- sli.classList.add(FOCUSED);
446
- sli.focus();
447
- }
448
515
  }
449
516
  else {
450
517
  if (e.action === ESCAPE) {
@@ -461,73 +528,208 @@ var MenuBase = /** @class */ (function (_super) {
461
528
  };
462
529
  MenuBase.prototype.cmenuHandler = function (e) {
463
530
  e.preventDefault();
531
+ this.currentTarget = e.target;
532
+ this.isCMenu = true;
533
+ this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;
534
+ this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;
464
535
  this.closeMenu(null, e);
465
- if (this.canOpen(e.target)) {
466
- if (e.changedTouches) {
467
- this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);
468
- }
469
- else {
470
- this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);
536
+ if (this.isCMenu) {
537
+ if (this.canOpen(e.target)) {
538
+ this.openMenu(null, null, this.pageY, this.pageX, e);
471
539
  }
540
+ this.isCMenu = false;
472
541
  }
473
542
  };
474
- MenuBase.prototype.closeMenu = function (ulIndex, e) {
543
+ // eslint:disable-next-line:max-func-body-length
544
+ MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {
545
+ var _this = this;
475
546
  if (ulIndex === void 0) { ulIndex = 0; }
476
547
  if (e === void 0) { e = null; }
477
548
  if (this.isMenuVisible()) {
478
- var ul = void 0;
479
549
  var sli = void 0;
480
- var item = void 0;
481
- var items = void 0;
482
- var closeArgs = void 0;
550
+ var item_1;
551
+ var wrapper_1 = this.getWrapper();
483
552
  var beforeCloseArgs = void 0;
484
- var popupEle = void 0;
485
- var popupObj = void 0;
486
- var wrapper = this.getWrapper();
553
+ var items_1;
487
554
  var popups = this.getPopups();
488
- for (var cnt = this.isMenu ? popups.length + 1 : wrapper.childElementCount; cnt > ulIndex; cnt--) {
489
- ul = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])
490
- : selectAll('.e-menu-parent', wrapper)[cnt - 1];
491
- if (this.isMenu && ul.classList.contains('e-menu')) {
492
- sli = this.getLIByClass(ul, SELECTED);
493
- if (sli) {
494
- sli.classList.remove(SELECTED);
495
- }
496
- break;
555
+ var isClose = false;
556
+ var cnt = this.isMenu ? popups.length + 1 : wrapper_1.childElementCount;
557
+ var ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])
558
+ : selectAll('.e-menu-parent', wrapper_1)[cnt - 1];
559
+ if (this.isMenu && ul_1.classList.contains('e-menu')) {
560
+ sli = this.getLIByClass(ul_1, SELECTED);
561
+ if (sli) {
562
+ sli.classList.remove(SELECTED);
497
563
  }
498
- item = this.navIdx.length ? this.getItem(this.navIdx) : null;
499
- items = item ? item.items : this.items;
500
- beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };
501
- this.trigger('beforeClose', beforeCloseArgs);
502
- if (!beforeCloseArgs.cancel) {
503
- if (this.isMenu) {
504
- popupEle = closest(ul, '.' + POPUP);
505
- this.unWireKeyboardEvent(popupEle);
506
- this.destroyScrollObj(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);
507
- popupObj = getInstance(popupEle, Popup);
508
- popupObj.hide();
509
- popupObj.destroy();
510
- detach(popupEle);
564
+ isClose = true;
565
+ }
566
+ if (!isClose) {
567
+ var liElem_1 = e && e.target && this.getLI(e.target);
568
+ if (liElem_1) {
569
+ this.cli = liElem_1;
570
+ }
571
+ else {
572
+ this.cli = ul_1.children[0];
573
+ }
574
+ item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;
575
+ items_1 = item_1 ? item_1.items : this.items;
576
+ beforeCloseArgs = { element: ul_1, parentItem: item_1, items: items_1, event: e, cancel: false, isFocused: true };
577
+ this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {
578
+ var popupEle;
579
+ var closeArgs;
580
+ var popupId = '';
581
+ var popupObj;
582
+ var isOpen = !observedCloseArgs.cancel;
583
+ if (isOpen || _this.isCMenu) {
584
+ if (_this.isMenu) {
585
+ popupEle = closest(ul_1, '.' + POPUP);
586
+ if (_this.hamburgerMode) {
587
+ popupEle.parentElement.style.minHeight = '';
588
+ closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');
589
+ }
590
+ _this.unWireKeyboardEvent(popupEle);
591
+ destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);
592
+ popupObj = getInstance(popupEle, Popup);
593
+ popupObj.hide();
594
+ popupId = popupEle.id;
595
+ popupObj.destroy();
596
+ detach(popupEle);
597
+ }
598
+ else {
599
+ _this.toggleAnimation(ul_1, false);
600
+ }
601
+ closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };
602
+ _this.trigger('onClose', closeArgs);
603
+ _this.navIdx.pop();
604
+ }
605
+ _this.updateReactTemplate();
606
+ var trgtliId;
607
+ var closedLi;
608
+ var trgtLi;
609
+ var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();
610
+ if (_this.isCMenu) {
611
+ if (_this.canOpen(e.target)) {
612
+ _this.openMenu(null, null, _this.pageY, _this.pageX, e);
613
+ }
614
+ _this.isCMenu = false;
615
+ }
616
+ if (_this.isMenu && trgtpopUp && popupId.length) {
617
+ // eslint-disable-next-line
618
+ trgtliId = new RegExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];
619
+ closedLi = trgtpopUp.querySelector('[id="' + trgtliId + '"]');
620
+ trgtLi = (liElem_1 && trgtpopUp.querySelector('[id="' + liElem_1.id + '"]'));
621
+ }
622
+ else if (trgtpopUp) {
623
+ closedLi = trgtpopUp.querySelector('.e-menu-item.e-selected');
624
+ trgtLi = (liElem_1 && trgtpopUp.querySelector('[id="' + liElem_1.id + '"]'));
625
+ }
626
+ var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');
627
+ if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {
628
+ _this.afterCloseMenu(e);
629
+ }
630
+ else if (isOpen && !_this.hamburgerMode && closedLi && !trgtLi && _this.keyType !== 'left' && (_this.navIdx.length || !_this.isMenu && _this.navIdx.length === 0)) {
631
+ var ele = (e && e.target.classList.contains('e-vscroll'))
632
+ ? closest(e.target, '.e-menu-wrapper') : null;
633
+ if (ele) {
634
+ ele = ele.querySelector('.e-menu-item');
635
+ if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {
636
+ _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);
637
+ }
638
+ }
639
+ else {
640
+ _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);
641
+ }
642
+ }
643
+ else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||
644
+ _this.navIdx.length === 1 && liElem_1 && trgtpopUp !== liElem_1.parentElement)) {
645
+ _this.closeMenu(null, e);
646
+ }
647
+ else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {
648
+ _this.closeMenu(null, e);
649
+ }
650
+ else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 && !_this.isMenusClosed) {
651
+ _this.isMenusClosed = true;
652
+ _this.closeMenu(0, e);
653
+ }
654
+ else if (isOpen && _this.isMenu && e && e.target &&
655
+ _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {
656
+ _this.closeMenu(0, e);
657
+ }
658
+ else if (isOpen && !_this.isMenu && selectAll('.e-menu-parent', wrapper_1)[ulIndex - 1] && e.which === 3) {
659
+ _this.closeMenu(null, e);
511
660
  }
512
661
  else {
513
- this.toggleAnimation(ul, false);
662
+ if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {
663
+ _this.afterCloseMenu(e);
664
+ }
665
+ else {
666
+ var cul = _this.getUlByNavIdx();
667
+ var sli_1 = _this.getLIByClass(cul, SELECTED);
668
+ if (sli_1) {
669
+ sli_1.setAttribute('aria-expanded', 'false');
670
+ sli_1.classList.remove(SELECTED);
671
+ if (observedCloseArgs.isFocused && liElem_1 || _this.keyType === 'left') {
672
+ sli_1.classList.add(FOCUSED);
673
+ sli_1.focus();
674
+ }
675
+ }
676
+ if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&
677
+ liElem_1.getAttribute('aria-haspopup') === 'true') {
678
+ if (closest(liElem_1, '.e-menu-parent.e-control')) {
679
+ _this.navIdx = [];
680
+ }
681
+ else {
682
+ _this.navIdx.pop();
683
+ }
684
+ _this.navIdx.push(_this.cliIdx);
685
+ var item_2 = _this.getItem(_this.navIdx);
686
+ liElem_1.setAttribute('aria-expanded', 'true');
687
+ _this.openMenu(liElem_1, item_2, -1, -1, e);
688
+ }
689
+ }
690
+ if (_this.navIdx.length < 1) {
691
+ if (_this.showSubMenuOn === 'Hover' || _this.showSubMenuOn === 'Click') {
692
+ _this.showItemOnClick = _this.defaultOption;
693
+ _this.showSubMenuOn = 'Auto';
694
+ }
695
+ }
514
696
  }
515
- this.navIdx.length = ulIndex ? ulIndex - 1 : ulIndex;
516
- closeArgs = { element: ul, parentItem: item, items: items };
517
- this.trigger('onClose', closeArgs);
518
- }
697
+ _this.removeStateWrapper();
698
+ });
519
699
  }
520
700
  }
521
701
  };
522
- MenuBase.prototype.destroyScrollObj = function (scrollObj, scrollEle) {
523
- if (scrollObj) {
524
- scrollObj.destroy();
525
- scrollEle.parentElement.appendChild(select('.e-menu-parent', scrollEle));
526
- detach(scrollEle);
702
+ MenuBase.prototype.updateReactTemplate = function () {
703
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
704
+ if (this.isReact && this.template && this.navIdx.length === 0) {
705
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
706
+ var portals = this.portals.splice(0, this.items.length);
707
+ this.clearTemplate(['template']);
708
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
709
+ this.portals = portals;
710
+ this.renderReactTemplates();
527
711
  }
528
712
  };
713
+ MenuBase.prototype.getMenuItemModel = function (item, level) {
714
+ if (isNullOrUndefined(item)) {
715
+ return null;
716
+ }
717
+ if (isNullOrUndefined(level)) {
718
+ level = 0;
719
+ }
720
+ var fields = this.getFields(level);
721
+ return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],
722
+ iconCss: item[fields.iconCss], url: item[fields.url] };
723
+ };
529
724
  MenuBase.prototype.getPopups = function () {
530
- return [].slice.call(document.querySelectorAll('.' + POPUP));
725
+ var _this = this;
726
+ var popups = [];
727
+ [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {
728
+ if (!isNullOrUndefined(elem.querySelector('.' + ITEM)) && _this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {
729
+ popups.push(elem);
730
+ }
731
+ });
732
+ return popups;
531
733
  };
532
734
  MenuBase.prototype.isMenuVisible = function () {
533
735
  return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));
@@ -552,176 +754,344 @@ var MenuBase = /** @class */ (function (_super) {
552
754
  if (left === void 0) { left = 0; }
553
755
  if (e === void 0) { e = null; }
554
756
  if (target === void 0) { target = this.targetElement; }
555
- var ul;
556
- var popupObj;
557
- var popupWrapper;
558
- var eventArgs;
559
757
  var wrapper = this.getWrapper();
758
+ this.lItem = li;
759
+ var elemId = this.element.id !== '' ? this.element.id : 'menu';
760
+ this.isMenusClosed = false;
761
+ if (isNullOrUndefined(top)) {
762
+ top = -1;
763
+ }
764
+ if (isNullOrUndefined(left)) {
765
+ left = -1;
766
+ }
560
767
  if (li) {
561
- ul = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);
768
+ this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);
562
769
  if (!this.isMenu && Browser.isDevice) {
563
770
  wrapper.lastChild.style.display = 'none';
564
771
  var data = {
565
772
  text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'
566
773
  };
567
- var hdata = new MenuItem(this.items[0], null, data, true);
774
+ var hdata = new MenuItem(this.items[0], 'items', data, true);
568
775
  var hli = this.createItems([hdata]).children[0];
569
776
  hli.classList.add(HEADER);
570
- ul.insertBefore(hli, ul.children[0]);
777
+ this.uList.insertBefore(hli, this.uList.children[0]);
571
778
  }
572
779
  if (this.isMenu) {
573
- popupWrapper = this.createElement('div', {
574
- className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-menu-popup'
575
- });
576
- document.body.appendChild(popupWrapper);
577
- var isNestedOrVerticalMenu = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;
578
- popupObj = new Popup(popupWrapper, {
579
- relateTo: li,
580
- collision: { X: isNestedOrVerticalMenu || this.enableRtl ? 'none' : 'flip', Y: 'fit' },
581
- position: isNestedOrVerticalMenu ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },
582
- targetType: 'relative',
583
- enableRtl: this.enableRtl,
584
- content: ul,
585
- open: function () {
586
- var scrollEle = select('.e-menu-vscroll', popupObj.element);
587
- if (scrollEle) {
588
- scrollEle.style.height = 'inherit';
589
- scrollEle.style.maxHeight = '';
590
- }
591
- var ul = select('.e-ul', popupObj.element);
592
- popupObj.element.style.maxHeight = '';
593
- ul.focus();
594
- _this.triggerOpen(ul);
595
- }
780
+ this.popupWrapper = this.createElement('div', {
781
+ className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'
596
782
  });
597
- if (this.cssClass) {
598
- addClass([popupWrapper], this.cssClass.split(' '));
599
- }
600
- popupObj.hide();
601
- eventArgs = this.triggerBeforeOpen(li, ul, item, e, 0, 0);
602
- top = eventArgs.top;
603
- left = eventArgs.left;
604
- popupWrapper.style.display = 'block';
605
- popupWrapper.style.maxHeight = popupWrapper.getBoundingClientRect().height + 'px';
606
- this.addScrolling(popupWrapper, ul, 'vscroll', popupWrapper.offsetHeight, ul.offsetHeight);
607
- this.checkScrollOffset(e);
608
- var collide = void 0;
609
- if (!left && !top) {
610
- popupObj.refreshPosition(li, true);
611
- left = parseInt(popupWrapper.style.left, 10);
612
- top = parseInt(popupWrapper.style.top, 10);
613
- if (this.enableRtl) {
614
- left = isNestedOrVerticalMenu ? left - popupWrapper.offsetWidth - li.parentElement.offsetWidth
615
- : left - popupWrapper.offsetWidth + li.offsetWidth;
616
- }
617
- collide = isCollide(popupWrapper, null, left, top);
618
- if ((isNestedOrVerticalMenu || this.enableRtl) && (collide.indexOf('right') > -1 || collide.indexOf('left') > -1)) {
619
- popupObj.collision.X = 'none';
620
- left = this.enableRtl ? calculatePosition(li, isNestedOrVerticalMenu ? 'right' : 'left', 'top').left : left -
621
- popupWrapper.offsetWidth - closest(li, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;
622
- }
623
- collide = isCollide(popupWrapper, null, left, top);
624
- if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {
625
- left = this.callFit(popupWrapper, true, false, top, left).left;
783
+ if (this.hamburgerMode) {
784
+ top = li.offsetHeight;
785
+ li.appendChild(this.popupWrapper);
786
+ }
787
+ else {
788
+ document.body.appendChild(this.popupWrapper);
789
+ }
790
+ this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;
791
+ this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);
792
+ if (this.template) {
793
+ this.renderReactTemplates();
794
+ }
795
+ if (this.hamburgerMode) {
796
+ this.calculateIndentSize(this.uList, li);
797
+ }
798
+ else {
799
+ if (this.cssClass) {
800
+ addClass([this.popupWrapper], this.cssClass.replace(/\s+/g, ' ').trim().split(' '));
626
801
  }
627
- popupWrapper.style.left = left + 'px';
802
+ this.popupObj.hide();
803
+ }
804
+ if (!this.hamburgerMode && !this.showItemOnClick && this.hoverDelay) {
805
+ window.clearInterval(this.timer);
806
+ this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, 0, 0, 'menu'); }, this.hoverDelay);
628
807
  }
629
808
  else {
630
- popupObj.collision = { X: 'none', Y: 'none' };
809
+ this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');
631
810
  }
632
- popupWrapper.style.display = '';
633
811
  }
634
812
  else {
635
- ul.style.zIndex = this.element.style.zIndex;
636
- wrapper.appendChild(ul);
637
- eventArgs = this.triggerBeforeOpen(li, ul, item, e, top, left);
638
- top = eventArgs.top;
639
- left = eventArgs.left;
813
+ this.uList.style.zIndex = this.element.style.zIndex;
814
+ wrapper.appendChild(this.uList);
815
+ if (!this.showItemOnClick && this.hoverDelay) {
816
+ window.clearInterval(this.timer);
817
+ this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, top, left, 'none'); }, this.hoverDelay);
818
+ }
819
+ else {
820
+ this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');
821
+ }
640
822
  }
641
823
  }
642
824
  else {
643
- ul = this.element;
644
- ul.style.zIndex = getZindexPartial(target ? target : this.element).toString();
645
- eventArgs = this.triggerBeforeOpen(li, ul, item, e, top, left);
646
- top = eventArgs.top;
647
- left = eventArgs.left;
825
+ this.uList = this.element;
826
+ this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();
827
+ this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');
648
828
  }
649
- if (eventArgs.cancel) {
650
- if (this.isMenu) {
651
- popupObj.destroy();
652
- detach(popupWrapper);
653
- }
654
- this.navIdx.pop();
829
+ };
830
+ MenuBase.prototype.calculateIndentSize = function (ul, li) {
831
+ var liStyle = getComputedStyle(li);
832
+ var liIndent = parseInt(liStyle.textIndent, 10);
833
+ if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {
834
+ liIndent *= 2;
655
835
  }
656
836
  else {
657
- if (this.isMenu) {
658
- this.wireKeyboardEvent(popupWrapper);
659
- rippleEffect(popupWrapper, { selector: '.' + ITEM });
660
- popupWrapper.style.left = left + 'px';
661
- popupWrapper.style.top = top + 'px';
662
- var animationOptions = this.animationSettings.effect !== 'None' ? {
663
- name: this.animationSettings.effect, duration: this.animationSettings.duration,
664
- timingFunction: this.animationSettings.easing
665
- } : null;
666
- popupObj.show(animationOptions, li);
837
+ liIndent += (liIndent / 4);
838
+ }
839
+ ul.style.textIndent = liIndent + 'px';
840
+ var blankIconElem = ul.querySelectorAll('.e-blankicon');
841
+ if (blankIconElem && blankIconElem.length) {
842
+ var menuIconElem = ul.querySelector('.e-menu-icon');
843
+ var menuIconElemStyle = getComputedStyle(menuIconElem);
844
+ var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);
845
+ for (var i = 0; i < blankIconElem.length; i++) {
846
+ blankIconElem[i].style.textIndent = blankIconIndent + 'px';
667
847
  }
668
- else {
669
- this.setPosition(li, ul, top, left);
670
- this.toggleAnimation(ul);
848
+ }
849
+ };
850
+ MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {
851
+ var _this = this;
852
+ var popupObj = new Popup(popupWrapper, {
853
+ actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',
854
+ relateTo: li,
855
+ collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||
856
+ this.enableRtl ? 'none' : 'flip', Y: 'fit' },
857
+ position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },
858
+ targetType: 'relative',
859
+ enableRtl: this.enableRtl,
860
+ content: ul,
861
+ open: function () {
862
+ var scrollEle = select('.e-menu-vscroll', popupObj.element);
863
+ if (scrollEle) {
864
+ scrollEle.style.height = 'inherit';
865
+ scrollEle.style.maxHeight = '';
866
+ }
867
+ var ul = select('.e-ul', popupObj.element);
868
+ popupObj.element.style.maxHeight = '';
869
+ ul.focus();
870
+ _this.triggerOpen(ul);
671
871
  }
872
+ });
873
+ return popupObj;
874
+ };
875
+ MenuBase.prototype.createHeaderContainer = function (wrapper) {
876
+ wrapper = wrapper || this.getWrapper();
877
+ var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });
878
+ var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;
879
+ var spanTitle = this.createElement('span', {
880
+ className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle
881
+ });
882
+ var spanIcon = this.createElement('span', {
883
+ className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }
884
+ });
885
+ spanElem.appendChild(spanTitle);
886
+ spanElem.appendChild(spanIcon);
887
+ wrapper.insertBefore(spanElem, this.element);
888
+ };
889
+ MenuBase.prototype.openHamburgerMenu = function (e) {
890
+ if (this.hamburgerMode) {
891
+ this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');
672
892
  }
673
893
  };
894
+ MenuBase.prototype.closeHamburgerMenu = function (e) {
895
+ var _this = this;
896
+ var beforeCloseArgs = { element: this.element, parentItem: null, event: e,
897
+ items: this.items, cancel: false };
898
+ this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {
899
+ if (!observedHamburgerCloseArgs.cancel) {
900
+ _this.closeMenu(null, e);
901
+ _this.element.classList.add('e-hide-menu');
902
+ _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });
903
+ }
904
+ });
905
+ };
674
906
  MenuBase.prototype.callFit = function (element, x, y, top, left) {
675
907
  return fit(element, null, { X: x, Y: y }, { top: top, left: left });
676
908
  };
677
- MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left) {
678
- var navIdx = this.getIndex(li ? li.id : null, true);
909
+ MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {
910
+ var _this = this;
679
911
  var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;
680
912
  var eventArgs = {
681
- element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left
913
+ element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left, showSubMenuOn: 'Auto'
682
914
  };
683
- this.trigger('beforeOpen', eventArgs);
684
- return eventArgs;
915
+ var menuType = type;
916
+ this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {
917
+ switch (menuType) {
918
+ case 'menu':
919
+ if (!_this.hamburgerMode) {
920
+ if (observedOpenArgs.showSubMenuOn !== 'Auto') {
921
+ _this.showItemOnClick = !_this.defaultOption;
922
+ _this.showSubMenuOn = observedOpenArgs.showSubMenuOn;
923
+ }
924
+ _this.top = observedOpenArgs.top;
925
+ _this.left = observedOpenArgs.left;
926
+ }
927
+ _this.popupWrapper.style.display = 'block';
928
+ if (!_this.hamburgerMode) {
929
+ _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';
930
+ if (_this.enableScrolling) {
931
+ addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);
932
+ }
933
+ _this.checkScrollOffset(e);
934
+ }
935
+ if (!_this.hamburgerMode && !_this.left && !_this.top) {
936
+ _this.popupObj.refreshPosition(_this.lItem, true);
937
+ _this.left = parseInt(_this.popupWrapper.style.left, 10);
938
+ _this.top = parseInt(_this.popupWrapper.style.top, 10);
939
+ if (_this.enableRtl) {
940
+ _this.left =
941
+ _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2
942
+ : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;
943
+ }
944
+ // eslint-disable-next-line
945
+ if (_this.template && (_this.isReact || _this.isAngular)) {
946
+ requestAnimationFrame(function () {
947
+ _this.collision();
948
+ _this.popupWrapper.style.display = '';
949
+ });
950
+ }
951
+ else {
952
+ _this.collision();
953
+ _this.popupWrapper.style.display = '';
954
+ }
955
+ }
956
+ else {
957
+ _this.popupObj.collision = { X: 'none', Y: 'none' };
958
+ _this.popupWrapper.style.display = '';
959
+ }
960
+ break;
961
+ case 'none':
962
+ _this.top = observedOpenArgs.top;
963
+ _this.left = observedOpenArgs.left;
964
+ break;
965
+ case 'hamburger':
966
+ if (!observedOpenArgs.cancel) {
967
+ _this.element.classList.remove('e-hide-menu');
968
+ _this.triggerOpen(_this.element);
969
+ }
970
+ break;
971
+ }
972
+ if (menuType !== 'hamburger') {
973
+ if (observedOpenArgs.cancel) {
974
+ if (_this.isMenu) {
975
+ _this.popupObj.destroy();
976
+ detach(_this.popupWrapper);
977
+ }
978
+ else if (ul.className.indexOf('e-ul') > -1) {
979
+ detach(ul);
980
+ }
981
+ _this.navIdx.pop();
982
+ }
983
+ else {
984
+ if (_this.isMenu) {
985
+ if (_this.hamburgerMode) {
986
+ _this.popupWrapper.style.top = _this.top + 'px';
987
+ _this.popupWrapper.style.left = 0 + 'px';
988
+ _this.toggleAnimation(_this.popupWrapper);
989
+ }
990
+ else {
991
+ _this.setBlankIconStyle(_this.popupWrapper);
992
+ _this.wireKeyboardEvent(_this.popupWrapper);
993
+ rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });
994
+ _this.popupWrapper.style.left = _this.left + 'px';
995
+ _this.popupWrapper.style.top = _this.top + 'px';
996
+ var animationOptions = _this.animationSettings.effect !== 'None' ? {
997
+ name: _this.animationSettings.effect, duration: _this.animationSettings.duration,
998
+ timingFunction: _this.animationSettings.easing
999
+ } : null;
1000
+ _this.popupObj.show(animationOptions, _this.lItem);
1001
+ }
1002
+ }
1003
+ else {
1004
+ _this.setBlankIconStyle(_this.uList);
1005
+ _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);
1006
+ _this.toggleAnimation(_this.uList);
1007
+ }
1008
+ }
1009
+ }
1010
+ if (_this.keyType === 'right') {
1011
+ var cul = _this.getUlByNavIdx();
1012
+ li.classList.remove(FOCUSED);
1013
+ if (_this.isMenu && _this.navIdx.length === 1) {
1014
+ _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);
1015
+ }
1016
+ li.classList.add(SELECTED);
1017
+ if (_this.action === ENTER) {
1018
+ var eventArgs_1 = { element: li, item: item, event: e };
1019
+ _this.trigger('select', eventArgs_1);
1020
+ }
1021
+ li.focus();
1022
+ cul = _this.getUlByNavIdx();
1023
+ var index = _this.isValidLI(cul.children[0], 0, _this.action);
1024
+ cul.children[index].classList.add(FOCUSED);
1025
+ cul.children[index].focus();
1026
+ }
1027
+ });
1028
+ };
1029
+ MenuBase.prototype.collision = function () {
1030
+ var collide;
1031
+ collide = isCollide(this.popupWrapper, null, this.left, this.top);
1032
+ if ((this.isNestedOrVertical || this.enableRtl) && (collide.indexOf('right') > -1
1033
+ || collide.indexOf('left') > -1)) {
1034
+ this.popupObj.collision.X = 'none';
1035
+ var offWidth = closest(this.lItem, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;
1036
+ this.left =
1037
+ this.enableRtl ? calculatePosition(this.lItem, this.isNestedOrVertical ? 'right' : 'left', 'top').left
1038
+ : this.left - this.popupWrapper.offsetWidth - offWidth + 2;
1039
+ }
1040
+ collide = isCollide(this.popupWrapper, null, this.left, this.top);
1041
+ if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {
1042
+ this.left = this.callFit(this.popupWrapper, true, false, this.top, this.left).left;
1043
+ }
1044
+ this.popupWrapper.style.left = this.left + 'px';
1045
+ };
1046
+ MenuBase.prototype.setBlankIconStyle = function (menu) {
1047
+ var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));
1048
+ if (!blankIconList.length) {
1049
+ return;
1050
+ }
1051
+ var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');
1052
+ if (!iconLi) {
1053
+ return;
1054
+ }
1055
+ var icon = iconLi.querySelector('.e-menu-icon');
1056
+ if (!icon) {
1057
+ return;
1058
+ }
1059
+ var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :
1060
+ { padding: 'paddingLeft', margin: 'marginRight' };
1061
+ var iconCssProps = getComputedStyle(icon);
1062
+ var iconSize = parseInt(iconCssProps.fontSize, 10);
1063
+ if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {
1064
+ iconSize = parseInt(iconCssProps.width, 10);
1065
+ }
1066
+ // eslint:disable
1067
+ var size = iconSize + parseInt(
1068
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1069
+ iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + "px";
1070
+ blankIconList.forEach(function (li) {
1071
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1072
+ li.style[cssProp.padding] = size;
1073
+ });
1074
+ // eslint:enable
685
1075
  };
686
1076
  MenuBase.prototype.checkScrollOffset = function (e) {
687
1077
  var wrapper = this.getWrapper();
688
1078
  if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {
689
1079
  var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);
690
1080
  var offsetEle = select('.e-hscroll-bar', wrapper);
691
- var offsetLeft = void 0;
692
- var offsetRight = void 0;
693
1081
  if (offsetEle.scrollLeft > trgt.offsetLeft) {
694
1082
  offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);
695
1083
  }
696
- offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;
697
- offsetRight = trgt.offsetLeft + trgt.offsetWidth;
1084
+ var offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;
1085
+ var offsetRight = trgt.offsetLeft + trgt.offsetWidth;
698
1086
  if (offsetLeft < offsetRight) {
699
1087
  offsetEle.scrollLeft += (offsetRight - offsetLeft);
700
1088
  }
701
1089
  }
702
1090
  };
703
- MenuBase.prototype.addScrolling = function (wrapper, ul, scrollType, wrapperOffset, contentOffset) {
704
- if (this.enableScrolling && wrapperOffset < contentOffset) {
705
- var scrollEle = this.createElement('div', { className: 'e-menu-' + scrollType });
706
- wrapper.appendChild(scrollEle);
707
- scrollEle.appendChild(ul);
708
- scrollEle.style.maxHeight = wrapper.style.maxHeight;
709
- var scrollObj = void 0;
710
- wrapper.style.overflow = 'hidden';
711
- if (scrollType === 'vscroll') {
712
- scrollObj = new VScroll({ enableRtl: this.enableRtl }, scrollEle);
713
- scrollObj.scrollStep = select('.e-' + scrollType + '-bar', wrapper).offsetHeight / 2;
714
- }
715
- else {
716
- scrollObj = new HScroll({ enableRtl: this.enableRtl }, scrollEle);
717
- scrollObj.scrollStep = select('.e-' + scrollType + '-bar', wrapper).offsetWidth;
718
- }
719
- }
720
- };
721
1091
  MenuBase.prototype.setPosition = function (li, ul, top, left) {
722
1092
  var px = 'px';
723
1093
  this.toggleVisiblity(ul);
724
- if (ul === this.element || (!isNullOrUndefined(left) && !isNullOrUndefined(top))) {
1094
+ if (ul === this.element || (left > -1 && top > -1)) {
725
1095
  var collide = isCollide(ul, null, left, top);
726
1096
  if (collide.indexOf('right') > -1) {
727
1097
  left = left - ul.offsetWidth;
@@ -729,6 +1099,12 @@ var MenuBase = /** @class */ (function (_super) {
729
1099
  if (collide.indexOf('bottom') > -1) {
730
1100
  var offset = this.callFit(ul, false, true, top, left);
731
1101
  top = offset.top - 20;
1102
+ if (top < 0) {
1103
+ var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;
1104
+ if (newTop > -1) {
1105
+ top = newTop;
1106
+ }
1107
+ }
732
1108
  }
733
1109
  collide = isCollide(ul, null, left, top);
734
1110
  if (collide.indexOf('left') > -1) {
@@ -773,30 +1149,34 @@ var MenuBase = /** @class */ (function (_super) {
773
1149
  MenuBase.prototype.createItems = function (items) {
774
1150
  var _this = this;
775
1151
  var level = this.navIdx ? this.navIdx.length : 0;
1152
+ var fields = this.getFields(level);
776
1153
  var showIcon = this.hasField(items, this.getField('iconCss', level));
777
- var id = 'id';
778
1154
  var listBaseOptions = {
779
1155
  showIcon: showIcon,
780
1156
  moduleName: 'menu',
781
- fields: this.getFields(level),
1157
+ fields: fields,
782
1158
  template: this.template,
1159
+ itemNavigable: true,
783
1160
  itemCreating: function (args) {
784
- if (!args.curData[args.fields[id]]) {
785
- args.curData[args.fields[id]] = getUniqueID('menuitem');
786
- _this.clearChanges();
1161
+ if (!args.curData[args.fields[fields.id]]) {
1162
+ args.curData[args.fields[fields.id]] = getUniqueID('menuitem');
787
1163
  }
788
1164
  args.curData.htmlAttributes = {
789
1165
  role: 'menuitem',
790
1166
  tabindex: '-1'
791
1167
  };
792
1168
  if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {
793
- args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text];
1169
+ args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text] ?
1170
+ args.curData[args.fields.text] : args.curData[args.fields.id];
1171
+ }
1172
+ if (args.curData[args.fields[fields.iconCss]] === '') {
1173
+ args.curData[args.fields[fields.iconCss]] = null;
794
1174
  }
795
1175
  },
796
1176
  itemCreated: function (args) {
797
1177
  if (args.curData[_this.getField('separator', level)]) {
798
1178
  args.item.classList.add(SEPARATOR);
799
- args.item.removeAttribute('role');
1179
+ args.item.setAttribute('role', 'separator');
800
1180
  }
801
1181
  if (showIcon && !args.curData[args.fields.iconCss]
802
1182
  && !args.curData[_this.getField('separator', level)]) {
@@ -808,46 +1188,100 @@ var MenuBase = /** @class */ (function (_super) {
808
1188
  args.item.appendChild(span);
809
1189
  args.item.setAttribute('aria-haspopup', 'true');
810
1190
  args.item.setAttribute('aria-expanded', 'false');
811
- if (!_this.isMenu) {
812
- args.item.removeAttribute('role');
813
- }
814
1191
  args.item.classList.add('e-menu-caret-icon');
815
1192
  }
816
1193
  if (_this.isMenu && _this.template) {
817
1194
  args.item.setAttribute('id', args.curData[args.fields.id].toString());
818
1195
  args.item.removeAttribute('data-uid');
1196
+ if (args.item.classList.contains('e-level-1')) {
1197
+ args.item.classList.remove('e-level-1');
1198
+ }
1199
+ if (args.item.classList.contains('e-has-child')) {
1200
+ args.item.classList.remove('e-has-child');
1201
+ }
1202
+ args.item.removeAttribute('aria-level');
819
1203
  }
820
1204
  var eventArgs = { item: args.curData, element: args.item };
821
1205
  _this.trigger('beforeItemRender', eventArgs);
822
1206
  }
823
1207
  };
824
- var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template);
1208
+ this.setProperties({ 'items': this.items }, true);
1209
+ if (this.isMenu) {
1210
+ listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;
1211
+ }
1212
+ var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);
825
1213
  ul.setAttribute('tabindex', '0');
826
1214
  if (this.isMenu) {
827
1215
  ul.setAttribute('role', 'menu');
828
1216
  }
1217
+ else {
1218
+ ul.setAttribute('role', 'menubar');
1219
+ }
829
1220
  return ul;
830
1221
  };
831
1222
  MenuBase.prototype.moverHandler = function (e) {
832
- var wrapper = this.getWrapper();
833
1223
  var trgt = e.target;
1224
+ this.liTrgt = trgt;
834
1225
  var cli = this.getLI(trgt);
835
- if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper')) {
1226
+ var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();
1227
+ var hdrWrapper = this.getWrapper();
1228
+ var regex = new RegExp('-ej2menu-(.*)-popup');
1229
+ var ulId;
1230
+ var isDifferentElem = false;
1231
+ if (!wrapper) {
1232
+ return;
1233
+ }
1234
+ if (wrapper.id !== '') {
1235
+ ulId = regex.exec(wrapper.id)[1];
1236
+ }
1237
+ else {
1238
+ ulId = wrapper.querySelector('ul').id;
1239
+ }
1240
+ if (ulId !== this.element.id) {
1241
+ this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);
1242
+ if (this.navIdx.length) {
1243
+ isDifferentElem = true;
1244
+ }
1245
+ else {
1246
+ return;
1247
+ }
1248
+ }
1249
+ if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {
836
1250
  this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);
1251
+ this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);
837
1252
  cli.classList.add(FOCUSED);
838
1253
  if (!this.showItemOnClick) {
839
1254
  this.clickHandler(e);
840
1255
  }
841
1256
  }
1257
+ else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {
1258
+ this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));
1259
+ }
842
1260
  if (this.isMenu) {
843
- if ((trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup')) && !cli) {
844
- this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);
1261
+ if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))
1262
+ && (!cli || (cli && !this.getIndex(cli.id, true).length)) && this.showSubMenuOn !== 'Hover') {
1263
+ this.removeLIStateByClass([FOCUSED], [wrapper]);
1264
+ if (this.navIdx.length) {
1265
+ this.isClosed = true;
1266
+ this.closeMenu(null, e);
1267
+ }
1268
+ }
1269
+ else if (isDifferentElem && !this.showItemOnClick) {
845
1270
  if (this.navIdx.length) {
1271
+ this.isClosed = true;
846
1272
  this.closeMenu(null, e);
847
1273
  }
848
1274
  }
849
- wrapper = closest(trgt, '.e-menu-vscroll');
850
- if (trgt.tagName === 'DIV' && wrapper) {
1275
+ if (!this.isClosed) {
1276
+ this.removeStateWrapper();
1277
+ }
1278
+ this.isClosed = false;
1279
+ }
1280
+ };
1281
+ MenuBase.prototype.removeStateWrapper = function () {
1282
+ if (this.liTrgt) {
1283
+ var wrapper = closest(this.liTrgt, '.e-menu-vscroll');
1284
+ if (this.liTrgt.tagName === 'DIV' && wrapper) {
851
1285
  this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);
852
1286
  }
853
1287
  }
@@ -868,7 +1302,7 @@ var MenuBase = /** @class */ (function (_super) {
868
1302
  };
869
1303
  MenuBase.prototype.getField = function (propName, level) {
870
1304
  if (level === void 0) { level = 0; }
871
- var fieldName = this.fields[propName];
1305
+ var fieldName = this.fields["" + propName];
872
1306
  return typeof fieldName === 'string' ? fieldName :
873
1307
  (!fieldName[level] ? fieldName[fieldName.length - 1].toString()
874
1308
  : fieldName[level].toString());
@@ -886,12 +1320,23 @@ var MenuBase = /** @class */ (function (_super) {
886
1320
  };
887
1321
  MenuBase.prototype.hasField = function (items, field) {
888
1322
  for (var i = 0, len = items.length; i < len; i++) {
889
- if (items[i][field]) {
1323
+ if (items[i]["" + field]) {
890
1324
  return true;
891
1325
  }
892
1326
  }
893
1327
  return false;
894
1328
  };
1329
+ MenuBase.prototype.menuHeaderClickHandler = function (e) {
1330
+ if (closest(e.target, '.e-menu-wrapper').querySelector('ul.e-menu-parent').id !== this.element.id) {
1331
+ return;
1332
+ }
1333
+ if (this.element.className.indexOf('e-hide-menu') > -1) {
1334
+ this.openHamburgerMenu(e);
1335
+ }
1336
+ else {
1337
+ this.closeHamburgerMenu(e);
1338
+ }
1339
+ };
895
1340
  MenuBase.prototype.clickHandler = function (e) {
896
1341
  if (this.isTapHold) {
897
1342
  this.isTapHold = false;
@@ -899,15 +1344,26 @@ var MenuBase = /** @class */ (function (_super) {
899
1344
  else {
900
1345
  var wrapper = this.getWrapper();
901
1346
  var trgt = e.target;
902
- var cli = this.getLI(trgt);
1347
+ var cli = this.cli = this.getLI(trgt);
1348
+ var regex = new RegExp('-ej2menu-(.*)-popup');
903
1349
  var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;
904
1350
  var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0
905
1351
  : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);
1352
+ if (Browser.isDevice && this.isMenu) {
1353
+ this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));
1354
+ this.mouseDownHandler(e);
1355
+ }
1356
+ if (cli && cliWrapper && this.isMenu) {
1357
+ var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;
1358
+ if (this.element.id !== cliWrapperId) {
1359
+ return;
1360
+ }
1361
+ }
906
1362
  if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {
907
1363
  this.setLISelected(cli);
908
1364
  var navIdx = this.getIndex(cli.id, true);
909
1365
  var item = this.getItem(navIdx);
910
- var eventArgs = { element: cli, item: item };
1366
+ var eventArgs = { element: cli, item: item, event: e };
911
1367
  this.trigger('select', eventArgs);
912
1368
  }
913
1369
  if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {
@@ -924,41 +1380,35 @@ var MenuBase = /** @class */ (function (_super) {
924
1380
  }
925
1381
  else {
926
1382
  if (!cli.classList.contains(SEPARATOR)) {
927
- var showSubMenu = true;
1383
+ this.showSubMenu = true;
928
1384
  var cul = cli.parentNode;
929
- var cliIdx = this.getIdx(cul, cli);
1385
+ this.cliIdx = this.getIdx(cul, cli);
930
1386
  if (this.isMenu || !Browser.isDevice) {
931
1387
  var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))
932
1388
  : this.getIdx(wrapper, cul);
933
- if (this.navIdx[culIdx] === cliIdx) {
934
- showSubMenu = false;
1389
+ if (this.navIdx[culIdx] === this.cliIdx) {
1390
+ this.showSubMenu = false;
935
1391
  }
936
- if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {
1392
+ if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {
937
1393
  var sli = this.getLIByClass(cul, SELECTED);
938
1394
  if (sli) {
939
1395
  sli.classList.remove(SELECTED);
940
1396
  }
941
- this.closeMenu(culIdx + 1, e);
942
- }
943
- }
944
- if (showSubMenu) {
945
- var idx = this.navIdx.concat(cliIdx);
946
- var item = this.getItem(idx);
947
- if (item[this.getField('children', idx.length - 1)] &&
948
- item[this.getField('children', idx.length - 1)].length) {
949
- if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {
1397
+ this.isClosed = true;
1398
+ this.keyType = 'click';
1399
+ if (this.showItemOnClick) {
950
1400
  this.setLISelected(cli);
951
1401
  }
952
- cli.setAttribute('aria-expanded', 'true');
953
- this.navIdx.push(cliIdx);
954
- this.openMenu(cli, item, null, null, e);
955
- }
956
- else {
957
- if (e.type !== 'mouseover') {
958
- this.closeMenu(null, e);
1402
+ this.closeMenu(culIdx + 1, e);
1403
+ if (this.showItemOnClick) {
1404
+ this.setLISelected(cli);
959
1405
  }
960
1406
  }
961
1407
  }
1408
+ if (!this.isClosed) {
1409
+ this.afterCloseMenu(e);
1410
+ }
1411
+ this.isClosed = false;
962
1412
  }
963
1413
  }
964
1414
  }
@@ -968,11 +1418,21 @@ var MenuBase = /** @class */ (function (_super) {
968
1418
  var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;
969
1419
  if (cIdx < this.navIdx.length) {
970
1420
  this.closeMenu(cIdx + 1, e);
971
- this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);
1421
+ if (popupEle) {
1422
+ this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);
1423
+ }
972
1424
  }
973
1425
  }
1426
+ else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'
1427
+ && trgt.classList.contains('e-menu-icon')) {
1428
+ this.menuHeaderClickHandler(e);
1429
+ }
974
1430
  else {
975
- if (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {
1431
+ if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&
1432
+ !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {
1433
+ if (!cli) {
1434
+ this.removeLIStateByClass([SELECTED], [wrapper]);
1435
+ }
976
1436
  if (!cli || !cli.querySelector('.' + CARET)) {
977
1437
  this.closeMenu(null, e);
978
1438
  }
@@ -981,6 +1441,44 @@ var MenuBase = /** @class */ (function (_super) {
981
1441
  }
982
1442
  }
983
1443
  };
1444
+ MenuBase.prototype.afterCloseMenu = function (e) {
1445
+ var isHeader;
1446
+ if (this.showSubMenu) {
1447
+ if (this.showItemOnClick && this.navIdx.length === 0) {
1448
+ isHeader = closest(e.target, '.e-menu-parent.e-control');
1449
+ }
1450
+ else {
1451
+ isHeader = closest(this.element, '.e-menu-parent.e-control');
1452
+ }
1453
+ var idx = this.navIdx.concat(this.cliIdx);
1454
+ var item = this.getItem(idx);
1455
+ if (item && item[this.getField('children', idx.length - 1)] &&
1456
+ item[this.getField('children', idx.length - 1)].length) {
1457
+ if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {
1458
+ this.setLISelected(this.cli);
1459
+ }
1460
+ if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {
1461
+ this.cli.setAttribute('aria-expanded', 'true');
1462
+ this.navIdx.push(this.cliIdx);
1463
+ this.openMenu(this.cli, item, null, null, e);
1464
+ }
1465
+ }
1466
+ else {
1467
+ if (e.type !== 'mouseover') {
1468
+ this.closeMenu(null, e);
1469
+ }
1470
+ }
1471
+ if (!isHeader) {
1472
+ var cul = this.getUlByNavIdx();
1473
+ var sli = this.getLIByClass(cul, SELECTED);
1474
+ if (sli) {
1475
+ sli.setAttribute('aria-expanded', 'false');
1476
+ sli.classList.remove(SELECTED);
1477
+ }
1478
+ }
1479
+ }
1480
+ this.keyType = '';
1481
+ };
984
1482
  MenuBase.prototype.setLISelected = function (li) {
985
1483
  var sli = this.getLIByClass(li.parentElement, SELECTED);
986
1484
  if (sli) {
@@ -999,6 +1497,45 @@ var MenuBase = /** @class */ (function (_super) {
999
1497
  }
1000
1498
  return null;
1001
1499
  };
1500
+ /**
1501
+ * This method is used to get the index of the menu item in the Menu based on the argument.
1502
+ *
1503
+ * @param {MenuItem | string} item - item be passed to get the index | id to be passed to get the item index.
1504
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
1505
+ * @returns {void}
1506
+ */
1507
+ MenuBase.prototype.getItemIndex = function (item, isUniqueId) {
1508
+ var idx;
1509
+ if (typeof item === 'string') {
1510
+ idx = item;
1511
+ }
1512
+ else {
1513
+ idx = item.id;
1514
+ }
1515
+ var isText = (isUniqueId === false) ? false : true;
1516
+ var navIdx = this.getIndex(idx, isText);
1517
+ return navIdx;
1518
+ };
1519
+ /**
1520
+ * This method is used to set the menu item in the Menu based on the argument.
1521
+ *
1522
+ * @param {MenuItem} item - item need to be updated.
1523
+ * @param {string} id - id / text to be passed to update the item.
1524
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
1525
+ * @returns {void}
1526
+ */
1527
+ MenuBase.prototype.setItem = function (item, id, isUniqueId) {
1528
+ var idx;
1529
+ if (isUniqueId) {
1530
+ idx = id ? id : item.id;
1531
+ }
1532
+ else {
1533
+ idx = id ? id : item.text;
1534
+ }
1535
+ var navIdx = this.getIndex(idx, isUniqueId);
1536
+ var newItem = this.getItem(navIdx);
1537
+ Object.assign(newItem, item);
1538
+ };
1002
1539
  MenuBase.prototype.getItem = function (navIdx) {
1003
1540
  navIdx = navIdx.slice();
1004
1541
  var idx = navIdx.pop();
@@ -1012,6 +1549,13 @@ var MenuBase = /** @class */ (function (_super) {
1012
1549
  }
1013
1550
  return items;
1014
1551
  };
1552
+ MenuBase.prototype.setItems = function (newItems, navIdx) {
1553
+ var items = this.getItems(navIdx);
1554
+ items.splice(0, items.length);
1555
+ for (var i = 0; i < newItems.length; i++) {
1556
+ items.splice(i, 0, newItems[i]);
1557
+ }
1558
+ };
1015
1559
  MenuBase.prototype.getIdx = function (ul, li, skipHdr) {
1016
1560
  if (skipHdr === void 0) { skipHdr = true; }
1017
1561
  var idx = Array.prototype.indexOf.call(ul.children, li);
@@ -1026,12 +1570,35 @@ var MenuBase = /** @class */ (function (_super) {
1026
1570
  }
1027
1571
  return closest(elem, 'li.e-menu-item');
1028
1572
  };
1573
+ MenuBase.prototype.updateItemsByNavIdx = function () {
1574
+ var items = this.items;
1575
+ var count = 0;
1576
+ for (var index = 0; index < this.navIdx.length; index++) {
1577
+ items = items[index].items;
1578
+ if (!items) {
1579
+ break;
1580
+ }
1581
+ count++;
1582
+ var ul = this.getUlByNavIdx(count);
1583
+ if (!ul) {
1584
+ break;
1585
+ }
1586
+ this.updateItem(ul, items);
1587
+ }
1588
+ };
1589
+ MenuBase.prototype.removeChildElement = function (elem) {
1590
+ while (elem.firstElementChild) {
1591
+ elem.removeChild(elem.firstElementChild);
1592
+ }
1593
+ return elem;
1594
+ };
1029
1595
  /**
1030
- * Called internally if any of the property value changed
1596
+ * Called internally if any of the property value changed.
1597
+ *
1031
1598
  * @private
1032
- * @param {MenuBaseModel} newProp
1033
- * @param {MenuBaseModel} oldProp
1034
- * @returns void
1599
+ * @param {MenuBaseModel} newProp - Specifies the new properties
1600
+ * @param {MenuBaseModel} oldProp - Specifies the old properties
1601
+ * @returns {void}
1035
1602
  */
1036
1603
  MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {
1037
1604
  var _this = this;
@@ -1043,7 +1610,7 @@ var MenuBase = /** @class */ (function (_super) {
1043
1610
  removeClass([wrapper], oldProp.cssClass.split(' '));
1044
1611
  }
1045
1612
  if (newProp.cssClass) {
1046
- addClass([wrapper], newProp.cssClass.split(' '));
1613
+ addClass([wrapper], newProp.cssClass.replace(/\s+/g, ' ').trim().split(' '));
1047
1614
  }
1048
1615
  break;
1049
1616
  case 'enableRtl':
@@ -1056,41 +1623,57 @@ var MenuBase = /** @class */ (function (_super) {
1056
1623
  break;
1057
1624
  case 'enableScrolling':
1058
1625
  if (newProp.enableScrolling) {
1059
- var ul_1;
1060
- this_1.element.classList.contains('e-vertical') ?
1061
- this_1.addScrolling(wrapper, this_1.element, 'vscroll', wrapper.offsetHeight, this_1.element.offsetHeight)
1062
- : this_1.addScrolling(wrapper, this_1.element, 'hscroll', wrapper.offsetWidth, this_1.element.offsetWidth);
1626
+ var ul_2;
1627
+ if (this_1.element.classList.contains('e-vertical')) {
1628
+ addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);
1629
+ }
1630
+ else {
1631
+ addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);
1632
+ }
1063
1633
  this_1.getPopups().forEach(function (wrapper) {
1064
- ul_1 = select('.e-ul', wrapper);
1065
- _this.addScrolling(wrapper, ul_1, 'vscroll', wrapper.offsetHeight, ul_1.offsetHeight);
1634
+ ul_2 = select('.e-ul', wrapper);
1635
+ addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);
1066
1636
  });
1067
1637
  }
1068
1638
  else {
1069
- var ul_2 = wrapper.children[0];
1070
- this_1.element.classList.contains('e-vertical') ? this_1.destroyScrollObj(getInstance(ul_2, VScroll), ul_2)
1071
- : this_1.destroyScrollObj(getInstance(ul_2, HScroll), ul_2);
1639
+ var ul_3 = wrapper.children[0];
1640
+ if (this_1.element.classList.contains('e-vertical')) {
1641
+ destroyScroll(getInstance(ul_3, VScroll), ul_3);
1642
+ }
1643
+ else {
1644
+ destroyScroll(getInstance(ul_3, HScroll), ul_3);
1645
+ }
1072
1646
  wrapper.style.overflow = '';
1073
1647
  wrapper.appendChild(this_1.element);
1074
1648
  this_1.getPopups().forEach(function (wrapper) {
1075
- ul_2 = wrapper.children[0];
1076
- _this.destroyScrollObj(getInstance(ul_2, VScroll), ul_2);
1649
+ ul_3 = wrapper.children[0];
1650
+ destroyScroll(getInstance(ul_3, VScroll), ul_3);
1077
1651
  wrapper.style.overflow = '';
1078
1652
  });
1079
1653
  }
1080
1654
  break;
1081
- case 'items':
1655
+ case 'items': {
1082
1656
  var idx = void 0;
1083
1657
  var navIdx = void 0;
1084
1658
  var item = void 0;
1659
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1660
+ if (this_1.isReact && this_1.template) {
1661
+ this_1.clearTemplate(['template']);
1662
+ }
1085
1663
  if (!Object.keys(oldProp.items).length) {
1086
- var ul_3 = this_1.element;
1087
- ul_3.innerHTML = '';
1088
- var lis = [].slice.call(this_1.createItems(newProp.items).children);
1089
- lis.forEach(function (li) {
1090
- ul_3.appendChild(li);
1091
- });
1092
- for (var i = 1, count = wrapper.childElementCount; i < count; i++) {
1093
- detach(wrapper.lastElementChild);
1664
+ this_1.updateItem(this_1.element, this_1.items);
1665
+ if (this_1.enableScrolling && this_1.element.parentElement.classList.contains('e-custom-scroll')) {
1666
+ if (this_1.element.classList.contains('e-vertical')) {
1667
+ addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);
1668
+ }
1669
+ else {
1670
+ addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);
1671
+ }
1672
+ }
1673
+ if (!this_1.hamburgerMode) {
1674
+ for (var i = 1, count = wrapper.childElementCount; i < count; i++) {
1675
+ detach(wrapper.lastElementChild);
1676
+ }
1094
1677
  }
1095
1678
  this_1.navIdx = [];
1096
1679
  }
@@ -1103,11 +1686,13 @@ var MenuBase = /** @class */ (function (_super) {
1103
1686
  item = this_1.getItems(navIdx);
1104
1687
  this_1.insertAfter([item[idx]], item[idx].text);
1105
1688
  this_1.removeItem(item, navIdx, idx);
1689
+ this_1.setItems(item, navIdx);
1106
1690
  }
1107
1691
  navIdx.length = 0;
1108
1692
  }
1109
1693
  }
1110
1694
  break;
1695
+ }
1111
1696
  }
1112
1697
  };
1113
1698
  var this_1 = this;
@@ -1116,12 +1701,37 @@ var MenuBase = /** @class */ (function (_super) {
1116
1701
  _loop_2(prop);
1117
1702
  }
1118
1703
  };
1704
+ MenuBase.prototype.updateItem = function (ul, items) {
1705
+ if (isBlazor() && !this.isMenu) {
1706
+ ul = this.removeChildElement(ul);
1707
+ }
1708
+ else {
1709
+ if (this.enableScrolling) {
1710
+ var wrapper1 = this.getWrapper();
1711
+ var ul1 = wrapper1.children[0];
1712
+ if (this.element.classList.contains('e-vertical')) {
1713
+ destroyScroll(getInstance(ul1, VScroll), ul1);
1714
+ }
1715
+ else {
1716
+ destroyScroll(getInstance(ul1, HScroll), ul1);
1717
+ }
1718
+ }
1719
+ ul.innerHTML = '';
1720
+ }
1721
+ var lis = [].slice.call(this.createItems(items).children);
1722
+ lis.forEach(function (li) {
1723
+ ul.appendChild(li);
1724
+ });
1725
+ };
1119
1726
  MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {
1120
1727
  index.push(idx);
1121
1728
  var key = Object.keys(newProp.items[idx]).pop();
1122
1729
  if (key === 'items') {
1123
1730
  var item = newProp.items[idx];
1124
- this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));
1731
+ var popStr = Object.keys(item.items).pop();
1732
+ if (popStr) {
1733
+ this.getChangedItemIndex(item, index, Number(popStr));
1734
+ }
1125
1735
  }
1126
1736
  else {
1127
1737
  if (key === 'isParentArray' && index.length > 1) {
@@ -1139,29 +1749,41 @@ var MenuBase = /** @class */ (function (_super) {
1139
1749
  };
1140
1750
  /**
1141
1751
  * Used to unwire the bind events.
1752
+ *
1142
1753
  * @private
1754
+ * @param {string} targetSelctor - Specifies the target selector
1755
+ * @returns {void}
1143
1756
  */
1144
- MenuBase.prototype.unWireEvents = function () {
1757
+ MenuBase.prototype.unWireEvents = function (targetSelctor) {
1758
+ if (targetSelctor === void 0) { targetSelctor = this.target; }
1145
1759
  var wrapper = this.getWrapper();
1146
- if (this.target) {
1760
+ if (targetSelctor) {
1147
1761
  var target = void 0;
1148
1762
  var touchModule = void 0;
1149
- var targetElems = selectAll(this.target);
1763
+ var targetElems = selectAll(targetSelctor);
1150
1764
  for (var i = 0, len = targetElems.length; i < len; i++) {
1151
1765
  target = targetElems[i];
1152
- if (Browser.isIos) {
1153
- touchModule = getInstance(target, Touch);
1154
- if (touchModule) {
1155
- touchModule.destroy();
1156
- }
1766
+ if (this.isMenu) {
1767
+ EventHandler.remove(target, 'click', this.menuHeaderClickHandler);
1157
1768
  }
1158
1769
  else {
1159
- EventHandler.remove(target, 'contextmenu', this.cmenuHandler);
1770
+ if (Browser.isIos) {
1771
+ touchModule = getInstance(target, Touch);
1772
+ if (touchModule) {
1773
+ touchModule.destroy();
1774
+ }
1775
+ }
1776
+ else {
1777
+ EventHandler.remove(target, 'contextmenu', this.cmenuHandler);
1778
+ }
1160
1779
  }
1161
1780
  }
1162
- for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {
1163
- var parent_2 = _a[_i];
1164
- EventHandler.remove(parent_2, 'scroll', this.scrollHandler);
1781
+ if (!this.isMenu) {
1782
+ EventHandler.remove(this.targetElement, 'scroll', this.scrollHandler);
1783
+ for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {
1784
+ var parent_2 = _a[_i];
1785
+ EventHandler.remove(parent_2, 'scroll', this.scrollHandler);
1786
+ }
1165
1787
  }
1166
1788
  }
1167
1789
  if (!Browser.isDevice) {
@@ -1181,6 +1803,8 @@ var MenuBase = /** @class */ (function (_super) {
1181
1803
  MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {
1182
1804
  var _this = this;
1183
1805
  if (isMenuOpen === void 0) { isMenuOpen = true; }
1806
+ var pUlHeight;
1807
+ var pElement;
1184
1808
  if (this.animationSettings.effect === 'None' || !isMenuOpen) {
1185
1809
  this.end(ul, isMenuOpen);
1186
1810
  }
@@ -1190,11 +1814,35 @@ var MenuBase = /** @class */ (function (_super) {
1190
1814
  duration: this.animationSettings.duration,
1191
1815
  timingFunction: this.animationSettings.easing,
1192
1816
  begin: function (options) {
1193
- options.element.style.display = 'block';
1194
- options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';
1817
+ if (_this.hamburgerMode) {
1818
+ pElement = options.element.parentElement;
1819
+ options.element.style.position = 'absolute';
1820
+ pUlHeight = pElement.offsetHeight;
1821
+ options.element.style.maxHeight = options.element.offsetHeight + 'px';
1822
+ pElement.style.maxHeight = '';
1823
+ }
1824
+ else {
1825
+ options.element.style.display = 'block';
1826
+ options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';
1827
+ }
1828
+ },
1829
+ progress: function (options) {
1830
+ if (_this.hamburgerMode) {
1831
+ pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';
1832
+ }
1195
1833
  },
1196
1834
  end: function (options) {
1197
- _this.end(options.element, isMenuOpen);
1835
+ if (_this.hamburgerMode) {
1836
+ options.element.style.position = '';
1837
+ options.element.style.maxHeight = '';
1838
+ pElement.style.minHeight = '';
1839
+ options.element.style.top = 0 + 'px';
1840
+ options.element.children[0].focus();
1841
+ _this.triggerOpen(options.element.children[0]);
1842
+ }
1843
+ else {
1844
+ _this.end(options.element, isMenuOpen);
1845
+ }
1198
1846
  }
1199
1847
  });
1200
1848
  }
@@ -1215,13 +1863,24 @@ var MenuBase = /** @class */ (function (_super) {
1215
1863
  ul.querySelector('.' + FOCUSED).focus();
1216
1864
  }
1217
1865
  else {
1218
- var ele = void 0;
1219
- ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];
1220
- if (ele) {
1221
- ele.querySelector('.' + SELECTED).focus();
1866
+ var ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];
1867
+ if (this.currentTarget) {
1868
+ if (!(this.currentTarget.classList.contains('e-numerictextbox') || this.currentTarget.classList.contains('e-textbox') || this.currentTarget.tagName === 'INPUT')) {
1869
+ if (ele) {
1870
+ ele.querySelector('.' + SELECTED).focus();
1871
+ }
1872
+ else {
1873
+ this.element.focus();
1874
+ }
1875
+ }
1222
1876
  }
1223
1877
  else {
1224
- this.element.focus();
1878
+ if (ele) {
1879
+ ele.querySelector('.' + SELECTED).focus();
1880
+ }
1881
+ else {
1882
+ this.element.focus();
1883
+ }
1225
1884
  }
1226
1885
  }
1227
1886
  }
@@ -1244,14 +1903,16 @@ var MenuBase = /** @class */ (function (_super) {
1244
1903
  };
1245
1904
  /**
1246
1905
  * Get the properties to be maintained in the persisted state.
1247
- * @returns string
1906
+ *
1907
+ * @returns {string} - Persist data
1248
1908
  */
1249
1909
  MenuBase.prototype.getPersistData = function () {
1250
1910
  return '';
1251
1911
  };
1252
1912
  /**
1253
1913
  * Get wrapper element.
1254
- * @returns Element
1914
+ *
1915
+ * @returns {Element} - Wrapper element
1255
1916
  * @private
1256
1917
  */
1257
1918
  MenuBase.prototype.getWrapper = function () {
@@ -1293,10 +1954,11 @@ var MenuBase = /** @class */ (function (_super) {
1293
1954
  };
1294
1955
  /**
1295
1956
  * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.
1296
- * @param items Text items that needs to be enabled/disabled.
1297
- * @param enable Set `true`/`false` to enable/disable the list items.
1298
- * @param isUniqueId - Set `true` if it is a unique id.
1299
- * @returns void
1957
+ *
1958
+ * @param {string[]} items - Text items that needs to be enabled/disabled.
1959
+ * @param {boolean} enable - Set `true`/`false` to enable/disable the list items.
1960
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
1961
+ * @returns {void}
1300
1962
  */
1301
1963
  MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {
1302
1964
  if (enable === void 0) { enable = true; }
@@ -1304,8 +1966,28 @@ var MenuBase = /** @class */ (function (_super) {
1304
1966
  var idx;
1305
1967
  var navIdx;
1306
1968
  var disabled = DISABLED;
1969
+ var skipItem;
1307
1970
  for (var i = 0; i < items.length; i++) {
1308
1971
  navIdx = this.getIndex(items[i], isUniqueId);
1972
+ if (this.navIdx.length) {
1973
+ if (navIdx.length !== 1) {
1974
+ skipItem = false;
1975
+ for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {
1976
+ if (navIdx[i_1] !== this.navIdx[i_1]) {
1977
+ skipItem = true;
1978
+ break;
1979
+ }
1980
+ }
1981
+ if (skipItem) {
1982
+ continue;
1983
+ }
1984
+ }
1985
+ }
1986
+ else {
1987
+ if (navIdx.length !== 1) {
1988
+ continue;
1989
+ }
1990
+ }
1309
1991
  idx = navIdx.pop();
1310
1992
  ul = this.getUlByNavIdx(navIdx.length);
1311
1993
  if (ul) {
@@ -1342,17 +2024,20 @@ var MenuBase = /** @class */ (function (_super) {
1342
2024
  };
1343
2025
  /**
1344
2026
  * This method is used to show the menu items in the Menu based on the items text.
1345
- * @param items Text items that needs to be shown.
1346
- * @param isUniqueId - Set `true` if it is a unique id.
1347
- * @returns void
2027
+ *
2028
+ * @param {string[]} items - Text items that needs to be shown.
2029
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
2030
+ * @returns {void}
1348
2031
  */
1349
2032
  MenuBase.prototype.showItems = function (items, isUniqueId) {
1350
2033
  this.showHideItems(items, false, isUniqueId);
1351
2034
  };
1352
2035
  /**
1353
2036
  * This method is used to hide the menu items in the Menu based on the items text.
1354
- * @param items Text items that needs to be hidden.
1355
- * @returns void
2037
+ *
2038
+ * @param {string[]} items - Text items that needs to be hidden.
2039
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
2040
+ * @returns {void}
1356
2041
  */
1357
2042
  MenuBase.prototype.hideItems = function (items, isUniqueId) {
1358
2043
  this.showHideItems(items, true, isUniqueId);
@@ -1387,8 +2072,10 @@ var MenuBase = /** @class */ (function (_super) {
1387
2072
  };
1388
2073
  /**
1389
2074
  * It is used to remove the menu items from the Menu based on the items text.
1390
- * @param items Text items that needs to be removed.
1391
- * @returns void
2075
+ *
2076
+ * @param {string[]} items Text items that needs to be removed.
2077
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
2078
+ * @returns {void}
1392
2079
  */
1393
2080
  MenuBase.prototype.removeItems = function (items, isUniqueId) {
1394
2081
  var idx;
@@ -1398,24 +2085,29 @@ var MenuBase = /** @class */ (function (_super) {
1398
2085
  navIdx = this.getIndex(items[i], isUniqueId);
1399
2086
  idx = navIdx.pop();
1400
2087
  iitems = this.getItems(navIdx);
1401
- this.removeItem(iitems, navIdx, idx);
2088
+ if (!isNullOrUndefined(idx)) {
2089
+ this.removeItem(iitems, navIdx, idx);
2090
+ }
1402
2091
  }
1403
2092
  };
1404
2093
  /**
1405
2094
  * It is used to insert the menu items after the specified menu item text.
1406
- * @param items Items that needs to be inserted.
1407
- * @param text Text item after that the element to be inserted.
1408
- * @returns void
2095
+ *
2096
+ * @param {MenuItemModel[]} items - Items that needs to be inserted.
2097
+ * @param {string} text - Text item after that the element to be inserted.
2098
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
2099
+ * @returns {void}
1409
2100
  */
1410
2101
  MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {
1411
2102
  this.insertItems(items, text, isUniqueId);
1412
2103
  };
1413
2104
  /**
1414
2105
  * It is used to insert the menu items before the specified menu item text.
1415
- * @param items Items that needs to be inserted.
1416
- * @param text Text item before that the element to be inserted.
1417
- * @param isUniqueId - Set `true` if it is a unique id.
1418
- * @returns void
2106
+ *
2107
+ * @param {MenuItemModel[]} items - Items that needs to be inserted.
2108
+ * @param {string} text - Text item before that the element to be inserted.
2109
+ * @param {boolean} isUniqueId - Set `true` if it is a unique id.
2110
+ * @returns {void}
1419
2111
  */
1420
2112
  MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {
1421
2113
  this.insertItems(items, text, isUniqueId, false);
@@ -1427,7 +2119,6 @@ var MenuBase = /** @class */ (function (_super) {
1427
2119
  var navIdx;
1428
2120
  var iitems;
1429
2121
  var menuitem;
1430
- var showIcon;
1431
2122
  for (var i = 0; i < items.length; i++) {
1432
2123
  navIdx = this.getIndex(text, isUniqueId);
1433
2124
  idx = navIdx.pop();
@@ -1435,48 +2126,84 @@ var MenuBase = /** @class */ (function (_super) {
1435
2126
  menuitem = new MenuItem(iitems[0], 'items', items[i], true);
1436
2127
  iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);
1437
2128
  var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);
1438
- if (navIdx.length < uls.length) {
2129
+ if (!isNullOrUndefined(idx) && navIdx.length < uls.length) {
1439
2130
  idx = isAfter ? idx + 1 : idx;
1440
- showIcon = this.hasField(iitems, this.getField('iconCss', navIdx.length - 1));
1441
2131
  li = this.createItems(iitems).children[idx];
1442
2132
  var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];
1443
2133
  ul.insertBefore(li, ul.children[idx]);
1444
2134
  }
1445
2135
  }
1446
2136
  };
2137
+ MenuBase.prototype.removeAttributes = function () {
2138
+ var _this = this;
2139
+ ['top', 'left', 'display', 'z-index'].forEach(function (key) {
2140
+ _this.element.style.removeProperty(key);
2141
+ });
2142
+ ['role', 'tabindex', 'class', 'style'].forEach(function (key) {
2143
+ if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {
2144
+ _this.element.classList.remove('e-menu-parent');
2145
+ }
2146
+ if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {
2147
+ _this.element.removeAttribute(key);
2148
+ }
2149
+ if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {
2150
+ _this.element.classList.remove('e-vertical');
2151
+ }
2152
+ });
2153
+ };
1447
2154
  /**
1448
2155
  * Destroys the widget.
1449
- * @returns void
2156
+ *
2157
+ * @returns {void}
1450
2158
  */
1451
2159
  MenuBase.prototype.destroy = function () {
1452
- var _this = this;
1453
2160
  var wrapper = this.getWrapper();
1454
2161
  if (wrapper) {
1455
- _super.prototype.destroy.call(this);
1456
2162
  this.unWireEvents();
1457
- if (this.ngElement && !this.isMenu) {
1458
- this.ngElement.style.display = 'block';
2163
+ if (!this.isMenu) {
2164
+ this.clonedElement.style.display = '';
2165
+ if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {
2166
+ addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);
2167
+ this.element = this.clonedElement;
2168
+ }
2169
+ else {
2170
+ if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {
2171
+ this.setProperties({ 'items': [] }, true);
2172
+ }
2173
+ if (document.getElementById(this.clonedElement.id)) {
2174
+ var refEle = this.clonedElement.nextElementSibling;
2175
+ if (refEle && refEle !== wrapper) {
2176
+ this.clonedElement.parentElement.insertBefore(this.element, refEle);
2177
+ }
2178
+ else {
2179
+ this.clonedElement.parentElement.appendChild(this.element);
2180
+ }
2181
+ if (isBlazor() && !this.isMenu) {
2182
+ this.element = this.removeChildElement(this.element);
2183
+ }
2184
+ else {
2185
+ this.element.innerHTML = '';
2186
+ }
2187
+ append([].slice.call(this.clonedElement.children), this.element);
2188
+ detach(this.clonedElement);
2189
+ this.removeAttributes();
2190
+ }
2191
+ }
2192
+ this.clonedElement = null;
1459
2193
  }
1460
2194
  else {
1461
2195
  this.closeMenu();
1462
- this.element.innerHTML = '';
1463
- ['top', 'left', 'display', 'z-index'].forEach(function (key) {
1464
- _this.element.style.removeProperty(key);
1465
- });
1466
- ['role', 'tabindex', 'class', 'style'].forEach(function (key) {
1467
- if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {
1468
- _this.element.classList.remove('e-menu-parent');
1469
- }
1470
- if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {
1471
- _this.element.removeAttribute(key);
1472
- }
1473
- if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {
1474
- _this.element.classList.remove('e-vertical');
1475
- }
1476
- });
2196
+ if (isBlazor() && !this.isMenu) {
2197
+ this.element = this.removeChildElement(this.element);
2198
+ }
2199
+ else {
2200
+ this.element.innerHTML = '';
2201
+ }
2202
+ this.removeAttributes();
1477
2203
  wrapper.parentNode.insertBefore(this.element, wrapper);
2204
+ this.clonedElement = null;
1478
2205
  }
1479
- if (this.isMenu && this.ngElement) {
2206
+ if (this.isMenu && this.clonedElement) {
1480
2207
  detach(this.element);
1481
2208
  wrapper.style.display = '';
1482
2209
  wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');
@@ -1485,7 +2212,12 @@ var MenuBase = /** @class */ (function (_super) {
1485
2212
  else {
1486
2213
  detach(wrapper);
1487
2214
  }
2215
+ _super.prototype.destroy.call(this);
2216
+ if (this.template) {
2217
+ this.clearTemplate(['template']);
2218
+ }
1488
2219
  }
2220
+ this.rippleFn = null;
1489
2221
  };
1490
2222
  __decorate([
1491
2223
  Event()
@@ -1511,6 +2243,9 @@ var MenuBase = /** @class */ (function (_super) {
1511
2243
  __decorate([
1512
2244
  Property('')
1513
2245
  ], MenuBase.prototype, "cssClass", void 0);
2246
+ __decorate([
2247
+ Property(0)
2248
+ ], MenuBase.prototype, "hoverDelay", void 0);
1514
2249
  __decorate([
1515
2250
  Property(false)
1516
2251
  ], MenuBase.prototype, "showItemOnClick", void 0);
@@ -1527,13 +2262,16 @@ var MenuBase = /** @class */ (function (_super) {
1527
2262
  Property(false)
1528
2263
  ], MenuBase.prototype, "enableScrolling", void 0);
1529
2264
  __decorate([
1530
- Complex({}, FieldSettings)
2265
+ Property(false)
2266
+ ], MenuBase.prototype, "enableHtmlSanitizer", void 0);
2267
+ __decorate([
2268
+ Complex({ itemId: 'id', text: 'text', parentId: 'parentId', iconCss: 'iconCss', url: 'url', separator: 'separator', children: 'items' }, FieldSettings)
1531
2269
  ], MenuBase.prototype, "fields", void 0);
1532
2270
  __decorate([
1533
2271
  Collection([], MenuItem)
1534
2272
  ], MenuBase.prototype, "items", void 0);
1535
2273
  __decorate([
1536
- Complex({}, MenuAnimationSettings)
2274
+ Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)
1537
2275
  ], MenuBase.prototype, "animationSettings", void 0);
1538
2276
  MenuBase = __decorate([
1539
2277
  NotifyPropertyChanges