@lattice-php/lattice 0.1.0 → 0.3.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 (589) hide show
  1. package/README.md +3 -1
  2. package/dist/action/components/action-form.d.ts +24 -0
  3. package/dist/action/components/action-form.js +238 -0
  4. package/dist/action/components/action-form.js.map +1 -0
  5. package/dist/action/components/action-group.d.ts +1 -8
  6. package/dist/action/components/action-group.js +34 -64
  7. package/dist/action/components/action-group.js.map +1 -1
  8. package/dist/action/components/action-menu-context.d.ts +6 -0
  9. package/dist/action/components/action-menu-context.js +18 -0
  10. package/dist/action/components/action-menu-context.js.map +1 -0
  11. package/dist/action/components/action.d.ts +1 -24
  12. package/dist/action/components/action.js +73 -51
  13. package/dist/action/components/action.js.map +1 -1
  14. package/dist/action/index.d.ts +1 -1
  15. package/dist/action/index.js.map +1 -1
  16. package/dist/appearance/index.js +7 -2
  17. package/dist/appearance/index.js.map +1 -1
  18. package/dist/chat/components/chat-box.d.ts +3 -0
  19. package/dist/chat/components/chat-box.js +53 -0
  20. package/dist/chat/components/chat-box.js.map +1 -0
  21. package/dist/chat/components/message-list.d.ts +5 -0
  22. package/dist/chat/components/message-list.js +22 -0
  23. package/dist/chat/components/message-list.js.map +1 -0
  24. package/dist/chat/components/message.d.ts +5 -0
  25. package/dist/chat/components/message.js +20 -0
  26. package/dist/chat/components/message.js.map +1 -0
  27. package/dist/chat/components/prompt-input.d.ts +8 -0
  28. package/dist/chat/components/prompt-input.js +49 -0
  29. package/dist/chat/components/prompt-input.js.map +1 -0
  30. package/dist/chat/index.d.ts +1 -0
  31. package/dist/chat/index.js +15 -0
  32. package/dist/chat/index.js.map +1 -0
  33. package/dist/chat/parts/text.d.ts +3 -0
  34. package/dist/chat/parts/text.js +12 -0
  35. package/dist/chat/parts/text.js.map +1 -0
  36. package/dist/chat/parts/tool-call.d.ts +3 -0
  37. package/dist/chat/parts/tool-call.js +20 -0
  38. package/dist/chat/parts/tool-call.js.map +1 -0
  39. package/dist/chat/transport.d.ts +2 -0
  40. package/dist/chat/transport.js +47 -0
  41. package/dist/chat/transport.js.map +1 -0
  42. package/dist/chat/types.d.ts +39 -0
  43. package/dist/chat/use-chat.d.ts +15 -0
  44. package/dist/chat/use-chat.js +161 -0
  45. package/dist/chat/use-chat.js.map +1 -0
  46. package/dist/core/api.d.ts +18 -0
  47. package/dist/core/api.js +51 -0
  48. package/dist/core/api.js.map +1 -0
  49. package/dist/core/collapsed-context.d.ts +2 -0
  50. package/dist/core/collapsed-context.js +10 -0
  51. package/dist/core/collapsed-context.js.map +1 -0
  52. package/dist/core/column-sizing.d.ts +17 -0
  53. package/dist/core/column-sizing.js +61 -0
  54. package/dist/core/column-sizing.js.map +1 -0
  55. package/dist/core/components/badge.d.ts +1 -8
  56. package/dist/core/components/badge.js +2 -3
  57. package/dist/core/components/badge.js.map +1 -1
  58. package/dist/core/components/button.d.ts +5 -13
  59. package/dist/core/components/button.js +10 -9
  60. package/dist/core/components/button.js.map +1 -1
  61. package/dist/core/components/card.d.ts +1 -9
  62. package/dist/core/components/card.js +1 -3
  63. package/dist/core/components/card.js.map +1 -1
  64. package/dist/core/components/chart.d.ts +3 -0
  65. package/dist/core/components/chart.js +175 -0
  66. package/dist/core/components/chart.js.map +1 -0
  67. package/dist/{form/components/base → core/components}/checkbox.js +7 -4
  68. package/dist/core/components/checkbox.js.map +1 -0
  69. package/dist/core/components/combobox.d.ts +33 -0
  70. package/dist/core/components/combobox.js +99 -0
  71. package/dist/core/components/combobox.js.map +1 -0
  72. package/dist/core/components/confirm-dialog.d.ts +2 -3
  73. package/dist/core/components/confirm-dialog.js +17 -17
  74. package/dist/core/components/confirm-dialog.js.map +1 -1
  75. package/dist/core/components/control.d.ts +13 -0
  76. package/dist/core/components/control.js +27 -0
  77. package/dist/core/components/control.js.map +1 -0
  78. package/dist/core/components/dialog.d.ts +19 -0
  79. package/dist/core/components/dialog.js +75 -0
  80. package/dist/core/components/dialog.js.map +1 -0
  81. package/dist/core/components/dropdown-menu.d.ts +14 -0
  82. package/dist/core/components/dropdown-menu.js +42 -0
  83. package/dist/core/components/dropdown-menu.js.map +1 -0
  84. package/dist/core/components/floating-panel.d.ts +3 -0
  85. package/dist/core/components/floating-panel.js +65 -0
  86. package/dist/core/components/floating-panel.js.map +1 -0
  87. package/dist/core/components/fragment.d.ts +1 -10
  88. package/dist/core/components/fragment.js +29 -18
  89. package/dist/core/components/fragment.js.map +1 -1
  90. package/dist/core/components/grid.d.ts +1 -8
  91. package/dist/core/components/grid.js +1 -2
  92. package/dist/core/components/grid.js.map +1 -1
  93. package/dist/core/components/heading.d.ts +1 -9
  94. package/dist/core/components/heading.js +2 -3
  95. package/dist/core/components/heading.js.map +1 -1
  96. package/dist/core/components/icon.d.ts +3 -0
  97. package/dist/core/components/icon.js +31 -0
  98. package/dist/core/components/icon.js.map +1 -0
  99. package/dist/core/components/index.d.ts +1 -1
  100. package/dist/core/components/index.js +12 -1
  101. package/dist/core/components/index.js.map +1 -1
  102. package/dist/core/components/info-tooltip.d.ts +3 -0
  103. package/dist/core/components/info-tooltip.js +26 -0
  104. package/dist/core/components/info-tooltip.js.map +1 -0
  105. package/dist/core/components/link.d.ts +1 -12
  106. package/dist/core/components/link.js +12 -11
  107. package/dist/core/components/link.js.map +1 -1
  108. package/dist/core/components/modal.d.ts +1 -11
  109. package/dist/core/components/modal.js +16 -42
  110. package/dist/core/components/modal.js.map +1 -1
  111. package/dist/core/components/popover.d.ts +8 -0
  112. package/dist/core/components/popover.js +37 -0
  113. package/dist/core/components/popover.js.map +1 -0
  114. package/dist/core/components/raw-block.d.ts +3 -0
  115. package/dist/core/components/raw-block.js +10 -0
  116. package/dist/core/components/raw-block.js.map +1 -0
  117. package/dist/core/components/section.d.ts +3 -0
  118. package/dist/core/components/section.js +75 -0
  119. package/dist/core/components/section.js.map +1 -0
  120. package/dist/core/components/segmented-control.d.ts +1 -14
  121. package/dist/core/components/segmented-control.js +4 -7
  122. package/dist/core/components/segmented-control.js.map +1 -1
  123. package/dist/core/components/segmented-pills.d.ts +4 -2
  124. package/dist/core/components/segmented-pills.js +10 -1
  125. package/dist/core/components/segmented-pills.js.map +1 -1
  126. package/dist/core/components/skeleton.d.ts +3 -0
  127. package/dist/core/components/skeleton.js +16 -0
  128. package/dist/core/components/skeleton.js.map +1 -0
  129. package/dist/core/components/spinner.js +8 -4
  130. package/dist/core/components/spinner.js.map +1 -1
  131. package/dist/core/components/stack.d.ts +1 -11
  132. package/dist/core/components/stack.js +24 -13
  133. package/dist/core/components/stack.js.map +1 -1
  134. package/dist/core/components/tabs.d.ts +1 -19
  135. package/dist/core/components/tabs.js +45 -21
  136. package/dist/core/components/tabs.js.map +1 -1
  137. package/dist/core/components/text.d.ts +1 -9
  138. package/dist/core/components/text.js +18 -3
  139. package/dist/core/components/text.js.map +1 -1
  140. package/dist/core/headers.d.ts +1 -0
  141. package/dist/core/headers.js +14 -0
  142. package/dist/core/headers.js.map +1 -0
  143. package/dist/core/registry-context.d.ts +21 -0
  144. package/dist/core/registry-context.js +40 -0
  145. package/dist/core/registry-context.js.map +1 -0
  146. package/dist/core/registry.d.ts +12 -3
  147. package/dist/core/registry.js +30 -5
  148. package/dist/core/registry.js.map +1 -1
  149. package/dist/core/renderer.d.ts +8 -14
  150. package/dist/core/renderer.js +20 -36
  151. package/dist/core/renderer.js.map +1 -1
  152. package/dist/core/test-id.d.ts +8 -0
  153. package/dist/core/test-id.js +21 -0
  154. package/dist/core/test-id.js.map +1 -0
  155. package/dist/core/types.d.ts +68 -26
  156. package/dist/core/use-column-resizing.d.ts +27 -0
  157. package/dist/core/use-column-resizing.js +228 -0
  158. package/dist/core/use-column-resizing.js.map +1 -0
  159. package/dist/effects/dispatch.d.ts +20 -0
  160. package/dist/effects/dispatch.js +39 -0
  161. package/dist/effects/dispatch.js.map +1 -0
  162. package/dist/effects/registry.d.ts +38 -0
  163. package/dist/effects/registry.js +51 -0
  164. package/dist/effects/registry.js.map +1 -0
  165. package/dist/effects/use-effect-dispatcher.d.ts +8 -0
  166. package/dist/effects/use-effect-dispatcher.js +20 -0
  167. package/dist/effects/use-effect-dispatcher.js.map +1 -0
  168. package/dist/effects/use-flash-effects.d.ts +5 -0
  169. package/dist/effects/use-flash-effects.js +22 -0
  170. package/dist/effects/use-flash-effects.js.map +1 -0
  171. package/dist/events/event-bridge.d.ts +3 -7
  172. package/dist/events/event-bridge.js +17 -47
  173. package/dist/events/event-bridge.js.map +1 -1
  174. package/dist/events/event-names.d.ts +3 -1
  175. package/dist/events/event-names.js +3 -1
  176. package/dist/events/event-names.js.map +1 -1
  177. package/dist/form/components/base/field.d.ts +3 -1
  178. package/dist/form/components/base/field.js +21 -2
  179. package/dist/form/components/base/field.js.map +1 -1
  180. package/dist/form/components/base/input-error.js +1 -1
  181. package/dist/form/components/base/input-error.js.map +1 -1
  182. package/dist/form/components/base/input.js +2 -1
  183. package/dist/form/components/base/input.js.map +1 -1
  184. package/dist/form/components/base/label.js.map +1 -1
  185. package/dist/form/components/base/password-input.js +9 -2
  186. package/dist/form/components/base/password-input.js.map +1 -1
  187. package/dist/form/components/base/submit-button.d.ts +4 -4
  188. package/dist/form/components/base/submit-button.js +5 -3
  189. package/dist/form/components/base/submit-button.js.map +1 -1
  190. package/dist/form/components/base/textarea.js +2 -1
  191. package/dist/form/components/base/textarea.js.map +1 -1
  192. package/dist/form/components/conditions.d.ts +6 -9
  193. package/dist/form/components/conditions.js +10 -2
  194. package/dist/form/components/conditions.js.map +1 -1
  195. package/dist/form/components/context.d.ts +1 -4
  196. package/dist/form/components/context.js +2 -5
  197. package/dist/form/components/context.js.map +1 -1
  198. package/dist/form/components/field-props.d.ts +28 -0
  199. package/dist/form/components/field-props.js +15 -0
  200. package/dist/form/components/field-props.js.map +1 -0
  201. package/dist/form/components/field-scope.d.ts +21 -0
  202. package/dist/form/components/field-scope.js +54 -0
  203. package/dist/form/components/field-scope.js.map +1 -0
  204. package/dist/form/components/fields/block-add-menu.d.ts +9 -0
  205. package/dist/form/components/fields/block-add-menu.js +27 -0
  206. package/dist/form/components/fields/block-add-menu.js.map +1 -0
  207. package/dist/form/components/fields/builder.d.ts +2 -0
  208. package/dist/form/components/fields/builder.js +124 -0
  209. package/dist/form/components/fields/builder.js.map +1 -0
  210. package/dist/form/components/fields/checkbox.d.ts +2 -16
  211. package/dist/form/components/fields/checkbox.js +28 -30
  212. package/dist/form/components/fields/checkbox.js.map +1 -1
  213. package/dist/form/components/fields/choice.d.ts +2 -14
  214. package/dist/form/components/fields/choice.js +14 -20
  215. package/dist/form/components/fields/choice.js.map +1 -1
  216. package/dist/form/components/fields/date-input.d.ts +2 -20
  217. package/dist/form/components/fields/date-input.js +12 -16
  218. package/dist/form/components/fields/date-input.js.map +1 -1
  219. package/dist/form/components/fields/file-upload.d.ts +2 -0
  220. package/dist/form/components/fields/file-upload.js +250 -0
  221. package/dist/form/components/fields/file-upload.js.map +1 -0
  222. package/dist/form/components/fields/hidden-input.d.ts +2 -10
  223. package/dist/form/components/fields/hidden-input.js +11 -6
  224. package/dist/form/components/fields/hidden-input.js.map +1 -1
  225. package/dist/form/components/fields/number-input.d.ts +2 -23
  226. package/dist/form/components/fields/number-input.js +40 -41
  227. package/dist/form/components/fields/number-input.js.map +1 -1
  228. package/dist/form/components/fields/password-input.d.ts +2 -29
  229. package/dist/form/components/fields/password-input.js +41 -41
  230. package/dist/form/components/fields/password-input.js.map +1 -1
  231. package/dist/form/components/fields/repeater-rows.d.ts +12 -0
  232. package/dist/form/components/fields/repeater-rows.js +46 -0
  233. package/dist/form/components/fields/repeater-rows.js.map +1 -0
  234. package/dist/form/components/fields/repeater.d.ts +2 -0
  235. package/dist/form/components/fields/repeater.js +97 -0
  236. package/dist/form/components/fields/repeater.js.map +1 -0
  237. package/dist/form/components/fields/rich-editor.d.ts +2 -17
  238. package/dist/form/components/fields/rich-editor.js +90 -52
  239. package/dist/form/components/fields/rich-editor.js.map +1 -1
  240. package/dist/form/components/fields/row-action-menu.d.ts +17 -0
  241. package/dist/form/components/fields/row-action-menu.js +61 -0
  242. package/dist/form/components/fields/row-action-menu.js.map +1 -0
  243. package/dist/form/components/fields/row-actions.d.ts +10 -0
  244. package/dist/form/components/fields/row-actions.js +45 -0
  245. package/dist/form/components/fields/row-actions.js.map +1 -0
  246. package/dist/form/components/fields/row-item.d.ts +27 -0
  247. package/dist/form/components/fields/row-item.js +69 -0
  248. package/dist/form/components/fields/row-item.js.map +1 -0
  249. package/dist/form/components/fields/select.d.ts +2 -23
  250. package/dist/form/components/fields/select.js +97 -121
  251. package/dist/form/components/fields/select.js.map +1 -1
  252. package/dist/form/components/fields/simple-field.d.ts +9 -0
  253. package/dist/form/components/fields/simple-field.js +23 -0
  254. package/dist/form/components/fields/simple-field.js.map +1 -0
  255. package/dist/form/components/fields/table-rows.d.ts +32 -0
  256. package/dist/form/components/fields/table-rows.js +188 -0
  257. package/dist/form/components/fields/table-rows.js.map +1 -0
  258. package/dist/form/components/fields/text-input.d.ts +2 -21
  259. package/dist/form/components/fields/text-input.js +13 -17
  260. package/dist/form/components/fields/text-input.js.map +1 -1
  261. package/dist/form/components/fields/textarea.d.ts +2 -20
  262. package/dist/form/components/fields/textarea.js +12 -16
  263. package/dist/form/components/fields/textarea.js.map +1 -1
  264. package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
  265. package/dist/form/components/fields/use-flip-reorder.js +51 -0
  266. package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
  267. package/dist/form/components/fields/use-row-collection.d.ts +11 -0
  268. package/dist/form/components/fields/use-row-collection.js +44 -0
  269. package/dist/form/components/fields/use-row-collection.js.map +1 -0
  270. package/dist/form/components/form-path.d.ts +5 -0
  271. package/dist/form/components/form-path.js +40 -0
  272. package/dist/form/components/form-path.js.map +1 -0
  273. package/dist/form/components/form-transport.d.ts +3 -4
  274. package/dist/form/components/form-transport.js +17 -18
  275. package/dist/form/components/form-transport.js.map +1 -1
  276. package/dist/form/components/form.d.ts +1 -20
  277. package/dist/form/components/form.js +47 -48
  278. package/dist/form/components/form.js.map +1 -1
  279. package/dist/form/components/index.d.ts +3 -1
  280. package/dist/form/components/index.js +4 -2
  281. package/dist/form/components/override-keys.d.ts +2 -0
  282. package/dist/form/components/override-keys.js +12 -0
  283. package/dist/form/components/override-keys.js.map +1 -0
  284. package/dist/form/components/prefill-context.d.ts +5 -0
  285. package/dist/form/components/prefill-context.js +11 -0
  286. package/dist/form/components/prefill-context.js.map +1 -0
  287. package/dist/form/components/prefill-targets.d.ts +17 -0
  288. package/dist/form/components/prefill-targets.js +73 -0
  289. package/dist/form/components/prefill-targets.js.map +1 -0
  290. package/dist/form/components/resolved-nodes.d.ts +1 -1
  291. package/dist/form/components/resolved-nodes.js +6 -3
  292. package/dist/form/components/resolved-nodes.js.map +1 -1
  293. package/dist/form/components/row-layout-context.d.ts +5 -0
  294. package/dist/form/components/row-layout-context.js +18 -0
  295. package/dist/form/components/row-layout-context.js.map +1 -0
  296. package/dist/form/components/types.d.ts +1 -0
  297. package/dist/form/components/use-controlled-field.d.ts +5 -9
  298. package/dist/form/components/use-controlled-field.js +17 -13
  299. package/dist/form/components/use-controlled-field.js.map +1 -1
  300. package/dist/form/components/use-dependent-field.d.ts +1 -1
  301. package/dist/form/components/use-dependent-field.js +14 -8
  302. package/dist/form/components/use-dependent-field.js.map +1 -1
  303. package/dist/form/components/use-field-commit.d.ts +4 -0
  304. package/dist/form/components/use-field-commit.js +21 -7
  305. package/dist/form/components/use-field-commit.js.map +1 -1
  306. package/dist/form/components/use-form-resolver.d.ts +7 -2
  307. package/dist/form/components/use-form-resolver.js +57 -17
  308. package/dist/form/components/use-form-resolver.js.map +1 -1
  309. package/dist/form/components/use-seed-default.d.ts +5 -0
  310. package/dist/form/components/use-seed-default.js +28 -0
  311. package/dist/form/components/use-seed-default.js.map +1 -0
  312. package/dist/form/components/values.js +20 -5
  313. package/dist/form/components/values.js.map +1 -1
  314. package/dist/form/index.d.ts +1 -1
  315. package/dist/form/index.js +13 -11
  316. package/dist/form/index.js.map +1 -1
  317. package/dist/form/skeleton.d.ts +1 -1
  318. package/dist/form/skeleton.js +5 -4
  319. package/dist/form/skeleton.js.map +1 -1
  320. package/dist/i18n/backend.d.ts +26 -0
  321. package/dist/i18n/backend.js +54 -0
  322. package/dist/i18n/backend.js.map +1 -0
  323. package/dist/i18n/config.d.ts +6 -0
  324. package/dist/i18n/config.js +36 -0
  325. package/dist/i18n/config.js.map +1 -0
  326. package/dist/i18n/index.d.ts +9 -0
  327. package/dist/i18n/index.js +7 -0
  328. package/dist/i18n/instance.d.ts +27 -0
  329. package/dist/i18n/instance.js +95 -0
  330. package/dist/i18n/instance.js.map +1 -0
  331. package/dist/i18n/locale-reload.d.ts +3 -0
  332. package/dist/i18n/locale-reload.js +17 -0
  333. package/dist/i18n/locale-reload.js.map +1 -0
  334. package/dist/i18n/locale-switcher.d.ts +21 -0
  335. package/dist/i18n/locale-switcher.js +25 -0
  336. package/dist/i18n/locale-switcher.js.map +1 -0
  337. package/dist/i18n/locale.d.ts +9 -0
  338. package/dist/i18n/locale.js +93 -0
  339. package/dist/i18n/locale.js.map +1 -0
  340. package/dist/i18n/page-props.d.ts +3 -0
  341. package/dist/i18n/page-props.js +24 -0
  342. package/dist/i18n/page-props.js.map +1 -0
  343. package/dist/icons/icon-renderer.js +30 -5
  344. package/dist/icons/icon-renderer.js.map +1 -1
  345. package/dist/icons/index.d.ts +2 -0
  346. package/dist/icons/index.js +2 -1
  347. package/dist/icons/sprite.d.ts +30 -0
  348. package/dist/icons/sprite.js +40 -0
  349. package/dist/icons/sprite.js.map +1 -0
  350. package/dist/index.d.ts +23 -9
  351. package/dist/index.js +22 -7
  352. package/dist/inertia.d.ts +3 -7
  353. package/dist/inertia.js +13 -10
  354. package/dist/inertia.js.map +1 -1
  355. package/dist/lattice.css +172 -15
  356. package/dist/layout/breadcrumbs.d.ts +3 -0
  357. package/dist/layout/breadcrumbs.js +34 -0
  358. package/dist/layout/breadcrumbs.js.map +1 -0
  359. package/dist/layout/callouts.d.ts +3 -0
  360. package/dist/layout/callouts.js +67 -0
  361. package/dist/layout/callouts.js.map +1 -0
  362. package/dist/layout/components.d.ts +1 -0
  363. package/dist/layout/components.js +25 -0
  364. package/dist/layout/components.js.map +1 -0
  365. package/dist/layout/context.d.ts +4 -0
  366. package/dist/layout/context.js +8 -0
  367. package/dist/layout/context.js.map +1 -0
  368. package/dist/layout/dropdown.d.ts +3 -0
  369. package/dist/layout/dropdown.js +23 -0
  370. package/dist/layout/dropdown.js.map +1 -0
  371. package/dist/layout/index.d.ts +4 -0
  372. package/dist/layout/index.js +6 -0
  373. package/dist/layout/menu-item.d.ts +3 -0
  374. package/dist/layout/menu-item.js +101 -0
  375. package/dist/layout/menu-item.js.map +1 -0
  376. package/dist/layout/menu.d.ts +3 -0
  377. package/dist/layout/menu.js +13 -0
  378. package/dist/layout/menu.js.map +1 -0
  379. package/dist/layout/outlet.d.ts +6 -0
  380. package/dist/layout/outlet.js +14 -0
  381. package/dist/layout/outlet.js.map +1 -0
  382. package/dist/layout/popover.d.ts +17 -0
  383. package/dist/layout/popover.js +46 -0
  384. package/dist/layout/popover.js.map +1 -0
  385. package/dist/layout/schema-layout.d.ts +10 -0
  386. package/dist/layout/schema-layout.js +23 -0
  387. package/dist/layout/schema-layout.js.map +1 -0
  388. package/dist/layout/sidebar.d.ts +3 -0
  389. package/dist/layout/sidebar.js +48 -0
  390. package/dist/layout/sidebar.js.map +1 -0
  391. package/dist/lib/utils.d.ts +0 -2
  392. package/dist/lib/utils.js +1 -4
  393. package/dist/lib/utils.js.map +1 -1
  394. package/dist/page.d.ts +1 -1
  395. package/dist/page.js +4 -10
  396. package/dist/page.js.map +1 -1
  397. package/dist/provider.d.ts +7 -4
  398. package/dist/provider.js +15 -11
  399. package/dist/provider.js.map +1 -1
  400. package/dist/registry.d.ts +1 -1
  401. package/dist/registry.js +3 -1
  402. package/dist/registry.js.map +1 -1
  403. package/dist/svg-sprite-client/index.d.ts +1 -0
  404. package/dist/svg-sprite-client/index.js +0 -0
  405. package/dist/svg-sprite-client.d.ts +1 -0
  406. package/dist/table/align.d.ts +4 -0
  407. package/dist/table/align.js +23 -0
  408. package/dist/table/align.js.map +1 -0
  409. package/dist/table/bulk.d.ts +6 -10
  410. package/dist/table/bulk.js +13 -35
  411. package/dist/table/bulk.js.map +1 -1
  412. package/dist/table/components/bulk-bar.js +40 -6
  413. package/dist/table/components/bulk-bar.js.map +1 -1
  414. package/dist/table/components/cells/badge-cell.d.ts +2 -0
  415. package/dist/table/components/cells/badge-cell.js +16 -0
  416. package/dist/table/components/cells/badge-cell.js.map +1 -0
  417. package/dist/table/components/cells/boolean-cell.d.ts +3 -0
  418. package/dist/table/components/cells/boolean-cell.js +23 -0
  419. package/dist/table/components/cells/boolean-cell.js.map +1 -0
  420. package/dist/table/components/cells/icon-cell.d.ts +2 -0
  421. package/dist/table/components/cells/icon-cell.js +21 -0
  422. package/dist/table/components/cells/icon-cell.js.map +1 -0
  423. package/dist/table/components/cells/image-cell.d.ts +2 -0
  424. package/dist/table/components/cells/image-cell.js +23 -0
  425. package/dist/table/components/cells/image-cell.js.map +1 -0
  426. package/dist/table/components/cells/money-cell.d.ts +2 -0
  427. package/dist/table/components/cells/money-cell.js +28 -0
  428. package/dist/table/components/cells/money-cell.js.map +1 -0
  429. package/dist/table/components/cells/number-cell.d.ts +2 -0
  430. package/dist/table/components/cells/number-cell.js +25 -0
  431. package/dist/table/components/cells/number-cell.js.map +1 -0
  432. package/dist/table/components/cells/numeric.d.ts +2 -0
  433. package/dist/table/components/cells/numeric.js +10 -0
  434. package/dist/table/components/cells/numeric.js.map +1 -0
  435. package/dist/table/components/cells/stack-cell.d.ts +3 -0
  436. package/dist/table/components/cells/stack-cell.js +17 -0
  437. package/dist/table/components/cells/stack-cell.js.map +1 -0
  438. package/dist/table/components/cells/text-cell.d.ts +2 -0
  439. package/dist/table/components/cells/text-cell.js +49 -0
  440. package/dist/table/components/cells/text-cell.js.map +1 -0
  441. package/dist/table/components/column-filter-control.d.ts +3 -1
  442. package/dist/table/components/column-filter-control.js +125 -100
  443. package/dist/table/components/column-filter-control.js.map +1 -1
  444. package/dist/table/components/column-header.d.ts +3 -1
  445. package/dist/table/components/column-header.js +28 -14
  446. package/dist/table/components/column-header.js.map +1 -1
  447. package/dist/table/components/filter-bar.d.ts +15 -0
  448. package/dist/table/components/filter-bar.js +81 -0
  449. package/dist/table/components/filter-bar.js.map +1 -0
  450. package/dist/table/components/filter-controls.d.ts +18 -0
  451. package/dist/table/components/filter-controls.js +256 -0
  452. package/dist/table/components/filter-controls.js.map +1 -0
  453. package/dist/table/components/filter-stack-bar.d.ts +2 -2
  454. package/dist/table/components/filter-stack-bar.js +10 -8
  455. package/dist/table/components/filter-stack-bar.js.map +1 -1
  456. package/dist/table/components/filter-value-input.d.ts +6 -3
  457. package/dist/table/components/filter-value-input.js +27 -17
  458. package/dist/table/components/filter-value-input.js.map +1 -1
  459. package/dist/table/components/pagination.d.ts +1 -1
  460. package/dist/table/components/pagination.js +20 -8
  461. package/dist/table/components/pagination.js.map +1 -1
  462. package/dist/table/components/sort-bar.d.ts +2 -2
  463. package/dist/table/components/sort-bar.js +12 -10
  464. package/dist/table/components/sort-bar.js.map +1 -1
  465. package/dist/table/components/table-action-node.d.ts +1 -1
  466. package/dist/table/components/table-action-node.js +1 -1
  467. package/dist/table/components/table-action-node.js.map +1 -1
  468. package/dist/table/components/table-cell.js +23 -52
  469. package/dist/table/components/table-cell.js.map +1 -1
  470. package/dist/table/components/table.d.ts +6 -2
  471. package/dist/table/components/table.js +198 -136
  472. package/dist/table/components/table.js.map +1 -1
  473. package/dist/table/filter-values.d.ts +13 -0
  474. package/dist/table/filter-values.js +30 -0
  475. package/dist/table/filter-values.js.map +1 -0
  476. package/dist/table/format.js +5 -3
  477. package/dist/table/format.js.map +1 -1
  478. package/dist/table/index.d.ts +1 -1
  479. package/dist/table/index.js.map +1 -1
  480. package/dist/table/payload.d.ts +1 -1
  481. package/dist/table/payload.js +24 -3
  482. package/dist/table/payload.js.map +1 -1
  483. package/dist/table/query.d.ts +10 -2
  484. package/dist/table/query.js +64 -11
  485. package/dist/table/query.js.map +1 -1
  486. package/dist/table/registry.d.ts +19 -0
  487. package/dist/table/registry.js +14 -0
  488. package/dist/table/registry.js.map +1 -0
  489. package/dist/table/types.d.ts +43 -57
  490. package/dist/table/use-table.d.ts +9 -5
  491. package/dist/table/use-table.js +66 -27
  492. package/dist/table/use-table.js.map +1 -1
  493. package/dist/toast/callout.d.ts +6 -0
  494. package/dist/toast/callout.js +31 -0
  495. package/dist/toast/callout.js.map +1 -0
  496. package/dist/toast/index.d.ts +5 -0
  497. package/dist/toast/index.js +4 -0
  498. package/dist/toast/toast.d.ts +14 -0
  499. package/dist/toast/toast.js +51 -0
  500. package/dist/toast/toast.js.map +1 -0
  501. package/dist/toast/toaster.d.ts +3 -0
  502. package/dist/toast/toaster.js +62 -0
  503. package/dist/toast/toaster.js.map +1 -0
  504. package/dist/toast/variant-styles.d.ts +6 -0
  505. package/dist/toast/variant-styles.js +37 -0
  506. package/dist/toast/variant-styles.js.map +1 -0
  507. package/dist/types/generated.d.ts +1037 -0
  508. package/dist/types/generated.js +0 -0
  509. package/dist/types/index.d.ts +1 -1
  510. package/dist/types/vite-env.d.ts +1 -0
  511. package/dist/vite.d.ts +25 -0
  512. package/dist/vite.js +72 -0
  513. package/dist/vite.js.map +1 -0
  514. package/package.json +125 -12
  515. package/resources/icons/align-center.svg +17 -0
  516. package/resources/icons/align-justify.svg +17 -0
  517. package/resources/icons/align-left.svg +17 -0
  518. package/resources/icons/align-right.svg +17 -0
  519. package/resources/icons/arrow-down.svg +16 -0
  520. package/resources/icons/arrow-up.svg +16 -0
  521. package/resources/icons/bold.svg +15 -0
  522. package/resources/icons/check.svg +15 -0
  523. package/resources/icons/chevron-down.svg +15 -0
  524. package/resources/icons/chevron-right.svg +15 -0
  525. package/resources/icons/chevrons-up-down.svg +16 -0
  526. package/resources/icons/circle-alert.svg +17 -0
  527. package/resources/icons/circle-check.svg +16 -0
  528. package/resources/icons/circle-help.svg +17 -0
  529. package/resources/icons/circle-x.svg +17 -0
  530. package/resources/icons/code.svg +16 -0
  531. package/resources/icons/columns-3.svg +17 -0
  532. package/resources/icons/copy.svg +16 -0
  533. package/resources/icons/external-link.svg +17 -0
  534. package/resources/icons/eye-off.svg +18 -0
  535. package/resources/icons/eye.svg +16 -0
  536. package/resources/icons/filter.svg +15 -0
  537. package/resources/icons/heading-1.svg +18 -0
  538. package/resources/icons/heading-2.svg +18 -0
  539. package/resources/icons/heading-3.svg +19 -0
  540. package/resources/icons/highlighter.svg +16 -0
  541. package/resources/icons/info.svg +17 -0
  542. package/resources/icons/italic.svg +17 -0
  543. package/resources/icons/layout-dashboard.svg +18 -0
  544. package/resources/icons/link.svg +16 -0
  545. package/resources/icons/list-ordered.svg +20 -0
  546. package/resources/icons/list.svg +20 -0
  547. package/resources/icons/loader-2.svg +15 -0
  548. package/resources/icons/minus.svg +15 -0
  549. package/resources/icons/more-horizontal.svg +17 -0
  550. package/resources/icons/panel-left.svg +16 -0
  551. package/resources/icons/pencil-line.svg +17 -0
  552. package/resources/icons/pencil.svg +16 -0
  553. package/resources/icons/plus.svg +16 -0
  554. package/resources/icons/quote.svg +16 -0
  555. package/resources/icons/rotate-ccw.svg +16 -0
  556. package/resources/icons/rows-3.svg +17 -0
  557. package/resources/icons/search.svg +16 -0
  558. package/resources/icons/send.svg +16 -0
  559. package/resources/icons/settings.svg +16 -0
  560. package/resources/icons/smile.svg +18 -0
  561. package/resources/icons/strikethrough.svg +17 -0
  562. package/resources/icons/table.svg +18 -0
  563. package/resources/icons/trash-2.svg +19 -0
  564. package/resources/icons/underline.svg +16 -0
  565. package/resources/icons/x.svg +16 -0
  566. package/dist/action/effects.d.ts +0 -30
  567. package/dist/action/effects.js +0 -44
  568. package/dist/action/effects.js.map +0 -1
  569. package/dist/core/props.d.ts +0 -14
  570. package/dist/core/props.js +0 -30
  571. package/dist/core/props.js.map +0 -1
  572. package/dist/form/components/base/checkbox.js.map +0 -1
  573. package/dist/form/components/fields/submit-button.d.ts +0 -10
  574. package/dist/form/components/fields/submit-button.js +0 -14
  575. package/dist/form/components/fields/submit-button.js.map +0 -1
  576. package/dist/generated/types.d.ts +0 -17
  577. package/dist/icons/default-icons.d.ts +0 -3
  578. package/dist/icons/default-icons.js +0 -44
  579. package/dist/icons/default-icons.js.map +0 -1
  580. package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
  581. package/dist/icons/dynamic-lucide-renderer.js +0 -18
  582. package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
  583. package/dist/menu/index.d.ts +0 -1
  584. package/dist/menu/index.js +0 -2
  585. package/dist/menu/use-menu.d.ts +0 -2
  586. package/dist/menu/use-menu.js +0 -9
  587. package/dist/menu/use-menu.js.map +0 -1
  588. /package/dist/{generated → chat}/types.js +0 -0
  589. /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
