@shortfuse/materialdesignweb 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/.eslintrc.json +136 -30
  2. package/.stylelintrc.json +6 -40
  3. package/.vscode/launch.json +20 -5
  4. package/CHANGELOG.md +24 -0
  5. package/README.md +12 -9
  6. package/adapters/datatable/column.js +82 -74
  7. package/adapters/datatable/index.js +173 -131
  8. package/adapters/dom/index.js +529 -75
  9. package/adapters/list/index.js +25 -12
  10. package/adapters/search/index.js +13 -13
  11. package/components/appbar/_spec.scss +87 -64
  12. package/components/appbar/index.scss +2 -2
  13. package/components/banner/_spec.scss +8 -8
  14. package/components/banner/index.scss +2 -2
  15. package/components/bottomnav/_spec.scss +22 -17
  16. package/components/bottomnav/index.js +61 -52
  17. package/components/bottomnav/index.scss +2 -2
  18. package/components/bottomnav/item.js +44 -25
  19. package/components/button/README.md +14 -14
  20. package/components/button/_spec.scss +23 -22
  21. package/components/button/_theme.scss +37 -21
  22. package/components/button/index.eta +32 -0
  23. package/components/button/index.js +12 -12
  24. package/components/button/index.scss +2 -2
  25. package/components/card/_spec.scss +40 -36
  26. package/components/card/index.scss +2 -2
  27. package/components/chip/_spec.scss +7 -8
  28. package/components/chip/_theme.scss +31 -31
  29. package/components/chip/index.js +3 -2
  30. package/components/chip/index.scss +2 -2
  31. package/components/chip/item.js +1 -16
  32. package/components/datatable/_spec.scss +71 -85
  33. package/components/datatable/_theme.scss +61 -156
  34. package/components/datatable/cell.js +45 -0
  35. package/components/datatable/columnheader.js +47 -0
  36. package/components/datatable/index.js +279 -366
  37. package/components/datatable/index.scss +2 -2
  38. package/components/datatable/row.js +49 -0
  39. package/components/datatable/rowheader.js +18 -0
  40. package/components/dialog/_spec.scss +61 -41
  41. package/components/dialog/index.js +325 -297
  42. package/components/dialog/index.scss +2 -2
  43. package/components/divider/_spec.scss +8 -6
  44. package/components/divider/index.scss +2 -2
  45. package/components/elevation/_spec.scss +2 -2
  46. package/components/elevation/index.scss +2 -2
  47. package/components/fab/_spec.scss +23 -24
  48. package/components/fab/index.js +50 -50
  49. package/components/fab/index.scss +2 -2
  50. package/components/grid/_spec.scss +33 -31
  51. package/components/grid/index.scss +2 -2
  52. package/components/layout/_mixins.scss +5 -5
  53. package/components/layout/_spec.scss +206 -176
  54. package/components/layout/_theme.scss +14 -16
  55. package/components/layout/index.js +181 -153
  56. package/components/layout/index.scss +2 -2
  57. package/components/list/_spec.scss +117 -104
  58. package/components/list/_theme.scss +31 -34
  59. package/components/list/content.js +68 -52
  60. package/components/list/index.js +194 -61
  61. package/components/list/index.scss +2 -2
  62. package/components/list/item.js +136 -12
  63. package/components/list/secondary.js +46 -0
  64. package/components/menu/_spec.scss +32 -19
  65. package/components/menu/index.js +242 -229
  66. package/components/menu/index.scss +2 -2
  67. package/components/menu/item.js +95 -110
  68. package/components/progress/_spec.scss +35 -27
  69. package/components/progress/index.js +21 -0
  70. package/components/progress/index.scss +2 -1
  71. package/components/selection/_spec.scss +242 -224
  72. package/components/selection/_theme.scss +100 -95
  73. package/components/selection/index.eta +60 -0
  74. package/components/selection/index.js +76 -0
  75. package/components/selection/index.pug +15 -8
  76. package/components/selection/index.scss +2 -2
  77. package/components/selection/input.js +56 -0
  78. package/components/selection/radiogroup.js +47 -0
  79. package/components/slider/_spec.scss +10 -8
  80. package/components/slider/index.scss +2 -2
  81. package/components/snackbar/_spec.scss +22 -21
  82. package/components/snackbar/index.js +102 -111
  83. package/components/snackbar/index.scss +2 -2
  84. package/components/tab/_spec.scss +20 -19
  85. package/components/tab/content.js +41 -40
  86. package/components/tab/index.js +192 -99
  87. package/components/tab/index.scss +2 -2
  88. package/components/tab/item.js +38 -55
  89. package/components/tab/list.js +96 -72
  90. package/components/tab/panel.js +12 -13
  91. package/components/template/_theme.scss +11 -11
  92. package/components/textfield/_mixins.scss +52 -0
  93. package/components/textfield/_spec.scss +215 -266
  94. package/components/textfield/_theme.scss +95 -72
  95. package/components/textfield/index.eta +74 -0
  96. package/components/textfield/index.js +63 -57
  97. package/components/textfield/index.scss +2 -2
  98. package/components/tooltip/_spec.scss +27 -25
  99. package/components/tooltip/index.scss +2 -2
  100. package/components/type/_spec.scss +51 -38
  101. package/components/type/index.scss +2 -2
  102. package/core/_breakpoint.scss +75 -91
  103. package/core/_elevation.scss +10 -10
  104. package/core/_length.scss +9 -0
  105. package/core/_motion.scss +14 -14
  106. package/core/_platform.scss +9 -15
  107. package/core/_type.scss +33 -32
  108. package/core/aria/attributes.js +125 -25
  109. package/core/aria/button.js +23 -23
  110. package/core/aria/keyboard.js +93 -0
  111. package/core/aria/rovingtabindex.js +69 -154
  112. package/core/aria/tab.js +31 -28
  113. package/core/color/_theme.scss +240 -280
  114. package/core/color/index.scss +2 -2
  115. package/core/document/index.js +39 -0
  116. package/core/dom.js +12 -12
  117. package/core/overlay/_spec.scss +0 -3
  118. package/core/overlay/_theme.scss +56 -74
  119. package/core/overlay/index.js +49 -18
  120. package/core/overlay/index.scss +2 -2
  121. package/core/ripple/_spec.scss +22 -39
  122. package/core/ripple/_theme.scss +13 -13
  123. package/core/ripple/index.js +137 -134
  124. package/core/ripple/index.scss +2 -2
  125. package/core/theme/_config.scss +2 -0
  126. package/core/theme/_mixins.scss +172 -0
  127. package/core/theme/_palettes.scss +155 -135
  128. package/core/theme/_variables.scss +24 -15
  129. package/core/theme/index.js +50 -0
  130. package/core/throttler.js +1 -1
  131. package/core/transition/index.js +36 -20
  132. package/{docs-src → docs}/_flex.scss +0 -0
  133. package/{docs-src → docs}/_menuoptions.js +21 -34
  134. package/{docs-src → docs}/_mixins.pug +39 -26
  135. package/docs/_partials/_androidnavbar.eta +5 -0
  136. package/docs/_partials/_androidstatusbar.eta +13 -0
  137. package/docs/_partials/_appbar.eta +29 -0
  138. package/docs/_partials/_buttontest.eta +31 -0
  139. package/docs/_partials/_header.eta +149 -0
  140. package/docs/_partials/_navlistitem.eta +16 -0
  141. package/docs/_partials/_target.eta +1 -0
  142. package/{docs-src → docs}/_sample-utils.js +8 -6
  143. package/{docs-src → docs}/_storage.js +0 -0
  144. package/{docs-src → docs}/docs.scss +5 -2
  145. package/docs/index.eta +16 -0
  146. package/{docs-src → docs}/index.js +0 -0
  147. package/docs/pages/appbar.eta +114 -0
  148. package/{docs-src/components → docs/pages}/appbar.js +0 -0
  149. package/{docs-src/components → docs/pages}/appbar.pug +15 -18
  150. package/docs/pages/bottomnav.eta +188 -0
  151. package/{docs-src/components → docs/pages}/bottomnav.js +23 -24
  152. package/{docs-src/components → docs/pages}/bottomnav.pug +4 -4
  153. package/docs/pages/button.eta +124 -0
  154. package/{docs-src/components → docs/pages}/button.js +19 -19
  155. package/{docs-src/components → docs/pages}/button.pug +15 -15
  156. package/docs/pages/card.eta +90 -0
  157. package/{docs-src/components → docs/pages}/card.js +3 -3
  158. package/{docs-src/components → docs/pages}/card.pug +7 -7
  159. package/docs/pages/chip.eta +122 -0
  160. package/{docs-src/components → docs/pages}/chip.js +3 -6
  161. package/{docs-src/components → docs/pages}/chip.pug +2 -2
  162. package/docs/pages/color.eta +143 -0
  163. package/{docs-src/core → docs/pages}/color.js +95 -20
  164. package/docs/pages/color.pug +121 -0
  165. package/docs/pages/datatable.eta +323 -0
  166. package/{docs-src/components → docs/pages}/datatable.js +26 -13
  167. package/docs/pages/datatable.pug +283 -0
  168. package/docs/pages/dialog.eta +186 -0
  169. package/{docs-src/components → docs/pages}/dialog.js +26 -13
  170. package/{docs-src/components → docs/pages}/dialog.pug +46 -28
  171. package/docs/pages/dom.eta +26 -0
  172. package/docs/pages/dom.js +143 -0
  173. package/docs/pages/dom.pug +22 -0
  174. package/docs/pages/elevation.eta +35 -0
  175. package/{docs-src/components → docs/pages}/elevation.js +0 -0
  176. package/{docs-src/components → docs/pages}/elevation.pug +0 -0
  177. package/docs/pages/fab.eta +99 -0
  178. package/{docs-src/components → docs/pages}/fab.js +3 -3
  179. package/{docs-src/components → docs/pages}/fab.pug +2 -2
  180. package/docs/pages/grid.eta +135 -0
  181. package/{docs-src/components → docs/pages}/grid.js +1 -1
  182. package/{docs-src/components → docs/pages}/grid.pug +3 -3
  183. package/docs/pages/layout.eta +8 -0
  184. package/{docs-src/components → docs/pages}/layout.js +0 -0
  185. package/{docs-src/components → docs/pages}/layout.pug +0 -0
  186. package/docs/pages/list.eta +465 -0
  187. package/{docs-src/components → docs/pages}/list.js +2 -2
  188. package/{docs-src/components → docs/pages}/list.pug +7 -14
  189. package/docs/pages/menu.eta +276 -0
  190. package/{docs-src/components → docs/pages}/menu.js +14 -10
  191. package/{docs-src/components → docs/pages}/menu.pug +0 -0
  192. package/docs/pages/overlay.eta +69 -0
  193. package/docs/pages/overlay.js +4 -0
  194. package/{docs-src/core → docs/pages}/overlay.pug +14 -11
  195. package/docs/pages/progress.eta +23 -0
  196. package/{docs-src/components → docs/pages}/progress.js +1 -1
  197. package/{docs-src/components → docs/pages}/progress.pug +1 -1
  198. package/docs/pages/ripple.eta +27 -0
  199. package/docs/pages/ripple.js +4 -0
  200. package/{docs-src/core → docs/pages}/ripple.pug +4 -4
  201. package/docs/pages/search.eta +246 -0
  202. package/{docs-src/components → docs/pages}/search.js +59 -42
  203. package/{docs-src/components → docs/pages}/search.pug +50 -51
  204. package/docs/pages/selection.eta +111 -0
  205. package/docs/pages/selection.js +13 -0
  206. package/docs/pages/selection.pug +74 -0
  207. package/docs/pages/slider.eta +23 -0
  208. package/{docs-src/components → docs/pages}/slider.js +0 -0
  209. package/{docs-src/components → docs/pages}/slider.pug +0 -0
  210. package/docs/pages/snackbar.eta +83 -0
  211. package/{docs-src/components → docs/pages}/snackbar.js +3 -3
  212. package/{docs-src/components → docs/pages}/snackbar.pug +0 -0
  213. package/docs/pages/tab.eta +421 -0
  214. package/{docs-src/components → docs/pages}/tab.js +18 -35
  215. package/{docs-src/components → docs/pages}/tab.pug +4 -4
  216. package/docs/pages/textfield.eta +486 -0
  217. package/{docs-src/components → docs/pages}/textfield.js +3 -4
  218. package/{docs-src/components → docs/pages}/textfield.pug +87 -35
  219. package/docs/pages/tooltip.eta +94 -0
  220. package/{docs-src/components → docs/pages}/tooltip.js +0 -0
  221. package/{docs-src/components → docs/pages}/tooltip.pug +0 -1
  222. package/docs/pages/transition.eta +117 -0
  223. package/{docs-src/core → docs/pages}/transition.js +7 -8
  224. package/{docs-src/core → docs/pages}/transition.pug +0 -0
  225. package/docs/pages/type.eta +31 -0
  226. package/{docs-src/components → docs/pages}/type.js +0 -0
  227. package/{docs-src/components → docs/pages}/type.pug +0 -1
  228. package/docs/postrender.js +39 -0
  229. package/{docs-src → docs}/prerender.js +3 -9
  230. package/docs/pwa/_dialogs.eta +143 -0
  231. package/docs/pwa/_dialogs.pug +96 -0
  232. package/docs/pwa/_menus.eta +16 -0
  233. package/{docs-src → docs}/pwa/_menus.pug +0 -0
  234. package/docs/pwa/pwa-prerender.js +3 -0
  235. package/docs/pwa/pwa.eta +480 -0
  236. package/docs/pwa/pwa.js +306 -0
  237. package/{docs-src → docs}/pwa/pwa.pug +166 -263
  238. package/docs/pwa/pwa.scss +26 -0
  239. package/docs/spec.scss +26 -0
  240. package/docs/themes/_component-themes.scss +26 -0
  241. package/docs/themes/theme-colored-fallbacks.scss +17 -0
  242. package/docs/themes/theme-colored.scss +17 -0
  243. package/docs/themes/theme-default-fallbacks.scss +17 -0
  244. package/docs/themes/theme-default.scss +17 -0
  245. package/jsconfig.json +4 -2
  246. package/package.json +40 -27
  247. package/scripts/deploy-docs.sh +9 -0
  248. package/templates/index.eta +2 -0
  249. package/utils/function.js +3 -0
  250. package/webpack.config.cjs +257 -0
  251. package/_spec.scss +0 -27
  252. package/_theme.scss +0 -27
  253. package/components/list/expander.js +0 -142
  254. package/components/list/itemgroup.js +0 -22
  255. package/core/theme/_builder.scss +0 -116
  256. package/core/theme/index.scss +0 -68
  257. package/docs/appbar.html +0 -1
  258. package/docs/appbar.min.js +0 -2
  259. package/docs/appbar.min.js.map +0 -1
  260. package/docs/bottomnav.html +0 -1
  261. package/docs/bottomnav.min.js +0 -2
  262. package/docs/bottomnav.min.js.map +0 -1
  263. package/docs/button.html +0 -1
  264. package/docs/button.min.js +0 -2
  265. package/docs/button.min.js.map +0 -1
  266. package/docs/card.html +0 -1
  267. package/docs/card.min.js +0 -2
  268. package/docs/card.min.js.map +0 -1
  269. package/docs/chip.html +0 -1
  270. package/docs/chip.min.js +0 -2
  271. package/docs/chip.min.js.map +0 -1
  272. package/docs/color.html +0 -1
  273. package/docs/color.min.js +0 -2
  274. package/docs/color.min.js.map +0 -1
  275. package/docs/datatable.html +0 -1
  276. package/docs/datatable.min.js +0 -2
  277. package/docs/datatable.min.js.map +0 -1
  278. package/docs/default.common.min.js +0 -2
  279. package/docs/default.common.min.js.map +0 -1
  280. package/docs/dialog.html +0 -1
  281. package/docs/dialog.min.js +0 -2
  282. package/docs/dialog.min.js.map +0 -1
  283. package/docs/docs.min.css +0 -1
  284. package/docs/docs.min.js +0 -2
  285. package/docs/docs.min.js.map +0 -1
  286. package/docs/elevation.html +0 -1
  287. package/docs/elevation.min.js +0 -2
  288. package/docs/elevation.min.js.map +0 -1
  289. package/docs/fab.html +0 -1
  290. package/docs/fab.min.js +0 -2
  291. package/docs/fab.min.js.map +0 -1
  292. package/docs/grid.html +0 -1
  293. package/docs/grid.min.js +0 -2
  294. package/docs/grid.min.js.map +0 -1
  295. package/docs/index.html +0 -1
  296. package/docs/index.min.js +0 -2
  297. package/docs/index.min.js.map +0 -1
  298. package/docs/ink.html +0 -1
  299. package/docs/ink.min.js +0 -2
  300. package/docs/ink.min.js.map +0 -1
  301. package/docs/layout.html +0 -1
  302. package/docs/layout.min.js +0 -2
  303. package/docs/layout.min.js.map +0 -1
  304. package/docs/list.html +0 -1
  305. package/docs/list.min.js +0 -2
  306. package/docs/list.min.js.map +0 -1
  307. package/docs/menu.html +0 -1
  308. package/docs/menu.min.js +0 -2
  309. package/docs/menu.min.js.map +0 -1
  310. package/docs/overlay.html +0 -1
  311. package/docs/overlay.min.js +0 -2
  312. package/docs/overlay.min.js.map +0 -1
  313. package/docs/prerender.common.min.js +0 -2
  314. package/docs/prerender.common.min.js.map +0 -1
  315. package/docs/prerender.min.js +0 -2
  316. package/docs/prerender.min.js.map +0 -1
  317. package/docs/progress.html +0 -1
  318. package/docs/progress.min.js +0 -2
  319. package/docs/progress.min.js.map +0 -1
  320. package/docs/pwa-prerender.min.js +0 -2
  321. package/docs/pwa-prerender.min.js.map +0 -1
  322. package/docs/pwa.html +0 -11
  323. package/docs/pwa.min.css +0 -1
  324. package/docs/pwa.min.js +0 -2
  325. package/docs/pwa.min.js.map +0 -1
  326. package/docs/ripple.html +0 -1
  327. package/docs/ripple.min.js +0 -2
  328. package/docs/ripple.min.js.map +0 -1
  329. package/docs/search.html +0 -1
  330. package/docs/search.min.js +0 -2
  331. package/docs/search.min.js.map +0 -1
  332. package/docs/selection.html +0 -1
  333. package/docs/selection.min.js +0 -2
  334. package/docs/selection.min.js.map +0 -1
  335. package/docs/slider.html +0 -1
  336. package/docs/slider.min.js +0 -2
  337. package/docs/slider.min.js.map +0 -1
  338. package/docs/snackbar.html +0 -1
  339. package/docs/snackbar.min.js +0 -2
  340. package/docs/snackbar.min.js.map +0 -1
  341. package/docs/spec.min.css +0 -1
  342. package/docs/spec.min.js +0 -2
  343. package/docs/spec.min.js.map +0 -1
  344. package/docs/surface.html +0 -1
  345. package/docs/surface.min.js +0 -2
  346. package/docs/surface.min.js.map +0 -1
  347. package/docs/tab.html +0 -1
  348. package/docs/tab.min.js +0 -2
  349. package/docs/tab.min.js.map +0 -1
  350. package/docs/textfield.html +0 -2
  351. package/docs/textfield.min.js +0 -2
  352. package/docs/textfield.min.js.map +0 -1
  353. package/docs/theme-colored-fallbacks.min.css +0 -1
  354. package/docs/theme-colored-fallbacks.min.js +0 -2
  355. package/docs/theme-colored-fallbacks.min.js.map +0 -1
  356. package/docs/theme-colored.min.css +0 -1
  357. package/docs/theme-colored.min.js +0 -2
  358. package/docs/theme-colored.min.js.map +0 -1
  359. package/docs/theme-default-fallbacks.min.css +0 -1
  360. package/docs/theme-default-fallbacks.min.js +0 -2
  361. package/docs/theme-default-fallbacks.min.js.map +0 -1
  362. package/docs/theme-default.min.css +0 -1
  363. package/docs/theme-default.min.js +0 -2
  364. package/docs/theme-default.min.js.map +0 -1
  365. package/docs/themes-fallbacks.min.css +0 -1
  366. package/docs/themes-fallbacks.min.js +0 -2
  367. package/docs/themes-fallbacks.min.js.map +0 -1
  368. package/docs/themes.min.css +0 -1
  369. package/docs/themes.min.js +0 -2
  370. package/docs/themes.min.js.map +0 -1
  371. package/docs/tooltip.html +0 -1
  372. package/docs/tooltip.min.js +0 -2
  373. package/docs/tooltip.min.js.map +0 -1
  374. package/docs/transition.html +0 -1
  375. package/docs/transition.min.js +0 -2
  376. package/docs/transition.min.js.map +0 -1
  377. package/docs/type.html +0 -1
  378. package/docs/type.min.js +0 -2
  379. package/docs/type.min.js.map +0 -1
  380. package/docs-src/components/datatable.pug +0 -327
  381. package/docs-src/components/selection.js +0 -9
  382. package/docs-src/components/selection.pug +0 -77
  383. package/docs-src/core/color.pug +0 -201
  384. package/docs-src/core/overlay.js +0 -4
  385. package/docs-src/core/ripple.js +0 -4
  386. package/docs-src/index.pug +0 -9
  387. package/docs-src/pwa/_dialogs.pug +0 -15
  388. package/docs-src/pwa/pwa-prerender.js +0 -3
  389. package/docs-src/pwa/pwa.js +0 -182
  390. package/docs-src/pwa/pwa.scss +0 -25
  391. package/docs-src/spec.scss +0 -1
  392. package/docs-src/themes/theme-colored-fallbacks.scss +0 -14
  393. package/docs-src/themes/theme-colored.scss +0 -14
  394. package/docs-src/themes/theme-default-fallbacks.scss +0 -14
  395. package/docs-src/themes/theme-default.scss +0 -14
  396. package/index.js +0 -51
  397. package/index.scss +0 -2
  398. package/webpack.config.js +0 -187
