@sealcode/sealgen 0.18.10 → 0.19.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 (378) hide show
  1. package/.eslintrc.cjs +7 -2
  2. package/.xunit +74 -69
  3. package/@types/add-crud.d.sync-conflict-20250918-184311-TFDLWFG.ts +1 -0
  4. package/@types/builders/colors-builder.d.sync-conflict-20250918-184323-TFDLWFG.ts +10 -0
  5. package/@types/builders/colors-builder.d.ts +1 -1
  6. package/@types/builders/fonts-builder.d.sync-conflict-20250918-184322-TFDLWFG.ts +7 -0
  7. package/@types/builders/fonts-builder.d.ts +1 -1
  8. package/@types/controllers/table-add-button.d.ts +6 -0
  9. package/@types/controllers/table-add-button.stimulus.d.ts +6 -0
  10. package/@types/crud-field-snippets.d.sync-conflict-20250918-184323-TFDLWFG.ts +1 -0
  11. package/@types/crud-field-snippets.d.ts +1 -3
  12. package/@types/forms/controls/array.d.sync-conflict-20250918-184306-TFDLWFG.ts +33 -0
  13. package/@types/forms/controls/array.d.ts +1 -3
  14. package/@types/forms/controls/array.sync-conflict-20250918-222045-TFDLWFG.d.ts +33 -0
  15. package/@types/forms/controls/autocomplete.d.sync-conflict-20250918-222042-TFDLWFG.ts +22 -0
  16. package/@types/forms/controls/autocomplete.d.ts +1 -1
  17. package/@types/forms/controls/checkbox-group.d.sync-conflict-20250918-184319-TFDLWFG.ts +21 -0
  18. package/@types/forms/controls/checkbox-group.d.ts +3 -3
  19. package/@types/forms/controls/checkboxed-list-input.d.sync-conflict-20250918-184323-TFDLWFG.ts +21 -0
  20. package/@types/forms/controls/checkboxed-list-input.d.ts +3 -3
  21. package/@types/forms/controls/controls.d.ts +2 -2
  22. package/@types/forms/controls/derived-frame.d.sync-conflict-20250918-184314-TFDLWFG.ts +19 -0
  23. package/@types/forms/controls/derived-frame.d.ts +0 -2
  24. package/@types/forms/controls/dropdown.d.sync-conflict-20250918-222044-TFDLWFG.ts +30 -0
  25. package/@types/forms/controls/dropdown.d.ts +1 -1
  26. package/@types/forms/controls/file.d.sync-conflict-20250918-222045-TFDLWFG.ts +13 -0
  27. package/@types/forms/controls/file.d.ts +1 -2
  28. package/@types/forms/controls/form-control.d.sync-conflict-20250918-184322-TFDLWFG.ts +19 -0
  29. package/@types/forms/controls/form-control.d.sync-conflict-20250918-222046-TFDLWFG.ts +19 -0
  30. package/@types/forms/controls/form-control.d.ts +7 -4
  31. package/@types/forms/controls/image.d.ts +19 -0
  32. package/@types/forms/controls/image.test.d.ts +1 -0
  33. package/@types/forms/controls/multiple-files.d.sync-conflict-20250918-184318-TFDLWFG.ts +42 -0
  34. package/@types/forms/controls/multiple-files.d.ts +3 -1
  35. package/@types/forms/controls/multiple-images.d.ts +19 -0
  36. package/@types/forms/controls/number.d.sync-conflict-20250918-222046-TFDLWFG.ts +13 -0
  37. package/@types/forms/controls/number.d.ts +1 -1
  38. package/@types/forms/controls/photo.d.sync-conflict-20250918-184321-TFDLWFG.ts +19 -0
  39. package/@types/forms/controls/photo.d.ts +3 -5
  40. package/@types/forms/controls/simple-input.d.sync-conflict-20250918-184310-TFDLWFG.ts +33 -0
  41. package/@types/forms/controls/simple-input.d.sync-conflict-20250918-222042-TFDLWFG.ts +33 -0
  42. package/@types/forms/controls/simple-input.d.ts +5 -4
  43. package/@types/forms/controls/simple-input.sync-conflict-20250918-222045-TFDLWFG.d.ts +33 -0
  44. package/@types/forms/controls/single-reference.d.ts +3 -2
  45. package/@types/forms/controls/table.d.sync-conflict-20250918-184302-TFDLWFG.ts +39 -0
  46. package/@types/forms/controls/table.d.ts +8 -3
  47. package/@types/forms/controls/table.sync-conflict-20250918-222042-TFDLWFG.d.ts +39 -0
  48. package/@types/forms/controls/textarea.d.sync-conflict-20250918-222045-TFDLWFG.ts +25 -0
  49. package/@types/forms/controls/textarea.d.ts +3 -3
  50. package/@types/forms/fields/boolean.d.sync-conflict-20250918-184325-TFDLWFG.ts +22 -0
  51. package/@types/forms/fields/boolean.d.ts +6 -1
  52. package/@types/forms/fields/boolean.sync-conflict-20250918-222042-TFDLWFG.d.ts +22 -0
  53. package/@types/forms/fields/checkboxed-list.d.sync-conflict-20250918-184325-TFDLWFG.ts +23 -0
  54. package/@types/forms/fields/checkboxed-list.d.ts +3 -1
  55. package/@types/forms/fields/collection-field.d.sync-conflict-20250918-184319-TFDLWFG.ts +22 -0
  56. package/@types/forms/fields/collection-field.d.sync-conflict-20250918-222047-TFDLWFG.ts +22 -0
  57. package/@types/forms/fields/collection-field.d.ts +8 -1
  58. package/@types/forms/fields/color.d.ts +4 -0
  59. package/@types/forms/fields/coordinates.d.sync-conflict-20250918-222044-TFDLWFG.ts +14 -0
  60. package/@types/forms/fields/coordinates.d.ts +14 -0
  61. package/@types/forms/fields/date.d.ts +13 -0
  62. package/@types/forms/fields/datetime.d.sync-conflict-20250918-222050-TFDLWFG.ts +4 -0
  63. package/@types/forms/fields/datetime.d.ts +14 -0
  64. package/@types/forms/fields/deep-reverse-single-reference-list.d.ts +24 -0
  65. package/@types/forms/fields/deep-reverse-single-reference-table.d.ts +16 -0
  66. package/@types/forms/fields/email.d.sync-conflict-20250918-184303-TFDLWFG.ts +8 -0
  67. package/@types/forms/fields/email.d.ts +3 -0
  68. package/@types/forms/fields/enum-multiple-sealious.d.ts +16 -0
  69. package/@types/forms/fields/enum-multiple-sealious.sync-conflict-20250918-222047-TFDLWFG.d.ts +16 -0
  70. package/@types/forms/fields/field.d.sync-conflict-20250918-184306-TFDLWFG.ts +70 -0
  71. package/@types/forms/fields/field.d.ts +37 -5
  72. package/@types/forms/fields/fields.d.sync-conflict-20250918-184314-TFDLWFG.ts +29 -0
  73. package/@types/forms/fields/fields.d.ts +23 -8
  74. package/@types/forms/fields/file.d.sync-conflict-20250918-184310-TFDLWFG.ts +23 -0
  75. package/@types/forms/fields/file.d.sync-conflict-20250918-222046-TFDLWFG.ts +23 -0
  76. package/@types/forms/fields/file.d.ts +11 -5
  77. package/@types/forms/fields/file.sync-conflict-20250918-222049-TFDLWFG.d.ts +23 -0
  78. package/@types/forms/fields/float.d.ts +4 -0
  79. package/@types/forms/fields/get-field-for-sealious.d.sync-conflict-20250918-222046-TFDLWFG.ts +29 -0
  80. package/@types/forms/fields/get-field-for-sealious.d.ts +31 -0
  81. package/@types/forms/fields/get-field-for-sealious.sync-conflict-20250918-222042-TFDLWFG.d.ts +29 -0
  82. package/@types/forms/fields/html.d.ts +6 -0
  83. package/@types/forms/fields/image.d.sync-conflict-20250918-222042-TFDLWFG.ts +5 -0
  84. package/@types/forms/fields/image.d.ts +5 -0
  85. package/@types/forms/fields/int.d.ts +6 -0
  86. package/@types/forms/fields/json.d.ts +13 -0
  87. package/@types/forms/fields/markdown.d.ts +6 -0
  88. package/@types/forms/fields/multiple-files.d.sync-conflict-20250918-184304-TFDLWFG.ts +16 -0
  89. package/@types/forms/fields/multiple-files.d.ts +3 -1
  90. package/@types/forms/fields/number.d.sync-conflict-20250918-184317-TFDLWFG.ts +25 -0
  91. package/@types/forms/fields/number.d.sync-conflict-20250918-222047-TFDLWFG.ts +25 -0
  92. package/@types/forms/fields/number.d.ts +3 -1
  93. package/@types/forms/fields/password.d.ts +6 -0
  94. package/@types/forms/fields/pick-from-list-sealious.d.ts +11 -0
  95. package/@types/forms/fields/pick-from-list.d.sync-conflict-20250918-184322-TFDLWFG.ts +15 -0
  96. package/@types/forms/fields/pick-from-list.d.ts +4 -3
  97. package/@types/forms/fields/proxy-field.d.sync-conflict-20250918-184307-TFDLWFG.ts +15 -0
  98. package/@types/forms/fields/proxy-field.d.ts +3 -1
  99. package/@types/forms/fields/regexp.d.sync-conflict-20250918-184305-TFDLWFG.ts +21 -0
  100. package/@types/forms/fields/regexp.d.sync-conflict-20250918-222045-TFDLWFG.ts +21 -0
  101. package/@types/forms/fields/regexp.d.ts +6 -1
  102. package/@types/forms/fields/regexp.sync-conflict-20250918-222047-TFDLWFG.d.ts +21 -0
  103. package/@types/forms/fields/simple-form-field.d.sync-conflict-20250918-184309-TFDLWFG.ts +29 -0
  104. package/@types/forms/fields/simple-form-field.d.sync-conflict-20250918-222044-TFDLWFG.ts +29 -0
  105. package/@types/forms/fields/simple-form-field.d.ts +23 -3
  106. package/@types/forms/fields/simple-form-field.sync-conflict-20250918-222049-TFDLWFG.d.ts +29 -0
  107. package/@types/forms/fields/single-reference.d.ts +19 -0
  108. package/@types/forms/fields/single-reference.sync-conflict-20250918-222043-TFDLWFG.d.ts +10 -0
  109. package/@types/forms/fields/structured-array.d.sync-conflict-20250918-184302-TFDLWFG.ts +27 -0
  110. package/@types/forms/fields/structured-array.d.sync-conflict-20250918-222049-TFDLWFG.ts +27 -0
  111. package/@types/forms/fields/structured-array.d.ts +19 -10
  112. package/@types/forms/fields/structured-array.sync-conflict-20250918-222047-TFDLWFG.d.ts +27 -0
  113. package/@types/forms/fields/table.d.sync-conflict-20250918-184303-TFDLWFG.ts +16 -0
  114. package/@types/forms/fields/table.d.ts +3 -0
  115. package/@types/forms/fields/text.d.ts +6 -0
  116. package/@types/forms/fields/url.d.ts +6 -0
  117. package/@types/forms/form-types.d.sync-conflict-20250918-222045-TFDLWFG.ts +26 -0
  118. package/@types/forms/form-types.d.ts +2 -0
  119. package/@types/forms/form.d.sync-conflict-20250918-184315-TFDLWFG.ts +32 -0
  120. package/@types/forms/form.d.sync-conflict-20250918-222049-TFDLWFG.ts +32 -0
  121. package/@types/forms/form.d.ts +10 -8
  122. package/@types/forms/form.sync-conflict-20250918-222049-TFDLWFG.d.ts +33 -0
  123. package/@types/forms/form.test.d.sync-conflict-20250918-184318-TFDLWFG.ts +6 -0
  124. package/@types/forms/form.test.d.sync-conflict-20250918-222047-TFDLWFG.ts +6 -0
  125. package/@types/forms/form.test.d.ts +2 -2
  126. package/@types/forms/multiform.d.sync-conflict-20250918-184308-TFDLWFG.ts +23 -0
  127. package/@types/forms/multiform.d.ts +1 -2
  128. package/@types/forms/multiform.sync-conflict-20250918-222044-TFDLWFG.d.ts +23 -0
  129. package/@types/index.d.sync-conflict-20250918-184316-TFDLWFG.ts +46 -0
  130. package/@types/index.d.ts +2 -2
  131. package/@types/mount.d.sync-conflict-20250918-184320-TFDLWFG.ts +6 -0
  132. package/@types/mount.d.ts +0 -1
  133. package/@types/page/list.d.sync-conflict-20250918-184318-TFDLWFG.ts +48 -0
  134. package/@types/page/list.d.sync-conflict-20250918-222046-TFDLWFG.ts +48 -0
  135. package/@types/page/list.d.ts +2 -2
  136. package/@types/page/list.sync-conflict-20250918-222048-TFDLWFG.d.ts +48 -0
  137. package/@types/page/mountable-with-fields.d.sync-conflict-20250918-184321-TFDLWFG.ts +42 -0
  138. package/@types/page/mountable-with-fields.d.sync-conflict-20250918-222046-TFDLWFG.ts +42 -0
  139. package/@types/page/mountable-with-fields.d.ts +3 -3
  140. package/@types/page/mountable-with-fields.sync-conflict-20250918-222044-TFDLWFG.d.ts +42 -0
  141. package/@types/page/mountable.d.sync-conflict-20250918-184306-TFDLWFG.ts +10 -0
  142. package/@types/page/mountable.d.ts +0 -1
  143. package/@types/page/page.d.sync-conflict-20250918-184320-TFDLWFG.ts +18 -0
  144. package/@types/page/page.d.ts +0 -1
  145. package/@types/page/props-parser.d.sync-conflict-20250918-184305-TFDLWFG.ts +15 -0
  146. package/@types/page/props-parser.d.ts +0 -1
  147. package/@types/page/stateful-page.d.sync-conflict-20250918-184326-TFDLWFG.ts +62 -0
  148. package/@types/page/stateful-page.d.ts +0 -1
  149. package/@types/templates/shared/shared-crud-form-fields.d.sync-conflict-20250918-184306-TFDLWFG.ts +1 -0
  150. package/@types/templates/shared/shared-crud-form-fields.d.ts +0 -67
  151. package/@types/test_utils/test-on-real-app.d.sync-conflict-20250918-184320-TFDLWFG.ts +26 -0
  152. package/@types/test_utils/test-on-real-app.d.ts +0 -1
  153. package/@types/utils/extract-fields-from-collection.d.sync-conflict-20250918-184312-TFDLWFG.ts +18 -0
  154. package/@types/utils/extract-fields-from-collection.d.ts +5 -1
  155. package/@types/utils/extract-fields-from-collection.sync-conflict-20250918-222045-TFDLWFG.d.ts +18 -0
  156. package/@types/utils/wrap-attributes.d.ts +3 -0
  157. package/README.md +5 -0
  158. package/assets/file-icon.svg +5 -0
  159. package/lib/add-crud.js +80 -89
  160. package/lib/add-list-route.test.js +1 -1
  161. package/lib/add-route.js +0 -7
  162. package/lib/build.js +3 -1
  163. package/lib/cli.js +2 -5
  164. package/lib/controllers/table-add-button.stimulus.js +35 -0
  165. package/lib/forms/controls/array.js +20 -16
  166. package/lib/forms/controls/big-radio-group.js +2 -2
  167. package/lib/forms/controls/checkbox-group.js +7 -7
  168. package/lib/forms/controls/checkboxed-list-input.js +9 -2
  169. package/lib/forms/controls/controls.js +2 -2
  170. package/lib/forms/controls/derived-frame.js +5 -1
  171. package/lib/forms/controls/derived.js +1 -1
  172. package/lib/forms/controls/dropdown.js +4 -1
  173. package/lib/forms/controls/editable-collection-subset.js +2 -2
  174. package/lib/forms/controls/file.js +26 -2
  175. package/lib/forms/controls/file.test.js +2 -2
  176. package/lib/forms/controls/hidden-input.js +4 -1
  177. package/lib/forms/controls/{photo.js → image.js} +6 -7
  178. package/lib/forms/controls/{photo.test.js → image.test.js} +6 -21
  179. package/lib/forms/controls/multiple-files.js +10 -1
  180. package/lib/forms/controls/{multiple-photos.js → multiple-images.js} +3 -3
  181. package/lib/forms/controls/simple-input.js +13 -12
  182. package/lib/forms/controls/single-reference.js +4 -0
  183. package/lib/forms/controls/table.js +66 -24
  184. package/lib/forms/controls/textarea.js +4 -2
  185. package/lib/forms/controls/tickable.js +13 -5
  186. package/lib/forms/fields/boolean.js +14 -0
  187. package/lib/forms/fields/checkboxed-list.js +4 -0
  188. package/lib/forms/fields/collection-field.js +9 -0
  189. package/lib/forms/fields/color.js +10 -0
  190. package/lib/forms/fields/coordinates.js +49 -0
  191. package/lib/forms/fields/date.js +34 -0
  192. package/lib/forms/fields/datetime.js +46 -0
  193. package/lib/forms/fields/deep-reverse-single-reference-list.js +81 -0
  194. package/lib/forms/fields/deep-reverse-single-reference-table.js +122 -0
  195. package/lib/forms/fields/email.js +7 -0
  196. package/lib/forms/fields/enum-multiple-sealious.js +32 -0
  197. package/lib/forms/fields/field.js +32 -4
  198. package/lib/forms/fields/field.test.js +5 -5
  199. package/lib/forms/fields/fields.js +23 -8
  200. package/lib/forms/fields/file.js +33 -9
  201. package/lib/forms/fields/file.test.js +4 -16
  202. package/lib/forms/fields/float.js +10 -0
  203. package/lib/forms/fields/get-field-for-sealious.js +213 -0
  204. package/lib/forms/fields/html.js +14 -0
  205. package/lib/forms/fields/image.js +13 -0
  206. package/lib/forms/fields/int.js +23 -0
  207. package/lib/forms/fields/json.js +31 -0
  208. package/lib/forms/fields/markdown.js +14 -0
  209. package/lib/forms/fields/multiple-files.js +4 -0
  210. package/lib/forms/fields/number.js +6 -0
  211. package/lib/forms/fields/password.js +13 -0
  212. package/lib/forms/fields/pick-from-list-sealious.js +17 -0
  213. package/lib/forms/fields/pick-from-list.js +6 -2
  214. package/lib/forms/fields/proxy-field.js +3 -0
  215. package/lib/forms/fields/regexp.js +14 -0
  216. package/lib/forms/fields/simple-form-field.js +60 -2
  217. package/lib/forms/fields/single-reference.js +44 -0
  218. package/lib/forms/fields/structured-array.js +63 -12
  219. package/lib/forms/fields/table.js +28 -1
  220. package/lib/forms/fields/text.js +17 -0
  221. package/lib/forms/fields/url.js +17 -0
  222. package/lib/forms/form.js +30 -13
  223. package/lib/forms/form.test.js +3 -4
  224. package/lib/forms/multiform.js +4 -2
  225. package/lib/forms/multiform.test.js +3 -3
  226. package/lib/generate-stimulus.js +1 -0
  227. package/lib/index.js +1 -0
  228. package/lib/make-hidden-inputs.js +1 -1
  229. package/lib/mount.js +11 -0
  230. package/lib/notifier.js +0 -1
  231. package/lib/page/list.js +15 -8
  232. package/lib/page/mountable-with-fields.js +14 -6
  233. package/lib/page/mountable-with-fields.test.js +1 -1
  234. package/lib/templates/form.js +8 -9
  235. package/lib/templates/multiform.js +4 -4
  236. package/lib/templates/page.js +0 -2
  237. package/lib/templates/shared/collection-create-form.js +28 -40
  238. package/lib/templates/shared/collection-edit-form.js +40 -77
  239. package/lib/templates/shared/collection-list.js +12 -20
  240. package/lib/templates/shared/shared-crud-form-fields.js +27 -95
  241. package/lib/test_utils/test-on-real-app.js +3 -3
  242. package/lib/utils/extract-fields-from-collection.js +60 -20
  243. package/lib/utils/make-slug.js +1 -1
  244. package/lib/utils/wrap-attributes.js +20 -0
  245. package/package.json +4 -3
  246. package/src/add-crud.ts +86 -97
  247. package/src/add-list-route.test.ts +1 -1
  248. package/src/add-route.ts +0 -7
  249. package/src/build.ts +3 -1
  250. package/src/cli.ts +3 -5
  251. package/src/controllers/table-add-button.stimulus.ts +35 -0
  252. package/src/forms/controls/array.ts +23 -20
  253. package/src/forms/controls/autocomplete.ts +1 -1
  254. package/src/forms/controls/big-radio-group.ts +2 -2
  255. package/src/forms/controls/checkbox-group.ts +9 -9
  256. package/src/forms/controls/checkboxed-list-input.ts +27 -15
  257. package/src/forms/controls/controls.ts +2 -2
  258. package/src/forms/controls/derived-frame.ts +5 -1
  259. package/src/forms/controls/derived.ts +1 -1
  260. package/src/forms/controls/dropdown.ts +5 -2
  261. package/src/forms/controls/editable-collection-subset.ts +2 -2
  262. package/src/forms/controls/file.test.ts +4 -2
  263. package/src/forms/controls/file.ts +31 -5
  264. package/src/forms/controls/form-control.ts +7 -2
  265. package/src/forms/controls/hidden-input.ts +4 -1
  266. package/src/forms/controls/{photo.test.ts → image.test.ts} +5 -22
  267. package/src/forms/controls/{photo.ts → image.ts} +3 -5
  268. package/src/forms/controls/multiple-files.ts +18 -1
  269. package/src/forms/controls/{multiple-photos.ts → multiple-images.ts} +1 -1
  270. package/src/forms/controls/number.ts +1 -1
  271. package/src/forms/controls/simple-input.ts +18 -34
  272. package/src/forms/controls/single-reference.ts +10 -2
  273. package/src/forms/controls/table.ts +90 -31
  274. package/src/forms/controls/textarea.ts +6 -4
  275. package/src/forms/controls/tickable.ts +13 -5
  276. package/src/forms/fields/boolean.ts +23 -1
  277. package/src/forms/fields/checkboxed-list.ts +11 -2
  278. package/src/forms/fields/collection-field.ts +16 -1
  279. package/src/forms/fields/color.ts +9 -0
  280. package/src/forms/fields/coordinates.ts +66 -0
  281. package/src/forms/fields/date.ts +50 -0
  282. package/src/forms/fields/datetime.ts +66 -0
  283. package/src/forms/fields/deep-reverse-single-reference-list.ts +136 -0
  284. package/src/forms/fields/deep-reverse-single-reference-table.ts +213 -0
  285. package/src/forms/fields/email.ts +9 -0
  286. package/src/forms/fields/enum-multiple-sealious.ts +48 -0
  287. package/src/forms/fields/field.test.ts +5 -5
  288. package/src/forms/fields/field.ts +94 -8
  289. package/src/forms/fields/fields.ts +23 -8
  290. package/src/forms/fields/file.test.ts +4 -16
  291. package/src/forms/fields/file.ts +43 -15
  292. package/src/forms/fields/float.ts +9 -0
  293. package/src/forms/fields/get-field-for-sealious.ts +304 -0
  294. package/src/forms/fields/html.ts +15 -0
  295. package/src/forms/fields/image.ts +12 -0
  296. package/src/forms/fields/int.ts +25 -0
  297. package/src/forms/fields/json.ts +48 -0
  298. package/src/forms/fields/markdown.ts +15 -0
  299. package/src/forms/fields/multiple-files.ts +10 -1
  300. package/src/forms/fields/number.ts +8 -1
  301. package/src/forms/fields/password.ts +17 -0
  302. package/src/forms/fields/pick-from-list-sealious.ts +22 -0
  303. package/src/forms/fields/pick-from-list.ts +7 -3
  304. package/src/forms/fields/proxy-field.ts +6 -1
  305. package/src/forms/fields/regexp.ts +27 -1
  306. package/src/forms/fields/simple-form-field.ts +95 -7
  307. package/src/forms/fields/single-reference.ts +62 -0
  308. package/src/forms/fields/structured-array.ts +115 -18
  309. package/src/forms/fields/table.ts +32 -1
  310. package/src/forms/fields/text.ts +18 -0
  311. package/src/forms/fields/url.ts +20 -0
  312. package/src/forms/form-types.ts +2 -0
  313. package/src/forms/form.test.ts +3 -4
  314. package/src/forms/form.ts +37 -16
  315. package/src/forms/forms.css +0 -85
  316. package/src/forms/multiform.test.ts +3 -3
  317. package/src/forms/multiform.ts +2 -0
  318. package/src/generate-stimulus.ts +1 -0
  319. package/src/index.ts +2 -1
  320. package/src/make-hidden-inputs.ts +1 -1
  321. package/src/mount.ts +14 -0
  322. package/src/notifier.ts +0 -1
  323. package/src/page/list.ts +15 -8
  324. package/src/page/mountable-with-fields.test.ts +1 -1
  325. package/src/page/mountable-with-fields.ts +18 -9
  326. package/src/register-external.ts +1 -1
  327. package/src/templates/form.ts +8 -9
  328. package/src/templates/multiform.ts +4 -4
  329. package/src/templates/page.ts +0 -2
  330. package/src/templates/shared/collection-create-form.ts +30 -66
  331. package/src/templates/shared/collection-edit-form.ts +41 -102
  332. package/src/templates/shared/collection-list.ts +12 -20
  333. package/src/templates/shared/item-delete.ts +0 -1
  334. package/src/templates/shared/shared-crud-form-fields.ts +37 -171
  335. package/src/test_utils/test-on-real-app.ts +4 -3
  336. package/src/utils/extract-fields-from-collection.ts +76 -25
  337. package/src/utils/make-slug.ts +1 -1
  338. package/src/utils/wrap-attributes.ts +17 -0
  339. package/lib/add-verbose-crud.js +0 -119
  340. package/lib/crud-field-snippets.js +0 -52
  341. package/lib/find-css-includes.js +0 -3
  342. package/lib/forms/controls/reverse-single-reference.js +0 -1
  343. package/lib/forms/fields/enum-multiple.js +0 -47
  344. package/lib/forms/fields/enum-multiple.test.js +0 -27
  345. package/lib/forms/fields/enum.js +0 -41
  346. package/lib/forms/fields/enum.test.js +0 -21
  347. package/lib/forms/fields/reverse-single-reference.js +0 -17
  348. package/lib/templates/shared/handlers/boolean.js +0 -14
  349. package/lib/templates/shared/handlers/date.js +0 -8
  350. package/lib/templates/shared/handlers/deep-reverse-single-reference.js +0 -209
  351. package/lib/templates/shared/handlers/default.js +0 -49
  352. package/lib/templates/shared/handlers/enum.js +0 -19
  353. package/lib/templates/shared/handlers/file.js +0 -23
  354. package/lib/templates/shared/handlers/image.js +0 -32
  355. package/lib/templates/shared/handlers/int.js +0 -11
  356. package/lib/templates/shared/handlers/jdd.js +0 -10
  357. package/lib/templates/shared/handlers/single-reference.js +0 -12
  358. package/lib/templates/shared/handlers/structured-array.js +0 -33
  359. package/src/add-verbose-crud.ts +0 -138
  360. package/src/crud-field-snippets.ts +0 -57
  361. package/src/find-css-includes.ts +0 -3
  362. package/src/forms/controls/reverse-single-reference.ts +0 -50
  363. package/src/forms/fields/enum-multiple.test.ts +0 -31
  364. package/src/forms/fields/enum-multiple.ts +0 -62
  365. package/src/forms/fields/enum.test.ts +0 -25
  366. package/src/forms/fields/enum.ts +0 -56
  367. package/src/forms/fields/reverse-single-reference.ts +0 -20
  368. package/src/templates/shared/handlers/boolean.ts +0 -18
  369. package/src/templates/shared/handlers/date.ts +0 -12
  370. package/src/templates/shared/handlers/deep-reverse-single-reference.ts +0 -244
  371. package/src/templates/shared/handlers/default.ts +0 -64
  372. package/src/templates/shared/handlers/enum.ts +0 -23
  373. package/src/templates/shared/handlers/file.ts +0 -27
  374. package/src/templates/shared/handlers/image.ts +0 -45
  375. package/src/templates/shared/handlers/int.ts +0 -15
  376. package/src/templates/shared/handlers/jdd.ts +0 -14
  377. package/src/templates/shared/handlers/single-reference.ts +0 -16
  378. package/src/templates/shared/handlers/structured-array.ts +0 -42
