@pilotiq/pilotiq 0.7.2 → 0.8.1

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 (371) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/CHANGELOG.md +208 -0
  3. package/CLAUDE.md +59 -3
  4. package/dist/Pilotiq.d.ts +83 -0
  5. package/dist/Pilotiq.d.ts.map +1 -1
  6. package/dist/Pilotiq.js +39 -0
  7. package/dist/Pilotiq.js.map +1 -1
  8. package/dist/actions/Action.d.ts +27 -99
  9. package/dist/actions/Action.d.ts.map +1 -1
  10. package/dist/actions/Action.js +52 -754
  11. package/dist/actions/Action.js.map +1 -1
  12. package/dist/actions/bulkFactories.d.ts +46 -0
  13. package/dist/actions/bulkFactories.d.ts.map +1 -0
  14. package/dist/actions/bulkFactories.js +144 -0
  15. package/dist/actions/bulkFactories.js.map +1 -0
  16. package/dist/actions/crudFactories.d.ts +94 -0
  17. package/dist/actions/crudFactories.d.ts.map +1 -0
  18. package/dist/actions/crudFactories.js +209 -0
  19. package/dist/actions/crudFactories.js.map +1 -0
  20. package/dist/actions/factoryHelpers.d.ts +108 -0
  21. package/dist/actions/factoryHelpers.d.ts.map +1 -0
  22. package/dist/actions/factoryHelpers.js +138 -0
  23. package/dist/actions/factoryHelpers.js.map +1 -0
  24. package/dist/actions/m2mFactories.d.ts +47 -0
  25. package/dist/actions/m2mFactories.d.ts.map +1 -0
  26. package/dist/actions/m2mFactories.js +173 -0
  27. package/dist/actions/m2mFactories.js.map +1 -0
  28. package/dist/actions/relationFactories.d.ts +93 -0
  29. package/dist/actions/relationFactories.d.ts.map +1 -0
  30. package/dist/actions/relationFactories.js +321 -0
  31. package/dist/actions/relationFactories.js.map +1 -0
  32. package/dist/elements/dispatchForm.js +1 -1
  33. package/dist/elements/dispatchForm.js.map +1 -1
  34. package/dist/elements/dispatchTable.js +1 -1
  35. package/dist/elements/dispatchTable.js.map +1 -1
  36. package/dist/fields/Field.d.ts +31 -0
  37. package/dist/fields/Field.d.ts.map +1 -1
  38. package/dist/fields/Field.js +25 -0
  39. package/dist/fields/Field.js.map +1 -1
  40. package/dist/pageData/breadcrumbs.d.ts +42 -0
  41. package/dist/pageData/breadcrumbs.d.ts.map +1 -0
  42. package/dist/pageData/breadcrumbs.js +172 -0
  43. package/dist/pageData/breadcrumbs.js.map +1 -0
  44. package/dist/pageData/forms.d.ts +137 -0
  45. package/dist/pageData/forms.d.ts.map +1 -0
  46. package/dist/pageData/forms.js +427 -0
  47. package/dist/pageData/forms.js.map +1 -0
  48. package/dist/pageData/helpers.d.ts +239 -0
  49. package/dist/pageData/helpers.d.ts.map +1 -0
  50. package/dist/pageData/helpers.js +703 -0
  51. package/dist/pageData/helpers.js.map +1 -0
  52. package/dist/pageData/misc.d.ts +76 -0
  53. package/dist/pageData/misc.d.ts.map +1 -0
  54. package/dist/pageData/misc.js +263 -0
  55. package/dist/pageData/misc.js.map +1 -0
  56. package/dist/pageData/navigation.d.ts +292 -0
  57. package/dist/pageData/navigation.d.ts.map +1 -0
  58. package/dist/pageData/navigation.js +591 -0
  59. package/dist/pageData/navigation.js.map +1 -0
  60. package/dist/pageData/relationPages.d.ts +172 -0
  61. package/dist/pageData/relationPages.d.ts.map +1 -0
  62. package/dist/pageData/relationPages.js +867 -0
  63. package/dist/pageData/relationPages.js.map +1 -0
  64. package/dist/pageData/relationTabs.d.ts +65 -0
  65. package/dist/pageData/relationTabs.d.ts.map +1 -0
  66. package/dist/pageData/relationTabs.js +258 -0
  67. package/dist/pageData/relationTabs.js.map +1 -0
  68. package/dist/pageData/resourcePages.d.ts +48 -0
  69. package/dist/pageData/resourcePages.d.ts.map +1 -0
  70. package/dist/pageData/resourcePages.js +504 -0
  71. package/dist/pageData/resourcePages.js.map +1 -0
  72. package/dist/pageData.d.ts +12 -792
  73. package/dist/pageData.d.ts.map +1 -1
  74. package/dist/pageData.js +24 -3797
  75. package/dist/pageData.js.map +1 -1
  76. package/dist/react/AppShell.d.ts +8 -0
  77. package/dist/react/AppShell.d.ts.map +1 -1
  78. package/dist/react/AppShell.js +11 -1
  79. package/dist/react/AppShell.js.map +1 -1
  80. package/dist/react/CollabExtensionFactoryRegistry.d.ts +47 -0
  81. package/dist/react/CollabExtensionFactoryRegistry.d.ts.map +1 -0
  82. package/dist/react/CollabExtensionFactoryRegistry.js +14 -0
  83. package/dist/react/CollabExtensionFactoryRegistry.js.map +1 -0
  84. package/dist/react/CollabRoomContext.d.ts +37 -0
  85. package/dist/react/CollabRoomContext.d.ts.map +1 -0
  86. package/dist/react/CollabRoomContext.js +12 -0
  87. package/dist/react/CollabRoomContext.js.map +1 -0
  88. package/dist/react/FormCollabBindingRegistry.d.ts +62 -0
  89. package/dist/react/FormCollabBindingRegistry.d.ts.map +1 -0
  90. package/dist/react/FormCollabBindingRegistry.js +14 -0
  91. package/dist/react/FormCollabBindingRegistry.js.map +1 -0
  92. package/dist/react/FormStateContext.d.ts.map +1 -1
  93. package/dist/react/FormStateContext.js +87 -0
  94. package/dist/react/FormStateContext.js.map +1 -1
  95. package/dist/react/RecordWrapperGate.d.ts +25 -0
  96. package/dist/react/RecordWrapperGate.d.ts.map +1 -0
  97. package/dist/react/RecordWrapperGate.js +30 -0
  98. package/dist/react/RecordWrapperGate.js.map +1 -0
  99. package/dist/react/RecordWrapperRegistry.d.ts +31 -0
  100. package/dist/react/RecordWrapperRegistry.d.ts.map +1 -0
  101. package/dist/react/RecordWrapperRegistry.js +15 -0
  102. package/dist/react/RecordWrapperRegistry.js.map +1 -0
  103. package/dist/react/SchemaRenderer.d.ts +17 -23
  104. package/dist/react/SchemaRenderer.d.ts.map +1 -1
  105. package/dist/react/SchemaRenderer.js +71 -3647
  106. package/dist/react/SchemaRenderer.js.map +1 -1
  107. package/dist/react/component-slots.d.ts +103 -0
  108. package/dist/react/component-slots.d.ts.map +1 -0
  109. package/dist/react/component-slots.js +18 -0
  110. package/dist/react/component-slots.js.map +1 -0
  111. package/dist/react/fields/BuilderInput.d.ts.map +1 -1
  112. package/dist/react/fields/BuilderInput.js +21 -117
  113. package/dist/react/fields/BuilderInput.js.map +1 -1
  114. package/dist/react/fields/MarkdownInput.d.ts.map +1 -1
  115. package/dist/react/fields/MarkdownInput.js +1 -3
  116. package/dist/react/fields/MarkdownInput.js.map +1 -1
  117. package/dist/react/fields/RepeaterInput.d.ts.map +1 -1
  118. package/dist/react/fields/RepeaterInput.js +22 -127
  119. package/dist/react/fields/RepeaterInput.js.map +1 -1
  120. package/dist/react/fields/rowState.d.ts +40 -0
  121. package/dist/react/fields/rowState.d.ts.map +1 -0
  122. package/dist/react/fields/rowState.js +60 -0
  123. package/dist/react/fields/rowState.js.map +1 -0
  124. package/dist/react/fields/useRowReorderDnd.d.ts +28 -0
  125. package/dist/react/fields/useRowReorderDnd.d.ts.map +1 -0
  126. package/dist/react/fields/useRowReorderDnd.js +51 -0
  127. package/dist/react/fields/useRowReorderDnd.js.map +1 -0
  128. package/dist/react/index.d.ts +9 -0
  129. package/dist/react/index.d.ts.map +1 -1
  130. package/dist/react/index.js +8 -0
  131. package/dist/react/index.js.map +1 -1
  132. package/dist/react/layouts/SidebarLayout.d.ts +1 -1
  133. package/dist/react/layouts/SidebarLayout.d.ts.map +1 -1
  134. package/dist/react/layouts/SidebarLayout.js +10 -2
  135. package/dist/react/layouts/SidebarLayout.js.map +1 -1
  136. package/dist/react/layouts/TopbarLayout.d.ts +1 -1
  137. package/dist/react/layouts/TopbarLayout.d.ts.map +1 -1
  138. package/dist/react/layouts/TopbarLayout.js +19 -11
  139. package/dist/react/layouts/TopbarLayout.js.map +1 -1
  140. package/dist/react/parseRecordEditUrl.d.ts +29 -0
  141. package/dist/react/parseRecordEditUrl.d.ts.map +1 -0
  142. package/dist/react/parseRecordEditUrl.js +25 -0
  143. package/dist/react/parseRecordEditUrl.js.map +1 -0
  144. package/dist/react/persistedState.d.ts +19 -0
  145. package/dist/react/persistedState.d.ts.map +1 -0
  146. package/dist/react/persistedState.js +51 -0
  147. package/dist/react/persistedState.js.map +1 -0
  148. package/dist/react/schemaRenderer/AlertRenderer.d.ts +12 -0
  149. package/dist/react/schemaRenderer/AlertRenderer.d.ts.map +1 -0
  150. package/dist/react/schemaRenderer/AlertRenderer.js +61 -0
  151. package/dist/react/schemaRenderer/AlertRenderer.js.map +1 -0
  152. package/dist/react/schemaRenderer/EntryRenderer.d.ts +13 -0
  153. package/dist/react/schemaRenderer/EntryRenderer.d.ts.map +1 -0
  154. package/dist/react/schemaRenderer/EntryRenderer.js +277 -0
  155. package/dist/react/schemaRenderer/EntryRenderer.js.map +1 -0
  156. package/dist/react/schemaRenderer/SectionRenderer.d.ts +16 -0
  157. package/dist/react/schemaRenderer/SectionRenderer.d.ts.map +1 -0
  158. package/dist/react/schemaRenderer/SectionRenderer.js +62 -0
  159. package/dist/react/schemaRenderer/SectionRenderer.js.map +1 -0
  160. package/dist/react/schemaRenderer/SimpleElements.d.ts +25 -0
  161. package/dist/react/schemaRenderer/SimpleElements.d.ts.map +1 -0
  162. package/dist/react/schemaRenderer/SimpleElements.js +147 -0
  163. package/dist/react/schemaRenderer/SimpleElements.js.map +1 -0
  164. package/dist/react/schemaRenderer/TabsRenderer.d.ts +17 -0
  165. package/dist/react/schemaRenderer/TabsRenderer.d.ts.map +1 -0
  166. package/dist/react/schemaRenderer/TabsRenderer.js +31 -0
  167. package/dist/react/schemaRenderer/TabsRenderer.js.map +1 -0
  168. package/dist/react/schemaRenderer/WizardRenderer.d.ts +34 -0
  169. package/dist/react/schemaRenderer/WizardRenderer.d.ts.map +1 -0
  170. package/dist/react/schemaRenderer/WizardRenderer.js +208 -0
  171. package/dist/react/schemaRenderer/WizardRenderer.js.map +1 -0
  172. package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts +21 -0
  173. package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts.map +1 -0
  174. package/dist/react/schemaRenderer/action/ActionGroupTrigger.js +82 -0
  175. package/dist/react/schemaRenderer/action/ActionGroupTrigger.js.map +1 -0
  176. package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts +30 -0
  177. package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts.map +1 -0
  178. package/dist/react/schemaRenderer/action/ActionModalDialog.js +182 -0
  179. package/dist/react/schemaRenderer/action/ActionModalDialog.js.map +1 -0
  180. package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts +17 -0
  181. package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts.map +1 -0
  182. package/dist/react/schemaRenderer/action/ConfirmActionDialog.js +19 -0
  183. package/dist/react/schemaRenderer/action/ConfirmActionDialog.js.map +1 -0
  184. package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts +16 -0
  185. package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts.map +1 -0
  186. package/dist/react/schemaRenderer/action/HandlerActionButton.js +16 -0
  187. package/dist/react/schemaRenderer/action/HandlerActionButton.js.map +1 -0
  188. package/dist/react/schemaRenderer/action/MethodActionButton.d.ts +22 -0
  189. package/dist/react/schemaRenderer/action/MethodActionButton.d.ts.map +1 -0
  190. package/dist/react/schemaRenderer/action/MethodActionButton.js +26 -0
  191. package/dist/react/schemaRenderer/action/MethodActionButton.js.map +1 -0
  192. package/dist/react/schemaRenderer/action/buttons.d.ts +18 -0
  193. package/dist/react/schemaRenderer/action/buttons.d.ts.map +1 -0
  194. package/dist/react/schemaRenderer/action/buttons.js +74 -0
  195. package/dist/react/schemaRenderer/action/buttons.js.map +1 -0
  196. package/dist/react/schemaRenderer/action/helpers.d.ts +26 -0
  197. package/dist/react/schemaRenderer/action/helpers.d.ts.map +1 -0
  198. package/dist/react/schemaRenderer/action/helpers.js +126 -0
  199. package/dist/react/schemaRenderer/action/helpers.js.map +1 -0
  200. package/dist/react/schemaRenderer/action/renderAction.d.ts +21 -0
  201. package/dist/react/schemaRenderer/action/renderAction.d.ts.map +1 -0
  202. package/dist/react/schemaRenderer/action/renderAction.js +102 -0
  203. package/dist/react/schemaRenderer/action/renderAction.js.map +1 -0
  204. package/dist/react/schemaRenderer/columnFormat.d.ts +10 -0
  205. package/dist/react/schemaRenderer/columnFormat.d.ts.map +1 -0
  206. package/dist/react/schemaRenderer/columnFormat.js +76 -0
  207. package/dist/react/schemaRenderer/columnFormat.js.map +1 -0
  208. package/dist/react/schemaRenderer/constants.d.ts +8 -0
  209. package/dist/react/schemaRenderer/constants.d.ts.map +1 -0
  210. package/dist/react/schemaRenderer/constants.js +45 -0
  211. package/dist/react/schemaRenderer/constants.js.map +1 -0
  212. package/dist/react/schemaRenderer/form/FormRenderer.d.ts +29 -0
  213. package/dist/react/schemaRenderer/form/FormRenderer.d.ts.map +1 -0
  214. package/dist/react/schemaRenderer/form/FormRenderer.js +163 -0
  215. package/dist/react/schemaRenderer/form/FormRenderer.js.map +1 -0
  216. package/dist/react/schemaRenderer/form/renderField.d.ts +6 -0
  217. package/dist/react/schemaRenderer/form/renderField.d.ts.map +1 -0
  218. package/dist/react/schemaRenderer/form/renderField.js +239 -0
  219. package/dist/react/schemaRenderer/form/renderField.js.map +1 -0
  220. package/dist/react/schemaRenderer/helpers.d.ts +32 -0
  221. package/dist/react/schemaRenderer/helpers.d.ts.map +1 -0
  222. package/dist/react/schemaRenderer/helpers.js +52 -0
  223. package/dist/react/schemaRenderer/helpers.js.map +1 -0
  224. package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts +60 -0
  225. package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts.map +1 -0
  226. package/dist/react/schemaRenderer/table/CardsLayoutBody.js +189 -0
  227. package/dist/react/schemaRenderer/table/CardsLayoutBody.js.map +1 -0
  228. package/dist/react/schemaRenderer/table/TableRenderer.d.ts +29 -0
  229. package/dist/react/schemaRenderer/table/TableRenderer.d.ts.map +1 -0
  230. package/dist/react/schemaRenderer/table/TableRenderer.js +85 -0
  231. package/dist/react/schemaRenderer/table/TableRenderer.js.map +1 -0
  232. package/dist/react/schemaRenderer/table/TableRendererBody.d.ts +18 -0
  233. package/dist/react/schemaRenderer/table/TableRendererBody.d.ts.map +1 -0
  234. package/dist/react/schemaRenderer/table/TableRendererBody.js +555 -0
  235. package/dist/react/schemaRenderer/table/TableRendererBody.js.map +1 -0
  236. package/dist/react/schemaRenderer/table/filters.d.ts +263 -0
  237. package/dist/react/schemaRenderer/table/filters.d.ts.map +1 -0
  238. package/dist/react/schemaRenderer/table/filters.js +497 -0
  239. package/dist/react/schemaRenderer/table/filters.js.map +1 -0
  240. package/dist/react/schemaRenderer/table/formatCell.d.ts +11 -0
  241. package/dist/react/schemaRenderer/table/formatCell.d.ts.map +1 -0
  242. package/dist/react/schemaRenderer/table/formatCell.js +172 -0
  243. package/dist/react/schemaRenderer/table/formatCell.js.map +1 -0
  244. package/dist/react/schemaRenderer/table/links.d.ts +42 -0
  245. package/dist/react/schemaRenderer/table/links.d.ts.map +1 -0
  246. package/dist/react/schemaRenderer/table/links.js +55 -0
  247. package/dist/react/schemaRenderer/table/links.js.map +1 -0
  248. package/dist/react/schemaRenderer/table/renderRowActions.d.ts +13 -0
  249. package/dist/react/schemaRenderer/table/renderRowActions.d.ts.map +1 -0
  250. package/dist/react/schemaRenderer/table/renderRowActions.js +25 -0
  251. package/dist/react/schemaRenderer/table/renderRowActions.js.map +1 -0
  252. package/dist/react/schemaRenderer/table/url.d.ts +41 -0
  253. package/dist/react/schemaRenderer/table/url.d.ts.map +1 -0
  254. package/dist/react/schemaRenderer/table/url.js +114 -0
  255. package/dist/react/schemaRenderer/table/url.js.map +1 -0
  256. package/dist/routes/globals.d.ts +13 -0
  257. package/dist/routes/globals.d.ts.map +1 -0
  258. package/dist/routes/globals.js +131 -0
  259. package/dist/routes/globals.js.map +1 -0
  260. package/dist/routes/helpers.d.ts +217 -0
  261. package/dist/routes/helpers.d.ts.map +1 -0
  262. package/dist/routes/helpers.js +498 -0
  263. package/dist/routes/helpers.js.map +1 -0
  264. package/dist/routes/pages.d.ts +15 -0
  265. package/dist/routes/pages.d.ts.map +1 -0
  266. package/dist/routes/pages.js +145 -0
  267. package/dist/routes/pages.js.map +1 -0
  268. package/dist/routes/panel.d.ts +19 -0
  269. package/dist/routes/panel.d.ts.map +1 -0
  270. package/dist/routes/panel.js +191 -0
  271. package/dist/routes/panel.js.map +1 -0
  272. package/dist/routes/relations.d.ts +21 -0
  273. package/dist/routes/relations.d.ts.map +1 -0
  274. package/dist/routes/relations.js +1239 -0
  275. package/dist/routes/relations.js.map +1 -0
  276. package/dist/routes/resources.d.ts +28 -0
  277. package/dist/routes/resources.d.ts.map +1 -0
  278. package/dist/routes/resources.js +741 -0
  279. package/dist/routes/resources.js.map +1 -0
  280. package/dist/routes/theme.d.ts +12 -0
  281. package/dist/routes/theme.d.ts.map +1 -0
  282. package/dist/routes/theme.js +82 -0
  283. package/dist/routes/theme.js.map +1 -0
  284. package/dist/routes.d.ts.map +1 -1
  285. package/dist/routes.js +64 -3078
  286. package/dist/routes.js.map +1 -1
  287. package/dist/vite.d.ts +1 -0
  288. package/dist/vite.d.ts.map +1 -1
  289. package/dist/vite.js +26 -5
  290. package/dist/vite.js.map +1 -1
  291. package/package.json +2 -1
  292. package/src/Pilotiq.ts +95 -0
  293. package/src/actions/Action.ts +79 -723
  294. package/src/actions/bulkFactories.ts +168 -0
  295. package/src/actions/crudFactories.ts +220 -0
  296. package/src/actions/factoryHelpers.ts +177 -0
  297. package/src/actions/m2mFactories.ts +193 -0
  298. package/src/actions/relationFactories.ts +372 -0
  299. package/src/elements/dispatchForm.ts +1 -1
  300. package/src/elements/dispatchTable.ts +1 -1
  301. package/src/fields/Field.ts +39 -0
  302. package/src/pageData/breadcrumbs.ts +288 -0
  303. package/src/pageData/forms.ts +578 -0
  304. package/src/pageData/helpers.ts +764 -0
  305. package/src/pageData/misc.ts +347 -0
  306. package/src/pageData/navigation.ts +779 -0
  307. package/src/pageData/relationPages.ts +1246 -0
  308. package/src/pageData/relationTabs.ts +286 -0
  309. package/src/pageData/resourcePages.ts +593 -0
  310. package/src/pageData.ts +122 -4731
  311. package/src/react/AppShell.tsx +27 -1
  312. package/src/react/CollabExtensionFactoryRegistry.ts +55 -0
  313. package/src/react/CollabRoomContext.ts +42 -0
  314. package/src/react/FormCollabBindingRegistry.ts +72 -0
  315. package/src/react/FormStateContext.tsx +91 -0
  316. package/src/react/RecordWrapperGate.tsx +40 -0
  317. package/src/react/RecordWrapperRegistry.ts +39 -0
  318. package/src/react/SchemaRenderer.tsx +230 -6479
  319. package/src/react/component-slots.test.ts +103 -0
  320. package/src/react/component-slots.ts +116 -0
  321. package/src/react/fields/BuilderInput.tsx +29 -117
  322. package/src/react/fields/MarkdownInput.tsx +0 -1
  323. package/src/react/fields/RepeaterInput.tsx +29 -130
  324. package/src/react/fields/rowState.ts +106 -0
  325. package/src/react/fields/useRowReorderDnd.ts +78 -0
  326. package/src/react/index.ts +38 -0
  327. package/src/react/layouts/SidebarLayout.tsx +39 -28
  328. package/src/react/layouts/TopbarLayout.tsx +70 -57
  329. package/src/react/parseRecordEditUrl.test.ts +75 -0
  330. package/src/react/parseRecordEditUrl.ts +55 -0
  331. package/src/react/persistedState.ts +40 -0
  332. package/src/react/schemaRenderer/AlertRenderer.tsx +112 -0
  333. package/src/react/schemaRenderer/EntryRenderer.tsx +501 -0
  334. package/src/react/schemaRenderer/SectionRenderer.tsx +120 -0
  335. package/src/react/schemaRenderer/SimpleElements.tsx +306 -0
  336. package/src/react/schemaRenderer/TabsRenderer.tsx +62 -0
  337. package/src/react/schemaRenderer/WizardRenderer.tsx +338 -0
  338. package/src/react/schemaRenderer/action/ActionGroupTrigger.tsx +177 -0
  339. package/src/react/schemaRenderer/action/ActionModalDialog.tsx +273 -0
  340. package/src/react/schemaRenderer/action/ConfirmActionDialog.tsx +61 -0
  341. package/src/react/schemaRenderer/action/HandlerActionButton.tsx +43 -0
  342. package/src/react/schemaRenderer/action/MethodActionButton.tsx +64 -0
  343. package/src/react/schemaRenderer/action/buttons.tsx +99 -0
  344. package/src/react/schemaRenderer/action/helpers.ts +140 -0
  345. package/src/react/schemaRenderer/action/renderAction.tsx +245 -0
  346. package/src/react/schemaRenderer/columnFormat.ts +65 -0
  347. package/src/react/schemaRenderer/constants.ts +50 -0
  348. package/src/react/schemaRenderer/form/FormRenderer.tsx +245 -0
  349. package/src/react/schemaRenderer/form/renderField.tsx +511 -0
  350. package/src/react/schemaRenderer/helpers.tsx +81 -0
  351. package/src/react/schemaRenderer/table/CardsLayoutBody.tsx +308 -0
  352. package/src/react/schemaRenderer/table/TableRenderer.tsx +123 -0
  353. package/src/react/schemaRenderer/table/TableRendererBody.tsx +974 -0
  354. package/src/react/schemaRenderer/table/filters.tsx +1233 -0
  355. package/src/react/schemaRenderer/table/formatCell.tsx +264 -0
  356. package/src/react/schemaRenderer/table/links.tsx +112 -0
  357. package/src/react/schemaRenderer/table/renderRowActions.tsx +52 -0
  358. package/src/react/schemaRenderer/table/url.tsx +143 -0
  359. package/src/routes/globals.ts +154 -0
  360. package/src/routes/helpers.ts +668 -0
  361. package/src/routes/pages.ts +173 -0
  362. package/src/routes/panel.ts +204 -0
  363. package/src/routes/relations.ts +1219 -0
  364. package/src/routes/resources.ts +786 -0
  365. package/src/routes/theme.ts +109 -0
  366. package/src/routes.test.ts +1 -1
  367. package/src/routes.ts +64 -3176
  368. package/src/schema/TableWidget.test.ts +2 -2
  369. package/src/theme/migrate.test.ts +178 -0
  370. package/src/vite.test.ts +184 -0
  371. package/src/vite.ts +26 -4
