piral-core 1.0.0-pre.2296 → 1.0.1-beta.5640

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 (672) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +12 -4
  3. package/app.codegen +36 -0
  4. package/app.codegen.d.ts +29 -0
  5. package/dist/codegen.js +5308 -0
  6. package/esm/Piral.d.ts +4 -4
  7. package/esm/Piral.js +8 -11
  8. package/esm/Piral.js.map +1 -1
  9. package/esm/PiralContext.d.ts +21 -0
  10. package/esm/PiralContext.js +34 -0
  11. package/esm/PiralContext.js.map +1 -0
  12. package/esm/RootListener.d.ts +2 -0
  13. package/esm/RootListener.js +23 -0
  14. package/esm/RootListener.js.map +1 -0
  15. package/esm/actions/app.d.ts +7 -4
  16. package/esm/actions/app.js +24 -14
  17. package/esm/actions/app.js.map +1 -1
  18. package/esm/actions/components.js +5 -6
  19. package/esm/actions/components.js.map +1 -1
  20. package/esm/actions/data.js +16 -17
  21. package/esm/actions/data.js.map +1 -1
  22. package/esm/actions/define.js +2 -3
  23. package/esm/actions/define.js.map +1 -1
  24. package/esm/actions/portal.d.ts +2 -0
  25. package/esm/actions/portal.js +9 -4
  26. package/esm/actions/portal.js.map +1 -1
  27. package/esm/actions/state.js +7 -4
  28. package/esm/actions/state.js.map +1 -1
  29. package/esm/components/ErrorBoundary.d.ts +14 -31
  30. package/esm/components/ErrorBoundary.js +22 -28
  31. package/esm/components/ErrorBoundary.js.map +1 -1
  32. package/esm/components/ExtensionSlot.d.ts +1 -0
  33. package/esm/components/ExtensionSlot.js +34 -11
  34. package/esm/components/ExtensionSlot.js.map +1 -1
  35. package/esm/components/ForeignComponentContainer.d.ts +19 -0
  36. package/esm/components/ForeignComponentContainer.js +46 -0
  37. package/esm/components/ForeignComponentContainer.js.map +1 -0
  38. package/esm/components/Mediator.js +15 -12
  39. package/esm/components/Mediator.js.map +1 -1
  40. package/esm/components/PiralGlobals.d.ts +6 -0
  41. package/esm/components/PiralGlobals.js +13 -0
  42. package/esm/components/PiralGlobals.js.map +1 -0
  43. package/esm/components/PiralRoutes.d.ts +5 -0
  44. package/esm/components/PiralRoutes.js +6 -11
  45. package/esm/components/PiralRoutes.js.map +1 -1
  46. package/esm/components/PiralSuspense.d.ts +5 -0
  47. package/esm/components/PiralSuspense.js +8 -0
  48. package/esm/components/PiralSuspense.js.map +1 -0
  49. package/esm/components/PiralView.d.ts +10 -1
  50. package/esm/components/PiralView.js +12 -25
  51. package/esm/components/PiralView.js.map +1 -1
  52. package/esm/components/PortalRenderer.d.ts +5 -0
  53. package/esm/components/PortalRenderer.js +7 -0
  54. package/esm/components/PortalRenderer.js.map +1 -0
  55. package/esm/components/ResponsiveLayout.d.ts +9 -1
  56. package/esm/components/ResponsiveLayout.js +5 -13
  57. package/esm/components/ResponsiveLayout.js.map +1 -1
  58. package/esm/components/SwitchErrorInfo.js +12 -10
  59. package/esm/components/SwitchErrorInfo.js.map +1 -1
  60. package/esm/components/components.d.ts +18 -6
  61. package/esm/components/components.js +21 -9
  62. package/esm/components/components.js.map +1 -1
  63. package/esm/components/index.d.ts +4 -10
  64. package/esm/components/index.js +4 -10
  65. package/esm/components/index.js.map +1 -1
  66. package/esm/components/wrapComponent.d.ts +7 -0
  67. package/esm/components/wrapComponent.js +42 -0
  68. package/esm/components/wrapComponent.js.map +1 -0
  69. package/esm/createInstance.d.ts +2 -2
  70. package/esm/createInstance.js +34 -30
  71. package/esm/createInstance.js.map +1 -1
  72. package/esm/defaults/DefaultErrorInfo.js +10 -0
  73. package/esm/defaults/DefaultErrorInfo.js.map +1 -0
  74. package/esm/{components → defaults}/DefaultLayout.js +1 -4
  75. package/esm/defaults/DefaultLayout.js.map +1 -0
  76. package/esm/{components/DefaultLoader.js → defaults/DefaultLoadingIndicator.js} +2 -2
  77. package/esm/defaults/DefaultLoadingIndicator.js.map +1 -0
  78. package/esm/defaults/DefaultRouteSwitch_v5.d.ts +3 -0
  79. package/esm/defaults/DefaultRouteSwitch_v5.js +11 -0
  80. package/esm/defaults/DefaultRouteSwitch_v5.js.map +1 -0
  81. package/esm/defaults/DefaultRouteSwitch_v6.d.ts +3 -0
  82. package/esm/defaults/DefaultRouteSwitch_v6.js +15 -0
  83. package/esm/defaults/DefaultRouteSwitch_v6.js.map +1 -0
  84. package/esm/defaults/DefaultRouter_v5.d.ts +3 -0
  85. package/esm/defaults/DefaultRouter_v5.js +7 -0
  86. package/esm/defaults/DefaultRouter_v5.js.map +1 -0
  87. package/esm/defaults/DefaultRouter_v6.d.ts +3 -0
  88. package/esm/defaults/DefaultRouter_v6.js +7 -0
  89. package/esm/defaults/DefaultRouter_v6.js.map +1 -0
  90. package/esm/defaults/navigator_none.d.ts +5 -0
  91. package/esm/defaults/navigator_none.js +30 -0
  92. package/esm/defaults/navigator_none.js.map +1 -0
  93. package/esm/defaults/navigator_v5.d.ts +6 -0
  94. package/esm/defaults/navigator_v5.js +81 -0
  95. package/esm/defaults/navigator_v5.js.map +1 -0
  96. package/esm/defaults/navigator_v6.d.ts +6 -0
  97. package/esm/defaults/navigator_v6.js +77 -0
  98. package/esm/defaults/navigator_v6.js.map +1 -0
  99. package/esm/helpers.d.ts +12 -26
  100. package/esm/helpers.js +14 -72
  101. package/esm/helpers.js.map +1 -1
  102. package/esm/hooks/action.js +2 -3
  103. package/esm/hooks/action.js.map +1 -1
  104. package/esm/hooks/actions.js +1 -1
  105. package/esm/hooks/actions.js.map +1 -1
  106. package/esm/hooks/globalState.d.ts +7 -0
  107. package/esm/hooks/globalState.js +10 -8
  108. package/esm/hooks/globalState.js.map +1 -1
  109. package/esm/hooks/index.d.ts +2 -5
  110. package/esm/hooks/index.js +2 -5
  111. package/esm/hooks/index.js.map +1 -1
  112. package/esm/hooks/media.js +8 -7
  113. package/esm/hooks/media.js.map +1 -1
  114. package/esm/hooks/piletApi.d.ts +7 -0
  115. package/esm/hooks/piletApi.js +14 -0
  116. package/esm/hooks/piletApi.js.map +1 -0
  117. package/esm/hooks/routes.d.ts +2 -0
  118. package/esm/hooks/routes.js +11 -0
  119. package/esm/hooks/routes.js.map +1 -0
  120. package/esm/hooks/setter.js +3 -2
  121. package/esm/hooks/setter.js.map +1 -1
  122. package/esm/hooks/sharedData.js +2 -2
  123. package/esm/hooks/sharedData.js.map +1 -1
  124. package/esm/index.d.ts +3 -1
  125. package/esm/index.js +3 -1
  126. package/esm/index.js.map +1 -1
  127. package/esm/modules/api.d.ts +2 -5
  128. package/esm/modules/api.js +9 -69
  129. package/esm/modules/api.js.map +1 -1
  130. package/esm/modules/core.d.ts +3 -0
  131. package/esm/modules/core.js +50 -0
  132. package/esm/modules/core.js.map +1 -0
  133. package/esm/modules/dependencies.d.ts +5 -6
  134. package/esm/modules/dependencies.js +9 -24
  135. package/esm/modules/dependencies.js.map +1 -1
  136. package/esm/modules/element.d.ts +5 -0
  137. package/esm/modules/element.js +169 -0
  138. package/esm/modules/element.js.map +1 -0
  139. package/esm/modules/index.d.ts +1 -0
  140. package/esm/modules/index.js +1 -0
  141. package/esm/modules/index.js.map +1 -1
  142. package/esm/setters/SetComponent.js +11 -0
  143. package/esm/setters/SetComponent.js.map +1 -0
  144. package/esm/setters/SetError.js +11 -0
  145. package/esm/setters/SetError.js.map +1 -0
  146. package/esm/setters/SetErrors.js +9 -0
  147. package/esm/setters/SetErrors.js.map +1 -0
  148. package/esm/setters/SetLayout.js +9 -0
  149. package/esm/setters/SetLayout.js.map +1 -0
  150. package/esm/setters/SetProvider.js +11 -0
  151. package/esm/setters/SetProvider.js.map +1 -0
  152. package/esm/setters/SetRedirect.js +12 -0
  153. package/esm/setters/SetRedirect.js.map +1 -0
  154. package/{lib/components → esm/setters}/SetRoute.d.ts +6 -2
  155. package/esm/setters/SetRoute.js +11 -0
  156. package/esm/setters/SetRoute.js.map +1 -0
  157. package/esm/setters/index.d.ts +7 -0
  158. package/esm/setters/index.js +8 -0
  159. package/esm/setters/index.js.map +1 -0
  160. package/esm/state/createActions.d.ts +2 -2
  161. package/esm/state/createActions.js +8 -12
  162. package/esm/state/createActions.js.map +1 -1
  163. package/esm/state/createGlobalState.d.ts +1 -2
  164. package/esm/state/createGlobalState.js +9 -34
  165. package/esm/state/createGlobalState.js.map +1 -1
  166. package/esm/state/stateContext.js +1 -1
  167. package/esm/state/stateContext.js.map +1 -1
  168. package/esm/state/withApi.d.ts +1 -1
  169. package/esm/state/withApi.js +19 -104
  170. package/esm/state/withApi.js.map +1 -1
  171. package/esm/tools/codegen.d.ts +21 -0
  172. package/esm/tools/codegen.js +145 -0
  173. package/esm/tools/codegen.js.map +1 -0
  174. package/esm/tools/debugger.d.ts +4 -0
  175. package/esm/tools/debugger.js +54 -0
  176. package/esm/tools/debugger.js.map +1 -0
  177. package/esm/tools/emulator.d.ts +3 -0
  178. package/esm/tools/emulator.js +11 -0
  179. package/esm/tools/emulator.js.map +1 -0
  180. package/esm/types/api.d.ts +34 -9
  181. package/esm/types/common.d.ts +11 -11
  182. package/esm/types/components.d.ts +74 -8
  183. package/esm/types/config.d.ts +24 -17
  184. package/esm/types/data.d.ts +2 -2
  185. package/esm/types/extension.d.ts +31 -4
  186. package/esm/types/index.d.ts +1 -0
  187. package/esm/types/index.js +1 -0
  188. package/esm/types/index.js.map +1 -1
  189. package/esm/types/instance.d.ts +26 -4
  190. package/esm/types/layout.d.ts +3 -3
  191. package/esm/types/navigation.d.ts +94 -0
  192. package/esm/types/navigation.js +2 -0
  193. package/esm/types/navigation.js.map +1 -0
  194. package/esm/types/plugin.d.ts +1 -14
  195. package/esm/types/state.d.ts +66 -27
  196. package/esm/types/utils.d.ts +1 -1
  197. package/esm/utils/compare.d.ts +1 -1
  198. package/esm/utils/compare.js +24 -7
  199. package/esm/utils/compare.js.map +1 -1
  200. package/esm/utils/data.js +6 -7
  201. package/esm/utils/data.js.map +1 -1
  202. package/esm/utils/extension.d.ts +16 -0
  203. package/esm/utils/extension.js +37 -0
  204. package/esm/utils/extension.js.map +1 -0
  205. package/esm/utils/foreign.d.ts +7 -2
  206. package/esm/utils/foreign.js +20 -9
  207. package/esm/utils/foreign.js.map +1 -1
  208. package/esm/utils/guid.js +3 -3
  209. package/esm/utils/guid.js.map +1 -1
  210. package/esm/utils/helpers.d.ts +11 -8
  211. package/esm/utils/helpers.js +29 -18
  212. package/esm/utils/helpers.js.map +1 -1
  213. package/esm/utils/index.d.ts +3 -1
  214. package/esm/utils/index.js +3 -1
  215. package/esm/utils/index.js.map +1 -1
  216. package/esm/utils/media.js +8 -8
  217. package/esm/utils/media.js.map +1 -1
  218. package/esm/utils/state.d.ts +57 -0
  219. package/esm/utils/state.js +83 -0
  220. package/esm/utils/state.js.map +1 -0
  221. package/esm/utils/storage.js +13 -14
  222. package/esm/utils/storage.js.map +1 -1
  223. package/lib/Piral.d.ts +4 -4
  224. package/lib/Piral.js +11 -13
  225. package/lib/Piral.js.map +1 -1
  226. package/lib/PiralContext.d.ts +21 -0
  227. package/lib/PiralContext.js +38 -0
  228. package/lib/PiralContext.js.map +1 -0
  229. package/lib/RootListener.d.ts +2 -0
  230. package/lib/RootListener.js +27 -0
  231. package/lib/RootListener.js.map +1 -0
  232. package/lib/actions/app.d.ts +7 -4
  233. package/lib/actions/app.js +27 -16
  234. package/lib/actions/app.js.map +1 -1
  235. package/lib/actions/components.js +5 -6
  236. package/lib/actions/components.js.map +1 -1
  237. package/lib/actions/data.js +17 -18
  238. package/lib/actions/data.js.map +1 -1
  239. package/lib/actions/define.js +2 -3
  240. package/lib/actions/define.js.map +1 -1
  241. package/lib/actions/index.js +1 -1
  242. package/lib/actions/portal.d.ts +2 -0
  243. package/lib/actions/portal.js +12 -5
  244. package/lib/actions/portal.js.map +1 -1
  245. package/lib/actions/state.js +7 -4
  246. package/lib/actions/state.js.map +1 -1
  247. package/lib/components/ErrorBoundary.d.ts +14 -31
  248. package/lib/components/ErrorBoundary.js +23 -28
  249. package/lib/components/ErrorBoundary.js.map +1 -1
  250. package/lib/components/ExtensionSlot.d.ts +1 -0
  251. package/lib/components/ExtensionSlot.js +37 -14
  252. package/lib/components/ExtensionSlot.js.map +1 -1
  253. package/lib/components/ForeignComponentContainer.d.ts +19 -0
  254. package/lib/components/ForeignComponentContainer.js +50 -0
  255. package/lib/components/ForeignComponentContainer.js.map +1 -0
  256. package/lib/components/Mediator.js +18 -14
  257. package/lib/components/Mediator.js.map +1 -1
  258. package/lib/components/PiralGlobals.d.ts +6 -0
  259. package/lib/components/PiralGlobals.js +17 -0
  260. package/lib/components/PiralGlobals.js.map +1 -0
  261. package/lib/components/PiralRoutes.d.ts +5 -0
  262. package/lib/components/PiralRoutes.js +8 -12
  263. package/lib/components/PiralRoutes.js.map +1 -1
  264. package/lib/components/PiralSuspense.d.ts +5 -0
  265. package/lib/components/PiralSuspense.js +12 -0
  266. package/lib/components/PiralSuspense.js.map +1 -0
  267. package/lib/components/PiralView.d.ts +10 -1
  268. package/lib/components/PiralView.js +15 -27
  269. package/lib/components/PiralView.js.map +1 -1
  270. package/lib/components/PortalRenderer.d.ts +5 -0
  271. package/lib/components/PortalRenderer.js +11 -0
  272. package/lib/components/PortalRenderer.js.map +1 -0
  273. package/lib/components/ResponsiveLayout.d.ts +9 -1
  274. package/lib/components/ResponsiveLayout.js +7 -14
  275. package/lib/components/ResponsiveLayout.js.map +1 -1
  276. package/lib/components/SwitchErrorInfo.js +15 -12
  277. package/lib/components/SwitchErrorInfo.js.map +1 -1
  278. package/lib/components/components.d.ts +18 -6
  279. package/lib/components/components.js +24 -12
  280. package/lib/components/components.js.map +1 -1
  281. package/lib/components/index.d.ts +4 -10
  282. package/lib/components/index.js +5 -11
  283. package/lib/components/index.js.map +1 -1
  284. package/lib/components/wrapComponent.d.ts +7 -0
  285. package/lib/components/wrapComponent.js +46 -0
  286. package/lib/components/wrapComponent.js.map +1 -0
  287. package/lib/createInstance.d.ts +2 -2
  288. package/lib/createInstance.js +40 -36
  289. package/lib/createInstance.js.map +1 -1
  290. package/lib/defaults/DefaultErrorInfo.js +14 -0
  291. package/lib/defaults/DefaultErrorInfo.js.map +1 -0
  292. package/lib/{components → defaults}/DefaultLayout.js +3 -5
  293. package/lib/defaults/DefaultLayout.js.map +1 -0
  294. package/lib/{components/DefaultLoader.js → defaults/DefaultLoadingIndicator.js} +4 -3
  295. package/lib/defaults/DefaultLoadingIndicator.js.map +1 -0
  296. package/lib/defaults/DefaultRouteSwitch_v5.d.ts +3 -0
  297. package/lib/defaults/DefaultRouteSwitch_v5.js +15 -0
  298. package/lib/defaults/DefaultRouteSwitch_v5.js.map +1 -0
  299. package/lib/defaults/DefaultRouteSwitch_v6.d.ts +3 -0
  300. package/lib/defaults/DefaultRouteSwitch_v6.js +19 -0
  301. package/lib/defaults/DefaultRouteSwitch_v6.js.map +1 -0
  302. package/lib/defaults/DefaultRouter_v5.d.ts +3 -0
  303. package/lib/defaults/DefaultRouter_v5.js +11 -0
  304. package/lib/defaults/DefaultRouter_v5.js.map +1 -0
  305. package/lib/defaults/DefaultRouter_v6.d.ts +3 -0
  306. package/lib/defaults/DefaultRouter_v6.js +11 -0
  307. package/lib/defaults/DefaultRouter_v6.js.map +1 -0
  308. package/lib/defaults/navigator_none.d.ts +5 -0
  309. package/lib/defaults/navigator_none.js +37 -0
  310. package/lib/defaults/navigator_none.js.map +1 -0
  311. package/lib/defaults/navigator_v5.d.ts +6 -0
  312. package/lib/defaults/navigator_v5.js +88 -0
  313. package/lib/defaults/navigator_v5.js.map +1 -0
  314. package/lib/defaults/navigator_v6.d.ts +6 -0
  315. package/lib/defaults/navigator_v6.js +84 -0
  316. package/lib/defaults/navigator_v6.js.map +1 -0
  317. package/lib/helpers.d.ts +12 -26
  318. package/lib/helpers.js +15 -75
  319. package/lib/helpers.js.map +1 -1
  320. package/lib/hooks/action.js +2 -3
  321. package/lib/hooks/action.js.map +1 -1
  322. package/lib/hooks/actions.js +4 -4
  323. package/lib/hooks/actions.js.map +1 -1
  324. package/lib/hooks/globalState.d.ts +7 -0
  325. package/lib/hooks/globalState.js +14 -11
  326. package/lib/hooks/globalState.js.map +1 -1
  327. package/lib/hooks/index.d.ts +2 -5
  328. package/lib/hooks/index.js +3 -6
  329. package/lib/hooks/index.js.map +1 -1
  330. package/lib/hooks/media.js +10 -9
  331. package/lib/hooks/media.js.map +1 -1
  332. package/lib/hooks/piletApi.d.ts +7 -0
  333. package/lib/hooks/piletApi.js +18 -0
  334. package/lib/hooks/piletApi.js.map +1 -0
  335. package/lib/hooks/routes.d.ts +2 -0
  336. package/lib/hooks/routes.js +15 -0
  337. package/lib/hooks/routes.js.map +1 -0
  338. package/lib/hooks/setter.js +4 -3
  339. package/lib/hooks/setter.js.map +1 -1
  340. package/lib/hooks/sharedData.js +3 -3
  341. package/lib/hooks/sharedData.js.map +1 -1
  342. package/lib/index.d.ts +3 -1
  343. package/lib/index.js +4 -2
  344. package/lib/index.js.map +1 -1
  345. package/lib/modules/api.d.ts +2 -5
  346. package/lib/modules/api.js +12 -75
  347. package/lib/modules/api.js.map +1 -1
  348. package/lib/modules/core.d.ts +3 -0
  349. package/lib/modules/core.js +54 -0
  350. package/lib/modules/core.js.map +1 -0
  351. package/lib/modules/dependencies.d.ts +5 -6
  352. package/lib/modules/dependencies.js +12 -27
  353. package/lib/modules/dependencies.js.map +1 -1
  354. package/lib/modules/element.d.ts +5 -0
  355. package/lib/modules/element.js +173 -0
  356. package/lib/modules/element.js.map +1 -0
  357. package/lib/modules/index.d.ts +1 -0
  358. package/lib/modules/index.js +2 -1
  359. package/lib/modules/index.js.map +1 -1
  360. package/lib/setters/SetComponent.js +15 -0
  361. package/lib/setters/SetComponent.js.map +1 -0
  362. package/lib/setters/SetError.js +15 -0
  363. package/lib/setters/SetError.js.map +1 -0
  364. package/lib/setters/SetErrors.js +13 -0
  365. package/lib/setters/SetErrors.js.map +1 -0
  366. package/lib/setters/SetLayout.js +13 -0
  367. package/lib/setters/SetLayout.js.map +1 -0
  368. package/lib/{components → setters}/SetProvider.js +4 -5
  369. package/lib/setters/SetProvider.js.map +1 -0
  370. package/lib/setters/SetRedirect.js +16 -0
  371. package/lib/setters/SetRedirect.js.map +1 -0
  372. package/{esm/components → lib/setters}/SetRoute.d.ts +6 -2
  373. package/lib/setters/SetRoute.js +15 -0
  374. package/lib/setters/SetRoute.js.map +1 -0
  375. package/lib/setters/index.d.ts +7 -0
  376. package/lib/setters/index.js +11 -0
  377. package/lib/setters/index.js.map +1 -0
  378. package/lib/state/createActions.d.ts +2 -2
  379. package/lib/state/createActions.js +9 -13
  380. package/lib/state/createActions.js.map +1 -1
  381. package/lib/state/createGlobalState.d.ts +1 -2
  382. package/lib/state/createGlobalState.js +9 -34
  383. package/lib/state/createGlobalState.js.map +1 -1
  384. package/lib/state/index.js +1 -1
  385. package/lib/state/stateContext.js +1 -1
  386. package/lib/state/stateContext.js.map +1 -1
  387. package/lib/state/withApi.d.ts +1 -1
  388. package/lib/state/withApi.js +20 -105
  389. package/lib/state/withApi.js.map +1 -1
  390. package/lib/tools/codegen.d.ts +21 -0
  391. package/lib/tools/codegen.js +152 -0
  392. package/lib/tools/codegen.js.map +1 -0
  393. package/lib/tools/debugger.d.ts +4 -0
  394. package/lib/tools/debugger.js +58 -0
  395. package/lib/tools/debugger.js.map +1 -0
  396. package/lib/tools/emulator.d.ts +3 -0
  397. package/lib/tools/emulator.js +15 -0
  398. package/lib/tools/emulator.js.map +1 -0
  399. package/lib/types/api.d.ts +34 -9
  400. package/lib/types/common.d.ts +11 -11
  401. package/lib/types/components.d.ts +74 -8
  402. package/lib/types/config.d.ts +24 -17
  403. package/lib/types/data.d.ts +2 -2
  404. package/lib/types/extension.d.ts +31 -4
  405. package/lib/types/index.d.ts +1 -0
  406. package/lib/types/index.js +2 -1
  407. package/lib/types/index.js.map +1 -1
  408. package/lib/types/instance.d.ts +26 -4
  409. package/lib/types/layout.d.ts +3 -3
  410. package/lib/types/navigation.d.ts +94 -0
  411. package/lib/types/navigation.js +3 -0
  412. package/lib/types/navigation.js.map +1 -0
  413. package/lib/types/plugin.d.ts +1 -14
  414. package/lib/types/state.d.ts +66 -27
  415. package/lib/types/utils.d.ts +1 -1
  416. package/lib/utils/compare.d.ts +1 -1
  417. package/lib/utils/compare.js +26 -9
  418. package/lib/utils/compare.js.map +1 -1
  419. package/lib/utils/data.js +6 -7
  420. package/lib/utils/data.js.map +1 -1
  421. package/lib/utils/extension.d.ts +16 -0
  422. package/lib/utils/extension.js +42 -0
  423. package/lib/utils/extension.js.map +1 -0
  424. package/lib/utils/foreign.d.ts +7 -2
  425. package/lib/utils/foreign.js +25 -12
  426. package/lib/utils/foreign.js.map +1 -1
  427. package/lib/utils/guid.js +3 -3
  428. package/lib/utils/guid.js.map +1 -1
  429. package/lib/utils/helpers.d.ts +11 -8
  430. package/lib/utils/helpers.js +31 -18
  431. package/lib/utils/helpers.js.map +1 -1
  432. package/lib/utils/index.d.ts +3 -1
  433. package/lib/utils/index.js +7 -2
  434. package/lib/utils/index.js.map +1 -1
  435. package/lib/utils/media.js +7 -7
  436. package/lib/utils/media.js.map +1 -1
  437. package/lib/utils/react.js +1 -1
  438. package/lib/utils/react.js.map +1 -1
  439. package/lib/utils/state.d.ts +57 -0
  440. package/lib/utils/state.js +94 -0
  441. package/lib/utils/state.js.map +1 -0
  442. package/lib/utils/storage.js +11 -12
  443. package/lib/utils/storage.js.map +1 -1
  444. package/package.json +51 -20
  445. package/src/Piral.test.tsx +7 -16
  446. package/src/Piral.tsx +12 -11
  447. package/src/PiralContext.tsx +43 -0
  448. package/src/RootListener.test.tsx +46 -0
  449. package/src/RootListener.tsx +26 -0
  450. package/src/actions/app.test.ts +114 -44
  451. package/src/actions/app.ts +33 -23
  452. package/src/actions/components.test.ts +11 -11
  453. package/src/actions/components.ts +5 -33
  454. package/src/actions/data.test.ts +50 -50
  455. package/src/actions/define.test.ts +2 -2
  456. package/src/actions/portal.test.ts +62 -17
  457. package/src/actions/portal.ts +19 -1
  458. package/src/actions/state.test.ts +3 -3
  459. package/src/actions/state.ts +8 -4
  460. package/src/components/ErrorBoundary.tsx +22 -49
  461. package/src/components/ExtensionSlot.test.tsx +115 -30
  462. package/src/components/ExtensionSlot.tsx +57 -18
  463. package/src/components/ForeignComponentContainer.test.tsx +100 -0
  464. package/src/components/ForeignComponentContainer.tsx +63 -0
  465. package/src/components/Mediator.test.tsx +16 -14
  466. package/src/components/Mediator.tsx +17 -9
  467. package/src/components/PiralGlobals.tsx +16 -0
  468. package/src/components/PiralRoutes.test.tsx +65 -57
  469. package/src/components/PiralRoutes.tsx +10 -17
  470. package/src/components/PiralSuspense.tsx +19 -0
  471. package/src/components/PiralView-server.test.tsx +61 -0
  472. package/src/components/PiralView.test.tsx +27 -26
  473. package/src/components/PiralView.tsx +28 -35
  474. package/src/components/PortalRenderer.tsx +12 -0
  475. package/src/components/ResponsiveLayout.test.tsx +18 -37
  476. package/src/components/ResponsiveLayout.tsx +18 -15
  477. package/src/components/SwitchErrorInfo.test.tsx +36 -0
  478. package/src/components/SwitchErrorInfo.tsx +5 -1
  479. package/src/components/components.tsx +20 -6
  480. package/src/components/index.ts +4 -10
  481. package/src/components/wrapComponent.tsx +74 -0
  482. package/src/createInstance.test.tsx +10 -0
  483. package/src/createInstance.tsx +19 -14
  484. package/src/{components → defaults}/DefaultErrorInfo.test.tsx +15 -18
  485. package/src/{components → defaults}/DefaultErrorInfo.tsx +2 -3
  486. package/src/defaults/DefaultLayout.test.tsx +23 -0
  487. package/src/defaults/DefaultLoadingIndicator.test.tsx +10 -0
  488. package/src/defaults/DefaultRouteSwitch_v5.tsx +15 -0
  489. package/src/defaults/DefaultRouteSwitch_v6.tsx +20 -0
  490. package/src/defaults/DefaultRouter_v5.tsx +8 -0
  491. package/src/defaults/DefaultRouter_v6.tsx +8 -0
  492. package/src/defaults/navigator_none.tsx +35 -0
  493. package/src/defaults/navigator_v5.tsx +99 -0
  494. package/src/defaults/navigator_v6.tsx +96 -0
  495. package/src/helpers.test.tsx +30 -49
  496. package/src/helpers.tsx +31 -108
  497. package/src/hooks/action.ts +2 -3
  498. package/src/hooks/globalState.ts +10 -9
  499. package/src/hooks/index.ts +2 -5
  500. package/src/hooks/media.ts +2 -1
  501. package/src/hooks/piletApi.ts +14 -0
  502. package/src/hooks/routes.ts +14 -0
  503. package/src/hooks/setter-server.test.ts +22 -0
  504. package/src/hooks/setter.test.ts +18 -0
  505. package/src/hooks/setter.ts +2 -1
  506. package/src/index.tsx +3 -1
  507. package/src/modules/api.test.ts +15 -26
  508. package/src/modules/api.ts +3 -66
  509. package/src/modules/core.test.ts +148 -0
  510. package/src/modules/core.ts +52 -0
  511. package/src/modules/dependencies.test.ts +16 -5
  512. package/src/modules/dependencies.ts +13 -31
  513. package/src/modules/element-server.test.ts +29 -0
  514. package/src/modules/element.test.ts +67 -0
  515. package/src/modules/element.ts +212 -0
  516. package/src/modules/index.ts +1 -0
  517. package/src/{components → setters}/SetComponent.test.tsx +9 -8
  518. package/src/{components → setters}/SetComponent.tsx +2 -2
  519. package/src/{components → setters}/SetError.test.tsx +9 -8
  520. package/src/{components → setters}/SetError.tsx +2 -2
  521. package/src/{components → setters}/SetErrors.test.tsx +9 -8
  522. package/src/{components → setters}/SetLayout.test.tsx +9 -8
  523. package/src/{components → setters}/SetProvider.test.tsx +9 -8
  524. package/src/{components → setters}/SetProvider.tsx +2 -2
  525. package/src/{components → setters}/SetRedirect.test.tsx +9 -8
  526. package/src/{components → setters}/SetRedirect.tsx +4 -4
  527. package/src/{components → setters}/SetRoute.test.tsx +9 -8
  528. package/src/{components → setters}/SetRoute.tsx +7 -4
  529. package/src/setters/index.ts +7 -0
  530. package/src/state/createActions.test.ts +2 -2
  531. package/src/state/createActions.ts +5 -3
  532. package/src/state/createGlobalState.test.ts +55 -54
  533. package/src/state/createGlobalState.ts +4 -28
  534. package/src/state/withApi.test.tsx +87 -40
  535. package/src/state/withApi.tsx +31 -165
  536. package/src/tools/codegen.ts +193 -0
  537. package/src/tools/debugger.ts +84 -0
  538. package/src/tools/emulator.ts +13 -0
  539. package/src/types/api.ts +47 -10
  540. package/src/types/components.ts +76 -7
  541. package/src/types/config.ts +23 -17
  542. package/src/types/extension.ts +38 -5
  543. package/src/types/index.ts +1 -0
  544. package/src/types/instance.ts +28 -4
  545. package/src/types/navigation.ts +101 -0
  546. package/src/types/plugin.ts +1 -15
  547. package/src/types/state.ts +65 -25
  548. package/src/types/utils.ts +1 -1
  549. package/src/utils/compare.test.ts +15 -15
  550. package/src/utils/compare.ts +23 -3
  551. package/src/utils/extension.test.tsx +21 -0
  552. package/src/utils/extension.tsx +48 -0
  553. package/src/utils/foreign.test.ts +29 -11
  554. package/src/utils/foreign.ts +34 -7
  555. package/src/utils/guid.test.ts +6 -1
  556. package/src/utils/helpers.test.ts +52 -0
  557. package/src/utils/helpers.ts +22 -8
  558. package/src/utils/index.ts +4 -1
  559. package/src/utils/media-server.test.ts +13 -0
  560. package/src/utils/media.ts +2 -2
  561. package/src/utils/state.test.ts +37 -0
  562. package/src/utils/state.ts +131 -0
  563. package/dependencies.codegen +0 -9
  564. package/dependencies.codegen.native.js +0 -2
  565. package/esm/components/DefaultErrorInfo.js +0 -12
  566. package/esm/components/DefaultErrorInfo.js.map +0 -1
  567. package/esm/components/DefaultLayout.js.map +0 -1
  568. package/esm/components/DefaultLoader.js.map +0 -1
  569. package/esm/components/SetComponent.js +0 -12
  570. package/esm/components/SetComponent.js.map +0 -1
  571. package/esm/components/SetError.js +0 -12
  572. package/esm/components/SetError.js.map +0 -1
  573. package/esm/components/SetErrors.js +0 -10
  574. package/esm/components/SetErrors.js.map +0 -1
  575. package/esm/components/SetLayout.js +0 -10
  576. package/esm/components/SetLayout.js.map +0 -1
  577. package/esm/components/SetProvider.js +0 -12
  578. package/esm/components/SetProvider.js.map +0 -1
  579. package/esm/components/SetRedirect.js +0 -14
  580. package/esm/components/SetRedirect.js.map +0 -1
  581. package/esm/components/SetRoute.js +0 -12
  582. package/esm/components/SetRoute.js.map +0 -1
  583. package/esm/hooks/debounce.d.ts +0 -8
  584. package/esm/hooks/debounce.js +0 -18
  585. package/esm/hooks/debounce.js.map +0 -1
  586. package/esm/hooks/lockBodyScroll.d.ts +0 -6
  587. package/esm/hooks/lockBodyScroll.js +0 -13
  588. package/esm/hooks/lockBodyScroll.js.map +0 -1
  589. package/esm/hooks/onClickOutside.d.ts +0 -8
  590. package/esm/hooks/onClickOutside.js +0 -23
  591. package/esm/hooks/onClickOutside.js.map +0 -1
  592. package/esm/hooks/onScreenVisible.d.ts +0 -11
  593. package/esm/hooks/onScreenVisible.js +0 -28
  594. package/esm/hooks/onScreenVisible.js.map +0 -1
  595. package/esm/hooks/promise.d.ts +0 -13
  596. package/esm/hooks/promise.js +0 -21
  597. package/esm/hooks/promise.js.map +0 -1
  598. package/esm/utils/events.d.ts +0 -3
  599. package/esm/utils/events.js +0 -35
  600. package/esm/utils/events.js.map +0 -1
  601. package/lib/components/DefaultErrorInfo.js +0 -15
  602. package/lib/components/DefaultErrorInfo.js.map +0 -1
  603. package/lib/components/DefaultLayout.js.map +0 -1
  604. package/lib/components/DefaultLoader.js.map +0 -1
  605. package/lib/components/SetComponent.js +0 -16
  606. package/lib/components/SetComponent.js.map +0 -1
  607. package/lib/components/SetError.js +0 -16
  608. package/lib/components/SetError.js.map +0 -1
  609. package/lib/components/SetErrors.js +0 -14
  610. package/lib/components/SetErrors.js.map +0 -1
  611. package/lib/components/SetLayout.js +0 -14
  612. package/lib/components/SetLayout.js.map +0 -1
  613. package/lib/components/SetProvider.js.map +0 -1
  614. package/lib/components/SetRedirect.js +0 -18
  615. package/lib/components/SetRedirect.js.map +0 -1
  616. package/lib/components/SetRoute.js +0 -16
  617. package/lib/components/SetRoute.js.map +0 -1
  618. package/lib/hooks/debounce.d.ts +0 -8
  619. package/lib/hooks/debounce.js +0 -22
  620. package/lib/hooks/debounce.js.map +0 -1
  621. package/lib/hooks/lockBodyScroll.d.ts +0 -6
  622. package/lib/hooks/lockBodyScroll.js +0 -17
  623. package/lib/hooks/lockBodyScroll.js.map +0 -1
  624. package/lib/hooks/onClickOutside.d.ts +0 -8
  625. package/lib/hooks/onClickOutside.js +0 -27
  626. package/lib/hooks/onClickOutside.js.map +0 -1
  627. package/lib/hooks/onScreenVisible.d.ts +0 -11
  628. package/lib/hooks/onScreenVisible.js +0 -32
  629. package/lib/hooks/onScreenVisible.js.map +0 -1
  630. package/lib/hooks/promise.d.ts +0 -13
  631. package/lib/hooks/promise.js +0 -25
  632. package/lib/hooks/promise.js.map +0 -1
  633. package/lib/utils/events.d.ts +0 -3
  634. package/lib/utils/events.js +0 -39
  635. package/lib/utils/events.js.map +0 -1
  636. package/src/components/DefaultLayout.test.tsx +0 -23
  637. package/src/components/DefaultLoader.test.tsx +0 -10
  638. package/src/hooks/debounce.test.ts +0 -67
  639. package/src/hooks/debounce.ts +0 -19
  640. package/src/hooks/globalState.test.ts +0 -47
  641. package/src/hooks/lockBodyScroll.test.ts +0 -24
  642. package/src/hooks/lockBodyScroll.ts +0 -13
  643. package/src/hooks/onClickOutside.test.ts +0 -113
  644. package/src/hooks/onClickOutside.ts +0 -25
  645. package/src/hooks/onScreenVisible.test.ts +0 -68
  646. package/src/hooks/onScreenVisible.ts +0 -28
  647. package/src/hooks/promise.test.ts +0 -76
  648. package/src/hooks/promise.ts +0 -35
  649. package/src/utils/events.test.ts +0 -65
  650. package/src/utils/events.ts +0 -39
  651. package/esm/{components → defaults}/DefaultErrorInfo.d.ts +0 -0
  652. package/esm/{components → defaults}/DefaultLayout.d.ts +0 -0
  653. package/esm/{components/DefaultLoader.d.ts → defaults/DefaultLoadingIndicator.d.ts} +0 -0
  654. package/esm/{components → setters}/SetComponent.d.ts +0 -0
  655. package/esm/{components → setters}/SetError.d.ts +0 -0
  656. package/esm/{components → setters}/SetErrors.d.ts +0 -0
  657. package/esm/{components → setters}/SetLayout.d.ts +0 -0
  658. package/esm/{components → setters}/SetProvider.d.ts +0 -0
  659. package/esm/{components → setters}/SetRedirect.d.ts +0 -0
  660. package/lib/{components → defaults}/DefaultErrorInfo.d.ts +0 -0
  661. package/lib/{components → defaults}/DefaultLayout.d.ts +0 -0
  662. package/lib/{components/DefaultLoader.d.ts → defaults/DefaultLoadingIndicator.d.ts} +0 -0
  663. package/lib/{components → setters}/SetComponent.d.ts +0 -0
  664. package/lib/{components → setters}/SetError.d.ts +0 -0
  665. package/lib/{components → setters}/SetErrors.d.ts +0 -0
  666. package/lib/{components → setters}/SetLayout.d.ts +0 -0
  667. package/lib/{components → setters}/SetProvider.d.ts +0 -0
  668. package/lib/{components → setters}/SetRedirect.d.ts +0 -0
  669. package/src/{components → defaults}/DefaultLayout.tsx +1 -1
  670. /package/src/{components/DefaultLoader.tsx → defaults/DefaultLoadingIndicator.tsx} +0 -0
  671. /package/src/{components → setters}/SetErrors.tsx +0 -0
  672. /package/src/{components → setters}/SetLayout.tsx +0 -0
