@dxos/react-ui-form 0.8.4-main.406dc2a → 0.8.4-main.422d1c7879

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 (219) hide show
  1. package/README.md +0 -1
  2. package/dist/lib/browser/index.mjs +2856 -2309
  3. package/dist/lib/browser/index.mjs.map +4 -4
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/node-esm/index.mjs +2856 -2309
  6. package/dist/lib/node-esm/index.mjs.map +4 -4
  7. package/dist/lib/node-esm/meta.json +1 -1
  8. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +8 -7
  9. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
  10. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +68 -60
  11. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Form/Form.d.ts +93 -26
  13. package/dist/types/src/components/Form/Form.d.ts.map +1 -1
  14. package/dist/types/src/components/Form/Form.stories.d.ts +114 -137
  15. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  16. package/dist/types/src/components/Form/FormField.d.ts +43 -0
  17. package/dist/types/src/components/Form/FormField.d.ts.map +1 -0
  18. package/dist/types/src/components/Form/FormFieldComponent.d.ts +80 -0
  19. package/dist/types/src/components/Form/FormFieldComponent.d.ts.map +1 -0
  20. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts +9 -0
  21. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts.map +1 -0
  22. package/dist/types/src/components/Form/FormFieldSet.d.ts +18 -0
  23. package/dist/types/src/components/Form/FormFieldSet.d.ts.map +1 -0
  24. package/dist/types/src/components/Form/fields/ArrayField.d.ts +18 -0
  25. package/dist/types/src/components/Form/fields/ArrayField.d.ts.map +1 -0
  26. package/dist/types/src/components/Form/fields/BooleanField.d.ts +4 -0
  27. package/dist/types/src/components/Form/fields/BooleanField.d.ts.map +1 -0
  28. package/dist/types/src/components/Form/fields/GeoPointField.d.ts +5 -0
  29. package/dist/types/src/components/Form/fields/GeoPointField.d.ts.map +1 -0
  30. package/dist/types/src/components/Form/fields/MarkdownField.d.ts +11 -0
  31. package/dist/types/src/components/Form/fields/MarkdownField.d.ts.map +1 -0
  32. package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts +83 -0
  33. package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts.map +1 -0
  34. package/dist/types/src/components/Form/fields/NumberField.d.ts +4 -0
  35. package/dist/types/src/components/Form/fields/NumberField.d.ts.map +1 -0
  36. package/dist/types/src/components/Form/fields/RefField.d.ts +22 -0
  37. package/dist/types/src/components/Form/fields/RefField.d.ts.map +1 -0
  38. package/dist/types/src/components/Form/fields/SelectField.d.ts +10 -0
  39. package/dist/types/src/components/Form/fields/SelectField.d.ts.map +1 -0
  40. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts +5 -0
  41. package/dist/types/src/components/Form/fields/SelectOptionField.d.ts.map +1 -0
  42. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts +84 -0
  43. package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts.map +1 -0
  44. package/dist/types/src/components/Form/fields/TextAreaField.d.ts +4 -0
  45. package/dist/types/src/components/Form/fields/TextAreaField.d.ts.map +1 -0
  46. package/dist/types/src/components/Form/fields/TextField.d.ts +4 -0
  47. package/dist/types/src/components/Form/fields/TextField.d.ts.map +1 -0
  48. package/dist/types/src/components/Form/fields/TupleField.d.ts +6 -0
  49. package/dist/types/src/components/Form/fields/TupleField.d.ts.map +1 -0
  50. package/dist/types/src/components/Form/fields/index.d.ts +12 -0
  51. package/dist/types/src/components/Form/fields/index.d.ts.map +1 -0
  52. package/dist/types/src/components/Form/index.d.ts +2 -4
  53. package/dist/types/src/components/Form/index.d.ts.map +1 -1
  54. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts +9 -0
  55. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -0
  56. package/dist/types/src/components/ObjectForm/index.d.ts +2 -0
  57. package/dist/types/src/components/ObjectForm/index.d.ts.map +1 -0
  58. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +37 -10
  59. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -1
  60. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +64 -59
  61. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts +9 -0
  63. package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts.map +1 -0
  64. package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts +127 -0
  65. package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts +2 -0
  67. package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts.map +1 -0
  68. package/dist/types/src/components/ObjectProperties/index.d.ts +2 -0
  69. package/dist/types/src/components/ObjectProperties/index.d.ts.map +1 -0
  70. package/dist/types/src/components/Settings/Settings.d.ts +43 -0
  71. package/dist/types/src/components/Settings/Settings.d.ts.map +1 -0
  72. package/dist/types/src/components/Settings/Settings.stories.d.ts +84 -0
  73. package/dist/types/src/components/Settings/Settings.stories.d.ts.map +1 -0
  74. package/dist/types/src/components/Settings/SettingsFieldSet.d.ts +38 -0
  75. package/dist/types/src/components/Settings/SettingsFieldSet.d.ts.map +1 -0
  76. package/dist/types/src/components/Settings/SettingsItem.d.ts +17 -0
  77. package/dist/types/src/components/Settings/SettingsItem.d.ts.map +1 -0
  78. package/dist/types/src/components/Settings/index.d.ts +3 -0
  79. package/dist/types/src/components/Settings/index.d.ts.map +1 -0
  80. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +13 -15
  81. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
  82. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +70 -64
  83. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/index.d.ts +3 -1
  85. package/dist/types/src/components/index.d.ts.map +1 -1
  86. package/dist/types/src/components/testing.d.ts +4 -6
  87. package/dist/types/src/components/testing.d.ts.map +1 -1
  88. package/dist/types/src/hooks/index.d.ts +2 -3
  89. package/dist/types/src/hooks/index.d.ts.map +1 -1
  90. package/dist/types/src/hooks/useFormHandler.d.ts +82 -0
  91. package/dist/types/src/hooks/useFormHandler.d.ts.map +1 -0
  92. package/dist/types/src/hooks/useKeyHandler.d.ts +7 -0
  93. package/dist/types/src/hooks/useKeyHandler.d.ts.map +1 -0
  94. package/dist/types/src/translations.d.ts +65 -60
  95. package/dist/types/src/translations.d.ts.map +1 -1
  96. package/dist/types/src/util/field-type.d.ts +19 -0
  97. package/dist/types/src/util/field-type.d.ts.map +1 -0
  98. package/dist/types/src/util/field.d.ts +3 -3
  99. package/dist/types/src/util/field.d.ts.map +1 -1
  100. package/dist/types/src/util/formatting.d.ts +2 -2
  101. package/dist/types/src/util/formatting.d.ts.map +1 -1
  102. package/dist/types/src/util/index.d.ts +2 -1
  103. package/dist/types/src/util/index.d.ts.map +1 -1
  104. package/dist/types/src/util/properties.d.ts +7 -0
  105. package/dist/types/src/util/properties.d.ts.map +1 -0
  106. package/dist/types/src/util/refs.d.ts +2 -2
  107. package/dist/types/src/util/refs.d.ts.map +1 -1
  108. package/dist/types/tsconfig.tsbuildinfo +1 -1
  109. package/package.json +47 -50
  110. package/src/components/FieldEditor/FieldEditor.stories.tsx +43 -25
  111. package/src/components/FieldEditor/FieldEditor.test.tsx +0 -1
  112. package/src/components/FieldEditor/FieldEditor.tsx +74 -78
  113. package/src/components/Form/AUDIT.md +17 -0
  114. package/src/components/Form/Form.stories.tsx +137 -250
  115. package/src/components/Form/Form.tsx +375 -107
  116. package/src/components/Form/FormField.tsx +305 -0
  117. package/src/components/Form/FormFieldComponent.stories.tsx +65 -0
  118. package/src/components/Form/FormFieldComponent.tsx +174 -0
  119. package/src/components/Form/FormFieldSet.tsx +144 -0
  120. package/src/components/Form/README.md +3 -0
  121. package/src/components/Form/fields/ArrayField.tsx +158 -0
  122. package/src/components/Form/fields/BooleanField.tsx +22 -0
  123. package/src/components/Form/fields/GeoPointField.tsx +120 -0
  124. package/src/components/Form/fields/MarkdownField.stories.tsx +151 -0
  125. package/src/components/Form/fields/MarkdownField.tsx +167 -0
  126. package/src/components/Form/fields/NumberField.tsx +39 -0
  127. package/src/components/Form/fields/RefField.tsx +228 -0
  128. package/src/components/Form/fields/SelectField.tsx +65 -0
  129. package/src/components/Form/{custom/SelectOptionsInput.stories.tsx → fields/SelectOptionField.stories.tsx} +21 -17
  130. package/src/components/Form/{custom/SelectOptionsInput.tsx → fields/SelectOptionField.tsx} +28 -23
  131. package/src/components/Form/fields/TextAreaField.tsx +38 -0
  132. package/src/components/Form/fields/TextField.tsx +38 -0
  133. package/src/components/Form/{custom/TupleInput.tsx → fields/TupleField.tsx} +16 -9
  134. package/src/components/Form/fields/index.ts +15 -0
  135. package/src/components/Form/index.ts +3 -4
  136. package/src/components/ObjectForm/ObjectForm.tsx +113 -0
  137. package/src/components/{ControlSection → ObjectForm}/index.ts +1 -1
  138. package/src/components/ObjectPicker/ObjectPicker.stories.tsx +23 -21
  139. package/src/components/ObjectPicker/ObjectPicker.tsx +112 -80
  140. package/src/components/ObjectProperties/ObjectProperties.stories.tsx +361 -0
  141. package/src/components/ObjectProperties/ObjectProperties.test.tsx +101 -0
  142. package/src/components/ObjectProperties/ObjectProperties.tsx +140 -0
  143. package/src/components/ObjectProperties/index.ts +5 -0
  144. package/src/components/Settings/Settings.stories.tsx +103 -0
  145. package/src/components/Settings/Settings.tsx +81 -0
  146. package/src/components/Settings/SettingsFieldSet.tsx +211 -0
  147. package/src/components/Settings/SettingsItem.tsx +62 -0
  148. package/src/components/Settings/index.ts +6 -0
  149. package/src/components/ViewEditor/ViewEditor.stories.tsx +53 -50
  150. package/src/components/ViewEditor/ViewEditor.test.tsx +6 -6
  151. package/src/components/ViewEditor/ViewEditor.tsx +296 -206
  152. package/src/components/index.ts +3 -1
  153. package/src/components/testing.tsx +24 -11
  154. package/src/hooks/index.ts +2 -3
  155. package/src/hooks/useFormHandler.ts +380 -0
  156. package/src/hooks/useKeyHandler.tsx +37 -0
  157. package/src/translations.ts +70 -65
  158. package/src/util/field-type.ts +57 -0
  159. package/src/util/field.ts +25 -25
  160. package/src/util/formatting.ts +22 -22
  161. package/src/util/index.ts +2 -1
  162. package/src/util/properties.ts +18 -0
  163. package/src/util/refs.ts +16 -18
  164. package/dist/types/src/components/ControlSection/ControlSection.d.ts +0 -23
  165. package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +0 -1
  166. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +0 -84
  167. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +0 -1
  168. package/dist/types/src/components/ControlSection/index.d.ts +0 -2
  169. package/dist/types/src/components/ControlSection/index.d.ts.map +0 -1
  170. package/dist/types/src/components/Form/ArrayField.d.ts +0 -16
  171. package/dist/types/src/components/Form/ArrayField.d.ts.map +0 -1
  172. package/dist/types/src/components/Form/Defaults.d.ts +0 -14
  173. package/dist/types/src/components/Form/Defaults.d.ts.map +0 -1
  174. package/dist/types/src/components/Form/FormActions.d.ts +0 -9
  175. package/dist/types/src/components/Form/FormActions.d.ts.map +0 -1
  176. package/dist/types/src/components/Form/FormContent.d.ts +0 -63
  177. package/dist/types/src/components/Form/FormContent.d.ts.map +0 -1
  178. package/dist/types/src/components/Form/FormContext.d.ts +0 -23
  179. package/dist/types/src/components/Form/FormContext.d.ts.map +0 -1
  180. package/dist/types/src/components/Form/Input.d.ts +0 -29
  181. package/dist/types/src/components/Form/Input.d.ts.map +0 -1
  182. package/dist/types/src/components/Form/RefField.d.ts +0 -22
  183. package/dist/types/src/components/Form/RefField.d.ts.map +0 -1
  184. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts +0 -4
  185. package/dist/types/src/components/Form/custom/GeoPointInput.d.ts.map +0 -1
  186. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts +0 -4
  187. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +0 -1
  188. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +0 -79
  189. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +0 -1
  190. package/dist/types/src/components/Form/custom/TupleInput.d.ts +0 -6
  191. package/dist/types/src/components/Form/custom/TupleInput.d.ts.map +0 -1
  192. package/dist/types/src/components/Form/custom/index.d.ts +0 -4
  193. package/dist/types/src/components/Form/custom/index.d.ts.map +0 -1
  194. package/dist/types/src/components/Form/factory.d.ts +0 -8
  195. package/dist/types/src/components/Form/factory.d.ts.map +0 -1
  196. package/dist/types/src/hooks/useForm.d.ts +0 -67
  197. package/dist/types/src/hooks/useForm.d.ts.map +0 -1
  198. package/dist/types/src/hooks/useQueryRefOptions.d.ts +0 -29
  199. package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +0 -1
  200. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts +0 -8
  201. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +0 -1
  202. package/dist/types/src/util/schema.d.ts +0 -3
  203. package/dist/types/src/util/schema.d.ts.map +0 -1
  204. package/src/components/ControlSection/ControlSection.stories.tsx +0 -38
  205. package/src/components/ControlSection/ControlSection.tsx +0 -153
  206. package/src/components/Form/ArrayField.tsx +0 -125
  207. package/src/components/Form/Defaults.tsx +0 -205
  208. package/src/components/Form/FormActions.tsx +0 -54
  209. package/src/components/Form/FormContent.tsx +0 -322
  210. package/src/components/Form/FormContext.tsx +0 -110
  211. package/src/components/Form/Input.tsx +0 -54
  212. package/src/components/Form/RefField.tsx +0 -283
  213. package/src/components/Form/custom/GeoPointInput.tsx +0 -80
  214. package/src/components/Form/custom/index.ts +0 -7
  215. package/src/components/Form/factory.tsx +0 -31
  216. package/src/hooks/useForm.ts +0 -296
  217. package/src/hooks/useQueryRefOptions.ts +0 -62
  218. package/src/hooks/useRefQueryLookupHandler.ts +0 -39
  219. package/src/util/schema.ts +0 -12
