@webiny/app-admin 5.32.0 → 5.33.0-beta.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 (35) hide show
  1. package/components/FileManager/FileManagerContext.d.ts +8 -2
  2. package/components/FileManager/FileManagerContext.js +2 -8
  3. package/components/FileManager/FileManagerContext.js.map +1 -1
  4. package/components/FileManager/FileManagerView.d.ts +4 -4
  5. package/components/FileManager/FileManagerView.js +6 -3
  6. package/components/FileManager/FileManagerView.js.map +1 -1
  7. package/components/FileManager/outputFileSelectionError.d.ts +2 -2
  8. package/components/FileManager/outputFileSelectionError.js +3 -3
  9. package/components/FileManager/outputFileSelectionError.js.map +1 -1
  10. package/components/FileManager/types.d.ts +3 -1
  11. package/components/FileManager/types.js.map +1 -1
  12. package/components/FileManager.d.ts +60 -19
  13. package/components/FileManager.js +88 -110
  14. package/components/FileManager.js.map +1 -1
  15. package/components/OverlayLayout/OverlayLayout.d.ts +1 -1
  16. package/components/OverlayLayout/OverlayLayout.js.map +1 -1
  17. package/components/OverlayLayout/index.d.ts +1 -1
  18. package/components/OverlayLayout/index.js +12 -7
  19. package/components/OverlayLayout/index.js.map +1 -1
  20. package/components/RichTextEditor/RichTextEditor.js +2 -2
  21. package/components/RichTextEditor/RichTextEditor.js.map +1 -1
  22. package/components/SingleImageUpload.d.ts +42 -6
  23. package/components/SingleImageUpload.js +68 -73
  24. package/components/SingleImageUpload.js.map +1 -1
  25. package/index.d.ts +4 -0
  26. package/index.js +50 -0
  27. package/index.js.map +1 -1
  28. package/package.json +16 -15
  29. package/plugins/fileManager/fileImage/DeleteAction.d.ts +2 -2
  30. package/plugins/fileManager/fileImage/DeleteAction.js.map +1 -1
  31. package/plugins/fileManager/fileImage/EditAction.js +2 -2
  32. package/plugins/fileManager/fileImage/EditAction.js.map +1 -1
  33. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js +9 -11
  34. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -1
  35. package/ui/elements/form/FileManagerElement/styled.d.ts +3 -3
@@ -7,144 +7,119 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.FileManager = void 0;
10
+ exports.FileManagerRenderer = exports.FileManager = void 0;
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
-
16
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
23
-
24
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
25
-
26
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
14
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
27
15
 
28
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
29
17
 
30
18
  var _react = _interopRequireWildcard(require("react"));
31
19
 
32
20
  var _reactDom = _interopRequireDefault(require("react-dom"));
33
21
 
34
- var _FileManagerView = _interopRequireDefault(require("./FileManager/FileManagerView"));
22
+ var _reactComposition = require("@webiny/react-composition");
35
23
 
36
- var _pick = _interopRequireDefault(require("lodash/pick"));
24
+ var _FileManagerView = _interopRequireDefault(require("./FileManager/FileManagerView"));
37
25
 
38
26
  var _FileManagerContext = require("./FileManager/FileManagerContext");
39
27
 
40
- var _excluded = ["children"];
28
+ var _excluded = ["id", "src"],
29
+ _excluded2 = ["onChange", "images", "accept"],
30
+ _excluded3 = ["children", "render", "onChange"];
41
31
 
