@pilotiq/pilotiq 0.7.2 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/CHANGELOG.md +208 -0
  3. package/CLAUDE.md +59 -3
  4. package/dist/Pilotiq.d.ts +83 -0
  5. package/dist/Pilotiq.d.ts.map +1 -1
  6. package/dist/Pilotiq.js +39 -0
  7. package/dist/Pilotiq.js.map +1 -1
  8. package/dist/actions/Action.d.ts +27 -99
  9. package/dist/actions/Action.d.ts.map +1 -1
  10. package/dist/actions/Action.js +52 -754
  11. package/dist/actions/Action.js.map +1 -1
  12. package/dist/actions/bulkFactories.d.ts +46 -0
  13. package/dist/actions/bulkFactories.d.ts.map +1 -0
  14. package/dist/actions/bulkFactories.js +144 -0
  15. package/dist/actions/bulkFactories.js.map +1 -0
  16. package/dist/actions/crudFactories.d.ts +94 -0
  17. package/dist/actions/crudFactories.d.ts.map +1 -0
  18. package/dist/actions/crudFactories.js +209 -0
  19. package/dist/actions/crudFactories.js.map +1 -0
  20. package/dist/actions/factoryHelpers.d.ts +108 -0
  21. package/dist/actions/factoryHelpers.d.ts.map +1 -0
  22. package/dist/actions/factoryHelpers.js +138 -0
  23. package/dist/actions/factoryHelpers.js.map +1 -0
  24. package/dist/actions/m2mFactories.d.ts +47 -0
  25. package/dist/actions/m2mFactories.d.ts.map +1 -0
  26. package/dist/actions/m2mFactories.js +173 -0
  27. package/dist/actions/m2mFactories.js.map +1 -0
  28. package/dist/actions/relationFactories.d.ts +93 -0
  29. package/dist/actions/relationFactories.d.ts.map +1 -0
  30. package/dist/actions/relationFactories.js +321 -0
  31. package/dist/actions/relationFactories.js.map +1 -0
  32. package/dist/elements/dispatchForm.js +1 -1
  33. package/dist/elements/dispatchForm.js.map +1 -1
  34. package/dist/elements/dispatchTable.js +1 -1
  35. package/dist/elements/dispatchTable.js.map +1 -1
  36. package/dist/fields/Field.d.ts +31 -0
  37. package/dist/fields/Field.d.ts.map +1 -1
  38. package/dist/fields/Field.js +25 -0
  39. package/dist/fields/Field.js.map +1 -1
  40. package/dist/pageData/breadcrumbs.d.ts +42 -0
  41. package/dist/pageData/breadcrumbs.d.ts.map +1 -0
  42. package/dist/pageData/breadcrumbs.js +172 -0
  43. package/dist/pageData/breadcrumbs.js.map +1 -0
  44. package/dist/pageData/forms.d.ts +137 -0
  45. package/dist/pageData/forms.d.ts.map +1 -0
  46. package/dist/pageData/forms.js +427 -0
  47. package/dist/pageData/forms.js.map +1 -0
  48. package/dist/pageData/helpers.d.ts +239 -0
  49. package/dist/pageData/helpers.d.ts.map +1 -0
  50. package/dist/pageData/helpers.js +703 -0
  51. package/dist/pageData/helpers.js.map +1 -0
  52. package/dist/pageData/misc.d.ts +76 -0
  53. package/dist/pageData/misc.d.ts.map +1 -0
  54. package/dist/pageData/misc.js +263 -0
  55. package/dist/pageData/misc.js.map +1 -0
  56. package/dist/pageData/navigation.d.ts +292 -0
  57. package/dist/pageData/navigation.d.ts.map +1 -0
  58. package/dist/pageData/navigation.js +591 -0
  59. package/dist/pageData/navigation.js.map +1 -0
  60. package/dist/pageData/relationPages.d.ts +172 -0
  61. package/dist/pageData/relationPages.d.ts.map +1 -0
  62. package/dist/pageData/relationPages.js +867 -0
  63. package/dist/pageData/relationPages.js.map +1 -0
  64. package/dist/pageData/relationTabs.d.ts +65 -0
  65. package/dist/pageData/relationTabs.d.ts.map +1 -0
  66. package/dist/pageData/relationTabs.js +258 -0
  67. package/dist/pageData/relationTabs.js.map +1 -0
  68. package/dist/pageData/resourcePages.d.ts +48 -0
  69. package/dist/pageData/resourcePages.d.ts.map +1 -0
  70. package/dist/pageData/resourcePages.js +504 -0
  71. package/dist/pageData/resourcePages.js.map +1 -0
  72. package/dist/pageData.d.ts +12 -792
  73. package/dist/pageData.d.ts.map +1 -1
  74. package/dist/pageData.js +24 -3797
  75. package/dist/pageData.js.map +1 -1
  76. package/dist/react/AppShell.d.ts +8 -0
  77. package/dist/react/AppShell.d.ts.map +1 -1
  78. package/dist/react/AppShell.js +11 -1
  79. package/dist/react/AppShell.js.map +1 -1
  80. package/dist/react/CollabExtensionFactoryRegistry.d.ts +47 -0
  81. package/dist/react/CollabExtensionFactoryRegistry.d.ts.map +1 -0
  82. package/dist/react/CollabExtensionFactoryRegistry.js +14 -0
  83. package/dist/react/CollabExtensionFactoryRegistry.js.map +1 -0
  84. package/dist/react/CollabRoomContext.d.ts +37 -0
  85. package/dist/react/CollabRoomContext.d.ts.map +1 -0
  86. package/dist/react/CollabRoomContext.js +12 -0
  87. package/dist/react/CollabRoomContext.js.map +1 -0
  88. package/dist/react/FormCollabBindingRegistry.d.ts +62 -0
  89. package/dist/react/FormCollabBindingRegistry.d.ts.map +1 -0
  90. package/dist/react/FormCollabBindingRegistry.js +14 -0
  91. package/dist/react/FormCollabBindingRegistry.js.map +1 -0
  92. package/dist/react/FormStateContext.d.ts.map +1 -1
  93. package/dist/react/FormStateContext.js +87 -0
  94. package/dist/react/FormStateContext.js.map +1 -1
  95. package/dist/react/RecordWrapperGate.d.ts +25 -0
  96. package/dist/react/RecordWrapperGate.d.ts.map +1 -0
  97. package/dist/react/RecordWrapperGate.js +30 -0
  98. package/dist/react/RecordWrapperGate.js.map +1 -0
  99. package/dist/react/RecordWrapperRegistry.d.ts +31 -0
  100. package/dist/react/RecordWrapperRegistry.d.ts.map +1 -0
  101. package/dist/react/RecordWrapperRegistry.js +15 -0
  102. package/dist/react/RecordWrapperRegistry.js.map +1 -0
  103. package/dist/react/SchemaRenderer.d.ts +17 -23
  104. package/dist/react/SchemaRenderer.d.ts.map +1 -1
  105. package/dist/react/SchemaRenderer.js +71 -3647
  106. package/dist/react/SchemaRenderer.js.map +1 -1
  107. package/dist/react/component-slots.d.ts +103 -0
  108. package/dist/react/component-slots.d.ts.map +1 -0
  109. package/dist/react/component-slots.js +18 -0
  110. package/dist/react/component-slots.js.map +1 -0
  111. package/dist/react/fields/BuilderInput.d.ts.map +1 -1
  112. package/dist/react/fields/BuilderInput.js +21 -117
  113. package/dist/react/fields/BuilderInput.js.map +1 -1
  114. package/dist/react/fields/MarkdownInput.d.ts.map +1 -1
  115. package/dist/react/fields/MarkdownInput.js +1 -3
  116. package/dist/react/fields/MarkdownInput.js.map +1 -1
  117. package/dist/react/fields/RepeaterInput.d.ts.map +1 -1
  118. package/dist/react/fields/RepeaterInput.js +22 -127
  119. package/dist/react/fields/RepeaterInput.js.map +1 -1
  120. package/dist/react/fields/rowState.d.ts +40 -0
  121. package/dist/react/fields/rowState.d.ts.map +1 -0
  122. package/dist/react/fields/rowState.js +60 -0
  123. package/dist/react/fields/rowState.js.map +1 -0
  124. package/dist/react/fields/useRowReorderDnd.d.ts +28 -0
  125. package/dist/react/fields/useRowReorderDnd.d.ts.map +1 -0
  126. package/dist/react/fields/useRowReorderDnd.js +51 -0
  127. package/dist/react/fields/useRowReorderDnd.js.map +1 -0
  128. package/dist/react/index.d.ts +9 -0
  129. package/dist/react/index.d.ts.map +1 -1
  130. package/dist/react/index.js +8 -0
  131. package/dist/react/index.js.map +1 -1
  132. package/dist/react/layouts/SidebarLayout.d.ts +1 -1
  133. package/dist/react/layouts/SidebarLayout.d.ts.map +1 -1
  134. package/dist/react/layouts/SidebarLayout.js +10 -2
  135. package/dist/react/layouts/SidebarLayout.js.map +1 -1
  136. package/dist/react/layouts/TopbarLayout.d.ts +1 -1
  137. package/dist/react/layouts/TopbarLayout.d.ts.map +1 -1
  138. package/dist/react/layouts/TopbarLayout.js +19 -11
  139. package/dist/react/layouts/TopbarLayout.js.map +1 -1
  140. package/dist/react/parseRecordEditUrl.d.ts +29 -0
  141. package/dist/react/parseRecordEditUrl.d.ts.map +1 -0
  142. package/dist/react/parseRecordEditUrl.js +25 -0
  143. package/dist/react/parseRecordEditUrl.js.map +1 -0
  144. package/dist/react/persistedState.d.ts +19 -0
  145. package/dist/react/persistedState.d.ts.map +1 -0
  146. package/dist/react/persistedState.js +51 -0
  147. package/dist/react/persistedState.js.map +1 -0
  148. package/dist/react/schemaRenderer/AlertRenderer.d.ts +12 -0
  149. package/dist/react/schemaRenderer/AlertRenderer.d.ts.map +1 -0
  150. package/dist/react/schemaRenderer/AlertRenderer.js +61 -0
  151. package/dist/react/schemaRenderer/AlertRenderer.js.map +1 -0
  152. package/dist/react/schemaRenderer/EntryRenderer.d.ts +13 -0
  153. package/dist/react/schemaRenderer/EntryRenderer.d.ts.map +1 -0
  154. package/dist/react/schemaRenderer/EntryRenderer.js +277 -0
  155. package/dist/react/schemaRenderer/EntryRenderer.js.map +1 -0
  156. package/dist/react/schemaRenderer/SectionRenderer.d.ts +16 -0
  157. package/dist/react/schemaRenderer/SectionRenderer.d.ts.map +1 -0
  158. package/dist/react/schemaRenderer/SectionRenderer.js +62 -0
  159. package/dist/react/schemaRenderer/SectionRenderer.js.map +1 -0
  160. package/dist/react/schemaRenderer/SimpleElements.d.ts +25 -0
  161. package/dist/react/schemaRenderer/SimpleElements.d.ts.map +1 -0
  162. package/dist/react/schemaRenderer/SimpleElements.js +147 -0
  163. package/dist/react/schemaRenderer/SimpleElements.js.map +1 -0
  164. package/dist/react/schemaRenderer/TabsRenderer.d.ts +17 -0
  165. package/dist/react/schemaRenderer/TabsRenderer.d.ts.map +1 -0
  166. package/dist/react/schemaRenderer/TabsRenderer.js +31 -0
  167. package/dist/react/schemaRenderer/TabsRenderer.js.map +1 -0
  168. package/dist/react/schemaRenderer/WizardRenderer.d.ts +34 -0
  169. package/dist/react/schemaRenderer/WizardRenderer.d.ts.map +1 -0
  170. package/dist/react/schemaRenderer/WizardRenderer.js +208 -0
  171. package/dist/react/schemaRenderer/WizardRenderer.js.map +1 -0
  172. package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts +21 -0
  173. package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts.map +1 -0
  174. package/dist/react/schemaRenderer/action/ActionGroupTrigger.js +82 -0
  175. package/dist/react/schemaRenderer/action/ActionGroupTrigger.js.map +1 -0
  176. package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts +30 -0
  177. package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts.map +1 -0
  178. package/dist/react/schemaRenderer/action/ActionModalDialog.js +182 -0
  179. package/dist/react/schemaRenderer/action/ActionModalDialog.js.map +1 -0
  180. package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts +17 -0
  181. package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts.map +1 -0
  182. package/dist/react/schemaRenderer/action/ConfirmActionDialog.js +19 -0
  183. package/dist/react/schemaRenderer/action/ConfirmActionDialog.js.map +1 -0
  184. package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts +16 -0
  185. package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts.map +1 -0
  186. package/dist/react/schemaRenderer/action/HandlerActionButton.js +16 -0
  187. package/dist/react/schemaRenderer/action/HandlerActionButton.js.map +1 -0
  188. package/dist/react/schemaRenderer/action/MethodActionButton.d.ts +22 -0
  189. package/dist/react/schemaRenderer/action/MethodActionButton.d.ts.map +1 -0
  190. package/dist/react/schemaRenderer/action/MethodActionButton.js +26 -0
  191. package/dist/react/schemaRenderer/action/MethodActionButton.js.map +1 -0
  192. package/dist/react/schemaRenderer/action/buttons.d.ts +18 -0
  193. package/dist/react/schemaRenderer/action/buttons.d.ts.map +1 -0
  194. package/dist/react/schemaRenderer/action/buttons.js +74 -0
  195. package/dist/react/schemaRenderer/action/buttons.js.map +1 -0
  196. package/dist/react/schemaRenderer/action/helpers.d.ts +26 -0
  197. package/dist/react/schemaRenderer/action/helpers.d.ts.map +1 -0
  198. package/dist/react/schemaRenderer/action/helpers.js +126 -0
  199. package/dist/react/schemaRenderer/action/helpers.js.map +1 -0
  200. package/dist/react/schemaRenderer/action/renderAction.d.ts +21 -0
  201. package/dist/react/schemaRenderer/action/renderAction.d.ts.map +1 -0
  202. package/dist/react/schemaRenderer/action/renderAction.js +102 -0
  203. package/dist/react/schemaRenderer/action/renderAction.js.map +1 -0
  204. package/dist/react/schemaRenderer/columnFormat.d.ts +10 -0
  205. package/dist/react/schemaRenderer/columnFormat.d.ts.map +1 -0
  206. package/dist/react/schemaRenderer/columnFormat.js +76 -0
  207. package/dist/react/schemaRenderer/columnFormat.js.map +1 -0
  208. package/dist/react/schemaRenderer/constants.d.ts +8 -0
  209. package/dist/react/schemaRenderer/constants.d.ts.map +1 -0
  210. package/dist/react/schemaRenderer/constants.js +45 -0
  211. package/dist/react/schemaRenderer/constants.js.map +1 -0
  212. package/dist/react/schemaRenderer/form/FormRenderer.d.ts +29 -0
  213. package/dist/react/schemaRenderer/form/FormRenderer.d.ts.map +1 -0
  214. package/dist/react/schemaRenderer/form/FormRenderer.js +163 -0
  215. package/dist/react/schemaRenderer/form/FormRenderer.js.map +1 -0
  216. package/dist/react/schemaRenderer/form/renderField.d.ts +6 -0
  217. package/dist/react/schemaRenderer/form/renderField.d.ts.map +1 -0
  218. package/dist/react/schemaRenderer/form/renderField.js +239 -0
  219. package/dist/react/schemaRenderer/form/renderField.js.map +1 -0
  220. package/dist/react/schemaRenderer/helpers.d.ts +32 -0
  221. package/dist/react/schemaRenderer/helpers.d.ts.map +1 -0
  222. package/dist/react/schemaRenderer/helpers.js +52 -0
  223. package/dist/react/schemaRenderer/helpers.js.map +1 -0
  224. package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts +60 -0
  225. package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts.map +1 -0
  226. package/dist/react/schemaRenderer/table/CardsLayoutBody.js +189 -0
  227. package/dist/react/schemaRenderer/table/CardsLayoutBody.js.map +1 -0
  228. package/dist/react/schemaRenderer/table/TableRenderer.d.ts +29 -0
  229. package/dist/react/schemaRenderer/table/TableRenderer.d.ts.map +1 -0
  230. package/dist/react/schemaRenderer/table/TableRenderer.js +85 -0
  231. package/dist/react/schemaRenderer/table/TableRenderer.js.map +1 -0
  232. package/dist/react/schemaRenderer/table/TableRendererBody.d.ts +18 -0
  233. package/dist/react/schemaRenderer/table/TableRendererBody.d.ts.map +1 -0
  234. package/dist/react/schemaRenderer/table/TableRendererBody.js +555 -0
  235. package/dist/react/schemaRenderer/table/TableRendererBody.js.map +1 -0
  236. package/dist/react/schemaRenderer/table/filters.d.ts +263 -0
  237. package/dist/react/schemaRenderer/table/filters.d.ts.map +1 -0
  238. package/dist/react/schemaRenderer/table/filters.js +497 -0
  239. package/dist/react/schemaRenderer/table/filters.js.map +1 -0
  240. package/dist/react/schemaRenderer/table/formatCell.d.ts +11 -0
  241. package/dist/react/schemaRenderer/table/formatCell.d.ts.map +1 -0
  242. package/dist/react/schemaRenderer/table/formatCell.js +172 -0
  243. package/dist/react/schemaRenderer/table/formatCell.js.map +1 -0
  244. package/dist/react/schemaRenderer/table/links.d.ts +42 -0
  245. package/dist/react/schemaRenderer/table/links.d.ts.map +1 -0
  246. package/dist/react/schemaRenderer/table/links.js +55 -0
  247. package/dist/react/schemaRenderer/table/links.js.map +1 -0
  248. package/dist/react/schemaRenderer/table/renderRowActions.d.ts +13 -0
  249. package/dist/react/schemaRenderer/table/renderRowActions.d.ts.map +1 -0
  250. package/dist/react/schemaRenderer/table/renderRowActions.js +25 -0
  251. package/dist/react/schemaRenderer/table/renderRowActions.js.map +1 -0
  252. package/dist/react/schemaRenderer/table/url.d.ts +41 -0
  253. package/dist/react/schemaRenderer/table/url.d.ts.map +1 -0
  254. package/dist/react/schemaRenderer/table/url.js +114 -0
  255. package/dist/react/schemaRenderer/table/url.js.map +1 -0
  256. package/dist/routes/globals.d.ts +13 -0
  257. package/dist/routes/globals.d.ts.map +1 -0
  258. package/dist/routes/globals.js +131 -0
  259. package/dist/routes/globals.js.map +1 -0
  260. package/dist/routes/helpers.d.ts +217 -0
  261. package/dist/routes/helpers.d.ts.map +1 -0
  262. package/dist/routes/helpers.js +498 -0
  263. package/dist/routes/helpers.js.map +1 -0
  264. package/dist/routes/pages.d.ts +15 -0
  265. package/dist/routes/pages.d.ts.map +1 -0
  266. package/dist/routes/pages.js +145 -0
  267. package/dist/routes/pages.js.map +1 -0
  268. package/dist/routes/panel.d.ts +19 -0
  269. package/dist/routes/panel.d.ts.map +1 -0
  270. package/dist/routes/panel.js +191 -0
  271. package/dist/routes/panel.js.map +1 -0
  272. package/dist/routes/relations.d.ts +21 -0
  273. package/dist/routes/relations.d.ts.map +1 -0
  274. package/dist/routes/relations.js +1239 -0
  275. package/dist/routes/relations.js.map +1 -0
  276. package/dist/routes/resources.d.ts +28 -0
  277. package/dist/routes/resources.d.ts.map +1 -0
  278. package/dist/routes/resources.js +741 -0
  279. package/dist/routes/resources.js.map +1 -0
  280. package/dist/routes/theme.d.ts +12 -0
  281. package/dist/routes/theme.d.ts.map +1 -0
  282. package/dist/routes/theme.js +82 -0
  283. package/dist/routes/theme.js.map +1 -0
  284. package/dist/routes.d.ts.map +1 -1
  285. package/dist/routes.js +64 -3078
  286. package/dist/routes.js.map +1 -1
  287. package/dist/vite.d.ts +1 -0
  288. package/dist/vite.d.ts.map +1 -1
  289. package/dist/vite.js +26 -5
  290. package/dist/vite.js.map +1 -1
  291. package/package.json +2 -1
  292. package/src/Pilotiq.ts +95 -0
  293. package/src/actions/Action.ts +79 -723
  294. package/src/actions/bulkFactories.ts +168 -0
  295. package/src/actions/crudFactories.ts +220 -0
  296. package/src/actions/factoryHelpers.ts +177 -0
  297. package/src/actions/m2mFactories.ts +193 -0
  298. package/src/actions/relationFactories.ts +372 -0
  299. package/src/elements/dispatchForm.ts +1 -1
  300. package/src/elements/dispatchTable.ts +1 -1
  301. package/src/fields/Field.ts +39 -0
  302. package/src/pageData/breadcrumbs.ts +288 -0
  303. package/src/pageData/forms.ts +578 -0
  304. package/src/pageData/helpers.ts +764 -0
  305. package/src/pageData/misc.ts +347 -0
  306. package/src/pageData/navigation.ts +779 -0
  307. package/src/pageData/relationPages.ts +1246 -0
  308. package/src/pageData/relationTabs.ts +286 -0
  309. package/src/pageData/resourcePages.ts +593 -0
  310. package/src/pageData.ts +122 -4731
  311. package/src/react/AppShell.tsx +27 -1
  312. package/src/react/CollabExtensionFactoryRegistry.ts +55 -0
  313. package/src/react/CollabRoomContext.ts +42 -0
  314. package/src/react/FormCollabBindingRegistry.ts +72 -0
  315. package/src/react/FormStateContext.tsx +91 -0
  316. package/src/react/RecordWrapperGate.tsx +40 -0
  317. package/src/react/RecordWrapperRegistry.ts +39 -0
  318. package/src/react/SchemaRenderer.tsx +230 -6479
  319. package/src/react/component-slots.test.ts +103 -0
  320. package/src/react/component-slots.ts +116 -0
  321. package/src/react/fields/BuilderInput.tsx +29 -117
  322. package/src/react/fields/MarkdownInput.tsx +0 -1
  323. package/src/react/fields/RepeaterInput.tsx +29 -130
  324. package/src/react/fields/rowState.ts +106 -0
  325. package/src/react/fields/useRowReorderDnd.ts +78 -0
  326. package/src/react/index.ts +38 -0
  327. package/src/react/layouts/SidebarLayout.tsx +39 -28
  328. package/src/react/layouts/TopbarLayout.tsx +70 -57
  329. package/src/react/parseRecordEditUrl.test.ts +75 -0
  330. package/src/react/parseRecordEditUrl.ts +55 -0
  331. package/src/react/persistedState.ts +40 -0
  332. package/src/react/schemaRenderer/AlertRenderer.tsx +112 -0
  333. package/src/react/schemaRenderer/EntryRenderer.tsx +501 -0
  334. package/src/react/schemaRenderer/SectionRenderer.tsx +120 -0
  335. package/src/react/schemaRenderer/SimpleElements.tsx +306 -0
  336. package/src/react/schemaRenderer/TabsRenderer.tsx +62 -0
  337. package/src/react/schemaRenderer/WizardRenderer.tsx +338 -0
  338. package/src/react/schemaRenderer/action/ActionGroupTrigger.tsx +177 -0
  339. package/src/react/schemaRenderer/action/ActionModalDialog.tsx +273 -0
  340. package/src/react/schemaRenderer/action/ConfirmActionDialog.tsx +61 -0
  341. package/src/react/schemaRenderer/action/HandlerActionButton.tsx +43 -0
  342. package/src/react/schemaRenderer/action/MethodActionButton.tsx +64 -0
  343. package/src/react/schemaRenderer/action/buttons.tsx +99 -0
  344. package/src/react/schemaRenderer/action/helpers.ts +140 -0
  345. package/src/react/schemaRenderer/action/renderAction.tsx +245 -0
  346. package/src/react/schemaRenderer/columnFormat.ts +65 -0
  347. package/src/react/schemaRenderer/constants.ts +50 -0
  348. package/src/react/schemaRenderer/form/FormRenderer.tsx +245 -0
  349. package/src/react/schemaRenderer/form/renderField.tsx +511 -0
  350. package/src/react/schemaRenderer/helpers.tsx +81 -0
  351. package/src/react/schemaRenderer/table/CardsLayoutBody.tsx +308 -0
  352. package/src/react/schemaRenderer/table/TableRenderer.tsx +123 -0
  353. package/src/react/schemaRenderer/table/TableRendererBody.tsx +974 -0
  354. package/src/react/schemaRenderer/table/filters.tsx +1233 -0
  355. package/src/react/schemaRenderer/table/formatCell.tsx +264 -0
  356. package/src/react/schemaRenderer/table/links.tsx +112 -0
  357. package/src/react/schemaRenderer/table/renderRowActions.tsx +52 -0
  358. package/src/react/schemaRenderer/table/url.tsx +143 -0
  359. package/src/routes/globals.ts +154 -0
  360. package/src/routes/helpers.ts +668 -0
  361. package/src/routes/pages.ts +173 -0
  362. package/src/routes/panel.ts +204 -0
  363. package/src/routes/relations.ts +1219 -0
  364. package/src/routes/resources.ts +786 -0
  365. package/src/routes/theme.ts +109 -0
  366. package/src/routes.test.ts +1 -1
  367. package/src/routes.ts +64 -3176
  368. package/src/schema/TableWidget.test.ts +2 -2
  369. package/src/theme/migrate.test.ts +178 -0
  370. package/src/vite.test.ts +184 -0
  371. package/src/vite.ts +26 -4
