@pilotiq/pilotiq 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1409) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +11 -0
  3. package/CLAUDE.md +207 -0
  4. package/LICENSE +21 -0
  5. package/dist/Cluster.d.ts +56 -0
  6. package/dist/Cluster.d.ts.map +1 -0
  7. package/dist/Cluster.js +62 -0
  8. package/dist/Cluster.js.map +1 -0
  9. package/dist/Column.d.ts +378 -0
  10. package/dist/Column.d.ts.map +1 -0
  11. package/dist/Column.js +434 -0
  12. package/dist/Column.js.map +1 -0
  13. package/dist/Global.d.ts +123 -0
  14. package/dist/Global.d.ts.map +1 -0
  15. package/dist/Global.js +124 -0
  16. package/dist/Global.js.map +1 -0
  17. package/dist/Page.d.ts +90 -0
  18. package/dist/Page.d.ts.map +1 -0
  19. package/dist/Page.js +107 -0
  20. package/dist/Page.js.map +1 -0
  21. package/dist/Pilotiq.d.ts +505 -0
  22. package/dist/Pilotiq.d.ts.map +1 -0
  23. package/dist/Pilotiq.js +463 -0
  24. package/dist/Pilotiq.js.map +1 -0
  25. package/dist/PilotiqRegistry.d.ts +10 -0
  26. package/dist/PilotiqRegistry.d.ts.map +1 -0
  27. package/dist/PilotiqRegistry.js +32 -0
  28. package/dist/PilotiqRegistry.js.map +1 -0
  29. package/dist/PilotiqServiceProvider.d.ts +16 -0
  30. package/dist/PilotiqServiceProvider.d.ts.map +1 -0
  31. package/dist/PilotiqServiceProvider.js +57 -0
  32. package/dist/PilotiqServiceProvider.js.map +1 -0
  33. package/dist/RelationManager.d.ts +372 -0
  34. package/dist/RelationManager.d.ts.map +1 -0
  35. package/dist/RelationManager.js +342 -0
  36. package/dist/RelationManager.js.map +1 -0
  37. package/dist/RenderHook.d.ts +86 -0
  38. package/dist/RenderHook.d.ts.map +1 -0
  39. package/dist/RenderHook.js +116 -0
  40. package/dist/RenderHook.js.map +1 -0
  41. package/dist/Resource.d.ts +290 -0
  42. package/dist/Resource.d.ts.map +1 -0
  43. package/dist/Resource.js +362 -0
  44. package/dist/Resource.js.map +1 -0
  45. package/dist/RightPanel.d.ts +92 -0
  46. package/dist/RightPanel.d.ts.map +1 -0
  47. package/dist/RightPanel.js +61 -0
  48. package/dist/RightPanel.js.map +1 -0
  49. package/dist/Tab.d.ts +92 -0
  50. package/dist/Tab.d.ts.map +1 -0
  51. package/dist/Tab.js +93 -0
  52. package/dist/Tab.js.map +1 -0
  53. package/dist/UserMenuItem.d.ts +76 -0
  54. package/dist/UserMenuItem.d.ts.map +1 -0
  55. package/dist/UserMenuItem.js +87 -0
  56. package/dist/UserMenuItem.js.map +1 -0
  57. package/dist/actions/Action.d.ts +888 -0
  58. package/dist/actions/Action.d.ts.map +1 -0
  59. package/dist/actions/Action.js +1652 -0
  60. package/dist/actions/Action.js.map +1 -0
  61. package/dist/actions/ActionGroup.d.ts +85 -0
  62. package/dist/actions/ActionGroup.d.ts.map +1 -0
  63. package/dist/actions/ActionGroup.js +132 -0
  64. package/dist/actions/ActionGroup.js.map +1 -0
  65. package/dist/actions/attachFactory.d.ts +67 -0
  66. package/dist/actions/attachFactory.d.ts.map +1 -0
  67. package/dist/actions/attachFactory.js +115 -0
  68. package/dist/actions/attachFactory.js.map +1 -0
  69. package/dist/actions/exportFactory.d.ts +88 -0
  70. package/dist/actions/exportFactory.d.ts.map +1 -0
  71. package/dist/actions/exportFactory.js +144 -0
  72. package/dist/actions/exportFactory.js.map +1 -0
  73. package/dist/actions/importFactory.d.ts +97 -0
  74. package/dist/actions/importFactory.d.ts.map +1 -0
  75. package/dist/actions/importFactory.js +143 -0
  76. package/dist/actions/importFactory.js.map +1 -0
  77. package/dist/actions/index.d.ts +3 -0
  78. package/dist/actions/index.d.ts.map +1 -0
  79. package/dist/actions/index.js +3 -0
  80. package/dist/actions/index.js.map +1 -0
  81. package/dist/applyPageHooks.d.ts +54 -0
  82. package/dist/applyPageHooks.d.ts.map +1 -0
  83. package/dist/applyPageHooks.js +149 -0
  84. package/dist/applyPageHooks.js.map +1 -0
  85. package/dist/cells/coerce.d.ts +25 -0
  86. package/dist/cells/coerce.d.ts.map +1 -0
  87. package/dist/cells/coerce.js +87 -0
  88. package/dist/cells/coerce.js.map +1 -0
  89. package/dist/clusterPaths.d.ts +9 -0
  90. package/dist/clusterPaths.d.ts.map +1 -0
  91. package/dist/clusterPaths.js +19 -0
  92. package/dist/clusterPaths.js.map +1 -0
  93. package/dist/columns/BadgeColumn.d.ts +16 -0
  94. package/dist/columns/BadgeColumn.d.ts.map +1 -0
  95. package/dist/columns/BadgeColumn.js +25 -0
  96. package/dist/columns/BadgeColumn.js.map +1 -0
  97. package/dist/columns/BooleanColumn.d.ts +10 -0
  98. package/dist/columns/BooleanColumn.d.ts.map +1 -0
  99. package/dist/columns/BooleanColumn.js +18 -0
  100. package/dist/columns/BooleanColumn.js.map +1 -0
  101. package/dist/columns/ColorColumn.d.ts +27 -0
  102. package/dist/columns/ColorColumn.d.ts.map +1 -0
  103. package/dist/columns/ColorColumn.js +35 -0
  104. package/dist/columns/ColorColumn.js.map +1 -0
  105. package/dist/columns/IconColumn.d.ts +22 -0
  106. package/dist/columns/IconColumn.d.ts.map +1 -0
  107. package/dist/columns/IconColumn.js +28 -0
  108. package/dist/columns/IconColumn.js.map +1 -0
  109. package/dist/columns/ImageColumn.d.ts +17 -0
  110. package/dist/columns/ImageColumn.d.ts.map +1 -0
  111. package/dist/columns/ImageColumn.js +24 -0
  112. package/dist/columns/ImageColumn.js.map +1 -0
  113. package/dist/columns/SelectColumn.d.ts +36 -0
  114. package/dist/columns/SelectColumn.d.ts.map +1 -0
  115. package/dist/columns/SelectColumn.js +52 -0
  116. package/dist/columns/SelectColumn.js.map +1 -0
  117. package/dist/columns/TextColumn.d.ts +18 -0
  118. package/dist/columns/TextColumn.d.ts.map +1 -0
  119. package/dist/columns/TextColumn.js +20 -0
  120. package/dist/columns/TextColumn.js.map +1 -0
  121. package/dist/columns/TextInputColumn.d.ts +47 -0
  122. package/dist/columns/TextInputColumn.d.ts.map +1 -0
  123. package/dist/columns/TextInputColumn.js +60 -0
  124. package/dist/columns/TextInputColumn.js.map +1 -0
  125. package/dist/columns/ToggleColumn.d.ts +32 -0
  126. package/dist/columns/ToggleColumn.d.ts.map +1 -0
  127. package/dist/columns/ToggleColumn.js +45 -0
  128. package/dist/columns/ToggleColumn.js.map +1 -0
  129. package/dist/columns/index.d.ts +10 -0
  130. package/dist/columns/index.d.ts.map +1 -0
  131. package/dist/columns/index.js +10 -0
  132. package/dist/columns/index.js.map +1 -0
  133. package/dist/defaultGlobalPages.d.ts +11 -0
  134. package/dist/defaultGlobalPages.d.ts.map +1 -0
  135. package/dist/defaultGlobalPages.js +87 -0
  136. package/dist/defaultGlobalPages.js.map +1 -0
  137. package/dist/defaultPages.d.ts +247 -0
  138. package/dist/defaultPages.d.ts.map +1 -0
  139. package/dist/defaultPages.js +558 -0
  140. package/dist/defaultPages.js.map +1 -0
  141. package/dist/elements/Form.d.ts +219 -0
  142. package/dist/elements/Form.d.ts.map +1 -0
  143. package/dist/elements/Form.js +259 -0
  144. package/dist/elements/Form.js.map +1 -0
  145. package/dist/elements/ListTabs.d.ts +17 -0
  146. package/dist/elements/ListTabs.d.ts.map +1 -0
  147. package/dist/elements/ListTabs.js +23 -0
  148. package/dist/elements/ListTabs.js.map +1 -0
  149. package/dist/elements/Table.d.ts +535 -0
  150. package/dist/elements/Table.d.ts.map +1 -0
  151. package/dist/elements/Table.js +481 -0
  152. package/dist/elements/Table.js.map +1 -0
  153. package/dist/elements/TableGroup.d.ts +121 -0
  154. package/dist/elements/TableGroup.d.ts.map +1 -0
  155. package/dist/elements/TableGroup.js +162 -0
  156. package/dist/elements/TableGroup.js.map +1 -0
  157. package/dist/elements/dispatchAction.d.ts +127 -0
  158. package/dist/elements/dispatchAction.d.ts.map +1 -0
  159. package/dist/elements/dispatchAction.js +254 -0
  160. package/dist/elements/dispatchAction.js.map +1 -0
  161. package/dist/elements/dispatchForm.d.ts +220 -0
  162. package/dist/elements/dispatchForm.d.ts.map +1 -0
  163. package/dist/elements/dispatchForm.js +1645 -0
  164. package/dist/elements/dispatchForm.js.map +1 -0
  165. package/dist/elements/dispatchTable.d.ts +69 -0
  166. package/dist/elements/dispatchTable.d.ts.map +1 -0
  167. package/dist/elements/dispatchTable.js +606 -0
  168. package/dist/elements/dispatchTable.js.map +1 -0
  169. package/dist/elements/index.d.ts +3 -0
  170. package/dist/elements/index.d.ts.map +1 -0
  171. package/dist/elements/index.js +3 -0
  172. package/dist/elements/index.js.map +1 -0
  173. package/dist/entries/BadgeEntry.d.ts +21 -0
  174. package/dist/entries/BadgeEntry.d.ts.map +1 -0
  175. package/dist/entries/BadgeEntry.js +32 -0
  176. package/dist/entries/BadgeEntry.js.map +1 -0
  177. package/dist/entries/CodeEntry.d.ts +38 -0
  178. package/dist/entries/CodeEntry.d.ts.map +1 -0
  179. package/dist/entries/CodeEntry.js +44 -0
  180. package/dist/entries/CodeEntry.js.map +1 -0
  181. package/dist/entries/ColorEntry.d.ts +32 -0
  182. package/dist/entries/ColorEntry.d.ts.map +1 -0
  183. package/dist/entries/ColorEntry.js +48 -0
  184. package/dist/entries/ColorEntry.js.map +1 -0
  185. package/dist/entries/ComponentEntry.d.ts +66 -0
  186. package/dist/entries/ComponentEntry.d.ts.map +1 -0
  187. package/dist/entries/ComponentEntry.js +86 -0
  188. package/dist/entries/ComponentEntry.js.map +1 -0
  189. package/dist/entries/Entry.d.ts +175 -0
  190. package/dist/entries/Entry.d.ts.map +1 -0
  191. package/dist/entries/Entry.js +233 -0
  192. package/dist/entries/Entry.js.map +1 -0
  193. package/dist/entries/IconEntry.d.ts +30 -0
  194. package/dist/entries/IconEntry.d.ts.map +1 -0
  195. package/dist/entries/IconEntry.js +34 -0
  196. package/dist/entries/IconEntry.js.map +1 -0
  197. package/dist/entries/ImageEntry.d.ts +33 -0
  198. package/dist/entries/ImageEntry.d.ts.map +1 -0
  199. package/dist/entries/ImageEntry.js +47 -0
  200. package/dist/entries/ImageEntry.js.map +1 -0
  201. package/dist/entries/KeyValueEntry.d.ts +30 -0
  202. package/dist/entries/KeyValueEntry.d.ts.map +1 -0
  203. package/dist/entries/KeyValueEntry.js +38 -0
  204. package/dist/entries/KeyValueEntry.js.map +1 -0
  205. package/dist/entries/RepeatableEntry.d.ts +122 -0
  206. package/dist/entries/RepeatableEntry.d.ts.map +1 -0
  207. package/dist/entries/RepeatableEntry.js +121 -0
  208. package/dist/entries/RepeatableEntry.js.map +1 -0
  209. package/dist/entries/TextEntry.d.ts +38 -0
  210. package/dist/entries/TextEntry.d.ts.map +1 -0
  211. package/dist/entries/TextEntry.js +49 -0
  212. package/dist/entries/TextEntry.js.map +1 -0
  213. package/dist/entries/index.d.ts +2 -0
  214. package/dist/entries/index.d.ts.map +1 -0
  215. package/dist/entries/index.js +8 -0
  216. package/dist/entries/index.js.map +1 -0
  217. package/dist/entries/registry.d.ts +41 -0
  218. package/dist/entries/registry.d.ts.map +1 -0
  219. package/dist/entries/registry.js +17 -0
  220. package/dist/entries/registry.js.map +1 -0
  221. package/dist/fields/BuilderField.d.ts +420 -0
  222. package/dist/fields/BuilderField.d.ts.map +1 -0
  223. package/dist/fields/BuilderField.js +359 -0
  224. package/dist/fields/BuilderField.js.map +1 -0
  225. package/dist/fields/CheckboxField.d.ts +18 -0
  226. package/dist/fields/CheckboxField.d.ts.map +1 -0
  227. package/dist/fields/CheckboxField.js +23 -0
  228. package/dist/fields/CheckboxField.js.map +1 -0
  229. package/dist/fields/CheckboxListField.d.ts +25 -0
  230. package/dist/fields/CheckboxListField.d.ts.map +1 -0
  231. package/dist/fields/CheckboxListField.js +46 -0
  232. package/dist/fields/CheckboxListField.js.map +1 -0
  233. package/dist/fields/ColorPickerField.d.ts +16 -0
  234. package/dist/fields/ColorPickerField.d.ts.map +1 -0
  235. package/dist/fields/ColorPickerField.js +21 -0
  236. package/dist/fields/ColorPickerField.js.map +1 -0
  237. package/dist/fields/DateField.d.ts +29 -0
  238. package/dist/fields/DateField.d.ts.map +1 -0
  239. package/dist/fields/DateField.js +45 -0
  240. package/dist/fields/DateField.js.map +1 -0
  241. package/dist/fields/EmailField.d.ts +8 -0
  242. package/dist/fields/EmailField.d.ts.map +1 -0
  243. package/dist/fields/EmailField.js +13 -0
  244. package/dist/fields/EmailField.js.map +1 -0
  245. package/dist/fields/Field.d.ts +485 -0
  246. package/dist/fields/Field.d.ts.map +1 -0
  247. package/dist/fields/Field.js +539 -0
  248. package/dist/fields/Field.js.map +1 -0
  249. package/dist/fields/FileUploadField.d.ts +43 -0
  250. package/dist/fields/FileUploadField.d.ts.map +1 -0
  251. package/dist/fields/FileUploadField.js +60 -0
  252. package/dist/fields/FileUploadField.js.map +1 -0
  253. package/dist/fields/HiddenField.d.ts +19 -0
  254. package/dist/fields/HiddenField.d.ts.map +1 -0
  255. package/dist/fields/HiddenField.js +24 -0
  256. package/dist/fields/HiddenField.js.map +1 -0
  257. package/dist/fields/KeyValueField.d.ts +36 -0
  258. package/dist/fields/KeyValueField.d.ts.map +1 -0
  259. package/dist/fields/KeyValueField.js +47 -0
  260. package/dist/fields/KeyValueField.js.map +1 -0
  261. package/dist/fields/MarkdownField.d.ts +79 -0
  262. package/dist/fields/MarkdownField.d.ts.map +1 -0
  263. package/dist/fields/MarkdownField.js +117 -0
  264. package/dist/fields/MarkdownField.js.map +1 -0
  265. package/dist/fields/NumberField.d.ts +17 -0
  266. package/dist/fields/NumberField.d.ts.map +1 -0
  267. package/dist/fields/NumberField.js +27 -0
  268. package/dist/fields/NumberField.js.map +1 -0
  269. package/dist/fields/RadioField.d.ts +26 -0
  270. package/dist/fields/RadioField.d.ts.map +1 -0
  271. package/dist/fields/RadioField.js +47 -0
  272. package/dist/fields/RadioField.js.map +1 -0
  273. package/dist/fields/RepeaterField.d.ts +594 -0
  274. package/dist/fields/RepeaterField.d.ts.map +1 -0
  275. package/dist/fields/RepeaterField.js +504 -0
  276. package/dist/fields/RepeaterField.js.map +1 -0
  277. package/dist/fields/RowButton.d.ts +86 -0
  278. package/dist/fields/RowButton.d.ts.map +1 -0
  279. package/dist/fields/RowButton.js +85 -0
  280. package/dist/fields/RowButton.js.map +1 -0
  281. package/dist/fields/SelectField.d.ts +127 -0
  282. package/dist/fields/SelectField.d.ts.map +1 -0
  283. package/dist/fields/SelectField.js +160 -0
  284. package/dist/fields/SelectField.js.map +1 -0
  285. package/dist/fields/SliderField.d.ts +31 -0
  286. package/dist/fields/SliderField.d.ts.map +1 -0
  287. package/dist/fields/SliderField.js +45 -0
  288. package/dist/fields/SliderField.js.map +1 -0
  289. package/dist/fields/SlugField.d.ts +11 -0
  290. package/dist/fields/SlugField.d.ts.map +1 -0
  291. package/dist/fields/SlugField.js +19 -0
  292. package/dist/fields/SlugField.js.map +1 -0
  293. package/dist/fields/TagsInputField.d.ts +65 -0
  294. package/dist/fields/TagsInputField.d.ts.map +1 -0
  295. package/dist/fields/TagsInputField.js +104 -0
  296. package/dist/fields/TagsInputField.js.map +1 -0
  297. package/dist/fields/TextField.d.ts +11 -0
  298. package/dist/fields/TextField.d.ts.map +1 -0
  299. package/dist/fields/TextField.js +19 -0
  300. package/dist/fields/TextField.js.map +1 -0
  301. package/dist/fields/TextareaField.d.ts +40 -0
  302. package/dist/fields/TextareaField.d.ts.map +1 -0
  303. package/dist/fields/TextareaField.js +51 -0
  304. package/dist/fields/TextareaField.js.map +1 -0
  305. package/dist/fields/ToggleButtonsField.d.ts +24 -0
  306. package/dist/fields/ToggleButtonsField.d.ts.map +1 -0
  307. package/dist/fields/ToggleButtonsField.js +41 -0
  308. package/dist/fields/ToggleButtonsField.js.map +1 -0
  309. package/dist/fields/ToggleField.d.ts +8 -0
  310. package/dist/fields/ToggleField.d.ts.map +1 -0
  311. package/dist/fields/ToggleField.js +13 -0
  312. package/dist/fields/ToggleField.js.map +1 -0
  313. package/dist/fields/optionsResolver.d.ts +54 -0
  314. package/dist/fields/optionsResolver.d.ts.map +1 -0
  315. package/dist/fields/optionsResolver.js +62 -0
  316. package/dist/fields/optionsResolver.js.map +1 -0
  317. package/dist/fields/resolveField.d.ts +21 -0
  318. package/dist/fields/resolveField.d.ts.map +1 -0
  319. package/dist/fields/resolveField.js +26 -0
  320. package/dist/fields/resolveField.js.map +1 -0
  321. package/dist/filters/BooleanFilter.d.ts +20 -0
  322. package/dist/filters/BooleanFilter.d.ts.map +1 -0
  323. package/dist/filters/BooleanFilter.js +31 -0
  324. package/dist/filters/BooleanFilter.js.map +1 -0
  325. package/dist/filters/DateRangeFilter.d.ts +68 -0
  326. package/dist/filters/DateRangeFilter.d.ts.map +1 -0
  327. package/dist/filters/DateRangeFilter.js +137 -0
  328. package/dist/filters/DateRangeFilter.js.map +1 -0
  329. package/dist/filters/Filter.d.ts +140 -0
  330. package/dist/filters/Filter.d.ts.map +1 -0
  331. package/dist/filters/Filter.js +99 -0
  332. package/dist/filters/Filter.js.map +1 -0
  333. package/dist/filters/FormFilter.d.ts +103 -0
  334. package/dist/filters/FormFilter.d.ts.map +1 -0
  335. package/dist/filters/FormFilter.js +180 -0
  336. package/dist/filters/FormFilter.js.map +1 -0
  337. package/dist/filters/MultiSelectFilter.d.ts +41 -0
  338. package/dist/filters/MultiSelectFilter.d.ts.map +1 -0
  339. package/dist/filters/MultiSelectFilter.js +67 -0
  340. package/dist/filters/MultiSelectFilter.js.map +1 -0
  341. package/dist/filters/QueryBuilderFilter.d.ts +145 -0
  342. package/dist/filters/QueryBuilderFilter.d.ts.map +1 -0
  343. package/dist/filters/QueryBuilderFilter.js +323 -0
  344. package/dist/filters/QueryBuilderFilter.js.map +1 -0
  345. package/dist/filters/SelectFilter.d.ts +26 -0
  346. package/dist/filters/SelectFilter.d.ts.map +1 -0
  347. package/dist/filters/SelectFilter.js +35 -0
  348. package/dist/filters/SelectFilter.js.map +1 -0
  349. package/dist/filters/TernaryFilter.d.ts +35 -0
  350. package/dist/filters/TernaryFilter.d.ts.map +1 -0
  351. package/dist/filters/TernaryFilter.js +71 -0
  352. package/dist/filters/TernaryFilter.js.map +1 -0
  353. package/dist/filters/TrashedFilter.d.ts +28 -0
  354. package/dist/filters/TrashedFilter.d.ts.map +1 -0
  355. package/dist/filters/TrashedFilter.js +52 -0
  356. package/dist/filters/TrashedFilter.js.map +1 -0
  357. package/dist/filters/queryBuilder/BooleanConstraint.d.ts +13 -0
  358. package/dist/filters/queryBuilder/BooleanConstraint.d.ts.map +1 -0
  359. package/dist/filters/queryBuilder/BooleanConstraint.js +27 -0
  360. package/dist/filters/queryBuilder/BooleanConstraint.js.map +1 -0
  361. package/dist/filters/queryBuilder/Constraint.d.ts +74 -0
  362. package/dist/filters/queryBuilder/Constraint.d.ts.map +1 -0
  363. package/dist/filters/queryBuilder/Constraint.js +45 -0
  364. package/dist/filters/queryBuilder/Constraint.js.map +1 -0
  365. package/dist/filters/queryBuilder/DateConstraint.d.ts +18 -0
  366. package/dist/filters/queryBuilder/DateConstraint.d.ts.map +1 -0
  367. package/dist/filters/queryBuilder/DateConstraint.js +63 -0
  368. package/dist/filters/queryBuilder/DateConstraint.js.map +1 -0
  369. package/dist/filters/queryBuilder/NumberConstraint.d.ts +12 -0
  370. package/dist/filters/queryBuilder/NumberConstraint.d.ts.map +1 -0
  371. package/dist/filters/queryBuilder/NumberConstraint.js +61 -0
  372. package/dist/filters/queryBuilder/NumberConstraint.js.map +1 -0
  373. package/dist/filters/queryBuilder/SelectConstraint.d.ts +22 -0
  374. package/dist/filters/queryBuilder/SelectConstraint.d.ts.map +1 -0
  375. package/dist/filters/queryBuilder/SelectConstraint.js +66 -0
  376. package/dist/filters/queryBuilder/SelectConstraint.js.map +1 -0
  377. package/dist/filters/queryBuilder/TextConstraint.d.ts +18 -0
  378. package/dist/filters/queryBuilder/TextConstraint.d.ts.map +1 -0
  379. package/dist/filters/queryBuilder/TextConstraint.js +58 -0
  380. package/dist/filters/queryBuilder/TextConstraint.js.map +1 -0
  381. package/dist/filters/queryBuilder/index.d.ts +7 -0
  382. package/dist/filters/queryBuilder/index.d.ts.map +1 -0
  383. package/dist/filters/queryBuilder/index.js +7 -0
  384. package/dist/filters/queryBuilder/index.js.map +1 -0
  385. package/dist/icons/index.d.ts +3 -0
  386. package/dist/icons/index.d.ts.map +1 -0
  387. package/dist/icons/index.js +3 -0
  388. package/dist/icons/index.js.map +1 -0
  389. package/dist/icons/lucide.d.ts +16 -0
  390. package/dist/icons/lucide.d.ts.map +1 -0
  391. package/dist/icons/lucide.js +173 -0
  392. package/dist/icons/lucide.js.map +1 -0
  393. package/dist/icons/registry.d.ts +27 -0
  394. package/dist/icons/registry.d.ts.map +1 -0
  395. package/dist/icons/registry.js +35 -0
  396. package/dist/icons/registry.js.map +1 -0
  397. package/dist/icons/types.d.ts +38 -0
  398. package/dist/icons/types.d.ts.map +1 -0
  399. package/dist/icons/types.js +23 -0
  400. package/dist/icons/types.js.map +1 -0
  401. package/dist/index.d.ts +118 -0
  402. package/dist/index.d.ts.map +1 -0
  403. package/dist/index.js +135 -0
  404. package/dist/index.js.map +1 -0
  405. package/dist/io/csv.d.ts +51 -0
  406. package/dist/io/csv.d.ts.map +1 -0
  407. package/dist/io/csv.js +168 -0
  408. package/dist/io/csv.js.map +1 -0
  409. package/dist/notifications/Notification.d.ts +181 -0
  410. package/dist/notifications/Notification.d.ts.map +1 -0
  411. package/dist/notifications/Notification.js +290 -0
  412. package/dist/notifications/Notification.js.map +1 -0
  413. package/dist/notifications/broadcast.d.ts +58 -0
  414. package/dist/notifications/broadcast.d.ts.map +1 -0
  415. package/dist/notifications/broadcast.js +72 -0
  416. package/dist/notifications/broadcast.js.map +1 -0
  417. package/dist/notifications/database.d.ts +164 -0
  418. package/dist/notifications/database.d.ts.map +1 -0
  419. package/dist/notifications/database.js +321 -0
  420. package/dist/notifications/database.js.map +1 -0
  421. package/dist/notifications/dispatchNotificationAction.d.ts +48 -0
  422. package/dist/notifications/dispatchNotificationAction.d.ts.map +1 -0
  423. package/dist/notifications/dispatchNotificationAction.js +100 -0
  424. package/dist/notifications/dispatchNotificationAction.js.map +1 -0
  425. package/dist/notifications/flash.d.ts +34 -0
  426. package/dist/notifications/flash.d.ts.map +1 -0
  427. package/dist/notifications/flash.js +51 -0
  428. package/dist/notifications/flash.js.map +1 -0
  429. package/dist/notifications/index.d.ts +8 -0
  430. package/dist/notifications/index.d.ts.map +1 -0
  431. package/dist/notifications/index.js +6 -0
  432. package/dist/notifications/index.js.map +1 -0
  433. package/dist/notifications/registerBroadcastAuth.d.ts +45 -0
  434. package/dist/notifications/registerBroadcastAuth.d.ts.map +1 -0
  435. package/dist/notifications/registerBroadcastAuth.js +86 -0
  436. package/dist/notifications/registerBroadcastAuth.js.map +1 -0
  437. package/dist/notifications/resolveSavedNotification.d.ts +21 -0
  438. package/dist/notifications/resolveSavedNotification.d.ts.map +1 -0
  439. package/dist/notifications/resolveSavedNotification.js +43 -0
  440. package/dist/notifications/resolveSavedNotification.js.map +1 -0
  441. package/dist/notifications/types.d.ts +87 -0
  442. package/dist/notifications/types.d.ts.map +1 -0
  443. package/dist/notifications/types.js +2 -0
  444. package/dist/notifications/types.js.map +1 -0
  445. package/dist/orm/m2mAccessor.d.ts +49 -0
  446. package/dist/orm/m2mAccessor.d.ts.map +1 -0
  447. package/dist/orm/m2mAccessor.js +45 -0
  448. package/dist/orm/m2mAccessor.js.map +1 -0
  449. package/dist/orm/modelDefaults.d.ts +347 -0
  450. package/dist/orm/modelDefaults.d.ts.map +1 -0
  451. package/dist/orm/modelDefaults.js +375 -0
  452. package/dist/orm/modelDefaults.js.map +1 -0
  453. package/dist/pageData.d.ts +778 -0
  454. package/dist/pageData.d.ts.map +1 -0
  455. package/dist/pageData.js +3725 -0
  456. package/dist/pageData.js.map +1 -0
  457. package/dist/plugins/index.d.ts +2 -0
  458. package/dist/plugins/index.d.ts.map +1 -0
  459. package/dist/plugins/index.js +2 -0
  460. package/dist/plugins/index.js.map +1 -0
  461. package/dist/plugins/themeEditor.d.ts +17 -0
  462. package/dist/plugins/themeEditor.d.ts.map +1 -0
  463. package/dist/plugins/themeEditor.js +23 -0
  464. package/dist/plugins/themeEditor.js.map +1 -0
  465. package/dist/react/AppShell.d.ts +58 -0
  466. package/dist/react/AppShell.d.ts.map +1 -0
  467. package/dist/react/AppShell.js +58 -0
  468. package/dist/react/AppShell.js.map +1 -0
  469. package/dist/react/CommandPalette.d.ts +21 -0
  470. package/dist/react/CommandPalette.d.ts.map +1 -0
  471. package/dist/react/CommandPalette.js +236 -0
  472. package/dist/react/CommandPalette.js.map +1 -0
  473. package/dist/react/FormStateContext.d.ts +83 -0
  474. package/dist/react/FormStateContext.d.ts.map +1 -0
  475. package/dist/react/FormStateContext.js +284 -0
  476. package/dist/react/FormStateContext.js.map +1 -0
  477. package/dist/react/HeadHooks.d.ts +26 -0
  478. package/dist/react/HeadHooks.d.ts.map +1 -0
  479. package/dist/react/HeadHooks.js +141 -0
  480. package/dist/react/HeadHooks.js.map +1 -0
  481. package/dist/react/NotificationActionStrip.d.ts +39 -0
  482. package/dist/react/NotificationActionStrip.d.ts.map +1 -0
  483. package/dist/react/NotificationActionStrip.js +129 -0
  484. package/dist/react/NotificationActionStrip.js.map +1 -0
  485. package/dist/react/NotificationBell.d.ts +20 -0
  486. package/dist/react/NotificationBell.d.ts.map +1 -0
  487. package/dist/react/NotificationBell.js +273 -0
  488. package/dist/react/NotificationBell.js.map +1 -0
  489. package/dist/react/RenderHookSlot.d.ts +20 -0
  490. package/dist/react/RenderHookSlot.d.ts.map +1 -0
  491. package/dist/react/RenderHookSlot.js +24 -0
  492. package/dist/react/RenderHookSlot.js.map +1 -0
  493. package/dist/react/RightSidebar.d.ts +33 -0
  494. package/dist/react/RightSidebar.d.ts.map +1 -0
  495. package/dist/react/RightSidebar.js +82 -0
  496. package/dist/react/RightSidebar.js.map +1 -0
  497. package/dist/react/RightSidebarContext.d.ts +62 -0
  498. package/dist/react/RightSidebarContext.d.ts.map +1 -0
  499. package/dist/react/RightSidebarContext.js +178 -0
  500. package/dist/react/RightSidebarContext.js.map +1 -0
  501. package/dist/react/RightSidebarTrigger.d.ts +16 -0
  502. package/dist/react/RightSidebarTrigger.d.ts.map +1 -0
  503. package/dist/react/RightSidebarTrigger.js +24 -0
  504. package/dist/react/RightSidebarTrigger.js.map +1 -0
  505. package/dist/react/SchemaRenderer.d.ts +63 -0
  506. package/dist/react/SchemaRenderer.d.ts.map +1 -0
  507. package/dist/react/SchemaRenderer.js +3458 -0
  508. package/dist/react/SchemaRenderer.js.map +1 -0
  509. package/dist/react/SearchTrigger.d.ts +13 -0
  510. package/dist/react/SearchTrigger.d.ts.map +1 -0
  511. package/dist/react/SearchTrigger.js +30 -0
  512. package/dist/react/SearchTrigger.js.map +1 -0
  513. package/dist/react/ThemeProvider.d.ts +18 -0
  514. package/dist/react/ThemeProvider.d.ts.map +1 -0
  515. package/dist/react/ThemeProvider.js +66 -0
  516. package/dist/react/ThemeProvider.js.map +1 -0
  517. package/dist/react/ThemeSettingsPage.d.ts +10 -0
  518. package/dist/react/ThemeSettingsPage.d.ts.map +1 -0
  519. package/dist/react/ThemeSettingsPage.js +293 -0
  520. package/dist/react/ThemeSettingsPage.js.map +1 -0
  521. package/dist/react/ThemeToggle.d.ts +2 -0
  522. package/dist/react/ThemeToggle.d.ts.map +1 -0
  523. package/dist/react/ThemeToggle.js +8 -0
  524. package/dist/react/ThemeToggle.js.map +1 -0
  525. package/dist/react/Toaster.d.ts +25 -0
  526. package/dist/react/Toaster.d.ts.map +1 -0
  527. package/dist/react/Toaster.js +89 -0
  528. package/dist/react/Toaster.js.map +1 -0
  529. package/dist/react/UserMenu.d.ts +23 -0
  530. package/dist/react/UserMenu.d.ts.map +1 -0
  531. package/dist/react/UserMenu.js +78 -0
  532. package/dist/react/UserMenu.js.map +1 -0
  533. package/dist/react/WidgetDataContext.d.ts +64 -0
  534. package/dist/react/WidgetDataContext.d.ts.map +1 -0
  535. package/dist/react/WidgetDataContext.js +89 -0
  536. package/dist/react/WidgetDataContext.js.map +1 -0
  537. package/dist/react/cells/EditableCell.d.ts +20 -0
  538. package/dist/react/cells/EditableCell.d.ts.map +1 -0
  539. package/dist/react/cells/EditableCell.js +251 -0
  540. package/dist/react/cells/EditableCell.js.map +1 -0
  541. package/dist/react/fieldJsHandler.d.ts +33 -0
  542. package/dist/react/fieldJsHandler.d.ts.map +1 -0
  543. package/dist/react/fieldJsHandler.js +61 -0
  544. package/dist/react/fieldJsHandler.js.map +1 -0
  545. package/dist/react/fields/BuilderInput.d.ts +21 -0
  546. package/dist/react/fields/BuilderInput.d.ts.map +1 -0
  547. package/dist/react/fields/BuilderInput.js +553 -0
  548. package/dist/react/fields/BuilderInput.js.map +1 -0
  549. package/dist/react/fields/CheckboxInput.d.ts +9 -0
  550. package/dist/react/fields/CheckboxInput.d.ts.map +1 -0
  551. package/dist/react/fields/CheckboxInput.js +23 -0
  552. package/dist/react/fields/CheckboxInput.js.map +1 -0
  553. package/dist/react/fields/CheckboxListInput.d.ts +19 -0
  554. package/dist/react/fields/CheckboxListInput.d.ts.map +1 -0
  555. package/dist/react/fields/CheckboxListInput.js +53 -0
  556. package/dist/react/fields/CheckboxListInput.js.map +1 -0
  557. package/dist/react/fields/ColorInput.d.ts +12 -0
  558. package/dist/react/fields/ColorInput.d.ts.map +1 -0
  559. package/dist/react/fields/ColorInput.js +29 -0
  560. package/dist/react/fields/ColorInput.js.map +1 -0
  561. package/dist/react/fields/DateFieldInput.d.ts +8 -0
  562. package/dist/react/fields/DateFieldInput.d.ts.map +1 -0
  563. package/dist/react/fields/DateFieldInput.js +39 -0
  564. package/dist/react/fields/DateFieldInput.js.map +1 -0
  565. package/dist/react/fields/DateTimeInput.d.ts +13 -0
  566. package/dist/react/fields/DateTimeInput.d.ts.map +1 -0
  567. package/dist/react/fields/DateTimeInput.js +29 -0
  568. package/dist/react/fields/DateTimeInput.js.map +1 -0
  569. package/dist/react/fields/FieldShell.d.ts +23 -0
  570. package/dist/react/fields/FieldShell.d.ts.map +1 -0
  571. package/dist/react/fields/FieldShell.js +46 -0
  572. package/dist/react/fields/FieldShell.js.map +1 -0
  573. package/dist/react/fields/FileUploadInput.d.ts +21 -0
  574. package/dist/react/fields/FileUploadInput.d.ts.map +1 -0
  575. package/dist/react/fields/FileUploadInput.js +120 -0
  576. package/dist/react/fields/FileUploadInput.js.map +1 -0
  577. package/dist/react/fields/HiddenInput.d.ts +11 -0
  578. package/dist/react/fields/HiddenInput.d.ts.map +1 -0
  579. package/dist/react/fields/HiddenInput.js +14 -0
  580. package/dist/react/fields/HiddenInput.js.map +1 -0
  581. package/dist/react/fields/KeyValueInput.d.ts +18 -0
  582. package/dist/react/fields/KeyValueInput.d.ts.map +1 -0
  583. package/dist/react/fields/KeyValueInput.js +122 -0
  584. package/dist/react/fields/KeyValueInput.js.map +1 -0
  585. package/dist/react/fields/MarkdownInput.d.ts +29 -0
  586. package/dist/react/fields/MarkdownInput.d.ts.map +1 -0
  587. package/dist/react/fields/MarkdownInput.js +250 -0
  588. package/dist/react/fields/MarkdownInput.js.map +1 -0
  589. package/dist/react/fields/RadioInput.d.ts +18 -0
  590. package/dist/react/fields/RadioInput.d.ts.map +1 -0
  591. package/dist/react/fields/RadioInput.js +34 -0
  592. package/dist/react/fields/RadioInput.js.map +1 -0
  593. package/dist/react/fields/RepeaterInput.d.ts +92 -0
  594. package/dist/react/fields/RepeaterInput.d.ts.map +1 -0
  595. package/dist/react/fields/RepeaterInput.js +705 -0
  596. package/dist/react/fields/RepeaterInput.js.map +1 -0
  597. package/dist/react/fields/SelectFieldInput.d.ts +23 -0
  598. package/dist/react/fields/SelectFieldInput.d.ts.map +1 -0
  599. package/dist/react/fields/SelectFieldInput.js +146 -0
  600. package/dist/react/fields/SelectFieldInput.js.map +1 -0
  601. package/dist/react/fields/SliderInput.d.ts +16 -0
  602. package/dist/react/fields/SliderInput.d.ts.map +1 -0
  603. package/dist/react/fields/SliderInput.js +37 -0
  604. package/dist/react/fields/SliderInput.js.map +1 -0
  605. package/dist/react/fields/TagsInput.d.ts +27 -0
  606. package/dist/react/fields/TagsInput.d.ts.map +1 -0
  607. package/dist/react/fields/TagsInput.js +189 -0
  608. package/dist/react/fields/TagsInput.js.map +1 -0
  609. package/dist/react/fields/TextLikeInput.d.ts +18 -0
  610. package/dist/react/fields/TextLikeInput.d.ts.map +1 -0
  611. package/dist/react/fields/TextLikeInput.js +46 -0
  612. package/dist/react/fields/TextLikeInput.js.map +1 -0
  613. package/dist/react/fields/ToggleButtonsInput.d.ts +20 -0
  614. package/dist/react/fields/ToggleButtonsInput.d.ts.map +1 -0
  615. package/dist/react/fields/ToggleButtonsInput.js +42 -0
  616. package/dist/react/fields/ToggleButtonsInput.js.map +1 -0
  617. package/dist/react/fields/ToggleFieldInput.d.ts +7 -0
  618. package/dist/react/fields/ToggleFieldInput.d.ts.map +1 -0
  619. package/dist/react/fields/ToggleFieldInput.js +30 -0
  620. package/dist/react/fields/ToggleFieldInput.js.map +1 -0
  621. package/dist/react/fields/rowChromeButton.d.ts +84 -0
  622. package/dist/react/fields/rowChromeButton.d.ts.map +1 -0
  623. package/dist/react/fields/rowChromeButton.js +111 -0
  624. package/dist/react/fields/rowChromeButton.js.map +1 -0
  625. package/dist/react/fields/syncRowGates.d.ts +11 -0
  626. package/dist/react/fields/syncRowGates.d.ts.map +1 -0
  627. package/dist/react/fields/syncRowGates.js +55 -0
  628. package/dist/react/fields/syncRowGates.js.map +1 -0
  629. package/dist/react/formStateHelpers.d.ts +44 -0
  630. package/dist/react/formStateHelpers.d.ts.map +1 -0
  631. package/dist/react/formStateHelpers.js +230 -0
  632. package/dist/react/formStateHelpers.js.map +1 -0
  633. package/dist/react/hooks/use-mobile.d.ts +2 -0
  634. package/dist/react/hooks/use-mobile.d.ts.map +1 -0
  635. package/dist/react/hooks/use-mobile.js +16 -0
  636. package/dist/react/hooks/use-mobile.js.map +1 -0
  637. package/dist/react/icon-context.d.ts +35 -0
  638. package/dist/react/icon-context.d.ts.map +1 -0
  639. package/dist/react/icon-context.js +45 -0
  640. package/dist/react/icon-context.js.map +1 -0
  641. package/dist/react/index.d.ts +26 -0
  642. package/dist/react/index.d.ts.map +1 -0
  643. package/dist/react/index.js +28 -0
  644. package/dist/react/index.js.map +1 -0
  645. package/dist/react/layouts/SidebarLayout.d.ts +3 -0
  646. package/dist/react/layouts/SidebarLayout.d.ts.map +1 -0
  647. package/dist/react/layouts/SidebarLayout.js +85 -0
  648. package/dist/react/layouts/SidebarLayout.js.map +1 -0
  649. package/dist/react/layouts/TopbarLayout.d.ts +3 -0
  650. package/dist/react/layouts/TopbarLayout.d.ts.map +1 -0
  651. package/dist/react/layouts/TopbarLayout.js +103 -0
  652. package/dist/react/layouts/TopbarLayout.js.map +1 -0
  653. package/dist/react/navigate.d.ts +22 -0
  654. package/dist/react/navigate.d.ts.map +1 -0
  655. package/dist/react/navigate.js +30 -0
  656. package/dist/react/navigate.js.map +1 -0
  657. package/dist/react/registry.d.ts +35 -0
  658. package/dist/react/registry.d.ts.map +1 -0
  659. package/dist/react/registry.js +22 -0
  660. package/dist/react/registry.js.map +1 -0
  661. package/dist/react/right-panel-registry.d.ts +32 -0
  662. package/dist/react/right-panel-registry.d.ts.map +1 -0
  663. package/dist/react/right-panel-registry.js +20 -0
  664. package/dist/react/right-panel-registry.js.map +1 -0
  665. package/dist/react/theme-preview/apply.d.ts +11 -0
  666. package/dist/react/theme-preview/apply.d.ts.map +1 -0
  667. package/dist/react/theme-preview/apply.js +93 -0
  668. package/dist/react/theme-preview/apply.js.map +1 -0
  669. package/dist/react/theme-preview/build-html.d.ts +3 -0
  670. package/dist/react/theme-preview/build-html.d.ts.map +1 -0
  671. package/dist/react/theme-preview/build-html.js +437 -0
  672. package/dist/react/theme-preview/build-html.js.map +1 -0
  673. package/dist/react/ui/button.d.ts +9 -0
  674. package/dist/react/ui/button.d.ts.map +1 -0
  675. package/dist/react/ui/button.js +35 -0
  676. package/dist/react/ui/button.js.map +1 -0
  677. package/dist/react/ui/calendar.d.ts +5 -0
  678. package/dist/react/ui/calendar.d.ts.map +1 -0
  679. package/dist/react/ui/calendar.js +34 -0
  680. package/dist/react/ui/calendar.js.map +1 -0
  681. package/dist/react/ui/checkbox.d.ts +4 -0
  682. package/dist/react/ui/checkbox.d.ts.map +1 -0
  683. package/dist/react/ui/checkbox.js +9 -0
  684. package/dist/react/ui/checkbox.js.map +1 -0
  685. package/dist/react/ui/dialog.d.ts +12 -0
  686. package/dist/react/ui/dialog.d.ts.map +1 -0
  687. package/dist/react/ui/dialog.js +34 -0
  688. package/dist/react/ui/dialog.js.map +1 -0
  689. package/dist/react/ui/dropdown-menu.d.ts +12 -0
  690. package/dist/react/ui/dropdown-menu.d.ts.map +1 -0
  691. package/dist/react/ui/dropdown-menu.js +23 -0
  692. package/dist/react/ui/dropdown-menu.js.map +1 -0
  693. package/dist/react/ui/input.d.ts +4 -0
  694. package/dist/react/ui/input.d.ts.map +1 -0
  695. package/dist/react/ui/input.js +8 -0
  696. package/dist/react/ui/input.js.map +1 -0
  697. package/dist/react/ui/label.d.ts +4 -0
  698. package/dist/react/ui/label.d.ts.map +1 -0
  699. package/dist/react/ui/label.js +7 -0
  700. package/dist/react/ui/label.js.map +1 -0
  701. package/dist/react/ui/popover.d.ts +6 -0
  702. package/dist/react/ui/popover.d.ts.map +1 -0
  703. package/dist/react/ui/popover.js +14 -0
  704. package/dist/react/ui/popover.js.map +1 -0
  705. package/dist/react/ui/select.d.ts +17 -0
  706. package/dist/react/ui/select.d.ts.map +1 -0
  707. package/dist/react/ui/select.js +39 -0
  708. package/dist/react/ui/select.js.map +1 -0
  709. package/dist/react/ui/separator.d.ts +4 -0
  710. package/dist/react/ui/separator.d.ts.map +1 -0
  711. package/dist/react/ui/separator.js +9 -0
  712. package/dist/react/ui/separator.js.map +1 -0
  713. package/dist/react/ui/sheet.d.ts +15 -0
  714. package/dist/react/ui/sheet.d.ts.map +1 -0
  715. package/dist/react/ui/sheet.js +37 -0
  716. package/dist/react/ui/sheet.js.map +1 -0
  717. package/dist/react/ui/sidebar.d.ts +64 -0
  718. package/dist/react/ui/sidebar.d.ts.map +1 -0
  719. package/dist/react/ui/sidebar.js +257 -0
  720. package/dist/react/ui/sidebar.js.map +1 -0
  721. package/dist/react/ui/skeleton.d.ts +3 -0
  722. package/dist/react/ui/skeleton.d.ts.map +1 -0
  723. package/dist/react/ui/skeleton.js +7 -0
  724. package/dist/react/ui/skeleton.js.map +1 -0
  725. package/dist/react/ui/slider.d.ts +4 -0
  726. package/dist/react/ui/slider.d.ts.map +1 -0
  727. package/dist/react/ui/slider.js +8 -0
  728. package/dist/react/ui/slider.js.map +1 -0
  729. package/dist/react/ui/switch.d.ts +4 -0
  730. package/dist/react/ui/switch.d.ts.map +1 -0
  731. package/dist/react/ui/switch.js +8 -0
  732. package/dist/react/ui/switch.js.map +1 -0
  733. package/dist/react/ui/table.d.ts +11 -0
  734. package/dist/react/ui/table.d.ts.map +1 -0
  735. package/dist/react/ui/table.js +28 -0
  736. package/dist/react/ui/table.js.map +1 -0
  737. package/dist/react/ui/tabs.d.ts +7 -0
  738. package/dist/react/ui/tabs.d.ts.map +1 -0
  739. package/dist/react/ui/tabs.js +17 -0
  740. package/dist/react/ui/tabs.js.map +1 -0
  741. package/dist/react/ui/textarea.d.ts +4 -0
  742. package/dist/react/ui/textarea.d.ts.map +1 -0
  743. package/dist/react/ui/textarea.js +7 -0
  744. package/dist/react/ui/textarea.js.map +1 -0
  745. package/dist/react/ui/tooltip.d.ts +7 -0
  746. package/dist/react/ui/tooltip.d.ts.map +1 -0
  747. package/dist/react/ui/tooltip.js +17 -0
  748. package/dist/react/ui/tooltip.js.map +1 -0
  749. package/dist/react/useResizableWidth.d.ts +47 -0
  750. package/dist/react/useResizableWidth.d.ts.map +1 -0
  751. package/dist/react/useResizableWidth.js +99 -0
  752. package/dist/react/useResizableWidth.js.map +1 -0
  753. package/dist/react/utils.d.ts +3 -0
  754. package/dist/react/utils.d.ts.map +1 -0
  755. package/dist/react/utils.js +6 -0
  756. package/dist/react/utils.js.map +1 -0
  757. package/dist/react/widgetRegistry.d.ts +33 -0
  758. package/dist/react/widgetRegistry.d.ts.map +1 -0
  759. package/dist/react/widgetRegistry.js +15 -0
  760. package/dist/react/widgetRegistry.js.map +1 -0
  761. package/dist/react/widgets/StatsOverviewRenderer.d.ts +6 -0
  762. package/dist/react/widgets/StatsOverviewRenderer.d.ts.map +1 -0
  763. package/dist/react/widgets/StatsOverviewRenderer.js +124 -0
  764. package/dist/react/widgets/StatsOverviewRenderer.js.map +1 -0
  765. package/dist/react/widgets/TableWidgetRenderer.d.ts +6 -0
  766. package/dist/react/widgets/TableWidgetRenderer.d.ts.map +1 -0
  767. package/dist/react/widgets/TableWidgetRenderer.js +123 -0
  768. package/dist/react/widgets/TableWidgetRenderer.js.map +1 -0
  769. package/dist/react/widgets/ViewRenderer.d.ts +16 -0
  770. package/dist/react/widgets/ViewRenderer.d.ts.map +1 -0
  771. package/dist/react/widgets/ViewRenderer.js +26 -0
  772. package/dist/react/widgets/ViewRenderer.js.map +1 -0
  773. package/dist/richtext/index.d.ts +2 -0
  774. package/dist/richtext/index.d.ts.map +1 -0
  775. package/dist/richtext/index.js +2 -0
  776. package/dist/richtext/index.js.map +1 -0
  777. package/dist/richtext/registry.d.ts +55 -0
  778. package/dist/richtext/registry.d.ts.map +1 -0
  779. package/dist/richtext/registry.js +66 -0
  780. package/dist/richtext/registry.js.map +1 -0
  781. package/dist/routes.d.ts +9 -0
  782. package/dist/routes.d.ts.map +1 -0
  783. package/dist/routes.js +3116 -0
  784. package/dist/routes.js.map +1 -0
  785. package/dist/schema/Alert.d.ts +33 -0
  786. package/dist/schema/Alert.d.ts.map +1 -0
  787. package/dist/schema/Alert.js +41 -0
  788. package/dist/schema/Alert.js.map +1 -0
  789. package/dist/schema/Block.d.ts +112 -0
  790. package/dist/schema/Block.d.ts.map +1 -0
  791. package/dist/schema/Block.js +136 -0
  792. package/dist/schema/Block.js.map +1 -0
  793. package/dist/schema/Breadcrumbs.d.ts +31 -0
  794. package/dist/schema/Breadcrumbs.d.ts.map +1 -0
  795. package/dist/schema/Breadcrumbs.js +30 -0
  796. package/dist/schema/Breadcrumbs.js.map +1 -0
  797. package/dist/schema/Card.d.ts +17 -0
  798. package/dist/schema/Card.d.ts.map +1 -0
  799. package/dist/schema/Card.js +31 -0
  800. package/dist/schema/Card.js.map +1 -0
  801. package/dist/schema/Divider.d.ts +12 -0
  802. package/dist/schema/Divider.d.ts.map +1 -0
  803. package/dist/schema/Divider.js +19 -0
  804. package/dist/schema/Divider.js.map +1 -0
  805. package/dist/schema/Element.d.ts +150 -0
  806. package/dist/schema/Element.d.ts.map +1 -0
  807. package/dist/schema/Element.js +124 -0
  808. package/dist/schema/Element.js.map +1 -0
  809. package/dist/schema/EmptyState.d.ts +48 -0
  810. package/dist/schema/EmptyState.d.ts.map +1 -0
  811. package/dist/schema/EmptyState.js +57 -0
  812. package/dist/schema/EmptyState.js.map +1 -0
  813. package/dist/schema/Fieldset.d.ts +25 -0
  814. package/dist/schema/Fieldset.d.ts.map +1 -0
  815. package/dist/schema/Fieldset.js +39 -0
  816. package/dist/schema/Fieldset.js.map +1 -0
  817. package/dist/schema/Grid.d.ts +23 -0
  818. package/dist/schema/Grid.d.ts.map +1 -0
  819. package/dist/schema/Grid.js +36 -0
  820. package/dist/schema/Grid.js.map +1 -0
  821. package/dist/schema/Group.d.ts +19 -0
  822. package/dist/schema/Group.d.ts.map +1 -0
  823. package/dist/schema/Group.js +26 -0
  824. package/dist/schema/Group.js.map +1 -0
  825. package/dist/schema/Heading.d.ts +25 -0
  826. package/dist/schema/Heading.d.ts.map +1 -0
  827. package/dist/schema/Heading.js +34 -0
  828. package/dist/schema/Heading.js.map +1 -0
  829. package/dist/schema/Html.d.ts +48 -0
  830. package/dist/schema/Html.d.ts.map +1 -0
  831. package/dist/schema/Html.js +60 -0
  832. package/dist/schema/Html.js.map +1 -0
  833. package/dist/schema/Icon.d.ts +34 -0
  834. package/dist/schema/Icon.d.ts.map +1 -0
  835. package/dist/schema/Icon.js +40 -0
  836. package/dist/schema/Icon.js.map +1 -0
  837. package/dist/schema/Image.d.ts +38 -0
  838. package/dist/schema/Image.d.ts.map +1 -0
  839. package/dist/schema/Image.js +48 -0
  840. package/dist/schema/Image.js.map +1 -0
  841. package/dist/schema/LinkTag.d.ts +48 -0
  842. package/dist/schema/LinkTag.d.ts.map +1 -0
  843. package/dist/schema/LinkTag.js +16 -0
  844. package/dist/schema/LinkTag.js.map +1 -0
  845. package/dist/schema/Markdown.d.ts +57 -0
  846. package/dist/schema/Markdown.d.ts.map +1 -0
  847. package/dist/schema/Markdown.js +75 -0
  848. package/dist/schema/Markdown.js.map +1 -0
  849. package/dist/schema/MetaTag.d.ts +41 -0
  850. package/dist/schema/MetaTag.d.ts.map +1 -0
  851. package/dist/schema/MetaTag.js +16 -0
  852. package/dist/schema/MetaTag.js.map +1 -0
  853. package/dist/schema/RelationTabs.d.ts +50 -0
  854. package/dist/schema/RelationTabs.d.ts.map +1 -0
  855. package/dist/schema/RelationTabs.js +48 -0
  856. package/dist/schema/RelationTabs.js.map +1 -0
  857. package/dist/schema/ScriptTag.d.ts +63 -0
  858. package/dist/schema/ScriptTag.d.ts.map +1 -0
  859. package/dist/schema/ScriptTag.js +16 -0
  860. package/dist/schema/ScriptTag.js.map +1 -0
  861. package/dist/schema/Section.d.ts +93 -0
  862. package/dist/schema/Section.d.ts.map +1 -0
  863. package/dist/schema/Section.js +127 -0
  864. package/dist/schema/Section.js.map +1 -0
  865. package/dist/schema/ServerDataElement.d.ts +101 -0
  866. package/dist/schema/ServerDataElement.d.ts.map +1 -0
  867. package/dist/schema/ServerDataElement.js +135 -0
  868. package/dist/schema/ServerDataElement.js.map +1 -0
  869. package/dist/schema/Split.d.ts +31 -0
  870. package/dist/schema/Split.d.ts.map +1 -0
  871. package/dist/schema/Split.js +41 -0
  872. package/dist/schema/Split.js.map +1 -0
  873. package/dist/schema/Stat.d.ts +92 -0
  874. package/dist/schema/Stat.d.ts.map +1 -0
  875. package/dist/schema/Stat.js +116 -0
  876. package/dist/schema/Stat.js.map +1 -0
  877. package/dist/schema/StatsOverview.d.ts +76 -0
  878. package/dist/schema/StatsOverview.d.ts.map +1 -0
  879. package/dist/schema/StatsOverview.js +71 -0
  880. package/dist/schema/StatsOverview.js.map +1 -0
  881. package/dist/schema/StyleTag.d.ts +32 -0
  882. package/dist/schema/StyleTag.d.ts.map +1 -0
  883. package/dist/schema/StyleTag.js +38 -0
  884. package/dist/schema/StyleTag.js.map +1 -0
  885. package/dist/schema/TableWidget.d.ts +148 -0
  886. package/dist/schema/TableWidget.d.ts.map +1 -0
  887. package/dist/schema/TableWidget.js +190 -0
  888. package/dist/schema/TableWidget.js.map +1 -0
  889. package/dist/schema/Tabs.d.ts +40 -0
  890. package/dist/schema/Tabs.d.ts.map +1 -0
  891. package/dist/schema/Tabs.js +66 -0
  892. package/dist/schema/Tabs.js.map +1 -0
  893. package/dist/schema/Text.d.ts +33 -0
  894. package/dist/schema/Text.d.ts.map +1 -0
  895. package/dist/schema/Text.js +40 -0
  896. package/dist/schema/Text.js.map +1 -0
  897. package/dist/schema/UnorderedList.d.ts +36 -0
  898. package/dist/schema/UnorderedList.d.ts.map +1 -0
  899. package/dist/schema/UnorderedList.js +42 -0
  900. package/dist/schema/UnorderedList.js.map +1 -0
  901. package/dist/schema/View.d.ts +81 -0
  902. package/dist/schema/View.d.ts.map +1 -0
  903. package/dist/schema/View.js +81 -0
  904. package/dist/schema/View.js.map +1 -0
  905. package/dist/schema/Wizard.d.ts +67 -0
  906. package/dist/schema/Wizard.d.ts.map +1 -0
  907. package/dist/schema/Wizard.js +94 -0
  908. package/dist/schema/Wizard.js.map +1 -0
  909. package/dist/schema/index.d.ts +26 -0
  910. package/dist/schema/index.d.ts.map +1 -0
  911. package/dist/schema/index.js +26 -0
  912. package/dist/schema/index.js.map +1 -0
  913. package/dist/schema/resolveSchema.d.ts +122 -0
  914. package/dist/schema/resolveSchema.d.ts.map +1 -0
  915. package/dist/schema/resolveSchema.js +648 -0
  916. package/dist/schema/resolveSchema.js.map +1 -0
  917. package/dist/schema/sanitize.d.ts +21 -0
  918. package/dist/schema/sanitize.d.ts.map +1 -0
  919. package/dist/schema/sanitize.js +46 -0
  920. package/dist/schema/sanitize.js.map +1 -0
  921. package/dist/search.d.ts +53 -0
  922. package/dist/search.d.ts.map +1 -0
  923. package/dist/search.js +114 -0
  924. package/dist/search.js.map +1 -0
  925. package/dist/sessionFilters.d.ts +8 -0
  926. package/dist/sessionFilters.d.ts.map +1 -0
  927. package/dist/sessionFilters.js +115 -0
  928. package/dist/sessionFilters.js.map +1 -0
  929. package/dist/summarizers/Summarizer.d.ts +65 -0
  930. package/dist/summarizers/Summarizer.d.ts.map +1 -0
  931. package/dist/summarizers/Summarizer.js +98 -0
  932. package/dist/summarizers/Summarizer.js.map +1 -0
  933. package/dist/summarizers/index.d.ts +2 -0
  934. package/dist/summarizers/index.d.ts.map +1 -0
  935. package/dist/summarizers/index.js +2 -0
  936. package/dist/summarizers/index.js.map +1 -0
  937. package/dist/theme/base-colors.d.ts +3 -0
  938. package/dist/theme/base-colors.d.ts.map +1 -0
  939. package/dist/theme/base-colors.js +64 -0
  940. package/dist/theme/base-colors.js.map +1 -0
  941. package/dist/theme/chart-colors.d.ts +3 -0
  942. package/dist/theme/chart-colors.d.ts.map +1 -0
  943. package/dist/theme/chart-colors.js +46 -0
  944. package/dist/theme/chart-colors.js.map +1 -0
  945. package/dist/theme/colors.d.ts +56 -0
  946. package/dist/theme/colors.d.ts.map +1 -0
  947. package/dist/theme/colors.js +410 -0
  948. package/dist/theme/colors.js.map +1 -0
  949. package/dist/theme/generate-css.d.ts +9 -0
  950. package/dist/theme/generate-css.d.ts.map +1 -0
  951. package/dist/theme/generate-css.js +36 -0
  952. package/dist/theme/generate-css.js.map +1 -0
  953. package/dist/theme/generate-scale.d.ts +3 -0
  954. package/dist/theme/generate-scale.d.ts.map +1 -0
  955. package/dist/theme/generate-scale.js +89 -0
  956. package/dist/theme/generate-scale.js.map +1 -0
  957. package/dist/theme/icon-map.d.ts +9 -0
  958. package/dist/theme/icon-map.d.ts.map +1 -0
  959. package/dist/theme/icon-map.js +40 -0
  960. package/dist/theme/icon-map.js.map +1 -0
  961. package/dist/theme/index.d.ts +15 -0
  962. package/dist/theme/index.d.ts.map +1 -0
  963. package/dist/theme/index.js +13 -0
  964. package/dist/theme/index.js.map +1 -0
  965. package/dist/theme/migrate.d.ts +14 -0
  966. package/dist/theme/migrate.d.ts.map +1 -0
  967. package/dist/theme/migrate.js +79 -0
  968. package/dist/theme/migrate.js.map +1 -0
  969. package/dist/theme/presets.d.ts +30 -0
  970. package/dist/theme/presets.d.ts.map +1 -0
  971. package/dist/theme/presets.js +128 -0
  972. package/dist/theme/presets.js.map +1 -0
  973. package/dist/theme/radius.d.ts +11 -0
  974. package/dist/theme/radius.d.ts.map +1 -0
  975. package/dist/theme/radius.js +17 -0
  976. package/dist/theme/radius.js.map +1 -0
  977. package/dist/theme/resolve.d.ts +13 -0
  978. package/dist/theme/resolve.d.ts.map +1 -0
  979. package/dist/theme/resolve.js +91 -0
  980. package/dist/theme/resolve.js.map +1 -0
  981. package/dist/theme/spacing.d.ts +14 -0
  982. package/dist/theme/spacing.d.ts.map +1 -0
  983. package/dist/theme/spacing.js +17 -0
  984. package/dist/theme/spacing.js.map +1 -0
  985. package/dist/theme/theme-colors.d.ts +9 -0
  986. package/dist/theme/theme-colors.d.ts.map +1 -0
  987. package/dist/theme/theme-colors.js +84 -0
  988. package/dist/theme/theme-colors.js.map +1 -0
  989. package/dist/theme/types.d.ts +94 -0
  990. package/dist/theme/types.d.ts.map +1 -0
  991. package/dist/theme/types.js +2 -0
  992. package/dist/theme/types.js.map +1 -0
  993. package/dist/uploads/UploadAdapter.d.ts +34 -0
  994. package/dist/uploads/UploadAdapter.d.ts.map +1 -0
  995. package/dist/uploads/UploadAdapter.js +2 -0
  996. package/dist/uploads/UploadAdapter.js.map +1 -0
  997. package/dist/uploads/index.d.ts +3 -0
  998. package/dist/uploads/index.d.ts.map +1 -0
  999. package/dist/uploads/index.js +2 -0
  1000. package/dist/uploads/index.js.map +1 -0
  1001. package/dist/uploads/localUpload.d.ts +25 -0
  1002. package/dist/uploads/localUpload.d.ts.map +1 -0
  1003. package/dist/uploads/localUpload.js +65 -0
  1004. package/dist/uploads/localUpload.js.map +1 -0
  1005. package/dist/validation/Validator.d.ts +40 -0
  1006. package/dist/validation/Validator.d.ts.map +1 -0
  1007. package/dist/validation/Validator.js +25 -0
  1008. package/dist/validation/Validator.js.map +1 -0
  1009. package/dist/validation/index.d.ts +5 -0
  1010. package/dist/validation/index.d.ts.map +1 -0
  1011. package/dist/validation/index.js +5 -0
  1012. package/dist/validation/index.js.map +1 -0
  1013. package/dist/validation/rules.d.ts +9 -0
  1014. package/dist/validation/rules.d.ts.map +1 -0
  1015. package/dist/validation/rules.js +61 -0
  1016. package/dist/validation/rules.js.map +1 -0
  1017. package/dist/validation/runValidators.d.ts +30 -0
  1018. package/dist/validation/runValidators.d.ts.map +1 -0
  1019. package/dist/validation/runValidators.js +438 -0
  1020. package/dist/validation/runValidators.js.map +1 -0
  1021. package/dist/validation/uniqueValidator.d.ts +61 -0
  1022. package/dist/validation/uniqueValidator.d.ts.map +1 -0
  1023. package/dist/validation/uniqueValidator.js +80 -0
  1024. package/dist/validation/uniqueValidator.js.map +1 -0
  1025. package/dist/vite.d.ts +19 -0
  1026. package/dist/vite.d.ts.map +1 -0
  1027. package/dist/vite.js +696 -0
  1028. package/dist/vite.js.map +1 -0
  1029. package/dist/widgets/index.d.ts +2 -0
  1030. package/dist/widgets/index.d.ts.map +1 -0
  1031. package/dist/widgets/index.js +7 -0
  1032. package/dist/widgets/index.js.map +1 -0
  1033. package/dist/widgets/registry.d.ts +32 -0
  1034. package/dist/widgets/registry.d.ts.map +1 -0
  1035. package/dist/widgets/registry.js +17 -0
  1036. package/dist/widgets/registry.js.map +1 -0
  1037. package/package.json +101 -0
  1038. package/src/Cluster.test.ts +283 -0
  1039. package/src/Cluster.ts +83 -0
  1040. package/src/Column.test.ts +140 -0
  1041. package/src/Column.ts +612 -0
  1042. package/src/Global.test.ts +367 -0
  1043. package/src/Global.ts +169 -0
  1044. package/src/Page.test.ts +50 -0
  1045. package/src/Page.ts +139 -0
  1046. package/src/Pilotiq.test.ts +47 -0
  1047. package/src/Pilotiq.ts +705 -0
  1048. package/src/PilotiqRegistry.ts +36 -0
  1049. package/src/PilotiqServiceProvider.ts +69 -0
  1050. package/src/RelationManager.test.ts +400 -0
  1051. package/src/RelationManager.ts +527 -0
  1052. package/src/RenderHook.test.ts +252 -0
  1053. package/src/RenderHook.ts +226 -0
  1054. package/src/Resource.test.ts +240 -0
  1055. package/src/Resource.ts +439 -0
  1056. package/src/RightPanel.test.ts +202 -0
  1057. package/src/RightPanel.ts +132 -0
  1058. package/src/Tab.test.ts +91 -0
  1059. package/src/Tab.ts +156 -0
  1060. package/src/UserMenuItem.ts +145 -0
  1061. package/src/actions/Action.test.ts +2479 -0
  1062. package/src/actions/Action.ts +2124 -0
  1063. package/src/actions/ActionGroup.test.ts +112 -0
  1064. package/src/actions/ActionGroup.ts +173 -0
  1065. package/src/actions/attachFactory.ts +172 -0
  1066. package/src/actions/exportFactory.ts +215 -0
  1067. package/src/actions/importFactory.ts +222 -0
  1068. package/src/actions/index.ts +17 -0
  1069. package/src/applyPageHooks.test.ts +298 -0
  1070. package/src/applyPageHooks.ts +242 -0
  1071. package/src/authorization.test.ts +483 -0
  1072. package/src/breadcrumbs.test.ts +238 -0
  1073. package/src/cells/coerce.test.ts +85 -0
  1074. package/src/cells/coerce.ts +84 -0
  1075. package/src/clusterPaths.ts +35 -0
  1076. package/src/columns/BadgeColumn.test.ts +54 -0
  1077. package/src/columns/BadgeColumn.ts +32 -0
  1078. package/src/columns/BooleanColumn.test.ts +41 -0
  1079. package/src/columns/BooleanColumn.ts +18 -0
  1080. package/src/columns/ColorColumn.test.ts +37 -0
  1081. package/src/columns/ColorColumn.ts +38 -0
  1082. package/src/columns/IconColumn.test.ts +54 -0
  1083. package/src/columns/IconColumn.ts +37 -0
  1084. package/src/columns/ImageColumn.test.ts +41 -0
  1085. package/src/columns/ImageColumn.ts +28 -0
  1086. package/src/columns/SelectColumn.ts +60 -0
  1087. package/src/columns/TextColumn.test.ts +190 -0
  1088. package/src/columns/TextColumn.ts +20 -0
  1089. package/src/columns/TextInputColumn.ts +68 -0
  1090. package/src/columns/ToggleColumn.ts +46 -0
  1091. package/src/columns/editableColumns.test.ts +193 -0
  1092. package/src/columns/index.ts +9 -0
  1093. package/src/defaultGlobalPages.ts +95 -0
  1094. package/src/defaultPages.test.ts +634 -0
  1095. package/src/defaultPages.ts +614 -0
  1096. package/src/defaultViewPage.test.ts +147 -0
  1097. package/src/elements/Form.test.ts +223 -0
  1098. package/src/elements/Form.ts +397 -0
  1099. package/src/elements/ListTabs.ts +28 -0
  1100. package/src/elements/Table.test.ts +422 -0
  1101. package/src/elements/Table.ts +816 -0
  1102. package/src/elements/TableGroup.test.ts +149 -0
  1103. package/src/elements/TableGroup.ts +199 -0
  1104. package/src/elements/dispatchAction.test.ts +463 -0
  1105. package/src/elements/dispatchAction.ts +355 -0
  1106. package/src/elements/dispatchForm.test.ts +455 -0
  1107. package/src/elements/dispatchForm.ts +1855 -0
  1108. package/src/elements/dispatchTable.test.ts +1247 -0
  1109. package/src/elements/dispatchTable.ts +666 -0
  1110. package/src/elements/index.ts +21 -0
  1111. package/src/entries/BadgeEntry.ts +39 -0
  1112. package/src/entries/CodeEntry.test.ts +40 -0
  1113. package/src/entries/CodeEntry.ts +52 -0
  1114. package/src/entries/ColorEntry.ts +63 -0
  1115. package/src/entries/ComponentEntry.test.ts +173 -0
  1116. package/src/entries/ComponentEntry.ts +95 -0
  1117. package/src/entries/Entry.ts +304 -0
  1118. package/src/entries/IconEntry.ts +49 -0
  1119. package/src/entries/ImageEntry.ts +61 -0
  1120. package/src/entries/KeyValueEntry.ts +47 -0
  1121. package/src/entries/RepeatableEntry.test.ts +239 -0
  1122. package/src/entries/RepeatableEntry.ts +173 -0
  1123. package/src/entries/TextEntry.test.ts +394 -0
  1124. package/src/entries/TextEntry.ts +60 -0
  1125. package/src/entries/index.ts +12 -0
  1126. package/src/entries/leaves.test.ts +306 -0
  1127. package/src/entries/registry.ts +54 -0
  1128. package/src/fields/BuilderField.test.ts +1188 -0
  1129. package/src/fields/BuilderField.ts +568 -0
  1130. package/src/fields/BuilderRelationship.test.ts +811 -0
  1131. package/src/fields/CheckboxField.test.ts +44 -0
  1132. package/src/fields/CheckboxField.ts +27 -0
  1133. package/src/fields/CheckboxListField.test.ts +99 -0
  1134. package/src/fields/CheckboxListField.ts +66 -0
  1135. package/src/fields/ColorPickerField.test.ts +33 -0
  1136. package/src/fields/ColorPickerField.ts +25 -0
  1137. package/src/fields/DateField.ts +54 -0
  1138. package/src/fields/DateTimeField.test.ts +55 -0
  1139. package/src/fields/EmailField.ts +16 -0
  1140. package/src/fields/Field.test.ts +639 -0
  1141. package/src/fields/Field.ts +773 -0
  1142. package/src/fields/FileUploadField.test.ts +97 -0
  1143. package/src/fields/FileUploadField.ts +71 -0
  1144. package/src/fields/HiddenField.test.ts +27 -0
  1145. package/src/fields/HiddenField.ts +28 -0
  1146. package/src/fields/KeyValueField.test.ts +105 -0
  1147. package/src/fields/KeyValueField.ts +55 -0
  1148. package/src/fields/MarkdownField.test.ts +167 -0
  1149. package/src/fields/MarkdownField.ts +151 -0
  1150. package/src/fields/NumberField.ts +33 -0
  1151. package/src/fields/RadioField.test.ts +94 -0
  1152. package/src/fields/RadioField.ts +67 -0
  1153. package/src/fields/RepeaterField.test.ts +1806 -0
  1154. package/src/fields/RepeaterField.ts +791 -0
  1155. package/src/fields/RepeaterRelationship.test.ts +1630 -0
  1156. package/src/fields/RepeaterSimple.test.ts +248 -0
  1157. package/src/fields/RowButton.test.ts +149 -0
  1158. package/src/fields/RowButton.ts +125 -0
  1159. package/src/fields/SelectField.test.ts +192 -0
  1160. package/src/fields/SelectField.ts +235 -0
  1161. package/src/fields/SliderField.test.ts +50 -0
  1162. package/src/fields/SliderField.ts +53 -0
  1163. package/src/fields/SlugField.ts +24 -0
  1164. package/src/fields/TagsInputField.test.ts +154 -0
  1165. package/src/fields/TagsInputField.ts +133 -0
  1166. package/src/fields/TextField.ts +24 -0
  1167. package/src/fields/TextareaField.test.ts +58 -0
  1168. package/src/fields/TextareaField.ts +59 -0
  1169. package/src/fields/ToggleButtonsField.test.ts +106 -0
  1170. package/src/fields/ToggleButtonsField.ts +59 -0
  1171. package/src/fields/ToggleField.ts +16 -0
  1172. package/src/fields/disableOptionsWhenSelectedInSiblingRepeaterItems.test.ts +319 -0
  1173. package/src/fields/optionsResolver.ts +95 -0
  1174. package/src/fields/resolveField.ts +28 -0
  1175. package/src/filters/BooleanFilter.ts +35 -0
  1176. package/src/filters/DateRangeFilter.test.ts +194 -0
  1177. package/src/filters/DateRangeFilter.ts +148 -0
  1178. package/src/filters/Filter.test.ts +268 -0
  1179. package/src/filters/Filter.ts +184 -0
  1180. package/src/filters/FormFilter.test.ts +238 -0
  1181. package/src/filters/FormFilter.ts +215 -0
  1182. package/src/filters/MultiSelectFilter.test.ts +119 -0
  1183. package/src/filters/MultiSelectFilter.ts +78 -0
  1184. package/src/filters/QueryBuilderFilter.test.ts +644 -0
  1185. package/src/filters/QueryBuilderFilter.ts +398 -0
  1186. package/src/filters/SelectFilter.ts +46 -0
  1187. package/src/filters/TernaryFilter.test.ts +160 -0
  1188. package/src/filters/TernaryFilter.ts +72 -0
  1189. package/src/filters/TrashedFilter.test.ts +149 -0
  1190. package/src/filters/TrashedFilter.ts +55 -0
  1191. package/src/filters/queryBuilder/BooleanConstraint.ts +31 -0
  1192. package/src/filters/queryBuilder/Constraint.ts +115 -0
  1193. package/src/filters/queryBuilder/DateConstraint.ts +69 -0
  1194. package/src/filters/queryBuilder/NumberConstraint.ts +66 -0
  1195. package/src/filters/queryBuilder/SelectConstraint.ts +72 -0
  1196. package/src/filters/queryBuilder/TextConstraint.ts +65 -0
  1197. package/src/filters/queryBuilder/index.ts +12 -0
  1198. package/src/icons/index.ts +2 -0
  1199. package/src/icons/lucide.ts +204 -0
  1200. package/src/icons/registry.test.ts +56 -0
  1201. package/src/icons/registry.ts +41 -0
  1202. package/src/icons/types.ts +47 -0
  1203. package/src/index.ts +521 -0
  1204. package/src/io/csv.test.ts +142 -0
  1205. package/src/io/csv.ts +170 -0
  1206. package/src/nestedRelationManagerData.test.ts +526 -0
  1207. package/src/notifications/Notification.test.ts +210 -0
  1208. package/src/notifications/Notification.ts +354 -0
  1209. package/src/notifications/broadcast.test.ts +110 -0
  1210. package/src/notifications/broadcast.ts +95 -0
  1211. package/src/notifications/database.test.ts +383 -0
  1212. package/src/notifications/database.ts +398 -0
  1213. package/src/notifications/databaseNotifications.test.ts +187 -0
  1214. package/src/notifications/dispatchNotificationAction.test.ts +341 -0
  1215. package/src/notifications/dispatchNotificationAction.ts +142 -0
  1216. package/src/notifications/flash.test.ts +89 -0
  1217. package/src/notifications/flash.ts +71 -0
  1218. package/src/notifications/index.ts +45 -0
  1219. package/src/notifications/registerBroadcastAuth.test.ts +134 -0
  1220. package/src/notifications/registerBroadcastAuth.ts +100 -0
  1221. package/src/notifications/resolveSavedNotification.test.ts +82 -0
  1222. package/src/notifications/resolveSavedNotification.ts +59 -0
  1223. package/src/notifications/types.ts +93 -0
  1224. package/src/orm/m2mAccessor.ts +66 -0
  1225. package/src/orm/modelDefaults.test.ts +633 -0
  1226. package/src/orm/modelDefaults.ts +632 -0
  1227. package/src/pageData.test.ts +1121 -0
  1228. package/src/pageData.ts +4662 -0
  1229. package/src/plugins/index.ts +1 -0
  1230. package/src/plugins/themeEditor.ts +24 -0
  1231. package/src/react/AppShell.tsx +148 -0
  1232. package/src/react/CommandPalette.tsx +375 -0
  1233. package/src/react/FormStateContext.tsx +398 -0
  1234. package/src/react/HeadHooks.tsx +126 -0
  1235. package/src/react/NotificationActionStrip.tsx +263 -0
  1236. package/src/react/NotificationBell.tsx +426 -0
  1237. package/src/react/RenderHookSlot.tsx +32 -0
  1238. package/src/react/RightSidebar.tsx +257 -0
  1239. package/src/react/RightSidebarContext.tsx +211 -0
  1240. package/src/react/RightSidebarTrigger.tsx +53 -0
  1241. package/src/react/SchemaRenderer.tsx +6128 -0
  1242. package/src/react/SearchTrigger.tsx +46 -0
  1243. package/src/react/ThemeProvider.tsx +93 -0
  1244. package/src/react/ThemeSettingsPage.tsx +579 -0
  1245. package/src/react/ThemeToggle.tsx +20 -0
  1246. package/src/react/Toaster.tsx +158 -0
  1247. package/src/react/UserMenu.tsx +196 -0
  1248. package/src/react/WidgetDataContext.tsx +157 -0
  1249. package/src/react/cells/EditableCell.tsx +376 -0
  1250. package/src/react/fieldJsHandler.test.ts +166 -0
  1251. package/src/react/fieldJsHandler.ts +79 -0
  1252. package/src/react/fields/BuilderInput.tsx +995 -0
  1253. package/src/react/fields/CheckboxInput.tsx +39 -0
  1254. package/src/react/fields/CheckboxListInput.tsx +81 -0
  1255. package/src/react/fields/ColorInput.tsx +51 -0
  1256. package/src/react/fields/DateFieldInput.tsx +70 -0
  1257. package/src/react/fields/DateTimeInput.tsx +42 -0
  1258. package/src/react/fields/FieldShell.tsx +107 -0
  1259. package/src/react/fields/FileUploadInput.tsx +189 -0
  1260. package/src/react/fields/HiddenInput.tsx +17 -0
  1261. package/src/react/fields/KeyValueInput.tsx +200 -0
  1262. package/src/react/fields/MarkdownInput.tsx +333 -0
  1263. package/src/react/fields/RadioInput.tsx +60 -0
  1264. package/src/react/fields/RepeaterInput.test.ts +116 -0
  1265. package/src/react/fields/RepeaterInput.tsx +1313 -0
  1266. package/src/react/fields/SelectFieldInput.tsx +257 -0
  1267. package/src/react/fields/SliderInput.tsx +63 -0
  1268. package/src/react/fields/TagsInput.tsx +265 -0
  1269. package/src/react/fields/TextLikeInput.tsx +54 -0
  1270. package/src/react/fields/ToggleButtonsInput.tsx +60 -0
  1271. package/src/react/fields/ToggleFieldInput.tsx +35 -0
  1272. package/src/react/fields/rowChromeButton.tsx +225 -0
  1273. package/src/react/fields/syncRowGates.test.ts +202 -0
  1274. package/src/react/fields/syncRowGates.ts +66 -0
  1275. package/src/react/formStateHelpers.test.ts +295 -0
  1276. package/src/react/formStateHelpers.ts +218 -0
  1277. package/src/react/hooks/use-mobile.ts +19 -0
  1278. package/src/react/icon-context.tsx +60 -0
  1279. package/src/react/index.ts +85 -0
  1280. package/src/react/layouts/SidebarLayout.tsx +239 -0
  1281. package/src/react/layouts/TopbarLayout.tsx +245 -0
  1282. package/src/react/navigate.tsx +37 -0
  1283. package/src/react/registry.ts +48 -0
  1284. package/src/react/right-panel-registry.tsx +47 -0
  1285. package/src/react/theme-preview/apply.ts +99 -0
  1286. package/src/react/theme-preview/build-html.ts +436 -0
  1287. package/src/react/ui/button.tsx +51 -0
  1288. package/src/react/ui/calendar.tsx +67 -0
  1289. package/src/react/ui/checkbox.tsx +29 -0
  1290. package/src/react/ui/dialog.tsx +108 -0
  1291. package/src/react/ui/dropdown-menu.tsx +97 -0
  1292. package/src/react/ui/input.tsx +20 -0
  1293. package/src/react/ui/label.tsx +21 -0
  1294. package/src/react/ui/popover.tsx +50 -0
  1295. package/src/react/ui/select.tsx +169 -0
  1296. package/src/react/ui/separator.tsx +25 -0
  1297. package/src/react/ui/sheet.tsx +136 -0
  1298. package/src/react/ui/sidebar.tsx +723 -0
  1299. package/src/react/ui/skeleton.tsx +13 -0
  1300. package/src/react/ui/slider.tsx +34 -0
  1301. package/src/react/ui/switch.tsx +28 -0
  1302. package/src/react/ui/table.tsx +105 -0
  1303. package/src/react/ui/tabs.tsx +63 -0
  1304. package/src/react/ui/textarea.tsx +18 -0
  1305. package/src/react/ui/tooltip.tsx +64 -0
  1306. package/src/react/useResizableWidth.ts +139 -0
  1307. package/src/react/utils.ts +6 -0
  1308. package/src/react/widgetRegistry.test.ts +43 -0
  1309. package/src/react/widgetRegistry.ts +50 -0
  1310. package/src/react/widgets/StatsOverviewRenderer.tsx +232 -0
  1311. package/src/react/widgets/TableWidgetRenderer.tsx +231 -0
  1312. package/src/react/widgets/ViewRenderer.tsx +71 -0
  1313. package/src/relationManagerData.test.ts +1146 -0
  1314. package/src/richtext/index.ts +8 -0
  1315. package/src/richtext/registry.ts +89 -0
  1316. package/src/routes-nested-relations.test.ts +676 -0
  1317. package/src/routes-relations.test.ts +972 -0
  1318. package/src/routes.test.ts +1886 -0
  1319. package/src/routes.ts +3262 -0
  1320. package/src/schema/Alert.test.ts +63 -0
  1321. package/src/schema/Alert.ts +49 -0
  1322. package/src/schema/Block.ts +169 -0
  1323. package/src/schema/Breadcrumbs.ts +40 -0
  1324. package/src/schema/Card.ts +35 -0
  1325. package/src/schema/Divider.ts +20 -0
  1326. package/src/schema/Element.ts +219 -0
  1327. package/src/schema/EmptyState.test.ts +37 -0
  1328. package/src/schema/EmptyState.ts +63 -0
  1329. package/src/schema/Fieldset.ts +43 -0
  1330. package/src/schema/Grid.ts +43 -0
  1331. package/src/schema/Group.ts +30 -0
  1332. package/src/schema/Heading.ts +39 -0
  1333. package/src/schema/Html.ts +67 -0
  1334. package/src/schema/Icon.ts +54 -0
  1335. package/src/schema/Image.ts +57 -0
  1336. package/src/schema/LinkTag.ts +41 -0
  1337. package/src/schema/Markdown.ts +85 -0
  1338. package/src/schema/MetaTag.ts +41 -0
  1339. package/src/schema/RelationTabs.ts +71 -0
  1340. package/src/schema/ScriptTag.ts +55 -0
  1341. package/src/schema/Section.ts +143 -0
  1342. package/src/schema/ServerDataElement.test.ts +140 -0
  1343. package/src/schema/ServerDataElement.ts +156 -0
  1344. package/src/schema/Split.ts +50 -0
  1345. package/src/schema/Stat.test.ts +118 -0
  1346. package/src/schema/Stat.ts +154 -0
  1347. package/src/schema/StatsOverview.test.ts +141 -0
  1348. package/src/schema/StatsOverview.ts +119 -0
  1349. package/src/schema/StyleTag.ts +35 -0
  1350. package/src/schema/TableWidget.test.ts +297 -0
  1351. package/src/schema/TableWidget.ts +289 -0
  1352. package/src/schema/Tabs.ts +79 -0
  1353. package/src/schema/Text.ts +58 -0
  1354. package/src/schema/UnorderedList.ts +49 -0
  1355. package/src/schema/View.test.ts +111 -0
  1356. package/src/schema/View.ts +127 -0
  1357. package/src/schema/Wizard.ts +108 -0
  1358. package/src/schema/containers.test.ts +446 -0
  1359. package/src/schema/headTags.test.ts +134 -0
  1360. package/src/schema/index.ts +39 -0
  1361. package/src/schema/primes.test.ts +269 -0
  1362. package/src/schema/resolveSchema.test.ts +329 -0
  1363. package/src/schema/resolveSchema.ts +807 -0
  1364. package/src/schema/sanitize.ts +49 -0
  1365. package/src/search.test.ts +446 -0
  1366. package/src/search.ts +178 -0
  1367. package/src/sessionFilters.test.ts +352 -0
  1368. package/src/sessionFilters.ts +133 -0
  1369. package/src/summarizers/Summarizer.test.ts +84 -0
  1370. package/src/summarizers/Summarizer.ts +123 -0
  1371. package/src/summarizers/index.ts +11 -0
  1372. package/src/theme/base-colors.ts +68 -0
  1373. package/src/theme/chart-colors.ts +50 -0
  1374. package/src/theme/colors.ts +447 -0
  1375. package/src/theme/generate-css.test.ts +139 -0
  1376. package/src/theme/generate-css.ts +44 -0
  1377. package/src/theme/generate-scale.test.ts +106 -0
  1378. package/src/theme/generate-scale.ts +97 -0
  1379. package/src/theme/icon-map.ts +42 -0
  1380. package/src/theme/index.ts +28 -0
  1381. package/src/theme/migrate.ts +81 -0
  1382. package/src/theme/presets.ts +135 -0
  1383. package/src/theme/radius.ts +18 -0
  1384. package/src/theme/resolve.test.ts +238 -0
  1385. package/src/theme/resolve.ts +96 -0
  1386. package/src/theme/spacing.ts +18 -0
  1387. package/src/theme/theme-colors.ts +88 -0
  1388. package/src/theme/types.ts +125 -0
  1389. package/src/uploads/UploadAdapter.ts +35 -0
  1390. package/src/uploads/index.ts +2 -0
  1391. package/src/uploads/localUpload.test.ts +70 -0
  1392. package/src/uploads/localUpload.ts +84 -0
  1393. package/src/validation/Validator.ts +49 -0
  1394. package/src/validation/index.ts +28 -0
  1395. package/src/validation/rules.ts +78 -0
  1396. package/src/validation/runValidators.ts +435 -0
  1397. package/src/validation/uniqueValidator.test.ts +196 -0
  1398. package/src/validation/uniqueValidator.ts +133 -0
  1399. package/src/validation/validators.test.ts +268 -0
  1400. package/src/vite.ts +758 -0
  1401. package/src/widgets/index.ts +10 -0
  1402. package/src/widgets/registry.ts +45 -0
  1403. package/src/widgets.test.ts +592 -0
  1404. package/tsconfig.build.json +11 -0
  1405. package/tsconfig.json +4 -0
  1406. package/tsconfig.test.json +10 -0
  1407. package/views/react/Dashboard.tsx +27 -0
  1408. package/views/react/Resources/Form.tsx +102 -0
  1409. package/views/react/Resources/Index.tsx +49 -0