@@ -0,0 +1,213 @@
1
+ import {
2
+ FieldTypes as SealiousFieldTypes
3
+ } from "sealious";
4
+ import { Boolean as BooleanField } from "./boolean.js";
5
+ import { TextBasedSimpleField } from "./simple-form-field.js";
6
+ import { File } from "./file.js";
7
+ import { StructuredArray as StructuredArrayField } from "./structured-array.js";
8
+ import { Color } from "./color.js";
9
+ import { DateField } from "./date.js";
10
+ import { DateTime } from "./datetime.js";
11
+ import { EmailField } from "./email.js";
12
+ import { Float } from "./float.js";
13
+ import { HTML } from "./html.js";
14
+ import { Int } from "./int.js";
15
+ import { JSONField } from "./json.js";
16
+ import { Password } from "./password.js";
17
+ import { Text } from "./text.js";
18
+ import { Markdown } from "./markdown.js";
19
+ import { DeepReverseSingleReferenceTable } from "./deep-reverse-single-reference-table.js";
20
+ import { DeepReverseSingleReferenceList } from "./deep-reverse-single-reference-list.js";
21
+ import { Coordinates } from "./coordinates.js";
22
+ import { PickFromListSealious } from "./pick-from-list-sealious.js";
23
+ import { SingleReference } from "./single-reference.js";
24
+ import extract_fields_from_collection from "../../utils/extract-fields-from-collection.js";
25
+ import { EnumMultipleSealious } from "./enum-multiple-sealious.js";
26
+ import { URLField } from "./url.js";
27
+ import { Image } from "./image.js";
28
+ function sealiousToFormField(sealious_field) {
29
+ if (sealious_field instanceof SealiousFieldTypes.Boolean) {
30
+ return new BooleanField(
31
+ sealious_field.required
32
+ );
33
+ }
34
+ if (sealious_field instanceof SealiousFieldTypes.Color) {
35
+ return new Color(sealious_field.required);
36
+ }
37
+ if (sealious_field instanceof SealiousFieldTypes.ControlAccess) {
38
+ const target_field = sealious_field.virtual_field;
39
+ return sealiousToFormField(target_field);
40
+ }
41
+ if (sealious_field instanceof SealiousFieldTypes.Date) {
42
+ return new DateField(
43
+ sealious_field.required
44
+ );
45
+ }
46
+ if (sealious_field instanceof SealiousFieldTypes.DateTime) {
47
+ return new DateTime(sealious_field.required);
48
+ }
49
+ if (sealious_field instanceof SealiousFieldTypes.DeepReverseSingleReference) {
50
+ const referencing_collection = sealious_field.collection.app.collections[sealious_field.referencing_collection];
51
+ if (!referencing_collection) {
52
+ throw new Error(
53
+ "Unknown collection: " + sealious_field.referencing_collection
54
+ );
55
+ }
56
+ if (Object.keys(referencing_collection.fields).length == 2) {
57
+ return new DeepReverseSingleReferenceList(
58
+ sealious_field
59
+ );
60
+ } else {
61
+ return new DeepReverseSingleReferenceTable(
62
+ sealious_field
63
+ );
64
+ }
65
+ }
66
+ if (sealious_field instanceof SealiousFieldTypes.DisallowUpdate) {
67
+ return sealiousToFormField(
68
+ sealious_field.virtual_field
69
+ );
70
+ }
71
+ if (sealious_field instanceof SealiousFieldTypes.Email) {
72
+ return new EmailField(
73
+ sealious_field.required
74
+ );
75
+ }
76
+ if (sealious_field instanceof SealiousFieldTypes.Enum) {
77
+ return new PickFromListSealious(
78
+ sealious_field
79
+ );
80
+ }
81
+ if (sealious_field instanceof SealiousFieldTypes.EnumMultiple) {
82
+ return new EnumMultipleSealious(
83
+ sealious_field
84
+ );
85
+ }
86
+ if (sealious_field instanceof SealiousFieldTypes.File) {
87
+ return new File(sealious_field.required);
88
+ }
89
+ if (sealious_field instanceof SealiousFieldTypes.Float) {
90
+ return new Float(sealious_field.required);
91
+ }
92
+ if (sealious_field instanceof SealiousFieldTypes.HTML) {
93
+ return new HTML(sealious_field.required);
94
+ }
95
+ if (sealious_field instanceof SealiousFieldTypes.Image) {
96
+ return new Image(sealious_field.required);
97
+ }
98
+ if (sealious_field instanceof SealiousFieldTypes.Int) {
99
+ return new Int(sealious_field.required);
100
+ }
101
+ if (sealious_field instanceof SealiousFieldTypes.JsonObject) {
102
+ return new JSONField(
103
+ sealious_field.required
104
+ );
105
+ }
106
+ if (sealious_field instanceof SealiousFieldTypes.Password) {
107
+ return new Password(sealious_field.required);
108
+ }
109
+ if (sealious_field instanceof SealiousFieldTypes.SettableBy) {
110
+ return sealiousToFormField(
111
+ sealious_field.virtual_field
112
+ );
113
+ }
114
+ if (sealious_field instanceof SealiousFieldTypes.SingleReference) {
115
+ return new SingleReference(
116
+ false,
117
+ sealious_field
118
+ );
119
+ }
120
+ if (sealious_field instanceof SealiousFieldTypes.Text) {
121
+ return new Text(sealious_field.required);
122
+ }
123
+ if (sealious_field instanceof SealiousFieldTypes.Username) {
124
+ return new Text(sealious_field.required);
125
+ }
126
+ if (sealious_field instanceof SealiousFieldTypes.Url) {
127
+ return new URLField(sealious_field.required);
128
+ }
129
+ if (sealious_field instanceof SealiousFieldTypes.Money) {
130
+ return new Float(sealious_field.required);
131
+ }
132
+ if (sealious_field instanceof SealiousFieldTypes.Markdown) {
133
+ return new Markdown(sealious_field.required);
134
+ }
135
+ if (sealious_field instanceof SealiousFieldTypes.Coordinates) {
136
+ return new Coordinates(
137
+ sealious_field.required
138
+ );
139
+ }
140
+ if (sealious_field instanceof SealiousFieldTypes.StructuredArray) {
141
+ return new StructuredArrayField(
142
+ sealious_field
143
+ );
144
+ }
145
+ return new TextBasedSimpleField(false);
146
+ }
147
+ async function sealiousFieldInfoToFormField(field_info) {
148
+ switch (field_info.type) {
149
+ case "boolean":
150
+ return new BooleanField(field_info.is_required);
151
+ case "color":
152
+ return new Color(field_info.is_required);
153
+ case "date":
154
+ return new DateField(field_info.is_required);
155
+ case "datetime":
156
+ return new DateTime(field_info.is_required);
157
+ case "deep-reverse-single-reference": {
158
+ const referencing_fields = await extract_fields_from_collection(
159
+ field_info.referencing_collection
160
+ );
161
+ if (referencing_fields.length == 2) {
162
+ return new DeepReverseSingleReferenceList({});
163
+ } else {
164
+ return new DeepReverseSingleReferenceTable({});
165
+ }
166
+ }
167
+ case "email":
168
+ return new EmailField(field_info.is_required);
169
+ case "enum":
170
+ return new PickFromListSealious({});
171
+ case "enum-multiple":
172
+ return new EnumMultipleSealious({});
173
+ case "file":
174
+ return new File(field_info.is_required);
175
+ case "float":
176
+ return new Float(field_info.is_required);
177
+ case "html":
178
+ return new HTML(field_info.is_required);
179
+ case "image":
180
+ return new Image(field_info.is_required);
181
+ case "int":
182
+ return new Int(field_info.is_required);
183
+ case "json-object":
184
+ return new JSONField(field_info.is_required);
185
+ case "password":
186
+ return new Password(field_info.is_required);
187
+ case "single-reference":
188
+ return new SingleReference(false, {});
189
+ case "text":
190
+ return new Text(field_info.is_required);
191
+ case "username":
192
+ return new Text(field_info.is_required);
193
+ case "url":
194
+ return new URLField(field_info.is_required);
195
+ case "money":
196
+ return new Float(field_info.is_required);
197
+ case "markdown":
198
+ return new Markdown(field_info.is_required);
199
+ case "coordinates":
200
+ return new Coordinates(field_info.is_required);
201
+ case "structured-array":
202
+ return new StructuredArrayField(
203
+ new SealiousFieldTypes.StructuredArray({})
204
+ );
205
+ default:
206
+ return new TextBasedSimpleField(false);
207
+ }
208
+ }
209
+ export {
210
+ sealiousFieldInfoToFormField,
211
+ sealiousToFormField
212
+ };
213
+ //# sourceMappingURL=get-field-for-sealious.js.map
@@ -0,0 +1,14 @@
1
+ import { Textarea } from "../controls/textarea.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ class HTML extends TextBasedSimpleField {
4
+ constructor(required) {
5
+ super(required, "text");
6
+ }
7
+ getControl() {
8
+ return new Textarea(this);
9
+ }
10
+ }
11
+ export {
12
+ HTML
13
+ };
14
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1,13 @@
1
+ import { Image as ImageControl } from "../controls/image.js";
2
+ import { File as FileField } from "./file.js";
3
+ class Image extends FileField {
4
+ getControl() {
5
+ return new ImageControl(
6
+ this
7
+ );
8
+ }
9
+ }
10
+ export {
11
+ Image
12
+ };
13
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1,23 @@
1
+ import { NumberBasedSimpleField } from "./simple-form-field.js";
2
+ class Int extends NumberBasedSimpleField {
3
+ constructor(required) {
4
+ super(required, "number");
5
+ }
6
+ async getSealiousCreateValue(fctx) {
7
+ const { parsed } = await this.getParsedValue(
8
+ fctx.ctx,
9
+ fctx.data.raw_values
10
+ );
11
+ if (parsed == null) {
12
+ return void 0;
13
+ }
14
+ if (isNaN(parsed)) {
15
+ return void 0;
16
+ } else
17
+ return parsed;
18
+ }
19
+ }
20
+ export {
21
+ Int
22
+ };
23
+ //# sourceMappingURL=int.js.map
@@ -0,0 +1,31 @@
1
+ import { Textarea } from "../controls/textarea.js";
2
+ import { SimpleFormField } from "./simple-form-field.js";
3
+ class JSONField extends SimpleFormField {
4
+ constructor(required) {
5
+ super(required, "text");
6
+ }
7
+ getControl() {
8
+ return new Textarea(this);
9
+ }
10
+ getEmptyValue() {
11
+ return {};
12
+ }
13
+ async parse(ctx, raw_value) {
14
+ return {
15
+ parsable: true,
16
+ error: null,
17
+ parsed_value: JSON.parse(raw_value)
18
+ };
19
+ }
20
+ async getSealiousCreateValue(fctx) {
21
+ const { parsed } = await this.getParsedValue(
22
+ fctx.ctx,
23
+ fctx.data.raw_values
24
+ );
25
+ return parsed;
26
+ }
27
+ }
28
+ export {
29
+ JSONField
30
+ };
31
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1,14 @@
1
+ import { Textarea } from "../controls/textarea.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ class Markdown extends TextBasedSimpleField {
4
+ constructor(required) {
5
+ super(required, "text");
6
+ }
7
+ getControl() {
8
+ return new Textarea(this);
9
+ }
10
+ }
11
+ export {
12
+ Markdown
13
+ };
14
+ //# sourceMappingURL=markdown.js.map
@@ -1,4 +1,5 @@
1
1
  import { FormField } from "./field.js";
