@sealcode/sealgen 0.18.8 → 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 (374) hide show
  1. package/.eslintrc.cjs +7 -2
  2. package/.xunit +75 -0
  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 -2
  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 -1
  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 -3
  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 -0
  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 -2
  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 -7
  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 -1
  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/page/list.d.sync-conflict-20250918-184318-TFDLWFG.ts +48 -0
  133. package/@types/page/list.d.sync-conflict-20250918-222046-TFDLWFG.ts +48 -0
  134. package/@types/page/list.d.ts +2 -2
  135. package/@types/page/list.sync-conflict-20250918-222048-TFDLWFG.d.ts +48 -0
  136. package/@types/page/mountable-with-fields.d.sync-conflict-20250918-184321-TFDLWFG.ts +42 -0
  137. package/@types/page/mountable-with-fields.d.sync-conflict-20250918-222046-TFDLWFG.ts +42 -0
  138. package/@types/page/mountable-with-fields.d.ts +3 -3
  139. package/@types/page/mountable-with-fields.sync-conflict-20250918-222044-TFDLWFG.d.ts +42 -0
  140. package/@types/page/mountable.d.sync-conflict-20250918-184306-TFDLWFG.ts +10 -0
  141. package/@types/page/page.d.sync-conflict-20250918-184320-TFDLWFG.ts +18 -0
  142. package/@types/page/props-parser.d.sync-conflict-20250918-184305-TFDLWFG.ts +15 -0
  143. package/@types/page/props-parser.d.ts +0 -1
  144. package/@types/page/stateful-page.d.sync-conflict-20250918-184326-TFDLWFG.ts +62 -0
  145. package/@types/templates/shared/shared-crud-form-fields.d.sync-conflict-20250918-184306-TFDLWFG.ts +1 -0
  146. package/@types/templates/shared/shared-crud-form-fields.d.ts +0 -67
  147. package/@types/test_utils/test-on-real-app.d.sync-conflict-20250918-184320-TFDLWFG.ts +26 -0
  148. package/@types/test_utils/test-on-real-app.d.ts +0 -1
  149. package/@types/utils/extract-fields-from-collection.d.sync-conflict-20250918-184312-TFDLWFG.ts +18 -0
  150. package/@types/utils/extract-fields-from-collection.d.ts +5 -1
  151. package/@types/utils/extract-fields-from-collection.sync-conflict-20250918-222045-TFDLWFG.d.ts +18 -0
  152. package/@types/utils/wrap-attributes.d.ts +3 -0
  153. package/README.md +5 -0
  154. package/assets/file-icon.svg +5 -0
  155. package/lib/add-crud.js +80 -89
  156. package/lib/add-list-route.test.js +1 -1
  157. package/lib/add-route.js +0 -7
  158. package/lib/build.js +3 -1
  159. package/lib/cli.js +2 -5
  160. package/lib/controllers/table-add-button.stimulus.js +35 -0
  161. package/lib/forms/controls/array.js +20 -16
  162. package/lib/forms/controls/big-radio-group.js +2 -2
  163. package/lib/forms/controls/checkbox-group.js +7 -7
  164. package/lib/forms/controls/checkboxed-list-input.js +9 -2
  165. package/lib/forms/controls/controls.js +2 -2
  166. package/lib/forms/controls/derived-frame.js +5 -1
  167. package/lib/forms/controls/derived.js +1 -1
  168. package/lib/forms/controls/dropdown.js +4 -1
  169. package/lib/forms/controls/editable-collection-subset.js +2 -2
  170. package/lib/forms/controls/file.js +26 -2
  171. package/lib/forms/controls/file.test.js +2 -2
  172. package/lib/forms/controls/hidden-input.js +4 -1
  173. package/lib/forms/controls/{photo.js → image.js} +6 -7
  174. package/lib/forms/controls/{photo.test.js → image.test.js} +6 -21
  175. package/lib/forms/controls/multiple-files.js +10 -1
  176. package/lib/forms/controls/{multiple-photos.js → multiple-images.js} +3 -3
  177. package/lib/forms/controls/simple-input.js +13 -12
  178. package/lib/forms/controls/single-reference.js +4 -0
  179. package/lib/forms/controls/table.js +66 -24
  180. package/lib/forms/controls/textarea.js +4 -2
  181. package/lib/forms/controls/tickable.js +13 -5
  182. package/lib/forms/fields/boolean.js +14 -0
  183. package/lib/forms/fields/checkboxed-list.js +4 -0
  184. package/lib/forms/fields/collection-field.js +9 -0
  185. package/lib/forms/fields/color.js +10 -0
  186. package/lib/forms/fields/coordinates.js +49 -0
  187. package/lib/forms/fields/date.js +34 -0
  188. package/lib/forms/fields/datetime.js +46 -0
  189. package/lib/forms/fields/deep-reverse-single-reference-list.js +81 -0
  190. package/lib/forms/fields/deep-reverse-single-reference-table.js +122 -0
  191. package/lib/forms/fields/email.js +7 -0
  192. package/lib/forms/fields/enum-multiple-sealious.js +32 -0
  193. package/lib/forms/fields/field.js +32 -4
  194. package/lib/forms/fields/field.test.js +5 -5
  195. package/lib/forms/fields/fields.js +23 -8
  196. package/lib/forms/fields/file.js +33 -9
  197. package/lib/forms/fields/file.test.js +4 -16
  198. package/lib/forms/fields/float.js +10 -0
  199. package/lib/forms/fields/get-field-for-sealious.js +213 -0
  200. package/lib/forms/fields/html.js +14 -0
  201. package/lib/forms/fields/image.js +13 -0
  202. package/lib/forms/fields/int.js +23 -0
  203. package/lib/forms/fields/json.js +31 -0
  204. package/lib/forms/fields/markdown.js +14 -0
  205. package/lib/forms/fields/multiple-files.js +4 -0
  206. package/lib/forms/fields/number.js +6 -0
  207. package/lib/forms/fields/password.js +13 -0
  208. package/lib/forms/fields/pick-from-list-sealious.js +17 -0
  209. package/lib/forms/fields/pick-from-list.js +6 -2
  210. package/lib/forms/fields/proxy-field.js +3 -0
  211. package/lib/forms/fields/regexp.js +14 -0
  212. package/lib/forms/fields/simple-form-field.js +60 -2
  213. package/lib/forms/fields/single-reference.js +44 -0
  214. package/lib/forms/fields/structured-array.js +63 -12
  215. package/lib/forms/fields/table.js +28 -1
  216. package/lib/forms/fields/text.js +17 -0
  217. package/lib/forms/fields/url.js +17 -0
  218. package/lib/forms/form.js +30 -13
  219. package/lib/forms/form.test.js +3 -4
  220. package/lib/forms/multiform.js +4 -2
  221. package/lib/forms/multiform.test.js +3 -3
  222. package/lib/generate-stimulus.js +1 -0
  223. package/lib/index.js +1 -0
  224. package/lib/make-hidden-inputs.js +1 -1
  225. package/lib/mount.js +11 -0
  226. package/lib/notifier.js +0 -1
  227. package/lib/page/list.js +15 -8
  228. package/lib/page/mountable-with-fields.js +14 -6
  229. package/lib/page/mountable-with-fields.test.js +1 -1
  230. package/lib/templates/form.js +8 -9
  231. package/lib/templates/multiform.js +4 -4
  232. package/lib/templates/page.js +0 -2
  233. package/lib/templates/shared/collection-create-form.js +28 -40
  234. package/lib/templates/shared/collection-edit-form.js +40 -77
  235. package/lib/templates/shared/collection-list.js +12 -20
  236. package/lib/templates/shared/shared-crud-form-fields.js +27 -95
  237. package/lib/test_utils/test-on-real-app.js +3 -3
  238. package/lib/utils/extract-fields-from-collection.js +60 -20
  239. package/lib/utils/make-slug.js +1 -1
  240. package/lib/utils/wrap-attributes.js +20 -0
  241. package/package.json +5 -4
  242. package/src/add-crud.ts +86 -97
  243. package/src/add-list-route.test.ts +1 -1
  244. package/src/add-route.ts +0 -7
  245. package/src/build.ts +3 -1
  246. package/src/cli.ts +3 -5
  247. package/src/controllers/table-add-button.stimulus.ts +35 -0
  248. package/src/forms/controls/array.ts +23 -20
  249. package/src/forms/controls/autocomplete.ts +1 -1
  250. package/src/forms/controls/big-radio-group.ts +2 -2
  251. package/src/forms/controls/checkbox-group.ts +9 -9
  252. package/src/forms/controls/checkboxed-list-input.ts +27 -15
  253. package/src/forms/controls/controls.ts +2 -2
  254. package/src/forms/controls/derived-frame.ts +5 -1
  255. package/src/forms/controls/derived.ts +1 -1
  256. package/src/forms/controls/dropdown.ts +5 -2
  257. package/src/forms/controls/editable-collection-subset.ts +2 -2
  258. package/src/forms/controls/file.test.ts +4 -2
  259. package/src/forms/controls/file.ts +31 -5
  260. package/src/forms/controls/form-control.ts +7 -2
  261. package/src/forms/controls/hidden-input.ts +4 -1
  262. package/src/forms/controls/{photo.test.ts → image.test.ts} +5 -22
  263. package/src/forms/controls/{photo.ts → image.ts} +3 -5
  264. package/src/forms/controls/multiple-files.ts +18 -1
  265. package/src/forms/controls/{multiple-photos.ts → multiple-images.ts} +1 -1
  266. package/src/forms/controls/number.ts +1 -1
  267. package/src/forms/controls/simple-input.ts +18 -34
  268. package/src/forms/controls/single-reference.ts +10 -2
  269. package/src/forms/controls/table.ts +90 -31
  270. package/src/forms/controls/textarea.ts +6 -4
  271. package/src/forms/controls/tickable.ts +13 -5
  272. package/src/forms/fields/boolean.ts +23 -1
  273. package/src/forms/fields/checkboxed-list.ts +11 -2
  274. package/src/forms/fields/collection-field.ts +16 -1
  275. package/src/forms/fields/color.ts +9 -0
  276. package/src/forms/fields/coordinates.ts +66 -0
  277. package/src/forms/fields/date.ts +50 -0
  278. package/src/forms/fields/datetime.ts +66 -0
  279. package/src/forms/fields/deep-reverse-single-reference-list.ts +136 -0
  280. package/src/forms/fields/deep-reverse-single-reference-table.ts +213 -0
  281. package/src/forms/fields/email.ts +9 -0
  282. package/src/forms/fields/enum-multiple-sealious.ts +48 -0
  283. package/src/forms/fields/field.test.ts +5 -5
  284. package/src/forms/fields/field.ts +94 -8
  285. package/src/forms/fields/fields.ts +23 -8
  286. package/src/forms/fields/file.test.ts +4 -16
  287. package/src/forms/fields/file.ts +43 -15
  288. package/src/forms/fields/float.ts +9 -0
  289. package/src/forms/fields/get-field-for-sealious.ts +304 -0
  290. package/src/forms/fields/html.ts +15 -0
  291. package/src/forms/fields/image.ts +12 -0
  292. package/src/forms/fields/int.ts +25 -0
  293. package/src/forms/fields/json.ts +48 -0
  294. package/src/forms/fields/markdown.ts +15 -0
  295. package/src/forms/fields/multiple-files.ts +10 -1
  296. package/src/forms/fields/number.ts +8 -1
  297. package/src/forms/fields/password.ts +17 -0
  298. package/src/forms/fields/pick-from-list-sealious.ts +22 -0
  299. package/src/forms/fields/pick-from-list.ts +7 -3
  300. package/src/forms/fields/proxy-field.ts +6 -1
  301. package/src/forms/fields/regexp.ts +27 -1
  302. package/src/forms/fields/simple-form-field.ts +95 -7
  303. package/src/forms/fields/single-reference.ts +62 -0
  304. package/src/forms/fields/structured-array.ts +115 -18
  305. package/src/forms/fields/table.ts +32 -1
  306. package/src/forms/fields/text.ts +18 -0
  307. package/src/forms/fields/url.ts +20 -0
  308. package/src/forms/form-types.ts +2 -0
  309. package/src/forms/form.test.ts +3 -4
  310. package/src/forms/form.ts +37 -16
  311. package/src/forms/forms.css +0 -85
  312. package/src/forms/multiform.test.ts +3 -3
  313. package/src/forms/multiform.ts +2 -0
  314. package/src/generate-stimulus.ts +1 -0
  315. package/src/index.ts +2 -1
  316. package/src/make-hidden-inputs.ts +1 -1
  317. package/src/mount.ts +14 -0
  318. package/src/notifier.ts +0 -1
  319. package/src/page/list.ts +15 -8
  320. package/src/page/mountable-with-fields.test.ts +1 -1
  321. package/src/page/mountable-with-fields.ts +18 -9
  322. package/src/register-external.ts +1 -1
  323. package/src/templates/form.ts +8 -9
  324. package/src/templates/multiform.ts +4 -4
  325. package/src/templates/page.ts +0 -2
  326. package/src/templates/shared/collection-create-form.ts +30 -66
  327. package/src/templates/shared/collection-edit-form.ts +41 -102
  328. package/src/templates/shared/collection-list.ts +12 -20
  329. package/src/templates/shared/item-delete.ts +0 -1
  330. package/src/templates/shared/shared-crud-form-fields.ts +37 -171
  331. package/src/test_utils/test-on-real-app.ts +4 -3
  332. package/src/utils/extract-fields-from-collection.ts +76 -25
  333. package/src/utils/make-slug.ts +1 -1
  334. package/src/utils/wrap-attributes.ts +17 -0
  335. package/lib/add-verbose-crud.js +0 -119
  336. package/lib/crud-field-snippets.js +0 -52
  337. package/lib/find-css-includes.js +0 -3
  338. package/lib/forms/controls/reverse-single-reference.js +0 -1
  339. package/lib/forms/fields/enum-multiple.js +0 -47
  340. package/lib/forms/fields/enum-multiple.test.js +0 -27
  341. package/lib/forms/fields/enum.js +0 -41
  342. package/lib/forms/fields/enum.test.js +0 -21
  343. package/lib/forms/fields/reverse-single-reference.js +0 -17
  344. package/lib/templates/shared/handlers/boolean.js +0 -14
  345. package/lib/templates/shared/handlers/date.js +0 -8
  346. package/lib/templates/shared/handlers/deep-reverse-single-reference.js +0 -209
  347. package/lib/templates/shared/handlers/default.js +0 -49
  348. package/lib/templates/shared/handlers/enum.js +0 -19
  349. package/lib/templates/shared/handlers/file.js +0 -23
  350. package/lib/templates/shared/handlers/image.js +0 -32
  351. package/lib/templates/shared/handlers/int.js +0 -11
  352. package/lib/templates/shared/handlers/jdd.js +0 -10
  353. package/lib/templates/shared/handlers/single-reference.js +0 -12
  354. package/lib/templates/shared/handlers/structured-array.js +0 -33
  355. package/src/add-verbose-crud.ts +0 -138
  356. package/src/crud-field-snippets.ts +0 -57
  357. package/src/find-css-includes.ts +0 -3
  358. package/src/forms/controls/reverse-single-reference.ts +0 -50
  359. package/src/forms/fields/enum-multiple.test.ts +0 -31
  360. package/src/forms/fields/enum-multiple.ts +0 -62
  361. package/src/forms/fields/enum.test.ts +0 -25
  362. package/src/forms/fields/enum.ts +0 -56
  363. package/src/forms/fields/reverse-single-reference.ts +0 -20
  364. package/src/templates/shared/handlers/boolean.ts +0 -18
  365. package/src/templates/shared/handlers/date.ts +0 -12
  366. package/src/templates/shared/handlers/deep-reverse-single-reference.ts +0 -244
  367. package/src/templates/shared/handlers/default.ts +0 -64
  368. package/src/templates/shared/handlers/enum.ts +0 -23
  369. package/src/templates/shared/handlers/file.ts +0 -27
  370. package/src/templates/shared/handlers/image.ts +0 -45
  371. package/src/templates/shared/handlers/int.ts +0 -15
  372. package/src/templates/shared/handlers/jdd.ts +0 -14
  373. package/src/templates/shared/handlers/single-reference.ts +0 -16
  374. package/src/templates/shared/handlers/structured-array.ts +0 -42
