piral-core 1.0.0-pre.2217 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -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 -68
  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 +37 -10
  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 -74
  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 +37 -10
  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 +55 -18
  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 -65
  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 +50 -11
  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,20 +1,6 @@
1
+ import type { PiletApiExtender } from 'piral-base';
1
2
  import type { PiletApi } from './api';
2
3
  import type { GlobalStateContext } from './state';
3
- import type { PiletMetadata } from '../types';
4
-
5
- /**
6
- * Shape to be used by a Pilet API extension that requires other
7
- * APIs or some metadata to work properly.
8
- */
9
- export interface PiletApiExtender<T> {
10
- /**
11
- * Extends the base API of a module with new functionality.
12
- * @param api The API created by the base layer.
13
- * @param target The target the API is created for.
14
- * @returns The extended API.
15
- */
16
- (api: PiletApi, target: PiletMetadata): T;
17
- }
18
4
 
19
5
  /**
20
6
  * Shape to be used by a plugin used in the Piral instance.
@@ -1,9 +1,9 @@
1
- import type { ComponentType, ReactPortal } from 'react';
1
+ import type { ComponentType, ReactPortal, PropsWithChildren } from 'react';
2
2
  import type { RouteComponentProps } from 'react-router';
3
- import type { Atom } from '@dbeining/react-atom';
4
3
  import type { LoadPiletsOptions } from 'piral-base';
4
+ import type { UseBoundStore } from 'zustand';
5
5
  import type { Dict, Without } from './common';
6
- import type { LayoutType } from './layout';
6
+ import type { NavigationApi } from './navigation';
7
7
  import type { SharedDataItem, DataStoreTarget } from './data';
8
8
  import type {
9
9
  PiralCustomActions,
@@ -12,7 +12,6 @@ import type {
12
12
  PiralCustomComponentsState,
13
13
  } from './custom';
14
14
  import type {
15
- PiletMetadata,
16
15
  EventEmitter,
17
16
  Pilet,
18
17
  BaseComponentProps,
@@ -20,6 +19,7 @@ import type {
20
19
  ExtensionComponentProps,
21
20
  PiletsBag,
22
21
  PiralPageMeta,
22
+ PiletEntry,
23
23
  } from './api';
24
24
  import type {
25
25
  ComponentConverters,
@@ -28,24 +28,22 @@ import type {
28
28
  RouterProps,
29
29
  LayoutProps,
30
30
  Errors,
31
+ RouteSwitchProps,
31
32
  } from './components';
32
33
 
33
34
  export interface StateDispatcher<TState> {
34
35
  (state: TState): Partial<TState>;
35
36
  }
36
37
 
37
- declare module './components' {
38
- interface ComponentContext {
39
- state: Atom<GlobalState>;
40
- }
41
- }
42
-
43
- export type WrappedComponent<TProps> = ComponentType<Without<TProps, keyof BaseComponentProps>>;
38
+ export type WrappedComponent<TProps> = ComponentType<PropsWithChildren<Without<TProps, keyof BaseComponentProps>>>;
44
39
 
45
40
  /**
46
41
  * The base type for pilet component registration in the global state context.
47
42
  */
48
43
  export interface BaseRegistration {
44
+ /**
45
+ * The pilet registering the component.
46
+ */
49
47
  pilet: string;
50
48
  }
51
49
 
