@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,497 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React, { useRef, useState } from 'react';
3
+ import { CheckIcon, Columns3Icon, FilterIcon } from 'lucide-react';
4
+ import { Checkbox } from '../../ui/checkbox.js';
5
+ import { Input } from '../../ui/input.js';
6
+ import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover.js';
7
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
8
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '../../ui/dropdown-menu.js';
9
+ import { useNavigate } from '../../navigate.js';
10
+ import { parseDateRangeValue, encodeDateRangeValue, } from '../../../filters/DateRangeFilter.js';
11
+ import { parseMultiSelectValue, encodeMultiSelectValue, } from '../../../filters/MultiSelectFilter.js';
12
+ import { encodeFormFilterValue } from '../../../filters/FormFilter.js';
13
+ import { parseQueryBuilderValue, encodeQueryBuilderValue, isQueryBuilderTree, } from '../../../filters/QueryBuilderFilter.js';
14
+ import { patchFilterUrl } from './url.js';
15
+ // ─── Filter chrome + table-toolbar dropdowns ────────────────
16
+ //
17
+ // Every filter UI piece — from the per-filter widget (Select / MultiSelect
18
+ // / DateRange / Form / QueryBuilder) to the wrapping Popover / inline
19
+ // strip / collapsible toggle — plus toolbar siblings (SortByPicker,
20
+ // ColumnsToggleDropdown, TableGroupPicker) and the renderFilterControl
21
+ // switch that picks the right widget per filter kind.
22
+ /**
23
+ * Active-filters bar — pill row above the table summarising every filter
24
+ * with a current value. Each pill shows the filter's `indicator` text
25
+ * (server-formatted via `Filter.indicator()` / per-subclass defaults) and
26
+ * an `×` button that clears that filter's URL key in place. Clicking ×
27
+ * also drops `?page` so users land on the first page of the relaxed set.
28
+ *
29
+ * Renders nothing when no filter has an indicator.
30
+ */
31
+ export function ActiveFiltersBar({ filters, prefix }) {
32
+ const navigate = useNavigate();
33
+ const active = filters.filter(f => typeof f['indicator'] === 'string' && f['indicator'] !== '');
34
+ if (active.length === 0)
35
+ return null;
36
+ const clear = (name) => {
37
+ patchFilterUrl(navigate, prefix, { [name]: null });
38
+ };
39
+ const clearAll = () => {
40
+ const patches = {};
41
+ for (const f of active)
42
+ patches[String(f['name'] ?? '')] = null;
43
+ patchFilterUrl(navigate, prefix, patches);
44
+ };
45
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 text-xs", children: [active.map((f, i) => {
46
+ const name = String(f['name'] ?? '');
47
+ const indicator = String(f['indicator'] ?? '');
48
+ return (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full border border-border bg-muted/40 pl-2.5 pr-1 py-0.5", children: [_jsx("span", { children: indicator }), _jsx("button", { type: "button", onClick: () => clear(name), "aria-label": `Clear filter ${indicator}`, className: "inline-flex size-4 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground", children: "\u00D7" })] }, i));
49
+ }), active.length > 1 && (_jsx("button", { type: "button", onClick: clearAll, className: "text-muted-foreground hover:text-foreground underline-offset-2 hover:underline", children: "Clear all" }))] }));
50
+ }
51
+ /**
52
+ * Filter icon button + Popover containing every filter control.
53
+ * Opens on click; the inner Selects don't dismiss the outer Popover when
54
+ * an option is chosen (Base UI Popover doesn't auto-close on inner clicks).
55
+ *
56
+ * Each FilterSelect navigates the page on change (window.location), so the
57
+ * filter form is no longer needed — keeps the search input in its own
58
+ * lightweight form for native Enter-to-submit.
59
+ */
60
+ export function FilterPopover({ filters, prefix, renderFormChild }) {
61
+ const activeCount = filters.filter(f => {
62
+ const v = f['value'];
63
+ return typeof v === 'string' && v !== '';
64
+ }).length;
65
+ return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { render: (props) => (_jsxs("button", { ...props, type: "button", "aria-label": "Filters", className: "relative inline-flex h-9 items-center justify-center gap-1.5 rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent hover:text-accent-foreground", children: [_jsx(FilterIcon, { className: "size-4" }), _jsx("span", { children: "Filters" }), activeCount > 0 && (_jsx("span", { className: "ml-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-medium text-primary-foreground", children: activeCount }))] })) }), _jsx(PopoverContent, { align: "start", className: filters.some(f => f['kind'] === 'queryBuilder')
66
+ ? 'w-[36rem] max-w-[calc(100vw-2rem)] p-3'
67
+ : 'w-72 p-3', children: _jsx("div", { className: "flex flex-col gap-3", children: filters.map((f, i) => renderFilterControl(f, i, prefix, renderFormChild)) }) })] }));
68
+ }
69
+ /**
70
+ * Inline strip of filter controls — used by `Table.filtersLayout('above-content'
71
+ * | 'above-content-collapsible' | 'below-content')`. Mirrors `FilterPopover`'s
72
+ * inner body but lays the controls out in a wrapping row instead of a
73
+ * vertical stack inside a popover.
74
+ */
75
+ export function FilterStrip({ filters, prefix, renderFormChild }) {
76
+ if (filters.length === 0)
77
+ return null;
78
+ return (_jsx("div", { className: "flex flex-col gap-3 rounded-md border bg-muted/30 p-3 sm:flex-row sm:flex-wrap sm:items-end", children: filters.map((f, i) => (_jsx("div", { className: "min-w-[12rem] flex-1 sm:max-w-xs", children: renderFilterControl(f, i, prefix, renderFormChild) }, i))) }));
79
+ }
80
+ /**
81
+ * Toolbar button paired with `FilterStrip` for `Table.filtersLayout(
82
+ * 'above-content-collapsible')`. Visually matches the modal-mode trigger
83
+ * (filter icon + "Filters" label + active-count badge) but flips a parent-
84
+ * owned `open` state instead of opening a Popover.
85
+ */
86
+ export function FilterStripToggle({ filters, open, onToggle, }) {
87
+ const activeCount = filters.filter(f => {
88
+ const v = f['value'];
89
+ return typeof v === 'string' && v !== '';
90
+ }).length;
91
+ return (_jsxs("button", { type: "button", "aria-label": "Filters", "aria-expanded": open, onClick: onToggle, className: "relative inline-flex h-9 items-center justify-center gap-1.5 rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent hover:text-accent-foreground", children: [_jsx(FilterIcon, { className: "size-4" }), _jsx("span", { children: "Filters" }), activeCount > 0 && (_jsx("span", { className: "ml-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-medium text-primary-foreground", children: activeCount }))] }));
92
+ }
93
+ /**
94
+ * Filter dropdown that updates the URL directly on change. We don't rely
95
+ * on a wrapping `<form>` because filters now live inside a portaled
96
+ * Popover (the search input keeps its own form for Enter-to-submit).
97
+ *
98
+ * Empty value (`''`) is the "All" sentinel — the param is removed from
99
+ * the URL rather than serialized as `&name=`.
100
+ */
101
+ export function FilterSelect({ name, label, defaultValue, placeholder, options, prefix, }) {
102
+ const [value, setValue] = useState(defaultValue);
103
+ const navigate = useNavigate();
104
+ const onChange = (next) => {
105
+ const v = typeof next === 'string' ? next : '';
106
+ setValue(v);
107
+ patchFilterUrl(navigate, prefix, { [name]: v });
108
+ };
109
+ return (_jsxs("div", { className: "flex flex-col gap-1 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: label }), _jsxs(Select, { value: value, onValueChange: onChange, children: [_jsx(SelectTrigger, { size: "sm", className: "w-full", children: _jsx(SelectValue, { placeholder: placeholder }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "", children: placeholder }), options.map(o => (_jsx(SelectItem, { value: o.value, children: o.label }, o.value)))] })] })] }));
110
+ }
111
+ /**
112
+ * Heading-row text for a group band. Shows `<label>: <value-or-title>`
113
+ * with an optional description below. Reused for both collapsible and
114
+ * static heading rows.
115
+ */
116
+ export function GroupHeaderText({ label, value, title, description, }) {
117
+ const display = title ?? value ?? '';
118
+ return (_jsxs("span", { className: "flex flex-col gap-0.5", children: [_jsxs("span", { children: [label && _jsxs("span", { className: "text-muted-foreground/70", children: [label, ": "] }), _jsx("span", { className: "text-foreground", children: display || 'Ungrouped' })] }), description && (_jsx("span", { className: "text-[10px] font-normal normal-case text-muted-foreground/80", children: description }))] }));
119
+ }
120
+ /**
121
+ * "Group by" dropdown rendered above the table when 2+ TableGroups
122
+ * are registered (or 1 group with rich metadata). Selecting "None"
123
+ * sets `?group=` (empty) which explicitly overrides `defaultGroup`.
124
+ *
125
+ * URL-driven — `onChange` builds the next href via `buildTableQuery`
126
+ * and SPA-navigates; the page re-renders with the new active group.
127
+ */
128
+ export function TableGroupPicker({ options, active, onChange, }) {
129
+ const value = active ?? '';
130
+ return (_jsxs(Select, { value: value, onValueChange: (v) => onChange(typeof v === 'string' ? v : ''), children: [_jsx(SelectTrigger, { size: "sm", className: "h-9 w-44", children: _jsx(SelectValue, { placeholder: "Group by\u2026" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "", children: "No grouping" }), options.map(o => (_jsx(SelectItem, { value: o.column, children: o.label }, o.column)))] })] }));
131
+ }
132
+ /**
133
+ * Pair-of-date-inputs filter for `kind === 'dateRange'`. Each side
134
+ * navigates the URL on change, encoding the pair as `from..to` keyed
135
+ * off the filter name. Empty pair drops the URL key.
136
+ */
137
+ export function FilterDateRange({ name, label, defaultValue, placeholder, includesTime, minDate, maxDate, prefix, }) {
138
+ const initial = parseDateRangeValue(defaultValue);
139
+ const [from, setFrom] = useState(initial.from ?? '');
140
+ const [to, setTo] = useState(initial.to ?? '');
141
+ const navigate = useNavigate();
142
+ const inputType = includesTime ? 'datetime-local' : 'date';
143
+ const navigateTo = (nextFrom, nextTo) => {
144
+ patchFilterUrl(navigate, prefix, {
145
+ [name]: encodeDateRangeValue({ from: nextFrom, to: nextTo }),
146
+ });
147
+ };
148
+ const onFromChange = (e) => {
149
+ const v = e.target.value;
150
+ setFrom(v);
151
+ navigateTo(v, to);
152
+ };
153
+ const onToChange = (e) => {
154
+ const v = e.target.value;
155
+ setTo(v);
156
+ navigateTo(from, v);
157
+ };
158
+ const onClear = () => {
159
+ setFrom('');
160
+ setTo('');
161
+ navigateTo('', '');
162
+ };
163
+ const hasValue = from !== '' || to !== '';
164
+ return (_jsxs("div", { className: "flex flex-col gap-1 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: label }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Input, { type: inputType, value: from, onChange: onFromChange, placeholder: placeholder, "aria-label": `${label} from`, ...(minDate !== undefined ? { min: minDate } : {}), ...(maxDate !== undefined ? { max: maxDate } : {}), className: "h-8 text-xs" }), _jsx("span", { className: "text-muted-foreground", children: "\u2192" }), _jsx(Input, { type: inputType, value: to, onChange: onToChange, placeholder: placeholder, "aria-label": `${label} to`, ...(minDate !== undefined ? { min: minDate } : {}), ...(maxDate !== undefined ? { max: maxDate } : {}), className: "h-8 text-xs" }), hasValue && (_jsx("button", { type: "button", onClick: onClear, "aria-label": `Clear ${label}`, className: "text-muted-foreground hover:text-foreground px-1", children: "\u00D7" }))] })] }));
165
+ }
166
+ /**
167
+ * Multi-value filter for `kind === 'multiSelect'`. Renders a checkbox
168
+ * stack inside the popover; toggling a box patches the comma-separated
169
+ * URL value for the filter's name. Empty selection drops the URL key.
170
+ */
171
+ export function FilterMultiSelect({ name, label, defaultValue, options, prefix, }) {
172
+ const [selected, setSelected] = useState(() => parseMultiSelectValue(defaultValue));
173
+ const navigate = useNavigate();
174
+ const apply = (next) => {
175
+ setSelected(next);
176
+ patchFilterUrl(navigate, prefix, { [name]: encodeMultiSelectValue(next) });
177
+ };
178
+ const toggle = (value, checked) => {
179
+ const next = checked
180
+ ? [...selected.filter(v => v !== value), value]
181
+ : selected.filter(v => v !== value);
182
+ apply(next);
183
+ };
184
+ return (_jsxs("div", { className: "flex flex-col gap-1 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: label }), _jsx("div", { className: "flex flex-col gap-1.5", children: options.map(o => {
185
+ const checked = selected.includes(o.value);
186
+ return (_jsxs("label", { className: "flex items-center gap-2 text-sm cursor-pointer", children: [_jsx(Checkbox, { checked: checked, onCheckedChange: (c) => toggle(o.value, c === true) }), _jsx("span", { children: o.label })] }, o.value));
187
+ }) })] }));
188
+ }
189
+ /**
190
+ * Multi-field filter for `kind === 'form'`. The popover renders an inner
191
+ * sub-form with the user-declared schema; submitting bundles all named
192
+ * inputs into a `Record<string, unknown>`, JSON-encodes the non-empty
193
+ * subset under the filter's URL key, and SPA-navigates. Empty submit
194
+ * drops the URL key entirely.
195
+ *
196
+ * The fields' `defaultValue` were pre-hydrated server-side from the
197
+ * active URL value (see `FormFilter.toMeta`), so an existing filter
198
+ * round-trips into the form on render. Inputs are uncontrolled — we
199
+ * read state via `new FormData(form)` on submit, matching how the
200
+ * outer page-level Form works on full submit.
201
+ */
202
+ export function FilterForm({ name, label, defaultValue, formSchema, prefix, renderFormChild, }) {
203
+ const formRef = useRef(null);
204
+ const navigate = useNavigate();
205
+ const hasValue = defaultValue !== '' && defaultValue !== '{}';
206
+ const onApply = (e) => {
207
+ e?.preventDefault();
208
+ if (!formRef.current)
209
+ return;
210
+ const fd = new FormData(formRef.current);
211
+ const values = {};
212
+ for (const [key, val] of fd.entries()) {
213
+ const existing = values[key];
214
+ if (existing === undefined) {
215
+ values[key] = val;
216
+ }
217
+ else if (Array.isArray(existing)) {
218
+ existing.push(val);
219
+ }
220
+ else {
221
+ values[key] = [existing, val];
222
+ }
223
+ }
224
+ patchFilterUrl(navigate, prefix, { [name]: encodeFormFilterValue(values) });
225
+ };
226
+ const onClear = () => {
227
+ patchFilterUrl(navigate, prefix, { [name]: null });
228
+ };
229
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: label }), _jsxs("form", { ref: formRef, onSubmit: onApply, className: "flex flex-col gap-2", children: [formSchema.map((child, i) => renderFormChild(child, i, {}, {})), _jsxs("div", { className: "flex gap-2 pt-1", children: [_jsx("button", { type: "submit", className: "inline-flex h-8 items-center justify-center rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90", children: "Apply" }), hasValue && (_jsx("button", { type: "button", onClick: onClear, className: "inline-flex h-8 items-center justify-center rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground", children: "Clear" }))] })] })] }));
230
+ }
231
+ /**
232
+ * Composable advanced filter for `kind === 'queryBuilder'`. v2 emits a
233
+ * full tree — root AND/OR connector + nested groups arbitrarily deep —
234
+ * JSON-encoded into a single URL key on Apply (see
235
+ * `encodeQueryBuilderValue`).
236
+ *
237
+ * State is local — typing into a value input doesn't navigate. Only the
238
+ * Apply button writes the URL. This mirrors `FilterForm`'s behavior and
239
+ * keeps the popover quiet under the cursor.
240
+ */
241
+ export function FilterQueryBuilder({ name, label, defaultValue, constraints, prefix, }) {
242
+ const navigate = useNavigate();
243
+ const initialTree = parseQueryBuilderValue(defaultValue);
244
+ const [tree, setTree] = useState(initialTree);
245
+ const hasValue = defaultValue !== '' && initialTree.rules.length > 0;
246
+ const onApply = (e) => {
247
+ e?.preventDefault();
248
+ patchFilterUrl(navigate, prefix, { [name]: encodeQueryBuilderValue(tree) });
249
+ };
250
+ const onClear = () => {
251
+ setTree({ operator: 'and', rules: [] });
252
+ patchFilterUrl(navigate, prefix, { [name]: null });
253
+ };
254
+ if (constraints.length === 0) {
255
+ return (_jsxs("div", { className: "text-muted-foreground text-xs", children: [label, ": no constraints declared."] }));
256
+ }
257
+ return (_jsxs("div", { className: "flex flex-col gap-2 min-w-[24rem]", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: label }), _jsxs("form", { onSubmit: onApply, className: "flex flex-col gap-2", children: [_jsx(QueryBuilderGroup, { tree: tree, constraints: constraints, isRoot: true, onChange: setTree }), _jsxs("div", { className: "flex items-center gap-2 pt-1", children: [_jsx("div", { className: "flex-1" }), _jsx("button", { type: "submit", className: "inline-flex h-8 items-center justify-center rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90", children: "Apply" }), (hasValue || tree.rules.length > 0) && (_jsx("button", { type: "button", onClick: onClear, className: "inline-flex h-8 items-center justify-center rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground", children: "Clear" }))] })] })] }));
258
+ }
259
+ /**
260
+ * Recursive group renderer — emits a connector picker (AND / OR) at the
261
+ * top, a vertical stack of children (rules and sub-groups), and footer
262
+ * buttons for "+ Add condition" and "+ Add group". Calls `onChange` with
263
+ * the updated sub-tree so parents can splice it back into their own
264
+ * `rules` array. Root groups skip the outer border so the popover doesn't
265
+ * carry a redundant frame; nested groups draw a faint left rule + soft
266
+ * background so the nesting is visible without blowing up the width.
267
+ */
268
+ export function QueryBuilderGroup({ tree, constraints, isRoot, onChange, onRemove, }) {
269
+ const constraintMap = new Map();
270
+ for (const c of constraints)
271
+ constraintMap.set(c.name, c);
272
+ const setOperator = (op) => {
273
+ onChange({ ...tree, operator: op });
274
+ };
275
+ const updateChildAt = (index, next) => {
276
+ onChange({ ...tree, rules: tree.rules.map((r, i) => i === index ? next : r) });
277
+ };
278
+ const removeChildAt = (index) => {
279
+ onChange({ ...tree, rules: tree.rules.filter((_, i) => i !== index) });
280
+ };
281
+ const addRule = () => {
282
+ const first = constraints[0];
283
+ if (!first)
284
+ return;
285
+ onChange({
286
+ ...tree,
287
+ rules: [...tree.rules, {
288
+ constraint: first.name,
289
+ operator: first.defaultOperator ?? first.operators[0]?.name ?? 'equals',
290
+ value: undefined,
291
+ }],
292
+ });
293
+ };
294
+ const addGroup = () => {
295
+ onChange({
296
+ ...tree,
297
+ rules: [...tree.rules, { operator: 'and', rules: [] }],
298
+ });
299
+ };
300
+ const wrapper = isRoot
301
+ ? 'flex flex-col gap-2'
302
+ : 'flex flex-col gap-2 rounded-md border-l-2 border-primary/40 bg-muted/30 pl-2 py-2 pr-2';
303
+ return (_jsxs("div", { className: wrapper, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ConnectorToggle, { value: tree.operator, onChange: setOperator }), _jsx("span", { className: "text-muted-foreground text-[11px]", children: tree.operator === 'and' ? 'Match all of the following' : 'Match any of the following' }), !isRoot && onRemove && (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex-1" }), _jsx("button", { type: "button", onClick: onRemove, "aria-label": "Remove group", className: "inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground", children: "\u00D7" })] }))] }), tree.rules.length === 0 && (_jsx("div", { className: "text-muted-foreground text-xs italic", children: "No conditions yet." })), tree.rules.map((child, i) => {
304
+ if (isQueryBuilderTree(child)) {
305
+ return (_jsx(QueryBuilderGroup, { tree: child, constraints: constraints, isRoot: false, onChange: (next) => updateChildAt(i, next), onRemove: () => removeChildAt(i) }, i));
306
+ }
307
+ return (_jsx(QueryBuilderRow, { rule: child, constraints: constraints, constraintMeta: constraintMap.get(child.constraint), onConstraintChange: (v) => {
308
+ const c = constraintMap.get(v);
309
+ if (!c)
310
+ return;
311
+ updateChildAt(i, {
312
+ constraint: v,
313
+ operator: c.defaultOperator ?? c.operators[0]?.name ?? 'equals',
314
+ value: undefined,
315
+ });
316
+ }, onOperatorChange: (v) => {
317
+ updateChildAt(i, {
318
+ ...child,
319
+ operator: v,
320
+ value: undefined,
321
+ });
322
+ }, onValueChange: (v) => updateChildAt(i, { ...child, value: v }), onRemove: () => removeChildAt(i) }, i));
323
+ }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("button", { type: "button", onClick: addRule, className: "inline-flex h-8 items-center justify-center rounded-md border border-dashed border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground", children: "+ Add condition" }), _jsx("button", { type: "button", onClick: addGroup, className: "inline-flex h-8 items-center justify-center rounded-md border border-dashed border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground", children: "+ Add group" })] })] }));
324
+ }
325
+ /**
326
+ * Compact AND/OR segmented control used at the head of every group. Pure
327
+ * presentation — the parent owns the value.
328
+ */
329
+ export function ConnectorToggle({ value, onChange, }) {
330
+ const base = 'inline-flex h-7 items-center px-2 text-[11px] font-medium uppercase tracking-wide transition';
331
+ const on = 'bg-primary text-primary-foreground';
332
+ const off = 'bg-background text-muted-foreground hover:bg-accent hover:text-accent-foreground';
333
+ return (_jsxs("div", { className: "inline-flex overflow-hidden rounded-md border border-input", children: [_jsx("button", { type: "button", onClick: () => onChange('and'), className: `${base} ${value === 'and' ? on : off}`, "aria-pressed": value === 'and', children: "AND" }), _jsx("button", { type: "button", onClick: () => onChange('or'), className: `${base} ${value === 'or' ? on : off}`, "aria-pressed": value === 'or', children: "OR" })] }));
334
+ }
335
+ /**
336
+ * One condition row inside `FilterQueryBuilder`. Three controls
337
+ * left-to-right: constraint picker, operator picker, value input. The
338
+ * value input dispatches off the operator's `valueKind` — `none` hides
339
+ * it entirely, `numberRange` / `dateRange` mount a pair, otherwise a
340
+ * single typed input.
341
+ */
342
+ export function QueryBuilderRow({ rule, constraints, constraintMeta, onConstraintChange, onOperatorChange, onValueChange, onRemove, }) {
343
+ const operators = constraintMeta?.operators ?? [];
344
+ const activeOp = operators.find(o => o.name === rule.operator);
345
+ const valueKind = activeOp?.valueKind ?? 'text';
346
+ return (_jsxs("div", { className: "flex items-start gap-1.5 rounded-md border border-input bg-background p-2", children: [_jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-1.5", children: [_jsxs(Select, { value: rule.constraint, onValueChange: (v) => onConstraintChange(typeof v === 'string' ? v : ''), children: [_jsx(SelectTrigger, { size: "sm", className: "h-8 w-36 text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: constraints.map(c => (_jsx(SelectItem, { value: c.name, children: c.label }, c.name))) })] }), _jsxs(Select, { value: rule.operator, onValueChange: (v) => onOperatorChange(typeof v === 'string' ? v : ''), children: [_jsx(SelectTrigger, { size: "sm", className: "h-8 w-32 text-xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: operators.map(o => (_jsx(SelectItem, { value: o.name, children: o.label }, o.name))) })] }), _jsx(QueryBuilderValueInput, { kind: valueKind, value: rule.value, options: constraintMeta?.options, onChange: onValueChange })] }), _jsx("button", { type: "button", onClick: onRemove, "aria-label": "Remove condition", className: "inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground", children: "\u00D7" })] }));
347
+ }
348
+ /**
349
+ * Operator-aware value control. Switches over the constraint operator's
350
+ * `valueKind` and mounts the matching input. Value shapes:
351
+ * - `text / number / date / dateTime / select` → scalar
352
+ * - `multiSelect` → string[]
353
+ * - `numberRange / dateRange` → [string, string]
354
+ * - `boolean / none` → null / undefined
355
+ */
356
+ export function QueryBuilderValueInput({ kind, value, options, onChange, }) {
357
+ if (kind === 'none' || kind === 'boolean')
358
+ return null;
359
+ if (kind === 'select') {
360
+ const opts = options ?? [];
361
+ const v = value === undefined || value === null ? '' : String(value);
362
+ return (_jsxs(Select, { value: v, onValueChange: (next) => onChange(typeof next === 'string' ? next : ''), children: [_jsx(SelectTrigger, { size: "sm", className: "h-8 min-w-32 text-xs", children: _jsx(SelectValue, { placeholder: "Pick\u2026" }) }), _jsx(SelectContent, { children: opts.map(o => (_jsx(SelectItem, { value: o.value, children: o.label }, o.value))) })] }));
363
+ }
364
+ if (kind === 'multiSelect') {
365
+ const opts = options ?? [];
366
+ const list = Array.isArray(value) ? value.map(v => String(v)) : [];
367
+ const toggle = (val) => {
368
+ if (list.includes(val))
369
+ onChange(list.filter(v => v !== val));
370
+ else
371
+ onChange([...list, val]);
372
+ };
373
+ return (_jsx("div", { className: "flex flex-wrap items-center gap-1", children: opts.map(o => {
374
+ const active = list.includes(o.value);
375
+ return (_jsx("button", { type: "button", onClick: () => toggle(o.value), className: 'inline-flex h-7 items-center rounded-md border px-2 text-xs ' +
376
+ (active
377
+ ? 'border-primary bg-primary text-primary-foreground'
378
+ : 'border-input bg-background hover:bg-accent'), children: o.label }, o.value));
379
+ }) }));
380
+ }
381
+ if (kind === 'numberRange') {
382
+ const [min, max] = Array.isArray(value) ? [value[0], value[1]] : [undefined, undefined];
383
+ return (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Input, { type: "number", className: "h-8 w-24 text-xs", value: min === undefined || min === null ? '' : String(min), onChange: (e) => onChange([e.target.value, max ?? '']), placeholder: "Min" }), _jsx("span", { className: "text-muted-foreground text-xs", children: "\u2013" }), _jsx(Input, { type: "number", className: "h-8 w-24 text-xs", value: max === undefined || max === null ? '' : String(max), onChange: (e) => onChange([min ?? '', e.target.value]), placeholder: "Max" })] }));
384
+ }
385
+ if (kind === 'dateRange') {
386
+ const [from, to] = Array.isArray(value) ? [value[0], value[1]] : [undefined, undefined];
387
+ return (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Input, { type: "date", className: "h-8 w-36 text-xs", value: from === undefined || from === null ? '' : String(from), onChange: (e) => onChange([e.target.value, to ?? '']) }), _jsx("span", { className: "text-muted-foreground text-xs", children: "\u2192" }), _jsx(Input, { type: "date", className: "h-8 w-36 text-xs", value: to === undefined || to === null ? '' : String(to), onChange: (e) => onChange([from ?? '', e.target.value]) })] }));
388
+ }
389
+ if (kind === 'date' || kind === 'dateTime') {
390
+ const v = value === undefined || value === null ? '' : String(value);
391
+ return (_jsx(Input, { type: kind === 'dateTime' ? 'datetime-local' : 'date', className: "h-8 w-44 text-xs", value: v, onChange: (e) => onChange(e.target.value) }));
392
+ }
393
+ if (kind === 'number') {
394
+ const v = value === undefined || value === null ? '' : String(value);
395
+ return (_jsx(Input, { type: "number", className: "h-8 w-32 text-xs", value: v, onChange: (e) => onChange(e.target.value), placeholder: "Value" }));
396
+ }
397
+ // Default: text
398
+ const v = value === undefined || value === null ? '' : String(value);
399
+ return (_jsx(Input, { type: "text", className: "h-8 min-w-32 flex-1 text-xs", value: v, onChange: (e) => onChange(e.target.value), placeholder: "Value" }));
400
+ }
401
+ export function renderFilterControl(el, index, prefix, renderFormChild) {
402
+ const name = String(el['name'] ?? '');
403
+ const label = String(el['label'] ?? name);
404
+ const kind = String(el['kind'] ?? 'select');
405
+ const value = el['value'] ? String(el['value']) : '';
406
+ const placeholder = el['placeholder'] ? String(el['placeholder']) : 'All';
407
+ if (kind === 'queryBuilder') {
408
+ const constraints = el['constraints'] ?? [];
409
+ return (_jsx(FilterQueryBuilder, { name: name, label: label, defaultValue: value, constraints: constraints, prefix: prefix }, index));
410
+ }
411
+ if (kind === 'form') {
412
+ const formSchema = el['formSchema'] ?? [];
413
+ return (_jsx(FilterForm, { name: name, label: label, defaultValue: value, formSchema: formSchema, prefix: prefix, renderFormChild: renderFormChild }, index));
414
+ }
415
+ if (kind === 'boolean') {
416
+ return (_jsx(FilterSelect, { name: name, label: label, defaultValue: value, placeholder: placeholder, options: [{ value: '1', label: 'Yes' }, { value: '0', label: 'No' }], prefix: prefix }, index));
417
+ }
418
+ if (kind === 'multiSelect') {
419
+ const options = el['options'] ?? [];
420
+ return (_jsx(FilterMultiSelect, { name: name, label: label, defaultValue: value, options: options, prefix: prefix }, index));
421
+ }
422
+ if (kind === 'dateRange') {
423
+ const includesTime = Boolean(el['includesTime']);
424
+ const minDate = el['minDate'] ? String(el['minDate']) : undefined;
425
+ const maxDate = el['maxDate'] ? String(el['maxDate']) : undefined;
426
+ return (_jsx(FilterDateRange, { name: name, label: label, defaultValue: value, placeholder: placeholder, includesTime: includesTime, prefix: prefix, ...(minDate !== undefined ? { minDate } : {}), ...(maxDate !== undefined ? { maxDate } : {}) }, index));
427
+ }
428
+ // 'ternary' and 'select' both render as a single-select dropdown,
429
+ // differing only in their server-supplied option set.
430
+ const options = el['options'] ?? [];
431
+ return (_jsx(FilterSelect, { name: name, label: label, defaultValue: value, placeholder: placeholder, options: options, prefix: prefix }, index));
432
+ }
433
+ /**
434
+ * Resolve the record URL for a single data cell. Column-level override
435
+ * (`Column.recordUrl(fn)` → `_columnRecordUrls[name]`) wins over the
436
+ * table-level `Table.recordUrl(fn)` (`_recordUrl`). Explicit per-column
437
+ * opt-out (`Column.recordUrl(false)` → `meta.recordUrl === false`)
438
+ * suppresses the link entirely. Returns `undefined` when the cell is
439
+ * not linkable, in which case the renderer leaves it unwrapped.
440
+ */
441
+ export function resolveColumnUrl(col, tableUrl, colUrls) {
442
+ if (col['recordUrl'] === false)
443
+ return undefined;
444
+ const own = colUrls[String(col['name'] ?? '')];
445
+ if (own !== undefined)
446
+ return own;
447
+ return tableUrl;
448
+ }
449
+ /**
450
+ * Toolbar "Sort by" picker — surfaces in cards layout where there's no
451
+ * column-header click affordance to flip sort order. In standard table
452
+ * mode, this picker appears in the top bar instead. Each `Column` flagged
453
+ * `.sortable()` contributes two options — ascending and descending —
454
+ * yielding "Title (A→Z) / Title (Z→A) / Date (oldest first) / Date (newest
455
+ * first)" style entries. Selecting an option resets `?page=1`.
456
+ */
457
+ export function SortByPicker({ columns, active, onChange, }) {
458
+ const sortable = columns.filter(c => Boolean(c['sortable']));
459
+ if (sortable.length === 0)
460
+ return null;
461
+ const value = active ? `${active.column}:${active.direction}` : '';
462
+ return (_jsxs(Select, { value: value, onValueChange: (v) => {
463
+ if (typeof v !== 'string' || v === '')
464
+ return;
465
+ const idx = v.indexOf(':');
466
+ if (idx < 0)
467
+ return;
468
+ const col = v.slice(0, idx);
469
+ const dir = v.slice(idx + 1) === 'desc' ? 'desc' : 'asc';
470
+ onChange(col, dir);
471
+ }, children: [_jsx(SelectTrigger, { size: "sm", className: "h-9 w-44", children: _jsx(SelectValue, { placeholder: "Sort by\u2026" }) }), _jsx(SelectContent, { children: sortable.map(col => {
472
+ const name = String(col['name'] ?? '');
473
+ const label = String(col['label'] ?? name);
474
+ return (_jsxs(React.Fragment, { children: [_jsxs(SelectItem, { value: `${name}:asc`, children: [label, " (A\u2192Z)"] }), _jsxs(SelectItem, { value: `${name}:desc`, children: [label, " (Z\u2192A)"] })] }, name));
475
+ }) })] }));
476
+ }
477
+ /**
478
+ * Toolbar dropdown for `Column.toggleable()` columns. Lists every
479
+ * toggleable column with a checkbox; toggling writes through to a
480
+ * caller-supplied `onToggle` (the `TableRendererBody` owns the state
481
+ * + the localStorage round-trip). Mounted only when at least one
482
+ * column is toggleable.
483
+ */
484
+ export function ColumnsToggleDropdown({ columns, hidden, onToggle, }) {
485
+ if (columns.length === 0)
486
+ return null;
487
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: (props) => (_jsxs("button", { ...props, type: "button", className: "inline-flex h-9 items-center gap-1.5 rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground hover:bg-accent", "aria-label": "Show or hide columns", children: [_jsx(Columns3Icon, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Columns" })] })) }), _jsx(DropdownMenuContent, { align: "end", className: "min-w-[12rem]", children: columns.map((col, i) => {
488
+ const name = String(col['name'] ?? '');
489
+ const label = String(col['label'] ?? name);
490
+ const isHidden = hidden.has(name);
491
+ return (_jsxs(DropdownMenuItem, {
492
+ // Suppress menu-close so users can toggle multiple columns
493
+ // without re-opening the dropdown.
494
+ closeOnClick: false, onClick: () => onToggle(name, !isHidden), children: [_jsx("span", { className: "inline-flex w-4 items-center justify-center", children: !isHidden && _jsx(CheckIcon, { className: "h-4 w-4", "aria-hidden": "true" }) }), _jsx("span", { children: label })] }, i));
495
+ }) })] }));
496
+ }
497
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/table/filters.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { ElementMeta } from '../../../schema/Element.js';
3
+ /** Render a cell. Honors the column's `columnType` (badge/icon/boolean/
4
+ * image), built-in `format` spec, and per-row `_formatted[name]`
5
+ * overrides from server-side `formatStateUsing` callbacks. */
6
+ export declare function formatCell(value: unknown, col?: ElementMeta, row?: Record<string, unknown>): React.ReactNode;
7
+ /** Resolve a stable row identifier — prefers the row's `id` field, falls
8
+ * back to the row index for rows missing one. Used as the React key
9
+ * in table bodies and as the `:id` substitution for row actions. */
10
+ export declare function rowId(row: unknown, index: number): string;
11
+ //# sourceMappingURL=formatCell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatCell.d.ts","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/table/formatCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAgB7D;;8DAE8D;AAC9D,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,CAAC,EAAG,WAAW,EAClB,GAAG,CAAC,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,KAAK,CAAC,SAAS,CAmGjB;AAkID;;qEAEqE;AACrE,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD"}