@@ -0,0 +1,13 @@
1
+ import { Context } from "koa";
2
+ import { FormControlContext } from "../controls/form-control.js";
3
+ import { Textarea } from "../controls/textarea.js";
4
+ import { FormDataValue } from "../form-types.js";
5
+ import { FieldParseResult } from "./field.js";
6
+ import { SimpleFormField } from "./simple-form-field.js";
7
+ export declare class JSONField<Required extends boolean> extends SimpleFormField<Required, Textarea, Record<string, unknown>> {
8
+ constructor(required: Required);
9
+ getControl(): Textarea;
10
+ getEmptyValue(): Record<string, unknown>;
11
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<Record<string, unknown>>>;
12
+ getSealiousCreateValue(fctx: FormControlContext): Promise<Record<string, unknown> | null>;
13
+ }
@@ -0,0 +1,6 @@
1
+ import { Textarea } from "../controls/textarea.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class Markdown<Required extends boolean> extends TextBasedSimpleField<Required, Textarea> {
4
+ constructor(required: Required);
5
+ getControl(): Textarea;
6
+ }
@@ -0,0 +1,16 @@
1
+ import { Context } from "koa";
2
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
3
+ import { FormField } from "./field.js";
4
+ import { MultipleFiles as MultipleFilesControl } from "../controls/multiple-files.js";
5
+ export declare class MultipleFiles extends FormField<false, undefined, MultipleFilesControl> {
6
+ collection_field: SealiousFieldTypes.ReverseSingleReference;
7
+ getItemId: (ctx: Context) => Promise<string> | string;
8
+ constructor(collection_field: SealiousFieldTypes.ReverseSingleReference, getItemId: (ctx: Context) => Promise<string> | string);
9
+ getEmptyValue(): undefined;
10
+ parse(): Promise<{
11
+ readonly parsed_value: undefined;
12
+ readonly parsable: true;
13
+ readonly error: null;
14
+ }>;
15
+ getControl(): MultipleFilesControl;
16
+ }
@@ -1,7 +1,8 @@
1
1
  import { Context } from "koa";