@@ -0,0 +1,1313 @@
1
+ import React, { useContext, useEffect, useId, useMemo, useState } from 'react'
2
+ import { PlusIcon } from 'lucide-react'
3
+ import type { ElementMeta } from '../../schema/Element.js'
4
+ import { Button } from '../ui/button.js'
5
+ import { SchemaRenderer, dispatchHandlerAction } from '../SchemaRenderer.js'
6
+ import { FormIdContext, useFormState } from '../FormStateContext.js'
7
+ import { findFieldMeta } from '../formStateHelpers.js'
8
+ import { useNavigate } from '../navigate.js'
9
+ import { useToast } from '../Toaster.js'
10
+ import type { RowButtonsMeta } from '../../fields/RowButton.js'
11
+ import {
12
+ RowChromeIconButton,
13
+ ReorderGrip,
14
+ CollapseChevron,
15
+ resolveRowChrome,
16
+ DEFAULT_MOVE_UP,
17
+ DEFAULT_MOVE_DOWN,
18
+ DEFAULT_CLONE,
19
+ DEFAULT_DELETE,
20
+ } from './rowChromeButton.js'
21
+ import { syncRowGates } from './syncRowGates.js'
22
+
23
+ /**
24
+ * Pure reorder helper — used by both the HTML5 DnD path and the
25
+ * Up/Down button path. `insertBeforeIdx` is the boundary the dragged
26
+ * row should land at (range `0..rows.length`); after removing the
27
+ * source we adjust by -1 when the source sat below the target so the
28
+ * caller never has to think about post-removal index shifts.
29
+ *
30
+ * No-ops when the move would leave the array unchanged.
31
+ */
32
+ export function reorderRows<T>(rows: T[], fromIdx: number, insertBeforeIdx: number): T[] {
33
+ if (fromIdx < 0 || fromIdx >= rows.length) return rows
34
+ if (insertBeforeIdx < 0 || insertBeforeIdx > rows.length) return rows
35
+ if (fromIdx === insertBeforeIdx || fromIdx + 1 === insertBeforeIdx) return rows
36
+ const next = rows.slice()
37
+ const moved = next.splice(fromIdx, 1)[0] as T
38
+ const target = insertBeforeIdx > fromIdx ? insertBeforeIdx - 1 : insertBeforeIdx
39
+ next.splice(target, 0, moved)
40
+ return next
41
+ }
42
+
43
+ /**
44
+ * Tailwind v4 default breakpoint widths. Reused as container-query
45
+ * thresholds so authors can think in the same `sm/md/lg/xl/2xl` ladder
46
+ * regardless of viewport vs. container framing — at viewport width these
47
+ * fire identically to the corresponding `@media` queries.
48
+ */
49
+ const RESPONSIVE_GRID_BREAKPOINTS: Array<{ key: 'sm' | 'md' | 'lg' | 'xl' | '2xl'; min: string }> = [
50
+ { key: 'sm', min: '40rem' },
51
+ { key: 'md', min: '48rem' },
52
+ { key: 'lg', min: '64rem' },
53
+ { key: 'xl', min: '80rem' },
54
+ { key: '2xl', min: '96rem' },
55
+ ]
56
+
57
+ /**
58
+ * Compute the grid container's className / style / scoped-CSS block from
59
+ * a `meta.grid` value. Shared between Repeater and Builder so both render
60
+ * responsive grids identically.
61
+ *
62
+ * - `meta.grid` undefined → `{ hasGrid: false }` and the caller falls back
63
+ * to a vertical flex stack.
64
+ * - Number form (`grid(2)`) → inline `gridTemplateColumns: repeat(N, …)`.
65
+ * - Object form (`grid({ default: 1, md: 2 })`) → a fresh `<style>` block
66
+ * keyed off `scopeId` + a matching className on the container; default
67
+ * columns drive the base rule, each declared breakpoint adds a
68
+ * `@container` query override.
69
+ *
70
+ * Responsive mode requires a CQ context — the caller paints
71
+ * `wrapperStyle` (`container-type: inline-size`) on the outer wrapper so
72
+ * the grid's `@container` rules resolve against the Repeater's
73
+ * parent-allocated width, not the viewport. A 2-column Repeater dropped
74
+ * into a `Split` aside therefore folds back to 1 column once the aside
75
+ * is narrower than `md`, even on a wide screen.
76
+ *
77
+ * `scopeId` should be a stable per-field identifier (we use `useId()` from
78
+ * React — already isolated to this render's component instance).
79
+ */
80
+ export function buildGridContainer(
81
+ grid: number | Record<string, number | undefined> | undefined,
82
+ scopeId: string,
83
+ ): {
84
+ hasGrid: boolean
85
+ className: string
86
+ style: React.CSSProperties | undefined
87
+ styleBlock: React.ReactElement | null
88
+ wrapperStyle: React.CSSProperties | undefined
89
+ } {
90
+ if (grid === undefined) {
91
+ return { hasGrid: false, className: 'flex flex-col gap-3', style: undefined, styleBlock: null, wrapperStyle: undefined }
92
+ }
93
+ if (typeof grid === 'number') {
94
+ return {
95
+ hasGrid: true,
96
+ className: 'grid gap-3',
97
+ style: { gridTemplateColumns: `repeat(${grid}, minmax(0, 1fr))` },
98
+ styleBlock: null,
99
+ wrapperStyle: undefined,
100
+ }
101
+ }
102
+ const cls = `pq-grid-${scopeId.replace(/:/g, '')}`
103
+ const baseCols = typeof grid['default'] === 'number' ? grid['default'] : 1
104
+ const rules: string[] = [
105
+ `.${cls} { display: grid; gap: 0.75rem; grid-template-columns: repeat(${baseCols}, minmax(0, 1fr)); }`,
106
+ ]
107
+ for (const bp of RESPONSIVE_GRID_BREAKPOINTS) {
108
+ const cols = grid[bp.key]
109
+ if (typeof cols !== 'number') continue
110
+ rules.push(`@container (min-width: ${bp.min}) { .${cls} { grid-template-columns: repeat(${cols}, minmax(0, 1fr)); } }`)
111
+ }
112
+ return {
113
+ hasGrid: true,
114
+ className: cls,
115
+ style: undefined,
116
+ styleBlock: <style>{rules.join('\n')}</style>,
117
+ wrapperStyle: { containerType: 'inline-size' },
118
+ }
119
+ }
120
+
121
+ interface RowState {
122
+ id: string
123
+ children: ElementMeta[]
124
+ itemLabel?: string
125
+ hidden?: boolean
126
+ extraActions?: ElementMeta[]
127
+ // Per-row capability flags from `itemCan*(rule)`. Stamped only when the
128
+ // rule resolved falsy server-side; default ("allowed") leaves them unset.
129
+ // Cloned rows inherit nothing (a fresh row had no rule evaluation pass).
130
+ canDelete?: false
131
+ canClone?: false
132
+ canReorder?: false
133
+ }
134
+
135
+ /**
136
+ * Repeater renderer (Plan #14).
137
+ *
138
+ * Rows are managed as local React state with stable `id` keys so
139
+ * uncontrolled inner inputs preserve their typed values across
140
+ * add/remove/reorder operations. Each row's resolved children meta is
141
+ * deep-cloned with a row-scoped prefix on every Field's `name` so
142
+ * submitted form bodies are flat-keyed (`items.0.product`, etc.) — the
143
+ * server's `coerceFormValues` re-groups them into an array.
144
+ *
145
+ * Reorder: native HTML5 drag-and-drop on each row, with a 2px drop
146
+ * indicator showing where the row will land. Up/Down buttons are kept
147
+ * as a keyboard fallback. Both paths route through `reorderRows()` so
148
+ * behavior is identical. Collapsed state persists per-row to
149
+ * `localStorage` under `pilotiq.repeater.<formId>.<fieldName>.<rowId>`
150
+ * when collapsible.
151
+ *
152
+ * Inner-field reactivity: this component does NOT integrate with
153
+ * `FormStateProvider` for nested-path live updates; that surgery is
154
+ * tracked separately. Repeaters with `live()` inner fields render
155
+ * today but the `live` trigger doesn't roundtrip.
156
+ */
157
+ export function RepeaterInput({
158
+ el,
159
+ name,
160
+ disabled,
161
+ }: {
162
+ el: ElementMeta
163
+ name: string
164
+ disabled: boolean
165
+ }): React.ReactElement {
166
+ // The parent <form>'s id, scoped via context. Falls back to the field
167
+ // name when no Form is in scope (defensive — Repeaters always render
168
+ // inside a Form on real pages, but Storybook / unit tests can mount
169
+ // them bare).
170
+ const formIdFromCtx = useContext(FormIdContext)
171
+ const formId = formIdFromCtx || `repeater-${name}`
172
+ const meta = el as RepeaterMetaShape
173
+ const minItems = typeof meta.minItems === 'number' ? meta.minItems : undefined
174
+ const maxItems = typeof meta.maxItems === 'number' ? meta.maxItems : undefined
175
+ const collapsible = Boolean(meta.collapsible)
176
+ const defaultCollapsed = Boolean(meta.defaultCollapsed)
177
+ const accordion = Boolean(meta.accordion)
178
+ const reorderable = Boolean(meta.reorderable)
179
+ const cloneable = Boolean(meta.cloneable)
180
+ const simple = Boolean(meta.simple)
181
+ const buttons = meta.buttons
182
+ // Customizer wins over the legacy `addActionLabel`. Default 'Add' is the
183
+ // final fallback; documented in `RepeaterField.addActionLabel`.
184
+ const addLabel = buttons?.add?.label
185
+ ?? (typeof meta.addActionLabel === 'string' ? meta.addActionLabel : 'Add')
186
+ const columns = typeof meta.columns === 'number' && meta.columns > 1 ? meta.columns : 1
187
+ // Row-grid mode: scalar `grid: N` or responsive object `grid: { default, md, … }`
188
+ // lays rows in an n-column grid. Distinct from `columns` which grids the inner
189
+ // schema *inside* a row. We suppress the drop indicator in grid mode (a horizontal
190
+ // accent line reads wrong across grid cells); button reorder still works.
191
+ const gridScopeId = useId()
192
+ const gridContainer = useMemo(
193
+ () => buildGridContainer(
194
+ meta.grid as number | Record<string, number | undefined> | undefined,
195
+ gridScopeId,
196
+ ),
197
+ [meta.grid, gridScopeId],
198
+ )
199
+ // Table mode renders rows as `<tr>` and inner fields as `<td>`. Mutually
200
+ // exclusive with `simple` and `grid` (the field setters arbitrate).
201
+ // Collapsible / accordion are meaningless on `<tr>` rows so we ignore
202
+ // those flags in this path.
203
+ const tableColumns = meta.table?.columns
204
+ const tableMode = Array.isArray(tableColumns) && tableColumns.length > 0
205
+
206
+ const initialRows: RowState[] = useMemo(
207
+ () => (meta.rows ?? []).map(r => ({
208
+ id: r.id,
209
+ children: r.children,
210
+ ...(r.itemLabel !== undefined ? { itemLabel: r.itemLabel } : {}),
211
+ ...(r.hidden ? { hidden: true } : {}),
212
+ ...(r.extraActions && r.extraActions.length > 0 ? { extraActions: r.extraActions } : {}),
213
+ ...(r.canDelete === false ? { canDelete: false as const } : {}),
214
+ ...(r.canClone === false ? { canClone: false as const } : {}),
215
+ ...(r.canReorder === false ? { canReorder: false as const } : {}),
216
+ })),
217
+ // eslint-disable-next-line react-hooks/exhaustive-deps
218
+ [],
219
+ )
220
+ const [rows, setRows] = useState<RowState[]>(initialRows)
221
+ const metaRows = meta.rows
222
+ useEffect(() => {
223
+ if (!metaRows) return
224
+ setRows(prev => syncRowGates(prev, metaRows))
225
+ }, [metaRows])
226
+ const [collapsed, setCollapsed] = useState<Record<string, boolean>>(() =>
227
+ accordion ? {} : initSeedCollapsed(initialRows, formId, name, defaultCollapsed, collapsible),
228
+ )
229
+ // Accordion mode replaces the per-row collapsed map with a single open
230
+ // row id (or `null` for "all collapsed"). Persisted under a single
231
+ // `…accordion` storage key so reload + form swap restore the open row.
232
+ // Initial value: respect `defaultCollapsed` (start with everything
233
+ // collapsed when the author opted in), otherwise open the first
234
+ // visible row — Filament's posture, and matches the implicit user
235
+ // mental model that an accordion always shows *something*.
236
+ const [accordionOpenId, setAccordionOpenId] = useState<string | null>(() => {
237
+ if (!accordion) return null
238
+ const stored = readAccordionFromStorage(formId, name)
239
+ if (stored !== undefined) {
240
+ // Storage may hold a stale id from before a row was deleted; if so,
241
+ // fall through to the default.
242
+ if (stored === '' || initialRows.some(r => r.id === stored)) return stored === '' ? null : stored
243
+ }
244
+ if (defaultCollapsed) return null
245
+ const firstVisible = initialRows.find(r => !r.hidden)
246
+ return firstVisible?.id ?? null
247
+ })
248
+
249
+ const atMin = minItems !== undefined && rows.length <= minItems
250
+ const atMax = maxItems !== undefined && rows.length >= maxItems
251
+
252
+ const addRow = (): void => {
253
+ if (atMax) return
254
+ const newRow: RowState = {
255
+ id: generateRowId(),
256
+ children: meta.template ?? [],
257
+ }
258
+ setRows(prev => [...prev, newRow])
259
+ if (accordion) {
260
+ // New row should be the only one open — the user just asked for it.
261
+ setAccordionOpenId(newRow.id)
262
+ writeAccordionToStorage(formId, name, newRow.id)
263
+ return
264
+ }
265
+ if (collapsible && defaultCollapsed) {
266
+ setCollapsed(prev => ({ ...prev, [newRow.id]: true }))
267
+ writeCollapsedToStorage(formId, name, newRow.id, true)
268
+ }
269
+ }
270
+
271
+ const removeRow = (id: string): void => {
272
+ if (atMin) return
273
+ setRows(prev => prev.filter(r => r.id !== id))
274
+ if (accordion) {
275
+ if (accordionOpenId === id) {
276
+ setAccordionOpenId(null)
277
+ writeAccordionToStorage(formId, name, null)
278
+ }
279
+ return
280
+ }
281
+ setCollapsed(prev => {
282
+ const { [id]: _drop, ...rest } = prev
283
+ return rest
284
+ })
285
+ deleteCollapsedFromStorage(formId, name, id)
286
+ }
287
+
288
+ const cloneRow = (id: string): void => {
289
+ if (atMax) return
290
+ setRows(prev => {
291
+ const idx = prev.findIndex(r => r.id === id)
292
+ if (idx < 0) return prev
293
+ const source = prev[idx]!
294
+ const clone: RowState = {
295
+ id: generateRowId(),
296
+ children: source.children,
297
+ ...(source.itemLabel !== undefined ? { itemLabel: source.itemLabel } : {}),
298
+ }
299
+ const next = prev.slice()
300
+ next.splice(idx + 1, 0, clone)
301
+ return next
302
+ })
303
+ }
304
+
305
+ const moveRow = (id: string, dir: -1 | 1): void => {
306
+ setRows(prev => {
307
+ const idx = prev.findIndex(r => r.id === id)
308
+ if (idx < 0) return prev
309
+ // Skip past hidden neighbours so reorder operates between visible
310
+ // rows. Hidden rows hold their absolute slot — the visible row hops
311
+ // over them.
312
+ if (dir === -1) {
313
+ let target = idx - 1
314
+ while (target >= 0 && prev[target]?.hidden) target--
315
+ if (target < 0) return prev
316
+ return reorderRows(prev, idx, target)
317
+ }
318
+ let target = idx + 1
319
+ while (target < prev.length && prev[target]?.hidden) target++
320
+ if (target >= prev.length) return prev
321
+ return reorderRows(prev, idx, target + 1)
322
+ })
323
+ }
324
+
325
+ // ── DnD state ───────────────────────────────────────────
326
+ // dragId — the row being dragged, or null when no drag is active.
327
+ // dropAt — the boundary slot the cursor is currently over
328
+ // (range 0..rows.length); null when not over a valid drop target.
329
+ const [dragId, setDragId] = useState<string | null>(null)
330
+ const [dropAt, setDropAt] = useState<number | null>(null)
331
+
332
+ // Generic on `HTMLElement` so the same handlers wire onto a `<div>`
333
+ // row (card / grid layouts) AND a `<tr>` row (table layout). Concrete
334
+ // refinement happens at the consumer's prop boundary.
335
+ const onRowDragStart = (id: string) => (e: React.DragEvent<HTMLElement>): void => {
336
+ if (!reorderable || disabled) return
337
+ setDragId(id)
338
+ // dataTransfer needs *something* to register the drag in Firefox.
339
+ e.dataTransfer.effectAllowed = 'move'
340
+ try { e.dataTransfer.setData('text/plain', id) } catch { /* IE quirk; ignore */ }
341
+ }
342
+
343
+ const onRowDragOver = (idx: number) => (e: React.DragEvent<HTMLElement>): void => {
344
+ if (!reorderable || disabled || dragId === null) return
345
+ e.preventDefault()
346
+ e.dataTransfer.dropEffect = 'move'
347
+ // Drop above this row when cursor is in its top half, below when in its bottom half.
348
+ const rect = e.currentTarget.getBoundingClientRect()
349
+ const aboveHalf = e.clientY < rect.top + rect.height / 2
350
+ setDropAt(aboveHalf ? idx : idx + 1)
351
+ }
352
+
353
+ const onRowDrop = (e: React.DragEvent<HTMLElement>): void => {
354
+ if (!reorderable || disabled || dragId === null || dropAt === null) {
355
+ setDragId(null); setDropAt(null); return
356
+ }
357
+ e.preventDefault()
358
+ setRows(prev => {
359
+ const fromIdx = prev.findIndex(r => r.id === dragId)
360
+ if (fromIdx < 0) return prev
361
+ return reorderRows(prev, fromIdx, dropAt)
362
+ })
363
+ setDragId(null); setDropAt(null)
364
+ }
365
+
366
+ const onRowDragEnd = (): void => {
367
+ setDragId(null); setDropAt(null)
368
+ }
369
+
370
+ // ── Inner-field live re-resolve (Plan #14 v1.1) ─────────────
371
+ // Inner Repeater inputs are uncontrolled (so reorder/clone preserves
372
+ // typed values). To make `Field.live()` work on them, we delegate
373
+ // change/blur events at the container level: the dotted-path field
374
+ // name on `target.name` is enough to find the field meta and decide
375
+ // whether to fire. `triggerLive` then snapshots the form's full
376
+ // FormData and POSTs to the partial-resolve endpoint — see
377
+ // FormStateContext.
378
+ //
379
+ // React-controlled primitives that update via callbacks (Switch /
380
+ // Slider / Base UI Select / etc.) don't bubble native input events
381
+ // here. Each of those renderers calls `fs.triggerLive(value)`
382
+ // explicitly to compensate (Plan #14 v1.2). Native inputs
383
+ // (text/number/email/textarea/range/date/checkbox/radio) keep
384
+ // bubbling through this delegate as before.
385
+ const formState = useFormState()
386
+ const fireLive = (name: string, value: string, eventKind: 'change' | 'blur'): void => {
387
+ if (!formState) return
388
+ if (!name.includes('.')) return // top-level fields handle their own live trigger
389
+ const fieldMeta = findFieldMeta(formState.formMeta, name)
390
+ const liveCfg = fieldMeta?.['live']
391
+ const hasJs = (fieldMeta as { afterStateUpdatedJs?: string } | undefined)?.afterStateUpdatedJs !== undefined
392
+ if (!liveCfg && !hasJs) return
393
+ if (liveCfg) {
394
+ const onBlurMode = typeof liveCfg === 'object' && liveCfg !== null
395
+ && (liveCfg as { onBlur?: boolean }).onBlur === true
396
+ if (eventKind === 'change' && onBlurMode) return
397
+ if (eventKind === 'blur' && !onBlurMode) return
398
+ } else {
399
+ // JS-only handlers always fire immediately on change.
400
+ if (eventKind === 'blur') return
401
+ }
402
+ formState.triggerLive(name, value)
403
+ }
404
+ const onContainerChange = (e: React.ChangeEvent<HTMLDivElement>): void => {
405
+ const t = e.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
406
+ if (!t.name) return
407
+ fireLive(t.name, t.value, 'change')
408
+ }
409
+ const onContainerBlur = (e: React.FocusEvent<HTMLDivElement>): void => {
410
+ const t = e.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
411
+ if (!t.name) return
412
+ fireLive(t.name, t.value, 'blur')
413
+ }
414
+
415
+ const toggleCollapsed = (id: string): void => {
416
+ if (accordion) {
417
+ // Click the open row to collapse all; click any other row to swap.
418
+ // No "two rows open" state is reachable.
419
+ const next = accordionOpenId === id ? null : id
420
+ setAccordionOpenId(next)
421
+ writeAccordionToStorage(formId, name, next)
422
+ return
423
+ }
424
+ setCollapsed(prev => {
425
+ const nextValue = !prev[id]
426
+ writeCollapsedToStorage(formId, name, id, nextValue)
427
+ return { ...prev, [id]: nextValue }
428
+ })
429
+ }
430
+
431
+ // Visibility computed each render — hidden rows still occupy slots in
432
+ // `rows` (so values round-trip + reorder-around math stays simple), but
433
+ // they don't count for the user-facing empty state, drop indicator, or
434
+ // first/last-visible disable on Up/Down buttons.
435
+ const hasVisibleRow = rows.some(r => !r.hidden)
436
+ const firstVisibleIdx = rows.findIndex(r => !r.hidden)
437
+ const lastVisibleIdx = (() => {
438
+ for (let i = rows.length - 1; i >= 0; i--) if (!rows[i]?.hidden) return i
439
+ return -1
440
+ })()
441
+
442
+ if (tableMode && tableColumns) {
443
+ // Table mode renders rows as `<tr>` with the inner schema's fields
444
+ // as `<td>` cells. The reorder grip + extraActions + clone + delete
445
+ // strip lives in a final actions column (only mounted when any of
446
+ // those are configured). Hidden rows render with `display:none` on
447
+ // `<tr>` so values still round-trip on submit. Drop indicator is
448
+ // suppressed — a horizontal accent across `<td>` cells looks broken;
449
+ // button reorder + drag itself still move rows.
450
+ // Actions cell is always present in v1 — delete is implicit on every
451
+ // Repeater row, and reorder/clone/extraActions land here too. When
452
+ // every action happens to be disabled (e.g. atMin && no reorderable
453
+ // && no clone), the cell still renders for column-count consistency.
454
+ return (
455
+ <RepeaterTableLayout
456
+ rows={rows}
457
+ name={name}
458
+ formId={formId}
459
+ disabled={disabled}
460
+ columns={tableColumns}
461
+ addLabel={addLabel}
462
+ buttons={buttons}
463
+ atMin={atMin}
464
+ atMax={atMax}
465
+ reorderable={reorderable}
466
+ cloneable={cloneable}
467
+ firstVisibleIdx={firstVisibleIdx}
468
+ lastVisibleIdx={lastVisibleIdx}
469
+ hasVisibleRow={hasVisibleRow}
470
+ dragId={dragId}
471
+ onAdd={addRow}
472
+ onMoveUp={(id) => moveRow(id, -1)}
473
+ onMoveDown={(id) => moveRow(id, 1)}
474
+ onClone={cloneRow}
475
+ onRemove={removeRow}
476
+ onContainerChange={onContainerChange}
477
+ onContainerBlur={onContainerBlur}
478
+ onRowDragStart={onRowDragStart}
479
+ onRowDragOver={onRowDragOver}
480
+ onRowDrop={onRowDrop}
481
+ onRowDragEnd={onRowDragEnd}
482
+ />
483
+ )
484
+ }
485
+
486
+ // In grid mode the rows themselves are grid items — wrap them in a
487
+ // CSS grid; otherwise stack vertically. The empty state and Add
488
+ // button are rendered as siblings so they don't get pulled into the
489
+ // grid (Add stays at the natural bottom; empty state spans full).
490
+ return (
491
+ <div
492
+ className="flex flex-col gap-3"
493
+ style={gridContainer.wrapperStyle}
494
+ onChange={onContainerChange}
495
+ onBlur={onContainerBlur}
496
+ >
497
+ {!hasVisibleRow && (
498
+ <div className="rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground">
499
+ No items yet. Click {addLabel} to start.
500
+ </div>
501
+ )}
502
+
503
+ {gridContainer.styleBlock}
504
+ <div
505
+ className={gridContainer.className}
506
+ style={gridContainer.style}
507
+ >
508
+ {rows.map((row, i) => (
509
+ <React.Fragment key={row.id}>
510
+ {!row.hidden && dropAt === i && !gridContainer.hasGrid && <DropIndicator />}
511
+ <RepeaterRow
512
+ row={row}
513
+ index={i}
514
+ isFirstVisible={i === firstVisibleIdx}
515
+ isLastVisible={i === lastVisibleIdx}
516
+ name={name}
517
+ disabled={disabled}
518
+ collapsible={collapsible}
519
+ isCollapsed={collapsible && (
520
+ accordion
521
+ ? accordionOpenId !== row.id
522
+ : (collapsed[row.id] ?? false)
523
+ )}
524
+ reorderable={reorderable}
525
+ cloneable={cloneable}
526
+ simple={simple}
527
+ atMin={atMin}
528
+ atMax={atMax}
529
+ columns={columns}
530
+ buttons={buttons}
531
+ isDragging={dragId === row.id}
532
+ rowPath={`${name}.${i}`}
533
+ onMoveUp={() => moveRow(row.id, -1)}
534
+ onMoveDown={() => moveRow(row.id, 1)}
535
+ onClone={() => cloneRow(row.id)}
536
+ onRemove={() => removeRow(row.id)}
537
+ onToggleCollapse={() => toggleCollapsed(row.id)}
538
+ onDragStart={onRowDragStart(row.id)}
539
+ onDragOver={onRowDragOver(i)}
540
+ onDrop={onRowDrop}
541
+ onDragEnd={onRowDragEnd}
542
+ />
543
+ </React.Fragment>
544
+ ))}
545
+ {dropAt === rows.length && !gridContainer.hasGrid && <DropIndicator />}
546
+ </div>
547
+
548
+ <AddRowButton
549
+ label={addLabel}
550
+ buttons={buttons}
551
+ disabled={disabled || atMax}
552
+ onClick={addRow}
553
+ />
554
+ </div>
555
+ )
556
+ }
557
+
558
+ /**
559
+ * Bottom Add button — outline shadcn `<Button>`. Reads the customizer
560
+ * (`addAction(RowButton.make()…)`) for icon + tooltip overrides; label
561
+ * is already pre-resolved upstream so the legacy `addActionLabel()` setter
562
+ * keeps working. Color override is intentionally ignored on the Add
563
+ * button to preserve the outline-button visual identity (icon-color
564
+ * tweaks would clash with the shadcn variant); use `Action.color()` on
565
+ * a custom header action if you need a different chrome there.
566
+ */
567
+ function AddRowButton({
568
+ label,
569
+ buttons,
570
+ disabled,
571
+ onClick,
572
+ }: {
573
+ label: string
574
+ buttons: RowButtonsMeta | undefined
575
+ disabled: boolean
576
+ onClick: () => void
577
+ }): React.ReactElement {
578
+ const { Icon, tooltip } = resolveRowChrome(
579
+ { Icon: PlusIcon, label, tooltip: '', colorClass: '' },
580
+ buttons?.add,
581
+ )
582
+ return (
583
+ <Button
584
+ type="button"
585
+ variant="outline"
586
+ size="sm"
587
+ onClick={onClick}
588
+ disabled={disabled}
589
+ title={tooltip || undefined}
590
+ className="self-start"
591
+ >
592
+ <Icon className="size-4" />
593
+ {label}
594
+ </Button>
595
+ )
596
+ }
597
+
598
+ function RepeaterRow({
599
+ row, index, isFirstVisible, isLastVisible, name, disabled,
600
+ collapsible, isCollapsed, reorderable, cloneable, simple, atMin, atMax, columns,
601
+ buttons,
602
+ isDragging,
603
+ rowPath,
604
+ onMoveUp, onMoveDown, onClone, onRemove, onToggleCollapse,
605
+ onDragStart, onDragOver, onDrop, onDragEnd,
606
+ }: {
607
+ row: RowState
608
+ index: number
609
+ isFirstVisible: boolean
610
+ isLastVisible: boolean
611
+ name: string
612
+ disabled: boolean
613
+ collapsible: boolean
614
+ isCollapsed: boolean
615
+ reorderable: boolean
616
+ cloneable: boolean
617
+ simple: boolean
618
+ atMin: boolean
619
+ atMax: boolean
620
+ columns: number
621
+ buttons: RowButtonsMeta | undefined
622
+ isDragging: boolean
623
+ rowPath: string
624
+ onMoveUp: () => void
625
+ onMoveDown: () => void
626
+ onClone: () => void
627
+ onRemove: () => void
628
+ onToggleCollapse: () => void
629
+ onDragStart: (e: React.DragEvent<HTMLElement>) => void
630
+ onDragOver: (e: React.DragEvent<HTMLElement>) => void
631
+ onDrop: (e: React.DragEvent<HTMLElement>) => void
632
+ onDragEnd: (e: React.DragEvent<HTMLElement>) => void
633
+ }): React.ReactElement {
634
+ const prefix = `${name}.${index}`
635
+ const namespaced = useMemo(
636
+ () => row.children.map(c => prefixFieldNames(c, prefix)),
637
+ [row.children, prefix],
638
+ )
639
+ const headerLabel = row.itemLabel ?? `Item ${index + 1}`
640
+
641
+ // Hidden rows: render only the inputs (and __id) inside a display:none
642
+ // wrapper so their values round-trip through FormData on submit. No
643
+ // chrome, no drag wiring, no labels — `itemHidden` is purely UX.
644
+ if (row.hidden) {
645
+ return (
646
+ <div style={{ display: 'none' }} data-pilotiq-repeater-row="hidden">
647
+ <input type="hidden" name={`${prefix}.__id`} value={row.id} readOnly />
648
+ <SchemaRenderer elements={namespaced} />
649
+ </div>
650
+ )
651
+ }
652
+
653
+ // Per-row capability gates — `itemCan*(rule)` server-resolved.
654
+ // `canDelete / canClone / canReorder === false` removes the matching
655
+ // button on this row; absent flags fall through to the global defaults.
656
+ const canDelete = row.canDelete !== false
657
+ const canClone = row.canClone !== false
658
+ const canReorder = row.canReorder !== false
659
+
660
+ // Native HTML5 DnD only fires `dragstart` from elements with `draggable=true`.
661
+ // We attach it at the row container so the grip handle (and the empty
662
+ // header gutter, for forgiving aim) both initiate a drag. The handle's
663
+ // visual cursor + aria-label tell users where the affordance lives.
664
+ // Pinned rows (`canReorder === false`) lose drag-start; other rows can
665
+ // still drop next to them — see itemCanReorder docstring.
666
+ const dragProps = reorderable && !disabled && canReorder
667
+ ? {
668
+ draggable: true as const,
669
+ onDragStart,
670
+ onDragOver,
671
+ onDrop,
672
+ onDragEnd,
673
+ }
674
+ : {}
675
+
676
+ // Simple-mode: flatten the row to one input + inline action strip — no
677
+ // header, no border, no collapse (a single field has nothing to collapse).
678
+ // Reorder + delete still work; clone + extraActions are intentionally
679
+ // dropped since there's no "row identity" worth duplicating in the flat
680
+ // shape, and per-row buttons read cluttered next to a one-input row.
681
+ // FieldShell renders a label by default — for simple rows we want flush
682
+ // inputs (Filament's posture too), so we suppress the inner label by
683
+ // wrapping in a class that hides the FieldShell's label slot.
684
+ if (simple) {
685
+ return (
686
+ <div
687
+ className={`flex items-center gap-2 transition-opacity ${isDragging ? 'opacity-50' : ''}`}
688
+ data-pilotiq-repeater-row="simple"
689
+ {...dragProps}
690
+ >
691
+ <input type="hidden" name={`${prefix}.__id`} value={row.id} readOnly />
692
+ {reorderable && canReorder && <ReorderGrip disabled={disabled} buttons={buttons} />}
693
+ <div className="flex-1 [&_label]:sr-only">
694
+ <SchemaRenderer elements={namespaced} />
695
+ </div>
696
+ {reorderable && canReorder && (
697
+ <>
698
+ <RowChromeIconButton
699
+ defaults={DEFAULT_MOVE_UP}
700
+ override={buttons?.moveUp}
701
+ disabled={disabled || isFirstVisible}
702
+ onClick={onMoveUp}
703
+ />
704
+ <RowChromeIconButton
705
+ defaults={DEFAULT_MOVE_DOWN}
706
+ override={buttons?.moveDown}
707
+ disabled={disabled || isLastVisible}
708
+ onClick={onMoveDown}
709
+ />
710
+ </>
711
+ )}
712
+ {canDelete && (
713
+ <RowChromeIconButton
714
+ defaults={DEFAULT_DELETE}
715
+ override={buttons?.delete}
716
+ disabled={disabled || atMin}
717
+ onClick={onRemove}
718
+ />
719
+ )}
720
+ </div>
721
+ )
722
+ }
723
+
724
+ return (
725
+ <div
726
+ className={`rounded-md border bg-card transition-opacity ${isDragging ? 'opacity-50' : ''}`}
727
+ data-pilotiq-repeater-row=""
728
+ {...dragProps}
729
+ >
730
+ <div className="flex items-center gap-2 border-b px-3 py-2">
731
+ {reorderable && canReorder && <ReorderGrip disabled={disabled} buttons={buttons} />}
732
+ {collapsible && (
733
+ <CollapseChevron
734
+ isCollapsed={isCollapsed}
735
+ disabled={disabled}
736
+ buttons={buttons}
737
+ onToggle={onToggleCollapse}
738
+ />
739
+ )}
740
+ <span className="flex-1 truncate text-sm font-medium">{headerLabel}</span>
741
+ <input type="hidden" name={`${prefix}.__id`} value={row.id} readOnly />
742
+ {reorderable && canReorder && (
743
+ <>
744
+ <RowChromeIconButton
745
+ defaults={DEFAULT_MOVE_UP}
746
+ override={buttons?.moveUp}
747
+ disabled={disabled || isFirstVisible}
748
+ onClick={onMoveUp}
749
+ />
750
+ <RowChromeIconButton
751
+ defaults={DEFAULT_MOVE_DOWN}
752
+ override={buttons?.moveDown}
753
+ disabled={disabled || isLastVisible}
754
+ onClick={onMoveDown}
755
+ />
756
+ </>
757
+ )}
758
+ {row.extraActions && row.extraActions.length > 0 && (
759
+ <ExtraActionStrip
760
+ actions={row.extraActions}
761
+ rowPath={rowPath}
762
+ disabled={disabled}
763
+ />
764
+ )}
765
+ {cloneable && canClone && (
766
+ <RowChromeIconButton
767
+ defaults={DEFAULT_CLONE}
768
+ override={buttons?.clone}
769
+ disabled={disabled || atMax}
770
+ onClick={onClone}
771
+ />
772
+ )}
773
+ {canDelete && (
774
+ <RowChromeIconButton
775
+ defaults={DEFAULT_DELETE}
776
+ override={buttons?.delete}
777
+ disabled={disabled || atMin}
778
+ onClick={onRemove}
779
+ />
780
+ )}
781
+ </div>
782
+
783
+ {/* Body — kept mounted (display:none on collapse) so uncontrolled
784
+ input values persist across collapse toggles. */}
785
+ <div
786
+ className="p-3"
787
+ style={isCollapsed ? { display: 'none' } : undefined}
788
+ >
789
+ {columns > 1
790
+ ? (
791
+ <div
792
+ className="grid gap-3"
793
+ style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}
794
+ >
795
+ <SchemaRenderer elements={namespaced} />
796
+ </div>
797
+ )
798
+ : <SchemaRenderer elements={namespaced} />}
799
+ </div>
800
+ </div>
801
+ )
802
+ }
803
+
804
+ /**
805
+ * Per-row extraItemActions strip. Each button dispatches its handler
806
+ * action by snapshotting the parent `<form>` (so the server's
807
+ * `coerceFormValues` sees the row's submitted fields), then POSTs to the
808
+ * action's `dispatchUrl` with `_rowPath="<fieldName>.<index>"` in the
809
+ * body — the server uses that path to navigate into the field's row
810
+ * array and stamp `ctx.row = { index, id, values, fieldName }` on the
811
+ * handler context.
812
+ *
813
+ * v1 — handler-style only. `href` / `method` / modal-form actions inside
814
+ * `extraItemActions` are accepted by the type system but render here as
815
+ * no-op buttons (they have neither a `dispatchUrl` nor a row-aware fetch
816
+ * branch). Filament parity for those modes can land in a follow-up.
817
+ *
818
+ * Disabled actions render greyed out + skip dispatch (matches the
819
+ * `meta.disabled` stamp from `resolveExtraItemActions`).
820
+ */
821
+ export function ExtraActionStrip({
822
+ actions, rowPath, disabled,
823
+ }: {
824
+ actions: ElementMeta[]
825
+ rowPath: string
826
+ disabled: boolean
827
+ }): React.ReactElement {
828
+ const navigate = useNavigate()
829
+ const { notify } = useToast()
830
+
831
+ const onClick = (action: ElementMeta) => async (e: React.MouseEvent<HTMLButtonElement>): Promise<void> => {
832
+ if (disabled || action['disabled']) return
833
+ const dispatchUrl = action['dispatchUrl'] as string | undefined
834
+ if (!dispatchUrl) return
835
+ const form = e.currentTarget.closest('form')
836
+ const snapshot = form ? new FormData(form) : new FormData()
837
+ await dispatchHandlerAction(
838
+ dispatchUrl,
839
+ [],
840
+ navigate,
841
+ notify,
842
+ { _rowPath: rowPath },
843
+ snapshot,
844
+ )
845
+ }
846
+
847
+ return (
848
+ <>
849
+ {actions.map((a, i) => {
850
+ const label = String(a['label'] ?? a['name'] ?? '')
851
+ const tooltip = (a['tooltip'] as string | undefined) ?? label
852
+ const isDisabled = disabled || Boolean(a['disabled'])
853
+ const destructive = Boolean(a['destructive'])
854
+ return (
855
+ <button
856
+ key={i}
857
+ type="button"
858
+ onClick={onClick(a)}
859
+ disabled={isDisabled}
860
+ aria-label={label}
861
+ title={tooltip}
862
+ data-action-name={a['name']}
863
+ className={`text-muted-foreground hover:text-foreground disabled:opacity-30 ${destructive ? 'hover:text-destructive' : ''}`.trim()}
864
+ >
865
+ <span className="text-xs font-medium">{label}</span>
866
+ </button>
867
+ )
868
+ })}
869
+ </>
870
+ )
871
+ }
872
+
873
+ /**
874
+ * 2px-tall horizontal accent line rendered between rows when the user
875
+ * drags a row over a valid drop boundary. Uses `pointer-events: none`
876
+ * so the underlying row's `dragover` keeps firing — without this, the
877
+ * indicator would steal events and the drop slot would flicker.
878
+ */
879
+ function DropIndicator(): React.ReactElement {
880
+ return (
881
+ <div
882
+ aria-hidden="true"
883
+ className="pointer-events-none h-0.5 rounded-full bg-primary"
884
+ />
885
+ )
886
+ }
887
+
888
+ /**
889
+ * Table-mode layout. Renders rows as `<tr>` and inner schema fields as
890
+ * `<td>` cells, with the supplied column headers in `<thead>`.
891
+ *
892
+ * Cells call `prefixFieldNames` to emit row-scoped flat dotted names
893
+ * (`items.0.name`, etc.) — same wire shape as the card layout, so
894
+ * `coerceFormValues` re-groups identically. The first inner FieldShell
895
+ * label is suppressed via a parent `[&_label]:sr-only` since the
896
+ * column header carries the labelling.
897
+ *
898
+ * The actions column hosts grip / Up / Down / clone / extraActions /
899
+ * delete affordances. We render it unconditionally so column count
900
+ * stays stable across rows even when individual buttons disable.
901
+ */
902
+ function RepeaterTableLayout({
903
+ rows, name, formId: _formId, disabled, columns, addLabel, buttons, atMin, atMax,
904
+ reorderable, cloneable,
905
+ firstVisibleIdx, lastVisibleIdx, hasVisibleRow,
906
+ dragId,
907
+ onAdd, onMoveUp, onMoveDown, onClone, onRemove,
908
+ onContainerChange, onContainerBlur,
909
+ onRowDragStart, onRowDragOver, onRowDrop, onRowDragEnd,
910
+ }: {
911
+ rows: RowState[]
912
+ name: string
913
+ formId: string
914
+ disabled: boolean
915
+ columns: TableColumnShape[]
916
+ addLabel: string
917
+ buttons: RowButtonsMeta | undefined
918
+ atMin: boolean
919
+ atMax: boolean
920
+ reorderable: boolean
921
+ cloneable: boolean
922
+ firstVisibleIdx: number
923
+ lastVisibleIdx: number
924
+ hasVisibleRow: boolean
925
+ dragId: string | null
926
+ onAdd: () => void
927
+ onMoveUp: (id: string) => void
928
+ onMoveDown: (id: string) => void
929
+ onClone: (id: string) => void
930
+ onRemove: (id: string) => void
931
+ onContainerChange: (e: React.ChangeEvent<HTMLDivElement>) => void
932
+ onContainerBlur: (e: React.FocusEvent<HTMLDivElement>) => void
933
+ onRowDragStart: (id: string) => (e: React.DragEvent<HTMLElement>) => void
934
+ onRowDragOver: (idx: number) => (e: React.DragEvent<HTMLElement>) => void
935
+ onRowDrop: (e: React.DragEvent<HTMLElement>) => void
936
+ onRowDragEnd: (e: React.DragEvent<HTMLElement>) => void
937
+ }): React.ReactElement {
938
+ // The container div carries the change/blur delegates so live() events
939
+ // bubble identically to the card path. `[&_label]:sr-only` hides the
940
+ // FieldShell label across every cell (column header carries it).
941
+ return (
942
+ <div
943
+ className="flex flex-col gap-3"
944
+ onChange={onContainerChange}
945
+ onBlur={onContainerBlur}
946
+ >
947
+ {!hasVisibleRow && (
948
+ <div className="rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground">
949
+ No items yet. Click {addLabel} to start.
950
+ </div>
951
+ )}
952
+
953
+ {hasVisibleRow && (
954
+ <div className="overflow-x-auto rounded-md border [&_label]:sr-only">
955
+ <table className="w-full border-collapse text-sm">
956
+ <colgroup>
957
+ {columns.map((c, i) => (
958
+ <col key={i} style={c.width ? { width: c.width } : undefined} />
959
+ ))}
960
+ <col />
961
+ </colgroup>
962
+ <thead className="bg-muted/40">
963
+ <tr>
964
+ {columns.map((c, i) => (
965
+ <th
966
+ key={i}
967
+ scope="col"
968
+ className={`px-3 py-2 text-xs font-medium text-muted-foreground ${alignClass(c.alignment)}`}
969
+ >
970
+ {c.label}
971
+ {c.required && <span className="ml-0.5 text-destructive">*</span>}
972
+ </th>
973
+ ))}
974
+ <th scope="col" className="w-px" aria-label="Actions" />
975
+ </tr>
976
+ </thead>
977
+ <tbody>
978
+ {rows.map((row, i) => (
979
+ <RepeaterTableRow
980
+ key={row.id}
981
+ row={row}
982
+ index={i}
983
+ name={name}
984
+ disabled={disabled}
985
+ columns={columns}
986
+ reorderable={reorderable}
987
+ cloneable={cloneable}
988
+ buttons={buttons}
989
+ isFirstVisible={i === firstVisibleIdx}
990
+ isLastVisible={i === lastVisibleIdx}
991
+ atMin={atMin}
992
+ atMax={atMax}
993
+ isDragging={dragId === row.id}
994
+ rowPath={`${name}.${i}`}
995
+ onMoveUp={() => onMoveUp(row.id)}
996
+ onMoveDown={() => onMoveDown(row.id)}
997
+ onClone={() => onClone(row.id)}
998
+ onRemove={() => onRemove(row.id)}
999
+ onDragStart={onRowDragStart(row.id)}
1000
+ onDragOver={onRowDragOver(i)}
1001
+ onDrop={onRowDrop}
1002
+ onDragEnd={onRowDragEnd}
1003
+ />
1004
+ ))}
1005
+ </tbody>
1006
+ </table>
1007
+ </div>
1008
+ )}
1009
+
1010
+ <AddRowButton
1011
+ label={addLabel}
1012
+ buttons={buttons}
1013
+ disabled={disabled || atMax}
1014
+ onClick={onAdd}
1015
+ />
1016
+ </div>
1017
+ )
1018
+ }
1019
+
1020
+ function alignClass(a: 'left' | 'center' | 'right' | undefined): string {
1021
+ if (a === 'right') return 'text-right'
1022
+ if (a === 'center') return 'text-center'
1023
+ return 'text-left'
1024
+ }
1025
+
1026
+ function RepeaterTableRow({
1027
+ row, index, name, disabled, columns, reorderable, cloneable, buttons,
1028
+ isFirstVisible, isLastVisible, atMin, atMax, isDragging, rowPath,
1029
+ onMoveUp, onMoveDown, onClone, onRemove,
1030
+ onDragStart, onDragOver, onDrop, onDragEnd,
1031
+ }: {
1032
+ row: RowState
1033
+ index: number
1034
+ name: string
1035
+ disabled: boolean
1036
+ columns: TableColumnShape[]
1037
+ reorderable: boolean
1038
+ cloneable: boolean
1039
+ buttons: RowButtonsMeta | undefined
1040
+ isFirstVisible: boolean
1041
+ isLastVisible: boolean
1042
+ atMin: boolean
1043
+ atMax: boolean
1044
+ isDragging: boolean
1045
+ rowPath: string
1046
+ onMoveUp: () => void
1047
+ onMoveDown: () => void
1048
+ onClone: () => void
1049
+ onRemove: () => void
1050
+ onDragStart: (e: React.DragEvent<HTMLElement>) => void
1051
+ onDragOver: (e: React.DragEvent<HTMLElement>) => void
1052
+ onDrop: (e: React.DragEvent<HTMLElement>) => void
1053
+ onDragEnd: (e: React.DragEvent<HTMLElement>) => void
1054
+ }): React.ReactElement {
1055
+ const prefix = `${name}.${index}`
1056
+ const namespaced = useMemo(
1057
+ () => row.children.map(c => prefixFieldNames(c, prefix)),
1058
+ [row.children, prefix],
1059
+ )
1060
+
1061
+ if (row.hidden) {
1062
+ // Render the hidden envelope as a single full-span cell so column
1063
+ // count stays valid; `display:none` ensures the row is invisible but
1064
+ // still in the form's submit. Using `<tr style="display:none">`
1065
+ // would warn under React strict-mode in Firefox; the wrapping cell
1066
+ // keeps the markup HTML-valid.
1067
+ return (
1068
+ <tr style={{ display: 'none' }} data-pilotiq-repeater-row="hidden">
1069
+ <td colSpan={columns.length + 1}>
1070
+ <input type="hidden" name={`${prefix}.__id`} value={row.id} readOnly />
1071
+ <SchemaRenderer elements={namespaced} />
1072
+ </td>
1073
+ </tr>
1074
+ )
1075
+ }
1076
+
1077
+ // Pair each column header (in order) with the corresponding inner
1078
+ // field meta. Extra fields beyond the column count fall through the
1079
+ // last cell as stacked items — a misconfiguration but better than
1080
+ // dropping them silently.
1081
+ const fieldsPerCell: ElementMeta[][] = columns.map((_c, i) =>
1082
+ i === columns.length - 1 ? namespaced.slice(i) : namespaced.slice(i, i + 1),
1083
+ )
1084
+
1085
+ // Per-row capability gates — see RepeaterRow for the contract.
1086
+ const canDelete = row.canDelete !== false
1087
+ const canClone = row.canClone !== false
1088
+ const canReorder = row.canReorder !== false
1089
+
1090
+ const dragProps = reorderable && !disabled && canReorder
1091
+ ? {
1092
+ draggable: true as const,
1093
+ onDragStart,
1094
+ onDragOver,
1095
+ onDrop,
1096
+ onDragEnd,
1097
+ }
1098
+ : {}
1099
+
1100
+ return (
1101
+ <tr
1102
+ className={`border-t align-top ${isDragging ? 'opacity-50' : ''}`}
1103
+ data-pilotiq-repeater-row=""
1104
+ {...dragProps}
1105
+ >
1106
+ <input type="hidden" name={`${prefix}.__id`} value={row.id} readOnly />
1107
+ {columns.map((c, i) => (
1108
+ <td key={i} className={`px-3 py-2 ${alignClass(c.alignment)}`}>
1109
+ <SchemaRenderer elements={fieldsPerCell[i] ?? []} />
1110
+ </td>
1111
+ ))}
1112
+ <td className="whitespace-nowrap px-3 py-2 text-right">
1113
+ <div className="inline-flex items-center gap-1">
1114
+ {reorderable && canReorder && (
1115
+ <>
1116
+ <ReorderGrip disabled={disabled} buttons={buttons} />
1117
+ <RowChromeIconButton
1118
+ defaults={DEFAULT_MOVE_UP}
1119
+ override={buttons?.moveUp}
1120
+ disabled={disabled || isFirstVisible}
1121
+ onClick={onMoveUp}
1122
+ />
1123
+ <RowChromeIconButton
1124
+ defaults={DEFAULT_MOVE_DOWN}
1125
+ override={buttons?.moveDown}
1126
+ disabled={disabled || isLastVisible}
1127
+ onClick={onMoveDown}
1128
+ />
1129
+ </>
1130
+ )}
1131
+ {row.extraActions && row.extraActions.length > 0 && (
1132
+ <ExtraActionStrip
1133
+ actions={row.extraActions}
1134
+ rowPath={rowPath}
1135
+ disabled={disabled}
1136
+ />
1137
+ )}
1138
+ {cloneable && canClone && (
1139
+ <RowChromeIconButton
1140
+ defaults={DEFAULT_CLONE}
1141
+ override={buttons?.clone}
1142
+ disabled={disabled || atMax}
1143
+ onClick={onClone}
1144
+ />
1145
+ )}
1146
+ {canDelete && (
1147
+ <RowChromeIconButton
1148
+ defaults={DEFAULT_DELETE}
1149
+ override={buttons?.delete}
1150
+ disabled={disabled || atMin}
1151
+ onClick={onRemove}
1152
+ />
1153
+ )}
1154
+ </div>
1155
+ </td>
1156
+ </tr>
1157
+ )
1158
+ }
1159
+
1160
+ interface RepeaterMetaShape {
1161
+ rows?: Array<{
1162
+ id: string
1163
+ children: ElementMeta[]
1164
+ itemLabel?: string
1165
+ hidden?: boolean
1166
+ extraActions?: ElementMeta[]
1167
+ canDelete?: false
1168
+ canClone?: false
1169
+ canReorder?: false
1170
+ }>
1171
+ template?: ElementMeta[]
1172
+ columns?: number
1173
+ minItems?: number
1174
+ maxItems?: number
1175
+ defaultItems?: number
1176
+ reorderable?: boolean
1177
+ collapsible?: boolean
1178
+ defaultCollapsed?: boolean
1179
+ accordion?: boolean
1180
+ cloneable?: boolean
1181
+ addActionLabel?: string
1182
+ simple?: boolean
1183
+ grid?: number
1184
+ table?: { columns: TableColumnShape[] }
1185
+ buttons?: RowButtonsMeta
1186
+ }
1187
+
1188
+ interface TableColumnShape {
1189
+ label: string
1190
+ alignment?: 'left' | 'center' | 'right'
1191
+ width?: string
1192
+ required?: boolean
1193
+ }
1194
+
1195
+ /**
1196
+ * Recursively prefix every Field meta's `name` with a row-scoped path.
1197
+ * Inner Repeaters get their own per-row prefixing so nested Repeater
1198
+ * row inputs land at `items.0.modifiers.1.name`.
1199
+ */
1200
+ function prefixFieldNames(el: ElementMeta, prefix: string): ElementMeta {
1201
+ if (el.type === 'field' && typeof el['name'] === 'string') {
1202
+ const innerName = el['name']
1203
+ const newName = `${prefix}.${innerName}`
1204
+ if (el['fieldType'] === 'repeater') {
1205
+ const m = el as ElementMeta & RepeaterMetaShape
1206
+ const rows = m.rows ?? []
1207
+ const tpl = m.template ?? []
1208
+ return {
1209
+ ...el,
1210
+ name: newName,
1211
+ rows: rows.map(r => ({
1212
+ ...r,
1213
+ children: r.children.map(c => prefixFieldNames(c, `${newName}.${rows.indexOf(r)}`)),
1214
+ })),
1215
+ template: tpl.map(c => prefixFieldNames(c, `${newName}.0`)),
1216
+ }
1217
+ }
1218
+ return { ...el, name: newName }
1219
+ }
1220
+ if (Array.isArray(el.children)) {
1221
+ return {
1222
+ ...el,
1223
+ children: (el.children as ElementMeta[]).map(c => prefixFieldNames(c, prefix)),
1224
+ }
1225
+ }
1226
+ return el
1227
+ }
1228
+
1229
+ let _rowSeqFallback = 0
1230
+ function generateRowId(): string {
1231
+ type CryptoLike = { randomUUID?: () => string }
1232
+ const c = (globalThis as { crypto?: CryptoLike }).crypto
1233
+ if (c?.randomUUID) return c.randomUUID()
1234
+ return `row-${Date.now()}-${++_rowSeqFallback}`
1235
+ }
1236
+
1237
+ function collapsedStorageKey(formId: string, name: string, rowId: string): string {
1238
+ return `pilotiq.repeater.${formId}.${name}.${rowId}`
1239
+ }
1240
+
1241
+ function initSeedCollapsed(
1242
+ rows: RowState[],
1243
+ formId: string,
1244
+ name: string,
1245
+ defaultValue: boolean,
1246
+ collapsible: boolean,
1247
+ ): Record<string, boolean> {
1248
+ if (!collapsible) return {}
1249
+ const out: Record<string, boolean> = {}
1250
+ for (const row of rows) {
1251
+ out[row.id] = readCollapsedFromStorage(formId, name, row.id, defaultValue)
1252
+ }
1253
+ return out
1254
+ }
1255
+
1256
+ function readCollapsedFromStorage(
1257
+ formId: string,
1258
+ name: string,
1259
+ rowId: string,
1260
+ defaultValue: boolean,
1261
+ ): boolean {
1262
+ if (typeof window === 'undefined') return defaultValue
1263
+ try {
1264
+ const raw = window.localStorage.getItem(collapsedStorageKey(formId, name, rowId))
1265
+ if (raw === null) return defaultValue
1266
+ return raw === 'true'
1267
+ } catch { return defaultValue }
1268
+ }
1269
+
1270
+ function writeCollapsedToStorage(
1271
+ formId: string,
1272
+ name: string,
1273
+ rowId: string,
1274
+ value: boolean,
1275
+ ): void {
1276
+ if (typeof window === 'undefined') return
1277
+ try {
1278
+ window.localStorage.setItem(collapsedStorageKey(formId, name, rowId), String(value))
1279
+ } catch { /* quota exceeded — fall back to in-memory only */ }
1280
+ }
1281
+
1282
+ function deleteCollapsedFromStorage(formId: string, name: string, rowId: string): void {
1283
+ if (typeof window === 'undefined') return
1284
+ try {
1285
+ window.localStorage.removeItem(collapsedStorageKey(formId, name, rowId))
1286
+ } catch { /* ignore */ }
1287
+ }
1288
+
1289
+ function accordionStorageKey(formId: string, name: string): string {
1290
+ return `pilotiq.repeater.${formId}.${name}.accordion`
1291
+ }
1292
+
1293
+ /**
1294
+ * Read the persisted accordion-open row id. Returns `undefined` when no
1295
+ * value is stored (so the caller can fall back to the default-open
1296
+ * heuristic). Returns `''` when the user explicitly closed every row —
1297
+ * the caller maps that to `null` openId.
1298
+ */
1299
+ function readAccordionFromStorage(formId: string, name: string): string | undefined {
1300
+ if (typeof window === 'undefined') return undefined
1301
+ try {
1302
+ const raw = window.localStorage.getItem(accordionStorageKey(formId, name))
1303
+ return raw === null ? undefined : raw
1304
+ } catch { return undefined }
1305
+ }
1306
+
1307
+ function writeAccordionToStorage(formId: string, name: string, openId: string | null): void {
1308
+ if (typeof window === 'undefined') return
1309
+ try {
1310
+ window.localStorage.setItem(accordionStorageKey(formId, name), openId ?? '')
1311
+ } catch { /* quota exceeded — fall back to in-memory only */ }
1312
+ }
1313
+