@@ -1,31 +1,30 @@
1
- import { withRefHeader } from "../../core/component-ref.js";
1
+ import { apiFetch } from "../../core/api.js";
2
+ import "./fields/repeater-rows.js";
2
3
  //#region resources/js/form/components/form-transport.ts
3
4
  /**
4
- * Shared client transport for the lattice form endpoint. Every form sub-action
5
- * (validation resolve, option search) POSTs to the same signed form URL, so the
6
- * CSRF header, component-ref header, and request shape live here in one place.
5
+ * Shared client transport for the lattice form endpoint: every form sub-action
6
+ * (validation resolve, option search) POSTs to the same signed URL, so the
7
+ * request shape notably stripping client-only row ids lives here once.
7
8
  */
8
9
  var FORM_DEBOUNCE_MS = 250;
9
- function xsrfToken() {
10
- const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);
11
- return match ? decodeURIComponent(match[1]) : "";
10
+ function scrubFormPayload(value) {
11
+ if (Array.isArray(value)) return value.map(scrubFormPayload);
12
+ if (value !== null && typeof value === "object") return Object.entries(value).reduce((payload, [key, item]) => {
13
+ if (key !== "__rowId") payload[key] = scrubFormPayload(item);
14
+ return payload;
15
+ }, {});
16
+ return value;
12
17
  }
