@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 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../resources/js/form/components/context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\ntype FormContextValue = {\n action: string;\n clearErrors: (field: string) => void;\n componentRef: string;\n errors: Record<string, string | undefined>;\n fieldLabels: Record<string, string>;\n invalid: (field: string) => boolean;\n precognitive: boolean;\n processing: boolean;\n touch: (field: string) => void;\n validate: (field: string) => void;\n validating: boolean;\n valid: (field: string) => boolean;\n};\n\nconst FormContext = createContext<FormContextValue>({\n action: \"#\",\n clearErrors: () => {},\n componentRef: \"\",\n errors: {},\n fieldLabels: {},\n invalid: () => false,\n precognitive: false,\n processing: false,\n touch: () => {},\n validate: () => {},\n validating: false,\n valid: () => false,\n});\n\nexport function FormProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: FormContextValue;\n}) {\n return <FormContext.Provider value={value}>{children}</FormContext.Provider>;\n}\n\nexport function useFormContext() {\n return useContext(FormContext);\n}\n"],"mappings":";;;AAiBA,IAAM,cAAc,cAAgC;CAClD,QAAQ;CACR,mBAAmB,CAAC;CACpB,cAAc;CACd,QAAQ,CAAC;CACT,aAAa,CAAC;CACd,eAAe;CACf,cAAc;CACd,YAAY;CACZ,aAAa,CAAC;CACd,gBAAgB,CAAC;CACjB,YAAY;CACZ,aAAa;AACf,CAAC;AAED,SAAgB,aAAa,EAC3B,UACA,SAIC;CACD,OAAO,oBAAC,YAAY,UAAb;EAA6B;EAAQ;CAA+B,CAAA;AAC7E;AAEA,SAAgB,iBAAiB;CAC/B,OAAO,WAAW,WAAW;AAC/B"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../resources/js/form/components/context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\ntype FormContextValue = {\n action: string;\n clearErrors: (field: string) => void;\n componentId?: string;\n componentRef: string;\n errors: Record<string, string | undefined>;\n fieldLabels: Record<string, string>;\n precognitive: boolean;\n processing: boolean;\n validate: (field: string) => void;\n};\n\nconst FormContext = createContext<FormContextValue>({\n action: \"#\",\n clearErrors: () => {},\n componentId: undefined,\n componentRef: \"\",\n errors: {},\n fieldLabels: {},\n precognitive: false,\n processing: false,\n validate: () => {},\n});\n\nexport function FormProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: FormContextValue;\n}) {\n return <FormContext.Provider value={value}>{children}</FormContext.Provider>;\n}\n\nexport function useFormContext() {\n return useContext(FormContext);\n}\n"],"mappings":";;;AAcA,IAAM,cAAc,cAAgC;CAClD,QAAQ;CACR,mBAAmB,CAAC;CACpB,aAAa,KAAA;CACb,cAAc;CACd,QAAQ,CAAC;CACT,aAAa,CAAC;CACd,cAAc;CACd,YAAY;CACZ,gBAAgB,CAAC;AACnB,CAAC;AAED,SAAgB,aAAa,EAC3B,UACA,SAIC;CACD,OAAO,oBAAC,YAAY,UAAb;EAA6B;EAAQ;CAA+B,CAAA;AAC7E;AAEA,SAAgB,iBAAiB;CAC/B,OAAO,WAAW,WAAW;AAC/B"}
@@ -0,0 +1,28 @@
1
+ import { Node } from '../../core/types';
2
+ import { FieldConditions } from './conditions';
3
+ /**
4
+ * The props every form-field node shares (the PHP Field base). Nodes flow through
5
+ * the form framework loosely typed via the generic schema, so this is the typed
6
+ * lens the shared hooks read them through. Everything is optional because the
7
+ * lens is also applied to non-field nodes while walking the schema.
8
+ */
9
+ export type FieldProps = {
10
+ conditions?: FieldConditions | null;
11
+ dependsOnAny?: boolean | null;
12
+ dependsOnKeys?: string[] | null;
13
+ disabled?: boolean | null;
14
+ helperText?: string | null;
15
+ hidden?: boolean | null;
16
+ label?: string | null;
17
+ name?: string;
18
+ editablePrefill?: boolean | null;
19
+ prefillRefreshOn?: string[] | null;
20
+ prefillResetOn?: string[] | null;
21
+ readOnly?: boolean | null;
22
+ required?: boolean | null;
23
+ tooltip?: string | null;
24
+ value?: unknown;
25
+ };
26
+ export declare function fieldProps(node: Node): FieldProps;
27
+ /** The single schema traversal shared by the label/value and dependency-watch collectors. */
28
+ export declare function walkFields(nodes: Node[] | undefined, visit: (props: FieldProps, node: Node) => void): void;
@@ -0,0 +1,15 @@
1
+ //#region resources/js/form/components/field-props.ts
2
+ function fieldProps(node) {
3
+ return node.props;
4
+ }
5
+ /** The single schema traversal shared by the label/value and dependency-watch collectors. */
6
+ function walkFields(nodes, visit) {
7
+ for (const child of nodes ?? []) {
8
+ visit(fieldProps(child), child);
9
+ walkFields(child.schema, visit);
10
+ }
11
+ }
12
+ //#endregion
13
+ export { fieldProps, walkFields };
14
+
15
+ //# sourceMappingURL=field-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-props.js","names":[],"sources":["../../../resources/js/form/components/field-props.ts"],"sourcesContent":["import type { Node } from \"@lattice-php/lattice/core/types\";\nimport type { FieldConditions } from \"./conditions\";\n\n/**\n * The props every form-field node shares (the PHP Field base). Nodes flow through\n * the form framework loosely typed via the generic schema, so this is the typed\n * lens the shared hooks read them through. Everything is optional because the\n * lens is also applied to non-field nodes while walking the schema.\n */\nexport type FieldProps = {\n conditions?: FieldConditions | null;\n dependsOnAny?: boolean | null;\n dependsOnKeys?: string[] | null;\n disabled?: boolean | null;\n helperText?: string | null;\n hidden?: boolean | null;\n label?: string | null;\n name?: string;\n editablePrefill?: boolean | null;\n prefillRefreshOn?: string[] | null;\n prefillResetOn?: string[] | null;\n readOnly?: boolean | null;\n required?: boolean | null;\n tooltip?: string | null;\n value?: unknown;\n};\n\nexport function fieldProps(node: Node): FieldProps {\n return node.props as FieldProps;\n}\n\n/** The single schema traversal shared by the label/value and dependency-watch collectors. */\nexport function walkFields(\n nodes: Node[] | undefined,\n visit: (props: FieldProps, node: Node) => void,\n): void {\n for (const child of nodes ?? []) {\n visit(fieldProps(child), child);\n walkFields(child.schema, visit);\n }\n}\n"],"mappings":";AA2BA,SAAgB,WAAW,MAAwB;CACjD,OAAO,KAAK;AACd;;AAGA,SAAgB,WACd,OACA,OACM;CACN,KAAK,MAAM,SAAS,SAAS,CAAC,GAAG;EAC/B,MAAM,WAAW,KAAK,GAAG,KAAK;EAC9B,WAAW,MAAM,QAAQ,KAAK;CAChC;AACF"}
@@ -0,0 +1,21 @@
1
+ export type FieldScopeValue = {
2
+ row: Record<string, unknown>;
3
+ rowId: string | null;
4
+ path: string;
5
+ values: Record<string, unknown>;
6
+ identityPath: string;
7
+ getValue: (name: string) => unknown;
8
+ setValue: (name: string, value: unknown) => void;
9
+ scopedName: (name: string) => string;
10
+ errorKey: (name: string) => string;
11
+ overrideKey: (name: string) => string;
12
+ };
13
+ export declare function FieldScopeProvider({ base, index, row, onChange, children, }: {
14
+ base: string;
15
+ index: number;
16
+ row: Record<string, unknown>;
17
+ onChange: (name: string, value: unknown) => void;
18
+ children: React.ReactNode;
19
+ }): import("react").JSX.Element;
20
+ /** Null outside a row so callers can preserve top-level behavior without a wrapper. */
21
+ export declare function useFieldScope(): FieldScopeValue | null;
@@ -0,0 +1,54 @@
1
+ import { appendPath, getPath, toHtmlName } from "./form-path.js";
2
+ import { buildOverrideKey, rowIdFrom } from "./override-keys.js";
3
+ import { createContext, useContext, useMemo } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region resources/js/form/components/field-scope.tsx
6
+ var FieldScopeContext = createContext(null);
7
+ function childCollectionIdentity(base, parent) {
8
+ if (!parent) return base;
9
+ const local = base.startsWith(`${parent.path}.`) ? base.slice(parent.path.length + 1) : base;
10
+ return appendPath(parent.identityPath, local);
11
+ }
12
+ function FieldScopeProvider({ base, index, row, onChange, children }) {
13
+ const parent = useContext(FieldScopeContext);
14
+ const value = useMemo(() => {
15
+ const scopedRow = row ?? {};
16
+ const rowId = rowIdFrom(scopedRow);
17
+ const path = appendPath(base, index);
18
+ const identityCollection = childCollectionIdentity(base, parent);
19
+ const identityPath = appendPath(identityCollection, rowId ?? index);
20
+ return {
21
+ row: scopedRow,
22
+ rowId,
23
+ path,
24
+ values: parent ? {
25
+ ...parent.values,
26
+ ...scopedRow
27
+ } : scopedRow,
28
+ identityPath,
29
+ getValue: (name) => getPath(scopedRow, name),
30
+ setValue: onChange,
31
+ scopedName: (name) => toHtmlName(appendPath(path, name)),
32
+ errorKey: (name) => appendPath(path, name),
33
+ overrideKey: (name) => buildOverrideKey(identityCollection, rowId, index, name)
34
+ };
35
+ }, [
36
+ base,
37
+ index,
38
+ row,
39
+ onChange,
40
+ parent
41
+ ]);
42
+ return /* @__PURE__ */ jsx(FieldScopeContext.Provider, {
43
+ value,
44
+ children
45
+ });
46
+ }
47
+ /** Null outside a row so callers can preserve top-level behavior without a wrapper. */
48
+ function useFieldScope() {
49
+ return useContext(FieldScopeContext);
50
+ }
51
+ //#endregion
52
+ export { FieldScopeProvider, useFieldScope };
53
+
54
+ //# sourceMappingURL=field-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-scope.js","names":[],"sources":["../../../resources/js/form/components/field-scope.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport { appendPath, getPath, toHtmlName } from \"./form-path\";\nimport { buildOverrideKey, rowIdFrom } from \"./override-keys\";\n\nexport type FieldScopeValue = {\n row: Record<string, unknown>;\n rowId: string | null;\n path: string;\n values: Record<string, unknown>;\n identityPath: string;\n getValue: (name: string) => unknown;\n setValue: (name: string, value: unknown) => void;\n scopedName: (name: string) => string;\n errorKey: (name: string) => string;\n overrideKey: (name: string) => string;\n};\n\nconst FieldScopeContext = createContext<FieldScopeValue | null>(null);\n\nfunction childCollectionIdentity(base: string, parent: FieldScopeValue | null): string {\n if (!parent) {\n return base;\n }\n\n const local = base.startsWith(`${parent.path}.`) ? base.slice(parent.path.length + 1) : base;\n\n return appendPath(parent.identityPath, local);\n}\n\nexport function FieldScopeProvider({\n base,\n index,\n row,\n onChange,\n children,\n}: {\n base: string;\n index: number;\n row: Record<string, unknown>;\n onChange: (name: string, value: unknown) => void;\n children: React.ReactNode;\n}) {\n const parent = useContext(FieldScopeContext);\n\n const value = useMemo<FieldScopeValue>(() => {\n const scopedRow = row ?? {};\n const rowId = rowIdFrom(scopedRow);\n const path = appendPath(base, index);\n const identityCollection = childCollectionIdentity(base, parent);\n const identityPath = appendPath(identityCollection, rowId ?? index);\n\n return {\n row: scopedRow,\n rowId,\n path,\n values: parent ? { ...parent.values, ...scopedRow } : scopedRow,\n identityPath,\n getValue: (name) => getPath(scopedRow, name),\n setValue: onChange,\n scopedName: (name) => toHtmlName(appendPath(path, name)),\n errorKey: (name) => appendPath(path, name),\n overrideKey: (name) => buildOverrideKey(identityCollection, rowId, index, name),\n };\n }, [base, index, row, onChange, parent]);\n\n return <FieldScopeContext.Provider value={value}>{children}</FieldScopeContext.Provider>;\n}\n\n/** Null outside a row so callers can preserve top-level behavior without a wrapper. */\nexport function useFieldScope(): FieldScopeValue | null {\n return useContext(FieldScopeContext);\n}\n"],"mappings":";;;;;AAiBA,IAAM,oBAAoB,cAAsC,IAAI;AAEpE,SAAS,wBAAwB,MAAc,QAAwC;CACrF,IAAI,CAAC,QACH,OAAO;CAGT,MAAM,QAAQ,KAAK,WAAW,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,OAAO,KAAK,SAAS,CAAC,IAAI;CAExF,OAAO,WAAW,OAAO,cAAc,KAAK;AAC9C;AAEA,SAAgB,mBAAmB,EACjC,MACA,OACA,KACA,UACA,YAOC;CACD,MAAM,SAAS,WAAW,iBAAiB;CAE3C,MAAM,QAAQ,cAA+B;EAC3C,MAAM,YAAY,OAAO,CAAC;EAC1B,MAAM,QAAQ,UAAU,SAAS;EACjC,MAAM,OAAO,WAAW,MAAM,KAAK;EACnC,MAAM,qBAAqB,wBAAwB,MAAM,MAAM;EAC/D,MAAM,eAAe,WAAW,oBAAoB,SAAS,KAAK;EAElE,OAAO;GACL,KAAK;GACL;GACA;GACA,QAAQ,SAAS;IAAE,GAAG,OAAO;IAAQ,GAAG;GAAU,IAAI;GACtD;GACA,WAAW,SAAS,QAAQ,WAAW,IAAI;GAC3C,UAAU;GACV,aAAa,SAAS,WAAW,WAAW,MAAM,IAAI,CAAC;GACvD,WAAW,SAAS,WAAW,MAAM,IAAI;GACzC,cAAc,SAAS,iBAAiB,oBAAoB,OAAO,OAAO,IAAI;EAChF;CACF,GAAG;EAAC;EAAM;EAAO;EAAK;EAAU;CAAM,CAAC;CAEvC,OAAO,oBAAC,kBAAkB,UAAnB;EAAmC;EAAQ;CAAqC,CAAA;AACzF;;AAGA,SAAgB,gBAAwC;CACtD,OAAO,WAAW,iBAAiB;AACrC"}
@@ -0,0 +1,9 @@
1
+ export type BlockOption = {
2
+ type: string;
3
+ label: string;
4
+ };
5
+ export declare function BlockAddMenu({ addLabel, blocks, onSelect, }: {
6
+ addLabel: string;
7
+ blocks: BlockOption[];
8
+ onSelect: (type: string) => void;
9
+ }): import("react").JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { Icon } from "../../../icons/sprite.js";
2
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../../../core/components/dropdown-menu.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region resources/js/form/components/fields/block-add-menu.tsx
5
+ function BlockAddMenu({ addLabel, blocks, onSelect }) {
6
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
7
+ asChild: true,
8
+ children: /* @__PURE__ */ jsxs("button", {
9
+ type: "button",
10
+ "data-test": "builder-add",
11
+ className: "inline-flex items-center gap-1.5 self-start rounded-lt-sm border border-lt-border px-3 py-1.5 text-sm hover:bg-lt-accent [&_svg]:size-lt-icon-sm",
12
+ children: [/* @__PURE__ */ jsx(Icon, { name: "plus" }), addLabel]
13
+ })
14
+ }), /* @__PURE__ */ jsx(DropdownMenuContent, {
15
+ align: "start",
16
+ className: "min-w-[12rem]",
17
+ children: blocks.map((block) => /* @__PURE__ */ jsx(DropdownMenuItem, {
18
+ "data-test": `builder-add-${block.type}`,
19
+ onClick: () => onSelect(block.type),
20
+ children: block.label
21
+ }, block.type))
22
+ })] });
23
+ }
24
+ //#endregion
25
+ export { BlockAddMenu };
26
+
27
+ //# sourceMappingURL=block-add-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-add-menu.js","names":[],"sources":["../../../../resources/js/form/components/fields/block-add-menu.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@lattice-php/lattice/core/components/dropdown-menu\";\n\nexport type BlockOption = { type: string; label: string };\n\nexport function BlockAddMenu({\n addLabel,\n blocks,\n onSelect,\n}: {\n addLabel: string;\n blocks: BlockOption[];\n onSelect: (type: string) => void;\n}) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-test=\"builder-add\"\n className=\"inline-flex items-center gap-1.5 self-start rounded-lt-sm border border-lt-border px-3 py-1.5 text-sm hover:bg-lt-accent [&_svg]:size-lt-icon-sm\"\n >\n <Icon name=\"plus\" />\n {addLabel}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-[12rem]\">\n {blocks.map((block) => (\n <DropdownMenuItem\n key={block.type}\n data-test={`builder-add-${block.type}`}\n onClick={() => onSelect(block.type)}\n >\n {block.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":";;;;AAUA,SAAgB,aAAa,EAC3B,UACA,QACA,YAKC;CACD,OACE,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,qBAAD;EAAqB,SAAA;YACnB,qBAAC,UAAD;GACE,MAAK;GACL,aAAU;GACV,WAAU;aAHZ,CAKE,oBAAC,MAAD,EAAM,MAAK,OAAQ,CAAA,GAClB,QACK;;CACW,CAAA,GACrB,oBAAC,qBAAD;EAAqB,OAAM;EAAQ,WAAU;YAC1C,OAAO,KAAK,UACX,oBAAC,kBAAD;GAEE,aAAW,eAAe,MAAM;GAChC,eAAe,SAAS,MAAM,IAAI;aAEjC,MAAM;EACS,GALX,MAAM,IAKK,CACnB;CACkB,CAAA,CACT,EAAA,CAAA;AAElB"}
@@ -0,0 +1,2 @@
1
+ import { RendererComponent } from '../../../core/types';
2
+ export declare const BuilderComponent: RendererComponent<"field.builder">;
@@ -0,0 +1,124 @@
1
+ import { useT } from "../../../i18n/instance.js";
2
+ import { useFormContext } from "../context.js";
3
+ import "./repeater-rows.js";
4
+ import { appendPath, toHtmlName } from "../form-path.js";
5
+ import { FormFieldFrame } from "../base/field.js";
6
+ import { useDependentField } from "../use-dependent-field.js";
7
+ import { BlockAddMenu } from "./block-add-menu.js";
8
+ import { buildRowActions } from "./row-action-menu.js";
9
+ import { RowActions } from "./row-actions.js";
10
+ import { RowItem } from "./row-item.js";
11
+ import { TableRows, columnsFromSchema } from "./table-rows.js";
12
+ import { useFlipReorder } from "./use-flip-reorder.js";
13
+ import { useRowCollection } from "./use-row-collection.js";
14
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
+ //#region resources/js/form/components/fields/builder.tsx
16
+ var EMPTY_TEMPLATE = [];
17
+ var BuilderComponent = ({ node }) => {
18
+ const props = node.props;
19
+ const name = props.name;
20
+ const blocks = node.blocks ?? [];
21
+ const { errors } = useFormContext();
22
+ const { hidden, required } = useDependentField(node);
23
+ const { path, rows, onField, onRemove, onMove, onDuplicate, append } = useRowCollection(name, props.defaultItems ?? 0);
24
+ const { t } = useT("lattice");
25
+ const registerRow = useFlipReorder(rows.map((r) => String(r["__rowId"] ?? "")).join(","));
26
+ const atMax = props.maxItems != null && rows.length >= props.maxItems;
27
+ const atMin = props.minItems != null && rows.length <= props.minItems;
28
+ const isTable = props.layout === "table";
29
+ const blockFor = (type) => blocks.find((b) => b.type === type);
30
+ const options = blocks.map((b) => ({
31
+ type: b.type,
32
+ label: b.label
33
+ }));
34
+ if (hidden) return null;
35
+ const hiddenTypeInputs = rows.map((row, index) => /* @__PURE__ */ jsx("input", {
36
+ type: "hidden",
37
+ name: toHtmlName(appendPath(path, index, "type")),
38
+ value: String(row.type ?? "")
39
+ }, String(row["__rowId"] ?? index)));
40
+ const primary = blocks[0];
41
+ const tableRows = rows.map((row, index) => {
42
+ const block = blockFor(row.type);
43
+ const isPrimary = !!block && !!primary && block.type === primary.type;
44
+ return {
45
+ key: String(row["__rowId"] ?? index),
46
+ index,
47
+ row,
48
+ template: block?.schema ?? EMPTY_TEMPLATE,
49
+ span: !isPrimary,
50
+ heading: block?.label ?? `Unknown block: ${String(row.type)}`
51
+ };
52
+ });
53
+ return /* @__PURE__ */ jsx(FormFieldFrame, {
54
+ error: errors[path],
55
+ helperText: props.helperText ?? void 0,
56
+ tooltip: props.tooltip ?? void 0,
57
+ label: props.label ?? "",
58
+ name: path,
59
+ required,
60
+ children: /* @__PURE__ */ jsxs("div", {
61
+ className: "flex flex-col gap-3",
62
+ children: [isTable ? /* @__PURE__ */ jsxs(Fragment, { children: [hiddenTypeInputs, /* @__PURE__ */ jsx(TableRows, {
63
+ base: path,
64
+ columns: columnsFromSchema(primary?.schema ?? []),
65
+ rows: tableRows,
66
+ reorderable: props.reorderable ?? false,
67
+ removable: () => !atMin,
68
+ rowActions: props.rowActions,
69
+ onField,
70
+ onMove,
71
+ onRemove,
72
+ onDuplicate,
73
+ registerRow,
74
+ resizableColumns: props.resizableColumns === true,
75
+ resizeIndicator: props.resizeIndicator === true
76
+ })] }) : rows.map((row, index) => {
77
+ const block = blockFor(row.type);
78
+ const key = String(row["__rowId"] ?? index);
79
+ return /* @__PURE__ */ jsxs("div", {
80
+ ref: (el) => registerRow(key, el),
81
+ "data-flip-key": key,
82
+ children: [/* @__PURE__ */ jsx("input", {
83
+ type: "hidden",
84
+ name: toHtmlName(appendPath(path, index, "type")),
85
+ value: String(row.type ?? "")
86
+ }), block ? /* @__PURE__ */ jsx(RowItem, {
87
+ base: path,
88
+ index,
89
+ row,
90
+ template: block.schema ?? EMPTY_TEMPLATE,
91
+ heading: block.label,
92
+ reorderable: props.reorderable ?? false,
93
+ isFirst: index === 0,
94
+ isLast: index === rows.length - 1,
95
+ removable: !atMin,
96
+ rowActions: props.rowActions,
97
+ onField,
98
+ onRemove,
99
+ onMove,
100
+ onDuplicate
101
+ }) : /* @__PURE__ */ jsxs("div", {
102
+ "data-test": `repeater-${name}-row-${index}`,
103
+ className: "flex items-center justify-between rounded-lt border border-dashed border-lt-border p-4 text-sm text-lt-muted-fg",
104
+ children: [/* @__PURE__ */ jsxs("span", { children: ["Unknown block: ", String(row.type)] }), /* @__PURE__ */ jsx(RowActions, { actions: buildRowActions(props.rowActions, {
105
+ index,
106
+ removable: !atMin,
107
+ onRemove,
108
+ onDuplicate,
109
+ t
110
+ }) })]
111
+ })]
112
+ }, key);
113
+ }), !atMax && /* @__PURE__ */ jsx(BlockAddMenu, {
114
+ addLabel: props.addLabel ?? "Add",
115
+ blocks: options,
116
+ onSelect: (type) => append({ type })
117
+ })]
118
+ })
119
+ });
120
+ };
121
+ //#endregion
122
+ export { BuilderComponent };
123
+
124
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","names":[],"sources":["../../../../resources/js/form/components/fields/builder.tsx"],"sourcesContent":["import type { Node, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { useFormContext } from \"../context\";\nimport { appendPath, toHtmlName } from \"../form-path\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { BlockAddMenu, type BlockOption } from \"./block-add-menu\";\nimport { ROW_ID_KEY } from \"./repeater-rows\";\nimport { buildRowActions } from \"./row-action-menu\";\nimport { RowActions } from \"./row-actions\";\nimport { RowItem } from \"./row-item\";\nimport { columnsFromSchema, TableRows } from \"./table-rows\";\nimport { useFlipReorder } from \"./use-flip-reorder\";\nimport { useRowCollection } from \"./use-row-collection\";\n\ntype Block = { type: string; label: string; schema: Node[] };\n\nconst EMPTY_TEMPLATE: Node[] = [];\n\nexport const BuilderComponent: RendererComponent<\"field.builder\"> = ({ node }) => {\n const props = node.props;\n const name = props.name;\n const blocks = ((node as unknown as { blocks?: Block[] }).blocks ?? []) as Block[];\n const { errors } = useFormContext();\n const { hidden, required } = useDependentField(node);\n const { path, rows, onField, onRemove, onMove, onDuplicate, append } = useRowCollection(\n name,\n props.defaultItems ?? 0,\n );\n const { t } = useT(\"lattice\");\n const orderSignature = rows.map((r) => String(r[ROW_ID_KEY] ?? \"\")).join(\",\");\n const registerRow = useFlipReorder(orderSignature);\n const atMax = props.maxItems != null && rows.length >= props.maxItems;\n const atMin = props.minItems != null && rows.length <= props.minItems;\n const isTable = props.layout === \"table\";\n\n const blockFor = (type: unknown): Block | undefined => blocks.find((b) => b.type === type);\n const options: BlockOption[] = blocks.map((b) => ({\n type: b.type,\n label: b.label,\n }));\n\n if (hidden) {\n return null;\n }\n\n const hiddenTypeInputs = rows.map((row, index) => (\n <input\n key={String(row[ROW_ID_KEY] ?? index)}\n type=\"hidden\"\n name={toHtmlName(appendPath(path, index, \"type\"))}\n value={String(row.type ?? \"\")}\n />\n ));\n\n const primary = blocks[0];\n const tableRows = rows.map((row, index) => {\n const block = blockFor(row.type);\n const isPrimary = !!block && !!primary && block.type === primary.type;\n return {\n key: String(row[ROW_ID_KEY] ?? index),\n index,\n row,\n template: block?.schema ?? EMPTY_TEMPLATE,\n span: !isPrimary,\n heading: block?.label ?? `Unknown block: ${String(row.type)}`,\n };\n });\n\n return (\n <FormFieldFrame\n error={errors[path]}\n helperText={props.helperText ?? undefined}\n tooltip={props.tooltip ?? undefined}\n label={props.label ?? \"\"}\n name={path}\n required={required}\n >\n <div className=\"flex flex-col gap-3\">\n {isTable ? (\n <>\n {hiddenTypeInputs}\n <TableRows\n base={path}\n columns={columnsFromSchema(primary?.schema ?? [])}\n rows={tableRows}\n reorderable={props.reorderable ?? false}\n removable={() => !atMin}\n rowActions={props.rowActions}\n onField={onField}\n onMove={onMove}\n onRemove={onRemove}\n onDuplicate={onDuplicate}\n registerRow={registerRow}\n resizableColumns={props.resizableColumns === true}\n resizeIndicator={props.resizeIndicator === true}\n />\n </>\n ) : (\n rows.map((row, index) => {\n const block = blockFor(row.type);\n const key = String(row[ROW_ID_KEY] ?? index);\n\n return (\n <div key={key} ref={(el) => registerRow(key, el)} data-flip-key={key}>\n <input\n type=\"hidden\"\n name={toHtmlName(appendPath(path, index, \"type\"))}\n value={String(row.type ?? \"\")}\n />\n {block ? (\n <RowItem\n base={path}\n index={index}\n row={row}\n template={block.schema ?? EMPTY_TEMPLATE}\n heading={block.label}\n reorderable={props.reorderable ?? false}\n isFirst={index === 0}\n isLast={index === rows.length - 1}\n removable={!atMin}\n rowActions={props.rowActions}\n onField={onField}\n onRemove={onRemove}\n onMove={onMove}\n onDuplicate={onDuplicate}\n />\n ) : (\n <div\n data-test={`repeater-${name}-row-${index}`}\n className=\"flex items-center justify-between rounded-lt border border-dashed border-lt-border p-4 text-sm text-lt-muted-fg\"\n >\n <span>Unknown block: {String(row.type)}</span>\n <RowActions\n actions={buildRowActions(props.rowActions, {\n index,\n removable: !atMin,\n onRemove,\n onDuplicate,\n t,\n })}\n />\n </div>\n )}\n </div>\n );\n })\n )}\n\n {!atMax && (\n <BlockAddMenu\n addLabel={props.addLabel ?? \"Add\"}\n blocks={options}\n onSelect={(type) => append({ type })}\n />\n )}\n </div>\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,IAAM,iBAAyB,CAAC;AAEhC,IAAa,oBAAwD,EAAE,WAAW;CAChF,MAAM,QAAQ,KAAK;CACnB,MAAM,OAAO,MAAM;CACnB,MAAM,SAAW,KAAyC,UAAU,CAAC;CACrE,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,EAAE,QAAQ,aAAa,kBAAkB,IAAI;CACnD,MAAM,EAAE,MAAM,MAAM,SAAS,UAAU,QAAQ,aAAa,WAAW,iBACrE,MACA,MAAM,gBAAgB,CACxB;CACA,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,MAAM,cAAc,eADG,KAAK,KAAK,MAAM,OAAO,EAAA,cAAiB,EAAE,CAAC,EAAE,KAAK,GACtC,CAAc;CACjD,MAAM,QAAQ,MAAM,YAAY,QAAQ,KAAK,UAAU,MAAM;CAC7D,MAAM,QAAQ,MAAM,YAAY,QAAQ,KAAK,UAAU,MAAM;CAC7D,MAAM,UAAU,MAAM,WAAW;CAEjC,MAAM,YAAY,SAAqC,OAAO,MAAM,MAAM,EAAE,SAAS,IAAI;CACzF,MAAM,UAAyB,OAAO,KAAK,OAAO;EAChD,MAAM,EAAE;EACR,OAAO,EAAE;CACX,EAAE;CAEF,IAAI,QACF,OAAO;CAGT,MAAM,mBAAmB,KAAK,KAAK,KAAK,UACtC,oBAAC,SAAD;EAEE,MAAK;EACL,MAAM,WAAW,WAAW,MAAM,OAAO,MAAM,CAAC;EAChD,OAAO,OAAO,IAAI,QAAQ,EAAE;CAC7B,GAJM,OAAO,IAAA,cAAmB,KAAK,CAIrC,CACF;CAED,MAAM,UAAU,OAAO;CACvB,MAAM,YAAY,KAAK,KAAK,KAAK,UAAU;EACzC,MAAM,QAAQ,SAAS,IAAI,IAAI;EAC/B,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,MAAM,SAAS,QAAQ;EACjE,OAAO;GACL,KAAK,OAAO,IAAA,cAAmB,KAAK;GACpC;GACA;GACA,UAAU,OAAO,UAAU;GAC3B,MAAM,CAAC;GACP,SAAS,OAAO,SAAS,kBAAkB,OAAO,IAAI,IAAI;EAC5D;CACF,CAAC;CAED,OACE,oBAAC,gBAAD;EACE,OAAO,OAAO;EACd,YAAY,MAAM,cAAc,KAAA;EAChC,SAAS,MAAM,WAAW,KAAA;EAC1B,OAAO,MAAM,SAAS;EACtB,MAAM;EACI;YAEV,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,UACC,qBAAA,UAAA,EAAA,UAAA,CACG,kBACD,oBAAC,WAAD;IACE,MAAM;IACN,SAAS,kBAAkB,SAAS,UAAU,CAAC,CAAC;IAChD,MAAM;IACN,aAAa,MAAM,eAAe;IAClC,iBAAiB,CAAC;IAClB,YAAY,MAAM;IACT;IACD;IACE;IACG;IACA;IACb,kBAAkB,MAAM,qBAAqB;IAC7C,iBAAiB,MAAM,oBAAoB;GAC5C,CAAA,CACD,EAAA,CAAA,IAEF,KAAK,KAAK,KAAK,UAAU;IACvB,MAAM,QAAQ,SAAS,IAAI,IAAI;IAC/B,MAAM,MAAM,OAAO,IAAA,cAAmB,KAAK;IAE3C,OACE,qBAAC,OAAD;KAAe,MAAM,OAAO,YAAY,KAAK,EAAE;KAAG,iBAAe;eAAjE,CACE,oBAAC,SAAD;MACE,MAAK;MACL,MAAM,WAAW,WAAW,MAAM,OAAO,MAAM,CAAC;MAChD,OAAO,OAAO,IAAI,QAAQ,EAAE;KAC7B,CAAA,GACA,QACC,oBAAC,SAAD;MACE,MAAM;MACC;MACF;MACL,UAAU,MAAM,UAAU;MAC1B,SAAS,MAAM;MACf,aAAa,MAAM,eAAe;MAClC,SAAS,UAAU;MACnB,QAAQ,UAAU,KAAK,SAAS;MAChC,WAAW,CAAC;MACZ,YAAY,MAAM;MACT;MACC;MACF;MACK;KACd,CAAA,IAED,qBAAC,OAAD;MACE,aAAW,YAAY,KAAK,OAAO;MACnC,WAAU;gBAFZ,CAIE,qBAAC,QAAD,EAAA,UAAA,CAAM,mBAAgB,OAAO,IAAI,IAAI,CAAQ,EAAA,CAAA,GAC7C,oBAAC,YAAD,EACE,SAAS,gBAAgB,MAAM,YAAY;OACzC;OACA,WAAW,CAAC;OACZ;OACA;OACA;MACF,CAAC,EACF,CAAA,CACE;OAEJ;OAxCK,GAwCL;GAET,CAAC,GAGF,CAAC,SACA,oBAAC,cAAD;IACE,UAAU,MAAM,YAAY;IAC5B,QAAQ;IACR,WAAW,SAAS,OAAO,EAAE,KAAK,CAAC;GACpC,CAAA,CAEA;;CACS,CAAA;AAEpB"}
@@ -1,16 +1,2 @@
1
- import { RendererComponent } from '../../../../../core/types';
2
- declare module '../../../../../core/types' {
3
- interface ComponentProps {
4
- "form.checkbox": {
5
- checked?: boolean;
6
- conditions?: unknown;
7
- disabled?: boolean;
8
- hidden?: boolean;
9
- label?: string;
10
- name?: string;
11
- required?: boolean;
12
- tabIndex?: number;
13
- };
14
- }
15
- }
16
- export declare const CheckboxComponent: RendererComponent<"form.checkbox">;
1
+ import { RendererComponent } from '../../../core/types';
2
+ export declare const CheckboxComponent: RendererComponent<"field.checkbox">;
@@ -1,49 +1,47 @@
1
- import { getOptionalNumberProp, getStringProp } from "../../../core/props.js";
2
- import { useFormContext } from "../context.js";
3
- import { useFormValue, useSetFormValue } from "../values.js";
4
- import { Checkbox } from "../base/checkbox.js";
1
+ import { testIdentity } from "../../../core/test-id.js";
2
+ import { useFieldScope } from "../field-scope.js";
3
+ import { useFormValue } from "../values.js";
4
+ import { Checkbox } from "../../../core/components/checkbox.js";
5
+ import { toBoolean } from "../conditions.js";
5
6
  import { Label } from "../base/label.js";