@@ -0,0 +1,131 @@
1
+ import { view } from '@rudderjs/view';
2
+ import { dispatchFormSubmit, findForms, selectForm } from '../elements/dispatchForm.js';
3
+ import { globalBasePath } from '../clusterPaths.js';
4
+ import { callPageSchema, tagFormActions, globalEditData, globalViewData, } from '../pageData.js';
5
+ import { wantsJson, readFormBody, normalizeRedirect, splitMeta, forbidden, checkPolicy, policyAccess, handleFormState, handleFormWizard, handleFormCreateOption, handleFormMentions, sendRedirectResponse, } from './helpers.js';
6
+ /**
7
+ * Register the per-Global routes — edit GET / POST, the four form-state
8
+ * companion endpoints (`_form/:formId/state` / `wizard` / `mentions` /
9
+ * `create-option`), and the optional view route.
10
+ *
11
+ * Pulled out of `registerPilotiqRoutes` in 2026-05-12 (Phase 3 of the
12
+ * routes.ts split). Called once per `cfg.globals` entry.
13
+ */
14
+ export function registerGlobalRoutes(router, pilotiq, G, base) {
15
+ const slug = G.getSlug();
16
+ const editUrl = globalBasePath(base, G);
17
+ const pages = G.resolvePages();
18
+ if (pages.edit) {
19
+ const PageClass = pages.edit;
20
+ // Plan #5 partial-resolve endpoint for the global's edit form.
21
+ // POST ${editUrl}/_form/:formId/state
22
+ router.post(`${editUrl}/_form/:formId/state`, async (req, res) => {
23
+ const user = await pilotiq.resolveUser(req);
24
+ if (!await policyAccess(G, user))
25
+ return forbidden(res, true);
26
+ if (!await checkPolicy(() => G.canEdit(user, undefined)))
27
+ return forbidden(res, true);
28
+ const formId = req.params['formId'];
29
+ return handleFormState(req, res, pilotiq, { kind: 'global-edit', slug }, formId);
30
+ });
31
+ // Plan #8 wizard step-validate endpoint for the global's edit form.
32
+ router.post(`${editUrl}/_form/:formId/wizard`, async (req, res) => {
33
+ const user = await pilotiq.resolveUser(req);
34
+ if (!await policyAccess(G, user))
35
+ return forbidden(res, true);
36
+ if (!await checkPolicy(() => G.canEdit(user, undefined)))
37
+ return forbidden(res, true);
38
+ const formId = req.params['formId'];
39
+ return handleFormWizard(req, res, pilotiq, { kind: 'global-edit', slug }, formId);
40
+ });
41
+ // Async-mention endpoint for the global's edit form.
42
+ router.post(`${editUrl}/_form/:formId/mentions`, async (req, res) => {
43
+ const user = await pilotiq.resolveUser(req);
44
+ if (!await policyAccess(G, user))
45
+ return forbidden(res, true);
46
+ if (!await checkPolicy(() => G.canEdit(user, undefined)))
47
+ return forbidden(res, true);
48
+ const formId = req.params['formId'];
49
+ return handleFormMentions(req, res, pilotiq, { kind: 'global-edit', slug }, formId);
50
+ });
51
+ // SelectField inline-create modal endpoint for the global's edit form.
52
+ router.post(`${editUrl}/_form/:formId/create-option/:fieldName`, async (req, res) => {
53
+ const user = await pilotiq.resolveUser(req);
54
+ if (!await policyAccess(G, user))
55
+ return forbidden(res, true);
56
+ if (!await checkPolicy(() => G.canEdit(user, undefined)))
57
+ return forbidden(res, true);
58
+ const formId = req.params['formId'];
59
+ const fieldName = req.params['fieldName'];
60
+ return handleFormCreateOption(req, res, pilotiq, { kind: 'global-edit', slug }, formId, fieldName);
61
+ });
62
+ router.get(editUrl, async (req, res) => {
63
+ const user = await pilotiq.resolveUser(req);
64
+ if (!await policyAccess(G, user))
65
+ return forbidden(res, wantsJson(req));
66
+ // Globals carry their record on the singleton form's `loadRecord`;
67
+ // we don't pre-load here — pass a stub so canEdit's signature is
68
+ // honored, and let user code decide whether to consult it.
69
+ if (!await checkPolicy(() => G.canEdit(user, undefined)))
70
+ return forbidden(res, wantsJson(req));
71
+ const data = await globalEditData(pilotiq, slug, undefined, req);
72
+ return view('pilotiq.slug', data ?? {});
73
+ });
74
+ router.post(editUrl, async (req, res) => {
75
+ const body = await readFormBody(req);
76
+ const { values, formId } = splitMeta(body);
77
+ const json = wantsJson(req);
78
+ const user = await pilotiq.resolveUser(req);
79
+ if (!await policyAccess(G, user))
80
+ return forbidden(res, json);
81
+ if (!await checkPolicy(() => G.canEdit(user, undefined)))
82
+ return forbidden(res, json);
83
+ const ctx = { mode: 'edit', basePath: base, ...(user !== null ? { user: user } : {}) };
84
+ const elements = await callPageSchema(PageClass, ctx);
85
+ tagFormActions(elements, editUrl);
86
+ const form = selectForm(findForms(elements), formId);
87
+ if (!form) {
88
+ if (json) {
89
+ res.status(404);
90
+ return res.json({ ok: false, error: 'No form found on page' });
91
+ }
92
+ res.status(404);
93
+ return res.send('No form found on page');
94
+ }
95
+ // Provide the existing singleton record to the lifecycle context
96
+ // so cross-field validators / mutateData see prior state.
97
+ let record = undefined;
98
+ if (form.getLoadRecord()) {
99
+ try {
100
+ record = await form.getLoadRecord()('', { values });
101
+ }
102
+ catch { /* ignore */ }
103
+ }
104
+ const result = await dispatchFormSubmit(form, values, record !== undefined ? { values, record, basePath: base } : { values, basePath: base });
105
+ if (!result.ok) {
106
+ if (json) {
107
+ res.status(422);
108
+ return res.json({ ok: false, errors: result.errors });
109
+ }
110
+ const data = await globalEditData(pilotiq, slug, { values, errors: result.errors });
111
+ res.status(422);
112
+ return view('pilotiq.slug', data ?? {});
113
+ }
114
+ const redirect = normalizeRedirect(result.redirect, base) ?? editUrl;
115
+ return sendRedirectResponse(req, res, json, redirect, result.notifications);
116
+ });
117
+ }
118
+ // Optional view page when the user opts in via pages().view
119
+ if (pages.view) {
120
+ router.get(`${editUrl}/view`, async (req, res) => {
121
+ const user = await pilotiq.resolveUser(req);
122
+ if (!await policyAccess(G, user))
123
+ return forbidden(res, wantsJson(req));
124
+ if (!await checkPolicy(() => G.canView(user, undefined)))
125
+ return forbidden(res, wantsJson(req));
126
+ const data = await globalViewData(pilotiq, slug, req);
127
+ return view('pilotiq.resource-view', data ?? {});
128
+ });
129
+ }
130
+ }
131
+ //# sourceMappingURL=globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globals.js","sourceRoot":"","sources":["../../src/routes/globals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ import type { AppRequest, AppResponse } from '@rudderjs/contracts';
2
+ import type { Pilotiq } from '../Pilotiq.js';
3
+ import { type DispatchActionResult } from '../elements/dispatchAction.js';
4
+ import type { NotificationMeta } from '../notifications/Notification.js';
5
+ import { type ModelQuery } from '../orm/modelDefaults.js';
6
+ import type { ResourceClass } from '../Resource.js';
7
+ import { type FormStateScope, type WidgetScope } from '../pageData.js';
8
+ /** True when the client wants a JSON response (modal-form action submitting
9
+ * via fetch), false for a browser-style form post that wants a 303 redirect.
10
+ * Both action endpoints honor this so confirm/handler buttons (form-post)
11
+ * keep working unchanged while modal dialogs use fetch. */
12
+ export declare function wantsJson(req: AppRequest): boolean;
13
+ /**
14
+ * Read the request body as a `Record<string, unknown>`. The hono adapter
15
+ * auto-parses JSON, but `application/x-www-form-urlencoded` and
16
+ * `multipart/form-data` need a manual fall-through to Hono's own parser.
17
+ */
18
+ export declare function readFormBody(req: AppRequest): Promise<Record<string, unknown>>;
19
+ /**
20
+ * Normalize a user-supplied redirect URL. Returns absolute URLs and
21
+ * scheme-prefixed URLs unchanged. Bare relative paths (no leading `/`)
22
+ * are joined under the panel's `basePath` — without this, the browser
23
+ * resolves the redirect against the current request URL and produces
24
+ * paths like `/admin/articles/{id}/articles/{id}/edit`.
25
+ *
26
+ * `getRedirectUrl` page hooks and `Form.redirectAfterSave` callbacks
27
+ * are user-authored; this protects the framework against the common
28
+ * authoring slip while keeping absolute URLs (the documented form)
29
+ * working as-is.
30
+ */
31
+ export declare function normalizeRedirect(url: string | undefined, basePath: string): string | undefined;
32
+ /** Strip framework meta keys (`_formId`, `_method`, `_continueCreate`)
33
+ * from a parsed body. `continueCreate` mirrors the secondary
34
+ * "Create & create another" submit on `CreatePage`: when `'1'`, the
35
+ * create POST handler routes the redirect back to the create URL
36
+ * instead of the new record's edit page. */
37
+ export declare function splitMeta(body: Record<string, unknown>): {
38
+ values: Record<string, unknown>;
39
+ formId: string | undefined;
40
+ continueCreate: boolean;
41
+ };
42
+ /** Strip control characters (`"\\\r\n`) from a download filename so
43
+ * the `Content-Disposition: attachment; filename="…"` header stays
44
+ * unbreakable. Defends against a handler that returns a hostile
45
+ * filename string. Empty fallback `'export'`. */
46
+ export declare function sanitizeFilename(name: string): string;
47
+ /** Write an `Action`-handler download envelope as the response. Sets
48
+ * `Content-Type` + `Content-Disposition: attachment` and ends with
49
+ * the body. Mutually exclusive with redirect — call sites consult
50
+ * `result.download` first. */
51
+ export declare function sendDownload(res: AppResponse, env: {
52
+ filename: string;
53
+ contentType: string;
54
+ body: string;
55
+ }): void;
56
+ /** Low-level success-or-redirect responder. Either emits a JSON envelope
57
+ * (`{ ok: true, redirect, notifications?, force? }`) when the client
58
+ * asked for JSON, or flashes notifications to the next request and
59
+ * issues a 303 redirect. Shared by `sendActionResult`,
60
+ * `sendMutationSuccess`, and the form-submit success branches in
61
+ * resources / globals / pages / relations. */
62
+ export declare function sendRedirectResponse(req: AppRequest, res: AppResponse, json: boolean, redirect: string, notifications: ReadonlyArray<NotificationMeta> | undefined, extras?: {
63
+ force?: boolean;
64
+ }): unknown;
65
+ /** Action-dispatch result responder. Branches on `result.ok` / download
66
+ * envelope / redirect. Consumed by every `_action/:actionName` endpoint
67
+ * in resources / pages / relations.
68
+ *
69
+ * - `!result.ok` → 422 (with `errors`) or 500 (`error` only). JSON path
70
+ * returns `{ ok: false, error, errors? }`; HTML path sends `error`.
71
+ * - `result.download` → calls `sendDownload` (mutually exclusive with
72
+ * `redirect`; binary response has no JSON envelope to carry
73
+ * notifications).
74
+ * - otherwise → `sendRedirectResponse` with the normalized redirect
75
+ * (defaulting to `fallbackUrl`) and `result.notifications`. */
76
+ export declare function sendActionResult(req: AppRequest, res: AppResponse, json: boolean, result: DispatchActionResult, base: string, fallbackUrl: string): unknown;
77
+ /** Synthetic-notification mutation responder for delete / restore /
78
+ * force-delete / detach routes. The form-method 303 path doesn't have
79
+ * the form-lifecycle toast pipeline; this synthesizes one
80
+ * notification so the SPA path gets the same toast UX as a JSON-
81
+ * dispatched action handler. `kind` becomes part of the notification
82
+ * id (`n-${kind}-${id}-${Date.now()}`) so the client can dedupe. */
83
+ export declare function sendMutationSuccess(req: AppRequest, res: AppResponse, json: boolean, opts: {
84
+ id: string;
85
+ kind: string;
86
+ title: string;
87
+ redirect: string;
88
+ }): unknown;
89
+ /** Soft-delete record lookup. Runs `q.withTrashed().where(pk, '=', id)
90
+ * .paginate(1, 1)` and returns the first row, or `undefined` when the
91
+ * query has no `withTrashed()` method (caller falls back to a normal
92
+ * `M.find(id)` or returns 404). `.catch(...)` swallows the paginate
93
+ * error so a bad query shape surfaces as "not found" rather than a
94
+ * 500. */
95
+ export declare function findInQueryWithTrashed(q: ModelQuery, pk: string, id: string): Promise<unknown>;
96
+ /** Plan #10 — send a 403 response. Branches on `Accept: application/json`
97
+ * the same way the action / form dispatch paths do. Used by every route
98
+ * after a `Resource.canX(...)` check fails. We deliberately do NOT
99
+ * redirect to login: 403 means "authenticated but not allowed"; the
100
+ * 401-unauthenticated case is `Pilotiq.guard()`'s job. */
101
+ export declare function forbidden(res: AppResponse, json: boolean): unknown;
102
+ /** Extract a user-facing message from a thrown value inside an editable
103
+ * column's beforeStateUpdated / afterStateUpdated hook. Stamped under
104
+ * the reserved `_cell` key in the 422 response. */
105
+ export declare function cellHookErrorMessage(err: unknown): string;
106
+ /** Run a `canX(...)` predicate, treating throws as `false`. The predicate
107
+ * is user-authored and we want a flaky check to fail closed (deny) rather
108
+ * than 500 the page. */
109
+ export declare function checkPolicy(fn: () => boolean | Promise<boolean>): Promise<boolean>;
110
+ export declare function policyAccess(owner: {
111
+ canAccess: (user: unknown) => boolean | Promise<boolean>;
112
+ cluster?: {
113
+ canAccess: (user: unknown) => boolean | Promise<boolean>;
114
+ };
115
+ }, user: unknown): Promise<boolean>;
116
+ /** Run `policyAccess(R, user)` and `findRecord(R, recordId, { user })`
117
+ * in parallel. Both depend only on `user`, so the two round-trips
118
+ * overlap instead of waiting on each other. When `R.model` isn't set
119
+ * the record falls back to a stub `{ id: recordId }` so record-aware
120
+ * predicates can still pattern-match. Throws are caught — a failed
121
+ * record load resolves to `undefined`, mirroring the pre-helper inline
122
+ * shape `findRecord(...).catch(() => undefined)`. */
123
+ export declare function loadAccessGated(R: ResourceClass, recordId: string, user: unknown): Promise<{
124
+ access: boolean;
125
+ record: unknown;
126
+ }>;
127
+ /**
128
+ * Locate an action by name in a resolved page schema. Looks at both
129
+ * page-level actions (`findActions`) AND row-scoped extraItemActions on
130
+ * Repeater/Builder fields (`findRowExtraActions`). When the match is
131
+ * row-scoped, also returns the parent field reference and the form
132
+ * schema array — the dispatcher uses both to coerce the form body and
133
+ * navigate to the right row when stamping `ctx.row`.
134
+ *
135
+ * Page-level matches win when a page-level + row-scoped action share the
136
+ * same name (page-level is strictly more privileged: it has access to
137
+ * the full form, not just one row). The collision is undocumented
138
+ * behavior — authors should use distinct names.
139
+ */
140
+ export declare function resolveDispatchTarget(elements: import('../schema/Element.js').Element[], actionName: string): {
141
+ action: import('../actions/Action.js').Action;
142
+ rowField?: import('../fields/RepeaterField.js').RepeaterField | import('../fields/BuilderField.js').BuilderField;
143
+ formSchema?: import('../schema/Element.js').Element[];
144
+ } | null;
145
+ /**
146
+ * Plan #5 — handle a partial-resolve POST. The body shape is
147
+ * `{ changed, values }`; `formId` comes from the URL path. Response
148
+ * is `{ ok, form, dirty }` on success or `{ ok: false, error }` for
149
+ * missing form / unknown field.
150
+ */
151
+ export interface FormStateBody {
152
+ changed?: unknown;
153
+ values?: unknown;
154
+ }
155
+ export declare function handleFormState(req: AppRequest, res: AppResponse, pilotiq: Pilotiq, scope: FormStateScope, formId: string): Promise<unknown>;
156
+ export interface FormWizardBody {
157
+ step?: unknown;
158
+ values?: unknown;
159
+ }
160
+ export declare function handleFormWizard(req: AppRequest, res: AppResponse, pilotiq: Pilotiq, scope: FormStateScope, formId: string): Promise<unknown>;
161
+ /**
162
+ * Audit row 2026-05-07 cont'd⁸ — `SelectField.createOptionForm()` modal
163
+ * submit. Body carries `{ values }`; `formId` + `fieldName` come from
164
+ * the URL path. Returns `{ ok, option: { value, label } }` on success
165
+ * or `{ ok: false, error }` for missing scope / form / field, 403 for
166
+ * authorize failure, or 422 with `errors` for validation.
167
+ *
168
+ * One handler shared across all four scopes (resource-create /
169
+ * resource-edit / global-edit / custom-page) — caller passes the
170
+ * matching `FormStateScope` so the same `canAccess + canCreate / canEdit`
171
+ * predicates apply to the parent form's policy gate.
172
+ */
173
+ export interface FormCreateOptionBody {
174
+ values?: unknown;
175
+ }
176
+ export declare function handleFormCreateOption(req: AppRequest, res: AppResponse, pilotiq: Pilotiq, scope: FormStateScope, formId: string, fieldName: string): Promise<unknown>;
177
+ /**
178
+ * Async-mention round-trip handler. Body is `{ field, trigger, query }`;
179
+ * `formId` comes from the URL path. Returns `{ ok, items }` on success
180
+ * or `{ ok: false, error }` for missing form / field / trigger.
181
+ *
182
+ * Each scope (resource-create, resource-edit, global-edit, custom-page)
183
+ * registers its own route — the auth gate matches the matching `_form/
184
+ * :formId/state` endpoint so the same `canAccess + canCreate / canEdit`
185
+ * predicates apply.
186
+ */
187
+ export interface FormMentionsBody {
188
+ field?: unknown;
189
+ trigger?: unknown;
190
+ query?: unknown;
191
+ }
192
+ export declare function handleFormMentions(req: AppRequest, res: AppResponse, pilotiq: Pilotiq, scope: FormStateScope, formId: string): Promise<unknown>;
193
+ /**
194
+ * Plan #15 — handle a widget polling POST. Body is `{ filter? }`;
195
+ * `:id` comes from the URL. Returns `{ ok, data, timestamp }` on
196
+ * success or `{ ok: false, error }` on failure. Used by lazy-loading
197
+ * widgets (first fetch on mount) and `poll(seconds)` widgets (interval
198
+ * re-fetch).
199
+ */
200
+ export interface WidgetBody {
201
+ filter?: unknown;
202
+ }
203
+ export declare function handleWidgetData(req: AppRequest, res: AppResponse, pilotiq: Pilotiq, scope: WidgetScope, id: string): Promise<unknown>;
204
+ /**
205
+ * Handle a single file upload from a `FileUpload` field. Validates
206
+ * accept / maxSize against the (optional) per-request hints, hands
207
+ * the file off to the configured adapter, returns `{ ok, url }`.
208
+ *
209
+ * Body shape (multipart/form-data):
210
+ * - `file`: the file blob
211
+ * - `directory`: optional sub-directory hint
212
+ * - `accept`: optional comma-separated MIME list to enforce
213
+ * - `maxSize`: optional byte cap
214
+ * - `fieldName`: optional tag forwarded to the adapter for routing
215
+ */
216
+ export declare function handleUploadRequest(req: AppRequest, res: AppResponse, pilotiq: Pilotiq): Promise<unknown>;
217
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/routes/helpers.ts"],"names":[],"mappings":"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"}