@pilotiq/pilotiq 0.7.2 → 0.8.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 (367) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/CHANGELOG.md +142 -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/RecordWrapperGate.d.ts +25 -0
  93. package/dist/react/RecordWrapperGate.d.ts.map +1 -0
  94. package/dist/react/RecordWrapperGate.js +30 -0
  95. package/dist/react/RecordWrapperGate.js.map +1 -0
  96. package/dist/react/RecordWrapperRegistry.d.ts +31 -0
  97. package/dist/react/RecordWrapperRegistry.d.ts.map +1 -0
  98. package/dist/react/RecordWrapperRegistry.js +15 -0
  99. package/dist/react/RecordWrapperRegistry.js.map +1 -0
  100. package/dist/react/SchemaRenderer.d.ts +17 -23
  101. package/dist/react/SchemaRenderer.d.ts.map +1 -1
  102. package/dist/react/SchemaRenderer.js +71 -3647
  103. package/dist/react/SchemaRenderer.js.map +1 -1
  104. package/dist/react/component-slots.d.ts +103 -0
  105. package/dist/react/component-slots.d.ts.map +1 -0
  106. package/dist/react/component-slots.js +18 -0
  107. package/dist/react/component-slots.js.map +1 -0
  108. package/dist/react/fields/BuilderInput.d.ts.map +1 -1
  109. package/dist/react/fields/BuilderInput.js +21 -117
  110. package/dist/react/fields/BuilderInput.js.map +1 -1
  111. package/dist/react/fields/MarkdownInput.d.ts.map +1 -1
  112. package/dist/react/fields/MarkdownInput.js +1 -3
  113. package/dist/react/fields/MarkdownInput.js.map +1 -1
  114. package/dist/react/fields/RepeaterInput.d.ts.map +1 -1
  115. package/dist/react/fields/RepeaterInput.js +22 -127
  116. package/dist/react/fields/RepeaterInput.js.map +1 -1
  117. package/dist/react/fields/rowState.d.ts +40 -0
  118. package/dist/react/fields/rowState.d.ts.map +1 -0
  119. package/dist/react/fields/rowState.js +60 -0
  120. package/dist/react/fields/rowState.js.map +1 -0
  121. package/dist/react/fields/useRowReorderDnd.d.ts +28 -0
  122. package/dist/react/fields/useRowReorderDnd.d.ts.map +1 -0
  123. package/dist/react/fields/useRowReorderDnd.js +51 -0
  124. package/dist/react/fields/useRowReorderDnd.js.map +1 -0
  125. package/dist/react/index.d.ts +9 -0
  126. package/dist/react/index.d.ts.map +1 -1
  127. package/dist/react/index.js +8 -0
  128. package/dist/react/index.js.map +1 -1
  129. package/dist/react/layouts/SidebarLayout.d.ts +1 -1
  130. package/dist/react/layouts/SidebarLayout.d.ts.map +1 -1
  131. package/dist/react/layouts/SidebarLayout.js +10 -2
  132. package/dist/react/layouts/SidebarLayout.js.map +1 -1
  133. package/dist/react/layouts/TopbarLayout.d.ts +1 -1
  134. package/dist/react/layouts/TopbarLayout.d.ts.map +1 -1
  135. package/dist/react/layouts/TopbarLayout.js +19 -11
  136. package/dist/react/layouts/TopbarLayout.js.map +1 -1
  137. package/dist/react/parseRecordEditUrl.d.ts +29 -0
  138. package/dist/react/parseRecordEditUrl.d.ts.map +1 -0
  139. package/dist/react/parseRecordEditUrl.js +25 -0
  140. package/dist/react/parseRecordEditUrl.js.map +1 -0
  141. package/dist/react/persistedState.d.ts +19 -0
  142. package/dist/react/persistedState.d.ts.map +1 -0
  143. package/dist/react/persistedState.js +51 -0
  144. package/dist/react/persistedState.js.map +1 -0
  145. package/dist/react/schemaRenderer/AlertRenderer.d.ts +12 -0
  146. package/dist/react/schemaRenderer/AlertRenderer.d.ts.map +1 -0
  147. package/dist/react/schemaRenderer/AlertRenderer.js +61 -0
  148. package/dist/react/schemaRenderer/AlertRenderer.js.map +1 -0
  149. package/dist/react/schemaRenderer/EntryRenderer.d.ts +13 -0
  150. package/dist/react/schemaRenderer/EntryRenderer.d.ts.map +1 -0
  151. package/dist/react/schemaRenderer/EntryRenderer.js +277 -0
  152. package/dist/react/schemaRenderer/EntryRenderer.js.map +1 -0
  153. package/dist/react/schemaRenderer/SectionRenderer.d.ts +16 -0
  154. package/dist/react/schemaRenderer/SectionRenderer.d.ts.map +1 -0
  155. package/dist/react/schemaRenderer/SectionRenderer.js +62 -0
  156. package/dist/react/schemaRenderer/SectionRenderer.js.map +1 -0
  157. package/dist/react/schemaRenderer/SimpleElements.d.ts +25 -0
  158. package/dist/react/schemaRenderer/SimpleElements.d.ts.map +1 -0
  159. package/dist/react/schemaRenderer/SimpleElements.js +147 -0
  160. package/dist/react/schemaRenderer/SimpleElements.js.map +1 -0
  161. package/dist/react/schemaRenderer/TabsRenderer.d.ts +17 -0
  162. package/dist/react/schemaRenderer/TabsRenderer.d.ts.map +1 -0
  163. package/dist/react/schemaRenderer/TabsRenderer.js +31 -0
  164. package/dist/react/schemaRenderer/TabsRenderer.js.map +1 -0
  165. package/dist/react/schemaRenderer/WizardRenderer.d.ts +34 -0
  166. package/dist/react/schemaRenderer/WizardRenderer.d.ts.map +1 -0
  167. package/dist/react/schemaRenderer/WizardRenderer.js +208 -0
  168. package/dist/react/schemaRenderer/WizardRenderer.js.map +1 -0
  169. package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts +21 -0
  170. package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts.map +1 -0
  171. package/dist/react/schemaRenderer/action/ActionGroupTrigger.js +82 -0
  172. package/dist/react/schemaRenderer/action/ActionGroupTrigger.js.map +1 -0
  173. package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts +30 -0
  174. package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts.map +1 -0
  175. package/dist/react/schemaRenderer/action/ActionModalDialog.js +182 -0
  176. package/dist/react/schemaRenderer/action/ActionModalDialog.js.map +1 -0
  177. package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts +17 -0
  178. package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts.map +1 -0
  179. package/dist/react/schemaRenderer/action/ConfirmActionDialog.js +19 -0
  180. package/dist/react/schemaRenderer/action/ConfirmActionDialog.js.map +1 -0
  181. package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts +16 -0
  182. package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts.map +1 -0
  183. package/dist/react/schemaRenderer/action/HandlerActionButton.js +16 -0
  184. package/dist/react/schemaRenderer/action/HandlerActionButton.js.map +1 -0
  185. package/dist/react/schemaRenderer/action/MethodActionButton.d.ts +22 -0
  186. package/dist/react/schemaRenderer/action/MethodActionButton.d.ts.map +1 -0
  187. package/dist/react/schemaRenderer/action/MethodActionButton.js +26 -0
  188. package/dist/react/schemaRenderer/action/MethodActionButton.js.map +1 -0
  189. package/dist/react/schemaRenderer/action/buttons.d.ts +18 -0
  190. package/dist/react/schemaRenderer/action/buttons.d.ts.map +1 -0
  191. package/dist/react/schemaRenderer/action/buttons.js +74 -0
  192. package/dist/react/schemaRenderer/action/buttons.js.map +1 -0
  193. package/dist/react/schemaRenderer/action/helpers.d.ts +26 -0
  194. package/dist/react/schemaRenderer/action/helpers.d.ts.map +1 -0
  195. package/dist/react/schemaRenderer/action/helpers.js +126 -0
  196. package/dist/react/schemaRenderer/action/helpers.js.map +1 -0
  197. package/dist/react/schemaRenderer/action/renderAction.d.ts +21 -0
  198. package/dist/react/schemaRenderer/action/renderAction.d.ts.map +1 -0
  199. package/dist/react/schemaRenderer/action/renderAction.js +102 -0
  200. package/dist/react/schemaRenderer/action/renderAction.js.map +1 -0
  201. package/dist/react/schemaRenderer/columnFormat.d.ts +10 -0
  202. package/dist/react/schemaRenderer/columnFormat.d.ts.map +1 -0
  203. package/dist/react/schemaRenderer/columnFormat.js +76 -0
  204. package/dist/react/schemaRenderer/columnFormat.js.map +1 -0
  205. package/dist/react/schemaRenderer/constants.d.ts +8 -0
  206. package/dist/react/schemaRenderer/constants.d.ts.map +1 -0
  207. package/dist/react/schemaRenderer/constants.js +45 -0
  208. package/dist/react/schemaRenderer/constants.js.map +1 -0
  209. package/dist/react/schemaRenderer/form/FormRenderer.d.ts +29 -0
  210. package/dist/react/schemaRenderer/form/FormRenderer.d.ts.map +1 -0
  211. package/dist/react/schemaRenderer/form/FormRenderer.js +152 -0
  212. package/dist/react/schemaRenderer/form/FormRenderer.js.map +1 -0
  213. package/dist/react/schemaRenderer/form/renderField.d.ts +6 -0
  214. package/dist/react/schemaRenderer/form/renderField.d.ts.map +1 -0
  215. package/dist/react/schemaRenderer/form/renderField.js +239 -0
  216. package/dist/react/schemaRenderer/form/renderField.js.map +1 -0
  217. package/dist/react/schemaRenderer/helpers.d.ts +32 -0
  218. package/dist/react/schemaRenderer/helpers.d.ts.map +1 -0
  219. package/dist/react/schemaRenderer/helpers.js +52 -0
  220. package/dist/react/schemaRenderer/helpers.js.map +1 -0
  221. package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts +60 -0
  222. package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts.map +1 -0
  223. package/dist/react/schemaRenderer/table/CardsLayoutBody.js +189 -0
  224. package/dist/react/schemaRenderer/table/CardsLayoutBody.js.map +1 -0
  225. package/dist/react/schemaRenderer/table/TableRenderer.d.ts +29 -0
  226. package/dist/react/schemaRenderer/table/TableRenderer.d.ts.map +1 -0
  227. package/dist/react/schemaRenderer/table/TableRenderer.js +85 -0
  228. package/dist/react/schemaRenderer/table/TableRenderer.js.map +1 -0
  229. package/dist/react/schemaRenderer/table/TableRendererBody.d.ts +18 -0
  230. package/dist/react/schemaRenderer/table/TableRendererBody.d.ts.map +1 -0
  231. package/dist/react/schemaRenderer/table/TableRendererBody.js +555 -0
  232. package/dist/react/schemaRenderer/table/TableRendererBody.js.map +1 -0
  233. package/dist/react/schemaRenderer/table/filters.d.ts +263 -0
  234. package/dist/react/schemaRenderer/table/filters.d.ts.map +1 -0
  235. package/dist/react/schemaRenderer/table/filters.js +497 -0
  236. package/dist/react/schemaRenderer/table/filters.js.map +1 -0
  237. package/dist/react/schemaRenderer/table/formatCell.d.ts +11 -0
  238. package/dist/react/schemaRenderer/table/formatCell.d.ts.map +1 -0
  239. package/dist/react/schemaRenderer/table/formatCell.js +172 -0
  240. package/dist/react/schemaRenderer/table/formatCell.js.map +1 -0
  241. package/dist/react/schemaRenderer/table/links.d.ts +42 -0
  242. package/dist/react/schemaRenderer/table/links.d.ts.map +1 -0
  243. package/dist/react/schemaRenderer/table/links.js +55 -0
  244. package/dist/react/schemaRenderer/table/links.js.map +1 -0
  245. package/dist/react/schemaRenderer/table/renderRowActions.d.ts +13 -0
  246. package/dist/react/schemaRenderer/table/renderRowActions.d.ts.map +1 -0
  247. package/dist/react/schemaRenderer/table/renderRowActions.js +25 -0
  248. package/dist/react/schemaRenderer/table/renderRowActions.js.map +1 -0
  249. package/dist/react/schemaRenderer/table/url.d.ts +41 -0
  250. package/dist/react/schemaRenderer/table/url.d.ts.map +1 -0
  251. package/dist/react/schemaRenderer/table/url.js +114 -0
  252. package/dist/react/schemaRenderer/table/url.js.map +1 -0
  253. package/dist/routes/globals.d.ts +13 -0
  254. package/dist/routes/globals.d.ts.map +1 -0
  255. package/dist/routes/globals.js +131 -0
  256. package/dist/routes/globals.js.map +1 -0
  257. package/dist/routes/helpers.d.ts +217 -0
  258. package/dist/routes/helpers.d.ts.map +1 -0
  259. package/dist/routes/helpers.js +498 -0
  260. package/dist/routes/helpers.js.map +1 -0
  261. package/dist/routes/pages.d.ts +15 -0
  262. package/dist/routes/pages.d.ts.map +1 -0
  263. package/dist/routes/pages.js +145 -0
  264. package/dist/routes/pages.js.map +1 -0
  265. package/dist/routes/panel.d.ts +19 -0
  266. package/dist/routes/panel.d.ts.map +1 -0
  267. package/dist/routes/panel.js +191 -0
  268. package/dist/routes/panel.js.map +1 -0
  269. package/dist/routes/relations.d.ts +21 -0
  270. package/dist/routes/relations.d.ts.map +1 -0
  271. package/dist/routes/relations.js +1239 -0
  272. package/dist/routes/relations.js.map +1 -0
  273. package/dist/routes/resources.d.ts +28 -0
  274. package/dist/routes/resources.d.ts.map +1 -0
  275. package/dist/routes/resources.js +741 -0
  276. package/dist/routes/resources.js.map +1 -0
  277. package/dist/routes/theme.d.ts +12 -0
  278. package/dist/routes/theme.d.ts.map +1 -0
  279. package/dist/routes/theme.js +82 -0
  280. package/dist/routes/theme.js.map +1 -0
  281. package/dist/routes.d.ts.map +1 -1
  282. package/dist/routes.js +64 -3078
  283. package/dist/routes.js.map +1 -1
  284. package/dist/vite.d.ts +1 -0
  285. package/dist/vite.d.ts.map +1 -1
  286. package/dist/vite.js +26 -5
  287. package/dist/vite.js.map +1 -1
  288. package/package.json +2 -1
  289. package/src/Pilotiq.ts +95 -0
  290. package/src/actions/Action.ts +79 -723
  291. package/src/actions/bulkFactories.ts +168 -0
  292. package/src/actions/crudFactories.ts +220 -0
  293. package/src/actions/factoryHelpers.ts +177 -0
  294. package/src/actions/m2mFactories.ts +193 -0
  295. package/src/actions/relationFactories.ts +372 -0
  296. package/src/elements/dispatchForm.ts +1 -1
  297. package/src/elements/dispatchTable.ts +1 -1
  298. package/src/fields/Field.ts +39 -0
  299. package/src/pageData/breadcrumbs.ts +288 -0
  300. package/src/pageData/forms.ts +578 -0
  301. package/src/pageData/helpers.ts +764 -0
  302. package/src/pageData/misc.ts +347 -0
  303. package/src/pageData/navigation.ts +779 -0
  304. package/src/pageData/relationPages.ts +1246 -0
  305. package/src/pageData/relationTabs.ts +286 -0
  306. package/src/pageData/resourcePages.ts +593 -0
  307. package/src/pageData.ts +122 -4731
  308. package/src/react/AppShell.tsx +27 -1
  309. package/src/react/CollabExtensionFactoryRegistry.ts +55 -0
  310. package/src/react/CollabRoomContext.ts +42 -0
  311. package/src/react/FormCollabBindingRegistry.ts +72 -0
  312. package/src/react/RecordWrapperGate.tsx +40 -0
  313. package/src/react/RecordWrapperRegistry.ts +39 -0
  314. package/src/react/SchemaRenderer.tsx +230 -6479
  315. package/src/react/component-slots.test.ts +103 -0
  316. package/src/react/component-slots.ts +116 -0
  317. package/src/react/fields/BuilderInput.tsx +29 -117
  318. package/src/react/fields/MarkdownInput.tsx +0 -1
  319. package/src/react/fields/RepeaterInput.tsx +29 -130
  320. package/src/react/fields/rowState.ts +106 -0
  321. package/src/react/fields/useRowReorderDnd.ts +78 -0
  322. package/src/react/index.ts +38 -0
  323. package/src/react/layouts/SidebarLayout.tsx +39 -28
  324. package/src/react/layouts/TopbarLayout.tsx +70 -57
  325. package/src/react/parseRecordEditUrl.test.ts +75 -0
  326. package/src/react/parseRecordEditUrl.ts +55 -0
  327. package/src/react/persistedState.ts +40 -0
  328. package/src/react/schemaRenderer/AlertRenderer.tsx +112 -0
  329. package/src/react/schemaRenderer/EntryRenderer.tsx +501 -0
  330. package/src/react/schemaRenderer/SectionRenderer.tsx +120 -0
  331. package/src/react/schemaRenderer/SimpleElements.tsx +306 -0
  332. package/src/react/schemaRenderer/TabsRenderer.tsx +62 -0
  333. package/src/react/schemaRenderer/WizardRenderer.tsx +338 -0
  334. package/src/react/schemaRenderer/action/ActionGroupTrigger.tsx +177 -0
  335. package/src/react/schemaRenderer/action/ActionModalDialog.tsx +273 -0
  336. package/src/react/schemaRenderer/action/ConfirmActionDialog.tsx +61 -0
  337. package/src/react/schemaRenderer/action/HandlerActionButton.tsx +43 -0
  338. package/src/react/schemaRenderer/action/MethodActionButton.tsx +64 -0
  339. package/src/react/schemaRenderer/action/buttons.tsx +99 -0
  340. package/src/react/schemaRenderer/action/helpers.ts +140 -0
  341. package/src/react/schemaRenderer/action/renderAction.tsx +245 -0
  342. package/src/react/schemaRenderer/columnFormat.ts +65 -0
  343. package/src/react/schemaRenderer/constants.ts +50 -0
  344. package/src/react/schemaRenderer/form/FormRenderer.tsx +233 -0
  345. package/src/react/schemaRenderer/form/renderField.tsx +511 -0
  346. package/src/react/schemaRenderer/helpers.tsx +81 -0
  347. package/src/react/schemaRenderer/table/CardsLayoutBody.tsx +308 -0
  348. package/src/react/schemaRenderer/table/TableRenderer.tsx +123 -0
  349. package/src/react/schemaRenderer/table/TableRendererBody.tsx +974 -0
  350. package/src/react/schemaRenderer/table/filters.tsx +1233 -0
  351. package/src/react/schemaRenderer/table/formatCell.tsx +264 -0
  352. package/src/react/schemaRenderer/table/links.tsx +112 -0
  353. package/src/react/schemaRenderer/table/renderRowActions.tsx +52 -0
  354. package/src/react/schemaRenderer/table/url.tsx +143 -0
  355. package/src/routes/globals.ts +154 -0
  356. package/src/routes/helpers.ts +668 -0
  357. package/src/routes/pages.ts +173 -0
  358. package/src/routes/panel.ts +204 -0
  359. package/src/routes/relations.ts +1219 -0
  360. package/src/routes/resources.ts +786 -0
  361. package/src/routes/theme.ts +109 -0
  362. package/src/routes.test.ts +1 -1
  363. package/src/routes.ts +64 -3176
  364. package/src/schema/TableWidget.test.ts +2 -2
  365. package/src/theme/migrate.test.ts +178 -0
  366. package/src/vite.test.ts +184 -0
  367. package/src/vite.ts +26 -4