42
- var FileManagerPortal = /*#__PURE__*/function (_React$Component) {
43
- (0, _inherits2.default)(FileManagerPortal, _React$Component);
32
+ function getPortalTarget() {
33
+ var target = window.document.getElementById("file-manager-container");
44
34
 
45
- var _super = (0, _createSuper2.default)(FileManagerPortal);
35
+ if (!target) {
36
+ target = document.createElement("div");
37
+ target.setAttribute("id", "file-manager-container");
38
+ document.body && document.body.appendChild(target);
39
+ }
46
40
 
47
- function FileManagerPortal(props) {
48
- var _this;
41
+ return target;
42
+ } // This jewel was taken from https://davidgomes.com/pick-omit-over-union-types-in-typescript/. Massive thanks, David!
49
43
 
50
- (0, _classCallCheck2.default)(this, FileManagerPortal);
51
- _this = _super.call(this, props);
52
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "container", null);
53
44
 
54
- if (!window) {
55
- return (0, _possibleConstructorReturn2.default)(_this);
56
- }
45
+ /**
46
+ * Convert a FileItem object to a FileManagerFileItem, which is then passed to `onChange` callback.
47
+ */
48
+ var formatFileItem = function formatFileItem(_ref) {
49
+ var id = _ref.id,
50
+ src = _ref.src,
51
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
52
+ var props = rest;
53
+ return {
54
+ id: id,
55
+ src: src,
56
+ meta: Object.keys(rest).map(function (key) {
57
+ return {
58
+ key: key,
59
+ value: props[key]
60
+ };
61
+ })
62
+ };
63
+ };
64
+ /**
65
+ * If `accept` prop is not passed, and `images` prop is set, use these default mime types.
66
+ * Defaults can be overridden using the `createComponentPlugin` and `FileManagerRenderer` component.
67
+ */
57
68
 
58
- _this.container = window.document.getElementById("file-manager-container");
59
69
 
60
- if (!_this.container) {
61
- _this.container = document.createElement("div");
70
+ var imagesAccept = ["image/jpg", "image/jpeg", "image/tiff", "image/gif", "image/png", "image/webp", "image/bmp", "image/svg+xml"];
62
71
 
63
- _this.container.setAttribute("id", "file-manager-container");
72
+ var DefaultFileManagerRenderer = function DefaultFileManagerRenderer(props) {
73
+ var onChange = props.onChange,
74
+ images = props.images,
75
+ accept = props.accept,
76
+ forwardProps = (0, _objectWithoutProperties2.default)(props, _excluded2);
64
77
 
65
- var container = _this.container;
66
- document.body && document.body.appendChild(container);
78
+ var handleFileOnChange = function handleFileOnChange(value) {
79
+ if (!onChange || !value || Array.isArray(value) && !value.length) {
80
+ return;
67
81
  }
68
82
 
69
- return _this;
70
- }
71
-
72
- (0, _createClass2.default)(FileManagerPortal, [{
73
- key: "render",
74
- value: function render() {
75
- var _this$props = this.props,
76
- onChange = _this$props.onChange,
77
- onClose = _this$props.onClose,
78
- accept = _this$props.accept,
79
- onChangePick = _this$props.onChangePick,
80
- multiple = _this$props.multiple,
81
- images = _this$props.images,
82
- maxSize = _this$props.maxSize,
83
- multipleMaxCount = _this$props.multipleMaxCount,
84
- multipleMaxSize = _this$props.multipleMaxSize,
85
- onUploadCompletion = _this$props.onUploadCompletion,
86
- tags = _this$props.tags,
87
- scope = _this$props.scope,
88
- own = _this$props.own;
89
- var container = this.container;
90
-
91
- var handleFileOnChange = function handleFileOnChange(files) {
92
- if (!files || files.length === 0) {
93
- return;
94
- }
95
-
96
- var fields = Array.isArray(onChangePick) ? onChangePick : ["id", "name", "key", "src", "size", "type"];
97
-
98
- if (Array.isArray(files) === true) {
99
- var items = files.map(function (file) {
100
- return (0, _pick.default)(file, fields);
101
- });
102
- onChange && onChange(items);
103
- return;
104
- }
105
-
106
- var file = (0, _pick.default)(files, fields);
107
- onChange && onChange(file);
108
- };
109
-
110
- var props = {
111
- onChange: typeof onChange === "function" ? handleFileOnChange : undefined,
112
- onClose: onClose,
113
- accept: accept,
114
- multiple: multiple,
115
- maxSize: maxSize,
116
- multipleMaxCount: multipleMaxCount,
117
- multipleMaxSize: multipleMaxSize,
118
- onUploadCompletion: onUploadCompletion,
119
- tags: tags,
120
- scope: scope,
121
- own: own
122
- };
123
-
124
- if (images) {
125
- props.accept = ["image/jpg", "image/jpeg", "image/tiff", "image/gif", "image/png", "image/webp", "image/bmp", "image/svg+xml"];
126
- } // Let's pass "permanent" / "persistent" / "temporary" flags as "mode" prop instead.
83
+ if (Array.isArray(value)) {
84
+ var finalValue = value.map(formatFileItem);
85
+ onChange(finalValue);
86
+ return;
87
+ }
127
88
 
89
+ onChange(formatFileItem(value));
90
+ };
91
+
92
+ var viewProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, forwardProps), {}, {
93
+ onChange: typeof onChange === "function" ? handleFileOnChange : undefined,
94
+ accept: images ? accept || imagesAccept : accept || []
95
+ });
96
+ return /*#__PURE__*/_react.default.createElement(_FileManagerContext.FileManagerProvider, {
97
+ accept: viewProps.accept,
98
+ tags: viewProps.tags || [],
99
+ own: viewProps.own,
100
+ scope: viewProps.scope
101
+ }, /*#__PURE__*/_react.default.createElement(_FileManagerView.default, viewProps));
102
+ };
128
103
 
129
- return /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_FileManagerContext.FileManagerProvider, props, /*#__PURE__*/_react.default.createElement(_FileManagerView.default, props)), container);
130
- }
131
- }]);
132
- return FileManagerPortal;
133
- }(_react.default.Component);
104
+ var FileManagerRenderer = (0, _reactComposition.makeComposable)("FileManagerRenderer", DefaultFileManagerRenderer);
105
+ exports.FileManagerRenderer = FileManagerRenderer;
134
106
 
135
- var FileManager = function FileManager(_ref) {
136
- var children = _ref.children,
137
- rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
107
+ var FileManager = function FileManager(_ref2) {
108
+ var children = _ref2.children,
109
+ render = _ref2.render,
110
+ onChange = _ref2.onChange,
111
+ rest = (0, _objectWithoutProperties2.default)(_ref2, _excluded3);
112
+ var containerRef = (0, _react.useRef)(getPortalTarget());
138
113
 
139
114
  var _useState = (0, _react.useState)(false),
140
115
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
141
116
  show = _useState2[0],
142
117
  setShow = _useState2[1];
143
118
 
144
- var onChangeRef = (0, _react.useRef)(rest.onChange);
119
+ var onChangeRef = (0, _react.useRef)(onChange);
145
120
  (0, _react.useEffect)(function () {
146
- onChangeRef.current = rest.onChange;
147
- }, [rest.onChange]);
121
+ onChangeRef.current = onChange;
122
+ }, [onChange]);
148
123
  var showFileManager = (0, _react.useCallback)(function (onChange) {
149
124
  if (typeof onChange === "function") {
150
125
  onChangeRef.current = onChange;
@@ -152,15 +127,18 @@ var FileManager = function FileManager(_ref) {
152
127
 
153
128
  setShow(true);
154
129
  }, []);
155
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, show && /*#__PURE__*/_react.default.createElement(FileManagerPortal, Object.assign({
130
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, show && /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(FileManagerRenderer, Object.assign({
156
131
  onClose: function onClose() {
157
132
  return setShow(false);
158
- }
159
- }, rest, {
160
- onChange: onChangeRef.current
161
- })), children({
133
+ },
134
+ onChange:
135
+ /* TODO: figure out how to create a conditional type based on the value of `rest.multiple` */
136
+ onChangeRef.current
137
+ }, rest)), containerRef.current), children ? children({
138
+ showFileManager: showFileManager
139
+ }) : render ? render({
162
140
  showFileManager: showFileManager
163
- }));
141
+ }) : null);
164
142
  };
