@itcase/ui 1.9.52 → 1.9.53

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 (127) hide show
  1. package/dist/{Avatar_cjs_CvbURI0f.js → Avatar_cjs_BIHJrAbQ.js} +1 -1
  2. package/dist/{Avatar_es_CV-ffIJu.js → Avatar_es_CtP68jPM.js} +1 -1
  3. package/dist/{Button_cjs_BSfL-20W.js → Button_cjs_B8cIJYbm.js} +6 -6
  4. package/dist/{Button_es_Dk6_9N-r.js → Button_es_DQGp8Ipn.js} +6 -6
  5. package/dist/{ChipsGroup_cjs_CE-nNENH.js → ChipsGroup_cjs_C27x9x9O.js} +1 -1
  6. package/dist/{ChipsGroup_es_CxqwFgoo.js → ChipsGroup_es_BTe1MYhV.js} +1 -1
  7. package/dist/{DatePicker_cjs_BJzVpk0o.js → DatePicker_cjs_CY5UAP1l.js} +3 -3
  8. package/dist/{DatePicker_es_BP0iWHMt.js → DatePicker_es_Cze2Bv6w.js} +3 -3
  9. package/dist/{DropdownItem_cjs_pJblsTmA.js → DropdownItem_cjs_k28TIoDU.js} +1 -1
  10. package/dist/{DropdownItem_es_Xq7G5-UI.js → DropdownItem_es_DjPgbwtU.js} +1 -1
  11. package/dist/{Icon_cjs_CuqEv1jm.js → Icon_cjs_DTvdhr8B.js} +33 -4
  12. package/dist/{Icon_es_BYViOa6l.js → Icon_es_kewxGRUB.js} +33 -4
  13. package/dist/{Label_cjs_DsuCRIyo.js → Label_cjs_RI5tFcPt.js} +1 -1
  14. package/dist/{Label_es_BPQhW13g.js → Label_es_CNRTIAWo.js} +1 -1
  15. package/dist/{Loader_cjs_DMIUN6_q.js → Loader_cjs_CJpdLndn.js} +19 -4
  16. package/dist/{Loader_es_DLb2P-Sk.js → Loader_es_CqlLujBJ.js} +19 -4
  17. package/dist/{SelectContainer_cjs_qWAMLIkz.js → SelectContainer_cjs_DXYUcpco.js} +2 -2
  18. package/dist/{SelectContainer_es_kRH4DsEh.js → SelectContainer_es_De_XL0im.js} +2 -2
  19. package/dist/cjs/components/Accordion.js +2 -2
  20. package/dist/cjs/components/Avatar.js +6 -5
  21. package/dist/cjs/components/AvatarStack.js +3 -3
  22. package/dist/cjs/components/Badge.js +6 -5
  23. package/dist/cjs/components/Breadcrumbs.js +2 -1
  24. package/dist/cjs/components/Button.js +8 -8
  25. package/dist/cjs/components/Cell.js +3 -3
  26. package/dist/cjs/components/Checkmark.js +4 -3
  27. package/dist/cjs/components/Chips.js +5 -4
  28. package/dist/cjs/components/Choice.js +4 -3
  29. package/dist/cjs/components/CookiesWarning.js +7 -7
  30. package/dist/cjs/components/DatePeriod.js +8 -8
  31. package/dist/cjs/components/DatePicker.js +10 -10
  32. package/dist/cjs/components/Drawer.js +3 -2
  33. package/dist/cjs/components/Dropdown.js +5 -4
  34. package/dist/cjs/components/Dropzone.js +1751 -0
  35. package/dist/cjs/components/HeroTitle.js +4 -3
  36. package/dist/cjs/components/Icon.js +6 -5
  37. package/dist/cjs/components/InputNumber.js +8 -8
  38. package/dist/cjs/components/InputPassword.js +5 -4
  39. package/dist/cjs/components/Label.js +5 -4
  40. package/dist/cjs/components/Loader.js +2 -2
  41. package/dist/cjs/components/MenuItem.js +2 -1
  42. package/dist/cjs/components/Modal.js +4 -4
  43. package/dist/cjs/components/ModalSheetBottom.js +4 -3
  44. package/dist/cjs/components/Notification.js +12 -12
  45. package/dist/cjs/components/Pagination.js +4 -3
  46. package/dist/cjs/components/Response.js +5 -5
  47. package/dist/cjs/components/Search.js +3 -2
  48. package/dist/cjs/components/Segmented.js +5 -4
  49. package/dist/cjs/components/Select.js +4 -4
  50. package/dist/cjs/components/Swiper.js +3 -2
  51. package/dist/cjs/components/Tab.js +1 -1
  52. package/dist/cjs/components/Tile.js +2 -2
  53. package/dist/cjs/components/Title.js +6 -5
  54. package/dist/cjs/components/Tooltip.js +6 -5
  55. package/dist/cjs/components/Warning.js +3 -2
  56. package/dist/cjs/hooks/useDropzoneFieldFiles.js +20769 -0
  57. package/dist/components/Accordion.js +2 -2
  58. package/dist/components/Avatar.js +6 -5
  59. package/dist/components/AvatarStack.js +3 -3
  60. package/dist/components/Badge.js +6 -5
  61. package/dist/components/Breadcrumbs.js +2 -1
  62. package/dist/components/Button.js +8 -8
  63. package/dist/components/Cell.js +3 -3
  64. package/dist/components/Checkmark.js +4 -3
  65. package/dist/components/Chips.js +5 -4
  66. package/dist/components/Choice.js +4 -3
  67. package/dist/components/CookiesWarning.js +7 -7
  68. package/dist/components/DatePeriod.js +8 -8
  69. package/dist/components/DatePicker.js +10 -10
  70. package/dist/components/Drawer.js +3 -2
  71. package/dist/components/Dropdown.js +5 -4
  72. package/dist/components/Dropzone.js +1749 -0
  73. package/dist/components/HeroTitle.js +4 -3
  74. package/dist/components/Icon.js +6 -5
  75. package/dist/components/InputNumber.js +8 -8
  76. package/dist/components/InputPassword.js +5 -4
  77. package/dist/components/Label.js +5 -4
  78. package/dist/components/Loader.js +2 -2
  79. package/dist/components/MenuItem.js +2 -1
  80. package/dist/components/Modal.js +4 -4
  81. package/dist/components/ModalSheetBottom.js +4 -3
  82. package/dist/components/Notification.js +12 -12
  83. package/dist/components/Pagination.js +4 -3
  84. package/dist/components/Response.js +5 -5
  85. package/dist/components/Search.js +3 -2
  86. package/dist/components/Segmented.js +5 -4
  87. package/dist/components/Select.js +4 -4
  88. package/dist/components/Swiper.js +3 -2
  89. package/dist/components/Tab.js +1 -1
  90. package/dist/components/Tile.js +2 -2
  91. package/dist/components/Title.js +6 -5
  92. package/dist/components/Tooltip.js +6 -5
  93. package/dist/components/Warning.js +3 -2
  94. package/dist/css/styles/bundles.css +338 -110
  95. package/dist/hooks/useDropzoneFieldFiles.js +20767 -0
  96. package/dist/stories/DropzoneOverview.mdx +11 -0
  97. package/dist/stories/DropzonePlayground.mdx +10 -0
  98. package/dist/types/components/Button/Button.d.ts +3 -2
  99. package/dist/types/components/Button/Button.interface.d.ts +4 -4
  100. package/dist/types/components/Button/stories/ButtonDefault.stories.d.ts +3 -2
  101. package/dist/types/components/Button/stories/ButtonDemo.stories.d.ts +3 -2
  102. package/dist/types/components/Button/stories/ButtonIcon.stories.d.ts +3 -2
  103. package/dist/types/components/Button/stories/ButtonLabel.stories.d.ts +3 -2
  104. package/dist/types/components/Button/stories/ButtonLoading.stories.d.ts +3 -2
  105. package/dist/types/components/Button/stories/ButtonMuted.stories.d.ts +3 -2
  106. package/dist/types/components/Button/stories/ButtonMutedIcon.stories.d.ts +3 -2
  107. package/dist/types/components/Button/stories/ButtonShape.stories.d.ts +3 -2
  108. package/dist/types/components/Button/stories/ButtonSize.stories.d.ts +3 -2
  109. package/dist/types/components/Dropzone/Dropzone.appearance.d.ts +3 -0
  110. package/dist/types/components/Dropzone/Dropzone.d.ts +4 -0
  111. package/dist/types/components/Dropzone/Dropzone.interface.d.ts +82 -0
  112. package/dist/types/components/Dropzone/appearance/dropzoneDefault.d.ts +3 -0
  113. package/dist/types/components/Dropzone/appearance/dropzoneDisabled.d.ts +3 -0
  114. package/dist/types/components/Dropzone/appearance/dropzoneError.d.ts +3 -0
  115. package/dist/types/components/Dropzone/appearance/dropzoneRequire.d.ts +3 -0
  116. package/dist/types/components/Dropzone/appearance/dropzoneShape.d.ts +3 -0
  117. package/dist/types/components/Dropzone/appearance/dropzoneSuccess.d.ts +3 -0
  118. package/dist/types/components/Dropzone/index.d.ts +1 -0
  119. package/dist/types/components/Dropzone/stories/DropzoneDefault.stories.d.ts +42 -0
  120. package/dist/types/components/Dropzone/stories/DropzoneDemo.stories.d.ts +19 -0
  121. package/dist/types/components/Icon/Icon.interface.d.ts +3 -2
  122. package/dist/types/components/Loader/Loader.interface.d.ts +1 -1
  123. package/dist/types/components/Loader/stories/LoaderAppearance.stories.d.ts +3 -0
  124. package/dist/types/components/Loader/stories/LoaderText.stories.d.ts +25 -0
  125. package/dist/types/components/Loader/stories/LoaderType.stories.d.ts +25 -0
  126. package/dist/types/hooks/useDropzoneFieldFiles.d.ts +14 -0
  127. package/package.json +7 -6