@@ -2,25 +2,24 @@
2
2
 
3
3
  import {
4
4
  dispatchDomEvent,
5
- iterateArrayLike,
6
- iterateSomeOfArrayLike,
7
5
  findElementParentByClassName,
8
6
  getChildElementByClass,
7
+ iterateArrayLike,
8
+ iterateSomeOfArrayLike,
9
9
  setTextNode,
10
- } from '../../core/dom';
11
-
12
- import * as Button from '../button/index';
10
+ } from '../../core/dom.js';
11
+ import * as Button from '../button/index.js';
13
12
 
14
13
  class DialogStack {
15
14
  /**
16
15
  * @param {Element} element
17
16
  * @param {Element} previousFocus
18
- * @param {Object=} state
19
- * @param {Object=} previousState
17
+ * @param {Object} [state]
18
+ * @param {Object} [previousState]
20
19
  */
21
20
  constructor(element, previousFocus, state, previousState) {
22
- this.element = element;
23
- this.previousFocus = previousFocus;
21
+ this.element = (element);
22
+ this.previousFocus = (previousFocus);
24
23
  this.state = state;
25
24
  this.previousState = previousState;
26
25
  }
@@ -30,55 +29,29 @@ class DialogStack {
30
29
  const OPEN_DIALOGS = [];
31
30
 
32
31
  export const CANCEL_EVENT = 'mdw:dialog-cancel';
33
-
34
32
  export const CONFIRM_EVENT = 'mdw:dialog-confirm';
35
-
36
33
  export const CUSTOM_EVENT = 'mdw:dialog-custom';
37
-
38
34
  export const DISMISS_EVENT = 'mdw:dialog-dismiss';
39
35
 
40
36
  /**
41
- * @param {Element} element
37
+ * @param {TransitionEvent} event
42
38
  * @return {void}
43
39
  */
44
- export function attach(element) {
45
- element.setAttribute('mdw-js', '');
46
-
47
- let dialogCloser = getChildElementByClass(element, 'mdw-dialog__close');
48
- if (!dialogCloser) {
49
- dialogCloser = document.createElement('div');
50
- dialogCloser.className = 'mdw-dialog__close';
51
- if (element.firstChild) {
52
- element.insertBefore(dialogCloser, element.firstChild);
53
- } else {
54
- element.appendChild(dialogCloser);
55
- }
40
+ export function onTransitionEnd(event) {
41
+ if (event.propertyName !== 'opacity') {
42
+ return;
56
43
  }
57
- dialogCloser.addEventListener('click', onCancelClick);
58
- const popup = getChildElementByClass(element, 'mdw-dialog__popup');
59
- popup.addEventListener('keydown', onKeyDown);
60
- const buttons = popup.querySelectorAll('.mdw-dialog__button-area .mdw-button');
61
- let foundConfirmButton = false;
62
- let foundCancelButton = false;
63
- iterateArrayLike(buttons, (button) => {
64
- Button.attach(button);
65
- if (button.hasAttribute('mdw-custom')) {
66
- button.addEventListener('click', onCustomButtonClick);
67
- return;
68
- }
69
- if (!foundConfirmButton) {
70
- button.addEventListener('click', onConfirmClick);
71
- foundConfirmButton = true;
72
- return;
73
- }
74
- if (!foundCancelButton) {
75
- button.addEventListener('click', onCancelClick);
76
- foundCancelButton = true;
77
- return;
78
- }
79
- button.addEventListener('click', onCustomButtonClick);
80
- });
81
- setupARIA(element);
44
+ /** @type {HTMLElement} */
45
+ const dialogElement = (event.currentTarget);
46
+ if (dialogElement.getAttribute('aria-hidden') !== 'true') {
47
+ return;
48
+ }
49
+ /** @type {HTMLElement} */
50
+ const popupElement = (dialogElement.getElementsByClassName('mdw-dialog__popup')[0]);
51
+ if (!popupElement) {
52
+ return;
53
+ }
54
+ popupElement.style.removeProperty('display');
82
55
  }
83
56
 
84
57
  /**
@@ -107,171 +80,6 @@ export function setupARIA(dialogElement) {
107
80
  }
108
81
  }
109
82
 
110
- /**
111
- * @param {Element} dialogElement
112
- * @return {void}
113
- */
114
- export function detach(dialogElement) {
115
- dialogElement.removeAttribute('mdw-js');
116
- const dialogCloser = getChildElementByClass(dialogElement, 'mdw-dialog__close');
117
- if (dialogCloser) {
118
- dialogCloser.removeEventListener('click', onCancelClick);
119
- }
120
- /** @type {HTMLElement} */
121
- const popupElement = (dialogElement.getElementsByClassName('mdw-dialog__popup')[0]);
122
- if (popupElement) {
123
- popupElement.removeEventListener('keydown', onKeyDown);
124
- popupElement.style.removeProperty('transform-origin');
125
- if (popupElement.hasAttribute('style') && !popupElement.getAttribute('style')) {
126
- popupElement.removeAttribute('style');
127
- }
128
- }
129
- const buttons = popupElement.querySelectorAll('.mdw-dialog__button-area .mdw-button');
130
- iterateArrayLike(buttons, (button) => {
131
- Button.detach(button);
132
- button.removeEventListener('click', onConfirmClick);
133
- button.removeEventListener('click', onCancelClick);
134
- button.removeEventListener('click', onCustomButtonClick);
135
- });
136
- }
137
-
138
- /**
139
- * @param {MouseEvent} event
140
- * @return {void}
141
- */
142
- export function onCancelClick(event) {
143
- if (event && event.currentTarget instanceof HTMLAnchorElement) {
144
- event.preventDefault();
145
- }
146
- /** @type {HTMLElement} */
147
- const cancelElement = (event.currentTarget);
148
- if (dispatchDomEvent(cancelElement, CANCEL_EVENT)) {
149
- const dialogElement = findElementParentByClassName(cancelElement, 'mdw-dialog');
150
- hide(dialogElement);
151
- }
152
- }
153
-
154
- /**
155
- * @param {MouseEvent} event
156
- * @return {void}
157
- */
158
- export function onConfirmClick(event) {
159
- if (event && event.currentTarget instanceof HTMLAnchorElement) {
160
- event.preventDefault();
161
- }
162
- /** @type {HTMLElement} */
163
- const button = (event.currentTarget);
164
- if (dispatchDomEvent(button, CONFIRM_EVENT)) {
165
- const dialogElement = findElementParentByClassName(button, 'mdw-dialog');
166
- hide(dialogElement);
167
- }
168
- }
169
-
170
- /**
171
- * @param {MouseEvent} event
172
- * @return {void}
173
- */
174
- export function onCustomButtonClick(event) {
175
- if (event && event.currentTarget instanceof HTMLAnchorElement) {
176
- event.preventDefault();
177
- }
178
- /** @type {HTMLElement} */
179
- const button = (event.currentTarget);
180
- if (dispatchDomEvent(button, CUSTOM_EVENT)) {
181
- const dialogElement = findElementParentByClassName(button, 'mdw-dialog');
182
- hide(dialogElement);
183
- }
184
- }
185
-
186
- /**
187
- * @param {KeyboardEvent} event
188
- * @return {void}
189
- */
190
- export function onKeyDown(event) {
191
- if (event.key === 'Tab') {
192
- handleTabKeyPress(event);
193
- return;
194
- }
195
- if (event.key === 'Escape' || event.key === 'Esc') {
196
- onEscapeKeyDown(event);
197
- }
198
- }
199
-
200
- /**
201
- * @param {KeyboardEvent} event
202
- * @return {void}
203
- */
204
- export function onEscapeKeyDown(event) {
205
- event.stopPropagation();
206
- event.preventDefault();
207
- /** @type {HTMLElement} */
208
- const popupElement = (event.currentTarget);
209
- const dialogElement = findElementParentByClassName(popupElement, 'mdw-dialog');
210
- cancel(dialogElement);
211
- }
212
-
213
- /**
214
- * @param {PopStateEvent} event
215
- * @return {void}
216
- */
217
- export function onPopState(event) {
218
- if (!event.state) {
219
- return;
220
- }
221
- const lastOpenDialog = OPEN_DIALOGS[OPEN_DIALOGS.length - 1];
222
- if (!lastOpenDialog || !lastOpenDialog.previousState) {
223
- return;
224
- }
225
- if ((lastOpenDialog.previousState === event.state) || Object.keys(event.state)
226
- .every(key => event.state[key] === lastOpenDialog.previousState[key])) {
227
- if (dispatchDomEvent(lastOpenDialog.element, CANCEL_EVENT)) {
228
- hide(lastOpenDialog.element);
229
- } else {
230
- // Revert pop state by pushing state again
231
- const title = getTitleText(lastOpenDialog.element);
232
- window.history.pushState(lastOpenDialog.state, title);
233
- }
234
- }
235
- }
236
-
237
- /**
238
- * @param {Element} dialogElement
239
- * @return {void}
240
- */
241
- export function cancel(dialogElement) {
242
- if (dispatchDomEvent(dialogElement, CANCEL_EVENT)) {
243
- hide(dialogElement);
244
- }
245
- }
246
-
247
- /**
248
- * @param {Element} dialogElement
249
- * @return {void}
250
- */
251
- export function confirm(dialogElement) {
252
- if (dispatchDomEvent(dialogElement, CONFIRM_EVENT)) {
253
- hide(dialogElement);
254
- }
255
- }
256
-
257
- /**
258
- * @param {Element} dialogElement
259
- * @return {string}
260
- */
261
- export function getTitleText(dialogElement) {
262
- let title = 'Dialog';
263
- const titleElement = dialogElement.getElementsByClassName('mdw-dialog__title')[0];
264
- if (titleElement) {
265
- title = titleElement.textContent;
266
- } else {
267
- const bodyElement = dialogElement.getElementsByClassName('mdw-dialog__body')[0];
268
- if (bodyElement) {
269
- title = bodyElement.textContent;
270
- }
271
- }
272
- return title;
273
- }
274
-
275
83
  /**
276
84
  * @param {Element} dialogElement
277
85
  * @return {boolean} handled
@@ -284,6 +92,7 @@ export function hide(dialogElement) {
284
92
  return false;
285
93
  }
286
94
  dialogElement.setAttribute('aria-hidden', 'true');
95
+ // .mdw-dialog__popup hidden by transitionEnd event
287
96
  let stackIndex = -1;
288
97
  OPEN_DIALOGS.some((stack, index) => {
289
98
  if (stack.element === dialogElement) {
@@ -294,7 +103,7 @@ export function hide(dialogElement) {
294
103
  });
295
104
  if (stackIndex !== -1) {
296
105
  const stack = OPEN_DIALOGS[stackIndex];
297
- if (stack.previousFocus) {
106
+ if (stack.previousFocus && stack.previousFocus instanceof HTMLElement) {
298
107
  if (findElementParentByClassName(document.activeElement, 'mdw-dialog') === dialogElement) {
299
108
  // Only pop focus back when hiding a dialog with focus within itself.
300
109
  try {
@@ -313,6 +122,7 @@ export function hide(dialogElement) {
313
122
  }
314
123
  }
315
124
  if (!OPEN_DIALOGS.length) {
125
+ // eslint-disable-next-line no-use-before-define
316
126
  window.removeEventListener('popstate', onPopState);
317
127
  }
318
128
  return true;
@@ -320,59 +130,66 @@ export function hide(dialogElement) {
320
130
 
321
131
  /**
322
132
  * @param {Element} dialogElement
323
- * @param {(MouseEvent|KeyboardEvent|PointerEvent)=} event
324
- * @return {boolean} handled
133
+ * @return {void}
325
134
  */
326
- export function show(dialogElement, event) {
135
+ export function cancel(dialogElement) {
136
+ if (dispatchDomEvent(dialogElement, CANCEL_EVENT)) {
137
+ hide(dialogElement);
138
+ }
139
+ }
140
+
141
+ /**
142
+ * @param {Element} dialogElement
143
+ * @return {void}
144
+ */
145
+ export function confirm(dialogElement) {
146
+ if (dispatchDomEvent(dialogElement, CONFIRM_EVENT)) {
147
+ hide(dialogElement);
148
+ }
149
+ }
150
+
151
+ /**
152
+ * @param {MouseEvent} event
153
+ * @return {void}
154
+ */
155
+ export function onCancelClick(event) {
327
156
  if (event && event.currentTarget instanceof HTMLAnchorElement) {
328
- // Prevent anchor link
329
157
  event.preventDefault();
330
158
  }
331
- let changed = false;
159
+ /** @type {HTMLElement} */
160
+ const cancelElement = (event.currentTarget);
161
+ const dialogElement = findElementParentByClassName(cancelElement, 'mdw-dialog');
162
+ cancel(dialogElement);
163
+ }
332
164
 
333
- updateTransformOrigin(dialogElement, event);
334
- if (dialogElement.getAttribute('aria-hidden') !== 'false') {
335
- dialogElement.setAttribute('aria-hidden', 'false');
336
- changed = true;
165
+ /**
166
+ * @param {MouseEvent} event
167
+ * @return {void}
168
+ */
169
+ export function onConfirmClick(event) {
170
+ if (event && event.currentTarget instanceof HTMLAnchorElement) {
171
+ event.preventDefault();
337
172
  }
338
- if (changed) {
339
- attach(dialogElement);
340
- const previousFocus = document.activeElement;
341
- const newState = { hash: Math.random().toString(36).substr(2, 16) };
342
- let previousState = null;
343
- if (window.history && window.history.pushState) {
344
- if (!window.history.state) {
345
- // Create new previous state
346
- window.history.replaceState({
347
- hash: Math.random().toString(36).substr(2, 16),
348
- }, document.title);
349
- }
350
- previousState = window.history.state;
351
- const title = getTitleText(dialogElement);
352
- window.history.pushState(newState, title);
353
- window.addEventListener('popstate', onPopState);
354
- }
355
- const dialogStack = new DialogStack(dialogElement, previousFocus, newState, previousState);
356
- OPEN_DIALOGS.push(dialogStack);
357
- const focusElement = dialogElement.querySelector('[mdw-autofocus]');
358
- try {
359
- if (focusElement) {
360
- if (event && event.target instanceof Element) {
361
- const callerOverlayTouch = event.target.getAttribute('mdw-overlay-touch');
362
- if (callerOverlayTouch != null) {
363
- focusElement.setAttribute('mdw-overlay-touch', callerOverlayTouch);
364
- }
365
- }
366
- focusElement.focus();
367
- } else {
368
- dialogElement.focus();
369
- }
370
- } catch (e) {
371
- console.error(e);
372
- // Failed to focus
373
- }
173
+ /** @type {HTMLElement} */
174
+ const button = (event.currentTarget);
175
+ const dialogElement = findElementParentByClassName(button, 'mdw-dialog');
176
+ confirm(dialogElement);
177
+ }
178
+
179
+ /**
180
+ * @param {MouseEvent} event
181
+ * @return {void}
182
+ */
183
+ export function onCustomButtonClick(event) {
184
+ if (event && event.currentTarget instanceof HTMLAnchorElement) {
185
+ event.preventDefault();
186
+ }
187
+ /** @type {HTMLElement} */
188
+ const button = (event.currentTarget);
189
+ if (dispatchDomEvent(button, CUSTOM_EVENT)) {
190
+ const dialogElement = findElementParentByClassName(button, 'mdw-dialog');
191
+ hide(dialogElement);
374
192
  }
375
- return changed;
376
193
  }
377
194
 
378
195
  /**
@@ -416,7 +233,7 @@ export function handleTabKeyPress(event) {
416
233
  }
417
234
  event.stopPropagation();
418
235
  event.preventDefault();
419
- if (candidate) {
236
+ if (candidate && candidate instanceof HTMLElement) {
420
237
  try {
421
238
  candidate.focus();
422
239
  } catch (e) {
@@ -425,9 +242,78 @@ export function handleTabKeyPress(event) {
425
242
  }
426
243
  }
427
244
 
245
+ /**
246
+ * @param {KeyboardEvent} event
247
+ * @return {void}
248
+ */
249
+ export function onEscapeKeyDown(event) {
250
+ event.stopPropagation();
251
+ event.preventDefault();
252
+ /** @type {HTMLElement} */
253
+ const popupElement = (event.currentTarget);
254
+ const dialogElement = findElementParentByClassName(popupElement, 'mdw-dialog');
255
+ cancel(dialogElement);
256
+ }
257
+
258
+ /**
259
+ * @param {KeyboardEvent} event
260
+ * @return {void}
261
+ */
262
+ export function onKeyDown(event) {
263
+ if (event.key === 'Tab') {
264
+ handleTabKeyPress(event);
265
+ return;
266
+ }
267
+ if (event.key === 'Escape' || event.key === 'Esc') {
268
+ onEscapeKeyDown(event);
269
+ }
270
+ }
271
+
272
+ /**
273
+ * @param {Element} dialogElement
274
+ * @return {string}
275
+ */
276
+ export function getTitleText(dialogElement) {
277
+ let title = 'Dialog';
278
+ const titleElement = dialogElement.getElementsByClassName('mdw-dialog__title')[0];
279
+ if (titleElement) {
280
+ title = titleElement.textContent;
281
+ } else {
282
+ const bodyElement = dialogElement.getElementsByClassName('mdw-dialog__body')[0];
283
+ if (bodyElement) {
284
+ title = bodyElement.textContent;
285
+ }
286
+ }
287
+ return title;
288
+ }
289
+
290
+ /**
291
+ * @param {PopStateEvent} event
292
+ * @return {void}
293
+ */
294
+ export function onPopState(event) {
295
+ if (!event.state) {
296
+ return;
297
+ }
298
+ const lastOpenDialog = OPEN_DIALOGS[OPEN_DIALOGS.length - 1];
299
+ if (!lastOpenDialog || !lastOpenDialog.previousState) {
300
+ return;
301
+ }
302
+ if ((lastOpenDialog.previousState === event.state) || Object.keys(event.state)
303
+ .every((key) => event.state[key] === lastOpenDialog.previousState[key])) {
304
+ if (dispatchDomEvent(lastOpenDialog.element, CANCEL_EVENT)) {
305
+ hide(lastOpenDialog.element);
306
+ } else {
307
+ // Revert pop state by pushing state again
308
+ const title = getTitleText(lastOpenDialog.element);
309
+ window.history.pushState(lastOpenDialog.state, title);
310
+ }
311
+ }
312
+ }
313
+
428
314
  /**
429
315
  * @param {Element} dialogElement
430
- * @param {(DocumentFragment|string)=} content
316
+ * @param {(DocumentFragment|string)} [content]
431
317
  * @return {void}
432
318
  */
433
319
  export function updateTitle(dialogElement, content) {
@@ -456,7 +342,6 @@ export function updateTitle(dialogElement, content) {
456
342
  }
457
343
  }
458
344
 
459
-
460
345
  /**
461
346
  * @param {Element} dialogElement
462
347
  * @param {string[]} texts
@@ -471,7 +356,7 @@ export function updateButtonText(dialogElement, texts) {
471
356
 
472
357
  /**
473
358
  * @param {Element} dialogElement
474
- * @param {(DocumentFragment|string)=} content
359
+ * @param {(DocumentFragment|string)} [content]
475
360
  * @return {void}
476
361
  */
477
362
  export function updateBody(dialogElement, content) {
@@ -506,15 +391,104 @@ export function updateBody(dialogElement, content) {
506
391
  }
507
392
  }
508
393
 
394
+ /**
395
+ * @param {Element} dialogElement
396
+ * @param {Event} [event]
397
+ * @return {void}
398
+ */
399
+ export function updateTransformOrigin(dialogElement, event) {
400
+ /** @type {HTMLElement} */
401
+ const popup = (dialogElement.getElementsByClassName('mdw-dialog__popup')[0]);
402
+ popup.style.removeProperty('transform-origin');
403
+ if (!event) {
404
+ return;
405
+ }
406
+ const hadLayer = popup.style.getPropertyValue('display') != null;
407
+ if (!hadLayer) {
408
+ popup.style.setProperty('display', 'flex');
409
+ }
410
+ let pageX;
411
+ let pageY;
412
+ const dialogRect = dialogElement.getBoundingClientRect();
413
+ if ('pageX' in event && 'pageY' in event) {
414
+ ({ pageX, pageY } = event);
415
+ pageX -= window.pageXOffset;
416
+ pageY -= window.pageYOffset;
417
+ } else {
418
+ /** @type {Element} */
419
+ const target = (event.target || event.currentTarget);
420
+ if (target instanceof Element === false) {
421
+ return;
422
+ }
423
+ const rect = target.getBoundingClientRect();
424
+ if (!rect.width && !rect.width && !rect.left && !rect.top) {
425
+ return;
426
+ }
427
+ pageX = rect.left + (rect.width / 2);
428
+ pageY = rect.top + (rect.height / 2);
429
+ }
430
+ const transformOriginX = pageX - dialogRect.left - popup.offsetLeft;
431
+ const transformOriginY = pageY - dialogRect.top - popup.offsetTop;
432
+ popup.style.setProperty('transform-origin', `${transformOriginX}px ${transformOriginY}px`);
433
+ if (!hadLayer) {
434
+ popup.style.removeProperty('display');
435
+ }
436
+ }
437
+
438
+ /**
439
+ * @param {Element} element
440
+ * @return {void}
441
+ */
442
+ export function attach(element) {
443
+ element.setAttribute('mdw-dialog-js', '');
444
+ element.addEventListener('transitionend', onTransitionEnd);
445
+
446
+ let dialogCloser = getChildElementByClass(element, 'mdw-dialog__close');
447
+ if (!dialogCloser) {
448
+ dialogCloser = document.createElement('div');
449
+ dialogCloser.className = 'mdw-dialog__close';
450
+ if (element.firstChild) {
451
+ element.insertBefore(dialogCloser, element.firstChild);
452
+ } else {
453
+ element.appendChild(dialogCloser);
454
+ }
455
+ }
456
+ dialogCloser.addEventListener('click', onCancelClick);
457
+ const popup = getChildElementByClass(element, 'mdw-dialog__popup');
458
+ popup.addEventListener('keydown', onKeyDown);
459
+ const buttons = popup.querySelectorAll('.mdw-dialog__button-area .mdw-button');
460
+ let foundConfirmButton = false;
461
+ let foundCancelButton = false;
462
+ iterateArrayLike(buttons, (button) => {
463
+ Button.attach(button);
464
+ if (button.hasAttribute('mdw-custom')) {
465
+ button.addEventListener('click', onCustomButtonClick);
466
+ return;
467
+ }
468
+ if (!foundConfirmButton) {
469
+ button.addEventListener('click', onConfirmClick);
470
+ foundConfirmButton = true;
471
+ return;
472
+ }
473
+ if (!foundCancelButton) {
474
+ button.addEventListener('click', onCancelClick);
475
+ foundCancelButton = true;
476
+ return;
477
+ }
478
+ button.addEventListener('click', onCustomButtonClick);
479
+ });
480
+ setupARIA(element);
481
+ }
482
+
509
483
  /**
510
484
  * @param {Object} options
511
- * @param {(DocumentFragment|string)=} options.title
512
- * @param {(DocumentFragment|string)=} options.body
513
- * @param {string[]=} options.buttons
514
- * @param {boolean=} options.stacked
515
- * @param {Element=} options.parent
485
+ * @param {(DocumentFragment|string)} [options.title]
486
+ * @param {(DocumentFragment|string)} [options.body]
487
+ * @param {string[]} [options.buttons]
488
+ * @param {boolean} [options.stacked=false]
489
+ * @param {Element} [options.parent]
516
490
  * @param {boolean} [options.custom=false] Use custom button events
517
- * @param {(string|number)=} [options.autofocus=0] Autofocus button by index or text
491
+ * @param {(string|number)} [options.autofocus=0] Autofocus button by index or text
518
492
  * @return {Element}
519
493
  */
520
494
  export function create(options) {
@@ -563,36 +537,90 @@ export function create(options) {
563
537
 
564
538
  /**
565
539
  * @param {Element} dialogElement
566
- * @param {(MouseEvent|KeyboardEvent|PointerEvent)=} event
540
+ * @param {Event} [event]
541
+ * @return {boolean} handled
542
+ */
543
+ export function show(dialogElement, event) {
544
+ if (event && event.type === 'click' && event.currentTarget instanceof HTMLAnchorElement) {
545
+ // Prevent anchor link
546
+ event.preventDefault();
547
+ }
548
+ let changed = false;
549
+
550
+ if (dialogElement.getAttribute('aria-hidden') !== 'false') {
551
+ dialogElement.setAttribute('aria-hidden', 'false');
552
+ /** @type {HTMLElement} */
553
+ const popupElement = (dialogElement.getElementsByClassName('mdw-dialog__popup')[0]);
554
+ popupElement.style.setProperty('display', 'flex');
555
+ changed = true;
556
+ }
557
+
558
+ updateTransformOrigin(dialogElement, event);
559
+
560
+ if (!changed) {
561
+ return false;
562
+ }
563
+ attach(dialogElement);
564
+ const previousFocus = document.activeElement;
565
+ const newState = { hash: Math.random().toString(36).substr(2, 16) };
566
+ let previousState = null;
567
+ if (window.history && window.history.pushState) {
568
+ if (!window.history.state) {
569
+ // Create new previous state
570
+ window.history.replaceState({
571
+ hash: Math.random().toString(36).substr(2, 16),
572
+ }, document.title);
573
+ }
574
+ previousState = window.history.state;
575
+ const title = getTitleText(dialogElement);
576
+ window.history.pushState(newState, title);
577
+ window.addEventListener('popstate', onPopState);
578
+ }
579
+ const dialogStack = new DialogStack(dialogElement, previousFocus, newState, previousState);
580
+ OPEN_DIALOGS.push(dialogStack);
581
+ const focusElement = dialogElement.querySelector('[mdw-autofocus]');
582
+ try {
583
+ if (focusElement && focusElement instanceof HTMLElement) {
584
+ if (focusElement.scrollIntoView) {
585
+ focusElement.scrollIntoView();
586
+ }
587
+ focusElement.focus();
588
+ } else if (dialogElement instanceof HTMLElement) {
589
+ dialogElement.focus();
590
+ }
591
+ } catch (e) {
592
+ // Failed to focus
593
+ }
594
+ return true;
595
+ }
596
+
597
+ /**
598
+ * @param {Element} dialogElement
567
599
  * @return {void}
568
600
  */
569
- export function updateTransformOrigin(dialogElement, event) {
570
- /** @type {HTMLElement} */
571
- const popup = (dialogElement.getElementsByClassName('mdw-dialog__popup')[0]);
572
- popup.style.removeProperty('transform-origin');
573
- if (!event) {
574
- return;
601
+ export function detach(dialogElement) {
602
+ dialogElement.removeEventListener('transitionend', onTransitionEnd);
603
+ dialogElement.removeAttribute('mdw-dialog-js');
604
+ const dialogCloser = getChildElementByClass(dialogElement, 'mdw-dialog__close');
605
+ if (dialogCloser) {
606
+ dialogCloser.removeEventListener('click', onCancelClick);
575
607
  }
576
- let pageX;
577
- let pageY;
578
- const dialogRect = dialogElement.getBoundingClientRect();
579
- if ('pageX' in event && 'pageY' in event) {
580
- ({ pageX, pageY } = event);
581
- pageX -= window.pageXOffset;
582
- pageY -= window.pageYOffset;
583
- } else {
584
- /** @type {Element} */
585
- const target = (event.currentTarget || event.target);
586
- const rect = target.getBoundingClientRect();
587
- if (!rect.width && !rect.width && !rect.left && !rect.top) {
588
- return;
608
+ /** @type {HTMLElement} */
609
+ const popupElement = (dialogElement.getElementsByClassName('mdw-dialog__popup')[0]);
610
+ if (popupElement) {
611
+ popupElement.removeEventListener('keydown', onKeyDown);
612
+ popupElement.style.removeProperty('transform-origin');
613
+ if (popupElement.hasAttribute('style') && !popupElement.getAttribute('style')) {
614
+ popupElement.removeAttribute('style');
589
615
  }
590
- pageX = rect.left + (rect.width / 2);
591
- pageY = rect.top + (rect.height / 2);
592
616
  }
593
- const transformOriginX = pageX - dialogRect.left - popup.offsetLeft;
594
- const transformOriginY = pageY - dialogRect.top - popup.offsetTop;
595
- popup.style.setProperty('transform-origin', `${transformOriginX}px ${transformOriginY}px`);
617
+ const buttons = popupElement.querySelectorAll('.mdw-dialog__button-area .mdw-button');
618
+ iterateArrayLike(buttons, (button) => {
619
+ Button.detach(button);
620
+ button.removeEventListener('click', onConfirmClick);
621
+ button.removeEventListener('click', onCancelClick);
622
+ button.removeEventListener('click', onCustomButtonClick);
623
+ });
596
624
  }
597
625
 
598
626
  // Aliases