@dxos/react-ui-form 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8

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 (318) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +0 -1
  3. package/dist/lib/browser/index.mjs +4054 -2217
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +87 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/lib/node-esm/index.mjs +4054 -2217
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +89 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +8 -8
  14. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
  15. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +89 -5
  16. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Form/Form.d.ts +135 -25
  18. package/dist/types/src/components/Form/Form.d.ts.map +1 -1
  19. package/dist/types/src/components/Form/Form.stories.d.ts +207 -56
  20. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Form/FormField.d.ts +52 -0
  22. package/dist/types/src/components/Form/FormField.d.ts.map +1 -0
  23. package/dist/types/src/components/Form/FormFieldComponent.d.ts +98 -0
  24. package/dist/types/src/components/Form/FormFieldComponent.d.ts.map +1 -0
  25. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts +9 -0
  26. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts.map +1 -0
  27. package/dist/types/src/components/Form/FormFieldSet.d.ts +26 -0
  28. package/dist/types/src/components/Form/FormFieldSet.d.ts.map +1 -0
  29. package/dist/types/src/components/Form/FormTooltipsContext.d.ts +19 -0
  30. package/dist/types/src/components/Form/FormTooltipsContext.d.ts.map +1 -0
  31. package/dist/types/src/components/Form/Layout/FormLayout.d.ts +50 -0
  32. package/dist/types/src/components/Form/Layout/FormLayout.d.ts.map +1 -0
  33. package/dist/types/src/components/Form/Layout/FormLayout.stories.d.ts +123 -0
  34. package/dist/types/src/components/Form/Layout/FormLayout.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Form/Layout/FormLayout.stories.test.d.ts +2 -0
  36. package/dist/types/src/components/Form/Layout/FormLayout.stories.test.d.ts.map +1 -0
  37. package/dist/types/src/components/Form/Layout/FormLayout.test.d.ts +2 -0
  38. package/dist/types/src/components/Form/Layout/FormLayout.test.d.ts.map +1 -0
  39. package/dist/types/src/components/Form/Layout/annotation.d.ts +30 -0
  40. package/dist/types/src/components/Form/Layout/annotation.d.ts.map +1 -0
  41. package/dist/types/src/components/Form/Layout/index.d.ts +4 -0
  42. package/dist/types/src/components/Form/Layout/index.d.ts.map +1 -0
  43. package/dist/types/src/components/Form/Layout/parser.d.ts +31 -0
  44. package/dist/types/src/components/Form/Layout/parser.d.ts.map +1 -0
  45. package/dist/types/src/components/Form/Layout/parser.test.d.ts +2 -0
  46. package/dist/types/src/components/Form/Layout/parser.test.d.ts.map +1 -0
  47. package/dist/types/src/components/Form/fields/ArrayField.d.ts +18 -0
  48. package/dist/types/src/components/Form/fields/ArrayField.d.ts.map +1 -0
  49. package/dist/types/src/components/Form/fields/BooleanField.d.ts +4 -0
  50. package/dist/types/src/components/Form/fields/BooleanField.d.ts.map +1 -0
  51. package/dist/types/src/components/Form/fields/DateField.d.ts +4 -0
  52. package/dist/types/src/components/Form/fields/DateField.d.ts.map +1 -0
  53. package/dist/types/src/components/Form/fields/GeoPointField.d.ts +5 -0
  54. package/dist/types/src/components/Form/fields/GeoPointField.d.ts.map +1 -0
  55. package/dist/types/src/components/Form/fields/InlineRefField.d.ts +13 -0
  56. package/dist/types/src/components/Form/fields/InlineRefField.d.ts.map +1 -0
  57. package/dist/types/src/components/Form/fields/MarkdownField.d.ts +11 -0
  58. package/dist/types/src/components/Form/fields/MarkdownField.d.ts.map +1 -0
  59. package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts +89 -0
  60. package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/Form/fields/NumberField.d.ts +4 -0
  62. package/dist/types/src/components/Form/fields/NumberField.d.ts.map +1 -0
  63. package/dist/types/src/components/Form/fields/RefField.d.ts +34 -0
  64. package/dist/types/src/components/Form/fields/RefField.d.ts.map +1 -0
  65. package/dist/types/src/components/Form/fields/RefField.test.d.ts +2 -0
  66. package/dist/types/src/components/Form/fields/RefField.test.d.ts.map +1 -0
  67. package/dist/types/src/components/Form/fields/SelectField.d.ts +13 -0
  68. package/dist/types/src/components/Form/fields/SelectField.d.ts.map +1 -0
  69. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts +5 -0
  70. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts.map +1 -0
  71. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts +89 -0
  72. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts.map +1 -0
  73. package/dist/types/src/components/Form/fields/TextAreaField.d.ts +4 -0
  74. package/dist/types/src/components/Form/fields/TextAreaField.d.ts.map +1 -0
  75. package/dist/types/src/components/Form/fields/TextField.d.ts +4 -0
  76. package/dist/types/src/components/Form/fields/TextField.d.ts.map +1 -0
  77. package/dist/types/src/components/Form/fields/TupleField.d.ts +6 -0
  78. package/dist/types/src/components/Form/fields/TupleField.d.ts.map +1 -0
  79. package/dist/types/src/components/Form/fields/index.d.ts +14 -0
  80. package/dist/types/src/components/Form/fields/index.d.ts.map +1 -0
  81. package/dist/types/src/components/Form/index.d.ts +5 -4
  82. package/dist/types/src/components/Form/index.d.ts.map +1 -1
  83. package/dist/types/src/components/Form/meta-tags.d.ts +30 -0
  84. package/dist/types/src/components/Form/meta-tags.d.ts.map +1 -0
  85. package/dist/types/src/components/Form/meta-tags.test.d.ts +2 -0
  86. package/dist/types/src/components/Form/meta-tags.test.d.ts.map +1 -0
  87. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts +8 -0
  88. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -0
  89. package/dist/types/src/components/ObjectForm/ObjectForm.stories.d.ts +87 -0
  90. package/dist/types/src/components/ObjectForm/ObjectForm.stories.d.ts.map +1 -0
  91. package/dist/types/src/components/ObjectForm/index.d.ts +2 -0
  92. package/dist/types/src/components/ObjectForm/index.d.ts.map +1 -0
  93. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +68 -0
  94. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -0
  95. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +92 -0
  96. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -0
  97. package/dist/types/src/components/ObjectPicker/index.d.ts +2 -0
  98. package/dist/types/src/components/ObjectPicker/index.d.ts.map +1 -0
  99. package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts +9 -0
  100. package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts.map +1 -0
  101. package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts +132 -0
  102. package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts +2 -0
  104. package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts.map +1 -0
  105. package/dist/types/src/components/ObjectProperties/index.d.ts +2 -0
  106. package/dist/types/src/components/ObjectProperties/index.d.ts.map +1 -0
  107. package/dist/types/src/components/ObjectTree/ObjectTree.d.ts +9 -0
  108. package/dist/types/src/components/ObjectTree/ObjectTree.d.ts.map +1 -0
  109. package/dist/types/src/components/ObjectTree/ObjectTree.stories.d.ts +91 -0
  110. package/dist/types/src/components/ObjectTree/ObjectTree.stories.d.ts.map +1 -0
  111. package/dist/types/src/components/ObjectTree/index.d.ts +2 -0
  112. package/dist/types/src/components/ObjectTree/index.d.ts.map +1 -0
  113. package/dist/types/src/components/RefEditor/RefEditor.d.ts +73 -0
  114. package/dist/types/src/components/RefEditor/RefEditor.d.ts.map +1 -0
  115. package/dist/types/src/components/RefEditor/RefEditor.stories.d.ts +92 -0
  116. package/dist/types/src/components/RefEditor/RefEditor.stories.d.ts.map +1 -0
  117. package/dist/types/src/components/RefEditor/index.d.ts +3 -0
  118. package/dist/types/src/components/RefEditor/index.d.ts.map +1 -0
  119. package/dist/types/src/components/RefEditor/ref-editor-extension.d.ts +47 -0
  120. package/dist/types/src/components/RefEditor/ref-editor-extension.d.ts.map +1 -0
  121. package/dist/types/src/components/Settings/Settings.d.ts +51 -0
  122. package/dist/types/src/components/Settings/Settings.d.ts.map +1 -0
  123. package/dist/types/src/components/Settings/Settings.stories.d.ts +89 -0
  124. package/dist/types/src/components/Settings/Settings.stories.d.ts.map +1 -0
  125. package/dist/types/src/components/Settings/SettingsFieldSet.d.ts +43 -0
  126. package/dist/types/src/components/Settings/SettingsFieldSet.d.ts.map +1 -0
  127. package/dist/types/src/components/Settings/SettingsItem.d.ts +16 -0
  128. package/dist/types/src/components/Settings/SettingsItem.d.ts.map +1 -0
  129. package/dist/types/src/components/Settings/SettingsSelectField.d.ts +18 -0
  130. package/dist/types/src/components/Settings/SettingsSelectField.d.ts.map +1 -0
  131. package/dist/types/src/components/Settings/index.d.ts +4 -0
  132. package/dist/types/src/components/Settings/index.d.ts.map +1 -0
  133. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +21 -11
  134. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
  135. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +91 -9
  136. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/index.d.ts +6 -2
  138. package/dist/types/src/components/index.d.ts.map +1 -1
  139. package/dist/types/src/components/testing.d.ts +14 -4
  140. package/dist/types/src/components/testing.d.ts.map +1 -1
  141. package/dist/types/src/hooks/index.d.ts +2 -3
  142. package/dist/types/src/hooks/index.d.ts.map +1 -1
  143. package/dist/types/src/hooks/useFormHandler.d.ts +82 -0
  144. package/dist/types/src/hooks/useFormHandler.d.ts.map +1 -0
  145. package/dist/types/src/hooks/useKeyHandler.d.ts +7 -0
  146. package/dist/types/src/hooks/useKeyHandler.d.ts.map +1 -0
  147. package/dist/types/src/index.d.ts +0 -2
  148. package/dist/types/src/index.d.ts.map +1 -1
  149. package/dist/types/src/translations.d.ts +70 -55
  150. package/dist/types/src/translations.d.ts.map +1 -1
  151. package/dist/types/src/util/field-type.d.ts +19 -0
  152. package/dist/types/src/util/field-type.d.ts.map +1 -0
  153. package/dist/types/src/util/field.d.ts +3 -3
  154. package/dist/types/src/util/field.d.ts.map +1 -1
  155. package/dist/types/src/util/formatting.d.ts +2 -2
  156. package/dist/types/src/util/formatting.d.ts.map +1 -1
  157. package/dist/types/src/util/index.d.ts +2 -1
  158. package/dist/types/src/util/index.d.ts.map +1 -1
  159. package/dist/types/src/util/properties.d.ts +35 -0
  160. package/dist/types/src/util/properties.d.ts.map +1 -0
  161. package/dist/types/src/util/properties.test.d.ts +2 -0
  162. package/dist/types/src/util/properties.test.d.ts.map +1 -0
  163. package/dist/types/src/util/refs.d.ts +3 -3
  164. package/dist/types/src/util/refs.d.ts.map +1 -1
  165. package/dist/types/tsconfig.tsbuildinfo +1 -1
  166. package/package.json +64 -47
  167. package/src/components/FieldEditor/FieldEditor.stories.tsx +49 -31
  168. package/src/components/FieldEditor/FieldEditor.test.tsx +4 -2
  169. package/src/components/FieldEditor/FieldEditor.tsx +100 -97
  170. package/src/components/Form/AUDIT.md +17 -0
  171. package/src/components/Form/Form.stories.tsx +151 -221
  172. package/src/components/Form/Form.tsx +461 -95
  173. package/src/components/Form/FormField.tsx +345 -0
  174. package/src/components/Form/FormFieldComponent.stories.tsx +65 -0
  175. package/src/components/Form/FormFieldComponent.tsx +253 -0
  176. package/src/components/Form/FormFieldSet.tsx +213 -0
  177. package/src/components/Form/FormTooltipsContext.ts +25 -0
  178. package/src/components/Form/Layout/FormLayout.stories.test.tsx +51 -0
  179. package/src/components/Form/Layout/FormLayout.stories.tsx +422 -0
  180. package/src/components/Form/Layout/FormLayout.test.ts +59 -0
  181. package/src/components/Form/Layout/FormLayout.tsx +251 -0
  182. package/src/components/Form/Layout/annotation.ts +38 -0
  183. package/src/components/Form/Layout/index.ts +7 -0
  184. package/src/components/Form/Layout/parser.test.ts +120 -0
  185. package/src/components/Form/Layout/parser.ts +167 -0
  186. package/src/components/Form/README.md +3 -0
  187. package/src/components/Form/fields/ArrayField.tsx +173 -0
  188. package/src/components/Form/fields/BooleanField.tsx +22 -0
  189. package/src/components/Form/fields/DateField.tsx +101 -0
  190. package/src/components/Form/fields/GeoPointField.tsx +124 -0
  191. package/src/components/Form/fields/InlineRefField.tsx +138 -0
  192. package/src/components/Form/fields/MarkdownField.stories.tsx +206 -0
  193. package/src/components/Form/fields/MarkdownField.tsx +167 -0
  194. package/src/components/Form/fields/NumberField.tsx +76 -0
  195. package/src/components/Form/fields/RefField.test.ts +45 -0
  196. package/src/components/Form/fields/RefField.tsx +266 -0
  197. package/src/components/Form/fields/SelectField.tsx +77 -0
  198. package/src/components/Form/fields/SelectOptionField.stories.tsx +66 -0
  199. package/src/components/Form/{custom/SelectOptionsInput.tsx → fields/SelectOptionField.tsx} +39 -32
  200. package/src/components/Form/fields/TextAreaField.tsx +38 -0
  201. package/src/components/Form/fields/TextField.tsx +38 -0
  202. package/src/components/Form/fields/TupleField.tsx +55 -0
  203. package/src/components/Form/fields/index.ts +17 -0
  204. package/src/components/Form/index.ts +6 -4
  205. package/src/components/Form/meta-tags.test.ts +47 -0
  206. package/src/components/Form/meta-tags.ts +33 -0
  207. package/src/components/ObjectForm/ObjectForm.stories.tsx +62 -0
  208. package/src/components/ObjectForm/ObjectForm.tsx +111 -0
  209. package/src/components/{ControlSection → ObjectForm}/index.ts +1 -1
  210. package/src/components/ObjectPicker/ObjectPicker.stories.tsx +212 -0
  211. package/src/components/ObjectPicker/ObjectPicker.tsx +202 -0
  212. package/src/components/ObjectPicker/index.ts +5 -0
  213. package/src/components/ObjectProperties/ObjectProperties.stories.tsx +350 -0
  214. package/src/components/ObjectProperties/ObjectProperties.test.tsx +111 -0
  215. package/src/components/ObjectProperties/ObjectProperties.tsx +146 -0
  216. package/src/components/ObjectProperties/index.ts +5 -0
  217. package/src/components/ObjectTree/ObjectTree.stories.tsx +134 -0
  218. package/src/components/ObjectTree/ObjectTree.tsx +190 -0
  219. package/src/components/ObjectTree/index.ts +5 -0
  220. package/src/components/RefEditor/RefEditor.stories.tsx +148 -0
  221. package/src/components/RefEditor/RefEditor.tsx +275 -0
  222. package/src/components/RefEditor/index.ts +6 -0
  223. package/src/components/RefEditor/ref-editor-extension.ts +254 -0
  224. package/src/components/Settings/AUDIT.md +51 -0
  225. package/src/components/Settings/Settings.stories.tsx +104 -0
  226. package/src/components/Settings/Settings.tsx +81 -0
  227. package/src/components/Settings/SettingsFieldSet.tsx +257 -0
  228. package/src/components/Settings/SettingsItem.tsx +58 -0
  229. package/src/components/Settings/SettingsSelectField.tsx +59 -0
  230. package/src/components/Settings/index.ts +7 -0
  231. package/src/components/ViewEditor/ViewEditor.stories.tsx +132 -64
  232. package/src/components/ViewEditor/ViewEditor.test.tsx +23 -22
  233. package/src/components/ViewEditor/ViewEditor.tsx +378 -216
  234. package/src/components/index.ts +6 -3
  235. package/src/components/testing.tsx +31 -12
  236. package/src/hooks/index.ts +2 -3
  237. package/src/hooks/useFormHandler.ts +380 -0
  238. package/src/hooks/useKeyHandler.tsx +37 -0
  239. package/src/index.ts +0 -4
  240. package/src/translations.ts +76 -59
  241. package/src/util/field-type.ts +60 -0
  242. package/src/util/field.ts +33 -43
  243. package/src/util/formatting.ts +22 -22
  244. package/src/util/index.ts +2 -1
  245. package/src/util/properties.test.ts +153 -0
  246. package/src/util/properties.ts +100 -0
  247. package/src/util/refs.ts +20 -19
  248. package/src/vite-env.d.ts +10 -0
  249. package/dist/types/src/components/ControlSection/ControlSection.d.ts +0 -23
  250. package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +0 -1
  251. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +0 -8
  252. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +0 -1
  253. package/dist/types/src/components/ControlSection/index.d.ts +0 -2
  254. package/dist/types/src/components/ControlSection/index.d.ts.map +0 -1
  255. package/dist/types/src/components/Form/ArrayField.d.ts +0 -16
  256. package/dist/types/src/components/Form/ArrayField.d.ts.map +0 -1
  257. package/dist/types/src/components/Form/Defaults.d.ts +0 -14
  258. package/dist/types/src/components/Form/Defaults.d.ts.map +0 -1
  259. package/dist/types/src/components/Form/FormActions.d.ts +0 -9
  260. package/dist/types/src/components/Form/FormActions.d.ts.map +0 -1
  261. package/dist/types/src/components/Form/FormContent.d.ts +0 -57
  262. package/dist/types/src/components/Form/FormContent.d.ts.map +0 -1
  263. package/dist/types/src/components/Form/FormContext.d.ts +0 -23
  264. package/dist/types/src/components/Form/FormContext.d.ts.map +0 -1
  265. package/dist/types/src/components/Form/Input.d.ts +0 -26
  266. package/dist/types/src/components/Form/Input.d.ts.map +0 -1
  267. package/dist/types/src/components/Form/RefField.d.ts +0 -12
  268. package/dist/types/src/components/Form/RefField.d.ts.map +0 -1
  269. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts +0 -4
  270. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts.map +0 -1
  271. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts +0 -4
  272. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +0 -1
  273. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +0 -7
  274. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +0 -1
  275. package/dist/types/src/components/Form/custom/TupleInput.d.ts +0 -6
  276. package/dist/types/src/components/Form/custom/TupleInput.d.ts.map +0 -1
  277. package/dist/types/src/components/Form/custom/index.d.ts +0 -4
  278. package/dist/types/src/components/Form/custom/index.d.ts.map +0 -1
  279. package/dist/types/src/components/Form/factory.d.ts +0 -8
  280. package/dist/types/src/components/Form/factory.d.ts.map +0 -1
  281. package/dist/types/src/components/deprecated/Form.d.ts +0 -15
  282. package/dist/types/src/components/deprecated/Form.d.ts.map +0 -1
  283. package/dist/types/src/components/deprecated/Form.stories.d.ts +0 -13
  284. package/dist/types/src/components/deprecated/Form.stories.d.ts.map +0 -1
  285. package/dist/types/src/components/deprecated/FormInput.d.ts +0 -16
  286. package/dist/types/src/components/deprecated/FormInput.d.ts.map +0 -1
  287. package/dist/types/src/components/deprecated/index.d.ts +0 -2
  288. package/dist/types/src/components/deprecated/index.d.ts.map +0 -1
  289. package/dist/types/src/hooks/useForm.d.ts +0 -67
  290. package/dist/types/src/hooks/useForm.d.ts.map +0 -1
  291. package/dist/types/src/hooks/useQueryRefOptions.d.ts +0 -23
  292. package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +0 -1
  293. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts +0 -8
  294. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +0 -1
  295. package/dist/types/src/util/schema.d.ts +0 -3
  296. package/dist/types/src/util/schema.d.ts.map +0 -1
  297. package/src/components/ControlSection/ControlSection.stories.tsx +0 -42
  298. package/src/components/ControlSection/ControlSection.tsx +0 -139
  299. package/src/components/Form/ArrayField.tsx +0 -125
  300. package/src/components/Form/Defaults.tsx +0 -204
  301. package/src/components/Form/FormActions.tsx +0 -54
  302. package/src/components/Form/FormContent.tsx +0 -241
  303. package/src/components/Form/FormContext.tsx +0 -110
  304. package/src/components/Form/Input.tsx +0 -51
  305. package/src/components/Form/RefField.tsx +0 -214
  306. package/src/components/Form/custom/GeoPointInput.tsx +0 -72
  307. package/src/components/Form/custom/SelectOptionsInput.stories.tsx +0 -62
  308. package/src/components/Form/custom/TupleInput.tsx +0 -47
  309. package/src/components/Form/custom/index.ts +0 -7
  310. package/src/components/Form/factory.tsx +0 -31
  311. package/src/components/deprecated/Form.stories.tsx +0 -63
  312. package/src/components/deprecated/Form.tsx +0 -119
  313. package/src/components/deprecated/FormInput.tsx +0 -71
  314. package/src/components/deprecated/index.ts +0 -5
  315. package/src/hooks/useForm.ts +0 -293
  316. package/src/hooks/useQueryRefOptions.ts +0 -53
  317. package/src/hooks/useRefQueryLookupHandler.ts +0 -39
  318. package/src/util/schema.ts +0 -14
