@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,62 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { readStoredFlag, writeStoredFlag } from '../persistedState.js';
4
+ import { layoutClasses, resolveIcon } from './helpers.js';
5
+ // ─── Section (stateful when collapsible) ────────────────────
6
+ /**
7
+ * `Section` chrome with optional collapse + persisted open/closed state.
8
+ * Renders a card-style border, header (title / description / icon / badge
9
+ * / after-header actions), body, and the collapse toggle when enabled.
10
+ *
11
+ * `renderElement` is injected so the body can re-enter the main switch
12
+ * without creating a SchemaRenderer ↔ SectionRenderer import cycle.
13
+ */
14
+ export function SectionRenderer({ el, index, renderElement, }) {
15
+ const title = el['title'] ? String(el['title']) : undefined;
16
+ const description = el['description'] ? String(el['description']) : undefined;
17
+ const iconName = el['icon'] ? String(el['icon']) : undefined;
18
+ const badge = el['badge'] ? String(el['badge']) : undefined;
19
+ const columns = Number(el['columns'] ?? 1);
20
+ const collapsible = Boolean(el['collapsible']);
21
+ const compact = Boolean(el['compact']);
22
+ const dense = Boolean(el['dense']);
23
+ const secondary = Boolean(el['secondary']);
24
+ const afterHeader = el['afterHeader'] ?? [];
25
+ const persist = Boolean(el['persistCollapsed']);
26
+ const persistKey = el['persistKey']
27
+ ? `pilotiq.section.${String(el['persistKey'])}`
28
+ : title
29
+ ? `pilotiq.section.${title.toLowerCase().replace(/\s+/g, '-')}`
30
+ : undefined;
31
+ const defaultCollapsed = Boolean(el['defaultCollapsed']);
32
+ const [collapsed, setCollapsed] = useState(defaultCollapsed);
33
+ // Plan #8 — persist open/closed state to localStorage. Hydration-safe:
34
+ // initial render uses `defaultCollapsed`; effect overrides from storage
35
+ // after mount so server + client first paint agree.
36
+ useEffect(() => {
37
+ if (!persist || !persistKey)
38
+ return;
39
+ setCollapsed(readStoredFlag(persistKey, defaultCollapsed));
40
+ }, [persist, persistKey, defaultCollapsed]);
41
+ useEffect(() => {
42
+ if (!persist || !persistKey)
43
+ return;
44
+ writeStoredFlag(persistKey, collapsed);
45
+ }, [persist, persistKey, collapsed]);
46
+ // `dense` tightens the inner spacing between the section's children
47
+ // (orthogonal to `compact`, which trims the section's outer padding /
48
+ // heading). gap-2 ≈ 8px vs gap-4 ≈ 16px.
49
+ const innerGap = dense ? 'gap-2' : 'gap-4';
50
+ const gridClass = columns === 2 ? `grid grid-cols-2 ${innerGap}` : columns === 3 ? `grid grid-cols-3 ${innerGap}` : `flex flex-col ${innerGap}`;
51
+ const padding = compact ? 'p-3' : 'p-4';
52
+ const titleSize = compact ? 'text-sm' : 'text-base';
53
+ const Icon = resolveIcon(iconName);
54
+ // `secondary()` flips the section background to the muted token so it
55
+ // visually recedes beneath a primary section. The border thins to the
56
+ // same muted tone for the same reason — a sharp `border-input` line
57
+ // around a muted block looks like a typographic ledger rather than a
58
+ // grouping container.
59
+ const surfaceClass = secondary ? 'bg-muted/40 border-muted' : 'bg-card';
60
+ return (_jsxs("section", { className: `flex flex-col ${compact ? 'gap-2' : 'gap-3'} rounded-lg border ${surfaceClass} ${padding} ${layoutClasses(el)}`.trim(), children: [(title || description || collapsible || badge || afterHeader.length > 0) && (_jsxs("header", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex items-start gap-2", children: [Icon && _jsx(Icon, { className: "size-4 mt-0.5 text-muted-foreground", "aria-hidden": "true" }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [title && _jsx("h3", { className: `${titleSize} font-semibold`, children: title }), badge && (_jsx("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: badge }))] }), description && _jsx("p", { className: "text-xs text-muted-foreground mt-0.5", children: description })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [afterHeader.length > 0 && (_jsx("div", { className: "flex items-center gap-1", children: afterHeader.map((a, i) => renderElement(a, i)) })), collapsible && (_jsx("button", { type: "button", onClick: () => setCollapsed(c => !c), className: "text-xs text-muted-foreground hover:text-foreground", children: collapsed ? 'Expand' : 'Collapse' }))] })] })), !collapsed && el.children && el.children.length > 0 && (_jsx("div", { className: gridClass, children: el.children.map((c, i) => renderElement(c, i)) }))] }, index));
61
+ }
62
+ //# sourceMappingURL=SectionRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionRenderer.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/SectionRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import type { ElementMeta } from '../../schema/Element.js';
3
+ /** Stateless leaf renderers — every element here is a pure function of
4
+ * its meta. Cases that own children defer back to the caller's
5
+ * `renderElement` via `deps.renderElement`. Cases that mount Action
6
+ * triggers in header / footer slots defer to `deps.renderActionLike`.
7
+ *
8
+ * `renderSimpleElement` returns `null` only when the type is one of the
9
+ * handled leaves and resolves to no output (e.g. `icon` with no
10
+ * registered name). For unknown types it returns the sentinel
11
+ * `undefined` so the caller falls through to the rest of its switch. */
12
+ export interface SimpleElementDeps {
13
+ /** Recurse into a child element. Injected to avoid the cycle with
14
+ * SchemaRenderer's main dispatch. */
15
+ renderElement: (el: ElementMeta, index: number) => React.ReactNode;
16
+ /** Render an action / actionGroup / slotComponent meta as a button or
17
+ * trigger. Used by `heading` and `emptyState` for their header /
18
+ * footer action slots. */
19
+ renderActionLike: (el: ElementMeta, index: number) => React.ReactNode;
20
+ }
21
+ /** Dispatch helper for stateless leaf + layout-primitive element types.
22
+ * Returns `undefined` when the type isn't handled here, letting the
23
+ * caller fall through to its remaining switch arms. */
24
+ export declare function renderSimpleElement(el: ElementMeta, index: number, deps: SimpleElementDeps): React.ReactNode | undefined;
25
+ //# sourceMappingURL=SimpleElements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleElements.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/SimpleElements.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAU1D;;;;;;;;yEAQyE;AAEzE,MAAM,WAAW,iBAAiB;IAChC;0CACsC;IACtC,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAClE;;+BAE2B;IAC3B,gBAAgB,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;CACtE;AAmCD;;wDAEwD;AACxD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,iBAAiB,GACtB,KAAK,CAAC,SAAS,GAAG,SAAS,CA0O7B"}
@@ -0,0 +1,147 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BADGE_COLOR_CLASSES, COLUMN_COLOR_CLASSES, TEXT_COLOR_CLASSES, TEXT_SIZE_CLASSES, TEXT_WEIGHT_CLASSES, } from './constants.js';
3
+ import { layoutClasses, renderChildren, resolveIcon } from './helpers.js';
4
+ /** Render the `text` element. Hot path — pulled out so the `case 'text'`
5
+ * branch in the main switch stays a one-liner. */
6
+ function renderText(el, index) {
7
+ const content = String(el['content'] ?? '');
8
+ const color = el['color'] ? String(el['color']) : undefined;
9
+ const size = el['size'] ? String(el['size']) : undefined;
10
+ const weight = el['weight'] ? String(el['weight']) : undefined;
11
+ const isBadge = el['badge'] === true;
12
+ if (isBadge) {
13
+ const badgeKey = el['badgeColor'] ? String(el['badgeColor']) : 'gray';
14
+ const cls = BADGE_COLOR_CLASSES[badgeKey] ?? BADGE_COLOR_CLASSES['gray'];
15
+ return (_jsx("span", { className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${cls}`, children: content }, index));
16
+ }
17
+ // Defaults match the previous bare `<p>` for back-compat: text-sm + muted.
18
+ const sizeCls = size ? (TEXT_SIZE_CLASSES[size] ?? '') : 'text-sm';
19
+ const colorCls = color ? (TEXT_COLOR_CLASSES[color] ?? '') : 'text-muted-foreground';
20
+ const weightCls = weight ? (TEXT_WEIGHT_CLASSES[weight] ?? '') : '';
21
+ return (_jsx("p", { className: `${sizeCls} ${colorCls} ${weightCls}`.trim(), children: content }, index));
22
+ }
23
+ /** Dispatch helper for stateless leaf + layout-primitive element types.
24
+ * Returns `undefined` when the type isn't handled here, letting the
25
+ * caller fall through to its remaining switch arms. */
26
+ export function renderSimpleElement(el, index, deps) {
27
+ const { renderElement, renderActionLike } = deps;
28
+ switch (el.type) {
29
+ case 'text':
30
+ return renderText(el, index);
31
+ case 'image': {
32
+ const url = String(el['url'] ?? '');
33
+ const alt = String(el['alt'] ?? '');
34
+ const width = el['width'];
35
+ const height = el['height'];
36
+ const shape = String(el['shape'] ?? 'square');
37
+ const shapeCls = shape === 'circle' ? 'rounded-full' : shape === 'rounded' ? 'rounded-md' : '';
38
+ return (_jsx("img", { src: url, alt: alt, ...(width !== undefined ? { width } : {}), ...(height !== undefined ? { height } : {}), className: `inline-block object-cover ${shapeCls}` }, index));
39
+ }
40
+ case 'icon': {
41
+ const name = el['name'] ? String(el['name']) : undefined;
42
+ const size = el['size'] ?? 16;
43
+ const color = String(el['color'] ?? 'default');
44
+ const label = el['label'] ? String(el['label']) : undefined;
45
+ const Cmp = resolveIcon(name);
46
+ if (!Cmp)
47
+ return null;
48
+ const colorClass = COLUMN_COLOR_CLASSES[color] ?? '';
49
+ return (_jsx(Cmp, { className: `inline ${colorClass}`, ...(label ? { 'aria-label': label } : { 'aria-hidden': true }), style: { width: size, height: size } }, index));
50
+ }
51
+ case 'markdown':
52
+ case 'html': {
53
+ const html = String(el['html'] ?? '');
54
+ const prose = el['prose'] !== false;
55
+ const size = el['size'] ? String(el['size']) : undefined;
56
+ const proseCls = prose
57
+ ? `prose max-w-none ${size === 'sm' ? 'prose-sm' : size === 'lg' ? 'prose-lg' : ''}`.trim()
58
+ : '';
59
+ return (_jsx("div", { className: proseCls || undefined, dangerouslySetInnerHTML: { __html: html } }, index));
60
+ }
61
+ case 'heading': {
62
+ const level = el['level'] ?? 1;
63
+ const content = String(el['content'] ?? '');
64
+ const description = el['description'] ? String(el['description']) : undefined;
65
+ const headerActions = (el.children ?? []).filter(c => c.type === 'action' || c.type === 'actionGroup' || c.type === 'slotComponent');
66
+ const Tag = level === 1 ? 'h1' : level === 2 ? 'h2' : 'h3';
67
+ const sizes = { 1: 'text-2xl', 2: 'text-xl', 3: 'text-lg' };
68
+ const titleBlock = (_jsxs("div", { children: [_jsx(Tag, { className: `${sizes[level]} font-bold tracking-tight`, children: content }), description && (_jsx("p", { className: "text-sm text-muted-foreground mt-1", children: description }))] }));
69
+ if (headerActions.length === 0) {
70
+ return _jsx("div", { children: titleBlock }, index);
71
+ }
72
+ return (_jsxs("div", { className: "flex items-start justify-between gap-4", children: [titleBlock, _jsx("div", { className: "flex items-center gap-2 shrink-0", children: headerActions.map((a, i) => renderActionLike(a, i)) })] }, index));
73
+ }
74
+ case 'emptyState': {
75
+ const heading = String(el['heading'] ?? '');
76
+ const description = el['description'] ? String(el['description']) : undefined;
77
+ const iconName = el['icon'] ? String(el['icon']) : undefined;
78
+ const contained = el['contained'] !== false;
79
+ const Icon = iconName ? resolveIcon(iconName) : undefined;
80
+ const footer = (el.children ?? []).filter(c => c.type === 'action' || c.type === 'actionGroup' || c.type === 'slotComponent');
81
+ const wrapper = contained
82
+ ? 'rounded-lg border border-border bg-card text-card-foreground py-12 px-6'
83
+ : 'py-8';
84
+ return (_jsxs("div", { className: `${wrapper} flex flex-col items-center text-center gap-3`, children: [Icon && _jsx(Icon, { className: "size-10 text-muted-foreground", "aria-hidden": "true" }), _jsx("h3", { className: "text-lg font-semibold", children: heading }), description && _jsx("p", { className: "text-sm text-muted-foreground max-w-md", children: description }), footer.length > 0 && (_jsx("div", { className: "flex items-center gap-2 mt-2", children: footer.map((a, i) => renderActionLike(a, i)) }))] }, index));
85
+ }
86
+ case 'divider': {
87
+ const label = el['label'] ? String(el['label']) : undefined;
88
+ return label
89
+ ? _jsxs("div", { className: "relative py-2", children: [_jsx("div", { className: "absolute inset-0 flex items-center", children: _jsx("span", { className: "w-full border-t border-border" }) }), _jsx("div", { className: "relative flex justify-center", children: _jsx("span", { className: "bg-background px-2 text-xs text-muted-foreground", children: label }) })] }, index)
90
+ : _jsx("hr", { className: "border-border" }, index);
91
+ }
92
+ case 'unorderedList': {
93
+ const items = el['items'] ?? [];
94
+ const color = el['color'] ? String(el['color']) : undefined;
95
+ const size = el['size'] ? String(el['size']) : undefined;
96
+ const weight = el['weight'] ? String(el['weight']) : undefined;
97
+ const sizeCls = size ? (TEXT_SIZE_CLASSES[size] ?? '') : 'text-sm';
98
+ const colorCls = color ? (TEXT_COLOR_CLASSES[color] ?? '') : '';
99
+ const weightCls = weight ? (TEXT_WEIGHT_CLASSES[weight] ?? '') : '';
100
+ return (_jsx("ul", { className: `list-disc list-inside space-y-1 ${sizeCls} ${colorCls} ${weightCls}`.trim(), children: items.map((item, i) => (_jsx("li", { children: String(item) }, i))) }, index));
101
+ }
102
+ case 'card': {
103
+ const title = el['title'] ? String(el['title']) : undefined;
104
+ const description = el['description'] ? String(el['description']) : undefined;
105
+ return (_jsxs("div", { className: "rounded-xl border bg-card p-6 shadow-sm", children: [title && _jsx("h3", { className: "font-semibold mb-1", children: title }), description && _jsx("p", { className: "text-sm text-muted-foreground mb-4", children: description }), renderChildren(el.children, 'gap-4', renderElement)] }, index));
106
+ }
107
+ case 'grid': {
108
+ const columns = Math.max(1, Math.min(12, Number(el['columns'] ?? 2)));
109
+ const gapPx = el['gap'] !== undefined ? `${Number(el['gap'])}px` : undefined;
110
+ return (_jsx("div", { className: `grid gap-4 ${layoutClasses(el)}`.trim(), style: {
111
+ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,
112
+ ...(gapPx ? { gap: gapPx } : {}),
113
+ }, children: (el.children ?? []).map((c, i) => renderElement(c, i)) }, index));
114
+ }
115
+ case 'group': {
116
+ const layout = layoutClasses(el);
117
+ return (_jsx("div", { className: layout || undefined, children: renderChildren(el.children, 'gap-4', renderElement) }, index));
118
+ }
119
+ case 'split': {
120
+ const from = el['from'] === 'left' ? 'left' : 'right';
121
+ const gap = Math.max(0, Math.min(12, Number(el['gap'] ?? 6)));
122
+ const children = el.children ?? [];
123
+ // Find the explicit aside child first; fall back to "second child is
124
+ // aside" so terse Split.make().schema([main, aside]) still works.
125
+ let asideIdx = children.findIndex(c => c['aside'] === true);
126
+ if (asideIdx === -1 && children.length >= 2)
127
+ asideIdx = 1;
128
+ const mainChildren = children.filter((_, i) => i !== asideIdx);
129
+ const asideChild = asideIdx >= 0 ? children[asideIdx] : undefined;
130
+ const orderClasses = from === 'left'
131
+ ? { aside: '@md:order-first', main: '@md:order-last' }
132
+ : { aside: '@md:order-last', main: '@md:order-first' };
133
+ return (_jsxs("div", { className: `@container flex flex-col @md:flex-row gap-${gap} ${layoutClasses(el)}`.trim(), children: [_jsx("div", { className: `flex flex-col gap-4 flex-1 min-w-0 ${orderClasses.main}`, children: mainChildren.map((c, i) => renderElement(c, i)) }), asideChild && (_jsx("aside", { className: `flex flex-col gap-4 @md:w-80 @md:shrink-0 ${orderClasses.aside}`, children: renderElement(asideChild, asideIdx) }))] }, index));
134
+ }
135
+ case 'fieldset': {
136
+ const label = String(el['label'] ?? '');
137
+ const columns = Math.max(1, Math.min(3, Number(el['columns'] ?? 1)));
138
+ const gridStyle = columns > 1
139
+ ? { display: 'grid', gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`, gap: '1rem' }
140
+ : undefined;
141
+ return (_jsxs("fieldset", { className: `rounded-md border border-border px-4 pt-3 pb-4 ${layoutClasses(el)}`.trim(), children: [label && _jsx("legend", { className: "px-1 text-xs font-medium text-muted-foreground", children: label }), _jsx("div", { className: columns === 1 ? 'flex flex-col gap-3' : undefined, style: gridStyle, children: (el.children ?? []).map((c, i) => renderElement(c, i)) })] }, index));
142
+ }
143
+ default:
144
+ return undefined;
145
+ }
146
+ }
147
+ //# sourceMappingURL=SimpleElements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleElements.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/SimpleElements.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { ElementMeta } from '../../schema/Element.js';
3
+ /**
4
+ * Top-level `Tabs` element. Variants:
5
+ * - `'pills'` (default) — uses the shadcn Tabs primitive's stock chrome.
6
+ * - `'underline'` — flat tab strip with a bottom border and per-tab
7
+ * underline on selection.
8
+ *
9
+ * `renderElement` is injected for the body content of each tab so the
10
+ * renderer can recurse without re-importing the main switch.
11
+ */
12
+ export declare function TabsRenderer({ el, index, renderElement, }: {
13
+ el: ElementMeta;
14
+ index: number;
15
+ renderElement: (el: ElementMeta, index: number) => React.ReactNode;
16
+ }): import("react/jsx-runtime").JSX.Element | null;
17
+ //# sourceMappingURL=TabsRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsRenderer.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/TabsRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAI1D;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,aAAa,GACd,EAAE;IACD,EAAE,EAAa,WAAW,CAAA;IAC1B,KAAK,EAAU,MAAM,CAAA;IACrB,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;CACnE,kDAuCA"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs.js';
3
+ import { renderChildren } from './helpers.js';
4
+ /**
5
+ * Top-level `Tabs` element. Variants:
6
+ * - `'pills'` (default) — uses the shadcn Tabs primitive's stock chrome.
7
+ * - `'underline'` — flat tab strip with a bottom border and per-tab
8
+ * underline on selection.
9
+ *
10
+ * `renderElement` is injected for the body content of each tab so the
11
+ * renderer can recurse without re-importing the main switch.
12
+ */
13
+ export function TabsRenderer({ el, index, renderElement, }) {
14
+ const tabs = (el.children ?? []).filter(c => c.type === 'tab');
15
+ if (tabs.length === 0)
16
+ return null;
17
+ const variant = el['variant'] === 'underline' ? 'underline' : 'pills';
18
+ const tabValues = tabs.map((_, i) => `tab-${i}`);
19
+ const defaultValue = tabValues[0];
20
+ // Underline variant overrides the primitive's pill chrome with a bottom
21
+ // border on the list and per-trigger underline-on-selected. No
22
+ // `<TabsIndicator>` is rendered, so there's no sliding pill to hide.
23
+ const listClass = variant === 'underline'
24
+ ? 'relative flex h-auto w-fit justify-start gap-0 rounded-none bg-transparent p-0 text-muted-foreground border-b border-border'
25
+ : undefined;
26
+ const triggerClass = variant === 'underline'
27
+ ? 'rounded-none border-0 border-b-2 border-transparent bg-transparent px-4 py-2 text-sm font-medium -mb-px data-[active]:border-primary data-[active]:text-foreground data-[active]:bg-transparent data-[active]:shadow-none'
28
+ : undefined;
29
+ return (_jsxs(Tabs, { defaultValue: defaultValue, children: [_jsx(TabsList, { className: listClass, children: tabs.map((tab, i) => (_jsxs(TabsTrigger, { value: tabValues[i], className: triggerClass, children: [String(tab['label'] ?? ''), tab['badge'] ? (_jsx("span", { className: "ml-2 text-xs px-1.5 py-0.5 rounded-full bg-muted", children: String(tab['badge']) })) : null] }, i))) }), tabs.map((tab, i) => (_jsx(TabsContent, { value: tabValues[i], className: "pt-2", children: renderChildren(tab['children'], 'gap-4', renderElement) }, i)))] }, index));
30
+ }
31
+ //# sourceMappingURL=TabsRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsRenderer.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/TabsRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,aAAa,GAKd;IACC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;IAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,OAAO,GAAK,EAAE,CAAC,SAAS,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAE,CAAA;IAElC,wEAAwE;IACxE,+DAA+D;IAC/D,qEAAqE;IACrE,MAAM,SAAS,GAAG,OAAO,KAAK,WAAW;QACvC,CAAC,CAAC,6HAA6H;QAC/H,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,YAAY,GAAG,OAAO,KAAK,WAAW;QAC1C,CAAC,CAAC,2NAA2N;QAC7N,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO,CACL,MAAC,IAAI,IAAa,YAAY,EAAE,YAAY,aAC1C,KAAC,QAAQ,IAAC,SAAS,EAAE,SAAS,YAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,MAAC,WAAW,IAAS,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,SAAS,EAAE,YAAY,aAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACd,eAAM,SAAS,EAAC,kDAAkD,YAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAChB,CACR,CAAC,CAAC,CAAC,IAAI,KANQ,CAAC,CAOL,CACf,CAAC,GACO,EACV,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,KAAC,WAAW,IAAS,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,SAAS,EAAC,MAAM,YACxD,cAAc,CAAC,GAAG,CAAC,UAAU,CAA8B,EAAE,OAAO,EAAE,aAAa,CAAC,IADrE,CAAC,CAEL,CACf,CAAC,KAjBO,KAAK,CAkBT,CACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import type { ElementMeta } from '../../schema/Element.js';
3
+ /**
4
+ * Deps injected from the top-level dispatch so the wizard body can
5
+ * recurse into the main element renderer without creating a cycle
6
+ * with SchemaRenderer.tsx.
7
+ */
8
+ export interface WizardRendererDeps {
9
+ renderElement: (el: ElementMeta, index: number) => React.ReactNode;
10
+ }
11
+ /**
12
+ * Multi-step form layout. Tracks active step in `useState`, optionally
13
+ * persisted to localStorage and/or the URL query string. On Next click,
14
+ * POSTs `{ step, values }` to the form's `wizardUrl` (stamped by the
15
+ * route handler when the form has a Wizard descendant). 200 → advance;
16
+ * 422 → stamp inline errors; absent `wizardUrl` → advance immediately
17
+ * (no validation).
18
+ *
19
+ * Inactive steps render hidden (display:none) rather than unmounted so
20
+ * controlled inputs preserve their values across step transitions and
21
+ * cross-step `$get` works on the resolved meta.
22
+ *
23
+ * Nav buttons honor `Wizard.submitAction() / nextAction() / previousAction()`
24
+ * — chrome (label / icon / color / size / outlined / iconOnly / tooltip /
25
+ * disabled rules) carries through to the rendered button while the click
26
+ * behavior stays hardwired (advance / recede / submit-form). Bare wizards
27
+ * keep the built-in defaults.
28
+ */
29
+ export declare function WizardRenderer({ el, index, deps, }: {
30
+ el: ElementMeta;
31
+ index: number;
32
+ deps: WizardRendererDeps;
33
+ }): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=WizardRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WizardRenderer.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/WizardRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAQ1D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;CACnE;AAqCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,IAAI,GACL,EAAE;IACD,EAAE,EAAK,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAG,kBAAkB,CAAA;CAC1B,2CA+LA"}
@@ -0,0 +1,208 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { useFormState } from '../FormStateContext.js';
4
+ import { readStoredString, writeStoredString } from '../persistedState.js';
5
+ import { layoutClasses, resolveIcon, withTooltip } from './helpers.js';
6
+ import { actionButtonClass, renderActionBadge, renderActionIcon } from './action/buttons.js';
7
+ /**
8
+ * Resolve the initial active step for `WizardRenderer`. Priority:
9
+ * 1. URL `?<queryKey>=N` (1-based — wizards expose human-friendly indexes
10
+ * when `Wizard.persistStepInQueryString()` is enabled).
11
+ * 2. `localStorage[<storageKey>]` (0-based, set by the persist effect).
12
+ * 3. `startOnStep` configured on the Wizard.
13
+ *
14
+ * SSR-safe: returns `startOnStep` when `window` is undefined.
15
+ */
16
+ function readInitialWizardStep(total, startOnStep, storageKey, queryKey) {
17
+ if (typeof window === 'undefined')
18
+ return startOnStep;
19
+ if (queryKey) {
20
+ try {
21
+ const raw = new URL(window.location.href).searchParams.get(queryKey);
22
+ if (raw !== null && raw !== '') {
23
+ const n = Number(raw) - 1;
24
+ if (Number.isFinite(n) && n >= 0 && n < total)
25
+ return n;
26
+ }
27
+ }
28
+ catch { /* ignore */ }
29
+ }
30
+ if (storageKey) {
31
+ const stored = readStoredString(storageKey);
32
+ if (stored !== null) {
33
+ const n = Number(stored);
34
+ if (Number.isFinite(n) && n >= 0 && n < total)
35
+ return n;
36
+ }
37
+ }
38
+ return startOnStep;
39
+ }
40
+ /**
41
+ * Multi-step form layout. Tracks active step in `useState`, optionally
42
+ * persisted to localStorage and/or the URL query string. On Next click,
43
+ * POSTs `{ step, values }` to the form's `wizardUrl` (stamped by the
44
+ * route handler when the form has a Wizard descendant). 200 → advance;
45
+ * 422 → stamp inline errors; absent `wizardUrl` → advance immediately
46
+ * (no validation).
47
+ *
48
+ * Inactive steps render hidden (display:none) rather than unmounted so
49
+ * controlled inputs preserve their values across step transitions and
50
+ * cross-step `$get` works on the resolved meta.
51
+ *
52
+ * Nav buttons honor `Wizard.submitAction() / nextAction() / previousAction()`
53
+ * — chrome (label / icon / color / size / outlined / iconOnly / tooltip /
54
+ * disabled rules) carries through to the rendered button while the click
55
+ * behavior stays hardwired (advance / recede / submit-form). Bare wizards
56
+ * keep the built-in defaults.
57
+ */
58
+ export function WizardRenderer({ el, index, deps, }) {
59
+ const { renderElement } = deps;
60
+ const formState = useFormState();
61
+ const formId = formState?.formMeta['formId'] ? String(formState.formMeta['formId']) : undefined;
62
+ const wizardUrl = formState?.formMeta['wizardUrl'] ? String(formState.formMeta['wizardUrl']) : undefined;
63
+ const steps = (el.children ?? []).filter(c => c.type === 'step');
64
+ const skippable = Boolean(el['skippable']);
65
+ const startOnStep = Math.max(0, Math.min(Math.max(0, steps.length - 1), Number(el['startOnStep'] ?? 0)));
66
+ const persist = el['persist'] !== false;
67
+ const storageKey = persist && formId ? `pilotiq.wizard.${formId}.step` : undefined;
68
+ const queryKey = typeof el['persistStepInQueryString'] === 'string'
69
+ ? String(el['persistStepInQueryString'])
70
+ : undefined;
71
+ const submitActionMeta = el['submitAction'];
72
+ const nextActionMeta = el['nextAction'];
73
+ const previousActionMeta = el['previousAction'];
74
+ // Initial-step resolution priority: URL (?<key>=N, 1-based) > localStorage >
75
+ // startOnStep. URL wins on first paint so deep links land on the right step
76
+ // before localStorage can override. Lazy initializer — resolution runs once.
77
+ const [active, setActive] = useState(() => readInitialWizardStep(steps.length, startOnStep, storageKey, queryKey));
78
+ const [advancing, setAdvancing] = useState(false);
79
+ const [advanceError, setAdvanceError] = useState(null);
80
+ // Persist active step changes to localStorage (when enabled).
81
+ useEffect(() => {
82
+ if (!storageKey)
83
+ return;
84
+ writeStoredString(storageKey, String(active));
85
+ }, [storageKey, active]);
86
+ // Mirror active step to the URL via replaceState — purely client-side state
87
+ // sync, no SPA re-fetch. 1-based externally; cleared when on the first step
88
+ // so bare URLs don't grow ?step=1 noise.
89
+ useEffect(() => {
90
+ if (!queryKey)
91
+ return;
92
+ if (typeof window === 'undefined')
93
+ return;
94
+ try {
95
+ const url = new URL(window.location.href);
96
+ if (active === 0)
97
+ url.searchParams.delete(queryKey);
98
+ else
99
+ url.searchParams.set(queryKey, String(active + 1));
100
+ window.history.replaceState(window.history.state, '', url.toString());
101
+ }
102
+ catch { /* ignore */ }
103
+ }, [queryKey, active]);
104
+ if (steps.length === 0) {
105
+ return (_jsx("div", { className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground", children: "No steps configured." }, index));
106
+ }
107
+ const isLast = active === steps.length - 1;
108
+ const isFirst = active === 0;
109
+ const advance = async (target) => {
110
+ setAdvanceError(null);
111
+ if (!wizardUrl) {
112
+ setActive(target);
113
+ return;
114
+ }
115
+ setAdvancing(true);
116
+ try {
117
+ const values = formState?.values ?? {};
118
+ // Validate intermediate steps in order when jumping ahead.
119
+ const path = target > active
120
+ ? Array.from({ length: target - active }, (_, k) => active + k)
121
+ : [active]; // jumping back is unconstrained
122
+ let landed = active;
123
+ for (const stepIdx of path) {
124
+ const res = await fetch(wizardUrl, {
125
+ method: 'POST',
126
+ headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
127
+ body: JSON.stringify({ step: stepIdx, values }),
128
+ });
129
+ if (res.status === 422) {
130
+ const data = await res.json().catch(() => ({}));
131
+ const errors = (data?.errors ?? {});
132
+ if (formState?.applyErrors)
133
+ formState.applyErrors(errors);
134
+ landed = stepIdx;
135
+ setAdvanceError('Please fix the highlighted fields.');
136
+ break;
137
+ }
138
+ if (!res.ok) {
139
+ setAdvanceError('Step validation failed.');
140
+ break;
141
+ }
142
+ landed = stepIdx + 1;
143
+ }
144
+ setActive(target > active ? landed : target);
145
+ }
146
+ catch {
147
+ setAdvanceError('Step validation failed.');
148
+ }
149
+ finally {
150
+ setAdvancing(false);
151
+ }
152
+ };
153
+ return (_jsxs("div", { className: `flex flex-col gap-6 ${layoutClasses(el)}`.trim(), children: [_jsx("ol", { className: "flex items-center gap-3 overflow-x-auto", "aria-label": "Wizard progress", children: steps.map((s, i) => {
154
+ const Icon = resolveIcon(s['icon'] ? String(s['icon']) : undefined);
155
+ const reachable = skippable || i <= active;
156
+ const isActive = i === active;
157
+ const isDone = i < active;
158
+ return (_jsxs("li", { className: "flex items-center gap-2 shrink-0", children: [_jsxs("button", { type: "button", disabled: !reachable || advancing, onClick: () => reachable && advance(i), className: [
159
+ 'flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm transition',
160
+ isActive ? 'border-primary bg-primary/10 text-foreground'
161
+ : isDone ? 'border-border text-muted-foreground hover:bg-muted'
162
+ : 'border-border text-muted-foreground',
163
+ reachable ? 'cursor-pointer' : 'opacity-50 cursor-not-allowed',
164
+ ].join(' '), "aria-current": isActive ? 'step' : undefined, children: [_jsx("span", { className: [
165
+ 'flex size-5 items-center justify-center rounded-full text-[11px] font-semibold',
166
+ isActive ? 'bg-primary text-primary-foreground'
167
+ : isDone ? 'bg-muted-foreground/20 text-foreground'
168
+ : 'bg-muted text-muted-foreground',
169
+ ].join(' '), children: Icon ? _jsx(Icon, { className: "size-3", "aria-hidden": "true" }) : i + 1 }), _jsx("span", { className: "font-medium", children: String(s['label'] ?? `Step ${i + 1}`) })] }), i < steps.length - 1 && _jsx("span", { className: "h-px w-6 bg-border", "aria-hidden": "true" })] }, i));
170
+ }) }), Boolean(steps[active]?.['description']) && (_jsx("p", { className: "text-sm text-muted-foreground", children: String(steps[active]['description']) })), steps.map((s, i) => (_jsx("div", { className: i === active ? 'flex flex-col gap-4' : 'hidden', "aria-hidden": i === active ? undefined : true, children: (s.children ?? []).map((c, ci) => renderElement(c, ci)) }, i))), advanceError && (_jsx("p", { className: "text-sm text-destructive", role: "alert", children: advanceError })), _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(WizardNavButton, { actionMeta: previousActionMeta, fallbackLabel: "Back", disabled: isFirst || advancing, onClick: () => advance(active - 1) }), isLast
171
+ ? (submitActionMeta
172
+ ? _jsx(WizardNavButton, { actionMeta: submitActionMeta, fallbackLabel: "Submit", type: "submit", disabled: advancing })
173
+ : _jsx("span", { className: "text-xs text-muted-foreground", children: "Submit the form to finish." }))
174
+ : _jsx(WizardNavButton, { actionMeta: nextActionMeta, fallbackLabel: advancing ? 'Validating…' : 'Next', disabled: advancing, onClick: () => advance(active + 1) })] })] }, index));
175
+ }
176
+ /**
177
+ * Renders one wizard nav slot (Back / Next / Submit). Falls back to plain
178
+ * built-in chrome (border button for Back, primary button for Next/Submit)
179
+ * when no `actionMeta` is supplied; otherwise reads the resolved Action's
180
+ * chrome (`label / icon / color / size / outlined / iconOnly / tooltip /
181
+ * disabled`) and applies it to a button whose click is hardwired by the
182
+ * surrounding wizard. `type="submit"` lets the Submit slot trigger the
183
+ * surrounding form's onSubmit dispatcher (no `onClick` needed).
184
+ *
185
+ * Hidden actions (`.visible(false)` resolved-away) drop the slot entirely
186
+ * — the resolver returns `undefined` for hidden Action elements, which
187
+ * arrives here as `actionMeta == null` so we fall through to the default
188
+ * chrome. Use `Wizard.skippable()` semantics to hide nav buttons when
189
+ * appropriate; for permanent removal subclass the wizard.
190
+ */
191
+ function WizardNavButton({ actionMeta, fallbackLabel, type = 'button', disabled, onClick, }) {
192
+ // Bare default — keep historical chrome for back-compat (un-customized
193
+ // wizards look identical to before this change).
194
+ if (!actionMeta) {
195
+ const isPrimary = type === 'submit' || fallbackLabel !== 'Back';
196
+ return (_jsx("button", { type: type, disabled: disabled, onClick: onClick, className: isPrimary
197
+ ? 'rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:opacity-90 disabled:opacity-50 disabled:cursor-not-allowed'
198
+ : 'rounded-md border border-border px-3 py-1.5 text-sm font-medium text-foreground hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed', children: fallbackLabel }));
199
+ }
200
+ const ownDisabled = Boolean(actionMeta['disabled']);
201
+ const label = String(actionMeta['label'] ?? fallbackLabel);
202
+ const tooltip = actionMeta['tooltip'] ? String(actionMeta['tooltip']) : undefined;
203
+ const iconOnly = Boolean(actionMeta['iconOnly']);
204
+ const className = actionButtonClass(actionMeta, {});
205
+ const node = (_jsxs("button", { type: type, disabled: disabled || ownDisabled, onClick: onClick, className: `${className} disabled:opacity-50 disabled:cursor-not-allowed`, "aria-label": iconOnly ? label : undefined, children: [renderActionIcon(actionMeta), !iconOnly && _jsx("span", { children: label }), renderActionBadge(actionMeta)] }));
206
+ return _jsx(_Fragment, { children: withTooltip(node, tooltip) });
207
+ }
208
+ //# sourceMappingURL=WizardRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WizardRenderer.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/WizardRenderer.tsx"],"names":[],"mappings":"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"}