2
2
  import { FieldTypes as SealiousFieldTypes } from "sealious";
3
3
  import { FormField } from "./field.js";
4
- export declare class MultipleFiles extends FormField<false> {
4
+ import { MultipleFiles as MultipleFilesControl } from "../controls/multiple-files.js";
5
+ export declare class MultipleFiles extends FormField<false, undefined, MultipleFilesControl> {
5
6
  collection_field: SealiousFieldTypes.ReverseSingleReference;
6
7
  getItemId: (ctx: Context) => Promise<string> | string;
7
8
  constructor(collection_field: SealiousFieldTypes.ReverseSingleReference, getItemId: (ctx: Context) => Promise<string> | string);
@@ -11,4 +12,5 @@ export declare class MultipleFiles extends FormField<false> {
11
12
  readonly parsable: true;
12
13
  readonly error: null;
13
14
  }>;
15
+ getControl(): MultipleFilesControl;
14
16
  }
@@ -0,0 +1,25 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ export declare class NumberField<DefaultValue extends number | null = number, Required extends boolean = boolean> extends FormField<Required, number | DefaultValue, SimpleInput<number>> {
6
+ default_value: DefaultValue;
7
+ options: Partial<{
8
+ max: number;
9
+ min: number;
10
+ decimalDigits: number;
11
+ }>;
12
+ constructor(required: Required, default_value: DefaultValue, options?: Partial<{
13
+ max: number;
14
+ min: number;
15
+ decimalDigits: number;
16
+ }>);
17
+ predicate: import("@sealcode/ts-predicates").Predicate<number>;
18
+ isValueValid(_: Context, value: unknown): Promise<{
19
+ valid: boolean;
20
+ message: string;
21
+ }>;
22
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<number>>;
23
+ getEmptyValue(): DefaultValue;
24
+ getControl(): SimpleInput<number>;
25
+ }
@@ -0,0 +1,25 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ export declare class NumberField<DefaultValue extends number | null = number, Required extends boolean = boolean> extends FormField<Required, number | DefaultValue, SimpleInput<number>> {
6
+ default_value: DefaultValue;
7
+ options: Partial<{
8
+ max: number;
9
+ min: number;
10
+ decimalDigits: number;
11
+ }>;
12
+ constructor(required: Required, default_value: DefaultValue, options?: Partial<{
13
+ max: number;
14
+ min: number;
15
+ decimalDigits: number;
16
+ }>);
17
+ predicate: import("@sealcode/ts-predicates").Predicate<number>;
18
+ isValueValid(_: Context, value: unknown): Promise<{
19
+ valid: boolean;
20
+ message: string;
21
+ }>;
22
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<number>>;
23
+ getEmptyValue(): DefaultValue;
24
+ getControl(): SimpleInput<number>;
25
+ }
@@ -1,7 +1,8 @@
1
1
  import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
2
3
  import { FormDataValue } from "../form-types.js";
3
4
  import { FieldParseResult, FormField } from "./field.js";
4
- export declare class NumberField<DefaultValue extends number | null = number, Required extends boolean = boolean> extends FormField<Required, number | DefaultValue> {
5
+ export declare class NumberField<DefaultValue extends number | null = number, Required extends boolean = boolean> extends FormField<Required, number | DefaultValue, SimpleInput> {
5
6
  default_value: DefaultValue;
6
7
  options: Partial<{
7
8
  max: number;
@@ -20,4 +21,5 @@ export declare class NumberField<DefaultValue extends number | null = number, Re
20
21
  }>;
21
22
  parse(_: Context, value: FormDataValue): Promise<FieldParseResult<number>>;
22
23
  getEmptyValue(): DefaultValue;
24
+ getControl(): SimpleInput;
23
25
  }
@@ -0,0 +1,6 @@
1
+ import { Context } from "koa";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class Password<Required extends boolean> extends TextBasedSimpleField<Required> {
4
+ constructor(required: Required);
5
+ sealiousValueToForm(ctx: Context, value: unknown): Promise<undefined>;
6
+ }
@@ -0,0 +1,11 @@
1
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
2
+ import { PickFromListField } from "./pick-from-list.js";
3
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
4
+ export declare class PickFromListSealious<Required extends boolean> extends PickFromListField<Required> {
5
+ sealious_field: SealiousFieldTypes.Enum<string>;
6
+ constructor(sealious_field: SealiousFieldTypes.Enum<string>);
7
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
8
+ form_field_types: string;
9
+ sealious_field: string;
10
+ }): string;
11
+ }
@@ -0,0 +1,15 @@
1
+ import { Context } from "koa";
2
+ import { Dropdown, DropdownOption } from "../controls/dropdown.js";
3
+ import { FormFieldValidationResponse } from "./field.js";
4
+ import { TextBasedSimpleField } from "./simple-form-field.js";
5
+ export declare class PickFromListField<Required extends boolean> extends TextBasedSimpleField<Required, Dropdown> {
6
+ required: Required;
7
+ generateOptions: (ctx: Context) => Promise<DropdownOption[]>;
8
+ customValidation: (ctx: Context, value: unknown, instance: PickFromListField<Required>) => Promise<FormFieldValidationResponse>;
9
+ constructor(required: Required, generateOptions: (ctx: Context) => Promise<DropdownOption[]>, customValidation?: (ctx: Context, value: unknown, instance: PickFromListField<Required>) => Promise<FormFieldValidationResponse>);
10
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ isValueValid(ctx: Context, value: string): Promise<FormFieldValidationResponse>;
12
+ valueInList(ctx: Context, value: unknown): Promise<FormFieldValidationResponse>;
13
+ getEmptyValue(): string;
14
+ getControl(): Dropdown;
15
+ }
@@ -1,8 +1,8 @@
1
1
  import { Context } from "koa";
