@rjsf/react-bootstrap 6.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +111 -0
  3. package/dist/index.js +940 -0
  4. package/dist/index.js.map +7 -0
  5. package/dist/react-bootstrap.esm.js +948 -0
  6. package/dist/react-bootstrap.esm.js.map +7 -0
  7. package/dist/react-bootstrap.umd.js +804 -0
  8. package/lib/AddButton/AddButton.d.ts +2 -0
  9. package/lib/AddButton/AddButton.js +9 -0
  10. package/lib/AddButton/AddButton.js.map +1 -0
  11. package/lib/AddButton/index.d.ts +2 -0
  12. package/lib/AddButton/index.js +3 -0
  13. package/lib/AddButton/index.js.map +1 -0
  14. package/lib/ArrayFieldItemTemplate/ArrayFieldItemTemplate.d.ts +2 -0
  15. package/lib/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js +15 -0
  16. package/lib/ArrayFieldItemTemplate/ArrayFieldItemTemplate.js.map +1 -0
  17. package/lib/ArrayFieldItemTemplate/index.d.ts +2 -0
  18. package/lib/ArrayFieldItemTemplate/index.js +3 -0
  19. package/lib/ArrayFieldItemTemplate/index.js.map +1 -0
  20. package/lib/ArrayFieldTemplate/ArrayFieldTemplate.d.ts +2 -0
  21. package/lib/ArrayFieldTemplate/ArrayFieldTemplate.js +17 -0
  22. package/lib/ArrayFieldTemplate/ArrayFieldTemplate.js.map +1 -0
  23. package/lib/ArrayFieldTemplate/index.d.ts +2 -0
  24. package/lib/ArrayFieldTemplate/index.js +3 -0
  25. package/lib/ArrayFieldTemplate/index.js.map +1 -0
  26. package/lib/BaseInputTemplate/BaseInputTemplate.d.ts +2 -0
  27. package/lib/BaseInputTemplate/BaseInputTemplate.js +19 -0
  28. package/lib/BaseInputTemplate/BaseInputTemplate.js.map +1 -0
  29. package/lib/BaseInputTemplate/index.d.ts +2 -0
  30. package/lib/BaseInputTemplate/index.js +3 -0
  31. package/lib/BaseInputTemplate/index.js.map +1 -0
  32. package/lib/CheckboxWidget/CheckboxWidget.d.ts +2 -0
  33. package/lib/CheckboxWidget/CheckboxWidget.js +17 -0
  34. package/lib/CheckboxWidget/CheckboxWidget.js.map +1 -0
  35. package/lib/CheckboxWidget/index.d.ts +2 -0
  36. package/lib/CheckboxWidget/index.js +3 -0
  37. package/lib/CheckboxWidget/index.js.map +1 -0
  38. package/lib/CheckboxesWidget/CheckboxesWidget.d.ts +2 -0
  39. package/lib/CheckboxesWidget/CheckboxesWidget.js +24 -0
  40. package/lib/CheckboxesWidget/CheckboxesWidget.js.map +1 -0
  41. package/lib/CheckboxesWidget/index.d.ts +2 -0
  42. package/lib/CheckboxesWidget/index.js +3 -0
  43. package/lib/CheckboxesWidget/index.js.map +1 -0
  44. package/lib/DescriptionField/DescriptionField.d.ts +2 -0
  45. package/lib/DescriptionField/DescriptionField.js +8 -0
  46. package/lib/DescriptionField/DescriptionField.js.map +1 -0
  47. package/lib/DescriptionField/index.d.ts +2 -0
  48. package/lib/DescriptionField/index.js +3 -0
  49. package/lib/DescriptionField/index.js.map +1 -0
  50. package/lib/ErrorList/ErrorList.d.ts +2 -0
  51. package/lib/ErrorList/ErrorList.js +11 -0
  52. package/lib/ErrorList/ErrorList.js.map +1 -0
  53. package/lib/ErrorList/index.d.ts +2 -0
  54. package/lib/ErrorList/index.js +3 -0
  55. package/lib/ErrorList/index.js.map +1 -0
  56. package/lib/FieldErrorTemplate/FieldErrorTemplate.d.ts +6 -0
  57. package/lib/FieldErrorTemplate/FieldErrorTemplate.js +18 -0
  58. package/lib/FieldErrorTemplate/FieldErrorTemplate.js.map +1 -0
  59. package/lib/FieldErrorTemplate/index.d.ts +2 -0
  60. package/lib/FieldErrorTemplate/index.js +3 -0
  61. package/lib/FieldErrorTemplate/index.js.map +1 -0
  62. package/lib/FieldHelpTemplate/FieldHelpTemplate.d.ts +6 -0
  63. package/lib/FieldHelpTemplate/FieldHelpTemplate.js +16 -0
  64. package/lib/FieldHelpTemplate/FieldHelpTemplate.js.map +1 -0
  65. package/lib/FieldHelpTemplate/index.d.ts +2 -0
  66. package/lib/FieldHelpTemplate/index.js +3 -0
  67. package/lib/FieldHelpTemplate/index.js.map +1 -0
  68. package/lib/FieldTemplate/FieldTemplate.d.ts +2 -0
  69. package/lib/FieldTemplate/FieldTemplate.js +12 -0
  70. package/lib/FieldTemplate/FieldTemplate.js.map +1 -0
  71. package/lib/FieldTemplate/index.d.ts +2 -0
  72. package/lib/FieldTemplate/index.js +3 -0
  73. package/lib/FieldTemplate/index.js.map +1 -0
  74. package/lib/Form/Form.d.ts +6 -0
  75. package/lib/Form/Form.js +7 -0
  76. package/lib/Form/Form.js.map +1 -0
  77. package/lib/Form/index.d.ts +2 -0
  78. package/lib/Form/index.js +3 -0
  79. package/lib/Form/index.js.map +1 -0
  80. package/lib/IconButton/IconButton.d.ts +7 -0
  81. package/lib/IconButton/IconButton.js +28 -0
  82. package/lib/IconButton/IconButton.js.map +1 -0
  83. package/lib/IconButton/index.d.ts +2 -0
  84. package/lib/IconButton/index.js +3 -0
  85. package/lib/IconButton/index.js.map +1 -0
  86. package/lib/ObjectFieldTemplate/ObjectFieldTemplate.d.ts +2 -0
  87. package/lib/ObjectFieldTemplate/ObjectFieldTemplate.js +14 -0
  88. package/lib/ObjectFieldTemplate/ObjectFieldTemplate.js.map +1 -0
  89. package/lib/ObjectFieldTemplate/index.d.ts +2 -0
  90. package/lib/ObjectFieldTemplate/index.js +3 -0
  91. package/lib/ObjectFieldTemplate/index.js.map +1 -0
  92. package/lib/RadioWidget/RadioWidget.d.ts +2 -0
  93. package/lib/RadioWidget/RadioWidget.js +18 -0
  94. package/lib/RadioWidget/RadioWidget.js.map +1 -0
  95. package/lib/RadioWidget/index.d.ts +2 -0
  96. package/lib/RadioWidget/index.js +3 -0
  97. package/lib/RadioWidget/index.js.map +1 -0
  98. package/lib/RangeWidget/RangeWidget.d.ts +2 -0
  99. package/lib/RangeWidget/RangeWidget.js +21 -0
  100. package/lib/RangeWidget/RangeWidget.js.map +1 -0
  101. package/lib/RangeWidget/index.d.ts +2 -0
  102. package/lib/RangeWidget/index.js +3 -0
  103. package/lib/RangeWidget/index.js.map +1 -0
  104. package/lib/SelectWidget/SelectWidget.d.ts +2 -0
  105. package/lib/SelectWidget/SelectWidget.js +36 -0
  106. package/lib/SelectWidget/SelectWidget.js.map +1 -0
  107. package/lib/SelectWidget/index.d.ts +2 -0
  108. package/lib/SelectWidget/index.js +3 -0
  109. package/lib/SelectWidget/index.js.map +1 -0
  110. package/lib/SubmitButton/SubmitButton.d.ts +2 -0
  111. package/lib/SubmitButton/SubmitButton.js +11 -0
  112. package/lib/SubmitButton/SubmitButton.js.map +1 -0
  113. package/lib/SubmitButton/index.d.ts +2 -0
  114. package/lib/SubmitButton/index.js +3 -0
  115. package/lib/SubmitButton/index.js.map +1 -0
  116. package/lib/Templates/Templates.d.ts +4 -0
  117. package/lib/Templates/Templates.js +39 -0
  118. package/lib/Templates/Templates.js.map +1 -0
  119. package/lib/Templates/index.d.ts +2 -0
  120. package/lib/Templates/index.js +3 -0
  121. package/lib/Templates/index.js.map +1 -0
  122. package/lib/TextareaWidget/TextareaWidget.d.ts +6 -0
  123. package/lib/TextareaWidget/TextareaWidget.js +11 -0
  124. package/lib/TextareaWidget/TextareaWidget.js.map +1 -0
  125. package/lib/TextareaWidget/index.d.ts +2 -0
  126. package/lib/TextareaWidget/index.js +3 -0
  127. package/lib/TextareaWidget/index.js.map +1 -0
  128. package/lib/Theme/Theme.d.ts +5 -0
  129. package/lib/Theme/Theme.js +10 -0
  130. package/lib/Theme/Theme.js.map +1 -0
  131. package/lib/Theme/index.d.ts +2 -0
  132. package/lib/Theme/index.js +3 -0
  133. package/lib/Theme/index.js.map +1 -0
  134. package/lib/TitleField/TitleField.d.ts +2 -0
  135. package/lib/TitleField/TitleField.js +7 -0
  136. package/lib/TitleField/TitleField.js.map +1 -0
  137. package/lib/TitleField/index.d.ts +2 -0
  138. package/lib/TitleField/index.js +3 -0
  139. package/lib/TitleField/index.js.map +1 -0
  140. package/lib/Widgets/Widgets.d.ts +4 -0
  141. package/lib/Widgets/Widgets.js +18 -0
  142. package/lib/Widgets/Widgets.js.map +1 -0
  143. package/lib/Widgets/index.d.ts +2 -0
  144. package/lib/Widgets/index.js +3 -0
  145. package/lib/Widgets/index.js.map +1 -0
  146. package/lib/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.d.ts +2 -0
  147. package/lib/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js +19 -0
  148. package/lib/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.js.map +1 -0
  149. package/lib/WrapIfAdditionalTemplate/index.d.ts +2 -0
  150. package/lib/WrapIfAdditionalTemplate/index.js +3 -0
  151. package/lib/WrapIfAdditionalTemplate/index.js.map +1 -0
  152. package/lib/index.d.ts +6 -0
  153. package/lib/index.js +7 -0
  154. package/lib/index.js.map +1 -0
  155. package/lib/tsconfig.tsbuildinfo +1 -0
  156. package/package.json +98 -0
  157. package/src/AddButton/AddButton.tsx +21 -0
  158. package/src/AddButton/index.ts +2 -0
  159. package/src/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx +94 -0
  160. package/src/ArrayFieldItemTemplate/index.ts +2 -0
  161. package/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx +86 -0
  162. package/src/ArrayFieldTemplate/index.ts +2 -0
  163. package/src/BaseInputTemplate/BaseInputTemplate.tsx +77 -0
  164. package/src/BaseInputTemplate/index.ts +2 -0
  165. package/src/CheckboxWidget/CheckboxWidget.tsx +80 -0
  166. package/src/CheckboxWidget/index.ts +2 -0
  167. package/src/CheckboxesWidget/CheckboxesWidget.tsx +68 -0
  168. package/src/CheckboxesWidget/index.ts +2 -0
  169. package/src/DescriptionField/DescriptionField.tsx +19 -0
  170. package/src/DescriptionField/index.ts +2 -0
  171. package/src/ErrorList/ErrorList.tsx +27 -0
  172. package/src/ErrorList/index.ts +2 -0
  173. package/src/FieldErrorTemplate/FieldErrorTemplate.tsx +30 -0
  174. package/src/FieldErrorTemplate/index.ts +2 -0
  175. package/src/FieldHelpTemplate/FieldHelpTemplate.tsx +23 -0
  176. package/src/FieldHelpTemplate/index.ts +2 -0
  177. package/src/FieldTemplate/FieldTemplate.tsx +77 -0
  178. package/src/FieldTemplate/index.ts +2 -0
  179. package/src/Form/Form.tsx +15 -0
  180. package/src/Form/index.ts +2 -0
  181. package/src/IconButton/IconButton.tsx +62 -0
  182. package/src/IconButton/index.ts +2 -0
  183. package/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx +89 -0
  184. package/src/ObjectFieldTemplate/index.ts +2 -0
  185. package/src/RadioWidget/RadioWidget.tsx +65 -0
  186. package/src/RadioWidget/index.ts +2 -0
  187. package/src/RangeWidget/RangeWidget.tsx +31 -0
  188. package/src/RangeWidget/index.ts +2 -0
  189. package/src/SelectWidget/SelectWidget.tsx +91 -0
  190. package/src/SelectWidget/index.ts +2 -0
  191. package/src/SubmitButton/SubmitButton.tsx +18 -0
  192. package/src/SubmitButton/index.ts +2 -0
  193. package/src/Templates/Templates.ts +45 -0
  194. package/src/Templates/index.ts +2 -0
  195. package/src/TextareaWidget/TextareaWidget.tsx +56 -0
  196. package/src/TextareaWidget/index.ts +2 -0
  197. package/src/Theme/Theme.tsx +18 -0
  198. package/src/Theme/index.ts +2 -0
  199. package/src/TitleField/TitleField.tsx +15 -0
  200. package/src/TitleField/index.ts +2 -0
  201. package/src/Widgets/Widgets.ts +24 -0
  202. package/src/Widgets/index.ts +2 -0
  203. package/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx +79 -0
  204. package/src/WrapIfAdditionalTemplate/index.ts +2 -0
  205. package/src/index.ts +8 -0
  206. package/src/tsconfig.json +23 -0
