zeus-form-mui 0.1.1

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 (44) hide show
  1. package/Readme.md +3 -0
  2. package/lib/components/ArrayField.d.ts +6 -0
  3. package/lib/components/ArrayField.js +67 -0
  4. package/lib/components/ArrayField.js.map +1 -0
  5. package/lib/components/BooleanField.d.ts +4 -0
  6. package/lib/components/BooleanField.js +27 -0
  7. package/lib/components/BooleanField.js.map +1 -0
  8. package/lib/components/EnumField.d.ts +4 -0
  9. package/lib/components/EnumField.js +38 -0
  10. package/lib/components/EnumField.js.map +1 -0
  11. package/lib/components/FormField.d.ts +4 -0
  12. package/lib/components/FormField.js +17 -0
  13. package/lib/components/FormField.js.map +1 -0
  14. package/lib/components/FormLabel.d.ts +7 -0
  15. package/lib/components/FormLabel.js +28 -0
  16. package/lib/components/FormLabel.js.map +1 -0
  17. package/lib/components/NullField.d.ts +3 -0
  18. package/lib/components/NullField.js +8 -0
  19. package/lib/components/NullField.js.map +1 -0
  20. package/lib/components/NumberField.d.ts +4 -0
  21. package/lib/components/NumberField.js +22 -0
  22. package/lib/components/NumberField.js.map +1 -0
  23. package/lib/components/ObjectField.d.ts +4 -0
  24. package/lib/components/ObjectField.js +37 -0
  25. package/lib/components/ObjectField.js.map +1 -0
  26. package/lib/components/UniversalField.d.ts +4 -0
  27. package/lib/components/UniversalField.js +27 -0
  28. package/lib/components/UniversalField.js.map +1 -0
  29. package/lib/index.d.ts +4 -0
  30. package/lib/index.js +42 -0
  31. package/lib/index.js.map +1 -0
  32. package/package.json +34 -0
  33. package/src/components/ArrayField.tsx +114 -0
  34. package/src/components/BooleanField.tsx +24 -0
  35. package/src/components/EnumField.tsx +33 -0
  36. package/src/components/FormField.tsx +15 -0
  37. package/src/components/FormLabel.tsx +34 -0
  38. package/src/components/NullField.tsx +2 -0
  39. package/src/components/NumberField.tsx +15 -0
  40. package/src/components/ObjectField.tsx +41 -0
  41. package/src/components/UniversalField.tsx +20 -0
  42. package/src/index.tsx +32 -0
  43. package/tsconfig.build.json +36 -0
  44. package/tsconfig.json +20 -0
