@dxos/react-ui-form 0.8.4-main.ead640a → 0.8.4-main.effb148878
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.
- package/LICENSE +102 -5
- package/README.md +0 -1
- package/dist/lib/browser/index.mjs +3252 -2315
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/translations.mjs +83 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3252 -2315
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/translations.mjs +85 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +8 -7
- package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
- package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +69 -60
- package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.d.ts +123 -26
- package/dist/types/src/components/Form/Form.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.stories.d.ts +175 -138
- package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/FormField.d.ts +48 -0
- package/dist/types/src/components/Form/FormField.d.ts.map +1 -0
- package/dist/types/src/components/Form/FormFieldComponent.d.ts +95 -0
- package/dist/types/src/components/Form/FormFieldComponent.d.ts.map +1 -0
- package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts +9 -0
- package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts.map +1 -0
- package/dist/types/src/components/Form/FormFieldSet.d.ts +21 -0
- package/dist/types/src/components/Form/FormFieldSet.d.ts.map +1 -0
- package/dist/types/src/components/Form/FormTooltipsContext.d.ts +19 -0
- package/dist/types/src/components/Form/FormTooltipsContext.d.ts.map +1 -0
- package/dist/types/src/components/Form/Layout/FormLayout.d.ts +25 -0
- package/dist/types/src/components/Form/Layout/FormLayout.d.ts.map +1 -0
- package/dist/types/src/components/Form/Layout/FormLayout.stories.d.ts +116 -0
- package/dist/types/src/components/Form/Layout/FormLayout.stories.d.ts.map +1 -0
- package/dist/types/src/components/Form/Layout/annotation.d.ts +30 -0
- package/dist/types/src/components/Form/Layout/annotation.d.ts.map +1 -0
- package/dist/types/src/components/Form/Layout/index.d.ts +4 -0
- package/dist/types/src/components/Form/Layout/index.d.ts.map +1 -0
- package/dist/types/src/components/Form/Layout/parser.d.ts +31 -0
- package/dist/types/src/components/Form/Layout/parser.d.ts.map +1 -0
- package/dist/types/src/components/Form/Layout/parser.test.d.ts +2 -0
- package/dist/types/src/components/Form/Layout/parser.test.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/ArrayField.d.ts +18 -0
- package/dist/types/src/components/Form/fields/ArrayField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/BooleanField.d.ts +4 -0
- package/dist/types/src/components/Form/fields/BooleanField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/DateField.d.ts +4 -0
- package/dist/types/src/components/Form/fields/DateField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/GeoPointField.d.ts +5 -0
- package/dist/types/src/components/Form/fields/GeoPointField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/MarkdownField.d.ts +11 -0
- package/dist/types/src/components/Form/fields/MarkdownField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts +85 -0
- package/dist/types/src/components/Form/fields/MarkdownField.stories.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/NumberField.d.ts +4 -0
- package/dist/types/src/components/Form/fields/NumberField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/RefField.d.ts +22 -0
- package/dist/types/src/components/Form/fields/RefField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/SelectField.d.ts +13 -0
- package/dist/types/src/components/Form/fields/SelectField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/SelectOptionField.d.ts +5 -0
- package/dist/types/src/components/Form/fields/SelectOptionField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts +85 -0
- package/dist/types/src/components/Form/fields/SelectOptionField.stories.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/TextAreaField.d.ts +4 -0
- package/dist/types/src/components/Form/fields/TextAreaField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/TextField.d.ts +4 -0
- package/dist/types/src/components/Form/fields/TextField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/TupleField.d.ts +6 -0
- package/dist/types/src/components/Form/fields/TupleField.d.ts.map +1 -0
- package/dist/types/src/components/Form/fields/index.d.ts +13 -0
- package/dist/types/src/components/Form/fields/index.d.ts.map +1 -0
- package/dist/types/src/components/Form/index.d.ts +4 -4
- package/dist/types/src/components/Form/index.d.ts.map +1 -1
- package/dist/types/src/components/ObjectForm/ObjectForm.d.ts +8 -0
- package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -0
- package/dist/types/src/components/ObjectForm/index.d.ts +2 -0
- package/dist/types/src/components/ObjectForm/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +37 -10
- package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -1
- package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +65 -59
- package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -1
- package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts +9 -0
- package/dist/types/src/components/ObjectProperties/ObjectProperties.d.ts.map +1 -0
- package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts +128 -0
- package/dist/types/src/components/ObjectProperties/ObjectProperties.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts +2 -0
- package/dist/types/src/components/ObjectProperties/ObjectProperties.test.d.ts.map +1 -0
- package/dist/types/src/components/ObjectProperties/index.d.ts +2 -0
- package/dist/types/src/components/ObjectProperties/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectTree/ObjectTree.d.ts +9 -0
- package/dist/types/src/components/ObjectTree/ObjectTree.d.ts.map +1 -0
- package/dist/types/src/components/ObjectTree/ObjectTree.stories.d.ts +87 -0
- package/dist/types/src/components/ObjectTree/ObjectTree.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectTree/index.d.ts +2 -0
- package/dist/types/src/components/ObjectTree/index.d.ts.map +1 -0
- package/dist/types/src/components/Settings/Settings.d.ts +51 -0
- package/dist/types/src/components/Settings/Settings.d.ts.map +1 -0
- package/dist/types/src/components/Settings/Settings.stories.d.ts +85 -0
- package/dist/types/src/components/Settings/Settings.stories.d.ts.map +1 -0
- package/dist/types/src/components/Settings/SettingsFieldSet.d.ts +43 -0
- package/dist/types/src/components/Settings/SettingsFieldSet.d.ts.map +1 -0
- package/dist/types/src/components/Settings/SettingsItem.d.ts +16 -0
- package/dist/types/src/components/Settings/SettingsItem.d.ts.map +1 -0
- package/dist/types/src/components/Settings/SettingsSelectField.d.ts +18 -0
- package/dist/types/src/components/Settings/SettingsSelectField.d.ts.map +1 -0
- package/dist/types/src/components/Settings/index.d.ts +4 -0
- package/dist/types/src/components/Settings/index.d.ts.map +1 -0
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +16 -20
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +72 -66
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +13 -6
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -3
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useFormHandler.d.ts +82 -0
- package/dist/types/src/hooks/useFormHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useKeyHandler.d.ts +7 -0
- package/dist/types/src/hooks/useKeyHandler.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +0 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +66 -60
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/field-type.d.ts +19 -0
- package/dist/types/src/util/field-type.d.ts.map +1 -0
- package/dist/types/src/util/field.d.ts +3 -3
- package/dist/types/src/util/field.d.ts.map +1 -1
- package/dist/types/src/util/formatting.d.ts +2 -2
- package/dist/types/src/util/formatting.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +2 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/properties.d.ts +17 -0
- package/dist/types/src/util/properties.d.ts.map +1 -0
- package/dist/types/src/util/properties.test.d.ts +2 -0
- package/dist/types/src/util/properties.test.d.ts.map +1 -0
- package/dist/types/src/util/refs.d.ts +2 -2
- package/dist/types/src/util/refs.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +61 -51
- package/src/components/FieldEditor/FieldEditor.stories.tsx +44 -25
- package/src/components/FieldEditor/FieldEditor.test.tsx +0 -1
- package/src/components/FieldEditor/FieldEditor.tsx +84 -84
- package/src/components/Form/AUDIT.md +17 -0
- package/src/components/Form/Form.stories.tsx +134 -252
- package/src/components/Form/Form.tsx +417 -107
- package/src/components/Form/FormField.tsx +332 -0
- package/src/components/Form/FormFieldComponent.stories.tsx +65 -0
- package/src/components/Form/FormFieldComponent.tsx +206 -0
- package/src/components/Form/FormFieldSet.tsx +173 -0
- package/src/components/Form/FormTooltipsContext.ts +25 -0
- package/src/components/Form/Layout/FormLayout.stories.tsx +339 -0
- package/src/components/Form/Layout/FormLayout.tsx +123 -0
- package/src/components/Form/Layout/annotation.ts +38 -0
- package/src/components/Form/Layout/index.ts +7 -0
- package/src/components/Form/Layout/parser.test.ts +120 -0
- package/src/components/Form/Layout/parser.ts +167 -0
- package/src/components/Form/README.md +3 -0
- package/src/components/Form/fields/ArrayField.tsx +185 -0
- package/src/components/Form/fields/BooleanField.tsx +22 -0
- package/src/components/Form/fields/DateField.tsx +95 -0
- package/src/components/Form/fields/GeoPointField.tsx +124 -0
- package/src/components/Form/fields/MarkdownField.stories.tsx +206 -0
- package/src/components/Form/fields/MarkdownField.tsx +168 -0
- package/src/components/Form/fields/NumberField.tsx +39 -0
- package/src/components/Form/fields/RefField.tsx +232 -0
- package/src/components/Form/fields/SelectField.tsx +77 -0
- package/src/components/Form/{custom/SelectOptionsInput.stories.tsx → fields/SelectOptionField.stories.tsx} +23 -18
- package/src/components/Form/{custom/SelectOptionsInput.tsx → fields/SelectOptionField.tsx} +31 -24
- package/src/components/Form/fields/TextAreaField.tsx +38 -0
- package/src/components/Form/fields/TextField.tsx +38 -0
- package/src/components/Form/{custom/TupleInput.tsx → fields/TupleField.tsx} +17 -9
- package/src/components/Form/fields/index.ts +16 -0
- package/src/components/Form/index.ts +5 -4
- package/src/components/ObjectForm/ObjectForm.tsx +115 -0
- package/src/components/{ControlSection → ObjectForm}/index.ts +1 -1
- package/src/components/ObjectPicker/ObjectPicker.stories.tsx +30 -25
- package/src/components/ObjectPicker/ObjectPicker.tsx +122 -81
- package/src/components/ObjectProperties/ObjectProperties.stories.tsx +350 -0
- package/src/components/ObjectProperties/ObjectProperties.test.tsx +108 -0
- package/src/components/ObjectProperties/ObjectProperties.tsx +147 -0
- package/src/components/ObjectProperties/index.ts +5 -0
- package/src/components/ObjectTree/ObjectTree.stories.tsx +134 -0
- package/src/components/ObjectTree/ObjectTree.tsx +190 -0
- package/src/components/ObjectTree/index.ts +5 -0
- package/src/components/Settings/AUDIT.md +51 -0
- package/src/components/Settings/Settings.stories.tsx +104 -0
- package/src/components/Settings/Settings.tsx +81 -0
- package/src/components/Settings/SettingsFieldSet.tsx +257 -0
- package/src/components/Settings/SettingsItem.tsx +58 -0
- package/src/components/Settings/SettingsSelectField.tsx +59 -0
- package/src/components/Settings/index.ts +7 -0
- package/src/components/ViewEditor/ViewEditor.stories.tsx +65 -73
- package/src/components/ViewEditor/ViewEditor.test.tsx +11 -11
- package/src/components/ViewEditor/ViewEditor.tsx +308 -214
- package/src/components/index.ts +4 -1
- package/src/components/testing.tsx +24 -11
- package/src/hooks/index.ts +2 -3
- package/src/hooks/useFormHandler.ts +380 -0
- package/src/hooks/useKeyHandler.tsx +37 -0
- package/src/index.ts +0 -4
- package/src/translations.ts +71 -65
- package/src/util/field-type.ts +60 -0
- package/src/util/field.ts +25 -25
- package/src/util/formatting.ts +22 -22
- package/src/util/index.ts +2 -1
- package/src/util/properties.test.ts +78 -0
- package/src/util/properties.ts +38 -0
- package/src/util/refs.ts +16 -18
- package/src/vite-env.d.ts +10 -0
- package/dist/types/src/components/ControlSection/ControlSection.d.ts +0 -23
- package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +0 -1
- package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +0 -84
- package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +0 -1
- package/dist/types/src/components/ControlSection/index.d.ts +0 -2
- package/dist/types/src/components/ControlSection/index.d.ts.map +0 -1
- package/dist/types/src/components/Form/ArrayField.d.ts +0 -16
- package/dist/types/src/components/Form/ArrayField.d.ts.map +0 -1
- package/dist/types/src/components/Form/Defaults.d.ts +0 -14
- package/dist/types/src/components/Form/Defaults.d.ts.map +0 -1
- package/dist/types/src/components/Form/FormActions.d.ts +0 -9
- package/dist/types/src/components/Form/FormActions.d.ts.map +0 -1
- package/dist/types/src/components/Form/FormContent.d.ts +0 -63
- package/dist/types/src/components/Form/FormContent.d.ts.map +0 -1
- package/dist/types/src/components/Form/FormContext.d.ts +0 -23
- package/dist/types/src/components/Form/FormContext.d.ts.map +0 -1
- package/dist/types/src/components/Form/Input.d.ts +0 -29
- package/dist/types/src/components/Form/Input.d.ts.map +0 -1
- package/dist/types/src/components/Form/RefField.d.ts +0 -22
- package/dist/types/src/components/Form/RefField.d.ts.map +0 -1
- package/dist/types/src/components/Form/custom/GeoPointInput.d.ts +0 -4
- package/dist/types/src/components/Form/custom/GeoPointInput.d.ts.map +0 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts +0 -4
- package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +0 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +0 -79
- package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +0 -1
- package/dist/types/src/components/Form/custom/TupleInput.d.ts +0 -6
- package/dist/types/src/components/Form/custom/TupleInput.d.ts.map +0 -1
- package/dist/types/src/components/Form/custom/index.d.ts +0 -4
- package/dist/types/src/components/Form/custom/index.d.ts.map +0 -1
- package/dist/types/src/components/Form/factory.d.ts +0 -8
- package/dist/types/src/components/Form/factory.d.ts.map +0 -1
- package/dist/types/src/hooks/useForm.d.ts +0 -67
- package/dist/types/src/hooks/useForm.d.ts.map +0 -1
- package/dist/types/src/hooks/useQueryRefOptions.d.ts +0 -29
- package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +0 -1
- package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts +0 -8
- package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +0 -1
- package/dist/types/src/util/schema.d.ts +0 -3
- package/dist/types/src/util/schema.d.ts.map +0 -1
- package/src/components/ControlSection/ControlSection.stories.tsx +0 -38
- package/src/components/ControlSection/ControlSection.tsx +0 -153
- package/src/components/Form/ArrayField.tsx +0 -125
- package/src/components/Form/Defaults.tsx +0 -205
- package/src/components/Form/FormActions.tsx +0 -54
- package/src/components/Form/FormContent.tsx +0 -322
- package/src/components/Form/FormContext.tsx +0 -110
- package/src/components/Form/Input.tsx +0 -54
- package/src/components/Form/RefField.tsx +0 -283
- package/src/components/Form/custom/GeoPointInput.tsx +0 -80
- package/src/components/Form/custom/index.ts +0 -7
- package/src/components/Form/factory.tsx +0 -31
- package/src/hooks/useForm.ts +0 -296
- package/src/hooks/useQueryRefOptions.ts +0 -62
- package/src/hooks/useRefQueryLookupHandler.ts +0 -39
- package/src/util/schema.ts +0 -12
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
6
|
+
|
|
7
|
+
import { getAnnotation, isLiteralUnion } from '@dxos/effect';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Detected field type for a schema property.
|
|
11
|
+
*/
|
|
12
|
+
export type SettingsFieldType = 'boolean' | 'string' | 'number' | 'select' | 'struct';
|
|
13
|
+
|
|
14
|
+
export type SelectOption = {
|
|
15
|
+
value: string | number;
|
|
16
|
+
label?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Detect the field type from an Effect Schema AST node.
|
|
21
|
+
*/
|
|
22
|
+
export const detectFieldType = (ast: SchemaAST.AST): SettingsFieldType | undefined => {
|
|
23
|
+
if (isLiteralUnion(ast)) {
|
|
24
|
+
return 'select';
|
|
25
|
+
}
|
|
26
|
+
if (SchemaAST.isTypeLiteral(ast)) {
|
|
27
|
+
return 'struct';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
switch (ast._tag) {
|
|
31
|
+
case 'BooleanKeyword':
|
|
32
|
+
return 'boolean';
|
|
33
|
+
case 'StringKeyword':
|
|
34
|
+
return 'string';
|
|
35
|
+
case 'NumberKeyword':
|
|
36
|
+
return 'number';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return undefined;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Extract select options from a literal union AST node.
|
|
44
|
+
* Reads title annotations from individual literals for labels.
|
|
45
|
+
*/
|
|
46
|
+
export const getSelectOptionsFromAst = (ast: SchemaAST.AST): SelectOption[] | undefined => {
|
|
47
|
+
if (!isLiteralUnion(ast)) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return (ast as SchemaAST.Union<SchemaAST.Literal>).types.flatMap((literalNode) => {
|
|
52
|
+
const value = literalNode.literal;
|
|
53
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const title = getAnnotation<string>(SchemaAST.TitleAnnotationId, false)(literalNode);
|
|
57
|
+
const label = title ?? (typeof value === 'string' ? value.charAt(0).toUpperCase() + value.slice(1) : String(value));
|
|
58
|
+
return [{ value, label }];
|
|
59
|
+
});
|
|
60
|
+
};
|
package/src/util/field.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';
|
|
6
6
|
import { type ValidationError } from '@dxos/schema';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -13,7 +13,7 @@ import { type ValidationError } from '@dxos/schema';
|
|
|
13
13
|
*/
|
|
14
14
|
export type ParseProps = {
|
|
15
15
|
type?: TypeEnum;
|
|
16
|
-
format?:
|
|
16
|
+
format?: Format.TypeFormat;
|
|
17
17
|
value: any;
|
|
18
18
|
};
|
|
19
19
|
|
|
@@ -57,31 +57,31 @@ export const parseValue = ({ type, format, value }: ParseProps) => {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
switch (format) {
|
|
60
|
-
case
|
|
60
|
+
case Format.TypeFormat.Boolean:
|
|
61
61
|
return parseScalar(TypeEnum.Boolean);
|
|
62
62
|
|
|
63
|
-
case
|
|
64
|
-
case
|
|
65
|
-
case
|
|
63
|
+
case Format.TypeFormat.Number:
|
|
64
|
+
case Format.TypeFormat.Percent:
|
|
65
|
+
case Format.TypeFormat.Currency:
|
|
66
66
|
return parseScalar(TypeEnum.Number);
|
|
67
67
|
|
|
68
|
-
case
|
|
69
|
-
case
|
|
68
|
+
case Format.TypeFormat.String:
|
|
69
|
+
case Format.TypeFormat.Markdown: {
|
|
70
70
|
return parseScalar(TypeEnum.String);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
case
|
|
74
|
-
throw new Error(`unexpected format: ${
|
|
73
|
+
case Format.TypeFormat.Ref:
|
|
74
|
+
throw new Error(`unexpected format: ${Format.TypeFormat.Ref}`);
|
|
75
75
|
|
|
76
|
-
case
|
|
77
|
-
case
|
|
78
|
-
case
|
|
79
|
-
case
|
|
76
|
+
case Format.TypeFormat.DateTime:
|
|
77
|
+
case Format.TypeFormat.Date:
|
|
78
|
+
case Format.TypeFormat.Time:
|
|
79
|
+
case Format.TypeFormat.Timestamp: {
|
|
80
80
|
const date = new Date(value as string | number);
|
|
81
81
|
return isNaN(date.getTime()) ? null : date;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
case
|
|
84
|
+
case Format.TypeFormat.GeoPoint: {
|
|
85
85
|
// Parse string in format "lat,long" to GeoPoint [longitude, latitude].
|
|
86
86
|
if (typeof value === 'string') {
|
|
87
87
|
// Only keep digits, decimal points, minus signs, and commas.
|
|
@@ -108,23 +108,23 @@ export const parseValue = ({ type, format, value }: ParseProps) => {
|
|
|
108
108
|
// TODO(burdon): Type and format.
|
|
109
109
|
export type CellClassesForFieldTypeProps = {
|
|
110
110
|
type?: TypeEnum;
|
|
111
|
-
format?:
|
|
111
|
+
format?: Format.TypeFormat;
|
|
112
112
|
};
|
|
113
113
|
|
|
114
114
|
export const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {
|
|
115
115
|
switch (format || type) {
|
|
116
|
-
case
|
|
116
|
+
case Format.TypeFormat.Markdown:
|
|
117
117
|
return undefined;
|
|
118
|
-
case
|
|
119
|
-
case
|
|
120
|
-
case
|
|
121
|
-
case
|
|
122
|
-
case
|
|
118
|
+
case Format.TypeFormat.Time:
|
|
119
|
+
case Format.TypeFormat.Timestamp:
|
|
120
|
+
case Format.TypeFormat.DateTime:
|
|
121
|
+
case Format.TypeFormat.Date:
|
|
122
|
+
case Format.TypeFormat.Duration:
|
|
123
123
|
return ['font-mono', 'text-right'];
|
|
124
|
-
case
|
|
124
|
+
case Format.TypeFormat.Currency:
|
|
125
125
|
return ['text-right'];
|
|
126
|
-
case
|
|
127
|
-
case
|
|
126
|
+
case Format.TypeFormat.JSON:
|
|
127
|
+
case Format.TypeFormat.DID:
|
|
128
128
|
return ['font-mono'];
|
|
129
129
|
case TypeEnum.Number:
|
|
130
130
|
case TypeEnum.Boolean:
|
package/src/util/formatting.ts
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
import { format as formatDate } from 'date-fns/format';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';
|
|
8
8
|
|
|
9
9
|
type ValueFormatProps = {
|
|
10
10
|
type: TypeEnum;
|
|
11
|
-
format?:
|
|
11
|
+
format?: Format.TypeFormat | undefined;
|
|
12
12
|
value: any;
|
|
13
13
|
locale?: string | undefined;
|
|
14
14
|
};
|
|
@@ -41,20 +41,20 @@ export const formatForDisplay = ({ type, format, value, locale = undefined }: Va
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
switch (format) {
|
|
44
|
-
case
|
|
44
|
+
case Format.TypeFormat.Boolean: {
|
|
45
45
|
return formatScalar(TypeEnum.Boolean);
|
|
46
46
|
}
|
|
47
|
-
case
|
|
47
|
+
case Format.TypeFormat.Number: {
|
|
48
48
|
return formatScalar(TypeEnum.Number);
|
|
49
49
|
}
|
|
50
|
-
case
|
|
51
|
-
case
|
|
50
|
+
case Format.TypeFormat.String:
|
|
51
|
+
case Format.TypeFormat.Ref: {
|
|
52
52
|
return formatScalar(TypeEnum.String);
|
|
53
53
|
}
|
|
54
|
-
case
|
|
54
|
+
case Format.TypeFormat.Percent: {
|
|
55
55
|
return `${(value as number) * 100}%`;
|
|
56
56
|
}
|
|
57
|
-
case
|
|
57
|
+
case Format.TypeFormat.Currency: {
|
|
58
58
|
// TODO(burdon): Get from property annotation.
|
|
59
59
|
return (value as number).toLocaleString(locale, {
|
|
60
60
|
style: 'currency',
|
|
@@ -63,28 +63,28 @@ export const formatForDisplay = ({ type, format, value, locale = undefined }: Va
|
|
|
63
63
|
maximumFractionDigits: 2,
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
case
|
|
66
|
+
case Format.TypeFormat.Date: {
|
|
67
67
|
try {
|
|
68
68
|
return formatDate(new Date(value as number), 'yyyy-MM-dd');
|
|
69
69
|
} catch (error) {
|
|
70
70
|
return 'Invalid Date';
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
case
|
|
73
|
+
case Format.TypeFormat.Time: {
|
|
74
74
|
try {
|
|
75
75
|
return formatDate(new Date(value as number), 'HH:mm:ss');
|
|
76
76
|
} catch (error) {
|
|
77
77
|
return 'Invalid Time';
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
case
|
|
80
|
+
case Format.TypeFormat.DateTime: {
|
|
81
81
|
try {
|
|
82
82
|
return formatDate(new Date(value as number), 'yyyy-MM-dd HH:mm:ss');
|
|
83
83
|
} catch (error) {
|
|
84
84
|
return 'Invalid DateTime';
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
case
|
|
87
|
+
case Format.TypeFormat.GeoPoint: {
|
|
88
88
|
if (value === null || value === undefined) {
|
|
89
89
|
return '';
|
|
90
90
|
}
|
|
@@ -125,31 +125,31 @@ export const formatForEditing = ({ type, format, value, locale = undefined }: Va
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
switch (format) {
|
|
128
|
-
case
|
|
129
|
-
case
|
|
130
|
-
case
|
|
131
|
-
case
|
|
128
|
+
case Format.TypeFormat.Boolean:
|
|
129
|
+
case Format.TypeFormat.Number:
|
|
130
|
+
case Format.TypeFormat.String:
|
|
131
|
+
case Format.TypeFormat.Ref: {
|
|
132
132
|
return formatScalar(type);
|
|
133
133
|
}
|
|
134
|
-
case
|
|
134
|
+
case Format.TypeFormat.Percent: {
|
|
135
135
|
return String(value * 100);
|
|
136
136
|
}
|
|
137
|
-
case
|
|
137
|
+
case Format.TypeFormat.Currency: {
|
|
138
138
|
return String(value);
|
|
139
139
|
}
|
|
140
|
-
case
|
|
140
|
+
case Format.TypeFormat.DateTime: {
|
|
141
141
|
const date = new Date(value as number);
|
|
142
142
|
return date.toISOString();
|
|
143
143
|
}
|
|
144
|
-
case
|
|
144
|
+
case Format.TypeFormat.Date: {
|
|
145
145
|
const date = new Date(value as number);
|
|
146
146
|
return date.toISOString().split('T')[0];
|
|
147
147
|
}
|
|
148
|
-
case
|
|
148
|
+
case Format.TypeFormat.Time: {
|
|
149
149
|
const date = new Date(value as number);
|
|
150
150
|
return date.toISOString().split('T')[1].split('.')[0];
|
|
151
151
|
}
|
|
152
|
-
case
|
|
152
|
+
case Format.TypeFormat.GeoPoint: {
|
|
153
153
|
// Handle null or undefined
|
|
154
154
|
if (value === null || value === undefined) {
|
|
155
155
|
return '';
|
package/src/util/index.ts
CHANGED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
import { describe, test } from 'vitest';
|
|
7
|
+
|
|
8
|
+
import { DXN, Annotation, JsonSchema, Type } from '@dxos/echo';
|
|
9
|
+
|
|
10
|
+
import { getFormProperties } from './properties';
|
|
11
|
+
|
|
12
|
+
describe('getFormProperties', () => {
|
|
13
|
+
test('filters out keyword fields annotated FormInputAnnotation.set(false)', ({ expect }) => {
|
|
14
|
+
const TestSchema = Schema.Struct({
|
|
15
|
+
name: Schema.optional(Schema.String),
|
|
16
|
+
hidden: Schema.String.pipe(Annotation.FormInputAnnotation.set(false)),
|
|
17
|
+
}).pipe(Type.makeObject(DXN.make('org.dxos.test.keywordHidden', '0.1.0')));
|
|
18
|
+
|
|
19
|
+
const names = getFormProperties(Type.getSchema(TestSchema).ast).map((prop) => prop.name);
|
|
20
|
+
expect(names).toContain('name');
|
|
21
|
+
expect(names).not.toContain('hidden');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('filters out struct fields annotated FormInputAnnotation.set(false)', ({ expect }) => {
|
|
25
|
+
// Regression: JsonSchema fields are a Schema.Struct; encodedBoundAST strips
|
|
26
|
+
// annotations from non-keyword inner types, which previously bypassed the
|
|
27
|
+
// form-input filter (e.g., Routine.input).
|
|
28
|
+
const TestSchema = Schema.Struct({
|
|
29
|
+
name: Schema.optional(Schema.String),
|
|
30
|
+
schema: JsonSchema.JsonSchema.pipe(Annotation.FormInputAnnotation.set(false)),
|
|
31
|
+
}).pipe(Type.makeObject(DXN.make('org.dxos.test.structHidden', '0.1.0')));
|
|
32
|
+
|
|
33
|
+
const names = getFormProperties(Type.getSchema(TestSchema).ast).map((prop) => prop.name);
|
|
34
|
+
expect(names).toContain('name');
|
|
35
|
+
expect(names).not.toContain('schema');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('filters out array fields annotated FormInputAnnotation.set(false)', ({ expect }) => {
|
|
39
|
+
const TestSchema = Schema.Struct({
|
|
40
|
+
name: Schema.optional(Schema.String),
|
|
41
|
+
context: Schema.Array(Schema.Any).pipe(Annotation.FormInputAnnotation.set(false)),
|
|
42
|
+
}).pipe(Type.makeObject(DXN.make('org.dxos.test.arrayHidden', '0.1.0')));
|
|
43
|
+
|
|
44
|
+
const names = getFormProperties(Type.getSchema(TestSchema).ast).map((prop) => prop.name);
|
|
45
|
+
expect(names).toContain('name');
|
|
46
|
+
expect(names).not.toContain('context');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('filters out optional fields annotated FormInputAnnotation.set(false)', ({ expect }) => {
|
|
50
|
+
// Regression: optional fields' `prop.type` is the union `T | undefined`; the
|
|
51
|
+
// annotation lives on the inner `T`. Without unwrapping, the filter would
|
|
52
|
+
// miss the annotation and the hidden field would render. Covers the
|
|
53
|
+
// conventional pattern `Schema.X.pipe(FormInputAnnotation.set(false), Schema.optional)`.
|
|
54
|
+
const TestSchema = Schema.Struct({
|
|
55
|
+
name: Schema.optional(Schema.String),
|
|
56
|
+
userId: Schema.String.pipe(Annotation.FormInputAnnotation.set(false), Schema.optional),
|
|
57
|
+
}).pipe(Type.makeObject(DXN.make('org.dxos.test.optionalHidden', '0.1.0')));
|
|
58
|
+
|
|
59
|
+
const names = getFormProperties(Type.getSchema(TestSchema).ast).map((prop) => prop.name);
|
|
60
|
+
expect(names).toContain('name');
|
|
61
|
+
expect(names).not.toContain('userId');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test('preserves annotation when chained with .annotations()', ({ expect }) => {
|
|
65
|
+
// Regression: `.pipe(FormInputAnnotation.set(false)).annotations({...})` must
|
|
66
|
+
// not lose the form-input annotation.
|
|
67
|
+
const TestSchema = Schema.Struct({
|
|
68
|
+
name: Schema.optional(Schema.String),
|
|
69
|
+
hidden: JsonSchema.JsonSchema.pipe(Annotation.FormInputAnnotation.set(false)).annotations({
|
|
70
|
+
description: 'Hidden field',
|
|
71
|
+
}),
|
|
72
|
+
}).pipe(Type.makeObject(DXN.make('org.dxos.test.chainedHidden', '0.1.0')));
|
|
73
|
+
|
|
74
|
+
const names = getFormProperties(Type.getSchema(TestSchema).ast).map((prop) => prop.name);
|
|
75
|
+
expect(names).toContain('name');
|
|
76
|
+
expect(names).not.toContain('hidden');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
7
|
+
|
|
8
|
+
import { Annotation } from '@dxos/echo';
|
|
9
|
+
import { type SchemaProperty, getProperties } from '@dxos/effect';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get the property types of an AST and filter out properties that are not form inputs.
|
|
13
|
+
*
|
|
14
|
+
* The `FormInputAnnotation` is read from the raw property signature's AST (before
|
|
15
|
+
* `encodedBoundAST` is applied by `getProperties`), because `encodedBoundAST` strips
|
|
16
|
+
* annotations from non-keyword inner types (e.g., `Schema.Struct`, `Schema.Array`).
|
|
17
|
+
* Without this, fields like `Routine.input` (a JsonSchema struct) annotated
|
|
18
|
+
* `FormInputAnnotation.set(false)` would still render in the form.
|
|
19
|
+
*
|
|
20
|
+
* For optional fields, `prop.type` is the union `T | undefined` — the annotation
|
|
21
|
+
* lives on the inner `T`. Unwrap before reading so that the conventional pattern
|
|
22
|
+
* `Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional)` works.
|
|
23
|
+
*/
|
|
24
|
+
export const getFormProperties = (ast: SchemaAST.AST): SchemaProperty[] => {
|
|
25
|
+
const hidden = new Set(
|
|
26
|
+
SchemaAST.getPropertySignatures(ast)
|
|
27
|
+
.filter((prop) => {
|
|
28
|
+
// Unwrap `T | undefined` for optional fields so the inner annotation is visible.
|
|
29
|
+
const type =
|
|
30
|
+
prop.isOptional && SchemaAST.isUnion(prop.type)
|
|
31
|
+
? (prop.type.types.find((t) => t._tag !== 'UndefinedKeyword') ?? prop.type)
|
|
32
|
+
: prop.type;
|
|
33
|
+
return Annotation.FormInputAnnotation.getFromAst(type).pipe(Option.getOrElse(() => true)) === false;
|
|
34
|
+
})
|
|
35
|
+
.map((prop) => prop.name),
|
|
36
|
+
);
|
|
37
|
+
return getProperties(ast).filter((prop) => !hidden.has(prop.name));
|
|
38
|
+
};
|
package/src/util/refs.ts
CHANGED
|
@@ -4,35 +4,33 @@
|
|
|
4
4
|
|
|
5
5
|
import type * as SchemaAST from 'effect/SchemaAST';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
import { findArrayElementType } from './schema';
|
|
7
|
+
import { Ref } from '@dxos/echo';
|
|
8
|
+
import { type ReferenceAnnotationValue, ReferenceAnnotationId } from '@dxos/echo/internal';
|
|
9
|
+
import { findAnnotation, getArrayElementType, isArrayType } from '@dxos/effect';
|
|
12
10
|
|
|
13
11
|
type RefProps = {
|
|
14
12
|
ast: SchemaAST.AST;
|
|
15
13
|
isArray: boolean;
|
|
14
|
+
typename?: string;
|
|
16
15
|
};
|
|
17
16
|
|
|
18
|
-
export const getRefProps = (
|
|
19
|
-
const { ast, format, array } = property;
|
|
20
|
-
|
|
21
|
-
// Direct reference.
|
|
22
|
-
if (format === FormatEnum.Ref) {
|
|
23
|
-
return { ast, isArray: false };
|
|
24
|
-
}
|
|
25
|
-
|
|
17
|
+
export const getRefProps = (ast: SchemaAST.AST): RefProps | undefined => {
|
|
26
18
|
// Array of references.
|
|
27
|
-
if (
|
|
28
|
-
const elementType =
|
|
19
|
+
if (isArrayType(ast)) {
|
|
20
|
+
const elementType = getArrayElementType(ast);
|
|
29
21
|
if (elementType) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return { ast: elementType, isArray: true };
|
|
22
|
+
if (Ref.isRefType(elementType)) {
|
|
23
|
+
const typename = findAnnotation<ReferenceAnnotationValue>(elementType, ReferenceAnnotationId)?.typename;
|
|
24
|
+
return { ast: elementType, isArray: true, typename };
|
|
33
25
|
}
|
|
34
26
|
}
|
|
35
27
|
}
|
|
36
28
|
|
|
29
|
+
// Direct reference.
|
|
30
|
+
if (Ref.isRefType(ast)) {
|
|
31
|
+
const typename = findAnnotation<ReferenceAnnotationValue>(ast, ReferenceAnnotationId)?.typename;
|
|
32
|
+
return { ast, isArray: false, typename };
|
|
33
|
+
}
|
|
34
|
+
|
|
37
35
|
return undefined;
|
|
38
36
|
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React, { type ComponentPropsWithoutRef, type PropsWithChildren } from 'react';
|
|
2
|
-
import { type ButtonProps, type Label, type ThemedClassName } from '@dxos/react-ui';
|
|
3
|
-
export type ControlPageProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;
|
|
4
|
-
export declare const ControlPage: ({ children, classNames, ...props }: ControlPageProps) => React.JSX.Element;
|
|
5
|
-
export type ControlSectionProps = PropsWithChildren<{
|
|
6
|
-
title: Label;
|
|
7
|
-
description?: Label;
|
|
8
|
-
}>;
|
|
9
|
-
export declare const ControlSection: ({ title, description, children }: ControlSectionProps) => React.JSX.Element;
|
|
10
|
-
export declare const ControlSectionHeading: ({ title, description }: Omit<ControlSectionProps, "children">) => React.JSX.Element;
|
|
11
|
-
export declare const ControlGroupButton: ({ classNames, ...props }: ButtonProps) => React.JSX.Element;
|
|
12
|
-
export type ControlGroupProps = ThemedClassName<PropsWithChildren>;
|
|
13
|
-
export declare const ControlGroup: ({ children, classNames }: ControlGroupProps) => React.JSX.Element;
|
|
14
|
-
export declare const ControlFrame: ({ children }: ControlGroupProps) => React.JSX.Element;
|
|
15
|
-
export declare const controlItemClasses: string;
|
|
16
|
-
export type ControlItemProps = PropsWithChildren<{
|
|
17
|
-
title: Label;
|
|
18
|
-
description?: Label;
|
|
19
|
-
}>;
|
|
20
|
-
export declare const ControlItem: ({ title, description, children }: ControlItemProps) => React.JSX.Element;
|
|
21
|
-
export declare const ControlItemInput: ({ title, description, children }: ControlItemProps) => React.JSX.Element;
|
|
22
|
-
export declare const ControlFrameItem: ({ title, description, children }: ControlItemProps) => React.JSX.Element;
|
|
23
|
-
//# sourceMappingURL=ControlSection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ControlSection.d.ts","sourceRoot":"","sources":["../../../../../src/components/ControlSection/ControlSection.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAErF,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,KAAK,EACV,KAAK,eAAe,EAGrB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;AAEhF,eAAO,MAAM,WAAW,GAAI,oCAAoC,gBAAgB,sBAQ/E,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;IAClD,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,kCAAkC,mBAAmB,sBAOnF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,wBAAwB,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,sBAYlG,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,0BAA0B,WAAW,sBAEvE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAEnE,eAAO,MAAM,YAAY,GAAI,0BAA0B,iBAAiB,sBAWvE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,cAAc,iBAAiB,sBAU3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAK7B,CAAC;AAKH,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,kCAAkC,gBAAgB,sBAY7E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,kCAAkC,gBAAgB,sBAoBlF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,kCAAkC,gBAAgB,sBAUlF,CAAC"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { type StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
declare const meta: {
|
|
4
|
-
title: string;
|
|
5
|
-
component: ({ title, description, children }: import("./ControlSection").ControlSectionProps) => React.JSX.Element;
|
|
6
|
-
render: (args: {
|
|
7
|
-
title: import("@dxos/react-ui").Label;
|
|
8
|
-
description?: import("@dxos/react-ui").Label;
|
|
9
|
-
} & {
|
|
10
|
-
children?: React.ReactNode | undefined;
|
|
11
|
-
}) => React.JSX.Element;
|
|
12
|
-
decorators: import("@storybook/react").Decorator[];
|
|
13
|
-
parameters: {
|
|
14
|
-
layout: string;
|
|
15
|
-
translations: [{
|
|
16
|
-
readonly 'en-US': {
|
|
17
|
-
readonly "react-ui-form": {
|
|
18
|
-
readonly 'fields label': "Fields";
|
|
19
|
-
readonly 'hidden fields label': "Hidden Fields";
|
|
20
|
-
readonly 'empty readonly ref field label': "(none)";
|
|
21
|
-
readonly 'button add property': "Add property";
|
|
22
|
-
readonly 'field property label': "Property";
|
|
23
|
-
readonly 'field property placeholder': "Property name";
|
|
24
|
-
readonly 'field format label': "Type";
|
|
25
|
-
readonly 'field path label': "Field path";
|
|
26
|
-
readonly 'add field': "Add field";
|
|
27
|
-
readonly 'delete field': "Delete field";
|
|
28
|
-
readonly 'field limit reached': "Maximum number of fields reached";
|
|
29
|
-
readonly 'boolean input true value': "Yes";
|
|
30
|
-
readonly 'boolean input false value': "No";
|
|
31
|
-
readonly 'show field label': "Show field";
|
|
32
|
-
readonly 'hide field label': "Hide field";
|
|
33
|
-
readonly 'delete field label': "Delete field";
|
|
34
|
-
readonly 'ref field combobox input placeholder': "Search…";
|
|
35
|
-
readonly 'ref field placeholder_one': "Select…";
|
|
36
|
-
readonly 'ref field placeholder_other': "Select items…";
|
|
37
|
-
readonly 'button cancel': "Cancel";
|
|
38
|
-
readonly 'button save': "Save";
|
|
39
|
-
readonly 'format boolean': "Boolean";
|
|
40
|
-
readonly 'format currency': "Currency";
|
|
41
|
-
readonly 'format date': "Date";
|
|
42
|
-
readonly 'format date-time': "DateTime";
|
|
43
|
-
readonly 'format did': "DID";
|
|
44
|
-
readonly 'format duration': "Duration";
|
|
45
|
-
readonly 'format dxn': "DXN";
|
|
46
|
-
readonly 'format email': "Email";
|
|
47
|
-
readonly 'format formula': "Formula";
|
|
48
|
-
readonly 'format hostname': "Hostname";
|
|
49
|
-
readonly 'format integer': "Integer";
|
|
50
|
-
readonly 'format json': "JSON";
|
|
51
|
-
readonly 'format lnglat': "Geopoint";
|
|
52
|
-
readonly 'format markdown': "Markdown";
|
|
53
|
-
readonly 'format percent': "Percent";
|
|
54
|
-
readonly 'format ref': "Reference";
|
|
55
|
-
readonly 'format regex': "RegExp";
|
|
56
|
-
readonly 'format string': "String";
|
|
57
|
-
readonly 'format single-select': "Select";
|
|
58
|
-
readonly 'format multi-select': "Multi-select";
|
|
59
|
-
readonly 'format text': "Long text";
|
|
60
|
-
readonly 'format time': "Time";
|
|
61
|
-
readonly 'format timestamp': "Timestamp";
|
|
62
|
-
readonly 'format user': "User";
|
|
63
|
-
readonly 'format number': "Number";
|
|
64
|
-
readonly 'format uri': "URI";
|
|
65
|
-
readonly 'format url': "URL";
|
|
66
|
-
readonly 'format uuid': "UUID";
|
|
67
|
-
readonly 'latitude label': "Latitude";
|
|
68
|
-
readonly 'longitude label': "Longitude";
|
|
69
|
-
readonly 'select option label': "Label";
|
|
70
|
-
readonly 'select option label placeholder': "Option label";
|
|
71
|
-
readonly 'select option color': "Color";
|
|
72
|
-
readonly 'select option delete': "Delete";
|
|
73
|
-
readonly 'select option add': "Add option";
|
|
74
|
-
readonly 'system schema title': "System record type";
|
|
75
|
-
readonly 'system schema description': "This is a system record type and cannot be modified, though the view can still be configured.";
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
}];
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
export default meta;
|
|
82
|
-
type Story = StoryObj<typeof meta>;
|
|
83
|
-
export declare const Default: Story;
|
|
84
|
-
//# sourceMappingURL=ControlSection.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ControlSection.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/ControlSection/ControlSection.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAa6B,CAAC;AAExC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ControlSection/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { type SchemaProperty } from '@dxos/schema';
|
|
3
|
-
import { type ComponentLookup } from './Form';
|
|
4
|
-
import { type FormFieldProps } from './FormContent';
|
|
5
|
-
import { type FormInputStateProps } from './FormContext';
|
|
6
|
-
import { type InputComponent } from './Input';
|
|
7
|
-
type ArrayFieldProps = {
|
|
8
|
-
property: SchemaProperty<any>;
|
|
9
|
-
inputProps: FormInputStateProps;
|
|
10
|
-
path?: (string | number)[];
|
|
11
|
-
Custom?: Partial<Record<string, InputComponent>>;
|
|
12
|
-
lookupComponent?: ComponentLookup;
|
|
13
|
-
} & Pick<FormFieldProps, 'readonly'>;
|
|
14
|
-
export declare const ArrayField: ({ property, readonly, path, inputProps, Custom, lookupComponent }: ArrayFieldProps) => React.JSX.Element | null;
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=ArrayField.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayField.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/ArrayField.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAKrD,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,cAAc,CAAC;AAKxE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,SAAS,CAAC;AAE3D,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAErC,eAAO,MAAM,UAAU,GAAI,mEAAmE,eAAe,6BA8F5G,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { type InputProps } from './Input';
|
|
3
|
-
export declare const TextInput: ({ type, label, inputOnly, readonly, placeholder, getStatus, getValue, onValueChange, onBlur, }: InputProps) => React.JSX.Element | null;
|
|
4
|
-
export declare const NumberInput: ({ type, label, inputOnly, readonly, placeholder, getStatus, getValue, onValueChange, onBlur, }: InputProps) => React.JSX.Element | null;
|
|
5
|
-
export declare const BooleanInput: ({ type, label, inputOnly, getStatus, getValue, onValueChange, readonly }: InputProps) => React.JSX.Element;
|
|
6
|
-
export type SelectInputOptions = InputProps & {
|
|
7
|
-
options?: Array<{
|
|
8
|
-
value: string | number;
|
|
9
|
-
label?: string;
|
|
10
|
-
}>;
|
|
11
|
-
};
|
|
12
|
-
export declare const SelectInput: ({ type, label, inputOnly, readonly, placeholder, options, getStatus, getValue, onValueChange, }: SelectInputOptions) => React.JSX.Element | null;
|
|
13
|
-
export declare const MarkdownInput: ({ type, label, inputOnly, readonly, placeholder, getStatus, getValue, onValueChange, onBlur, }: InputProps) => React.JSX.Element;
|
|
14
|
-
//# sourceMappingURL=Defaults.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Defaults.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/Defaults.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,eAAO,MAAM,SAAS,GAAI,gGAUvB,UAAU,6BAsBZ,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,gGAUzB,UAAU,6BAuBZ,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,0EAA0E,UAAU,sBAgBhH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG;IAC5C,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,iGAUzB,kBAAkB,6BAiCpB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,gGAU3B,UAAU,sBA8CZ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
export type FormOuterSpacing = boolean | 'blockStart-0' | 'scroll-fields';
|
|
3
|
-
export type FormActionsProps = {
|
|
4
|
-
readonly?: boolean;
|
|
5
|
-
onCancel?: () => void;
|
|
6
|
-
outerSpacing?: FormOuterSpacing;
|
|
7
|
-
};
|
|
8
|
-
export declare const FormActions: ({ readonly, onCancel, outerSpacing }: FormActionsProps) => React.JSX.Element;
|
|
9
|
-
//# sourceMappingURL=FormActions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormActions.d.ts","sourceRoot":"","sources":["../../../../../src/components/Form/FormActions.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC;AAE1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,sCAA6C,gBAAgB,sBA+BxF,CAAC"}
|