6
7
  import { useDependentField } from "../use-dependent-field.js";
7
- import { useEffect } from "react";
8
+ import { useFieldCommit } from "../use-field-commit.js";
9
+ import { useSeedDefault } from "../use-seed-default.js";
8
10
  import { jsx, jsxs } from "react/jsx-runtime";
9
11
  //#region resources/js/form/components/fields/checkbox.tsx
10
- function isTruthy(value) {
11
- return value === true || value === "true" || value === "1" || value === 1;
12
- }
13
12
  var CheckboxComponent = ({ node }) => {
14
- const { clearErrors, precognitive, validate } = useFormContext();
15
- const { hidden, readonly, disabled } = useDependentField(node);
16
- const name = getStringProp(node.props, "name");
17
- const setValue = useSetFormValue();
18
- const storedValue = useFormValue(name);
19
- const checked = storedValue !== void 0 ? isTruthy(storedValue) : Boolean(node.props?.checked);
20
- useEffect(() => {
21
- if (storedValue === void 0) setValue(name, Boolean(node.props?.checked));
22
- }, [
23
- name,
24
- node.props?.checked,
25
- setValue,
26
- storedValue
27
- ]);
13
+ const { hidden, readOnly, disabled } = useDependentField(node);
14
+ const localName = node.props.name;
15
+ const scope = useFieldScope();
16
+ const name = scope ? scope.scopedName(localName) : localName;
17
+ const globalValue = useFormValue(localName);
18
+ const storedValue = scope ? scope.getValue(localName) : globalValue;
19
+ const { commit } = useFieldCommit();
20
+ const defaultChecked = toBoolean(node.props.value);
21
+ const checked = storedValue !== void 0 ? toBoolean(storedValue) : defaultChecked;
22
+ useSeedDefault(localName, defaultChecked);
28
23
  if (hidden) return null;
29
- return /* @__PURE__ */ jsxs("div", {
24
+ return /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
30
25
  className: "flex items-center space-x-3",
31
26
  children: [/* @__PURE__ */ jsx(Checkbox, {
27
+ autoFocus: node.props.autoFocus ?? void 0,
32
28
  checked,
33
- disabled: readonly || disabled,
29
+ "data-test": testIdentity(localName),
30
+ disabled: readOnly || disabled,
34
31
  id: name,
35
32
  name,
36
33
  onCheckedChange: (next) => {
37
- setValue(name, next === true);
38
- if (precognitive) window.requestAnimationFrame(() => validate(name));
39
- else clearErrors(name);
34
+ commit(localName, next === true);
40
35
  },
41
- tabIndex: getOptionalNumberProp(node.props, "tabIndex")
36
+ tabIndex: node.props.tabIndex ?? void 0
42
37
  }), /* @__PURE__ */ jsx(Label, {
43
38
  htmlFor: name,
44
- children: getStringProp(node.props, "label")
39
+ children: node.props.label
45
40
  })]
46
- });
41
+ }), node.props.helperText && /* @__PURE__ */ jsx("p", {
42
+ className: "mt-1 pl-7 text-sm text-lt-muted-fg",
43
+ children: node.props.helperText
44
+ })] });
47
45
  };