2
- import type { DropdownOption } from "../controls/dropdown.js";
2
+ import { Dropdown, DropdownOption } from "../controls/dropdown.js";
3
3
  import { FormFieldValidationResponse } from "./field.js";
4
- import { SimpleFormField } from "./simple-form-field.js";
5
- export declare class PickFromListField<Required extends boolean> extends SimpleFormField<Required> {
4
+ import { TextBasedSimpleField } from "./simple-form-field.js";
5
+ export declare class PickFromListField<Required extends boolean> extends TextBasedSimpleField<Required, Dropdown> {
6
6
  required: Required;
7
7
  generateOptions: (ctx: Context) => Promise<DropdownOption[]>;
8
8
  customValidation: (ctx: Context, value: unknown, instance: PickFromListField<Required>) => Promise<FormFieldValidationResponse>;
@@ -11,4 +11,5 @@ export declare class PickFromListField<Required extends boolean> extends SimpleF
11
11
  isValueValid(ctx: Context, value: string): Promise<FormFieldValidationResponse>;
12
12
  valueInList(ctx: Context, value: unknown): Promise<FormFieldValidationResponse>;
13
13
  getEmptyValue(): string;
14
+ getControl(): Dropdown;
14
15
  }
@@ -0,0 +1,15 @@
1
+ import { FormControl } from "../controls/form-control.js";
2
+ import { FormField } from "./field.js";
3
+ export declare class ProxyFormField<T> extends FormField<boolean, T, any> {
4
+ name: string;
5
+ empty_value: T;
6
+ parsed_value: T;
7
+ constructor(required: boolean, name: string, empty_value: T, parsed_value: T);
8
+ getEmptyValue(): T;
9
+ parse(): Promise<{
10
+ readonly parsable: true;
11
+ readonly error: null;
12
+ readonly parsed_value: T;
13
+ }>;
14
+ getControl(): FormControl;
15
+ }
@@ -1,5 +1,6 @@
1
+ import { FormControl } from "../controls/form-control.js";
1
2
  import { FormField } from "./field.js";
2
- export declare class ProxyFormField<T> extends FormField<boolean, T> {
3
+ export declare class ProxyFormField<T> extends FormField<boolean, T, any> {
3
4
  name: string;
4
5
  empty_value: T;
5
6
  parsed_value: T;
@@ -10,4 +11,5 @@ export declare class ProxyFormField<T> extends FormField<boolean, T> {
10
11
  readonly error: null;
11
12
  readonly parsed_value: T;
12
13
  }>;
14
+ getControl(): FormControl;
13
15
  }
@@ -0,0 +1,21 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ import { FormControlContext } from "../controls/form-control.js";
6
+ export declare class RegExpField<Required extends boolean> extends FormField<Required, string, SimpleInput<string>, string> {
7
+ regexp: RegExp;
8
+ error_message: string;
9
+ default_value: string;
10
+ constructor(required: Required, regexp: RegExp, error_message: string, default_value?: string);
11
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
12
+ isValueValid(_: Context, value: unknown): Promise<{
13
+ valid: boolean;
14
+ message: string;
15
+ }>;
16
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string>>;
17
+ getEmptyValue(): string;
18
+ getControl(): SimpleInput<string>;
19
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
20
+ sealiousValueToForm(ctx: Context, sealious_value: string | null): Promise<FormDataValue>;
21
+ }
@@ -0,0 +1,21 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ import { FormControlContext } from "../controls/form-control.js";
6
+ export declare class RegExpField<Required extends boolean> extends FormField<Required, string, SimpleInput<string>, string> {
7
+ regexp: RegExp;
8
+ error_message: string;
9
+ default_value: string;
10
+ constructor(required: Required, regexp: RegExp, error_message: string, default_value?: string);
11
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
12
+ isValueValid(_: Context, value: unknown): Promise<{
13
+ valid: boolean;
14
+ message: string;
15
+ }>;
16
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string>>;
17
+ getEmptyValue(): string;
18
+ getControl(): SimpleInput<string>;
19
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
20
+ sealiousValueToForm(ctx: Context, sealious_value: string | null): Promise<FormDataValue>;
21
+ }
@@ -1,7 +1,9 @@
1
1
  import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
2
3
  import { FormDataValue } from "../form-types.js";
3
4
  import { FieldParseResult, FormField } from "./field.js";
4
- export declare class RegExpField<Required extends boolean> extends FormField<Required> {
5
+ import { FormControlContext } from "../controls/form-control.js";
6
+ export declare class RegExpField<Required extends boolean> extends FormField<Required, string, SimpleInput, string> {
5
7
  regexp: RegExp;
6
8
  error_message: string;
7
9
  default_value: string;
@@ -13,4 +15,7 @@ export declare class RegExpField<Required extends boolean> extends FormField<Req
13
15
  }>;
14
16
  parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string>>;
15
17
  getEmptyValue(): string;
18
+ getControl(): SimpleInput;
19
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
20
+ sealiousValueToForm(ctx: Context, sealious_value: string | null): Promise<FormDataValue>;
16
21
  }
@@ -0,0 +1,21 @@
1
+ import { Context } from "koa";
2
+ import { SimpleInput } from "../controls/simple-input.js";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FieldParseResult, FormField } from "./field.js";
5
+ import { FormControlContext } from "../controls/form-control.js";
6
+ export declare class RegExpField<Required extends boolean> extends FormField<Required, string, SimpleInput<string>, string> {
7
+ regexp: RegExp;
8
+ error_message: string;
9
+ default_value: string;
10
+ constructor(required: Required, regexp: RegExp, error_message: string, default_value?: string);
11
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
12
+ isValueValid(_: Context, value: unknown): Promise<{
13
+ valid: boolean;
14
+ message: string;
15
+ }>;
16
+ parse(_: Context, value: FormDataValue): Promise<FieldParseResult<string>>;
17
+ getEmptyValue(): string;
18
+ getControl(): SimpleInput<string>;
19
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
20
+ sealiousValueToForm(ctx: Context, sealious_value: string | null): Promise<FormDataValue>;
21
+ }
@@ -0,0 +1,29 @@
1
+ import { FormDataValue } from "../form-types.js";
2
+ import { Context } from "koa";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ import { SimpleInput } from "../controls/simple-input.js";
5
+ import { FormControl } from "../controls/controls.js";
6
+ import { CollectionItem } from "sealious";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ export declare abstract class SimpleFormField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<string | null>, Parsed = string> extends FormField<Required, Parsed, DefaultControl> {
9
+ type: string;
10
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ constructor(required: Required, type?: string);
12
+ sealiousValueToForm(ctx: Context, value: unknown): Promise<FormDataValue>;
13
+ }
14
+ export declare class TextBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<string | null>> extends SimpleFormField<Required, DefaultControl, string> {
15
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
16
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
17
+ postSealiousCreate(ctx: Context, created_item: CollectionItem<any>): Promise<void>;
18
+ postSealiousEdit(ctx: Context, edited_item: CollectionItem<any>): Promise<void>;
19
+ getControl(): DefaultControl;
20
+ getEmptyValue(): string;
21
+ }
22
+ export declare class NumberBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<number | null>> extends SimpleFormField<Required, DefaultControl, number> {
23
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<number>>;
24
+ getSealiousCreateValue(fctx: FormControlContext): Promise<number | undefined>;
25
+ postSealiousCreate(): Promise<void>;
26
+ postSealiousEdit(): Promise<void>;
27
+ getControl(): DefaultControl;
28
+ getEmptyValue(): number;
29
+ }
@@ -0,0 +1,29 @@
1
+ import { FormDataValue } from "../form-types.js";
2
+ import { Context } from "koa";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ import { SimpleInput } from "../controls/simple-input.js";
5
+ import { FormControl } from "../controls/controls.js";
6
+ import { CollectionItem } from "sealious";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ export declare abstract class SimpleFormField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<string | null>, Parsed = string> extends FormField<Required, Parsed, DefaultControl> {
9
+ type: string;
10
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ constructor(required: Required, type?: string);
12
+ sealiousValueToForm(ctx: Context, value: unknown): Promise<FormDataValue>;
13
+ }
14
+ export declare class TextBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<string | null>> extends SimpleFormField<Required, DefaultControl, string> {
15
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
16
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
17
+ postSealiousCreate(ctx: Context, created_item: CollectionItem<any>): Promise<void>;
18
+ postSealiousEdit(ctx: Context, edited_item: CollectionItem<any>): Promise<void>;
19
+ getControl(): DefaultControl;
20
+ getEmptyValue(): string;
21
+ }
22
+ export declare class NumberBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<number | null>> extends SimpleFormField<Required, DefaultControl, number> {
23
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<number>>;
24
+ getSealiousCreateValue(fctx: FormControlContext): Promise<number | undefined>;
25
+ postSealiousCreate(): Promise<void>;
26
+ postSealiousEdit(): Promise<void>;
27
+ getControl(): DefaultControl;
28
+ getEmptyValue(): number;
29
+ }
@@ -1,9 +1,29 @@
1
1
  import { FormDataValue } from "../form-types.js";
2
2
  import { Context } from "koa";
3
3
  import { FieldParseResult, FormField } from "./field.js";
4
- export declare class SimpleFormField<Required extends boolean> extends FormField<Required, string | null> {
5
- parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
4
+ import { SimpleInput } from "../controls/simple-input.js";
5
+ import { FormControl } from "../controls/controls.js";
6
+ import { CollectionItem } from "sealious";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ export declare abstract class SimpleFormField<Required extends boolean, DefaultControl extends FormControl = SimpleInput, Parsed = string> extends FormField<Required, Parsed, DefaultControl> {
9
+ type: string;
6
10
  predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ constructor(required: Required, type?: string);
12
+ sealiousValueToForm(ctx: Context, value: unknown): Promise<FormDataValue>;
13
+ }
14
+ export declare class TextBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput> extends SimpleFormField<Required, DefaultControl, string | null> {
15
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
16
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string | null>;
17
+ postSealiousCreate(ctx: Context, created_item: CollectionItem<any>): Promise<void>;
18
+ postSealiousEdit(ctx: Context, edited_item: CollectionItem<any>): Promise<void>;
19
+ getControl(): DefaultControl;
7
20
  getEmptyValue(): string;
8
- constructor(required: Required);
21
+ }
22
+ export declare class NumberBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput> extends SimpleFormField<Required, DefaultControl, number> {
23
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<number>>;
24
+ getSealiousCreateValue(fctx: FormControlContext): Promise<number | undefined>;
25
+ postSealiousCreate(): Promise<void>;
26
+ postSealiousEdit(): Promise<void>;
27
+ getControl(): DefaultControl;
28
+ getEmptyValue(): number;
9
29
  }
@@ -0,0 +1,29 @@
1
+ import { FormDataValue } from "../form-types.js";
2
+ import { Context } from "koa";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ import { SimpleInput } from "../controls/simple-input.js";
5
+ import { FormControl } from "../controls/controls.js";
6
+ import { CollectionItem } from "sealious";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ export declare abstract class SimpleFormField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<string | null>, Parsed = string> extends FormField<Required, Parsed, DefaultControl> {
9
+ type: string;
10
+ predicate: import("@sealcode/ts-predicates").Predicate<string>;
11
+ constructor(required: Required, type?: string);
12
+ sealiousValueToForm(ctx: Context, value: unknown): Promise<FormDataValue>;
13
+ }
14
+ export declare class TextBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<string | null>> extends SimpleFormField<Required, DefaultControl, string> {
15
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<string>>;
16
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
17
+ postSealiousCreate(ctx: Context, created_item: CollectionItem<any>): Promise<void>;
18
+ postSealiousEdit(ctx: Context, edited_item: CollectionItem<any>): Promise<void>;
19
+ getControl(): DefaultControl;
20
+ getEmptyValue(): string;
21
+ }
22
+ export declare class NumberBasedSimpleField<Required extends boolean, DefaultControl extends FormControl = SimpleInput<number | null>> extends SimpleFormField<Required, DefaultControl, number> {
23
+ parse(_: Context, raw_value: FormDataValue): Promise<FieldParseResult<number>>;
24
+ getSealiousCreateValue(fctx: FormControlContext): Promise<number | undefined>;
25
+ postSealiousCreate(): Promise<void>;
26
+ postSealiousEdit(): Promise<void>;
27
+ getControl(): DefaultControl;
28
+ getEmptyValue(): number;
29
+ }
@@ -0,0 +1,19 @@
1
+ import { Collection, FieldTypes as SealiousFieldTypes } from "sealious";
2
+ import { CollectionField } from "./collection-field.js";
3
+ import { SingleReferenceDropdown } from "../controls/single-reference.js";
4
+ import { FormControlContext } from "../controls/form-control.js";
5
+ import { Context } from "koa";
6
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
7
+ export declare class SingleReference<TargetCollection extends Collection, Required extends boolean, F extends SealiousFieldTypes.SingleReference> extends CollectionField<F, Required> {
8
+ getControl(): SingleReferenceDropdown<TargetCollection, F, Required>;
9
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string | undefined>;
10
+ sealiousValueToForm(ctx: Context, value: string | null): Promise<string | undefined>;
11
+ generateImportsForFieldList(field_info: ExtractedFieldInfo): {
12
+ what: string;
13
+ from: string;
14
+ }[];
15
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
16
+ form_field_types: string;
17
+ sealious_field: string;
18
+ }): string;
19
+ }
@@ -0,0 +1,10 @@
1
+ import { FieldTypes as SealiousFieldTypes } from "sealious";
2
+ import { CollectionField } from "./collection-field.js";
3
+ import { SingleReferenceDropdown } from "../controls/single-reference.js";
4
+ import { FormControlContext } from "../controls/form-control.js";
5
+ import { Context } from "koa";
6
+ export declare class SingleReference<Required extends boolean, F extends SealiousFieldTypes.SingleReference> extends CollectionField<F, Required> {
7
+ getControl(): SingleReferenceDropdown<F, Required>;
8
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string | undefined>;
9
+ sealiousValueToForm(ctx: Context, value: string | null): Promise<string | undefined>;
10
+ }
@@ -0,0 +1,27 @@
1
+ import { Context } from "koa";
2
+ import { Field as SealiousField, FieldsetOutput, FieldTypes as SealiousFieldTypes, FieldsetInput } from "sealious";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FormField } from "./field.js";
5
+ import { Table as TableControl } from "../controls/table.js";
6
+ import { SealiousToFormField } from "./get-field-for-sealious.js";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
9
+ export declare class StructuredArray<SealiousFields extends Record<string, SealiousField<unknown>>, FormFields extends Record<string, FormField> = {
10
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
11
+ }> extends FormField<true, SealiousFieldTypes.ArrayStorageInput<FieldsetOutput<SealiousFields>>, TableControl<any>> {
12
+ sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>;
13
+ constructor(sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>);
14
+ parse(_context: Context, value: FormDataValue): Promise<{
15
+ parsable: true;
16
+ error: null;
17
+ parsed_value: FieldsetOutput<SealiousFields>;
18
+ }>;
19
+ getEmptyValue(): SealiousFieldTypes.ArrayStorageInput<FieldsetOutput<SealiousFields>>;
20
+ getControl(): TableControl<FormFields>;
21
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
22
+ form_field_types: string;
23
+ sealious_field: string;
24
+ }): string;
25
+ getSealiousCreateValue(fctx: FormControlContext): Promise<SealiousFieldTypes.ArrayStorageInput<FieldsetInput<SealiousFields>>>;
26
+ sealiousValueToForm(ctx: Context, sealiousValue: Record<string, FormDataValue>[] | null): Promise<FormDataValue>;
27
+ }
@@ -0,0 +1,27 @@
1
+ import { Context } from "koa";
2
+ import { Field as SealiousField, FieldsetOutput, FieldTypes as SealiousFieldTypes, FieldsetInput } from "sealious";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { FormField } from "./field.js";
5
+ import { Table as TableControl } from "../controls/table.js";
6
+ import { SealiousToFormField } from "./get-field-for-sealious.js";
7
+ import { FormControlContext } from "../controls/form-control.js";
8
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
9
+ export declare class StructuredArray<SealiousFields extends Record<string, SealiousField<unknown>>, FormFields extends Record<string, FormField> = {
10
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
11
+ }> extends FormField<true, SealiousFieldTypes.ArrayStorageInput<FieldsetOutput<SealiousFields>>, TableControl<any>> {
12
+ sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>;
13
+ constructor(sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>);
14
+ parse(_context: Context, value: FormDataValue): Promise<{
15
+ parsable: true;
16
+ error: null;
17
+ parsed_value: FieldsetOutput<SealiousFields>;
18
+ }>;
19
+ getEmptyValue(): SealiousFieldTypes.ArrayStorageInput<FieldsetOutput<SealiousFields>>;
20
+ getControl(): TableControl<FormFields>;
21
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
22
+ form_field_types: string;
23
+ sealious_field: string;
24
+ }): string;
25
+ getSealiousCreateValue(fctx: FormControlContext): Promise<SealiousFieldTypes.ArrayStorageInput<FieldsetInput<SealiousFields>>>;
26
+ sealiousValueToForm(ctx: Context, sealiousValue: Record<string, FormDataValue>[] | null): Promise<FormDataValue>;
27
+ }
@@ -1,14 +1,23 @@
1
1
  import { Context } from "koa";
