@dxos/react-ui-form 0.8.4-main.b97322e → 0.8.4-main.dedc0f3
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/dist/lib/browser/index.mjs +601 -528
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +601 -528
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/ControlSection/ControlSection.d.ts +2 -2
- package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +1 -1
- package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +79 -4
- package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +1 -1
- package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +2 -2
- package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
- package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +74 -4
- package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/ArrayField.d.ts +2 -2
- package/dist/types/src/components/Form/ArrayField.d.ts.map +1 -1
- package/dist/types/src/components/Form/Defaults.d.ts +5 -5
- package/dist/types/src/components/Form/Defaults.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.d.ts +5 -4
- package/dist/types/src/components/Form/Form.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.stories.d.ts +126 -30
- package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/FormActions.d.ts.map +1 -1
- package/dist/types/src/components/Form/FormContent.d.ts +16 -10
- package/dist/types/src/components/Form/FormContent.d.ts.map +1 -1
- package/dist/types/src/components/Form/FormContext.d.ts +1 -1
- package/dist/types/src/components/Form/FormContext.d.ts.map +1 -1
- package/dist/types/src/components/Form/Input.d.ts +4 -1
- package/dist/types/src/components/Form/Input.d.ts.map +1 -1
- package/dist/types/src/components/Form/RefField.d.ts +10 -4
- package/dist/types/src/components/Form/RefField.d.ts.map +1 -1
- package/dist/types/src/components/Form/custom/GeoPointInput.d.ts +1 -1
- package/dist/types/src/components/Form/custom/GeoPointInput.d.ts.map +1 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts +1 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +1 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +74 -3
- package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/custom/TupleInput.d.ts +1 -1
- package/dist/types/src/components/Form/factory.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +3 -2
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +76 -5
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +6 -3
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/hooks/useForm.d.ts +1 -1
- package/dist/types/src/hooks/useForm.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +9 -4
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/field.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +35 -30
- package/src/components/ControlSection/ControlSection.stories.tsx +8 -10
- package/src/components/ControlSection/ControlSection.tsx +26 -12
- package/src/components/FieldEditor/FieldEditor.stories.tsx +8 -9
- package/src/components/FieldEditor/FieldEditor.test.tsx +3 -2
- package/src/components/FieldEditor/FieldEditor.tsx +22 -17
- package/src/components/Form/ArrayField.tsx +8 -8
- package/src/components/Form/Defaults.tsx +22 -20
- package/src/components/Form/Form.stories.tsx +129 -93
- package/src/components/Form/Form.tsx +16 -12
- package/src/components/Form/FormActions.tsx +2 -1
- package/src/components/Form/FormContent.tsx +96 -34
- package/src/components/Form/FormContext.tsx +5 -5
- package/src/components/Form/Input.tsx +4 -1
- package/src/components/Form/RefField.tsx +126 -40
- package/src/components/Form/custom/GeoPointInput.tsx +29 -21
- package/src/components/Form/custom/SelectOptionsInput.stories.tsx +7 -6
- package/src/components/Form/custom/SelectOptionsInput.tsx +29 -30
- package/src/components/Form/custom/TupleInput.tsx +2 -2
- package/src/components/Form/factory.tsx +1 -1
- package/src/components/ViewEditor/ViewEditor.stories.tsx +50 -23
- package/src/components/ViewEditor/ViewEditor.test.tsx +7 -10
- package/src/components/ViewEditor/ViewEditor.tsx +151 -132
- package/src/components/index.ts +0 -2
- package/src/components/testing.tsx +15 -9
- package/src/hooks/useForm.ts +5 -3
- package/src/hooks/useRefQueryLookupHandler.ts +1 -1
- package/src/translations.ts +11 -5
- package/src/util/field.ts +8 -18
- package/dist/types/src/components/deprecated/Form.d.ts +0 -15
- package/dist/types/src/components/deprecated/Form.d.ts.map +0 -1
- package/dist/types/src/components/deprecated/Form.stories.d.ts +0 -13
- package/dist/types/src/components/deprecated/Form.stories.d.ts.map +0 -1
- package/dist/types/src/components/deprecated/FormInput.d.ts +0 -16
- package/dist/types/src/components/deprecated/FormInput.d.ts.map +0 -1
- package/dist/types/src/components/deprecated/index.d.ts +0 -2
- package/dist/types/src/components/deprecated/index.d.ts.map +0 -1
- package/src/components/deprecated/Form.stories.tsx +0 -62
- package/src/components/deprecated/Form.tsx +0 -119
- package/src/components/deprecated/FormInput.tsx +0 -71
- package/src/components/deprecated/index.ts +0 -5
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Form.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/deprecated/Form.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAkC,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAIlE,QAAA,MAAM,YAAY,GAAI,OAAO,mBAAmB,sBAM/C,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAQnC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAErD,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type JSX, type PropsWithChildren } from 'react';
|
|
2
|
-
import { type ThemedClassName } from '@dxos/react-ui';
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated
|
|
5
|
-
*/
|
|
6
|
-
export declare const DeprecatedFormContainer: ({ children, classNames }: ThemedClassName<PropsWithChildren>) => JSX.Element;
|
|
7
|
-
export type DeprecatedFormInputProps = {
|
|
8
|
-
label: string;
|
|
9
|
-
description?: JSX.Element;
|
|
10
|
-
secondary?: JSX.Element;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* @deprecated
|
|
14
|
-
*/
|
|
15
|
-
export declare const DeprecatedFormInput: ({ label, description, secondary, children, }: PropsWithChildren<DeprecatedFormInputProps>) => JSX.Element;
|
|
16
|
-
//# sourceMappingURL=FormInput.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormInput.d.ts","sourceRoot":"","sources":["../../../../../src/components/deprecated/FormInput.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,KAAK,GAAG,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAS,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG7D;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,0BAA0B,eAAe,CAAC,iBAAiB,CAAC,gBAQnG,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,8CAKjC,iBAAiB,CAAC,wBAAwB,CAAC,gBAkC7C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/deprecated/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
|
-
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
|
-
import React from 'react';
|
|
9
|
-
|
|
10
|
-
import { live } from '@dxos/live-object';
|
|
11
|
-
import { testData, TestSchema, testView, type TestType } from '@dxos/schema/testing';
|
|
12
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
13
|
-
|
|
14
|
-
import { DeprecatedForm, type DeprecatedFormProps } from './Form';
|
|
15
|
-
import { translations } from '../../translations';
|
|
16
|
-
import { TestLayout, TestPanel } from '../testing';
|
|
17
|
-
|
|
18
|
-
const DefaultStory = (props: DeprecatedFormProps) => (
|
|
19
|
-
<TestLayout json={{ props }}>
|
|
20
|
-
<TestPanel>
|
|
21
|
-
<DeprecatedForm {...props} />
|
|
22
|
-
</TestPanel>
|
|
23
|
-
</TestLayout>
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
const meta: Meta<typeof DefaultStory> = {
|
|
27
|
-
title: 'ui/react-ui-form/DeprecatedForm',
|
|
28
|
-
component: DeprecatedForm,
|
|
29
|
-
render: DefaultStory,
|
|
30
|
-
decorators: [withLayout({ fullscreen: true }), withTheme],
|
|
31
|
-
parameters: {
|
|
32
|
-
translations,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export default meta;
|
|
37
|
-
|
|
38
|
-
type Story = StoryObj<DeprecatedFormProps<TestType>>;
|
|
39
|
-
|
|
40
|
-
export const Default: Story = {
|
|
41
|
-
args: {
|
|
42
|
-
object: live(testData),
|
|
43
|
-
projection: live(testView).projection,
|
|
44
|
-
schema: TestSchema,
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export const Empty: Story = {
|
|
49
|
-
args: {
|
|
50
|
-
projection: live(testView).projection,
|
|
51
|
-
schema: TestSchema,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export const Readonly: Story = {
|
|
56
|
-
args: {
|
|
57
|
-
object: live(testData),
|
|
58
|
-
projection: live(testView).projection,
|
|
59
|
-
schema: TestSchema,
|
|
60
|
-
readonly: true,
|
|
61
|
-
},
|
|
62
|
-
};
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { SchemaAST, type Schema, Option, pipe } from 'effect';
|
|
6
|
-
import React, { useState } from 'react';
|
|
7
|
-
|
|
8
|
-
import { findProperty } from '@dxos/effect';
|
|
9
|
-
import { Input, type ThemedClassName, type TextInputProps as NativeTextInputProps } from '@dxos/react-ui';
|
|
10
|
-
import { mx } from '@dxos/react-ui-theme';
|
|
11
|
-
import { getFieldValue, setFieldValue, type Projection } from '@dxos/schema';
|
|
12
|
-
|
|
13
|
-
export type DeprecatedFormProps<T extends {} = {}> = ThemedClassName<{
|
|
14
|
-
projection: Projection;
|
|
15
|
-
object: T;
|
|
16
|
-
schema?: Schema.Schema<T>;
|
|
17
|
-
readonly?: boolean;
|
|
18
|
-
}>;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Schema-based object form.
|
|
22
|
-
*/
|
|
23
|
-
export const DeprecatedForm = <T extends {} = {}>({
|
|
24
|
-
classNames,
|
|
25
|
-
projection,
|
|
26
|
-
object,
|
|
27
|
-
schema,
|
|
28
|
-
readonly,
|
|
29
|
-
}: DeprecatedFormProps<T>) => {
|
|
30
|
-
return (
|
|
31
|
-
<div role='none' className={mx('flex flex-col w-full gap-2 p-2', classNames)}>
|
|
32
|
-
{projection.fields.map((field) => {
|
|
33
|
-
const prop = schema && findProperty(schema, field.path);
|
|
34
|
-
const title = (prop && pipe(SchemaAST.getTitleAnnotation(prop), Option.getOrUndefined)) ?? '';
|
|
35
|
-
const description = (prop && pipe(SchemaAST.getDescriptionAnnotation(prop), Option.getOrUndefined)) ?? title;
|
|
36
|
-
// const format =
|
|
37
|
-
// (prop && (getPatternAnnotation(prop) ?? (SchemaAST.isNumberKeyword(prop) && RealNumberFormat))) || undefined;
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
// Boolean
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
if (prop && SchemaAST.isBooleanKeyword(prop)) {
|
|
44
|
-
const value = object && getFieldValue(object, field);
|
|
45
|
-
const onChange = (checked: boolean) => {
|
|
46
|
-
setFieldValue(object, field, checked);
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<div key={field.path} className='flex flex-col w-full gap-1'>
|
|
51
|
-
<Input.Root>
|
|
52
|
-
<Input.Label classNames='px-1'>{title}</Input.Label>
|
|
53
|
-
<Input.Switch disabled={readonly} checked={!!value} onCheckedChange={(checked) => onChange(checked)} />
|
|
54
|
-
</Input.Root>
|
|
55
|
-
</div>
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
// Strings
|
|
61
|
-
// TODO(burdon): Other types:
|
|
62
|
-
// - RichText editor
|
|
63
|
-
// - Numbers (with formatting: commas, currency, etc.)
|
|
64
|
-
// - Date (https://ark-ui.com/react/docs/components/date-picker)
|
|
65
|
-
// - Enum (single/multi-select)
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
const value = object ? getFieldValue(object, field) : undefined;
|
|
69
|
-
|
|
70
|
-
return (
|
|
71
|
-
<div key={field.path} className='flex flex-col w-full gap-1'>
|
|
72
|
-
<Input.Root>
|
|
73
|
-
<Input.Label classNames='px-1'>{title}</Input.Label>
|
|
74
|
-
<TextInput
|
|
75
|
-
disabled={readonly}
|
|
76
|
-
placeholder={description}
|
|
77
|
-
// format={format}
|
|
78
|
-
value={value ? String(value) : ''}
|
|
79
|
-
onChange={(event) => setFieldValue(object, field, event.target.value)}
|
|
80
|
-
/>
|
|
81
|
-
</Input.Root>
|
|
82
|
-
</div>
|
|
83
|
-
);
|
|
84
|
-
})}
|
|
85
|
-
</div>
|
|
86
|
-
);
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
type TextInputProps = {
|
|
90
|
-
// format?: PatternAnnotation;
|
|
91
|
-
} & Omit<NativeTextInputProps, 'style'>;
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* @deprecated
|
|
95
|
-
*/
|
|
96
|
-
// TODO(burdon): Remove.
|
|
97
|
-
// TODO(burdon): Use schema validation directly.
|
|
98
|
-
const TextInput = ({ onChange, ...props }: TextInputProps) => {
|
|
99
|
-
const [valid, _setValid] = useState(true);
|
|
100
|
-
|
|
101
|
-
const handleChange: NativeTextInputProps['onChange'] = (ev) => {
|
|
102
|
-
// const text = ev.target.value;
|
|
103
|
-
// if (!format?.filter || text.match(format.filter)) {
|
|
104
|
-
onChange?.(ev);
|
|
105
|
-
// if (format?.valid) {
|
|
106
|
-
// setValid(format.valid.test(text));
|
|
107
|
-
// }
|
|
108
|
-
// }
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
return (
|
|
112
|
-
<Input.TextInput
|
|
113
|
-
{...props}
|
|
114
|
-
// TODO(burdon): validationValence on Input.
|
|
115
|
-
style={valid ? {} : ({ '--tw-ring-color': 'red' } as any)}
|
|
116
|
-
onChange={handleChange}
|
|
117
|
-
/>
|
|
118
|
-
);
|
|
119
|
-
};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2023 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React, { type JSX, type PropsWithChildren } from 'react';
|
|
6
|
-
|
|
7
|
-
import { Input, type ThemedClassName } from '@dxos/react-ui';
|
|
8
|
-
import { mx, textBlockWidth } from '@dxos/react-ui-theme';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @deprecated
|
|
12
|
-
*/
|
|
13
|
-
export const DeprecatedFormContainer = ({ children, classNames }: ThemedClassName<PropsWithChildren>) => {
|
|
14
|
-
return (
|
|
15
|
-
<div role='none' className='container-max-width p-4 justify-center overflow-x-hidden overflow-y-auto'>
|
|
16
|
-
<div role='form' className={mx('flex flex-col', textBlockWidth, classNames)}>
|
|
17
|
-
{children}
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export type DeprecatedFormInputProps = {
|
|
24
|
-
label: string;
|
|
25
|
-
description?: JSX.Element;
|
|
26
|
-
secondary?: JSX.Element;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @deprecated
|
|
31
|
-
*/
|
|
32
|
-
export const DeprecatedFormInput = ({
|
|
33
|
-
label,
|
|
34
|
-
description,
|
|
35
|
-
secondary,
|
|
36
|
-
children,
|
|
37
|
-
}: PropsWithChildren<DeprecatedFormInputProps>) => {
|
|
38
|
-
const primary = (
|
|
39
|
-
<div role='none' className='flex w-full gap-4 py-1'>
|
|
40
|
-
<Input.Root>
|
|
41
|
-
<div role='none' className='flex flex-col w-full'>
|
|
42
|
-
<Input.Label classNames='flex min-bs-[--rail-action] items-center' style={{ fontSize: 'unset' }}>
|
|
43
|
-
{label}
|
|
44
|
-
</Input.Label>
|
|
45
|
-
{description && (
|
|
46
|
-
<Input.DescriptionAndValidation classNames='mbs-0.5'>
|
|
47
|
-
<Input.Description>{description}</Input.Description>
|
|
48
|
-
</Input.DescriptionAndValidation>
|
|
49
|
-
)}
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
<div role='none'>
|
|
53
|
-
<div role='none' className='flex min-bs-[--rail-action] items-center'>
|
|
54
|
-
{children}
|
|
55
|
-
</div>
|
|
56
|
-
</div>
|
|
57
|
-
</Input.Root>
|
|
58
|
-
</div>
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
if (secondary) {
|
|
62
|
-
return (
|
|
63
|
-
<div role='none'>
|
|
64
|
-
{primary}
|
|
65
|
-
{secondary}
|
|
66
|
-
</div>
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return primary;
|
|
71
|
-
};
|