@@ -1,22 +1,22 @@
1
1
  import * as React from 'react';
2
2
  import * as hooks from '../hooks';
3
3
  import * as routes from './PiralRoutes';
4
- import { mount } from 'enzyme';
4
+ import { render } from '@testing-library/react';
5
5
  import { PiralView } from './PiralView';
6
6
 
7
- const StubDashboard: React.FC = () => <div />;
7
+ const StubDashboard: React.FC<any> = () => <div role="dashboard" />;
8
8
  StubDashboard.displayName = 'StubDashboard';
9
9
 
10
- const StubErrorInfo: React.FC = () => <div />;
10
+ const StubErrorInfo: React.FC<any> = ({ type }) => <div role="error">{type}</div>;
11
11
  StubErrorInfo.displayName = 'StubErrorInfo';
12
12
 
13
- const StubLoader: React.FC = () => <div />;
13
+ const StubLoader: React.FC<any> = () => <div role="loader" />;
14
14
  StubLoader.displayName = 'StubLoader';
15
15
 
16
- const StubRouter: React.FC = ({ children }) => <div>{children}</div>;
16
+ const StubRouter: React.FC<any> = ({ children }) => <div role="router">{children}</div>;
17
17
  StubRouter.displayName = 'StubRouter';
18
18
 