2
- import { Field, FieldsetOutput, FieldTypes } from "sealious";
2
+ import { Field as SealiousField, FieldTypes as SealiousFieldTypes, FieldsetInput } from "sealious";
3
3
  import { FormDataValue } from "../form-types.js";
4
- import { FormField } from "./field.js";
5
- export declare class StructuredArrayField<Fields extends Record<string, Field<unknown>>> extends FormField<true, FieldTypes.ArrayStorageInput<FieldsetOutput<Fields>>> {
6
- sealious_field: FieldTypes.StructuredArray<Fields>;
7
- constructor(sealious_field: FieldTypes.StructuredArray<Fields>);
8
- parse(_context: Context, value: FormDataValue): Promise<{
9
- parsable: true;
10
- error: null;
11
- parsed_value: FieldsetOutput<Fields>;
4
+ import { Table as TableControl } from "../controls/table.js";
5
+ import { SealiousToFormField } from "./get-field-for-sealious.js";
6
+ import { FormControlContext } from "../controls/form-control.js";
7
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
8
+ import { Table } from "./table.js";
9
+ export declare class StructuredArray<SealiousFields extends Record<string, SealiousField<unknown>>> extends Table<{
10
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
11
+ }> {
12
+ sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>;
13
+ constructor(sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>);
14
+ getControl(): TableControl<{
15
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
12
16
  }>;
13
- getEmptyValue(): FieldTypes.ArrayStorageInput<FieldsetOutput<Fields>>;
17
+ generateFieldDeclaration(_field_info: ExtractedFieldInfo, vars: {
18
+ form_field_types: string;
19
+ sealious_field: string;
20
+ }): string;
21
+ getSealiousCreateValue(fctx: FormControlContext): Promise<SealiousFieldTypes.ArrayStorageInput<FieldsetInput<SealiousFields>>>;
22
+ sealiousValueToForm(ctx: Context, sealiousValue: Record<string, FormDataValue | null>[] | null): Promise<FormDataValue>;
14
23
  }
@@ -0,0 +1,27 @@
1
+ import { Context } from "koa";
2
+ import { Field as SealiousField, FieldTypes as SealiousFieldTypes, FieldsetInput } from "sealious";
3
+ import { FormDataValue } from "../form-types.js";
4
+ import { Table as TableControl } from "../controls/table.js";
5
+ import { SealiousToFormField } from "./get-field-for-sealious.js";
6
+ import { FormControlContext } from "../controls/form-control.js";
7
+ import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js";
8
+ import { Table } from "./table.js";
9
+ export declare class StructuredArray<SealiousFields extends Record<string, SealiousField<unknown>>, FormFields extends {
10
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
11
+ } = {
12
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
13
+ }> extends Table<{
14
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
15
+ }> {
16
+ sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>;
17
+ constructor(sealious_field: SealiousFieldTypes.StructuredArray<SealiousFields>);
18
+ getControl(): TableControl<{
19
+ [name in keyof SealiousFields]: SealiousToFormField<SealiousFields[name]>;
20
+ }>;
21
+ generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: {
22
+ form_field_types: string;
23
+ sealious_field: string;
24
+ }): string;
25
+ getSealiousCreateValue(fctx: FormControlContext): Promise<SealiousFieldTypes.ArrayStorageInput<FieldsetInput<SealiousFields>>>;
26
+ sealiousValueToForm(ctx: Context, sealiousValue: Record<string, FormDataValue>[] | null): Promise<FormDataValue>;
27
+ }
@@ -0,0 +1,16 @@
1
+ import { Context } from "koa";
2
+ import { FormDataValue } from "../form-types.js";
3
+ import { FieldParseResult, FormField } from "./field.js";
4
+ import { Table as TableControl } from "../controls/table.js";
5
+ export type ExtractFormFieldParsed<Field extends FormField> = Field extends FormField<true, infer T> ? NonNullable<T> : Field extends FormField<true, infer T> ? T : never;
6
+ export type TableFieldParsed<F extends Record<string, FormField>> = {
7
+ [field_name in keyof F]: ExtractFormFieldParsed<F[field_name]>;
8
+ }[];
9
+ export declare class Table<F extends Record<string, FormField>> extends FormField<false, TableFieldParsed<F>> {
10
+ columns: F;
11
+ constructor(columns: F);
12
+ getEmptyValue(): never[];
13
+ setName(name: string): void;
14
+ parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<TableFieldParsed<F>>>;
15
+ getControl(): TableControl<F>;
16
+ }
@@ -1,6 +1,7 @@
1
1
  import { Context } from "koa";
2
2
  import { FormDataValue } from "../form-types.js";
3
3
  import { FieldParseResult, FormField } from "./field.js";
4
+ import { Table as TableControl } from "../controls/table.js";
4
5
  export type ExtractFormFieldParsed<Field extends FormField> = Field extends FormField<true, infer T> ? NonNullable<T> : Field extends FormField<true, infer T> ? T : never;
5
6
  export type TableFieldParsed<F extends Record<string, FormField>> = {
6
7
  [field_name in keyof F]: ExtractFormFieldParsed<F[field_name]>;
@@ -9,5 +10,7 @@ export declare class Table<F extends Record<string, FormField>> extends FormFiel
9
10
  columns: F;
10
11
  constructor(columns: F);
11
12
  getEmptyValue(): never[];
13
+ setName(name: string): this;
12
14
  parse(ctx: Context, raw_value: FormDataValue): Promise<FieldParseResult<TableFieldParsed<F>>>;
15
+ getControl(): TableControl<F>;
13
16
  }
@@ -0,0 +1,6 @@
1
+ import { FormControlContext } from "../controls/form-control.js";
2
+ import { TextBasedSimpleField } from "./simple-form-field.js";
3
+ export declare class Text<Required extends boolean> extends TextBasedSimpleField<Required> {
4
+ constructor(required: Required);
5
+ getSealiousCreateValue(fctx: FormControlContext): Promise<string>;
6
+ }