voyager-ionic-core 8.3.4 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/components/alert.js +7 -5
  2. package/components/backdrop.js +1 -1
  3. package/components/button.js +2 -2
  4. package/components/buttons.js +2 -2
  5. package/components/checkbox.js +7 -5
  6. package/components/content.js +446 -0
  7. package/components/header.js +356 -0
  8. package/components/index4.js +2 -2
  9. package/components/ion-app.js +1 -1
  10. package/components/ion-avatar.js +1 -1
  11. package/components/ion-back-button.js +2 -2
  12. package/components/ion-badge.js +2 -2
  13. package/components/ion-breadcrumb.js +4 -4
  14. package/components/ion-breadcrumbs.js +2 -2
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +2 -2
  17. package/components/ion-card-subtitle.js +2 -2
  18. package/components/ion-card-title.js +2 -2
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-chip.js +2 -2
  21. package/components/ion-col.js +2 -2
  22. package/components/ion-content.js +1 -441
  23. package/components/ion-datetime-button.js +2 -2
  24. package/components/ion-datetime.js +2 -2
  25. package/components/ion-fab-button.js +2 -2
  26. package/components/ion-fab-list.js +2 -2
  27. package/components/ion-fab.js +2 -2
  28. package/components/ion-footer.js +2 -2
  29. package/components/ion-grid.js +2 -2
  30. package/components/ion-header.js +1 -351
  31. package/components/ion-img.js +1 -1
  32. package/components/ion-infinite-scroll-content.js +2 -2
  33. package/components/ion-infinite-scroll.js +1 -1
  34. package/components/ion-input-password-toggle.js +3 -3
  35. package/components/ion-input.js +3 -3
  36. package/components/ion-item-divider.js +2 -2
  37. package/components/ion-item-group.js +1 -1
  38. package/components/ion-item-option.js +2 -2
  39. package/components/ion-item-options.js +1 -1
  40. package/components/ion-item-sliding.js +1 -1
  41. package/components/ion-loading.js +2 -2
  42. package/components/ion-menu-button.js +2 -2
  43. package/components/ion-menu-toggle.js +2 -2
  44. package/components/ion-menu.js +19 -19
  45. package/components/ion-modal.js +1 -1737
  46. package/components/ion-nav-link.js +1 -1
  47. package/components/ion-nav.js +1 -1
  48. package/components/ion-note.js +2 -2
  49. package/components/ion-picker-legacy.js +2 -2
  50. package/components/ion-progress-bar.js +1 -1
  51. package/components/ion-range.js +3 -3
  52. package/components/ion-refresher-content.js +1 -1
  53. package/components/ion-refresher.js +1 -1
  54. package/components/ion-reorder-group.js +1 -1
  55. package/components/ion-reorder.js +1 -1
  56. package/components/ion-router-link.js +2 -2
  57. package/components/ion-router-outlet.js +1 -1
  58. package/components/ion-row.js +1 -1
  59. package/components/ion-searchbar.js +4 -4
  60. package/components/ion-segment-button.js +24 -5
  61. package/components/ion-segment-content.d.ts +11 -0
  62. package/components/ion-segment-content.js +37 -0
  63. package/components/ion-segment-view.d.ts +11 -0
  64. package/components/ion-segment-view.js +140 -0
  65. package/components/ion-segment.js +110 -15
  66. package/components/ion-select-modal.d.ts +11 -0
  67. package/components/ion-select-modal.js +9 -0
  68. package/components/ion-select-option.js +1 -1
  69. package/components/ion-select.js +114 -41
  70. package/components/ion-skeleton-text.js +2 -2
  71. package/components/ion-split-pane.js +2 -2
  72. package/components/ion-tab-bar.js +2 -2
  73. package/components/ion-tab-button.js +2 -2
  74. package/components/ion-tab.js +2 -2
  75. package/components/ion-tabs.js +1 -1
  76. package/components/ion-text.js +2 -2
  77. package/components/ion-textarea.js +2 -2
  78. package/components/ion-thumbnail.js +1 -1
  79. package/components/ion-title.js +1 -70
  80. package/components/ion-toast.js +2 -2
  81. package/components/ion-toggle.js +3 -3
  82. package/components/ion-toolbar.js +1 -88
  83. package/components/label.js +2 -2
  84. package/components/list-header.js +2 -2
  85. package/components/list.js +1 -1
  86. package/components/modal.js +1742 -0
  87. package/components/picker-column-option.js +2 -2
  88. package/components/picker-column.js +3 -3
  89. package/components/picker-column2.js +2 -2
  90. package/components/picker.js +2 -2
  91. package/components/popover.js +2 -2
  92. package/components/radio-group.js +5 -3
  93. package/components/radio.js +7 -5
  94. package/components/ripple-effect.js +1 -1
  95. package/components/select-modal.js +197 -0
  96. package/components/select-popover.js +1 -1
  97. package/components/spinner.js +1 -1
  98. package/components/title.js +75 -0
  99. package/components/toolbar.js +93 -0
  100. package/dist/cjs/{index-9cd00dc3.js → index-8e789962.js} +2 -2
  101. package/dist/cjs/index.cjs.js +1 -1
  102. package/dist/cjs/ion-alert.cjs.entry.js +7 -5
  103. package/dist/cjs/ion-app_8.cjs.entry.js +15 -15
  104. package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -4
  105. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  106. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -1
  107. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +6 -6
  108. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  109. package/dist/cjs/ion-card_5.cjs.entry.js +8 -8
  110. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -4
  111. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  112. package/dist/cjs/ion-col_3.cjs.entry.js +5 -5
  113. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  114. package/dist/cjs/ion-datetime_3.cjs.entry.js +6 -6
  115. package/dist/cjs/ion-fab_3.cjs.entry.js +6 -6
  116. package/dist/cjs/ion-img.cjs.entry.js +1 -1
  117. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  118. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
  119. package/dist/cjs/ion-input.cjs.entry.js +3 -3
  120. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  121. package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
  122. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  123. package/dist/cjs/ion-menu_3.cjs.entry.js +23 -23
  124. package/dist/cjs/ion-modal.cjs.entry.js +4 -4
  125. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  126. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  127. package/dist/cjs/ion-picker-column.cjs.entry.js +3 -3
  128. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  129. package/dist/cjs/ion-popover.cjs.entry.js +2 -2
  130. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  131. package/dist/cjs/ion-radio_2.cjs.entry.js +12 -8
  132. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  133. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  134. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  135. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  136. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  137. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  138. package/dist/cjs/ion-segment-content.cjs.entry.js +23 -0
  139. package/dist/cjs/ion-segment-view.cjs.entry.js +122 -0
  140. package/dist/cjs/ion-segment_2.cjs.entry.js +132 -19
  141. package/dist/cjs/ion-select-modal.cjs.entry.js +111 -0
  142. package/dist/cjs/ion-select_3.cjs.entry.js +39 -14
  143. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  144. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  145. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  146. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  147. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  148. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  149. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  150. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  151. package/dist/cjs/ionic.cjs.js +1 -1
  152. package/dist/cjs/loader.cjs.js +1 -1
  153. package/dist/collection/collection-manifest.json +3 -0
  154. package/dist/collection/components/alert/alert.js +7 -5
  155. package/dist/collection/components/app/app.js +1 -1
  156. package/dist/collection/components/avatar/avatar.js +1 -1
  157. package/dist/collection/components/back-button/back-button.js +2 -2
  158. package/dist/collection/components/backdrop/backdrop.js +1 -1
  159. package/dist/collection/components/badge/badge.js +2 -2
  160. package/dist/collection/components/breadcrumb/breadcrumb.js +4 -4
  161. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  162. package/dist/collection/components/button/button.js +2 -2
  163. package/dist/collection/components/buttons/buttons.js +2 -2
  164. package/dist/collection/components/card/card.js +1 -1
  165. package/dist/collection/components/card-content/card-content.js +1 -1
  166. package/dist/collection/components/card-header/card-header.js +2 -2
  167. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  168. package/dist/collection/components/card-title/card-title.js +2 -2
  169. package/dist/collection/components/checkbox/checkbox.js +29 -4
  170. package/dist/collection/components/chip/chip.js +2 -2
  171. package/dist/collection/components/col/col.js +2 -2
  172. package/dist/collection/components/content/content.js +3 -3
  173. package/dist/collection/components/datetime/datetime.js +2 -2
  174. package/dist/collection/components/datetime-button/datetime-button.js +2 -2
  175. package/dist/collection/components/fab/fab.js +2 -2
  176. package/dist/collection/components/fab-button/fab-button.js +2 -2
  177. package/dist/collection/components/fab-list/fab-list.js +2 -2
  178. package/dist/collection/components/footer/footer.js +2 -2
  179. package/dist/collection/components/grid/grid.js +2 -2
  180. package/dist/collection/components/header/header.js +2 -2
  181. package/dist/collection/components/img/img.js +1 -1
  182. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  183. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  184. package/dist/collection/components/input/input.js +3 -3
  185. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  186. package/dist/collection/components/item-divider/item-divider.js +2 -2
  187. package/dist/collection/components/item-group/item-group.js +1 -1
  188. package/dist/collection/components/item-option/item-option.js +2 -2
  189. package/dist/collection/components/item-options/item-options.js +1 -1
  190. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  191. package/dist/collection/components/label/label.js +2 -2
  192. package/dist/collection/components/list/list.js +1 -1
  193. package/dist/collection/components/list-header/list-header.js +2 -2
  194. package/dist/collection/components/loading/loading.js +2 -2
  195. package/dist/collection/components/menu/menu.js +47 -27
  196. package/dist/collection/components/menu-button/menu-button.js +2 -2
  197. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  198. package/dist/collection/components/modal/modal.js +4 -4
  199. package/dist/collection/components/nav/nav.js +1 -1
  200. package/dist/collection/components/nav-link/nav-link.js +1 -1
  201. package/dist/collection/components/note/note.js +2 -2
  202. package/dist/collection/components/picker/picker.js +2 -2
  203. package/dist/collection/components/picker-column/picker-column.js +3 -3
  204. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  205. package/dist/collection/components/picker-legacy/picker.js +2 -2
  206. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  207. package/dist/collection/components/popover/popover.js +2 -2
  208. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  209. package/dist/collection/components/radio/radio.js +9 -7
  210. package/dist/collection/components/radio-group/radio-group.js +5 -3
  211. package/dist/collection/components/range/range.js +3 -3
  212. package/dist/collection/components/refresher/refresher.js +1 -1
  213. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  214. package/dist/collection/components/reorder/reorder.js +1 -1
  215. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  216. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  217. package/dist/collection/components/router-link/router-link.js +2 -2
  218. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  219. package/dist/collection/components/row/row.js +1 -1
  220. package/dist/collection/components/searchbar/searchbar.js +4 -4
  221. package/dist/collection/components/segment/segment.js +115 -14
  222. package/dist/collection/components/segment-button/segment-button.js +40 -5
  223. package/dist/collection/components/segment-content/segment-content.css +6 -0
  224. package/dist/collection/components/segment-content/segment-content.js +21 -0
  225. package/dist/collection/components/segment-view/segment-view-interface.js +1 -0
  226. package/dist/collection/components/segment-view/segment-view.ios.css +83 -0
  227. package/dist/collection/components/segment-view/segment-view.js +227 -0
  228. package/dist/collection/components/segment-view/segment-view.md.css +83 -0
  229. package/dist/collection/components/select/select.js +61 -16
  230. package/dist/collection/components/select-modal/select-modal-interface.js +1 -0
  231. package/dist/collection/components/select-modal/select-modal.ios.css +3 -0
  232. package/dist/collection/components/select-modal/select-modal.js +159 -0
  233. package/dist/collection/components/select-modal/select-modal.md.css +110 -0
  234. package/dist/collection/components/select-modal/test/fixtures.js +48 -0
  235. package/dist/collection/components/select-option/select-option.js +1 -1
  236. package/dist/collection/components/select-popover/select-popover.js +1 -1
  237. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  238. package/dist/collection/components/spinner/spinner.js +1 -1
  239. package/dist/collection/components/split-pane/split-pane.js +2 -2
  240. package/dist/collection/components/tab/tab.js +2 -2
  241. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  242. package/dist/collection/components/tab-button/tab-button.js +2 -2
  243. package/dist/collection/components/tabs/tabs.js +1 -1
  244. package/dist/collection/components/text/text.js +2 -2
  245. package/dist/collection/components/textarea/textarea.js +2 -2
  246. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  247. package/dist/collection/components/title/title.js +2 -2
  248. package/dist/collection/components/toast/toast.js +2 -2
  249. package/dist/collection/components/toggle/toggle.js +3 -3
  250. package/dist/collection/components/toolbar/toolbar.js +2 -2
  251. package/dist/collection/utils/menu-controller/index.js +2 -2
  252. package/dist/docs.json +426 -29
  253. package/dist/esm/{index-fe1782b1.js → index-24b48b06.js} +2 -2
  254. package/dist/esm/index.js +1 -1
  255. package/dist/esm/ion-alert.entry.js +7 -5
  256. package/dist/esm/ion-app_8.entry.js +15 -15
  257. package/dist/esm/ion-avatar_3.entry.js +4 -4
  258. package/dist/esm/ion-back-button.entry.js +2 -2
  259. package/dist/esm/ion-backdrop.entry.js +1 -1
  260. package/dist/esm/ion-breadcrumb_2.entry.js +6 -6
  261. package/dist/esm/ion-button_2.entry.js +2 -2
  262. package/dist/esm/ion-card_5.entry.js +8 -8
  263. package/dist/esm/ion-checkbox.entry.js +5 -4
  264. package/dist/esm/ion-chip.entry.js +2 -2
  265. package/dist/esm/ion-col_3.entry.js +5 -5
  266. package/dist/esm/ion-datetime-button.entry.js +2 -2
  267. package/dist/esm/ion-datetime_3.entry.js +6 -6
  268. package/dist/esm/ion-fab_3.entry.js +6 -6
  269. package/dist/esm/ion-img.entry.js +1 -1
  270. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  271. package/dist/esm/ion-input-password-toggle.entry.js +3 -3
  272. package/dist/esm/ion-input.entry.js +3 -3
  273. package/dist/esm/ion-item-option_3.entry.js +4 -4
  274. package/dist/esm/ion-item_8.entry.js +12 -12
  275. package/dist/esm/ion-loading.entry.js +2 -2
  276. package/dist/esm/ion-menu_3.entry.js +24 -24
  277. package/dist/esm/ion-modal.entry.js +4 -4
  278. package/dist/esm/ion-nav_2.entry.js +2 -2
  279. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  280. package/dist/esm/ion-picker-column.entry.js +3 -3
  281. package/dist/esm/ion-picker.entry.js +2 -2
  282. package/dist/esm/ion-popover.entry.js +2 -2
  283. package/dist/esm/ion-progress-bar.entry.js +1 -1
  284. package/dist/esm/ion-radio_2.entry.js +12 -8
  285. package/dist/esm/ion-range.entry.js +3 -3
  286. package/dist/esm/ion-refresher_2.entry.js +2 -2
  287. package/dist/esm/ion-reorder_2.entry.js +2 -2
  288. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  289. package/dist/esm/ion-route_4.entry.js +2 -2
  290. package/dist/esm/ion-searchbar.entry.js +4 -4
  291. package/dist/esm/ion-segment-content.entry.js +19 -0
  292. package/dist/esm/ion-segment-view.entry.js +118 -0
  293. package/dist/esm/ion-segment_2.entry.js +132 -19
  294. package/dist/esm/ion-select-modal.entry.js +107 -0
  295. package/dist/esm/ion-select_3.entry.js +40 -15
  296. package/dist/esm/ion-spinner.entry.js +1 -1
  297. package/dist/esm/ion-split-pane.entry.js +2 -2
  298. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  299. package/dist/esm/ion-tab_2.entry.js +3 -3
  300. package/dist/esm/ion-text.entry.js +2 -2
  301. package/dist/esm/ion-textarea.entry.js +2 -2
  302. package/dist/esm/ion-toast.entry.js +2 -2
  303. package/dist/esm/ion-toggle.entry.js +3 -3
  304. package/dist/esm/ionic.js +1 -1
  305. package/dist/esm/loader.js +1 -1
  306. package/dist/esm-es5/{index-fe1782b1.js → index-24b48b06.js} +1 -1
  307. package/dist/esm-es5/index.js +1 -1
  308. package/dist/esm-es5/ion-alert.entry.js +1 -1
  309. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  310. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  311. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  312. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  313. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  314. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  315. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  316. package/dist/esm-es5/ion-checkbox.entry.js +2 -2
  317. package/dist/esm-es5/ion-chip.entry.js +1 -1
  318. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  319. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  320. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  321. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  322. package/dist/esm-es5/ion-img.entry.js +1 -1
  323. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  324. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  325. package/dist/esm-es5/ion-input.entry.js +1 -1
  326. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  327. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  328. package/dist/esm-es5/ion-loading.entry.js +1 -1
  329. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  330. package/dist/esm-es5/ion-modal.entry.js +1 -1
  331. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  332. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  333. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  334. package/dist/esm-es5/ion-picker.entry.js +1 -1
  335. package/dist/esm-es5/ion-popover.entry.js +1 -1
  336. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  337. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  338. package/dist/esm-es5/ion-range.entry.js +1 -1
  339. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  340. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  341. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  342. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  343. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  344. package/dist/esm-es5/ion-segment-content.entry.js +4 -0
  345. package/dist/esm-es5/ion-segment-view.entry.js +4 -0
  346. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  347. package/dist/esm-es5/ion-select-modal.entry.js +4 -0
  348. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  349. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  350. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  351. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  352. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  353. package/dist/esm-es5/ion-text.entry.js +1 -1
  354. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  355. package/dist/esm-es5/ion-toast.entry.js +1 -1
  356. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  357. package/dist/esm-es5/ionic.js +1 -1
  358. package/dist/esm-es5/loader.js +1 -1
  359. package/dist/html.html-data.json +65 -2
  360. package/dist/ionic/index.esm.js +1 -1
  361. package/dist/ionic/ionic.esm.js +1 -1
  362. package/dist/ionic/{p-313ccc01.system.entry.js → p-01186920.system.entry.js} +1 -1
  363. package/dist/ionic/{p-0790b342.system.entry.js → p-0161caf9.system.entry.js} +1 -1
  364. package/dist/ionic/p-0437ace4.system.entry.js +4 -0
  365. package/dist/ionic/{p-e3e1e3de.entry.js → p-081a4ce4.entry.js} +1 -1
  366. package/dist/ionic/p-09cf2394.entry.js +4 -0
  367. package/dist/ionic/p-14be4015.entry.js +4 -0
  368. package/dist/ionic/p-15e76dd1.entry.js +4 -0
  369. package/dist/ionic/{p-003eecb9.entry.js → p-16188af7.entry.js} +1 -1
  370. package/dist/ionic/p-16799667.system.entry.js +4 -0
  371. package/dist/ionic/p-16bfb979.system.entry.js +4 -0
  372. package/dist/ionic/{p-b54fc1ae.entry.js → p-19ec4f42.entry.js} +1 -1
  373. package/dist/ionic/p-1b7605a7.system.entry.js +4 -0
  374. package/dist/ionic/p-1c1b8e1f.entry.js +4 -0
  375. package/dist/ionic/{p-8b6232a6.system.entry.js → p-1e010627.system.entry.js} +2 -2
  376. package/dist/ionic/{p-d754c709.system.entry.js → p-1e41f2aa.system.entry.js} +1 -1
  377. package/dist/ionic/{p-cdb11938.system.entry.js → p-1e67b266.system.entry.js} +1 -1
  378. package/dist/ionic/{p-bd25d639.system.entry.js → p-1ebd1e27.system.entry.js} +1 -1
  379. package/dist/ionic/{p-836d39d4.system.entry.js → p-2172893e.system.entry.js} +1 -1
  380. package/dist/ionic/{p-4a0a4204.system.entry.js → p-2507278c.system.entry.js} +1 -1
  381. package/dist/ionic/{p-75c0dc65.system.entry.js → p-2799c6d3.system.entry.js} +1 -1
  382. package/dist/ionic/{p-a879ecb7.system.entry.js → p-2abae1cc.system.entry.js} +1 -1
  383. package/dist/ionic/{p-293ed6ac.system.entry.js → p-2b838f86.system.entry.js} +1 -1
  384. package/dist/ionic/{p-4a82bd1c.system.entry.js → p-2e46590d.system.entry.js} +1 -1
  385. package/dist/ionic/{p-148b8abb.entry.js → p-2fc0dafe.entry.js} +1 -1
  386. package/dist/ionic/p-322c5fb4.system.js +2 -2
  387. package/dist/ionic/{p-60cc7986.entry.js → p-33a8a71b.entry.js} +1 -1
  388. package/dist/ionic/{p-18105026.system.entry.js → p-37cb43bd.system.entry.js} +1 -1
  389. package/dist/ionic/{p-ad9b5007.system.entry.js → p-3b419d79.system.entry.js} +1 -1
  390. package/dist/ionic/p-424eb140.system.entry.js +4 -0
  391. package/dist/ionic/{p-b7657e8d.entry.js → p-4439fc2a.entry.js} +1 -1
  392. package/dist/ionic/{p-be71fe0f.system.entry.js → p-4561cd09.system.entry.js} +1 -1
  393. package/dist/ionic/{p-c34659b9.entry.js → p-45693d7e.entry.js} +1 -1
  394. package/dist/ionic/p-49a0e74c.entry.js +4 -0
  395. package/dist/ionic/{p-6d50faff.entry.js → p-4a274c89.entry.js} +1 -1
  396. package/dist/ionic/{p-41c89b8d.entry.js → p-4b000207.entry.js} +1 -1
  397. package/dist/ionic/{p-fd0cb4ef.entry.js → p-4ec778aa.entry.js} +1 -1
  398. package/dist/ionic/{p-f559ac5b.entry.js → p-51796b2d.entry.js} +1 -1
  399. package/dist/ionic/{p-9ece8dcf.entry.js → p-52d7a191.entry.js} +1 -1
  400. package/dist/ionic/{p-79e7be3a.system.entry.js → p-5393e8bb.system.entry.js} +1 -1
  401. package/dist/ionic/{p-ce705aac.system.entry.js → p-567de071.system.entry.js} +1 -1
  402. package/dist/ionic/{p-95823c62.system.entry.js → p-5823babc.system.entry.js} +2 -2
  403. package/dist/ionic/{p-baffaf8d.system.entry.js → p-58d5df0c.system.entry.js} +1 -1
  404. package/dist/ionic/{p-521eca2e.entry.js → p-5ab1b709.entry.js} +1 -1
  405. package/dist/ionic/{p-c71f301f.system.entry.js → p-5b5c1505.system.entry.js} +1 -1
  406. package/dist/ionic/{p-8d44cf1f.entry.js → p-5b932840.entry.js} +1 -1
  407. package/dist/ionic/{p-f0ab13a8.system.entry.js → p-5bd39e5e.system.entry.js} +2 -2
  408. package/dist/ionic/{p-5800e441.entry.js → p-5f79d8c5.entry.js} +1 -1
  409. package/dist/ionic/{p-53add985.system.entry.js → p-5fce0c0b.system.entry.js} +1 -1
  410. package/dist/ionic/{p-233e6c93.entry.js → p-62af944c.entry.js} +1 -1
  411. package/dist/ionic/{p-00b01a55.system.entry.js → p-63b0abde.system.entry.js} +1 -1
  412. package/dist/ionic/p-6734db42.system.entry.js +4 -0
  413. package/dist/ionic/p-69666e8a.system.entry.js +4 -0
  414. package/dist/ionic/{p-5e842258.entry.js → p-6d32975a.entry.js} +1 -1
  415. package/dist/ionic/p-73dc4950.entry.js +4 -0
  416. package/dist/ionic/{p-fcd71204.system.entry.js → p-7458862e.system.entry.js} +1 -1
  417. package/dist/ionic/{p-a3711608.system.entry.js → p-797eeea8.system.entry.js} +1 -1
  418. package/dist/ionic/{p-f8c8b9ba.entry.js → p-7b9a2b23.entry.js} +1 -1
  419. package/dist/ionic/{p-6817cf42.system.entry.js → p-7ed1657c.system.entry.js} +1 -1
  420. package/dist/ionic/{p-79b12fda.system.js → p-8f05ba3b.system.js} +1 -1
  421. package/dist/ionic/p-908d6080.entry.js +4 -0
  422. package/dist/ionic/{p-af999a31.entry.js → p-937a7e21.entry.js} +1 -1
  423. package/dist/ionic/{p-4c8fceb0.entry.js → p-95775830.entry.js} +1 -1
  424. package/dist/ionic/{p-973f0b15.system.entry.js → p-98231c01.system.entry.js} +1 -1
  425. package/dist/ionic/{p-25928b83.system.entry.js → p-985a7e17.system.entry.js} +1 -1
  426. package/dist/ionic/{p-e3a5da9d.entry.js → p-98ff6b32.entry.js} +1 -1
  427. package/dist/ionic/{p-6e85e450.entry.js → p-9df2c6fb.entry.js} +1 -1
  428. package/dist/ionic/{p-7251fed5.entry.js → p-9ee1e8a6.entry.js} +1 -1
  429. package/dist/ionic/{p-da263d8e.entry.js → p-9fa07aec.entry.js} +1 -1
  430. package/dist/ionic/{p-d58f21d2.entry.js → p-a1051806.entry.js} +1 -1
  431. package/dist/ionic/{p-6ceb04b5.entry.js → p-a1b9a163.entry.js} +1 -1
  432. package/dist/ionic/p-a34b4d94.entry.js +4 -0
  433. package/dist/ionic/{p-8836d0eb.system.entry.js → p-a49378bb.system.entry.js} +1 -1
  434. package/dist/ionic/{p-6b8893dd.entry.js → p-a61cba41.entry.js} +1 -1
  435. package/dist/ionic/p-adbc4bdf.entry.js +4 -0
  436. package/dist/ionic/{p-49bc6544.entry.js → p-afecb188.entry.js} +1 -1
  437. package/dist/ionic/{p-be715dd3.system.entry.js → p-b335ffed.system.entry.js} +1 -1
  438. package/dist/ionic/{p-e3f13b08.js → p-b82d4cab.js} +1 -1
  439. package/dist/ionic/{p-68c4df55.entry.js → p-b9d7015f.entry.js} +1 -1
  440. package/dist/ionic/{p-7243df6f.entry.js → p-bb0db172.entry.js} +1 -1
  441. package/dist/ionic/{p-df83e308.system.entry.js → p-bc36ad98.system.entry.js} +1 -1
  442. package/dist/ionic/{p-773d118d.entry.js → p-bdad26e3.entry.js} +1 -1
  443. package/dist/ionic/p-c29f8157.system.entry.js +4 -0
  444. package/dist/ionic/p-c2b74d92.system.entry.js +4 -0
  445. package/dist/ionic/{p-176b372f.entry.js → p-c41ac815.entry.js} +1 -1
  446. package/dist/ionic/{p-5417b9bb.entry.js → p-c9f3a539.entry.js} +1 -1
  447. package/dist/ionic/{p-2ea1ca4f.system.entry.js → p-ca065903.system.entry.js} +1 -1
  448. package/dist/ionic/{p-2ca6eac2.system.entry.js → p-cac0e0b3.system.entry.js} +1 -1
  449. package/dist/ionic/{p-3c968c7f.system.entry.js → p-d18ab582.system.entry.js} +2 -2
  450. package/dist/ionic/{p-92d7a3d1.entry.js → p-d7aa6b00.entry.js} +1 -1
  451. package/dist/ionic/{p-21cfd4de.entry.js → p-da074ff7.entry.js} +1 -1
  452. package/dist/ionic/{p-9e208825.entry.js → p-db0c8e7d.entry.js} +1 -1
  453. package/dist/ionic/{p-89a0a446.entry.js → p-de930745.entry.js} +1 -1
  454. package/dist/ionic/p-e2252ad6.entry.js +4 -0
  455. package/dist/ionic/{p-960803fc.system.entry.js → p-e4ee80be.system.entry.js} +1 -1
  456. package/dist/ionic/{p-dda5c73d.entry.js → p-e563a35c.entry.js} +1 -1
  457. package/dist/ionic/{p-7740e32c.system.js → p-e7ed4a7f.system.js} +1 -1
  458. package/dist/ionic/{p-0373d924.system.entry.js → p-ebf042e0.system.entry.js} +1 -1
  459. package/dist/ionic/{p-9b6c6302.system.entry.js → p-ed75fcfb.system.entry.js} +1 -1
  460. package/dist/ionic/p-f10b70a1.entry.js +4 -0
  461. package/dist/ionic/{p-01503bbd.system.entry.js → p-f3102647.system.entry.js} +1 -1
  462. package/dist/ionic/{p-6562e0a9.system.entry.js → p-fca6ef5f.system.entry.js} +1 -1
  463. package/dist/ionic/{p-b0180ce1.system.entry.js → p-ffd131f9.system.entry.js} +1 -1
  464. package/dist/types/components/checkbox/checkbox.d.ts +2 -1
  465. package/dist/types/components/menu/menu-interface.d.ts +5 -2
  466. package/dist/types/components/menu/menu.d.ts +6 -6
  467. package/dist/types/components/radio/radio.d.ts +1 -1
  468. package/dist/types/components/segment/segment.d.ts +21 -1
  469. package/dist/types/components/segment-button/segment-button.d.ts +4 -0
  470. package/dist/types/components/segment-content/segment-content.d.ts +4 -0
  471. package/dist/types/components/segment-view/segment-view-interface.d.ts +4 -0
  472. package/dist/types/components/segment-view/segment-view.d.ts +55 -0
  473. package/dist/types/components/select/select-interface.d.ts +1 -1
  474. package/dist/types/components/select/select.d.ts +5 -4
  475. package/dist/types/components/select-modal/select-modal-interface.d.ts +10 -0
  476. package/dist/types/components/select-modal/select-modal.d.ts +16 -0
  477. package/dist/types/components/select-modal/test/fixtures.d.ts +16 -0
  478. package/dist/types/components.d.ts +103 -13
  479. package/dist/types/utils/overlays-interface.d.ts +1 -1
  480. package/hydrate/index.js +610 -212
  481. package/hydrate/index.mjs +610 -212
  482. package/package.json +1 -1
  483. package/dist/ionic/p-110e03be.system.entry.js +0 -4
  484. package/dist/ionic/p-2200e26b.entry.js +0 -4
  485. package/dist/ionic/p-44d1539c.system.entry.js +0 -4
  486. package/dist/ionic/p-53854390.entry.js +0 -4
  487. package/dist/ionic/p-63d65dbc.system.entry.js +0 -4
  488. package/dist/ionic/p-72ffd137.system.entry.js +0 -4
  489. package/dist/ionic/p-82ab7ccb.entry.js +0 -4
  490. package/dist/ionic/p-87a4407b.entry.js +0 -4
  491. package/dist/ionic/p-9172535c.entry.js +0 -4
  492. package/dist/ionic/p-93f37ceb.system.entry.js +0 -4
  493. package/dist/ionic/p-9895e7f3.entry.js +0 -4
  494. package/dist/ionic/p-a0c88dc2.system.entry.js +0 -4
  495. package/dist/ionic/p-a89dac49.entry.js +0 -4
  496. package/dist/ionic/p-f88ebc36.entry.js +0 -4