@@ -0,0 +1,163 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { FormIdContext, FormStateProvider, useFormState } from '../../FormStateContext.js';
4
+ import { useCollabRoom } from '../../CollabRoomContext.js';
5
+ import { getFormCollabBinding } from '../../FormCollabBindingRegistry.js';
6
+ import { useNavigate } from '../../navigate.js';
7
+ import { useToast } from '../../Toaster.js';
8
+ import { renderField } from './renderField.js';
9
+ /**
10
+ * Top-level `<form>` element. Owns:
11
+ * - HTML form chrome (action, method, _method spoof, hidden formId)
12
+ * - Fetch + JSON submission with `Accept: application/json` (so the
13
+ * server can return 422 with field errors instead of re-rendering)
14
+ * - Inline error stamping (`_form` banner + per-field error strings)
15
+ * - `FormStateProvider` mount when the form has any reactive field
16
+ * (`live()` or `afterStateUpdatedJs`) and a `stateUrl` was stamped.
17
+ *
18
+ * `renderElement` is injected for non-field children inside the form
19
+ * body (cards / dividers / fieldsets / etc).
20
+ */
21
+ export function FormRenderer({ el, renderElement, }) {
22
+ const formId = String(el['formId'] ?? '');
23
+ const method = String(el['method'] ?? 'post').toLowerCase();
24
+ const action = el['action'] ? String(el['action']) : undefined;
25
+ const stateUrl = el['stateUrl'] ? String(el['stateUrl']) : undefined;
26
+ const serverValues = el['values'] ?? {};
27
+ const serverErrors = el['errors'] ?? {};
28
+ // Phase F2 — the controlled-form path also activates when we're
29
+ // inside a `<RecordCollabRoom>` AND a plugin (e.g.
30
+ // `@pilotiq-pro/collab`) registered a `FormCollabBinding` factory.
31
+ // Without this, forms with no `live()` fields stayed uncontrolled
32
+ // and the collab binding never wired up.
33
+ const collabRoom = useCollabRoom();
34
+ const collabFactory = getFormCollabBinding();
35
+ const collabActive = !!(collabRoom && collabFactory && formId);
36
+ const useControlled = !!stateUrl || collabActive;
37
+ // Methods other than GET/POST are spoofed via _method, mirroring Laravel.
38
+ const httpMethod = method === 'get' ? 'get' : 'post';
39
+ const spoofedMethod = method !== 'get' && method !== 'post' ? method : undefined;
40
+ const navigate = useNavigate();
41
+ const { notify } = useToast();
42
+ // Client-side errors override server-rendered ones after a fetch-mode
43
+ // 422 response. Field values stay uncontrolled — the inputs in the DOM
44
+ // still hold whatever the user typed, so we don't need to mirror them.
45
+ const [clientErrors, setClientErrors] = useState(null);
46
+ const [submitting, setSubmitting] = useState(false);
47
+ const errors = clientErrors ?? serverErrors;
48
+ // Plan #14 — formRef is threaded into FormStateProvider so live triggers
49
+ // can snapshot the form's full DOM state via FormData (captures
50
+ // uncontrolled inner-Repeater inputs that don't participate in the
51
+ // controlled values map).
52
+ const formRef = useRef(null);
53
+ const formErrors = errors['_form'] ?? [];
54
+ const hasFieldErrors = Object.keys(errors).some(k => k !== '_form');
55
+ const onSubmit = async (e) => {
56
+ if (!action)
57
+ return; // no action URL → fall through to native submit
58
+ e.preventDefault();
59
+ if (submitting)
60
+ return;
61
+ setSubmitting(true);
62
+ setClientErrors(null);
63
+ try {
64
+ // Thread `event.submitter` so the clicked submit button's
65
+ // name/value pair lands in the FormData. Without this, secondary
66
+ // submits like "Create & create another" can't signal which
67
+ // button fired through the body. Supported in all evergreen
68
+ // browsers since 2022; cast through `as any` because TS lib.dom
69
+ // hasn't picked up the optional submitter argument on every
70
+ // version.
71
+ const submitter = e.nativeEvent.submitter;
72
+ const fd = new FormData(e.currentTarget, submitter ?? undefined);
73
+ const res = await fetch(action, {
74
+ method: 'POST',
75
+ headers: { 'Accept': 'application/json' },
76
+ body: fd,
77
+ });
78
+ const data = await res.json().catch(() => ({}));
79
+ if (res.status === 422) {
80
+ const next = data.errors ?? {};
81
+ setClientErrors(next);
82
+ // Surface a banner-level message if no field errors were returned
83
+ // — the form-level _form key lights up the existing banner.
84
+ setSubmitting(false);
85
+ return;
86
+ }
87
+ if (!res.ok) {
88
+ const message = String(data.error ?? `Request failed (${res.status})`);
89
+ notify({ type: 'error', title: 'Save failed', body: message });
90
+ setSubmitting(false);
91
+ return;
92
+ }
93
+ // Success — drain notifications and SPA-navigate to the redirect.
94
+ const notifs = data.notifications;
95
+ if (notifs && notifs.length > 0)
96
+ for (const n of notifs)
97
+ notify(n);
98
+ const redirect = String(data.redirect ?? '');
99
+ // The server may force a navigate even when the redirect equals
100
+ // the current URL — used by "Create & create another" so the
101
+ // form remounts with empty defaults instead of preserving the
102
+ // just-submitted values. Otherwise: skip navigate when the
103
+ // redirect matches the current URL, since re-fetching the same
104
+ // page would force a form remount and reset scroll.
105
+ const force = Boolean(data.force);
106
+ const currentUrl = typeof window !== 'undefined'
107
+ ? window.location.pathname + window.location.search
108
+ : '';
109
+ if (redirect && (force || redirect !== currentUrl)) {
110
+ navigate(redirect);
111
+ // Don't reset submitting on success — the navigation will unmount us.
112
+ }
113
+ else {
114
+ setSubmitting(false);
115
+ }
116
+ }
117
+ catch (err) {
118
+ notify({ type: 'error', title: 'Save failed', body: err instanceof Error ? err.message : String(err) });
119
+ setSubmitting(false);
120
+ }
121
+ };
122
+ return (_jsxs("form", { ref: formRef, id: formId || undefined, "data-form-id": formId || undefined, method: httpMethod, action: action, onSubmit: onSubmit, className: "flex flex-col gap-6", children: [formId && _jsx("input", { type: "hidden", name: "_formId", value: formId }), spoofedMethod && _jsx("input", { type: "hidden", name: "_method", value: spoofedMethod }), (formErrors.length > 0 || hasFieldErrors) && (_jsx("div", { className: "rounded-lg border border-destructive/40 bg-destructive/5 text-destructive p-3 text-sm", children: formErrors.length > 0 ? (_jsx("ul", { className: "list-disc pl-4", children: formErrors.map((msg, i) => _jsx("li", { children: msg }, i)) })) : ('Please correct the errors below.') })), _jsx(FormIdContext.Provider, { value: formId, children: useControlled ? (_jsx(FormStateProvider, { initialMeta: el, initialErrors: errors, formRef: formRef, children: _jsx(FormBody, { fallbackChildren: el.children ?? [], fallbackValues: serverValues, fallbackErrors: errors, renderElement: renderElement }) })) : ((el.children ?? []).map((child, i) => renderFormChild(child, i, serverValues, errors, renderElement))) })] }));
123
+ }
124
+ /**
125
+ * Renders the controlled-form's children, sourcing them from the
126
+ * `FormStateProvider`'s current `formMeta` (which gets replaced after
127
+ * each live POST). Falls back to the props if (somehow) used outside a
128
+ * provider — the shell only mounts this when `stateUrl` is set so the
129
+ * fallback path is dead code in practice, but keeping it defensive.
130
+ */
131
+ function FormBody({ fallbackChildren, fallbackValues, fallbackErrors, renderElement, }) {
132
+ const ctx = useFormState();
133
+ if (!ctx) {
134
+ return _jsx(_Fragment, { children: fallbackChildren.map((child, i) => renderFormChild(child, i, fallbackValues, fallbackErrors, renderElement)) });
135
+ }
136
+ const children = (ctx.formMeta.children ?? []);
137
+ return _jsx(_Fragment, { children: children.map((child, i) => renderFormChild(child, i, ctx.values, ctx.errors, renderElement)) });
138
+ }
139
+ /**
140
+ * Render one child of a form's resolved schema with per-field values + errors.
141
+ *
142
+ * Field elements wrap in error-stamp chrome; non-field children fall
143
+ * through to `renderElement` so the form body can host cards / dividers /
144
+ * fieldsets / etc.
145
+ */
146
+ export function renderFormChild(child, index, values, errors, renderElement) {
147
+ if (child.type === 'field') {
148
+ const name = String(child['name'] ?? '');
149
+ const fieldErrors = errors[name] ?? [];
150
+ const value = values[name];
151
+ return (_jsxs("div", { className: "flex flex-col gap-1", children: [renderFieldWithValue(child, index, value, renderElement), fieldErrors.map((msg, i) => (_jsx("p", { className: "text-xs text-destructive", children: msg }, i)))] }, index));
152
+ }
153
+ return renderElement(child, index);
154
+ }
155
+ function renderFieldWithValue(el, index, value, renderElement) {
156
+ // The form-state value (from `withValues` / record-fill) wins when present;
157
+ // otherwise the meta's own `defaultValue` (Plan #6 `Field.default()`) survives.
158
+ const enriched = value !== undefined
159
+ ? { ...el, defaultValue: value }
160
+ : el;
161
+ return renderField(enriched, index, renderElement);
162
+ }
163
+ //# sourceMappingURL=FormRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormRenderer.js","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/FormRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { ElementMeta } from '../../../schema/Element.js';
3
+ type RenderElement = (el: ElementMeta, index: number) => React.ReactNode;
4
+ export declare function renderField(el: ElementMeta, index: number, renderElement: RenderElement): React.ReactNode;
5
+ export {};
6
+ //# sourceMappingURL=renderField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderField.d.ts","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/renderField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAgC7D,KAAK,aAAa,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;AAExE,wBAAgB,WAAW,CACzB,EAAE,EAAa,WAAW,EAC1B,KAAK,EAAU,MAAM,EACrB,aAAa,EAAE,aAAa,GAC3B,KAAK,CAAC,SAAS,CAoFjB"}
@@ -0,0 +1,239 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FieldShell } from '../../fields/FieldShell.js';
3
+ import { TextLikeInput } from '../../fields/TextLikeInput.js';
4
+ import { useTextInputControls } from '../../fields/textInputControls.js';
5
+ import { SelectFieldInput } from '../../fields/SelectFieldInput.js';
6
+ import { ToggleFieldInput } from '../../fields/ToggleFieldInput.js';
7
+ import { DateFieldInput } from '../../fields/DateFieldInput.js';
8
+ import { HiddenInput } from '../../fields/HiddenInput.js';
9
+ import { CheckboxInput } from '../../fields/CheckboxInput.js';
10
+ import { RadioInput } from '../../fields/RadioInput.js';
11
+ import { ToggleButtonsInput } from '../../fields/ToggleButtonsInput.js';
12
+ import { CheckboxListInput } from '../../fields/CheckboxListInput.js';
13
+ import { SliderInput } from '../../fields/SliderInput.js';
14
+ import { ColorInput } from '../../fields/ColorInput.js';
15
+ import { DateTimeInput } from '../../fields/DateTimeInput.js';
16
+ import { KeyValueInput } from '../../fields/KeyValueInput.js';
17
+ import { TagsInput } from '../../fields/TagsInput.js';
18
+ import { FileUploadInput } from '../../fields/FileUploadInput.js';
19
+ import { MarkdownInput } from '../../fields/MarkdownInput.js';
20
+ import { RepeaterInput } from '../../fields/RepeaterInput.js';
21
+ import { BuilderInput } from '../../fields/BuilderInput.js';
22
+ import { getFieldRenderer } from '../../registry.js';
23
+ import { getFieldLabelSlot } from '../../FieldLabelSlotRegistry.js';
24
+ export function renderField(el, index, renderElement) {
25
+ const fieldType = String(el['fieldType'] ?? 'text');
26
+ const name = String(el['name'] ?? '');
27
+ const label = String(el['label'] ?? name);
28
+ const required = Boolean(el['required']);
29
+ const disabled = Boolean(el['disabled']);
30
+ const placeholder = el['placeholder'] ? String(el['placeholder']) : undefined;
31
+ const defaultValue = el['defaultValue'];
32
+ const defaultStr = defaultValue !== undefined && defaultValue !== null ? String(defaultValue) : undefined;
33
+ // Hidden fields render bare — no label, no shell, no chrome. Bail
34
+ // before the renderField switch + FieldShell wrap.
35
+ if (fieldType === 'hidden') {
36
+ return _jsx(HiddenInput, { name: name, defaultValue: defaultValue }, index);
37
+ }
38
+ // Field label slot — rendered next to the label when a plugin registered
39
+ // a component via registerFieldLabelSlot() and the field has aiActions +
40
+ // _agentRunBase stamped on its meta (set by tagFieldAiUrls in pageData).
41
+ const LabelSlot = getFieldLabelSlot();
42
+ const aiActions = Array.isArray(el['aiActions']) ? el['aiActions'] : undefined;
43
+ const agentRunBase = typeof el['_agentRunBase'] === 'string' ? el['_agentRunBase'] : undefined;
44
+ const labelSlot = (LabelSlot && aiActions?.length && agentRunBase)
45
+ ? _jsx(LabelSlot, { fieldName: name, actions: aiActions, agentRunBase: agentRunBase })
46
+ : undefined;
47
+ const autofocus = el['autofocus'] === true;
48
+ const extraInput = el['extraInputAttributes'];
49
+ const common = {
50
+ id: name,
51
+ name,
52
+ disabled,
53
+ placeholder,
54
+ required,
55
+ ...(defaultStr !== undefined ? { defaultValue: defaultStr } : {}),
56
+ ...(autofocus ? { autoFocus: true } : {}),
57
+ ...(extraInput ?? {}),
58
+ };
59
+ // External packages (e.g. @pilotiq/tiptap) register custom renderers
60
+ // for non-built-in fieldTypes. The registry wins over the built-in
61
+ // switch so consumers can override built-ins too if they want.
62
+ const Custom = getFieldRenderer(fieldType);
63
+ if (Custom) {
64
+ return (_jsx(FieldShell, { el: el, name: name, label: label, required: required, labelSlot: labelSlot, children: _jsx(Custom, { el: el, name: name, defaultValue: defaultValue, required: required, disabled: disabled, placeholder: placeholder }) }, index));
65
+ }
66
+ // TextField (and slug) rich affordances live in a dedicated shell so
67
+ // `useTextInputControls` can hold reveal-toggle / mask state via React
68
+ // hooks (renderField itself is a plain function, hooks would violate
69
+ // rules-of-hooks here).
70
+ if (fieldType === 'text' || fieldType === 'slug') {
71
+ return (_jsx(TextFieldShell, { el: el, name: name, label: label, required: required, common: common, labelSlot: labelSlot, renderElement: renderElement }, index));
72
+ }
73
+ const input = renderFieldInput(fieldType, el, name, defaultValue, defaultStr, common, disabled, required, placeholder);
74
+ return (_jsx(FieldShell, { el: el, name: name, label: label, required: required, labelSlot: labelSlot, children: input }, index));
75
+ }
76
+ /**
77
+ * Component-shape TextField renderer — wraps the input shell so we can
78
+ * use `useTextInputControls()` (which holds the eye-toggle / mask state).
79
+ * Keeps `renderField` itself hook-free.
80
+ */
81
+ function TextFieldShell({ el, name, label, required, common, labelSlot, renderElement, }) {
82
+ const controls = useTextInputControls(el, name, (m) => renderElement(m, 0));
83
+ // Build the input with all the new HTML attrs (inputMode /
84
+ // autocapitalize / list / maxLength + the password/text type from
85
+ // the controls hook).
86
+ const textExtra = {};
87
+ if (el['maxLength'] !== undefined)
88
+ textExtra['maxLength'] = Number(el['maxLength']);
89
+ if (el['inputMode'] !== undefined)
90
+ textExtra['inputMode'] = String(el['inputMode']);
91
+ if (el['autocapitalize'] !== undefined)
92
+ textExtra['autoCapitalize'] = String(el['autocapitalize']);
93
+ if (Array.isArray(el['datalist']))
94
+ textExtra['list'] = `${name}__datalist`;
95
+ const datalist = Array.isArray(el['datalist']) ? el['datalist'] : undefined;
96
+ const input = (_jsxs(_Fragment, { children: [_jsx(TextLikeInput, { el: el, name: name, common: common, type: controls.type, extraProps: textExtra, multiline: false, applyMask: controls.applyMask }), datalist && (_jsx("datalist", { id: `${name}__datalist`, children: datalist.map((v, i) => _jsx("option", { value: v }, i)) }))] }));
97
+ return (_jsx(FieldShell, { el: el, name: name, label: label, required: required, before: controls.before, after: controls.after, labelSlot: labelSlot, children: input }));
98
+ }
99
+ function renderFieldInput(fieldType, el, name, defaultValue, defaultStr, common, disabled, required, placeholder) {
100
+ switch (fieldType) {
101
+ case 'textarea': {
102
+ const autosize = el['autosize'] === true;
103
+ const cols = typeof el['cols'] === 'number' ? Number(el['cols']) : undefined;
104
+ const extra = {};
105
+ // `field-sizing-content` on the Textarea component already grows
106
+ // the box with content; `autosize()` just unsets the explicit
107
+ // `rows` so the browser doesn't reserve a fixed minimum height.
108
+ if (!autosize)
109
+ extra['rows'] = Number(el['rows']) || 4;
110
+ if (cols !== undefined)
111
+ extra['cols'] = cols;
112
+ if (el['disableGrammarly'] === true) {
113
+ extra['data-gramm'] = 'false';
114
+ extra['data-gramm_editor'] = 'false';
115
+ extra['data-enable-grammarly'] = 'false';
116
+ }
117
+ return (_jsx(TextLikeInput, { el: el, name: name, common: common, type: "text", extraProps: extra, multiline: true }));
118
+ }
119
+ case 'select': {
120
+ const options = el['options'] ?? [];
121
+ const createOption = el['createOption'];
122
+ const fieldLabel = String(el['label'] ?? name);
123
+ return (_jsx(SelectFieldInput, { name: name, defaultValue: defaultStr, disabled: disabled, required: required, placeholder: placeholder, options: options, fieldLabel: fieldLabel, ...(createOption ? { createOption } : {}) }));
124
+ }
125
+ case 'toggle': {
126
+ const initialChecked = defaultValue === true || defaultValue === 'true' || defaultValue === 1 || defaultValue === '1';
127
+ return _jsx(ToggleFieldInput, { name: name, defaultChecked: initialChecked, disabled: disabled });
128
+ }
129
+ case 'checkbox': {
130
+ const initialChecked = defaultValue === true || defaultValue === 'true' || defaultValue === 1 || defaultValue === '1';
131
+ return _jsx(CheckboxInput, { name: name, defaultChecked: initialChecked, disabled: disabled });
132
+ }
133
+ case 'radio': {
134
+ const options = el['options'] ?? [];
135
+ const inline = Boolean(el['inline']);
136
+ return (_jsx(RadioInput, { name: name, defaultValue: defaultStr, disabled: disabled, options: options, inline: inline }));
137
+ }
138
+ case 'toggleButtons': {
139
+ const options = el['options'] ?? [];
140
+ return (_jsx(ToggleButtonsInput, { name: name, defaultValue: defaultStr, disabled: disabled, options: options }));
141
+ }
142
+ case 'checkboxList': {
143
+ const options = el['options'] ?? [];
144
+ const columns = Number(el['columns']) || 1;
145
+ return (_jsx(CheckboxListInput, { name: name, defaultValue: defaultValue, disabled: disabled, options: options, columns: columns }));
146
+ }
147
+ case 'slider': {
148
+ return (_jsx(SliderInput, { name: name, defaultValue: defaultValue, disabled: disabled, min: Number(el['min']) || 0, max: Number(el['max']) || 100, step: Number(el['step']) || 1, showValue: Boolean(el['showValue']) }));
149
+ }
150
+ case 'color': {
151
+ return (_jsx(ColorInput, { name: name, defaultValue: defaultValue, disabled: disabled }));
152
+ }
153
+ case 'keyValue': {
154
+ return (_jsx(KeyValueInput, { name: name, defaultValue: defaultValue, disabled: disabled, keyLabel: String(el['keyLabel'] ?? 'Key'), valueLabel: String(el['valueLabel'] ?? 'Value'), addLabel: String(el['addLabel'] ?? 'Add row'), reorderable: Boolean(el['reorderable']) }));
155
+ }
156
+ case 'tagsInput': {
157
+ const suggestions = el['suggestions'] ?? [];
158
+ // separator: omitted → ',' (default); explicit null → null (disabled).
159
+ const separator = 'separator' in el
160
+ ? el['separator']
161
+ : ',';
162
+ const splitKeys = el['splitKeys'] ?? ['Enter'];
163
+ const maxTags = typeof el['maxTags'] === 'number' ? el['maxTags'] : null;
164
+ const reorderable = Boolean(el['reorderable']);
165
+ return (_jsx(TagsInput, { name: name, defaultValue: defaultValue, disabled: disabled, placeholder: placeholder, suggestions: suggestions, separator: separator, splitKeys: splitKeys, maxTags: maxTags, reorderable: reorderable }));
166
+ }
167
+ case 'fileUpload': {
168
+ return (_jsx(FileUploadInput, { name: name, defaultValue: defaultValue, disabled: disabled, accept: el['accept'], maxSize: typeof el['maxSize'] === 'number' ? el['maxSize'] : undefined, multiple: Boolean(el['multiple']), preview: el['preview'] !== false, directory: typeof el['directory'] === 'string' ? el['directory'] : undefined, uploadUrl: typeof el['uploadUrl'] === 'string' ? el['uploadUrl'] : undefined, downloadable: Boolean(el['downloadable']), openable: Boolean(el['openable']), reorderable: Boolean(el['reorderable']), appendFiles: Boolean(el['appendFiles']), panelLayout: el['panelLayout'] === 'grid' ? 'grid'
169
+ : el['panelLayout'] === 'integrated' ? 'integrated'
170
+ : 'list', ...(el['automaticallyResize'] && typeof el['automaticallyResize'] === 'object'
171
+ ? { automaticallyResize: el['automaticallyResize'] }
172
+ : {}), imageEditor: Boolean(el['imageEditor']), circleCropper: Boolean(el['circleCropper']), automaticallyCropImagesToAspectRatio: Boolean(el['automaticallyCropImagesToAspectRatio']), ...(Array.isArray(el['imageEditorAspectRatioOptions'])
173
+ ? { imageEditorAspectRatioOptions: el['imageEditorAspectRatioOptions'] }
174
+ : {}) }));
175
+ }
176
+ case 'markdown': {
177
+ const toolbarButtons = el['toolbarButtons'] ?? [];
178
+ return (_jsx(MarkdownInput, { name: name, defaultValue: defaultValue, disabled: disabled, placeholder: placeholder, toolbarButtons: toolbarButtons, minHeight: typeof el['minHeight'] === 'string' ? el['minHeight'] : undefined, maxHeight: typeof el['maxHeight'] === 'string' ? el['maxHeight'] : undefined, fileAttachmentsDirectory: typeof el['fileAttachmentsDirectory'] === 'string' ? el['fileAttachmentsDirectory'] : undefined, fileAttachmentsVisibility: typeof el['fileAttachmentsVisibility'] === 'string' ? el['fileAttachmentsVisibility'] : undefined, uploadUrl: typeof el['uploadUrl'] === 'string' ? el['uploadUrl'] : undefined }));
179
+ }
180
+ case 'repeater':
181
+ return _jsx(RepeaterInput, { el: el, name: name, disabled: disabled });
182
+ case 'builder':
183
+ return _jsx(BuilderInput, { el: el, name: name, disabled: disabled });
184
+ case 'dateTime': {
185
+ // Normalize various input shapes to YYYY-MM-DDTHH:mm.
186
+ let local;
187
+ if (defaultValue instanceof Date) {
188
+ local = isNaN(defaultValue.getTime())
189
+ ? undefined
190
+ : defaultValue.toISOString().slice(0, 16);
191
+ }
192
+ else if (typeof defaultValue === 'string' && defaultValue) {
193
+ const parsed = new Date(defaultValue);
194
+ local = isNaN(parsed.getTime()) ? undefined : parsed.toISOString().slice(0, 16);
195
+ }
196
+ return (_jsx(DateTimeInput, { name: name, defaultValue: local, disabled: disabled, placeholder: placeholder }));
197
+ }
198
+ case 'number': {
199
+ const numProps = {};
200
+ if (el['min'] !== undefined)
201
+ numProps['min'] = Number(el['min']);
202
+ if (el['max'] !== undefined)
203
+ numProps['max'] = Number(el['max']);
204
+ if (el['step'] !== undefined)
205
+ numProps['step'] = Number(el['step']);
206
+ return (_jsx(TextLikeInput, { el: el, name: name, common: common, type: "number", extraProps: numProps, multiline: false }));
207
+ }
208
+ case 'email':
209
+ return (_jsx(TextLikeInput, { el: el, name: name, common: common, type: "email", extraProps: {}, multiline: false }));
210
+ case 'date': {
211
+ // SSR may hand us a JS Date object directly; SPA JSON nav arrives as
212
+ // an ISO string. Normalize both into a `YYYY-MM-DD` slice — naive
213
+ // string slicing on `Date.toString()` ("Mon Apr 27 2026 ...") gives
214
+ // garbage when re-parsed, so handle the Date branch explicitly.
215
+ let iso;
216
+ if (defaultValue instanceof Date) {
217
+ iso = isNaN(defaultValue.getTime())
218
+ ? undefined
219
+ : defaultValue.toISOString().slice(0, 10);
220
+ }
221
+ else if (typeof defaultValue === 'string' && defaultValue) {
222
+ const parsed = new Date(defaultValue);
223
+ iso = isNaN(parsed.getTime())
224
+ ? undefined
225
+ : parsed.toISOString().slice(0, 10);
226
+ }
227
+ return (_jsx(DateFieldInput, { name: name, defaultValue: iso, disabled: disabled, placeholder: placeholder }));
228
+ }
229
+ // `text` / `slug` short-circuit through `TextFieldShell` above; the
230
+ // bare default covers unknown fieldType strings.
231
+ default: {
232
+ const textExtra = {};
233
+ if (el['maxLength'] !== undefined)
234
+ textExtra['maxLength'] = Number(el['maxLength']);
235
+ return (_jsx(TextLikeInput, { el: el, name: name, common: common, type: "text", extraProps: textExtra, multiline: false }));
236
+ }
237
+ }
238
+ }
239
+ //# sourceMappingURL=renderField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderField.js","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/renderField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import type { ComponentType } from 'react';
3
+ import type { ElementMeta } from '../../schema/Element.js';
4
+ /** Resolve an icon name through the user-extensible registry. Returns
5
+ * `undefined` when the name isn't registered — callers fall back to
6
+ * their own default. Pilotiq's own chrome never depends on the
7
+ * registry. */
8
+ export type IconCmp = ComponentType<{
9
+ className?: string;
10
+ style?: React.CSSProperties;
11
+ 'aria-hidden'?: boolean | 'true' | 'false';
12
+ 'aria-label'?: string;
13
+ }>;
14
+ export declare function resolveIcon(name: string | undefined): IconCmp | undefined;
15
+ /** Map an element's optional `_layout` hints (Plan #8 — columnSpan /
16
+ * columnStart / columnOrder) to Tailwind utility classes. Returns an
17
+ * empty string when the element has no layout hints. Outside of a
18
+ * parent Grid/Split the classes have no effect — Tailwind generates
19
+ * `col-span-*` / `col-start-*` / `order-*` regardless of context.
20
+ *
21
+ * Tailwind's JIT only ships utilities up to a fixed range; clamp here
22
+ * to the safe defaults (1..12 for col, 1..12 for order). */
23
+ export declare function layoutClasses(el: ElementMeta): string;
24
+ /** Wrap a child list in a flex column with consistent gap. Caller
25
+ * passes its own `renderElement` so this helper stays free of the
26
+ * SchemaRenderer ↔ leaf-renderers cycle. */
27
+ export declare function renderChildren(children: ElementMeta[] | undefined, gap: string, renderElement: (el: ElementMeta, index: number) => React.ReactNode): React.ReactNode;
28
+ /** Wrap a node in the standard hover tooltip. Returns the node as-is when
29
+ * `tooltip` is falsy. Used wherever a button/affordance needs an
30
+ * on-hover label without owning its own Popover. */
31
+ export declare function withTooltip(node: React.ReactNode, tooltip: string | undefined): React.ReactNode;
32
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/helpers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAI1D;;;eAGe;AACf,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAGzE;AAED;;;;;;;4DAO4D;AAC5D,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAmBrD;AAED;;4CAE4C;AAC5C,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,EAAE,GAAG,SAAS,EACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,GACjE,KAAK,CAAC,SAAS,CAOjB;AAED;;qDAEqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAU/F"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getIcon } from '../../icons/registry.js';
3
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip.js';
4
+ export function resolveIcon(name) {
5
+ if (!name)
6
+ return undefined;
7
+ return getIcon(name);
8
+ }
9
+ /** Map an element's optional `_layout` hints (Plan #8 — columnSpan /
10
+ * columnStart / columnOrder) to Tailwind utility classes. Returns an
11
+ * empty string when the element has no layout hints. Outside of a
12
+ * parent Grid/Split the classes have no effect — Tailwind generates
13
+ * `col-span-*` / `col-start-*` / `order-*` regardless of context.
14
+ *
15
+ * Tailwind's JIT only ships utilities up to a fixed range; clamp here
16
+ * to the safe defaults (1..12 for col, 1..12 for order). */
17
+ export function layoutClasses(el) {
18
+ const layout = el['_layout'];
19
+ if (!layout)
20
+ return '';
21
+ const out = [];
22
+ if (typeof layout.columnSpan === 'number') {
23
+ const span = Math.max(1, Math.min(12, layout.columnSpan));
24
+ out.push(`col-span-${span}`);
25
+ }
26
+ if (typeof layout.columnStart === 'number') {
27
+ const start = Math.max(1, Math.min(12, layout.columnStart));
28
+ out.push(`col-start-${start}`);
29
+ }
30
+ if (typeof layout.columnOrder === 'number') {
31
+ const order = Math.max(1, Math.min(12, layout.columnOrder));
32
+ out.push(`order-${order}`);
33
+ }
34
+ return out.join(' ');
35
+ }
36
+ /** Wrap a child list in a flex column with consistent gap. Caller
37
+ * passes its own `renderElement` so this helper stays free of the
38
+ * SchemaRenderer ↔ leaf-renderers cycle. */
39
+ export function renderChildren(children, gap, renderElement) {
40
+ if (!children || children.length === 0)
41
+ return null;
42
+ return (_jsx("div", { className: `flex flex-col ${gap}`, children: children.map((child, i) => renderElement(child, i)) }));
43
+ }
44
+ /** Wrap a node in the standard hover tooltip. Returns the node as-is when
45
+ * `tooltip` is falsy. Used wherever a button/affordance needs an
46
+ * on-hover label without owning its own Popover. */
47
+ export function withTooltip(node, tooltip) {
48
+ if (!tooltip)
49
+ return node;
50
+ return (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: () => node }), _jsx(TooltipContent, { children: tooltip })] }) }));
51
+ }
52
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/helpers.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAa3F,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,OAAO,OAAO,CAAC,IAAI,CAAwB,CAAA;AAC7C,CAAC;AAED;;;;;;;4DAO4D;AAC5D,MAAM,UAAU,aAAa,CAAC,EAAe;IAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAEd,CAAA;IACb,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IACtB,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,OAAO,MAAM,CAAC,UAAU,KAAM,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;QACzD,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QAC3D,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QAC3D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED;;4CAE4C;AAC5C,MAAM,UAAU,cAAc,CAC5B,QAAmC,EACnC,GAAW,EACX,aAAkE;IAElE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnD,OAAO,CACL,cAAK,SAAS,EAAE,iBAAiB,GAAG,EAAE,YACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAChD,CACP,CAAA;AACH,CAAC;AAED;;qDAEqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAqB,EAAE,OAA2B;IAC5E,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,OAAO,CACL,KAAC,eAAe,cACd,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAA0B,GAAI,EAC5D,KAAC,cAAc,cAAE,OAAO,GAAkB,IAClC,GACM,CACnB,CAAA;AACH,CAAC"}
@@ -0,0 +1,60 @@
1
+ import React from 'react';
2
+ import type { ElementMeta } from '../../../schema/Element.js';
3
+ import type { NavigateFn } from '../../navigate.js';
4
+ type RenderElement = (el: ElementMeta, index: number) => React.ReactNode;
5
+ type RenderRowActions = (rowId: string, rowRecord: Record<string, unknown> | undefined, actions: ElementMeta[]) => React.ReactNode;
6
+ export declare function pickCardCols(table: Record<number, string>, raw: number | undefined): string | undefined;
7
+ /** Build a Tailwind grid-cols class string from a per-row config. Default
8
+ * `{ default: 1, sm: 2, lg: 3 }` mirrors Filament's typical card grid. */
9
+ export declare function cardsPerRowClasses(opts: Record<string, number> | undefined): string;
10
+ /**
11
+ * Card-grid body for `Table.contentLayout('cards')`. Renders the rows
12
+ * area only — the surrounding chrome (heading / search / filters /
13
+ * pagination / bulk-action toolbar / "Sort by" picker) lives in the
14
+ * parent `TableRendererBody` so both layouts share it.
15
+ *
16
+ * Each card renders its `_cardChildren` schema via the standard
17
+ * `renderElement` walker, so any display-Element (Heading, Text, Image,
18
+ * Icon, Badge entries, layout primitives, etc.) drops in without a new
19
+ * renderer. Per-row chrome attaches via the same `_recordUrl` /
20
+ * `_recordClasses` / `_visibleActions` / `_disabledActions` keys the
21
+ * table-mode renderer reads from — `loadTableRecords` is unchanged.
22
+ *
23
+ * Group banding splits the rows into contiguous sections by
24
+ * `_groupValue`, emitting a heading row above each section. The user's
25
+ * configured per-card grid (`cardsPerRow`) re-applies inside every
26
+ * section so the column count stays consistent.
27
+ */
28
+ export declare function CardsLayoutBody({ rows, visibleIds, selected, toggleRow, hasBulkActions, hasRowActions, rowActions, hasRecordUrl, hasRecordClasses, activeEmpty, EmptyIcon, hasFilterOrSearch, defaultGroup, groupColumnLabel, groupCollapsible, collapsedGroups, toggleGroupCollapsed, cardsPerRow, navigate, groupHeadingScopable, buildGroupKeyHref, renderElement, renderRowActions, }: {
29
+ rows: unknown[];
30
+ visibleIds: string[];
31
+ selected: Set<string>;
32
+ toggleRow: (id: string) => void;
33
+ hasBulkActions: boolean;
34
+ hasRowActions: boolean;
35
+ rowActions: ElementMeta[];
36
+ hasRecordUrl: boolean;
37
+ hasRecordClasses: boolean;
38
+ activeEmpty: {
39
+ heading?: string;
40
+ description?: string;
41
+ icon?: string;
42
+ } | undefined;
43
+ EmptyIcon: React.ComponentType<{
44
+ className?: string;
45
+ }>;
46
+ hasFilterOrSearch: boolean;
47
+ defaultGroup: string | undefined;
48
+ groupColumnLabel: string | undefined;
49
+ groupCollapsible: boolean;
50
+ collapsedGroups: Record<string, boolean>;
51
+ toggleGroupCollapsed: (groupValue: string) => void;
52
+ cardsPerRow: Record<string, number> | undefined;
53
+ navigate: NavigateFn;
54
+ groupHeadingScopable?: boolean;
55
+ buildGroupKeyHref?: (value: string) => string;
56
+ renderElement: RenderElement;
57
+ renderRowActions: RenderRowActions;
58
+ }): import("react/jsx-runtime").JSX.Element;
59
+ export {};
60
+ //# sourceMappingURL=CardsLayoutBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardsLayoutBody.d.ts","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/table/CardsLayoutBody.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAI7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD,KAAK,aAAa,GAAM,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;AAC3E,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,SAAS,CAAA;AA6ClI,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYvG;AAED;0EAC0E;AAC1E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAenF;AAGD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EACrC,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EACzE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EACzC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EACvF,WAAW,EAAE,QAAQ,EACrB,oBAAoB,EAAE,iBAAiB,EACvC,aAAa,EAAE,gBAAgB,GAChC,EAAE;IACD,IAAI,EAAe,OAAO,EAAE,CAAA;IAC5B,UAAU,EAAS,MAAM,EAAE,CAAA;IAC3B,QAAQ,EAAW,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,SAAS,EAAU,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,cAAc,EAAK,OAAO,CAAA;IAC1B,aAAa,EAAM,OAAO,CAAA;IAC1B,UAAU,EAAS,WAAW,EAAE,CAAA;IAChC,YAAY,EAAO,OAAO,CAAA;IAC1B,gBAAgB,EAAG,OAAO,CAAA;IAC1B,WAAW,EAAQ;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IACxF,SAAS,EAAU,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9D,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAO,MAAM,GAAG,SAAS,CAAA;IACrC,gBAAgB,EAAG,MAAM,GAAG,SAAS,CAAA;IACrC,gBAAgB,EAAG,OAAO,CAAA;IAC1B,eAAe,EAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC1C,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,WAAW,EAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACrD,QAAQ,EAAW,UAAU,CAAA;IAG7B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,iBAAiB,CAAC,EAAK,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAGhD,aAAa,EAAM,aAAa,CAAA;IAChC,gBAAgB,EAAG,gBAAgB,CAAA;CACpC,2CAmKA"}