48
46
  //#endregion
49
47
  export { CheckboxComponent };
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","names":[],"sources":["../../../../resources/js/form/components/fields/checkbox.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { Checkbox } from \"../base/checkbox\";\nimport { Label } from \"../base/label\";\nimport { useFormContext } from \"../context\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useFormValue, useSetFormValue } from \"../values\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.checkbox\": {\n checked?: boolean;\n conditions?: unknown;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n name?: string;\n required?: boolean;\n tabIndex?: number;\n };\n }\n}\n\nfunction isTruthy(value: unknown): boolean {\n return value === true || value === \"true\" || value === \"1\" || value === 1;\n}\n\nexport const CheckboxComponent: RendererComponent<\"form.checkbox\"> = ({ node }) => {\n const { clearErrors, precognitive, validate } = useFormContext();\n const { hidden, readonly, disabled } = useDependentField(node);\n const name = getStringProp(node.props, \"name\");\n const setValue = useSetFormValue();\n const storedValue = useFormValue(name);\n const checked = storedValue !== undefined ? isTruthy(storedValue) : Boolean(node.props?.checked);\n\n useEffect(() => {\n if (storedValue === undefined) {\n setValue(name, Boolean(node.props?.checked));\n }\n }, [name, node.props?.checked, setValue, storedValue]);\n\n if (hidden) {\n return null;\n }\n\n return (\n <div className=\"flex items-center space-x-3\">\n <Checkbox\n checked={checked}\n disabled={readonly || disabled}\n id={name}\n name={name}\n onCheckedChange={(next) => {\n const value = next === true;\n setValue(name, value);\n if (precognitive) {\n window.requestAnimationFrame(() => validate(name));\n } else {\n clearErrors(name);\n }\n }}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n />\n <Label htmlFor={name}>{getStringProp(node.props, \"label\")}</Label>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAwBA,SAAS,SAAS,OAAyB;CACzC,OAAO,UAAU,QAAQ,UAAU,UAAU,UAAU,OAAO,UAAU;AAC1E;AAEA,IAAa,qBAAyD,EAAE,WAAW;CACjF,MAAM,EAAE,aAAa,cAAc,aAAa,eAAe;CAC/D,MAAM,EAAE,QAAQ,UAAU,aAAa,kBAAkB,IAAI;CAC7D,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,WAAW,gBAAgB;CACjC,MAAM,cAAc,aAAa,IAAI;CACrC,MAAM,UAAU,gBAAgB,KAAA,IAAY,SAAS,WAAW,IAAI,QAAQ,KAAK,OAAO,OAAO;CAE/F,gBAAgB;EACd,IAAI,gBAAgB,KAAA,GAClB,SAAS,MAAM,QAAQ,KAAK,OAAO,OAAO,CAAC;CAE/C,GAAG;EAAC;EAAM,KAAK,OAAO;EAAS;EAAU;CAAW,CAAC;CAErD,IAAI,QACF,OAAO;CAGT,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,UAAD;GACW;GACT,UAAU,YAAY;GACtB,IAAI;GACE;GACN,kBAAkB,SAAS;IAEzB,SAAS,MADK,SAAS,IACH;IACpB,IAAI,cACF,OAAO,4BAA4B,SAAS,IAAI,CAAC;SAEjD,YAAY,IAAI;GAEpB;GACA,UAAU,sBAAsB,KAAK,OAAO,UAAU;EACvD,CAAA,GACD,oBAAC,OAAD;GAAO,SAAS;aAAO,cAAc,KAAK,OAAO,OAAO;EAAS,CAAA,CAC9D;;AAET"}
1
+ {"version":3,"file":"checkbox.js","names":[],"sources":["../../../../resources/js/form/components/fields/checkbox.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { testIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport { Checkbox } from \"@lattice-php/lattice/core/components/checkbox\";\nimport { Label } from \"../base/label\";\nimport { toBoolean } from \"../conditions\";\nimport { useFieldScope } from \"../field-scope\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useFieldCommit } from \"../use-field-commit\";\nimport { useSeedDefault } from \"../use-seed-default\";\nimport { useFormValue } from \"../values\";\n\nexport const CheckboxComponent: RendererComponent<\"field.checkbox\"> = ({ node }) => {\n const { hidden, readOnly, disabled } = useDependentField(node);\n const localName = node.props.name;\n const scope = useFieldScope();\n const name = scope ? scope.scopedName(localName) : localName;\n const globalValue = useFormValue(localName);\n const storedValue = scope ? scope.getValue(localName) : globalValue;\n const { commit } = useFieldCommit();\n const defaultChecked = toBoolean(node.props.value);\n const checked = storedValue !== undefined ? toBoolean(storedValue) : defaultChecked;\n\n useSeedDefault(localName, defaultChecked);\n\n if (hidden) {\n return null;\n }\n\n return (\n <div>\n <div className=\"flex items-center space-x-3\">\n <Checkbox\n autoFocus={node.props.autoFocus ?? undefined}\n checked={checked}\n data-test={testIdentity(localName)}\n disabled={readOnly || disabled}\n id={name}\n name={name}\n onCheckedChange={(next) => {\n commit(localName, next === true);\n }}\n tabIndex={node.props.tabIndex ?? undefined}\n />\n <Label htmlFor={name}>{node.props.label}</Label>\n </div>\n {node.props.helperText && (\n <p className=\"mt-1 pl-7 text-sm text-lt-muted-fg\">{node.props.helperText}</p>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,qBAA0D,EAAE,WAAW;CAClF,MAAM,EAAE,QAAQ,UAAU,aAAa,kBAAkB,IAAI;CAC7D,MAAM,YAAY,KAAK,MAAM;CAC7B,MAAM,QAAQ,cAAc;CAC5B,MAAM,OAAO,QAAQ,MAAM,WAAW,SAAS,IAAI;CACnD,MAAM,cAAc,aAAa,SAAS;CAC1C,MAAM,cAAc,QAAQ,MAAM,SAAS,SAAS,IAAI;CACxD,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,iBAAiB,UAAU,KAAK,MAAM,KAAK;CACjD,MAAM,UAAU,gBAAgB,KAAA,IAAY,UAAU,WAAW,IAAI;CAErE,eAAe,WAAW,cAAc;CAExC,IAAI,QACF,OAAO;CAGT,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,UAAD;GACE,WAAW,KAAK,MAAM,aAAa,KAAA;GAC1B;GACT,aAAW,aAAa,SAAS;GACjC,UAAU,YAAY;GACtB,IAAI;GACE;GACN,kBAAkB,SAAS;IACzB,OAAO,WAAW,SAAS,IAAI;GACjC;GACA,UAAU,KAAK,MAAM,YAAY,KAAA;EAClC,CAAA,GACD,oBAAC,OAAD;GAAO,SAAS;aAAO,KAAK,MAAM;EAAa,CAAA,CAC5C;KACJ,KAAK,MAAM,cACV,oBAAC,KAAD;EAAG,WAAU;YAAsC,KAAK,MAAM;CAAc,CAAA,CAE3E,EAAA,CAAA;AAET"}
@@ -1,14 +1,2 @@
1
- import { Option } from '../../../../../core/props';
2
- import { RendererComponent } from '../../../../../core/types';
3
- declare module '../../../../../core/types' {
4
- interface ComponentProps {
5
- "form.choice": {
6
- label?: string;
7
- name?: string;
8
- options?: Option[];
9
- tabIndex?: number;
10
- value?: string;
11
- };
12
- }
13
- }
14
- export declare const ChoiceComponent: RendererComponent<"form.choice">;
1
+ import { RendererComponent } from '../../../core/types';
2
+ export declare const ChoiceComponent: RendererComponent<"field.choice">;
@@ -1,32 +1,24 @@
1
- import { getOptionalNumberProp, getOptions, getStringProp } from "../../../core/props.js";
2
- import { SegmentedPills } from "../../../core/components/segmented-pills.js";
3
1
  import { useResolvedNode } from "../resolved-nodes.js";
4
- import { useFormValue, useSetFormValue } from "../values.js";
2
+ import { SegmentedPills } from "../../../core/components/segmented-pills.js";
5
3
  import { FormFieldFrame } from "../base/field.js";
4
+ import { useSeedDefault } from "../use-seed-default.js";
6
5
  import { useControlledField } from "../use-controlled-field.js";
7
- import { useEffect, useMemo } from "react";
6
+ import { useMemo } from "react";
8
7
  import { jsx, jsxs } from "react/jsx-runtime";
9
8
  //#region resources/js/form/components/fields/choice.tsx
10
9
  var ChoiceComponent = ({ node }) => {
11
10
  const resolvedNode = useResolvedNode(node);
12
- const { name, value, error, hidden, required, readonly, disabled, commit } = useControlledField(node);
13
- const storedValue = useFormValue(name);
14
- const setValue = useSetFormValue();
15
- const options = useMemo(() => getOptions(resolvedNode.props), [resolvedNode.props]);
11
+ const { localName, name, testId, value, error, hidden, required, readOnly, disabled, commit } = useControlledField(node);
12
+ const options = useMemo(() => resolvedNode.props.options ?? [], [resolvedNode.props]);
16
13
  const fallbackValue = options[0]?.value ?? "";
17
14
  const selected = value || fallbackValue;
18
- useEffect(() => {
19
- if (storedValue === void 0 && selected) setValue(name, selected);
20
- }, [
21
- name,
22
- storedValue,
23
- selected,
24
- setValue
25
- ]);
15
+ useSeedDefault(localName, selected || void 0);
26
16
  if (hidden || options.length === 0) return null;
27
17
  return /* @__PURE__ */ jsxs(FormFieldFrame, {
28
18
  error,
29
- label: getStringProp(node.props, "label"),
19
+ helperText: node.props.helperText ?? void 0,
20
+ tooltip: node.props.tooltip ?? void 0,
21
+ label: node.props.label ?? "",
30
22
  name,
31
23
  required,
32
24
  children: [/* @__PURE__ */ jsx("input", {
@@ -34,11 +26,13 @@ var ChoiceComponent = ({ node }) => {
34
26
  type: "hidden",
35
27
  value: selected
36
28
  }), /* @__PURE__ */ jsx(SegmentedPills, {
37
- ariaLabel: getStringProp(node.props, "label"),
38
- disabled: readonly || disabled,
29
+ ariaLabel: node.props.label ?? void 0,
30
+ autoFocus: node.props.autoFocus ?? void 0,
31
+ disabled: readOnly || disabled,
32
+ name: testId,
39
33
  onSelect: commit,
40
34
  options,
41
- tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
35
+ tabIndex: node.props.tabIndex ?? void 0,
42
36
  value: selected
43
37
  })]
44
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"choice.js","names":[],"sources":["../../../../resources/js/form/components/fields/choice.tsx"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport {\n type Option,\n getOptionalNumberProp,\n getOptions,\n getStringProp,\n} from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { SegmentedPills } from \"@lattice/lattice/core/components/segmented-pills\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { useControlledField } from \"../use-controlled-field\";\nimport { useResolvedNode } from \"../resolved-nodes\";\nimport { useFormValue, useSetFormValue } from \"../values\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.choice\": {\n label?: string;\n name?: string;\n options?: Option[];\n tabIndex?: number;\n value?: string;\n };\n }\n}\n\nexport const ChoiceComponent: RendererComponent<\"form.choice\"> = ({ node }) => {\n const resolvedNode = useResolvedNode(node);\n const { name, value, error, hidden, required, readonly, disabled, commit } =\n useControlledField(node);\n const storedValue = useFormValue(name);\n const setValue = useSetFormValue();\n const options = useMemo(() => getOptions(resolvedNode.props), [resolvedNode.props]);\n const fallbackValue = options[0]?.value ?? \"\";\n const selected = value || fallbackValue;\n\n // Seed the store with the default selection so dependent fields and the\n // submitted payload reflect it before the user interacts.\n useEffect(() => {\n if (storedValue === undefined && selected) {\n setValue(name, selected);\n }\n }, [name, storedValue, selected, setValue]);\n\n if (hidden || options.length === 0) {\n return null;\n }\n\n return (\n <FormFieldFrame\n error={error}\n label={getStringProp(node.props, \"label\")}\n name={name}\n required={required}\n >\n <input name={name} type=\"hidden\" value={selected} />\n <SegmentedPills\n ariaLabel={getStringProp(node.props, \"label\")}\n disabled={readonly || disabled}\n onSelect={commit}\n options={options}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n value={selected}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;;;;AA0BA,IAAa,mBAAqD,EAAE,WAAW;CAC7E,MAAM,eAAe,gBAAgB,IAAI;CACzC,MAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WAChE,mBAAmB,IAAI;CACzB,MAAM,cAAc,aAAa,IAAI;CACrC,MAAM,WAAW,gBAAgB;CACjC,MAAM,UAAU,cAAc,WAAW,aAAa,KAAK,GAAG,CAAC,aAAa,KAAK,CAAC;CAClF,MAAM,gBAAgB,QAAQ,IAAI,SAAS;CAC3C,MAAM,WAAW,SAAS;CAI1B,gBAAgB;EACd,IAAI,gBAAgB,KAAA,KAAa,UAC/B,SAAS,MAAM,QAAQ;CAE3B,GAAG;EAAC;EAAM;EAAa;EAAU;CAAQ,CAAC;CAE1C,IAAI,UAAU,QAAQ,WAAW,GAC/B,OAAO;CAGT,OACE,qBAAC,gBAAD;EACS;EACP,OAAO,cAAc,KAAK,OAAO,OAAO;EAClC;EACI;YAJZ,CAME,oBAAC,SAAD;GAAa;GAAM,MAAK;GAAS,OAAO;EAAW,CAAA,GACnD,oBAAC,gBAAD;GACE,WAAW,cAAc,KAAK,OAAO,OAAO;GAC5C,UAAU,YAAY;GACtB,UAAU;GACD;GACT,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACtD,OAAO;EACR,CAAA,CACa;;AAEpB"}
1
+ {"version":3,"file":"choice.js","names":[],"sources":["../../../../resources/js/form/components/fields/choice.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { Option, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { SegmentedPills } from \"@lattice-php/lattice/core/components/segmented-pills\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { useControlledField } from \"../use-controlled-field\";\nimport { useResolvedNode } from \"../resolved-nodes\";\nimport { useSeedDefault } from \"../use-seed-default\";\n\nexport const ChoiceComponent: RendererComponent<\"field.choice\"> = ({ node }) => {\n const resolvedNode = useResolvedNode(node);\n const { localName, name, testId, value, error, hidden, required, readOnly, disabled, commit } =\n useControlledField(node);\n const options = useMemo(\n () => (resolvedNode.props as { options?: Option[] }).options ?? [],\n [resolvedNode.props],\n );\n const fallbackValue = options[0]?.value ?? \"\";\n const selected = value || fallbackValue;\n\n useSeedDefault(localName, selected || undefined);\n\n if (hidden || options.length === 0) {\n return null;\n }\n\n return (\n <FormFieldFrame\n error={error}\n helperText={node.props.helperText ?? undefined}\n tooltip={node.props.tooltip ?? undefined}\n label={node.props.label ?? \"\"}\n name={name}\n required={required}\n >\n <input name={name} type=\"hidden\" value={selected} />\n <SegmentedPills\n ariaLabel={node.props.label ?? undefined}\n autoFocus={node.props.autoFocus ?? undefined}\n disabled={readOnly || disabled}\n name={testId}\n onSelect={commit}\n options={options}\n tabIndex={node.props.tabIndex ?? undefined}\n value={selected}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;;;AAQA,IAAa,mBAAsD,EAAE,WAAW;CAC9E,MAAM,eAAe,gBAAgB,IAAI;CACzC,MAAM,EAAE,WAAW,MAAM,QAAQ,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WACnF,mBAAmB,IAAI;CACzB,MAAM,UAAU,cACP,aAAa,MAAiC,WAAW,CAAC,GACjE,CAAC,aAAa,KAAK,CACrB;CACA,MAAM,gBAAgB,QAAQ,IAAI,SAAS;CAC3C,MAAM,WAAW,SAAS;CAE1B,eAAe,WAAW,YAAY,KAAA,CAAS;CAE/C,IAAI,UAAU,QAAQ,WAAW,GAC/B,OAAO;CAGT,OACE,qBAAC,gBAAD;EACS;EACP,YAAY,KAAK,MAAM,cAAc,KAAA;EACrC,SAAS,KAAK,MAAM,WAAW,KAAA;EAC/B,OAAO,KAAK,MAAM,SAAS;EACrB;EACI;YANZ,CAQE,oBAAC,SAAD;GAAa;GAAM,MAAK;GAAS,OAAO;EAAW,CAAA,GACnD,oBAAC,gBAAD;GACE,WAAW,KAAK,MAAM,SAAS,KAAA;GAC/B,WAAW,KAAK,MAAM,aAAa,KAAA;GACnC,UAAU,YAAY;GACtB,MAAM;GACN,UAAU;GACD;GACT,UAAU,KAAK,MAAM,YAAY,KAAA;GACjC,OAAO;EACR,CAAA,CACa;;AAEpB"}
@@ -1,20 +1,2 @@
1
- import { RendererComponent } from '../../../../../core/types';
2
- declare module '../../../../../core/types' {
3
- interface ComponentProps {
4
- "form.date-input": {
5
- autoFocus?: boolean;
6
- conditions?: unknown;
7
- disabled?: boolean;
8
- hidden?: boolean;
9
- label?: string;
10
- max?: string;
11
- min?: string;
12
- name?: string;
13
- readonly?: boolean;
14
- required?: boolean;
15
- tabIndex?: number;
16
- value?: string;
17
- };
18
- }
19
- }
20
- export declare const DateInputComponent: RendererComponent<"form.date-input">;
1
+ import { RendererComponent } from '../../../core/types';
2
+ export declare const DateInputComponent: RendererComponent<"field.date-input">;
@@ -1,27 +1,23 @@
1
- import { getBooleanProp, getOptionalNumberProp, getStringProp } from "../../../core/props.js";
2
- import { FormFieldFrame } from "../base/field.js";
3
- import { useControlledField } from "../use-controlled-field.js";
4
1
  import { Input } from "../base/input.js";
2
+ import { SimpleField } from "./simple-field.js";
5
3
  import { jsx } from "react/jsx-runtime";
6
4
  //#region resources/js/form/components/fields/date-input.tsx
7
5
  var DateInputComponent = ({ node }) => {
8
- const { name, value, error, hidden, required, readonly, disabled, commit } = useControlledField(node);
9
- if (hidden) return null;
10
- return /* @__PURE__ */ jsx(FormFieldFrame, {
11
- error,
12
- label: getStringProp(node.props, "label"),
13
- name,
14
- required,
15
- children: /* @__PURE__ */ jsx(Input, {
16
- autoFocus: getBooleanProp(node.props, "autoFocus"),
6
+ const props = node.props;
7
+ return /* @__PURE__ */ jsx(SimpleField, {
8
+ node,
9
+ label: props.label ?? "",
10
+ children: ({ name, testId, value, readOnly, disabled, commit }) => /* @__PURE__ */ jsx(Input, {
11
+ autoFocus: props.autoFocus ?? false,
12
+ "data-test": testId,
17
13
  disabled,
18
14
  id: name,
19
- max: getStringProp(node.props, "max") || void 0,
20
- min: getStringProp(node.props, "min") || void 0,
15
+ max: props.max || void 0,
16
+ min: props.min || void 0,
21
17
  name,
22
18
  onChange: (event) => commit(event.target.value),
23
- readOnly: readonly,
24
- tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
19
+ readOnly,
20
+ tabIndex: props.tabIndex ?? void 0,
25
21
  type: "date",
26
22
  value
27
23
  })