@@ -0,0 +1,83 @@
1
+ :host {
2
+ display: flex;
3
+ height: 100%;
4
+ overflow-x: scroll;
5
+ scroll-snap-type: x mandatory;
6
+ /* Hide scrollbar in Firefox */
7
+ scrollbar-width: none;
8
+ /* Hide scrollbar in IE and Edge */
9
+ -ms-overflow-style: none;
10
+ }
11
+
12
+ /* Hide scrollbar in webkit */
13
+ :host::-webkit-scrollbar {
14
+ display: none;
15
+ }
16
+
17
+ :host(.segment-view-disabled) {
18
+ touch-action: none;
19
+ overflow-x: hidden;
20
+ }
21
+
22
+ :host(.segment-view-scroll-disabled) {
23
+ pointer-events: none;
24
+ }
25
+
26
+ /**
27
+ * Convert a font size to a dynamic font size.
28
+ * Fonts that participate in Dynamic Type should use
29
+ * dynamic font sizes.
30
+ * @param size - The initial font size including the unit (i.e. px or pt)
31
+ * @param unit (optional) - The unit to convert to. Use this if you want to
32
+ * convert to a unit other than $baselineUnit.
33
+ */
34
+ /**
35
+ * Convert a font size to a dynamic font size but impose
36
+ * a maximum font size.
37
+ * @param size - The initial font size including the unit (i.e. px or pt)
38
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
39
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
40
+ * convert to a unit other than $baselineUnit.
41
+ */
42
+ /**
43
+ * Convert a font size to a dynamic font size but impose
44
+ * a minimum font size.
45
+ * @param size - The initial font size including the unit (i.e. px or pt)
46
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
47
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
48
+ * convert to a unit other than $baselineUnit.
49
+ */
50
+ /**
51
+ * Convert a font size to a dynamic font size but impose
52
+ * maximum and minimum font sizes.
53
+ * @param size - The initial font size including the unit (i.e. px or pt)
54
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
55
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
56
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
57
+ * convert to a unit other than $baselineUnit.
58
+ */
59
+ /**
60
+ * A heuristic that applies CSS to tablet
61
+ * viewports.
62
+ *
63
+ * Usage:
64
+ * @include tablet-viewport() {
65
+ * :host {
66
+ * background-color: green;
67
+ * }
68
+ * }
69
+ */
70
+ /**
71
+ * A heuristic that applies CSS to mobile
72
+ * viewports (i.e. phones, not tablets).
73
+ *
74
+ * Usage:
75
+ * @include mobile-viewport() {
76
+ * :host {
77
+ * background-color: blue;
78
+ * }
79
+ * }
80
+ */
81
+ :host(.segment-view-disabled) {
82
+ opacity: 0.3;
83
+ }
@@ -4,7 +4,7 @@
4
4
  import { Host, h, forceUpdate } from "@stencil/core";
