@pilotiq/pilotiq 0.7.1 → 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 +154 -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 +31 -10
  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 +31 -9
@@ -0,0 +1,288 @@
1
+ import type { PilotiqConfig } from '../Pilotiq.js'
2
+ import type { ResourceClass } from '../Resource.js'
3
+ import type { GlobalClass } from '../Global.js'
4
+ import type { ClusterClass } from '../Cluster.js'
5
+ import type { Page } from '../Page.js'
6
+ import type { RelationManager } from '../RelationManager.js'
7
+ import { clusterBasePath, resourceBasePath } from '../clusterPaths.js'
8
+ import { Breadcrumbs, type BreadcrumbItem } from '../schema/Breadcrumbs.js'
9
+
10
+ // ─── Breadcrumb builders ────────────────────────────────────
11
+ //
12
+ // All builders return `Breadcrumbs | undefined` so the route handler
13
+ // can spread the result into `schemaData` without a guard. Each path
14
+ // roles to a known crumb chain (Home / cluster? / Resource / record? /
15
+ // relation? / nested? / verb?).
16
+
17
+ /** Depth-2 chain shape — each step identifies a path through the
18
+ * manager tree. Lives here because both the breadcrumb builders and
19
+ * the depth-2 relation manager builders consume it. */
20
+ export interface RelationChainStep {
21
+ recordId: string
22
+ relationship: string
23
+ }
24
+
25
+
26
+ // `resourceBasePath`, etc., so a clustered resource resolves to
27
+ // `Home / Cluster / Resource / …` instead of skipping the cluster
28
+ // rung.
29
+
30
+ export function homeBreadcrumb(cfg: PilotiqConfig): BreadcrumbItem {
31
+ return {
32
+ label: cfg.branding?.title ?? cfg.name ?? 'Home',
33
+ url: cfg.path,
34
+ }
35
+ }
36
+
37
+ export function clusterBreadcrumb(cfg: PilotiqConfig, child: { cluster?: ClusterClass }): BreadcrumbItem | undefined {
38
+ if (!child.cluster) return undefined
39
+ return {
40
+ label: child.cluster.label,
41
+ url: clusterBasePath(cfg.path, child.cluster),
42
+ }
43
+ }
44
+
45
+ export function buildBreadcrumbs(items: BreadcrumbItem[]): Breadcrumbs | undefined {
46
+ // A single "Home" rung carries no information beyond the dashboard
47
+ // link the layout already exposes — drop it. Every other length is
48
+ // worth rendering.
49
+ if (items.length < 2) return undefined
50
+ return Breadcrumbs.make(items)
51
+ }
52
+
53
+ export function resourceListBreadcrumbs(cfg: PilotiqConfig, R: ResourceClass): Breadcrumbs | undefined {
54
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
55
+ const cluster = clusterBreadcrumb(cfg, R)
56
+ if (cluster) items.push(cluster)
57
+ items.push({ label: R.getBreadcrumb() })
58
+ return buildBreadcrumbs(items)
59
+ }
60
+
61
+ export function resourceCreateBreadcrumbs(cfg: PilotiqConfig, R: ResourceClass): Breadcrumbs | undefined {
62
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
63
+ const cluster = clusterBreadcrumb(cfg, R)
64
+ if (cluster) items.push(cluster)
65
+ items.push({ label: R.getBreadcrumb(), url: resourceBasePath(cfg.path, R) })
66
+ items.push({ label: 'Create' })
67
+ return buildBreadcrumbs(items)
68
+ }
69
+
70
+ export function resourceViewBreadcrumbs(cfg: PilotiqConfig, R: ResourceClass, recordTitle: string): Breadcrumbs | undefined {
71
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
72
+ const cluster = clusterBreadcrumb(cfg, R)
73
+ if (cluster) items.push(cluster)
74
+ items.push({ label: R.getBreadcrumb(), url: resourceBasePath(cfg.path, R) })
75
+ items.push({ label: recordTitle })
76
+ return buildBreadcrumbs(items)
77
+ }
78
+
79
+ export function resourceEditBreadcrumbs(
80
+ cfg: PilotiqConfig,
81
+ R: ResourceClass,
82
+ recordId: string,
83
+ recordTitle: string,
84
+ ): Breadcrumbs | undefined {
85
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
86
+ const cluster = clusterBreadcrumb(cfg, R)
87
+ if (cluster) items.push(cluster)
88
+ const resourceBase = resourceBasePath(cfg.path, R)
89
+ items.push({ label: R.getBreadcrumb(), url: resourceBase })
90
+ // Link the record title to the View page when registered — falls
91
+ // back to plain text so users who pruned ViewPage don't hit a 404.
92
+ const hasView = R.resolvePages().view !== undefined
93
+ items.push(hasView
94
+ ? { label: recordTitle, url: `${resourceBase}/${recordId}` }
95
+ : { label: recordTitle })
96
+ items.push({ label: 'Edit' })
97
+ return buildBreadcrumbs(items)
98
+ }
99
+
100
+ export function globalBreadcrumbs(cfg: PilotiqConfig, G: GlobalClass): Breadcrumbs | undefined {
101
+ // Globals don't have a list page — `Home > <Global Label>` is the
102
+ // shortest meaningful chain. Edit and View collapse to the same
103
+ // breadcrumb (both render the singleton).
104
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
105
+ const cluster = clusterBreadcrumb(cfg, G)
106
+ if (cluster) items.push(cluster)
107
+ items.push({ label: G.label })
108
+ return buildBreadcrumbs(items)
109
+ }
110
+
111
+ export function customPageBreadcrumbs(cfg: PilotiqConfig, P: typeof Page): Breadcrumbs | undefined {
112
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
113
+ const cluster = clusterBreadcrumb(cfg, P)
114
+ if (cluster) items.push(cluster)
115
+ items.push({ label: P.getLabel() })
116
+ return buildBreadcrumbs(items)
117
+ }
118
+
119
+ /** Common "Home / cluster? / Resource / parent record" prefix used by
120
+ * every relation-* / nested-relation-* breadcrumb. The parent record
121
+ * links to its View page when registered; the resource list is the
122
+ * fallback so users still have a back-link out of the relation chain. */
123
+ export function relationBreadcrumbPrefix(
124
+ cfg: PilotiqConfig,
125
+ R: ResourceClass,
126
+ parentId: string,
127
+ parentTitle: string,
128
+ ): BreadcrumbItem[] {
129
+ const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
130
+ const cluster = clusterBreadcrumb(cfg, R)
131
+ if (cluster) items.push(cluster)
132
+ const resourceBase = resourceBasePath(cfg.path, R)
133
+ items.push({ label: R.getBreadcrumb(), url: resourceBase })
134
+ const hasView = R.resolvePages().view !== undefined
135
+ items.push(hasView
136
+ ? { label: parentTitle, url: `${resourceBase}/${parentId}` }
137
+ : { label: parentTitle })
138
+ return items
139
+ }
140
+
141
+ export function relationListBreadcrumbs(
142
+ cfg: PilotiqConfig,
143
+ R: ResourceClass,
144
+ M: typeof RelationManager,
145
+ parentId: string,
146
+ parentTitle: string,
147
+ ): Breadcrumbs | undefined {
148
+ const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
149
+ items.push({ label: M.getLabel() })
150
+ return buildBreadcrumbs(items)
151
+ }
152
+
153
+ export function relationCreateBreadcrumbs(
154
+ cfg: PilotiqConfig,
155
+ R: ResourceClass,
156
+ M: typeof RelationManager,
157
+ parentId: string,
158
+ parentTitle: string,
159
+ ): Breadcrumbs | undefined {
160
+ const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
161
+ const relList = `${resourceBasePath(cfg.path, R)}/${parentId}/${M.getRelationship()}`
162
+ items.push({ label: M.getLabel(), url: relList })
163
+ items.push({ label: 'Create' })
164
+ return buildBreadcrumbs(items)
165
+ }
166
+
167
+ export function relationViewBreadcrumbs(
168
+ cfg: PilotiqConfig,
169
+ R: ResourceClass,
170
+ M: typeof RelationManager,
171
+ parentId: string,
172
+ parentTitle: string,
173
+ childTitle: string,
174
+ ): Breadcrumbs | undefined {
175
+ const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
176
+ const relList = `${resourceBasePath(cfg.path, R)}/${parentId}/${M.getRelationship()}`
177
+ items.push({ label: M.getLabel(), url: relList })
178
+ items.push({ label: childTitle })
179
+ return buildBreadcrumbs(items)
180
+ }
181
+
182
+ export function relationEditBreadcrumbs(
183
+ cfg: PilotiqConfig,
184
+ R: ResourceClass,
185
+ M: typeof RelationManager,
186
+ parentId: string,
187
+ parentTitle: string,
188
+ childId: string,
189
+ childTitle: string,
190
+ ): Breadcrumbs | undefined {
191
+ const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
192
+ const relBase = `${resourceBasePath(cfg.path, R)}/${parentId}/${M.getRelationship()}`
193
+ items.push({ label: M.getLabel(), url: relBase })
194
+ // Phase A always mounts the relation-view page per (R, M), so the
195
+ // child title can always link back to it.
196
+ items.push({ label: childTitle, url: `${relBase}/${childId}` })
197
+ items.push({ label: 'Edit' })
198
+ return buildBreadcrumbs(items)
199
+ }
200
+
201
+ /** Phase B — depth-2 prefix shared by every nested-relation-* role.
202
+ * Returns "Home / cluster? / Resource / parent / M1 / child1". */
203
+ export function nestedRelationBreadcrumbPrefix(
204
+ cfg: PilotiqConfig,
205
+ R: ResourceClass,
206
+ M1: typeof RelationManager,
207
+ step0: RelationChainStep,
208
+ parentTitle: string,
209
+ child1Id: string,
210
+ child1Title: string,
211
+ ): BreadcrumbItem[] {
212
+ const items = relationBreadcrumbPrefix(cfg, R, step0.recordId, parentTitle)
213
+ const rel1Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}`
214
+ items.push({ label: M1.getLabel(), url: rel1Base })
215
+ // Phase A relation-view always mounted, so child1 always links.
216
+ items.push({ label: child1Title, url: `${rel1Base}/${child1Id}` })
217
+ return items
218
+ }
219
+
220
+ export function nestedRelationListBreadcrumbs(
221
+ cfg: PilotiqConfig,
222
+ R: ResourceClass,
223
+ M1: typeof RelationManager,
224
+ M2: typeof RelationManager,
225
+ step0: RelationChainStep,
226
+ parentTitle: string,
227
+ child1Id: string,
228
+ child1Title: string,
229
+ ): Breadcrumbs | undefined {
230
+ const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
231
+ items.push({ label: M2.getLabel() })
232
+ return buildBreadcrumbs(items)
233
+ }
234
+
235
+ export function nestedRelationCreateBreadcrumbs(
236
+ cfg: PilotiqConfig,
237
+ R: ResourceClass,
238
+ M1: typeof RelationManager,
239
+ M2: typeof RelationManager,
240
+ step0: RelationChainStep,
241
+ parentTitle: string,
242
+ child1Id: string,
243
+ child1Title: string,
244
+ ): Breadcrumbs | undefined {
245
+ const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
246
+ const rel2Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}/${child1Id}/${M2.getRelationship()}`
247
+ items.push({ label: M2.getLabel(), url: rel2Base })
248
+ items.push({ label: 'Create' })
249
+ return buildBreadcrumbs(items)
250
+ }
251
+
252
+ export function nestedRelationViewBreadcrumbs(
253
+ cfg: PilotiqConfig,
254
+ R: ResourceClass,
255
+ M1: typeof RelationManager,
256
+ M2: typeof RelationManager,
257
+ step0: RelationChainStep,
258
+ parentTitle: string,
259
+ child1Id: string,
260
+ child1Title: string,
261
+ child2Title: string,
262
+ ): Breadcrumbs | undefined {
263
+ const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
264
+ const rel2Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}/${child1Id}/${M2.getRelationship()}`
265
+ items.push({ label: M2.getLabel(), url: rel2Base })
266
+ items.push({ label: child2Title })
267
+ return buildBreadcrumbs(items)
268
+ }
269
+
270
+ export function nestedRelationEditBreadcrumbs(
271
+ cfg: PilotiqConfig,
272
+ R: ResourceClass,
273
+ M1: typeof RelationManager,
274
+ M2: typeof RelationManager,
275
+ step0: RelationChainStep,
276
+ parentTitle: string,
277
+ child1Id: string,
278
+ child1Title: string,
279
+ child2Id: string,
280
+ child2Title: string,
281
+ ): Breadcrumbs | undefined {
282
+ const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
283
+ const rel2Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}/${child1Id}/${M2.getRelationship()}`
284
+ items.push({ label: M2.getLabel(), url: rel2Base })
285
+ items.push({ label: child2Title, url: `${rel2Base}/${child2Id}` })
286
+ items.push({ label: 'Edit' })
287
+ return buildBreadcrumbs(items)
288
+ }