@atlaskit/media-client 16.0.0 → 17.1.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 (87) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/cjs/client/collection-fetcher.js +4 -4
  3. package/dist/cjs/client/file-fetcher/index.js +5 -9
  4. package/dist/cjs/client/media-store/index.js +49 -32
  5. package/dist/cjs/constants.js +11 -2
  6. package/dist/cjs/index.js +2 -2
  7. package/dist/cjs/models/media.js +10 -2
  8. package/dist/cjs/uploader/calculateChunkSize.js +45 -0
  9. package/dist/cjs/uploader/error.js +67 -0
  10. package/dist/cjs/uploader/index.js +318 -0
  11. package/dist/cjs/utils/{toMediaSubscribable.js → mediaSubscribable/fromObservable.js} +4 -4
  12. package/dist/cjs/utils/mediaSubscribable/index.js +27 -0
  13. package/dist/cjs/utils/{mediaSubscribableToPromise.js → mediaSubscribable/toPromise.js} +3 -3
  14. package/dist/cjs/utils/mediaSubscribable/types.js +5 -0
  15. package/dist/cjs/utils/request/errors.js +4 -0
  16. package/dist/cjs/utils/request/helpers.js +14 -3
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/client/collection-fetcher.js +2 -2
  19. package/dist/es2019/client/file-fetcher/index.js +5 -6
  20. package/dist/es2019/client/media-store/index.js +30 -18
  21. package/dist/es2019/constants.js +5 -1
  22. package/dist/es2019/index.js +1 -1
  23. package/dist/es2019/models/media.js +8 -1
  24. package/dist/es2019/uploader/calculateChunkSize.js +32 -0
  25. package/dist/es2019/uploader/error.js +30 -0
  26. package/dist/es2019/{uploader.js → uploader/index.js} +47 -10
  27. package/dist/es2019/utils/{toMediaSubscribable.js → mediaSubscribable/fromObservable.js} +3 -3
  28. package/dist/es2019/utils/mediaSubscribable/index.js +2 -0
  29. package/dist/es2019/utils/{mediaSubscribableToPromise.js → mediaSubscribable/toPromise.js} +1 -1
  30. package/dist/es2019/utils/mediaSubscribable/types.js +1 -0
  31. package/dist/es2019/utils/request/errors.js +4 -0
  32. package/dist/es2019/utils/request/helpers.js +14 -0
  33. package/dist/es2019/version.json +1 -1
  34. package/dist/esm/client/collection-fetcher.js +3 -3
  35. package/dist/esm/client/file-fetcher/index.js +6 -9
  36. package/dist/esm/client/media-client.js +1 -1
  37. package/dist/esm/client/media-store/index.js +50 -33
  38. package/dist/esm/client/media-store/resolveAuth.js +1 -1
  39. package/dist/esm/client/stargate-client.js +1 -1
  40. package/dist/esm/constants.js +5 -1
  41. package/dist/esm/index.js +1 -1
  42. package/dist/esm/models/media.js +8 -1
  43. package/dist/esm/uploader/calculateChunkSize.js +32 -0
  44. package/dist/esm/uploader/error.js +51 -0
  45. package/dist/esm/uploader/index.js +298 -0
  46. package/dist/esm/utils/createFileDataLoader.js +1 -1
  47. package/dist/esm/utils/getDimensionsFromBlob.js +1 -1
  48. package/dist/esm/utils/getVideoDimensionsFromBlob.js +1 -1
  49. package/dist/esm/utils/hashing/hasherCreator.js +1 -1
  50. package/dist/esm/utils/{toMediaSubscribable.js → mediaSubscribable/fromObservable.js} +3 -3
  51. package/dist/esm/utils/mediaSubscribable/index.js +2 -0
  52. package/dist/esm/utils/{mediaSubscribableToPromise.js → mediaSubscribable/toPromise.js} +1 -1
  53. package/dist/esm/utils/mediaSubscribable/types.js +1 -0
  54. package/dist/esm/utils/mobileUpload/helpers.js +1 -1
  55. package/dist/esm/utils/mobileUpload/stateMachine/index.js +1 -1
  56. package/dist/esm/utils/polling/index.js +1 -1
  57. package/dist/esm/utils/request/errors.js +4 -0
  58. package/dist/esm/utils/request/helpers.js +13 -4
  59. package/dist/esm/utils/request/index.js +1 -1
  60. package/dist/esm/utils/shouldFetchRemoteFileStates.js +1 -1
  61. package/dist/esm/version.json +1 -1
  62. package/dist/types/client/collection-fetcher.d.ts +1 -1
  63. package/dist/types/client/file-fetcher/index.d.ts +1 -1
  64. package/dist/types/client/media-store/index.d.ts +9 -2
  65. package/dist/types/constants.d.ts +3 -0
  66. package/dist/types/index.d.ts +2 -2
  67. package/dist/types/models/errors/types.d.ts +1 -1
  68. package/dist/types/models/media.d.ts +5 -0
  69. package/dist/types/uploader/calculateChunkSize.d.ts +11 -0
  70. package/dist/types/uploader/error.d.ts +29 -0
  71. package/dist/types/{uploader.d.ts → uploader/index.d.ts} +2 -2
  72. package/dist/types/utils/mediaSubscribable/fromObservable.d.ts +5 -0
  73. package/dist/types/utils/mediaSubscribable/index.d.ts +3 -0
  74. package/dist/types/utils/{mediaSubscribableToPromise.d.ts → mediaSubscribable/toPromise.d.ts} +3 -3
  75. package/dist/types/utils/mediaSubscribable/types.d.ts +16 -0
  76. package/dist/types/utils/request/errors.d.ts +2 -0
  77. package/dist/types/utils/request/helpers.d.ts +4 -0
  78. package/dist/types/utils/request/types.d.ts +2 -0
  79. package/dist/types/utils/safeUnsubscribe.d.ts +1 -1
  80. package/example-helpers/styles.ts +99 -0
  81. package/example-helpers/stylesWrapper.tsx +82 -0
  82. package/package.json +7 -6
  83. package/report.api.md +1389 -0
  84. package/dist/cjs/uploader.js +0 -210
  85. package/dist/esm/uploader.js +0 -194
  86. package/dist/types/utils/toMediaSubscribable.d.ts +0 -20
  87. package/example-helpers/styled.ts +0 -77