@@ -2,126 +2,194 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
- import { Schema } from 'effect';
9
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
10
-
11
- import { Obj, Type } from '@dxos/echo';
12
- import { type EchoSchema, Format, TypedObject, toJsonSchema } from '@dxos/echo-schema';
13
- import { Filter, useQuery, useSpace } from '@dxos/react-client/echo';
14
- import { withClientProvider } from '@dxos/react-client/testing';
6
+ import * as Schema from 'effect/Schema';
7
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
+
9
+ import { DXN, EID, Filter, JsonSchema, Obj, Query, type QueryAST, Scope, Tag, Type, type View } from '@dxos/echo';
10
+ import { Format } from '@dxos/echo/Format';
11
+ import { type Mutable } from '@dxos/echo/Obj';
12
+ import { useQuery } from '@dxos/react-client/echo';
13
+ import { useClientStory, withClientProvider } from '@dxos/react-client/testing';
15
14
  import { useAsyncEffect } from '@dxos/react-ui';
16
- import { DataType, ProjectionModel, createView } from '@dxos/schema';
17
- import { withLayout, withTheme } from '@dxos/storybook-utils';
15
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
16
+ import { type ProjectionModel, ViewModel, getTypeURIFromQuery } from '@dxos/schema';
17
+ import { Employer, Organization, Person, Pipeline } from '@dxos/types';
18
18
 