13
18
  function postFormAction(action, componentRef, body, signal) {
14
- return fetch(action, {
19
+ return apiFetch(action, {
15
20
  method: "POST",
16
- credentials: "same-origin",
21
+ ref: componentRef,
17
22
  signal,
18
- headers: {
19
- "Content-Type": "application/json",
20
- Accept: "application/json",
21
- "X-Requested-With": "XMLHttpRequest",
22
- "X-XSRF-TOKEN": xsrfToken(),
23
- ...withRefHeader(componentRef)
24
- },
25
- body: JSON.stringify(body)
23
+ body: JSON.stringify(scrubFormPayload(body)),
24
+ throwOnError: false
26
25
  }).then((response) => response.ok ? response.json() : null);
27
26
  }
28
27
  //#endregion
29
- export { FORM_DEBOUNCE_MS, postFormAction, xsrfToken };
28
+ export { FORM_DEBOUNCE_MS, postFormAction };
30
29
 
31
30
  //# sourceMappingURL=form-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-transport.js","names":[],"sources":["../../../resources/js/form/components/form-transport.ts"],"sourcesContent":["/**\n * Shared client transport for the lattice form endpoint. Every form sub-action\n * (validation resolve, option search) POSTs to the same signed form URL, so the\n * CSRF header, component-ref header, and request shape live here in one place.\n */\n\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\n\nexport const FORM_DEBOUNCE_MS = 250;\n\nexport function xsrfToken(): string {\n const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);\n\n return match ? decodeURIComponent(match[1]) : \"\";\n}\n\nexport function postFormAction<T>(\n action: string,\n componentRef: string,\n body: Record<string, unknown>,\n signal: AbortSignal,\n): Promise<T | null> {\n return fetch(action, {\n method: \"POST\",\n credentials: \"same-origin\",\n signal,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-XSRF-TOKEN\": xsrfToken(),\n ...withRefHeader(componentRef),\n },\n body: JSON.stringify(body),\n }).then((response) => (response.ok ? (response.json() as Promise<T>) : null));\n}\n"],"mappings":";;;;;;;AAQA,IAAa,mBAAmB;AAEhC,SAAgB,YAAoB;CAClC,MAAM,QAAQ,SAAS,OAAO,MAAM,oBAAoB;CAExD,OAAO,QAAQ,mBAAmB,MAAM,EAAE,IAAI;AAChD;AAEA,SAAgB,eACd,QACA,cACA,MACA,QACmB;CACnB,OAAO,MAAM,QAAQ;EACnB,QAAQ;EACR,aAAa;EACb;EACA,SAAS;GACP,gBAAgB;GAChB,QAAQ;GACR,oBAAoB;GACpB,gBAAgB,UAAU;GAC1B,GAAG,cAAc,YAAY;EAC/B;EACA,MAAM,KAAK,UAAU,IAAI;CAC3B,CAAC,EAAE,MAAM,aAAc,SAAS,KAAM,SAAS,KAAK,IAAmB,IAAK;AAC9E"}
1
+ {"version":3,"file":"form-transport.js","names":[],"sources":["../../../resources/js/form/components/form-transport.ts"],"sourcesContent":["/**\n * Shared client transport for the lattice form endpoint: every form sub-action\n * (validation resolve, option search) POSTs to the same signed URL, so the\n * request shape notably stripping client-only row ids lives here once.\n */\n\nimport { apiFetch } from \"@lattice-php/lattice/core/api\";\nimport { ROW_ID_KEY } from \"./fields/repeater-rows\";\n\nexport const FORM_DEBOUNCE_MS = 250;\n\nfunction scrubFormPayload(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(scrubFormPayload);\n }\n\n if (value !== null && typeof value === \"object\") {\n return Object.entries(value as Record<string, unknown>).reduce<Record<string, unknown>>(\n (payload, [key, item]) => {\n if (key !== ROW_ID_KEY) {\n payload[key] = scrubFormPayload(item);\n }\n\n return payload;\n },\n {},\n );\n }\n\n return value;\n}\n\nexport function postFormAction<T>(\n action: string,\n componentRef: string,\n body: Record<string, unknown>,\n signal: AbortSignal,\n): Promise<T | null> {\n return apiFetch(action, {\n method: \"POST\",\n ref: componentRef,\n signal,\n body: JSON.stringify(scrubFormPayload(body)),\n throwOnError: false,\n }).then((response) => (response.ok ? (response.json() as Promise<T>) : null));\n}\n"],"mappings":";;;;;;;;AASA,IAAa,mBAAmB;AAEhC,SAAS,iBAAiB,OAAyB;CACjD,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,gBAAgB;CAGnC,IAAI,UAAU,QAAQ,OAAO,UAAU,UACrC,OAAO,OAAO,QAAQ,KAAgC,EAAE,QACrD,SAAS,CAAC,KAAK,UAAU;EACxB,IAAI,QAAA,WACF,QAAQ,OAAO,iBAAiB,IAAI;EAGtC,OAAO;CACT,GACA,CAAC,CACH;CAGF,OAAO;AACT;AAEA,SAAgB,eACd,QACA,cACA,MACA,QACmB;CACnB,OAAO,SAAS,QAAQ;EACtB,QAAQ;EACR,KAAK;EACL;EACA,MAAM,KAAK,UAAU,iBAAiB,IAAI,CAAC;EAC3C,cAAc;CAChB,CAAC,EAAE,MAAM,aAAc,SAAS,KAAM,SAAS,KAAK,IAAmB,IAAK;AAC9E"}
@@ -1,21 +1,2 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- import { FormMethod } from './types';
3
- declare module '../../../../core/types' {
4
- interface ComponentProps {
5
- form: {
6
- action?: string;
7
- errorBag?: string;
8
- ref?: string;
9
- method?: FormMethod;
10
- precognitive?: boolean;
11
- resetOnError?: boolean | string[];
12
- resetOnSuccess?: boolean | string[];
13
- state?: Record<string, unknown>;
14
- status?: string;
15
- submitButton?: boolean;
16
- submitLabel?: string;
17
- validationTimeout?: number;
18
- };
19
- }
20
- }
1
+ import { RendererComponent } from '../../core/types';
21
2
  export declare const FormComponent: RendererComponent<"form">;
@@ -1,33 +1,26 @@
1
- import { withRefHeader } from "../../core/component-ref.js";
2
- import { getBooleanProp, getOptionalNumberProp, getStringProp } from "../../core/props.js";
3
1
  import { LATTICE_EVENT } from "../../events/event-names.js";
2
+ import { withHeaders } from "../../core/headers.js";
4
3
  import { FormProvider } from "./context.js";
5
- import { FormSubmitButton } from "./base/submit-button.js";
4
+ import { walkFields } from "./field-props.js";
5
+ import { PrefillProvider } from "./prefill-context.js";
6
6
  import { ResolvedNodesProvider } from "./resolved-nodes.js";
7
7
  import { FormValuesProvider } from "./values.js";
8
8
  import { useFormResolver } from "./use-form-resolver.js";
9
+ import { FormSubmitButton } from "./base/submit-button.js";
9
10
  import { useEffect, useMemo } from "react";
10
11
  import { Form } from "@inertiajs/react";
11
12
  import { jsx, jsxs } from "react/jsx-runtime";
12
13
  //#region resources/js/form/components/form.tsx
13
- function getFormState(props) {
14
- const state = props?.state;
15
- if (typeof state !== "object" || state === null || Array.isArray(state)) return {};
16
- return state;
17
- }
18
- function collectFields(nodes, collected = {
19
- labels: {},
20
- values: {}
21
- }) {
22
- for (const child of nodes ?? []) {
23
- const name = getStringProp(child.props, "name");
24
- if (name) {
25
- const label = getStringProp(child.props, "label");
26
- if (label) collected.labels[name] = label;
27
- if (child.props?.value !== void 0) collected.values[name] = child.props.value;
28
- }
29
- collectFields(child.children, collected);
30
- }
14
+ function collectFields(nodes) {
15
+ const collected = {
16
+ labels: {},
17
+ values: {}
18
+ };
19
+ walkFields(nodes, (props) => {
20
+ if (!props.name) return;
21
+ if (props.label) collected.labels[props.name] = props.label;
22
+ if (props.value !== void 0) collected.values[props.name] = props.value;
23
+ });
31
24
  return collected;
32
25
  }
33
26
  function FormResetListener({ componentId, reset }) {
@@ -41,36 +34,44 @@ function FormResetListener({ componentId, reset }) {
41
34
  }, [componentId, reset]);
42
35
  return null;
43
36
  }
44
- function FormBody({ action, children, componentRef, nodes, shouldRenderSubmitButton, submitLabel }) {
45
- return /* @__PURE__ */ jsx(ResolvedNodesProvider, {
46
- nodes: useFormResolver(action, componentRef, nodes),
47
- children: /* @__PURE__ */ jsxs("div", {
48
- className: "flex flex-col gap-6",
49
- children: [children, shouldRenderSubmitButton && /* @__PURE__ */ jsx("div", {
50
- className: "flex justify-end rounded-lt border border-lt-border bg-lt-surface px-6 py-4 shadow-xs",
51
- children: /* @__PURE__ */ jsx(FormSubmitButton, { label: submitLabel })
52
- })]
37
+ function FormBody({ action, children, componentRef, nodes, shouldRenderSubmitButton, submitLabel, summaryLabel }) {
38
+ const { nodes: resolvedNodes, markUserEdit } = useFormResolver(action, componentRef, nodes);
39
+ return /* @__PURE__ */ jsx(PrefillProvider, {
40
+ value: { markUserEdit },
41
+ children: /* @__PURE__ */ jsx(ResolvedNodesProvider, {
42
+ nodes: resolvedNodes,
43
+ children: /* @__PURE__ */ jsxs("div", {
44
+ className: "flex flex-col gap-6",
45
+ children: [children, shouldRenderSubmitButton && /* @__PURE__ */ jsx("div", {
46
+ className: "flex justify-end rounded-lt border border-lt-border bg-lt-surface px-6 py-4 shadow-xs",
47
+ children: /* @__PURE__ */ jsx(FormSubmitButton, {
48
+ label: submitLabel,
49
+ summaryLabel
50
+ })
51
+ })]
52
+ })
53
53
  })
54
54
  });
55
55
  }
56
56
  var FormComponent = ({ children, node }) => {
57
- const props = node.props ?? {};
57
+ const props = node.props;
58
58
  const action = props.action ?? "#";
59
59
  const errorBag = props.errorBag;
60
- const componentRef = getStringProp(props, "ref");
60
+ const componentRef = props.ref ?? "";
61
61
  const method = props.method ?? "post";
62
- const precognitive = getBooleanProp(props, "precognitive");
62
+ const precognitive = props.precognitive;
63
63
  const resetOnError = props.resetOnError ?? false;
64
64
  const resetOnSuccess = props.resetOnSuccess ?? [];
65
- const state = getFormState(node.props);
66
- const { labels: fieldLabels, values: fieldValues } = useMemo(() => collectFields(node.children), [node.children]);
67
- const initialValues = {
65
+ const state = props.state;
66
+ const { labels: fieldLabels, values: fieldValues } = useMemo(() => collectFields(node.schema), [node.schema]);
67
+ const initialValues = useMemo(() => ({
68
68
  ...fieldValues,
69
69
  ...state
70
- };
71
- const shouldRenderSubmitButton = getBooleanProp(props, "submitButton", true);
70
+ }), [fieldValues, state]);
71
+ const shouldRenderSubmitButton = props.submitButton;
72
72
  const submitLabel = props.submitLabel ?? "Submit";
73
- const validationTimeout = getOptionalNumberProp(props, "validationTimeout");
73
+ const summaryLabel = props.validationSummaryLabel;
74
+ const validationTimeout = props.validationTimeout ?? void 0;
74
75
  return /* @__PURE__ */ jsx(Form, {
75
76
  action,
76
77
  "data-lattice-component": node.id,
@@ -79,22 +80,19 @@ var FormComponent = ({ children, node }) => {
79
80
  resetOnError,
80
81
  resetOnSuccess,
81
82
  validationTimeout: precognitive ? validationTimeout : void 0,
82
- headers: withRefHeader(componentRef),
83
+ headers: withHeaders(componentRef),
83
84
  className: "mx-auto flex w-full max-w-2xl flex-col gap-6",
84
- children: ({ clearErrors, errors, invalid, processing, reset, touch, validate, validating, valid }) => /* @__PURE__ */ jsxs(FormProvider, {
85
+ children: ({ clearErrors, errors, processing, reset, validate }) => /* @__PURE__ */ jsxs(FormProvider, {
85
86
  value: {
86
87
  action,
87
88
  clearErrors: (field) => clearErrors(field),
89
+ componentId: node.id,
88
90
  componentRef,
89
91
  errors,
90
92
  fieldLabels,
91
- invalid: (field) => invalid(field),
92
93
  precognitive,
93
94
  processing,
94
- touch: (field) => touch(field),
95
- validate: (field) => validate(field),
96
- validating,
97
- valid: (field) => valid(field)
95
+ validate: (field) => validate(field)
98
96
  },
99
97
  children: [
100
98
  /* @__PURE__ */ jsx(FormResetListener, {
@@ -102,7 +100,7 @@ var FormComponent = ({ children, node }) => {
102
100
  reset
103
101
  }),
104
102
  props.status && /* @__PURE__ */ jsx("div", {
105
- className: "text-center text-sm font-medium text-green-600 dark:text-green-400",
103
+ className: "text-center text-sm font-medium text-lt-success",
106
104
  children: props.status
107
105
  }),
108
106
  /* @__PURE__ */ jsx(FormValuesProvider, {
@@ -110,9 +108,10 @@ var FormComponent = ({ children, node }) => {
110
108
  children: /* @__PURE__ */ jsx(FormBody, {
111
109
  action,
112
110
  componentRef,
113
- nodes: node.children,
111
+ nodes: node.schema,
114
112
  shouldRenderSubmitButton,
115
113
  submitLabel,
114
+ summaryLabel,
116
115
  children
117
116
  })
118
117
  })
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","names":[],"sources":["../../../resources/js/form/components/form.tsx"],"sourcesContent":["import { Form as InertiaForm } from \"@inertiajs/react\";\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\nimport { getBooleanProp, getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport { LATTICE_EVENT } from \"@lattice/lattice/events/event-names\";\nimport type { Node, NodeProps, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { useEffect, useMemo } from \"react\";\nimport { FormSubmitButton } from \"./base/submit-button\";\nimport { FormProvider } from \"./context\";\nimport { ResolvedNodesProvider } from \"./resolved-nodes\";\nimport type { FormMethod } from \"./types\";\nimport { useFormResolver } from \"./use-form-resolver\";\nimport { FormValuesProvider } from \"./values\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n form: {\n action?: string;\n errorBag?: string;\n ref?: string;\n method?: FormMethod;\n precognitive?: boolean;\n resetOnError?: boolean | string[];\n resetOnSuccess?: boolean | string[];\n state?: Record<string, unknown>;\n status?: string;\n submitButton?: boolean;\n submitLabel?: string;\n validationTimeout?: number;\n };\n }\n}\n\nfunction getFormState(props: NodeProps | undefined): Record<string, unknown> {\n const state = props?.state;\n\n if (typeof state !== \"object\" || state === null || Array.isArray(state)) {\n return {};\n }\n\n return state as Record<string, unknown>;\n}\n\ntype CollectedFields = {\n labels: Record<string, string>;\n values: Record<string, unknown>;\n};\n\nfunction collectFields(\n nodes: Node[] | undefined,\n collected: CollectedFields = { labels: {}, values: {} },\n): CollectedFields {\n for (const child of nodes ?? []) {\n const name = getStringProp(child.props, \"name\");\n\n if (name) {\n const label = getStringProp(child.props, \"label\");\n if (label) {\n collected.labels[name] = label;\n }\n if (child.props?.value !== undefined) {\n collected.values[name] = child.props.value;\n }\n }\n\n collectFields(child.children, collected);\n }\n\n return collected;\n}\n\nfunction FormResetListener({\n componentId,\n reset,\n}: {\n componentId?: string;\n reset: (...fields: string[]) => void;\n}) {\n useEffect(() => {\n const handler = (event: Event) => {\n const detail = (event as CustomEvent<{ form?: string }>).detail;\n\n if (!detail?.form || detail.form === componentId) {\n reset();\n }\n };\n\n window.addEventListener(LATTICE_EVENT.resetForm, handler);\n\n return () => window.removeEventListener(LATTICE_EVENT.resetForm, handler);\n }, [componentId, reset]);\n\n return null;\n}\n\nfunction FormBody({\n action,\n children,\n componentRef,\n nodes,\n shouldRenderSubmitButton,\n submitLabel,\n}: {\n action: string;\n children: React.ReactNode;\n componentRef: string;\n nodes: Node[] | undefined;\n shouldRenderSubmitButton: boolean;\n submitLabel: string;\n}) {\n const resolvedNodes = useFormResolver(action, componentRef, nodes);\n\n return (\n <ResolvedNodesProvider nodes={resolvedNodes}>\n <div className=\"flex flex-col gap-6\">\n {children}\n\n {shouldRenderSubmitButton && (\n <div className=\"flex justify-end rounded-lt border border-lt-border bg-lt-surface px-6 py-4 shadow-xs\">\n <FormSubmitButton label={submitLabel} />\n </div>\n )}\n </div>\n </ResolvedNodesProvider>\n );\n}\n\nexport const FormComponent: RendererComponent<\"form\"> = ({ children, node }) => {\n const props = node.props ?? {};\n const action = props.action ?? \"#\";\n const errorBag = props.errorBag;\n const componentRef = getStringProp(props, \"ref\");\n const method = props.method ?? \"post\";\n const precognitive = getBooleanProp(props, \"precognitive\");\n const resetOnError = props.resetOnError ?? false;\n const resetOnSuccess = props.resetOnSuccess ?? [];\n const state = getFormState(node.props);\n const { labels: fieldLabels, values: fieldValues } = useMemo(\n () => collectFields(node.children),\n [node.children],\n );\n const initialValues = { ...fieldValues, ...state };\n const shouldRenderSubmitButton = getBooleanProp(props, \"submitButton\", true);\n const submitLabel = props.submitLabel ?? \"Submit\";\n const validationTimeout = getOptionalNumberProp(props, \"validationTimeout\");\n\n return (\n <InertiaForm\n action={action}\n data-lattice-component={node.id}\n errorBag={errorBag}\n method={method}\n resetOnError={resetOnError}\n resetOnSuccess={resetOnSuccess}\n validationTimeout={precognitive ? validationTimeout : undefined}\n headers={withRefHeader(componentRef)}\n className=\"mx-auto flex w-full max-w-2xl flex-col gap-6\"\n >\n {({\n clearErrors,\n errors,\n invalid,\n processing,\n reset,\n touch,\n validate,\n validating,\n valid,\n }) => (\n <FormProvider\n value={{\n action,\n clearErrors: (field) => clearErrors(field),\n componentRef,\n errors: errors as Record<string, string | undefined>,\n fieldLabels,\n invalid: (field) => invalid(field),\n precognitive,\n processing,\n touch: (field) => touch(field),\n validate: (field) => validate(field),\n validating,\n valid: (field) => valid(field),\n }}\n >\n <FormResetListener componentId={node.id} reset={reset} />\n\n {props.status && (\n <div className=\"text-center text-sm font-medium text-green-600 dark:text-green-400\">\n {props.status}\n </div>\n )}\n\n <FormValuesProvider initial={initialValues}>\n <FormBody\n action={action}\n componentRef={componentRef}\n nodes={node.children}\n shouldRenderSubmitButton={shouldRenderSubmitButton}\n submitLabel={submitLabel}\n >\n {children}\n </FormBody>\n </FormValuesProvider>\n </FormProvider>\n )}\n </InertiaForm>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAgCA,SAAS,aAAa,OAAuD;CAC3E,MAAM,QAAQ,OAAO;CAErB,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO,CAAC;CAGV,OAAO;AACT;AAOA,SAAS,cACP,OACA,YAA6B;CAAE,QAAQ,CAAC;CAAG,QAAQ,CAAC;AAAE,GACrC;CACjB,KAAK,MAAM,SAAS,SAAS,CAAC,GAAG;EAC/B,MAAM,OAAO,cAAc,MAAM,OAAO,MAAM;EAE9C,IAAI,MAAM;GACR,MAAM,QAAQ,cAAc,MAAM,OAAO,OAAO;GAChD,IAAI,OACF,UAAU,OAAO,QAAQ;GAE3B,IAAI,MAAM,OAAO,UAAU,KAAA,GACzB,UAAU,OAAO,QAAQ,MAAM,MAAM;EAEzC;EAEA,cAAc,MAAM,UAAU,SAAS;CACzC;CAEA,OAAO;AACT;AAEA,SAAS,kBAAkB,EACzB,aACA,SAIC;CACD,gBAAgB;EACd,MAAM,WAAW,UAAiB;GAChC,MAAM,SAAU,MAAyC;GAEzD,IAAI,CAAC,QAAQ,QAAQ,OAAO,SAAS,aACnC,MAAM;EAEV;EAEA,OAAO,iBAAiB,cAAc,WAAW,OAAO;EAExD,aAAa,OAAO,oBAAoB,cAAc,WAAW,OAAO;CAC1E,GAAG,CAAC,aAAa,KAAK,CAAC;CAEvB,OAAO;AACT;AAEA,SAAS,SAAS,EAChB,QACA,UACA,cACA,OACA,0BACA,eAQC;CAGD,OACE,oBAAC,uBAAD;EAAuB,OAHH,gBAAgB,QAAQ,cAAc,KAG5B;YAC5B,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,UAEA,4BACC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,kBAAD,EAAkB,OAAO,YAAc,CAAA;GACpC,CAAA,CAEJ;;CACgB,CAAA;AAE3B;AAEA,IAAa,iBAA4C,EAAE,UAAU,WAAW;CAC9E,MAAM,QAAQ,KAAK,SAAS,CAAC;CAC7B,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,WAAW,MAAM;CACvB,MAAM,eAAe,cAAc,OAAO,KAAK;CAC/C,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,eAAe,eAAe,OAAO,cAAc;CACzD,MAAM,eAAe,MAAM,gBAAgB;CAC3C,MAAM,iBAAiB,MAAM,kBAAkB,CAAC;CAChD,MAAM,QAAQ,aAAa,KAAK,KAAK;CACrC,MAAM,EAAE,QAAQ,aAAa,QAAQ,gBAAgB,cAC7C,cAAc,KAAK,QAAQ,GACjC,CAAC,KAAK,QAAQ,CAChB;CACA,MAAM,gBAAgB;EAAE,GAAG;EAAa,GAAG;CAAM;CACjD,MAAM,2BAA2B,eAAe,OAAO,gBAAgB,IAAI;CAC3E,MAAM,cAAc,MAAM,eAAe;CACzC,MAAM,oBAAoB,sBAAsB,OAAO,mBAAmB;CAE1E,OACE,oBAAC,MAAD;EACU;EACR,0BAAwB,KAAK;EACnB;EACF;EACM;EACE;EAChB,mBAAmB,eAAe,oBAAoB,KAAA;EACtD,SAAS,cAAc,YAAY;EACnC,WAAU;aAER,EACA,aACA,QACA,SACA,YACA,OACA,OACA,UACA,YACA,YAEA,qBAAC,cAAD;GACE,OAAO;IACL;IACA,cAAc,UAAU,YAAY,KAAK;IACzC;IACQ;IACR;IACA,UAAU,UAAU,QAAQ,KAAK;IACjC;IACA;IACA,QAAQ,UAAU,MAAM,KAAK;IAC7B,WAAW,UAAU,SAAS,KAAK;IACnC;IACA,QAAQ,UAAU,MAAM,KAAK;GAC/B;aAdF;IAgBE,oBAAC,mBAAD;KAAmB,aAAa,KAAK;KAAW;IAAQ,CAAA;IAEvD,MAAM,UACL,oBAAC,OAAD;KAAK,WAAU;eACZ,MAAM;IACJ,CAAA;IAGP,oBAAC,oBAAD;KAAoB,SAAS;eAC3B,oBAAC,UAAD;MACU;MACM;MACd,OAAO,KAAK;MACc;MACb;MAEZ;KACO,CAAA;IACQ,CAAA;GACR;;CAEL,CAAA;AAEjB"}
1
+ {"version":3,"file":"form.js","names":[],"sources":["../../../resources/js/form/components/form.tsx"],"sourcesContent":["import { Form as InertiaForm } from \"@inertiajs/react\";\nimport { withHeaders } from \"@lattice-php/lattice/core/headers\";\nimport { LATTICE_EVENT } from \"@lattice-php/lattice/events/event-names\";\nimport type { Node, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { useEffect, useMemo } from \"react\";\nimport { FormSubmitButton } from \"./base/submit-button\";\nimport { FormProvider } from \"./context\";\nimport { walkFields } from \"./field-props\";\nimport { PrefillProvider } from \"./prefill-context\";\nimport { ResolvedNodesProvider } from \"./resolved-nodes\";\nimport { useFormResolver } from \"./use-form-resolver\";\nimport { FormValuesProvider } from \"./values\";\n\ntype CollectedFields = {\n labels: Record<string, string>;\n values: Record<string, unknown>;\n};\n\nfunction collectFields(nodes: Node[] | undefined): CollectedFields {\n const collected: CollectedFields = { labels: {}, values: {} };\n\n walkFields(nodes, (props) => {\n if (!props.name) {\n return;\n }\n if (props.label) {\n collected.labels[props.name] = props.label;\n }\n if (props.value !== undefined) {\n collected.values[props.name] = props.value;\n }\n });\n\n return collected;\n}\n\nfunction FormResetListener({\n componentId,\n reset,\n}: {\n componentId?: string;\n reset: (...fields: string[]) => void;\n}) {\n useEffect(() => {\n const handler = (event: Event) => {\n const detail = (event as CustomEvent<{ form: string | null }>).detail;\n\n if (!detail?.form || detail.form === componentId) {\n reset();\n }\n };\n\n window.addEventListener(LATTICE_EVENT.resetForm, handler);\n\n return () => window.removeEventListener(LATTICE_EVENT.resetForm, handler);\n }, [componentId, reset]);\n\n return null;\n}\n\nfunction FormBody({\n action,\n children,\n componentRef,\n nodes,\n shouldRenderSubmitButton,\n submitLabel,\n summaryLabel,\n}: {\n action: string;\n children: React.ReactNode;\n componentRef: string;\n nodes: Node[] | undefined;\n shouldRenderSubmitButton: boolean;\n submitLabel: string;\n summaryLabel: string;\n}) {\n const { nodes: resolvedNodes, markUserEdit } = useFormResolver(action, componentRef, nodes);\n\n return (\n <PrefillProvider value={{ markUserEdit }}>\n <ResolvedNodesProvider nodes={resolvedNodes}>\n <div className=\"flex flex-col gap-6\">\n {children}\n\n {shouldRenderSubmitButton && (\n <div className=\"flex justify-end rounded-lt border border-lt-border bg-lt-surface px-6 py-4 shadow-xs\">\n <FormSubmitButton label={submitLabel} summaryLabel={summaryLabel} />\n </div>\n )}\n </div>\n </ResolvedNodesProvider>\n </PrefillProvider>\n );\n}\n\nexport const FormComponent: RendererComponent<\"form\"> = ({ children, node }) => {\n const props = node.props;\n const action = props.action ?? \"#\";\n const errorBag = props.errorBag;\n const componentRef = props.ref ?? \"\";\n const method = props.method ?? \"post\";\n const precognitive = props.precognitive;\n const resetOnError = props.resetOnError ?? false;\n const resetOnSuccess = props.resetOnSuccess ?? [];\n const state = props.state;\n const { labels: fieldLabels, values: fieldValues } = useMemo(\n () => collectFields(node.schema),\n [node.schema],\n );\n const initialValues = useMemo(() => ({ ...fieldValues, ...state }), [fieldValues, state]);\n const shouldRenderSubmitButton = props.submitButton;\n const submitLabel = props.submitLabel ?? \"Submit\";\n const summaryLabel = props.validationSummaryLabel;\n const validationTimeout = props.validationTimeout ?? undefined;\n\n return (\n <InertiaForm\n action={action}\n data-lattice-component={node.id}\n errorBag={errorBag}\n method={method}\n resetOnError={resetOnError}\n resetOnSuccess={resetOnSuccess}\n validationTimeout={precognitive ? validationTimeout : undefined}\n headers={withHeaders(componentRef)}\n className=\"mx-auto flex w-full max-w-2xl flex-col gap-6\"\n >\n {({ clearErrors, errors, processing, reset, validate }) => (\n <FormProvider\n value={{\n action,\n clearErrors: (field) => clearErrors(field),\n componentId: node.id,\n componentRef,\n errors: errors as Record<string, string | undefined>,\n fieldLabels,\n precognitive,\n processing,\n validate: (field) => validate(field),\n }}\n >\n <FormResetListener componentId={node.id} reset={reset} />\n\n {props.status && (\n <div className=\"text-center text-sm font-medium text-lt-success\">{props.status}</div>\n )}\n\n <FormValuesProvider initial={initialValues}>\n <FormBody\n action={action}\n componentRef={componentRef}\n nodes={node.schema}\n shouldRenderSubmitButton={shouldRenderSubmitButton}\n submitLabel={submitLabel}\n summaryLabel={summaryLabel}\n >\n {children}\n </FormBody>\n </FormValuesProvider>\n </FormProvider>\n )}\n </InertiaForm>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAkBA,SAAS,cAAc,OAA4C;CACjE,MAAM,YAA6B;EAAE,QAAQ,CAAC;EAAG,QAAQ,CAAC;CAAE;CAE5D,WAAW,QAAQ,UAAU;EAC3B,IAAI,CAAC,MAAM,MACT;EAEF,IAAI,MAAM,OACR,UAAU,OAAO,MAAM,QAAQ,MAAM;EAEvC,IAAI,MAAM,UAAU,KAAA,GAClB,UAAU,OAAO,MAAM,QAAQ,MAAM;CAEzC,CAAC;CAED,OAAO;AACT;AAEA,SAAS,kBAAkB,EACzB,aACA,SAIC;CACD,gBAAgB;EACd,MAAM,WAAW,UAAiB;GAChC,MAAM,SAAU,MAA+C;GAE/D,IAAI,CAAC,QAAQ,QAAQ,OAAO,SAAS,aACnC,MAAM;EAEV;EAEA,OAAO,iBAAiB,cAAc,WAAW,OAAO;EAExD,aAAa,OAAO,oBAAoB,cAAc,WAAW,OAAO;CAC1E,GAAG,CAAC,aAAa,KAAK,CAAC;CAEvB,OAAO;AACT;AAEA,SAAS,SAAS,EAChB,QACA,UACA,cACA,OACA,0BACA,aACA,gBASC;CACD,MAAM,EAAE,OAAO,eAAe,iBAAiB,gBAAgB,QAAQ,cAAc,KAAK;CAE1F,OACE,oBAAC,iBAAD;EAAiB,OAAO,EAAE,aAAa;YACrC,oBAAC,uBAAD;GAAuB,OAAO;aAC5B,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,UAEA,4BACC,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,kBAAD;MAAkB,OAAO;MAA2B;KAAe,CAAA;IAChE,CAAA,CAEJ;;EACgB,CAAA;CACR,CAAA;AAErB;AAEA,IAAa,iBAA4C,EAAE,UAAU,WAAW;CAC9E,MAAM,QAAQ,KAAK;CACnB,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,WAAW,MAAM;CACvB,MAAM,eAAe,MAAM,OAAO;CAClC,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,eAAe,MAAM;CAC3B,MAAM,eAAe,MAAM,gBAAgB;CAC3C,MAAM,iBAAiB,MAAM,kBAAkB,CAAC;CAChD,MAAM,QAAQ,MAAM;CACpB,MAAM,EAAE,QAAQ,aAAa,QAAQ,gBAAgB,cAC7C,cAAc,KAAK,MAAM,GAC/B,CAAC,KAAK,MAAM,CACd;CACA,MAAM,gBAAgB,eAAe;EAAE,GAAG;EAAa,GAAG;CAAM,IAAI,CAAC,aAAa,KAAK,CAAC;CACxF,MAAM,2BAA2B,MAAM;CACvC,MAAM,cAAc,MAAM,eAAe;CACzC,MAAM,eAAe,MAAM;CAC3B,MAAM,oBAAoB,MAAM,qBAAqB,KAAA;CAErD,OACE,oBAAC,MAAD;EACU;EACR,0BAAwB,KAAK;EACnB;EACF;EACM;EACE;EAChB,mBAAmB,eAAe,oBAAoB,KAAA;EACtD,SAAS,YAAY,YAAY;EACjC,WAAU;aAER,EAAE,aAAa,QAAQ,YAAY,OAAO,eAC1C,qBAAC,cAAD;GACE,OAAO;IACL;IACA,cAAc,UAAU,YAAY,KAAK;IACzC,aAAa,KAAK;IAClB;IACQ;IACR;IACA;IACA;IACA,WAAW,UAAU,SAAS,KAAK;GACrC;aAXF;IAaE,oBAAC,mBAAD;KAAmB,aAAa,KAAK;KAAW;IAAQ,CAAA;IAEvD,MAAM,UACL,oBAAC,OAAD;KAAK,WAAU;eAAmD,MAAM;IAAY,CAAA;IAGtF,oBAAC,oBAAD;KAAoB,SAAS;eAC3B,oBAAC,UAAD;MACU;MACM;MACd,OAAO,KAAK;MACc;MACb;MACC;MAEb;KACO,CAAA;IACQ,CAAA;GACR;;CAEL,CAAA;AAEjB"}
@@ -1,11 +1,13 @@
1
+ export { BuilderComponent } from './fields/builder';
1
2
  export { CheckboxComponent } from './fields/checkbox';
2
3
  export { ChoiceComponent } from './fields/choice';
3
4
  export { DateInputComponent } from './fields/date-input';
5
+ export { FileUploadComponent } from './fields/file-upload';
4
6
  export { FormComponent } from './form';
5
7
  export { HiddenInputComponent } from './fields/hidden-input';
6
8
  export { NumberInputComponent } from './fields/number-input';
7
9
  export { PasswordInputComponent } from './fields/password-input';
10
+ export { RepeaterComponent } from './fields/repeater';
8
11
  export { SelectComponent } from './fields/select';
9
- export { SubmitButtonComponent } from './fields/submit-button';
10
12
  export { TextareaComponent } from './fields/textarea';
11
13
  export { TextInputComponent } from './fields/text-input';
@@ -1,12 +1,14 @@
1
1
  import { FormComponent } from "./form.js";
2
+ import { BuilderComponent } from "./fields/builder.js";
2
3
  import { CheckboxComponent } from "./fields/checkbox.js";
3
4
  import { ChoiceComponent } from "./fields/choice.js";
4
5
  import { DateInputComponent } from "./fields/date-input.js";
6
+ import { FileUploadComponent } from "./fields/file-upload.js";
5
7
  import { HiddenInputComponent } from "./fields/hidden-input.js";
6
8
  import { NumberInputComponent } from "./fields/number-input.js";
7
9
  import { PasswordInputComponent } from "./fields/password-input.js";
10
+ import { RepeaterComponent } from "./fields/repeater.js";
8
11
  import { SelectComponent } from "./fields/select.js";
9
- import { SubmitButtonComponent } from "./fields/submit-button.js";
10
12
  import { TextareaComponent } from "./fields/textarea.js";
11
13
  import { TextInputComponent } from "./fields/text-input.js";
12
- export { CheckboxComponent, ChoiceComponent, DateInputComponent, FormComponent, HiddenInputComponent, NumberInputComponent, PasswordInputComponent, SelectComponent, SubmitButtonComponent, TextInputComponent, TextareaComponent };
14
+ export { BuilderComponent, CheckboxComponent, ChoiceComponent, DateInputComponent, FileUploadComponent, FormComponent, HiddenInputComponent, NumberInputComponent, PasswordInputComponent, RepeaterComponent, SelectComponent, TextInputComponent, TextareaComponent };
@@ -0,0 +1,2 @@
1
+ export declare function rowIdFrom(row: Record<string, unknown>): string | null;
2
+ export declare function buildOverrideKey(base: string, rowId: string | null, index: number, name: string): string;
@@ -0,0 +1,12 @@
1
+ import { ROW_ID_KEY } from "./fields/repeater-rows.js";
2
+ //#region resources/js/form/components/override-keys.ts
3
+ function rowIdFrom(row) {
4
+ return typeof row["__rowId"] === "string" ? row[ROW_ID_KEY] : null;
5
+ }
6
+ function buildOverrideKey(base, rowId, index, name) {
7
+ return `${base}.${rowId ?? String(index)}.${name}`;
8
+ }
9
+ //#endregion
10
+ export { buildOverrideKey, rowIdFrom };
11
+
12
+ //# sourceMappingURL=override-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"override-keys.js","names":[],"sources":["../../../resources/js/form/components/override-keys.ts"],"sourcesContent":["import { ROW_ID_KEY } from \"./fields/repeater-rows\";\n\nexport function rowIdFrom(row: Record<string, unknown>): string | null {\n return typeof row[ROW_ID_KEY] === \"string\" ? row[ROW_ID_KEY] : null;\n}\n\nexport function buildOverrideKey(\n base: string,\n rowId: string | null,\n index: number,\n name: string,\n): string {\n return `${base}.${rowId ?? String(index)}.${name}`;\n}\n"],"mappings":";;AAEA,SAAgB,UAAU,KAA6C;CACrE,OAAO,OAAO,IAAA,eAAoB,WAAW,IAAI,cAAc;AACjE;AAEA,SAAgB,iBACd,MACA,OACA,OACA,MACQ;CACR,OAAO,GAAG,KAAK,GAAG,SAAS,OAAO,KAAK,EAAE,GAAG;AAC9C"}
@@ -0,0 +1,5 @@
1
+ export type PrefillController = {
2
+ markUserEdit: (overrideKey: string) => void;
3
+ };
4
+ export declare const PrefillProvider: import('react').Provider<PrefillController | null>;
5
+ export declare function usePrefillController(): PrefillController | null;
@@ -0,0 +1,11 @@
1
+ import { createContext, useContext } from "react";
2
+ //#region resources/js/form/components/prefill-context.ts
3
+ var PrefillContext = createContext(null);
4
+ var PrefillProvider = PrefillContext.Provider;
5
+ function usePrefillController() {
6
+ return useContext(PrefillContext);
7
+ }
8
+ //#endregion
9
+ export { PrefillProvider, usePrefillController };
10
+
11
+ //# sourceMappingURL=prefill-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefill-context.js","names":[],"sources":["../../../resources/js/form/components/prefill-context.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport type PrefillController = {\n markUserEdit: (overrideKey: string) => void;\n};\n\nconst PrefillContext = createContext<PrefillController | null>(null);\n\nexport const PrefillProvider = PrefillContext.Provider;\n\nexport function usePrefillController(): PrefillController | null {\n return useContext(PrefillContext);\n}\n"],"mappings":";;AAMA,IAAM,iBAAiB,cAAwC,IAAI;AAEnE,IAAa,kBAAkB,eAAe;AAE9C,SAAgB,uBAAiD;CAC/D,OAAO,WAAW,cAAc;AAClC"}
@@ -0,0 +1,17 @@
1
+ import { Node } from '../../core/types';
2
+ export type PrefillTarget = {
3
+ path: string;
4
+ overrideKey: string;
5
+ resetOn: string[];
6
+ refreshOn: string[];
7
+ };
8
+ type PrefillSnapshot = {
9
+ targets: PrefillTarget[];
10
+ values: Record<string, unknown>;
11
+ };
12
+ export { getPath } from './form-path';
13
+ export declare function collectPrefillTargets(nodes: Node[] | undefined, values: Record<string, unknown>): PrefillTarget[];
14
+ export declare function applyPrefillValue(setValue: (name: string, value: unknown) => void, path: string, value: unknown): void;
15
+ export declare function pathsToClear(previous: PrefillSnapshot, next: PrefillSnapshot): string[];
16
+ export declare function seededOverrides(targets: PrefillTarget[], values: Record<string, unknown>): string[];
17
+ export declare function pruneOverrides(overrides: Set<string>, targets: PrefillTarget[]): Set<string>;
@@ -0,0 +1,73 @@
1
+ import { fieldProps } from "./field-props.js";
2
+ import { appendPath, getPath } from "./form-path.js";
3
+ import { buildOverrideKey, rowIdFrom } from "./override-keys.js";
4
+ //#region resources/js/form/components/prefill-targets.ts
5
+ var ROW_COLLECTION_TYPES = new Set(["field.builder", "field.repeater"]);
6
+ function mapDep(dep, rowPath) {
7
+ if (dep.startsWith("@")) return dep.slice(1);
8
+ return rowPath === null ? dep : appendPath(rowPath, dep);
9
+ }
10
+ function targetFor(node, rowPath, identityCollectionPath, index = 0, row = {}) {
11
+ const props = fieldProps(node);
12
+ if (!props.editablePrefill || !props.name) return null;
13
+ const rowId = rowIdFrom(row);
14
+ return {
15
+ path: rowPath === null ? props.name : appendPath(rowPath, props.name),
16
+ overrideKey: identityCollectionPath === null ? props.name : buildOverrideKey(identityCollectionPath, rowId, index, props.name),
17
+ resetOn: (props.prefillResetOn ?? []).map((dep) => mapDep(dep, rowPath)),
18
+ refreshOn: (props.prefillRefreshOn ?? []).map((dep) => mapDep(dep, rowPath))
19
+ };
20
+ }
21
+ function collectPrefillTargets(nodes, values) {
22
+ const targets = [];
23
+ const walk = (list, rowPath = null, identityRowPath = null, identityCollectionPath = null, index = 0, row = {}) => {
24
+ for (const node of list ?? []) {
25
+ if (ROW_COLLECTION_TYPES.has(node.type)) {
26
+ const name = fieldProps(node).name;
27
+ if (name) {
28
+ const childCollectionPath = appendPath(rowPath, name);
29
+ const childIdentityCollectionPath = appendPath(identityRowPath, name);
30
+ const storedRows = getPath(values, childCollectionPath);
31
+ const rows = Array.isArray(storedRows) ? storedRows : [];
32
+ const blocks = node.blocks;
33
+ rows.forEach((childRow, childIndex) => {
34
+ walk(blocks ? blocks.find((block) => block.type === childRow.type)?.schema ?? [] : node.schema ?? [], appendPath(childCollectionPath, childIndex), appendPath(childIdentityCollectionPath, rowIdFrom(childRow) ?? childIndex), childIdentityCollectionPath, childIndex, childRow);
35
+ });
36
+ }
37
+ continue;
38
+ }
39
+ const target = targetFor(node, rowPath, identityCollectionPath, index, row);
40
+ if (target) targets.push(target);
41
+ walk(node.schema, rowPath, identityRowPath, identityCollectionPath, index, row);
42
+ }
43
+ };
44
+ walk(nodes);
45
+ return targets;
46
+ }
47
+ function applyPrefillValue(setValue, path, value) {
48
+ setValue(path, value);
49
+ }
50
+ function pathsToClear(previous, next) {
51
+ const previousByKey = new Map(previous.targets.map((target) => [target.overrideKey, target]));
52
+ return next.targets.filter((target) => {
53
+ const previousTarget = previousByKey.get(target.overrideKey);
54
+ return target.resetOn.some((dep, index) => {
55
+ const previousDep = previousTarget?.resetOn[index] ?? dep;
56
+ return !Object.is(getPath(previous.values, previousDep), getPath(next.values, dep));
57
+ });
58
+ }).map((target) => target.overrideKey);
59
+ }
60
+ function seededOverrides(targets, values) {
61
+ return targets.filter((target) => {
62
+ const value = getPath(values, target.path);
63
+ return value !== void 0 && value !== null && value !== "";
64
+ }).map((target) => target.overrideKey);
65
+ }
66
+ function pruneOverrides(overrides, targets) {
67
+ const liveKeys = new Set(targets.map((target) => target.overrideKey));
68
+ return new Set([...overrides].filter((key) => liveKeys.has(key)));
69
+ }
70
+ //#endregion
71
+ export { applyPrefillValue, collectPrefillTargets, getPath, pathsToClear, pruneOverrides, seededOverrides };
72
+
73
+ //# sourceMappingURL=prefill-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefill-targets.js","names":[],"sources":["../../../resources/js/form/components/prefill-targets.ts"],"sourcesContent":["import type { Node } from \"@lattice-php/lattice/core/types\";\nimport { fieldProps } from \"./field-props\";\nimport { appendPath, getPath } from \"./form-path\";\nimport { buildOverrideKey, rowIdFrom } from \"./override-keys\";\n\nexport type PrefillTarget = {\n path: string;\n overrideKey: string;\n resetOn: string[];\n refreshOn: string[];\n};\n\ntype PrefillSnapshot = {\n targets: PrefillTarget[];\n values: Record<string, unknown>;\n};\n\ntype Block = { type: string; label: string; schema: Node[] };\n\nconst ROW_COLLECTION_TYPES = new Set([\"field.builder\", \"field.repeater\"]);\n\nexport { getPath } from \"./form-path\";\n\nfunction mapDep(dep: string, rowPath: string | null): string {\n if (dep.startsWith(\"@\")) {\n return dep.slice(1);\n }\n\n return rowPath === null ? dep : appendPath(rowPath, dep);\n}\n\nfunction targetFor(\n node: Node,\n rowPath: string | null,\n identityCollectionPath: string | null,\n index = 0,\n row: Record<string, unknown> = {},\n): PrefillTarget | null {\n const props = fieldProps(node);\n\n if (!props.editablePrefill || !props.name) {\n return null;\n }\n\n const rowId = rowIdFrom(row);\n\n return {\n path: rowPath === null ? props.name : appendPath(rowPath, props.name),\n overrideKey:\n identityCollectionPath === null\n ? props.name\n : buildOverrideKey(identityCollectionPath, rowId, index, props.name),\n resetOn: (props.prefillResetOn ?? []).map((dep) => mapDep(dep, rowPath)),\n refreshOn: (props.prefillRefreshOn ?? []).map((dep) => mapDep(dep, rowPath)),\n };\n}\n\nexport function collectPrefillTargets(\n nodes: Node[] | undefined,\n values: Record<string, unknown>,\n): PrefillTarget[] {\n const targets: PrefillTarget[] = [];\n\n const walk = (\n list: Node[] | undefined,\n rowPath: string | null = null,\n identityRowPath: string | null = null,\n identityCollectionPath: string | null = null,\n index = 0,\n row: Record<string, unknown> = {},\n ): void => {\n for (const node of list ?? []) {\n if (ROW_COLLECTION_TYPES.has(node.type)) {\n const name = fieldProps(node).name;\n if (name) {\n const childCollectionPath = appendPath(rowPath, name);\n const childIdentityCollectionPath = appendPath(identityRowPath, name);\n const storedRows = getPath(values, childCollectionPath);\n const rows = Array.isArray(storedRows)\n ? (storedRows as Array<Record<string, unknown>>)\n : [];\n const blocks = (node as unknown as { blocks?: Block[] }).blocks;\n\n rows.forEach((childRow, childIndex) => {\n const template = blocks\n ? (blocks.find((block) => block.type === childRow.type)?.schema ?? [])\n : (node.schema ?? []);\n\n walk(\n template,\n appendPath(childCollectionPath, childIndex),\n appendPath(childIdentityCollectionPath, rowIdFrom(childRow) ?? childIndex),\n childIdentityCollectionPath,\n childIndex,\n childRow,\n );\n });\n }\n\n continue;\n }\n\n const target = targetFor(node, rowPath, identityCollectionPath, index, row);\n if (target) {\n targets.push(target);\n }\n\n walk(node.schema, rowPath, identityRowPath, identityCollectionPath, index, row);\n }\n };\n\n walk(nodes);\n\n return targets;\n}\n\nexport function applyPrefillValue(\n setValue: (name: string, value: unknown) => void,\n path: string,\n value: unknown,\n): void {\n setValue(path, value);\n}\n\nexport function pathsToClear(previous: PrefillSnapshot, next: PrefillSnapshot): string[] {\n const previousByKey = new Map(\n previous.targets.map((target) => [target.overrideKey, target] as const),\n );\n\n return next.targets\n .filter((target) => {\n const previousTarget = previousByKey.get(target.overrideKey);\n\n return target.resetOn.some((dep, index) => {\n const previousDep = previousTarget?.resetOn[index] ?? dep;\n\n return !Object.is(getPath(previous.values, previousDep), getPath(next.values, dep));\n });\n })\n .map((target) => target.overrideKey);\n}\n\nexport function seededOverrides(\n targets: PrefillTarget[],\n values: Record<string, unknown>,\n): string[] {\n return targets\n .filter((target) => {\n const value = getPath(values, target.path);\n\n return value !== undefined && value !== null && value !== \"\";\n })\n .map((target) => target.overrideKey);\n}\n\nexport function pruneOverrides(overrides: Set<string>, targets: PrefillTarget[]): Set<string> {\n const liveKeys = new Set(targets.map((target) => target.overrideKey));\n\n return new Set([...overrides].filter((key) => liveKeys.has(key)));\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Node } from '../../../../core/types';
1
+ import { Node } from '../../core/types';
2
2
  export declare function ResolvedNodesProvider({ nodes, children, }: {
3
3
  nodes: Record<string, Node>;
4
4
  children: React.ReactNode;
@@ -1,4 +1,5 @@
1
- import { getStringProp } from "../../core/props.js";
1
+ import { fieldProps } from "./field-props.js";
2
+ import { useFieldScope } from "./field-scope.js";
2
3
  import { createContext, useContext } from "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
5
  //#region resources/js/form/components/resolved-nodes.tsx
@@ -11,8 +12,10 @@ function ResolvedNodesProvider({ nodes, children }) {
11
12
  }
12
13
  function useResolvedNode(node) {
13
14
  const nodes = useContext(ResolvedNodesContext);
14
- const name = getStringProp(node.props, "name");
15
- return name && nodes[name] ? nodes[name] : node;
15
+ const name = fieldProps(node).name ?? "";
16
+ const scope = useFieldScope();
17
+ const path = name && scope ? scope.errorKey(name) : name;
18
+ return path && nodes[path] || name && nodes[name] || node;
16
19
  }
17
20
  //#endregion
18
21
  export { ResolvedNodesProvider, useResolvedNode };
@@ -1 +1 @@
1
- {"version":3,"file":"resolved-nodes.js","names":[],"sources":["../../../resources/js/form/components/resolved-nodes.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { Node } from \"@lattice/lattice/core/types\";\n\nconst ResolvedNodesContext = createContext<Record<string, Node>>({});\n\nexport function ResolvedNodesProvider({\n nodes,\n children,\n}: {\n nodes: Record<string, Node>;\n children: React.ReactNode;\n}) {\n return <ResolvedNodesContext.Provider value={nodes}>{children}</ResolvedNodesContext.Provider>;\n}\n\nexport function useResolvedNode(node: Node): Node {\n const nodes = useContext(ResolvedNodesContext);\n const name = getStringProp(node.props, \"name\");\n\n return name && nodes[name] ? nodes[name] : node;\n}\n"],"mappings":";;;;AAIA,IAAM,uBAAuB,cAAoC,CAAC,CAAC;AAEnE,SAAgB,sBAAsB,EACpC,OACA,YAIC;CACD,OAAO,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO;EAAQ;CAAwC,CAAA;AAC/F;AAEA,SAAgB,gBAAgB,MAAkB;CAChD,MAAM,QAAQ,WAAW,oBAAoB;CAC7C,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAE7C,OAAO,QAAQ,MAAM,QAAQ,MAAM,QAAQ;AAC7C"}
1
+ {"version":3,"file":"resolved-nodes.js","names":[],"sources":["../../../resources/js/form/components/resolved-nodes.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { Node } from \"@lattice-php/lattice/core/types\";\nimport { fieldProps } from \"./field-props\";\nimport { useFieldScope } from \"./field-scope\";\n\nconst ResolvedNodesContext = createContext<Record<string, Node>>({});\n\nexport function ResolvedNodesProvider({\n nodes,\n children,\n}: {\n nodes: Record<string, Node>;\n children: React.ReactNode;\n}) {\n return <ResolvedNodesContext.Provider value={nodes}>{children}</ResolvedNodesContext.Provider>;\n}\n\nexport function useResolvedNode(node: Node): Node {\n const nodes = useContext(ResolvedNodesContext);\n const name = fieldProps(node).name ?? \"\";\n const scope = useFieldScope();\n const path = name && scope ? scope.errorKey(name) : name;\n\n return (path && nodes[path]) || (name && nodes[name]) || node;\n}\n"],"mappings":";;;;;AAKA,IAAM,uBAAuB,cAAoC,CAAC,CAAC;AAEnE,SAAgB,sBAAsB,EACpC,OACA,YAIC;CACD,OAAO,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO;EAAQ;CAAwC,CAAA;AAC/F;AAEA,SAAgB,gBAAgB,MAAkB;CAChD,MAAM,QAAQ,WAAW,oBAAoB;CAC7C,MAAM,OAAO,WAAW,IAAI,EAAE,QAAQ;CACtC,MAAM,QAAQ,cAAc;CAC5B,MAAM,OAAO,QAAQ,QAAQ,MAAM,SAAS,IAAI,IAAI;CAEpD,OAAQ,QAAQ,MAAM,SAAW,QAAQ,MAAM,SAAU;AAC3D"}
@@ -0,0 +1,5 @@
1
+ export declare function TableCellProvider({ children }: {
2
+ children: React.ReactNode;
3
+ }): import("react").JSX.Element;
4
+ /** True when a field is being rendered inside a table-layout cell (no own label). */
5
+ export declare function useInTableCell(): boolean;
@@ -0,0 +1,18 @@
1
+ import { createContext, useContext } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region resources/js/form/components/row-layout-context.tsx
4
+ var TableCellContext = createContext(false);
5
+ function TableCellProvider({ children }) {
6
+ return /* @__PURE__ */ jsx(TableCellContext.Provider, {
7
+ value: true,
8
+ children
9
+ });
10
+ }
11
+ /** True when a field is being rendered inside a table-layout cell (no own label). */
12
+ function useInTableCell() {
13
+ return useContext(TableCellContext);
14
+ }
15
+ //#endregion
16
+ export { TableCellProvider, useInTableCell };
17
+
18
+ //# sourceMappingURL=row-layout-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-layout-context.js","names":[],"sources":["../../../resources/js/form/components/row-layout-context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nconst TableCellContext = createContext(false);\n\nexport function TableCellProvider({ children }: { children: React.ReactNode }) {\n return <TableCellContext.Provider value={true}>{children}</TableCellContext.Provider>;\n}\n\n/** True when a field is being rendered inside a table-layout cell (no own label). */\nexport function useInTableCell(): boolean {\n return useContext(TableCellContext);\n}\n"],"mappings":";;;AAEA,IAAM,mBAAmB,cAAc,KAAK;AAE5C,SAAgB,kBAAkB,EAAE,YAA2C;CAC7E,OAAO,oBAAC,iBAAiB,UAAlB;EAA2B,OAAO;EAAO;CAAoC,CAAA;AACtF;;AAGA,SAAgB,iBAA0B;CACxC,OAAO,WAAW,gBAAgB;AACpC"}
@@ -1,4 +1,5 @@
1
1
  import { Method } from '@inertiajs/core';
2
+ export type { Checkbox, Choice, DateInput, Form, FormFieldNode, FormNode, FormNodeType, HiddenInput, NumberInput, PasswordInput, RichEditor, Select, Textarea, TextInput, } from '../../types/generated';
2
3
  export type FormMethod = Method;
3
4
  export type FormLabelAction = {
4
5
  href: string;
@@ -1,16 +1,12 @@
1
- import { Node } from '../../../../core/types';
1
+ import { Node } from '../../core/types';
2
2
  import { FieldState } from './conditions';
3
- type ControlledField = FieldState & {
3
+ export type ControlledField = FieldState & {
4
+ localName: string;
4
5
  name: string;
6
+ testId?: string;
5
7
  value: string;
6
8
  error?: string;
7
9
  commit: (value: unknown) => void;
8
10
  };
9
- /**
10
- * Shared wiring for store-controlled, condition-aware fields: derives the current
11
- * string value (store, falling back to the node's value prop), the field state
12
- * (hidden/required/readonly/disabled), the current error, and a `commit` callback
13
- * that writes to the store and triggers precognition validation / error clearing.
14
- */
11
+ /** Shared wiring read by every store-controlled, condition-aware field. */
15
12
  export declare function useControlledField(node: Node): ControlledField;
16
- export {};