165
143
 
166
144
  exports.FileManager = FileManager;
@@ -1 +1 @@
1
- {"version":3,"names":["FileManagerPortal","props","window","container","document","getElementById","createElement","setAttribute","body","appendChild","onChange","onClose","accept","onChangePick","multiple","images","maxSize","multipleMaxCount","multipleMaxSize","onUploadCompletion","tags","scope","own","handleFileOnChange","files","length","fields","Array","isArray","items","map","file","pick","undefined","ReactDOM","createPortal","React","Component","FileManager","children","rest","useState","show","setShow","onChangeRef","useRef","useEffect","current","showFileManager","useCallback"],"sources":["FileManager.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport FileManagerView, { FileManagerViewProps } from \"./FileManager/FileManagerView\";\nimport pick from \"lodash/pick\";\nimport { FileManagerProvider } from \"./FileManager/FileManagerContext\";\nimport { FileItem } from \"./FileManager/types\";\n\nexport interface ShowFileManagerCallable {\n (onChange?: (file?: FileItem | FileItem[]) => void): void;\n}\nexport interface FileManagerPropsChildren {\n showFileManager: ShowFileManagerCallable;\n}\n\nexport interface FileManagerProps {\n onChange?: (files: FileItem[] | FileItem) => void;\n onChangePick?: string[];\n images?: boolean;\n multiple?: boolean;\n accept?: Array<string>;\n tags?: Array<string>;\n scope?: string;\n own?: boolean;\n children: (params: FileManagerPropsChildren) => React.ReactNode;\n maxSize?: number | string;\n multipleMaxCount?: number;\n multipleMaxSize?: number | string;\n onClose?: Function;\n onUploadCompletion?: (files: FileItem[]) => void;\n}\n\nexport type FileManagerPortalProps = Omit<FileManagerProps, \"children\">;\n\nclass FileManagerPortal extends React.Component<FileManagerPortalProps> {\n public container: HTMLElement | null = null;\n constructor(props: FileManagerPortalProps) {\n super(props);\n\n if (!window) {\n return;\n }\n\n this.container = window.document.getElementById(\"file-manager-container\");\n\n if (!this.container) {\n this.container = document.createElement(\"div\");\n this.container.setAttribute(\"id\", \"file-manager-container\");\n const container = this.container;\n document.body && document.body.appendChild(container);\n }\n }\n\n public override render() {\n const {\n onChange,\n onClose,\n accept,\n onChangePick,\n multiple,\n images,\n maxSize,\n multipleMaxCount,\n multipleMaxSize,\n onUploadCompletion,\n tags,\n scope,\n own\n } = this.props;\n\n const container = this.container as HTMLElement;\n\n const handleFileOnChange = (files?: FileItem[] | FileItem) => {\n if (!files || files.length === 0) {\n return;\n }\n const fields = Array.isArray(onChangePick)\n ? onChangePick\n : [\"id\", \"name\", \"key\", \"src\", \"size\", \"type\"];\n\n if (Array.isArray(files) === true) {\n const items = (files as FileItem[]).map(file => pick(file, fields));\n onChange && onChange(items as FileItem[]);\n return;\n }\n const file = pick(files as FileItem, fields);\n\n onChange && onChange(file as FileItem);\n };\n\n const props: FileManagerViewProps = {\n onChange: typeof onChange === \"function\" ? handleFileOnChange : undefined,\n onClose,\n accept: accept as string[],\n multiple: multiple as boolean,\n maxSize: maxSize as string,\n multipleMaxCount: multipleMaxCount as number,\n multipleMaxSize: multipleMaxSize as number,\n onUploadCompletion,\n tags: tags,\n scope: scope,\n own: own\n };\n\n if (images) {\n props.accept = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/tiff\",\n \"image/gif\",\n \"image/png\",\n \"image/webp\",\n \"image/bmp\",\n \"image/svg+xml\"\n ];\n }\n\n // Let's pass \"permanent\" / \"persistent\" / \"temporary\" flags as \"mode\" prop instead.\n return ReactDOM.createPortal(\n <FileManagerProvider {...props}>\n <FileManagerView {...props} />\n </FileManagerProvider>,\n container\n );\n }\n}\n\nexport const FileManager: React.FC<FileManagerProps> = ({ children, ...rest }) => {\n const [show, setShow] = useState(false);\n const onChangeRef = useRef(rest.onChange);\n\n useEffect(() => {\n onChangeRef.current = rest.onChange;\n }, [rest.onChange]);\n\n const showFileManager = useCallback(onChange => {\n if (typeof onChange === \"function\") {\n onChangeRef.current = onChange;\n }\n setShow(true);\n }, []);\n\n return (\n <>\n {show && (\n <FileManagerPortal\n onClose={() => setShow(false)}\n {...rest}\n onChange={onChangeRef.current}\n />\n )}\n {children({ showFileManager })}\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["getPortalTarget","target","window","document","getElementById","createElement","setAttribute","body","appendChild","formatFileItem","id","src","rest","props","meta","Object","keys","map","key","value","imagesAccept","DefaultFileManagerRenderer","onChange","images","accept","forwardProps","handleFileOnChange","Array","isArray","length","finalValue","viewProps","undefined","tags","own","scope","FileManagerRenderer","makeComposable","FileManager","children","render","containerRef","useRef","useState","show","setShow","onChangeRef","useEffect","current","showFileManager","useCallback","ReactDOM","createPortal"],"sources":["FileManager.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { makeComposable } from \"@webiny/react-composition\";\nimport FileManagerView, { FileManagerViewProps } from \"./FileManager/FileManagerView\";\nimport { FileItem } from \"./FileManager/types\";\nimport { FileManagerProvider } from \"./FileManager/FileManagerContext\";\n\ninterface OnChange<T> {\n (value: T): void;\n}\n\n/**\n * Represents a file object managed by the File Manager.\n */\nexport interface FileManagerFileItem {\n id: string;\n src: string;\n meta?: Array<FileManagerFileItemMetaItem>;\n}\n\n/**\n * With this we allow developers to add any value to file's meta via component composition, thus the `value: any`.\n */\nexport interface FileManagerFileItemMetaItem {\n key: string;\n value: any;\n}\n\nexport type DeprecatedFileManagerRenderPropParams = {\n showFileManager: (onChange?: OnChange<FileManagerFileItem | FileManagerFileItem[]>) => void;\n};\n\nexport type FileManagerRenderPropParams<TValue> = {\n showFileManager: (onChange?: OnChange<TValue>) => void;\n};\n\ninterface SingleFileRenderProp {\n (params: FileManagerRenderPropParams<FileManagerFileItem>): React.ReactNode;\n}\n\ninterface MultiFileRenderProp {\n (params: FileManagerRenderPropParams<FileManagerFileItem[]>): React.ReactNode;\n}\n\nexport type MultipleProps =\n | {\n multiple?: never;\n multipleMaxCount?: never;\n multipleMaxSize?: never;\n onChange?: OnChange<FileManagerFileItem>;\n render?: SingleFileRenderProp;\n }\n | {\n multiple: true;\n multipleMaxCount?: number;\n multipleMaxSize?: number | string;\n onChange?: OnChange<FileManagerFileItem[]>;\n render?: MultiFileRenderProp;\n };\n\nexport type FileManagerProps = {\n accept?: Array<string>;\n images?: boolean;\n maxSize?: number | string;\n /**\n * @deprecated This prop is no longer used. The file structure was reduced to a bare minimum so picking is no longer necessary.\n */\n onChangePick?: string[];\n onClose?: Function;\n onUploadCompletion?: (files: FileManagerFileItem[]) => void;\n own?: boolean;\n scope?: string;\n tags?: Array<string>;\n /**\n * @deprecated This prop is no longer used. Use the `render` prop to get better TS autocomplete.\n */\n children?: (params: DeprecatedFileManagerRenderPropParams) => React.ReactNode;\n} & MultipleProps;\n\nfunction getPortalTarget() {\n let target = window.document.getElementById(\"file-manager-container\");\n if (!target) {\n target = document.createElement(\"div\");\n target.setAttribute(\"id\", \"file-manager-container\");\n document.body && document.body.appendChild(target);\n }\n return target;\n}\n\n// This jewel was taken from https://davidgomes.com/pick-omit-over-union-types-in-typescript/. Massive thanks, David!\ntype DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\n\nexport type FileManagerRendererProps = DistributiveOmit<FileManagerProps, \"render\" | \"children\">;\n\n/**\n * Convert a FileItem object to a FileManagerFileItem, which is then passed to `onChange` callback.\n */\nconst formatFileItem = ({ id, src, ...rest }: FileItem): FileManagerFileItem => {\n const props: { [key: string]: any } = rest;\n\n return {\n id,\n src,\n meta: Object.keys(rest).map(key => ({ key, value: props[key] }))\n };\n};\n\n/**\n * If `accept` prop is not passed, and `images` prop is set, use these default mime types.\n * Defaults can be overridden using the `createComponentPlugin` and `FileManagerRenderer` component.\n */\nconst imagesAccept = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/tiff\",\n \"image/gif\",\n \"image/png\",\n \"image/webp\",\n \"image/bmp\",\n \"image/svg+xml\"\n];\n\nconst DefaultFileManagerRenderer: React.FC<FileManagerRendererProps> = props => {\n const { onChange, images, accept, ...forwardProps } = props;\n\n const handleFileOnChange = (value?: FileItem[] | FileItem) => {\n if (!onChange || !value || (Array.isArray(value) && !value.length)) {\n return;\n }\n\n if (Array.isArray(value)) {\n const finalValue: FileManagerFileItem[] = value.map(formatFileItem);\n (onChange as OnChange<FileManagerFileItem[]>)(finalValue);\n return;\n }\n\n (onChange as OnChange<FileManagerFileItem>)(formatFileItem(value));\n };\n\n const viewProps: FileManagerViewProps = {\n ...forwardProps,\n onChange: typeof onChange === \"function\" ? handleFileOnChange : undefined,\n accept: images ? accept || imagesAccept : accept || []\n };\n\n return (\n <FileManagerProvider\n accept={viewProps.accept}\n tags={viewProps.tags || []}\n own={viewProps.own}\n scope={viewProps.scope}\n >\n <FileManagerView {...viewProps} />\n </FileManagerProvider>\n );\n};\n\nexport const FileManagerRenderer = makeComposable(\n \"FileManagerRenderer\",\n DefaultFileManagerRenderer\n);\n\nexport const FileManager: React.FC<FileManagerProps> = ({\n children,\n render,\n onChange,\n ...rest\n}) => {\n const containerRef = useRef<HTMLElement>(getPortalTarget());\n const [show, setShow] = useState(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const showFileManager = useCallback(onChange => {\n if (typeof onChange === \"function\") {\n onChangeRef.current = onChange;\n }\n setShow(true);\n }, []);\n\n return (\n <>\n {show &&\n ReactDOM.createPortal(\n <FileManagerRenderer\n onClose={() => setShow(false)}\n onChange={\n /* TODO: figure out how to create a conditional type based on the value of `rest.multiple` */\n onChangeRef.current as any\n }\n {...rest}\n />,\n containerRef.current\n )}\n {children ? children({ showFileManager }) : render ? render({ showFileManager }) : null}\n </>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="web" />
2
2
  import * as React from "react";
3
3
  import { ExitHandler } from "react-transition-group/Transition";
4
- interface OverlayLayoutProps {
4
+ export interface OverlayLayoutProps {
5
5
  barMiddle?: React.ReactNode;
6
6
  barLeft?: React.ReactNode;
7
7
  barRight?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"names":["OverlayLayoutWrapper","styled","position","width","height","backgroundColor","zIndex","paddingTop","top","left","noScroll","css","overflow","defaultStyle","transform","opacity","transitionProperty","transitionTimingFunction","transitionDuration","willChange","transitionStyles","entering","entered","OverlayLayout","props","isVisible","document","body","classList","add","setState","OverlayView","openedViews","remove","onExited","barLeft","barMiddle","barRight","children","style","rest","state","hideComponent","React","Component","noop"],"sources":["OverlayLayout.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Transition } from \"react-transition-group\";\nimport styled from \"@emotion/styled\";\nimport { css } from \"emotion\";\nimport { TopAppBarSecondary, TopAppBarSection } from \"@webiny/ui/TopAppBar\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport noop from \"lodash/noop\";\n\nimport { ReactComponent as CloseIcon } from \"./icons/close.svg\";\nimport { OverlayView } from \"~/ui/views/OverlayView\";\nimport { ExitHandler } from \"react-transition-group/Transition\";\n\nconst OverlayLayoutWrapper = styled(\"div\")({\n position: \"fixed\",\n width: \"100%\",\n height: \"100vh\",\n backgroundColor: \"var(--mdc-theme-background)\",\n /**\n * Has to be higher than 5 so it's above advanced settings dialog,\n * and below 20, so the image editor & Dialogs can be displayed above.\n */\n zIndex: 18,\n paddingTop: 65,\n top: 0,\n left: 0\n});\n\nconst noScroll = css({\n overflow: \"hidden\",\n height: \"100vh\"\n});\n\nconst defaultStyle = {\n transform: \"translateY(75vh)\",\n opacity: 0,\n transitionProperty: \"transform, opacity\",\n transitionTimingFunction: \"cubic-bezier(0, 0, .2, 1)\",\n transitionDuration: \"225ms\",\n willChange: \"opacity, transform\"\n};\n\nconst transitionStyles: Record<string, any> = {\n entering: {\n transform: \"translateY(75vh)\",\n opacity: 0\n },\n entered: {\n transform: \"translateY(0px)\",\n opacity: 1\n }\n};\n\ninterface OverlayLayoutProps {\n barMiddle?: React.ReactNode;\n barLeft?: React.ReactNode;\n barRight?: React.ReactNode;\n children: React.ReactNode;\n onExited?: ExitHandler<HTMLElement>;\n style?: React.CSSProperties;\n}\n\ninterface OverlayLayoutState {\n isVisible: boolean;\n}\n\nexport class OverlayLayout extends React.Component<OverlayLayoutProps, OverlayLayoutState> {\n constructor(props: OverlayLayoutProps) {\n super(props);\n document.body.classList.add(noScroll);\n }\n\n static defaultProps: Partial<OverlayLayoutProps> = {\n onExited: noop\n };\n\n public override state: OverlayLayoutState = {\n isVisible: true\n };\n\n public hideComponent(): void {\n this.setState({ isVisible: false });\n if (OverlayView.openedViews === 0) {\n document.body.classList.remove(noScroll);\n }\n }\n\n public override componentWillUnmount(): void {\n if (OverlayView.openedViews === 0) {\n document.body.classList.remove(noScroll);\n }\n }\n\n public override render() {\n const { onExited, barLeft, barMiddle, barRight, children, style, ...rest } = this.props;\n\n return (\n <Transition in={this.state.isVisible} timeout={100} appear onExited={onExited}>\n {state => (\n <OverlayLayoutWrapper\n {...rest}\n style={{ ...defaultStyle, ...style, ...transitionStyles[state] }}\n >\n <TopAppBarSecondary fixed style={{ top: 0 }}>\n <TopAppBarSection style={{ width: \"33%\" }} alignStart>\n {barLeft}\n </TopAppBarSection>\n <TopAppBarSection style={{ width: \"33%\" }}>\n {barMiddle}\n </TopAppBarSection>\n <TopAppBarSection style={{ width: \"33%\" }} alignEnd>\n {barRight}\n <IconButton\n ripple={false}\n onClick={() => this.hideComponent()}\n icon={<CloseIcon style={{ width: 24, height: 24 }} />}\n />\n </TopAppBarSection>\n </TopAppBarSecondary>\n\n {children}\n </OverlayLayoutWrapper>\n )}\n </Transition>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["OverlayLayoutWrapper","styled","position","width","height","backgroundColor","zIndex","paddingTop","top","left","noScroll","css","overflow","defaultStyle","transform","opacity","transitionProperty","transitionTimingFunction","transitionDuration","willChange","transitionStyles","entering","entered","OverlayLayout","props","isVisible","document","body","classList","add","setState","OverlayView","openedViews","remove","onExited","barLeft","barMiddle","barRight","children","style","rest","state","hideComponent","React","Component","noop"],"sources":["OverlayLayout.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Transition } from \"react-transition-group\";\nimport styled from \"@emotion/styled\";\nimport { css } from \"emotion\";\nimport { TopAppBarSecondary, TopAppBarSection } from \"@webiny/ui/TopAppBar\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport noop from \"lodash/noop\";\n\nimport { ReactComponent as CloseIcon } from \"./icons/close.svg\";\nimport { OverlayView } from \"~/ui/views/OverlayView\";\nimport { ExitHandler } from \"react-transition-group/Transition\";\n\nconst OverlayLayoutWrapper = styled(\"div\")({\n position: \"fixed\",\n width: \"100%\",\n height: \"100vh\",\n backgroundColor: \"var(--mdc-theme-background)\",\n /**\n * Has to be higher than 5 so it's above advanced settings dialog,\n * and below 20, so the image editor & Dialogs can be displayed above.\n */\n zIndex: 18,\n paddingTop: 65,\n top: 0,\n left: 0\n});\n\nconst noScroll = css({\n overflow: \"hidden\",\n height: \"100vh\"\n});\n\nconst defaultStyle = {\n transform: \"translateY(75vh)\",\n opacity: 0,\n transitionProperty: \"transform, opacity\",\n transitionTimingFunction: \"cubic-bezier(0, 0, .2, 1)\",\n transitionDuration: \"225ms\",\n willChange: \"opacity, transform\"\n};\n\nconst transitionStyles: Record<string, any> = {\n entering: {\n transform: \"translateY(75vh)\",\n opacity: 0\n },\n entered: {\n transform: \"translateY(0px)\",\n opacity: 1\n }\n};\n\nexport interface OverlayLayoutProps {\n barMiddle?: React.ReactNode;\n barLeft?: React.ReactNode;\n barRight?: React.ReactNode;\n children: React.ReactNode;\n onExited?: ExitHandler<HTMLElement>;\n style?: React.CSSProperties;\n}\n\ninterface OverlayLayoutState {\n isVisible: boolean;\n}\n\nexport class OverlayLayout extends React.Component<OverlayLayoutProps, OverlayLayoutState> {\n constructor(props: OverlayLayoutProps) {\n super(props);\n document.body.classList.add(noScroll);\n }\n\n static defaultProps: Partial<OverlayLayoutProps> = {\n onExited: noop\n };\n\n public override state: OverlayLayoutState = {\n isVisible: true\n };\n\n public hideComponent(): void {\n this.setState({ isVisible: false });\n if (OverlayView.openedViews === 0) {\n document.body.classList.remove(noScroll);\n }\n }\n\n public override componentWillUnmount(): void {\n if (OverlayView.openedViews === 0) {\n document.body.classList.remove(noScroll);\n }\n }\n\n public override render() {\n const { onExited, barLeft, barMiddle, barRight, children, style, ...rest } = this.props;\n\n return (\n <Transition in={this.state.isVisible} timeout={100} appear onExited={onExited}>\n {state => (\n <OverlayLayoutWrapper\n {...rest}\n style={{ ...defaultStyle, ...style, ...transitionStyles[state] }}\n >\n <TopAppBarSecondary fixed style={{ top: 0 }}>\n <TopAppBarSection style={{ width: \"33%\" }} alignStart>\n {barLeft}\n </TopAppBarSection>\n <TopAppBarSection style={{ width: \"33%\" }}>\n {barMiddle}\n </TopAppBarSection>\n <TopAppBarSection style={{ width: \"33%\" }} alignEnd>\n {barRight}\n <IconButton\n ripple={false}\n onClick={() => this.hideComponent()}\n icon={<CloseIcon style={{ width: 24, height: 24 }} />}\n />\n </TopAppBarSection>\n </TopAppBarSecondary>\n\n {children}\n </OverlayLayoutWrapper>\n )}\n </Transition>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- export { OverlayLayout } from "./OverlayLayout";
1
+ export * from "./OverlayLayout";
@@ -3,11 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "OverlayLayout", {
7
- enumerable: true,
8
- get: function get() {
9
- return _OverlayLayout.OverlayLayout;
10
- }
11
- });
12
6
 
13
- var _OverlayLayout = require("./OverlayLayout");
7
+ var _OverlayLayout = require("./OverlayLayout");
8
+
9
+ Object.keys(_OverlayLayout).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _OverlayLayout[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _OverlayLayout[key];
16
+ }
17
+ });
18
+ });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { OverlayLayout } from \"./OverlayLayout\";\n"],"mappings":";;;;;;;;;;;;AAAA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./OverlayLayout\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -13,10 +13,10 @@ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _RichTextEditor = require("@webiny/ui/RichTextEditor");
15
15
 