@@ -0,0 +1,1749 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React, { useMemo, useCallback, useEffect } from 'react';
3
+ import clsx from 'clsx';
4
+ import { useDropzone, ErrorCode } from 'react-dropzone';
5
+ import { B as Button } from '../Button_es_DQGp8Ipn.js';
6
+ import { L as Loader } from '../Loader_es_CqlLujBJ.js';
7
+ import { T as Text } from '../Text_es_DVNvU0m0.js';
8
+ import { useAppearanceConfig } from '../hooks/useAppearanceConfig/useAppearanceConfig.js';
9
+ import { useDevicePropsGenerator } from '../hooks/useDevicePropsGenerator/useDevicePropsGenerator.js';
10
+ import { useDropzoneFieldFiles } from '../hooks/useDropzoneFieldFiles.js';
11
+ import '../Icon_es_kewxGRUB.js';
12
+ import 'react-inlinesvg';
13
+ import '../Link_es_BDAmhIzd.js';
14
+ import '../hooks/useStyles/useStyles.js';
15
+ import 'lodash/camelCase';
16
+ import 'lodash/maxBy';
17
+ import 'lodash/upperFirst';
18
+ import '../context/Notifications.js';
19
+ import 'uuid';
20
+ import '@itcase/common';
21
+ import '../context/UIContext.js';
22
+ import '../hooks/useMediaQueries/useMediaQueries.js';
23
+ import 'react-responsive';
24
+ import '../utils/setViewportProperty.js';
25
+ import '../hooks.js';
26
+ import '../hooks/useStyles/styleAttributes.js';
27
+ import '../hoc/urlWithAssetPrefix.js';
28
+ import '../context/UrlAssetPrefix.js';
29
+ import '../utils/mergeAppearanceKeys.js';
30
+ import '../hooks/useHoldProgress.js';
31
+ import 'lodash/castArray';
32
+ import 'util';
33
+ import 'stream';
34
+ import 'path';
35
+ import 'http';
36
+ import 'https';
37
+ import 'url';
38
+ import 'fs';
39
+ import 'crypto';
40
+ import 'http2';
41
+ import 'assert';
42
+ import 'tty';
43
+ import 'os';
44
+ import 'zlib';
45
+ import 'events';
46
+
47
+ /******************************************************************************
48
+ Copyright (c) Microsoft Corporation.
49
+
50
+ Permission to use, copy, modify, and/or distribute this software for any
51
+ purpose with or without fee is hereby granted.
52
+
53
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
54
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
55
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
56
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
57
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
58
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
59
+ PERFORMANCE OF THIS SOFTWARE.
60
+ ***************************************************************************** */
61
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
62
+
63
+
64
+ function __awaiter(thisArg, _arguments, P, generator) {
65
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
66
+ return new (P || (P = Promise))(function (resolve, reject) {
67
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
68
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
69
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
70
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
71
+ });
72
+ }
73
+
74
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
75
+ var e = new Error(message);
76
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
77
+ };
78
+
79
+ const COMMON_MIME_TYPES = new Map([
80
+ // https://github.com/guzzle/psr7/blob/2d9260799e713f1c475d3c5fdc3d6561ff7441b2/src/MimeType.php
81
+ ['1km', 'application/vnd.1000minds.decision-model+xml'],
82
+ ['3dml', 'text/vnd.in3d.3dml'],
83
+ ['3ds', 'image/x-3ds'],
84
+ ['3g2', 'video/3gpp2'],
85
+ ['3gp', 'video/3gp'],
86
+ ['3gpp', 'video/3gpp'],
87
+ ['3mf', 'model/3mf'],
88
+ ['7z', 'application/x-7z-compressed'],
89
+ ['7zip', 'application/x-7z-compressed'],
90
+ ['123', 'application/vnd.lotus-1-2-3'],
91
+ ['aab', 'application/x-authorware-bin'],
92
+ ['aac', 'audio/x-acc'],
93
+ ['aam', 'application/x-authorware-map'],
94
+ ['aas', 'application/x-authorware-seg'],
95
+ ['abw', 'application/x-abiword'],
96
+ ['ac', 'application/vnd.nokia.n-gage.ac+xml'],
97
+ ['ac3', 'audio/ac3'],
98
+ ['acc', 'application/vnd.americandynamics.acc'],
99
+ ['ace', 'application/x-ace-compressed'],
100
+ ['acu', 'application/vnd.acucobol'],
101
+ ['acutc', 'application/vnd.acucorp'],
102
+ ['adp', 'audio/adpcm'],
103
+ ['aep', 'application/vnd.audiograph'],
104
+ ['afm', 'application/x-font-type1'],
105
+ ['afp', 'application/vnd.ibm.modcap'],
106
+ ['ahead', 'application/vnd.ahead.space'],
107
+ ['ai', 'application/pdf'],
108
+ ['aif', 'audio/x-aiff'],
109
+ ['aifc', 'audio/x-aiff'],
110
+ ['aiff', 'audio/x-aiff'],
111
+ ['air', 'application/vnd.adobe.air-application-installer-package+zip'],
112
+ ['ait', 'application/vnd.dvb.ait'],
113
+ ['ami', 'application/vnd.amiga.ami'],
114
+ ['amr', 'audio/amr'],
115
+ ['apk', 'application/vnd.android.package-archive'],
116
+ ['apng', 'image/apng'],
117
+ ['appcache', 'text/cache-manifest'],
118
+ ['application', 'application/x-ms-application'],
119
+ ['apr', 'application/vnd.lotus-approach'],
120
+ ['arc', 'application/x-freearc'],
121
+ ['arj', 'application/x-arj'],
122
+ ['asc', 'application/pgp-signature'],
123
+ ['asf', 'video/x-ms-asf'],
124
+ ['asm', 'text/x-asm'],
125
+ ['aso', 'application/vnd.accpac.simply.aso'],
126
+ ['asx', 'video/x-ms-asf'],
127
+ ['atc', 'application/vnd.acucorp'],
128
+ ['atom', 'application/atom+xml'],
129
+ ['atomcat', 'application/atomcat+xml'],
130
+ ['atomdeleted', 'application/atomdeleted+xml'],
131
+ ['atomsvc', 'application/atomsvc+xml'],
132
+ ['atx', 'application/vnd.antix.game-component'],
133
+ ['au', 'audio/x-au'],
134
+ ['avi', 'video/x-msvideo'],
135
+ ['avif', 'image/avif'],
136
+ ['aw', 'application/applixware'],
137
+ ['azf', 'application/vnd.airzip.filesecure.azf'],
138
+ ['azs', 'application/vnd.airzip.filesecure.azs'],
139
+ ['azv', 'image/vnd.airzip.accelerator.azv'],
140
+ ['azw', 'application/vnd.amazon.ebook'],
141
+ ['b16', 'image/vnd.pco.b16'],
142
+ ['bat', 'application/x-msdownload'],
143
+ ['bcpio', 'application/x-bcpio'],
144
+ ['bdf', 'application/x-font-bdf'],
145
+ ['bdm', 'application/vnd.syncml.dm+wbxml'],
146
+ ['bdoc', 'application/x-bdoc'],
147
+ ['bed', 'application/vnd.realvnc.bed'],
148
+ ['bh2', 'application/vnd.fujitsu.oasysprs'],
149
+ ['bin', 'application/octet-stream'],
150
+ ['blb', 'application/x-blorb'],
151
+ ['blorb', 'application/x-blorb'],
152
+ ['bmi', 'application/vnd.bmi'],
153
+ ['bmml', 'application/vnd.balsamiq.bmml+xml'],
154
+ ['bmp', 'image/bmp'],
155
+ ['book', 'application/vnd.framemaker'],
156
+ ['box', 'application/vnd.previewsystems.box'],
157
+ ['boz', 'application/x-bzip2'],
158
+ ['bpk', 'application/octet-stream'],
159
+ ['bpmn', 'application/octet-stream'],
160
+ ['bsp', 'model/vnd.valve.source.compiled-map'],
161
+ ['btif', 'image/prs.btif'],
162
+ ['buffer', 'application/octet-stream'],
163
+ ['bz', 'application/x-bzip'],
164
+ ['bz2', 'application/x-bzip2'],
165
+ ['c', 'text/x-c'],
166
+ ['c4d', 'application/vnd.clonk.c4group'],
167
+ ['c4f', 'application/vnd.clonk.c4group'],
168
+ ['c4g', 'application/vnd.clonk.c4group'],
169
+ ['c4p', 'application/vnd.clonk.c4group'],
170
+ ['c4u', 'application/vnd.clonk.c4group'],
171
+ ['c11amc', 'application/vnd.cluetrust.cartomobile-config'],
172
+ ['c11amz', 'application/vnd.cluetrust.cartomobile-config-pkg'],
173
+ ['cab', 'application/vnd.ms-cab-compressed'],
174
+ ['caf', 'audio/x-caf'],
175
+ ['cap', 'application/vnd.tcpdump.pcap'],
176
+ ['car', 'application/vnd.curl.car'],
177
+ ['cat', 'application/vnd.ms-pki.seccat'],
178
+ ['cb7', 'application/x-cbr'],
179
+ ['cba', 'application/x-cbr'],
180
+ ['cbr', 'application/x-cbr'],
181
+ ['cbt', 'application/x-cbr'],
182
+ ['cbz', 'application/x-cbr'],
183
+ ['cc', 'text/x-c'],
184
+ ['cco', 'application/x-cocoa'],
185
+ ['cct', 'application/x-director'],
186
+ ['ccxml', 'application/ccxml+xml'],
187
+ ['cdbcmsg', 'application/vnd.contact.cmsg'],
188
+ ['cda', 'application/x-cdf'],
189
+ ['cdf', 'application/x-netcdf'],
190
+ ['cdfx', 'application/cdfx+xml'],
191
+ ['cdkey', 'application/vnd.mediastation.cdkey'],
192
+ ['cdmia', 'application/cdmi-capability'],
193
+ ['cdmic', 'application/cdmi-container'],
194
+ ['cdmid', 'application/cdmi-domain'],
195
+ ['cdmio', 'application/cdmi-object'],
196
+ ['cdmiq', 'application/cdmi-queue'],
197
+ ['cdr', 'application/cdr'],
198
+ ['cdx', 'chemical/x-cdx'],
199
+ ['cdxml', 'application/vnd.chemdraw+xml'],
200
+ ['cdy', 'application/vnd.cinderella'],
201
+ ['cer', 'application/pkix-cert'],
202
+ ['cfs', 'application/x-cfs-compressed'],
203
+ ['cgm', 'image/cgm'],
204
+ ['chat', 'application/x-chat'],
205
+ ['chm', 'application/vnd.ms-htmlhelp'],
206
+ ['chrt', 'application/vnd.kde.kchart'],
207
+ ['cif', 'chemical/x-cif'],
208
+ ['cii', 'application/vnd.anser-web-certificate-issue-initiation'],
209
+ ['cil', 'application/vnd.ms-artgalry'],
210
+ ['cjs', 'application/node'],
211
+ ['cla', 'application/vnd.claymore'],
212
+ ['class', 'application/octet-stream'],
213
+ ['clkk', 'application/vnd.crick.clicker.keyboard'],
214
+ ['clkp', 'application/vnd.crick.clicker.palette'],
215
+ ['clkt', 'application/vnd.crick.clicker.template'],
216
+ ['clkw', 'application/vnd.crick.clicker.wordbank'],
217
+ ['clkx', 'application/vnd.crick.clicker'],
218
+ ['clp', 'application/x-msclip'],
219
+ ['cmc', 'application/vnd.cosmocaller'],
220
+ ['cmdf', 'chemical/x-cmdf'],
221
+ ['cml', 'chemical/x-cml'],
222
+ ['cmp', 'application/vnd.yellowriver-custom-menu'],
223
+ ['cmx', 'image/x-cmx'],
224
+ ['cod', 'application/vnd.rim.cod'],
225
+ ['coffee', 'text/coffeescript'],
226
+ ['com', 'application/x-msdownload'],
227
+ ['conf', 'text/plain'],
228
+ ['cpio', 'application/x-cpio'],
229
+ ['cpp', 'text/x-c'],
230
+ ['cpt', 'application/mac-compactpro'],
231
+ ['crd', 'application/x-mscardfile'],
232
+ ['crl', 'application/pkix-crl'],
233
+ ['crt', 'application/x-x509-ca-cert'],
234
+ ['crx', 'application/x-chrome-extension'],
235
+ ['cryptonote', 'application/vnd.rig.cryptonote'],
236
+ ['csh', 'application/x-csh'],
237
+ ['csl', 'application/vnd.citationstyles.style+xml'],
238
+ ['csml', 'chemical/x-csml'],
239
+ ['csp', 'application/vnd.commonspace'],
240
+ ['csr', 'application/octet-stream'],
241
+ ['css', 'text/css'],
242
+ ['cst', 'application/x-director'],
243
+ ['csv', 'text/csv'],
244
+ ['cu', 'application/cu-seeme'],
245
+ ['curl', 'text/vnd.curl'],
246
+ ['cww', 'application/prs.cww'],
247
+ ['cxt', 'application/x-director'],
248
+ ['cxx', 'text/x-c'],
249
+ ['dae', 'model/vnd.collada+xml'],
250
+ ['daf', 'application/vnd.mobius.daf'],
251
+ ['dart', 'application/vnd.dart'],
252
+ ['dataless', 'application/vnd.fdsn.seed'],
253
+ ['davmount', 'application/davmount+xml'],
254
+ ['dbf', 'application/vnd.dbf'],
255
+ ['dbk', 'application/docbook+xml'],
256
+ ['dcr', 'application/x-director'],
257
+ ['dcurl', 'text/vnd.curl.dcurl'],
258
+ ['dd2', 'application/vnd.oma.dd2+xml'],
259
+ ['ddd', 'application/vnd.fujixerox.ddd'],
260
+ ['ddf', 'application/vnd.syncml.dmddf+xml'],
261
+ ['dds', 'image/vnd.ms-dds'],
262
+ ['deb', 'application/x-debian-package'],
263
+ ['def', 'text/plain'],
264
+ ['deploy', 'application/octet-stream'],
265
+ ['der', 'application/x-x509-ca-cert'],
266
+ ['dfac', 'application/vnd.dreamfactory'],
267
+ ['dgc', 'application/x-dgc-compressed'],
268
+ ['dic', 'text/x-c'],
269
+ ['dir', 'application/x-director'],
270
+ ['dis', 'application/vnd.mobius.dis'],
271
+ ['disposition-notification', 'message/disposition-notification'],
272
+ ['dist', 'application/octet-stream'],
273
+ ['distz', 'application/octet-stream'],
274
+ ['djv', 'image/vnd.djvu'],
275
+ ['djvu', 'image/vnd.djvu'],
276
+ ['dll', 'application/octet-stream'],
277
+ ['dmg', 'application/x-apple-diskimage'],
278
+ ['dmn', 'application/octet-stream'],
279
+ ['dmp', 'application/vnd.tcpdump.pcap'],
280
+ ['dms', 'application/octet-stream'],
281
+ ['dna', 'application/vnd.dna'],
282
+ ['doc', 'application/msword'],
283
+ ['docm', 'application/vnd.ms-word.template.macroEnabled.12'],
284
+ ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
285
+ ['dot', 'application/msword'],
286
+ ['dotm', 'application/vnd.ms-word.template.macroEnabled.12'],
287
+ ['dotx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'],
288
+ ['dp', 'application/vnd.osgi.dp'],
289
+ ['dpg', 'application/vnd.dpgraph'],
290
+ ['dra', 'audio/vnd.dra'],
291
+ ['drle', 'image/dicom-rle'],
292
+ ['dsc', 'text/prs.lines.tag'],
293
+ ['dssc', 'application/dssc+der'],
294
+ ['dtb', 'application/x-dtbook+xml'],
295
+ ['dtd', 'application/xml-dtd'],
296
+ ['dts', 'audio/vnd.dts'],
297
+ ['dtshd', 'audio/vnd.dts.hd'],
298
+ ['dump', 'application/octet-stream'],
299
+ ['dvb', 'video/vnd.dvb.file'],
300
+ ['dvi', 'application/x-dvi'],
301
+ ['dwd', 'application/atsc-dwd+xml'],
302
+ ['dwf', 'model/vnd.dwf'],
303
+ ['dwg', 'image/vnd.dwg'],
304
+ ['dxf', 'image/vnd.dxf'],
305
+ ['dxp', 'application/vnd.spotfire.dxp'],
306
+ ['dxr', 'application/x-director'],
307
+ ['ear', 'application/java-archive'],
308
+ ['ecelp4800', 'audio/vnd.nuera.ecelp4800'],
309
+ ['ecelp7470', 'audio/vnd.nuera.ecelp7470'],
310
+ ['ecelp9600', 'audio/vnd.nuera.ecelp9600'],
311
+ ['ecma', 'application/ecmascript'],
312
+ ['edm', 'application/vnd.novadigm.edm'],
313
+ ['edx', 'application/vnd.novadigm.edx'],
314
+ ['efif', 'application/vnd.picsel'],
315
+ ['ei6', 'application/vnd.pg.osasli'],
316
+ ['elc', 'application/octet-stream'],
317
+ ['emf', 'image/emf'],
318
+ ['eml', 'message/rfc822'],
319
+ ['emma', 'application/emma+xml'],
320
+ ['emotionml', 'application/emotionml+xml'],
321
+ ['emz', 'application/x-msmetafile'],
322
+ ['eol', 'audio/vnd.digital-winds'],
323
+ ['eot', 'application/vnd.ms-fontobject'],
324
+ ['eps', 'application/postscript'],
325
+ ['epub', 'application/epub+zip'],
326
+ ['es', 'application/ecmascript'],
327
+ ['es3', 'application/vnd.eszigno3+xml'],
328
+ ['esa', 'application/vnd.osgi.subsystem'],
329
+ ['esf', 'application/vnd.epson.esf'],
330
+ ['et3', 'application/vnd.eszigno3+xml'],
331
+ ['etx', 'text/x-setext'],
332
+ ['eva', 'application/x-eva'],
333
+ ['evy', 'application/x-envoy'],
334
+ ['exe', 'application/octet-stream'],
335
+ ['exi', 'application/exi'],
336
+ ['exp', 'application/express'],
337
+ ['exr', 'image/aces'],
338
+ ['ext', 'application/vnd.novadigm.ext'],
339
+ ['ez', 'application/andrew-inset'],
340
+ ['ez2', 'application/vnd.ezpix-album'],
341
+ ['ez3', 'application/vnd.ezpix-package'],
342
+ ['f', 'text/x-fortran'],
343
+ ['f4v', 'video/mp4'],
344
+ ['f77', 'text/x-fortran'],
345
+ ['f90', 'text/x-fortran'],
346
+ ['fbs', 'image/vnd.fastbidsheet'],
347
+ ['fcdt', 'application/vnd.adobe.formscentral.fcdt'],
348
+ ['fcs', 'application/vnd.isac.fcs'],
349
+ ['fdf', 'application/vnd.fdf'],
350
+ ['fdt', 'application/fdt+xml'],
351
+ ['fe_launch', 'application/vnd.denovo.fcselayout-link'],
352
+ ['fg5', 'application/vnd.fujitsu.oasysgp'],
353
+ ['fgd', 'application/x-director'],
354
+ ['fh', 'image/x-freehand'],
355
+ ['fh4', 'image/x-freehand'],
356
+ ['fh5', 'image/x-freehand'],
357
+ ['fh7', 'image/x-freehand'],
358
+ ['fhc', 'image/x-freehand'],
359
+ ['fig', 'application/x-xfig'],
360
+ ['fits', 'image/fits'],
361
+ ['flac', 'audio/x-flac'],
362
+ ['fli', 'video/x-fli'],
363
+ ['flo', 'application/vnd.micrografx.flo'],
364
+ ['flv', 'video/x-flv'],
365
+ ['flw', 'application/vnd.kde.kivio'],
366
+ ['flx', 'text/vnd.fmi.flexstor'],
367
+ ['fly', 'text/vnd.fly'],
368
+ ['fm', 'application/vnd.framemaker'],
369
+ ['fnc', 'application/vnd.frogans.fnc'],
370
+ ['fo', 'application/vnd.software602.filler.form+xml'],
371
+ ['for', 'text/x-fortran'],
372
+ ['fpx', 'image/vnd.fpx'],
373
+ ['frame', 'application/vnd.framemaker'],
374
+ ['fsc', 'application/vnd.fsc.weblaunch'],
375
+ ['fst', 'image/vnd.fst'],
376
+ ['ftc', 'application/vnd.fluxtime.clip'],
377
+ ['fti', 'application/vnd.anser-web-funds-transfer-initiation'],
378
+ ['fvt', 'video/vnd.fvt'],
379
+ ['fxp', 'application/vnd.adobe.fxp'],
380
+ ['fxpl', 'application/vnd.adobe.fxp'],
381
+ ['fzs', 'application/vnd.fuzzysheet'],
382
+ ['g2w', 'application/vnd.geoplan'],
383
+ ['g3', 'image/g3fax'],
384
+ ['g3w', 'application/vnd.geospace'],
385
+ ['gac', 'application/vnd.groove-account'],
386
+ ['gam', 'application/x-tads'],
387
+ ['gbr', 'application/rpki-ghostbusters'],
388
+ ['gca', 'application/x-gca-compressed'],
389
+ ['gdl', 'model/vnd.gdl'],
390
+ ['gdoc', 'application/vnd.google-apps.document'],
391
+ ['geo', 'application/vnd.dynageo'],
392
+ ['geojson', 'application/geo+json'],
393
+ ['gex', 'application/vnd.geometry-explorer'],
394
+ ['ggb', 'application/vnd.geogebra.file'],
395
+ ['ggt', 'application/vnd.geogebra.tool'],
396
+ ['ghf', 'application/vnd.groove-help'],
397
+ ['gif', 'image/gif'],
398
+ ['gim', 'application/vnd.groove-identity-message'],
399
+ ['glb', 'model/gltf-binary'],
400
+ ['gltf', 'model/gltf+json'],
401
+ ['gml', 'application/gml+xml'],
402
+ ['gmx', 'application/vnd.gmx'],
403
+ ['gnumeric', 'application/x-gnumeric'],
404
+ ['gpg', 'application/gpg-keys'],
405
+ ['gph', 'application/vnd.flographit'],
406
+ ['gpx', 'application/gpx+xml'],
407
+ ['gqf', 'application/vnd.grafeq'],
408
+ ['gqs', 'application/vnd.grafeq'],
409
+ ['gram', 'application/srgs'],
410
+ ['gramps', 'application/x-gramps-xml'],
411
+ ['gre', 'application/vnd.geometry-explorer'],
412
+ ['grv', 'application/vnd.groove-injector'],
413
+ ['grxml', 'application/srgs+xml'],
414
+ ['gsf', 'application/x-font-ghostscript'],
415
+ ['gsheet', 'application/vnd.google-apps.spreadsheet'],
416
+ ['gslides', 'application/vnd.google-apps.presentation'],
417
+ ['gtar', 'application/x-gtar'],
418
+ ['gtm', 'application/vnd.groove-tool-message'],
419
+ ['gtw', 'model/vnd.gtw'],
420
+ ['gv', 'text/vnd.graphviz'],
421
+ ['gxf', 'application/gxf'],
422
+ ['gxt', 'application/vnd.geonext'],
423
+ ['gz', 'application/gzip'],
424
+ ['gzip', 'application/gzip'],
425
+ ['h', 'text/x-c'],
426
+ ['h261', 'video/h261'],
427
+ ['h263', 'video/h263'],
428
+ ['h264', 'video/h264'],
429
+ ['hal', 'application/vnd.hal+xml'],
430
+ ['hbci', 'application/vnd.hbci'],
431
+ ['hbs', 'text/x-handlebars-template'],
432
+ ['hdd', 'application/x-virtualbox-hdd'],
433
+ ['hdf', 'application/x-hdf'],
434
+ ['heic', 'image/heic'],
435
+ ['heics', 'image/heic-sequence'],
436
+ ['heif', 'image/heif'],
437
+ ['heifs', 'image/heif-sequence'],
438
+ ['hej2', 'image/hej2k'],
439
+ ['held', 'application/atsc-held+xml'],
440
+ ['hh', 'text/x-c'],
441
+ ['hjson', 'application/hjson'],
442
+ ['hlp', 'application/winhlp'],
443
+ ['hpgl', 'application/vnd.hp-hpgl'],
444
+ ['hpid', 'application/vnd.hp-hpid'],
445
+ ['hps', 'application/vnd.hp-hps'],
446
+ ['hqx', 'application/mac-binhex40'],
447
+ ['hsj2', 'image/hsj2'],
448
+ ['htc', 'text/x-component'],
449
+ ['htke', 'application/vnd.kenameaapp'],
450
+ ['htm', 'text/html'],
451
+ ['html', 'text/html'],
452
+ ['hvd', 'application/vnd.yamaha.hv-dic'],
453
+ ['hvp', 'application/vnd.yamaha.hv-voice'],
454
+ ['hvs', 'application/vnd.yamaha.hv-script'],
455
+ ['i2g', 'application/vnd.intergeo'],
456
+ ['icc', 'application/vnd.iccprofile'],
457
+ ['ice', 'x-conference/x-cooltalk'],
458
+ ['icm', 'application/vnd.iccprofile'],
459
+ ['ico', 'image/x-icon'],
460
+ ['ics', 'text/calendar'],
461
+ ['ief', 'image/ief'],
462
+ ['ifb', 'text/calendar'],
463
+ ['ifm', 'application/vnd.shana.informed.formdata'],
464
+ ['iges', 'model/iges'],
465
+ ['igl', 'application/vnd.igloader'],
466
+ ['igm', 'application/vnd.insors.igm'],
467
+ ['igs', 'model/iges'],
468
+ ['igx', 'application/vnd.micrografx.igx'],
469
+ ['iif', 'application/vnd.shana.informed.interchange'],
470
+ ['img', 'application/octet-stream'],
471
+ ['imp', 'application/vnd.accpac.simply.imp'],
472
+ ['ims', 'application/vnd.ms-ims'],
473
+ ['in', 'text/plain'],
474
+ ['ini', 'text/plain'],
475
+ ['ink', 'application/inkml+xml'],
476
+ ['inkml', 'application/inkml+xml'],
477
+ ['install', 'application/x-install-instructions'],
478
+ ['iota', 'application/vnd.astraea-software.iota'],
479
+ ['ipfix', 'application/ipfix'],
480
+ ['ipk', 'application/vnd.shana.informed.package'],
481
+ ['irm', 'application/vnd.ibm.rights-management'],
482
+ ['irp', 'application/vnd.irepository.package+xml'],
483
+ ['iso', 'application/x-iso9660-image'],
484
+ ['itp', 'application/vnd.shana.informed.formtemplate'],
485
+ ['its', 'application/its+xml'],
486
+ ['ivp', 'application/vnd.immervision-ivp'],
487
+ ['ivu', 'application/vnd.immervision-ivu'],
488
+ ['jad', 'text/vnd.sun.j2me.app-descriptor'],
489
+ ['jade', 'text/jade'],
490
+ ['jam', 'application/vnd.jam'],
491
+ ['jar', 'application/java-archive'],
492
+ ['jardiff', 'application/x-java-archive-diff'],
493
+ ['java', 'text/x-java-source'],
494
+ ['jhc', 'image/jphc'],
495
+ ['jisp', 'application/vnd.jisp'],
496
+ ['jls', 'image/jls'],
497
+ ['jlt', 'application/vnd.hp-jlyt'],
498
+ ['jng', 'image/x-jng'],
499
+ ['jnlp', 'application/x-java-jnlp-file'],
500
+ ['joda', 'application/vnd.joost.joda-archive'],
501
+ ['jp2', 'image/jp2'],
502
+ ['jpe', 'image/jpeg'],
503
+ ['jpeg', 'image/jpeg'],
504
+ ['jpf', 'image/jpx'],
505
+ ['jpg', 'image/jpeg'],
506
+ ['jpg2', 'image/jp2'],
507
+ ['jpgm', 'video/jpm'],
508
+ ['jpgv', 'video/jpeg'],
509
+ ['jph', 'image/jph'],
510
+ ['jpm', 'video/jpm'],
511
+ ['jpx', 'image/jpx'],
512
+ ['js', 'application/javascript'],
513
+ ['json', 'application/json'],
514
+ ['json5', 'application/json5'],
515
+ ['jsonld', 'application/ld+json'],
516
+ // https://jsonlines.org/
517
+ ['jsonl', 'application/jsonl'],
518
+ ['jsonml', 'application/jsonml+json'],
519
+ ['jsx', 'text/jsx'],
520
+ ['jxr', 'image/jxr'],
521
+ ['jxra', 'image/jxra'],
522
+ ['jxrs', 'image/jxrs'],
523
+ ['jxs', 'image/jxs'],
524
+ ['jxsc', 'image/jxsc'],
525
+ ['jxsi', 'image/jxsi'],
526
+ ['jxss', 'image/jxss'],
527
+ ['kar', 'audio/midi'],
528
+ ['karbon', 'application/vnd.kde.karbon'],
529
+ ['kdb', 'application/octet-stream'],
530
+ ['kdbx', 'application/x-keepass2'],
531
+ ['key', 'application/x-iwork-keynote-sffkey'],
532
+ ['kfo', 'application/vnd.kde.kformula'],
533
+ ['kia', 'application/vnd.kidspiration'],
534
+ ['kml', 'application/vnd.google-earth.kml+xml'],
535
+ ['kmz', 'application/vnd.google-earth.kmz'],
536
+ ['kne', 'application/vnd.kinar'],
537
+ ['knp', 'application/vnd.kinar'],
538
+ ['kon', 'application/vnd.kde.kontour'],
539
+ ['kpr', 'application/vnd.kde.kpresenter'],
540
+ ['kpt', 'application/vnd.kde.kpresenter'],
541
+ ['kpxx', 'application/vnd.ds-keypoint'],
542
+ ['ksp', 'application/vnd.kde.kspread'],
543
+ ['ktr', 'application/vnd.kahootz'],
544
+ ['ktx', 'image/ktx'],
545
+ ['ktx2', 'image/ktx2'],
546
+ ['ktz', 'application/vnd.kahootz'],
547
+ ['kwd', 'application/vnd.kde.kword'],
548
+ ['kwt', 'application/vnd.kde.kword'],
549
+ ['lasxml', 'application/vnd.las.las+xml'],
550
+ ['latex', 'application/x-latex'],
551
+ ['lbd', 'application/vnd.llamagraphics.life-balance.desktop'],
552
+ ['lbe', 'application/vnd.llamagraphics.life-balance.exchange+xml'],
553
+ ['les', 'application/vnd.hhe.lesson-player'],
554
+ ['less', 'text/less'],
555
+ ['lgr', 'application/lgr+xml'],
556
+ ['lha', 'application/octet-stream'],
557
+ ['link66', 'application/vnd.route66.link66+xml'],
558
+ ['list', 'text/plain'],
559
+ ['list3820', 'application/vnd.ibm.modcap'],
560
+ ['listafp', 'application/vnd.ibm.modcap'],
561
+ ['litcoffee', 'text/coffeescript'],
562
+ ['lnk', 'application/x-ms-shortcut'],
563
+ ['log', 'text/plain'],
564
+ ['lostxml', 'application/lost+xml'],
565
+ ['lrf', 'application/octet-stream'],
566
+ ['lrm', 'application/vnd.ms-lrm'],
567
+ ['ltf', 'application/vnd.frogans.ltf'],
568
+ ['lua', 'text/x-lua'],
569
+ ['luac', 'application/x-lua-bytecode'],
570
+ ['lvp', 'audio/vnd.lucent.voice'],
571
+ ['lwp', 'application/vnd.lotus-wordpro'],
572
+ ['lzh', 'application/octet-stream'],
573
+ ['m1v', 'video/mpeg'],
574
+ ['m2a', 'audio/mpeg'],
575
+ ['m2v', 'video/mpeg'],
576
+ ['m3a', 'audio/mpeg'],
577
+ ['m3u', 'text/plain'],
578
+ ['m3u8', 'application/vnd.apple.mpegurl'],
579
+ ['m4a', 'audio/x-m4a'],
580
+ ['m4p', 'application/mp4'],
581
+ ['m4s', 'video/iso.segment'],
582
+ ['m4u', 'application/vnd.mpegurl'],
583
+ ['m4v', 'video/x-m4v'],
584
+ ['m13', 'application/x-msmediaview'],
585
+ ['m14', 'application/x-msmediaview'],
586
+ ['m21', 'application/mp21'],
587
+ ['ma', 'application/mathematica'],
588
+ ['mads', 'application/mads+xml'],
589
+ ['maei', 'application/mmt-aei+xml'],
590
+ ['mag', 'application/vnd.ecowin.chart'],
591
+ ['maker', 'application/vnd.framemaker'],
592
+ ['man', 'text/troff'],
593
+ ['manifest', 'text/cache-manifest'],
594
+ ['map', 'application/json'],
595
+ ['mar', 'application/octet-stream'],
596
+ ['markdown', 'text/markdown'],
597
+ ['mathml', 'application/mathml+xml'],
598
+ ['mb', 'application/mathematica'],
599
+ ['mbk', 'application/vnd.mobius.mbk'],
600
+ ['mbox', 'application/mbox'],
601
+ ['mc1', 'application/vnd.medcalcdata'],
602
+ ['mcd', 'application/vnd.mcd'],
603
+ ['mcurl', 'text/vnd.curl.mcurl'],
604
+ ['md', 'text/markdown'],
605
+ ['mdb', 'application/x-msaccess'],
606
+ ['mdi', 'image/vnd.ms-modi'],
607
+ ['mdx', 'text/mdx'],
608
+ ['me', 'text/troff'],
609
+ ['mesh', 'model/mesh'],
610
+ ['meta4', 'application/metalink4+xml'],
611
+ ['metalink', 'application/metalink+xml'],
612
+ ['mets', 'application/mets+xml'],
613
+ ['mfm', 'application/vnd.mfmp'],
614
+ ['mft', 'application/rpki-manifest'],
615
+ ['mgp', 'application/vnd.osgeo.mapguide.package'],
616
+ ['mgz', 'application/vnd.proteus.magazine'],
617
+ ['mid', 'audio/midi'],
618
+ ['midi', 'audio/midi'],
619
+ ['mie', 'application/x-mie'],
620
+ ['mif', 'application/vnd.mif'],
621
+ ['mime', 'message/rfc822'],
622
+ ['mj2', 'video/mj2'],
623
+ ['mjp2', 'video/mj2'],
624
+ ['mjs', 'application/javascript'],
625
+ ['mk3d', 'video/x-matroska'],
626
+ ['mka', 'audio/x-matroska'],
627
+ ['mkd', 'text/x-markdown'],
628
+ ['mks', 'video/x-matroska'],
629
+ ['mkv', 'video/x-matroska'],
630
+ ['mlp', 'application/vnd.dolby.mlp'],
631
+ ['mmd', 'application/vnd.chipnuts.karaoke-mmd'],
632
+ ['mmf', 'application/vnd.smaf'],
633
+ ['mml', 'text/mathml'],
634
+ ['mmr', 'image/vnd.fujixerox.edmics-mmr'],
635
+ ['mng', 'video/x-mng'],
636
+ ['mny', 'application/x-msmoney'],
637
+ ['mobi', 'application/x-mobipocket-ebook'],
638
+ ['mods', 'application/mods+xml'],
639
+ ['mov', 'video/quicktime'],
640
+ ['movie', 'video/x-sgi-movie'],
641
+ ['mp2', 'audio/mpeg'],
642
+ ['mp2a', 'audio/mpeg'],
643
+ ['mp3', 'audio/mpeg'],
644
+ ['mp4', 'video/mp4'],
645
+ ['mp4a', 'audio/mp4'],
646
+ ['mp4s', 'application/mp4'],
647
+ ['mp4v', 'video/mp4'],
648
+ ['mp21', 'application/mp21'],
649
+ ['mpc', 'application/vnd.mophun.certificate'],
650
+ ['mpd', 'application/dash+xml'],
651
+ ['mpe', 'video/mpeg'],
652
+ ['mpeg', 'video/mpeg'],
653
+ ['mpg', 'video/mpeg'],
654
+ ['mpg4', 'video/mp4'],
655
+ ['mpga', 'audio/mpeg'],
656
+ ['mpkg', 'application/vnd.apple.installer+xml'],
657
+ ['mpm', 'application/vnd.blueice.multipass'],
658
+ ['mpn', 'application/vnd.mophun.application'],
659
+ ['mpp', 'application/vnd.ms-project'],
660
+ ['mpt', 'application/vnd.ms-project'],
661
+ ['mpy', 'application/vnd.ibm.minipay'],
662
+ ['mqy', 'application/vnd.mobius.mqy'],
663
+ ['mrc', 'application/marc'],
664
+ ['mrcx', 'application/marcxml+xml'],
665
+ ['ms', 'text/troff'],
666
+ ['mscml', 'application/mediaservercontrol+xml'],
667
+ ['mseed', 'application/vnd.fdsn.mseed'],
668
+ ['mseq', 'application/vnd.mseq'],
669
+ ['msf', 'application/vnd.epson.msf'],
670
+ ['msg', 'application/vnd.ms-outlook'],
671
+ ['msh', 'model/mesh'],
672
+ ['msi', 'application/x-msdownload'],
673
+ ['msl', 'application/vnd.mobius.msl'],
674
+ ['msm', 'application/octet-stream'],
675
+ ['msp', 'application/octet-stream'],
676
+ ['msty', 'application/vnd.muvee.style'],
677
+ ['mtl', 'model/mtl'],
678
+ ['mts', 'model/vnd.mts'],
679
+ ['mus', 'application/vnd.musician'],
680
+ ['musd', 'application/mmt-usd+xml'],
681
+ ['musicxml', 'application/vnd.recordare.musicxml+xml'],
682
+ ['mvb', 'application/x-msmediaview'],
683
+ ['mvt', 'application/vnd.mapbox-vector-tile'],
684
+ ['mwf', 'application/vnd.mfer'],
685
+ ['mxf', 'application/mxf'],
686
+ ['mxl', 'application/vnd.recordare.musicxml'],
687
+ ['mxmf', 'audio/mobile-xmf'],
688
+ ['mxml', 'application/xv+xml'],
689
+ ['mxs', 'application/vnd.triscape.mxs'],
690
+ ['mxu', 'video/vnd.mpegurl'],
691
+ ['n-gage', 'application/vnd.nokia.n-gage.symbian.install'],
692
+ ['n3', 'text/n3'],
693
+ ['nb', 'application/mathematica'],
694
+ ['nbp', 'application/vnd.wolfram.player'],
695
+ ['nc', 'application/x-netcdf'],
696
+ ['ncx', 'application/x-dtbncx+xml'],
697
+ ['nfo', 'text/x-nfo'],
698
+ ['ngdat', 'application/vnd.nokia.n-gage.data'],
699
+ ['nitf', 'application/vnd.nitf'],
700
+ ['nlu', 'application/vnd.neurolanguage.nlu'],
701
+ ['nml', 'application/vnd.enliven'],
702
+ ['nnd', 'application/vnd.noblenet-directory'],
703
+ ['nns', 'application/vnd.noblenet-sealer'],
704
+ ['nnw', 'application/vnd.noblenet-web'],
705
+ ['npx', 'image/vnd.net-fpx'],
706
+ ['nq', 'application/n-quads'],
707
+ ['nsc', 'application/x-conference'],
708
+ ['nsf', 'application/vnd.lotus-notes'],
709
+ ['nt', 'application/n-triples'],
710
+ ['ntf', 'application/vnd.nitf'],
711
+ ['numbers', 'application/x-iwork-numbers-sffnumbers'],
712
+ ['nzb', 'application/x-nzb'],
713
+ ['oa2', 'application/vnd.fujitsu.oasys2'],
714
+ ['oa3', 'application/vnd.fujitsu.oasys3'],
715
+ ['oas', 'application/vnd.fujitsu.oasys'],
716
+ ['obd', 'application/x-msbinder'],
717
+ ['obgx', 'application/vnd.openblox.game+xml'],
718
+ ['obj', 'model/obj'],
719
+ ['oda', 'application/oda'],
720
+ ['odb', 'application/vnd.oasis.opendocument.database'],
721
+ ['odc', 'application/vnd.oasis.opendocument.chart'],
722
+ ['odf', 'application/vnd.oasis.opendocument.formula'],
723
+ ['odft', 'application/vnd.oasis.opendocument.formula-template'],
724
+ ['odg', 'application/vnd.oasis.opendocument.graphics'],
725
+ ['odi', 'application/vnd.oasis.opendocument.image'],
726
+ ['odm', 'application/vnd.oasis.opendocument.text-master'],
727
+ ['odp', 'application/vnd.oasis.opendocument.presentation'],
728
+ ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],
729
+ ['odt', 'application/vnd.oasis.opendocument.text'],
730
+ ['oga', 'audio/ogg'],
731
+ ['ogex', 'model/vnd.opengex'],
732
+ ['ogg', 'audio/ogg'],
733
+ ['ogv', 'video/ogg'],
734
+ ['ogx', 'application/ogg'],
735
+ ['omdoc', 'application/omdoc+xml'],
736
+ ['onepkg', 'application/onenote'],
737
+ ['onetmp', 'application/onenote'],
738
+ ['onetoc', 'application/onenote'],
739
+ ['onetoc2', 'application/onenote'],
740
+ ['opf', 'application/oebps-package+xml'],
741
+ ['opml', 'text/x-opml'],
742
+ ['oprc', 'application/vnd.palm'],
743
+ ['opus', 'audio/ogg'],
744
+ ['org', 'text/x-org'],
745
+ ['osf', 'application/vnd.yamaha.openscoreformat'],
746
+ ['osfpvg', 'application/vnd.yamaha.openscoreformat.osfpvg+xml'],
747
+ ['osm', 'application/vnd.openstreetmap.data+xml'],
748
+ ['otc', 'application/vnd.oasis.opendocument.chart-template'],
749
+ ['otf', 'font/otf'],
750
+ ['otg', 'application/vnd.oasis.opendocument.graphics-template'],
751
+ ['oth', 'application/vnd.oasis.opendocument.text-web'],
752
+ ['oti', 'application/vnd.oasis.opendocument.image-template'],
753
+ ['otp', 'application/vnd.oasis.opendocument.presentation-template'],
754
+ ['ots', 'application/vnd.oasis.opendocument.spreadsheet-template'],
755
+ ['ott', 'application/vnd.oasis.opendocument.text-template'],
756
+ ['ova', 'application/x-virtualbox-ova'],
757
+ ['ovf', 'application/x-virtualbox-ovf'],
758
+ ['owl', 'application/rdf+xml'],
759
+ ['oxps', 'application/oxps'],
760
+ ['oxt', 'application/vnd.openofficeorg.extension'],
761
+ ['p', 'text/x-pascal'],
762
+ ['p7a', 'application/x-pkcs7-signature'],
763
+ ['p7b', 'application/x-pkcs7-certificates'],
764
+ ['p7c', 'application/pkcs7-mime'],
765
+ ['p7m', 'application/pkcs7-mime'],
766
+ ['p7r', 'application/x-pkcs7-certreqresp'],
767
+ ['p7s', 'application/pkcs7-signature'],
768
+ ['p8', 'application/pkcs8'],
769
+ ['p10', 'application/x-pkcs10'],
770
+ ['p12', 'application/x-pkcs12'],
771
+ ['pac', 'application/x-ns-proxy-autoconfig'],
772
+ ['pages', 'application/x-iwork-pages-sffpages'],
773
+ ['pas', 'text/x-pascal'],
774
+ ['paw', 'application/vnd.pawaafile'],
775
+ ['pbd', 'application/vnd.powerbuilder6'],
776
+ ['pbm', 'image/x-portable-bitmap'],
777
+ ['pcap', 'application/vnd.tcpdump.pcap'],
778
+ ['pcf', 'application/x-font-pcf'],
779
+ ['pcl', 'application/vnd.hp-pcl'],
780
+ ['pclxl', 'application/vnd.hp-pclxl'],
781
+ ['pct', 'image/x-pict'],
782
+ ['pcurl', 'application/vnd.curl.pcurl'],
783
+ ['pcx', 'image/x-pcx'],
784
+ ['pdb', 'application/x-pilot'],
785
+ ['pde', 'text/x-processing'],
786
+ ['pdf', 'application/pdf'],
787
+ ['pem', 'application/x-x509-user-cert'],
788
+ ['pfa', 'application/x-font-type1'],
789
+ ['pfb', 'application/x-font-type1'],
790
+ ['pfm', 'application/x-font-type1'],
791
+ ['pfr', 'application/font-tdpfr'],
792
+ ['pfx', 'application/x-pkcs12'],
793
+ ['pgm', 'image/x-portable-graymap'],
794
+ ['pgn', 'application/x-chess-pgn'],
795
+ ['pgp', 'application/pgp'],
796
+ ['php', 'application/x-httpd-php'],
797
+ ['php3', 'application/x-httpd-php'],
798
+ ['php4', 'application/x-httpd-php'],
799
+ ['phps', 'application/x-httpd-php-source'],
800
+ ['phtml', 'application/x-httpd-php'],
801
+ ['pic', 'image/x-pict'],
802
+ ['pkg', 'application/octet-stream'],
803
+ ['pki', 'application/pkixcmp'],
804
+ ['pkipath', 'application/pkix-pkipath'],
805
+ ['pkpass', 'application/vnd.apple.pkpass'],
806
+ ['pl', 'application/x-perl'],
807
+ ['plb', 'application/vnd.3gpp.pic-bw-large'],
808
+ ['plc', 'application/vnd.mobius.plc'],
809
+ ['plf', 'application/vnd.pocketlearn'],
810
+ ['pls', 'application/pls+xml'],
811
+ ['pm', 'application/x-perl'],
812
+ ['pml', 'application/vnd.ctc-posml'],
813
+ ['png', 'image/png'],
814
+ ['pnm', 'image/x-portable-anymap'],
815
+ ['portpkg', 'application/vnd.macports.portpkg'],
816
+ ['pot', 'application/vnd.ms-powerpoint'],
817
+ ['potm', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'],
818
+ ['potx', 'application/vnd.openxmlformats-officedocument.presentationml.template'],
819
+ ['ppa', 'application/vnd.ms-powerpoint'],
820
+ ['ppam', 'application/vnd.ms-powerpoint.addin.macroEnabled.12'],
821
+ ['ppd', 'application/vnd.cups-ppd'],
822
+ ['ppm', 'image/x-portable-pixmap'],
823
+ ['pps', 'application/vnd.ms-powerpoint'],
824
+ ['ppsm', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'],
825
+ ['ppsx', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'],
826
+ ['ppt', 'application/powerpoint'],
827
+ ['pptm', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'],
828
+ ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],
829
+ ['pqa', 'application/vnd.palm'],
830
+ ['prc', 'application/x-pilot'],
831
+ ['pre', 'application/vnd.lotus-freelance'],
832
+ ['prf', 'application/pics-rules'],
833
+ ['provx', 'application/provenance+xml'],
834
+ ['ps', 'application/postscript'],
835
+ ['psb', 'application/vnd.3gpp.pic-bw-small'],
836
+ ['psd', 'application/x-photoshop'],
837
+ ['psf', 'application/x-font-linux-psf'],
838
+ ['pskcxml', 'application/pskc+xml'],
839
+ ['pti', 'image/prs.pti'],
840
+ ['ptid', 'application/vnd.pvi.ptid1'],
841
+ ['pub', 'application/x-mspublisher'],
842
+ ['pvb', 'application/vnd.3gpp.pic-bw-var'],
843
+ ['pwn', 'application/vnd.3m.post-it-notes'],
844
+ ['pya', 'audio/vnd.ms-playready.media.pya'],
845
+ ['pyv', 'video/vnd.ms-playready.media.pyv'],
846
+ ['qam', 'application/vnd.epson.quickanime'],
847
+ ['qbo', 'application/vnd.intu.qbo'],
848
+ ['qfx', 'application/vnd.intu.qfx'],
849
+ ['qps', 'application/vnd.publishare-delta-tree'],
850
+ ['qt', 'video/quicktime'],
851
+ ['qwd', 'application/vnd.quark.quarkxpress'],
852
+ ['qwt', 'application/vnd.quark.quarkxpress'],
853
+ ['qxb', 'application/vnd.quark.quarkxpress'],
854
+ ['qxd', 'application/vnd.quark.quarkxpress'],
855
+ ['qxl', 'application/vnd.quark.quarkxpress'],
856
+ ['qxt', 'application/vnd.quark.quarkxpress'],
857
+ ['ra', 'audio/x-realaudio'],
858
+ ['ram', 'audio/x-pn-realaudio'],
859
+ ['raml', 'application/raml+yaml'],
860
+ ['rapd', 'application/route-apd+xml'],
861
+ ['rar', 'application/x-rar'],
862
+ ['ras', 'image/x-cmu-raster'],
863
+ ['rcprofile', 'application/vnd.ipunplugged.rcprofile'],
864
+ ['rdf', 'application/rdf+xml'],
865
+ ['rdz', 'application/vnd.data-vision.rdz'],
866
+ ['relo', 'application/p2p-overlay+xml'],
867
+ ['rep', 'application/vnd.businessobjects'],
868
+ ['res', 'application/x-dtbresource+xml'],
869
+ ['rgb', 'image/x-rgb'],
870
+ ['rif', 'application/reginfo+xml'],
871
+ ['rip', 'audio/vnd.rip'],
872
+ ['ris', 'application/x-research-info-systems'],
873
+ ['rl', 'application/resource-lists+xml'],
874
+ ['rlc', 'image/vnd.fujixerox.edmics-rlc'],
875
+ ['rld', 'application/resource-lists-diff+xml'],
876
+ ['rm', 'audio/x-pn-realaudio'],
877
+ ['rmi', 'audio/midi'],
878
+ ['rmp', 'audio/x-pn-realaudio-plugin'],
879
+ ['rms', 'application/vnd.jcp.javame.midlet-rms'],
880
+ ['rmvb', 'application/vnd.rn-realmedia-vbr'],
881
+ ['rnc', 'application/relax-ng-compact-syntax'],
882
+ ['rng', 'application/xml'],
883
+ ['roa', 'application/rpki-roa'],
884
+ ['roff', 'text/troff'],
885
+ ['rp9', 'application/vnd.cloanto.rp9'],
886
+ ['rpm', 'audio/x-pn-realaudio-plugin'],
887
+ ['rpss', 'application/vnd.nokia.radio-presets'],
888
+ ['rpst', 'application/vnd.nokia.radio-preset'],
889
+ ['rq', 'application/sparql-query'],
890
+ ['rs', 'application/rls-services+xml'],
891
+ ['rsa', 'application/x-pkcs7'],
892
+ ['rsat', 'application/atsc-rsat+xml'],
893
+ ['rsd', 'application/rsd+xml'],
894
+ ['rsheet', 'application/urc-ressheet+xml'],
895
+ ['rss', 'application/rss+xml'],
896
+ ['rtf', 'text/rtf'],
897
+ ['rtx', 'text/richtext'],
898
+ ['run', 'application/x-makeself'],
899
+ ['rusd', 'application/route-usd+xml'],
900
+ ['rv', 'video/vnd.rn-realvideo'],
901
+ ['s', 'text/x-asm'],
902
+ ['s3m', 'audio/s3m'],
903
+ ['saf', 'application/vnd.yamaha.smaf-audio'],
904
+ ['sass', 'text/x-sass'],
905
+ ['sbml', 'application/sbml+xml'],
906
+ ['sc', 'application/vnd.ibm.secure-container'],
907
+ ['scd', 'application/x-msschedule'],
908
+ ['scm', 'application/vnd.lotus-screencam'],
909
+ ['scq', 'application/scvp-cv-request'],
910
+ ['scs', 'application/scvp-cv-response'],
911
+ ['scss', 'text/x-scss'],
912
+ ['scurl', 'text/vnd.curl.scurl'],
913
+ ['sda', 'application/vnd.stardivision.draw'],
914
+ ['sdc', 'application/vnd.stardivision.calc'],
915
+ ['sdd', 'application/vnd.stardivision.impress'],
916
+ ['sdkd', 'application/vnd.solent.sdkm+xml'],
917
+ ['sdkm', 'application/vnd.solent.sdkm+xml'],
918
+ ['sdp', 'application/sdp'],
919
+ ['sdw', 'application/vnd.stardivision.writer'],
920
+ ['sea', 'application/octet-stream'],
921
+ ['see', 'application/vnd.seemail'],
922
+ ['seed', 'application/vnd.fdsn.seed'],
923
+ ['sema', 'application/vnd.sema'],
924
+ ['semd', 'application/vnd.semd'],
925
+ ['semf', 'application/vnd.semf'],
926
+ ['senmlx', 'application/senml+xml'],
927
+ ['sensmlx', 'application/sensml+xml'],
928
+ ['ser', 'application/java-serialized-object'],
929
+ ['setpay', 'application/set-payment-initiation'],
930
+ ['setreg', 'application/set-registration-initiation'],
931
+ ['sfd-hdstx', 'application/vnd.hydrostatix.sof-data'],
932
+ ['sfs', 'application/vnd.spotfire.sfs'],
933
+ ['sfv', 'text/x-sfv'],
934
+ ['sgi', 'image/sgi'],
935
+ ['sgl', 'application/vnd.stardivision.writer-global'],
936
+ ['sgm', 'text/sgml'],
937
+ ['sgml', 'text/sgml'],
938
+ ['sh', 'application/x-sh'],
939
+ ['shar', 'application/x-shar'],
940
+ ['shex', 'text/shex'],
941
+ ['shf', 'application/shf+xml'],
942
+ ['shtml', 'text/html'],
943
+ ['sid', 'image/x-mrsid-image'],
944
+ ['sieve', 'application/sieve'],
945
+ ['sig', 'application/pgp-signature'],
946
+ ['sil', 'audio/silk'],
947
+ ['silo', 'model/mesh'],
948
+ ['sis', 'application/vnd.symbian.install'],
949
+ ['sisx', 'application/vnd.symbian.install'],
950
+ ['sit', 'application/x-stuffit'],
951
+ ['sitx', 'application/x-stuffitx'],
952
+ ['siv', 'application/sieve'],
953
+ ['skd', 'application/vnd.koan'],
954
+ ['skm', 'application/vnd.koan'],
955
+ ['skp', 'application/vnd.koan'],
956
+ ['skt', 'application/vnd.koan'],
957
+ ['sldm', 'application/vnd.ms-powerpoint.slide.macroenabled.12'],
958
+ ['sldx', 'application/vnd.openxmlformats-officedocument.presentationml.slide'],
959
+ ['slim', 'text/slim'],
960
+ ['slm', 'text/slim'],
961
+ ['sls', 'application/route-s-tsid+xml'],
962
+ ['slt', 'application/vnd.epson.salt'],
963
+ ['sm', 'application/vnd.stepmania.stepchart'],
964
+ ['smf', 'application/vnd.stardivision.math'],
965
+ ['smi', 'application/smil'],
966
+ ['smil', 'application/smil'],
967
+ ['smv', 'video/x-smv'],
968
+ ['smzip', 'application/vnd.stepmania.package'],
969
+ ['snd', 'audio/basic'],
970
+ ['snf', 'application/x-font-snf'],
971
+ ['so', 'application/octet-stream'],
972
+ ['spc', 'application/x-pkcs7-certificates'],
973
+ ['spdx', 'text/spdx'],
974
+ ['spf', 'application/vnd.yamaha.smaf-phrase'],
975
+ ['spl', 'application/x-futuresplash'],
976
+ ['spot', 'text/vnd.in3d.spot'],
977
+ ['spp', 'application/scvp-vp-response'],
978
+ ['spq', 'application/scvp-vp-request'],
979
+ ['spx', 'audio/ogg'],
980
+ ['sql', 'application/x-sql'],
981
+ ['src', 'application/x-wais-source'],
982
+ ['srt', 'application/x-subrip'],
983
+ ['sru', 'application/sru+xml'],
984
+ ['srx', 'application/sparql-results+xml'],
985
+ ['ssdl', 'application/ssdl+xml'],
986
+ ['sse', 'application/vnd.kodak-descriptor'],
987
+ ['ssf', 'application/vnd.epson.ssf'],
988
+ ['ssml', 'application/ssml+xml'],
989
+ ['sst', 'application/octet-stream'],
990
+ ['st', 'application/vnd.sailingtracker.track'],
991
+ ['stc', 'application/vnd.sun.xml.calc.template'],
992
+ ['std', 'application/vnd.sun.xml.draw.template'],
993
+ ['stf', 'application/vnd.wt.stf'],
994
+ ['sti', 'application/vnd.sun.xml.impress.template'],
995
+ ['stk', 'application/hyperstudio'],
996
+ ['stl', 'model/stl'],
997
+ ['stpx', 'model/step+xml'],
998
+ ['stpxz', 'model/step-xml+zip'],
999
+ ['stpz', 'model/step+zip'],
1000
+ ['str', 'application/vnd.pg.format'],
1001
+ ['stw', 'application/vnd.sun.xml.writer.template'],
1002
+ ['styl', 'text/stylus'],
1003
+ ['stylus', 'text/stylus'],
1004
+ ['sub', 'text/vnd.dvb.subtitle'],
1005
+ ['sus', 'application/vnd.sus-calendar'],
1006
+ ['susp', 'application/vnd.sus-calendar'],
1007
+ ['sv4cpio', 'application/x-sv4cpio'],
1008
+ ['sv4crc', 'application/x-sv4crc'],
1009
+ ['svc', 'application/vnd.dvb.service'],
1010
+ ['svd', 'application/vnd.svd'],
1011
+ ['svg', 'image/svg+xml'],
1012
+ ['svgz', 'image/svg+xml'],
1013
+ ['swa', 'application/x-director'],
1014
+ ['swf', 'application/x-shockwave-flash'],
1015
+ ['swi', 'application/vnd.aristanetworks.swi'],
1016
+ ['swidtag', 'application/swid+xml'],
1017
+ ['sxc', 'application/vnd.sun.xml.calc'],
1018
+ ['sxd', 'application/vnd.sun.xml.draw'],
1019
+ ['sxg', 'application/vnd.sun.xml.writer.global'],
1020
+ ['sxi', 'application/vnd.sun.xml.impress'],
1021
+ ['sxm', 'application/vnd.sun.xml.math'],
1022
+ ['sxw', 'application/vnd.sun.xml.writer'],
1023
+ ['t', 'text/troff'],
1024
+ ['t3', 'application/x-t3vm-image'],
1025
+ ['t38', 'image/t38'],
1026
+ ['taglet', 'application/vnd.mynfc'],
1027
+ ['tao', 'application/vnd.tao.intent-module-archive'],
1028
+ ['tap', 'image/vnd.tencent.tap'],
1029
+ ['tar', 'application/x-tar'],
1030
+ ['tcap', 'application/vnd.3gpp2.tcap'],
1031
+ ['tcl', 'application/x-tcl'],
1032
+ ['td', 'application/urc-targetdesc+xml'],
1033
+ ['teacher', 'application/vnd.smart.teacher'],
1034
+ ['tei', 'application/tei+xml'],
1035
+ ['teicorpus', 'application/tei+xml'],
1036
+ ['tex', 'application/x-tex'],
1037
+ ['texi', 'application/x-texinfo'],
1038
+ ['texinfo', 'application/x-texinfo'],
1039
+ ['text', 'text/plain'],
1040
+ ['tfi', 'application/thraud+xml'],
1041
+ ['tfm', 'application/x-tex-tfm'],
1042
+ ['tfx', 'image/tiff-fx'],
1043
+ ['tga', 'image/x-tga'],
1044
+ ['tgz', 'application/x-tar'],
1045
+ ['thmx', 'application/vnd.ms-officetheme'],
1046
+ ['tif', 'image/tiff'],
1047
+ ['tiff', 'image/tiff'],
1048
+ ['tk', 'application/x-tcl'],
1049
+ ['tmo', 'application/vnd.tmobile-livetv'],
1050
+ ['toml', 'application/toml'],
1051
+ ['torrent', 'application/x-bittorrent'],
1052
+ ['tpl', 'application/vnd.groove-tool-template'],
1053
+ ['tpt', 'application/vnd.trid.tpt'],
1054
+ ['tr', 'text/troff'],
1055
+ ['tra', 'application/vnd.trueapp'],
1056
+ ['trig', 'application/trig'],
1057
+ ['trm', 'application/x-msterminal'],
1058
+ ['ts', 'video/mp2t'],
1059
+ ['tsd', 'application/timestamped-data'],
1060
+ ['tsv', 'text/tab-separated-values'],
1061
+ ['ttc', 'font/collection'],
1062
+ ['ttf', 'font/ttf'],
1063
+ ['ttl', 'text/turtle'],
1064
+ ['ttml', 'application/ttml+xml'],
1065
+ ['twd', 'application/vnd.simtech-mindmapper'],
1066
+ ['twds', 'application/vnd.simtech-mindmapper'],
1067
+ ['txd', 'application/vnd.genomatix.tuxedo'],
1068
+ ['txf', 'application/vnd.mobius.txf'],
1069
+ ['txt', 'text/plain'],
1070
+ ['u8dsn', 'message/global-delivery-status'],
1071
+ ['u8hdr', 'message/global-headers'],
1072
+ ['u8mdn', 'message/global-disposition-notification'],
1073
+ ['u8msg', 'message/global'],
1074
+ ['u32', 'application/x-authorware-bin'],
1075
+ ['ubj', 'application/ubjson'],
1076
+ ['udeb', 'application/x-debian-package'],
1077
+ ['ufd', 'application/vnd.ufdl'],
1078
+ ['ufdl', 'application/vnd.ufdl'],
1079
+ ['ulx', 'application/x-glulx'],
1080
+ ['umj', 'application/vnd.umajin'],
1081
+ ['unityweb', 'application/vnd.unity'],
1082
+ ['uoml', 'application/vnd.uoml+xml'],
1083
+ ['uri', 'text/uri-list'],
1084
+ ['uris', 'text/uri-list'],
1085
+ ['urls', 'text/uri-list'],
1086
+ ['usdz', 'model/vnd.usdz+zip'],
1087
+ ['ustar', 'application/x-ustar'],
1088
+ ['utz', 'application/vnd.uiq.theme'],
1089
+ ['uu', 'text/x-uuencode'],
1090
+ ['uva', 'audio/vnd.dece.audio'],
1091
+ ['uvd', 'application/vnd.dece.data'],
1092
+ ['uvf', 'application/vnd.dece.data'],
1093
+ ['uvg', 'image/vnd.dece.graphic'],
1094
+ ['uvh', 'video/vnd.dece.hd'],
1095
+ ['uvi', 'image/vnd.dece.graphic'],
1096
+ ['uvm', 'video/vnd.dece.mobile'],
1097
+ ['uvp', 'video/vnd.dece.pd'],
1098
+ ['uvs', 'video/vnd.dece.sd'],
1099
+ ['uvt', 'application/vnd.dece.ttml+xml'],
1100
+ ['uvu', 'video/vnd.uvvu.mp4'],
1101
+ ['uvv', 'video/vnd.dece.video'],
1102
+ ['uvva', 'audio/vnd.dece.audio'],
1103
+ ['uvvd', 'application/vnd.dece.data'],
1104
+ ['uvvf', 'application/vnd.dece.data'],
1105
+ ['uvvg', 'image/vnd.dece.graphic'],
1106
+ ['uvvh', 'video/vnd.dece.hd'],
1107
+ ['uvvi', 'image/vnd.dece.graphic'],
1108
+ ['uvvm', 'video/vnd.dece.mobile'],
1109
+ ['uvvp', 'video/vnd.dece.pd'],
1110
+ ['uvvs', 'video/vnd.dece.sd'],
1111
+ ['uvvt', 'application/vnd.dece.ttml+xml'],
1112
+ ['uvvu', 'video/vnd.uvvu.mp4'],
1113
+ ['uvvv', 'video/vnd.dece.video'],
1114
+ ['uvvx', 'application/vnd.dece.unspecified'],
1115
+ ['uvvz', 'application/vnd.dece.zip'],
1116
+ ['uvx', 'application/vnd.dece.unspecified'],
1117
+ ['uvz', 'application/vnd.dece.zip'],
1118
+ ['vbox', 'application/x-virtualbox-vbox'],
1119
+ ['vbox-extpack', 'application/x-virtualbox-vbox-extpack'],
1120
+ ['vcard', 'text/vcard'],
1121
+ ['vcd', 'application/x-cdlink'],
1122
+ ['vcf', 'text/x-vcard'],
1123
+ ['vcg', 'application/vnd.groove-vcard'],
1124
+ ['vcs', 'text/x-vcalendar'],
1125
+ ['vcx', 'application/vnd.vcx'],
1126
+ ['vdi', 'application/x-virtualbox-vdi'],
1127
+ ['vds', 'model/vnd.sap.vds'],
1128
+ ['vhd', 'application/x-virtualbox-vhd'],
1129
+ ['vis', 'application/vnd.visionary'],
1130
+ ['viv', 'video/vnd.vivo'],
1131
+ ['vlc', 'application/videolan'],
1132
+ ['vmdk', 'application/x-virtualbox-vmdk'],
1133
+ ['vob', 'video/x-ms-vob'],
1134
+ ['vor', 'application/vnd.stardivision.writer'],
1135
+ ['vox', 'application/x-authorware-bin'],
1136
+ ['vrml', 'model/vrml'],
1137
+ ['vsd', 'application/vnd.visio'],
1138
+ ['vsf', 'application/vnd.vsf'],
1139
+ ['vss', 'application/vnd.visio'],
1140
+ ['vst', 'application/vnd.visio'],
1141
+ ['vsw', 'application/vnd.visio'],
1142
+ ['vtf', 'image/vnd.valve.source.texture'],
1143
+ ['vtt', 'text/vtt'],
1144
+ ['vtu', 'model/vnd.vtu'],
1145
+ ['vxml', 'application/voicexml+xml'],
1146
+ ['w3d', 'application/x-director'],
1147
+ ['wad', 'application/x-doom'],
1148
+ ['wadl', 'application/vnd.sun.wadl+xml'],
1149
+ ['war', 'application/java-archive'],
1150
+ ['wasm', 'application/wasm'],
1151
+ ['wav', 'audio/x-wav'],
1152
+ ['wax', 'audio/x-ms-wax'],
1153
+ ['wbmp', 'image/vnd.wap.wbmp'],
1154
+ ['wbs', 'application/vnd.criticaltools.wbs+xml'],
1155
+ ['wbxml', 'application/wbxml'],
1156
+ ['wcm', 'application/vnd.ms-works'],
1157
+ ['wdb', 'application/vnd.ms-works'],
1158
+ ['wdp', 'image/vnd.ms-photo'],
1159
+ ['weba', 'audio/webm'],
1160
+ ['webapp', 'application/x-web-app-manifest+json'],
1161
+ ['webm', 'video/webm'],
1162
+ ['webmanifest', 'application/manifest+json'],
1163
+ ['webp', 'image/webp'],
1164
+ ['wg', 'application/vnd.pmi.widget'],
1165
+ ['wgt', 'application/widget'],
1166
+ ['wks', 'application/vnd.ms-works'],
1167
+ ['wm', 'video/x-ms-wm'],
1168
+ ['wma', 'audio/x-ms-wma'],
1169
+ ['wmd', 'application/x-ms-wmd'],
1170
+ ['wmf', 'image/wmf'],
1171
+ ['wml', 'text/vnd.wap.wml'],
1172
+ ['wmlc', 'application/wmlc'],
1173
+ ['wmls', 'text/vnd.wap.wmlscript'],
1174
+ ['wmlsc', 'application/vnd.wap.wmlscriptc'],
1175
+ ['wmv', 'video/x-ms-wmv'],
1176
+ ['wmx', 'video/x-ms-wmx'],
1177
+ ['wmz', 'application/x-msmetafile'],
1178
+ ['woff', 'font/woff'],
1179
+ ['woff2', 'font/woff2'],
1180
+ ['word', 'application/msword'],
1181
+ ['wpd', 'application/vnd.wordperfect'],
1182
+ ['wpl', 'application/vnd.ms-wpl'],
1183
+ ['wps', 'application/vnd.ms-works'],
1184
+ ['wqd', 'application/vnd.wqd'],
1185
+ ['wri', 'application/x-mswrite'],
1186
+ ['wrl', 'model/vrml'],
1187
+ ['wsc', 'message/vnd.wfa.wsc'],
1188
+ ['wsdl', 'application/wsdl+xml'],
1189
+ ['wspolicy', 'application/wspolicy+xml'],
1190
+ ['wtb', 'application/vnd.webturbo'],
1191
+ ['wvx', 'video/x-ms-wvx'],
1192
+ ['x3d', 'model/x3d+xml'],
1193
+ ['x3db', 'model/x3d+fastinfoset'],
1194
+ ['x3dbz', 'model/x3d+binary'],
1195
+ ['x3dv', 'model/x3d-vrml'],
1196
+ ['x3dvz', 'model/x3d+vrml'],
1197
+ ['x3dz', 'model/x3d+xml'],
1198
+ ['x32', 'application/x-authorware-bin'],
1199
+ ['x_b', 'model/vnd.parasolid.transmit.binary'],
1200
+ ['x_t', 'model/vnd.parasolid.transmit.text'],
1201
+ ['xaml', 'application/xaml+xml'],
1202
+ ['xap', 'application/x-silverlight-app'],
1203
+ ['xar', 'application/vnd.xara'],
1204
+ ['xav', 'application/xcap-att+xml'],
1205
+ ['xbap', 'application/x-ms-xbap'],
1206
+ ['xbd', 'application/vnd.fujixerox.docuworks.binder'],
1207
+ ['xbm', 'image/x-xbitmap'],
1208
+ ['xca', 'application/xcap-caps+xml'],
1209
+ ['xcs', 'application/calendar+xml'],
1210
+ ['xdf', 'application/xcap-diff+xml'],
1211
+ ['xdm', 'application/vnd.syncml.dm+xml'],
1212
+ ['xdp', 'application/vnd.adobe.xdp+xml'],
1213
+ ['xdssc', 'application/dssc+xml'],
1214
+ ['xdw', 'application/vnd.fujixerox.docuworks'],
1215
+ ['xel', 'application/xcap-el+xml'],
1216
+ ['xenc', 'application/xenc+xml'],
1217
+ ['xer', 'application/patch-ops-error+xml'],
1218
+ ['xfdf', 'application/vnd.adobe.xfdf'],
1219
+ ['xfdl', 'application/vnd.xfdl'],
1220
+ ['xht', 'application/xhtml+xml'],
1221
+ ['xhtml', 'application/xhtml+xml'],
1222
+ ['xhvml', 'application/xv+xml'],
1223
+ ['xif', 'image/vnd.xiff'],
1224
+ ['xl', 'application/excel'],
1225
+ ['xla', 'application/vnd.ms-excel'],
1226
+ ['xlam', 'application/vnd.ms-excel.addin.macroEnabled.12'],
1227
+ ['xlc', 'application/vnd.ms-excel'],
1228
+ ['xlf', 'application/xliff+xml'],
1229
+ ['xlm', 'application/vnd.ms-excel'],
1230
+ ['xls', 'application/vnd.ms-excel'],
1231
+ ['xlsb', 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'],
1232
+ ['xlsm', 'application/vnd.ms-excel.sheet.macroEnabled.12'],
1233
+ ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
1234
+ ['xlt', 'application/vnd.ms-excel'],
1235
+ ['xltm', 'application/vnd.ms-excel.template.macroEnabled.12'],
1236
+ ['xltx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'],
1237
+ ['xlw', 'application/vnd.ms-excel'],
1238
+ ['xm', 'audio/xm'],
1239
+ ['xml', 'application/xml'],
1240
+ ['xns', 'application/xcap-ns+xml'],
1241
+ ['xo', 'application/vnd.olpc-sugar'],
1242
+ ['xop', 'application/xop+xml'],
1243
+ ['xpi', 'application/x-xpinstall'],
1244
+ ['xpl', 'application/xproc+xml'],
1245
+ ['xpm', 'image/x-xpixmap'],
1246
+ ['xpr', 'application/vnd.is-xpr'],
1247
+ ['xps', 'application/vnd.ms-xpsdocument'],
1248
+ ['xpw', 'application/vnd.intercon.formnet'],
1249
+ ['xpx', 'application/vnd.intercon.formnet'],
1250
+ ['xsd', 'application/xml'],
1251
+ ['xsl', 'application/xml'],
1252
+ ['xslt', 'application/xslt+xml'],
1253
+ ['xsm', 'application/vnd.syncml+xml'],
1254
+ ['xspf', 'application/xspf+xml'],
1255
+ ['xul', 'application/vnd.mozilla.xul+xml'],
1256
+ ['xvm', 'application/xv+xml'],
1257
+ ['xvml', 'application/xv+xml'],
1258
+ ['xwd', 'image/x-xwindowdump'],
1259
+ ['xyz', 'chemical/x-xyz'],
1260
+ ['xz', 'application/x-xz'],
1261
+ ['yaml', 'text/yaml'],
1262
+ ['yang', 'application/yang'],
1263
+ ['yin', 'application/yin+xml'],
1264
+ ['yml', 'text/yaml'],
1265
+ ['ymp', 'text/x-suse-ymp'],
1266
+ ['z', 'application/x-compress'],
1267
+ ['z1', 'application/x-zmachine'],
1268
+ ['z2', 'application/x-zmachine'],
1269
+ ['z3', 'application/x-zmachine'],
1270
+ ['z4', 'application/x-zmachine'],
1271
+ ['z5', 'application/x-zmachine'],
1272
+ ['z6', 'application/x-zmachine'],
1273
+ ['z7', 'application/x-zmachine'],
1274
+ ['z8', 'application/x-zmachine'],
1275
+ ['zaz', 'application/vnd.zzazz.deck+xml'],
1276
+ ['zip', 'application/zip'],
1277
+ ['zir', 'application/vnd.zul'],
1278
+ ['zirz', 'application/vnd.zul'],
1279
+ ['zmm', 'application/vnd.handheld-entertainment+xml'],
1280
+ ['zsh', 'text/x-scriptzsh']
1281
+ ]);
1282
+ function toFileWithPath(file, path, h) {
1283
+ const f = withMimeType(file);
1284
+ const { webkitRelativePath } = file;
1285
+ const p = typeof path === 'string'
1286
+ ? path
1287
+ // If <input webkitdirectory> is set,
1288
+ // the File will have a {webkitRelativePath} property
1289
+ // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory
1290
+ : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0
1291
+ ? webkitRelativePath
1292
+ : `./${file.name}`;
1293
+ if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path
1294
+ setObjProp(f, 'path', p);
1295
+ }
1296
+ // Always populate a relative path so that even electron apps have access to a relativePath value
1297
+ setObjProp(f, 'relativePath', p);
1298
+ return f;
1299
+ }
1300
+ function withMimeType(file) {
1301
+ const { name } = file;
1302
+ const hasExtension = name && name.lastIndexOf('.') !== -1;
1303
+ if (hasExtension && !file.type) {
1304
+ const ext = name.split('.')
1305
+ .pop().toLowerCase();
1306
+ const type = COMMON_MIME_TYPES.get(ext);
1307
+ if (type) {
1308
+ Object.defineProperty(file, 'type', {
1309
+ value: type,
1310
+ writable: false,
1311
+ configurable: false,
1312
+ enumerable: true
1313
+ });
1314
+ }
1315
+ }
1316
+ return file;
1317
+ }
1318
+ function setObjProp(f, key, value) {
1319
+ Object.defineProperty(f, key, {
1320
+ value,
1321
+ writable: false,
1322
+ configurable: false,
1323
+ enumerable: true
1324
+ });
1325
+ }
1326
+
1327
+ const FILES_TO_IGNORE = [
1328
+ // Thumbnail cache files for macOS and Windows
1329
+ '.DS_Store', // macOs
1330
+ 'Thumbs.db' // Windows
1331
+ ];
1332
+ /**
1333
+ * Convert a DragEvent's DataTrasfer object to a list of File objects
1334
+ * NOTE: If some of the items are folders,
1335
+ * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.
1336
+ *
1337
+ * EXPERIMENTAL: A list of https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle objects can also be passed as an arg
1338
+ * and a list of File objects will be returned.
1339
+ *
1340
+ * @param evt
1341
+ */
1342
+ function fromEvent(evt) {
1343
+ return __awaiter(this, void 0, void 0, function* () {
1344
+ if (isObject(evt) && isDataTransfer(evt.dataTransfer)) {
1345
+ return getDataTransferFiles(evt.dataTransfer, evt.type);
1346
+ }
1347
+ else if (isChangeEvt(evt)) {
1348
+ return getInputFiles(evt);
1349
+ }
1350
+ else if (Array.isArray(evt) && evt.every(item => 'getFile' in item && typeof item.getFile === 'function')) {
1351
+ return getFsHandleFiles(evt);
1352
+ }
1353
+ return [];
1354
+ });
1355
+ }
1356
+ function isDataTransfer(value) {
1357
+ return isObject(value);
1358
+ }
1359
+ function isChangeEvt(value) {
1360
+ return isObject(value) && isObject(value.target);
1361
+ }
1362
+ function isObject(v) {
1363
+ return typeof v === 'object' && v !== null;
1364
+ }
1365
+ function getInputFiles(evt) {
1366
+ return fromList(evt.target.files).map(file => toFileWithPath(file));
1367
+ }
1368
+ // Ee expect each handle to be https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle
1369
+ function getFsHandleFiles(handles) {
1370
+ return __awaiter(this, void 0, void 0, function* () {
1371
+ const files = yield Promise.all(handles.map(h => h.getFile()));
1372
+ return files.map(file => toFileWithPath(file));
1373
+ });
1374
+ }
1375
+ function getDataTransferFiles(dt, type) {
1376
+ return __awaiter(this, void 0, void 0, function* () {
1377
+ // IE11 does not support dataTransfer.items
1378
+ // See https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility
1379
+ if (dt.items) {
1380
+ const items = fromList(dt.items)
1381
+ .filter(item => item.kind === 'file');
1382
+ // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,
1383
+ // only 'dragstart' and 'drop' has access to the data (source node)
1384
+ if (type !== 'drop') {
1385
+ return items;
1386
+ }
1387
+ const files = yield Promise.all(items.map(toFilePromises));
1388
+ return noIgnoredFiles(flatten(files));
1389
+ }
1390
+ return noIgnoredFiles(fromList(dt.files)
1391
+ .map(file => toFileWithPath(file)));
1392
+ });
1393
+ }
1394
+ function noIgnoredFiles(files) {
1395
+ return files.filter(file => FILES_TO_IGNORE.indexOf(file.name) === -1);
1396
+ }
1397
+ // IE11 does not support Array.from()
1398
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility
1399
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileList
1400
+ // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList
1401
+ function fromList(items) {
1402
+ if (items === null) {
1403
+ return [];
1404
+ }
1405
+ const files = [];
1406
+ // tslint:disable: prefer-for-of
1407
+ for (let i = 0; i < items.length; i++) {
1408
+ const file = items[i];
1409
+ files.push(file);
1410
+ }
1411
+ return files;
1412
+ }
1413
+ // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem
1414
+ function toFilePromises(item) {
1415
+ if (typeof item.webkitGetAsEntry !== 'function') {
1416
+ return fromDataTransferItem(item);
1417
+ }
1418
+ const entry = item.webkitGetAsEntry();
1419
+ // Safari supports dropping an image node from a different window and can be retrieved using
1420
+ // the DataTransferItem.getAsFile() API
1421
+ // NOTE: FileSystemEntry.file() throws if trying to get the file
1422
+ if (entry && entry.isDirectory) {
1423
+ return fromDirEntry(entry);
1424
+ }
1425
+ return fromDataTransferItem(item, entry);
1426
+ }
1427
+ function flatten(items) {
1428
+ return items.reduce((acc, files) => [
1429
+ ...acc,
1430
+ ...(Array.isArray(files) ? flatten(files) : [files])
1431
+ ], []);
1432
+ }
1433
+ function fromDataTransferItem(item, entry) {
1434
+ return __awaiter(this, void 0, void 0, function* () {
1435
+ var _a;
1436
+ // Check if we're in a secure context; due to a bug in Chrome (as far as we know)
1437
+ // the browser crashes when calling this API (yet to be confirmed as a consistent behaviour).
1438
+ //
1439
+ // See:
1440
+ // - https://issues.chromium.org/issues/40186242
1441
+ // - https://github.com/react-dropzone/react-dropzone/issues/1397
1442
+ if (globalThis.isSecureContext && typeof item.getAsFileSystemHandle === 'function') {
1443
+ const h = yield item.getAsFileSystemHandle();
1444
+ if (h === null) {
1445
+ throw new Error(`${item} is not a File`);
1446
+ }
1447
+ // It seems that the handle can be `undefined` (see https://github.com/react-dropzone/file-selector/issues/120),
1448
+ // so we check if it isn't; if it is, the code path continues to the next API (`getAsFile`).
1449
+ if (h !== undefined) {
1450
+ const file = yield h.getFile();
1451
+ file.handle = h;
1452
+ return toFileWithPath(file);
1453
+ }
1454
+ }
1455
+ const file = item.getAsFile();
1456
+ if (!file) {
1457
+ throw new Error(`${item} is not a File`);
1458
+ }
1459
+ const fwp = toFileWithPath(file, (_a = entry === null || entry === void 0 ? void 0 : entry.fullPath) !== null && _a !== void 0 ? _a : undefined);
1460
+ return fwp;
1461
+ });
1462
+ }
1463
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry
1464
+ function fromEntry(entry) {
1465
+ return __awaiter(this, void 0, void 0, function* () {
1466
+ return entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry);
1467
+ });
1468
+ }
1469
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry
1470
+ function fromDirEntry(entry) {
1471
+ const reader = entry.createReader();
1472
+ return new Promise((resolve, reject) => {
1473
+ const entries = [];
1474
+ function readEntries() {
1475
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader
1476
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries
1477
+ reader.readEntries((batch) => __awaiter(this, void 0, void 0, function* () {
1478
+ if (!batch.length) {
1479
+ // Done reading directory
1480
+ try {
1481
+ const files = yield Promise.all(entries);
1482
+ resolve(files);
1483
+ }
1484
+ catch (err) {
1485
+ reject(err);
1486
+ }
1487
+ }
1488
+ else {
1489
+ const items = Promise.all(batch.map(fromEntry));
1490
+ entries.push(items);
1491
+ // Continue reading
1492
+ readEntries();
1493
+ }
1494
+ }), (err) => {
1495
+ reject(err);
1496
+ });
1497
+ }
1498
+ readEntries();
1499
+ });
1500
+ }
1501
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry
1502
+ function fromFileEntry(entry) {
1503
+ return __awaiter(this, void 0, void 0, function* () {
1504
+ return new Promise((resolve, reject) => {
1505
+ entry.file((file) => {
1506
+ const fwp = toFileWithPath(file, entry.fullPath);
1507
+ resolve(fwp);
1508
+ }, (err) => {
1509
+ reject(err);
1510
+ });
1511
+ });
1512
+ });
1513
+ }
1514
+
1515
+ const dropzoneAppearanceDefault = {
1516
+ defaultSecondary: {
1517
+ fill: 'surfaceSecondary',
1518
+ fillHover: 'surfaceTertiary',
1519
+ hintTitle: 'Перетащите изображение или выберите файл с компьютера',
1520
+ hintTitleTextColor: 'surfaceTextPrimary',
1521
+ hintTitleTextSize: 'm',
1522
+ removeThumbText: 'удалить',
1523
+ removeThumbTextColor: 'errorTextPrimary',
1524
+ thumbBorderColor: 'surfaceBorderTertiary',
1525
+ thumbBorderColorHover: 'surfaceBorderQuaternary',
1526
+ thumbBorderWidth: '1',
1527
+ thumbNameTextColor: 'surfaceTextPrimary',
1528
+ thumbNameTextSize: 's',
1529
+ },
1530
+ };
1531
+
1532
+ const dropzoneAppearanceDisabled = {
1533
+ disabledTertiary: {
1534
+ fill: 'disabledTertiary',
1535
+ fillHover: 'disabledQuaternary',
1536
+ hintTitle: 'Перетащите изображение или выберите файл с компьютера',
1537
+ hintTitleTextColor: 'disabledTextSecondary',
1538
+ hintTitleTextSize: 'm',
1539
+ removeThumbText: 'удалить',
1540
+ removeThumbTextColor: 'errorTextPrimary',
1541
+ thumbBorderColor: 'surfaceBorderTertiary',
1542
+ thumbBorderColorHover: 'surfaceBorderQuaternary',
1543
+ thumbBorderWidth: '1',
1544
+ thumbNameTextColor: 'surfaceTextPrimary',
1545
+ thumbNameTextSize: 's',
1546
+ },
1547
+ };
1548
+
1549
+ const dropzoneAppearanceError = {
1550
+ errorTertiary: {
1551
+ fill: 'errorTertiary',
1552
+ fillHover: 'errorTertiary',
1553
+ hintTitle: 'Перетащите изображение или выберите файл с компьютера',
1554
+ hintTitleTextColor: 'errorTextQuaternary',
1555
+ hintTitleTextSize: 'm',
1556
+ removeThumbText: 'удалить',
1557
+ removeThumbTextColor: 'errorTextPrimary',
1558
+ thumbBorderColor: 'surfaceBorderTertiary',
1559
+ thumbBorderColorHover: 'surfaceBorderQuaternary',
1560
+ thumbBorderWidth: '1',
1561
+ thumbNameTextColor: 'surfaceTextPrimary',
1562
+ thumbNameTextSize: 's',
1563
+ },
1564
+ };
1565
+
1566
+ const dropzoneAppearanceRequire = {
1567
+ requireTertiary: {
1568
+ fill: 'warningTertiary',
1569
+ fillHover: 'warningTertiary',
1570
+ hintTitle: 'Перетащите изображение или выберите файл с компьютера',
1571
+ hintTitleTextColor: 'specialTextSecondary',
1572
+ hintTitleTextSize: 'm',
1573
+ removeThumbText: 'удалить',
1574
+ removeThumbTextColor: 'errorTextPrimary',
1575
+ thumbBorderColor: 'surfaceBorderTertiary',
1576
+ thumbBorderColorHover: 'surfaceBorderQuaternary',
1577
+ thumbBorderWidth: '1',
1578
+ thumbNameTextColor: 'surfaceTextPrimary',
1579
+ thumbNameTextSize: 's',
1580
+ },
1581
+ };
1582
+
1583
+ const dropzoneAppearanceShape = {
1584
+ circular: {
1585
+ shape: 'circular',
1586
+ },
1587
+ rounded: {
1588
+ shape: 'rounded',
1589
+ },
1590
+ roundedXL: {
1591
+ shape: 'rounded',
1592
+ shapeStrength: '2m',
1593
+ },
1594
+ roundedL: {
1595
+ shape: 'rounded',
1596
+ shapeStrength: '1_5m',
1597
+ },
1598
+ roundedM: {
1599
+ shape: 'rounded',
1600
+ shapeStrength: '1m',
1601
+ },
1602
+ roundedS: {
1603
+ shape: 'rounded',
1604
+ shapeStrength: '0_5m',
1605
+ },
1606
+ };
1607
+
1608
+ const dropzoneAppearanceSuccess = {
1609
+ successTertiary: {
1610
+ fill: 'successTertiary',
1611
+ fillHover: 'successTertiary',
1612
+ hintTitle: 'Перетащите изображение или выберите файл с компьютера',
1613
+ hintTitleTextColor: 'successTextQuaternary',
1614
+ hintTitleTextSize: 'm',
1615
+ removeThumbText: 'удалить',
1616
+ removeThumbTextColor: 'errorTextPrimary',
1617
+ thumbBorderColor: 'surfaceBorderTertiary',
1618
+ thumbBorderColorHover: 'surfaceBorderQuaternary',
1619
+ thumbBorderWidth: '1',
1620
+ thumbNameTextColor: 'surfaceTextPrimary',
1621
+ thumbNameTextSize: 's',
1622
+ },
1623
+ };
1624
+
1625
+ const dropzoneAppearance = {
1626
+ ...dropzoneAppearanceDefault,
1627
+ ...dropzoneAppearanceRequire,
1628
+ ...dropzoneAppearanceError,
1629
+ ...dropzoneAppearanceShape,
1630
+ ...dropzoneAppearanceSuccess,
1631
+ ...dropzoneAppearanceDisabled,
1632
+ };
1633
+
1634
+ const dropzoneConfig = {
1635
+ appearance: dropzoneAppearance};
1636
+ const Dropzone = React.memo(function Dropzone(props) {
1637
+ const { appearance, maxFiles = 5, maxSize = 10485760, // 10mb
1638
+ dropzoneProps = {}, fieldValuesList: maybeFieldValuesList, fileErrorText, hintDescription, inputName, showFilename = true, thumbColumn, isSkeleton, isPreviews = true, onClickPreview, onAddFiles, onChangeFiles, onDeleteFile,
1639
+ // className, unused
1640
+ // size, unused
1641
+ } = props;
1642
+ const appearanceConfig = useAppearanceConfig(appearance, dropzoneConfig);
1643
+ const propsGenerator = useDevicePropsGenerator(props, appearanceConfig);
1644
+ const { fillClass, fillHoverClass, borderColorClass, borderColorHoverClass, borderTypeClass, borderWidthClass, errorMessageTextColor, errorMessageTextSize, errorMessageTextWeight, hintDescriptionTextColor, hintDescriptionTextSize, hintDescriptionTextWeight, hintDescriptionTextWrap, hintTitle, hintTitleTextColor, hintTitleTextSize, hintTitleTextWeight, hintTitleTextWrap, removeThumbAppearance, removeThumbShape, removeThumbText, removeThumbTextWeight, shapeClass, sizeClass, thumbBorderColorClass, thumbBorderColorHoverClass, thumbBorderTypeClass, thumbBorderWidthClass, thumbDirectionClass, thumbNameTextColor, thumbNameTextSize, thumbNameTextWeight, thumbNameTextWrap, } = propsGenerator;
1645
+ const fieldValuesList = useMemo(() => {
1646
+ return Array.isArray(maybeFieldValuesList) ? maybeFieldValuesList : [];
1647
+ }, [maybeFieldValuesList]);
1648
+ // Using a hook to manage files
1649
+ const { convertValueFilesToDropzoneItems, fileIsLoading, fileRejectedMessage, setFileRejectedMessage, } = useDropzoneFieldFiles(fieldValuesList, isPreviews);
1650
+ // Create dropzone options
1651
+ const { getInputProps, getRootProps } = useDropzone({
1652
+ // accept: { 'image/*': [] },
1653
+ // validator: (file) => {},
1654
+ maxFiles: maxFiles,
1655
+ maxSize: maxSize,
1656
+ ...dropzoneProps,
1657
+ getFilesFromEvent: async (event) => {
1658
+ const result = await fromEvent(event);
1659
+ const newFiles = result.filter((item) => item instanceof File);
1660
+ /** NOTE:
1661
+ * By default, "react-dropzone" works by replacing the field's files
1662
+ * when adding a new file. For example, if you drag and drop files
1663
+ * one at a time, the previous ones will be replaced by
1664
+ * the newly added ones. We're overriding this default behavior
1665
+ * to allow multiple files to be added one by one(step by step).
1666
+ *
1667
+ * "react-dropzone" checks maximum number of available files(maxFiles)
1668
+ * at the time of addition, not the total number of files in field.
1669
+ * Thats why, we're forced to pass the existing + new files
1670
+ * as the field value to the react-dropzone,
1671
+ * so that the internal checks work as if all the existing files
1672
+ * were added at once.
1673
+ *
1674
+ * That's behavior actual for accepted and rejected files.
1675
+ */
1676
+ return [...fieldValuesList, ...newFiles];
1677
+ },
1678
+ onDropAccepted: async (acceptedFiles) => {
1679
+ const newDzFileItemsList = await convertValueFilesToDropzoneItems(acceptedFiles, true);
1680
+ setFileRejectedMessage('');
1681
+ // Callback just for add new files
1682
+ onAddFiles && onAddFiles(newDzFileItemsList, inputName);
1683
+ // Callback for save to form data (including empty when files are not valid)
1684
+ onChangeFiles && onChangeFiles(newDzFileItemsList);
1685
+ },
1686
+ onDropRejected: (rejectedFiles) => {
1687
+ // Clean error by default
1688
+ let fileErrorMessage = '';
1689
+ // If dropped files has rejected - show error message
1690
+ if (rejectedFiles.length > 0) {
1691
+ fileErrorMessage = 'Ошибка при добавлении файла';
1692
+ const firstFileErrorItem = rejectedFiles[0].errors[0];
1693
+ if (firstFileErrorItem) {
1694
+ if (firstFileErrorItem.code === ErrorCode.TooManyFiles) {
1695
+ fileErrorMessage = `Максимальное количество файлов: ${maxFiles}`;
1696
+ }
1697
+ else {
1698
+ fileErrorMessage = firstFileErrorItem.message;
1699
+ }
1700
+ }
1701
+ }
1702
+ setFileRejectedMessage(fileErrorMessage);
1703
+ },
1704
+ });
1705
+ // Delete file from dropzone
1706
+ const onClickRemoveFile = useCallback((event, indexDeleted) => {
1707
+ event.stopPropagation();
1708
+ event.preventDefault();
1709
+ const dzFileItemDeleted = fieldValuesList[indexDeleted];
1710
+ const newFiles = fieldValuesList.filter((dzFileItem) => dzFileItem.id !== dzFileItemDeleted.id);
1711
+ onDeleteFile && onDeleteFile(dzFileItemDeleted, inputName);
1712
+ onChangeFiles && onChangeFiles(newFiles);
1713
+ },
1714
+ // If "inputName" will be changes, then it should be a different field
1715
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1716
+ [fieldValuesList, onChangeFiles, onDeleteFile]);
1717
+ useEffect(() => {
1718
+ // Check if we need to convert form state value to field format
1719
+ const isNeedToConvert = fieldValuesList.some((fieldValue) => {
1720
+ const isMaybeUrl = typeof fieldValue === 'string';
1721
+ const isJsFile = fieldValue instanceof File;
1722
+ const isImageData = typeof fieldValue === 'object' && !fieldValue.file;
1723
+ return isMaybeUrl || isJsFile || isImageData;
1724
+ });
1725
+ if (isNeedToConvert) {
1726
+ const convertFiledValueAndSaveAsFiles = async () => {
1727
+ const dzFileItemsList = await convertValueFilesToDropzoneItems(fieldValuesList);
1728
+ // Save to form state as right objects
1729
+ onChangeFiles && onChangeFiles(dzFileItemsList);
1730
+ };
1731
+ // First time convert value to dropzoneFileItem and save to form state
1732
+ convertFiledValueAndSaveAsFiles();
1733
+ }
1734
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1735
+ }, [fieldValuesList]);
1736
+ return (jsxs(React.Fragment, { children: [jsxs("div", { ...getRootProps({ className: `dropzone__dropzone dropzone` }), children: [jsx("input", { ...getInputProps(), name: inputName }), jsxs("div", { className: clsx('dropzone dropzone__dropzone-wrapper', thumbColumn && `dropzone__dropzone-wrapper_column_${thumbColumn}`, fillClass && `fill_${fillClass}`, fillHoverClass && `fill_hover_${fillHoverClass}`, borderWidthClass && `border-width_${borderWidthClass}`, borderColorClass && `border-color_${borderColorClass}`, borderColorHoverClass &&
1737
+ `border-color_hover_${borderColorHoverClass}`, borderTypeClass && `border_type_${borderTypeClass}`, shapeClass && `shape_${shapeClass}`, isSkeleton && 'dropzone_skeleton', sizeClass && `dropzone_size_${sizeClass}`), children: [fieldValuesList.map((fileItem, index) => {
1738
+ const { id, name, error, file, preview } = fileItem;
1739
+ const fileErrorMessage = error || file?.error;
1740
+ const fileName = name || file?.name;
1741
+ return (jsxs("aside", { className: clsx('dropzone__thumb', fillClass, thumbDirectionClass, thumbBorderWidthClass, thumbBorderColorClass, thumbBorderColorHoverClass, thumbBorderTypeClass), children: [isPreviews && !error && preview && (jsx("div", { className: "dropzone__thumb-image", children: jsx("img", { className: "dropzone__thumb-image-inner", src: preview, onClick: (event) => {
1742
+ onClickPreview && onClickPreview(fileItem, event);
1743
+ } }) })), (fileErrorText || fileErrorMessage) && (jsx("div", { children: jsx(Text, { size: thumbNameTextSize, textColor: thumbNameTextColor, textWeight: thumbNameTextWeight, textWrap: thumbNameTextWrap, children: fileErrorText || fileErrorMessage }) })), showFilename && fileName && (jsx("div", { className: "dropzone__thumb-name", children: jsx(Text, { className: "dropzone__thumb-name-inner", size: thumbNameTextSize, textColor: thumbNameTextColor, textWeight: thumbNameTextWeight, textWrap: thumbNameTextWrap, children: fileName }) })), fileIsLoading && (jsx("div", { className: "dropzone__thumb-loader", children: jsx(Loader, { width: "fill", height: "fill" }) })), jsx("div", { className: clsx('dropzone__thumb-remove'), children: jsx(Button, { appearance: removeThumbAppearance, className: "dropzone__thumb-remove-text", label: removeThumbText || 'Удалить', labelTextWeight: removeThumbTextWeight, shape: removeThumbShape,
1744
+ // TODO: Use id of dropzone special object
1745
+ onClick: (event) => onClickRemoveFile(event, index) }) })] }, id || index));
1746
+ }), fieldValuesList.length === 0 ? (jsxs("div", { className: "dropzone__hint", children: [jsx(Text, { className: "dropzone__hint-title", size: hintTitleTextSize, textColor: hintTitleTextColor, textWeight: hintTitleTextWeight, textWrap: hintTitleTextWrap, children: hintTitle || 'Select a file or drag in form' }), hintDescription && (jsx(Text, { className: "dropzone__hint-text", size: hintDescriptionTextSize, textColor: hintDescriptionTextColor, textWeight: hintDescriptionTextWeight, textWrap: hintDescriptionTextWrap, children: hintDescription }))] })) : (jsxs("div", { className: "dropzone__hint dropzone__hint_type_add-more", children: [jsx(Text, { className: "dropzone__hint-title", size: hintTitleTextSize, textColor: hintTitleTextColor, textWeight: hintTitleTextWeight, textWrap: hintTitleTextWrap, children: hintTitle || 'Select a file or drag in form' }), hintDescription && (jsx(Text, { className: "dropzone__hint-text", size: hintDescriptionTextSize, textColor: hintDescriptionTextColor, textWeight: hintDescriptionTextWeight, textWrap: hintDescriptionTextWrap, children: hintDescription }))] }))] })] }), fileRejectedMessage && (jsx("div", { className: "form-field__message", children: jsx(Text, { className: "form-field__message-item form-field__message-item_type_message", size: errorMessageTextSize, textColor: errorMessageTextColor, textWeight: errorMessageTextWeight, children: fileRejectedMessage }) }))] }));
1747
+ });
1748
+
1749
+ export { Dropzone };