@fluentui/react-field 9.0.0-alpha.2 → 9.0.0-alpha.21
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.json +931 -12
- package/CHANGELOG.md +281 -13
- package/README.md +66 -1
- package/dist/index.d.ts +76 -157
- package/lib/Field.js.map +1 -1
- package/lib/components/Field/Field.js +11 -0
- package/lib/components/Field/Field.js.map +1 -0
- package/lib/components/Field/Field.types.js.map +1 -1
- package/lib/components/Field/index.js +1 -0
- package/lib/components/Field/index.js.map +1 -1
- package/lib/components/Field/renderField.js +10 -7
- package/lib/components/Field/renderField.js.map +1 -1
- package/lib/components/Field/useField.js +57 -90
- package/lib/components/Field/useField.js.map +1 -1
- package/lib/components/Field/useFieldStyles.js +61 -76
- package/lib/components/Field/useFieldStyles.js.map +1 -1
- package/lib/index.js +3 -10
- package/lib/index.js.map +1 -1
- package/lib/util/makeDeprecatedField.js +71 -0
- package/lib/util/makeDeprecatedField.js.map +1 -0
- package/lib-amd/Field.js +6 -0
- package/lib-amd/Field.js.map +1 -0
- package/lib-amd/components/Field/Field.js +12 -0
- package/lib-amd/components/Field/Field.js.map +1 -0
- package/lib-amd/components/Field/Field.types.js +5 -0
- package/lib-amd/components/Field/Field.types.js.map +1 -0
- package/lib-amd/components/Field/index.js +10 -0
- package/lib-amd/components/Field/index.js.map +1 -0
- package/lib-amd/components/Field/renderField.js +20 -0
- package/lib-amd/components/Field/renderField.js.map +1 -0
- package/lib-amd/components/Field/useField.js +99 -0
- package/lib-amd/components/Field/useField.js.map +1 -0
- package/lib-amd/components/Field/useFieldStyles.js +115 -0
- package/lib-amd/components/Field/useFieldStyles.js.map +1 -0
- package/lib-amd/index.js +13 -0
- package/lib-amd/index.js.map +1 -0
- package/lib-amd/util/makeDeprecatedField.js +38 -0
- package/lib-amd/util/makeDeprecatedField.js.map +1 -0
- package/lib-commonjs/Field.js +0 -2
- package/lib-commonjs/Field.js.map +1 -1
- package/lib-commonjs/components/Field/Field.js +17 -0
- package/lib-commonjs/components/Field/Field.js.map +1 -0
- package/lib-commonjs/components/Field/Field.types.js.map +1 -1
- package/lib-commonjs/components/Field/index.js +1 -5
- package/lib-commonjs/components/Field/index.js.map +1 -1
- package/lib-commonjs/components/Field/renderField.js +10 -11
- package/lib-commonjs/components/Field/renderField.js.map +1 -1
- package/lib-commonjs/components/Field/useField.js +58 -99
- package/lib-commonjs/components/Field/useField.js.map +1 -1
- package/lib-commonjs/components/Field/useFieldStyles.js +62 -83
- package/lib-commonjs/components/Field/useFieldStyles.js.map +1 -1
- package/lib-commonjs/index.js +15 -132
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/util/makeDeprecatedField.js +79 -0
- package/lib-commonjs/util/makeDeprecatedField.js.map +1 -0
- package/package.json +25 -25
- package/Spec.md +0 -354
- package/lib/CheckboxField.js +0 -2
- package/lib/CheckboxField.js.map +0 -1
- package/lib/ComboboxField.js +0 -2
- package/lib/ComboboxField.js.map +0 -1
- package/lib/InputField.js +0 -2
- package/lib/InputField.js.map +0 -1
- package/lib/RadioGroupField.js +0 -2
- package/lib/RadioGroupField.js.map +0 -1
- package/lib/SelectField.js +0 -2
- package/lib/SelectField.js.map +0 -1
- package/lib/SliderField.js +0 -2
- package/lib/SliderField.js.map +0 -1
- package/lib/SpinButtonField.js +0 -2
- package/lib/SpinButtonField.js.map +0 -1
- package/lib/SwitchField.js +0 -2
- package/lib/SwitchField.js.map +0 -1
- package/lib/TextareaField.js +0 -2
- package/lib/TextareaField.js.map +0 -1
- package/lib/components/CheckboxField/CheckboxField.js +0 -32
- package/lib/components/CheckboxField/CheckboxField.js.map +0 -1
- package/lib/components/CheckboxField/index.js +0 -2
- package/lib/components/CheckboxField/index.js.map +0 -1
- package/lib/components/ComboboxField/ComboboxField.js +0 -14
- package/lib/components/ComboboxField/ComboboxField.js.map +0 -1
- package/lib/components/ComboboxField/index.js +0 -2
- package/lib/components/ComboboxField/index.js.map +0 -1
- package/lib/components/Field/SlotComponent.types.js +0 -2
- package/lib/components/Field/SlotComponent.types.js.map +0 -1
- package/lib/components/InputField/InputField.js +0 -14
- package/lib/components/InputField/InputField.js.map +0 -1
- package/lib/components/InputField/index.js +0 -2
- package/lib/components/InputField/index.js.map +0 -1
- package/lib/components/RadioGroupField/RadioGroupField.js +0 -15
- package/lib/components/RadioGroupField/RadioGroupField.js.map +0 -1
- package/lib/components/RadioGroupField/index.js +0 -2
- package/lib/components/RadioGroupField/index.js.map +0 -1
- package/lib/components/SelectField/SelectField.js +0 -14
- package/lib/components/SelectField/SelectField.js.map +0 -1
- package/lib/components/SelectField/index.js +0 -2
- package/lib/components/SelectField/index.js.map +0 -1
- package/lib/components/SliderField/SliderField.js +0 -14
- package/lib/components/SliderField/SliderField.js.map +0 -1
- package/lib/components/SliderField/index.js +0 -2
- package/lib/components/SliderField/index.js.map +0 -1
- package/lib/components/SpinButtonField/SpinButtonField.js +0 -14
- package/lib/components/SpinButtonField/SpinButtonField.js.map +0 -1
- package/lib/components/SpinButtonField/index.js +0 -2
- package/lib/components/SpinButtonField/index.js.map +0 -1
- package/lib/components/SwitchField/SwitchField.js +0 -14
- package/lib/components/SwitchField/SwitchField.js.map +0 -1
- package/lib/components/SwitchField/index.js +0 -2
- package/lib/components/SwitchField/index.js.map +0 -1
- package/lib/components/TextareaField/TextareaField.js +0 -14
- package/lib/components/TextareaField/TextareaField.js.map +0 -1
- package/lib/components/TextareaField/index.js +0 -2
- package/lib/components/TextareaField/index.js.map +0 -1
- package/lib-commonjs/CheckboxField.js +0 -10
- package/lib-commonjs/CheckboxField.js.map +0 -1
- package/lib-commonjs/ComboboxField.js +0 -10
- package/lib-commonjs/ComboboxField.js.map +0 -1
- package/lib-commonjs/InputField.js +0 -10
- package/lib-commonjs/InputField.js.map +0 -1
- package/lib-commonjs/RadioGroupField.js +0 -10
- package/lib-commonjs/RadioGroupField.js.map +0 -1
- package/lib-commonjs/SelectField.js +0 -10
- package/lib-commonjs/SelectField.js.map +0 -1
- package/lib-commonjs/SliderField.js +0 -10
- package/lib-commonjs/SliderField.js.map +0 -1
- package/lib-commonjs/SpinButtonField.js +0 -10
- package/lib-commonjs/SpinButtonField.js.map +0 -1
- package/lib-commonjs/SwitchField.js +0 -10
- package/lib-commonjs/SwitchField.js.map +0 -1
- package/lib-commonjs/TextareaField.js +0 -10
- package/lib-commonjs/TextareaField.js.map +0 -1
- package/lib-commonjs/components/CheckboxField/CheckboxField.js +0 -42
- package/lib-commonjs/components/CheckboxField/CheckboxField.js.map +0 -1
- package/lib-commonjs/components/CheckboxField/index.js +0 -10
- package/lib-commonjs/components/CheckboxField/index.js.map +0 -1
- package/lib-commonjs/components/ComboboxField/ComboboxField.js +0 -24
- package/lib-commonjs/components/ComboboxField/ComboboxField.js.map +0 -1
- package/lib-commonjs/components/ComboboxField/index.js +0 -10
- package/lib-commonjs/components/ComboboxField/index.js.map +0 -1
- package/lib-commonjs/components/Field/SlotComponent.types.js +0 -6
- package/lib-commonjs/components/Field/SlotComponent.types.js.map +0 -1
- package/lib-commonjs/components/InputField/InputField.js +0 -24
- package/lib-commonjs/components/InputField/InputField.js.map +0 -1
- package/lib-commonjs/components/InputField/index.js +0 -10
- package/lib-commonjs/components/InputField/index.js.map +0 -1
- package/lib-commonjs/components/RadioGroupField/RadioGroupField.js +0 -25
- package/lib-commonjs/components/RadioGroupField/RadioGroupField.js.map +0 -1
- package/lib-commonjs/components/RadioGroupField/index.js +0 -10
- package/lib-commonjs/components/RadioGroupField/index.js.map +0 -1
- package/lib-commonjs/components/SelectField/SelectField.js +0 -24
- package/lib-commonjs/components/SelectField/SelectField.js.map +0 -1
- package/lib-commonjs/components/SelectField/index.js +0 -10
- package/lib-commonjs/components/SelectField/index.js.map +0 -1
- package/lib-commonjs/components/SliderField/SliderField.js +0 -24
- package/lib-commonjs/components/SliderField/SliderField.js.map +0 -1
- package/lib-commonjs/components/SliderField/index.js +0 -10
- package/lib-commonjs/components/SliderField/index.js.map +0 -1
- package/lib-commonjs/components/SpinButtonField/SpinButtonField.js +0 -24
- package/lib-commonjs/components/SpinButtonField/SpinButtonField.js.map +0 -1
- package/lib-commonjs/components/SpinButtonField/index.js +0 -10
- package/lib-commonjs/components/SpinButtonField/index.js.map +0 -1
- package/lib-commonjs/components/SwitchField/SwitchField.js +0 -24
- package/lib-commonjs/components/SwitchField/SwitchField.js.map +0 -1
- package/lib-commonjs/components/SwitchField/index.js +0 -10
- package/lib-commonjs/components/SwitchField/index.js.map +0 -1
- package/lib-commonjs/components/TextareaField/TextareaField.js +0 -24
- package/lib-commonjs/components/TextareaField/TextareaField.js.map +0 -1
- package/lib-commonjs/components/TextareaField/index.js +0 -10
- package/lib-commonjs/components/TextareaField/index.js.map +0 -1
package/dist/index.d.ts
CHANGED
@@ -1,83 +1,46 @@
|
|
1
1
|
/// <reference types="react" />
|
2
2
|
|
3
|
-
import { Checkbox } from '@fluentui/react-checkbox';
|
4
|
-
import type { CheckboxProps } from '@fluentui/react-checkbox';
|
5
|
-
import { Combobox } from '@fluentui/react-combobox';
|
6
3
|
import type { ComponentProps } from '@fluentui/react-utilities';
|
7
4
|
import type { ComponentState } from '@fluentui/react-utilities';
|
8
5
|
import { ForwardRefComponent } from '@fluentui/react-utilities';
|
9
|
-
import { Input } from '@fluentui/react-input';
|
10
6
|
import { Label } from '@fluentui/react-label';
|
11
|
-
import { RadioGroup } from '@fluentui/react-radio';
|
12
7
|
import * as React_2 from 'react';
|
13
|
-
import { Select } from '@fluentui/react-select';
|
14
|
-
import { Slider } from '@fluentui/react-slider';
|
15
8
|
import type { Slot } from '@fluentui/react-utilities';
|
16
|
-
import { SlotClassNames } from '@fluentui/react-utilities';
|
17
|
-
import type { SlotRenderFunction } from '@fluentui/react-utilities';
|
18
|
-
import type { SlotShorthandValue } from '@fluentui/react-utilities';
|
19
|
-
import { SpinButton } from '@fluentui/react-spinbutton';
|
20
|
-
import { Switch } from '@fluentui/react-switch';
|
21
|
-
import { Textarea } from '@fluentui/react-textarea';
|
9
|
+
import type { SlotClassNames } from '@fluentui/react-utilities';
|
22
10
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
export declare type
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
label?: CheckboxProps['label'];
|
32
|
-
/**
|
33
|
-
* The label for the CheckboxField, which appears above or before the Checkbox, depending on the `orientation` prop.
|
34
|
-
* It is recommended to only set the `label` prop, and not `fieldLabel`.
|
35
|
-
*/
|
36
|
-
fieldLabel?: FieldProps<typeof Checkbox>['label'];
|
37
|
-
};
|
38
|
-
|
39
|
-
export declare const ComboboxField: ForwardRefComponent<ComboboxFieldProps>;
|
40
|
-
|
41
|
-
export declare const comboboxFieldClassNames: SlotClassNames<FieldSlots<FieldComponent>>;
|
11
|
+
/**
|
12
|
+
* @deprecated Only for use to make deprecated [Control]Field shim components.
|
13
|
+
* @internal
|
14
|
+
*/
|
15
|
+
export declare type DeprecatedFieldProps<ControlProps> = ControlProps & {
|
16
|
+
root?: FieldProps;
|
17
|
+
control?: ControlProps;
|
18
|
+
} & Pick<FieldProps, 'className' | 'hint' | 'label' | 'orientation' | 'style' | 'validationMessage' | 'validationMessageIcon' | 'validationState'>;
|
42
19
|
|
43
|
-
export declare
|
20
|
+
export declare const Field: ForwardRefComponent<FieldProps>;
|
44
21
|
|
45
22
|
/**
|
46
|
-
* The
|
47
|
-
*
|
48
|
-
* Note: the use of VoidFunctionComponent means that component is not *required* to have a children prop,
|
49
|
-
* but it is still allowed to have a children prop.
|
23
|
+
* The props added to the Field's child element.
|
50
24
|
*/
|
51
|
-
declare type
|
25
|
+
declare type FieldChildProps = Pick<React_2.HTMLAttributes<HTMLElement>, 'id' | 'aria-labelledby' | 'aria-describedby' | 'aria-invalid' | 'aria-required'>;
|
26
|
+
|
27
|
+
export declare const fieldClassNames: SlotClassNames<FieldSlots>;
|
52
28
|
|
53
29
|
/**
|
54
|
-
*
|
30
|
+
* Field Props
|
55
31
|
*/
|
56
|
-
export declare type
|
57
|
-
/**
|
58
|
-
* The underlying input component that this field is wrapping.
|
59
|
-
*/
|
60
|
-
component: T;
|
32
|
+
export declare type FieldProps = Omit<ComponentProps<FieldSlots>, 'children'> & {
|
61
33
|
/**
|
62
|
-
*
|
63
|
-
|
64
|
-
classNames: SlotClassNames<FieldSlots<T>>;
|
65
|
-
/**
|
66
|
-
* How the label be connected to the control.
|
67
|
-
* * htmlFor - Set the Label's htmlFor prop to the component's ID (and generate an ID if not provided).
|
68
|
-
* This is the preferred method for components that use the underlying <input> tag.
|
69
|
-
* * aria-labelledby - Set the component's aria-labelledby prop to the Label's ID. Use this for components
|
70
|
-
* that are not directly <input> elements (such as RadioGroup).
|
34
|
+
* The Field's child can be a single form control, or a render function that takes the props that should be spread on
|
35
|
+
* a form control.
|
71
36
|
*
|
72
|
-
*
|
37
|
+
* All form controls in this library can be used directly as children (such as `<Input>` or `<RadioGroup>`), as well
|
38
|
+
* as intrinsic form controls like `<input>` or `<textarea>`. Custom controls can also be used as long as they
|
39
|
+
* accept FieldChildProps and spread them on the appropriate element.
|
40
|
+
*
|
41
|
+
* For more complex scenarios, a render function can be used to pass the FieldChildProps to the appropriate control.
|
73
42
|
*/
|
74
|
-
|
75
|
-
};
|
76
|
-
|
77
|
-
/**
|
78
|
-
* Field Props
|
79
|
-
*/
|
80
|
-
export declare type FieldProps<T extends FieldComponent> = ComponentProps<Partial<FieldSlots<T>>, 'control'> & {
|
43
|
+
children?: React_2.ReactElement<FieldChildProps> | null | ((props: FieldChildProps) => React_2.ReactNode);
|
81
44
|
/**
|
82
45
|
* The orientation of the label relative to the field component.
|
83
46
|
* This only affects the label, and not the validationMessage or hint (which always appear below the field component).
|
@@ -86,125 +49,92 @@ export declare type FieldProps<T extends FieldComponent> = ComponentProps<Partia
|
|
86
49
|
*/
|
87
50
|
orientation?: 'vertical' | 'horizontal';
|
88
51
|
/**
|
89
|
-
* The `validationState` affects the
|
90
|
-
* field components, an `validationState="error"` causes the border to become red.
|
52
|
+
* The `validationState` affects the display of the `validationMessage` and `validationMessageIcon`.
|
91
53
|
*
|
92
|
-
*
|
54
|
+
* * error: (default) The validation message has a red error icon and red text, with `role="alert"` so it is
|
55
|
+
* announced by screen readers. Additionally, the control inside the field has `aria-invalid` set, which adds a
|
56
|
+
* red border to some field components (such as `Input`).
|
57
|
+
* * success: The validation message has a green checkmark icon and gray text.
|
58
|
+
* * warning: The validation message has a yellow exclamation icon and gray text.
|
59
|
+
* * none: The validation message has no icon and gray text.
|
60
|
+
*
|
61
|
+
* @default error when validationMessage is set; none otherwise.
|
93
62
|
*/
|
94
|
-
validationState?: 'error' | 'warning' | 'success';
|
95
|
-
};
|
96
|
-
|
97
|
-
/**
|
98
|
-
* FieldProps plus extra optional props that are supported by useField_unstable, but not required to be part of the
|
99
|
-
* API of every Field component.
|
100
|
-
*
|
101
|
-
* This allows Field to forward the required and size props to the label if the underlying component supports them,
|
102
|
-
* but doesn't add them to the public API of fields that don't support them.
|
103
|
-
*/
|
104
|
-
declare type FieldPropsWithOptionalComponentProps<T extends FieldComponent> = FieldProps<T> & {
|
63
|
+
validationState?: 'error' | 'warning' | 'success' | 'none';
|
105
64
|
/**
|
106
|
-
*
|
65
|
+
* Marks the Field as required. If `true`, an asterisk will be appended to the label, and `aria-required` will be set
|
66
|
+
* on the Field's child.
|
107
67
|
*/
|
108
68
|
required?: boolean;
|
109
69
|
/**
|
110
|
-
*
|
70
|
+
* The size of the Field's label.
|
111
71
|
*
|
112
|
-
*
|
72
|
+
* @default medium
|
113
73
|
*/
|
114
|
-
size?: 'small' | 'medium' | 'large'
|
74
|
+
size?: 'small' | 'medium' | 'large';
|
115
75
|
};
|
116
76
|
|
117
77
|
/**
|
118
|
-
* Slots
|
78
|
+
* Slots of the Field component
|
119
79
|
*/
|
120
|
-
export declare type FieldSlots
|
80
|
+
export declare type FieldSlots = {
|
121
81
|
root: NonNullable<Slot<'div'>>;
|
122
|
-
/**
|
123
|
-
* The underlying component wrapped by this field.
|
124
|
-
*/
|
125
|
-
control: SlotComponent<T>;
|
126
82
|
/**
|
127
83
|
* The label associated with the field.
|
128
84
|
*/
|
129
85
|
label?: Slot<typeof Label>;
|
130
86
|
/**
|
131
|
-
* A message about the validation state.
|
87
|
+
* A message about the validation state. By default, this is an error message, but it can be a success, warning,
|
88
|
+
* or custom message by setting `validationState`.
|
132
89
|
*/
|
133
|
-
validationMessage?: Slot<'
|
90
|
+
validationMessage?: Slot<'div'>;
|
134
91
|
/**
|
135
|
-
* The icon associated with the `validationMessage`.
|
136
|
-
* icon corresponding to that state.
|
92
|
+
* The icon associated with the `validationMessage`. This will only be displayed if `validationMessage` is set.
|
137
93
|
*
|
138
|
-
*
|
94
|
+
* The default depends on `validationState`:
|
95
|
+
* * error: `<ErrorCircle12Filled />`
|
96
|
+
* * warning: `<Warning12Filled />`
|
97
|
+
* * success: `<CheckmarkCircle12Filled />`
|
98
|
+
* * none: `null`
|
139
99
|
*/
|
140
100
|
validationMessageIcon?: Slot<'span'>;
|
141
101
|
/**
|
142
102
|
* Additional hint text below the field.
|
143
103
|
*/
|
144
|
-
hint?: Slot<'
|
104
|
+
hint?: Slot<'div'>;
|
145
105
|
};
|
146
106
|
|
147
107
|
/**
|
148
108
|
* State used in rendering Field
|
149
109
|
*/
|
150
|
-
export declare type FieldState
|
151
|
-
classNames: SlotClassNames<FieldSlots<T>>;
|
152
|
-
};
|
153
|
-
|
154
|
-
export declare const getFieldClassNames: (name: string) => SlotClassNames<FieldSlots<FieldComponent>>;
|
155
|
-
|
156
|
-
export declare const InputField: ForwardRefComponent<InputFieldProps>;
|
110
|
+
export declare type FieldState = ComponentState<Required<FieldSlots>> & Required<Pick<FieldProps, 'orientation' | 'validationState'>>;
|
157
111
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
export declare const
|
163
|
-
|
164
|
-
|
112
|
+
/**
|
113
|
+
* @deprecated Only for use to make deprecated [Control]Field shim components.
|
114
|
+
* @internal
|
115
|
+
*/
|
116
|
+
export declare const getDeprecatedFieldClassNames: (controlRootClassName: string) => {
|
117
|
+
control: string;
|
118
|
+
root: string;
|
119
|
+
label: string;
|
120
|
+
validationMessage: string;
|
121
|
+
validationMessageIcon: string;
|
122
|
+
hint: string;
|
123
|
+
};
|
165
124
|
|
166
|
-
|
125
|
+
/**
|
126
|
+
* @deprecated Only for use to make deprecated [Control]Field shim components.
|
127
|
+
* @internal
|
128
|
+
*/
|
129
|
+
export declare function makeDeprecatedField<ControlProps>(Control: React_2.ComponentType<ControlProps>, options?: {
|
130
|
+
mapProps?: (props: DeprecatedFieldProps<ControlProps>) => DeprecatedFieldProps<ControlProps>;
|
131
|
+
displayName?: string;
|
132
|
+
}): ForwardRefComponent<DeprecatedFieldProps<ControlProps>>;
|
167
133
|
|
168
134
|
/**
|
169
135
|
* Render the final JSX of Field
|
170
136
|
*/
|
171
|
-
export declare const renderField_unstable:
|
172
|
-
|
173
|
-
export declare const SelectField: ForwardRefComponent<SelectFieldProps>;
|
174
|
-
|
175
|
-
export declare const selectFieldClassNames: SlotClassNames<FieldSlots<FieldComponent>>;
|
176
|
-
|
177
|
-
export declare type SelectFieldProps = FieldProps<typeof Select>;
|
178
|
-
|
179
|
-
export declare const SliderField: ForwardRefComponent<SliderFieldProps>;
|
180
|
-
|
181
|
-
export declare const sliderFieldClassNames: SlotClassNames<FieldSlots<FieldComponent>>;
|
182
|
-
|
183
|
-
export declare type SliderFieldProps = FieldProps<typeof Slider>;
|
184
|
-
|
185
|
-
declare type SlotComponent<Type extends React_2.ComponentType | React_2.VoidFunctionComponent> = WithSlotShorthandValue<Type extends React_2.ComponentType<infer Props> ? WithSlotRenderFunction<Props extends {
|
186
|
-
children?: unknown;
|
187
|
-
} ? Props : Props & {
|
188
|
-
children?: never;
|
189
|
-
}> : never>;
|
190
|
-
|
191
|
-
export declare const SpinButtonField: ForwardRefComponent<SpinButtonFieldProps>;
|
192
|
-
|
193
|
-
export declare const spinButtonFieldClassNames: SlotClassNames<FieldSlots<FieldComponent>>;
|
194
|
-
|
195
|
-
export declare type SpinButtonFieldProps = FieldProps<typeof SpinButton>;
|
196
|
-
|
197
|
-
export declare const SwitchField: ForwardRefComponent<SwitchFieldProps>;
|
198
|
-
|
199
|
-
export declare const switchFieldClassNames: SlotClassNames<FieldSlots<FieldComponent>>;
|
200
|
-
|
201
|
-
export declare type SwitchFieldProps = FieldProps<typeof Switch>;
|
202
|
-
|
203
|
-
export declare const TextareaField: ForwardRefComponent<TextareaFieldProps>;
|
204
|
-
|
205
|
-
export declare const textareaFieldClassNames: SlotClassNames<FieldSlots<FieldComponent>>;
|
206
|
-
|
207
|
-
export declare type TextareaFieldProps = FieldProps<typeof Textarea>;
|
137
|
+
export declare const renderField_unstable: (state: FieldState) => JSX.Element;
|
208
138
|
|
209
139
|
/**
|
210
140
|
* Create the state required to render Field.
|
@@ -213,24 +143,13 @@ export declare type TextareaFieldProps = FieldProps<typeof Textarea>;
|
|
213
143
|
* before being passed to renderField_unstable.
|
214
144
|
*
|
215
145
|
* @param props - Props passed to this field
|
216
|
-
* @param ref - Ref to the
|
217
|
-
* @param params - Configuration parameters for this Field
|
146
|
+
* @param ref - Ref to the root
|
218
147
|
*/
|
219
|
-
export declare const useField_unstable:
|
148
|
+
export declare const useField_unstable: (props: FieldProps, ref: React_2.Ref<HTMLDivElement>) => FieldState;
|
220
149
|
|
221
150
|
/**
|
222
151
|
* Apply styling to the Field slots based on the state
|
223
152
|
*/
|
224
|
-
export declare const useFieldStyles_unstable:
|
225
|
-
|
226
|
-
declare type WithSlotRenderFunction<Props extends {
|
227
|
-
children?: unknown;
|
228
|
-
}> = Props & {
|
229
|
-
children?: Props['children'] | SlotRenderFunction<Props>;
|
230
|
-
};
|
231
|
-
|
232
|
-
declare type WithSlotShorthandValue<Props extends {
|
233
|
-
children?: unknown;
|
234
|
-
}> = Props | Extract<SlotShorthandValue, Props['children']>;
|
153
|
+
export declare const useFieldStyles_unstable: (state: FieldState) => void;
|
235
154
|
|
236
155
|
export { }
|
package/lib/Field.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Field.js","sourceRoot":"../src/","sources":["Field.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './components/Field/index';\n"]}
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"../src/","sources":["packages/react-components/react-field/src/Field.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './components/Field/index';\n"]}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { renderField_unstable } from './renderField';
|
3
|
+
import { useField_unstable } from './useField';
|
4
|
+
import { useFieldStyles_unstable } from './useFieldStyles';
|
5
|
+
export const Field = /*#__PURE__*/React.forwardRef((props, ref) => {
|
6
|
+
const state = useField_unstable(props, ref);
|
7
|
+
useFieldStyles_unstable(state);
|
8
|
+
return renderField_unstable(state);
|
9
|
+
});
|
10
|
+
Field.displayName = 'Field';
|
11
|
+
//# sourceMappingURL=Field.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,SAASC,oBAAoB,QAAQ,eAAe;AACpD,SAASC,iBAAiB,QAAQ,YAAY;AAC9C,SAASC,uBAAuB,QAAQ,kBAAkB;AAE1D,OAAO,MAAMC,KAAK,gBAAoCJ,KAAK,CAACK,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAI;EACpF,MAAMC,KAAK,GAAGN,iBAAiB,CAACI,KAAK,EAAEC,GAAG,CAAC;EAC3CJ,uBAAuB,CAACK,KAAK,CAAC;EAC9B,OAAOP,oBAAoB,CAACO,KAAK,CAAC;AACpC,CAAC,CAAC;AAEFJ,KAAK,CAACK,WAAW,GAAG,OAAO","names":["React","renderField_unstable","useField_unstable","useFieldStyles_unstable","Field","forwardRef","props","ref","state","displayName"],"sourceRoot":"../src/","sources":["packages/react-components/react-field/src/components/Field/Field.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\nimport type { FieldProps } from './Field.types';\nimport { renderField_unstable } from './renderField';\nimport { useField_unstable } from './useField';\nimport { useFieldStyles_unstable } from './useFieldStyles';\n\nexport const Field: ForwardRefComponent<FieldProps> = React.forwardRef((props, ref) => {\n const state = useField_unstable(props, ref);\n useFieldStyles_unstable(state);\n return renderField_unstable(state);\n});\n\nField.displayName = 'Field';\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Field.types.js","sourceRoot":"../src/","sources":["components/Field/Field.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport { Label } from '@fluentui/react-label';\nimport type { ComponentProps, ComponentState, Slot
|
1
|
+
{"version":3,"file":"Field.types.js","sourceRoot":"../src/","sources":["packages/react-components/react-field/src/components/Field/Field.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport { Label } from '@fluentui/react-label';\nimport type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\n\n/**\n * The props added to the Field's child element.\n */\nexport type FieldChildProps = Pick<\n React.HTMLAttributes<HTMLElement>,\n 'id' | 'aria-labelledby' | 'aria-describedby' | 'aria-invalid' | 'aria-required'\n>;\n\n/**\n * Slots of the Field component\n */\nexport type FieldSlots = {\n root: NonNullable<Slot<'div'>>;\n\n /**\n * The label associated with the field.\n */\n label?: Slot<typeof Label>;\n\n /**\n * A message about the validation state. By default, this is an error message, but it can be a success, warning,\n * or custom message by setting `validationState`.\n */\n validationMessage?: Slot<'div'>;\n\n /**\n * The icon associated with the `validationMessage`. This will only be displayed if `validationMessage` is set.\n *\n * The default depends on `validationState`:\n * * error: `<ErrorCircle12Filled />`\n * * warning: `<Warning12Filled />`\n * * success: `<CheckmarkCircle12Filled />`\n * * none: `null`\n */\n validationMessageIcon?: Slot<'span'>;\n\n /**\n * Additional hint text below the field.\n */\n hint?: Slot<'div'>;\n};\n\n/**\n * Field Props\n */\nexport type FieldProps = Omit<ComponentProps<FieldSlots>, 'children'> & {\n /**\n * The Field's child can be a single form control, or a render function that takes the props that should be spread on\n * a form control.\n *\n * All form controls in this library can be used directly as children (such as `<Input>` or `<RadioGroup>`), as well\n * as intrinsic form controls like `<input>` or `<textarea>`. Custom controls can also be used as long as they\n * accept FieldChildProps and spread them on the appropriate element.\n *\n * For more complex scenarios, a render function can be used to pass the FieldChildProps to the appropriate control.\n */\n children?: React.ReactElement<FieldChildProps> | null | ((props: FieldChildProps) => React.ReactNode);\n\n /**\n * The orientation of the label relative to the field component.\n * This only affects the label, and not the validationMessage or hint (which always appear below the field component).\n *\n * @default vertical\n */\n orientation?: 'vertical' | 'horizontal';\n\n /**\n * The `validationState` affects the display of the `validationMessage` and `validationMessageIcon`.\n *\n * * error: (default) The validation message has a red error icon and red text, with `role=\"alert\"` so it is\n * announced by screen readers. Additionally, the control inside the field has `aria-invalid` set, which adds a\n * red border to some field components (such as `Input`).\n * * success: The validation message has a green checkmark icon and gray text.\n * * warning: The validation message has a yellow exclamation icon and gray text.\n * * none: The validation message has no icon and gray text.\n *\n * @default error when validationMessage is set; none otherwise.\n */\n validationState?: 'error' | 'warning' | 'success' | 'none';\n\n /**\n * Marks the Field as required. If `true`, an asterisk will be appended to the label, and `aria-required` will be set\n * on the Field's child.\n */\n required?: boolean;\n\n /**\n * The size of the Field's label.\n *\n * @default medium\n */\n size?: 'small' | 'medium' | 'large';\n};\n\n/**\n * State used in rendering Field\n */\nexport type FieldState = ComponentState<Required<FieldSlots>> &\n Required<Pick<FieldProps, 'orientation' | 'validationState'>>;\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../src/","sources":["components/Field/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './Field.types';\nexport * from './renderField';\nexport * from './useField';\nexport * from './useFieldStyles';\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../src/","sources":["packages/react-components/react-field/src/components/Field/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './Field.types';\nexport * from './Field';\nexport * from './renderField';\nexport * from './useField';\nexport * from './useFieldStyles';\n"]}
|
@@ -3,18 +3,21 @@ import { getSlots } from '@fluentui/react-utilities';
|
|
3
3
|
/**
|
4
4
|
* Render the final JSX of Field
|
5
5
|
*/
|
6
|
-
|
7
6
|
export const renderField_unstable = state => {
|
8
7
|
const {
|
9
8
|
slots,
|
10
9
|
slotProps
|
11
10
|
} = getSlots(state);
|
12
|
-
return /*#__PURE__*/React.createElement(slots.root, {
|
13
|
-
|
14
|
-
}
|
15
|
-
|
16
|
-
}, slots.
|
17
|
-
|
11
|
+
return /*#__PURE__*/React.createElement(slots.root, {
|
12
|
+
...slotProps.root
|
13
|
+
}, slots.label && /*#__PURE__*/React.createElement(slots.label, {
|
14
|
+
...slotProps.label
|
15
|
+
}), slotProps.root.children, slots.validationMessage && /*#__PURE__*/React.createElement(slots.validationMessage, {
|
16
|
+
...slotProps.validationMessage
|
17
|
+
}, slots.validationMessageIcon && /*#__PURE__*/React.createElement(slots.validationMessageIcon, {
|
18
|
+
...slotProps.validationMessageIcon
|
19
|
+
}), slotProps.validationMessage.children), slots.hint && /*#__PURE__*/React.createElement(slots.hint, {
|
20
|
+
...slotProps.hint
|
18
21
|
}));
|
19
22
|
};
|
20
23
|
//# sourceMappingURL=renderField.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,QAAQ,QAAQ,2BAA2B;AAGpD;;;AAGA,OAAO,MAAMC,oBAAoB,GAAIC,KAAiB,IAAI;EACxD,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAE,GAAGJ,QAAQ,CAAaE,KAAK,CAAC;EAExD,oBACEH,oBAACI,KAAK,CAACE,IAAI;IAAA,GAAKD,SAAS,CAACC;EAAI,GAC3BF,KAAK,CAACG,KAAK,iBAAIP,oBAACI,KAAK,CAACG,KAAK;IAAA,GAAKF,SAAS,CAACE;EAAK,EAAI,EACnDF,SAAS,CAACC,IAAI,CAACE,QAAQ,EACvBJ,KAAK,CAACK,iBAAiB,iBACtBT,oBAACI,KAAK,CAACK,iBAAiB;IAAA,GAAKJ,SAAS,CAACI;EAAiB,GACrDL,KAAK,CAACM,qBAAqB,iBAAIV,oBAACI,KAAK,CAACM,qBAAqB;IAAA,GAAKL,SAAS,CAACK;EAAqB,EAAI,EACnGL,SAAS,CAACI,iBAAiB,CAACD,QAAQ,CAExC,EACAJ,KAAK,CAACO,IAAI,iBAAIX,oBAACI,KAAK,CAACO,IAAI;IAAA,GAAKN,SAAS,CAACM;EAAI,EAAI,CACtC;AAEjB,CAAC","names":["React","getSlots","renderField_unstable","state","slots","slotProps","root","label","children","validationMessage","validationMessageIcon","hint"],"sourceRoot":"../src/","sources":["packages/react-components/react-field/src/components/Field/renderField.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { FieldSlots, FieldState } from './Field.types';\n\n/**\n * Render the final JSX of Field\n */\nexport const renderField_unstable = (state: FieldState) => {\n const { slots, slotProps } = getSlots<FieldSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n {slots.label && <slots.label {...slotProps.label} />}\n {slotProps.root.children}\n {slots.validationMessage && (\n <slots.validationMessage {...slotProps.validationMessage}>\n {slots.validationMessageIcon && <slots.validationMessageIcon {...slotProps.validationMessageIcon} />}\n {slotProps.validationMessage.children}\n </slots.validationMessage>\n )}\n {slots.hint && <slots.hint {...slotProps.hint} />}\n </slots.root>\n );\n};\n"]}
|
@@ -5,46 +5,8 @@ import { getNativeElementProps, resolveShorthand, useId } from '@fluentui/react-
|
|
5
5
|
const validationMessageIcons = {
|
6
6
|
error: /*#__PURE__*/React.createElement(ErrorCircle12Filled, null),
|
7
7
|
warning: /*#__PURE__*/React.createElement(Warning12Filled, null),
|
8
|
-
success: /*#__PURE__*/React.createElement(CheckmarkCircle12Filled, null)
|
9
|
-
|
10
|
-
/**
|
11
|
-
* Merge two possibly-undefined IDs for aria-describedby. If both IDs are defined, combines
|
12
|
-
* them into a string separated by a space. Otherwise, returns just the defined ID (if any).
|
13
|
-
*/
|
14
|
-
|
15
|
-
const mergeAriaDescribedBy = (a, b) => a && b ? `${a} ${b}` : a || b;
|
16
|
-
/**
|
17
|
-
* Partition the props used by the Field itself, from the props that are passed to the underlying field component.
|
18
|
-
*/
|
19
|
-
|
20
|
-
|
21
|
-
export const getPartitionedFieldProps = props => {
|
22
|
-
const {
|
23
|
-
className,
|
24
|
-
control,
|
25
|
-
hint,
|
26
|
-
label,
|
27
|
-
orientation,
|
28
|
-
root,
|
29
|
-
style,
|
30
|
-
validationMessage,
|
31
|
-
validationMessageIcon,
|
32
|
-
validationState,
|
33
|
-
...restOfProps
|
34
|
-
} = props;
|
35
|
-
const fieldProps = {
|
36
|
-
className,
|
37
|
-
control,
|
38
|
-
hint,
|
39
|
-
label,
|
40
|
-
orientation,
|
41
|
-
root,
|
42
|
-
style,
|
43
|
-
validationMessage,
|
44
|
-
validationMessageIcon,
|
45
|
-
validationState
|
46
|
-
};
|
47
|
-
return [fieldProps, restOfProps];
|
8
|
+
success: /*#__PURE__*/React.createElement(CheckmarkCircle12Filled, null),
|
9
|
+
none: undefined
|
48
10
|
};
|
49
11
|
/**
|
50
12
|
* Create the state required to render Field.
|
@@ -53,87 +15,92 @@ export const getPartitionedFieldProps = props => {
|
|
53
15
|
* before being passed to renderField_unstable.
|
54
16
|
*
|
55
17
|
* @param props - Props passed to this field
|
56
|
-
* @param ref - Ref to the
|
57
|
-
* @param params - Configuration parameters for this Field
|
18
|
+
* @param ref - Ref to the root
|
58
19
|
*/
|
59
|
-
|
60
|
-
|
61
|
-
const [fieldProps, controlProps] = getPartitionedFieldProps(props);
|
62
|
-
const baseId = useId('field-');
|
20
|
+
export const useField_unstable = (props, ref) => {
|
21
|
+
var _a, _b, _c, _d;
|
63
22
|
const {
|
23
|
+
children,
|
64
24
|
orientation = 'vertical',
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
25
|
+
required,
|
26
|
+
validationState = props.validationMessage ? 'error' : 'none',
|
27
|
+
size
|
28
|
+
} = props;
|
29
|
+
const baseId = useId('field-');
|
30
|
+
const root = getNativeElementProps('div', {
|
31
|
+
...props,
|
32
|
+
ref
|
33
|
+
}, /*excludedPropNames:*/['children']);
|
34
|
+
const label = resolveShorthand(props.label, {
|
72
35
|
defaultProps: {
|
73
36
|
id: baseId + '__label',
|
74
|
-
required
|
75
|
-
size
|
76
|
-
|
37
|
+
required,
|
38
|
+
size
|
39
|
+
// htmlFor is handled below
|
77
40
|
}
|
78
41
|
});
|
79
|
-
|
42
|
+
|
43
|
+
const validationMessage = resolveShorthand(props.validationMessage, {
|
80
44
|
defaultProps: {
|
81
|
-
id: baseId + '__validationMessage'
|
45
|
+
id: baseId + '__validationMessage',
|
46
|
+
role: validationState === 'error' ? 'alert' : undefined
|
82
47
|
}
|
83
48
|
});
|
84
|
-
const hint = resolveShorthand(
|
49
|
+
const hint = resolveShorthand(props.hint, {
|
85
50
|
defaultProps: {
|
86
51
|
id: baseId + '__hint'
|
87
52
|
}
|
88
53
|
});
|
89
|
-
const
|
90
|
-
|
54
|
+
const defaultIcon = validationMessageIcons[validationState];
|
55
|
+
const validationMessageIcon = resolveShorthand(props.validationMessageIcon, {
|
56
|
+
required: !!defaultIcon,
|
91
57
|
defaultProps: {
|
92
|
-
children:
|
58
|
+
children: defaultIcon
|
93
59
|
}
|
94
60
|
});
|
95
|
-
const {
|
96
|
-
|
97
|
-
}
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
id: label && labelConnection === 'htmlFor' ? baseId + '__control' : undefined,
|
105
|
-
// Add aria-labelledby only if not using the label's htmlFor
|
106
|
-
'aria-labelledby': labelConnection !== 'htmlFor' ? label === null || label === void 0 ? void 0 : label.id : undefined,
|
107
|
-
'aria-describedby': hasError ? hint === null || hint === void 0 ? void 0 : hint.id : mergeAriaDescribedBy(validationMessage === null || validationMessage === void 0 ? void 0 : validationMessage.id, hint === null || hint === void 0 ? void 0 : hint.id),
|
108
|
-
'aria-errormessage': hasError ? validationMessage === null || validationMessage === void 0 ? void 0 : validationMessage.id : undefined,
|
109
|
-
'aria-invalid': hasError ? true : undefined,
|
110
|
-
...controlProps
|
61
|
+
const controlProps = /*#__PURE__*/React.isValidElement(children) ? {
|
62
|
+
...children.props
|
63
|
+
} : {};
|
64
|
+
if (label) {
|
65
|
+
(_a = controlProps['aria-labelledby']) !== null && _a !== void 0 ? _a : controlProps['aria-labelledby'] = label.id;
|
66
|
+
if (!label.htmlFor) {
|
67
|
+
// Assign the child a generated ID if doesn't already have an ID
|
68
|
+
(_b = controlProps.id) !== null && _b !== void 0 ? _b : controlProps.id = baseId + '__control';
|
69
|
+
label.htmlFor = controlProps.id;
|
111
70
|
}
|
112
|
-
});
|
113
|
-
|
114
|
-
if (labelConnection === 'htmlFor' && label && !label.htmlFor) {
|
115
|
-
label.htmlFor = control.id;
|
116
71
|
}
|
117
|
-
|
118
|
-
|
72
|
+
if (validationMessage || hint) {
|
73
|
+
// The control is described by the validation message, or hint, or both
|
74
|
+
// We also preserve and append any aria-describedby supplied by the user
|
75
|
+
// For reference: https://github.com/microsoft/fluentui/pull/25580#discussion_r1017259933
|
76
|
+
controlProps['aria-describedby'] = [validationMessage === null || validationMessage === void 0 ? void 0 : validationMessage.id, hint === null || hint === void 0 ? void 0 : hint.id, controlProps['aria-describedby']].filter(Boolean).join(' ');
|
77
|
+
}
|
78
|
+
if (validationState === 'error') {
|
79
|
+
(_c = controlProps['aria-invalid']) !== null && _c !== void 0 ? _c : controlProps['aria-invalid'] = true;
|
80
|
+
}
|
81
|
+
if (required) {
|
82
|
+
(_d = controlProps['aria-required']) !== null && _d !== void 0 ? _d : controlProps['aria-required'] = true;
|
83
|
+
}
|
84
|
+
if ( /*#__PURE__*/React.isValidElement(children)) {
|
85
|
+
root.children = /*#__PURE__*/React.cloneElement(children, controlProps);
|
86
|
+
} else if (typeof children === 'function') {
|
87
|
+
root.children = children(controlProps);
|
88
|
+
}
|
89
|
+
return {
|
119
90
|
orientation,
|
120
91
|
validationState,
|
121
|
-
classNames: params.classNames,
|
122
92
|
components: {
|
123
93
|
root: 'div',
|
124
|
-
control: params.component,
|
125
94
|
label: Label,
|
126
|
-
validationMessage: '
|
95
|
+
validationMessage: 'div',
|
127
96
|
validationMessageIcon: 'span',
|
128
|
-
hint: '
|
97
|
+
hint: 'div'
|
129
98
|
},
|
130
99
|
root,
|
131
|
-
control,
|
132
100
|
label,
|
133
101
|
validationMessageIcon,
|
134
102
|
validationMessage,
|
135
103
|
hint
|
136
104
|
};
|
137
|
-
return state;
|
138
105
|
};
|
139
106
|
//# sourceMappingURL=useField.js.map
|