19
- const StubLayout: React.FC = ({ children }) => <div>{children}</div>;
19
+ const StubLayout: React.FC<any> = ({ children }) => <div role="layout">{children}</div>;
20
20
  StubLayout.displayName = 'StubLayout';
21
21
 
22
22
  jest.mock('../hooks');
@@ -24,7 +24,7 @@ jest.mock('./PiralRoutes');
24
24
 
25
25
  const state = {
26
26
  app: {
27
- error: undefined,
27
+ error: undefined as any,
28
28
  loading: true,
29
29
  },
30
30
  components: {
@@ -33,6 +33,7 @@ const state = {
33
33
  Router: StubRouter,
34
34
  Layout: StubLayout,
35
35
  },
36
+ portals: {},
36
37
  registry: {
37
38
  pages: {},
38
39
  extensions: {},
@@ -43,45 +44,45 @@ const state = {
43
44
 
44
45
  (hooks as any).useGlobalState = (select: any) => select(state);
45
46
 
46
- (routes as any).PiralRoutes = ({}) => <StubDashboard />;
47
+ (routes as any).PiralRoutes = ({ }) => <StubDashboard />;
47
48
 
48
49
  describe('Portal Module', () => {
49
50
  it('renders the dashboard / content in layout if loaded without error', () => {
50
51
  state.app.loading = false;
51
52
  state.app.error = undefined;
52
- const node = mount(<PiralView />);
53
- expect(node.find(StubLoader).length).toBe(0);
54
- expect(node.find(StubErrorInfo).length).toBe(0);
55
- expect(node.find(StubDashboard).length).toBe(1);
53
+ const node = render(<PiralView />);
54
+ expect(node.queryAllByRole("loader").length).toBe(0);
55
+ expect(node.queryAllByRole("error").length).toBe(0);
56
+ expect(node.queryAllByRole("dashboard").length).toBe(1);
56
57
  });
57
58
 
58
59
  it('just renders the loader if not loaded yet', () => {
59
60
  state.app.loading = true;
60
61
  state.app.error = undefined;
61
- const node = mount(<PiralView />);
62
- expect(node.find(StubLoader).length).toBe(1);
63
- expect(node.find(StubErrorInfo).length).toBe(0);
64
- expect(node.find(StubDashboard).length).toBe(0);
62
+ const node = render(<PiralView />);
63
+ expect(node.queryAllByRole("loader").length).toBe(1);
64
+ expect(node.queryAllByRole("error").length).toBe(0);
65
+ expect(node.queryAllByRole("dashboard").length).toBe(0);
65
66
  });
66
67
 
67
68
  it('renders the error outside layout if errored when loading', () => {
68
69
  state.app.loading = false;
69
70
  state.app.error = new Error('Test');
70
- const node = mount(<PiralView />);
71
- expect(node.find(StubLoader).length).toBe(0);
72
- expect(node.find(StubErrorInfo).length).toBe(1);
73
- expect(node.find(StubErrorInfo).prop('type')).toBe('loading');
74
- expect(node.find(StubDashboard).length).toBe(0);
71
+ const node = render(<PiralView />);
72
+ expect(node.queryAllByRole("loader").length).toBe(0);
73
+ expect(node.queryAllByRole("error").length).toBe(1);
74
+ expect(node.getByRole("error").textContent).toBe('loading');
75
+ expect(node.queryAllByRole("dashboard").length).toBe(0);
75
76
  });
76
77
 
77
78
  it('renders the not found error in layout', () => {
78
79
  state.app.loading = false;
79
80
  state.app.error = undefined;
80
81
  (routes as any).PiralRoutes = ({ NotFound }) => <NotFound />;
81
- const node = mount(<PiralView />);
82
- expect(node.find(StubLoader).length).toBe(0);
83
- expect(node.find(StubErrorInfo).length).toBe(1);
84
- expect(node.find(StubErrorInfo).prop('type')).toBe('not_found');
85
- expect(node.find(StubDashboard).length).toBe(0);
82
+ const node = render(<PiralView />);
83
+ expect(node.queryAllByRole("loader").length).toBe(0);
84
+ expect(node.queryAllByRole("error").length).toBe(1);
85
+ expect(node.getByRole("error").textContent).toBe('not_found');
86
+ expect(node.queryAllByRole("dashboard").length).toBe(0);
86
87
  });
87
88
  });
@@ -1,48 +1,41 @@
1
1
  import * as React from 'react';
2
- import { RouteComponentProps, StaticRouter } from 'react-router';
3
- import { PiralError, PiralRouter, PiralLoadingIndicator, PiralLayout, PiralDebug } from './components';
2
+ import { RouteComponentProps } from 'react-router';
3
+ import { PiralGlobals } from './PiralGlobals';
4
4
  import { PiralRoutes } from './PiralRoutes';
5
- import { useGlobalState } from '../hooks';
5
+ import { PiralSuspense } from './PiralSuspense';
6
+ import { ResponsiveLayout } from './ResponsiveLayout';
7
+ import { RegisteredErrorInfo, RegisteredRouteSwitch, RegisteredLayout } from './components';
8
+ import { LayoutBreakpoints } from '../types';
6
9
 
7
- const NotFound: React.FC<RouteComponentProps> = (props) => <PiralError type="not_found" {...props} />;
8
-
9
- const PiralContent: React.FC = () => {
10
- const { error, loading, layout } = useGlobalState((m) => m.app);
11
-
12
- return error ? (
13
- <PiralError type="loading" error={error} />
14
- ) : loading ? (
15
- <PiralLoadingIndicator />
16
- ) : (
17
- <PiralLayout currentLayout={layout}>
18
- <PiralRoutes NotFound={NotFound} />
19
- </PiralLayout>
20
- );
21
- };
22
-
23
- const Router = typeof window === 'undefined' ? (props) => <StaticRouter location="/" {...props} /> : PiralRouter;
24
-
25
- const PiralProvider: React.FC = ({ children }) => {
26
- const provider = useGlobalState((m) => m.provider) || React.Fragment;
27
- return React.createElement(provider, undefined, children);
28
- };
10
+ const NotFound: React.FC<RouteComponentProps> = (props) => <RegisteredErrorInfo type="not_found" {...props} />;
29
11
 
30
12
  /**
31
13
  * The props for the PiralView component.
32
14
  */
33
- export interface PiralViewProps {}
15
+ export interface PiralViewProps {
16
+ /**
17
+ * The custom breakpoints for the different layout modi.
18
+ */
19
+ breakpoints?: LayoutBreakpoints;
20
+ /**
21
+ * The extra content.
22
+ */
23
+ children: React.ReactNode;
24
+ }
34
25
 
35
26
  /**
36
27
  * The component responsible for the generic view of the application.
37
- * This includes the global providers, the used Router, the current content and some convenience.
28
+ * This includes the used the current content and some convenience.
38
29
  */
39
- export const PiralView: React.FC<PiralViewProps> = ({ children }) => (
40
- <PiralProvider>
41
- <Router>
42
- <PiralContent />
43
- {children}
44
- <PiralDebug />
45
- </Router>
46
- </PiralProvider>
30
+ export const PiralView: React.FC<PiralViewProps> = ({ breakpoints, children }) => (
31
+ <>
32
+ <PiralGlobals />
33
+ <PiralSuspense>
34
+ <ResponsiveLayout breakpoints={breakpoints} Layout={RegisteredLayout}>
35
+ <PiralRoutes NotFound={NotFound} RouteSwitch={RegisteredRouteSwitch} />
36
+ </ResponsiveLayout>
37
+ </PiralSuspense>
38
+ {children}
39
+ </>
47
40
  );
48
41
  PiralView.displayName = 'PiralView';
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { useGlobalState } from '../hooks';
3
+ import { defaultRender, none } from '../utils';
4
+
5
+ export interface PortalRendererProps {
6
+ id: string;
7
+ }
8
+
9
+ export const PortalRenderer: React.FC<PortalRendererProps> = ({ id }) => {
10
+ const children = useGlobalState((m) => m.portals[id]) || none;
11
+ return defaultRender(children);
12
+ };
@@ -1,63 +1,44 @@
1
1
  import * as React from 'react';
2
2
  import * as hooks from '../hooks';
3
- import { mount } from 'enzyme';
3
+ import { render } from '@testing-library/react';
4
4
  import { ResponsiveLayout } from './ResponsiveLayout';
5
5
  import { defaultBreakpoints } from '../utils';
6
6
 
7
7
  jest.mock('../hooks');
8
8
 
9
- (hooks as any).useGlobalState = (select: any) =>
10
- select({
11
- app: {
12
- layout: 'desktop',
13
- },
14
- });
15
-
16
- const StubComponent: React.FC = () => <div />;
17
- StubComponent.displayName = 'StubComponent';
18
-
19
9
  describe('Responsive Module', () => {
20
10
  it('always renders the given children', () => {
21
- const changeTo = jest.fn();
22
- (hooks as any).useAction = () => changeTo;
23
11
  (hooks as any).useMedia = () => 'desktop';
24
- const node = mount(
25
- <ResponsiveLayout breakpoints={defaultBreakpoints}>
26
- <StubComponent />)
12
+ const Layout: React.FC = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
13
+ Layout.displayName = 'Layout';
14
+ const StubComponent: React.FC = () => <div role="stub" />;
15
+ StubComponent.displayName = 'StubComponent';
16
+ const node = render(
17
+ <ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints}>
18
+ <StubComponent />
27
19
  </ResponsiveLayout>,
28
20
  );
29
- expect(node.find(StubComponent).length).toBe(1);
30
- });
31
-
32
- it('does not call changeTo when nothing changed', () => {
33
- const changeTo = jest.fn();
34
- (hooks as any).useAction = () => changeTo;
35
- (hooks as any).useMedia = () => 'desktop';
36
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
37
- expect(changeTo).not.toHaveBeenCalled();
21
+ expect(node.queryAllByRole('stub').length).toBe(1);
38
22
  });
39
23
 
40
24
  it('does not call changeTo when nothing changed', () => {
41
- const changeTo = jest.fn();
42
- (hooks as any).useAction = () => changeTo;
43
25
  (hooks as any).useMedia = () => 'desktop';
44
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
45
- expect(changeTo).not.toHaveBeenCalled();
26
+ const Layout = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
27
+ render(<ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints} />);
28
+ expect(Layout).toHaveBeenCalledWith({ currentLayout: 'desktop' }, {});
46
29
  });
47
30
 
48
31
  it('does calls changeTo when someething changed (desktop -> tablet)', () => {
49
- const changeTo = jest.fn();
50
- (hooks as any).useAction = () => changeTo;
51
32
  (hooks as any).useMedia = () => 'tablet';
52
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
53
- expect(changeTo).toHaveBeenCalledWith('tablet');
33
+ const Layout = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
34
+ render(<ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints} />);
35
+ expect(Layout).toHaveBeenCalledWith({ currentLayout: 'tablet' }, {});
54
36
  });
55
37
 
56
38
  it('does calls changeTo when someething changed (desktop -> mobile)', () => {
57
- const changeTo = jest.fn();
58
- (hooks as any).useAction = () => changeTo;
59
39
  (hooks as any).useMedia = () => 'mobile';
60
- mount(<ResponsiveLayout breakpoints={defaultBreakpoints} />);
61
- expect(changeTo).toHaveBeenCalledWith('mobile');
40
+ const Layout = jest.fn().mockImplementation(({ children }) => <div>{children}</div>);
41
+ render(<ResponsiveLayout Layout={Layout} breakpoints={defaultBreakpoints} />);
42
+ expect(Layout).toHaveBeenCalledWith({ currentLayout: 'mobile' }, {});
62
43
  });
63
44
  });
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
- import { useMedia, useGlobalState, useAction } from '../hooks';
3
- import { defaultLayouts, defaultRender, defaultBreakpoints } from '../utils';
4
- import { LayoutBreakpoints } from '../types';
2
+ import { useMedia } from '../hooks';
3
+ import { defaultLayouts, defaultBreakpoints } from '../utils';
4
+ import { LayoutBreakpoints, LayoutProps } from '../types';
5
5
 
6
6
  /**
7
7
  * The props for the ResponsiveLayout component.
@@ -11,22 +11,25 @@ export interface ResponsiveLayoutProps {
11
11
  * The individual breakpoints to be used for the different layouts.
12
12
  */
13
13
  breakpoints?: LayoutBreakpoints;
14
+ /**
15
+ * The actual layout component to render to transport.
16
+ */
17
+ Layout: React.ComponentType<LayoutProps>;
18
+ /**
19
+ * The content to display.
20
+ */
21
+ children: React.ReactNode;
14
22
  }
15
23
 
16
24
  /**
17
25
  * The component capable of identifying and switching the currently used layout.
18
26
  */
19
- export const ResponsiveLayout: React.FC<ResponsiveLayoutProps> = ({ breakpoints = defaultBreakpoints, children }) => {
20
- const current = useGlobalState((m) => m.app.layout) || 'desktop';
21
- const changeTo = useAction('changeLayout');
22
- const selected = useMedia(breakpoints, defaultLayouts, current);
23
-
24
- React.useEffect(() => {
25
- if (selected !== current) {
26
- changeTo(selected);
27
- }
28
- }, [selected]);
29
-
30
- return defaultRender(children);
27
+ export const ResponsiveLayout: React.FC<ResponsiveLayoutProps> = ({
28
+ breakpoints = defaultBreakpoints,
29
+ Layout,
30
+ children,
31
+ }) => {
32
+ const selected = useMedia(breakpoints, defaultLayouts, 'desktop');
33
+ return <Layout currentLayout={selected}>{children}</Layout>;
31
34
  };
32
35
  ResponsiveLayout.displayName = 'ResponsiveLayout';
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { SwitchErrorInfo } from './SwitchErrorInfo';
4
+
5
+ jest.mock('../hooks/globalState', () => ({
6
+ useGlobalState(select: any) {
7
+ return select(state);
8
+ },
9
+ }));
10
+
11
+ const StubComponent1: React.FC<any> = (props) => <div role="stub" children={props.children} />;
12
+ const Unknown: React.FC<any> = (props) => <div role="unknown" children={props.children} />;
13
+
14
+ const state = {
15
+ registry: {
16
+ extensions: {},
17
+ },
18
+ errorComponents: {
19
+ stubComponent1: StubComponent1,
20
+ unknown: Unknown,
21
+ },
22
+ };
23
+
24
+ (React as any).useMemo = (cb) => cb();
25
+
26
+ describe('SwitchErrorInfo Module', () => {
27
+ it('is able to render StubComponent1 component', () => {
28
+ const node = render(<SwitchErrorInfo type="stubComponent1" />);
29
+ expect(node.queryAllByRole('stub').length).toBe(1);
30
+ });
31
+
32
+ it('is able to default render Unknow component if the compenent name not available in state data', () => {
33
+ const node = render(<SwitchErrorInfo type="notRealComponent" />);
34
+ expect(node.queryAllByRole('unknown').length).toBe(1);
35
+ });
36
+ });
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { useGlobalState } from '../hooks';
3
- import { defaultRender } from '../utils';
3
+ import { defaultRender, none } from '../utils';
4
4
  import { ErrorComponentsState, Errors, ErrorInfoProps } from '../types';
5
5
 
6
6
  function renderComponent<TKey extends keyof ErrorComponentsState>(
@@ -10,6 +10,10 @@ function renderComponent<TKey extends keyof ErrorComponentsState>(
10
10
  const name = props.type;
11
11
  const Component = components[name];
12
12
 
13
+ if (process.env.NODE_ENV === 'development') {
14
+ React.useEffect(() => console.error('[dev-info] An error occurred in the Piral instance.', props), none);
15
+ }
16
+
13
17
  if (!Component) {
14
18
  const Unknown = components.unknown;
15
19
 
@@ -1,10 +1,18 @@
1
1
  import * as React from 'react';
2
2
  import { useGlobalState } from '../hooks';
3
- import { ComponentsState, ErrorInfoProps, LoadingIndicatorProps, RouterProps, LayoutProps } from '../types';
3
+ import { ComponentsState } from '../types';
4
4
 
5
+ /**
6
+ * Gets a registered layout component by its name.
7
+ * This will always return a valid component. If nothing is found
8
+ * then the returned component will just return null.
9
+ * @param name The name of the registered layout component.
10
+ * @returns The registered layout component or an empty stub component.
11
+ */
5
12
  export function getPiralComponent<TKey extends keyof ComponentsState>(name: TKey): ComponentsState[TKey] {
6
13
  return (props) => {
7
14
  const Component = useGlobalState((s) => s.components[name]);
15
+ // tslint:disable-next-line:no-null-keyword
8
16
  return Component ? <Component {...props} /> : null;
9
17
  };
10
18
  }
@@ -13,28 +21,34 @@ export function getPiralComponent<TKey extends keyof ComponentsState>(name: TKey
13
21
  * Gets the currently registered ErrorInfo component.
14
22
  * By default the DefaultErrorInfo component is used.
15
23
  */
16
- export const PiralError: React.ComponentType<ErrorInfoProps> = getPiralComponent('ErrorInfo');
24
+ export const RegisteredErrorInfo = getPiralComponent('ErrorInfo');
17
25
 
18
26
  /**
19
27
  * Gets the currently registered LoadingIndicator component.
20
28
  * By default only Loading is rendered.
21
29
  */
22
- export const PiralLoadingIndicator: React.ComponentType<LoadingIndicatorProps> = getPiralComponent('LoadingIndicator');
30
+ export const RegisteredLoadingIndicator = getPiralComponent('LoadingIndicator');
23
31
 
24
32
  /**
25
33
  * Gets the currently registered Router component.
26
34
  * By default the BrowserRouter is used.
27
35
  */
28
- export const PiralRouter: React.ComponentType<RouterProps> = getPiralComponent('Router');
36
+ export const RegisteredRouter = getPiralComponent('Router');
37
+
38
+ /**
39
+ * Gets the currently registered Route Switch component.
40
+ * By default the DefaultRouteSwitch component is used.
41
+ */
42
+ export const RegisteredRouteSwitch = getPiralComponent('RouteSwitch');
29
43
 
30
44
  /**
31
45
  * Gets the currently registered Layout component.
32
46
  * By default the children are rendered.
33
47
  */
34
- export const PiralLayout: React.ComponentType<LayoutProps> = getPiralComponent('Layout');
48
+ export const RegisteredLayout = getPiralComponent('Layout');
35
49
 
36
50
  /**
37
51
  * Gets the currently registered Debug component.
38
52
  * By default nothing is used.
39
53
  */
40
- export const PiralDebug: React.ComponentType = getPiralComponent('Debug');
54
+ export const RegisteredDebug = getPiralComponent('Debug');
@@ -1,18 +1,12 @@
1
1
  export * from './components';
2
- export * from './DefaultErrorInfo';
3
- export * from './DefaultLayout';
4
- export * from './DefaultLoader';
5
2
  export * from './ErrorBoundary';
6
3
  export * from './ExtensionSlot';
7
4
  export * from './Mediator';
5
+ export * from './PiralGlobals';
8
6
  export * from './PiralRoutes';
7
+ export * from './PiralSuspense';
9
8
  export * from './PiralView';
9
+ export * from './PortalRenderer';
10
10
  export * from './ResponsiveLayout';
11
- export * from './SetComponent';
12
- export * from './SetError';
13
- export * from './SetErrors';
14
- export * from './SetLayout';
15
- export * from './SetProvider';
16
- export * from './SetRedirect';
17
- export * from './SetRoute';
18
11
  export * from './SwitchErrorInfo';
12
+ export * from './wrapComponent';
@@ -0,0 +1,74 @@
1
+ import * as React from 'react';
2
+ import { PortalRenderer } from './PortalRenderer';
3
+ import { ForeignComponentContainer } from './ForeignComponentContainer';
4
+ import { useGlobalStateContext } from '../hooks';
5
+ import { convertComponent, none } from '../utils';
6
+ import { publicPath } from '../../app.codegen';
7
+ import type { AnyComponent, ComponentConverters, ForeignComponent, PiletApi, BaseComponentProps } from '../types';
8
+
9
+ // this is an arbitrary start number to have 6 digits
10
+ let portalIdBase = 123456;
11
+
12
+ interface CapturedProps {
13
+ piral: PiletApi;
14
+ }
15
+
16
+ function wrapReactComponent<T>(
17
+ Component: React.ComponentType<T & BaseComponentProps>,
18
+ captured: CapturedProps,
19
+ Wrapper: React.FC<T>,
20
+ ): React.ComponentType<T> {
21
+ return (props: T) => (
22
+ <Wrapper {...props}>
23
+ <Component {...props} {...captured} />
24
+ </Wrapper>
25
+ );
26
+ }
27
+
28
+ function wrapForeignComponent<T>(
29
+ component: ForeignComponent<T & BaseComponentProps>,
30
+ captured: CapturedProps,
31
+ Wrapper: React.FC<T>,
32
+ ) {
33
+ return React.memo((props: T) => {
34
+ const { destroyPortal, navigation } = useGlobalStateContext();
35
+ const id = React.useMemo(() => (portalIdBase++).toString(26), none);
36
+ // router added for backwards compatibility
37
+ const context = React.useMemo(() => ({ publicPath, navigation, router: navigation.router }), []);
38
+ const innerProps = React.useMemo(() => ({ ...props, ...captured }), [props]);
39
+
40
+ React.useEffect(() => () => destroyPortal(id), none);
41
+
42
+ return (
43
+ <Wrapper {...props}>
44
+ <PortalRenderer id={id} />
45
+ <ForeignComponentContainer innerProps={innerProps} $portalId={id} $component={component} $context={context} />
46
+ </Wrapper>
47
+ );
48
+ });
49
+ }
50
+
51
+ function isNotExotic(component: any): component is object {
52
+ return !(component as React.ExoticComponent).$$typeof;
53
+ }
54
+
55
+ export function wrapComponent<T>(
56
+ converters: ComponentConverters<T & BaseComponentProps>,
57
+ component: AnyComponent<T & BaseComponentProps>,
58
+ captured: CapturedProps,
59
+ Wrapper: React.FC<T>,
60
+ ) {
61
+ if (!component) {
62
+ const pilet = captured.piral.meta.name;
63
+ console.error(`[${pilet}] The given value is not a valid component.`);
64
+ // tslint:disable-next-line:no-null-keyword
65
+ component = () => null;
66
+ }
67
+
68
+ if (typeof component === 'object' && isNotExotic(component)) {
69
+ const result = convertComponent(converters[component.type], component);
70
+ return wrapForeignComponent<T>(result, captured, Wrapper);
71
+ }
72
+
73
+ return wrapReactComponent<T>(component, captured, Wrapper);
74
+ }
@@ -11,4 +11,14 @@ describe('Piral-Core createInstance module', () => {
11
11
  const instance = createInstance({ async: true });
12
12
  expect(instance.options.strategy).toBe(blazingStrategy);
13
13
  });
14
+
15
+ it('createInstance with empty actions and plugins uses the standard strategy', () => {
16
+ const instance = createInstance({ plugins: {}, actions: {} });
17
+ expect(instance.options.strategy).toBe(standardStrategy);
18
+ })
19
+
20
+ it('createInstance with async function uses the blazing strategy', () => {
21
+ const instance = createInstance({ async: () => { } });
22
+ expect(instance.options.strategy).not.toBe(blazingStrategy);
23
+ })
14
24
  });
@@ -1,10 +1,10 @@
1
1
  import { __assign } from 'tslib';
2
- import { blazingStrategy, standardStrategy, isfunc } from 'piral-base';
3
- import { getLocalDependencies, defaultApiFactory, defaultModuleRequester } from './modules';
2
+ import { blazingStrategy, standardStrategy, createListener, isfunc } from 'piral-base';
3
+ import { defaultApiFactory, defaultDependencySelector, defaultModuleRequester } from './modules';
4
4
  import { createGlobalState, createActions, includeActions } from './state';
5
5
  import { createPiletOptions } from './helpers';
6
- import { createListener } from './utils';
7
- import type { PiralConfiguration, PiralInstance } from './types';
6
+ import { generateId } from './utils';
7
+ import type { PiralInstanceOptions, PiralInstance } from './types';
8
8
 
9
9
  /**
10
10
  * Creates a new PiralInstance component, which can be used for
@@ -26,32 +26,36 @@ const app = (
26
26
  render(app, document.querySelector('#app'));
27
27
  ```
28
28
  */
29
- export function createInstance(config: PiralConfiguration = {}): PiralInstance {
29
+ export function createInstance(config: PiralInstanceOptions = {}): PiralInstance {
30
30
  const {
31
+ id = generateId(),
31
32
  state,
32
33
  actions,
33
34
  availablePilets = [],
34
- extendApi,
35
35
  plugins,
36
36
  requestPilets = defaultModuleRequester,
37
- fetchDependency,
38
- getDependencies = getLocalDependencies,
39
37
  loaderConfig,
40
38
  async = false,
39
+ shareDependencies = defaultDependencySelector,
41
40
  loadPilet,
42
41
  loaders,
42
+ debug,
43
43
  apiFactory = defaultApiFactory,
44
44
  } = config;
45
45
  const globalState = createGlobalState(state);
46
46
  const events = createListener(globalState);
47
47
  const context = createActions(globalState, events);
48
- const definedPlugins = plugins || extendApi || [];
48
+ const definedPlugins = plugins || [];
49
49
  const usedPlugins = Array.isArray(definedPlugins) ? definedPlugins : [definedPlugins];
50
50
  const createApi = apiFactory(context, usedPlugins);
51
51
  const root = createApi({
52
- name: 'root',
53
- version: process.env.BUILD_PCKG_VERSION || '1.0.0',
54
- spec: '',
52
+ name: '_',
53
+ version: '0',
54
+ spec: 'v0',
55
+ basePath: '',
56
+ link: '',
57
+ config: {},
58
+ dependencies: {},
55
59
  });
56
60
  const options = createPiletOptions({
57
61
  context,
@@ -59,11 +63,11 @@ export function createInstance(config: PiralConfiguration = {}): PiralInstance {
59
63
  loaders,
60
64
  loadPilet,
61
65
  availablePilets,
62
- fetchDependency,
63
66
  loaderConfig,
64
- getDependencies,
67
+ shareDependencies,
65
68
  strategy: isfunc(async) ? async : async ? blazingStrategy : standardStrategy,
66
69
  requestPilets,
70
+ debug,
67
71
  });
68
72
 
69
73
  if (actions) {
@@ -73,6 +77,7 @@ export function createInstance(config: PiralConfiguration = {}): PiralInstance {
73
77
  context.options = options;
74
78
 
75
79
  return __assign(events, {
80
+ id,
76
81
  createApi,
77
82
  context,
78
83
  root,