@@ -53,7 +51,13 @@ export interface BaseRegistration {
53
51
  * The interface modeling the registration of a pilet page component.
54
52
  */
55
53
  export interface PageRegistration extends BaseRegistration {
54
+ /**
55
+ * The registered page component.
56
+ */
56
57
  component: WrappedComponent<PageComponentProps>;
58
+ /**
59
+ * The page's associated metadata.
60
+ */
57
61
  meta: PiralPageMeta;
58
62
  }
59
63
 
@@ -61,8 +65,17 @@ export interface PageRegistration extends BaseRegistration {
61
65
  * The interface modeling the registration of a pilet extension component.
62
66
  */
63
67
  export interface ExtensionRegistration extends BaseRegistration {
68
+ /**
69
+ * The wrapped registered extension component.
70
+ */
64
71
  component: WrappedComponent<ExtensionComponentProps<string>>;
72
+ /**
73
+ * The original extension component that has been registered.
74
+ */
65
75
  reference: any;
76
+ /**
77
+ * The default params (i.e., meta) of the extension.
78
+ */
66
79
  defaults: any;
67
80
  }
68
81
 
@@ -86,6 +99,10 @@ export interface ComponentsState extends PiralCustomComponentsState {
86
99
  * The layout used for pages.
87
100
  */
88
101
  Layout: ComponentType<LayoutProps>;
102
+ /**
103
+ * The route switch used for determining the route registration.
104
+ */
105
+ RouteSwitch: ComponentType<RouteSwitchProps>;
89
106
  /**
90
107
  * A component that can be used for debugging purposes.
91
108
  */
@@ -96,10 +113,6 @@ export interface ComponentsState extends PiralCustomComponentsState {
96
113
  * The Piral global app sub-state container for app information.
97
114
  */
98
115
  export interface AppState {
99
- /**
100
- * Information for the layout computation.
101
- */
102
- layout: LayoutType;
103
116
  /**
104
117
  * Gets if the application is currently performing a background loading
105
118
  * activity, e.g., for loading modules asynchronously or fetching
@@ -157,7 +170,7 @@ export interface GlobalState extends PiralCustomState {
157
170
  /**
158
171
  * Gets the loaded modules.
159
172
  */
160
- modules: Array<PiletMetadata>;
173
+ modules: Array<Pilet>;
161
174
  /**
162
175
  * The foreign component portals to render.
163
176
  */
@@ -200,10 +213,22 @@ export interface PiralActions extends PiralCustomActions {
200
213
  */
201
214
  initialize(loading: boolean, error: Error | undefined, modules: Array<Pilet>): void;
202
215
  /**
203
- * Injects a pilet at runtime - removes the pilet from registry first if available.
216
+ * Injects an evaluated pilet at runtime - removes the pilet from registry first if available.
204
217
  * @param pilet The pilet to be injected.
218
+ * @returns The injected pilet.
219
+ */
220
+ injectPilet(pilet: Pilet): Pilet;
221
+ /**
222
+ * Adds a pilet at runtime by loading it, evaluating it, and then injecting it.
223
+ * @param pilet The pilet to be added.
224
+ * @returns The promise indicating when the pilet was fully added.
205
225
  */
206
- injectPilet(pilet: Pilet): void;
226
+ addPilet(pilet: PiletEntry): Promise<void>;
227
+ /**
228
+ * Removes a pilet by unloading it and deleting all component registrations.
229
+ * @param name The name of the pilet to remove.
230
+ */
231
+ removePilet(name: string): Promise<void>;
207
232
  /**
208
233
  * Defines a single action for Piral.
209
234
  * @param actionName The name of the action to define.
@@ -232,11 +257,6 @@ export interface PiralActions extends PiralCustomActions {
232
257
  * @param expiration The time for when to dispose the shared item.
233
258
  */
234
259
  tryWriteDataItem(name: string, value: any, owner: string, target: DataStoreTarget, expiration: number): boolean;
235
- /**
236
- * Performs a layout change.
237
- * @param current The layout to take.
238
- */
239
- changeLayout(current: LayoutType): void;
240
260
  /**
241
261
  * Registers a new route to be resolved.
242
262
  * @param route The route to register.
@@ -277,7 +297,10 @@ export interface PiralActions extends PiralCustomActions {
277
297
  * @param path The name of the component.
278
298
  * @param component The component to use for rendering.
279
299
  */
280
- setRoute<T = {}>(path: string, component: ComponentType<RouteComponentProps<T>>): void;
300
+ setRoute<T extends { [K in keyof T]?: string } = {}>(
301
+ path: string,
302
+ component: ComponentType<RouteComponentProps<T>>,
303
+ ): void;
281
304
  /**
282
305
  * Includes a new provider as a sub-provider to the current provider.
283
306
  * @param provider The provider to include.
@@ -294,6 +317,19 @@ export interface PiralActions extends PiralCustomActions {
294
317
  * @param entry The child to render.
295
318
  */
296
319
  showPortal(id: string, entry: ReactPortal): void;
320
+ /**
321
+ * Hides the provided portal in the rendering pipeline.
322
+ * @param id The id of the portal to use.
323
+ * @param entry The child to remove.
324
+ */
325
+ hidePortal(id: string, entry: ReactPortal): void;
326
+ /**
327
+ * Updates the provided portal in the rendering pipeline.
328
+ * @param id The id of the portal to use.
329
+ * @param current The currently displayed child.
330
+ * @param next The updated child that should be displayed.
331
+ */
332
+ updatePortal(id: string, current: ReactPortal, next: ReactPortal): void;
297
333
  /**
298
334
  * Dispatches a state change.
299
335
  * @param update The update function creating a new state.
@@ -315,7 +351,7 @@ export interface GlobalStateContext extends PiralActions, EventEmitter {
315
351
  * The global state context atom.
316
352
  * Changes to the state should always be dispatched via the `dispatch` action.
317
353
  */
318
- state: Atom<GlobalState>;
354
+ state: UseBoundStore<GlobalState>;
319
355
  /**
320
356
  * The API objects created for the loaded pilets.
321
357
  */
@@ -324,6 +360,10 @@ export interface GlobalStateContext extends PiralActions, EventEmitter {
324
360
  * The available component converters.
325
361
  */
326
362
  converters: ComponentConverters<any>;
363
+ /**
364
+ * The navigation manager for the whole instance.
365
+ */
366
+ navigation: NavigationApi;
327
367
  /**
328
368
  * The initial options.
329
369
  */
@@ -60,7 +60,7 @@ export interface PiralStoreDataEvent<TValue = any> {
60
60
  expires: number;
61
61
  }
62
62
 
63
- declare module 'piral-base/lib/types' {
63
+ declare module 'piral-base/lib/types/api' {
64
64
  interface PiralEventMap extends PiralCustomEventMap {
65
65
  'store-data': PiralStoreDataEvent;
66
66
  }
@@ -1,73 +1,73 @@
1
- import { compare } from './compare';
1
+ import { isSame } from './compare';
2
2
 
3
3
  describe('Compare Module', () => {
4
4
  it('compare works with numbers that are not equal', () => {
5
- const result = compare(5, 2);
5
+ const result = isSame(5, 2);
6
6
  expect(result).toEqual(false);
7
7
  });
8
8
 
9
9
  it('compare works with numbers that are equal', () => {
10
- const result = compare(7, 7);
10
+ const result = isSame(7, 7);
11
11
  expect(result).toEqual(true);
12
12
  });
13
13
 
14
14
  it('compare works with booleans that are not equal', () => {
15
- const result = compare(true, false);
15
+ const result = isSame(true, false);
16
16
  expect(result).toEqual(false);
17
17
  });
18
18
 
19
19
  it('compare works with booleans that are equal', () => {
20
- const result = compare(false, false);
20
+ const result = isSame(false, false);
21
21
  expect(result).toEqual(true);
22
22
  });
23
23
 
24
24
  it('compare works with strings that are not equal', () => {
25
- const result = compare('foo', 'bar');
25
+ const result = isSame('foo', 'bar');
26
26
  expect(result).toEqual(false);
27
27
  });
28
28
 
29
29
  it('compare works with strings that are equal', () => {
30
- const result = compare('gtest', 'gtest');
30
+ const result = isSame('gtest', 'gtest');
31
31
  expect(result).toEqual(true);
32
32
  });
33
33
 
34
34
  it('compare works with types that are not equal', () => {
35
- const result = compare('5', 5 as any);
35
+ const result = isSame('5', 5 as any);
36
36
  expect(result).toEqual(false);
37
37
  });
38
38
 
39
39
  it('compare works with arrays of simple types that are not equal', () => {
40
- const result = compare([1, 2, 3], [1, 2, 4]);
40
+ const result = isSame([1, 2, 3], [1, 2, 4]);
41
41
  expect(result).toEqual(false);
42
42
  });
43
43
 
44
44
  it('compare works with arrays of simple types that have different lengths', () => {
45
- const result = compare([1, 2, 3], [1, 2]);
45
+ const result = isSame([1, 2, 3], [1, 2]);
46
46
  expect(result).toEqual(false);
47
47
  });
48
48
 
49
49
  it('compare works with arrays of simple types that are equal', () => {
50
- const result = compare([1, 2, 3], [1, 2, 3]);
50
+ const result = isSame([1, 2, 3], [1, 2, 3]);
51
51
  expect(result).toEqual(true);
52
52
  });
53
53
 
54
54
  it('compare works with objects of simple types that are not equal', () => {
55
- const result = compare({ a: 2, b: true, c: 'hi' }, { a: 2, b: false, c: 'hi' });
55
+ const result = isSame({ a: 2, b: true, c: 'hi' }, { a: 2, b: false, c: 'hi' });
56
56
  expect(result).toEqual(false);
57
57
  });
58
58
 
59
59
  it('compare works with objects of simple types that have different keys', () => {
60
- const result = compare({ a: 2, b: true, c: 'hi' }, { a: 2, b: true, d: 'hi' });
60
+ const result = isSame({ a: 2, b: true, c: 'hi' }, { a: 2, b: true, d: 'hi' });
61
61
  expect(result).toEqual(false);
62
62
  });
63
63
 
64
64
  it('compare works with objects of simple types that have less keys', () => {
65
- const result = compare({ a: 2, b: true, c: 'hi' }, { a: 2, b: true });
65
+ const result = isSame({ a: 2, b: true, c: 'hi' }, { a: 2, b: true });
66
66
  expect(result).toEqual(false);
67
67
  });
68
68
 
69
69
  it('compare works with objects of simple types that are equal', () => {
70
- const result = compare({ a: 2, b: true, c: 'hi' }, { a: 2, b: true, c: 'hi' });
70
+ const result = isSame({ a: 2, b: true, c: 'hi' }, { a: 2, b: true, c: 'hi' });
71
71
  expect(result).toEqual(true);
72
72
  });
73
73
  });
@@ -6,7 +6,7 @@ function compareObjects(a: any, b: any) {
6
6
  }
7
7
 
8
8
  for (const i in b) {
9
- if (!compare(a[i], b[i])) {
9
+ if (!isSame(a[i], b[i])) {
10
10
  return false;
11
11
  }
12
12
  }
@@ -14,13 +14,33 @@ function compareObjects(a: any, b: any) {
14
14
  return true;
15
15
  }
16
16
 
17
- export function compare<T>(a: T, b: T) {
17
+ function compareArrays(a: Array<any>, b: Array<any>) {
18
+ const l = a.length;
19
+
20
+ if (l === b.length) {
21
+ for (let i = 0; i < l; i++) {
22
+ if (!isSame(a[i], b[i])) {
23
+ return false;
24
+ }
25
+ }
26
+
27
+ return true;
28
+ }
29
+
30
+ return false;
31
+ }
32
+
33
+ export function isSame<T>(a: T, b: T) {
18
34
  if (a !== b) {
19
35
  const ta = typeof a;
20
36
  const tb = typeof b;
21
37
 
22
38
  if (ta === tb && ta === 'object' && a && b) {
23
- return compareObjects(a, b);
39
+ if (Array.isArray(a) && Array.isArray(b)) {
40
+ return compareArrays(a, b);
41
+ } else {
42
+ return compareObjects(a, b);
43
+ }
24
44
  }
25
45
 
26
46
  return false;
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { reactifyContent, toExtension } from './extension';
4
+
5
+ describe('Util Extension.', () => {
6
+ it('Convert some component to an extension component.', () => {
7
+ const Component = ({ title }) => <b>{title}</b>;
8
+ const piral: any = {};
9
+ const Extension = toExtension(Component);
10
+ const node = render(<Extension piral={piral} params={{ title: 'Foo' }} />);
11
+ expect(node.container.querySelectorAll('b').length).toBe(1);
12
+ });
13
+
14
+ it('reactifyContent.', async () => {
15
+ const container = document.body.appendChild(document.createElement('div'));
16
+ container.innerHTML = `<div>FOO<</div>`;
17
+ const result = reactifyContent(container.childNodes) as React.ReactElement;
18
+ const node = render(result);
19
+ expect(node.container.querySelectorAll('piral-slot').length).toBe(1);
20
+ });
21
+ });
@@ -0,0 +1,48 @@
1
+ import * as React from 'react';
2
+ import type {} from 'piral-debug-utils';
3
+ import type { ExtensionComponentProps, WrappedComponent } from '../types';
4
+
5
+ function removeAll(nodes: Array<ChildNode>) {
6
+ nodes.forEach((node) => node.remove());
7
+ }
8
+
9
+ interface SlotCarrierProps {
10
+ nodes: Array<ChildNode>;
11
+ }
12
+
13
+ const SlotCarrier: React.FC<SlotCarrierProps> = ({ nodes }) => {
14
+ const host = React.useRef<HTMLSlotElement>();
15
+
16
+ React.useEffect(() => {
17
+ host.current?.append(...nodes);
18
+ return () => removeAll(nodes);
19
+ }, [nodes]);
20
+
21
+ if (nodes.length) {
22
+ return <piral-slot ref={host} />;
23
+ }
24
+
25
+ return null;
26
+ };
27
+
28
+ /**
29
+ * Transforms the given component to an extension component.
30
+ * @param Component The component to transform.
31
+ * @returns The extension component (receiving its props via params).
32
+ */
33
+ export function toExtension<T>(Component: React.ComponentType<T>): WrappedComponent<ExtensionComponentProps<T>> {
34
+ return (props) => <Component {...props.params} />;
35
+ }
36
+
37
+ /**
38
+ * Reactifies the list of child nodes to a React Node by removing the
39
+ * nodes from the DOM and carrying it in a React Node, where it would be
40
+ * attached at a slot.
41
+ * @param childNodes The child nodes to reactify.
42
+ * @returns The React Node.
43
+ */
44
+ export function reactifyContent(childNodes: NodeListOf<ChildNode>): React.ReactNode {
45
+ const nodes: Array<ChildNode> = Array.prototype.filter.call(childNodes, Boolean);
46
+ removeAll(nodes);
47
+ return <SlotCarrier nodes={nodes} />;
48
+ }
@@ -1,12 +1,30 @@
1
- import { createElement, createRef } from 'react';
2
- import { convertComponent, renderInDom } from './foreign';
1
+ import * as React from 'react';
2
+ import { changeDomPortal, convertComponent, renderInDom } from './foreign';
3
+ import { DefaultLoadingIndicator } from '../defaults/DefaultLoadingIndicator';
3
4
  import { ForeignComponent } from '../types';
4
- import { DefaultLoadingIndicator } from '../components/DefaultLoader';
5
+
6
+ // const StubComponent: React.FC = (props) => <div />;
7
+ // StubComponent.displayName = 'StubComponent';
5
8
 
6
9
  describe('Util Foreign.', () => {
10
+ it('changeDomPortal changes dom in portal', () => {
11
+ const children = React.createElement('div');
12
+ const current: React.ReactPortal = { key: 'current', children: { children }, type: 'div', props: null };
13
+
14
+ const context = {
15
+ updatePortal: jest.fn(),
16
+ } as any;
17
+ const portalId = 'pid';
18
+ const element = document.createElement('piral-portal') as HTMLElement;
19
+ element.setAttribute(portalId, '100');
20
+
21
+ const result = changeDomPortal(portalId, current, context, element, DefaultLoadingIndicator, {});
22
+ expect(result).not.toEqual({});
23
+ });
24
+
7
25
  it('Convert component function throws error due to missing converter function.', () => {
8
26
  const t = () => {
9
- convertComponent(null, createElement('div'));
27
+ convertComponent(null, React.createElement('div'));
10
28
  };
11
29
  expect(t).toThrow('No converter for component of type "div" registered.');
12
30
  });
@@ -17,7 +35,7 @@ describe('Util Foreign.', () => {
17
35
  };
18
36
  const result = convertComponent(() => {
19
37
  return fComponent;
20
- }, createElement('div'));
38
+ }, React.createElement('div'));
21
39
  expect(result).toEqual(fComponent);
22
40
  });
23
41
 
@@ -25,10 +43,10 @@ describe('Util Foreign.', () => {
25
43
  const context = {
26
44
  showPortal: jest.fn(),
27
45
  } as any;
28
- const portalId = 'data-portal-id';
29
- const element = document.createElement('div') as HTMLDivElement;
46
+ const portalId = 'pid';
47
+ const element = document.createElement('piral-portal') as HTMLElement;
30
48
  element.setAttribute(portalId, '100');
31
- var result = renderInDom(context, element, DefaultLoadingIndicator, {});
49
+ var [result] = renderInDom(context, element, DefaultLoadingIndicator, {});
32
50
  expect(result).toBe('100');
33
51
  });
34
52
 
@@ -36,8 +54,8 @@ describe('Util Foreign.', () => {
36
54
  const context = {
37
55
  showPortal: jest.fn(),
38
56
  } as any;
39
- const element = document.createElement('div') as HTMLDivElement;
40
- var result = renderInDom(context, element, DefaultLoadingIndicator, {});
41
- expect(result).toBeUndefined();
57
+ const element = document.createElement('piral-portal') as HTMLElement;
58
+ var [result] = renderInDom(context, element, DefaultLoadingIndicator, {});
59
+ expect(result).toBe('root');
42
60
  });
43
61
  });
@@ -1,7 +1,36 @@
1
- import { createElement, ComponentType } from 'react';
1
+ import { createElement, ComponentType, ReactPortal } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
3
  import { GlobalStateContext, ForeignComponent } from '../types';
4
4
 
5
+ export const extensionName = 'piral-extension';
6
+ export const portalName = 'piral-portal';
7
+ export const slotName = 'piral-slot';
8
+
9
+ export function attachDomPortal<TProps>(
10
+ id: string,
11
+ context: GlobalStateContext,
12
+ element: HTMLElement | ShadowRoot,
13
+ component: ComponentType<TProps>,
14
+ props: TProps,
15
+ ): [string, ReactPortal] {
16
+ const portal = createPortal(createElement(component, props), element as HTMLElement);
17
+ context.showPortal(id, portal);
18
+ return [id, portal];
19
+ }
20
+
21
+ export function changeDomPortal<TProps>(
22
+ id: string,
23
+ current: ReactPortal,
24
+ context: GlobalStateContext,
25
+ element: HTMLElement | ShadowRoot,
26
+ component: ComponentType<TProps>,
27
+ props: TProps,
28
+ ): [string, ReactPortal] {
29
+ const next = createPortal(createElement(component, props), element as HTMLElement);
30
+ context.updatePortal(id, current, next);
31
+ return [id, next];
32
+ }
33
+
5
34
  export function convertComponent<T extends { type: string }, U>(
6
35
  converter: (component: T) => ForeignComponent<U>,
7
36
  component: T,
@@ -19,19 +48,17 @@ export function renderInDom<TProps>(
19
48
  component: ComponentType<TProps>,
20
49
  props: TProps,
21
50
  ) {
22
- const portalId = 'data-portal-id';
51
+ const portalId = 'pid';
23
52
  let parent: Node = element;
24
53
 
25
54
  while (parent) {
26
- if (parent instanceof Element && parent.hasAttribute(portalId)) {
27
- const portal = createPortal(createElement(component, props), element as HTMLElement);
55
+ if (parent instanceof Element && parent.localName === portalName && parent.hasAttribute(portalId)) {
28
56
  const id = parent.getAttribute(portalId);
29
- context.showPortal(id, portal);
30
- return id;
57
+ return attachDomPortal(id, context, element, component, props);
31
58
  }
32
59
 
33
60
  parent = parent.parentNode || (parent as ShadowRoot).host;
34
61
  }
35
62
 
36
- return undefined;
63
+ return attachDomPortal('root', context, element, component, props);
37
64
  }
@@ -1,6 +1,11 @@
1
- import { generateId } from './guid';
1
+ import { buildName, generateId } from './guid';
2
2
 
3
3
  describe('Guid Utility Module', () => {
4
+ it('buildName returns name with its prefix', () => {
5
+ const result = buildName('Ma', 'Majd');
6
+ expect(result).toEqual('Ma://Majd');
7
+ });
8
+
4
9
  it('Generates two consecutive different guids', () => {
5
10
  const guid1 = generateId();
6
11
  const guid2 = generateId();
@@ -8,9 +8,61 @@ import {
8
8
  prependItems,
9
9
  appendItems,
10
10
  updateKey,
11
+ replaceOrAddItem,
12
+ includeItem,
13
+ tryParseJson,
14
+ removeNested,
11
15
  } from './helpers';
12
16
 
13
17
  describe('Helpers Module', () => {
18
+ it('removeNested removes keys values', () => {
19
+ const obj = { d: 'test', z: ['test arr'] };
20
+ const result = removeNested(obj, () => true);
21
+ const expectedResult = { d: {}, z: {} };
22
+ expect(result).toEqual(expectedResult);
23
+ });
24
+
25
+ it('removeNested removes keys values with nested arrays', () => {
26
+ const obj = { z: [['test arr'], ['test arr2']] };
27
+ const result = removeNested(obj, () => true);
28
+ const expectedResult = { z: { '0': [], '1': [] } };
29
+ expect(result).toEqual(expectedResult);
30
+ });
31
+
32
+ it('removeNested splits keys values', () => {
33
+ const obj = { d: 'test', z: ['test arr'] };
34
+ const result = removeNested(obj, () => false);
35
+ const expectedResult = { d: { '0': 't', '1': 'e', '2': 's', '3': 't' }, z: { '0': 'test arr' } };
36
+ expect(result).toEqual(expectedResult);
37
+ });
38
+
39
+ it('tryParseJson parses a JSON string', () => {
40
+ const content = '{"result":true, "count":42}';
41
+ const result = tryParseJson(content);
42
+ expect(result).toEqual({ result: true, count: 42 });
43
+ });
44
+
45
+ it('tryParseJson return empty object if the content is not valid', () => {
46
+ const content = '"result":true, "count":42';
47
+ const result = tryParseJson(content);
48
+ expect(result).toEqual({});
49
+ });
50
+
51
+ it('includeItem adds an item to array', () => {
52
+ const result = includeItem([1, 2, 3], 4);
53
+ expect(result).toEqual([1, 2, 3, 4]);
54
+ });
55
+
56
+ it('replaceOrAddItem replaces the first item', () => {
57
+ const result = replaceOrAddItem([1, 2, 3], 4, () => true);
58
+ expect(result).toEqual([4, 2, 3]);
59
+ });
60
+
61
+ it('replaceOrAddItem adds the item the end', () => {
62
+ const result = replaceOrAddItem([1, 2, 3], 4, () => false);
63
+ expect(result).toEqual([1, 2, 3, 4]);
64
+ });
65
+
14
66
  it('prependItem works with an existing array', () => {
15
67
  const result = prependItem([1, 2, 3], 4);
16
68
  expect(result).toEqual([4, 1, 2, 3]);