@@ -0,0 +1,91 @@
1
+ import { ChangeEvent, FocusEvent } from 'react';
2
+ import FormSelect from 'react-bootstrap/FormSelect';
3
+ import {
4
+ ariaDescribedByIds,
5
+ FormContextType,
6
+ enumOptionsIndexForValue,
7
+ enumOptionsValueForIndex,
8
+ RJSFSchema,
9
+ StrictRJSFSchema,
10
+ WidgetProps,
11
+ } from '@rjsf/utils';
12
+
13
+ export default function SelectWidget<
14
+ T = any,
15
+ S extends StrictRJSFSchema = RJSFSchema,
16
+ F extends FormContextType = any
17
+ >({
18
+ schema,
19
+ id,
20
+ options,
21
+ required,
22
+ disabled,
23
+ readonly,
24
+ value,
25
+ multiple,
26
+ autofocus,
27
+ onChange,
28
+ onBlur,
29
+ onFocus,
30
+ placeholder,
31
+ rawErrors = [],
32
+ }: WidgetProps<T, S, F>) {
33
+ const { enumOptions, enumDisabled, emptyValue: optEmptyValue } = options;
34
+
35
+ const emptyValue = multiple ? [] : '';
36
+
37
+ function getValue(event: FocusEvent | ChangeEvent | any, multiple?: boolean) {
38
+ if (multiple) {
39
+ return [].slice
40
+ .call(event.target.options as any)
41
+ .filter((o: any) => o.selected)
42
+ .map((o: any) => o.value);
43
+ } else {
44
+ return event.target.value;
45
+ }
46
+ }
47
+ const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple);
48
+ const showPlaceholderOption = !multiple && schema.default === undefined;
49
+
50
+ return (
51
+ <FormSelect
52
+ id={id}
53
+ name={id}
54
+ value={typeof selectedIndexes === 'undefined' ? emptyValue : selectedIndexes}
55
+ required={required}
56
+ multiple={multiple}
57
+ disabled={disabled || readonly}
58
+ autoFocus={autofocus}
59
+ className={rawErrors.length > 0 ? 'is-invalid' : ''}
60
+ onBlur={
61
+ onBlur &&
62
+ ((event: FocusEvent) => {
63
+ const newValue = getValue(event, multiple);
64
+ onBlur(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyValue));
65
+ })
66
+ }
67
+ onFocus={
68
+ onFocus &&
69
+ ((event: FocusEvent) => {
70
+ const newValue = getValue(event, multiple);
71
+ onFocus(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyValue));
72
+ })
73
+ }
74
+ onChange={(event: ChangeEvent) => {
75
+ const newValue = getValue(event, multiple);
76
+ onChange(enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyValue));
77
+ }}
78
+ aria-describedby={ariaDescribedByIds<T>(id)}
79
+ >
80
+ {showPlaceholderOption && <option value=''>{placeholder}</option>}
81
+ {(enumOptions as any).map(({ value, label }: any, i: number) => {
82
+ const disabled: any = Array.isArray(enumDisabled) && (enumDisabled as any).indexOf(value) != -1;
83
+ return (
84
+ <option key={i} id={label} value={String(i)} disabled={disabled}>
85
+ {label}
86
+ </option>
87
+ );
88
+ })}
89
+ </FormSelect>
90
+ );
91
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './SelectWidget';
2
+ export * from './SelectWidget';
@@ -0,0 +1,18 @@
1
+ import Button from 'react-bootstrap/Button';
2
+ import { FormContextType, getSubmitButtonOptions, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils';
3
+
4
+ export default function SubmitButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(
5
+ props: SubmitButtonProps<T, S, F>
6
+ ) {
7
+ const { submitText, norender, props: submitButtonProps } = getSubmitButtonOptions<T, S, F>(props.uiSchema);
8
+ if (norender) {
9
+ return null;
10
+ }
11
+ return (
12
+ <div>
13
+ <Button variant='primary' type='submit' {...submitButtonProps}>
14
+ {submitText}
15
+ </Button>
16
+ </div>
17
+ );
18
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './SubmitButton';
2
+ export * from './SubmitButton';
@@ -0,0 +1,45 @@
1
+ import AddButton from '../AddButton';
2
+ import ArrayFieldItemTemplate from '../ArrayFieldItemTemplate';
3
+ import ArrayFieldTemplate from '../ArrayFieldTemplate';
4
+ import BaseInputTemplate from '../BaseInputTemplate/BaseInputTemplate';
5
+ import DescriptionField from '../DescriptionField';
6
+ import ErrorList from '../ErrorList';
7
+ import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from '../IconButton';
8
+ import FieldErrorTemplate from '../FieldErrorTemplate';
9
+ import FieldHelpTemplate from '../FieldHelpTemplate';
10
+ import FieldTemplate from '../FieldTemplate';
11
+ import ObjectFieldTemplate from '../ObjectFieldTemplate';
12
+ import SubmitButton from '../SubmitButton';
13
+ import TitleField from '../TitleField';
14
+ import WrapIfAdditionalTemplate from '../WrapIfAdditionalTemplate';
15
+ import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils';
16
+
17
+ export function generateTemplates<
18
+ T = any,
19
+ S extends StrictRJSFSchema = RJSFSchema,
20
+ F extends FormContextType = any
21
+ >(): Partial<TemplatesType<T, S, F>> {
22
+ return {
23
+ ArrayFieldItemTemplate,
24
+ ArrayFieldTemplate,
25
+ BaseInputTemplate,
26
+ ButtonTemplates: {
27
+ AddButton,
28
+ CopyButton,
29
+ MoveDownButton,
30
+ MoveUpButton,
31
+ RemoveButton,
32
+ SubmitButton,
33
+ },
34
+ DescriptionFieldTemplate: DescriptionField,
35
+ ErrorListTemplate: ErrorList,
36
+ FieldErrorTemplate,
37
+ FieldHelpTemplate,
38
+ FieldTemplate,
39
+ ObjectFieldTemplate,
40
+ TitleFieldTemplate: TitleField,
41
+ WrapIfAdditionalTemplate,
42
+ };
43
+ }
44
+
45
+ export default generateTemplates();
@@ -0,0 +1,2 @@
1
+ export { default } from './Templates';
2
+ export * from './Templates';
@@ -0,0 +1,56 @@
1
+ import { ChangeEvent, FocusEvent } from 'react';
2
+ import { ariaDescribedByIds, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils';
3
+ import FormControl from 'react-bootstrap/FormControl';
4
+ import InputGroup from 'react-bootstrap/InputGroup';
5
+
6
+ type CustomWidgetProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> = WidgetProps<
7
+ T,
8
+ S,
9
+ F
10
+ > & {
11
+ options: any;
12
+ };
13
+
14
+ export default function TextareaWidget<
15
+ T = any,
16
+ S extends StrictRJSFSchema = RJSFSchema,
17
+ F extends FormContextType = any
18
+ >({
19
+ id,
20
+ placeholder,
21
+ value,
22
+ required,
23
+ disabled,
24
+ autofocus,
25
+ readonly,
26
+ onBlur,
27
+ onFocus,
28
+ onChange,
29
+ options,
30
+ }: CustomWidgetProps<T, S, F>) {
31
+ const _onChange = ({ target: { value } }: ChangeEvent<HTMLTextAreaElement>) =>
32
+ onChange(value === '' ? options.emptyValue : value);
33
+ const _onBlur = ({ target }: FocusEvent<HTMLTextAreaElement>) => onBlur(id, target && target.value);
34
+ const _onFocus = ({ target }: FocusEvent<HTMLTextAreaElement>) => onFocus(id, target && target.value);
35
+
36
+ return (
37
+ <InputGroup>
38
+ <FormControl
39
+ id={id}
40
+ name={id}
41
+ as='textarea'
42
+ placeholder={placeholder}
43
+ disabled={disabled}
44
+ readOnly={readonly}
45
+ value={value}
46
+ required={required}
47
+ autoFocus={autofocus}
48
+ rows={options.rows || 5}
49
+ onChange={_onChange}
50
+ onBlur={_onBlur}
51
+ onFocus={_onFocus}
52
+ aria-describedby={ariaDescribedByIds<T>(id)}
53
+ />
54
+ </InputGroup>
55
+ );
56
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './TextareaWidget';
2
+ export * from './TextareaWidget';
@@ -0,0 +1,18 @@
1
+ import { ThemeProps } from '@rjsf/core';
2
+
3
+ import { generateTemplates } from '../Templates';
4
+ import { generateWidgets } from '../Widgets';
5
+ import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils';
6
+
7
+ export function generateTheme<
8
+ T = any,
9
+ S extends StrictRJSFSchema = RJSFSchema,
10
+ F extends FormContextType = any
11
+ >(): ThemeProps<T, S, F> {
12
+ return {
13
+ templates: generateTemplates<T, S, F>(),
14
+ widgets: generateWidgets<T, S, F>(),
15
+ };
16
+ }
17
+
18
+ export default generateTheme();
@@ -0,0 +1,2 @@
1
+ export { default } from './Theme';
2
+ export * from './Theme';
@@ -0,0 +1,15 @@
1
+ import { FormContextType, getUiOptions, RJSFSchema, StrictRJSFSchema, TitleFieldProps } from '@rjsf/utils';
2
+
3
+ export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({
4
+ id,
5
+ title,
6
+ uiSchema,
7
+ }: TitleFieldProps<T, S, F>) {
8
+ const uiOptions = getUiOptions<T, S, F>(uiSchema);
9
+ return (
10
+ <div id={id} className='my-1'>
11
+ <h5>{uiOptions.title || title}</h5>
12
+ <hr className='border-0 bg-secondary' style={{ height: '1px' }} />
13
+ </div>
14
+ );
15
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './TitleField';
2
+ export * from './TitleField';
@@ -0,0 +1,24 @@
1
+ import CheckboxWidget from '../CheckboxWidget/CheckboxWidget';
2
+ import CheckboxesWidget from '../CheckboxesWidget/CheckboxesWidget';
3
+ import RadioWidget from '../RadioWidget/RadioWidget';
4
+ import RangeWidget from '../RangeWidget/RangeWidget';
5
+ import SelectWidget from '../SelectWidget/SelectWidget';
6
+ import TextareaWidget from '../TextareaWidget/TextareaWidget';
7
+ import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils';
8
+
9
+ export function generateWidgets<
10
+ T = any,
11
+ S extends StrictRJSFSchema = RJSFSchema,
12
+ F extends FormContextType = any
13
+ >(): RegistryWidgetsType<T, S, F> {
14
+ return {
15
+ CheckboxWidget,
16
+ CheckboxesWidget,
17
+ RadioWidget,
18
+ RangeWidget,
19
+ SelectWidget,
20
+ TextareaWidget,
21
+ };
22
+ }
23
+
24
+ export default generateWidgets();
@@ -0,0 +1,2 @@
1
+ export { default } from './Widgets';
2
+ export * from './Widgets';
@@ -0,0 +1,79 @@
1
+ import { FocusEvent } from 'react';
2
+ import {
3
+ ADDITIONAL_PROPERTY_FLAG,
4
+ FormContextType,
5
+ RJSFSchema,
6
+ StrictRJSFSchema,
7
+ TranslatableString,
8
+ WrapIfAdditionalTemplateProps,
9
+ } from '@rjsf/utils';
10
+
11
+ import Row from 'react-bootstrap/Row';
12
+ import Col from 'react-bootstrap/Col';
13
+ import Form from 'react-bootstrap/Form';
14
+
15
+ export default function WrapIfAdditionalTemplate<
16
+ T = any,
17
+ S extends StrictRJSFSchema = RJSFSchema,
18
+ F extends FormContextType = any
19
+ >({
20
+ classNames,
21
+ style,
22
+ children,
23
+ disabled,
24
+ id,
25
+ label,
26
+ onDropPropertyClick,
27
+ onKeyChange,
28
+ readonly,
29
+ required,
30
+ schema,
31
+ uiSchema,
32
+ registry,
33
+ }: WrapIfAdditionalTemplateProps<T, S, F>) {
34
+ const { templates, translateString } = registry;
35
+ // Button templates are not overridden in the uiSchema
36
+ const { RemoveButton } = templates.ButtonTemplates;
37
+ const keyLabel = translateString(TranslatableString.KeyLabel, [label]);
38
+ const additional = ADDITIONAL_PROPERTY_FLAG in schema;
39
+
40
+ if (!additional) {
41
+ return (
42
+ <div className={classNames} style={style}>
43
+ {children}
44
+ </div>
45
+ );
46
+ }
47
+
48
+ const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value);
49
+ const keyId = `${id}-key`;
50
+
51
+ return (
52
+ <Row className={classNames} style={style} key={keyId}>
53
+ <Col xs={5}>
54
+ <Form.Group>
55
+ <Form.Label htmlFor={keyId}>{keyLabel}</Form.Label>
56
+ <Form.Control
57
+ required={required}
58
+ defaultValue={label}
59
+ disabled={disabled || readonly}
60
+ id={keyId}
61
+ name={keyId}
62
+ onBlur={!readonly ? handleBlur : undefined}
63
+ type='text'
64
+ />
65
+ </Form.Group>
66
+ </Col>
67
+ <Col xs={5}>{children}</Col>
68
+ <Col xs={2} className='py-4 d-grid gap-2'>
69
+ <RemoveButton
70
+ className='w-100'
71
+ disabled={disabled || readonly}
72
+ onClick={onDropPropertyClick(label)}
73
+ uiSchema={uiSchema}
74
+ registry={registry}
75
+ />
76
+ </Col>
77
+ </Row>
78
+ );
79
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './WrapIfAdditionalTemplate';
2
+ export * from './WrapIfAdditionalTemplate';
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ import Form from './Form/Form';
2
+
3
+ export { default as Form, generateForm } from './Form';
4
+ export { default as Templates, generateTemplates } from './Templates';
5
+ export { default as Theme, generateTheme } from './Theme';
6
+ export { default as Widgets, generateWidgets } from './Widgets';
7
+
8
+ export default Form;
@@ -0,0 +1,23 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "include": [
4
+ "./"
5
+ ],
6
+ "compilerOptions": {
7
+ "rootDir": "./",
8
+ "outDir": "../lib",
9
+ "baseUrl": "../",
10
+ "jsx": "react-jsx"
11
+ },
12
+ "references": [
13
+ {
14
+ "path": "../../core"
15
+ },
16
+ {
17
+ "path": "../../utils"
18
+ },
19
+ {
20
+ "path": "../../validator-ajv8"
21
+ }
22
+ ]
23
+ }