@dxos/react-ui-form 0.8.4-main.dedc0f3 → 0.8.4-main.e8ec1fe

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 (89) hide show
  1. package/dist/lib/browser/index.mjs +480 -300
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +480 -300
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +5 -5
  8. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +1 -1
  9. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
  10. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +5 -5
  11. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Form/ArrayField.d.ts.map +1 -1
  13. package/dist/types/src/components/Form/Form.d.ts +4 -3
  14. package/dist/types/src/components/Form/Form.d.ts.map +1 -1
  15. package/dist/types/src/components/Form/Form.stories.d.ts +15 -15
  16. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Form/FormContent.d.ts +5 -5
  18. package/dist/types/src/components/Form/FormContent.d.ts.map +1 -1
  19. package/dist/types/src/components/Form/FormContext.d.ts +2 -2
  20. package/dist/types/src/components/Form/FormContext.d.ts.map +1 -1
  21. package/dist/types/src/components/Form/Input.d.ts +1 -1
  22. package/dist/types/src/components/Form/Input.d.ts.map +1 -1
  23. package/dist/types/src/components/Form/RefField.d.ts +10 -6
  24. package/dist/types/src/components/Form/RefField.d.ts.map +1 -1
  25. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +5 -5
  26. package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Form/factory.d.ts +1 -1
  28. package/dist/types/src/components/Form/factory.d.ts.map +1 -1
  29. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +41 -0
  30. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -0
  31. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +81 -0
  32. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/ObjectPicker/index.d.ts +2 -0
  34. package/dist/types/src/components/ObjectPicker/index.d.ts.map +1 -0
  35. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +20 -7
  36. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
  37. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +10 -10
  38. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/index.d.ts +1 -0
  40. package/dist/types/src/components/index.d.ts.map +1 -1
  41. package/dist/types/src/hooks/useForm.d.ts +2 -2
  42. package/dist/types/src/hooks/useForm.d.ts.map +1 -1
  43. package/dist/types/src/hooks/useQueryRefOptions.d.ts +9 -3
  44. package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +1 -1
  46. package/dist/types/src/translations.d.ts +4 -4
  47. package/dist/types/src/util/field.d.ts +1 -1
  48. package/dist/types/src/util/field.d.ts.map +1 -1
  49. package/dist/types/src/util/formatting.d.ts +1 -1
  50. package/dist/types/src/util/formatting.d.ts.map +1 -1
  51. package/dist/types/src/util/refs.d.ts +1 -1
  52. package/dist/types/src/util/refs.d.ts.map +1 -1
  53. package/dist/types/src/util/schema.d.ts +1 -1
  54. package/dist/types/src/util/schema.d.ts.map +1 -1
  55. package/dist/types/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +40 -39
  57. package/src/components/ControlSection/ControlSection.stories.tsx +4 -5
  58. package/src/components/ControlSection/ControlSection.tsx +1 -1
  59. package/src/components/FieldEditor/FieldEditor.stories.tsx +6 -5
  60. package/src/components/FieldEditor/FieldEditor.tsx +5 -2
  61. package/src/components/Form/ArrayField.tsx +4 -3
  62. package/src/components/Form/Defaults.tsx +1 -1
  63. package/src/components/Form/Form.stories.tsx +35 -35
  64. package/src/components/Form/Form.tsx +16 -6
  65. package/src/components/Form/FormActions.tsx +2 -2
  66. package/src/components/Form/FormContent.tsx +82 -22
  67. package/src/components/Form/FormContext.tsx +3 -3
  68. package/src/components/Form/Input.tsx +1 -1
  69. package/src/components/Form/RefField.tsx +48 -64
  70. package/src/components/Form/custom/GeoPointInput.tsx +1 -1
  71. package/src/components/Form/custom/SelectOptionsInput.stories.tsx +5 -6
  72. package/src/components/Form/custom/SelectOptionsInput.tsx +2 -2
  73. package/src/components/Form/factory.tsx +1 -1
  74. package/src/components/ObjectPicker/ObjectPicker.stories.tsx +207 -0
  75. package/src/components/ObjectPicker/ObjectPicker.tsx +161 -0
  76. package/src/components/ObjectPicker/index.ts +5 -0
  77. package/src/components/ViewEditor/ViewEditor.stories.tsx +107 -59
  78. package/src/components/ViewEditor/ViewEditor.test.tsx +6 -5
  79. package/src/components/ViewEditor/ViewEditor.tsx +275 -231
  80. package/src/components/index.ts +1 -0
  81. package/src/components/testing.tsx +2 -2
  82. package/src/hooks/useForm.ts +7 -4
  83. package/src/hooks/useQueryRefOptions.ts +15 -6
  84. package/src/hooks/useRefQueryLookupHandler.ts +3 -3
  85. package/src/translations.ts +4 -4
  86. package/src/util/field.ts +1 -1
  87. package/src/util/formatting.ts +1 -1
  88. package/src/util/refs.ts +7 -7
  89. package/src/util/schema.ts +2 -4