@@ -1,210 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.uploadFile = void 0;
9
-
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
- var _chunkinator = require("@atlaskit/chunkinator");
15
-
16
- var _from = require("rxjs/observable/from");
17
-
18
- var _concatMap = require("rxjs/operators/concatMap");
19
-
20
- var _hasherCreator = require("./utils/hashing/hasherCreator");
21
-
22
- var hashingFunction = /*#__PURE__*/function () {
23
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(blob) {
24
- var hasher;
25
- return _regenerator.default.wrap(function _callee$(_context) {
26
- while (1) {
27
- switch (_context.prev = _context.next) {
28
- case 0:
29
- _context.next = 2;
30
- return (0, _hasherCreator.createHasher)();
31
-
32
- case 2:
33
- hasher = _context.sent;
34
- return _context.abrupt("return", hasher.hash(blob));
35
-
36
- case 4:
37
- case "end":
38
- return _context.stop();
39
- }
40
- }
41
- }, _callee);
42
- }));
43
-
44
- return function hashingFunction(_x) {
45
- return _ref.apply(this, arguments);
46
- };
47
- }();
48
-
49
- var createProbingFunction = function createProbingFunction(store, collection) {
50
- return /*#__PURE__*/function () {
51
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(chunks) {
52
- var response, results;
53
- return _regenerator.default.wrap(function _callee2$(_context2) {
54
- while (1) {
55
- switch (_context2.prev = _context2.next) {
56
- case 0:
57
- _context2.next = 2;
58
- return store.probeChunks(hashedChunks(chunks), collection);
59
-
60
- case 2:
61
- response = _context2.sent;
62
- results = response.data.results;
63
- return _context2.abrupt("return", Object.values(results).map(function (result) {
64
- return result.exists;
65
- }));
66
-
67
- case 5:
68
- case "end":
69
- return _context2.stop();
70
- }
71
- }
72
- }, _callee2);
73
- }));
74
-
75
- return function (_x2) {
76
- return _ref2.apply(this, arguments);
77
- };
78
- }();
79
- };
80
-
81
- var createUploadingFunction = function createUploadingFunction(store, collection) {
82
- return function (chunk) {
83
- return store.uploadChunk(chunk.hash, chunk.blob, collection);
84
- };
85
- };
86
-
87
- var createProcessingFunction = function createProcessingFunction(store, deferredUploadId, collection) {
88
- var offset = 0;
89
- return /*#__PURE__*/function () {
90
- var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(chunks) {
91
- return _regenerator.default.wrap(function _callee3$(_context3) {
92
- while (1) {
93
- switch (_context3.prev = _context3.next) {
94
- case 0:
95
- _context3.t0 = store;
96
- _context3.next = 3;
97
- return deferredUploadId;
98
-
99
- case 3:
100
- _context3.t1 = _context3.sent;
101
- _context3.t2 = {
102
- chunks: hashedChunks(chunks),
103
- offset: offset
104
- };
105
- _context3.t3 = collection;
106
- _context3.next = 8;
107
- return _context3.t0.appendChunksToUpload.call(_context3.t0, _context3.t1, _context3.t2, _context3.t3);
108
-
109
- case 8:
110
- offset += chunks.length;
111
-
112
- case 9:
113
- case "end":
114
- return _context3.stop();
115
- }
116
- }
117
- }, _callee3);
118
- }));
119
-
120
- return function (_x3) {
121
- return _ref3.apply(this, arguments);
122
- };
123
- }();
124
- };
125
-
126
- var createFileFromUpload = /*#__PURE__*/function () {
127
- var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(file, store, uploadableFileUpfrontIds, uploadId) {
128
- var collection, name, mimeType, id, occurrenceKey;
129
- return _regenerator.default.wrap(function _callee4$(_context4) {
130
- while (1) {
131
- switch (_context4.prev = _context4.next) {
132
- case 0:
133
- collection = file.collection, name = file.name, mimeType = file.mimeType;
134
- id = uploadableFileUpfrontIds.id, occurrenceKey = uploadableFileUpfrontIds.occurrenceKey;
135
- return _context4.abrupt("return", store.createFileFromUpload({
136
- uploadId: uploadId,
137
- name: name,
138
- mimeType: mimeType
139
- }, {
140
- occurrenceKey: occurrenceKey,
141
- collection: collection,
142
- replaceFileId: id
143
- }));
144
-
145
- case 3:
146
- case "end":
147
- return _context4.stop();
148
- }
149
- }
150
- }, _callee4);
151
- }));
152
-
153
- return function createFileFromUpload(_x4, _x5, _x6, _x7) {
154
- return _ref4.apply(this, arguments);
155
- };
156
- }();
157
-
158
- var uploadFile = function uploadFile(file, store, uploadableFileUpfrontIds, callbacks) {
159
- var chunkSize = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 4 * 1024 * 1024;
160
- var processingBatchSize = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1000;
161
- var content = file.content,
162
- collection = file.collection;
163
- var deferredUploadId = uploadableFileUpfrontIds.deferredUploadId;
164
- var chunkinatorObservable = (0, _chunkinator.chunkinator)(content, {
165
- hashingFunction: hashingFunction,
166
- hashingConcurrency: 5,
167
- probingBatchSize: 100,
168
- chunkSize: chunkSize,
169
- uploadingConcurrency: 3,
170
- uploadingFunction: createUploadingFunction(store, collection),
171
- probingFunction: createProbingFunction(store, collection),
172
- processingBatchSize: processingBatchSize,
173
- processingFunction: createProcessingFunction(store, deferredUploadId, collection)
174
- }, {
175
- onProgress: function onProgress(progress) {
176
- if (callbacks) {
177
- callbacks.onProgress(progress);
178
- }
179
- }
180
- });
181
-
182
- var onUploadFinish = callbacks && callbacks.onUploadFinish || function () {};
183
-
184
- var subscription = (0, _from.from)(deferredUploadId).pipe((0, _concatMap.concatMap)(function (uploadId) {
185
- return chunkinatorObservable.pipe((0, _concatMap.concatMap)(function () {
186
- return (0, _from.from)(createFileFromUpload(file, store, uploadableFileUpfrontIds, uploadId));
187
- }));
188
- })).subscribe({
189
- error: function error(err) {
190
- return onUploadFinish(err);
191
- },
192
- complete: function complete() {
193
- return onUploadFinish();
194
- }
195
- });
196
- return {
197
- cancel: function cancel() {
198
- subscription.unsubscribe();
199
- onUploadFinish('canceled');
200
- }
201
- };
202
- };
203
-
204
- exports.uploadFile = uploadFile;
205
-
206
- var hashedChunks = function hashedChunks(chunks) {
207
- return chunks.map(function (chunk) {
208
- return chunk.hash;
209
- });
210
- };
@@ -1,194 +0,0 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import { chunkinator } from '@atlaskit/chunkinator';
4
- import { from } from 'rxjs/observable/from';
5
- import { concatMap } from 'rxjs/operators/concatMap';
6
- import { createHasher } from './utils/hashing/hasherCreator'; // TODO: Allow to pass multiple files
7
-
8
- var hashingFunction = /*#__PURE__*/function () {
9
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(blob) {
10
- var hasher;
11
- return _regeneratorRuntime.wrap(function _callee$(_context) {
12
- while (1) {
13
- switch (_context.prev = _context.next) {
14
- case 0:
15
- _context.next = 2;
16
- return createHasher();
17
-
18
- case 2:
19
- hasher = _context.sent;
20
- return _context.abrupt("return", hasher.hash(blob));
21
-
22
- case 4:
23
- case "end":
24
- return _context.stop();
25
- }
26
- }
27
- }, _callee);
28
- }));
29
-
30
- return function hashingFunction(_x) {
31
- return _ref.apply(this, arguments);
32
- };
33
- }();
34
-
35
- var createProbingFunction = function createProbingFunction(store, collection) {
36
- return /*#__PURE__*/function () {
37
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(chunks) {
38
- var response, results;
39
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
40
- while (1) {
41
- switch (_context2.prev = _context2.next) {
42
- case 0:
43
- _context2.next = 2;
44
- return store.probeChunks(hashedChunks(chunks), collection);
45
-
46
- case 2:
47
- response = _context2.sent;
48
- results = response.data.results;
49
- return _context2.abrupt("return", Object.values(results).map(function (result) {
50
- return result.exists;
51
- }));
52
-
53
- case 5:
54
- case "end":
55
- return _context2.stop();
56
- }
57
- }
58
- }, _callee2);
59
- }));
60
-
61
- return function (_x2) {
62
- return _ref2.apply(this, arguments);
63
- };
64
- }();
65
- };
66
-
67
- var createUploadingFunction = function createUploadingFunction(store, collection) {
68
- return function (chunk) {
69
- return store.uploadChunk(chunk.hash, chunk.blob, collection);
70
- };
71
- };
72
-
73
- var createProcessingFunction = function createProcessingFunction(store, deferredUploadId, collection) {
74
- var offset = 0;
75
- return /*#__PURE__*/function () {
76
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
77
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
78
- while (1) {
79
- switch (_context3.prev = _context3.next) {
80
- case 0:
81
- _context3.t0 = store;
82
- _context3.next = 3;
83
- return deferredUploadId;
84
-
85
- case 3:
86
- _context3.t1 = _context3.sent;
87
- _context3.t2 = {
88
- chunks: hashedChunks(chunks),
89
- offset: offset
90
- };
91
- _context3.t3 = collection;
92
- _context3.next = 8;
93
- return _context3.t0.appendChunksToUpload.call(_context3.t0, _context3.t1, _context3.t2, _context3.t3);
94
-
95
- case 8:
96
- offset += chunks.length;
97
-
98
- case 9:
99
- case "end":
100
- return _context3.stop();
101
- }
102
- }
103
- }, _callee3);
104
- }));
105
-
106
- return function (_x3) {
107
- return _ref3.apply(this, arguments);
108
- };
109
- }();
110
- };
111
-
112
- var createFileFromUpload = /*#__PURE__*/function () {
113
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(file, store, uploadableFileUpfrontIds, uploadId) {
114
- var collection, name, mimeType, id, occurrenceKey;
115
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
116
- while (1) {
117
- switch (_context4.prev = _context4.next) {
118
- case 0:
119
- collection = file.collection, name = file.name, mimeType = file.mimeType;
120
- id = uploadableFileUpfrontIds.id, occurrenceKey = uploadableFileUpfrontIds.occurrenceKey;
121
- return _context4.abrupt("return", store.createFileFromUpload({
122
- uploadId: uploadId,
123
- name: name,
124
- mimeType: mimeType
125
- }, {
126
- occurrenceKey: occurrenceKey,
127
- collection: collection,
128
- replaceFileId: id
129
- }));
130
-
131
- case 3:
132
- case "end":
133
- return _context4.stop();
134
- }
135
- }
136
- }, _callee4);
137
- }));
138
-
139
- return function createFileFromUpload(_x4, _x5, _x6, _x7) {
140
- return _ref4.apply(this, arguments);
141
- };
142
- }();
143
-
144
- export var uploadFile = function uploadFile(file, store, uploadableFileUpfrontIds, callbacks) {
145
- var chunkSize = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 4 * 1024 * 1024;
146
- var processingBatchSize = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1000;
147
- var content = file.content,
148
- collection = file.collection;
149
- var deferredUploadId = uploadableFileUpfrontIds.deferredUploadId;
150
- var chunkinatorObservable = chunkinator(content, {
151
- hashingFunction: hashingFunction,
152
- hashingConcurrency: 5,
153
- probingBatchSize: 100,
154
- chunkSize: chunkSize,
155
- uploadingConcurrency: 3,
156
- uploadingFunction: createUploadingFunction(store, collection),
157
- probingFunction: createProbingFunction(store, collection),
158
- processingBatchSize: processingBatchSize,
159
- processingFunction: createProcessingFunction(store, deferredUploadId, collection)
160
- }, {
161
- onProgress: function onProgress(progress) {
162
- if (callbacks) {
163
- callbacks.onProgress(progress);
164
- }
165
- }
166
- });
167
-
168
- var onUploadFinish = callbacks && callbacks.onUploadFinish || function () {};
169
-
170
- var subscription = from(deferredUploadId).pipe(concatMap(function (uploadId) {
171
- return chunkinatorObservable.pipe(concatMap(function () {
172
- return from(createFileFromUpload(file, store, uploadableFileUpfrontIds, uploadId));
173
- }));
174
- })).subscribe({
175
- error: function error(err) {
176
- return onUploadFinish(err);
177
- },
178
- complete: function complete() {
179
- return onUploadFinish();
180
- }
181
- });
182
- return {
183
- cancel: function cancel() {
184
- subscription.unsubscribe();
185
- onUploadFinish('canceled');
186
- }
187
- };
188
- };
189
-
190
- var hashedChunks = function hashedChunks(chunks) {
191
- return chunks.map(function (chunk) {
192
- return chunk.hash;
193
- });
194
- };
@@ -1,20 +0,0 @@
1
- import { ReplaySubject } from 'rxjs/ReplaySubject';
2
- import { MediaSubscribableItem } from './../models/media-subscribable';
3
- export declare type MediaSubscription = {
4
- unsubscribe: () => void;
5
- };
6
- declare type PartialObserver<T extends MediaSubscribableItem> = {
7
- next?: (value: T) => void;
8
- error?: (err: any) => void;
9
- complete?: () => void;
10
- };
11
- declare type NextObserver<T extends MediaSubscribableItem> = PartialObserver<T> & Required<Pick<PartialObserver<T>, 'next'>>;
12
- declare type ErrorObserver<T extends MediaSubscribableItem> = PartialObserver<T> & Required<Pick<PartialObserver<T>, 'error'>>;
13
- declare type CompletionObserver<T extends MediaSubscribableItem> = PartialObserver<T> & Required<Pick<PartialObserver<T>, 'complete'>>;
14
- export declare type MediaObserver<T extends MediaSubscribableItem> = NextObserver<T> | ErrorObserver<T> | CompletionObserver<T> | ((value: T) => void);
15
- export declare type MediaSubscribable<T extends MediaSubscribableItem> = {
16
- subscribe(observer?: MediaObserver<T>): MediaSubscription;
17
- };
18
- export declare function toMediaSubscribable<T extends MediaSubscribableItem>(observable: ReplaySubject<T>): MediaSubscribable<T>;
19
- export declare function createMediaSubscribable<T extends MediaSubscribableItem>(mediaSubscribableItem?: T | Error): MediaSubscribable<T>;
20
- export {};
@@ -1,77 +0,0 @@
1
- import styled from 'styled-components';
2
- import { FileStatus } from '../src';
3
-
4
- export const Wrapper: React.ComponentClass<React.HTMLAttributes<{}>> = styled.div`
5
- display: flex;
6
- `;
7
-
8
- export const ImagePreview: React.ComponentClass<React.ImgHTMLAttributes<{}>> = styled.img`
9
- width: 300px;
10
- `;
11
-
12
- export const PreviewWrapper: React.ComponentClass<React.HTMLAttributes<{}>> = styled.div`
13
- flex: 1;
14
- `;
15
-
16
- export const MetadataWrapper: React.ComponentClass<React.HTMLAttributes<{}>> = styled.pre`
17
- width: 400px;
18
- overflow: scroll;
19
- flex: 1;
20
- `;
21
-
22
- export const FileInput: any = styled.input`
23
- color: transparent;
24
- `;
25
-
26
- export const FilesWrapper = styled.div``;
27
-
28
- export interface FilesWrapperProps {
29
- status: FileStatus;
30
- }
31
-
32
- const statusColorMap: { [key in FileStatus]: string } = {
33
- uploading: 'cornflowerblue',
34
- processing: 'peachpuff',
35
- processed: 'darkseagreen',
36
- error: 'indianred',
37
- 'failed-processing': 'indianred',
38
- };
39
-
40
- export const FileWrapper = styled.div`
41
- padding: 5px;
42
- margin: 10px;
43
- display: inline-block;
44
- width: 315px;
45
- background-color: ${({ status }: FilesWrapperProps) =>
46
- statusColorMap[status]};
47
- `;
48
-
49
- export const CardsWrapper = styled.div`
50
- width: 900px;
51
- padding: 10px;
52
- border-right: 1px solid #ccc;
53
-
54
- h1 {
55
- text-align: center;
56
- border-bottom: 1px solid #ccc;
57
- }
58
-
59
- > div {
60
- width: auto;
61
- display: inline-block;
62
- margin: 10px;
63
- }
64
- `;
65
-
66
- export const Header = styled.div`
67
- button {
68
- margin: 5px;
69
- }
70
- `;
71
-
72
- export const FileStateWrapper = styled.div`
73
- border: 1px solid;
74
- margin: 10px;
75
- padding: 10px;
76
- width: 500px;
77
- `;