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