@@ -0,0 +1,292 @@
1
+ import type { Pilotiq, PilotiqConfig } from '../Pilotiq.js';
2
+ import type { Page } from '../Page.js';
3
+ import type { ResourceClass, NavigationBadgeColor } from '../Resource.js';
4
+ import type { GlobalClass } from '../Global.js';
5
+ import type { ElementMeta } from '../schema/Element.js';
6
+ import type { ThemeMeta } from '../theme/types.js';
7
+ import { type SerializedIcon } from '../icons/types.js';
8
+ import type { UserMenuItemMeta } from '../UserMenuItem.js';
9
+ import { type RenderHookMap, type RenderHookName } from '../RenderHook.js';
10
+ import { type PageRole } from '../applyPageHooks.js';
11
+ /**
12
+ * Top-right user dropdown shipped to the renderer in `viewProps.panel`.
13
+ * `null` when no `Pilotiq.user(req => …)` resolver is configured or the
14
+ * resolver returns `null` (no logged-in user) — the renderer suppresses
15
+ * the dropdown entirely in that case.
16
+ *
17
+ * `user.name / user.email / user.avatar` are duck-typed off the
18
+ * resolver's return value; whichever fields are present round-trip into
19
+ * the dropdown trigger (initials fall back to the first two letters of
20
+ * `name` when no avatar URL is set).
21
+ */
22
+ export interface UserMenuMeta {
23
+ user: {
24
+ name?: string;
25
+ email?: string;
26
+ avatar?: string;
27
+ };
28
+ items: UserMenuItemMeta[];
29
+ signOut?: {
30
+ url: string;
31
+ label: string;
32
+ method: 'POST' | 'GET';
33
+ };
34
+ }
35
+ /**
36
+ * Bell-icon dropdown configuration shipped under `viewProps.panel`. Sparse —
37
+ * absent when `Pilotiq.databaseNotifications()` wasn't called OR when no
38
+ * user resolves (anonymous request → no inbox to surface). Renderer mounts
39
+ * the bell only when this is set.
40
+ *
41
+ * Routes are absolute URLs (panel `basePath` already applied). Client
42
+ * substitutes `:id` per row when calling read / unread; `_widget`-style
43
+ * params aren't used here because the bell only ever issues these four
44
+ * fetch shapes.
45
+ *
46
+ * `polling` mirrors `DatabaseNotificationsConfig.polling` — `null` ships
47
+ * over the wire to disable client-side polling. The bell still fetches on
48
+ * mount + after every mark-read mutation.
49
+ */
50
+ export interface DatabaseNotificationsMeta {
51
+ position: 'topbar' | 'sidebar';
52
+ polling: number | null;
53
+ pageSize: number;
54
+ badgeColor: NavigationBadgeColor;
55
+ trigger?: {
56
+ icon?: string;
57
+ label?: string;
58
+ };
59
+ listUrl: string;
60
+ readAllUrl: string;
61
+ /** Template URL with literal `:id` placeholder. Client replaces. */
62
+ readUrl: string;
63
+ /** Template URL with literal `:id` placeholder. Client replaces. */
64
+ unreadUrl: string;
65
+ /**
66
+ * Template URL for the notification-action dispatch endpoint with
67
+ * literal `:id` and `:actionName` placeholders. Bell client builds
68
+ * per-action URLs by substituting both at render time. Used only by
69
+ * `handler`-mode actions; `url` / `post` actions ride their own URL
70
+ * verbatim.
71
+ */
72
+ actionUrl: string;
73
+ /**
74
+ * Phase 2 — broadcast hint. Sparse — absent when
75
+ * `databaseNotifications({ broadcast: true })` wasn't set OR when no
76
+ * resolved user has an `id` to scope the channel to.
77
+ *
78
+ * Client connects to `wsUrl` via `@rudderjs/broadcast`'s
79
+ * `RudderSocket`, subscribes to the `channel` (already includes the
80
+ * `private-` prefix), and listens for `event` to trigger refetches.
81
+ */
82
+ broadcast?: {
83
+ wsUrl: string;
84
+ channel: string;
85
+ event: string;
86
+ };
87
+ }
88
+ /**
89
+ * Right-sidebar shipped under `viewProps.panel.rightSidebar`. Sparse —
90
+ * absent from `panelInfo()` when no contributions are registered, every
91
+ * registered contribution failed `canAccess(user)`, or every visible
92
+ * contribution is `hidden: true`. Renderer mounts the chrome only when
93
+ * this is set.
94
+ *
95
+ * The React component reference for each contribution does NOT travel
96
+ * here — only its tab-strip metadata. The actual body component is
97
+ * resolved client-side from the Vite plugin's `_components.ts` manifest
98
+ * keyed by contribution `id`, mirroring the icon-class round-trip.
99
+ *
100
+ * `defaultWidth` rolls up: contribution-level value when one
101
+ * contribution was registered with one, otherwise the panel-level
102
+ * baseline (`RIGHT_PANEL_DEFAULT_WIDTH`). Client also clamps
103
+ * localStorage values to `[minWidth, maxWidth]`.
104
+ */
105
+ export interface RightPanelMeta {
106
+ id: string;
107
+ label: string;
108
+ icon?: SerializedIcon;
109
+ defaultWidth: number;
110
+ }
111
+ export interface RightSidebarMeta {
112
+ panels: RightPanelMeta[];
113
+ defaultWidth: number;
114
+ minWidth: number;
115
+ maxWidth: number;
116
+ }
117
+ /**
118
+ * Single nav-tree entry. `name` is the JS class name (`R.name` /
119
+ * `G.name` / `P.name`) — also the lookup key into the build-time
120
+ * `_components.ts` manifest the Vite plugin emits, so component-typed
121
+ * icons resolve from the same identifier.
122
+ */
123
+ export interface NavItem {
124
+ name: string;
125
+ label: string;
126
+ url: string;
127
+ icon?: SerializedIcon;
128
+ group?: string;
129
+ sort?: number;
130
+ badge?: string;
131
+ badgeColor?: NavigationBadgeColor;
132
+ children?: NavItem[];
133
+ }
134
+ /**
135
+ * Build the panel header summary + the unified navigation tree.
136
+ *
137
+ * Pipeline:
138
+ * 1. flatten resources + globals + pages into raw NavItem records
139
+ * 2. drop items whose `canAccess(user)` (Plan #10) returns false
140
+ * 3. resolve `navigationParentItem` references → nest under parents
141
+ * (cycles broken with a console warn; dangling parents render at top level)
142
+ * 4. sort within each grouping (top-level *and* every parent's children)
143
+ * by `navigationSort` ascending → registration order
144
+ * 5. resolve every `navigationBadge()` in parallel via `Promise.all`;
145
+ * handler errors are swallowed (badge omitted) so a flaky count
146
+ * never blanks the page
147
+ *
148
+ * `req` is the active request; pilotiq calls `pilotiq.resolveUser(req)`
149
+ * once and threads the user into every Resource/Global/Page `canAccess`
150
+ * check. When `Pilotiq.user(fn)` isn't configured, user is `null` and the
151
+ * default `canAccess` returns true → no items dropped.
152
+ */
153
+ /**
154
+ * Optional route-context for `panelInfo()`. When set, render-hook
155
+ * `scope: { resource | page | global }` filters fire correctly for the
156
+ * active route. Missing keys mean the slot has no scope-able identifier
157
+ * (chrome-only routes); scope-less hooks still fire either way.
158
+ *
159
+ * `url` defaults to `cfg.path` when unset. `recordId` rides through to
160
+ * `RenderHookContext.recordId` for hooks that need it.
161
+ */
162
+ export interface PanelInfoRoute {
163
+ resource?: ResourceClass;
164
+ page?: typeof Page;
165
+ global?: GlobalClass;
166
+ recordId?: string;
167
+ url?: string;
168
+ }
169
+ export declare function panelInfo(pilotiq: Pilotiq, req?: unknown, route?: PanelInfoRoute): Promise<{
170
+ aiSuggestionsMode?: "review";
171
+ renderHooks?: Partial<Record<RenderHookName, ElementMeta[]>>;
172
+ rightSidebar?: RightSidebarMeta;
173
+ databaseNotifications?: DatabaseNotificationsMeta;
174
+ userMenu?: UserMenuMeta;
175
+ name: string;
176
+ branding: {
177
+ title?: string;
178
+ logo?: string;
179
+ };
180
+ navigation: NavItem[];
181
+ theme: ThemeMeta | undefined;
182
+ themeEditor: boolean;
183
+ }>;
184
+ /**
185
+ * Build the bell-icon meta. Returns `null` when:
186
+ * - `Pilotiq.databaseNotifications()` was never called, OR
187
+ * - no user resolves (no inbox to surface).
188
+ *
189
+ * Defaults follow Filament: 30s polling, 25 rows per page, primary
190
+ * badge color, topbar position.
191
+ */
192
+ export declare function buildDatabaseNotificationsMeta(cfg: Readonly<PilotiqConfig>, user: unknown): DatabaseNotificationsMeta | null;
193
+ /**
194
+ * Build the right-sidebar meta from registered contributions. Returns
195
+ * `null` when:
196
+ *
197
+ * - no contributions were registered, OR
198
+ * - every contribution failed `canAccess(user)` (or its predicate
199
+ * threw — fail-closed), OR
200
+ * - every passing contribution is `hidden: true` (no tab-strip
201
+ * surface to mount; programmatic-open consumers should ship at
202
+ * least one visible tab).
203
+ *
204
+ * Visible contributions are sorted by `sort` ascending (default 100),
205
+ * with registration order as a stable tiebreaker. Each entry's icon is
206
+ * serialized through `serializeIcon` keyed on the contribution `id`
207
+ * (Phase B's Vite plugin extends `_components.ts` to round-trip
208
+ * component-typed icons under that key). `defaultWidth` rolls up:
209
+ * panel-level baseline is `RIGHT_PANEL_DEFAULT_WIDTH`; per-contribution
210
+ * overrides ride on `RightPanelMeta.defaultWidth`.
211
+ *
212
+ * Errors thrown by `canAccess` are swallowed (the contribution is
213
+ * dropped + a single console warn is emitted) so a flaky predicate on
214
+ * one pane never blanks the whole sidebar.
215
+ */
216
+ export declare function buildRightSidebarMeta(cfg: Readonly<PilotiqConfig>, user: unknown): Promise<RightSidebarMeta | null>;
217
+ /**
218
+ * Resolve every chrome render hook (body / topbar / sidebar / user-menu
219
+ * / footer / head). Returns a sparse map — slots with no matching
220
+ * registered entries are omitted so the wire payload stays minimal on
221
+ * panels that don't use render hooks at all.
222
+ */
223
+ export declare function resolveChromeHooks(pilotiq: Pilotiq, user: unknown, route: PanelInfoRoute): Promise<RenderHookMap>;
224
+ /**
225
+ * Resolve a subset of page-role render hooks (e.g. `panels::page.start`
226
+ * + the list-records / create-record / view-record / edit-record /
227
+ * global-search slot families). Per-page-role data builders call this
228
+ * after schema resolution and stamp the result on `viewProps.renderHooks`.
229
+ *
230
+ * `names` lets each builder declare exactly which slots it serves so a
231
+ * list-page builder doesn't ship slots that only fire on the edit page.
232
+ */
233
+ /**
234
+ * Per-builder one-shot — resolve the role's slot set + splice the
235
+ * results into the resolved schema. Wraps the two steps a per-builder
236
+ * data fn always does in lockstep:
237
+ *
238
+ * 1. `resolvePageHooks(pilotiq, user, pageHooksFor(role), route)`
239
+ * 2. `applyPageHooks(schemaData, hooks, role)`
240
+ *
241
+ * Returns the wrapped `ElementMeta[]`. No-op when the panel has no
242
+ * registered hooks. Pass through what you'd pass to `panelInfo()`'s
243
+ * route arg — same shape.
244
+ */
245
+ export declare function applyRoleHooks(pilotiq: Pilotiq, user: unknown, role: PageRole, schemaData: ElementMeta[], route?: PanelInfoRoute): Promise<ElementMeta[]>;
246
+ export declare function resolvePageHooks(pilotiq: Pilotiq, user: unknown, names: readonly RenderHookName[], route: PanelInfoRoute): Promise<RenderHookMap>;
247
+ /**
248
+ * Build the top-right user-menu meta. Returns `null` when:
249
+ * - `Pilotiq.user()` isn't configured, or
250
+ * - the resolver returned `null` (anonymous request), or
251
+ * - the user object has no extractable identity AND the panel
252
+ * configured no items / no sign-out (nothing to render).
253
+ *
254
+ * Items resolve in parallel with their visibility predicates
255
+ * (`UserMenuItem.visible`). Throwing predicates fail closed (item
256
+ * dropped). Sort by `.sort(n)` ascending → registration order.
257
+ */
258
+ export declare function buildUserMenu(pilotiq: Pilotiq, user: unknown): Promise<UserMenuMeta | null>;
259
+ /** Build the auto-injected profile entry from `cfg.profilePage`. The
260
+ * Page's `static label` / `static icon` win; defaults `'Edit profile'`
261
+ * + `'user-circle'` (registry-resolved). Returns `null` when no
262
+ * profile page is configured or `Page.canAccess(user)` denies. */
263
+ export declare function buildProfileMenuItem(cfg: Readonly<PilotiqConfig>, user: unknown): Promise<UserMenuItemMeta | null>;
264
+ /** Duck-type the user object for display fields. We never throw — a
265
+ * user resolver might return literally anything (a primitive, a class
266
+ * instance with getters, a plain object) and the dropdown should
267
+ * degrade gracefully (initials fallback to '?' when no name found). */
268
+ export declare function extractUserIdentity(user: unknown): {
269
+ name?: string;
270
+ email?: string;
271
+ avatar?: string;
272
+ };
273
+ /** @internal Internal node before nesting; carries the registration index
274
+ * so we can stable-sort by it as the tie-breaker. */
275
+ interface RawNavItem extends NavItem {
276
+ parent?: string;
277
+ /** Registration index across resources → globals → pages (in that order),
278
+ * so resources beat globals on a sort tie within the same group. */
279
+ _idx: number;
280
+ }
281
+ /** Plan #10 — stamp the resolved user onto a SchemaContext so action
282
+ * visibility predicates can see it during `resolveSchema`. The `user`
283
+ * field is opaque (whatever `Pilotiq.user(req => …)` returns); skipped
284
+ * when null/undefined to keep ctx tidy. */
285
+ export declare function buildNavigation(pilotiq: Pilotiq, user: unknown): Promise<NavItem[]>;
286
+ /**
287
+ * Resolve `parent` references → nest, drop cycles, sort within each
288
+ * grouping, then strip internal scaffolding (`parent`, `_idx`).
289
+ */
290
+ export declare function nestAndSort(raw: RawNavItem[]): NavItem[];
291
+ export {};
292
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/pageData/navigation.ts"],"names":[],"mappings":"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"}