19
- import { translations } from '../../translations';
20
- import { TestLayout, TestPanel, VIEW_EDITOR_DEBUG_SYMBOL } from '../testing';
19
+ import { translations } from '#translations';
21
20
 
21
+ import { TestLayout, VIEW_EDITOR_DEBUG_SYMBOL } from '../testing';
22
22
  import { ViewEditor, type ViewEditorProps } from './ViewEditor';
23
23
 
24
+ const types = [
25
+ // TODO(burdon): Get label from annotation.
26
+ { value: Type.getURI(Organization.Organization), label: 'Organization' },
27
+ { value: Type.getURI(Person.Person), label: 'Person' },
28
+ { value: Type.getURI(Pipeline.Pipeline), label: 'Project' },
29
+ { value: Type.getURI(Employer.Employer), label: 'Employer' },
30
+ ];
31
+
24
32
  // Type definition for debug objects exposed to tests.
25
33
  export type ViewEditorDebugObjects = {
26
- schema: EchoSchema;
27
- view: DataType.View;
34
+ type: Type.AnyEntity;
35
+ view: View.View;
28
36
  projection: ProjectionModel;
29
37
  };
30
38
 
31
- type StoryProps = Pick<ViewEditorProps, 'readonly'>;
39
+ type DefaultStoryProps = Pick<ViewEditorProps, 'readonly' | 'mode'>;
40
+
41
+ const DefaultStory = (props: DefaultStoryProps) => {
42
+ const { space } = useClientStory();
43
+ const [type, setType] = useState<Type.AnyEntity>();
44
+ const [view, setView] = useState<View.View>();
45
+ const projectionRef = useRef<ProjectionModel>(null);
46
+
47
+ const tags = useQuery(space?.db, Filter.type(Tag.Tag));
32
48
 
33
- const DefaultStory = (props: StoryProps) => {
34
- const space = useSpace();
35
- const [schema, setSchema] = useState<EchoSchema>();
36
- const [view, setView] = useState<DataType.View>();
37
- const [projection, setProjection] = useState<ProjectionModel>();
38
49
  useAsyncEffect(async () => {
39
50
  if (space) {
40
- class TestSchema extends TypedObject({ typename: 'example.com/type/Test', version: '0.1.0' })({
51
+ const TestSchema = Schema.Struct({
41
52
  name: Schema.String,
42
53
  email: Format.Email,
43
54
  salary: Format.Currency(),
44
- }) {}
55
+ }).pipe(Type.makeObject(DXN.make('com.example.type.test', '0.1.0')));
56
+
57
+ const AlternateSchema = Schema.Struct({
58
+ title: Schema.String,
59
+ description: Schema.String,
60
+ completed: Schema.Boolean,
61
+ }).pipe(Type.makeObject(DXN.make('com.example.type.alternate', '0.1.0')));
45
62
 
46
- const [schema] = await space.db.schemaRegistry.register([TestSchema]);
47
- const view = createView({
63
+ const testType = await space.db.addType(TestSchema);
64
+ await space.db.addType(AlternateSchema);
65
+ const view = ViewModel.make({
48
66
  name: 'Test',
49
- typename: schema.typename,
50
- jsonSchema: toJsonSchema(TestSchema),
51
- presentation: Obj.make(Type.Expando, {}),
67
+ query: Query.select(Filter.type(TestSchema)),
68
+ jsonSchema: JsonSchema.toJsonSchema(TestSchema),
52
69
  });
53
- const projection = new ProjectionModel(schema.jsonSchema, view.projection);
54
70
 
55
- setSchema(schema);
71
+ setType(testType);
56
72
  setView(view);
57
- setProjection(projection);
58
73
  }
59
74
  }, [space]);
60
75
 
61
- const views = useQuery(space, Filter.type(DataType.View));
62
- const currentTypename = useMemo(() => view?.query?.typename, [view]);
63
- const updateViewTypename = useCallback(
64
- (newTypename: string) => {
65
- if (!schema) {
76
+ const updateViewQuery = useCallback(
77
+ async (newQuery: QueryAST.Query, target?: EID.EID) => {
78
+ if (!type || !view || !space) {
66
79
  return;
67
80
  }
68
- const matchingViews = views.filter((view) => view.query.typename === currentTypename);
69
- for (const view of matchingViews) {
70
- view.query.typename = newTypename;
81
+
82
+ if (props.mode === 'tag') {
83
+ const queue = target;
84
+ const query = queue ? Query.fromAst(newQuery).from([Scope.feed(queue)]) : Query.fromAst(newQuery);
85
+ Obj.update(view, (view) => {
86
+ view.query.ast = query.ast as Mutable<typeof query.ast>;
87
+ });
88
+
89
+ const typeUri = getTypeURIFromQuery(query.ast);
90
+ const allTypes = space.db.graph.registry.list().filter(Type.isType);
91
+ const newSchema = allTypes.find((t) => Type.getURI(t) === typeUri);
92
+ if (!newSchema) {
93
+ return;
94
+ }
95
+
96
+ const newView = ViewModel.make({
97
+ query,
98
+ jsonSchema: JsonSchema.toJsonSchema(newSchema),
99
+ });
100
+ Obj.update(view, (view) => {
101
+ view.projection = Obj.getSnapshot(newView).projection as Mutable<typeof view.projection>;
102
+ });
103
+ setType(() => newSchema);
104
+ } else {
105
+ Obj.update(view, (view) => {
106
+ view.query.ast = newQuery as Mutable<typeof newQuery>;
107
+ });
71
108
  }
72
- schema.updateTypename(newTypename);
73
109
  },
74
- [views, schema],
110
+ [view, type],
75
111
  );
76
112
 
77
- const handleDelete = useCallback((property: string) => projection?.deleteFieldProjection(property), [projection]);
113
+ const handleDelete = useCallback(
114
+ (property: string) => projectionRef.current?.deleteFieldProjection(property),
115
+ [projectionRef],
116
+ );
78
117
 
79
118
  // Expose objects on window for test access.
80
119
  useEffect(() => {
81
- if (typeof window !== 'undefined' && schema && view && projection) {
82
- (window as any)[VIEW_EDITOR_DEBUG_SYMBOL] = { schema, view, projection } satisfies ViewEditorDebugObjects;
120
+ if (typeof window !== 'undefined' && type && view && projectionRef.current) {
121
+ (window as any)[VIEW_EDITOR_DEBUG_SYMBOL] = {
122
+ type,
123
+ view,
124
+ projection: projectionRef.current,
125
+ } satisfies ViewEditorDebugObjects;
83
126
  }
84
- }, [schema, view, projection]);
127
+ }, [type, view]);
85
128
 
86
129
  // NOTE(ZaymonFC): This looks awkward but it resolves an infinite parsing issue with sb.
87
130
  const json = useMemo(
88
- () => JSON.parse(JSON.stringify({ schema, view, projection })),
89
- [JSON.stringify(schema), JSON.stringify(view), JSON.stringify(projection)],
131
+ () => JSON.parse(JSON.stringify({ schema: type, view, projection: projectionRef.current })),
132
+ [JSON.stringify(type), JSON.stringify(view)],
90
133
  );
91
134
 
92
- if (!schema || !view || !projection) {
135
+ if (!type || !view) {
93
136
  return <div />;
94
137
  }
95
138
 
96
139
  return (
97
140
  <TestLayout json={json}>
98
- <TestPanel>
99
- <ViewEditor
100
- schema={schema}
101
- view={view}
102
- registry={space?.db.schemaRegistry}
103
- readonly={props.readonly}
104
- onTypenameChanged={updateViewTypename}
105
- onDelete={handleDelete}
106
- />
107
- </TestPanel>
141
+ <ViewEditor
142
+ ref={projectionRef}
143
+ type={type}
144
+ view={view}
145
+ registry={space?.db.graph.registry}
146
+ mode={props.mode}
147
+ readonly={props.readonly}
148
+ types={types}
149
+ tags={tags}
150
+ onQueryChanged={updateViewQuery}
151
+ onDelete={handleDelete}
152
+ />
108
153
  </TestLayout>
109
154
  );
110
155
  };
111
156
 
112
- const meta: Meta<StoryProps> = {
157
+ const meta = {
113
158
  title: 'ui/react-ui-form/ViewEditor',
114
159
  render: DefaultStory,
115
- decorators: [withClientProvider({ createSpace: true }), withLayout({ fullscreen: true }), withTheme],
116
- parameters: { translations },
117
- };
160
+ decorators: [
161
+ withClientProvider({
162
+ createSpace: true,
163
+ types: [Tag.Tag],
164
+ onCreateSpace: ({ space }) => {
165
+ space.db.add(Tag.make({ label: 'Important' }));
166
+ space.db.add(Tag.make({ label: 'Investor' }));
167
+ space.db.add(Tag.make({ label: 'New' }));
168
+ },
169
+ }),
170
+ withTheme(),
171
+ withLayout({ layout: 'fullscreen' }),
172
+ ],
173
+ parameters: {
174
+ layout: 'fullscreen',
175
+ translations,
176
+ },
177
+ } satisfies Meta<typeof DefaultStory>;
118
178
 
119
179
  export default meta;
120
180
 
121
- type Story = StoryObj<StoryProps>;
181
+ type Story = StoryObj<typeof meta>;
122
182
 
123
183
  export const Default: Story = {};
124
184
 
125
185
  export const Readonly: Story = {
126
- args: { readonly: true },
186
+ args: {
187
+ readonly: true,
188
+ },
189
+ };
190
+
191
+ export const TagQueryMode: Story = {
192
+ args: {
193
+ mode: 'tag',
194
+ },
127
195
  };
@@ -3,14 +3,14 @@
3
3
  //
4
4
 
5
5
  import { composeStories } from '@storybook/react';
6
- import { cleanup, fireEvent, screen, waitFor } from '@testing-library/react';
6
+ import { act, cleanup, fireEvent, screen, waitFor } from '@testing-library/react';
7
7
  import { afterEach, describe, expect, test } from 'vitest';
8
8
 
9
- import { EchoSchema, isInstanceOf } from '@dxos/echo-schema';
10
- import { DataType, ProjectionModel } from '@dxos/schema';
9
+ import { Type, View } from '@dxos/echo';
10
+ import { instanceOf as isInstanceOf } from '@dxos/echo/Obj';
11
+ import { ProjectionModel } from '@dxos/schema';
11
12
 
12
13
  import { VIEW_EDITOR_DEBUG_SYMBOL } from '../testing';
13
-
14
14
  import * as stories from './ViewEditor.stories';
15
15
  import { type ViewEditorDebugObjects } from './ViewEditor.stories';
16
16
 
@@ -19,8 +19,8 @@ const { Default } = composeStories(stories);
19
19
  const getViewEditorDebugObjects = (): ViewEditorDebugObjects => {
20
20
  const debugObjects = (window as any)[VIEW_EDITOR_DEBUG_SYMBOL] as ViewEditorDebugObjects;
21
21
  expect(debugObjects).toBeDefined();
22
- expect(debugObjects.schema).toBeInstanceOf(EchoSchema);
23
- expect(isInstanceOf(DataType.View, debugObjects.view)).toBeTruthy();
22
+ expect(Type.isType(debugObjects.type)).toBe(true);
23
+ expect(isInstanceOf(View.View, debugObjects.view)).toBeTruthy();
24
24
  expect(debugObjects.projection).toBeInstanceOf(ProjectionModel);
25
25
  return debugObjects;
26
26
  };
@@ -35,8 +35,12 @@ const waitForViewEditor = async () => {
35
35
  };
36
36
 
37
37
  describe('ViewEditor', () => {
38
- afterEach(() => {
39
- cleanup();
38
+ afterEach(async () => {
39
+ // Wrap cleanup in async act() so React fully drains the scheduler
40
+ // (including setImmediate callbacks) before happy-dom tears down window.
41
+ await act(async () => {
42
+ cleanup();
43
+ });
40
44
  });
41
45
 
42
46
  test('renders view editor', async () => {
@@ -54,7 +58,7 @@ describe('ViewEditor', () => {
54
58
  const nameField = screen.getByText('name');
55
59
  fireEvent.click(nameField);
56
60
 
57
- const fieldInput = screen.getByPlaceholderText('Field name.');
61
+ const fieldInput = screen.getByPlaceholderText('Property name');
58
62
  fireEvent.change(fieldInput, { target: { value: 'new_property' } });
59
63
 
60
64
  fireEvent.click(screen.getByTestId('save-button'));
@@ -68,7 +72,7 @@ describe('ViewEditor', () => {
68
72
  const debugObjects = getViewEditorDebugObjects();
69
73
 
70
74
  // Check schema contains new_property.
71
- const schemaProperties = debugObjects.schema.jsonSchema.properties;
75
+ const schemaProperties = debugObjects.type.jsonSchema.properties;
72
76
  expect(schemaProperties).toBeDefined();
73
77
  expect(schemaProperties!.new_property).toBeDefined();
74
78
  expect(schemaProperties!.name).toBeUndefined();
@@ -89,12 +93,12 @@ describe('ViewEditor', () => {
89
93
  await Default.run();
90
94
  await waitForViewEditor();
91
95
 
92
- // Click the add property button.
96
+ // Click the add property button. The new field is auto-expanded by handleAdd.
93
97
  const addButton = screen.getByText('Add property');
94
98
  fireEvent.click(addButton);
95
99
 
96
100
  // Fill out the property field.
97
- const fieldInput = screen.getByPlaceholderText('Field name.');
101
+ const fieldInput = screen.getByPlaceholderText('Property name');
98
102
  fireEvent.change(fieldInput, { target: { value: 'added_property' } });
99
103
 
100
104
  // Click the format combo box and select the first option.
@@ -116,7 +120,7 @@ describe('ViewEditor', () => {
116
120
  const debugObjects = getViewEditorDebugObjects();
117
121
 
118
122
  // Check schema contains added_property.
119
- const schemaProperties = debugObjects.schema.jsonSchema.properties;
123
+ const schemaProperties = debugObjects.type.jsonSchema.properties;
120
124
  expect(schemaProperties).toBeDefined();
121
125
  expect(schemaProperties!.added_property).toBeDefined();
122
126
 
@@ -134,7 +138,8 @@ describe('ViewEditor', () => {
134
138
  expect(addedPropertyProjection!.props.property).toBe('added_property');
135
139
  });
136
140
 
137
- test('delete property', async () => {
141
+ // TODO(mykola): Fix flaky test.
142
+ test('delete property', { retry: 2 }, async () => {
138
143
  await Default.run();
139
144
  await waitForViewEditor();
140
145
 
@@ -159,7 +164,7 @@ describe('ViewEditor', () => {
159
164
  const debugObjects = getViewEditorDebugObjects();
160
165
 
161
166
  // Check schema no longer contains the name property.
162
- const schemaProperties = debugObjects.schema.jsonSchema.properties;
167
+ const schemaProperties = debugObjects.type.jsonSchema.properties;
163
168
  expect(schemaProperties).toBeDefined();
164
169
  expect(schemaProperties!.name).toBeUndefined();
165
170
 
@@ -189,19 +194,15 @@ describe('ViewEditor', () => {
189
194
  // Access the live objects directly from window using symbol.
190
195
  const debugObjects = getViewEditorDebugObjects();
191
196
 
192
- // Check that hiddenFields is non-empty.
193
- expect(debugObjects.view.projection.hiddenFields).toBeDefined();
194
- expect(debugObjects.view.projection.hiddenFields!.length).toBeGreaterThan(0);
195
-
196
197
  // Click the show button
197
198
  fireEvent.click(screen.getByTestId('show-field-button'));
198
199
 
199
200
  // Wait for the data to update and check that hiddenFields is empty.
200
201
  await waitFor(() => {
201
- expect(debugObjects.view.projection.hiddenFields!.length).toBe(0);
202
+ expect(debugObjects.view.projection.fields.filter(({ visible }) => visible === false)!.length).toBe(0);
202
203
  });
203
204
 
204
205
  // Also verify that the field is back in the visible fields list.
205
- expect(debugObjects.view.projection.fields.length).toBeGreaterThan(0);
206
+ expect(debugObjects.view.projection.fields.filter(({ visible }) => visible !== false).length).toBeGreaterThan(0);
206
207
  });
207
- });
208
+ }, 30_000);