@ionic/vue 8.8.19-dev.11786610762.137bbb21 → 8.8.19-dev.11786735826.1fad7c0a

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 (61) hide show
  1. package/README.md +1 -0
  2. package/css/core.css +1 -1
  3. package/css/core.css.map +1 -1
  4. package/css/display.css +1 -1
  5. package/css/display.css.map +1 -1
  6. package/css/flex-utils.css +1 -1
  7. package/css/flex-utils.css.map +1 -1
  8. package/css/float-elements.css.map +1 -1
  9. package/css/global.bundle.css.map +1 -1
  10. package/css/ionic-swiper.css +1 -1
  11. package/css/ionic-swiper.css.map +1 -1
  12. package/css/ionic.bundle.css +1 -1
  13. package/css/ionic.bundle.css.map +1 -1
  14. package/css/normalize.css.map +1 -1
  15. package/css/padding.css.map +1 -1
  16. package/css/palettes/dark.always.css.map +1 -1
  17. package/css/palettes/dark.class.css.map +1 -1
  18. package/css/palettes/dark.system.css.map +1 -1
  19. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  20. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  21. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  22. package/css/palettes/high-contrast.always.css.map +1 -1
  23. package/css/palettes/high-contrast.class.css.map +1 -1
  24. package/css/palettes/high-contrast.system.css.map +1 -1
  25. package/css/structure.css.map +1 -1
  26. package/css/text-alignment.css.map +1 -1
  27. package/css/text-transformation.css.map +1 -1
  28. package/css/typography.css.map +1 -1
  29. package/css/utils.bundle.css +1 -1
  30. package/css/utils.bundle.css.map +1 -1
  31. package/dist/index.js +380 -319
  32. package/dist/index.js.map +1 -1
  33. package/dist/types/components/IonPage.d.ts +5 -5
  34. package/dist/types/components/IonRouterOutlet.d.ts +16 -4
  35. package/dist/types/components/IonTabBar.d.ts +31 -11
  36. package/dist/types/components/IonTabButton.d.ts +6 -6
  37. package/dist/types/components/IonTabs.d.ts +9 -9
  38. package/dist/types/components/Overlays.d.ts +0 -1
  39. package/dist/types/controllers.d.ts +1 -9
  40. package/dist/types/index.d.ts +2 -2
  41. package/dist/types/proxies.d.ts +0 -3
  42. package/dist/vetur/attributes.json +111 -1719
  43. package/dist/vetur/tags.json +45 -266
  44. package/dist/web-types.json +213 -2043
  45. package/package.json +20 -10
  46. package/css/ionic/bundle.ionic.css +0 -1
  47. package/css/ionic/bundle.ionic.css.map +0 -1
  48. package/css/ionic/core.ionic.css +0 -1
  49. package/css/ionic/core.ionic.css.map +0 -1
  50. package/css/ionic/global.bundle.ionic.css +0 -1
  51. package/css/ionic/global.bundle.ionic.css.map +0 -1
  52. package/css/ionic/ionic-swiper.ionic.css +0 -1
  53. package/css/ionic/ionic-swiper.ionic.css.map +0 -1
  54. package/css/ionic/link.ionic.css +0 -1
  55. package/css/ionic/link.ionic.css.map +0 -1
  56. package/css/ionic/structure.ionic.css +0 -1
  57. package/css/ionic/structure.ionic.css.map +0 -1
  58. package/css/ionic/typography.ionic.css +0 -1
  59. package/css/ionic/typography.ionic.css.map +0 -1
  60. package/css/ionic/utils.bundle.ionic.css +0 -1
  61. package/css/ionic/utils.bundle.ionic.css.map +0 -1
package/dist/index.js CHANGED
@@ -19,84 +19,80 @@ import { defineCustomElement as defineCustomElement$g } from '@ionic/core/compon
19
19
  import { defineCustomElement as defineCustomElement$h } from '@ionic/core/components/ion-content.js';
20
20
  import { defineCustomElement as defineCustomElement$i } from '@ionic/core/components/ion-datetime.js';
21
21
  import { defineCustomElement as defineCustomElement$j } from '@ionic/core/components/ion-datetime-button.js';
22
- import { defineCustomElement as defineCustomElement$k } from '@ionic/core/components/ion-divider.js';
23
- import { defineCustomElement as defineCustomElement$l } from '@ionic/core/components/ion-fab.js';
24
- import { defineCustomElement as defineCustomElement$m } from '@ionic/core/components/ion-fab-button.js';
25
- import { defineCustomElement as defineCustomElement$n } from '@ionic/core/components/ion-fab-list.js';
26
- import { defineCustomElement as defineCustomElement$o } from '@ionic/core/components/ion-footer.js';
27
- import { defineCustomElement as defineCustomElement$p } from '@ionic/core/components/ion-gallery.js';
28
- import { defineCustomElement as defineCustomElement$q } from '@ionic/core/components/ion-gallery-item.js';
29
- import { defineCustomElement as defineCustomElement$r } from '@ionic/core/components/ion-grid.js';
30
- import { defineCustomElement as defineCustomElement$s } from '@ionic/core/components/ion-header.js';
31
- import { defineCustomElement as defineCustomElement$t } from '@ionic/core/components/ion-img.js';
32
- import { defineCustomElement as defineCustomElement$u } from '@ionic/core/components/ion-infinite-scroll.js';
33
- import { defineCustomElement as defineCustomElement$v } from '@ionic/core/components/ion-infinite-scroll-content.js';
34
- import { defineCustomElement as defineCustomElement$w } from '@ionic/core/components/ion-input.js';
35
- import { defineCustomElement as defineCustomElement$x } from '@ionic/core/components/ion-input-otp.js';
36
- import { defineCustomElement as defineCustomElement$y } from '@ionic/core/components/ion-input-password-toggle.js';
37
- import { defineCustomElement as defineCustomElement$z } from '@ionic/core/components/ion-item.js';
38
- import { defineCustomElement as defineCustomElement$A } from '@ionic/core/components/ion-item-divider.js';
39
- import { defineCustomElement as defineCustomElement$B } from '@ionic/core/components/ion-item-group.js';
40
- import { defineCustomElement as defineCustomElement$C } from '@ionic/core/components/ion-item-option.js';
41
- import { defineCustomElement as defineCustomElement$D } from '@ionic/core/components/ion-item-options.js';
42
- import { defineCustomElement as defineCustomElement$E } from '@ionic/core/components/ion-item-sliding.js';
43
- import { defineCustomElement as defineCustomElement$F } from '@ionic/core/components/ion-label.js';
44
- import { defineCustomElement as defineCustomElement$G } from '@ionic/core/components/ion-list.js';
45
- import { defineCustomElement as defineCustomElement$H } from '@ionic/core/components/ion-list-header.js';
46
- import { defineCustomElement as defineCustomElement$I } from '@ionic/core/components/ion-menu.js';
47
- import { defineCustomElement as defineCustomElement$J } from '@ionic/core/components/ion-menu-button.js';
48
- import { defineCustomElement as defineCustomElement$K } from '@ionic/core/components/ion-menu-toggle.js';
49
- import { defineCustomElement as defineCustomElement$1m } from '@ionic/core/components/ion-nav.js';
50
- import { defineCustomElement as defineCustomElement$L } from '@ionic/core/components/ion-nav-link.js';
51
- import { defineCustomElement as defineCustomElement$M } from '@ionic/core/components/ion-note.js';
52
- import { defineCustomElement as defineCustomElement$N } from '@ionic/core/components/ion-picker.js';
53
- import { defineCustomElement as defineCustomElement$O } from '@ionic/core/components/ion-picker-column.js';
54
- import { defineCustomElement as defineCustomElement$P } from '@ionic/core/components/ion-picker-column-option.js';
55
- import { defineCustomElement as defineCustomElement$Q } from '@ionic/core/components/ion-progress-bar.js';
56
- import { defineCustomElement as defineCustomElement$R } from '@ionic/core/components/ion-radio.js';
57
- import { defineCustomElement as defineCustomElement$S } from '@ionic/core/components/ion-radio-group.js';
58
- import { defineCustomElement as defineCustomElement$T } from '@ionic/core/components/ion-range.js';
59
- import { defineCustomElement as defineCustomElement$U } from '@ionic/core/components/ion-refresher.js';
60
- import { defineCustomElement as defineCustomElement$V } from '@ionic/core/components/ion-refresher-content.js';
61
- import { defineCustomElement as defineCustomElement$W } from '@ionic/core/components/ion-reorder.js';
62
- import { defineCustomElement as defineCustomElement$X } from '@ionic/core/components/ion-reorder-group.js';
63
- import { defineCustomElement as defineCustomElement$Y } from '@ionic/core/components/ion-ripple-effect.js';
64
- import { defineCustomElement as defineCustomElement$Z } from '@ionic/core/components/ion-row.js';
65
- import { defineCustomElement as defineCustomElement$_ } from '@ionic/core/components/ion-searchbar.js';
66
- import { defineCustomElement as defineCustomElement$$ } from '@ionic/core/components/ion-segment.js';
67
- import { defineCustomElement as defineCustomElement$10 } from '@ionic/core/components/ion-segment-button.js';
68
- import { defineCustomElement as defineCustomElement$11 } from '@ionic/core/components/ion-segment-content.js';
69
- import { defineCustomElement as defineCustomElement$12 } from '@ionic/core/components/ion-segment-view.js';
70
- import { defineCustomElement as defineCustomElement$13 } from '@ionic/core/components/ion-select.js';
71
- import { defineCustomElement as defineCustomElement$14 } from '@ionic/core/components/ion-select-modal.js';
72
- import { defineCustomElement as defineCustomElement$15 } from '@ionic/core/components/ion-select-option.js';
73
- import { defineCustomElement as defineCustomElement$16 } from '@ionic/core/components/ion-skeleton-text.js';
74
- import { defineCustomElement as defineCustomElement$17 } from '@ionic/core/components/ion-spinner.js';
75
- import { defineCustomElement as defineCustomElement$18 } from '@ionic/core/components/ion-split-pane.js';
76
- import { defineCustomElement as defineCustomElement$19 } from '@ionic/core/components/ion-tab.js';
77
- import { defineCustomElement as defineCustomElement$1a } from '@ionic/core/components/ion-text.js';
78
- import { defineCustomElement as defineCustomElement$1b } from '@ionic/core/components/ion-textarea.js';
79
- import { defineCustomElement as defineCustomElement$1c } from '@ionic/core/components/ion-thumbnail.js';
80
- import { defineCustomElement as defineCustomElement$1d } from '@ionic/core/components/ion-title.js';
81
- import { defineCustomElement as defineCustomElement$1e } from '@ionic/core/components/ion-toggle.js';
82
- import { defineCustomElement as defineCustomElement$1f } from '@ionic/core/components/ion-toolbar.js';
83
- import { LIFECYCLE_WILL_ENTER, LIFECYCLE_DID_ENTER, LIFECYCLE_WILL_LEAVE, LIFECYCLE_DID_LEAVE, initialize, modalController as modalController$1, popoverController as popoverController$1, alertController as alertController$1, actionSheetController as actionSheetController$1, loadingController as loadingController$1, pickerController as pickerController$1, toastController as toastController$1 } from '@ionic/core/components';
22
+ import { defineCustomElement as defineCustomElement$k } from '@ionic/core/components/ion-fab.js';
23
+ import { defineCustomElement as defineCustomElement$l } from '@ionic/core/components/ion-fab-button.js';
24
+ import { defineCustomElement as defineCustomElement$m } from '@ionic/core/components/ion-fab-list.js';
25
+ import { defineCustomElement as defineCustomElement$n } from '@ionic/core/components/ion-footer.js';
26
+ import { defineCustomElement as defineCustomElement$o } from '@ionic/core/components/ion-grid.js';
27
+ import { defineCustomElement as defineCustomElement$p } from '@ionic/core/components/ion-header.js';
28
+ import { defineCustomElement as defineCustomElement$q } from '@ionic/core/components/ion-img.js';
29
+ import { defineCustomElement as defineCustomElement$r } from '@ionic/core/components/ion-infinite-scroll.js';
30
+ import { defineCustomElement as defineCustomElement$s } from '@ionic/core/components/ion-infinite-scroll-content.js';
31
+ import { defineCustomElement as defineCustomElement$t } from '@ionic/core/components/ion-input.js';
32
+ import { defineCustomElement as defineCustomElement$u } from '@ionic/core/components/ion-input-otp.js';
33
+ import { defineCustomElement as defineCustomElement$v } from '@ionic/core/components/ion-input-password-toggle.js';
34
+ import { defineCustomElement as defineCustomElement$w } from '@ionic/core/components/ion-item.js';
35
+ import { defineCustomElement as defineCustomElement$x } from '@ionic/core/components/ion-item-divider.js';
36
+ import { defineCustomElement as defineCustomElement$y } from '@ionic/core/components/ion-item-group.js';
37
+ import { defineCustomElement as defineCustomElement$z } from '@ionic/core/components/ion-item-option.js';
38
+ import { defineCustomElement as defineCustomElement$A } from '@ionic/core/components/ion-item-options.js';
39
+ import { defineCustomElement as defineCustomElement$B } from '@ionic/core/components/ion-item-sliding.js';
40
+ import { defineCustomElement as defineCustomElement$C } from '@ionic/core/components/ion-label.js';
41
+ import { defineCustomElement as defineCustomElement$D } from '@ionic/core/components/ion-list.js';
42
+ import { defineCustomElement as defineCustomElement$E } from '@ionic/core/components/ion-list-header.js';
43
+ import { defineCustomElement as defineCustomElement$F } from '@ionic/core/components/ion-menu.js';
44
+ import { defineCustomElement as defineCustomElement$G } from '@ionic/core/components/ion-menu-button.js';
45
+ import { defineCustomElement as defineCustomElement$H } from '@ionic/core/components/ion-menu-toggle.js';
46
+ import { defineCustomElement as defineCustomElement$1j } from '@ionic/core/components/ion-nav.js';
47
+ import { defineCustomElement as defineCustomElement$I } from '@ionic/core/components/ion-nav-link.js';
48
+ import { defineCustomElement as defineCustomElement$J } from '@ionic/core/components/ion-note.js';
49
+ import { defineCustomElement as defineCustomElement$K } from '@ionic/core/components/ion-picker.js';
50
+ import { defineCustomElement as defineCustomElement$L } from '@ionic/core/components/ion-picker-column.js';
51
+ import { defineCustomElement as defineCustomElement$M } from '@ionic/core/components/ion-picker-column-option.js';
52
+ import { defineCustomElement as defineCustomElement$N } from '@ionic/core/components/ion-progress-bar.js';
53
+ import { defineCustomElement as defineCustomElement$O } from '@ionic/core/components/ion-radio.js';
54
+ import { defineCustomElement as defineCustomElement$P } from '@ionic/core/components/ion-radio-group.js';
55
+ import { defineCustomElement as defineCustomElement$Q } from '@ionic/core/components/ion-range.js';
56
+ import { defineCustomElement as defineCustomElement$R } from '@ionic/core/components/ion-refresher.js';
57
+ import { defineCustomElement as defineCustomElement$S } from '@ionic/core/components/ion-refresher-content.js';
58
+ import { defineCustomElement as defineCustomElement$T } from '@ionic/core/components/ion-reorder.js';
59
+ import { defineCustomElement as defineCustomElement$U } from '@ionic/core/components/ion-reorder-group.js';
60
+ import { defineCustomElement as defineCustomElement$V } from '@ionic/core/components/ion-ripple-effect.js';
61
+ import { defineCustomElement as defineCustomElement$W } from '@ionic/core/components/ion-row.js';
62
+ import { defineCustomElement as defineCustomElement$X } from '@ionic/core/components/ion-searchbar.js';
63
+ import { defineCustomElement as defineCustomElement$Y } from '@ionic/core/components/ion-segment.js';
64
+ import { defineCustomElement as defineCustomElement$Z } from '@ionic/core/components/ion-segment-button.js';
65
+ import { defineCustomElement as defineCustomElement$_ } from '@ionic/core/components/ion-segment-content.js';
66
+ import { defineCustomElement as defineCustomElement$$ } from '@ionic/core/components/ion-segment-view.js';
67
+ import { defineCustomElement as defineCustomElement$10 } from '@ionic/core/components/ion-select.js';
68
+ import { defineCustomElement as defineCustomElement$11 } from '@ionic/core/components/ion-select-modal.js';
69
+ import { defineCustomElement as defineCustomElement$12 } from '@ionic/core/components/ion-select-option.js';
70
+ import { defineCustomElement as defineCustomElement$13 } from '@ionic/core/components/ion-skeleton-text.js';
71
+ import { defineCustomElement as defineCustomElement$14 } from '@ionic/core/components/ion-spinner.js';
72
+ import { defineCustomElement as defineCustomElement$15 } from '@ionic/core/components/ion-split-pane.js';
73
+ import { defineCustomElement as defineCustomElement$16 } from '@ionic/core/components/ion-tab.js';
74
+ import { defineCustomElement as defineCustomElement$17 } from '@ionic/core/components/ion-text.js';
75
+ import { defineCustomElement as defineCustomElement$18 } from '@ionic/core/components/ion-textarea.js';
76
+ import { defineCustomElement as defineCustomElement$19 } from '@ionic/core/components/ion-thumbnail.js';
77
+ import { defineCustomElement as defineCustomElement$1a } from '@ionic/core/components/ion-title.js';
78
+ import { defineCustomElement as defineCustomElement$1b } from '@ionic/core/components/ion-toggle.js';
79
+ import { defineCustomElement as defineCustomElement$1c } from '@ionic/core/components/ion-toolbar.js';
80
+ import { LIFECYCLE_WILL_ENTER, LIFECYCLE_DID_ENTER, LIFECYCLE_WILL_LEAVE, LIFECYCLE_DID_LEAVE, initialize, modalController as modalController$1, popoverController as popoverController$1, alertController as alertController$1, actionSheetController as actionSheetController$1, loadingController as loadingController$1, toastController as toastController$1 } from '@ionic/core/components';
84
81
  export { IonicSafeString, IonicSlides, createAnimation, createGesture, getIonPageElement, getPlatforms, getTimeGivenProgression, iosTransitionAnimation, isPlatform, mdTransitionAnimation, menuController, openURL } from '@ionic/core/components';