package/Readme.md ADDED
@@ -0,0 +1,3 @@
1
+ # Starter
2
+
3
+ Copy this starter folder to start the new form library
@@ -0,0 +1,6 @@
1
+ import { PassedFormProps } from 'zeus-form';
2
+ import React from 'react';
3
+ declare const ArrayField: React.FC<PassedFormProps & {
4
+ open?: boolean;
5
+ }>;
6
+ export default ArrayField;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var material_1 = require("@mui/material");
18
+ var zeus_form_1 = require("zeus-form");
19
+ var graphql_js_tree_1 = require("graphql-js-tree");
20
+ var react_1 = __importDefault(require("react"));
21
+ var icons_material_1 = require("@mui/icons-material");
22
+ var ArrayField = function (props) {
23
+ var formObject = props.formObject, onChange = props.onChange, f = props.f;
24
+ formObject.__form__value || (formObject.__form__value = []);
25
+ if (f.type.fieldType.type !== graphql_js_tree_1.Options.array) {
26
+ throw new Error('Invalid Array node');
27
+ }
28
+ var nodeWithoutArray = __assign(__assign({}, f), { type: __assign(__assign({}, f.type), { fieldType: __assign({}, f.type.fieldType.nest) }) });
29
+ var formValuePointer = formObject.__form__value;
30
+ return (react_1.default.createElement(material_1.Stack, null,
31
+ formValuePointer.map(function (v, i, all) {
32
+ formValuePointer[i] || (formValuePointer[i] = { __form__node: nodeWithoutArray });
33
+ return (react_1.default.createElement(material_1.Stack, { key: f.name + i },
34
+ react_1.default.createElement(zeus_form_1.Renderer, __assign({ key: i }, props, { f: __assign(__assign({}, nodeWithoutArray), { name: "".concat(nodeWithoutArray.name, "[").concat(i, "]") }), onChange: function (e) {
35
+ formValuePointer[i] = e;
36
+ onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
37
+ }, formObject: v }),
38
+ react_1.default.createElement(material_1.Stack, { direction: "row" },
39
+ react_1.default.createElement(material_1.IconButton, { onClick: function () {
40
+ onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer.filter(function (_, index) { return i !== index; }) }));
41
+ } },
42
+ react_1.default.createElement(icons_material_1.Close, null)),
43
+ i !== 0 && (react_1.default.createElement(material_1.IconButton, { onClick: function () {
44
+ var switched = v;
45
+ formValuePointer[i] = formValuePointer[i - 1];
46
+ formValuePointer[i - 1] = switched;
47
+ onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
48
+ } },
49
+ react_1.default.createElement(icons_material_1.ArrowUpward, null))),
50
+ i !== all.length - 1 && (react_1.default.createElement(material_1.IconButton, { onClick: function () {
51
+ var switched = v;
52
+ formValuePointer[i] = formValuePointer[i + 1];
53
+ formValuePointer[i + 1] = switched;
54
+ onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
55
+ } },
56
+ react_1.default.createElement(icons_material_1.ArrowDownward, null)))))));
57
+ }),
58
+ react_1.default.createElement(material_1.Button, { onClick: function () {
59
+ formValuePointer.push({
60
+ __form__node: nodeWithoutArray,
61
+ __form__value: undefined,
62
+ });
63
+ onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
64
+ }, endIcon: react_1.default.createElement(icons_material_1.Add, null) }, "Add ".concat(f.name))));
65
+ };
66
+ exports.default = ArrayField;
67
+ //# sourceMappingURL=ArrayField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrayField.js","sourceRoot":"","sources":["../../src/components/ArrayField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { PassedFormProps } from 'zeus-form';
3
+ declare const _default: ({ f, formObject, onChange }: PassedFormProps) => JSX.Element;
4
+ export default _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var material_1 = require("@mui/material");
18
+ var react_1 = __importDefault(require("react"));
19
+ exports.default = (function (_a) {
20
+ var f = _a.f, formObject = _a.formObject, onChange = _a.onChange;
21
+ var value = formObject.__form__value;
22
+ return (react_1.default.createElement(material_1.FormGroup, null,
23
+ react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { value: value, onChange: function () {
24
+ return onChange(__assign(__assign({}, formObject), { __form__value: value === true ? undefined : true }));
25
+ } }), label: f.name })));
26
+ });
27
+ //# sourceMappingURL=BooleanField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BooleanField.js","sourceRoot":"","sources":["../../src/components/BooleanField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAsE;AAEtE,gDAA0B;AAC1B,mBAAe,UAAC,EAA4C;QAA1C,CAAC,OAAA,EAAE,UAAU,gBAAA,EAAE,QAAQ,cAAA;IACrC,IAAM,KAAK,GAAG,UAAU,CAAC,aAAoC,CAAC;IAC9D,OAAO,CACH,8BAAC,oBAAS;QACN,8BAAC,2BAAgB,IACb,OAAO,EACH,8BAAC,mBAAQ,IACL,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE;oBACN,OAAA,QAAQ,uBACD,UAAU,KACb,aAAa,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAClD;gBAHF,CAGE,GAER,EAEN,KAAK,EAAE,CAAC,CAAC,IAAI,GACf,CACM,CACf,CAAC;AACN,CAAC,EAAC"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { PassedFormProps } from 'zeus-form';
3
+ declare const _default: ({ nodes, onChange, formObject, f }: PassedFormProps) => JSX.Element;
4
+ export default _default;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var material_1 = require("@mui/material");
18
+ var graphql_js_tree_1 = require("graphql-js-tree");
19
+ var react_1 = __importDefault(require("react"));
20
+ exports.default = (function (_a) {
21
+ var _b;
22
+ var nodes = _a.nodes, onChange = _a.onChange, formObject = _a.formObject, f = _a.f;
23
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
24
+ if (!seekNode) {
25
+ throw new Error('Invalid enum field');
26
+ }
27
+ var options = ((_b = seekNode.args) === null || _b === void 0 ? void 0 : _b.map(function (_a) {
28
+ var label = _a.name;
29
+ return ({
30
+ label: label,
31
+ value: label,
32
+ });
33
+ })) || [];
34
+ return (react_1.default.createElement(material_1.Select, { placeholder: f.name, value: formObject.__form__value, onChange: function (e) {
35
+ onChange(__assign(__assign({}, formObject), { __form__value: e.target.value }));
36
+ } }, options.map(function (o) { return (react_1.default.createElement(material_1.MenuItem, { key: o.value, value: o.value }, o.label)); })));
37
+ });
38
+ //# sourceMappingURL=EnumField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumField.js","sourceRoot":"","sources":["../../src/components/EnumField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAiD;AAEjD,mDAA8C;AAC9C,gDAA0B;AAC1B,mBAAe,UAAC,EAAmD;;QAAjD,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAE,UAAU,gBAAA,EAAE,CAAC,OAAA;IAC5C,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,IAAA,6BAAW,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAxC,CAAwC,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACzC;IACD,IAAM,OAAO,GACT,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,GAAG,CAAC,UAAC,EAAe;YAAP,KAAK,UAAA;QAAO,OAAA,CAAC;YACrC,KAAK,OAAA;YACL,KAAK,EAAE,KAAK;SACf,CAAC;IAHsC,CAGtC,CAAC,KAAI,EAAE,CAAC;IACd,OAAO,CACH,8BAAC,iBAAM,IACH,WAAW,EAAE,CAAC,CAAC,IAAI,EACnB,KAAK,EAAE,UAAU,CAAC,aAAmC,EACrD,QAAQ,EAAE,UAAC,CAAC;YACR,QAAQ,uBACD,UAAU,KACb,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAC/B,CAAC;QACP,CAAC,IAEA,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAChB,8BAAC,mBAAQ,IAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IACjC,CAAC,CAAC,KAAK,CACD,CACd,EAJmB,CAInB,CAAC,CACG,CACZ,CAAC;AACN,CAAC,EAAC"}
@@ -0,0 +1,4 @@
1
+ import { PassedFormProps } from 'zeus-form';
2
+ import React from 'react';
3
+ declare const FormField: React.FC<PassedFormProps>;
4
+ export default FormField;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var material_1 = require("@mui/material");
7
+ var zeus_form_1 = require("zeus-form");
8
+ var react_1 = __importDefault(require("react"));
9
+ var FormField = function (props) {
10
+ var children = props.children;
11
+ var errors = (0, zeus_form_1.getErrorFromProps)(props);
12
+ return (react_1.default.createElement(material_1.FormControl, { fullWidth: true, error: !!errors },
13
+ children,
14
+ errors && react_1.default.createElement(material_1.FormHelperText, null, errors)));
15
+ };
16
+ exports.default = FormField;
17
+ //# sourceMappingURL=FormField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormField.js","sourceRoot":"","sources":["../../src/components/FormField.tsx"],"names":[],"mappings":";;;;;AAAA,0CAA4D;AAC5D,uCAA+D;AAC/D,gDAA0B;AAC1B,IAAM,SAAS,GAA8B,UAAC,KAAK;IACvC,IAAA,QAAQ,GAAK,KAAK,SAAV,CAAW;IAC3B,IAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACH,8BAAC,sBAAW,IAAC,SAAS,QAAC,KAAK,EAAE,CAAC,CAAC,MAAM;QACjC,QAAQ;QACR,MAAM,IAAI,8BAAC,yBAAc,QAAE,MAAM,CAAkB,CAC1C,CACjB,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { PassedFormProps } from 'zeus-form';
2
+ import React from 'react';
3
+ declare const FormLabel: React.FC<PassedFormProps & {
4
+ open?: boolean;
5
+ setOpen: (b: boolean) => void;
6
+ }>;
7
+ export default FormLabel;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var material_1 = require("@mui/material");
7
+ var icons_material_1 = require("@mui/icons-material");
8
+ var graphql_js_tree_1 = require("graphql-js-tree");
9
+ var react_1 = __importDefault(require("react"));
10
+ var FormLabel = function (props) {
11
+ var f = props.f, open = props.open, setOpen = props.setOpen, nodes = props.nodes;
12
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
13
+ var isInput = (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.InputObjectTypeDefinition;
14
+ return (react_1.default.createElement(material_1.Stack, { direction: 'row', alignItems: "center", spacing: 1 },
15
+ react_1.default.createElement(material_1.Stack, { direction: "row", alignItems: "center" },
16
+ react_1.default.createElement(material_1.Typography, null, props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
17
+ return str.toUpperCase();
18
+ })),
19
+ props.required && react_1.default.createElement(material_1.Typography, { color: 'red' }, "*"),
20
+ props.children),
21
+ (f.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition ||
22
+ isInput ||
23
+ f.type.fieldType.type === graphql_js_tree_1.Options.array) && (react_1.default.createElement(material_1.IconButton, { onClick: function () { return setOpen(!open); } },
24
+ open && react_1.default.createElement(icons_material_1.ExpandLess, null),
25
+ !open && react_1.default.createElement(icons_material_1.ExpandMore, null)))));
26
+ };
27
+ exports.default = FormLabel;
28
+ //# sourceMappingURL=FormLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormLabel.js","sourceRoot":"","sources":["../../src/components/FormLabel.tsx"],"names":[],"mappings":";;;;;AAAA,0CAA8D;AAC9D,sDAA6D;AAE7D,mDAA6F;AAC7F,gDAA0B;AAC1B,IAAM,SAAS,GAAkF,UAAC,KAAK;IAC3F,IAAA,CAAC,GAA2B,KAAK,EAAhC,EAAE,IAAI,GAAqB,KAAK,KAA1B,EAAE,OAAO,GAAY,KAAK,QAAjB,EAAE,KAAK,GAAK,KAAK,MAAV,CAAW;IAE1C,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,IAAA,6BAAW,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAxC,CAAwC,CAAC,CAAC;IAC7E,IAAM,OAAO,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,yBAAyB,CAAC;IAEjF,OAAO,CACH,8BAAC,gBAAK,IAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;QACnD,8BAAC,gBAAK,IAAC,SAAS,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ;YACtC,8BAAC,qBAAU,QACN,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG;gBAChE,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC,CAAC,CACO;YACZ,KAAK,CAAC,QAAQ,IAAI,8BAAC,qBAAU,IAAC,KAAK,EAAE,KAAK,QAAgB;YAC1D,KAAK,CAAC,QAAQ,CACX;QACP,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe;YAClD,OAAO;YACP,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,yBAAO,CAAC,KAAK,CAAC,IAAI,CAC5C,8BAAC,qBAAU,IAAC,OAAO,EAAE,cAAM,OAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAd,CAAc;YACpC,IAAI,IAAI,8BAAC,2BAAU,OAAG;YACtB,CAAC,IAAI,IAAI,8BAAC,2BAAU,OAAG,CACf,CAChB,CACG,CACX,CAAC;AACN,CAAC,CAAC;AACF,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare const _default: () => JSX.Element;
3
+ export default _default;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ exports.default = (function () { return react_1.default.createElement("div", null, "No value"); });
8
+ //# sourceMappingURL=NullField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullField.js","sourceRoot":"","sources":["../../src/components/NullField.tsx"],"names":[],"mappings":";;;;;AAAA,gDAA0B;AAC1B,mBAAe,cAAM,OAAA,sDAAmB,EAAnB,CAAmB,EAAC"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { PassedFormProps } from 'zeus-form';
3
+ declare const _default: (props: PassedFormProps) => JSX.Element;
4
+ export default _default;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var material_1 = require("@mui/material");
18
+ var react_1 = __importDefault(require("react"));
19
+ exports.default = (function (props) { return (react_1.default.createElement(material_1.TextField, { type: "number", value: props.formObject.__form__value || '', onChange: function (e) {
20
+ props.onChange(__assign(__assign({}, props.formObject), { __form__value: e.target.value }));
21
+ } })); });
22
+ //# sourceMappingURL=NumberField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../../src/components/NumberField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAA0C;AAE1C,gDAA0B;AAC1B,mBAAe,UAAC,KAAsB,IAAK,OAAA,CACvC,8BAAC,oBAAS,IACN,IAAI,EAAC,QAAQ,EACb,KAAK,EAAG,KAAK,CAAC,UAAU,CAAC,aAAoC,IAAI,EAAE,EACnE,QAAQ,EAAE,UAAC,CAAC;QACR,KAAK,CAAC,QAAQ,uBACP,KAAK,CAAC,UAAU,KACnB,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAC/B,CAAC;IACP,CAAC,GACH,CACL,EAX0C,CAW1C,EAAC"}
@@ -0,0 +1,4 @@
1
+ import { PassedFormProps } from 'zeus-form';
2
+ import React from 'react';
3
+ declare const ObjectField: React.FC<PassedFormProps>;
4
+ export default ObjectField;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var material_1 = require("@mui/material");
18
+ var zeus_form_1 = require("zeus-form");
19
+ var react_1 = __importDefault(require("react"));
20
+ var ObjectField = function (props) {
21
+ var _a;
22
+ var formObject = props.formObject, f = props.f;
23
+ formObject.__form__value || (formObject.__form__value = {});
24
+ var fV = formObject.__form__value;
25
+ return (react_1.default.createElement(material_1.Stack, { pl: 2, spacing: 2 }, (_a = f.args) === null || _a === void 0 ? void 0 : _a.sort(function (a, b) {
26
+ return b.name > a.name ? -1 : 1;
27
+ }).map(function (a) {
28
+ var _a;
29
+ fV[_a = a.name] || (fV[_a] = { __form__node: a });
30
+ return (react_1.default.createElement(zeus_form_1.Renderer, __assign({}, props, { currentPath: "".concat(props.currentPath, ".").concat(a.name), key: a.name, formObject: fV[a.name], required: false, onChange: function (fv) {
31
+ var _a;
32
+ props.onChange(__assign(__assign({}, formObject), { __form__value: __assign(__assign({}, fV), (_a = {}, _a[a.name] = fv, _a)) }));
33
+ }, f: a, children: undefined })));
34
+ })));
35
+ };
36
+ exports.default = ObjectField;
37
+ //# sourceMappingURL=ObjectField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectField.js","sourceRoot":"","sources":["../../src/components/ObjectField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAsC;AACtC,uCAAkE;AAClE,gDAA0B;AAE1B,IAAM,WAAW,GAA8B,UAAC,KAAK;;IACzC,IAAA,UAAU,GAAQ,KAAK,WAAb,EAAE,CAAC,GAAK,KAAK,EAAV,CAAW;IAChC,UAAU,CAAC,aAAa,KAAxB,UAAU,CAAC,aAAa,GAAK,EAAE,EAAC;IAChC,IAAM,EAAE,GAAG,UAAU,CAAC,aAA4C,CAAC;IACnE,OAAO,CACH,8BAAC,gBAAK,IAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IACnB,MAAA,CAAC,CAAC,IAAI,0CACD,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;QACR,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,EACA,GAAG,CAAC,UAAC,CAAC;;QACH,EAAE,MAAC,CAAC,CAAC,IAAI,MAAT,EAAE,OAAa,EAAE,YAAY,EAAE,CAAC,EAAE,EAAC;QACnC,OAAO,CACH,8BAAC,oBAAQ,eACD,KAAK,IACT,WAAW,EAAE,UAAG,KAAK,CAAC,WAAW,cAAI,CAAC,CAAC,IAAI,CAAE,EAC7C,GAAG,EAAE,CAAC,CAAC,IAAI,EACX,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACtB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,UAAC,EAAE;;gBACT,KAAK,CAAC,QAAQ,uBACP,UAAU,KACb,aAAa,wBACN,EAAE,gBACJ,CAAC,CAAC,IAAI,IAAG,EAAE,UAElB,CAAC;YACP,CAAC,EACD,CAAC,EAAE,CAAC,EACJ,QAAQ,EAAE,SAAS,IACrB,CACL,CAAC;IACN,CAAC,CAAC,CACF,CACX,CAAC;AACN,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { PassedFormProps } from 'zeus-form';
3
+ declare const _default: (props: PassedFormProps) => JSX.Element;
4
+ export default _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var material_1 = require("@mui/material");
18
+ var react_1 = __importDefault(require("react"));
19
+ exports.default = (function (props) {
20
+ console.log(props.f.name, props.formObject);
21
+ return (react_1.default.createElement(material_1.TextField, { value: props.formObject.__form__value || '', placeholder: props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
22
+ return str.toUpperCase();
23
+ }), onChange: function (e) {
24
+ props.onChange(__assign(__assign({}, props.formObject), { __form__value: e.target.value }));
25
+ } }));
26
+ });
27
+ //# sourceMappingURL=UniversalField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniversalField.js","sourceRoot":"","sources":["../../src/components/UniversalField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAA0C;AAE1C,gDAA0B;AAC1B,mBAAe,UAAC,KAAsB;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,CACH,8BAAC,oBAAS,IACN,KAAK,EAAG,KAAK,CAAC,UAAU,CAAC,aAAoC,IAAI,EAAE,EACnE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG;YAC5E,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC,EACF,QAAQ,EAAE,UAAC,CAAC;YACR,KAAK,CAAC,QAAQ,uBACP,KAAK,CAAC,UAAU,KACnB,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAC/B,CAAC;QACP,CAAC,GACH,CACL,CAAC;AACN,CAAC,EAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { InputFormLibraryProps } from 'zeus-form';
3
+ declare function MuiInputForm<T>(props: InputFormLibraryProps<T>): JSX.Element;
4
+ export default MuiInputForm;
package/lib/index.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var ArrayField_1 = __importDefault(require("./components/ArrayField"));
18
+ var BooleanField_1 = __importDefault(require("./components/BooleanField"));
19
+ var EnumField_1 = __importDefault(require("./components/EnumField"));
20
+ var FormField_1 = __importDefault(require("./components/FormField"));
21
+ var FormLabel_1 = __importDefault(require("./components/FormLabel"));
22
+ var NullField_1 = __importDefault(require("./components/NullField"));
23
+ var NumberField_1 = __importDefault(require("./components/NumberField"));
24
+ var ObjectField_1 = __importDefault(require("./components/ObjectField"));
25
+ var UniversalField_1 = __importDefault(require("./components/UniversalField"));
26
+ var zeus_form_1 = require("zeus-form");
27
+ var react_1 = __importDefault(require("react"));
28
+ function MuiInputForm(props) {
29
+ return (react_1.default.createElement(zeus_form_1.InputForm, __assign({}, props, { components: {
30
+ ArrayField: ArrayField_1.default,
31
+ BooleanField: BooleanField_1.default,
32
+ EnumField: EnumField_1.default,
33
+ FormField: FormField_1.default,
34
+ FormLabel: FormLabel_1.default,
35
+ NullField: NullField_1.default,
36
+ NumberField: NumberField_1.default,
37
+ ObjectField: ObjectField_1.default,
38
+ UniversalField: UniversalField_1.default,
39
+ } })));
40
+ }
41
+ exports.default = MuiInputForm;
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAiD;AACjD,2EAAqD;AACrD,qEAA+C;AAC/C,qEAA+C;AAC/C,qEAA+C;AAC/C,qEAA+C;AAC/C,yEAAmD;AACnD,yEAAmD;AACnD,+EAAyD;AACzD,uCAA6D;AAC7D,gDAA0B;AAE1B,SAAS,YAAY,CAAI,KAA+B;IACpD,OAAO,CACH,8BAAC,qBAAS,eACF,KAAK,IACT,UAAU,EAAE;YACR,UAAU,EAAE,oBAAU;YACtB,YAAY,EAAE,sBAAY;YAC1B,SAAS,EAAE,mBAAS;YACpB,SAAS,EAAE,mBAAS;YACpB,SAAS,EAAE,mBAAS;YACpB,SAAS,EAAE,mBAAS;YACpB,WAAW,EAAE,qBAAW;YACxB,WAAW,EAAE,qBAAW;YACxB,cAAc,EAAE,wBAAc;SACjC,IACH,CACL,CAAC;AACN,CAAC;AAED,kBAAe,YAAY,CAAC"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "zeus-form-mui",
3
+ "version": "0.1.1",
4
+ "description": "Easy form creation with GraphQL Editor and React",
5
+ "main": "lib/index.js",
6
+ "scripts": {
7
+ "build": "ttsc --build tsconfig.build.json",
8
+ "start": "ttsc --build tsconfig.build.json --watch",
9
+ "lint": "eslint '*/**/*.{js,ts,tsx}' --quiet --fix"
10
+ },
11
+ "types": "lib/index.d.ts",
12
+ "private": false,
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/graphql-editor/graphql-form.git"
19
+ },
20
+ "author": "Aexol <aexol@aexol.com> (http://aexol.com)",
21
+ "license": "MIT",
22
+ "homepage": "https://form.graphqleditor.com",
23
+ "peerDependencies": {
24
+ "graphql-form": "*",
25
+ "react": ">=16.8.0",
26
+ "react-dom": ">=16.8.0"
27
+ },
28
+ "dependencies": {
29
+ "@emotion/react": "^11.9.0",
30
+ "@emotion/styled": "^11.8.1",
31
+ "@mui/icons-material": "^5.8.0",
32
+ "@mui/material": "^5.8.0"
33
+ }
34
+ }
@@ -0,0 +1,114 @@
1
+ import { Button, IconButton, Stack } from '@mui/material';
2
+ import { FormObject, FormValue, PassedFormProps, Renderer } from 'zeus-form';
3
+ import { Options, ParserField } from 'graphql-js-tree';
4
+ import React from 'react';
5
+ import { Add, ArrowDownward, ArrowUpward, Close } from '@mui/icons-material';
6
+
7
+ const ArrayField: React.FC<
8
+ PassedFormProps & {
9
+ open?: boolean;
10
+ }
11
+ > = (props) => {
12
+ const { formObject, onChange, f } = props;
13
+ formObject.__form__value ||= [];
14
+ if (f.type.fieldType.type !== Options.array) {
15
+ throw new Error('Invalid Array node');
16
+ }
17
+ const nodeWithoutArray: ParserField = {
18
+ ...f,
19
+ type: {
20
+ ...f.type,
21
+ fieldType: {
22
+ ...f.type.fieldType.nest,
23
+ },
24
+ },
25
+ };
26
+ const formValuePointer = formObject.__form__value as Array<FormValue>;
27
+ return (
28
+ <Stack>
29
+ {formValuePointer.map((v, i: number, all) => {
30
+ formValuePointer[i] ||= { __form__node: nodeWithoutArray };
31
+ return (
32
+ <Stack key={f.name + i}>
33
+ <Renderer
34
+ key={i}
35
+ {...props}
36
+ f={{
37
+ ...nodeWithoutArray,
38
+ name: `${nodeWithoutArray.name}[${i}]`,
39
+ }}
40
+ onChange={(e) => {
41
+ formValuePointer[i] = e;
42
+ onChange({
43
+ ...formObject,
44
+ __form__value: formValuePointer,
45
+ });
46
+ }}
47
+ formObject={v as FormObject}
48
+ >
49
+ <Stack direction="row">
50
+ <IconButton
51
+ onClick={() => {
52
+ onChange({
53
+ ...formObject,
54
+ __form__value: formValuePointer.filter((_, index) => i !== index),
55
+ });
56
+ }}
57
+ >
58
+ <Close />
59
+ </IconButton>
60
+ {i !== 0 && (
61
+ <IconButton
62
+ onClick={() => {
63
+ const switched = v;
64
+ formValuePointer[i] = formValuePointer[i - 1];
65
+ formValuePointer[i - 1] = switched;
66
+ onChange({
67
+ ...formObject,
68
+ __form__value: formValuePointer,
69
+ });
70
+ }}
71
+ >
72
+ <ArrowUpward />
73
+ </IconButton>
74
+ )}
75
+ {i !== all.length - 1 && (
76
+ <IconButton
77
+ onClick={() => {
78
+ const switched = v;
79
+ formValuePointer[i] = formValuePointer[i + 1];
80
+ formValuePointer[i + 1] = switched;
81
+ onChange({
82
+ ...formObject,
83
+ __form__value: formValuePointer,
84
+ });
85
+ }}
86
+ >
87
+ <ArrowDownward />
88
+ </IconButton>
89
+ )}
90
+ </Stack>
91
+ </Renderer>
92
+ </Stack>
93
+ );
94
+ })}
95
+
96
+ <Button
97
+ onClick={() => {
98
+ formValuePointer.push({
99
+ __form__node: nodeWithoutArray,
100
+ __form__value: undefined,
101
+ });
102
+ onChange({
103
+ ...formObject,
104
+ __form__value: formValuePointer,
105
+ });
106
+ }}
107
+ endIcon={<Add />}
108
+ >
109
+ {`Add ${f.name}`}
110
+ </Button>
111
+ </Stack>
112
+ );
113
+ };
114
+ export default ArrayField;
@@ -0,0 +1,24 @@
1
+ import { Checkbox, FormControlLabel, FormGroup } from '@mui/material';
2
+ import { PassedFormProps } from 'zeus-form';
3
+ import React from 'react';
4
+ export default ({ f, formObject, onChange }: PassedFormProps) => {
5
+ const value = formObject.__form__value as boolean | undefined;
6
+ return (
7
+ <FormGroup>
8
+ <FormControlLabel
9
+ control={
10
+ <Checkbox
11
+ value={value}
12
+ onChange={() =>
13
+ onChange({
14
+ ...formObject,
15
+ __form__value: value === true ? undefined : true,
16
+ })
17
+ }
18
+ />
19
+ }
20
+ label={f.name}
21
+ />
22
+ </FormGroup>
23
+ );
24
+ };
@@ -0,0 +1,33 @@
1
+ import { MenuItem, Select } from '@mui/material';
2
+ import { PassedFormProps } from 'zeus-form';
3
+ import { getTypeName } from 'graphql-js-tree';
4
+ import React from 'react';
5
+ export default ({ nodes, onChange, formObject, f }: PassedFormProps) => {
6
+ const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
7
+ if (!seekNode) {
8
+ throw new Error('Invalid enum field');
9
+ }
10
+ const options =
11
+ seekNode.args?.map(({ name: label }) => ({
12
+ label,
13
+ value: label,
14
+ })) || [];
15
+ return (
16
+ <Select
17
+ placeholder={f.name}
18
+ value={formObject.__form__value as string | undefined}
19
+ onChange={(e) => {
20
+ onChange({
21
+ ...formObject,
22
+ __form__value: e.target.value,
23
+ });
24
+ }}
25
+ >
26
+ {options.map((o) => (
27
+ <MenuItem key={o.value} value={o.value}>
28
+ {o.label}
29
+ </MenuItem>
30
+ ))}
31
+ </Select>
32
+ );
33
+ };
@@ -0,0 +1,15 @@
1
+ import { FormControl, FormHelperText } from '@mui/material';
2
+ import { getErrorFromProps, PassedFormProps } from 'zeus-form';
3
+ import React from 'react';
4
+ const FormField: React.FC<PassedFormProps> = (props) => {
5
+ const { children } = props;
6
+ const errors = getErrorFromProps(props);
7
+ return (
8
+ <FormControl fullWidth error={!!errors}>
9
+ {children}
10
+ {errors && <FormHelperText>{errors}</FormHelperText>}
11
+ </FormControl>
12
+ );
13
+ };
14
+
15
+ export default FormField;
@@ -0,0 +1,34 @@
1
+ import { IconButton, Stack, Typography } from '@mui/material';
2
+ import { ExpandLess, ExpandMore } from '@mui/icons-material';
3
+ import { PassedFormProps } from 'zeus-form';
4
+ import { TypeSystemDefinition, Options, getTypeName, TypeDefinition } from 'graphql-js-tree';
5
+ import React from 'react';
6
+ const FormLabel: React.FC<PassedFormProps & { open?: boolean; setOpen: (b: boolean) => void }> = (props) => {
7
+ const { f, open, setOpen, nodes } = props;
8
+
9
+ const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
10
+ const isInput = seekNode?.data.type === TypeDefinition.InputObjectTypeDefinition;
11
+
12
+ return (
13
+ <Stack direction={'row'} alignItems="center" spacing={1}>
14
+ <Stack direction="row" alignItems="center">
15
+ <Typography>
16
+ {props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
17
+ return str.toUpperCase();
18
+ })}
19
+ </Typography>
20
+ {props.required && <Typography color={'red'}>*</Typography>}
21
+ {props.children}
22
+ </Stack>
23
+ {(f.data.type === TypeSystemDefinition.FieldDefinition ||
24
+ isInput ||
25
+ f.type.fieldType.type === Options.array) && (
26
+ <IconButton onClick={() => setOpen(!open)}>
27
+ {open && <ExpandLess />}
28
+ {!open && <ExpandMore />}
29
+ </IconButton>
30
+ )}
31
+ </Stack>
32
+ );
33
+ };
34
+ export default FormLabel;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export default () => <div>No value</div>;
@@ -0,0 +1,15 @@
1
+ import { TextField } from '@mui/material';
2
+ import { PassedFormProps } from 'zeus-form';
3
+ import React from 'react';
4
+ export default (props: PassedFormProps) => (
5
+ <TextField
6
+ type="number"
7
+ value={(props.formObject.__form__value as string | undefined) || ''}
8
+ onChange={(e) => {
9
+ props.onChange({
10
+ ...props.formObject,
11
+ __form__value: e.target.value,
12
+ });
13
+ }}
14
+ />
15
+ );
@@ -0,0 +1,41 @@
1
+ import { Stack } from '@mui/material';
2
+ import { PassedFormProps, FormObject, Renderer } from 'zeus-form';
3
+ import React from 'react';
4
+
5
+ const ObjectField: React.FC<PassedFormProps> = (props) => {
6
+ const { formObject, f } = props;
7
+ formObject.__form__value ||= {};
8
+ const fV = formObject.__form__value as { [x: string]: FormObject };
9
+ return (
10
+ <Stack pl={2} spacing={2}>
11
+ {f.args
12
+ ?.sort((a, b) => {
13
+ return b.name > a.name ? -1 : 1;
14
+ })
15
+ .map((a) => {
16
+ fV[a.name] ||= { __form__node: a };
17
+ return (
18
+ <Renderer
19
+ {...props}
20
+ currentPath={`${props.currentPath}.${a.name}`}
21
+ key={a.name}
22
+ formObject={fV[a.name]}
23
+ required={false}
24
+ onChange={(fv) => {
25
+ props.onChange({
26
+ ...formObject,
27
+ __form__value: {
28
+ ...fV,
29
+ [a.name]: fv,
30
+ },
31
+ });
32
+ }}
33
+ f={a}
34
+ children={undefined}
35
+ />
36
+ );
37
+ })}
38
+ </Stack>
39
+ );
40
+ };
41
+ export default ObjectField;
@@ -0,0 +1,20 @@
1
+ import { TextField } from '@mui/material';
2
+ import { PassedFormProps } from 'zeus-form';
3
+ import React from 'react';
4
+ export default (props: PassedFormProps) => {
5
+ console.log(props.f.name, props.formObject);
6
+ return (
7
+ <TextField
8
+ value={(props.formObject.__form__value as string | undefined) || ''}
9
+ placeholder={props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
10
+ return str.toUpperCase();
11
+ })}
12
+ onChange={(e) => {
13
+ props.onChange({
14
+ ...props.formObject,
15
+ __form__value: e.target.value,
16
+ });
17
+ }}
18
+ />
19
+ );
20
+ };
package/src/index.tsx ADDED
@@ -0,0 +1,32 @@
1
+ import ArrayField from '@/components/ArrayField';
2
+ import BooleanField from '@/components/BooleanField';
3
+ import EnumField from '@/components/EnumField';
4
+ import FormField from '@/components/FormField';
5
+ import FormLabel from '@/components/FormLabel';
6
+ import NullField from '@/components/NullField';
7
+ import NumberField from '@/components/NumberField';
8
+ import ObjectField from '@/components/ObjectField';
9
+ import UniversalField from '@/components/UniversalField';
10
+ import { InputForm, InputFormLibraryProps } from 'zeus-form';
11
+ import React from 'react';
12
+
13
+ function MuiInputForm<T>(props: InputFormLibraryProps<T>) {
14
+ return (
15
+ <InputForm
16
+ {...props}
17
+ components={{
18
+ ArrayField: ArrayField,
19
+ BooleanField: BooleanField,
20
+ EnumField: EnumField,
21
+ FormField: FormField,
22
+ FormLabel: FormLabel,
23
+ NullField: NullField,
24
+ NumberField: NumberField,
25
+ ObjectField: ObjectField,
26
+ UniversalField: UniversalField,
27
+ }}
28
+ />
29
+ );
30
+ }
31
+
32
+ export default MuiInputForm;
@@ -0,0 +1,36 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
4
+ "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
5
+ "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
6
+ "declaration": true /* Generates corresponding '.d.ts' file. */,
7
+
8
+ "sourceMap": true /* Generates corresponding '.map' file. */,
9
+
10
+ "outDir": "./lib" /* Redirect output structure to the directory. */,
11
+ "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
12
+
13
+ "isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */,
14
+
15
+ "strict": true /* Enable all strict type-checking options. */,
16
+
17
+ "baseUrl": "./src" /* Base directory to resolve non-absolute module names. */,
18
+ "paths": {
19
+ "@/*": ["./*"]
20
+ } /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */,
21
+
22
+ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
23
+ "skipLibCheck": true /* Skip type checking of declaration files. */,
24
+ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
25
+ "plugins": [
26
+ {
27
+ "transform": "typescript-transform-paths"
28
+ },
29
+ {
30
+ "transform": "typescript-transform-paths",
31
+ "afterDeclarations": true
32
+ }
33
+ ]
34
+ },
35
+ "exclude": ["**/__tests__/*", "**/__sandbox__/*", "./lib", "node_modules"]
36
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
4
+ "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
5
+ "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
6
+ "sourceMap": true /* Generates corresponding '.map' file. */,
7
+ "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
8
+ "isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */,
9
+ "strict": true /* Enable all strict type-checking options. */,
10
+ "baseUrl": "./src" /* Base directory to resolve non-absolute module names. */,
11
+ "outDir": "./lib",
12
+ "paths": {
13
+ "@/*": ["./*"]
14
+ } /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */,
15
+ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
16
+ "skipLibCheck": true /* Skip type checking of declaration files. */,
17
+ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
18
+ "composite": true
19
+ }
20
+ }