5
5
  import { compareOptions, createNotchController, isOptionSelected } from "../../utils/forms/index";
6
6
  import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
7
- import { actionSheetController, alertController, popoverController } from "../../utils/overlays";
7
+ import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
8
8
  import { isRTL } from "../../utils/rtl/index";
9
9
  import { createColorClasses, hostContext } from "../../utils/theme";
10
10
  import { watchForOptions } from "../../utils/watch-options";
@@ -160,13 +160,12 @@ export class Select {
160
160
  this.setFocus();
161
161
  });
162
162
  await overlay.present();
163
- // focus selected option for popovers
164
- if (this.interface === 'popover') {
165
- const indexOfSelected = this.childOpts.map((o) => o.value).indexOf(this.value);
163
+ // focus selected option for popovers and modals
164
+ if (this.interface === 'popover' || this.interface === 'modal') {
165
+ const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
166
166
  if (indexOfSelected > -1) {
167
167
  const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
168
168
  if (selectedItem) {
169
- focusVisibleElement(selectedItem);
170
169
  /**
171
170
  * Browsers such as Firefox do not
172
171
  * correctly delegate focus when manually
@@ -180,8 +179,11 @@ export class Select {
180
179
  */
181
180
  const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
182
181
  if (interactiveEl) {
183
- interactiveEl.focus();
182
+ // Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
183
+ // and removing `ion-focused` style
184
+ interactiveEl.setFocus();
184
185
  }
186
+ focusVisibleElement(selectedItem);
185
187
  }
186
188
  }
187
189
  else {
@@ -190,11 +192,14 @@ export class Select {
190
192
  */
191
193
  const firstEnabledOption = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
192
194
  if (firstEnabledOption) {
193
- focusVisibleElement(firstEnabledOption.closest('ion-item'));
194
195
  /**
195
196
  * Focus the option for the same reason as we do above.
197
+ *
198
+ * Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
199
+ * and removing `ion-focused` style
196
200
  */
197
- firstEnabledOption.focus();
201
+ firstEnabledOption.setFocus();
202
+ focusVisibleElement(firstEnabledOption.closest('ion-item'));
198
203
  }
199
204
  }
200
205
  }
@@ -216,6 +221,9 @@ export class Select {
216
221
  if (selectInterface === 'popover') {
217
222
  return this.openPopover(ev);
218
223
  }
224
+ if (selectInterface === 'modal') {
225
+ return this.openModal();
226
+ }
219
227
  return this.openAlert();
220
228
  }
221
229
  updateOverlayOptions() {
@@ -232,7 +240,13 @@ export class Select {
232
240
  case 'popover':
233
241
  const popover = overlay.querySelector('ion-select-popover');
234
242
  if (popover) {
235
- popover.options = this.createPopoverOptions(childOpts, value);
243
+ popover.options = this.createOverlaySelectOptions(childOpts, value);
244
+ }
245
+ break;
246
+ case 'modal':
247
+ const modal = overlay.querySelector('ion-select-modal');
248
+ if (modal) {
249
+ modal.options = this.createOverlaySelectOptions(childOpts, value);
236
250
  }
237
251
  break;
238
252
  case 'alert':
@@ -287,7 +301,7 @@ export class Select {
287
301
  });
288
302
  return alertInputs;
289
303
  }
290
- createPopoverOptions(data, selectValue) {
304
+ createOverlaySelectOptions(data, selectValue) {
291
305
  const popoverOptions = data.map((option) => {
292
306
  const value = getOptionValue(option);
293
307
  // Remove hydrated before copying over classes
@@ -347,7 +361,7 @@ export class Select {
347
361
  message: interfaceOptions.message,
348
362
  multiple,
349
363
  value,
350
- options: this.createPopoverOptions(this.childOpts, value),
364
+ options: this.createOverlaySelectOptions(this.childOpts, value),
351
365
  } });
352
366
  /**
353
367
  * Workaround for Stencil to autodefine
@@ -416,6 +430,29 @@ export class Select {
416
430
  }
417
431
  return alertController.create(alertOpts);
418
432
  }
433
+ openModal() {
434
+ const { multiple, value, interfaceOptions } = this;
435
+ const mode = getIonMode(this);
436
+ const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
437
+ header: interfaceOptions.header,
438
+ multiple,
439
+ value,
440
+ options: this.createOverlaySelectOptions(this.childOpts, value),
441
+ } });
442
+ /**
443
+ * Workaround for Stencil to autodefine
444
+ * ion-select-modal and ion-modal when
445
+ * using Custom Elements build.
446
+ */
447
+ // eslint-disable-next-line
448
+ if (false) {
449
+ // eslint-disable-next-line
450
+ // @ts-ignore
451
+ document.createElement('ion-select-modal');
452
+ document.createElement('ion-modal');
453
+ }
454
+ return modalController.create(modalOpts);
455
+ }
419
456
  /**
420
457
  * Close the select interface.
421
458
  */
@@ -623,7 +660,7 @@ export class Select {
623
660
  * TODO(FW-5592): Remove hasStartEndSlots condition
624
661
  */
625
662
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
626
- return (h(Host, { key: '73c571c1f8468e1c3f4fe02fbbb33ba9cbc8e989', onClick: this.onClick, class: createColorClasses(this.color, {
663
+ return (h(Host, { key: '144dfa5c49549a74fe516c65b9b8104a477ac789', onClick: this.onClick, class: createColorClasses(this.color, {
627
664
  [mode]: true,
628
665
  'in-item': inItem,
629
666
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -639,7 +676,7 @@ export class Select {
639
676
  [`select-justify-${justify}`]: justifyEnabled,
640
677
  [`select-shape-${shape}`]: shape !== undefined,
641
678
  [`select-label-placement-${labelPlacement}`]: true,
642
- }) }, h("label", { key: '2b08538cba0b9f747541d57ac18fb6a1ea658878', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '33f54373bcb02c72a9d0af2efffebc27ee2c69fe', class: "select-wrapper-inner" }, h("slot", { key: 'd1c93aec99dc1cd6410f93309cef615fe04b541b', name: "start" }), h("div", { key: '493d1a3cad9565516f855bef75685b020785ffd3', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '353a3ee5635f8a8f3be411efd6caef6c2ad74a89', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'fd5f85555db02affe954f9f4f2876ac8fe676234', class: "select-highlight" }))));
679
+ }) }, h("label", { key: '0edcfcbac575a9dccc77991531b6980d1caebf42', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '348151d90cb093f5d21c7d4a834264ac4a312c40', class: "select-wrapper-inner" }, h("slot", { key: '8b7708c7f81217435c58276da0c08bba766d9500', name: "start" }), h("div", { key: '10c520a335da0a0d1cf40f9365597beb244d3b48', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '0f15c40a5495e98e29d2a21ba21e0bc6f1c0125a', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'c87faad2e5ebf7f9453397d7ede43abd64d21294', class: "select-highlight" }))));
643
680
  }
644
681
  static get is() { return "ion-select"; }
645
682
  static get encapsulation() { return "shadow"; }
@@ -761,7 +798,7 @@ export class Select {
761
798
  "mutable": false,
762
799
  "complexType": {
763
800
  "original": "SelectInterface",
764
- "resolved": "\"action-sheet\" | \"alert\" | \"popover\"",
801
+ "resolved": "\"action-sheet\" | \"alert\" | \"modal\" | \"popover\"",
765
802
  "references": {
766
803
  "SelectInterface": {
767
804
  "location": "import",
@@ -774,7 +811,7 @@ export class Select {
774
811
  "optional": false,
775
812
  "docs": {
776
813
  "tags": [],
777
- "text": "The interface the select should use: `action-sheet`, `popover` or `alert`."
814
+ "text": "The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`."
778
815
  },
779
816
  "attribute": "interface",
780
817
  "reflect": false,
@@ -792,7 +829,7 @@ export class Select {
792
829
  "optional": false,
793
830
  "docs": {
794
831
  "tags": [],
795
- "text": "Any additional options that the `alert`, `action-sheet` or `popover` interface\ncan take. See the [ion-alert docs](./alert), the\n[ion-action-sheet docs](./action-sheet) and the\n[ion-popover docs](./popover) for the\ncreate options for each interface.\n\nNote: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface."
832
+ "text": "Any additional options that the `alert`, `action-sheet` or `popover` interface\ncan take. See the [ion-alert docs](./alert), the\n[ion-action-sheet docs](./action-sheet), the\n[ion-popover docs](./popover), and the [ion-modal docs](./modal) for the\ncreate options for each interface.\n\nNote: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface."
796
833
  },
797
834
  "attribute": "interface-options",
798
835
  "reflect": false,
@@ -1143,6 +1180,14 @@ export class Select {
1143
1180
  "HTMLElement": {
1144
1181
  "location": "global",
1145
1182
  "id": "global::HTMLElement"
1183
+ },
1184
+ "HTMLIonRadioElement": {
1185
+ "location": "global",
1186
+ "id": "global::HTMLIonRadioElement"
1187
+ },
1188
+ "HTMLIonCheckboxElement": {
1189
+ "location": "global",
1190
+ "id": "global::HTMLIonCheckboxElement"
1146
1191
  }
1147
1192
  },
1148
1193
  "return": "Promise<any>"
@@ -0,0 +1,3 @@
1
+ :host {
2
+ height: 100%;
3
+ }
@@ -0,0 +1,159 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { getIonMode } from "../../global/ionic-global";
5
+ import { Host, forceUpdate, h } from "@stencil/core";
6
+ import { safeCall } from "../../utils/overlays";
7
+ import { getClassMap } from "../../utils/theme";
8
+ export class SelectModal {
9
+ constructor() {
10
+ this.header = undefined;
11
+ this.multiple = undefined;
12
+ this.options = [];
13
+ }
14
+ closeModal() {
15
+ const modal = this.el.closest('ion-modal');
16
+ if (modal) {
17
+ modal.dismiss();
18
+ }
19
+ }
20
+ findOptionFromEvent(ev) {
21
+ const { options } = this;
22
+ return options.find((o) => o.value === ev.target.value);
23
+ }
24
+ getValues(ev) {
25
+ const { multiple, options } = this;
26
+ if (multiple) {
27
+ // this is a modal with checkboxes (multiple value select)
28
+ // return an array of all the checked values
29
+ return options.filter((o) => o.checked).map((o) => o.value);
30
+ }
31
+ // this is a modal with radio buttons (single value select)
32
+ // return the value that was clicked, otherwise undefined
33
+ const option = ev ? this.findOptionFromEvent(ev) : null;
34
+ return option ? option.value : undefined;
35
+ }
36
+ callOptionHandler(ev) {
37
+ const option = this.findOptionFromEvent(ev);
38
+ const values = this.getValues(ev);
39
+ if (option === null || option === void 0 ? void 0 : option.handler) {
40
+ safeCall(option.handler, values);
41
+ }
42
+ }
43
+ setChecked(ev) {
44
+ const { multiple } = this;
45
+ const option = this.findOptionFromEvent(ev);
46
+ // this is a modal with checkboxes (multiple value select)
47
+ // we need to set the checked value for this option
48
+ if (multiple && option) {
49
+ option.checked = ev.detail.checked;
50
+ }
51
+ }
52
+ renderRadioOptions() {
53
+ const checked = this.options.filter((o) => o.checked).map((o) => o.value)[0];
54
+ return (h("ion-radio-group", { value: checked, onIonChange: (ev) => this.callOptionHandler(ev) }, this.options.map((option) => (h("ion-item", { class: Object.assign({
55
+ // TODO FW-4784
56
+ 'item-radio-checked': option.value === checked
57
+ }, getClassMap(option.cssClass)) }, h("ion-radio", { value: option.value, disabled: option.disabled, justify: "start", labelPlacement: "end", onClick: () => this.closeModal(), onKeyUp: (ev) => {
58
+ if (ev.key === ' ') {
59
+ /**
60
+ * Selecting a radio option with keyboard navigation,
61
+ * either through the Enter or Space keys, should
62
+ * dismiss the modal.
63
+ */
64
+ this.closeModal();
65
+ }
66
+ } }, option.text))))));
67
+ }
68
+ renderCheckboxOptions() {
69
+ return this.options.map((option) => (h("ion-item", { class: Object.assign({
70
+ // TODO FW-4784
71
+ 'item-checkbox-checked': option.checked
72
+ }, getClassMap(option.cssClass)) }, h("ion-checkbox", { value: option.value, disabled: option.disabled, checked: option.checked, justify: "start", labelPlacement: "end", onIonChange: (ev) => {
73
+ this.setChecked(ev);
74
+ this.callOptionHandler(ev);
75
+ // TODO FW-4784
76
+ forceUpdate(this);
77
+ } }, option.text))));
78
+ }
79
+ render() {
80
+ return (h(Host, { key: 'f4b92f4fc3d646f9a327e43a9622abaf69659c28', class: getIonMode(this) }, h("ion-header", { key: '11232ef496e7abd69e55cef988963a4869a7b01e' }, h("ion-toolbar", { key: 'e7c41878691a504d44c658db02807867df542588' }, this.header !== undefined && h("ion-title", { key: 'fcf9d33e0f3e0076ff14805de68848f9ef199cca' }, this.header), h("ion-buttons", { key: '748a967ae0ce68bc2fd018a6b9ebe0e4b810f6ac', slot: "end" }, h("ion-button", { key: 'f5e60791870b5085a31b7af70ed4bb3fb83eb185', onClick: () => this.closeModal() }, "Close")))), h("ion-content", { key: '159797957b6f788a9b393d91864c18db34481c68' }, h("ion-list", { key: '4124554fe8b2411637cbf02f08e50e0d8f804175' }, this.multiple === true ? this.renderCheckboxOptions() : this.renderRadioOptions()))));
81
+ }
82
+ static get is() { return "ion-select-modal"; }
83
+ static get encapsulation() { return "scoped"; }
84
+ static get originalStyleUrls() {
85
+ return {
86
+ "ios": ["select-modal.ios.scss"],
87
+ "md": ["select-modal.md.scss"],
88
+ "ionic": ["select-modal.md.scss"]
89
+ };
90
+ }
91
+ static get styleUrls() {
92
+ return {
93
+ "ios": ["select-modal.ios.css"],
94
+ "md": ["select-modal.md.css"],
95
+ "ionic": ["select-modal.md.css"]
96
+ };
97
+ }
98
+ static get properties() {
99
+ return {
100
+ "header": {
101
+ "type": "string",
102
+ "mutable": false,
103
+ "complexType": {
104
+ "original": "string",
105
+ "resolved": "string | undefined",
106
+ "references": {}
107
+ },
108
+ "required": false,
109
+ "optional": true,
110
+ "docs": {
111
+ "tags": [],
112
+ "text": ""
113
+ },
114
+ "attribute": "header",
115
+ "reflect": false
116
+ },
117
+ "multiple": {
118
+ "type": "boolean",
119
+ "mutable": false,
120
+ "complexType": {
121
+ "original": "boolean",
122
+ "resolved": "boolean | undefined",
123
+ "references": {}
124
+ },
125
+ "required": false,
126
+ "optional": true,
127
+ "docs": {
128
+ "tags": [],
129
+ "text": ""
130
+ },
131
+ "attribute": "multiple",
132
+ "reflect": false
133
+ },
134
+ "options": {
135
+ "type": "unknown",
136
+ "mutable": false,
137
+ "complexType": {
138
+ "original": "SelectModalOption[]",
139
+ "resolved": "SelectModalOption[]",
140
+ "references": {
141
+ "SelectModalOption": {
142
+ "location": "import",
143
+ "path": "./select-modal-interface",
144
+ "id": "src/components/select-modal/select-modal-interface.ts::SelectModalOption"
145
+ }
146
+ }
147
+ },
148
+ "required": false,
149
+ "optional": false,
150
+ "docs": {
151
+ "tags": [],
152
+ "text": ""
153
+ },
154
+ "defaultValue": "[]"
155
+ }
156
+ };
157
+ }
158
+ static get elementRef() { return "el"; }
159
+ }
@@ -0,0 +1,110 @@
1
+ :host {
2
+ height: 100%;
3
+ }
4
+
5
+ /**
6
+ * A heuristic that applies CSS to tablet
7
+ * viewports.
8
+ *
9
+ * Usage:
10
+ * @include tablet-viewport() {
11
+ * :host {
12
+ * background-color: green;
13
+ * }
14
+ * }
15
+ */
16
+ /**
17
+ * A heuristic that applies CSS to mobile
18
+ * viewports (i.e. phones, not tablets).
19
+ *
20
+ * Usage:
21
+ * @include mobile-viewport() {
22
+ * :host {
23
+ * background-color: blue;
24
+ * }
25
+ * }
26
+ */
27
+ /**
28
+ * Convert a font size to a dynamic font size.
29
+ * Fonts that participate in Dynamic Type should use
30
+ * dynamic font sizes.
31
+ * @param size - The initial font size including the unit (i.e. px or pt)
32
+ * @param unit (optional) - The unit to convert to. Use this if you want to
33
+ * convert to a unit other than $baselineUnit.
34
+ */
35
+ /**
36
+ * Convert a font size to a dynamic font size but impose
37
+ * a maximum font size.
38
+ * @param size - The initial font size including the unit (i.e. px or pt)
39
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
40
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
41
+ * convert to a unit other than $baselineUnit.
42
+ */
43
+ /**
44
+ * Convert a font size to a dynamic font size but impose
45
+ * a minimum font size.
46
+ * @param size - The initial font size including the unit (i.e. px or pt)
47
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
48
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
49
+ * convert to a unit other than $baselineUnit.
50
+ */
51
+ /**
52
+ * Convert a font size to a dynamic font size but impose
53
+ * maximum and minimum font sizes.
54
+ * @param size - The initial font size including the unit (i.e. px or pt)
55
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
56
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
57
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
58
+ * convert to a unit other than $baselineUnit.
59
+ */
60
+ /**
61
+ * A heuristic that applies CSS to tablet
62
+ * viewports.
63
+ *
64
+ * Usage:
65
+ * @include tablet-viewport() {
66
+ * :host {
67
+ * background-color: green;
68
+ * }
69
+ * }
70
+ */
71
+ /**
72
+ * A heuristic that applies CSS to mobile
73
+ * viewports (i.e. phones, not tablets).
74
+ *
75
+ * Usage:
76
+ * @include mobile-viewport() {
77
+ * :host {
78
+ * background-color: blue;
79
+ * }
80
+ * }
81
+ */
82
+ ion-list ion-radio::part(container) {
83
+ display: none;
84
+ }
85
+
86
+ ion-list ion-radio::part(label) {
87
+ margin-left: 0;
88
+ margin-right: 0;
89
+ margin-top: 0;
90
+ margin-bottom: 0;
91
+ }
92
+
93
+ ion-item {
94
+ --inner-border-width: 0;
95
+ }
96
+
97
+ .item-radio-checked {
98
+ --background: rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08);
99
+ --background-focused: var(--ion-color-primary, #0054e9);
100
+ --background-focused-opacity: 0.2;
101
+ --background-hover: var(--ion-color-primary, #0054e9);
102
+ --background-hover-opacity: 0.12;
103
+ }
104
+
105
+ .item-checkbox-checked {
106
+ --background-activated: var(--ion-item-color, var(--ion-text-color, #000));
107
+ --background-focused: var(--ion-item-color, var(--ion-text-color, #000));
108
+ --background-hover: var(--ion-item-color, var(--ion-text-color, #000));
109
+ --color: var(--ion-color-primary, #0054e9);
110
+ }
@@ -0,0 +1,48 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ export class SelectModalPage {
6
+ constructor(page) {
7
+ this.options = [];
8
+ this.page = page;
9
+ }
10
+ async setup(config, options, multiple = false) {
11
+ const { page } = this;
12
+ await page.setContent(`
13
+ <ion-modal>
14
+ <ion-select-modal></ion-select-modal>
15
+ </ion-modal>
16
+ <script>
17
+ const selectModal = document.querySelector('ion-select-modal');
18
+ selectModal.options = ${JSON.stringify(options)};
19
+ selectModal.multiple = ${multiple};
20
+ </script>
21
+ `, config);
22
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
23
+ this.ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
24
+ this.modal = page.locator('ion-modal');
25
+ this.selectModal = page.locator('ion-select-modal');
26
+ this.multiple = multiple;
27
+ this.options = options;
28
+ await this.modal.evaluate((modal) => modal.present());
29
+ await ionModalDidPresent.next();
30
+ }
31
+ async screenshot(screenshot, name) {
32
+ await expect(this.selectModal).toHaveScreenshot(screenshot(name));
33
+ }
34
+ async clickOption(value) {
35
+ const option = this.getOption(value);
36
+ await option.click();
37
+ }
38
+ async pressSpaceOnOption(value) {
39
+ const option = this.getOption(value);
40
+ await option.press('Space');
41
+ }
42
+ getOption(value) {
43
+ const { multiple, selectModal } = this;
44
+ const selector = multiple ? 'ion-checkbox' : 'ion-radio';
45
+ const index = this.options.findIndex((o) => o.value === value);
46
+ return selectModal.locator(selector).nth(index);
47
+ }
48
+ }
@@ -10,7 +10,7 @@ export class SelectOption {
10
10
  this.value = undefined;
11
11
  }
12
12
  render() {
13
- return h(Host, { key: 'ba5a9c695c53fe0802af11a49f4305a9b8f71773', role: "option", id: this.inputId, class: getIonMode(this) });
13
+ return h(Host, { key: '2e6fa159464f04f6d8720f960141f67918bc7534', role: "option", id: this.inputId, class: getIonMode(this) });
14
14
  }
15
15
  static get is() { return "ion-select-option"; }
16
16
  static get encapsulation() { return "shadow"; }
@@ -102,7 +102,7 @@ export class SelectPopover {
102
102
  render() {
103
103
  const { header, message, options, subHeader } = this;
104
104
  const hasSubHeaderOrMessage = subHeader !== undefined || message !== undefined;
105
- return (h(Host, { key: '302553a2eec4d1442751b8af28b7c9bd3487fd5d', class: getIonMode(this) }, h("ion-list", { key: '39ae8579e6fe3bae2c7504147268ad5c82fd27e6' }, header !== undefined && h("ion-list-header", { key: 'e0e6686380d188f46c593e1bb25287dcf08c75c2' }, header), hasSubHeaderOrMessage && (h("ion-item", { key: '8a2d8652db269593c0ba7d767277e12c2b06144d' }, h("ion-label", { key: 'a30cc0ecf95d5bdd6421ee1683922c1b853e98ea', class: "ion-text-wrap" }, subHeader !== undefined && h("h3", { key: 'c298459ca450123808a08d65660825b2c26d00e5' }, subHeader), message !== undefined && h("p", { key: 'ed895fbaec020e809021138401341b6fd7675035' }, message)))), this.renderOptions(options))));
105
+ return (h(Host, { key: 'dd0990db4de4f175b176b27f35501dd1604ca400', class: getIonMode(this) }, h("ion-list", { key: 'cea2bc3687b8b2490a2a9ff4a1e16cd34169558e' }, header !== undefined && h("ion-list-header", { key: '194aebb53453c43f913daae45a1a3066a1708c4c' }, header), hasSubHeaderOrMessage && (h("ion-item", { key: 'b706b07a3c63ad8104d2db413e210c735ec1bec9' }, h("ion-label", { key: '6e52b5b4cf6b04ff3dd5671d64264233de4190d5', class: "ion-text-wrap" }, subHeader !== undefined && h("h3", { key: '6ef4440d17f5db8c96c63b9aa5073f4fe4b8ad62' }, subHeader), message !== undefined && h("p", { key: 'c7b3b76c30ecd606c0e985a0258c13d3a75756e7' }, message)))), this.renderOptions(options))));
106
106
  }
107
107
  static get is() { return "ion-select-popover"; }
108
108
  static get encapsulation() { return "scoped"; }
@@ -25,11 +25,11 @@ export class SkeletonText {
25
25
  const animated = this.animated && config.getBoolean('animated', true);
26
26
  const inMedia = hostContext('ion-avatar', this.el) || hostContext('ion-thumbnail', this.el);
27
27
  const mode = getIonMode(this);
28
- return (h(Host, { key: '1a3e78e9a6f740d609d1f0b7a16cb6eff4a2d617', class: {
28
+ return (h(Host, { key: 'fdfabf9364caf507450239b62be24f08873bd650', class: {
29
29
  [mode]: true,
30
30
  'skeleton-text-animated': animated,
31
31
  'in-media': inMedia,
32
- } }, h("span", { key: 'be3eabe196ec6e8ec19857375ba30f4c8aa58e7f' }, "\u00A0")));
32
+ } }, h("span", { key: '3482c88dcc177547185ce87972afa064a542367d' }, "\u00A0")));
33
33
  }
34
34
  static get is() { return "ion-skeleton-text"; }
35
35
  static get encapsulation() { return "shadow"; }
@@ -39,7 +39,7 @@ export class Spinner {
39
39
  svgs.push(buildLine(spinner, duration, i, spinner.lines));
40
40
  }
41
41
  }
42
- return (h(Host, { key: '50cbaed55eeab15292447d106a80b93db4cb40de', class: createColorClasses(self.color, {
42
+ return (h(Host, { key: '9d30ee9f5aa0dd0e220da07e75d05b8b2435224d', class: createColorClasses(self.color, {
43
43
  [mode]: true,
44
44
  [`spinner-${spinnerName}`]: true,
45
45
  'spinner-paused': self.paused || config.getBoolean('_testing'),
@@ -118,12 +118,12 @@ export class SplitPane {
118
118
  }
119
119
  render() {
120
120
  const mode = getIonMode(this);
121
- return (h(Host, { key: 'd54c356cd4bff7e55325160882dea8249f47f388', class: {
121
+ return (h(Host, { key: '1ca0b0299d03605bb358112ca56cbafbe58f00f5', class: {
122
122
  [mode]: true,
123
123
  // Used internally for styling
124
124
  [`split-pane-${mode}`]: true,
125
125
  'split-pane-visible': this.visible,
126
- } }, h("slot", { key: 'af62690d0fd686cfbd29d888c79eda9001f13e2f' })));
126
+ } }, h("slot", { key: 'abe231361727ae7fc63edd592a4490caac1909fb' })));
127
127
  }
128
128
  static get is() { return "ion-split-pane"; }
129
129
  static get encapsulation() { return "shadow"; }