85
- import { defineCustomElement as defineCustomElement$1g } from '@ionic/core/components/ion-back-button.js';
86
- import { defineCustomElement as defineCustomElement$1h } from '@ionic/core/components/ion-router-outlet.js';
82
+ import { defineCustomElement as defineCustomElement$1d } from '@ionic/core/components/ion-back-button.js';
83
+ import { defineCustomElement as defineCustomElement$1e } from '@ionic/core/components/ion-router-outlet.js';
87
84
  import { routeLocationKey, useRoute, matchedRouteKey } from 'vue-router';
88
- import { defineCustomElement as defineCustomElement$1i } from '@ionic/core/components/ion-tab-button.js';
89
- import { defineCustomElement as defineCustomElement$1j } from '@ionic/core/components/ion-tabs.js';
90
- import { defineCustomElement as defineCustomElement$1k } from '@ionic/core/components/ion-tab-bar.js';
91
- import { defineCustomElement as defineCustomElement$1l } from '@ionic/core/components/ion-app.js';
92
- import { defineCustomElement as defineCustomElement$1n } from 'ionicons/components/ion-icon.js';
93
- import { defineCustomElement as defineCustomElement$1o } from '@ionic/core/components/ion-action-sheet.js';
94
- import { defineCustomElement as defineCustomElement$1p } from '@ionic/core/components/ion-alert.js';
95
- import { defineCustomElement as defineCustomElement$1q } from '@ionic/core/components/ion-loading.js';
96
- import { defineCustomElement as defineCustomElement$1r } from '@ionic/core/components/ion-modal.js';
97
- import { defineCustomElement as defineCustomElement$1s } from '@ionic/core/components/ion-picker-legacy.js';
98
- import { defineCustomElement as defineCustomElement$1t } from '@ionic/core/components/ion-popover.js';
99
- import { defineCustomElement as defineCustomElement$1u } from '@ionic/core/components/ion-toast.js';
85
+ import { defineCustomElement as defineCustomElement$1f } from '@ionic/core/components/ion-tab-button.js';
86
+ import { defineCustomElement as defineCustomElement$1g } from '@ionic/core/components/ion-tabs.js';
87
+ import { defineCustomElement as defineCustomElement$1h } from '@ionic/core/components/ion-tab-bar.js';
88
+ import { defineCustomElement as defineCustomElement$1i } from '@ionic/core/components/ion-app.js';
89
+ import { defineCustomElement as defineCustomElement$1k } from 'ionicons/components/ion-icon.js';
90
+ import { defineCustomElement as defineCustomElement$1l } from '@ionic/core/components/ion-action-sheet.js';
91
+ import { defineCustomElement as defineCustomElement$1m } from '@ionic/core/components/ion-alert.js';
92
+ import { defineCustomElement as defineCustomElement$1n } from '@ionic/core/components/ion-loading.js';
93
+ import { defineCustomElement as defineCustomElement$1o } from '@ionic/core/components/ion-modal.js';
94
+ import { defineCustomElement as defineCustomElement$1p } from '@ionic/core/components/ion-popover.js';
95
+ import { defineCustomElement as defineCustomElement$1q } from '@ionic/core/components/ion-toast.js';
100
96
 
101
97
  const UPDATE_VALUE_EVENT = 'update:modelValue';
102
98
  const MODEL_VALUE = 'modelValue';
@@ -118,8 +114,19 @@ const DEFAULT_EMPTY_PROP$1 = { default: EMPTY_PROP$1 };
118
114
  const getComponentClasses = (classes) => {
119
115
  return classes?.split(' ') || [];
120
116
  };