@@ -2,26 +2,35 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { useEffect, useState } from 'react';
5
+ import { useCallback, useEffect, useState } from 'react';
6
6
 
7
- import { type TypeAnnotation } from '@dxos/echo-schema';
7
+ import { type TypeAnnotation } from '@dxos/echo/internal';
8
8
  import { type DXN } from '@dxos/keys';
9
9
  import { log } from '@dxos/log';
10
- import { type TagPickerItemData } from '@dxos/react-ui-tag-picker';
10
+ import { type Palette } from '@dxos/react-ui-types';
11
11
  import { type MaybePromise } from '@dxos/util';
12
12
 
13
13
  export type RefOption = { dxn: DXN; label?: string };
14
14
  export type QueryRefOptions = (type: TypeAnnotation) => MaybePromise<RefOption[]>;
15
15
 
16
+ export type QueryTag = {
17
+ id: string;
18
+ label: string;
19
+ hue?: Palette;
20
+ };
21
+
16
22
  type UseQueryRefOptionsProps = { refTypeInfo: TypeAnnotation | undefined; onQueryRefOptions?: QueryRefOptions };
17
23
 
18
24
  /**
19
25
  * Hook to query reference options based on type information.
20
26
  * Used internally within forms to fetch and format reference options for reference fields.
21
27
  */
28
+ // TODO(wittjosiah): This should be a reactive query so that the options are always up to date.
22
29
  export const useQueryRefOptions = ({ refTypeInfo, onQueryRefOptions }: UseQueryRefOptionsProps) => {
23
- const [options, setOptions] = useState<TagPickerItemData[]>([]);
30
+ const [options, setOptions] = useState<QueryTag[]>([]);
24
31
  const [loading, setLoading] = useState(false);
32
+ const [state, setState] = useState({});
33
+ const update = useCallback(() => setState({}), []);
25
34
 
26
35
  useEffect(() => {
27
36
  if (!refTypeInfo || !onQueryRefOptions) {
@@ -47,7 +56,7 @@ export const useQueryRefOptions = ({ refTypeInfo, onQueryRefOptions }: UseQueryR
47
56
  };
48
57
 
49
58
  void fetchOptions();
50
- }, [refTypeInfo, onQueryRefOptions]);
59
+ }, [refTypeInfo, onQueryRefOptions, state]);
51
60
 
52
- return { options, loading };
61
+ return { options, update, loading };
53
62
  };
@@ -4,7 +4,8 @@
4
4
 
5
5
  import { useCallback } from 'react';
6
6
 
7
- import { type TypeAnnotation, getObjectDXN } from '@dxos/echo-schema';
7
+ import { Obj } from '@dxos/echo';
8
+ import { type TypeAnnotation, getObjectDXN } from '@dxos/echo/internal';
8
9
  import { Filter, type Space } from '@dxos/react-client/echo';
9
10
  import { isNonNullable } from '@dxos/util';
10
11
 
@@ -28,8 +29,7 @@ export const useRefQueryLookupHandler = ({ space }: UseRefQueryLookupProps): Que
28
29
  return undefined;
29
30
  }
30
31
 
