@pod-os/elements 0.7.1-92705ee.0 → 0.7.1-a71f01c.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 (634) hide show
  1. package/dist/cjs/{animation-5840e4df.js → animation-9bea118f.js} +115 -84
  2. package/dist/cjs/{app-globals-1aedd05c.js → app-globals-6352043e.js} +1 -1
  3. package/dist/cjs/{cubic-bezier-dcb7bfef.js → cubic-bezier-0b702a31.js} +13 -12
  4. package/dist/cjs/data-0c9489d7.js +1510 -0
  5. package/dist/cjs/dir-011f46ea.js +20 -0
  6. package/dist/cjs/elements.cjs.js +5 -5
  7. package/dist/cjs/focus-visible-2624ec15.js +76 -0
  8. package/dist/cjs/framework-delegate-437c0645.js +119 -0
  9. package/dist/cjs/{gesture-controller-fbbe9a65.js → gesture-controller-00a6b02f.js} +6 -2
  10. package/dist/cjs/{haptic-09e73337.js → haptic-7358cb0b.js} +37 -8
  11. package/dist/cjs/{hardware-back-button-01027575.js → hardware-back-button-25372ec7.js} +11 -8
  12. package/dist/cjs/{helpers-398ced09.js → helpers-cb08f5ae.js} +115 -15
  13. package/dist/cjs/{index-2067b305.js → index-1b07c737.js} +35 -24
  14. package/dist/cjs/{index-68ae43d2.js → index-2dc3637c.js} +34 -28
  15. package/dist/cjs/index-57b9fa9e.js +30 -0
  16. package/dist/cjs/{index-d01d9183.js → index-643851c6.js} +34 -19
  17. package/dist/cjs/index-731691ca.js +48 -0
  18. package/dist/cjs/{index-6bbae9b1.js → index-7d56774d.js} +12 -8
  19. package/dist/cjs/index-9fca5d6f.js +140 -0
  20. package/dist/cjs/index-b2a479e4.js +38 -0
  21. package/dist/cjs/{index-b4a9ece2.js → index-eaa0d16e.js} +7 -0
  22. package/dist/cjs/{tap-click-f24cb477.js → index-ed2ce04f.js} +37 -19
  23. package/dist/cjs/{input-shims-e959d9e2.js → input-shims-427999f7.js} +89 -38
  24. package/dist/cjs/ion-accordion-group.cjs.entry.js +205 -0
  25. package/dist/cjs/ion-accordion.cjs.entry.js +336 -0
  26. package/dist/cjs/ion-action-sheet_3.cjs.entry.js +865 -0
  27. package/dist/cjs/{ion-app_45.cjs.entry.js → ion-app_46.cjs.entry.js} +1906 -1492
  28. package/dist/cjs/ion-avatar.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-back-button.cjs.entry.js +12 -11
  30. package/dist/cjs/ion-backdrop.cjs.entry.js +4 -4
  31. package/dist/cjs/ion-breadcrumb.cjs.entry.js +101 -0
  32. package/dist/cjs/ion-breadcrumbs.cjs.entry.js +137 -0
  33. package/dist/cjs/ion-buttons_3.cjs.entry.js +799 -0
  34. package/dist/cjs/ion-card-subtitle.cjs.entry.js +4 -4
  35. package/dist/cjs/{ion-list-header_3.cjs.entry.js → ion-checkbox_4.cjs.entry.js} +124 -23
  36. package/dist/cjs/ion-chip.cjs.entry.js +5 -10
  37. package/dist/cjs/ion-datetime-button.cjs.entry.js +346 -0
  38. package/dist/cjs/ion-datetime.cjs.entry.js +1548 -856
  39. package/dist/cjs/ion-fab-button.cjs.entry.js +26 -9
  40. package/dist/cjs/ion-fab-list.cjs.entry.js +4 -4
  41. package/dist/cjs/ion-fab.cjs.entry.js +15 -13
  42. package/dist/cjs/ion-img.cjs.entry.js +28 -4
  43. package/dist/cjs/ion-infinite-scroll-content.cjs.entry.js +5 -5
  44. package/dist/cjs/ion-infinite-scroll.cjs.entry.js +13 -13
  45. package/dist/cjs/ion-input.cjs.entry.js +57 -23
  46. package/dist/cjs/ion-item-option.cjs.entry.js +8 -8
  47. package/dist/cjs/ion-item-options.cjs.entry.js +5 -5
  48. package/dist/cjs/ion-item-sliding.cjs.entry.js +59 -63
  49. package/dist/cjs/ion-loading.cjs.entry.js +38 -37
  50. package/dist/cjs/ion-menu-button.cjs.entry.js +14 -12
  51. package/dist/cjs/ion-menu-toggle.cjs.entry.js +8 -7
  52. package/dist/cjs/ion-menu.cjs.entry.js +71 -57
  53. package/dist/cjs/ion-modal.cjs.entry.js +1386 -156
  54. package/dist/cjs/ion-nav-link.cjs.entry.js +5 -2
  55. package/dist/cjs/ion-nav.cjs.entry.js +177 -171
  56. package/dist/cjs/ion-picker-column.cjs.entry.js +25 -27
  57. package/dist/cjs/ion-picker.cjs.entry.js +22 -17
  58. package/dist/cjs/ion-popover.cjs.entry.js +1208 -182
  59. package/dist/cjs/ion-range.cjs.entry.js +137 -57
  60. package/dist/cjs/ion-refresher-content.cjs.entry.js +7 -12
  61. package/dist/cjs/ion-refresher.cjs.entry.js +150 -148
  62. package/dist/cjs/ion-reorder-group.cjs.entry.js +42 -35
  63. package/dist/cjs/ion-reorder.cjs.entry.js +5 -4
  64. package/dist/cjs/ion-route-redirect.cjs.entry.js +1 -1
  65. package/dist/cjs/ion-route.cjs.entry.js +1 -1
  66. package/dist/cjs/ion-router-link.cjs.entry.js +5 -5
  67. package/dist/cjs/ion-router-outlet.cjs.entry.js +24 -20
  68. package/dist/cjs/ion-router.cjs.entry.js +291 -194
  69. package/dist/cjs/ion-segment-button.cjs.entry.js +10 -17
  70. package/dist/cjs/ion-segment.cjs.entry.js +127 -26
  71. package/dist/cjs/ion-select-option.cjs.entry.js +3 -3
  72. package/dist/cjs/ion-select.cjs.entry.js +113 -78
  73. package/dist/cjs/ion-slide.cjs.entry.js +3 -3
  74. package/dist/cjs/ion-slides.cjs.entry.js +26 -27
  75. package/dist/cjs/ion-spinner.cjs.entry.js +10 -9
  76. package/dist/cjs/ion-split-pane.cjs.entry.js +16 -12
  77. package/dist/cjs/ion-tab-bar.cjs.entry.js +16 -23
  78. package/dist/cjs/ion-tab-button.cjs.entry.js +6 -6
  79. package/dist/cjs/ion-tab.cjs.entry.js +4 -4
  80. package/dist/cjs/ion-tabs.cjs.entry.js +4 -5
  81. package/dist/cjs/ion-text.cjs.entry.js +3 -3
  82. package/dist/cjs/ion-textarea.cjs.entry.js +31 -29
  83. package/dist/cjs/ion-thumbnail.cjs.entry.js +2 -2
  84. package/dist/cjs/ion-toast.cjs.entry.js +50 -60
  85. package/dist/cjs/ion-toggle.cjs.entry.js +41 -22
  86. package/dist/cjs/ion-virtual-scroll.cjs.entry.js +39 -31
  87. package/dist/cjs/{ionic-global-56e10eb5.js → ionic-global-f2d95fd3.js} +112 -93
  88. package/dist/cjs/{ios.transition-32e4623d.js → ios.transition-0f31ec9a.js} +78 -53
  89. package/dist/cjs/{keyboard-9e8103e4.js → keyboard-79afcba2.js} +6 -3
  90. package/dist/cjs/keyboard-controller-a934d106.js +42 -0
  91. package/dist/cjs/loader.cjs.js +5 -5
  92. package/dist/cjs/{md.transition-169c54f0.js → md.transition-d2a33a23.js} +15 -17
  93. package/dist/cjs/{menu-toggle-util-087678e0.js → menu-toggle-util-0a43ff7c.js} +5 -2
  94. package/dist/cjs/{overlays-49fe9ba7.js → overlays-f7d24abf.js} +190 -72
  95. package/dist/cjs/spinner-configs-cd0abbeb.js +147 -0
  96. package/dist/cjs/{status-tap-ada894ff.js → status-tap-beaa3a71.js} +10 -5
  97. package/dist/cjs/{swipe-back-c4a778df.js → swipe-back-666ea8e6.js} +34 -15
  98. package/dist/cjs/{theme-2259d0f5.js → theme-fc63803b.js} +9 -5
  99. package/dist/collection/collection-manifest.json +10 -4
  100. package/dist/collection/components/pos-rich-link/pos-rich-link.js +1 -1
  101. package/dist/components/ResourceAware.js +5 -0
  102. package/dist/components/action-sheet.js +309 -0
  103. package/dist/{esm/ion-alert.entry.js → components/alert.js} +150 -105
  104. package/dist/{esm/animation-fe6ed422.js → components/animation.js} +115 -84
  105. package/dist/components/app.js +112 -0
  106. package/dist/components/backdrop.js +82 -0
  107. package/dist/components/badge.js +42 -0
  108. package/dist/{esm/button-active-fd9d6d91.js → components/button-active.js} +9 -6
  109. package/dist/components/button.js +207 -0
  110. package/dist/{esm/ion-buttons.entry.js → components/buttons.js} +28 -12
  111. package/dist/components/card-content.js +40 -0
  112. package/dist/components/card-header.js +51 -0
  113. package/dist/components/card-title.js +43 -0
  114. package/dist/components/card.js +102 -0
  115. package/dist/{esm/ion-checkbox.entry.js → components/checkbox.js} +42 -24
  116. package/dist/components/col.js +161 -0
  117. package/dist/components/content.js +356 -0
  118. package/dist/{esm/cubic-bezier-108b8579.js → components/cubic-bezier.js} +13 -12
  119. package/dist/components/data.js +1463 -0
  120. package/dist/components/dir.js +18 -0
  121. package/dist/components/focus-visible.js +74 -0
  122. package/dist/components/footer.js +149 -0
  123. package/dist/components/framework-delegate.js +115 -0
  124. package/dist/{esm/gesture-controller-8f35af24.js → components/gesture-controller.js} +6 -2
  125. package/dist/components/grid.js +41 -0
  126. package/dist/{esm/haptic-c424e670.js → components/haptic.js} +38 -9
  127. package/dist/{esm/hardware-back-button-bb4c578a.js → components/hardware-back-button.js} +11 -8
  128. package/dist/components/header.js +360 -0
  129. package/dist/{esm/helpers-44e3bd9f.js → components/helpers.js} +113 -16
  130. package/dist/components/icon.js +367 -0
  131. package/dist/components/index.d.ts +41 -0
  132. package/dist/components/index.js +123 -0
  133. package/dist/components/index10.js +28 -0
  134. package/dist/{esm/tap-click-a7e55ef5.js → components/index11.js} +37 -19
  135. package/dist/components/index2.js +25 -0
  136. package/dist/{esm/index-8d682224.js → components/index3.js} +12 -8
  137. package/dist/components/index4.js +34 -0
  138. package/dist/components/index5.js +128 -0
  139. package/dist/{esm/index-97199683.js → components/index6.js} +34 -28
  140. package/dist/{esm/index-8a463a85.js → components/index7.js} +35 -24
  141. package/dist/{custom-elements/index.js → components/index8.js} +1049 -20945
  142. package/dist/{esm/index-3a1bd803.js → components/index9.js} +35 -20
  143. package/dist/{custom-elements → components}/input-shims.js +88 -38
  144. package/dist/components/ion-accordion-group.js +228 -0
  145. package/dist/components/ion-accordion.js +365 -0
  146. package/dist/components/ion-action-sheet.js +6 -0
  147. package/dist/components/ion-alert.js +6 -0
  148. package/dist/components/ion-app.js +6 -0
  149. package/dist/components/ion-avatar.js +39 -0
  150. package/dist/components/ion-back-button.js +128 -0
  151. package/dist/components/ion-backdrop.js +6 -0
  152. package/dist/components/ion-badge.js +6 -0
  153. package/dist/components/ion-breadcrumb.js +135 -0
  154. package/dist/components/ion-breadcrumbs.js +158 -0
  155. package/dist/components/ion-button.js +6 -0
  156. package/dist/components/ion-buttons.js +6 -0
  157. package/dist/components/ion-card-content.js +6 -0
  158. package/dist/components/ion-card-header.js +6 -0
  159. package/dist/components/ion-card-subtitle.js +46 -0
  160. package/dist/components/ion-card-title.js +6 -0
  161. package/dist/components/ion-card.js +6 -0
  162. package/dist/components/ion-checkbox.js +6 -0
  163. package/dist/components/ion-chip.js +59 -0
  164. package/dist/components/ion-col.js +6 -0
  165. package/dist/components/ion-content.js +6 -0
  166. package/dist/components/ion-datetime-button.js +375 -0
  167. package/dist/components/ion-datetime.js +1802 -0
  168. package/dist/components/ion-fab-button.js +149 -0
  169. package/dist/components/ion-fab-list.js +62 -0
  170. package/dist/components/ion-fab.js +97 -0
  171. package/dist/components/ion-footer.js +6 -0
  172. package/dist/components/ion-grid.js +6 -0
  173. package/dist/components/ion-header.js +6 -0
  174. package/dist/components/ion-icon.js +6 -0
  175. package/dist/components/ion-img.js +120 -0
  176. package/dist/components/ion-infinite-scroll-content.js +59 -0
  177. package/dist/components/ion-infinite-scroll.js +223 -0
  178. package/dist/components/ion-input.js +352 -0
  179. package/dist/components/ion-item-divider.js +6 -0
  180. package/dist/components/ion-item-group.js +6 -0
  181. package/dist/components/ion-item-option.js +89 -0
  182. package/dist/components/ion-item-options.js +63 -0
  183. package/dist/components/ion-item-sliding.js +419 -0
  184. package/dist/components/ion-item.js +6 -0
  185. package/dist/components/ion-label.js +6 -0
  186. package/dist/components/ion-list-header.js +6 -0
  187. package/dist/components/ion-list.js +6 -0
  188. package/dist/components/ion-loading.js +256 -0
  189. package/dist/components/ion-menu-button.js +107 -0
  190. package/dist/components/ion-menu-toggle.js +62 -0
  191. package/dist/components/ion-menu.js +611 -0
  192. package/dist/components/ion-modal.js +1765 -0
  193. package/dist/components/ion-nav-link.js +65 -0
  194. package/dist/components/ion-nav.js +905 -0
  195. package/dist/components/ion-note.js +6 -0
  196. package/dist/components/ion-picker-column-internal.js +6 -0
  197. package/dist/components/ion-picker-column.js +6 -0
  198. package/dist/components/ion-picker-internal.js +6 -0
  199. package/dist/components/ion-picker.js +263 -0
  200. package/dist/components/ion-popover.js +6 -0
  201. package/dist/components/ion-progress-bar.js +6 -0
  202. package/dist/components/ion-radio-group.js +6 -0
  203. package/dist/components/ion-radio.js +6 -0
  204. package/dist/components/ion-range.js +550 -0
  205. package/dist/components/ion-refresher-content.js +64 -0
  206. package/dist/components/ion-refresher.js +826 -0
  207. package/dist/components/ion-reorder-group.js +303 -0
  208. package/dist/components/ion-reorder.js +58 -0
  209. package/dist/components/ion-ripple-effect.js +6 -0
  210. package/dist/components/ion-route-redirect.js +40 -0
  211. package/dist/components/ion-route.js +68 -0
  212. package/dist/components/ion-router-link.js +59 -0
  213. package/dist/components/ion-router-outlet.js +223 -0
  214. package/dist/components/ion-router.js +852 -0
  215. package/dist/components/ion-row.js +6 -0
  216. package/dist/components/ion-searchbar.js +6 -0
  217. package/dist/components/ion-segment-button.js +128 -0
  218. package/dist/components/ion-segment.js +463 -0
  219. package/dist/components/ion-select-option.js +44 -0
  220. package/dist/components/ion-select-popover.js +6 -0
  221. package/dist/components/ion-select.js +596 -0
  222. package/dist/components/ion-skeleton-text.js +6 -0
  223. package/dist/components/ion-slide.js +38 -0
  224. package/dist/components/ion-slides.js +423 -0
  225. package/dist/components/ion-spinner.js +6 -0
  226. package/dist/components/ion-split-pane.js +179 -0
  227. package/dist/components/ion-tab-bar.js +86 -0
  228. package/dist/components/ion-tab-button.js +132 -0
  229. package/dist/components/ion-tab.js +86 -0
  230. package/dist/components/ion-tabs.js +176 -0
  231. package/dist/components/ion-text.js +40 -0
  232. package/dist/components/ion-textarea.js +287 -0
  233. package/dist/components/ion-thumbnail.js +34 -0
  234. package/dist/components/ion-title.js +6 -0
  235. package/dist/components/ion-toast.js +317 -0
  236. package/dist/components/ion-toggle.js +207 -0
  237. package/dist/components/ion-toolbar.js +6 -0
  238. package/dist/components/ion-virtual-scroll.js +588 -0
  239. package/dist/components/ionic-global.js +226 -0
  240. package/dist/{custom-elements → components}/ios.transition.js +75 -50
  241. package/dist/components/item-divider.js +54 -0
  242. package/dist/components/item-group.js +41 -0
  243. package/dist/components/item.js +323 -0
  244. package/dist/components/keyboard-controller.js +40 -0
  245. package/dist/{custom-elements → components}/keyboard.js +6 -3
  246. package/dist/components/label.js +95 -0
  247. package/dist/components/list-header.js +45 -0
  248. package/dist/components/list.js +66 -0
  249. package/dist/{custom-elements → components}/md.transition.js +12 -14
  250. package/dist/{esm/menu-toggle-util-562dfc9c.js → components/menu-toggle-util.js} +5 -2
  251. package/dist/components/note.js +42 -0
  252. package/dist/{esm/overlays-fc9a0625.js → components/overlays.js} +188 -72
  253. package/dist/components/picker-column-internal.js +315 -0
  254. package/dist/components/picker-column.js +343 -0
  255. package/dist/components/picker-internal.js +486 -0
  256. package/dist/components/popover.js +1440 -0
  257. package/dist/components/pos-app-browser.d.ts +11 -0
  258. package/dist/components/pos-app-browser.js +299 -0
  259. package/dist/components/pos-app-generic.d.ts +11 -0
  260. package/dist/components/pos-app-generic.js +6 -0
  261. package/dist/components/pos-app-generic2.js +194 -0
  262. package/dist/components/pos-app-image-viewer.d.ts +11 -0
  263. package/dist/components/pos-app-image-viewer.js +6 -0
  264. package/dist/components/pos-app-image-viewer2.js +162 -0
  265. package/dist/components/pos-app-rdf-document.d.ts +11 -0
  266. package/dist/components/pos-app-rdf-document.js +6 -0
  267. package/dist/components/pos-app-rdf-document2.js +170 -0
  268. package/dist/components/pos-app.d.ts +11 -0
  269. package/dist/components/pos-app.js +6 -0
  270. package/dist/components/pos-app2.js +53 -0
  271. package/dist/components/pos-description.d.ts +11 -0
  272. package/dist/components/pos-description.js +6 -0
  273. package/dist/components/pos-description2.js +38 -0
  274. package/dist/components/pos-image.d.ts +11 -0
  275. package/dist/components/pos-image.js +6 -0
  276. package/dist/components/pos-image2.js +117 -0
  277. package/dist/components/pos-label.d.ts +11 -0
  278. package/dist/components/pos-label.js +6 -0
  279. package/dist/components/pos-label2.js +38 -0
  280. package/dist/components/pos-literals.d.ts +11 -0
  281. package/dist/components/pos-literals.js +6 -0
  282. package/dist/components/pos-literals2.js +87 -0
  283. package/dist/components/pos-login.d.ts +11 -0
  284. package/dist/components/pos-login.js +6 -0
  285. package/dist/components/pos-login2.js +120 -0
  286. package/dist/components/pos-navigation-bar.d.ts +11 -0
  287. package/dist/components/pos-navigation-bar.js +6 -0
  288. package/dist/components/pos-navigation-bar2.js +52 -0
  289. package/dist/components/pos-picture.d.ts +11 -0
  290. package/dist/components/pos-picture.js +6 -0
  291. package/dist/components/pos-picture2.js +62 -0
  292. package/dist/components/pos-relations.d.ts +11 -0
  293. package/dist/components/pos-relations.js +6 -0
  294. package/dist/components/pos-relations2.js +135 -0
  295. package/dist/components/pos-resource.d.ts +11 -0
  296. package/dist/components/pos-resource.js +6 -0
  297. package/dist/components/pos-resource2.js +126 -0
  298. package/dist/components/pos-reverse-relations.d.ts +11 -0
  299. package/dist/components/pos-reverse-relations.js +6 -0
  300. package/dist/components/pos-reverse-relations2.js +135 -0
  301. package/dist/components/pos-rich-link.d.ts +11 -0
  302. package/dist/components/pos-rich-link.js +6 -0
  303. package/dist/components/pos-rich-link2.js +106 -0
  304. package/dist/components/pos-router.d.ts +11 -0
  305. package/dist/components/pos-router.js +6 -0
  306. package/dist/components/pos-router2.js +813 -0
  307. package/dist/components/pos-subjects.d.ts +11 -0
  308. package/dist/components/pos-subjects.js +6 -0
  309. package/dist/components/pos-subjects2.js +125 -0
  310. package/dist/components/pos-type-badges.d.ts +11 -0
  311. package/dist/components/pos-type-badges.js +6 -0
  312. package/dist/components/pos-type-badges2.js +69 -0
  313. package/dist/components/pos-type-router.d.ts +11 -0
  314. package/dist/components/pos-type-router.js +6 -0
  315. package/dist/components/pos-type-router2.js +241 -0
  316. package/dist/components/progress-bar.js +91 -0
  317. package/dist/components/radio-group.js +139 -0
  318. package/dist/components/radio.js +135 -0
  319. package/dist/components/ripple-effect.js +107 -0
  320. package/dist/components/row.js +31 -0
  321. package/dist/components/searchbar.js +412 -0
  322. package/dist/components/select-popover.js +174 -0
  323. package/dist/components/session.js +202 -0
  324. package/dist/components/skeleton-text.js +46 -0
  325. package/dist/components/spinner.js +224 -0
  326. package/dist/{custom-elements → components}/status-tap.js +8 -4
  327. package/dist/{custom-elements → components}/swipe-back.js +33 -13
  328. package/dist/{custom-elements → components}/swiper.bundle.js +0 -0
  329. package/dist/{esm/theme-d21826a7.js → components/theme.js} +9 -5
  330. package/dist/components/title.js +66 -0
  331. package/dist/components/toolbar.js +87 -0
  332. package/dist/elements/elements.css +1 -1
  333. package/dist/elements/elements.esm.js +1 -1
  334. package/dist/elements/p-00f19b1d.js +4 -0
  335. package/dist/elements/p-0587332d.entry.js +1 -0
  336. package/dist/elements/p-07f54139.entry.js +7 -0
  337. package/dist/elements/{p-cfc0e54d.js → p-0991c811.js} +3 -0
  338. package/dist/elements/p-0a69a563.entry.js +1 -0
  339. package/dist/elements/p-0d284fe0.entry.js +1 -0
  340. package/dist/elements/p-116437b0.entry.js +13 -0
  341. package/dist/elements/p-12880671.entry.js +1 -0
  342. package/dist/elements/p-14ccd586.entry.js +1 -0
  343. package/dist/elements/{p-83d45051.entry.js → p-14df6ac0.entry.js} +1 -1
  344. package/dist/elements/{p-e860be6a.entry.js → p-17079f06.entry.js} +1 -1
  345. package/dist/elements/p-19e4a688.js +4 -0
  346. package/dist/elements/p-1afc4eb4.js +4 -0
  347. package/dist/elements/p-1beaf6bf.js +4 -0
  348. package/dist/elements/p-1d1c6a6f.entry.js +1 -0
  349. package/dist/elements/{p-31d30e42.entry.js → p-1d98f84b.entry.js} +1 -1
  350. package/dist/elements/p-1e617706.entry.js +7 -0
  351. package/dist/elements/p-278ca4c9.js +4 -0
  352. package/dist/elements/p-27f5629c.entry.js +1 -0
  353. package/dist/elements/p-29c0f03f.js +4 -0
  354. package/dist/elements/p-2a629468.entry.js +4 -0
  355. package/dist/elements/p-2da59aca.js +4 -0
  356. package/dist/elements/p-3152143f.js +4 -0
  357. package/dist/elements/p-343ff720.entry.js +7 -0
  358. package/dist/elements/p-36d4c9a8.js +4 -0
  359. package/dist/elements/p-3a30dfb2.entry.js +1 -0
  360. package/dist/elements/p-3c013bf1.entry.js +1 -0
  361. package/dist/elements/{p-74ba1e42.entry.js → p-3c318da5.entry.js} +1 -1
  362. package/dist/elements/p-3cee3222.entry.js +1 -0
  363. package/dist/elements/p-3d0f59af.entry.js +7 -0
  364. package/dist/elements/p-41cb5688.entry.js +1 -0
  365. package/dist/elements/p-480b3c4f.entry.js +1 -0
  366. package/dist/elements/p-4e9d8f18.entry.js +1 -0
  367. package/dist/elements/p-53e23176.js +2 -0
  368. package/dist/elements/p-548524f3.js +4 -0
  369. package/dist/elements/p-5739fa41.entry.js +1 -0
  370. package/dist/elements/p-5808c505.js +1 -0
  371. package/dist/elements/p-58a8cc2a.js +4 -0
  372. package/dist/elements/p-6035415e.entry.js +1 -0
  373. package/dist/elements/p-60eeae90.js +4 -0
  374. package/dist/elements/p-667550a9.entry.js +14 -0
  375. package/dist/elements/p-67777478.entry.js +1 -0
  376. package/dist/elements/p-6ab826e1.entry.js +1 -0
  377. package/dist/elements/p-6f5a2827.entry.js +1 -0
  378. package/dist/elements/p-7916ecc5.entry.js +1 -0
  379. package/dist/elements/p-79f06b80.entry.js +1 -0
  380. package/dist/elements/p-7d0def79.js +5 -0
  381. package/dist/elements/p-8112afea.js +4 -0
  382. package/dist/elements/p-83678d7d.entry.js +4 -0
  383. package/dist/elements/p-87e45c94.entry.js +1 -0
  384. package/dist/elements/p-8f80768f.entry.js +4 -0
  385. package/dist/elements/p-8fe0433b.js +4 -0
  386. package/dist/elements/{p-4cb27b48.entry.js → p-9147d82b.entry.js} +1 -1
  387. package/dist/elements/p-96aeb07a.entry.js +1 -0
  388. package/dist/elements/p-97abb434.entry.js +1 -0
  389. package/dist/elements/p-98497a4b.entry.js +1 -0
  390. package/dist/elements/p-9c719139.js +4 -0
  391. package/dist/elements/p-9ca37332.js +4 -0
  392. package/dist/elements/{p-37de7110.js → p-9d48def2.js} +3 -0
  393. package/dist/elements/p-a805f2f9.entry.js +1 -0
  394. package/dist/elements/p-a86a5bfa.entry.js +1 -0
  395. package/dist/elements/{p-9c1dbe52.entry.js → p-ac34eab7.entry.js} +1 -1
  396. package/dist/elements/p-ad366eab.entry.js +4 -0
  397. package/dist/elements/p-aef3a931.js +7 -0
  398. package/dist/elements/p-b0537eb3.entry.js +1 -0
  399. package/dist/elements/p-b41e66f0.entry.js +1 -0
  400. package/dist/elements/p-b47e7091.entry.js +1 -0
  401. package/dist/elements/p-b840320e.js +4 -0
  402. package/dist/elements/p-b934ac5d.entry.js +1 -0
  403. package/dist/elements/p-bc63f4b6.entry.js +1 -0
  404. package/dist/elements/p-bd12806f.entry.js +1 -0
  405. package/dist/elements/p-bf90022d.entry.js +4 -0
  406. package/dist/elements/p-c16d38d5.js +4 -0
  407. package/dist/elements/p-c84205a3.js +4 -0
  408. package/dist/elements/{p-06675ac7.entry.js → p-cbe318f8.entry.js} +1 -1
  409. package/dist/elements/p-cfed7395.js +4 -0
  410. package/dist/elements/p-d3e75c94.entry.js +1 -0
  411. package/dist/elements/p-d8e7ebf4.entry.js +7 -0
  412. package/dist/elements/p-d9880221.entry.js +4 -0
  413. package/dist/elements/p-da5db8fb.entry.js +1 -0
  414. package/dist/elements/{p-91fe653f.js → p-dcc6b03c.js} +3 -0
  415. package/dist/elements/{p-305e246c.entry.js → p-dd846020.entry.js} +1 -1
  416. package/dist/elements/p-dffd8689.js +4 -0
  417. package/dist/elements/p-e3bcb6e8.entry.js +1 -0
  418. package/dist/elements/p-e495a095.js +4 -0
  419. package/dist/elements/p-e59d9789.entry.js +1 -0
  420. package/dist/elements/p-e5fc7d42.entry.js +1 -0
  421. package/dist/elements/{p-aaa8393e.entry.js → p-eb137e9d.entry.js} +1 -1
  422. package/dist/elements/p-f4e54a17.js +7 -0
  423. package/dist/elements/p-f67d0717.entry.js +1 -0
  424. package/dist/elements/p-f7f4c640.js +1 -0
  425. package/dist/elements/p-f851b91a.js +4 -0
  426. package/dist/elements/p-fb27ee76.entry.js +1 -0
  427. package/dist/elements/p-fbddca35.entry.js +1 -0
  428. package/dist/elements/p-fdac5f3a.js +4 -0
  429. package/dist/elements/p-feb0cea8.entry.js +4 -0
  430. package/dist/esm/animation-801a007a.js +986 -0
  431. package/dist/esm/{app-globals-27d92837.js → app-globals-05a3abfb.js} +1 -1
  432. package/dist/esm/cubic-bezier-538b6253.js +90 -0
  433. package/dist/esm/data-62c81c24.js +1463 -0
  434. package/dist/esm/dir-defb16c6.js +18 -0
  435. package/dist/esm/elements.js +5 -5
  436. package/dist/esm/focus-visible-78d55799.js +74 -0
  437. package/dist/esm/framework-delegate-7e2b767b.js +115 -0
  438. package/dist/esm/gesture-controller-c466ff14.js +195 -0
  439. package/dist/esm/haptic-e7d5ef4d.js +135 -0
  440. package/dist/esm/hardware-back-button-242191a7.js +71 -0
  441. package/dist/esm/helpers-aeff219b.js +410 -0
  442. package/dist/esm/index-0dbaca1a.js +28 -0
  443. package/dist/esm/index-1f3d8582.js +34 -0
  444. package/dist/esm/index-2be9a18b.js +312 -0
  445. package/dist/esm/index-51e4a829.js +137 -0
  446. package/dist/esm/index-6048aed6.js +224 -0
  447. package/dist/esm/index-65ecd543.js +25 -0
  448. package/dist/{custom-elements/tap-click.js → esm/index-b212db1c.js} +37 -19
  449. package/dist/esm/{index-e4deec27.js → index-cb938ffb.js} +7 -1
  450. package/dist/esm/index-d39eb62b.js +463 -0
  451. package/dist/esm/index-ebf7f059.js +128 -0
  452. package/dist/esm/{input-shims-3b48722f.js → input-shims-8a389148.js} +89 -38
  453. package/dist/esm/ion-accordion-group.entry.js +201 -0
  454. package/dist/esm/ion-accordion.entry.js +332 -0
  455. package/dist/esm/ion-action-sheet_3.entry.js +859 -0
  456. package/dist/esm/{ion-app_45.entry.js → ion-app_46.entry.js} +1906 -1493
  457. package/dist/esm/ion-avatar.entry.js +2 -2
  458. package/dist/esm/ion-back-button.entry.js +12 -11
  459. package/dist/esm/ion-backdrop.entry.js +4 -4
  460. package/dist/esm/ion-breadcrumb.entry.js +97 -0
  461. package/dist/esm/ion-breadcrumbs.entry.js +133 -0
  462. package/dist/esm/ion-buttons_3.entry.js +793 -0
  463. package/dist/esm/ion-card-subtitle.entry.js +4 -4
  464. package/dist/esm/{ion-list-header_3.entry.js → ion-checkbox_4.entry.js} +124 -24
  465. package/dist/esm/ion-chip.entry.js +5 -10
  466. package/dist/esm/ion-datetime-button.entry.js +342 -0
  467. package/dist/esm/ion-datetime.entry.js +1548 -856
  468. package/dist/esm/ion-fab-button.entry.js +26 -9
  469. package/dist/esm/ion-fab-list.entry.js +4 -4
  470. package/dist/esm/ion-fab.entry.js +15 -13
  471. package/dist/esm/ion-img.entry.js +28 -4
  472. package/dist/esm/ion-infinite-scroll-content.entry.js +5 -5
  473. package/dist/esm/ion-infinite-scroll.entry.js +13 -13
  474. package/dist/esm/ion-input.entry.js +57 -23
  475. package/dist/esm/ion-item-option.entry.js +8 -8
  476. package/dist/esm/ion-item-options.entry.js +5 -5
  477. package/dist/esm/ion-item-sliding.entry.js +59 -63
  478. package/dist/esm/ion-loading.entry.js +38 -37
  479. package/dist/esm/ion-menu-button.entry.js +14 -12
  480. package/dist/esm/ion-menu-toggle.entry.js +8 -7
  481. package/dist/esm/ion-menu.entry.js +71 -57
  482. package/dist/esm/ion-modal.entry.js +1377 -147
  483. package/dist/esm/ion-nav-link.entry.js +5 -2
  484. package/dist/esm/ion-nav.entry.js +177 -171
  485. package/dist/esm/ion-picker-column.entry.js +25 -27
  486. package/dist/esm/ion-picker.entry.js +22 -17
  487. package/dist/esm/ion-popover.entry.js +1208 -182
  488. package/dist/esm/ion-range.entry.js +137 -57
  489. package/dist/esm/ion-refresher-content.entry.js +7 -12
  490. package/dist/esm/ion-refresher.entry.js +149 -147
  491. package/dist/esm/ion-reorder-group.entry.js +42 -35
  492. package/dist/esm/ion-reorder.entry.js +5 -4
  493. package/dist/esm/ion-route-redirect.entry.js +1 -1
  494. package/dist/esm/ion-route.entry.js +1 -1
  495. package/dist/esm/ion-router-link.entry.js +5 -5
  496. package/dist/esm/ion-router-outlet.entry.js +24 -20
  497. package/dist/esm/ion-router.entry.js +291 -194
  498. package/dist/esm/ion-segment-button.entry.js +10 -17
  499. package/dist/esm/ion-segment.entry.js +127 -26
  500. package/dist/esm/ion-select-option.entry.js +3 -3
  501. package/dist/esm/ion-select.entry.js +113 -78
  502. package/dist/esm/ion-slide.entry.js +3 -3
  503. package/dist/esm/ion-slides.entry.js +26 -27
  504. package/dist/esm/ion-spinner.entry.js +10 -9
  505. package/dist/esm/ion-split-pane.entry.js +16 -12
  506. package/dist/esm/ion-tab-bar.entry.js +16 -23
  507. package/dist/esm/ion-tab-button.entry.js +6 -6
  508. package/dist/esm/ion-tab.entry.js +4 -4
  509. package/dist/esm/ion-tabs.entry.js +4 -5
  510. package/dist/esm/ion-text.entry.js +3 -3
  511. package/dist/esm/ion-textarea.entry.js +31 -29
  512. package/dist/esm/ion-thumbnail.entry.js +2 -2
  513. package/dist/esm/ion-toast.entry.js +50 -60
  514. package/dist/esm/ion-toggle.entry.js +41 -22
  515. package/dist/esm/ion-virtual-scroll.entry.js +39 -31
  516. package/dist/esm/{ionic-global-2e28f7c7.js → ionic-global-6cd57191.js} +112 -93
  517. package/dist/esm/{ios.transition-a783e3cd.js → ios.transition-bbd952f2.js} +78 -53
  518. package/dist/esm/{keyboard-e6abcb80.js → keyboard-413afe04.js} +6 -3
  519. package/dist/esm/keyboard-controller-33693bc2.js +40 -0
  520. package/dist/esm/loader.js +5 -5
  521. package/dist/esm/{md.transition-5a4a8c82.js → md.transition-5170a6d3.js} +15 -17
  522. package/dist/esm/menu-toggle-util-82bf888a.js +12 -0
  523. package/dist/esm/overlays-bd4abb68.js +502 -0
  524. package/dist/esm/spinner-configs-cbcd1f62.js +145 -0
  525. package/dist/esm/{status-tap-69e62ad6.js → status-tap-ad757b8a.js} +10 -5
  526. package/dist/esm/swipe-back-7ef22876.js +69 -0
  527. package/dist/esm/theme-7cf2cab0.js +43 -0
  528. package/dist/types/components.d.ts +0 -13
  529. package/package.json +7 -8
  530. package/dist/cjs/button-active-c14dab31.js +0 -66
  531. package/dist/cjs/focus-visible-16c98640.js +0 -45
  532. package/dist/cjs/framework-delegate-c45292a3.js +0 -37
  533. package/dist/cjs/ion-action-sheet.cjs.entry.js +0 -265
  534. package/dist/cjs/ion-alert.cjs.entry.js +0 -456
  535. package/dist/cjs/ion-buttons.cjs.entry.js +0 -42
  536. package/dist/cjs/ion-checkbox.cjs.entry.js +0 -117
  537. package/dist/cjs/ion-note.cjs.entry.js +0 -29
  538. package/dist/cjs/ion-select-popover.cjs.entry.js +0 -35
  539. package/dist/cjs/spinner-configs-fb16b986.js +0 -112
  540. package/dist/cjs/test-component.cjs.entry.js +0 -13
  541. package/dist/collection/test/TestComponent.js +0 -3
  542. package/dist/collection/test/mockPodOS.js +0 -35
  543. package/dist/collection/test/renderFunctionalComponent.js +0 -8
  544. package/dist/custom-elements/focus-visible.js +0 -43
  545. package/dist/custom-elements/index.d.ts +0 -165
  546. package/dist/elements/p-03bda390.js +0 -1
  547. package/dist/elements/p-0be044f1.entry.js +0 -1
  548. package/dist/elements/p-119c7c6c.entry.js +0 -1
  549. package/dist/elements/p-14c7c3ea.entry.js +0 -1
  550. package/dist/elements/p-1d4a2c61.js +0 -1
  551. package/dist/elements/p-1d894ac4.entry.js +0 -1
  552. package/dist/elements/p-1dafa1ce.entry.js +0 -1
  553. package/dist/elements/p-23b89ccb.entry.js +0 -1
  554. package/dist/elements/p-2c03b9ab.entry.js +0 -1
  555. package/dist/elements/p-346985f2.js +0 -1
  556. package/dist/elements/p-360f1c62.entry.js +0 -1
  557. package/dist/elements/p-373e1f25.entry.js +0 -1
  558. package/dist/elements/p-40547acb.entry.js +0 -1
  559. package/dist/elements/p-40b68014.entry.js +0 -1
  560. package/dist/elements/p-42e4f702.entry.js +0 -1
  561. package/dist/elements/p-489807e5.js +0 -1
  562. package/dist/elements/p-4ad72d54.entry.js +0 -1
  563. package/dist/elements/p-4cca7b5e.entry.js +0 -1
  564. package/dist/elements/p-4f24d306.js +0 -1
  565. package/dist/elements/p-519d6a53.entry.js +0 -1
  566. package/dist/elements/p-536e8e52.entry.js +0 -1
  567. package/dist/elements/p-599bb53f.entry.js +0 -1
  568. package/dist/elements/p-5eb7a546.js +0 -1
  569. package/dist/elements/p-60df2bed.entry.js +0 -1
  570. package/dist/elements/p-65133e33.js +0 -1
  571. package/dist/elements/p-6693fce8.js +0 -1
  572. package/dist/elements/p-689bdcc1.entry.js +0 -1
  573. package/dist/elements/p-70713b3d.entry.js +0 -1
  574. package/dist/elements/p-707d5d76.js +0 -1
  575. package/dist/elements/p-7212b7f2.js +0 -1
  576. package/dist/elements/p-73992898.entry.js +0 -1
  577. package/dist/elements/p-792c1e0f.entry.js +0 -1
  578. package/dist/elements/p-7e5300af.js +0 -2
  579. package/dist/elements/p-8068987c.entry.js +0 -1
  580. package/dist/elements/p-83accf46.entry.js +0 -1
  581. package/dist/elements/p-86635d06.entry.js +0 -1
  582. package/dist/elements/p-874c2b44.js +0 -1
  583. package/dist/elements/p-89c12ce8.entry.js +0 -1
  584. package/dist/elements/p-8bcba3f7.entry.js +0 -1
  585. package/dist/elements/p-8c759f51.entry.js +0 -1
  586. package/dist/elements/p-8f945e6b.entry.js +0 -1
  587. package/dist/elements/p-9300ab6a.js +0 -1
  588. package/dist/elements/p-93cacd51.entry.js +0 -1
  589. package/dist/elements/p-9408d0b4.entry.js +0 -1
  590. package/dist/elements/p-98c79eda.js +0 -1
  591. package/dist/elements/p-99f8abed.js +0 -1
  592. package/dist/elements/p-9ca7e079.js +0 -1
  593. package/dist/elements/p-a4648b74.entry.js +0 -1
  594. package/dist/elements/p-aab0f63c.js +0 -1
  595. package/dist/elements/p-ad4e2295.entry.js +0 -1
  596. package/dist/elements/p-afb8f7d5.entry.js +0 -1
  597. package/dist/elements/p-b055ec44.js +0 -1
  598. package/dist/elements/p-b078d63b.entry.js +0 -1
  599. package/dist/elements/p-b3460325.entry.js +0 -1
  600. package/dist/elements/p-b5406b58.entry.js +0 -1
  601. package/dist/elements/p-b5ef0c91.entry.js +0 -1
  602. package/dist/elements/p-b6ba623e.entry.js +0 -1
  603. package/dist/elements/p-b9926d8b.entry.js +0 -1
  604. package/dist/elements/p-bfd4cfcd.entry.js +0 -1
  605. package/dist/elements/p-c08dd7d0.entry.js +0 -1
  606. package/dist/elements/p-c0db9c51.entry.js +0 -1
  607. package/dist/elements/p-c1e7fbfb.js +0 -1
  608. package/dist/elements/p-ca69d6c9.js +0 -1
  609. package/dist/elements/p-cc4cb1ac.entry.js +0 -1
  610. package/dist/elements/p-cf8a7031.entry.js +0 -1
  611. package/dist/elements/p-cff82b6f.js +0 -1
  612. package/dist/elements/p-d01009b8.entry.js +0 -67
  613. package/dist/elements/p-d6d1e65f.entry.js +0 -1
  614. package/dist/elements/p-d9462b66.entry.js +0 -1
  615. package/dist/elements/p-e2e0fee9.entry.js +0 -1
  616. package/dist/elements/p-e642b266.entry.js +0 -1
  617. package/dist/elements/p-e953934f.entry.js +0 -1
  618. package/dist/elements/p-f0474f46.js +0 -1
  619. package/dist/elements/p-f10a94f6.entry.js +0 -1
  620. package/dist/elements/p-f2426182.entry.js +0 -1
  621. package/dist/elements/p-f327fd21.js +0 -1
  622. package/dist/elements/p-f84987ee.js +0 -1
  623. package/dist/elements/p-f8a3367d.entry.js +0 -1
  624. package/dist/esm/focus-visible-edb28f19.js +0 -43
  625. package/dist/esm/framework-delegate-9cd8048f.js +0 -34
  626. package/dist/esm/ion-action-sheet.entry.js +0 -261
  627. package/dist/esm/ion-note.entry.js +0 -25
  628. package/dist/esm/ion-select-popover.entry.js +0 -31
  629. package/dist/esm/spinner-configs-aaf2a1a9.js +0 -110
  630. package/dist/esm/swipe-back-d84cfc8a.js +0 -50
  631. package/dist/esm/test-component.entry.js +0 -9
  632. package/dist/types/test/TestComponent.d.ts +0 -2
  633. package/dist/types/test/mockPodOS.d.ts +0 -11
  634. package/dist/types/test/renderFunctionalComponent.d.ts +0 -1