2
+ import { MultipleFiles as MultipleFilesControl } from "../controls/multiple-files.js";
2
3
  class MultipleFiles extends FormField {
3
4
  constructor(collection_field, getItemId) {
4
5
  super(false);
@@ -11,6 +12,9 @@ class MultipleFiles extends FormField {
11
12
  async parse() {
12
13
  return { parsed_value: void 0, parsable: true, error: null };
13
14
  }
15
+ getControl() {
16
+ return new MultipleFilesControl(this);
17
+ }
14
18
  }
15
19
  export {
16
20
  MultipleFiles
@@ -1,4 +1,5 @@
1
1
  import { is, predicates } from "@sealcode/ts-predicates";
2
+ import { SimpleInput } from "../controls/simple-input.js";
2
3
  import { FormField } from "./field.js";
3
4
  class NumberField extends FormField {
4
5
  constructor(required, default_value, options = {}) {
@@ -35,6 +36,11 @@ class NumberField extends FormField {
35
36
  getEmptyValue() {
36
37
  return this.default_value;
37
38
  }
39
+ getControl() {
40
+ return new SimpleInput(this, {
41
+ type: "number"
42
+ });
43
+ }
38
44
  }
39
45
  export {
40
46
  NumberField
@@ -0,0 +1,13 @@
1
+ import { TextBasedSimpleField } from "./simple-form-field.js";
2
+ class Password extends TextBasedSimpleField {
3
+ constructor(required) {
4
+ super(required, "password");
5
+ }
6
+ async sealiousValueToForm(ctx, value) {
7
+ return void 0;
8
+ }
9
+ }
10
+ export {
11
+ Password
12
+ };
13
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1,17 @@
1
+ import { PickFromListField } from "./pick-from-list.js";
2
+ class PickFromListSealious extends PickFromListField {
3
+ constructor(sealious_field) {
4
+ super(
5
+ sealious_field.required,
6
+ async (ctx) => sealious_field.getAllowedValues(ctx.$app).map((value) => ({ value, label: value }))
7
+ );
8
+ this.sealious_field = sealious_field;
9
+ }
10
+ generateFieldDeclaration(field_info, vars) {
11
+ return `new ${vars.form_field_types}.${this.constructor.name}(${vars.sealious_field})`;
12
+ }
13
+ }
14
+ export {
15
+ PickFromListSealious
16
+ };
17
+ //# sourceMappingURL=pick-from-list-sealious.js.map
@@ -1,6 +1,7 @@
1
1
  import { is, predicates } from "@sealcode/ts-predicates";
2
- import { SimpleFormField } from "./simple-form-field.js";
3
- class PickFromListField extends SimpleFormField {
2
+ import { Dropdown } from "../controls/dropdown.js";
3
+ import { TextBasedSimpleField } from "./simple-form-field.js";
4
+ class PickFromListField extends TextBasedSimpleField {
4
5
  constructor(required, generateOptions, customValidation = (ctx, value, instance) => instance.valueInList(ctx, value)) {
5
6
  super(required);
6
7
  this.required = required;
@@ -27,6 +28,9 @@ class PickFromListField extends SimpleFormField {
27
28
  getEmptyValue() {
28
29
  return "";
29
30
  }
31
+ getControl() {
32
+ return new Dropdown(this);
33
+ }
30
34
  }
31
35
  export {
32
36
  PickFromListField
@@ -16,6 +16,9 @@ class ProxyFormField extends FormField {
16
16
  parsed_value: this.parsed_value
17
17
  };
18
18
  }
19
+ getControl() {
20
+ throw new Error("This field does not have a default control assigned");
21
+ }
19
22
  }
20
23
  export {
21
24
  ProxyFormField
@@ -1,4 +1,5 @@
1
1
  import { is, predicates } from "@sealcode/ts-predicates";
2
+ import { SimpleInput } from "../controls/simple-input.js";
2
3
  import { FormField } from "./field.js";
3
4
  class RegExpField extends FormField {
4
5
  constructor(required, regexp, error_message, default_value = "") {
@@ -35,6 +36,19 @@ class RegExpField extends FormField {
35
36
  getEmptyValue() {
36
37
  return this.default_value || "";
37
38
  }
39
+ getControl() {
40
+ return new SimpleInput(this, { label: this.name });
41
+ }
42
+ async getSealiousCreateValue(fctx) {
43
+ const { parsed } = await this.getParsedValue(
44
+ fctx.ctx,
45
+ fctx.data.raw_values
46
+ );
47
+ return parsed || "";
48
+ }
49
+ async sealiousValueToForm(ctx, sealious_value) {
50
+ return sealious_value || "";
51
+ }
38
52
  }
39
53
  export {
40
54
  RegExpField
@@ -1,10 +1,20 @@
1
1
  import { predicates } from "@sealcode/ts-predicates";
2
2
  import { FormField } from "./field.js";
3
+ import { SimpleInput } from "../controls/simple-input.js";
3
4
  class SimpleFormField extends FormField {
4
- constructor(required) {
5
+ constructor(required, type = "text") {
5
6
  super(required);
7
+ this.type = type;
6
8
  this.predicate = predicates.string;
7
9
  }
10
+ async sealiousValueToForm(ctx, value) {
11
+ if (value === null) {
12
+ return "";
13
+ }
14
+ return String(value);
15
+ }
16
+ }
17
+ class TextBasedSimpleField extends SimpleFormField {
8
18
  async parse(_, raw_value) {
9
19
  return {
10
20
  parsed_value: (raw_value || "").toString(),
@@ -12,11 +22,59 @@ class SimpleFormField extends FormField {
12
22
  error: null
13
23
  };
14
24
  }
25
+ async getSealiousCreateValue(fctx) {
26
+ const { parsed } = await this.getParsedValue(
27
+ fctx.ctx,
28
+ fctx.data.raw_values
29
+ );
30
+ return parsed || "";
31
+ }
32
+ async postSealiousCreate(ctx, created_item) {
33
+ }
34
+ async postSealiousEdit(ctx, edited_item) {
35
+ }
36
+ getControl() {
37
+ return new SimpleInput(this, {
38
+ label: this.name,
39
+ type: this.type
40
+ });
41
+ }
15
42
  getEmptyValue() {
16
43
  return "";
17
44
  }
18
45
  }
46
+ class NumberBasedSimpleField extends SimpleFormField {
47
+ async parse(_, raw_value) {
48
+ return {
49
+ parsed_value: parseFloat(raw_value) || 0,
50
+ parsable: true,
51
+ error: null
52
+ };
53
+ }
54
+ async getSealiousCreateValue(fctx) {
55
+ const { parsed } = await this.getParsedValue(
56
+ fctx.ctx,
57
+ fctx.data.raw_values
58
+ );
59
+ return parsed || 0;
60
+ }
61
+ async postSealiousCreate() {
62
+ }
63
+ async postSealiousEdit() {
64
+ }
65
+ getControl() {
66
+ return new SimpleInput(this, {
67
+ label: this.name,
68
+ type: this.type
69
+ });
70
+ }
71
+ getEmptyValue() {
72
+ return 0;
73
+ }
74
+ }
19
75
  export {
20
- SimpleFormField
76
+ NumberBasedSimpleField,
77
+ SimpleFormField,
78
+ TextBasedSimpleField
21
79
  };
22
80
  //# sourceMappingURL=simple-form-field.js.map
@@ -0,0 +1,44 @@
1
+ import { CollectionField } from "./collection-field.js";
2
+ import { SingleReferenceDropdown } from "../controls/single-reference.js";
3
+ import { toPascalCase } from "js-convert-case";
4
+ class SingleReference extends CollectionField {
5
+ getControl() {
6
+ return new SingleReferenceDropdown(this, {
7
+ label: this.name,
8
+ getLabel: (item) => item.id
9
+ });
10
+ }
11
+ async getSealiousCreateValue(fctx) {
12
+ const { parsed } = await this.getParsedValue(
13
+ fctx.ctx,
14
+ fctx.data.raw_values
15
+ );
16
+ return parsed || void 0;
17
+ }
18
+ async sealiousValueToForm(ctx, value) {
19
+ return value || void 0;
20
+ }
21
+ generateImportsForFieldList(field_info) {
22
+ if (!field_info.target) {
23
+ throw new Error("Expected 'target' attribute in field info");
24
+ }
25
+ return [
26
+ {
27
+ what: toPascalCase(field_info.target),
28
+ from: "src/back/collections/collections.js"
29
+ }
30
+ ];
31
+ }
32
+ generateFieldDeclaration(field_info, vars) {
33
+ if (!field_info.target) {
34
+ throw new Error("Expected 'target' attribute in field info");
35
+ }
36
+ return `new ${vars.form_field_types}.${this.constructor.name}<typeof ${toPascalCase(field_info.target)}, ${String(
37
+ field_info.is_required
38
+ )}, typeof ${vars.sealious_field}>(${String(field_info.is_required)}, ${vars.sealious_field})`;
39
+ }
40
+ }
41
+ export {
42
+ SingleReference
43
+ };
44
+ //# sourceMappingURL=single-reference.js.map
@@ -1,21 +1,72 @@
1
- import { FormField } from "./field.js";
2
- class StructuredArrayField extends FormField {
1
+ import { Table as TableControl } from "../controls/table.js";
2
+ import {
3
+ sealiousToFormField
4
+ } from "./get-field-for-sealious.js";
5
+ import { Table } from "./table.js";
6
+ class StructuredArray extends Table {
3
7
  constructor(sealious_field) {
4
- super(true);
8
+ const columns = Object.fromEntries(
9
+ Object.entries(sealious_field.subfields).map(
10
+ ([key, sealious_field2]) => [
11
+ key,
12
+ sealiousToFormField(sealious_field2)
13
+ ]
14
+ )
15
+ );
16
+ super(columns);
5
17
  this.sealious_field = sealious_field;
6
18
  }
7
- async parse(_context, value) {
8
- return {
9
- parsable: true,
10
- error: null,
11
- parsed_value: value || []
12
- };
19
+ getControl() {
20
+ return new TableControl(this, {
21
+ label: this.name,
22
+ subfield_controls: Object.fromEntries(
23
+ Object.entries(this.columns).map(([column_name, subfield]) => [
24
+ column_name,
25
+ subfield.getControl()
26
+ ])
27
+ ),
28
+ allow_adding: true,
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
31
+ make_new_row: () => ({})
32
+ });
13
33
  }
14
- getEmptyValue() {
15
- return [];
34
+ generateFieldDeclaration(_field_info, vars) {
35
+ return `new ${vars.form_field_types}.${this.constructor.name}(${vars.sealious_field})`;
36
+ }
37
+ async getSealiousCreateValue(fctx) {
38
+ const { parsed } = await this.getParsedValue(
39
+ fctx.ctx,
40
+ fctx.data.raw_values
41
+ );
42
+ return parsed || this.getEmptyValue();
43
+ }
44
+ async sealiousValueToForm(ctx, sealiousValue) {
45
+ return Promise.all(
46
+ (sealiousValue || []).map(
47
+ async (element) => Object.fromEntries(
48
+ await Promise.all(
49
+ Object.entries(element).map(async ([key, value]) => {
50
+ const form_subfield = this.columns[key];
51
+ if (!form_subfield) {
52
+ return [key, ""];
53
+ }
54
+ return [
55
+ key,
56
+ await form_subfield.sealiousValueToForm(
57
+ ctx,
58
+ value,
59
+ {}
60
+ )
61
+ ];
62
+ })
63
+ )
64
+ )
65
+ )
66
+ );
16
67
  }
17
68
  }
18
69
  export {
19
- StructuredArrayField
70
+ StructuredArray
20
71
  };
21
72
  //# sourceMappingURL=structured-array.js.map