31
- // TODO(Zaymon): Better fallback object names?
32
- const item = { dxn, label: object?.name ?? object?.id ?? '' };
32
+ const item = { dxn, label: Obj.getLabel(object) ?? object?.id ?? '' };
33
33
  return item;
34
34
  })
35
35
  .filter(isNonNullable);
@@ -15,7 +15,7 @@ export const translations = [
15
15
  'empty readonly ref field label': '(none)',
16
16
 
17
17
  // TODO(burdon): Standardize field/property.
18
- 'button add property': 'Add property',
18
+ 'add property button': 'Add property',
19
19
  'field property label': 'Property',
20
20
  'field property placeholder': 'Property name',
21
21
  'field format label': 'Type',
@@ -28,12 +28,12 @@ export const translations = [
28
28
  'show field label': 'Show field',
29
29
  'hide field label': 'Hide field',
30
30
  'delete field label': 'Delete field',
31
+ 'ref field combobox input placeholder': 'Search…',
31
32
  'ref field placeholder_one': 'Select…',
32
33
  'ref field placeholder_other': 'Select items…',
33
34
 
34
35
  // TODO(burdon): Factor out?
35
- 'button cancel': 'Cancel',
36
- 'button save': 'Save',
36
+ 'save button': 'Save',
37
37
 
38
38
  // FormatEnum
39
39
  'format boolean': 'Boolean',
@@ -48,7 +48,7 @@ export const translations = [
48
48
  'format hostname': 'Hostname',
49
49
  'format integer': 'Integer',
50
50
  'format json': 'JSON',
51
- 'format latlng': 'Geopoint',
51
+ 'format lnglat': 'Geopoint',
52
52
  'format markdown': 'Markdown',
53
53
  'format percent': 'Percent',
54
54
  'format ref': 'Reference',
package/src/util/field.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo-schema';
5
+ import { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo/internal';
6
6
  import { type ValidationError } from '@dxos/schema';
7
7
 
8
8
  /**
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { format as formatDate } from 'date-fns/format';
6
6
 
7
- import { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo-schema';
7
+ import { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo/internal';
8
8
 
9
9
  type ValueFormatProps = {
10
10
  type: TypeEnum;
package/src/util/refs.ts CHANGED
@@ -2,9 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type SchemaAST } from 'effect';
5
+ import type * as SchemaAST from 'effect/SchemaAST';
6
6
 
7
- import { FormatEnum, ReferenceAnnotationId } from '@dxos/echo-schema';
7
+ import { FormatEnum, ReferenceAnnotationId } from '@dxos/echo/internal';
8
8
  import { findAnnotation } from '@dxos/effect';
9
9
  import { type SchemaProperty } from '@dxos/schema';
10
10
 
@@ -18,11 +18,6 @@ type RefProps = {
18
18
  export const getRefProps = (property: SchemaProperty<any>): RefProps | undefined => {
19
19
  const { ast, format, array } = property;
20
20
 
21
- // Direct reference.
22
- if (format === FormatEnum.Ref) {
23
- return { ast, isArray: false };
24
- }
25
-
26
21
  // Array of references.
27
22
  if (array) {
28
23
  const elementType = findArrayElementType(ast);
@@ -34,5 +29,10 @@ export const getRefProps = (property: SchemaProperty<any>): RefProps | undefined
34
29
  }
35
30
  }
36
31
 
32
+ // Direct reference.
33
+ if (format === FormatEnum.Ref) {
34
+ return { ast, isArray: false };
35
+ }
36
+
37
37
  return undefined;
38
38
  };
@@ -2,13 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { SchemaAST } from 'effect';
5
+ import * as SchemaAST from 'effect/SchemaAST';
6
6
 
7
7
  import { findNode } from '@dxos/effect';
8
8
 
9
9
  export const findArrayElementType = (ast: SchemaAST.AST) => {
10
10
  const tupleType = findNode(ast, SchemaAST.isTupleType);
11
- const elementType = (tupleType as SchemaAST.TupleType | undefined)?.rest[0]?.type;
12
-
13
- return elementType;
11
+ return (tupleType as SchemaAST.TupleType | undefined)?.rest[0]?.type;
14
12
  };