@@ -0,0 +1,1440 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+ import { g as getIonMode, a as isPlatform } from './ionic-global.js';
3
+ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate.js';
4
+ import { r as raf, g as getElementRoot, a as addEventListener } from './helpers.js';
5
+ import { B as BACKDROP, p as prepareOverlay, d as dismiss, e as eventMethod, a as present, j as focusFirstDescendant } from './overlays.js';
6
+ import { g as getClassMap } from './theme.js';
7
+ import { d as deepReady } from './index7.js';
8
+ import { c as createAnimation } from './animation.js';
9
+ import { d as defineCustomElement$1 } from './backdrop.js';
10
+
11
+ /*!
12
+ * (C) Ionic http://ionicframework.com - MIT License
13
+ */
14
+ /**
15
+ * Returns the dimensions of the popover
16
+ * arrow on `ios` mode. If arrow is disabled
17
+ * returns (0, 0).
18
+ */
19
+ const getArrowDimensions = (arrowEl) => {
20
+ if (!arrowEl) {
21
+ return { arrowWidth: 0, arrowHeight: 0 };
22
+ }
23
+ const { width, height } = arrowEl.getBoundingClientRect();
24
+ return { arrowWidth: width, arrowHeight: height };
25
+ };
26
+ /**
27
+ * Returns the recommended dimensions of the popover
28
+ * that takes into account whether or not the width
29
+ * should match the trigger width.
30
+ */
31
+ const getPopoverDimensions = (size, contentEl, triggerEl) => {
32
+ const contentDimentions = contentEl.getBoundingClientRect();
33
+ const contentHeight = contentDimentions.height;
34
+ let contentWidth = contentDimentions.width;
35
+ if (size === 'cover' && triggerEl) {
36
+ const triggerDimensions = triggerEl.getBoundingClientRect();
37
+ contentWidth = triggerDimensions.width;
38
+ }
39
+ return {
40
+ contentWidth,
41
+ contentHeight,
42
+ };
43
+ };
44
+ const configureDismissInteraction = (triggerEl, triggerAction, popoverEl, parentPopoverEl) => {
45
+ let dismissCallbacks = [];
46
+ const root = getElementRoot(parentPopoverEl);
47
+ const parentContentEl = root.querySelector('.popover-content');
48
+ switch (triggerAction) {
49
+ case 'hover':
50
+ dismissCallbacks = [
51
+ {
52
+ /**
53
+ * Do not use mouseover here
54
+ * as this will causes the event to
55
+ * be dispatched on each underlying
56
+ * element rather than on the popover
57
+ * content as a whole.
58
+ */
59
+ eventName: 'mouseenter',
60
+ callback: (ev) => {
61
+ /**
62
+ * Do not dismiss the popover is we
63
+ * are hovering over its trigger.
64
+ * This would be easier if we used mouseover
65
+ * but this would cause the event to be dispatched
66
+ * more often than we would like, potentially
67
+ * causing performance issues.
68
+ */
69
+ const element = document.elementFromPoint(ev.clientX, ev.clientY);
70
+ if (element === triggerEl) {
71
+ return;
72
+ }
73
+ popoverEl.dismiss(undefined, undefined, false);
74
+ },
75
+ },
76
+ ];
77
+ break;
78
+ case 'context-menu':
79
+ case 'click':
80
+ default:
81
+ dismissCallbacks = [
82
+ {
83
+ eventName: 'click',
84
+ callback: (ev) => {
85
+ /**
86
+ * Do not dismiss the popover is we
87
+ * are hovering over its trigger.
88
+ */
89
+ const target = ev.target;
90
+ const closestTrigger = target.closest('[data-ion-popover-trigger]');
91
+ if (closestTrigger === triggerEl) {
92
+ /**
93
+ * stopPropagation here so if the
94
+ * popover has dismissOnSelect="true"
95
+ * the popover does not dismiss since
96
+ * we just clicked a trigger element.
97
+ */
98
+ ev.stopPropagation();
99
+ return;
100
+ }
101
+ popoverEl.dismiss(undefined, undefined, false);
102
+ },
103
+ },
104
+ ];
105
+ break;
106
+ }
107
+ dismissCallbacks.forEach(({ eventName, callback }) => parentContentEl.addEventListener(eventName, callback));
108
+ return () => {
109
+ dismissCallbacks.forEach(({ eventName, callback }) => parentContentEl.removeEventListener(eventName, callback));
110
+ };
111
+ };
112
+ /**
113
+ * Configures the triggerEl to respond
114
+ * to user interaction based upon the triggerAction
115
+ * prop that devs have defined.
116
+ */
117
+ const configureTriggerInteraction = (triggerEl, triggerAction, popoverEl) => {
118
+ let triggerCallbacks = [];
119
+ /**
120
+ * Based upon the kind of trigger interaction
121
+ * the user wants, we setup the correct event
122
+ * listeners.
123
+ */
124
+ switch (triggerAction) {
125
+ case 'hover':
126
+ let hoverTimeout;
127
+ triggerCallbacks = [
128
+ {
129
+ eventName: 'mouseenter',
130
+ callback: async (ev) => {
131
+ ev.stopPropagation();
132
+ if (hoverTimeout) {
133
+ clearTimeout(hoverTimeout);
134
+ }
135
+ /**
136
+ * Hovering over a trigger should not
137
+ * immediately open the next popover.
138
+ */
139
+ hoverTimeout = setTimeout(() => {
140
+ raf(() => {
141
+ popoverEl.presentFromTrigger(ev);
142
+ hoverTimeout = undefined;
143
+ });
144
+ }, 100);
145
+ },
146
+ },
147
+ {
148
+ eventName: 'mouseleave',
149
+ callback: (ev) => {
150
+ if (hoverTimeout) {
151
+ clearTimeout(hoverTimeout);
152
+ }
153
+ /**
154
+ * If mouse is over another popover
155
+ * that is not this popover then we should
156
+ * close this popover.
157
+ */
158
+ const target = ev.relatedTarget;
159
+ if (!target) {
160
+ return;
161
+ }
162
+ if (target.closest('ion-popover') !== popoverEl) {
163
+ popoverEl.dismiss(undefined, undefined, false);
164
+ }
165
+ },
166
+ },
167
+ {
168
+ /**
169
+ * stopPropagation here prevents the popover
170
+ * from dismissing when dismiss-on-select="true".
171
+ */
172
+ eventName: 'click',
173
+ callback: (ev) => ev.stopPropagation(),
174
+ },
175
+ {
176
+ eventName: 'ionPopoverActivateTrigger',
177
+ callback: (ev) => popoverEl.presentFromTrigger(ev, true),
178
+ },
179
+ ];
180
+ break;
181
+ case 'context-menu':
182
+ triggerCallbacks = [
183
+ {
184
+ eventName: 'contextmenu',
185
+ callback: (ev) => {
186
+ /**
187
+ * Prevents the platform context
188
+ * menu from appearing.
189
+ */
190
+ ev.preventDefault();
191
+ popoverEl.presentFromTrigger(ev);
192
+ },
193
+ },
194
+ {
195
+ eventName: 'click',
196
+ callback: (ev) => ev.stopPropagation(),
197
+ },
198
+ {
199
+ eventName: 'ionPopoverActivateTrigger',
200
+ callback: (ev) => popoverEl.presentFromTrigger(ev, true),
201
+ },
202
+ ];
203
+ break;
204
+ case 'click':
205
+ default:
206
+ triggerCallbacks = [
207
+ {
208
+ /**
209
+ * Do not do a stopPropagation() here
210
+ * because if you had two click triggers
211
+ * then clicking the first trigger and then
212
+ * clicking the second trigger would not cause
213
+ * the first popover to dismiss.
214
+ */
215
+ eventName: 'click',
216
+ callback: (ev) => popoverEl.presentFromTrigger(ev),
217
+ },
218
+ {
219
+ eventName: 'ionPopoverActivateTrigger',
220
+ callback: (ev) => popoverEl.presentFromTrigger(ev, true),
221
+ },
222
+ ];
223
+ break;
224
+ }
225
+ triggerCallbacks.forEach(({ eventName, callback }) => triggerEl.addEventListener(eventName, callback));
226
+ triggerEl.setAttribute('data-ion-popover-trigger', 'true');
227
+ return () => {
228
+ triggerCallbacks.forEach(({ eventName, callback }) => triggerEl.removeEventListener(eventName, callback));
229
+ triggerEl.removeAttribute('data-ion-popover-trigger');
230
+ };
231
+ };
232
+ /**
233
+ * Returns the index of an ion-item in an array of ion-items.
234
+ */
235
+ const getIndexOfItem = (items, item) => {
236
+ if (!item || item.tagName !== 'ION-ITEM') {
237
+ return -1;
238
+ }
239
+ return items.findIndex((el) => el === item);
240
+ };
241
+ /**
242
+ * Given an array of elements and a currently focused ion-item
243
+ * returns the next ion-item relative to the focused one or
244
+ * undefined.
245
+ */
246
+ const getNextItem = (items, currentItem) => {
247
+ const currentItemIndex = getIndexOfItem(items, currentItem);
248
+ return items[currentItemIndex + 1];
249
+ };
250
+ /**
251
+ * Given an array of elements and a currently focused ion-item
252
+ * returns the previous ion-item relative to the focused one or
253
+ * undefined.
254
+ */
255
+ const getPrevItem = (items, currentItem) => {
256
+ const currentItemIndex = getIndexOfItem(items, currentItem);
257
+ return items[currentItemIndex - 1];
258
+ };
259
+ /** Focus the internal button of the ion-item */
260
+ const focusItem = (item) => {
261
+ const root = getElementRoot(item);
262
+ const button = root.querySelector('button');
263
+ if (button) {
264
+ raf(() => button.focus());
265
+ }
266
+ };
267
+ /**
268
+ * Returns `true` if `el` has been designated
269
+ * as a trigger element for an ion-popover.
270
+ */
271
+ const isTriggerElement = (el) => el.hasAttribute('data-ion-popover-trigger');
272
+ const configureKeyboardInteraction = (popoverEl) => {
273
+ const callback = async (ev) => {
274
+ var _a;
275
+ const activeElement = document.activeElement;
276
+ let items = [];
277
+ const targetTagName = (_a = ev.target) === null || _a === void 0 ? void 0 : _a.tagName;
278
+ /**
279
+ * Only handle custom keyboard interactions for the host popover element
280
+ * and children ion-item elements.
281
+ */
282
+ if (targetTagName !== 'ION-POPOVER' && targetTagName !== 'ION-ITEM') {
283
+ return;
284
+ }
285
+ /**
286
+ * Complex selectors with :not() are :not supported
287
+ * in older versions of Chromium so we need to do a
288
+ * try/catch here so errors are not thrown.
289
+ */
290
+ try {
291
+ /**
292
+ * Select all ion-items that are not children of child popovers.
293
+ * i.e. only select ion-item elements that are part of this popover
294
+ */
295
+ items = Array.from(popoverEl.querySelectorAll('ion-item:not(ion-popover ion-popover *):not([disabled])'));
296
+ /* eslint-disable-next-line */
297
+ }
298
+ catch (_b) { }
299
+ switch (ev.key) {
300
+ /**
301
+ * If we are in a child popover
302
+ * then pressing the left arrow key
303
+ * should close this popover and move
304
+ * focus to the popover that presented
305
+ * this one.
306
+ */
307
+ case 'ArrowLeft':
308
+ const parentPopover = await popoverEl.getParentPopover();
309
+ if (parentPopover) {
310
+ popoverEl.dismiss(undefined, undefined, false);
311
+ }
312
+ break;
313
+ /**
314
+ * ArrowDown should move focus to the next focusable ion-item.
315
+ */
316
+ case 'ArrowDown':
317
+ // Disable movement/scroll with keyboard
318
+ ev.preventDefault();
319
+ const nextItem = getNextItem(items, activeElement);
320
+ if (nextItem !== undefined) {
321
+ focusItem(nextItem);
322
+ }
323
+ break;
324
+ /**
325
+ * ArrowUp should move focus to the previous focusable ion-item.
326
+ */
327
+ case 'ArrowUp':
328
+ // Disable movement/scroll with keyboard
329
+ ev.preventDefault();
330
+ const prevItem = getPrevItem(items, activeElement);
331
+ if (prevItem !== undefined) {
332
+ focusItem(prevItem);
333
+ }
334
+ break;
335
+ /**
336
+ * Home should move focus to the first focusable ion-item.
337
+ */
338
+ case 'Home':
339
+ ev.preventDefault();
340
+ const firstItem = items[0];
341
+ if (firstItem !== undefined) {
342
+ focusItem(firstItem);
343
+ }
344
+ break;
345
+ /**
346
+ * End should move focus to the last focusable ion-item.
347
+ */
348
+ case 'End':
349
+ ev.preventDefault();
350
+ const lastItem = items[items.length - 1];
351
+ if (lastItem !== undefined) {
352
+ focusItem(lastItem);
353
+ }
354
+ break;
355
+ /**
356
+ * ArrowRight, Spacebar, or Enter should activate
357
+ * the currently focused trigger item to open a
358
+ * popover if the element is a trigger item.
359
+ */
360
+ case 'ArrowRight':
361
+ case ' ':
362
+ case 'Enter':
363
+ if (activeElement && isTriggerElement(activeElement)) {
364
+ const rightEvent = new CustomEvent('ionPopoverActivateTrigger');
365
+ activeElement.dispatchEvent(rightEvent);
366
+ }
367
+ break;
368
+ }
369
+ };
370
+ popoverEl.addEventListener('keydown', callback);
371
+ return () => popoverEl.removeEventListener('keydown', callback);
372
+ };
373
+ /**
374
+ * Positions a popover by taking into account
375
+ * the reference point, preferred side, alignment
376
+ * and viewport dimensions.
377
+ */
378
+ const getPopoverPosition = (isRTL, contentWidth, contentHeight, arrowWidth, arrowHeight, reference, side, align, defaultPosition, triggerEl, event) => {
379
+ var _a;
380
+ let referenceCoordinates = {
381
+ top: 0,
382
+ left: 0,
383
+ width: 0,
384
+ height: 0,
385
+ };
386
+ /**
387
+ * Calculate position relative to the
388
+ * x-y coordinates in the event that
389
+ * was passed in
390
+ */
391
+ switch (reference) {
392
+ case 'event':
393
+ if (!event) {
394
+ return defaultPosition;
395
+ }
396
+ const mouseEv = event;
397
+ referenceCoordinates = {
398
+ top: mouseEv.clientY,
399
+ left: mouseEv.clientX,
400
+ width: 1,
401
+ height: 1,
402
+ };
403
+ break;
404
+ /**
405
+ * Calculate position relative to the bounding
406
+ * box on either the trigger element
407
+ * specified via the `trigger` prop or
408
+ * the target specified on the event
409
+ * that was passed in.
410
+ */
411
+ case 'trigger':
412
+ default:
413
+ const customEv = event;
414
+ /**
415
+ * ionShadowTarget is used when we need to align the
416
+ * popover with an element inside of the shadow root
417
+ * of an Ionic component. Ex: Presenting a popover
418
+ * by clicking on the collapsed indicator inside
419
+ * of `ion-breadcrumb` and centering it relative
420
+ * to the indicator rather than `ion-breadcrumb`
421
+ * as a whole.
422
+ */
423
+ const actualTriggerEl = (triggerEl ||
424
+ ((_a = customEv === null || customEv === void 0 ? void 0 : customEv.detail) === null || _a === void 0 ? void 0 : _a.ionShadowTarget) ||
425
+ (customEv === null || customEv === void 0 ? void 0 : customEv.target));
426
+ if (!actualTriggerEl) {
427
+ return defaultPosition;
428
+ }
429
+ const triggerBoundingBox = actualTriggerEl.getBoundingClientRect();
430
+ referenceCoordinates = {
431
+ top: triggerBoundingBox.top,
432
+ left: triggerBoundingBox.left,
433
+ width: triggerBoundingBox.width,
434
+ height: triggerBoundingBox.height,
435
+ };
436
+ break;
437
+ }
438
+ /**
439
+ * Get top/left offset that would allow
440
+ * popover to be positioned on the
441
+ * preferred side of the reference.
442
+ */
443
+ const coordinates = calculatePopoverSide(side, referenceCoordinates, contentWidth, contentHeight, arrowWidth, arrowHeight, isRTL);
444
+ /**
445
+ * Get the top/left adjustments that
446
+ * would allow the popover content
447
+ * to have the correct alignment.
448
+ */
449
+ const alignedCoordinates = calculatePopoverAlign(align, side, referenceCoordinates, contentWidth, contentHeight);
450
+ const top = coordinates.top + alignedCoordinates.top;
451
+ const left = coordinates.left + alignedCoordinates.left;
452
+ const { arrowTop, arrowLeft } = calculateArrowPosition(side, arrowWidth, arrowHeight, top, left, contentWidth, contentHeight, isRTL);
453
+ const { originX, originY } = calculatePopoverOrigin(side, align, isRTL);
454
+ return { top, left, referenceCoordinates, arrowTop, arrowLeft, originX, originY };
455
+ };
456
+ /**
457
+ * Determines the transform-origin
458
+ * of the popover animation so that it
459
+ * is in line with what the side and alignment
460
+ * prop values are. Currently only used
461
+ * with the MD animation.
462
+ */
463
+ const calculatePopoverOrigin = (side, align, isRTL) => {
464
+ switch (side) {
465
+ case 'top':
466
+ return { originX: getOriginXAlignment(align), originY: 'bottom' };
467
+ case 'bottom':
468
+ return { originX: getOriginXAlignment(align), originY: 'top' };
469
+ case 'left':
470
+ return { originX: 'right', originY: getOriginYAlignment(align) };
471
+ case 'right':
472
+ return { originX: 'left', originY: getOriginYAlignment(align) };
473
+ case 'start':
474
+ return { originX: isRTL ? 'left' : 'right', originY: getOriginYAlignment(align) };
475
+ case 'end':
476
+ return { originX: isRTL ? 'right' : 'left', originY: getOriginYAlignment(align) };
477
+ }
478
+ };
479
+ const getOriginXAlignment = (align) => {
480
+ switch (align) {
481
+ case 'start':
482
+ return 'left';
483
+ case 'center':
484
+ return 'center';
485
+ case 'end':
486
+ return 'right';
487
+ }
488
+ };
489
+ const getOriginYAlignment = (align) => {
490
+ switch (align) {
491
+ case 'start':
492
+ return 'top';
493
+ case 'center':
494
+ return 'center';
495
+ case 'end':
496
+ return 'bottom';
497
+ }
498
+ };
499
+ /**
500
+ * Calculates where the arrow positioning
501
+ * should be relative to the popover content.
502
+ */
503
+ const calculateArrowPosition = (side, arrowWidth, arrowHeight, top, left, contentWidth, contentHeight, isRTL) => {
504
+ /**
505
+ * Note: When side is left, right, start, or end, the arrow is
506
+ * been rotated using a `transform`, so to move the arrow up or down
507
+ * by its dimension, you need to use `arrowWidth`.
508
+ */
509
+ const leftPosition = {
510
+ arrowTop: top + contentHeight / 2 - arrowWidth / 2,
511
+ arrowLeft: left + contentWidth - arrowWidth / 2,
512
+ };
513
+ /**
514
+ * Move the arrow to the left by arrowWidth and then
515
+ * again by half of its width because we have rotated
516
+ * the arrow using a transform.
517
+ */
518
+ const rightPosition = { arrowTop: top + contentHeight / 2 - arrowWidth / 2, arrowLeft: left - arrowWidth * 1.5 };
519
+ switch (side) {
520
+ case 'top':
521
+ return { arrowTop: top + contentHeight, arrowLeft: left + contentWidth / 2 - arrowWidth / 2 };
522
+ case 'bottom':
523
+ return { arrowTop: top - arrowHeight, arrowLeft: left + contentWidth / 2 - arrowWidth / 2 };
524
+ case 'left':
525
+ return leftPosition;
526
+ case 'right':
527
+ return rightPosition;
528
+ case 'start':
529
+ return isRTL ? rightPosition : leftPosition;
530
+ case 'end':
531
+ return isRTL ? leftPosition : rightPosition;
532
+ default:
533
+ return { arrowTop: 0, arrowLeft: 0 };
534
+ }
535
+ };
536
+ /**
537
+ * Calculates the required top/left
538
+ * values needed to position the popover
539
+ * content on the side specified in the
540
+ * `side` prop.
541
+ */
542
+ const calculatePopoverSide = (side, triggerBoundingBox, contentWidth, contentHeight, arrowWidth, arrowHeight, isRTL) => {
543
+ const sideLeft = {
544
+ top: triggerBoundingBox.top,
545
+ left: triggerBoundingBox.left - contentWidth - arrowWidth,
546
+ };
547
+ const sideRight = {
548
+ top: triggerBoundingBox.top,
549
+ left: triggerBoundingBox.left + triggerBoundingBox.width + arrowWidth,
550
+ };
551
+ switch (side) {
552
+ case 'top':
553
+ return {
554
+ top: triggerBoundingBox.top - contentHeight - arrowHeight,
555
+ left: triggerBoundingBox.left,
556
+ };
557
+ case 'right':
558
+ return sideRight;
559
+ case 'bottom':
560
+ return {
561
+ top: triggerBoundingBox.top + triggerBoundingBox.height + arrowHeight,
562
+ left: triggerBoundingBox.left,
563
+ };
564
+ case 'left':
565
+ return sideLeft;
566
+ case 'start':
567
+ return isRTL ? sideRight : sideLeft;
568
+ case 'end':
569
+ return isRTL ? sideLeft : sideRight;
570
+ }
571
+ };
572
+ /**
573
+ * Calculates the required top/left
574
+ * offset values needed to provide the
575
+ * correct alignment regardless while taking
576
+ * into account the side the popover is on.
577
+ */
578
+ const calculatePopoverAlign = (align, side, triggerBoundingBox, contentWidth, contentHeight) => {
579
+ switch (align) {
580
+ case 'center':
581
+ return calculatePopoverCenterAlign(side, triggerBoundingBox, contentWidth, contentHeight);
582
+ case 'end':
583
+ return calculatePopoverEndAlign(side, triggerBoundingBox, contentWidth, contentHeight);
584
+ case 'start':
585
+ default:
586
+ return { top: 0, left: 0 };
587
+ }
588
+ };
589
+ /**
590
+ * Calculate the end alignment for
591
+ * the popover. If side is on the x-axis
592
+ * then the align values refer to the top
593
+ * and bottom margins of the content.
594
+ * If side is on the y-axis then the
595
+ * align values refer to the left and right
596
+ * margins of the content.
597
+ */
598
+ const calculatePopoverEndAlign = (side, triggerBoundingBox, contentWidth, contentHeight) => {
599
+ switch (side) {
600
+ case 'start':
601
+ case 'end':
602
+ case 'left':
603
+ case 'right':
604
+ return {
605
+ top: -(contentHeight - triggerBoundingBox.height),
606
+ left: 0,
607
+ };
608
+ case 'top':
609
+ case 'bottom':
610
+ default:
611
+ return {
612
+ top: 0,
613
+ left: -(contentWidth - triggerBoundingBox.width),
614
+ };
615
+ }
616
+ };
617
+ /**
618
+ * Calculate the center alignment for
619
+ * the popover. If side is on the x-axis
620
+ * then the align values refer to the top
621
+ * and bottom margins of the content.
622
+ * If side is on the y-axis then the
623
+ * align values refer to the left and right
624
+ * margins of the content.
625
+ */
626
+ const calculatePopoverCenterAlign = (side, triggerBoundingBox, contentWidth, contentHeight) => {
627
+ switch (side) {
628
+ case 'start':
629
+ case 'end':
630
+ case 'left':
631
+ case 'right':
632
+ return {
633
+ top: -(contentHeight / 2 - triggerBoundingBox.height / 2),
634
+ left: 0,
635
+ };
636
+ case 'top':
637
+ case 'bottom':
638
+ default:
639
+ return {
640
+ top: 0,
641
+ left: -(contentWidth / 2 - triggerBoundingBox.width / 2),
642
+ };
643
+ }
644
+ };
645
+ /**
646
+ * Adjusts popover positioning coordinates
647
+ * such that popover does not appear offscreen
648
+ * or overlapping safe area bounds.
649
+ */
650
+ const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding, bodyWidth, bodyHeight, contentWidth, contentHeight, safeAreaMargin, contentOriginX, contentOriginY, triggerCoordinates, coordArrowTop = 0, coordArrowLeft = 0, arrowHeight = 0) => {
651
+ let arrowTop = coordArrowTop;
652
+ const arrowLeft = coordArrowLeft;
653
+ let left = coordLeft;
654
+ let top = coordTop;
655
+ let bottom;
656
+ let originX = contentOriginX;
657
+ let originY = contentOriginY;
658
+ let checkSafeAreaLeft = false;
659
+ let checkSafeAreaRight = false;
660
+ const triggerTop = triggerCoordinates
661
+ ? triggerCoordinates.top + triggerCoordinates.height
662
+ : bodyHeight / 2 - contentHeight / 2;
663
+ const triggerHeight = triggerCoordinates ? triggerCoordinates.height : 0;
664
+ let addPopoverBottomClass = false;
665
+ /**
666
+ * Adjust popover so it does not
667
+ * go off the left of the screen.
668
+ */
669
+ if (left < bodyPadding + safeAreaMargin) {
670
+ left = bodyPadding;
671
+ checkSafeAreaLeft = true;
672
+ originX = 'left';
673
+ /**
674
+ * Adjust popover so it does not
675
+ * go off the right of the screen.
676
+ */
677
+ }
678
+ else if (contentWidth + bodyPadding + left + safeAreaMargin > bodyWidth) {
679
+ checkSafeAreaRight = true;
680
+ left = bodyWidth - contentWidth - bodyPadding;
681
+ originX = 'right';
682
+ }
683
+ /**
684
+ * Adjust popover so it does not
685
+ * go off the top of the screen.
686
+ * If popover is on the left or the right of
687
+ * the trigger, then we should not adjust top
688
+ * margins.
689
+ */
690
+ if (triggerTop + triggerHeight + contentHeight > bodyHeight && (side === 'top' || side === 'bottom')) {
691
+ if (triggerTop - contentHeight > 0) {
692
+ /**
693
+ * While we strive to align the popover with the trigger
694
+ * on smaller screens this is not always possible. As a result,
695
+ * we adjust the popover up so that it does not hang
696
+ * off the bottom of the screen. However, we do not want to move
697
+ * the popover up so much that it goes off the top of the screen.
698
+ *
699
+ * We chose 12 here so that the popover position looks a bit nicer as
700
+ * it is not right up against the edge of the screen.
701
+ */
702
+ top = Math.max(12, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
703
+ arrowTop = top + contentHeight;
704
+ originY = 'bottom';
705
+ addPopoverBottomClass = true;
706
+ /**
707
+ * If not enough room for popover to appear
708
+ * above trigger, then cut it off.
709
+ */
710
+ }
711
+ else {
712
+ bottom = bodyPadding;
713
+ }
714
+ }
715
+ return {
716
+ top,
717
+ left,
718
+ bottom,
719
+ originX,
720
+ originY,
721
+ checkSafeAreaLeft,
722
+ checkSafeAreaRight,
723
+ arrowTop,
724
+ arrowLeft,
725
+ addPopoverBottomClass,
726
+ };
727
+ };
728
+ const shouldShowArrow = (side, didAdjustBounds = false, ev, trigger) => {
729
+ /**
730
+ * If no event provided and
731
+ * we do not have a trigger,
732
+ * then this popover was likely
733
+ * presented via the popoverController
734
+ * or users called `present` manually.
735
+ * In this case, the arrow should not be
736
+ * shown as we do not have a reference.
737
+ */
738
+ if (!ev && !trigger) {
739
+ return false;
740
+ }
741
+ /**
742
+ * If popover is on the left or the right
743
+ * of a trigger, but we needed to adjust the
744
+ * popover due to screen bounds, then we should
745
+ * hide the arrow as it will never be pointing
746
+ * at the trigger.
747
+ */
748
+ if (side !== 'top' && side !== 'bottom' && didAdjustBounds) {
749
+ return false;
750
+ }
751
+ return true;
752
+ };
753
+
754
+ /*!
755
+ * (C) Ionic http://ionicframework.com - MIT License
756
+ */
757
+ const POPOVER_IOS_BODY_PADDING = 5;
758
+ /**
759
+ * iOS Popover Enter Animation
760
+ */
761
+ const iosEnterAnimation = (baseEl, opts) => {
762
+ var _a;
763
+ const { event: ev, size, trigger, reference, side, align } = opts;
764
+ const doc = baseEl.ownerDocument;
765
+ const isRTL = doc.dir === 'rtl';
766
+ const bodyWidth = doc.defaultView.innerWidth;
767
+ const bodyHeight = doc.defaultView.innerHeight;
768
+ const root = getElementRoot(baseEl);
769
+ const contentEl = root.querySelector('.popover-content');
770
+ const arrowEl = root.querySelector('.popover-arrow');
771
+ const referenceSizeEl = trigger || ((_a = ev === null || ev === void 0 ? void 0 : ev.detail) === null || _a === void 0 ? void 0 : _a.ionShadowTarget) || (ev === null || ev === void 0 ? void 0 : ev.target);
772
+ const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, referenceSizeEl);
773
+ const { arrowWidth, arrowHeight } = getArrowDimensions(arrowEl);
774
+ const defaultPosition = {
775
+ top: bodyHeight / 2 - contentHeight / 2,
776
+ left: bodyWidth / 2 - contentWidth / 2,
777
+ originX: isRTL ? 'right' : 'left',
778
+ originY: 'top',
779
+ };
780
+ const results = getPopoverPosition(isRTL, contentWidth, contentHeight, arrowWidth, arrowHeight, reference, side, align, defaultPosition, trigger, ev);
781
+ const padding = size === 'cover' ? 0 : POPOVER_IOS_BODY_PADDING;
782
+ const margin = size === 'cover' ? 0 : 25;
783
+ const { originX, originY, top, left, bottom, checkSafeAreaLeft, checkSafeAreaRight, arrowTop, arrowLeft, addPopoverBottomClass, } = calculateWindowAdjustment(side, results.top, results.left, padding, bodyWidth, bodyHeight, contentWidth, contentHeight, margin, results.originX, results.originY, results.referenceCoordinates, results.arrowTop, results.arrowLeft, arrowHeight);
784
+ const baseAnimation = createAnimation();
785
+ const backdropAnimation = createAnimation();
786
+ const wrapperAnimation = createAnimation();
787
+ backdropAnimation
788
+ .addElement(root.querySelector('ion-backdrop'))
789
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
790
+ .beforeStyles({
791
+ 'pointer-events': 'none',
792
+ })
793
+ .afterClearStyles(['pointer-events']);
794
+ wrapperAnimation.addElement(root.querySelector('.popover-wrapper')).fromTo('opacity', 0.01, 1);
795
+ return baseAnimation
796
+ .easing('ease')
797
+ .duration(100)
798
+ .beforeAddWrite(() => {
799
+ if (size === 'cover') {
800
+ baseEl.style.setProperty('--width', `${contentWidth}px`);
801
+ }
802
+ if (addPopoverBottomClass) {
803
+ baseEl.classList.add('popover-bottom');
804
+ }
805
+ if (bottom !== undefined) {
806
+ contentEl.style.setProperty('bottom', `${bottom}px`);
807
+ }
808
+ const safeAreaLeft = ' + var(--ion-safe-area-left, 0)';
809
+ const safeAreaRight = ' - var(--ion-safe-area-right, 0)';
810
+ let leftValue = `${left}px`;
811
+ if (checkSafeAreaLeft) {
812
+ leftValue = `${left}px${safeAreaLeft}`;
813
+ }
814
+ if (checkSafeAreaRight) {
815
+ leftValue = `${left}px${safeAreaRight}`;
816
+ }
817
+ contentEl.style.setProperty('top', `calc(${top}px + var(--offset-y, 0))`);
818
+ contentEl.style.setProperty('left', `calc(${leftValue} + var(--offset-x, 0))`);
819
+ contentEl.style.setProperty('transform-origin', `${originY} ${originX}`);
820
+ if (arrowEl !== null) {
821
+ const didAdjustBounds = results.top !== top || results.left !== left;
822
+ const showArrow = shouldShowArrow(side, didAdjustBounds, ev, trigger);
823
+ if (showArrow) {
824
+ arrowEl.style.setProperty('top', `calc(${arrowTop}px + var(--offset-y, 0))`);
825
+ arrowEl.style.setProperty('left', `calc(${arrowLeft}px + var(--offset-x, 0))`);
826
+ }
827
+ else {
828
+ arrowEl.style.setProperty('display', 'none');
829
+ }
830
+ }
831
+ })
832
+ .addAnimation([backdropAnimation, wrapperAnimation]);
833
+ };
834
+
835
+ /*!
836
+ * (C) Ionic http://ionicframework.com - MIT License
837
+ */
838
+ /**
839
+ * iOS Popover Leave Animation
840
+ */
841
+ const iosLeaveAnimation = (baseEl) => {
842
+ const root = getElementRoot(baseEl);
843
+ const contentEl = root.querySelector('.popover-content');
844
+ const arrowEl = root.querySelector('.popover-arrow');
845
+ const baseAnimation = createAnimation();
846
+ const backdropAnimation = createAnimation();
847
+ const wrapperAnimation = createAnimation();
848
+ backdropAnimation.addElement(root.querySelector('ion-backdrop')).fromTo('opacity', 'var(--backdrop-opacity)', 0);
849
+ wrapperAnimation.addElement(root.querySelector('.popover-wrapper')).fromTo('opacity', 0.99, 0);
850
+ return baseAnimation
851
+ .easing('ease')
852
+ .afterAddWrite(() => {
853
+ baseEl.style.removeProperty('--width');
854
+ baseEl.classList.remove('popover-bottom');
855
+ contentEl.style.removeProperty('top');
856
+ contentEl.style.removeProperty('left');
857
+ contentEl.style.removeProperty('bottom');
858
+ contentEl.style.removeProperty('transform-origin');
859
+ if (arrowEl) {
860
+ arrowEl.style.removeProperty('top');
861
+ arrowEl.style.removeProperty('left');
862
+ arrowEl.style.removeProperty('display');
863
+ }
864
+ })
865
+ .duration(300)
866
+ .addAnimation([backdropAnimation, wrapperAnimation]);
867
+ };
868
+
869
+ /*!
870
+ * (C) Ionic http://ionicframework.com - MIT License
871
+ */
872
+ const POPOVER_MD_BODY_PADDING = 12;
873
+ /**
874
+ * Md Popover Enter Animation
875
+ */
876
+ const mdEnterAnimation = (baseEl, opts) => {
877
+ var _a;
878
+ const { event: ev, size, trigger, reference, side, align } = opts;
879
+ const doc = baseEl.ownerDocument;
880
+ const isRTL = doc.dir === 'rtl';
881
+ const bodyWidth = doc.defaultView.innerWidth;
882
+ const bodyHeight = doc.defaultView.innerHeight;
883
+ const root = getElementRoot(baseEl);
884
+ const contentEl = root.querySelector('.popover-content');
885
+ const referenceSizeEl = trigger || ((_a = ev === null || ev === void 0 ? void 0 : ev.detail) === null || _a === void 0 ? void 0 : _a.ionShadowTarget) || (ev === null || ev === void 0 ? void 0 : ev.target);
886
+ const { contentWidth, contentHeight } = getPopoverDimensions(size, contentEl, referenceSizeEl);
887
+ const defaultPosition = {
888
+ top: bodyHeight / 2 - contentHeight / 2,
889
+ left: bodyWidth / 2 - contentWidth / 2,
890
+ originX: isRTL ? 'right' : 'left',
891
+ originY: 'top',
892
+ };
893
+ const results = getPopoverPosition(isRTL, contentWidth, contentHeight, 0, 0, reference, side, align, defaultPosition, trigger, ev);
894
+ const padding = size === 'cover' ? 0 : POPOVER_MD_BODY_PADDING;
895
+ const { originX, originY, top, left, bottom } = calculateWindowAdjustment(side, results.top, results.left, padding, bodyWidth, bodyHeight, contentWidth, contentHeight, 0, results.originX, results.originY, results.referenceCoordinates);
896
+ const baseAnimation = createAnimation();
897
+ const backdropAnimation = createAnimation();
898
+ const wrapperAnimation = createAnimation();
899
+ const contentAnimation = createAnimation();
900
+ const viewportAnimation = createAnimation();
901
+ backdropAnimation
902
+ .addElement(root.querySelector('ion-backdrop'))
903
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
904
+ .beforeStyles({
905
+ 'pointer-events': 'none',
906
+ })
907
+ .afterClearStyles(['pointer-events']);
908
+ wrapperAnimation.addElement(root.querySelector('.popover-wrapper')).duration(150).fromTo('opacity', 0.01, 1);
909
+ contentAnimation
910
+ .addElement(contentEl)
911
+ .beforeStyles({
912
+ top: `calc(${top}px + var(--offset-y, 0px))`,
913
+ left: `calc(${left}px + var(--offset-x, 0px))`,
914
+ 'transform-origin': `${originY} ${originX}`,
915
+ })
916
+ .beforeAddWrite(() => {
917
+ if (bottom !== undefined) {
918
+ contentEl.style.setProperty('bottom', `${bottom}px`);
919
+ }
920
+ })
921
+ .fromTo('transform', 'scale(0.8)', 'scale(1)');
922
+ viewportAnimation.addElement(root.querySelector('.popover-viewport')).fromTo('opacity', 0.01, 1);
923
+ return baseAnimation
924
+ .easing('cubic-bezier(0.36,0.66,0.04,1)')
925
+ .duration(300)
926
+ .beforeAddWrite(() => {
927
+ if (size === 'cover') {
928
+ baseEl.style.setProperty('--width', `${contentWidth}px`);
929
+ }
930
+ if (originY === 'bottom') {
931
+ baseEl.classList.add('popover-bottom');
932
+ }
933
+ })
934
+ .addAnimation([backdropAnimation, wrapperAnimation, contentAnimation, viewportAnimation]);
935
+ };
936
+
937
+ /*!
938
+ * (C) Ionic http://ionicframework.com - MIT License
939
+ */
940
+ /**
941
+ * Md Popover Leave Animation
942
+ */
943
+ const mdLeaveAnimation = (baseEl) => {
944
+ const root = getElementRoot(baseEl);
945
+ const contentEl = root.querySelector('.popover-content');
946
+ const baseAnimation = createAnimation();
947
+ const backdropAnimation = createAnimation();
948
+ const wrapperAnimation = createAnimation();
949
+ backdropAnimation.addElement(root.querySelector('ion-backdrop')).fromTo('opacity', 'var(--backdrop-opacity)', 0);
950
+ wrapperAnimation.addElement(root.querySelector('.popover-wrapper')).fromTo('opacity', 0.99, 0);
951
+ return baseAnimation
952
+ .easing('ease')
953
+ .afterAddWrite(() => {
954
+ baseEl.style.removeProperty('--width');
955
+ baseEl.classList.remove('popover-bottom');
956
+ contentEl.style.removeProperty('top');
957
+ contentEl.style.removeProperty('left');
958
+ contentEl.style.removeProperty('bottom');
959
+ contentEl.style.removeProperty('transform-origin');
960
+ })
961
+ .duration(150)
962
+ .addAnimation([backdropAnimation, wrapperAnimation]);
963
+ };
964
+
965
+ const popoverIosCss = ":host{--background:var(--ion-background-color, #fff);--min-width:0;--min-height:0;--max-width:auto;--height:auto;--offset-x:0px;--offset-y:0px;left:0;right:0;top:0;bottom:0;display:flex;position:fixed;align-items:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);z-index:1001}:host(.popover-nested){pointer-events:none}:host(.popover-nested) .popover-wrapper{pointer-events:auto}:host(.overlay-hidden){display:none}.popover-wrapper{opacity:0;z-index:10}.popover-content{display:flex;position:absolute;flex-direction:column;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);box-shadow:var(--box-shadow);overflow:auto;z-index:10}.popover-viewport{--ion-safe-area-top:0px;--ion-safe-area-right:0px;--ion-safe-area-bottom:0px;--ion-safe-area-left:0px;display:flex;flex-direction:column;overflow:hidden}:host(.popover-nested.popover-side-left){--offset-x:5px}:host(.popover-nested.popover-side-right){--offset-x:-5px}:host(.popover-nested.popover-side-start){--offset-x:5px}:host-context([dir=rtl]):host(.popover-nested.popover-side-start),:host-context([dir=rtl]).popover-nested.popover-side-start{--offset-x:-5px}:host(.popover-nested.popover-side-end){--offset-x:-5px}:host-context([dir=rtl]):host(.popover-nested.popover-side-end),:host-context([dir=rtl]).popover-nested.popover-side-end{--offset-x:5px}:host{--width:200px;--max-height:90%;--box-shadow:none;--backdrop-opacity:var(--ion-backdrop-opacity, 0.08)}:host(.popover-desktop){--box-shadow:0px 4px 16px 0px rgba(0, 0, 0, 0.12)}.popover-content{border-radius:10px}:host(.popover-desktop) .popover-content{border:0.5px solid var(--ion-color-step-100, #e6e6e6)}.popover-arrow{display:block;position:absolute;width:20px;height:10px;overflow:hidden}.popover-arrow::after{left:3px;top:3px;border-radius:3px;position:absolute;width:14px;height:14px;transform:rotate(45deg);background:var(--background);content:\"\";z-index:10}[dir=rtl] .popover-arrow::after,:host-context([dir=rtl]) .popover-arrow::after{left:unset;right:unset;right:3px}:host(.popover-bottom) .popover-arrow{top:auto;bottom:-10px}:host(.popover-bottom) .popover-arrow::after{top:-6px}:host(.popover-side-left) .popover-arrow{transform:rotate(90deg)}:host(.popover-side-right) .popover-arrow{transform:rotate(-90deg)}:host(.popover-side-top) .popover-arrow{transform:rotate(180deg)}:host(.popover-side-start) .popover-arrow{transform:rotate(90deg)}:host-context([dir=rtl]):host(.popover-side-start) .popover-arrow,:host-context([dir=rtl]).popover-side-start .popover-arrow{transform:rotate(-90deg)}:host(.popover-side-end) .popover-arrow{transform:rotate(-90deg)}:host-context([dir=rtl]):host(.popover-side-end) .popover-arrow,:host-context([dir=rtl]).popover-side-end .popover-arrow{transform:rotate(90deg)}@supports (backdrop-filter: blur(0)){:host(.popover-translucent) .popover-content,:host(.popover-translucent) .popover-arrow::after{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);backdrop-filter:saturate(180%) blur(20px)}}";
966
+
967
+ const popoverMdCss = ":host{--background:var(--ion-background-color, #fff);--min-width:0;--min-height:0;--max-width:auto;--height:auto;--offset-x:0px;--offset-y:0px;left:0;right:0;top:0;bottom:0;display:flex;position:fixed;align-items:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);z-index:1001}:host(.popover-nested){pointer-events:none}:host(.popover-nested) .popover-wrapper{pointer-events:auto}:host(.overlay-hidden){display:none}.popover-wrapper{opacity:0;z-index:10}.popover-content{display:flex;position:absolute;flex-direction:column;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);box-shadow:var(--box-shadow);overflow:auto;z-index:10}.popover-viewport{--ion-safe-area-top:0px;--ion-safe-area-right:0px;--ion-safe-area-bottom:0px;--ion-safe-area-left:0px;display:flex;flex-direction:column;overflow:hidden}:host(.popover-nested.popover-side-left){--offset-x:5px}:host(.popover-nested.popover-side-right){--offset-x:-5px}:host(.popover-nested.popover-side-start){--offset-x:5px}:host-context([dir=rtl]):host(.popover-nested.popover-side-start),:host-context([dir=rtl]).popover-nested.popover-side-start{--offset-x:-5px}:host(.popover-nested.popover-side-end){--offset-x:-5px}:host-context([dir=rtl]):host(.popover-nested.popover-side-end),:host-context([dir=rtl]).popover-nested.popover-side-end{--offset-x:5px}:host{--width:250px;--max-height:90%;--box-shadow:0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12);--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}.popover-content{border-radius:4px;transform-origin:left top}[dir=rtl] .popover-content,:host-context([dir=rtl]) .popover-content{transform-origin:right top}.popover-viewport{transition-delay:100ms}";
968
+
969
+ const Popover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
970
+ constructor() {
971
+ super();
972
+ this.__registerHost();
973
+ this.__attachShadow();
974
+ this.didPresent = createEvent(this, "ionPopoverDidPresent", 7);
975
+ this.willPresent = createEvent(this, "ionPopoverWillPresent", 7);
976
+ this.willDismiss = createEvent(this, "ionPopoverWillDismiss", 7);
977
+ this.didDismiss = createEvent(this, "ionPopoverDidDismiss", 7);
978
+ this.didPresentShorthand = createEvent(this, "didPresent", 7);
979
+ this.willPresentShorthand = createEvent(this, "willPresent", 7);
980
+ this.willDismissShorthand = createEvent(this, "willDismiss", 7);
981
+ this.didDismissShorthand = createEvent(this, "didDismiss", 7);
982
+ this.ionMount = createEvent(this, "ionMount", 7);
983
+ this.parentPopover = null;
984
+ this.popoverIndex = popoverIds++;
985
+ this.coreDelegate = CoreDelegate();
986
+ this.inline = false;
987
+ this.focusDescendantOnPresent = false;
988
+ this.presented = false;
989
+ /** @internal */
990
+ this.hasController = false;
991
+ /**
992
+ * If `true`, the keyboard will be automatically dismissed when the overlay is presented.
993
+ */
994
+ this.keyboardClose = true;
995
+ /**
996
+ * If `true`, the popover will be dismissed when the backdrop is clicked.
997
+ */
998
+ this.backdropDismiss = true;
999
+ /**
1000
+ * If `true`, a backdrop will be displayed behind the popover.
1001
+ * This property controls whether or not the backdrop
1002
+ * darkens the screen when the popover is presented.
1003
+ * It does not control whether or not the backdrop
1004
+ * is active or present in the DOM.
1005
+ */
1006
+ this.showBackdrop = true;
1007
+ /**
1008
+ * If `true`, the popover will be translucent.
1009
+ * Only applies when the mode is `"ios"` and the device supports
1010
+ * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
1011
+ */
1012
+ this.translucent = false;
1013
+ /**
1014
+ * If `true`, the popover will animate.
1015
+ */
1016
+ this.animated = true;
1017
+ /**
1018
+ * Describes what kind of interaction with the trigger that
1019
+ * should cause the popover to open. Does not apply when the `trigger`
1020
+ * property is `undefined`.
1021
+ * If `'click'`, the popover will be presented when the trigger is left clicked.
1022
+ * If `'hover'`, the popover will be presented when a pointer hovers over the trigger.
1023
+ * If `'context-menu'`, the popover will be presented when the trigger is right
1024
+ * clicked on desktop and long pressed on mobile. This will also prevent your
1025
+ * device's normal context menu from appearing.
1026
+ */
1027
+ this.triggerAction = 'click';
1028
+ /**
1029
+ * Describes how to calculate the popover width.
1030
+ * If `'cover'`, the popover width will match the width of the trigger.
1031
+ * If `'auto'`, the popover width will be determined by the content in
1032
+ * the popover.
1033
+ */
1034
+ this.size = 'auto';
1035
+ /**
1036
+ * If `true`, the popover will be automatically
1037
+ * dismissed when the content has been clicked.
1038
+ */
1039
+ this.dismissOnSelect = false;
1040
+ /**
1041
+ * Describes what to position the popover relative to.
1042
+ * If `'trigger'`, the popover will be positioned relative
1043
+ * to the trigger button. If passing in an event, this is
1044
+ * determined via event.target.
1045
+ * If `'event'`, the popover will be positioned relative
1046
+ * to the x/y coordinates of the trigger action. If passing
1047
+ * in an event, this is determined via event.clientX and event.clientY.
1048
+ */
1049
+ this.reference = 'trigger';
1050
+ /**
1051
+ * Describes which side of the `reference` point to position
1052
+ * the popover on. The `'start'` and `'end'` values are RTL-aware,
1053
+ * and the `'left'` and `'right'` values are not.
1054
+ */
1055
+ this.side = 'bottom';
1056
+ /**
1057
+ * If `true`, the popover will display an arrow that points at the
1058
+ * `reference` when running in `ios` mode. Does not apply in `md` mode.
1059
+ */
1060
+ this.arrow = true;
1061
+ /**
1062
+ * If `true`, the popover will open. If `false`, the popover will close.
1063
+ * Use this if you need finer grained control over presentation, otherwise
1064
+ * just use the popoverController or the `trigger` property.
1065
+ * Note: `isOpen` will not automatically be set back to `false` when
1066
+ * the popover dismisses. You will need to do that in your code.
1067
+ */
1068
+ this.isOpen = false;
1069
+ /**
1070
+ * @internal
1071
+ *
1072
+ * If `true` the popover will not register its own keyboard event handlers.
1073
+ * This allows the contents of the popover to handle their own keyboard interactions.
1074
+ *
1075
+ * If `false`, the popover will register its own keyboard event handlers for
1076
+ * navigating `ion-list` items within a popover (up/down/home/end/etc.).
1077
+ * This will also cancel browser keyboard event bindings to prevent scroll
1078
+ * behavior in a popover using a list of items.
1079
+ */
1080
+ this.keyboardEvents = false;
1081
+ /**
1082
+ * If `true`, the component passed into `ion-popover` will
1083
+ * automatically be mounted when the popover is created. The
1084
+ * component will remain mounted even when the popover is dismissed.
1085
+ * However, the component will be destroyed when the popover is
1086
+ * destroyed. This property is not reactive and should only be
1087
+ * used when initially creating a popover.
1088
+ *
1089
+ * Note: This feature only applies to inline popovers in JavaScript
1090
+ * frameworks such as Angular, React, and Vue.
1091
+ */
1092
+ this.keepContentsMounted = false;
1093
+ this.onBackdropTap = () => {
1094
+ this.dismiss(undefined, BACKDROP);
1095
+ };
1096
+ this.onLifecycle = (modalEvent) => {
1097
+ const el = this.usersElement;
1098
+ const name = LIFECYCLE_MAP[modalEvent.type];
1099
+ if (el && name) {
1100
+ const event = new CustomEvent(name, {
1101
+ bubbles: false,
1102
+ cancelable: false,
1103
+ detail: modalEvent.detail,
1104
+ });
1105
+ el.dispatchEvent(event);
1106
+ }
1107
+ };
1108
+ this.configureTriggerInteraction = () => {
1109
+ const { trigger, triggerAction, el, destroyTriggerInteraction } = this;
1110
+ if (destroyTriggerInteraction) {
1111
+ destroyTriggerInteraction();
1112
+ }
1113
+ const triggerEl = (this.triggerEl = trigger !== undefined ? document.getElementById(trigger) : null);
1114
+ if (!triggerEl) {
1115
+ return;
1116
+ }
1117
+ this.destroyTriggerInteraction = configureTriggerInteraction(triggerEl, triggerAction, el);
1118
+ };
1119
+ this.configureKeyboardInteraction = () => {
1120
+ const { destroyKeyboardInteraction, el } = this;
1121
+ if (destroyKeyboardInteraction) {
1122
+ destroyKeyboardInteraction();
1123
+ }
1124
+ this.destroyKeyboardInteraction = configureKeyboardInteraction(el);
1125
+ };
1126
+ this.configureDismissInteraction = () => {
1127
+ const { destroyDismissInteraction, parentPopover, triggerAction, triggerEl, el } = this;
1128
+ if (!parentPopover || !triggerEl) {
1129
+ return;
1130
+ }
1131
+ if (destroyDismissInteraction) {
1132
+ destroyDismissInteraction();
1133
+ }
1134
+ this.destroyDismissInteraction = configureDismissInteraction(triggerEl, triggerAction, el, parentPopover);
1135
+ };
1136
+ }
1137
+ onTriggerChange() {
1138
+ this.configureTriggerInteraction();
1139
+ }
1140
+ onIsOpenChange(newValue, oldValue) {
1141
+ if (newValue === true && oldValue === false) {
1142
+ this.present();
1143
+ }
1144
+ else if (newValue === false && oldValue === true) {
1145
+ this.dismiss();
1146
+ }
1147
+ }
1148
+ connectedCallback() {
1149
+ const { configureTriggerInteraction, el } = this;
1150
+ prepareOverlay(el);
1151
+ configureTriggerInteraction();
1152
+ }
1153
+ disconnectedCallback() {
1154
+ const { destroyTriggerInteraction } = this;
1155
+ if (destroyTriggerInteraction) {
1156
+ destroyTriggerInteraction();
1157
+ }
1158
+ }
1159
+ componentWillLoad() {
1160
+ /**
1161
+ * If user has custom ID set then we should
1162
+ * not assign the default incrementing ID.
1163
+ */
1164
+ this.popoverId = this.el.hasAttribute('id') ? this.el.getAttribute('id') : `ion-popover-${this.popoverIndex}`;
1165
+ this.parentPopover = this.el.closest(`ion-popover:not(#${this.popoverId})`);
1166
+ if (this.alignment === undefined) {
1167
+ this.alignment = getIonMode(this) === 'ios' ? 'center' : 'start';
1168
+ }
1169
+ }
1170
+ componentDidLoad() {
1171
+ const { parentPopover, isOpen } = this;
1172
+ /**
1173
+ * If popover was rendered with isOpen="true"
1174
+ * then we should open popover immediately.
1175
+ */
1176
+ if (isOpen === true) {
1177
+ raf(() => this.present());
1178
+ }
1179
+ if (parentPopover) {
1180
+ addEventListener(parentPopover, 'ionPopoverWillDismiss', () => {
1181
+ this.dismiss(undefined, undefined, false);
1182
+ });
1183
+ }
1184
+ }
1185
+ /**
1186
+ * When opening a popover from a trigger, we should not be
1187
+ * modifying the `event` prop from inside the component.
1188
+ * Additionally, when pressing the "Right" arrow key, we need
1189
+ * to shift focus to the first descendant in the newly presented
1190
+ * popover.
1191
+ *
1192
+ * @internal
1193
+ */
1194
+ async presentFromTrigger(event, focusDescendant = false) {
1195
+ this.focusDescendantOnPresent = focusDescendant;
1196
+ await this.present(event);
1197
+ this.focusDescendantOnPresent = false;
1198
+ }
1199
+ /**
1200
+ * Determines whether or not an overlay
1201
+ * is being used inline or via a controller/JS
1202
+ * and returns the correct delegate.
1203
+ * By default, subsequent calls to getDelegate
1204
+ * will use a cached version of the delegate.
1205
+ * This is useful for calling dismiss after
1206
+ * present so that the correct delegate is given.
1207
+ */
1208
+ getDelegate(force = false) {
1209
+ if (this.workingDelegate && !force) {
1210
+ return {
1211
+ delegate: this.workingDelegate,
1212
+ inline: this.inline,
1213
+ };
1214
+ }
1215
+ /**
1216
+ * If using overlay inline
1217
+ * we potentially need to use the coreDelegate
1218
+ * so that this works in vanilla JS apps.
1219
+ * If a developer has presented this component
1220
+ * via a controller, then we can assume
1221
+ * the component is already in the
1222
+ * correct place.
1223
+ */
1224
+ const parentEl = this.el.parentNode;
1225
+ const inline = (this.inline = parentEl !== null && !this.hasController);
1226
+ const delegate = (this.workingDelegate = inline ? this.delegate || this.coreDelegate : this.delegate);
1227
+ return { inline, delegate };
1228
+ }
1229
+ /**
1230
+ * Present the popover overlay after it has been created.
1231
+ * Developers can pass a mouse, touch, or pointer event
1232
+ * to position the popover relative to where that event
1233
+ * was dispatched.
1234
+ */
1235
+ async present(event) {
1236
+ if (this.presented) {
1237
+ return;
1238
+ }
1239
+ /**
1240
+ * When using an inline popover
1241
+ * and dismissing a popover it is possible to
1242
+ * quickly present the popover while it is
1243
+ * dismissing. We need to await any current
1244
+ * transition to allow the dismiss to finish
1245
+ * before presenting again.
1246
+ */
1247
+ if (this.currentTransition !== undefined) {
1248
+ await this.currentTransition;
1249
+ }
1250
+ const data = Object.assign(Object.assign({}, this.componentProps), { popover: this.el });
1251
+ const { inline, delegate } = this.getDelegate(true);
1252
+ this.usersElement = await attachComponent(delegate, this.el, this.component, ['popover-viewport'], data, inline);
1253
+ await deepReady(this.usersElement);
1254
+ if (!this.keyboardEvents) {
1255
+ this.configureKeyboardInteraction();
1256
+ }
1257
+ this.configureDismissInteraction();
1258
+ this.ionMount.emit();
1259
+ return new Promise((resolve) => {
1260
+ /**
1261
+ * Wait two request animation frame loops before presenting the popover.
1262
+ * This allows the framework implementations enough time to mount
1263
+ * the popover contents, so the bounding box is set when the popover
1264
+ * transition starts.
1265
+ *
1266
+ * On Angular and React, a single raf is enough time, but for Vue
1267
+ * we need to wait two rafs. As a result we are using two rafs for
1268
+ * all frameworks to ensure the popover is presented correctly.
1269
+ */
1270
+ raf(() => {
1271
+ raf(async () => {
1272
+ this.currentTransition = present(this, 'popoverEnter', iosEnterAnimation, mdEnterAnimation, {
1273
+ event: event || this.event,
1274
+ size: this.size,
1275
+ trigger: this.triggerEl,
1276
+ reference: this.reference,
1277
+ side: this.side,
1278
+ align: this.alignment,
1279
+ });
1280
+ await this.currentTransition;
1281
+ this.currentTransition = undefined;
1282
+ /**
1283
+ * If popover is nested and was
1284
+ * presented using the "Right" arrow key,
1285
+ * we need to move focus to the first
1286
+ * descendant inside of the popover.
1287
+ */
1288
+ if (this.focusDescendantOnPresent) {
1289
+ focusFirstDescendant(this.el, this.el);
1290
+ }
1291
+ resolve();
1292
+ });
1293
+ });
1294
+ });
1295
+ }
1296
+ /**
1297
+ * Dismiss the popover overlay after it has been presented.
1298
+ *
1299
+ * @param data Any data to emit in the dismiss events.
1300
+ * @param role The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'.
1301
+ * @param dismissParentPopover If `true`, dismissing this popover will also dismiss
1302
+ * a parent popover if this popover is nested. Defaults to `true`.
1303
+ */
1304
+ async dismiss(data, role, dismissParentPopover = true) {
1305
+ /**
1306
+ * When using an inline popover
1307
+ * and presenting a popover it is possible to
1308
+ * quickly dismiss the popover while it is
1309
+ * presenting. We need to await any current
1310
+ * transition to allow the present to finish
1311
+ * before dismissing again.
1312
+ */
1313
+ if (this.currentTransition !== undefined) {
1314
+ await this.currentTransition;
1315
+ }
1316
+ const { destroyKeyboardInteraction, destroyDismissInteraction } = this;
1317
+ if (dismissParentPopover && this.parentPopover) {
1318
+ this.parentPopover.dismiss(data, role, dismissParentPopover);
1319
+ }
1320
+ this.currentTransition = dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.event);
1321
+ const shouldDismiss = await this.currentTransition;
1322
+ if (shouldDismiss) {
1323
+ if (destroyKeyboardInteraction) {
1324
+ destroyKeyboardInteraction();
1325
+ this.destroyKeyboardInteraction = undefined;
1326
+ }
1327
+ if (destroyDismissInteraction) {
1328
+ destroyDismissInteraction();
1329
+ this.destroyDismissInteraction = undefined;
1330
+ }
1331
+ /**
1332
+ * If using popover inline
1333
+ * we potentially need to use the coreDelegate
1334
+ * so that this works in vanilla JS apps
1335
+ */
1336
+ const { delegate } = this.getDelegate();
1337
+ await detachComponent(delegate, this.usersElement);
1338
+ }
1339
+ this.currentTransition = undefined;
1340
+ return shouldDismiss;
1341
+ }
1342
+ /**
1343
+ * @internal
1344
+ */
1345
+ async getParentPopover() {
1346
+ return this.parentPopover;
1347
+ }
1348
+ /**
1349
+ * Returns a promise that resolves when the popover did dismiss.
1350
+ */
1351
+ onDidDismiss() {
1352
+ return eventMethod(this.el, 'ionPopoverDidDismiss');
1353
+ }
1354
+ /**
1355
+ * Returns a promise that resolves when the popover will dismiss.
1356
+ */
1357
+ onWillDismiss() {
1358
+ return eventMethod(this.el, 'ionPopoverWillDismiss');
1359
+ }
1360
+ render() {
1361
+ const mode = getIonMode(this);
1362
+ const { onLifecycle, popoverId, parentPopover, dismissOnSelect, side, arrow, htmlAttributes } = this;
1363
+ const desktop = isPlatform('desktop');
1364
+ const enableArrow = arrow && !parentPopover;
1365
+ return (h(Host, Object.assign({ "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1366
+ zIndex: `${20000 + this.overlayIndex}`,
1367
+ }, id: popoverId, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { class: "popover-arrow", part: "arrow" }), h("div", { class: "popover-content", part: "content" }, h("slot", null)))));
1368
+ }
1369
+ get el() { return this; }
1370
+ static get watchers() { return {
1371
+ "trigger": ["onTriggerChange"],
1372
+ "triggerAction": ["onTriggerChange"],
1373
+ "isOpen": ["onIsOpenChange"]
1374
+ }; }
1375
+ static get style() { return {
1376
+ ios: popoverIosCss,
1377
+ md: popoverMdCss
1378
+ }; }
1379
+ }, [33, "ion-popover", {
1380
+ "hasController": [4, "has-controller"],
1381
+ "delegate": [16],
1382
+ "overlayIndex": [2, "overlay-index"],
1383
+ "enterAnimation": [16],
1384
+ "leaveAnimation": [16],
1385
+ "component": [1],
1386
+ "componentProps": [16],
1387
+ "keyboardClose": [4, "keyboard-close"],
1388
+ "cssClass": [1, "css-class"],
1389
+ "backdropDismiss": [4, "backdrop-dismiss"],
1390
+ "event": [8],
1391
+ "showBackdrop": [4, "show-backdrop"],
1392
+ "translucent": [4],
1393
+ "animated": [4],
1394
+ "htmlAttributes": [16],
1395
+ "triggerAction": [1, "trigger-action"],
1396
+ "trigger": [1],
1397
+ "size": [1],
1398
+ "dismissOnSelect": [4, "dismiss-on-select"],
1399
+ "reference": [1],
1400
+ "side": [1],
1401
+ "alignment": [1025],
1402
+ "arrow": [4],
1403
+ "isOpen": [4, "is-open"],
1404
+ "keyboardEvents": [4, "keyboard-events"],
1405
+ "keepContentsMounted": [4, "keep-contents-mounted"],
1406
+ "presented": [32],
1407
+ "presentFromTrigger": [64],
1408
+ "present": [64],
1409
+ "dismiss": [64],
1410
+ "getParentPopover": [64],
1411
+ "onDidDismiss": [64],
1412
+ "onWillDismiss": [64]
1413
+ }]);
1414
+ const LIFECYCLE_MAP = {
1415
+ ionPopoverDidPresent: 'ionViewDidEnter',
1416
+ ionPopoverWillPresent: 'ionViewWillEnter',
1417
+ ionPopoverWillDismiss: 'ionViewWillLeave',
1418
+ ionPopoverDidDismiss: 'ionViewDidLeave',
1419
+ };
1420
+ let popoverIds = 0;
1421
+ function defineCustomElement() {
1422
+ if (typeof customElements === "undefined") {
1423
+ return;
1424
+ }
1425
+ const components = ["ion-popover", "ion-backdrop"];
1426
+ components.forEach(tagName => { switch (tagName) {
1427
+ case "ion-popover":
1428
+ if (!customElements.get(tagName)) {
1429
+ customElements.define(tagName, Popover);
1430
+ }
1431
+ break;
1432
+ case "ion-backdrop":
1433
+ if (!customElements.get(tagName)) {
1434
+ defineCustomElement$1();
1435
+ }
1436
+ break;
1437
+ } });
1438
+ }
1439
+
1440
+ export { Popover as P, defineCustomElement as d };