121
- const getElementClasses = (ref, componentClasses, defaultClasses = []) => {
122
- return [...Array.from(ref.value?.classList || []), ...defaultClasses].filter((c, i, self) => !componentClasses.has(c) && self.indexOf(c) === i);
117
+ const syncElementClasses = (ref, componentClasses, defaultClasses = []) => {
118
+ if (ref?.value) {
119
+ const element = ref.value;
120
+ // makes sure vue classes are on the actual element
121
+ componentClasses.forEach((c) => {
122
+ if (!!c && !element.classList.contains(c)) {
123
+ element.classList.add(c);
124
+ }
125
+ });
126
+ }
127
+ return [...Array.from(ref.value?.classList || []), ...defaultClasses].filter((c, i, self) => {
128
+ return !componentClasses.has(c) && self.indexOf(c) === i;
129
+ });
123
130
  };
124
131
  /**
125
132
  * Create a callback to define a Vue component wrapper around a Web Component.
@@ -135,8 +142,9 @@ const getElementClasses = (ref, componentClasses, defaultClasses = []) => {
135
142
  * to customElements.define. Only set if `includeImportCustomElements: true` in your config.
136
143
  * @prop modelProp - The prop that v-model binds to (i.e. value)
137
144
  * @prop modelUpdateEvent - The event that is fired from your Web Component when the value changes (i.e. ionChange)
145
+ * @prop modelUpdateEventAttribute - Property to read value from when the value changes.
138
146
  */
139
- const defineContainer = (name, defineCustomElement, componentProps = [], emitProps = [], modelProp, modelUpdateEvent) => {
147
+ const defineContainer = (name, defineCustomElement, componentProps = [], emitProps = [], modelProp, modelUpdateEvent, modelUpdateEventAttribute, transformTagFn) => {
140
148
  /**
141
149
  * Create a Vue component wrapper around a Web Component.
142
150
  * Note: The `props` here are not all properties on a component.
@@ -181,7 +189,7 @@ const defineContainer = (name, defineCustomElement, componentProps = [], emitPro
181
189
  */
182
190
  const vModelDirective = {
183
191
  created: (el) => {
184
- const eventsNames = (Array.isArray(modelUpdateEvent) ? modelUpdateEvent : [modelUpdateEvent]).map((ev) => ev.replace(/-([a-z])/g, (g) => g[1].toUpperCase()));
192
+ const eventsNames = Array.isArray(modelUpdateEvent) ? modelUpdateEvent : [modelUpdateEvent];
185
193
  eventsNames.forEach((eventName) => {
186
194
  el.addEventListener(eventName, (e) => {
187
195
  /**
@@ -192,7 +200,11 @@ const defineContainer = (name, defineCustomElement, componentProps = [], emitPro
192
200
  * when ionChange bubbles up from Component B.
193
201
  */
194
202
  if (e.target.tagName === el.tagName && modelProp) {
195
- modelPropValue = (e?.target)[modelProp];
203
+ const resolvePath = (object, path) => {
204
+ return path.split('.').reduce((value, key) => (value !== undefined ? value[key] : undefined), object);
205
+ };
206
+ const path = (modelUpdateEventAttribute ?? `target.${modelProp}`);
207
+ const modelPropValue = resolvePath(e, path);
196
208
  emit(UPDATE_VALUE_EVENT, modelPropValue);
197
209
  }
198
210
  });
@@ -206,6 +218,14 @@ const defineContainer = (name, defineCustomElement, componentProps = [], emitPro
206
218
  const { routerLink } = props;
207
219
  if (routerLink === EMPTY_PROP$1)
208
220
  return;
221
+ /**
222
+ * Allow modifier key clicks (ctrl/cmd/shift) to open the link in a
223
+ * new tab/window without triggering SPA navigation on the current page.
224
+ */
225
+ const mouseEv = ev;
226
+ if (mouseEv.metaKey || mouseEv.ctrlKey || mouseEv.shiftKey) {
227
+ return;
228
+ }
209
229
  if (navManager !== undefined) {
210
230
  /**
211
231
  * This prevents the browser from
@@ -246,7 +266,7 @@ const defineContainer = (name, defineCustomElement, componentProps = [], emitPro
246
266
  };
247
267
  const propsToAdd = {
248
268
  ref: containerRef,
249
- class: getElementClasses(containerRef, classes),
269
+ class: syncElementClasses(containerRef, classes),
250
270
  onClick: handleClick,
251
271
  };
252
272
  /**
@@ -294,7 +314,8 @@ const defineContainer = (name, defineCustomElement, componentProps = [], emitPro
294
314
  * vModelDirective is only needed on components that support v-model.
295
315
  * As a result, we conditionally call withDirectives with v-model components.
296
316
  */
297
- const node = h(name, propsToAdd, slots.default && slots.default());
317
+ const tagName = transformTagFn ? transformTagFn(name) : name;
318
+ const node = h(tagName, propsToAdd, slots.default && slots.default());
298
319
  return modelProp === undefined ? node : withDirectives(node, [[vModelDirective]]);
299
320
  };
300
321
  }, {
@@ -321,18 +342,13 @@ const IonAccordionGroup = /*@__PURE__*/ defineContainer('ion-accordion-group', d
321
342
  'disabled',
322
343
  'readonly',
323
344
  'expand',
324
- 'shape',
325
345
  'ionChange',
326
346
  'ionValueChange'
327
347
  ], [
328
348
  'ionChange',
329
349
  'ionValueChange'
330
- ], 'value', 'ion-change');
331
- const IonAvatar = /*@__PURE__*/ defineContainer('ion-avatar', defineCustomElement$2, [
332
- 'size',
333
- 'shape',
334
- 'disabled'
335
- ]);
350
+ ], 'value', 'ionChange', undefined);
351
+ const IonAvatar = /*@__PURE__*/ defineContainer('ion-avatar', defineCustomElement$2);
336
352
  const IonBackdrop = /*@__PURE__*/ defineContainer('ion-backdrop', defineCustomElement$3, [
337
353
  'visible',
338
354
  'tappable',
@@ -342,11 +358,7 @@ const IonBackdrop = /*@__PURE__*/ defineContainer('ion-backdrop', defineCustomEl
342
358
  'ionBackdropTap'
343
359
  ]);
344
360
  const IonBadge = /*@__PURE__*/ defineContainer('ion-badge', defineCustomElement$4, [
345
- 'color',
346
- 'hue',
347
- 'shape',
348
- 'size',
349
- 'vertical'
361
+ 'color'
350
362
  ]);
351
363
  const IonBreadcrumb = /*@__PURE__*/ defineContainer('ion-breadcrumb', defineCustomElement$5, [
352
364
  'collapsed',
@@ -415,7 +427,6 @@ const IonCard = /*@__PURE__*/ defineContainer('ion-card', defineCustomElement$9,
415
427
  'rel',
416
428
  'routerDirection',
417
429
  'routerAnimation',
418
- 'shape',
419
430
  'target'
420
431
  ]);
421
432
  const IonCardContent = /*@__PURE__*/ defineContainer('ion-card-content', defineCustomElement$a);
@@ -442,8 +453,6 @@ const IonCheckbox = /*@__PURE__*/ defineContainer('ion-checkbox', defineCustomEl
442
453
  'justify',
443
454
  'alignment',
444
455
  'required',
445
- 'shape',
446
- 'size',
447
456
  'ionChange',
448
457
  'ionFocus',
449
458
  'ionBlur'
@@ -451,14 +460,11 @@ const IonCheckbox = /*@__PURE__*/ defineContainer('ion-checkbox', defineCustomEl
451
460
  'ionChange',
452
461
  'ionFocus',
453
462
  'ionBlur'
454
- ], 'checked', 'ion-change');
463
+ ], 'checked', 'ionChange', undefined);
455
464
  const IonChip = /*@__PURE__*/ defineContainer('ion-chip', defineCustomElement$f, [
456
465
  'color',
457
466
  'outline',
458
- 'disabled',
459
- 'hue',
460
- 'shape',
461
- 'size'
467
+ 'disabled'
462
468
  ]);
463
469
  const IonCol = /*@__PURE__*/ defineContainer('ion-col', defineCustomElement$g, [
464
470
  'offset',
@@ -467,12 +473,6 @@ const IonCol = /*@__PURE__*/ defineContainer('ion-col', defineCustomElement$g, [
467
473
  'offsetMd',
468
474
  'offsetLg',
469
475
  'offsetXl',
470
- 'order',
471
- 'orderXs',
472
- 'orderSm',
473
- 'orderMd',
474
- 'orderLg',
475
- 'orderXl',
476
476
  'pull',
477
477
  'pullXs',
478
478
  'pullSm',
@@ -555,23 +555,19 @@ const IonDatetime = /*@__PURE__*/ defineContainer('ion-datetime', defineCustomEl
555
555
  'ionBlur',
556
556
  'ionStyle',
557
557
  'ionRender'
558
- ], 'value', 'ion-change');
558
+ ], 'value', 'ionChange', undefined);
559
559
  const IonDatetimeButton = /*@__PURE__*/ defineContainer('ion-datetime-button', defineCustomElement$j, [
560
560
  'color',
561
561
  'disabled',
562
562
  'datetime'
563
563
  ]);
564
- const IonDivider = /*@__PURE__*/ defineContainer('ion-divider', defineCustomElement$k, [
565
- 'spacing',
566
- 'inset'
567
- ]);
568
- const IonFab = /*@__PURE__*/ defineContainer('ion-fab', defineCustomElement$l, [
564
+ const IonFab = /*@__PURE__*/ defineContainer('ion-fab', defineCustomElement$k, [
569
565
  'horizontal',
570
566
  'vertical',
571
567
  'edge',
572
568
  'activated'
573
569
  ]);
574
- const IonFabButton = /*@__PURE__*/ defineContainer('ion-fab-button', defineCustomElement$m, [
570
+ const IonFabButton = /*@__PURE__*/ defineContainer('ion-fab-button', defineCustomElement$l, [
575
571
  'color',
576
572
  'activated',
577
573
  'disabled',
@@ -593,32 +589,22 @@ const IonFabButton = /*@__PURE__*/ defineContainer('ion-fab-button', defineCusto
593
589
  'ionFocus',
594
590
  'ionBlur'
595
591
  ]);
596
- const IonFabList = /*@__PURE__*/ defineContainer('ion-fab-list', defineCustomElement$n, [
592
+ const IonFabList = /*@__PURE__*/ defineContainer('ion-fab-list', defineCustomElement$m, [
597
593
  'activated',
598
594
  'side'
599
595
  ]);
600
- const IonFooter = /*@__PURE__*/ defineContainer('ion-footer', defineCustomElement$o, [
601
- 'scrollEffect',
596
+ const IonFooter = /*@__PURE__*/ defineContainer('ion-footer', defineCustomElement$n, [
602
597
  'collapse',
603
598
  'translucent'
604
599
  ]);
605
- const IonGallery = /*@__PURE__*/ defineContainer('ion-gallery', defineCustomElement$p, [
606
- 'layout',
607
- 'order',
608
- 'columns',
609
- 'gap'
610
- ]);
611
- const IonGalleryItem = /*@__PURE__*/ defineContainer('ion-gallery-item', defineCustomElement$q);
612
- const IonGrid = /*@__PURE__*/ defineContainer('ion-grid', defineCustomElement$r, [
600
+ const IonGrid = /*@__PURE__*/ defineContainer('ion-grid', defineCustomElement$o, [
613
601
  'fixed'
614
602
  ]);
615
- const IonHeader = /*@__PURE__*/ defineContainer('ion-header', defineCustomElement$s, [
616
- 'scrollEffect',
603
+ const IonHeader = /*@__PURE__*/ defineContainer('ion-header', defineCustomElement$p, [
617
604
  'collapse',
618
- 'divider',
619
605
  'translucent'
620
606
  ]);
621
- const IonImg = /*@__PURE__*/ defineContainer('ion-img', defineCustomElement$t, [
607
+ const IonImg = /*@__PURE__*/ defineContainer('ion-img', defineCustomElement$q, [
622
608
  'alt',
623
609
  'src',
624
610
  'ionImgWillLoad',
@@ -629,20 +615,19 @@ const IonImg = /*@__PURE__*/ defineContainer('ion-img', defineCustomElement$t, [
629
615
  'ionImgDidLoad',
630
616
  'ionError'
631
617
  ]);
632
- const IonInfiniteScroll = /*@__PURE__*/ defineContainer('ion-infinite-scroll', defineCustomElement$u, [
618
+ const IonInfiniteScroll = /*@__PURE__*/ defineContainer('ion-infinite-scroll', defineCustomElement$r, [
633
619
  'threshold',
634
620
  'disabled',
635
621
  'position',
636
- 'preserveRerenderScrollPosition',
637
622
  'ionInfinite'
638
623
  ], [
639
624
  'ionInfinite'
640
625
  ]);
641
- const IonInfiniteScrollContent = /*@__PURE__*/ defineContainer('ion-infinite-scroll-content', defineCustomElement$v, [
626
+ const IonInfiniteScrollContent = /*@__PURE__*/ defineContainer('ion-infinite-scroll-content', defineCustomElement$s, [
642
627
  'loadingSpinner',
643
628
  'loadingText'
644
629
  ]);
645
- const IonInput = /*@__PURE__*/ defineContainer('ion-input', defineCustomElement$w, [
630
+ const IonInput = /*@__PURE__*/ defineContainer('ion-input', defineCustomElement$t, [
646
631
  'color',
647
632
  'autocapitalize',
648
633
  'autocomplete',
@@ -675,7 +660,6 @@ const IonInput = /*@__PURE__*/ defineContainer('ion-input', defineCustomElement$
675
660
  'shape',
676
661
  'spellcheck',
677
662
  'step',
678
- 'size',
679
663
  'type',
680
664
  'value',
681
665
  'ionInput',
@@ -687,8 +671,8 @@ const IonInput = /*@__PURE__*/ defineContainer('ion-input', defineCustomElement$
687
671
  'ionChange',
688
672
  'ionBlur',
689
673
  'ionFocus'
690
- ], 'value', 'ion-input');
691
- const IonInputOtp = /*@__PURE__*/ defineContainer('ion-input-otp', defineCustomElement$x, [
674
+ ], 'value', 'ionInput', undefined);
675
+ const IonInputOtp = /*@__PURE__*/ defineContainer('ion-input-otp', defineCustomElement$u, [
692
676
  'autocapitalize',
693
677
  'color',
694
678
  'disabled',
@@ -713,14 +697,14 @@ const IonInputOtp = /*@__PURE__*/ defineContainer('ion-input-otp', defineCustomE
713
697
  'ionComplete',
714
698
  'ionBlur',
715
699
  'ionFocus'
716
- ], 'value', 'ion-input');
717
- const IonInputPasswordToggle = /*@__PURE__*/ defineContainer('ion-input-password-toggle', defineCustomElement$y, [
700
+ ], 'value', 'ionInput', undefined);
701
+ const IonInputPasswordToggle = /*@__PURE__*/ defineContainer('ion-input-password-toggle', defineCustomElement$v, [
718
702
  'color',
719
703
  'showIcon',
720
704
  'hideIcon',
721
705
  'type'
722
706
  ]);
723
- const IonItem = /*@__PURE__*/ defineContainer('ion-item', defineCustomElement$z, [
707
+ const IonItem = /*@__PURE__*/ defineContainer('ion-item', defineCustomElement$w, [
724
708
  'color',
725
709
  'button',
726
710
  'detail',
@@ -735,36 +719,34 @@ const IonItem = /*@__PURE__*/ defineContainer('ion-item', defineCustomElement$z,
735
719
  'target',
736
720
  'type'
737
721
  ]);
738
- const IonItemDivider = /*@__PURE__*/ defineContainer('ion-item-divider', defineCustomElement$A, [
722
+ const IonItemDivider = /*@__PURE__*/ defineContainer('ion-item-divider', defineCustomElement$x, [
739
723
  'color',
740
724
  'sticky'
741
725
  ]);
742
- const IonItemGroup = /*@__PURE__*/ defineContainer('ion-item-group', defineCustomElement$B);
743
- const IonItemOption = /*@__PURE__*/ defineContainer('ion-item-option', defineCustomElement$C, [
726
+ const IonItemGroup = /*@__PURE__*/ defineContainer('ion-item-group', defineCustomElement$y);
727
+ const IonItemOption = /*@__PURE__*/ defineContainer('ion-item-option', defineCustomElement$z, [
744
728
  'color',
745
729
  'disabled',
746
730
  'download',
747
731
  'expandable',
748
732
  'href',
749
- 'hue',
750
733
  'rel',
751
734
  'target',
752
- 'type',
753
- 'shape'
735
+ 'type'
754
736
  ]);
755
- const IonItemOptions = /*@__PURE__*/ defineContainer('ion-item-options', defineCustomElement$D, [
737
+ const IonItemOptions = /*@__PURE__*/ defineContainer('ion-item-options', defineCustomElement$A, [
756
738
  'side',
757
739
  'ionSwipe'
758
740
  ], [
759
741
  'ionSwipe'
760
742
  ]);
761
- const IonItemSliding = /*@__PURE__*/ defineContainer('ion-item-sliding', defineCustomElement$E, [
743
+ const IonItemSliding = /*@__PURE__*/ defineContainer('ion-item-sliding', defineCustomElement$B, [
762
744
  'disabled',
763
745
  'ionDrag'
764
746
  ], [
765
747
  'ionDrag'
766
748
  ]);
767
- const IonLabel = /*@__PURE__*/ defineContainer('ion-label', defineCustomElement$F, [
749
+ const IonLabel = /*@__PURE__*/ defineContainer('ion-label', defineCustomElement$C, [
768
750
  'color',
769
751
  'position',
770
752
  'ionColor',
@@ -773,16 +755,15 @@ const IonLabel = /*@__PURE__*/ defineContainer('ion-label', defineCustomElement$
773
755
  'ionColor',
774
756
  'ionStyle'
775
757
  ]);
776
- const IonList = /*@__PURE__*/ defineContainer('ion-list', defineCustomElement$G, [
758
+ const IonList = /*@__PURE__*/ defineContainer('ion-list', defineCustomElement$D, [
777
759
  'lines',
778
- 'inset',
779
- 'shape'
760
+ 'inset'
780
761
  ]);
781
- const IonListHeader = /*@__PURE__*/ defineContainer('ion-list-header', defineCustomElement$H, [
762
+ const IonListHeader = /*@__PURE__*/ defineContainer('ion-list-header', defineCustomElement$E, [
782
763
  'color',
783
764
  'lines'
784
765
  ]);
785
- const IonMenu = /*@__PURE__*/ defineContainer('ion-menu', defineCustomElement$I, [
766
+ const IonMenu = /*@__PURE__*/ defineContainer('ion-menu', defineCustomElement$F, [
786
767
  'contentId',
787
768
  'menuId',
788
769
  'type',
@@ -802,32 +783,32 @@ const IonMenu = /*@__PURE__*/ defineContainer('ion-menu', defineCustomElement$I,
802
783
  'ionDidClose',
803
784
  'ionMenuChange'
804
785
  ]);
805
- const IonMenuButton = /*@__PURE__*/ defineContainer('ion-menu-button', defineCustomElement$J, [
786
+ const IonMenuButton = /*@__PURE__*/ defineContainer('ion-menu-button', defineCustomElement$G, [
806
787
  'color',
807
788
  'disabled',
808
789
  'menu',
809
790
  'autoHide',
810
791
  'type'
811
792
  ]);
812
- const IonMenuToggle = /*@__PURE__*/ defineContainer('ion-menu-toggle', defineCustomElement$K, [
793
+ const IonMenuToggle = /*@__PURE__*/ defineContainer('ion-menu-toggle', defineCustomElement$H, [
813
794
  'menu',
814
795
  'autoHide'
815
796
  ]);
816
- const IonNavLink = /*@__PURE__*/ defineContainer('ion-nav-link', defineCustomElement$L, [
797
+ const IonNavLink = /*@__PURE__*/ defineContainer('ion-nav-link', defineCustomElement$I, [
817
798
  'component',
818
799
  'componentProps',
819
800
  'routerDirection',
820
801
  'routerAnimation'
821
802
  ]);
822
- const IonNote = /*@__PURE__*/ defineContainer('ion-note', defineCustomElement$M, [
803
+ const IonNote = /*@__PURE__*/ defineContainer('ion-note', defineCustomElement$J, [
823
804
  'color'
824
805
  ]);
825
- const IonPicker = /*@__PURE__*/ defineContainer('ion-picker', defineCustomElement$N, [
806
+ const IonPicker = /*@__PURE__*/ defineContainer('ion-picker', defineCustomElement$K, [
826
807
  'ionInputModeChange'
827
808
  ], [
828
809
  'ionInputModeChange'
829
810
  ]);
830
- const IonPickerColumn = /*@__PURE__*/ defineContainer('ion-picker-column', defineCustomElement$O, [
811
+ const IonPickerColumn = /*@__PURE__*/ defineContainer('ion-picker-column', defineCustomElement$L, [
831
812
  'disabled',
832
813
  'value',
833
814
  'color',
@@ -836,20 +817,19 @@ const IonPickerColumn = /*@__PURE__*/ defineContainer('ion-picker-column', defin
836
817
  ], [
837
818
  'ionChange'
838
819
  ]);
839
- const IonPickerColumnOption = /*@__PURE__*/ defineContainer('ion-picker-column-option', defineCustomElement$P, [
820
+ const IonPickerColumnOption = /*@__PURE__*/ defineContainer('ion-picker-column-option', defineCustomElement$M, [
840
821
  'disabled',
841
822
  'value',
842
823
  'color'
843
824
  ]);
844
- const IonProgressBar = /*@__PURE__*/ defineContainer('ion-progress-bar', defineCustomElement$Q, [
825
+ const IonProgressBar = /*@__PURE__*/ defineContainer('ion-progress-bar', defineCustomElement$N, [
845
826
  'type',
846
827
  'reversed',
847
828
  'value',
848
829
  'buffer',
849
- 'color',
850
- 'shape'
830
+ 'color'
851
831
  ]);
852
- const IonRadio = /*@__PURE__*/ defineContainer('ion-radio', defineCustomElement$R, [
832
+ const IonRadio = /*@__PURE__*/ defineContainer('ion-radio', defineCustomElement$O, [
853
833
  'color',
854
834
  'name',
855
835
  'disabled',
@@ -862,8 +842,8 @@ const IonRadio = /*@__PURE__*/ defineContainer('ion-radio', defineCustomElement$
862
842
  ], [
863
843
  'ionFocus',
864
844
  'ionBlur'
865
- ], 'value', 'ion-change');
866
- const IonRadioGroup = /*@__PURE__*/ defineContainer('ion-radio-group', defineCustomElement$S, [
845
+ ], 'value', 'ionChange', undefined);
846
+ const IonRadioGroup = /*@__PURE__*/ defineContainer('ion-radio-group', defineCustomElement$P, [
867
847
  'allowEmptySelection',
868
848
  'compareWith',
869
849
  'name',
@@ -875,8 +855,8 @@ const IonRadioGroup = /*@__PURE__*/ defineContainer('ion-radio-group', defineCus
875
855
  ], [
876
856
  'ionChange',
877
857
  'ionValueChange'
878
- ], 'value', 'ion-change');
879
- const IonRange = /*@__PURE__*/ defineContainer('ion-range', defineCustomElement$T, [
858
+ ], 'value', 'ionChange', undefined);
859
+ const IonRange = /*@__PURE__*/ defineContainer('ion-range', defineCustomElement$Q, [
880
860
  'color',
881
861
  'debounce',
882
862
  'name',
@@ -906,8 +886,8 @@ const IonRange = /*@__PURE__*/ defineContainer('ion-range', defineCustomElement$
906
886
  'ionBlur',
907
887
  'ionKnobMoveStart',
908
888
  'ionKnobMoveEnd'
909
- ], 'value', 'ion-input');
910
- const IonRefresher = /*@__PURE__*/ defineContainer('ion-refresher', defineCustomElement$U, [
889
+ ], 'value', 'ionInput', undefined);
890
+ const IonRefresher = /*@__PURE__*/ defineContainer('ion-refresher', defineCustomElement$R, [
911
891
  'pullMin',
912
892
  'pullMax',
913
893
  'closeDuration',
@@ -926,14 +906,14 @@ const IonRefresher = /*@__PURE__*/ defineContainer('ion-refresher', defineCustom
926
906
  'ionPullStart',
927
907
  'ionPullEnd'
928
908
  ]);
929
- const IonRefresherContent = /*@__PURE__*/ defineContainer('ion-refresher-content', defineCustomElement$V, [
909
+ const IonRefresherContent = /*@__PURE__*/ defineContainer('ion-refresher-content', defineCustomElement$S, [
930
910
  'pullingIcon',
931
911
  'pullingText',
932
912
  'refreshingSpinner',
933
913
  'refreshingText'
934
914
  ]);
935
- const IonReorder = /*@__PURE__*/ defineContainer('ion-reorder', defineCustomElement$W);
936
- const IonReorderGroup = /*@__PURE__*/ defineContainer('ion-reorder-group', defineCustomElement$X, [
915
+ const IonReorder = /*@__PURE__*/ defineContainer('ion-reorder', defineCustomElement$T);
916
+ const IonReorderGroup = /*@__PURE__*/ defineContainer('ion-reorder-group', defineCustomElement$U, [
937
917
  'disabled',
938
918
  'ionItemReorder',
939
919
  'ionReorderStart',
@@ -945,11 +925,11 @@ const IonReorderGroup = /*@__PURE__*/ defineContainer('ion-reorder-group', defin
945
925
  'ionReorderMove',
946
926
  'ionReorderEnd'
947
927
  ]);
948
- const IonRippleEffect = /*@__PURE__*/ defineContainer('ion-ripple-effect', defineCustomElement$Y, [
928
+ const IonRippleEffect = /*@__PURE__*/ defineContainer('ion-ripple-effect', defineCustomElement$V, [
949
929
  'type'
950
930
  ]);
951
- const IonRow = /*@__PURE__*/ defineContainer('ion-row', defineCustomElement$Z);
952
- const IonSearchbar = /*@__PURE__*/ defineContainer('ion-searchbar', defineCustomElement$_, [
931
+ const IonRow = /*@__PURE__*/ defineContainer('ion-row', defineCustomElement$W);
932
+ const IonSearchbar = /*@__PURE__*/ defineContainer('ion-searchbar', defineCustomElement$X, [
953
933
  'color',
954
934
  'animated',
955
935
  'autocapitalize',
@@ -972,8 +952,6 @@ const IonSearchbar = /*@__PURE__*/ defineContainer('ion-searchbar', defineCustom
972
952
  'spellcheck',
973
953
  'type',
974
954
  'value',
975
- 'shape',
976
- 'size',
977
955
  'ionInput',
978
956
  'ionChange',
979
957
  'ionCancel',
@@ -989,8 +967,8 @@ const IonSearchbar = /*@__PURE__*/ defineContainer('ion-searchbar', defineCustom
989
967
  'ionBlur',
990
968
  'ionFocus',
991
969
  'ionStyle'
992
- ], 'value', 'ion-input');
993
- const IonSegment = /*@__PURE__*/ defineContainer('ion-segment', defineCustomElement$$, [
970
+ ], 'value', 'ionInput', undefined);
971
+ const IonSegment = /*@__PURE__*/ defineContainer('ion-segment', defineCustomElement$Y, [
994
972
  'color',
995
973
  'disabled',
996
974
  'scrollable',
@@ -1004,25 +982,24 @@ const IonSegment = /*@__PURE__*/ defineContainer('ion-segment', defineCustomElem
1004
982
  'ionChange',
1005
983
  'ionSelect',
1006
984
  'ionStyle'
1007
- ], 'value', 'ion-change');
1008
- const IonSegmentButton = /*@__PURE__*/ defineContainer('ion-segment-button', defineCustomElement$10, [
985
+ ], 'value', 'ionChange', undefined);
986
+ const IonSegmentButton = /*@__PURE__*/ defineContainer('ion-segment-button', defineCustomElement$Z, [
1009
987
  'contentId',
1010
988
  'disabled',
1011
989
  'layout',
1012
990
  'type',
1013
991
  'value'
1014
- ], [], 'value', 'ion-change');
1015
- const IonSegmentContent = /*@__PURE__*/ defineContainer('ion-segment-content', defineCustomElement$11);
1016
- const IonSegmentView = /*@__PURE__*/ defineContainer('ion-segment-view', defineCustomElement$12, [
992
+ ], [], 'value', 'ionChange', undefined);
993
+ const IonSegmentContent = /*@__PURE__*/ defineContainer('ion-segment-content', defineCustomElement$_);
994
+ const IonSegmentView = /*@__PURE__*/ defineContainer('ion-segment-view', defineCustomElement$$, [
1017
995
  'disabled',
1018
996
  'swipeGesture',
1019
997
  'ionSegmentViewScroll'
1020
998
  ], [
1021
999
  'ionSegmentViewScroll'
1022
1000
  ]);
1023
- const IonSelect = /*@__PURE__*/ defineContainer('ion-select', defineCustomElement$13, [
1001
+ const IonSelect = /*@__PURE__*/ defineContainer('ion-select', defineCustomElement$10, [
1024
1002
  'cancelText',
1025
- 'cancelIcon',
1026
1003
  'color',
1027
1004
  'compareWith',
1028
1005
  'disabled',
@@ -1041,10 +1018,9 @@ const IonSelect = /*@__PURE__*/ defineContainer('ion-select', defineCustomElemen
1041
1018
  'selectedText',
1042
1019
  'toggleIcon',
1043
1020
  'expandedIcon',
1044
- 'required',
1045
1021
  'shape',
1046
- 'size',
1047
1022
  'value',
1023
+ 'required',
1048
1024
  'ionChange',
1049
1025
  'ionCancel',
1050
1026
  'ionDismiss',
@@ -1058,35 +1034,33 @@ const IonSelect = /*@__PURE__*/ defineContainer('ion-select', defineCustomElemen
1058
1034
  'ionFocus',
1059
1035
  'ionBlur',
1060
1036
  'ionStyle'
1061
- ], 'value', 'ion-change');
1062
- const IonSelectModal = /*@__PURE__*/ defineContainer('ion-select-modal', defineCustomElement$14, [
1037
+ ], 'value', 'ionChange', undefined);
1038
+ const IonSelectModal = /*@__PURE__*/ defineContainer('ion-select-modal', defineCustomElement$11, [
1063
1039
  'header',
1064
1040
  'cancelText',
1065
- 'cancelIcon',
1066
1041
  'multiple',
1067
1042
  'options'
1068
1043
  ]);
1069
- const IonSelectOption = /*@__PURE__*/ defineContainer('ion-select-option', defineCustomElement$15, [
1044
+ const IonSelectOption = /*@__PURE__*/ defineContainer('ion-select-option', defineCustomElement$12, [
1070
1045
  'disabled',
1071
1046
  'value',
1072
1047
  'description',
1073
1048
  'labelPlacement',
1074
1049
  'justify'
1075
1050
  ]);
1076
- const IonSkeletonText = /*@__PURE__*/ defineContainer('ion-skeleton-text', defineCustomElement$16, [
1051
+ const IonSkeletonText = /*@__PURE__*/ defineContainer('ion-skeleton-text', defineCustomElement$13, [
1077
1052
  'animated',
1078
1053
  'ionStyle'
1079
1054
  ], [
1080
1055
  'ionStyle'
1081
1056
  ]);
1082
- const IonSpinner = /*@__PURE__*/ defineContainer('ion-spinner', defineCustomElement$17, [
1057
+ const IonSpinner = /*@__PURE__*/ defineContainer('ion-spinner', defineCustomElement$14, [
1083
1058
  'color',
1084
1059
  'duration',
1085
1060
  'name',
1086
- 'paused',
1087
- 'size'
1061
+ 'paused'
1088
1062
  ]);
1089
- const IonSplitPane = /*@__PURE__*/ defineContainer('ion-split-pane', defineCustomElement$18, [
1063
+ const IonSplitPane = /*@__PURE__*/ defineContainer('ion-split-pane', defineCustomElement$15, [
1090
1064
  'contentId',
1091
1065
  'disabled',
1092
1066
  'when',
@@ -1094,16 +1068,16 @@ const IonSplitPane = /*@__PURE__*/ defineContainer('ion-split-pane', defineCusto
1094
1068
  ], [
1095
1069
  'ionSplitPaneVisible'
1096
1070
  ]);
1097
- const IonTab = /*@__PURE__*/ defineContainer('ion-tab', defineCustomElement$19, [
1071
+ const IonTab = /*@__PURE__*/ defineContainer('ion-tab', defineCustomElement$16, [
1098
1072
  'active',
1099
1073
  'delegate',
1100
1074
  'tab',
1101
1075
  'component'
1102
1076
  ]);
1103
- const IonText = /*@__PURE__*/ defineContainer('ion-text', defineCustomElement$1a, [
1077
+ const IonText = /*@__PURE__*/ defineContainer('ion-text', defineCustomElement$17, [
1104
1078
  'color'
1105
1079
  ]);
1106
- const IonTextarea = /*@__PURE__*/ defineContainer('ion-textarea', defineCustomElement$1b, [
1080
+ const IonTextarea = /*@__PURE__*/ defineContainer('ion-textarea', defineCustomElement$18, [
1107
1081
  'color',
1108
1082
  'autocapitalize',
1109
1083
  'autofocus',
@@ -1132,7 +1106,6 @@ const IonTextarea = /*@__PURE__*/ defineContainer('ion-textarea', defineCustomEl
1132
1106
  'label',
1133
1107
  'labelPlacement',
1134
1108
  'shape',
1135
- 'size',
1136
1109
  'ionChange',
1137
1110
  'ionInput',
1138
1111
  'ionBlur',
@@ -1142,16 +1115,16 @@ const IonTextarea = /*@__PURE__*/ defineContainer('ion-textarea', defineCustomEl
1142
1115
  'ionInput',
1143
1116
  'ionBlur',
1144
1117
  'ionFocus'
1145
- ], 'value', 'ion-input');
1146
- const IonThumbnail = /*@__PURE__*/ defineContainer('ion-thumbnail', defineCustomElement$1c);
1147
- const IonTitle = /*@__PURE__*/ defineContainer('ion-title', defineCustomElement$1d, [
1118
+ ], 'value', 'ionInput', undefined);
1119
+ const IonThumbnail = /*@__PURE__*/ defineContainer('ion-thumbnail', defineCustomElement$19);
1120
+ const IonTitle = /*@__PURE__*/ defineContainer('ion-title', defineCustomElement$1a, [
1148
1121
  'color',
1149
1122
  'size',
1150
1123
  'ionStyle'
1151
1124
  ], [
1152
1125
  'ionStyle'
1153
1126
  ]);
1154
- const IonToggle = /*@__PURE__*/ defineContainer('ion-toggle', defineCustomElement$1e, [
1127
+ const IonToggle = /*@__PURE__*/ defineContainer('ion-toggle', defineCustomElement$1b, [
1155
1128
  'color',
1156
1129
  'name',
1157
1130
  'checked',
@@ -1171,14 +1144,21 @@ const IonToggle = /*@__PURE__*/ defineContainer('ion-toggle', defineCustomElemen
1171
1144
  'ionChange',
1172
1145
  'ionFocus',
1173
1146
  'ionBlur'
1174
- ], 'checked', 'ion-change');
1175
- const IonToolbar = /*@__PURE__*/ defineContainer('ion-toolbar', defineCustomElement$1f, [
1176
- 'color',
1177
- 'titlePlacement'
1147
+ ], 'checked', 'ionChange', undefined);
1148
+ const IonToolbar = /*@__PURE__*/ defineContainer('ion-toolbar', defineCustomElement$1c, [
1149
+ 'color'
1178
1150
  ]);
1179
1151
 
1180
1152
  const useBackButton = (priority, handler) => {
1181
- const callback = (ev) => ev.detail.register(priority, handler);
1153
+ /**
1154
+ * `Handler` permits returning null, which core's public `register` type
1155
+ * does not accept, so normalize it rather than narrowing the public
1156
+ * `useBackButton` contract.
1157
+ */
1158
+ const callback = (ev) => ev.detail.register(priority, (processNextHandler) => {
1159
+ const result = handler(processNextHandler);
1160
+ return result === null ? undefined : result;
1161
+ });
1182
1162
  const unregister = () => document.removeEventListener("ionBackButton", callback);
1183
1163
  document.addEventListener("ionBackButton", callback);
1184
1164
  return { unregister };
@@ -1228,17 +1208,16 @@ const hookNames = {
1228
1208
  };
1229
1209
  const ids = { main: 0 };
1230
1210
  const generateId = (type = "main") => {
1231
- var _a;
1232
- const id = ((_a = ids[type]) !== null && _a !== void 0 ? _a : 0) + 1;
1211
+ const id = (ids[type] ?? 0) + 1;
1233
1212
  ids[type] = id;
1234
1213
  return id.toString();
1235
1214
  };
1236
1215
  const fireLifecycle = (vueComponent, vueInstance, lifecycle) => {
1237
- if (vueComponent === null || vueComponent === void 0 ? void 0 : vueComponent[lifecycle]) {
1238
- vueComponent[lifecycle].bind(vueInstance === null || vueInstance === void 0 ? void 0 : vueInstance.value)();
1216
+ if (vueComponent?.[lifecycle]) {
1217
+ vueComponent[lifecycle].bind(vueInstance?.value)();
1239
1218
  }
1240
- const instance = vueInstance === null || vueInstance === void 0 ? void 0 : vueInstance.value;
1241
- if (instance === null || instance === void 0 ? void 0 : instance[lifecycle]) {
1219
+ const instance = vueInstance?.value;
1220
+ if (instance?.[lifecycle]) {
1242
1221
  instance[lifecycle]();
1243
1222
  }
1244
1223
  /**
@@ -1292,7 +1271,13 @@ const injectHook = (lifecycleType, hook, component) => {
1292
1271
  }
1293
1272
  };
1294
1273
  const createHook = (lifecycle) => {
1295
- return (hook, target = getCurrentInstance()) => injectHook(lifecycle, hook, target);
1274
+ return (hook, target = getCurrentInstance()
1275
+ /**
1276
+ * `injectHook` returns undefined when called outside of `setup()`, but
1277
+ * that path only warns. Keep the published `Function` return so enabling
1278
+ * `strict` does not widen this to `Function | undefined` for consumers.
1279
+ */
1280
+ ) => injectHook(lifecycle, hook, target);
1296
1281
  };
1297
1282
  const onIonViewWillEnter = createHook(LifecycleHooks.WillEnter);
1298
1283
  const onIonViewDidEnter = createHook(LifecycleHooks.DidEnter);
@@ -1337,10 +1322,10 @@ const IonicVue = {
1337
1322
  };
1338
1323
 
1339
1324
  const IonBackButton = /*@__PURE__*/ defineComponent((_, { attrs, slots }) => {
1340
- defineCustomElement$1g();
1325
+ defineCustomElement$1d();
1341
1326
  // TODO(FW-2969): type
1342
1327
  const ionRouter = inject("navManager");
1343
- const onClick = () => {
1328
+ const onClick = (ev) => {
1344
1329
  /**
1345
1330
  * When using ion-back-button outside of
1346
1331
  * a routing context, ionRouter is undefined.
@@ -1348,12 +1333,33 @@ const IonBackButton = /*@__PURE__*/ defineComponent((_, { attrs, slots }) => {
1348
1333
  if (ionRouter === undefined) {
1349
1334
  return;
1350
1335
  }
1351
- const defaultHref = attrs["default-href"] || attrs["defaultHref"];
1336
+ /**
1337
+ * If ion-back-button is being used inside
1338
+ * of ion-nav (e.g. in a modal) then we should
1339
+ * not interact with the router. The core
1340
+ * ion-back-button component will handle the
1341
+ * nav.pop() in that case.
1342
+ */
1343
+ const target = ev.target;
1344
+ if (target && target.closest("ion-nav") !== null) {
1345
+ return;
1346
+ }
1347
+ /**
1348
+ * Core resolves `backButtonDefaultHref` itself and only renders the
1349
+ * button once it has a href, so read the config here too or a
1350
+ * config-only back button would be visible but do nothing.
1351
+ */
1352
+ const defaultHref = attrs["default-href"] ||
1353
+ attrs["defaultHref"] ||
1354
+ getConfig()?.get("backButtonDefaultHref");
1352
1355
  const routerAnimation = attrs["router-animation"] || attrs["routerAnimation"];
1353
1356
  ionRouter.handleNavigateBack(defaultHref, routerAnimation);
1354
1357
  };
1355
1358
  return () => {
1356
- return h("ion-back-button", Object.assign({ onClick }, attrs), slots.default && slots.default());
1359
+ return h("ion-back-button", {
1360
+ onClick,
1361
+ ...attrs,
1362
+ }, slots.default && slots.default());
1357
1363
  };
1358
1364
  }, {
1359
1365
  name: "IonBackButton",
@@ -1362,7 +1368,6 @@ const IonBackButton = /*@__PURE__*/ defineComponent((_, { attrs, slots }) => {
1362
1368
  const IonPage = /*@__PURE__*/ defineComponent({
1363
1369
  name: "IonPage",
1364
1370
  props: {
1365
- // eslint-disable-next-line @typescript-eslint/no-empty-function
1366
1371
  registerIonPage: { type: Function, default: () => { } },
1367
1372
  },
1368
1373
  mounted() {
@@ -1370,7 +1375,11 @@ const IonPage = /*@__PURE__*/ defineComponent({
1370
1375
  },
1371
1376
  setup(_, { attrs, slots }) {
1372
1377
  return () => {
1373
- return h("div", Object.assign(Object.assign({}, attrs), { ["class"]: "ion-page", ref: "ionPage" }), slots.default && slots.default());
1378
+ return h("div", {
1379
+ ...attrs,
1380
+ ["class"]: "ion-page",
1381
+ ref: "ionPage",
1382
+ }, slots.default && slots.default());
1374
1383
  };
1375
1384
  },
1376
1385
  });
@@ -1383,8 +1392,14 @@ const isViewVisible = (enteringEl) => {
1383
1392
  const viewDepthKey = Symbol(0);
1384
1393
  const IonRouterOutlet = /*@__PURE__*/ defineComponent({
1385
1394
  name: "IonRouterOutlet",
1395
+ props: {
1396
+ swipeGesture: {
1397
+ type: Boolean,
1398
+ default: undefined,
1399
+ },
1400
+ },
1386
1401
  setup() {
1387
- defineCustomElement$1h();
1402
+ defineCustomElement$1e();
1388
1403
  const injectedRoute = inject(routeLocationKey);
1389
1404
  const route = useRoute();
1390
1405
  const depth = inject(viewDepthKey, 0);
@@ -1397,6 +1412,7 @@ const IonRouterOutlet = /*@__PURE__*/ defineComponent({
1397
1412
  const id = generateId("ion-router-outlet");
1398
1413
  const ionRouter = inject("navManager");
1399
1414
  const viewStacks = inject("viewStacks");
1415
+ // TODO(FW-2969): type
1400
1416
  const components = shallowRef([]);
1401
1417
  let skipTransition = false;
1402
1418
  // The base url for this router outlet
@@ -1460,11 +1476,6 @@ const IonRouterOutlet = /*@__PURE__*/ defineComponent({
1460
1476
  */
1461
1477
  { deep: true });
1462
1478
  const canStart = () => {
1463
- const config = getConfig();
1464
- const swipeEnabled = config &&
1465
- config.get("swipeBackEnabled", ionRouterOutlet.value.mode === "ios");
1466
- if (!swipeEnabled)
1467
- return false;
1468
1479
  const stack = viewStacks.getViewStack(id);
1469
1480
  if (!stack || stack.length <= 1)
1470
1481
  return false;
@@ -1599,12 +1610,12 @@ See https://ionicframework.com/docs/vue/navigation#ionpage for more information.
1599
1610
  * going from a non-tabs page to a tabs page.
1600
1611
  */
1601
1612
  if (isViewVisible(enteringEl) &&
1602
- (leavingViewItem === null || leavingViewItem === void 0 ? void 0 : leavingViewItem.ionPageElement) !== undefined &&
1613
+ leavingViewItem?.ionPageElement !== undefined &&
1603
1614
  !isViewVisible(leavingViewItem.ionPageElement)) {
1604
1615
  return;
1605
1616
  }
1606
1617
  fireLifecycle(enteringViewItem.vueComponent, enteringViewItem.vueComponentRef, LIFECYCLE_WILL_ENTER);
1607
- if ((leavingViewItem === null || leavingViewItem === void 0 ? void 0 : leavingViewItem.ionPageElement) &&
1618
+ if (leavingViewItem?.ionPageElement &&
1608
1619
  enteringViewItem !== leavingViewItem) {
1609
1620
  let animationBuilder = routerAnimation;
1610
1621
  const leavingEl = leavingViewItem.ionPageElement;
@@ -1755,9 +1766,16 @@ See https://ionicframework.com/docs/vue/navigation#ionpage for more information.
1755
1766
  },
1756
1767
  render() {
1757
1768
  const { components, registerIonPage, injectedRoute } = this;
1758
- return h("ion-router-outlet", { ref: "ionRouterOutlet" }, components &&
1769
+ /**
1770
+ * Forward props selectively to avoid setting undefined values
1771
+ * that would override the web component's config-based defaults.
1772
+ */
1773
+ const routerOutletProps = { ref: "ionRouterOutlet" };
1774
+ if (this.$props.swipeGesture !== undefined) {
1775
+ routerOutletProps.swipeGesture = this.$props.swipeGesture;
1776
+ }
1777
+ return h("ion-router-outlet", routerOutletProps, components &&
1759
1778
  components.map((c) => {
1760
- var _a, _b;
1761
1779
  let props = {
1762
1780
  ref: c.vueComponentRef,
1763
1781
  key: c.pathname,
@@ -1766,7 +1784,7 @@ See https://ionicframework.com/docs/vue/navigation#ionpage for more information.
1766
1784
  /**
1767
1785
  * IonRouterOutlet does not support named outlets.
1768
1786
  */
1769
- const routePropsOption = (_b = (_a = c.matchedRoute) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.default;
1787
+ const routePropsOption = c.matchedRoute?.props?.default;
1770
1788
  /**
1771
1789
  * Since IonRouterOutlet renders multiple components,
1772
1790
  * each render will cause all props functions to be
@@ -1777,14 +1795,16 @@ See https://ionicframework.com/docs/vue/navigation#ionpage for more information.
1777
1795
  * function is called again.
1778
1796
  */
1779
1797
  const getPropsFunctionResult = () => {
1780
- var _a;
1781
- const cachedPropsResult = (_a = c.vueComponentData) === null || _a === void 0 ? void 0 : _a.propsFunctionResult;
1798
+ const cachedPropsResult = c.vueComponentData?.propsFunctionResult;
1782
1799
  if (cachedPropsResult) {
1783
1800
  return cachedPropsResult;
1784
1801
  }
1785
1802
  else {
1786
1803
  const propsFunctionResult = routePropsOption(injectedRoute);
1787
- c.vueComponentData = Object.assign(Object.assign({}, c.vueComponentData), { propsFunctionResult });
1804
+ c.vueComponentData = {
1805
+ ...c.vueComponentData,
1806
+ propsFunctionResult,
1807
+ };
1788
1808
  return propsFunctionResult;
1789
1809
  }
1790
1810
  };
@@ -1795,7 +1815,10 @@ See https://ionicframework.com/docs/vue/navigation#ionpage for more information.
1795
1815
  ? getPropsFunctionResult()
1796
1816
  : routePropsOption
1797
1817
  : null;
1798
- props = Object.assign(Object.assign({}, props), routeProps);
1818
+ props = {
1819
+ ...props,
1820
+ ...routeProps,
1821
+ };
1799
1822
  return h(c.vueComponent, props);
1800
1823
  }));
1801
1824
  },
@@ -1824,7 +1847,7 @@ const IonTabButton = /*@__PURE__*/ defineComponent({
1824
1847
  },
1825
1848
  },
1826
1849
  setup(props, { slots }) {
1827
- defineCustomElement$1i();
1850
+ defineCustomElement$1f();
1828
1851
  // TODO(FW-2969): type
1829
1852
  const ionRouter = inject("navManager", null);
1830
1853
  const onClick = (ev) => {
@@ -1840,7 +1863,7 @@ const IonTabButton = /*@__PURE__*/ defineComponent({
1840
1863
  const { tab, href, _getTabState } = props;
1841
1864
  const tabState = _getTabState();
1842
1865
  const hasRouterOutlet = tabState.hasRouterOutlet;
1843
- const tappedTab = tabState.tabs[tab] || {};
1866
+ const tappedTab = tabState.tabs[String(tab)] || {};
1844
1867
  const originalHref = tappedTab.originalHref || href;
1845
1868
  /**
1846
1869
  * If the router outlet is not defined, then the tabs is being used
@@ -1869,7 +1892,7 @@ const IonTabButton = /*@__PURE__*/ defineComponent({
1869
1892
  if (ionRouter !== null) {
1870
1893
  if (prevActiveTab === tab) {
1871
1894
  if (originalHref !== currentHref) {
1872
- ionRouter.resetTab(tab);
1895
+ ionRouter.resetTab(tab, originalHref);
1873
1896
  }
1874
1897
  }
1875
1898
  else {
@@ -1878,13 +1901,17 @@ const IonTabButton = /*@__PURE__*/ defineComponent({
1878
1901
  }
1879
1902
  };
1880
1903
  return () => {
1881
- return h("ion-tab-button", Object.assign({ onClick }, props), slots.default && slots.default());
1904
+ return h("ion-tab-button", {
1905
+ onClick,
1906
+ ...props,
1907
+ }, slots.default && slots.default());
1882
1908
  };
1883
1909
  },
1884
1910
  });
1885
1911
 
1886
1912
  const WILL_CHANGE = "ionTabsWillChange";
1887
1913
  const DID_CHANGE = "ionTabsDidChange";
1914
+ // TODO(FW-2969): types
1888
1915
  /**
1889
1916
  * Vue 3.2.38 fixed an issue where Web Component
1890
1917
  * names are respected using kebab case instead of pascal case.
@@ -1905,7 +1932,8 @@ const isTab = (node) => {
1905
1932
  }
1906
1933
  return false; // In case the fragment has no children.
1907
1934
  }
1908
- return (node.type && (node.type.name === "ion-tab" || node.type === IonTab));
1935
+ return (!!node.type &&
1936
+ (node.type.name === "ion-tab" || node.type === IonTab));
1909
1937
  };
1910
1938
  const IonTabs = /*@__PURE__*/ defineComponent({
1911
1939
  name: "IonTabs",
@@ -1953,7 +1981,7 @@ const IonTabs = /*@__PURE__*/ defineComponent({
1953
1981
  * `selectedTab` from core, which may occur if the custom
1954
1982
  * element is defined too early in the component's lifecycle.
1955
1983
  */
1956
- defineCustomElement$1j();
1984
+ defineCustomElement$1g();
1957
1985
  },
1958
1986
  render() {
1959
1987
  const { slots, props } = this;
@@ -1984,7 +2012,9 @@ const IonTabs = /*@__PURE__*/ defineComponent({
1984
2012
  throw new Error("IonTabs cannot contain an IonRouterOutlet and IonTab at the same time.");
1985
2013
  }
1986
2014
  if (hasTab) {
1987
- return h("ion-tabs", Object.assign({}, props), slottedContent);
2015
+ return h("ion-tabs", {
2016
+ ...props,
2017
+ }, slottedContent);
1988
2018
  }
1989
2019
  /**
1990
2020
  * TODO(ROU-11056)
@@ -2014,7 +2044,7 @@ const IonTabs = /*@__PURE__*/ defineComponent({
2014
2044
  },
2015
2045
  });
2016
2046
 
2017
- const isTabButton = (child) => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.name) === "IonTabButton"; };
2047
+ const isTabButton = (child) => child.type?.name === "IonTabButton";
2018
2048
  /**
2019
2049
  * Checks if pathname matches the tab's href using path segment matching.
2020
2050
  * Avoids false matches like /home2 matching /home by requiring exact match
@@ -2063,10 +2093,12 @@ const IonTabBar = defineComponent({
2063
2093
  hasRouterOutlet: false,
2064
2094
  },
2065
2095
  tabVnodes: [],
2066
- /* eslint-disable @typescript-eslint/no-empty-function */
2067
- _tabsWillChange: { type: Function, default: () => { } },
2068
- _tabsDidChange: { type: Function, default: () => { } },
2069
- /* eslint-enable @typescript-eslint/no-empty-function */
2096
+ /**
2097
+ * No-ops until `mounted` swaps in IonTabs' emitters, if IonTabs is
2098
+ * present.
2099
+ */
2100
+ _tabsWillChange: (() => { }),
2101
+ _tabsDidChange: (() => { }),
2070
2102
  };
2071
2103
  },
2072
2104
  updated() {
@@ -2083,14 +2115,21 @@ const IonTabBar = defineComponent({
2083
2115
  * show any child pages if necessary.
2084
2116
  */
2085
2117
  const tabState = this.$data.tabState;
2086
- const currentInstance = getCurrentInstance();
2087
- const tabs = (this.$data.tabVnodes = getTabs((currentInstance.subTree.children || [])));
2118
+ const tabs = (this.$data.tabVnodes = getTabs((this.$.subTree.children || [])));
2088
2119
  tabs.forEach((child) => {
2089
- tabState.tabs[child.props.tab] = {
2090
- originalHref: child.props.href,
2091
- currentHref: child.props.href,
2120
+ /**
2121
+ * `tab` may be undefined. `String()` keeps the key identical to the
2122
+ * one IonTabButton looks up.
2123
+ */
2124
+ const childProps = child.props ?? {};
2125
+ tabState.tabs[String(childProps.tab)] = {
2126
+ originalHref: childProps.href,
2127
+ currentHref: childProps.href,
2092
2128
  ref: child,
2093
2129
  };
2130
+ if (!child.component) {
2131
+ return;
2132
+ }
2094
2133
  /**
2095
2134
  * Passing this prop to each tab button
2096
2135
  * lets it be aware of the state that
@@ -2128,13 +2167,13 @@ const IonTabBar = defineComponent({
2128
2167
  */
2129
2168
  checkActiveTab(ionRouter) {
2130
2169
  const hasRouterOutlet = this.$data.tabState.hasRouterOutlet;
2131
- const currentRoute = ionRouter === null || ionRouter === void 0 ? void 0 : ionRouter.getCurrentRouteInfo();
2170
+ const currentRoute = ionRouter?.getCurrentRouteInfo();
2132
2171
  const childNodes = this.$data.tabVnodes;
2133
2172
  const { tabs, activeTab: prevActiveTab } = this.$data.tabState;
2134
2173
  const tabKeys = Object.keys(tabs);
2135
2174
  let activeTab = tabKeys.find((key) => {
2136
2175
  const href = tabs[key].originalHref;
2137
- return ((currentRoute === null || currentRoute === void 0 ? void 0 : currentRoute.pathname) && matchesTab(currentRoute.pathname, href));
2176
+ return (currentRoute?.pathname && matchesTab(currentRoute.pathname, href));
2138
2177
  });
2139
2178
  /**
2140
2179
  * Tabs is being used as a basic tab navigation,
@@ -2150,42 +2189,54 @@ const IonTabBar = defineComponent({
2150
2189
  * it in the tabs state.
2151
2190
  */
2152
2191
  childNodes.forEach((child) => {
2153
- const tab = tabs[child.props.tab];
2154
- if (!tab || tab.originalHref !== child.props.href) {
2155
- tabs[child.props.tab] = {
2156
- originalHref: child.props.href,
2157
- currentHref: child.props.href,
2192
+ const childProps = child.props ?? {};
2193
+ const tab = tabs[String(childProps.tab)];
2194
+ if (!tab || tab.originalHref !== childProps.href) {
2195
+ tabs[String(childProps.tab)] = {
2196
+ originalHref: childProps.href,
2197
+ currentHref: childProps.href,
2158
2198
  ref: child,
2159
2199
  };
2160
2200
  }
2161
2201
  });
2162
- if (activeTab && prevActiveTab) {
2163
- const prevHref = this.$data.tabState.tabs[prevActiveTab].currentHref;
2202
+ if (activeTab && currentRoute?.pathname) {
2203
+ const prevHref = prevActiveTab
2204
+ ? this.$data.tabState.tabs[prevActiveTab].currentHref
2205
+ : undefined;
2164
2206
  /**
2165
2207
  * If the tabs change or the url changes,
2166
2208
  * update the currentHref for the active tab.
2167
- * Ex: url changes from /tabs/tab1 --> /tabs/tab1/child
2209
+ * Ex: url changes from /tabs/tab1 to /tabs/tab1/child.
2168
2210
  * If we went to tab2 then back to tab1, we should
2169
2211
  * land on /tabs/tab1/child instead of /tabs/tab1.
2212
+ *
2213
+ * Also runs on initial setup so a deep-loaded tab child
2214
+ * records its real pathname instead of `originalHref`.
2170
2215
  */
2171
- if (activeTab !== prevActiveTab ||
2172
- prevHref !== (currentRoute === null || currentRoute === void 0 ? void 0 : currentRoute.pathname)) {
2216
+ if (activeTab !== prevActiveTab || prevHref !== currentRoute.pathname) {
2173
2217
  /**
2174
2218
  * By default the search is `undefined` in Ionic Vue,
2175
2219
  * but Vue Router can set the search to the empty string.
2176
2220
  * We check for truthy here because empty string is falsy
2177
2221
  * and currentRoute.search cannot ever be a boolean.
2178
2222
  */
2179
- const search = (currentRoute === null || currentRoute === void 0 ? void 0 : currentRoute.search) ? `?${currentRoute.search}` : "";
2180
- tabs[activeTab] = Object.assign(Object.assign({}, tabs[activeTab]), { currentHref: (currentRoute === null || currentRoute === void 0 ? void 0 : currentRoute.pathname) + search });
2223
+ const search = currentRoute.search ? `?${currentRoute.search}` : "";
2224
+ tabs[activeTab] = {
2225
+ ...tabs[activeTab],
2226
+ currentHref: currentRoute.pathname + search,
2227
+ };
2181
2228
  }
2182
2229
  /**
2183
2230
  * If navigating back and the tabs change,
2184
2231
  * set the previous tab back to its original href.
2185
2232
  */
2186
- if ((currentRoute === null || currentRoute === void 0 ? void 0 : currentRoute.routerAction) === "pop" &&
2233
+ if (prevActiveTab &&
2234
+ currentRoute.routerAction === "pop" &&
2187
2235
  activeTab !== prevActiveTab) {
2188
- tabs[prevActiveTab] = Object.assign(Object.assign({}, tabs[prevActiveTab]), { currentHref: tabs[prevActiveTab].originalHref });
2236
+ tabs[prevActiveTab] = {
2237
+ ...tabs[prevActiveTab],
2238
+ currentHref: tabs[prevActiveTab].originalHref,
2239
+ };
2189
2240
  }
2190
2241
  }
2191
2242
  this.tabSwitch(activeTab, ionRouter);
@@ -2199,7 +2250,7 @@ const IonTabBar = defineComponent({
2199
2250
  const childNodes = this.$data.tabVnodes;
2200
2251
  const { activeTab: prevActiveTab } = this.$data.tabState;
2201
2252
  const tabState = this.$data.tabState;
2202
- const activeChild = childNodes.find((child) => { var _a; return isTabButton(child) && ((_a = child.props) === null || _a === void 0 ? void 0 : _a.tab) === activeTab; });
2253
+ const activeChild = childNodes.find((child) => isTabButton(child) && child.props?.tab === activeTab);
2203
2254
  const tabBar = this.$refs.ionTabBar;
2204
2255
  const tabDidChange = activeTab !== prevActiveTab;
2205
2256
  if (tabBar) {
@@ -2231,15 +2282,17 @@ const IonTabBar = defineComponent({
2231
2282
  * IonTabs. Instead, data will be passed through
2232
2283
  * the provide/inject.
2233
2284
  */
2234
- const tabBarData = inject("tabBarData");
2235
- this.$data.tabState.hasRouterOutlet = tabBarData.value.hasRouterOutlet;
2236
- this.$data._tabsWillChange = tabBarData.value._tabsWillChange;
2237
- this.$data._tabsDidChange = tabBarData.value._tabsDidChange;
2285
+ const tabBarData = inject("tabBarData", null);
2286
+ if (tabBarData) {
2287
+ this.$data.tabState.hasRouterOutlet = tabBarData.value.hasRouterOutlet;
2288
+ this.$data._tabsWillChange = tabBarData.value._tabsWillChange;
2289
+ this.$data._tabsDidChange = tabBarData.value._tabsDidChange;
2290
+ }
2238
2291
  this.setupTabState(ionRouter);
2239
- ionRouter === null || ionRouter === void 0 ? void 0 : ionRouter.registerHistoryChangeListener(() => this.checkActiveTab(ionRouter));
2292
+ ionRouter?.registerHistoryChangeListener(() => this.checkActiveTab(ionRouter));
2240
2293
  },
2241
2294
  setup(_, { slots }) {
2242
- defineCustomElement$1k();
2295
+ defineCustomElement$1h();
2243
2296
  return () => {
2244
2297
  return h("ion-tab-bar", { ref: "ionTabBar" }, slots.default && slots.default());
2245
2298
  };
@@ -2248,9 +2301,12 @@ const IonTabBar = defineComponent({
2248
2301
 
2249
2302
  const userComponents = shallowRef([]);
2250
2303
  const IonApp = /*@__PURE__*/ defineComponent((_, { attrs, slots }) => {
2251
- defineCustomElement$1l();
2304
+ defineCustomElement$1i();
2252
2305
  return () => {
2253
- return h("ion-app", Object.assign({ name: "IonApp" }, attrs), [slots.default && slots.default(), ...userComponents.value]);
2306
+ return h("ion-app", {
2307
+ name: "IonApp",
2308
+ ...attrs,
2309
+ }, [slots.default && slots.default(), ...userComponents.value]);
2254
2310
  };
2255
2311
  }, {
2256
2312
  name: "IonApp",
@@ -2280,7 +2336,7 @@ const VueDelegate = (addFn = addTeleportedUserComponent, removeFn = removeTelepo
2280
2336
  const div = document.createElement("div");
2281
2337
  classes && div.classList.add(...classes);
2282
2338
  parentElement.appendChild(div);
2283
- const hostComponent = h(Teleport, { to: div }, h(componentOrTagName, Object.assign({}, componentProps)));
2339
+ const hostComponent = h(Teleport, { to: div }, h(componentOrTagName, { ...componentProps }));
2284
2340
  /**
2285
2341
  * Ionic Framework will use what is returned from `attachViewToDom`
2286
2342
  * as the `component` argument in `removeViewFromDom`.
@@ -2301,7 +2357,7 @@ const VueDelegate = (addFn = addTeleportedUserComponent, removeFn = removeTelepo
2301
2357
  };
2302
2358
 
2303
2359
  const IonNav = /*@__PURE__*/ defineComponent((props) => {
2304
- defineCustomElement$1m();
2360
+ defineCustomElement$1j();
2305
2361
  const views = shallowRef([]);
2306
2362
  /**
2307
2363
  * Allows us to create the component
@@ -2311,7 +2367,7 @@ const IonNav = /*@__PURE__*/ defineComponent((props) => {
2311
2367
  const removeView = (component) => (views.value = views.value.filter((cmp) => cmp !== component));
2312
2368
  const delegate = VueDelegate(addView, removeView);
2313
2369
  return () => {
2314
- return h("ion-nav", Object.assign(Object.assign({}, props), { delegate }), views.value);
2370
+ return h("ion-nav", { ...props, delegate }, views.value);
2315
2371
  };
2316
2372
  }, {
2317
2373
  name: "IonNav",
@@ -2348,25 +2404,27 @@ const IonNav = /*@__PURE__*/ defineComponent((props) => {
2348
2404
  });
2349
2405
 
2350
2406
  const IonIcon = /*@__PURE__*/ defineComponent((props, { slots }) => {
2351
- defineCustomElement$1n();
2407
+ defineCustomElement$1k();
2352
2408
  return () => {
2353
- var _a, _b;
2354
2409
  const { icon, ios, md, mode } = props;
2355
2410
  let iconToUse;
2356
2411
  const config = getConfig();
2357
- const iconMode = mode || (config === null || config === void 0 ? void 0 : config.get("mode"));
2412
+ const iconMode = mode || config?.get("mode");
2358
2413
  if (ios || md) {
2359
2414
  if (iconMode === "ios") {
2360
- iconToUse = (_a = ios !== null && ios !== void 0 ? ios : md) !== null && _a !== void 0 ? _a : icon;
2415
+ iconToUse = ios ?? md ?? icon;
2361
2416
  }
2362
2417
  else {
2363
- iconToUse = (_b = md !== null && md !== void 0 ? md : ios) !== null && _b !== void 0 ? _b : icon;
2418
+ iconToUse = md ?? ios ?? icon;
2364
2419
  }
2365
2420
  }
2366
2421
  else {
2367
2422
  iconToUse = icon;
2368
2423
  }
2369
- return h("ion-icon", Object.assign(Object.assign({}, props), { icon: iconToUse }), slots);
2424
+ return h("ion-icon", {
2425
+ ...props,
2426
+ icon: iconToUse,
2427
+ }, slots);
2370
2428
  };
2371
2429
  }, {
2372
2430
  name: "IonIcon",
@@ -2431,7 +2489,6 @@ const defineOverlayContainer = (name, defineCustomElement, componentProps = [],
2431
2489
  overlay.value = undefined;
2432
2490
  };
2433
2491
  const present = async (props) => {
2434
- var _a;
2435
2492
  /**
2436
2493
  * Do not open another instance
2437
2494
  * if one is already opened.
@@ -2439,7 +2496,7 @@ const defineOverlayContainer = (name, defineCustomElement, componentProps = [],
2439
2496
  if (overlay.value) {
2440
2497
  await overlay.value;
2441
2498
  }
2442
- if ((_a = overlay.value) === null || _a === void 0 ? void 0 : _a.present) {
2499
+ if (overlay.value?.present) {
2443
2500
  await overlay.value.present();
2444
2501
  return;
2445
2502
  }
@@ -2471,7 +2528,10 @@ const defineOverlayContainer = (name, defineCustomElement, componentProps = [],
2471
2528
  delete restOfProps.onIonDragEnd;
2472
2529
  }
2473
2530
  const component = slots.default && slots.default()[0];
2474
- overlay.value = controller.create(Object.assign(Object.assign({}, restOfProps), { component }));
2531
+ overlay.value = controller.create({
2532
+ ...restOfProps,
2533
+ component,
2534
+ });
2475
2535
  overlay.value = await overlay.value;
2476
2536
  eventListeners.forEach((eventListener) => {
2477
2537
  overlay.value.addEventListener(eventListener.componentEv, () => {
@@ -2566,7 +2626,7 @@ const defineOverlayContainer = (name, defineCustomElement, componentProps = [],
2566
2626
  }
2567
2627
  return slots;
2568
2628
  };
2569
- return h(name, Object.assign(Object.assign({}, restOfProps), { ref: elementRef }),
2629
+ return h(name, { ...restOfProps, ref: elementRef },
2570
2630
  /**
2571
2631
  * When binding keepContentsMounted as an attribute
2572
2632
  * i.e. <ion-modal keep-contents-mounted></ion-modal>
@@ -2583,10 +2643,13 @@ const defineOverlayContainer = (name, defineCustomElement, componentProps = [],
2583
2643
  };
2584
2644
  const options = {
2585
2645
  name,
2586
- props: Object.assign({ isOpen: DEFAULT_EMPTY_PROP }, componentProps.reduce((acc, prop) => {
2587
- acc[prop] = DEFAULT_EMPTY_PROP;
2588
- return acc;
2589
- }, {})),
2646
+ props: {
2647
+ isOpen: DEFAULT_EMPTY_PROP,
2648
+ ...componentProps.reduce((acc, prop) => {
2649
+ acc[prop] = DEFAULT_EMPTY_PROP;
2650
+ return acc;
2651
+ }, {}),
2652
+ },
2590
2653
  emits: typeof controller !== "undefined"
2591
2654
  ? ["willPresent", "didPresent", "willDismiss", "didDismiss"]
2592
2655
  : undefined,
@@ -2600,13 +2663,12 @@ const defineOverlayContainer = (name, defineCustomElement, componentProps = [],
2600
2663
  * This is an autogenerated file created by 'scripts/copy-overlays.js'.
2601
2664
  * Changes made to this file will be overwritten on build.
2602
2665
  */
2603
- const IonActionSheet = /*@__PURE__*/ defineOverlayContainer('ion-action-sheet', defineCustomElement$1o, ['animated', 'backdropDismiss', 'buttons', 'cssClass', 'enterAnimation', 'header', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'mode', 'subHeader', 'theme', 'translucent', 'trigger']);
2604
- const IonAlert = /*@__PURE__*/ defineOverlayContainer('ion-alert', defineCustomElement$1p, ['animated', 'backdropDismiss', 'buttons', 'cssClass', 'enterAnimation', 'header', 'htmlAttributes', 'inputs', 'isOpen', 'keyboardClose', 'leaveAnimation', 'message', 'mode', 'subHeader', 'theme', 'translucent', 'trigger']);
2605
- const IonLoading = /*@__PURE__*/ defineOverlayContainer('ion-loading', defineCustomElement$1q, ['animated', 'backdropDismiss', 'cssClass', 'duration', 'enterAnimation', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'message', 'mode', 'showBackdrop', 'spinner', 'theme', 'translucent', 'trigger']);
2606
- const IonModal = /*@__PURE__*/ defineOverlayContainer('ion-modal', defineCustomElement$1r, ['animated', 'backdropBreakpoint', 'backdropDismiss', 'breakpoints', 'canDismiss', 'enterAnimation', 'expandToScroll', 'focusTrap', 'handle', 'handleBehavior', 'htmlAttributes', 'initialBreakpoint', 'isOpen', 'keepContentsMounted', 'keyboardClose', 'leaveAnimation', 'mode', 'presentingElement', 'shape', 'showBackdrop', 'theme', 'trigger'], true);
2607
- const IonPickerLegacy = /*@__PURE__*/ defineOverlayContainer('ion-picker-legacy', defineCustomElement$1s, ['animated', 'backdropDismiss', 'buttons', 'columns', 'cssClass', 'duration', 'enterAnimation', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'mode', 'showBackdrop', 'theme', 'trigger']);
2608
- const IonPopover = /*@__PURE__*/ defineOverlayContainer('ion-popover', defineCustomElement$1t, ['alignment', 'animated', 'arrow', 'backdropDismiss', 'component', 'componentProps', 'dismissOnSelect', 'enterAnimation', 'event', 'focusTrap', 'htmlAttributes', 'isOpen', 'keepContentsMounted', 'keyboardClose', 'leaveAnimation', 'mode', 'reference', 'showBackdrop', 'side', 'size', 'theme', 'translucent', 'trigger', 'triggerAction']);
2609
- const IonToast = /*@__PURE__*/ defineOverlayContainer('ion-toast', defineCustomElement$1u, ['animated', 'buttons', 'color', 'cssClass', 'duration', 'enterAnimation', 'header', 'htmlAttributes', 'hue', 'icon', 'isOpen', 'keyboardClose', 'layout', 'leaveAnimation', 'message', 'mode', 'position', 'positionAnchor', 'shape', 'swipeGesture', 'theme', 'translucent', 'trigger']);
2666
+ const IonActionSheet = /*@__PURE__*/ defineOverlayContainer('ion-action-sheet', defineCustomElement$1l, ['animated', 'backdropDismiss', 'buttons', 'cssClass', 'enterAnimation', 'header', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'mode', 'subHeader', 'translucent', 'trigger']);
2667
+ const IonAlert = /*@__PURE__*/ defineOverlayContainer('ion-alert', defineCustomElement$1m, ['animated', 'backdropDismiss', 'buttons', 'cssClass', 'enterAnimation', 'header', 'htmlAttributes', 'inputs', 'isOpen', 'keyboardClose', 'leaveAnimation', 'message', 'mode', 'subHeader', 'translucent', 'trigger']);
2668
+ const IonLoading = /*@__PURE__*/ defineOverlayContainer('ion-loading', defineCustomElement$1n, ['animated', 'backdropDismiss', 'cssClass', 'duration', 'enterAnimation', 'htmlAttributes', 'isOpen', 'keyboardClose', 'leaveAnimation', 'message', 'mode', 'showBackdrop', 'spinner', 'translucent', 'trigger']);
2669
+ const IonModal = /*@__PURE__*/ defineOverlayContainer('ion-modal', defineCustomElement$1o, ['animated', 'backdropBreakpoint', 'backdropDismiss', 'breakpoints', 'canDismiss', 'enterAnimation', 'expandToScroll', 'focusTrap', 'handle', 'handleBehavior', 'htmlAttributes', 'initialBreakpoint', 'isOpen', 'keepContentsMounted', 'keyboardClose', 'leaveAnimation', 'mode', 'presentingElement', 'showBackdrop', 'trigger'], true);
2670
+ const IonPopover = /*@__PURE__*/ defineOverlayContainer('ion-popover', defineCustomElement$1p, ['alignment', 'animated', 'arrow', 'backdropDismiss', 'component', 'componentProps', 'dismissOnSelect', 'enterAnimation', 'event', 'focusTrap', 'htmlAttributes', 'isOpen', 'keepContentsMounted', 'keyboardClose', 'leaveAnimation', 'mode', 'reference', 'showBackdrop', 'side', 'size', 'translucent', 'trigger', 'triggerAction']);
2671
+ const IonToast = /*@__PURE__*/ defineOverlayContainer('ion-toast', defineCustomElement$1q, ['animated', 'buttons', 'color', 'cssClass', 'duration', 'enterAnimation', 'header', 'htmlAttributes', 'icon', 'isOpen', 'keyboardClose', 'layout', 'leaveAnimation', 'message', 'mode', 'position', 'positionAnchor', 'swipeGesture', 'translucent', 'trigger']);
2610
2672
 
2611
2673
  // TODO(FW-2969): types
2612
2674
  /**
@@ -2619,20 +2681,19 @@ const createController = (defineCustomElement, oldController, useDelegate = fals
2619
2681
  const oldCreate = oldController.create.bind(oldController);
2620
2682
  oldController.create = (options) => {
2621
2683
  defineCustomElement();
2622
- return oldCreate(Object.assign(Object.assign({}, options), { delegate }));
2684
+ return oldCreate({
2685
+ ...options,
2686
+ delegate,
2687
+ });
2623
2688
  };
2624
2689
  return oldController;
2625
2690
  };
2626
- const modalController = /*@__PURE__*/ createController(defineCustomElement$1r, modalController$1, true);
2627
- const popoverController = /*@__PURE__*/ createController(defineCustomElement$1t, popoverController$1, true);
2628
- const alertController = /*@__PURE__*/ createController(defineCustomElement$1p, alertController$1);
2629
- const actionSheetController = /*@__PURE__*/ createController(defineCustomElement$1o, actionSheetController$1);
2630
- const loadingController = /*@__PURE__*/ createController(defineCustomElement$1q, loadingController$1);
2631
- /**
2632
- * @deprecated Use the inline ion-picker component instead.
2633
- */
2634
- const pickerController = /*@__PURE__*/ createController(defineCustomElement$1s, pickerController$1);
2635
- const toastController = /*@__PURE__*/ createController(defineCustomElement$1u, toastController$1);
2691
+ const modalController = /*@__PURE__*/ createController(defineCustomElement$1o, modalController$1, true);
2692
+ const popoverController = /*@__PURE__*/ createController(defineCustomElement$1p, popoverController$1, true);
2693
+ const alertController = /*@__PURE__*/ createController(defineCustomElement$1m, alertController$1);
2694
+ const actionSheetController = /*@__PURE__*/ createController(defineCustomElement$1l, actionSheetController$1);
2695
+ const loadingController = /*@__PURE__*/ createController(defineCustomElement$1n, loadingController$1);
2696
+ const toastController = /*@__PURE__*/ createController(defineCustomElement$1q, toastController$1);
2636
2697
 
2637
- export { IonAccordion, IonAccordionGroup, IonActionSheet, IonAlert, IonApp, IonAvatar, IonBackButton, IonBackdrop, IonBadge, IonBreadcrumb, IonBreadcrumbs, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCheckbox, IonChip, IonCol, IonContent, IonDatetime, IonDatetimeButton, IonDivider, IonFab, IonFabButton, IonFabList, IonFooter, IonGallery, IonGalleryItem, IonGrid, IonHeader, IonIcon, IonImg, IonInfiniteScroll, IonInfiniteScrollContent, IonInput, IonInputOtp, IonInputPasswordToggle, IonItem, IonItemDivider, IonItemGroup, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonList, IonListHeader, IonLoading, IonMenu, IonMenuButton, IonMenuToggle, IonModal, IonNav, IonNavLink, IonNote, IonPage, IonPicker, IonPickerColumn, IonPickerColumnOption, IonPickerLegacy, IonPopover, IonProgressBar, IonRadio, IonRadioGroup, IonRange, IonRefresher, IonRefresherContent, IonReorder, IonReorderGroup, IonRippleEffect, IonRouterOutlet, IonRow, IonSearchbar, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonSelect, IonSelectModal, IonSelectOption, IonSkeletonText, IonSpinner, IonSplitPane, IonTab, IonTabBar, IonTabButton, IonTabs, IonText, IonTextarea, IonThumbnail, IonTitle, IonToast, IonToggle, IonToolbar, IonicVue, actionSheetController, alertController, loadingController, modalController, onIonViewDidEnter, onIonViewDidLeave, onIonViewWillEnter, onIonViewWillLeave, pickerController, popoverController, toastController, useBackButton, useIonRouter, useKeyboard };
2698
+ export { IonAccordion, IonAccordionGroup, IonActionSheet, IonAlert, IonApp, IonAvatar, IonBackButton, IonBackdrop, IonBadge, IonBreadcrumb, IonBreadcrumbs, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCheckbox, IonChip, IonCol, IonContent, IonDatetime, IonDatetimeButton, IonFab, IonFabButton, IonFabList, IonFooter, IonGrid, IonHeader, IonIcon, IonImg, IonInfiniteScroll, IonInfiniteScrollContent, IonInput, IonInputOtp, IonInputPasswordToggle, IonItem, IonItemDivider, IonItemGroup, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonList, IonListHeader, IonLoading, IonMenu, IonMenuButton, IonMenuToggle, IonModal, IonNav, IonNavLink, IonNote, IonPage, IonPicker, IonPickerColumn, IonPickerColumnOption, IonPopover, IonProgressBar, IonRadio, IonRadioGroup, IonRange, IonRefresher, IonRefresherContent, IonReorder, IonReorderGroup, IonRippleEffect, IonRouterOutlet, IonRow, IonSearchbar, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonSelect, IonSelectModal, IonSelectOption, IonSkeletonText, IonSpinner, IonSplitPane, IonTab, IonTabBar, IonTabButton, IonTabs, IonText, IonTextarea, IonThumbnail, IonTitle, IonToast, IonToggle, IonToolbar, IonicVue, actionSheetController, alertController, loadingController, modalController, onIonViewDidEnter, onIonViewDidLeave, onIonViewWillEnter, onIonViewWillLeave, popoverController, toastController, useBackButton, useIonRouter, useKeyboard };
2638
2699
  //# sourceMappingURL=index.js.map