@@ -1,155 +1,132 @@
1
1
  import { type StoryObj } from '@storybook/react-vite';
2
2
  import * as Schema from 'effect/Schema';
3
3
  import React from 'react';
4
- import { type Type } from '@dxos/echo';
5
- import { type BaseObject, Expando, Ref } from '@dxos/echo/internal';
6
- import { type FormProps } from './Form';
7
- type StoryProps<T extends BaseObject> = {
4
+ import { Type } from '@dxos/echo';
5
+ import { type AnyProperties } from '@dxos/echo/internal';
6
+ import { type ExcludeId, type FormRootProps } from './Form';
7
+ declare const Organization: Type.Obj<{
8
+ readonly name: string;
9
+ }, Schema.Struct.Fields>;
10
+ export interface Organization extends Schema.Schema.Type<typeof Organization> {
11
+ }
12
+ declare const Person: Type.Obj<{
13
+ readonly name: string;
14
+ readonly address?: {
15
+ readonly state: string;
16
+ readonly street: string;
17
+ readonly city: string;
18
+ readonly zip: number;
19
+ } | undefined;
20
+ readonly status?: "active" | "inactive" | undefined;
21
+ readonly location?: readonly [number, number, (number | undefined)?] | undefined;
22
+ readonly tags?: readonly import("@dxos/echo/internal").Ref<import("@dxos/echo/Entity").OfKind<import("@dxos/echo/internal").EntityKind.Object> & {
23
+ readonly hue?: string | undefined;
24
+ readonly label: string;
25
+ }>[] | undefined;
26
+ readonly ignore?: string | undefined;
27
+ readonly active?: boolean | undefined;
28
+ readonly employer?: import("@dxos/echo/internal").Ref<import("@dxos/echo/Entity").OfKind<import("@dxos/echo/internal").EntityKind.Object> & {
29
+ readonly name: string;
30
+ }> | undefined;
31
+ readonly notes?: string | undefined;
32
+ readonly tasks?: readonly string[] | undefined;
33
+ readonly locations?: readonly (readonly [number, number, (number | undefined)?])[] | undefined;
34
+ readonly identities?: readonly {
35
+ readonly type: string;
36
+ readonly value: string;
37
+ }[] | undefined;
38
+ }, Schema.Struct.Fields>;
39
+ export interface Person extends Schema.Schema.Type<typeof Person> {
40
+ }
41
+ type DefaultStoryProps<T extends AnyProperties> = {
42
+ schema?: Schema.Schema<T>;
8
43
  debug?: boolean;
9
- schema: Type.Obj.Any;
10
- } & FormProps<T>;
44
+ } & FormRootProps<T>;
11
45
  declare const meta: {
12
46
  title: string;
13
- component: any;
14
- render: <T extends BaseObject = any>({ debug, schema, values: initialValues, ...props }: StoryProps<T>) => React.JSX.Element;
47
+ component: {
48
+ <T extends AnyProperties = AnyProperties>({ children, schema, values, onSave, onCancel, ...props }: FormRootProps<T>): React.JSX.Element;
49
+ displayName: string;
50
+ };
51
+ render: <T extends AnyProperties = AnyProperties>({ debug, schema, values: valuesProp, ...props }: DefaultStoryProps<T>) => React.JSX.Element;
15
52
  decorators: import("@storybook/react").Decorator[];
16
53
  parameters: {
17
54
  layout: string;
18
55
  translations: [{
19
56
  readonly 'en-US': {
20
- readonly "react-ui-form": {
21
- readonly 'fields label': "Fields";
22
- readonly 'hidden fields label': "Hidden Fields";
23
- readonly 'empty readonly ref field label': "(none)";
24
- readonly 'button add property': "Add property";
25
- readonly 'field property label': "Property";
26
- readonly 'field property placeholder': "Property name";
27
- readonly 'field format label': "Type";
28
- readonly 'field path label': "Field path";
29
- readonly 'add field': "Add field";
30
- readonly 'delete field': "Delete field";
31
- readonly 'field limit reached': "Maximum number of fields reached";
32
- readonly 'boolean input true value': "Yes";
33
- readonly 'boolean input false value': "No";
34
- readonly 'show field label': "Show field";
35
- readonly 'hide field label': "Hide field";
36
- readonly 'delete field label': "Delete field";
37
- readonly 'ref field combobox input placeholder': "Search…";
38
- readonly 'ref field placeholder_one': "Select…";
39
- readonly 'ref field placeholder_other': "Select items…";
40
- readonly 'button cancel': "Cancel";
41
- readonly 'button save': "Save";
42
- readonly 'format boolean': "Boolean";
43
- readonly 'format currency': "Currency";
44
- readonly 'format date': "Date";
45
- readonly 'format date-time': "DateTime";
46
- readonly 'format did': "DID";
47
- readonly 'format duration': "Duration";
48
- readonly 'format dxn': "DXN";
49
- readonly 'format email': "Email";
50
- readonly 'format formula': "Formula";
51
- readonly 'format hostname': "Hostname";
52
- readonly 'format integer': "Integer";
53
- readonly 'format json': "JSON";
54
- readonly 'format lnglat': "Geopoint";
55
- readonly 'format markdown': "Markdown";
56
- readonly 'format percent': "Percent";
57
- readonly 'format ref': "Reference";
58
- readonly 'format regex': "RegExp";
59
- readonly 'format string': "String";
60
- readonly 'format single-select': "Select";
61
- readonly 'format multi-select': "Multi-select";
62
- readonly 'format text': "Long text";
63
- readonly 'format time': "Time";
64
- readonly 'format timestamp': "Timestamp";
65
- readonly 'format user': "User";
66
- readonly 'format number': "Number";
67
- readonly 'format uri': "URI";
68
- readonly 'format url': "URL";
69
- readonly 'format uuid': "UUID";
70
- readonly 'latitude label': "Latitude";
71
- readonly 'longitude label': "Longitude";
72
- readonly 'select option label': "Label";
73
- readonly 'select option label placeholder': "Option label";
74
- readonly 'select option color': "Color";
75
- readonly 'select option delete': "Delete";
76
- readonly 'select option add': "Add option";
77
- readonly 'system schema title': "System record type";
78
- readonly 'system schema description': "This is a system record type and cannot be modified, though the view can still be configured.";
57
+ readonly "@dxos/react-ui-form": {
58
+ readonly 'fields.label': "Fields";
59
+ readonly 'hidden-fields.label': "Hidden Fields";
60
+ readonly 'empty-readonly-ref-field.label': "(none)";
61
+ readonly 'field-property.label': "Property";
62
+ readonly 'field-property.placeholder': "Property name";
63
+ readonly 'field-format.label': "Type";
64
+ readonly 'field-path.label': "Field path";
65
+ readonly 'add-item.button': "Add item";
66
+ readonly 'add-property-button.label': "Add property";
67
+ readonly 'boolean-input-true.value': "Yes";
68
+ readonly 'boolean-input-false.value': "No";
69
+ readonly 'show-field.label': "Show field";
70
+ readonly 'hide-field.label': "Hide field";
71
+ readonly 'delete-field.label': "Delete field";
72
+ readonly 'create-option.label': "Create";
73
+ readonly 'add-tag.label': "Add tag";
74
+ readonly 'ref-field-combobox-input.placeholder': "Search…";
75
+ readonly 'ref-field.placeholder': "Select…";
76
+ readonly 'ref-field.placeholder_one': "Select…";
77
+ readonly 'ref-field.placeholder_other': "Select items…";
78
+ readonly 'example.placeholder': "Example";
79
+ readonly 'latitude.placeholder': "Latitude (e.g., 40.7128)";
80
+ readonly 'longitude.placeholder': "Longitude (e.g., -74.0060)";
81
+ readonly 'cancel-button.label': "Cancel";
82
+ readonly 'save-button.label': "Save";
83
+ readonly 'create-text.label': "Create text";
84
+ readonly 'format.boolean.label': "Boolean";
85
+ readonly 'format.currency.label': "Currency";
86
+ readonly 'format.date.label': "Date";
87
+ readonly 'format.date-time.label': "DateTime";
88
+ readonly 'format.did.label': "DID";
89
+ readonly 'format.duration.label': "Duration";
90
+ readonly 'format.dxn.label': "DXN";
91
+ readonly 'format.email.label': "Email";
92
+ readonly 'format.formula.label': "Formula";
93
+ readonly 'format.hostname.label': "Hostname";
94
+ readonly 'format.integer.label': "Integer";
95
+ readonly 'format.json.label': "JSON";
96
+ readonly 'format.lnglat.label': "Geopoint";
97
+ readonly 'format.markdown.label': "Markdown";
98
+ readonly 'format.percent.label': "Percent";
99
+ readonly 'format.ref.label': "Reference";
100
+ readonly 'format.regex.label': "RegExp";
101
+ readonly 'format.string.label': "String";
102
+ readonly 'format.single-select.label': "Select";
103
+ readonly 'format.multi-select.label': "Multi-select";
104
+ readonly 'format.text.label': "Long text";
105
+ readonly 'format.time.label': "Time";
106
+ readonly 'format.timestamp.label': "Timestamp";
107
+ readonly 'format.user.label': "User";
108
+ readonly 'format.number.label': "Number";
109
+ readonly 'format.uri.label': "URI";
110
+ readonly 'format.url.label': "URL";
111
+ readonly 'format.uuid.label': "UUID";
112
+ readonly 'latitude.label': "Latitude";
113
+ readonly 'longitude.label': "Longitude";
114
+ readonly 'select-option.label': "Label";
115
+ readonly 'select-option-label.placeholder': "Option label";
116
+ readonly 'select-option-delete.button': "Delete";
117
+ readonly 'select-option-add.button': "Add option";
118
+ readonly 'system-schema.title': "System type";
119
+ readonly 'system-schema.description': "System type: cannot add or remove fields.";
120
+ readonly 'remove.button': "Remove";
79
121
  };
80
122
  };
81
123
  }];
82
124
  };
83
- argTypes: {
84
- readonly: {
85
- control: "boolean";
86
- description: string;
87
- };
88
- };
89
125
  };
90
126
  export default meta;
91
- type Story = StoryObj<typeof meta>;
92
- export declare const Default: Story;
93
- export declare const Organization: Story;
94
- export declare const OrganizationAutoSave: Story;
95
- export declare const Contact: Story;
96
- declare const ShapeSchema: Schema.mutable<Schema.Struct<{
97
- shape: Schema.optional<Schema.Union<[Schema.Struct<{
98
- type: Schema.Literal<["circle"]>;
99
- radius: Schema.optional<Schema.SchemaClass<number, number, never>>;
100
- }>, Schema.Struct<{
101
- type: Schema.Literal<["square"]>;
102
- size: Schema.optional<Schema.refine<number, typeof Schema.Number>>;
103
- }>]>>;
104
- }>>;
105
- type ShapeSchema = Schema.Schema.Type<typeof ShapeSchema>;
106
- export declare const DiscriminatedShape: StoryObj<StoryProps<ShapeSchema>>;
107
- declare const ArraysSchema: Schema.mutable<Schema.Struct<{
108
- names: Schema.Array$<Schema.filter<typeof Schema.String>>;
109
- addresses: Schema.Array$<Schema.Struct<{
110
- street: Schema.optional<Schema.SchemaClass<string, string, never>>;
111
- city: Schema.optional<Schema.SchemaClass<string, string, never>>;
112
- zip: Schema.optional<Schema.refine<string, typeof Schema.String>>;
113
- location: Schema.optional<Schema.Tuple<[Schema.filter<Schema.transform<Schema.SchemaClass<number, number, never>, Schema.filter<Schema.SchemaClass<number, number, never>>>>, Schema.filter<Schema.transform<Schema.SchemaClass<number, number, never>, Schema.filter<Schema.SchemaClass<number, number, never>>>>, Schema.Element<typeof Schema.Number, "?">]>>;
114
- }>>;
115
- }>>;
116
- type ArraysSchema = Schema.Schema.Type<typeof ArraysSchema>;
117
- export declare const Arrays: StoryObj<StoryProps<ArraysSchema>>;
118
- declare const TupleSchema: Schema.mutable<Schema.Struct<{
119
- tuple: Schema.Tuple<[typeof Schema.Number, typeof Schema.String, typeof Schema.Boolean]>;
120
- geopoint: Schema.Tuple<[Schema.filter<Schema.transform<Schema.SchemaClass<number, number, never>, Schema.filter<Schema.SchemaClass<number, number, never>>>>, Schema.filter<Schema.transform<Schema.SchemaClass<number, number, never>, Schema.filter<Schema.SchemaClass<number, number, never>>>>, Schema.Element<typeof Schema.Number, "?">]>;
121
- }>>;
122
- type TupleSchema = Schema.Schema.Type<typeof TupleSchema>;
123
- export declare const Tuple: StoryObj<StoryProps<TupleSchema>>;
124
- declare const ColorSchema: Schema.mutable<Schema.Struct<{
125
- color: Schema.Union<[Schema.Literal<["red"]>, Schema.Literal<["green"]>, Schema.Literal<["blue"]>]>;
126
- }>>;
127
- type ColorType = Schema.Schema.Type<typeof ColorSchema>;
128
- export declare const Enum: StoryObj<StoryProps<ColorType>>;
129
- declare const RefSchema: Schema.Struct<{
130
- contact: Schema.SchemaClass<Ref<import("@dxos/echo/internal").TypedObjectFields<{
131
- name: Schema.optional<typeof Schema.String>;
132
- identifiers: Schema.mutable<Schema.Array$<Schema.Struct<{
133
- type: typeof Schema.String;
134
- value: typeof Schema.String;
135
- }>>>;
136
- }, import("@dxos/echo/internal").TypedObjectOptions>>, import("@dxos/echo-protocol").EncodedReference, never>;
137
- optionalContact: Schema.optional<Schema.SchemaClass<Ref<import("@dxos/echo/internal").TypedObjectFields<{
138
- name: Schema.optional<typeof Schema.String>;
139
- identifiers: Schema.mutable<Schema.Array$<Schema.Struct<{
140
- type: typeof Schema.String;
141
- value: typeof Schema.String;
142
- }>>>;
143
- }, import("@dxos/echo/internal").TypedObjectOptions>>, import("@dxos/echo-protocol").EncodedReference, never>>;
144
- refArray: Schema.optional<Schema.Array$<import("@dxos/echo/internal").Ref$<import("@dxos/echo/internal").TypedObjectFields<{
145
- name: Schema.optional<typeof Schema.String>;
146
- identifiers: Schema.mutable<Schema.Array$<Schema.Struct<{
147
- type: typeof Schema.String;
148
- value: typeof Schema.String;
149
- }>>>;
150
- }, import("@dxos/echo/internal").TypedObjectOptions>>>>;
151
- unknownExpando: Schema.optional<Schema.SchemaClass<Ref<Expando>, import("@dxos/echo-protocol").EncodedReference, never>>;
152
- }>;
153
- type RefSchema = Schema.Schema.Type<typeof RefSchema>;
154
- export declare const Refs: StoryObj<StoryProps<RefSchema>>;
127
+ type Story<T extends AnyProperties> = StoryObj<DefaultStoryProps<T>>;
128
+ export declare const Default: Story<ExcludeId<typeof Person>>;
129
+ export declare const Readonly: Story<ExcludeId<typeof Person>>;
130
+ export declare const Static: Story<ExcludeId<typeof Person>>;
131
+ export declare const Empty: Story<ExcludeId<typeof Person>>;
155
132
  //# sourceMappingURL=Form.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Form.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/Form.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,KAAK,UAAU,EAAE,OAAO,EAAU,GAAG,EAAqC,MAAM,qBAAqB,CAAC;AAU/G,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE9C,KAAK,UAAU,CAAC,CAAC,SAAS,UAAU,IAAI;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;CACtB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AA6DjB,QAAA,MAAM,IAAI;;eAEW,GAAG;aA7DF,CAAC,SAAS,UAAU,4DAKvC,UAAU,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEiB,CAAC;AAElC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAYrB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAU1B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAKF,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAMF,QAAA,MAAM,WAAW;;;;;;;;GAaM,CAAC;AAExB,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1D,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAuBhE,CAAC;AAMF,QAAA,MAAM,YAAY;;;;;;;;GAGK,CAAC;AAExB,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,CAAC;AAE5D,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAUrD,CAAC;AAOF,QAAA,MAAM,WAAW;;;GAGM,CAAC;AAExB,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1D,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAUnD,CAAC;AAMF,QAAA,MAAM,WAAW;;GAIM,CAAC;AAExB,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;AAExD,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAShD,CAAC;AAMF,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;EAKb,CAAC;AAEH,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;AAKtD,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAUhD,CAAC"}
1
+ {"version":3,"file":"Form.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/Form.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,EAAqC,IAAI,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASzD,OAAO,EAAE,KAAK,SAAS,EAAQ,KAAK,aAAa,EAAU,MAAM,QAAQ,CAAC;AAE1E,QAAA,MAAM,YAAY;;wBAOjB,CAAC;AAEF,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC;CAAG;AAEhF,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;wBAsCX,CAAC;AAEF,MAAM,WAAW,MAAO,SAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC;CAAG;AAEpE,KAAK,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAmDrB,QAAA,MAAM,IAAI;;;;;;aAjDY,CAAC,SAAS,aAAa,mEAK1C,iBAAiB,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmEiB,CAAC;AAEzC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,CAAC,CAAC,SAAS,aAAa,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAQrE,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,CAMnD,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,CAMpD,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,CAMlD,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,CAEjD,CAAC"}
@@ -0,0 +1,43 @@
1
+ import * as SchemaAST from 'effect/SchemaAST';
2
+ import React from 'react';
3
+ import { type ProjectionModel } from '@dxos/schema';
4
+ import { type RefFieldProps } from './fields';
5
+ import { type FormFieldComponentProps, type FormFieldMap, type FormFieldProvider } from './FormFieldComponent';
6
+ export type FormFieldProps = {
7
+ /**
8
+ * AST of the property to render.
9
+ */
10
+ type: SchemaAST.AST;
11
+ /**
12
+ * Name of the property.
13
+ */
14
+ name: string;
15
+ /**
16
+ * Path to the current object from the root. Used with nested forms.
17
+ */
18
+ path?: (string | number)[];
19
+ /**
20
+ * Optional projection for projection-based field management.
21
+ */
22
+ projection?: ProjectionModel;
23
+ /**
24
+ * Map of custom renderers for specific properties.
25
+ * Prefer fieldProvider for plugin specific input surfaces.
26
+ */
27
+ fieldMap?: FormFieldMap;
28
+ /**
29
+ * Function to lookup custom renderers for specific properties.
30
+ */
31
+ fieldProvider?: FormFieldProvider;
32
+ /**
33
+ * Typename of the ref type that the create props apply to.
34
+ * When set, createOptionLabel/createOptionIcon/createInitialValuePath/createFieldMap/onCreate
35
+ * are only passed to ref fields whose typename matches.
36
+ */
37
+ createTypename?: string;
38
+ } & Pick<FormFieldComponentProps, 'autoFocus' | 'readonly' | 'layout'> & Pick<RefFieldProps, 'createOptionLabel' | 'createOptionIcon' | 'createInitialValuePath' | 'createFieldMap' | 'db' | 'useSchema' | 'getOptions' | 'onCreate'>;
39
+ export declare const FormField: {
40
+ (props: FormFieldProps): React.JSX.Element | null;
41
+ displayName: string;
42
+ };
43
+ //# sourceMappingURL=FormField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/FormField.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAkB,MAAM,OAAO,CAAC;AAcvC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAOL,KAAK,aAAa,EAInB,MAAM,UAAU,CAAC;AAElB,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;IAEpB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAE3B;;OAEG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC,GACpE,IAAI,CACF,aAAa,EACX,mBAAmB,GACnB,kBAAkB,GAClB,wBAAwB,GACxB,gBAAgB,GAChB,IAAI,GACJ,WAAW,GACX,YAAY,GACZ,UAAU,CACb,CAAC;AAEJ,eAAO,MAAM,SAAS;YAAW,cAAc;;CAiK9C,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type * as Schema from 'effect/Schema';
2
+ import type * as SchemaAST from 'effect/SchemaAST';
3
+ import React, { Component, type FC, type FocusEvent, type PropsWithChildren, type ReactElement, type ReactNode } from 'react';
4
+ import { type Database } from '@dxos/echo';
5
+ import { type Format } from '@dxos/echo/internal';
6
+ import { type FormFieldStatus } from '../../hooks';
7
+ /**
8
+ * Dynamic props passed to input components.
9
+ */
10
+ export type FormFieldStateProps<T = any> = {
11
+ getStatus: () => FormFieldStatus;
12
+ getValue: () => T | undefined;
13
+ onBlur: (event: FocusEvent<HTMLElement>) => void;
14
+ onValueChange: (type: SchemaAST.AST, value: T) => void;
15
+ };
16
+ /**
17
+ * Presentation mode.
18
+ * - full: Show label, control, and status.
19
+ * - compact: Show label and control.
20
+ * - inline: Control only.
21
+ * - static: Plain DOM; omit all undefined values.
22
+ */
23
+ export type Presentation = 'full' | 'compact' | 'inline' | 'static';
24
+ /**
25
+ * Props passed to input components.
26
+ */
27
+ export type FormFieldComponentProps<T = any> = {
28
+ type: SchemaAST.AST;
29
+ format?: Format.TypeFormat;
30
+ readonly?: boolean;
31
+ label: string;
32
+ placeholder?: string;
33
+ autoFocus?: boolean;
34
+ layout?: Presentation;
35
+ /** Database the form is editing against; populated for fields whose value is an ECHO object/Ref. */
36
+ db?: Database.Database;
37
+ } & FormFieldStateProps<T>;
38
+ /**
39
+ * Form field component.
40
+ */
41
+ export type FormFieldComponent = FC<FormFieldComponentProps>;
42
+ export type FormFieldMap = Record<string, FormFieldComponent>;
43
+ export type FormFieldProvider = (props: {
44
+ prop: string;
45
+ schema: Schema.Schema<any>;
46
+ fieldProps: FormFieldComponentProps;
47
+ }) => ReactElement | undefined;
48
+ export type FormFieldLabelProps = {
49
+ asChild?: boolean;
50
+ error?: string;
51
+ } & Pick<FormFieldComponentProps, 'label' | 'readonly'>;
52
+ export declare const FormFieldLabel: {
53
+ ({ label, error, readonly, asChild }: FormFieldLabelProps): React.JSX.Element;
54
+ displayName: string;
55
+ };
56
+ export type FormFieldWrapperProps<T = any> = Pick<FormFieldComponentProps, 'readonly' | 'label' | 'layout' | 'getStatus' | 'getValue'> & {
57
+ children?: (props: {
58
+ value: T;
59
+ }) => ReactNode;
60
+ };
61
+ export declare const FormFieldWrapper: <T>(props: FormFieldWrapperProps<T>) => React.JSX.Element | null;
62
+ type FormFieldErrorState = {
63
+ error: Error | undefined;
64
+ };
65
+ type FormFieldErrorBoundaryProps = PropsWithChildren<{
66
+ path?: (string | number)[];
67
+ }>;
68
+ export declare class FormFieldErrorBoundary extends Component<FormFieldErrorBoundaryProps, FormFieldErrorState> {
69
+ static getDerivedStateFromError(error: Error): {
70
+ error: Error;
71
+ };
72
+ state: {
73
+ error: undefined;
74
+ };
75
+ componentDidUpdate(prevProps: FormFieldErrorBoundaryProps): void;
76
+ render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element | null | undefined;
77
+ private resetError;
78
+ }
79
+ export {};
80
+ //# sourceMappingURL=FormFieldComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormFieldComponent.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/FormFieldComponent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
2
+ import React from 'react';
3
+ import { type FormFieldComponentProps } from './FormFieldComponent';
4
+ declare const DefaultStory: ({ type, placeholder, readonly, onBlur, onValueChange, ...props }: FormFieldComponentProps<string>) => React.JSX.Element;
5
+ declare const meta: Meta<typeof DefaultStory>;
6
+ export default meta;
7
+ type Story = StoryObj<typeof meta>;
8
+ export declare const Default: Story;
9
+ //# sourceMappingURL=FormFieldComponent.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormFieldComponent.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/FormFieldComponent.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAwC,MAAM,OAAO,CAAC;AAK7D,OAAO,EAAE,KAAK,uBAAuB,EAAoB,MAAM,sBAAsB,CAAC;AAEtF,QAAA,MAAM,YAAY,GAAI,kEAOnB,uBAAuB,CAAC,MAAM,CAAC,sBAsBjC,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAOnC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { type AnyProperties } from '@dxos/echo/internal';
3
+ import { type SchemaProperty } from '@dxos/effect';
4
+ import { type FormHandlerProps } from '../../hooks';
5
+ import { type FormFieldProps } from './FormField';
6
+ export type FormFieldSetProps<T extends AnyProperties> = {
7
+ label?: string;
8
+ sort?: string[];
9
+ exclude?: (props: SchemaProperty[]) => SchemaProperty[];
10
+ } & Pick<FormHandlerProps<T>, 'schema'> & Pick<FormFieldProps, 'path' | 'autoFocus' | 'readonly' | 'layout' | 'projection' | 'fieldMap' | 'fieldProvider' | 'createTypename' | 'createOptionLabel' | 'createOptionIcon' | 'createInitialValuePath' | 'createFieldMap' | 'db' | 'useSchema' | 'getOptions' | 'onCreate'>;
11
+ /**
12
+ * Renders a set of form fields derived from a schema object.
13
+ */
14
+ export declare const FormFieldSet: {
15
+ ({ label, schema, readonly, path, sort, exclude, projection, layout, ...props }: FormFieldSetProps<any>): React.JSX.Element | null;
16
+ displayName: string;
17
+ };
18
+ //# sourceMappingURL=FormFieldSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormFieldSet.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/FormFieldSet.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7D,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,CAAC;CACzD,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GACrC,IAAI,CACF,cAAc,EACZ,MAAM,GACN,WAAW,GACX,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,GAClB,wBAAwB,GACxB,gBAAgB,GAChB,IAAI,GACJ,WAAW,GACX,YAAY,GACZ,UAAU,CACb,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY;qFAUtB,iBAAiB,CAAC,GAAG,CAAC;;CA4BxB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import * as SchemaAST from 'effect/SchemaAST';
2
+ import React from 'react';
3
+ import { type FormFieldProps } from '../FormField';
4
+ import { type FormFieldStateProps } from '../FormFieldComponent';
5
+ export type ArrayFieldProps = {
6
+ label: string;
7
+ fieldProps: FormFieldStateProps;
8
+ } & FormFieldProps;
9
+ export declare const ArrayField: {
10
+ ({ type, path, label, readonly, layout, fieldProps: inputProps, ...props }: ArrayFieldProps): React.JSX.Element | null;
11
+ displayName: string;
12
+ };
13
+ /**
14
+ * Returns the default empty value for a given AST.
15
+ * Used for initializing new array values etc.
16
+ */
17
+ export declare const getDefaultValue: (ast?: SchemaAST.AST) => any;
18
+ //# sourceMappingURL=ArrayField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrayField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Form/fields/ArrayField.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAsB,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,mBAAmB,CAAC;CACjC,GAAG,cAAc,CAAC;AAEnB,eAAO,MAAM,UAAU;gFAQpB,eAAe;;CAgGjB,CAAC;AAIF;;;GAGG;AAEH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,CAAC,GAAG,KAAG,GAsBrD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { type FormFieldComponentProps } from '../FormFieldComponent';
3
+ export declare const BooleanField: ({ type, readonly, onValueChange, ...props }: FormFieldComponentProps<boolean>) => React.JSX.Element;
4
+ //# sourceMappingURL=BooleanField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BooleanField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Form/fields/BooleanField.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,KAAK,uBAAuB,EAAoB,MAAM,uBAAuB,CAAC;AAEvF,eAAO,MAAM,YAAY,GAAI,6CAA6C,uBAAuB,CAAC,OAAO,CAAC,sBAWzG,CAAC"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { type GeoPoint } from '@dxos/echo/internal';
3
+ import { type FormFieldComponentProps } from '../FormFieldComponent';
4
+ export declare const GeoPointField: ({ type, label, readonly, layout, getStatus, getValue, onValueChange, onBlur, }: FormFieldComponentProps<GeoPoint>) => React.JSX.Element | null;
5
+ //# sourceMappingURL=GeoPointField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeoPointField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Form/fields/GeoPointField.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsE,MAAM,OAAO,CAAC;AAE3F,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKjE,OAAO,EAAE,KAAK,uBAAuB,EAAkB,MAAM,uBAAuB,CAAC;AAErF,eAAO,MAAM,aAAa,GAAI,gFAS3B,uBAAuB,CAAC,QAAQ,CAAC,6BA+EnC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { type FormFieldComponentProps } from '../FormFieldComponent';
3
+ /**
4
+ * Form field that edits a markdown value in a CodeMirror editor.
5
+ * Supports two backings:
6
+ * - `Schema.String` annotated with `Format.TypeFormat.Markdown`: edited as plain text via `getValue`/`onValueChange`.
7
+ * - `Ref<Text>` annotated with `Format.TypeFormat.Markdown`: edited in-place via an Automerge doc accessor.
8
+ * When the ref is empty and a database is available, a create button is shown to allocate a new Text.
9
+ */
10
+ export declare const MarkdownField: ({ type, readonly, label, placeholder, layout, db, getStatus, getValue, onValueChange, }: FormFieldComponentProps) => React.JSX.Element | null;
11
+ //# sourceMappingURL=MarkdownField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Form/fields/MarkdownField.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAWpD,OAAO,EAAE,KAAK,uBAAuB,EAAkB,MAAM,uBAAuB,CAAC;AAKrF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,yFAU3B,uBAAuB,6BAgDzB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { type StoryObj } from '@storybook/react-vite';
2
+ declare const meta: {
3
+ title: string;
4
+ decorators: import("@storybook/react").Decorator[];
5
+ parameters: {
6
+ layout: string;
7
+ translations: [{
8
+ readonly 'en-US': {
9
+ readonly "@dxos/react-ui-form": {
10
+ readonly 'fields.label': "Fields";
11
+ readonly 'hidden-fields.label': "Hidden Fields";
12
+ readonly 'empty-readonly-ref-field.label': "(none)";
13
+ readonly 'field-property.label': "Property";
14
+ readonly 'field-property.placeholder': "Property name";
15
+ readonly 'field-format.label': "Type";
16
+ readonly 'field-path.label': "Field path";
17
+ readonly 'add-item.button': "Add item";
18
+ readonly 'add-property-button.label': "Add property";
19
+ readonly 'boolean-input-true.value': "Yes";
20
+ readonly 'boolean-input-false.value': "No";
21
+ readonly 'show-field.label': "Show field";
22
+ readonly 'hide-field.label': "Hide field";
23
+ readonly 'delete-field.label': "Delete field";
24
+ readonly 'create-option.label': "Create";
25
+ readonly 'add-tag.label': "Add tag";
26
+ readonly 'ref-field-combobox-input.placeholder': "Search…";
27
+ readonly 'ref-field.placeholder': "Select…";
28
+ readonly 'ref-field.placeholder_one': "Select…";
29
+ readonly 'ref-field.placeholder_other': "Select items…";
30
+ readonly 'example.placeholder': "Example";
31
+ readonly 'latitude.placeholder': "Latitude (e.g., 40.7128)";
32
+ readonly 'longitude.placeholder': "Longitude (e.g., -74.0060)";
33
+ readonly 'cancel-button.label': "Cancel";
34
+ readonly 'save-button.label': "Save";
35
+ readonly 'create-text.label': "Create text";
36
+ readonly 'format.boolean.label': "Boolean";
37
+ readonly 'format.currency.label': "Currency";
38
+ readonly 'format.date.label': "Date";
39
+ readonly 'format.date-time.label': "DateTime";
40
+ readonly 'format.did.label': "DID";
41
+ readonly 'format.duration.label': "Duration";
42
+ readonly 'format.dxn.label': "DXN";
43
+ readonly 'format.email.label': "Email";
44
+ readonly 'format.formula.label': "Formula";
45
+ readonly 'format.hostname.label': "Hostname";
46
+ readonly 'format.integer.label': "Integer";
47
+ readonly 'format.json.label': "JSON";
48
+ readonly 'format.lnglat.label': "Geopoint";
49
+ readonly 'format.markdown.label': "Markdown";
50
+ readonly 'format.percent.label': "Percent";
51
+ readonly 'format.ref.label': "Reference";
52
+ readonly 'format.regex.label': "RegExp";
53
+ readonly 'format.string.label': "String";
54
+ readonly 'format.single-select.label': "Select";
55
+ readonly 'format.multi-select.label': "Multi-select";
56
+ readonly 'format.text.label': "Long text";
57
+ readonly 'format.time.label': "Time";
58
+ readonly 'format.timestamp.label': "Timestamp";
59
+ readonly 'format.user.label': "User";
60
+ readonly 'format.number.label': "Number";
61
+ readonly 'format.uri.label': "URI";
62
+ readonly 'format.url.label': "URL";
63
+ readonly 'format.uuid.label': "UUID";
64
+ readonly 'latitude.label': "Latitude";
65
+ readonly 'longitude.label': "Longitude";
66
+ readonly 'select-option.label': "Label";
67
+ readonly 'select-option-label.placeholder': "Option label";
68
+ readonly 'select-option-delete.button': "Delete";
69
+ readonly 'select-option-add.button': "Add option";
70
+ readonly 'system-schema.title': "System type";
71
+ readonly 'system-schema.description': "System type: cannot add or remove fields.";
72
+ readonly 'remove.button': "Remove";
73
+ };
74
+ };
75
+ }];
76
+ };
77
+ };
78
+ export default meta;
79
+ type Story = StoryObj<typeof meta>;
80
+ export declare const StringBacked: Story;
81
+ export declare const RefPopulated: Story;
82
+ export declare const RefEmpty: Story;
83
+ //# sourceMappingURL=MarkdownField.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownField.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Form/fields/MarkdownField.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA0GjE,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOM,CAAC;AAEjB,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAE1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAY1B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { type FormFieldComponentProps } from '../FormFieldComponent';
3
+ export declare const NumberField: ({ type, readonly, placeholder, onValueChange, onBlur, ...props }: FormFieldComponentProps<number>) => React.JSX.Element;
4
+ //# sourceMappingURL=NumberField.d.ts.map