16
- var _FileManager = require("../FileManager");
16
+ var _ = require("./..");
17
17
 
18
18
  var RichTextEditor = function RichTextEditor(props) {
19
- return /*#__PURE__*/_react.default.createElement(_FileManager.FileManager, null, function (_ref) {
19
+ return /*#__PURE__*/_react.default.createElement(_.FileManager, null, function (_ref) {
20
20
  var showFileManager = _ref.showFileManager;
21
21
  return /*#__PURE__*/_react.default.createElement(_RichTextEditor.RichTextEditor, Object.assign({}, props, {
22
22
  placeholder: props.placeholder || "Click here to type",
@@ -1 +1 @@
1
- {"version":3,"names":["RichTextEditor","props","showFileManager","placeholder","context"],"sources":["RichTextEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { RichTextEditor as UiRichTextEditor, RichTextEditorProps } from \"@webiny/ui/RichTextEditor\";\nimport { FileManager } from \"../FileManager\";\n\nexport const RichTextEditor: React.FC<RichTextEditorProps> = props => {\n return (\n <FileManager>\n {({ showFileManager }) => (\n <UiRichTextEditor\n {...props}\n placeholder={props.placeholder || \"Click here to type\"}\n context={{ ...props.context, showFileManager }}\n />\n )}\n </FileManager>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEO,IAAMA,cAA6C,GAAG,SAAhDA,cAAgD,CAAAC,KAAK,EAAI;EAClE,oBACI,6BAAC,wBAAD,QACK;IAAA,IAAGC,eAAH,QAAGA,eAAH;IAAA,oBACG,6BAAC,8BAAD,oBACQD,KADR;MAEI,WAAW,EAAEA,KAAK,CAACE,WAAN,IAAqB,oBAFtC;MAGI,OAAO,8DAAOF,KAAK,CAACG,OAAb;QAAsBF,eAAe,EAAfA;MAAtB;IAHX,GADH;EAAA,CADL,CADJ;AAWH,CAZM"}
1
+ {"version":3,"names":["RichTextEditor","props","showFileManager","placeholder","context"],"sources":["RichTextEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { RichTextEditor as UiRichTextEditor, RichTextEditorProps } from \"@webiny/ui/RichTextEditor\";\nimport { FileManager } from \"~/components\";\n\nexport const RichTextEditor: React.FC<RichTextEditorProps> = props => {\n return (\n <FileManager>\n {({ showFileManager }) => (\n <UiRichTextEditor\n {...props}\n placeholder={props.placeholder || \"Click here to type\"}\n context={{ ...props.context, showFileManager }}\n />\n )}\n </FileManager>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEO,IAAMA,cAA6C,GAAG,SAAhDA,cAAgD,CAAAC,KAAK,EAAI;EAClE,oBACI,6BAAC,aAAD,QACK;IAAA,IAAGC,eAAH,QAAGA,eAAH;IAAA,oBACG,6BAAC,8BAAD,oBACQD,KADR;MAEI,WAAW,EAAEA,KAAK,CAACE,WAAN,IAAqB,oBAFtC;MAGI,OAAO,8DAAOF,KAAK,CAACG,OAAb;QAAsBF,eAAe,EAAfA;MAAtB;IAHX,GADH;EAAA,CADL,CADJ;AAWH,CAZM"}
@@ -1,19 +1,55 @@
1
1
  import * as React from "react";
2
+ import { FileManagerFileItem } from "./FileManager";
2
3
  import { FormComponentProps } from "@webiny/ui/types";
3
4
  export interface SingleImageUploadProps extends FormComponentProps {
5
+ /**
6
+ * Accept types
7
+ */
4
8
  accept?: string[];
9
+ /**
10
+ * Component label.
11
+ */
5
12
  label?: string;
13
+ /**
14
+ * Is component disabled?
15
+ */
6
16
  disabled?: boolean;
17
+ /**
18
+ * Description beneath the image.
19
+ */
7
20
  description?: React.ReactNode;
21
+ /**
22
+ * A className for the root element.
23
+ */
8
24
  className?: string;
25
+ /**
26
+ * Define file's max allowed size (default is "10mb").
27
+ * Uses "bytes" (https://www.npmjs.com/package/bytes) library to convert string notation to actual number.
28
+ */
9
29
  maxSize?: number | string;
10
- multipleMaxCount?: number;
11
- multipleMaxSize?: number | string;
12
- onChange?: (value: any) => void;
30
+ /**
31
+ * onChange callback when a file is set or unset.
32
+ * It is marked as `optional` because this component is often used in conjunction with <Bind>, which injects the
33
+ * `onChange` into its child element. In that case, that prop is not passed by the developer.
34
+ */
35
+ onChange?: (value: FileManagerFileItem | null) => void;
36
+ /**
37
+ * Optional custom props, passed to the preview image.
38
+ */
13
39
  imagePreviewProps?: any;
40
+ /**
41
+ * By default, file meta is not included in the data passed to `onChange`. If you need it, set this flag to true.
42
+ */
43
+ includeFileMeta?: boolean;
44
+ /**
45
+ * Is the wrapper round?
46
+ */
14
47
  round?: boolean;
48
+ /**
49
+ * Define the properties that are returned on file(s) selection.
50
+ * @deprecated Pick the desired file attributes in the `onChange` callback, or `beforeChange` on the `<Bind>` element.
51
+ */
15
52
  onChangePick?: string[];
16
53
  }
17
- export default class SingleImageUpload extends React.Component<SingleImageUploadProps> {
18
- render(): JSX.Element;
19
- }
54
+ declare const SingleImageUpload: React.FC<SingleImageUploadProps>;
55
+ export default SingleImageUpload;
@@ -1,22 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
4
 
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
10
  exports.default = void 0;
11
11
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
19
-
20
12
  var React = _interopRequireWildcard(require("react"));
21
13
 
22
14
  var _Image = require("@webiny/app/components/Image");
@@ -49,71 +41,74 @@ var ImageUploadWrapper = /*#__PURE__*/(0, _styled.default)("div", {
49
41
  }
50
42
  });
51
43
 
52
- var SingleImageUpload = /*#__PURE__*/function (_React$Component) {
53
- (0, _inherits2.default)(SingleImageUpload, _React$Component);
44
+ var SingleImageUpload = function SingleImageUpload(props) {
45
+ var className = props.className,
46
+ value = props.value,
47
+ validation = props.validation,
48
+ label = props.label,
49
+ description = props.description,
50
+ accept = props.accept,
51
+ _props$includeFileMet = props.includeFileMeta,
52
+ includeFileMeta = _props$includeFileMet === void 0 ? false : _props$includeFileMet,
53
+ maxSize = props.maxSize,
54
+ imagePreviewProps = props.imagePreviewProps,
55
+ round = props.round;
56
+
57
+ var _ref = validation || {},
58
+ validationIsValid = _ref.isValid,
59
+ validationMessage = _ref.message;
60
+
61
+ var onChange = (0, React.useCallback)(function (value) {
62
+ if (!props.onChange) {
63
+ return;
64
+ }
54
65
 
55
- var _super = (0, _createSuper2.default)(SingleImageUpload);
66
+ if (value && !includeFileMeta) {
67
+ props.onChange({
68
+ id: value.id,
69
+ src: value.src
70
+ });
71
+ return;
72
+ }
56
73
 
57
- function SingleImageUpload() {
58
- (0, _classCallCheck2.default)(this, SingleImageUpload);
59
- return _super.apply(this, arguments);
60
- }
74
+ if (value && includeFileMeta) {
75
+ props.onChange(value);
76
+ return;
77
+ }
61
78
 
62
- (0, _createClass2.default)(SingleImageUpload, [{
63
- key: "render",
64
- value: function render() {
65
- var _this$props = this.props,
66
- className = _this$props.className,
67
- onChange = _this$props.onChange,
68
- value = _this$props.value,
69
- validation = _this$props.validation,
70
- label = _this$props.label,
71
- description = _this$props.description,
72
- accept = _this$props.accept,
73
- onChangePick = _this$props.onChangePick,
74
- maxSize = _this$props.maxSize,
75
- multipleMaxCount = _this$props.multipleMaxCount,
76
- multipleMaxSize = _this$props.multipleMaxSize,
77
- imagePreviewProps = _this$props.imagePreviewProps,
78
- round = _this$props.round;
79
-
80
- var _ref = validation || {},
81
- validationIsValid = _ref.isValid,
82
- validationMessage = _ref.message;
83
-
84
- return /*#__PURE__*/React.createElement(ImageUploadWrapper, {
85
- className: className
86
- }, label && /*#__PURE__*/React.createElement("div", {
87
- className: "mdc-floating-label mdc-floating-label--float-above"
88
- }, label), /*#__PURE__*/React.createElement(_FileManager.FileManager, {
89
- onChange: onChange,
90
- onChangePick: onChangePick,
91
- accept: accept,
92
- images: !accept,
93
- maxSize: maxSize,
94
- multipleMaxCount: multipleMaxCount,
95
- multipleMaxSize: multipleMaxSize
96
- }, function (_ref2) {
97
- var showFileManager = _ref2.showFileManager;
98
- return /*#__PURE__*/React.createElement(Ui.Image, {
99
- renderImagePreview: function renderImagePreview(renderImageProps) {
100
- return /*#__PURE__*/React.createElement(_Image.Image, Object.assign({}, renderImageProps, imagePreviewProps));
101
- },
102
- style: {
103
- width: "100%",
104
- height: "auto"
105
- },
106
- value: value,
107
- uploadImage: showFileManager,
108
- removeImage: onChange,
109
- round: round
110
- });
111
- }), validationIsValid === false && /*#__PURE__*/React.createElement(_FormElementMessage.FormElementMessage, {
112
- error: true
113
- }, validationMessage), validationIsValid !== false && description && /*#__PURE__*/React.createElement(_FormElementMessage.FormElementMessage, null, description));
79
+ props.onChange(null);
80
+ }, [props.onChange]);
81
+ return /*#__PURE__*/React.createElement(ImageUploadWrapper, {
82
+ className: className
83
+ }, label && /*#__PURE__*/React.createElement("div", {
84
+ className: "mdc-floating-label mdc-floating-label--float-above"
85
+ }, label), /*#__PURE__*/React.createElement(_FileManager.FileManager, {
86
+ onChange: onChange,
87
+ accept: accept,
88
+ images: !accept,
89
+ maxSize: maxSize,
90
+ render: function render(_ref2) {
91
+ var showFileManager = _ref2.showFileManager;
92
+ return /*#__PURE__*/React.createElement(Ui.Image, {
93
+ renderImagePreview: function renderImagePreview(renderImageProps) {
94
+ return /*#__PURE__*/React.createElement(_Image.Image, Object.assign({}, renderImageProps, imagePreviewProps));
95
+ },
96
+ style: {
97
+ width: "100%",
98
+ height: "auto"
99
+ },
100
+ value: value,
101
+ uploadImage: showFileManager,
102
+ removeImage: function removeImage() {
103
+ return onChange(null);
104
+ },
105
+ round: round
106
+ });
114
107
  }
115
- }]);
116
- return SingleImageUpload;
117
- }(React.Component);
108
+ }), validationIsValid === false && /*#__PURE__*/React.createElement(_FormElementMessage.FormElementMessage, {
109
+ error: true
110
+ }, validationMessage), validationIsValid !== false && description && /*#__PURE__*/React.createElement(_FormElementMessage.FormElementMessage, null, description));
111
+ };
118
112
 
119
- exports.default = SingleImageUpload;
113
+ var _default = SingleImageUpload;
114
+ exports.default = _default;