@ionic/react 7.5.3-dev.11698856380.18896dcd → 7.5.3-dev.11698858201.14165f23

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 (247) hide show
  1. package/dist/components/CreateAnimation.js +107 -0
  2. package/dist/components/CreateAnimation.js.map +7 -0
  3. package/dist/components/IonActionSheet.js +8 -0
  4. package/dist/components/IonActionSheet.js.map +7 -0
  5. package/dist/components/IonAlert.js +8 -0
  6. package/dist/components/IonAlert.js.map +7 -0
  7. package/dist/components/IonApp.js +42 -0
  8. package/dist/components/IonApp.js.map +7 -0
  9. package/dist/components/IonIcon.js +39 -0
  10. package/dist/components/IonIcon.js.map +7 -0
  11. package/dist/components/IonLoading.js +8 -0
  12. package/dist/components/IonLoading.js.map +7 -0
  13. package/dist/components/IonModal.js +9 -0
  14. package/dist/components/IonModal.js.map +7 -0
  15. package/dist/components/IonOverlayManager.js +29 -0
  16. package/dist/components/IonOverlayManager.js.map +7 -0
  17. package/dist/components/IonPage.js +31 -0
  18. package/dist/components/IonPage.js.map +7 -0
  19. package/dist/components/IonPicker.js +8 -0
  20. package/dist/components/IonPicker.js.map +7 -0
  21. package/dist/components/IonPopover.js +8 -0
  22. package/dist/components/IonPopover.js.map +7 -0
  23. package/dist/components/IonRedirect.js +19 -0
  24. package/dist/components/IonRedirect.js.map +7 -0
  25. package/dist/components/IonRoute.js +17 -0
  26. package/dist/components/IonRoute.js.map +7 -0
  27. package/dist/components/IonRouterContext.js +32 -0
  28. package/dist/components/IonRouterContext.js.map +7 -0
  29. package/dist/components/IonRouterOutlet.js +24 -0
  30. package/dist/components/IonRouterOutlet.js.map +7 -0
  31. package/dist/components/IonToast.js +8 -0
  32. package/dist/components/IonToast.js.map +7 -0
  33. package/dist/components/IonicReactProps.js +2 -0
  34. package/dist/components/IonicReactProps.js.map +7 -0
  35. package/dist/components/__tests__/utils.spec.js +50 -0
  36. package/dist/components/__tests__/utils.spec.js.map +7 -0
  37. package/dist/components/createControllerComponent.js +80 -0
  38. package/dist/components/createControllerComponent.js.map +7 -0
  39. package/dist/components/createInlineOverlayComponent.js +114 -0
  40. package/dist/components/createInlineOverlayComponent.js.map +7 -0
  41. package/dist/components/createOverlayComponent.js +88 -0
  42. package/dist/components/createOverlayComponent.js.map +7 -0
  43. package/dist/components/createRoutingComponent.js +79 -0
  44. package/dist/components/createRoutingComponent.js.map +7 -0
  45. package/dist/components/hrefprops.js +2 -0
  46. package/dist/components/hrefprops.js.map +7 -0
  47. package/dist/components/index.js +126 -0
  48. package/dist/components/index.js.map +7 -0
  49. package/dist/components/inner-proxies.js +30 -0
  50. package/dist/components/inner-proxies.js.map +7 -0
  51. package/dist/components/navigation/IonBackButton.js +31 -0
  52. package/dist/components/navigation/IonBackButton.js.map +7 -0
  53. package/dist/components/navigation/IonNav.js +21 -0
  54. package/dist/components/navigation/IonNav.js.map +7 -0
  55. package/dist/components/navigation/IonTabBar.js +173 -0
  56. package/dist/components/navigation/IonTabBar.js.map +7 -0
  57. package/dist/components/navigation/IonTabButton.js +30 -0
  58. package/dist/components/navigation/IonTabButton.js.map +7 -0
  59. package/dist/components/navigation/IonTabs.js +103 -0
  60. package/dist/components/navigation/IonTabs.js.map +7 -0
  61. package/dist/components/navigation/IonTabsContext.js +7 -0
  62. package/dist/components/navigation/IonTabsContext.js.map +7 -0
  63. package/dist/components/proxies.js +131 -0
  64. package/dist/components/proxies.js.map +7 -0
  65. package/dist/components/react-component-lib/createComponent.js +58 -0
  66. package/dist/components/react-component-lib/createComponent.js.map +7 -0
  67. package/dist/components/react-component-lib/createOverlayComponent.js +86 -0
  68. package/dist/components/react-component-lib/createOverlayComponent.js.map +7 -0
  69. package/dist/components/react-component-lib/index.js +4 -0
  70. package/dist/components/react-component-lib/index.js.map +7 -0
  71. package/dist/components/react-component-lib/interfaces.js +2 -0
  72. package/dist/components/react-component-lib/interfaces.js.map +7 -0
  73. package/dist/components/react-component-lib/utils/attachProps.js +92 -0
  74. package/dist/components/react-component-lib/utils/attachProps.js.map +7 -0
  75. package/dist/components/react-component-lib/utils/case.js +4 -0
  76. package/dist/components/react-component-lib/utils/case.js.map +7 -0
  77. package/dist/components/react-component-lib/utils/dev.js +14 -0
  78. package/dist/components/react-component-lib/utils/dev.js.map +7 -0
  79. package/dist/components/react-component-lib/utils/index.js +31 -0
  80. package/dist/components/react-component-lib/utils/index.js.map +7 -0
  81. package/dist/components/routing-proxies.js +29 -0
  82. package/dist/components/routing-proxies.js.map +7 -0
  83. package/dist/components/utils/detachProps.js +24 -0
  84. package/dist/components/utils/detachProps.js.map +7 -0
  85. package/dist/components/utils/index.js +26 -0
  86. package/dist/components/utils/index.js.map +7 -0
  87. package/dist/components/utils/ionRenderToString.js +36 -0
  88. package/dist/components/utils/ionRenderToString.js.map +7 -0
  89. package/dist/contexts/IonContext.js +11 -0
  90. package/dist/contexts/IonContext.js.map +7 -0
  91. package/dist/contexts/IonLifeCycleContext.js +185 -0
  92. package/dist/contexts/IonLifeCycleContext.js.map +7 -0
  93. package/dist/contexts/NavContext.js +36 -0
  94. package/dist/contexts/NavContext.js.map +7 -0
  95. package/dist/framework-delegate.js +30 -0
  96. package/dist/framework-delegate.js.map +7 -0
  97. package/dist/hooks/HookOverlayOptions.js +2 -0
  98. package/dist/hooks/HookOverlayOptions.js.map +7 -0
  99. package/dist/hooks/__tests__/hooks.spec.js +6 -0
  100. package/dist/hooks/__tests__/hooks.spec.js.map +7 -0
  101. package/dist/hooks/useController.js +45 -0
  102. package/dist/hooks/useController.js.map +7 -0
  103. package/dist/hooks/useIonActionSheet.js +27 -0
  104. package/dist/hooks/useIonActionSheet.js.map +7 -0
  105. package/dist/hooks/useIonAlert.js +23 -0
  106. package/dist/hooks/useIonAlert.js.map +7 -0
  107. package/dist/hooks/useIonLoading.js +28 -0
  108. package/dist/hooks/useIonLoading.js.map +7 -0
  109. package/dist/hooks/useIonModal.js +22 -0
  110. package/dist/hooks/useIonModal.js.map +7 -0
  111. package/dist/hooks/useIonPicker.js +27 -0
  112. package/dist/hooks/useIonPicker.js.map +7 -0
  113. package/dist/hooks/useIonPopover.js +22 -0
  114. package/dist/hooks/useIonPopover.js.map +7 -0
  115. package/dist/hooks/useIonToast.js +23 -0
  116. package/dist/hooks/useIonToast.js.map +7 -0
  117. package/dist/hooks/useOverlay.js +67 -0
  118. package/dist/hooks/useOverlay.js.map +7 -0
  119. package/dist/index.js +8 -2443
  120. package/dist/index.js.map +7 -1
  121. package/dist/lifecycle/IonLifeCycleHOC.js +41 -0
  122. package/dist/lifecycle/IonLifeCycleHOC.js.map +7 -0
  123. package/dist/lifecycle/hooks.js +52 -0
  124. package/dist/lifecycle/hooks.js.map +7 -0
  125. package/dist/lifecycle/index.js +4 -0
  126. package/dist/lifecycle/index.js.map +7 -0
  127. package/dist/models/ReactComponentOrElement.js +2 -0
  128. package/dist/models/ReactComponentOrElement.js.map +7 -0
  129. package/dist/models/RouteAction.js +2 -0
  130. package/dist/models/RouteAction.js.map +7 -0
  131. package/dist/models/RouteInfo.js +2 -0
  132. package/dist/models/RouteInfo.js.map +7 -0
  133. package/dist/models/RouterDirection.js +2 -0
  134. package/dist/models/RouterDirection.js.map +7 -0
  135. package/dist/models/RouterOptions.js +2 -0
  136. package/dist/models/RouterOptions.js.map +7 -0
  137. package/dist/models/index.js +7 -0
  138. package/dist/models/index.js.map +7 -0
  139. package/dist/routing/LocationHistory.js +140 -0
  140. package/dist/routing/LocationHistory.js.map +7 -0
  141. package/dist/routing/NavManager.js +76 -0
  142. package/dist/routing/NavManager.js.map +7 -0
  143. package/dist/routing/OutletPageManager.js +69 -0
  144. package/dist/routing/OutletPageManager.js.map +7 -0
  145. package/dist/routing/PageManager.js +60 -0
  146. package/dist/routing/PageManager.js.map +7 -0
  147. package/dist/routing/RouteManagerContext.js +15 -0
  148. package/dist/routing/RouteManagerContext.js.map +7 -0
  149. package/dist/routing/StackContext.js +7 -0
  150. package/dist/routing/StackContext.js.map +7 -0
  151. package/dist/routing/ViewItem.js +2 -0
  152. package/dist/routing/ViewItem.js.map +7 -0
  153. package/dist/routing/ViewLifeCycleManager.js +36 -0
  154. package/dist/routing/ViewLifeCycleManager.js.map +7 -0
  155. package/dist/routing/ViewStacks.js +49 -0
  156. package/dist/routing/ViewStacks.js.map +7 -0
  157. package/dist/routing/__tests__/LocationHistory.spec.js +185 -0
  158. package/dist/routing/__tests__/LocationHistory.spec.js.map +7 -0
  159. package/dist/routing/index.js +9 -0
  160. package/dist/routing/index.js.map +7 -0
  161. package/dist/utils/HTMLElementSSR.js +4 -0
  162. package/dist/utils/HTMLElementSSR.js.map +7 -0
  163. package/dist/utils/generateId.js +8 -0
  164. package/dist/utils/generateId.js.map +7 -0
  165. package/package.json +5 -12
  166. package/dist/types/components/CreateAnimation.d.ts +0 -71
  167. package/dist/types/components/IonActionSheet.d.ts +0 -3
  168. package/dist/types/components/IonAlert.d.ts +0 -3
  169. package/dist/types/components/IonApp.d.ts +0 -41
  170. package/dist/types/components/IonIcon.d.ts +0 -16
  171. package/dist/types/components/IonLoading.d.ts +0 -3
  172. package/dist/types/components/IonModal.d.ts +0 -3
  173. package/dist/types/components/IonOverlayManager.d.ts +0 -15
  174. package/dist/types/components/IonPage.d.ts +0 -3
  175. package/dist/types/components/IonPicker.d.ts +0 -3
  176. package/dist/types/components/IonPopover.d.ts +0 -3
  177. package/dist/types/components/IonRedirect.d.ts +0 -16
  178. package/dist/types/components/IonRoute.d.ts +0 -17
  179. package/dist/types/components/IonRouterContext.d.ts +0 -42
  180. package/dist/types/components/IonRouterOutlet.d.ts +0 -8
  181. package/dist/types/components/IonToast.d.ts +0 -3
  182. package/dist/types/components/IonicReactProps.d.ts +0 -6
  183. package/dist/types/components/__tests__/utils.spec.d.ts +0 -1
  184. package/dist/types/components/createControllerComponent.d.ts +0 -19
  185. package/dist/types/components/createInlineOverlayComponent.d.ts +0 -2
  186. package/dist/types/components/createOverlayComponent.d.ts +0 -20
  187. package/dist/types/components/createRoutingComponent.d.ts +0 -2
  188. package/dist/types/components/hrefprops.d.ts +0 -9
  189. package/dist/types/components/index.d.ts +0 -35
  190. package/dist/types/components/inner-proxies.d.ts +0 -14
  191. package/dist/types/components/navigation/IonBackButton.d.ts +0 -68
  192. package/dist/types/components/navigation/IonNav.d.ts +0 -5
  193. package/dist/types/components/navigation/IonTabBar.d.ts +0 -15
  194. package/dist/types/components/navigation/IonTabButton.d.ts +0 -40
  195. package/dist/types/components/navigation/IonTabs.d.ts +0 -49
  196. package/dist/types/components/navigation/IonTabsContext.d.ts +0 -6
  197. package/dist/types/components/proxies.d.ts +0 -66
  198. package/dist/types/components/react-component-lib/createComponent.d.ts +0 -10
  199. package/dist/types/components/react-component-lib/createOverlayComponent.d.ts +0 -21
  200. package/dist/types/components/react-component-lib/index.d.ts +0 -2
  201. package/dist/types/components/react-component-lib/interfaces.d.ts +0 -29
  202. package/dist/types/components/react-component-lib/utils/attachProps.d.ts +0 -16
  203. package/dist/types/components/react-component-lib/utils/case.d.ts +0 -2
  204. package/dist/types/components/react-component-lib/utils/dev.d.ts +0 -2
  205. package/dist/types/components/react-component-lib/utils/index.d.ts +0 -10
  206. package/dist/types/components/routing-proxies.d.ts +0 -44
  207. package/dist/types/components/utils/detachProps.d.ts +0 -8
  208. package/dist/types/components/utils/index.d.ts +0 -8
  209. package/dist/types/components/utils/ionRenderToString.d.ts +0 -2
  210. package/dist/types/contexts/IonContext.d.ts +0 -7
  211. package/dist/types/contexts/IonLifeCycleContext.d.ts +0 -72
  212. package/dist/types/contexts/NavContext.d.ts +0 -17
  213. package/dist/types/framework-delegate.d.ts +0 -2
  214. package/dist/types/hooks/HookOverlayOptions.d.ts +0 -7
  215. package/dist/types/hooks/__tests__/hooks.spec.d.ts +0 -0
  216. package/dist/types/hooks/useController.d.ts +0 -12
  217. package/dist/types/hooks/useIonActionSheet.d.ts +0 -26
  218. package/dist/types/hooks/useIonAlert.d.ts +0 -26
  219. package/dist/types/hooks/useIonLoading.d.ts +0 -27
  220. package/dist/types/hooks/useIonModal.d.ts +0 -17
  221. package/dist/types/hooks/useIonPicker.d.ts +0 -26
  222. package/dist/types/hooks/useIonPopover.d.ts +0 -17
  223. package/dist/types/hooks/useIonToast.d.ts +0 -26
  224. package/dist/types/hooks/useOverlay.d.ts +0 -13
  225. package/dist/types/index.d.ts +0 -7
  226. package/dist/types/lifecycle/IonLifeCycleHOC.d.ts +0 -31
  227. package/dist/types/lifecycle/hooks.d.ts +0 -5
  228. package/dist/types/lifecycle/index.d.ts +0 -2
  229. package/dist/types/models/ReactComponentOrElement.d.ts +0 -2
  230. package/dist/types/models/RouteAction.d.ts +0 -1
  231. package/dist/types/models/RouteInfo.d.ts +0 -19
  232. package/dist/types/models/RouterDirection.d.ts +0 -1
  233. package/dist/types/models/RouterOptions.d.ts +0 -10
  234. package/dist/types/models/index.d.ts +0 -5
  235. package/dist/types/routing/LocationHistory.d.ts +0 -20
  236. package/dist/types/routing/NavManager.d.ts +0 -38
  237. package/dist/types/routing/OutletPageManager.d.ts +0 -26
  238. package/dist/types/routing/PageManager.d.ts +0 -25
  239. package/dist/types/routing/RouteManagerContext.d.ts +0 -16
  240. package/dist/types/routing/StackContext.d.ts +0 -7
  241. package/dist/types/routing/ViewItem.d.ts +0 -12
  242. package/dist/types/routing/ViewLifeCycleManager.d.ts +0 -42
  243. package/dist/types/routing/ViewStacks.d.ts +0 -19
  244. package/dist/types/routing/__tests__/LocationHistory.spec.d.ts +0 -1
  245. package/dist/types/routing/index.d.ts +0 -7
  246. package/dist/types/utils/HTMLElementSSR.d.ts +0 -4
  247. package/dist/types/utils/generateId.d.ts +0 -1
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ import { initialize } from "@ionic/core/components";
3
+ export {
4
+ createAnimation,
5
+ createGesture,
6
+ iosTransitionAnimation,
7
+ mdTransitionAnimation,
8
+ IonicSlides,
9
+ getTimeGivenProgression,
10
+ getIonPageElement,
11
+ openURL,
12
+ Animation,
13
+ AnimationBuilder,
14
+ AnimationCallbackOptions,
15
+ AnimationDirection,
16
+ AnimationFill,
17
+ AnimationKeyFrames,
18
+ AnimationLifecycle,
19
+ Gesture,
20
+ GestureConfig,
21
+ GestureDetail,
22
+ NavComponentWithProps,
23
+ SpinnerTypes,
24
+ AccordionGroupCustomEvent,
25
+ AccordionGroupChangeEventDetail,
26
+ BreadcrumbCustomEvent,
27
+ BreadcrumbCollapsedClickEventDetail,
28
+ ActionSheetOptions,
29
+ ActionSheetButton,
30
+ AlertOptions,
31
+ AlertInput,
32
+ AlertButton,
33
+ BackButtonEvent,
34
+ CheckboxCustomEvent,
35
+ CheckboxChangeEventDetail,
36
+ DatetimeCustomEvent,
37
+ DatetimeChangeEventDetail,
38
+ InfiniteScrollCustomEvent,
39
+ InputCustomEvent,
40
+ InputChangeEventDetail,
41
+ ItemReorderEventDetail,
42
+ ItemReorderCustomEvent,
43
+ ItemSlidingCustomEvent,
44
+ IonicSafeString,
45
+ LoadingOptions,
46
+ MenuCustomEvent,
47
+ ModalOptions,
48
+ NavCustomEvent,
49
+ PickerOptions,
50
+ PickerButton,
51
+ PickerColumn,
52
+ PickerColumnOption,
53
+ PopoverOptions,
54
+ RadioGroupCustomEvent,
55
+ RadioGroupChangeEventDetail,
56
+ RangeCustomEvent,
57
+ RangeChangeEventDetail,
58
+ RangeKnobMoveStartEventDetail,
59
+ RangeKnobMoveEndEventDetail,
60
+ RefresherCustomEvent,
61
+ RefresherEventDetail,
62
+ RouterEventDetail,
63
+ RouterCustomEvent,
64
+ ScrollBaseCustomEvent,
65
+ ScrollBaseDetail,
66
+ ScrollDetail,
67
+ ScrollCustomEvent,
68
+ SearchbarCustomEvent,
69
+ SearchbarChangeEventDetail,
70
+ SearchbarInputEventDetail,
71
+ SegmentChangeEventDetail,
72
+ SegmentCustomEvent,
73
+ SegmentValue,
74
+ SelectChangeEventDetail,
75
+ SelectCustomEvent,
76
+ TabsCustomEvent,
77
+ TextareaChangeEventDetail,
78
+ TextareaCustomEvent,
79
+ ToastOptions,
80
+ ToastButton,
81
+ ToastLayout,
82
+ ToggleChangeEventDetail,
83
+ ToggleCustomEvent,
84
+ TransitionOptions
85
+ } from "@ionic/core/components";
86
+ export * from "./proxies";
87
+ export * from "./routing-proxies";
88
+ export { IonAlert } from "./IonAlert";
89
+ export { IonLoading } from "./IonLoading";
90
+ export * from "./IonToast";
91
+ export { IonPicker } from "./IonPicker";
92
+ export * from "./IonActionSheet";
93
+ export { IonModal } from "./IonModal";
94
+ export { IonPopover } from "./IonPopover";
95
+ export { IonApp } from "./IonApp";
96
+ export { IonPage } from "./IonPage";
97
+ export { IonNav } from "./navigation/IonNav";
98
+ export { IonTabsContext, IonTabsContextState } from "./navigation/IonTabsContext";
99
+ export { IonTabs } from "./navigation/IonTabs";
100
+ export { IonTabBar } from "./navigation/IonTabBar";
101
+ export { IonTabButton } from "./navigation/IonTabButton";
102
+ export { IonBackButton } from "./navigation/IonBackButton";
103
+ export { IonRouterOutlet } from "./IonRouterOutlet";
104
+ export { IonIcon } from "./IonIcon";
105
+ export * from "./IonRoute";
106
+ export * from "./IonRedirect";
107
+ export * from "./IonRouterContext";
108
+ export { isPlatform, getPlatforms, getConfig } from "./utils";
109
+ export * from "./hrefprops";
110
+ export { CreateAnimation } from "./CreateAnimation";
111
+ export { useIonActionSheet, UseIonActionSheetResult } from "../hooks/useIonActionSheet";
112
+ export { useIonAlert, UseIonAlertResult } from "../hooks/useIonAlert";
113
+ export { useIonToast, UseIonToastResult } from "../hooks/useIonToast";
114
+ export { useIonModal, UseIonModalResult } from "../hooks/useIonModal";
115
+ export { useIonPopover, UseIonPopoverResult } from "../hooks/useIonPopover";
116
+ export { useIonPicker, UseIonPickerResult } from "../hooks/useIonPicker";
117
+ export { useIonLoading, UseIonLoadingResult } from "../hooks/useIonLoading";
118
+ export const setupIonicReact = (config = {}) => {
119
+ if (typeof document !== "undefined") {
120
+ document.documentElement.classList.add("ion-ce");
121
+ }
122
+ initialize({
123
+ ...config
124
+ });
125
+ };
126
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/index.ts"],
4
+ "sourcesContent": ["import type { IonicConfig } from '@ionic/core/components';\nimport { initialize } from '@ionic/core/components';\n\nexport {\n // UTILS\n createAnimation,\n createGesture,\n iosTransitionAnimation,\n mdTransitionAnimation,\n IonicSlides,\n getTimeGivenProgression,\n getIonPageElement,\n openURL,\n\n // TYPES\n Animation,\n AnimationBuilder,\n AnimationCallbackOptions,\n AnimationDirection,\n AnimationFill,\n AnimationKeyFrames,\n AnimationLifecycle,\n Gesture,\n GestureConfig,\n GestureDetail,\n NavComponentWithProps,\n SpinnerTypes,\n AccordionGroupCustomEvent,\n AccordionGroupChangeEventDetail,\n BreadcrumbCustomEvent,\n BreadcrumbCollapsedClickEventDetail,\n ActionSheetOptions,\n ActionSheetButton,\n AlertOptions,\n AlertInput,\n AlertButton,\n BackButtonEvent,\n CheckboxCustomEvent,\n CheckboxChangeEventDetail,\n DatetimeCustomEvent,\n DatetimeChangeEventDetail,\n InfiniteScrollCustomEvent,\n InputCustomEvent,\n InputChangeEventDetail,\n ItemReorderEventDetail,\n ItemReorderCustomEvent,\n ItemSlidingCustomEvent,\n IonicSafeString,\n LoadingOptions,\n MenuCustomEvent,\n ModalOptions,\n NavCustomEvent,\n PickerOptions,\n PickerButton,\n PickerColumn,\n PickerColumnOption,\n PopoverOptions,\n RadioGroupCustomEvent,\n RadioGroupChangeEventDetail,\n RangeCustomEvent,\n RangeChangeEventDetail,\n RangeKnobMoveStartEventDetail,\n RangeKnobMoveEndEventDetail,\n RefresherCustomEvent,\n RefresherEventDetail,\n RouterEventDetail,\n RouterCustomEvent,\n ScrollBaseCustomEvent,\n ScrollBaseDetail,\n ScrollDetail,\n ScrollCustomEvent,\n SearchbarCustomEvent,\n SearchbarChangeEventDetail,\n SearchbarInputEventDetail,\n SegmentChangeEventDetail,\n SegmentCustomEvent,\n SegmentValue,\n SelectChangeEventDetail,\n SelectCustomEvent,\n TabsCustomEvent,\n TextareaChangeEventDetail,\n TextareaCustomEvent,\n ToastOptions,\n ToastButton,\n ToastLayout,\n ToggleChangeEventDetail,\n ToggleCustomEvent,\n TransitionOptions,\n} from '@ionic/core/components';\n\nexport * from './proxies';\nexport * from './routing-proxies';\n\n// createControllerComponent\nexport { IonAlert } from './IonAlert';\nexport { IonLoading } from './IonLoading';\nexport * from './IonToast';\nexport { IonPicker } from './IonPicker';\n\n// createOverlayComponent\nexport * from './IonActionSheet';\nexport { IonModal } from './IonModal';\nexport { IonPopover } from './IonPopover';\n\n// Custom Components\nexport { IonApp } from './IonApp';\nexport { IonPage } from './IonPage';\nexport { IonNav } from './navigation/IonNav';\nexport { IonTabsContext, IonTabsContextState } from './navigation/IonTabsContext';\nexport { IonTabs } from './navigation/IonTabs';\nexport { IonTabBar } from './navigation/IonTabBar';\nexport { IonTabButton } from './navigation/IonTabButton';\nexport { IonBackButton } from './navigation/IonBackButton';\nexport { IonRouterOutlet } from './IonRouterOutlet';\nexport { IonIcon } from './IonIcon';\nexport * from './IonRoute';\nexport * from './IonRedirect';\nexport * from './IonRouterContext';\n\n// Utils\nexport { isPlatform, getPlatforms, getConfig } from './utils';\nexport * from './hrefprops';\n\n// Ionic Animations\nexport { CreateAnimation } from './CreateAnimation';\n\n// Hooks\nexport { useIonActionSheet, UseIonActionSheetResult } from '../hooks/useIonActionSheet';\nexport { useIonAlert, UseIonAlertResult } from '../hooks/useIonAlert';\nexport { useIonToast, UseIonToastResult } from '../hooks/useIonToast';\nexport { useIonModal, UseIonModalResult } from '../hooks/useIonModal';\nexport { useIonPopover, UseIonPopoverResult } from '../hooks/useIonPopover';\nexport { useIonPicker, UseIonPickerResult } from '../hooks/useIonPicker';\nexport { useIonLoading, UseIonLoadingResult } from '../hooks/useIonLoading';\n\nexport const setupIonicReact = (config: IonicConfig = {}) => {\n /**\n * By default Ionic Framework hides elements that\n * are not hydrated, but in the CE build there is no\n * hydration.\n * TODO FW-2797: Remove when all integrations have been\n * migrated to CE build.\n */\n if (typeof (document as any) !== 'undefined') {\n document.documentElement.classList.add('ion-ce');\n }\n\n initialize({\n ...config,\n });\n};\n"],
5
+ "mappings": ";AACA,SAAS,kBAAkB;AAE3B;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,cAAc;AACd,cAAc;AAGd,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,cAAc;AACd,SAAS,iBAAiB;AAG1B,cAAc;AACd,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAG3B,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,cAAc;AACvB,SAAS,gBAAgB,2BAA2B;AACpD,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC,SAAS,eAAe;AACxB,cAAc;AACd,cAAc;AACd,cAAc;AAGd,SAAS,YAAY,cAAc,iBAAiB;AACpD,cAAc;AAGd,SAAS,uBAAuB;AAGhC,SAAS,mBAAmB,+BAA+B;AAC3D,SAAS,aAAa,yBAAyB;AAC/C,SAAS,aAAa,yBAAyB;AAC/C,SAAS,aAAa,yBAAyB;AAC/C,SAAS,eAAe,2BAA2B;AACnD,SAAS,cAAc,0BAA0B;AACjD,SAAS,eAAe,2BAA2B;AAE5C,aAAM,kBAAkB,CAAC,SAAsB,CAAC,MAAM;AAQ3D,MAAI,OAAQ,aAAqB,aAAa;AAC5C,aAAS,gBAAgB,UAAU,IAAI,QAAQ;AAAA,EACjD;AAEA,aAAW;AAAA,IACT,GAAG;AAAA,EACL,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ import { defineCustomElement as defineIonApp } from "@ionic/core/components/ion-app.js";
3
+ import { defineCustomElement as defineIonBackButton } from "@ionic/core/components/ion-back-button.js";
4
+ import { defineCustomElement as defineIonRouterOutlet } from "@ionic/core/components/ion-router-outlet.js";
5
+ import { defineCustomElement as defineIonTabBar } from "@ionic/core/components/ion-tab-bar.js";
6
+ import { defineCustomElement as defineIonTabButton } from "@ionic/core/components/ion-tab-button.js";
7
+ import { defineCustomElement as defineIonIcon } from "ionicons/components/ion-icon.js";
8
+ import { createReactComponent } from "./react-component-lib";
9
+ export const IonTabButtonInner = /* @__PURE__ */ createReactComponent("ion-tab-button", void 0, void 0, defineIonTabButton);
10
+ export const IonTabBarInner = /* @__PURE__ */ createReactComponent(
11
+ "ion-tab-bar",
12
+ void 0,
13
+ void 0,
14
+ defineIonTabBar
15
+ );
16
+ export const IonBackButtonInner = /* @__PURE__ */ createReactComponent("ion-back-button", void 0, void 0, defineIonBackButton);
17
+ export const IonRouterOutletInner = /* @__PURE__ */ createReactComponent("ion-router-outlet", void 0, void 0, defineIonRouterOutlet);
18
+ export const IonAppInner = /* @__PURE__ */ createReactComponent(
19
+ "ion-app",
20
+ void 0,
21
+ void 0,
22
+ defineIonApp
23
+ );
24
+ export const IonIconInner = /* @__PURE__ */ createReactComponent(
25
+ "ion-icon",
26
+ void 0,
27
+ void 0,
28
+ defineIonIcon
29
+ );
30
+ //# sourceMappingURL=inner-proxies.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/inner-proxies.ts"],
4
+ "sourcesContent": ["import type { JSX } from '@ionic/core/components';\nimport { defineCustomElement as defineIonApp } from '@ionic/core/components/ion-app.js';\nimport { defineCustomElement as defineIonBackButton } from '@ionic/core/components/ion-back-button.js';\nimport { defineCustomElement as defineIonRouterOutlet } from '@ionic/core/components/ion-router-outlet.js';\nimport { defineCustomElement as defineIonTabBar } from '@ionic/core/components/ion-tab-bar.js';\nimport { defineCustomElement as defineIonTabButton } from '@ionic/core/components/ion-tab-button.js';\nimport type { JSX as IoniconsJSX } from 'ionicons';\nimport { defineCustomElement as defineIonIcon } from 'ionicons/components/ion-icon.js';\n\nimport { /*@__PURE__*/ createReactComponent } from './react-component-lib';\n\nexport const IonTabButtonInner = /*@__PURE__*/ createReactComponent<\n JSX.IonTabButton & { onIonTabButtonClick?: (e: CustomEvent) => void },\n HTMLIonTabButtonElement\n>('ion-tab-button', undefined, undefined, defineIonTabButton);\nexport const IonTabBarInner = /*@__PURE__*/ createReactComponent<JSX.IonTabBar, HTMLIonTabBarElement>(\n 'ion-tab-bar',\n undefined,\n undefined,\n defineIonTabBar\n);\nexport const IonBackButtonInner = /*@__PURE__*/ createReactComponent<\n Omit<JSX.IonBackButton, 'icon'>,\n HTMLIonBackButtonElement\n>('ion-back-button', undefined, undefined, defineIonBackButton);\nexport const IonRouterOutletInner = /*@__PURE__*/ createReactComponent<\n JSX.IonRouterOutlet & {\n setRef?: (val: HTMLIonRouterOutletElement) => void;\n forwardedRef?: React.ForwardedRef<HTMLIonRouterOutletElement>;\n },\n HTMLIonRouterOutletElement\n>('ion-router-outlet', undefined, undefined, defineIonRouterOutlet);\n\nexport const IonAppInner = /*@__PURE__*/ createReactComponent<JSX.IonApp, HTMLIonAppElement>(\n 'ion-app',\n undefined,\n undefined,\n defineIonApp\n);\n\n// ionicons\nexport const IonIconInner = /*@__PURE__*/ createReactComponent<IoniconsJSX.IonIcon, HTMLIonIconElement>(\n 'ion-icon',\n undefined,\n undefined,\n defineIonIcon\n);\n"],
5
+ "mappings": ";AACA,SAAS,uBAAuB,oBAAoB;AACpD,SAAS,uBAAuB,2BAA2B;AAC3D,SAAS,uBAAuB,6BAA6B;AAC7D,SAAS,uBAAuB,uBAAuB;AACvD,SAAS,uBAAuB,0BAA0B;AAE1D,SAAS,uBAAuB,qBAAqB;AAErD,SAAuB,4BAA4B;AAE5C,aAAM,oBAAkC,qCAG7C,kBAAkB,QAAW,QAAW,kBAAkB;AACrD,aAAM,iBAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACO,aAAM,qBAAmC,qCAG9C,mBAAmB,QAAW,QAAW,mBAAmB;AACvD,aAAM,uBAAqC,qCAMhD,qBAAqB,QAAW,QAAW,qBAAqB;AAE3D,aAAM,cAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,aAAM,eAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ import React from "react";
3
+ import { NavContext } from "../../contexts/NavContext";
4
+ import { IonBackButtonInner } from "../inner-proxies";
5
+ export const IonBackButton = /* @__PURE__ */ (() => class extends React.Component {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.clickButton = (e) => {
9
+ if (e.target && e.target.closest("ion-nav") !== null) {
10
+ return;
11
+ }
12
+ const { defaultHref, routerAnimation } = this.props;
13
+ if (this.context.hasIonicRouter()) {
14
+ e.stopPropagation();
15
+ this.context.goBack(defaultHref, routerAnimation);
16
+ } else if (defaultHref !== void 0) {
17
+ window.location.href = defaultHref;
18
+ }
19
+ };
20
+ }
21
+ render() {
22
+ return /* @__PURE__ */ React.createElement(IonBackButtonInner, { onClick: this.clickButton, ...this.props });
23
+ }
24
+ static get displayName() {
25
+ return "IonBackButton";
26
+ }
27
+ static get contextType() {
28
+ return NavContext;
29
+ }
30
+ })();
31
+ //# sourceMappingURL=IonBackButton.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/navigation/IonBackButton.tsx"],
4
+ "sourcesContent": ["import type { JSX as LocalJSX } from '@ionic/core/components';\nimport React from 'react';\n\nimport { NavContext } from '../../contexts/NavContext';\nimport type { IonicReactProps } from '../IonicReactProps';\nimport { IonBackButtonInner } from '../inner-proxies';\n\ntype Props = Omit<LocalJSX.IonBackButton, 'icon'> &\n IonicReactProps & {\n icon?:\n | {\n ios: string;\n md: string;\n }\n | string;\n ref?: React.Ref<HTMLIonBackButtonElement>;\n };\n\nexport const IonBackButton = /*@__PURE__*/ (() =>\n class extends React.Component<Props> {\n context!: React.ContextType<typeof NavContext>;\n\n clickButton = (e: React.MouseEvent) => {\n /**\n * If ion-back-button is being used inside\n * of ion-nav then we should not interact with\n * the router.\n */\n if (e.target && (e.target as HTMLElement).closest('ion-nav') !== null) {\n return;\n }\n\n const { defaultHref, routerAnimation } = this.props;\n\n if (this.context.hasIonicRouter()) {\n e.stopPropagation();\n this.context.goBack(defaultHref, routerAnimation);\n } else if (defaultHref !== undefined) {\n window.location.href = defaultHref;\n }\n };\n\n render() {\n return <IonBackButtonInner onClick={this.clickButton} {...this.props}></IonBackButtonInner>;\n }\n\n static get displayName() {\n return 'IonBackButton';\n }\n\n static get contextType() {\n return NavContext;\n }\n })();\n"],
5
+ "mappings": ";AACA,OAAO,WAAW;AAElB,SAAS,kBAAkB;AAE3B,SAAS,0BAA0B;AAa5B,aAAM,gBAA+B,uBAC1C,cAAc,MAAM,UAAiB;AAAA,EAArC;AAAA;AAGE,uBAAc,CAAC,MAAwB;AAMrC,UAAI,EAAE,UAAW,EAAE,OAAuB,QAAQ,SAAS,MAAM,MAAM;AACrE;AAAA,MACF;AAEA,YAAM,EAAE,aAAa,gBAAgB,IAAI,KAAK;AAE9C,UAAI,KAAK,QAAQ,eAAe,GAAG;AACjC,UAAE,gBAAgB;AAClB,aAAK,QAAQ,OAAO,aAAa,eAAe;AAAA,MAClD,WAAW,gBAAgB,QAAW;AACpC,eAAO,SAAS,OAAO;AAAA,MACzB;AAAA,IACF;AAAA;AAAA,EAEA,SAAS;AACP,WAAO,oCAAC,sBAAmB,SAAS,KAAK,aAAc,GAAG,KAAK,OAAO;AAAA,EACxE;AAAA,EAEA,WAAW,cAAc;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,cAAc;AACvB,WAAO;AAAA,EACT;AACF,GAAG;",
6
+ "names": []
7
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ import { defineCustomElement } from "@ionic/core/components/ion-nav.js";
3
+ import React, { useMemo, useState } from "react";
4
+ import { ReactDelegate } from "../../framework-delegate";
5
+ import { createReactComponent } from "../react-component-lib";
6
+ import { createForwardRef } from "../utils";
7
+ const IonNavInner = createReactComponent(
8
+ "ion-nav",
9
+ void 0,
10
+ void 0,
11
+ defineCustomElement
12
+ );
13
+ const IonNavInternal = ({ children, forwardedRef, ...restOfProps }) => {
14
+ const [views, setViews] = useState([]);
15
+ const addView = (view) => setViews((existingViews) => [...existingViews, view]);
16
+ const removeView = (view) => setViews((existingViews) => existingViews.filter((v) => v !== view));
17
+ const delegate = useMemo(() => ReactDelegate(addView, removeView), []);
18
+ return /* @__PURE__ */ React.createElement(IonNavInner, { delegate, ref: forwardedRef, ...restOfProps }, views);
19
+ };
20
+ export const IonNav = createForwardRef(IonNavInternal, "IonNav");
21
+ //# sourceMappingURL=IonNav.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/navigation/IonNav.tsx"],
4
+ "sourcesContent": ["import type { FrameworkDelegate, JSX } from '@ionic/core/components';\nimport { defineCustomElement } from '@ionic/core/components/ion-nav.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { ReactDelegate } from '../../framework-delegate';\nimport { createReactComponent } from '../react-component-lib';\nimport { createForwardRef } from '../utils';\n\nconst IonNavInner = createReactComponent<JSX.IonNav & { delegate: FrameworkDelegate }, HTMLIonNavElement>(\n 'ion-nav',\n undefined,\n undefined,\n defineCustomElement\n);\n\ntype IonNavProps = JSX.IonNav & {\n forwardedRef?: React.ForwardedRef<HTMLIonNavElement>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst IonNavInternal: React.FC<IonNavProps> = ({ children, forwardedRef, ...restOfProps }) => {\n const [views, setViews] = useState<React.ReactElement[]>([]);\n\n /**\n * Allows us to create React components that are rendered within\n * the context of the IonNav component.\n */\n const addView = (view: React.ReactElement) => setViews((existingViews) => [...existingViews, view]);\n const removeView = (view: React.ReactElement) => setViews((existingViews) => existingViews.filter((v) => v !== view));\n\n const delegate = useMemo(() => ReactDelegate(addView, removeView), []);\n\n return (\n <IonNavInner delegate={delegate} ref={forwardedRef} {...restOfProps}>\n {views}\n </IonNavInner>\n );\n};\n\nexport const IonNav = createForwardRef<IonNavProps, HTMLIonNavElement>(IonNavInternal, 'IonNav');\n"],
5
+ "mappings": ";AACA,SAAS,2BAA2B;AACpC,OAAO,SAAS,SAAS,gBAAgB;AAEzC,SAAS,qBAAqB;AAC9B,SAAS,4BAA4B;AACrC,SAAS,wBAAwB;AAEjC,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOA,MAAM,iBAAwC,CAAC,EAAE,UAAU,cAAc,GAAG,YAAY,MAAM;AAC5F,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA+B,CAAC,CAAC;AAM3D,QAAM,UAAU,CAAC,SAA6B,SAAS,CAAC,kBAAkB,CAAC,GAAG,eAAe,IAAI,CAAC;AAClG,QAAM,aAAa,CAAC,SAA6B,SAAS,CAAC,kBAAkB,cAAc,OAAO,CAAC,MAAM,MAAM,IAAI,CAAC;AAEpH,QAAM,WAAW,QAAQ,MAAM,cAAc,SAAS,UAAU,GAAG,CAAC,CAAC;AAErE,SACE,oCAAC,eAAY,UAAoB,KAAK,cAAe,GAAG,eACrD,KACH;AAEJ;AAEO,aAAM,SAAS,iBAAiD,gBAAgB,QAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ import React, { useContext } from "react";
3
+ import { NavContext } from "../../contexts/NavContext";
4
+ import { IonTabBarInner } from "../inner-proxies";
5
+ import { createForwardRef } from "../utils";
6
+ import { IonTabButton } from "./IonTabButton";
7
+ class IonTabBarUnwrapped extends React.PureComponent {
8
+ constructor(props) {
9
+ super(props);
10
+ // eslint-disable-next-line
11
+ this.setActiveTabOnContext = (_tab) => {
12
+ };
13
+ const tabs = {};
14
+ React.Children.forEach(props.children, (child) => {
15
+ if (child != null && typeof child === "object" && child.props && (child.type === IonTabButton || child.type.isTabButton)) {
16
+ tabs[child.props.tab] = {
17
+ originalHref: child.props.href,
18
+ currentHref: child.props.href,
19
+ originalRouteOptions: child.props.href === props.routeInfo?.pathname ? props.routeInfo?.routeOptions : void 0,
20
+ currentRouteOptions: child.props.href === props.routeInfo?.pathname ? props.routeInfo?.routeOptions : void 0
21
+ };
22
+ }
23
+ });
24
+ this.state = {
25
+ tabs
26
+ };
27
+ this.onTabButtonClick = this.onTabButtonClick.bind(this);
28
+ this.renderTabButton = this.renderTabButton.bind(this);
29
+ this.setActiveTabOnContext = this.setActiveTabOnContext.bind(this);
30
+ this.selectTab = this.selectTab.bind(this);
31
+ }
32
+ componentDidMount() {
33
+ const tabs = this.state.tabs;
34
+ const tabKeys = Object.keys(tabs);
35
+ const activeTab = tabKeys.find((key) => {
36
+ const href = tabs[key].originalHref;
37
+ return this.props.routeInfo.pathname.startsWith(href);
38
+ });
39
+ if (activeTab) {
40
+ this.setState({
41
+ activeTab
42
+ });
43
+ }
44
+ }
45
+ componentDidUpdate() {
46
+ if (this.state.activeTab) {
47
+ this.setActiveTabOnContext(this.state.activeTab);
48
+ }
49
+ }
50
+ selectTab(tab) {
51
+ const tabUrl = this.state.tabs[tab];
52
+ if (tabUrl) {
53
+ this.onTabButtonClick(
54
+ new CustomEvent("ionTabButtonClick", {
55
+ detail: {
56
+ href: tabUrl.currentHref,
57
+ tab,
58
+ selected: tab === this.state.activeTab,
59
+ routeOptions: void 0
60
+ }
61
+ })
62
+ );
63
+ return true;
64
+ }
65
+ return false;
66
+ }
67
+ static getDerivedStateFromProps(props, state) {
68
+ const tabs = { ...state.tabs };
69
+ const tabKeys = Object.keys(state.tabs);
70
+ const activeTab = tabKeys.find((key) => {
71
+ const href = state.tabs[key].originalHref;
72
+ return props.routeInfo.pathname.startsWith(href);
73
+ });
74
+ React.Children.forEach(props.children, (child) => {
75
+ if (child != null && typeof child === "object" && child.props && (child.type === IonTabButton || child.type.isTabButton)) {
76
+ const tab = tabs[child.props.tab];
77
+ if (!tab || tab.originalHref !== child.props.href) {
78
+ tabs[child.props.tab] = {
79
+ originalHref: child.props.href,
80
+ currentHref: child.props.href,
81
+ originalRouteOptions: child.props.routeOptions,
82
+ currentRouteOptions: child.props.routeOptions
83
+ };
84
+ }
85
+ }
86
+ });
87
+ const { activeTab: prevActiveTab } = state;
88
+ if (activeTab && prevActiveTab) {
89
+ const prevHref = state.tabs[prevActiveTab].currentHref;
90
+ const prevRouteOptions = state.tabs[prevActiveTab].currentRouteOptions;
91
+ if (activeTab !== prevActiveTab || prevHref !== props.routeInfo?.pathname || prevRouteOptions !== props.routeInfo?.routeOptions) {
92
+ tabs[activeTab] = {
93
+ originalHref: tabs[activeTab].originalHref,
94
+ currentHref: props.routeInfo.pathname + (props.routeInfo.search || ""),
95
+ originalRouteOptions: tabs[activeTab].originalRouteOptions,
96
+ currentRouteOptions: props.routeInfo?.routeOptions
97
+ };
98
+ if (props.routeInfo.routeAction === "pop" && activeTab !== prevActiveTab) {
99
+ tabs[prevActiveTab] = {
100
+ originalHref: tabs[prevActiveTab].originalHref,
101
+ currentHref: tabs[prevActiveTab].originalHref,
102
+ originalRouteOptions: tabs[prevActiveTab].originalRouteOptions,
103
+ currentRouteOptions: tabs[prevActiveTab].currentRouteOptions
104
+ };
105
+ }
106
+ }
107
+ }
108
+ activeTab && props.onSetCurrentTab(activeTab, props.routeInfo);
109
+ return {
110
+ activeTab,
111
+ tabs
112
+ };
113
+ }
114
+ onTabButtonClick(e, onClickFn) {
115
+ const tappedTab = this.state.tabs[e.detail.tab];
116
+ const originalHref = tappedTab.originalHref;
117
+ const currentHref = e.detail.href;
118
+ const { activeTab: prevActiveTab } = this.state;
119
+ if (onClickFn) {
120
+ onClickFn(e);
121
+ }
122
+ if (prevActiveTab === e.detail.tab) {
123
+ if (originalHref !== currentHref) {
124
+ this.context.resetTab(e.detail.tab, originalHref, tappedTab.originalRouteOptions);
125
+ }
126
+ } else {
127
+ if (this.props.onIonTabsWillChange) {
128
+ this.props.onIonTabsWillChange(new CustomEvent("ionTabWillChange", { detail: { tab: e.detail.tab } }));
129
+ }
130
+ if (this.props.onIonTabsDidChange) {
131
+ this.props.onIonTabsDidChange(new CustomEvent("ionTabDidChange", { detail: { tab: e.detail.tab } }));
132
+ }
133
+ this.setActiveTabOnContext(e.detail.tab);
134
+ this.context.changeTab(e.detail.tab, currentHref, e.detail.routeOptions);
135
+ }
136
+ }
137
+ renderTabButton(activeTab) {
138
+ return (child) => {
139
+ if (child != null && child.props && (child.type === IonTabButton || child.type.isTabButton)) {
140
+ const href = child.props.tab === activeTab ? this.props.routeInfo?.pathname : this.state.tabs[child.props.tab].currentHref;
141
+ const routeOptions = child.props.tab === activeTab ? this.props.routeInfo?.routeOptions : this.state.tabs[child.props.tab].currentRouteOptions;
142
+ return React.cloneElement(child, {
143
+ href,
144
+ routeOptions,
145
+ onClick: (ev) => this.onTabButtonClick(ev, child.props.onClick)
146
+ });
147
+ }
148
+ return null;
149
+ };
150
+ }
151
+ render() {
152
+ const { activeTab } = this.state;
153
+ return /* @__PURE__ */ React.createElement(IonTabBarInner, { ...this.props, selectedTab: activeTab }, React.Children.map(this.props.children, this.renderTabButton(activeTab)));
154
+ }
155
+ static get contextType() {
156
+ return NavContext;
157
+ }
158
+ }
159
+ const IonTabBarContainer = React.memo(({ forwardedRef, ...props }) => {
160
+ const context = useContext(NavContext);
161
+ return /* @__PURE__ */ React.createElement(
162
+ IonTabBarUnwrapped,
163
+ {
164
+ ref: forwardedRef,
165
+ ...props,
166
+ routeInfo: props.routeInfo || context.routeInfo || { pathname: window.location.pathname },
167
+ onSetCurrentTab: context.setCurrentTab
168
+ },
169
+ props.children
170
+ );
171
+ });
172
+ export const IonTabBar = createForwardRef(IonTabBarContainer, "IonTabBar");
173
+ //# sourceMappingURL=IonTabBar.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/navigation/IonTabBar.tsx"],
4
+ "sourcesContent": ["import type { JSX as LocalJSX } from '@ionic/core/components';\nimport React, { useContext } from 'react';\n\nimport { NavContext } from '../../contexts/NavContext';\nimport type { RouteInfo } from '../../models';\nimport type { IonicReactProps } from '../IonicReactProps';\nimport { IonTabBarInner } from '../inner-proxies';\nimport { createForwardRef } from '../utils';\n\nimport { IonTabButton } from './IonTabButton';\n\ntype IonTabBarProps = LocalJSX.IonTabBar &\n IonicReactProps & {\n onIonTabsDidChange?: (event: CustomEvent<{ tab: string }>) => void;\n onIonTabsWillChange?: (event: CustomEvent<{ tab: string }>) => void;\n slot?: 'bottom' | 'top';\n style?: { [key: string]: string };\n };\n\ninterface InternalProps extends IonTabBarProps {\n forwardedRef?: React.ForwardedRef<HTMLIonIconElement>;\n onSetCurrentTab: (tab: string, routeInfo: RouteInfo) => void;\n routeInfo: RouteInfo;\n}\n\ninterface TabUrls {\n originalHref: string;\n currentHref: string;\n originalRouteOptions?: unknown;\n currentRouteOptions?: unknown;\n}\n\ninterface IonTabBarState {\n activeTab?: string;\n tabs: { [key: string]: TabUrls };\n}\n\n// TODO(FW-2959): types\n\nclass IonTabBarUnwrapped extends React.PureComponent<InternalProps, IonTabBarState> {\n context!: React.ContextType<typeof NavContext>;\n\n constructor(props: InternalProps) {\n super(props);\n const tabs: { [key: string]: TabUrls } = {};\n React.Children.forEach((props as any).children, (child: any) => {\n if (\n child != null &&\n typeof child === 'object' &&\n child.props &&\n (child.type === IonTabButton || child.type.isTabButton)\n ) {\n tabs[child.props.tab] = {\n originalHref: child.props.href,\n currentHref: child.props.href,\n originalRouteOptions:\n child.props.href === props.routeInfo?.pathname ? props.routeInfo?.routeOptions : undefined,\n currentRouteOptions:\n child.props.href === props.routeInfo?.pathname ? props.routeInfo?.routeOptions : undefined,\n };\n }\n });\n\n this.state = {\n tabs,\n };\n\n this.onTabButtonClick = this.onTabButtonClick.bind(this);\n this.renderTabButton = this.renderTabButton.bind(this);\n this.setActiveTabOnContext = this.setActiveTabOnContext.bind(this);\n this.selectTab = this.selectTab.bind(this);\n }\n\n componentDidMount() {\n const tabs = this.state.tabs;\n const tabKeys = Object.keys(tabs);\n const activeTab = tabKeys.find((key) => {\n const href = tabs[key].originalHref;\n return this.props.routeInfo!.pathname.startsWith(href);\n });\n\n if (activeTab) {\n this.setState({\n activeTab,\n });\n }\n }\n\n componentDidUpdate() {\n if (this.state.activeTab) {\n this.setActiveTabOnContext(this.state.activeTab);\n }\n }\n\n // eslint-disable-next-line\n setActiveTabOnContext = (_tab: string) => {};\n\n selectTab(tab: string) {\n const tabUrl = this.state.tabs[tab];\n if (tabUrl) {\n this.onTabButtonClick(\n new CustomEvent('ionTabButtonClick', {\n detail: {\n href: tabUrl.currentHref,\n tab,\n selected: tab === this.state.activeTab,\n routeOptions: undefined,\n },\n })\n );\n return true;\n }\n return false;\n }\n\n static getDerivedStateFromProps(props: InternalProps, state: IonTabBarState) {\n const tabs = { ...state.tabs };\n const tabKeys = Object.keys(state.tabs);\n const activeTab = tabKeys.find((key) => {\n const href = state.tabs[key].originalHref;\n return props.routeInfo!.pathname.startsWith(href);\n });\n\n // Check to see if the tab button href has changed, and if so, update it in the tabs state\n React.Children.forEach((props as any).children, (child: any) => {\n if (\n child != null &&\n typeof child === 'object' &&\n child.props &&\n (child.type === IonTabButton || child.type.isTabButton)\n ) {\n const tab = tabs[child.props.tab];\n if (!tab || tab.originalHref !== child.props.href) {\n tabs[child.props.tab] = {\n originalHref: child.props.href,\n currentHref: child.props.href,\n originalRouteOptions: child.props.routeOptions,\n currentRouteOptions: child.props.routeOptions,\n };\n }\n }\n });\n\n const { activeTab: prevActiveTab } = state;\n if (activeTab && prevActiveTab) {\n const prevHref = state.tabs[prevActiveTab].currentHref;\n const prevRouteOptions = state.tabs[prevActiveTab].currentRouteOptions;\n if (\n activeTab !== prevActiveTab ||\n prevHref !== props.routeInfo?.pathname ||\n prevRouteOptions !== props.routeInfo?.routeOptions\n ) {\n tabs[activeTab] = {\n originalHref: tabs[activeTab].originalHref,\n currentHref: props.routeInfo!.pathname + (props.routeInfo!.search || ''),\n originalRouteOptions: tabs[activeTab].originalRouteOptions,\n currentRouteOptions: props.routeInfo?.routeOptions,\n };\n if (props.routeInfo.routeAction === 'pop' && activeTab !== prevActiveTab) {\n // If navigating back and the tabs change, set the prev tab back to its original href\n tabs[prevActiveTab] = {\n originalHref: tabs[prevActiveTab].originalHref,\n currentHref: tabs[prevActiveTab].originalHref,\n originalRouteOptions: tabs[prevActiveTab].originalRouteOptions,\n currentRouteOptions: tabs[prevActiveTab].currentRouteOptions,\n };\n }\n }\n }\n\n activeTab && props.onSetCurrentTab(activeTab, props.routeInfo);\n\n return {\n activeTab,\n tabs,\n };\n }\n\n private onTabButtonClick(\n e: CustomEvent<{ href: string; selected: boolean; tab: string; routeOptions: unknown }>,\n onClickFn?: (e: any) => void\n ) {\n const tappedTab = this.state.tabs[e.detail.tab];\n const originalHref = tappedTab.originalHref;\n const currentHref = e.detail.href;\n const { activeTab: prevActiveTab } = this.state;\n\n if (onClickFn) {\n /**\n * If the user provides an onClick function, we call it\n * with the original event.\n */\n onClickFn(e);\n }\n\n // this.props.onSetCurrentTab(e.detail.tab, this.props.routeInfo);\n // Clicking the current tab will bring you back to the original href\n if (prevActiveTab === e.detail.tab) {\n if (originalHref !== currentHref) {\n this.context.resetTab(e.detail.tab, originalHref, tappedTab.originalRouteOptions);\n }\n } else {\n if (this.props.onIonTabsWillChange) {\n this.props.onIonTabsWillChange(new CustomEvent('ionTabWillChange', { detail: { tab: e.detail.tab } }));\n }\n if (this.props.onIonTabsDidChange) {\n this.props.onIonTabsDidChange(new CustomEvent('ionTabDidChange', { detail: { tab: e.detail.tab } }));\n }\n this.setActiveTabOnContext(e.detail.tab);\n this.context.changeTab(e.detail.tab, currentHref, e.detail.routeOptions);\n }\n }\n\n private renderTabButton(activeTab: string | null | undefined) {\n return (\n child:\n | React.ReactElement<LocalJSX.IonTabButton & { onClick: (e: any) => void; routeOptions?: unknown }>\n | null\n | undefined\n ) => {\n if (child != null && child.props && (child.type === IonTabButton || (child as any).type.isTabButton)) {\n const href =\n child.props.tab === activeTab\n ? this.props.routeInfo?.pathname\n : this.state.tabs[child.props.tab!].currentHref;\n const routeOptions =\n child.props.tab === activeTab\n ? this.props.routeInfo?.routeOptions\n : this.state.tabs[child.props.tab!].currentRouteOptions;\n\n return React.cloneElement(child, {\n href,\n routeOptions,\n onClick: (ev: CustomEvent) => this.onTabButtonClick(ev, child.props.onClick),\n });\n }\n return null;\n };\n }\n\n render() {\n const { activeTab } = this.state;\n return (\n <IonTabBarInner {...this.props} selectedTab={activeTab}>\n {React.Children.map(this.props.children as any, this.renderTabButton(activeTab))}\n </IonTabBarInner>\n );\n }\n\n static get contextType() {\n return NavContext;\n }\n}\n\nconst IonTabBarContainer: React.FC<InternalProps> = React.memo<InternalProps>(({ forwardedRef, ...props }) => {\n const context = useContext(NavContext);\n return (\n <IonTabBarUnwrapped\n ref={forwardedRef}\n {...(props as any)}\n routeInfo={props.routeInfo || context.routeInfo || { pathname: window.location.pathname }}\n onSetCurrentTab={context.setCurrentTab}\n >\n {props.children}\n </IonTabBarUnwrapped>\n );\n});\n\nexport const IonTabBar = createForwardRef<IonTabBarProps, HTMLIonTabBarElement>(IonTabBarContainer, 'IonTabBar');\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ import React from "react";
3
+ import { IonTabButtonInner } from "../inner-proxies";
4
+ export const IonTabButton = /* @__PURE__ */ (() => class extends React.Component {
5
+ constructor(props) {
6
+ super(props);
7
+ this.handleIonTabButtonClick = this.handleIonTabButtonClick.bind(this);
8
+ }
9
+ handleIonTabButtonClick() {
10
+ if (this.props.onClick) {
11
+ this.props.onClick(
12
+ new CustomEvent("ionTabButtonClick", {
13
+ detail: {
14
+ tab: this.props.tab,
15
+ href: this.props.href,
16
+ routeOptions: this.props.routerOptions
17
+ }
18
+ })
19
+ );
20
+ }
21
+ }
22
+ render() {
23
+ const { onClick, ...rest } = this.props;
24
+ return /* @__PURE__ */ React.createElement(IonTabButtonInner, { onIonTabButtonClick: this.handleIonTabButtonClick, ...rest });
25
+ }
26
+ static get displayName() {
27
+ return "IonTabButton";
28
+ }
29
+ })();
30
+ //# sourceMappingURL=IonTabButton.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/navigation/IonTabButton.tsx"],
4
+ "sourcesContent": ["import type { JSX as LocalJSX } from '@ionic/core/components';\nimport React from 'react';\n\nimport type { RouterOptions } from '../../models';\nimport type { IonicReactProps } from '../IonicReactProps';\nimport { IonTabButtonInner } from '../inner-proxies';\n\ntype Props = LocalJSX.IonTabButton &\n IonicReactProps & {\n routerOptions?: RouterOptions;\n ref?: React.Ref<HTMLIonTabButtonElement>;\n onClick?: (e: CustomEvent) => void;\n };\n\nexport const IonTabButton = /*@__PURE__*/ (() =>\n class extends React.Component<Props> {\n constructor(props: Props) {\n super(props);\n this.handleIonTabButtonClick = this.handleIonTabButtonClick.bind(this);\n }\n\n handleIonTabButtonClick() {\n if (this.props.onClick) {\n this.props.onClick(\n new CustomEvent('ionTabButtonClick', {\n detail: {\n tab: this.props.tab,\n href: this.props.href,\n routeOptions: this.props.routerOptions,\n },\n })\n );\n }\n }\n\n render() {\n /**\n * onClick is excluded from the props, since it has a custom\n * implementation within IonTabBar.tsx. Calling onClick within this\n * component would result in duplicate handler calls.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { onClick, ...rest } = this.props;\n return <IonTabButtonInner onIonTabButtonClick={this.handleIonTabButtonClick} {...rest}></IonTabButtonInner>;\n }\n\n static get displayName() {\n return 'IonTabButton';\n }\n })();\n"],
5
+ "mappings": ";AACA,OAAO,WAAW;AAIlB,SAAS,yBAAyB;AAS3B,aAAM,eAA8B,uBACzC,cAAc,MAAM,UAAiB;AAAA,EACnC,YAAY,OAAc;AACxB,UAAM,KAAK;AACX,SAAK,0BAA0B,KAAK,wBAAwB,KAAK,IAAI;AAAA,EACvE;AAAA,EAEA,0BAA0B;AACxB,QAAI,KAAK,MAAM,SAAS;AACtB,WAAK,MAAM;AAAA,QACT,IAAI,YAAY,qBAAqB;AAAA,UACnC,QAAQ;AAAA,YACN,KAAK,KAAK,MAAM;AAAA,YAChB,MAAM,KAAK,MAAM;AAAA,YACjB,cAAc,KAAK,MAAM;AAAA,UAC3B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS;AAOP,UAAM,EAAE,SAAS,GAAG,KAAK,IAAI,KAAK;AAClC,WAAO,oCAAC,qBAAkB,qBAAqB,KAAK,yBAA0B,GAAG,MAAM;AAAA,EACzF;AAAA,EAEA,WAAW,cAAc;AACvB,WAAO;AAAA,EACT;AACF,GAAG;",
6
+ "names": []
7
+ }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ import React, { Fragment } from "react";
3
+ import { NavContext } from "../../contexts/NavContext";
4
+ import PageManager from "../../routing/PageManager";
5
+ import { HTMLElementSSR } from "../../utils/HTMLElementSSR";
6
+ import { IonRouterOutlet } from "../IonRouterOutlet";
7
+ import { IonTabBar } from "./IonTabBar";
8
+ import { IonTabsContext } from "./IonTabsContext";
9
+ class IonTabsElement extends HTMLElementSSR {
10
+ constructor() {
11
+ super();
12
+ }
13
+ }
14
+ if (typeof window !== "undefined" && window.customElements) {
15
+ const element = window.customElements.get("ion-tabs");
16
+ if (!element) {
17
+ window.customElements.define("ion-tabs", IonTabsElement);
18
+ }
19
+ }
20
+ const hostStyles = {
21
+ display: "flex",
22
+ position: "absolute",
23
+ top: "0",
24
+ left: "0",
25
+ right: "0",
26
+ bottom: "0",
27
+ flexDirection: "column",
28
+ width: "100%",
29
+ height: "100%",
30
+ contain: "layout size style"
31
+ };
32
+ const tabsInner = {
33
+ position: "relative",
34
+ flex: 1,
35
+ contain: "layout size style"
36
+ };
37
+ export const IonTabs = /* @__PURE__ */ (() => class extends React.Component {
38
+ constructor(props) {
39
+ super(props);
40
+ this.routerOutletRef = React.createRef();
41
+ this.tabBarRef = React.createRef();
42
+ this.ionTabContextState = {
43
+ activeTab: void 0,
44
+ selectTab: () => false
45
+ };
46
+ }
47
+ componentDidMount() {
48
+ if (this.tabBarRef.current) {
49
+ this.ionTabContextState.activeTab = this.tabBarRef.current.state.activeTab;
50
+ this.tabBarRef.current.setActiveTabOnContext = (tab) => {
51
+ this.ionTabContextState.activeTab = tab;
52
+ };
53
+ this.ionTabContextState.selectTab = this.tabBarRef.current.selectTab;
54
+ }
55
+ }
56
+ render() {
57
+ let outlet;
58
+ let tabBar;
59
+ const { className, onIonTabsDidChange, onIonTabsWillChange, ...props } = this.props;
60
+ const children = typeof this.props.children === "function" ? this.props.children(this.ionTabContextState) : this.props.children;
61
+ React.Children.forEach(children, (child) => {
62
+ if (child == null || typeof child !== "object" || !child.hasOwnProperty("type")) {
63
+ return;
64
+ }
65
+ if (child.type === IonRouterOutlet || child.type.isRouterOutlet) {
66
+ outlet = React.cloneElement(child);
67
+ } else if (child.type === Fragment && child.props.children[0].type === IonRouterOutlet) {
68
+ outlet = child.props.children[0];
69
+ }
70
+ let childProps = {
71
+ ref: this.tabBarRef
72
+ };
73
+ if (onIonTabsDidChange !== void 0) {
74
+ childProps = {
75
+ ...childProps,
76
+ onIonTabsDidChange
77
+ };
78
+ }
79
+ if (onIonTabsWillChange !== void 0) {
80
+ childProps = {
81
+ ...childProps,
82
+ onIonTabsWillChange
83
+ };
84
+ }
85
+ if (child.type === IonTabBar || child.type.isTabBar) {
86
+ tabBar = React.cloneElement(child, childProps);
87
+ } else if (child.type === Fragment && (child.props.children[1].type === IonTabBar || child.props.children[1].type.isTabBar)) {
88
+ tabBar = React.cloneElement(child.props.children[1], childProps);
89
+ }
90
+ });
91
+ if (!outlet) {
92
+ throw new Error("IonTabs must contain an IonRouterOutlet");
93
+ }
94
+ if (!tabBar) {
95
+ throw new Error("IonTabs needs a IonTabBar");
96
+ }
97
+ return /* @__PURE__ */ React.createElement(IonTabsContext.Provider, { value: this.ionTabContextState }, this.context.hasIonicRouter() ? /* @__PURE__ */ React.createElement(PageManager, { className: className ? `${className}` : "", routeInfo: this.context.routeInfo, ...props }, /* @__PURE__ */ React.createElement("ion-tabs", { className: "ion-tabs", style: hostStyles }, tabBar.props.slot === "top" ? tabBar : null, /* @__PURE__ */ React.createElement("div", { style: tabsInner, className: "tabs-inner" }, outlet), tabBar.props.slot === "bottom" ? tabBar : null)) : /* @__PURE__ */ React.createElement("div", { className: className ? `${className}` : "ion-tabs", ...props, style: hostStyles }, tabBar.props.slot === "top" ? tabBar : null, /* @__PURE__ */ React.createElement("div", { style: tabsInner, className: "tabs-inner" }, outlet), tabBar.props.slot === "bottom" ? tabBar : null));
98
+ }
99
+ static get contextType() {
100
+ return NavContext;
101
+ }
102
+ })();
103
+ //# sourceMappingURL=IonTabs.js.map