airdcpp-webui 2.11.2-beta.2 → 2.11.3-beta.2

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 (174) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.html +2 -2
  3. package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js +2 -0
  4. package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js.gz +0 -0
  5. package/dist/js/285.14157e0f1f25fb9aaecd.chunk.js.map +1 -0
  6. package/dist/js/334.dba054251a3e485f3ea9.chunk.js +2 -0
  7. package/dist/js/334.dba054251a3e485f3ea9.chunk.js.gz +0 -0
  8. package/dist/js/334.dba054251a3e485f3ea9.chunk.js.map +1 -0
  9. package/dist/js/424.44413ba27808d4072f7f.chunk.js +2 -0
  10. package/dist/js/424.44413ba27808d4072f7f.chunk.js.gz +0 -0
  11. package/dist/js/424.44413ba27808d4072f7f.chunk.js.map +1 -0
  12. package/dist/js/{668.ca79db34c1e147bd25d0.chunk.js → 668.2579506f7fa8bed8a452.chunk.js} +2 -2
  13. package/dist/js/668.2579506f7fa8bed8a452.chunk.js.gz +0 -0
  14. package/dist/js/668.2579506f7fa8bed8a452.chunk.js.map +1 -0
  15. package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js +2 -0
  16. package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js.gz +0 -0
  17. package/dist/js/69.7b5fa94bd7c4e6f23ed6.chunk.js.map +1 -0
  18. package/dist/js/{702.dd4be667774bce5de14f.chunk.js → 702.d36d38b2be52ab51c0a9.chunk.js} +1 -1
  19. package/dist/js/702.d36d38b2be52ab51c0a9.chunk.js.gz +0 -0
  20. package/dist/js/{702.dd4be667774bce5de14f.chunk.js.map → 702.d36d38b2be52ab51c0a9.chunk.js.map} +1 -1
  21. package/dist/js/760.83634ca054e04ff6c7e2.chunk.js +3 -0
  22. package/dist/js/{760.5448a03d335f92bedb53.chunk.js.LICENSE.txt → 760.83634ca054e04ff6c7e2.chunk.js.LICENSE.txt} +0 -0
  23. package/dist/js/760.83634ca054e04ff6c7e2.chunk.js.gz +0 -0
  24. package/dist/js/760.83634ca054e04ff6c7e2.chunk.js.map +1 -0
  25. package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js +2 -0
  26. package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js.gz +0 -0
  27. package/dist/js/favorite-hubs.f8dc4d8768878d9cab6a.chunk.js.map +1 -0
  28. package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js +2 -0
  29. package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js.gz +0 -0
  30. package/dist/js/filelists.c550cdaa211edb6f733f.chunk.js.map +1 -0
  31. package/dist/js/files.51c49d6a2825cbc64879.chunk.js +2 -0
  32. package/dist/js/files.51c49d6a2825cbc64879.chunk.js.gz +0 -0
  33. package/dist/js/files.51c49d6a2825cbc64879.chunk.js.map +1 -0
  34. package/dist/js/home.895154334c98dbe0f183.chunk.js +3 -0
  35. package/dist/js/{home.727a64f6586ed95a66bb.chunk.js.LICENSE.txt → home.895154334c98dbe0f183.chunk.js.LICENSE.txt} +0 -0
  36. package/dist/js/home.895154334c98dbe0f183.chunk.js.gz +0 -0
  37. package/dist/js/home.895154334c98dbe0f183.chunk.js.map +1 -0
  38. package/dist/js/hubs.42526e43270139eb1849.chunk.js +2 -0
  39. package/dist/js/hubs.42526e43270139eb1849.chunk.js.gz +0 -0
  40. package/dist/js/hubs.42526e43270139eb1849.chunk.js.map +1 -0
  41. package/dist/js/locales/{ca.78b3bea781886ff158b4.chunk.js → ca.ed09d3a3d4bcca929ba1.chunk.js} +0 -0
  42. package/dist/js/locales/{ca.78b3bea781886ff158b4.chunk.js.gz → ca.ed09d3a3d4bcca929ba1.chunk.js.gz} +0 -0
  43. package/dist/js/locales/{da.6f097ed425797ab32cb3.chunk.js → da.6f60a77e9ef082dd3bf4.chunk.js} +0 -0
  44. package/dist/js/locales/{da.6f097ed425797ab32cb3.chunk.js.gz → da.6f60a77e9ef082dd3bf4.chunk.js.gz} +0 -0
  45. package/dist/js/locales/{de.fce9df327aeebd67e9a1.chunk.js → de.3b7d3665460384259e82.chunk.js} +0 -0
  46. package/dist/js/locales/{de.fce9df327aeebd67e9a1.chunk.js.gz → de.3b7d3665460384259e82.chunk.js.gz} +0 -0
  47. package/dist/js/locales/{el.c325cc8141993f493ad0.chunk.js → el.598573d2a5ed18804fe0.chunk.js} +0 -0
  48. package/dist/js/locales/{el.c325cc8141993f493ad0.chunk.js.gz → el.598573d2a5ed18804fe0.chunk.js.gz} +0 -0
  49. package/dist/js/locales/{en.ebb20d0566fd8e7cb3b8.chunk.js → en.f0fe75dca201449e5e47.chunk.js} +0 -0
  50. package/dist/js/locales/{en.ebb20d0566fd8e7cb3b8.chunk.js.gz → en.f0fe75dca201449e5e47.chunk.js.gz} +0 -0
  51. package/dist/js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js +1 -0
  52. package/dist/js/locales/es.645f0fc5dd1cb8c8c5e6.chunk.js.gz +0 -0
  53. package/dist/js/locales/{eu.13252b0f7f7534b39e34.chunk.js → eu.7734fc077f26418d6b32.chunk.js} +0 -0
  54. package/dist/js/locales/{eu.13252b0f7f7534b39e34.chunk.js.gz → eu.7734fc077f26418d6b32.chunk.js.gz} +0 -0
  55. package/dist/js/locales/{fi.1641c49d1e7154261df8.chunk.js → fi.d1f8a5f4048236243b0f.chunk.js} +0 -0
  56. package/dist/js/locales/{fi.1641c49d1e7154261df8.chunk.js.gz → fi.d1f8a5f4048236243b0f.chunk.js.gz} +0 -0
  57. package/dist/js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js +1 -0
  58. package/dist/js/locales/fr.f46ce4fb57ed20dea8b5.chunk.js.gz +0 -0
  59. package/dist/js/locales/{hu.5aa0843ba5ebefad56b2.chunk.js → hu.d0d2c38a03a3b38c2bc5.chunk.js} +0 -0
  60. package/dist/js/locales/{hu.5aa0843ba5ebefad56b2.chunk.js.gz → hu.d0d2c38a03a3b38c2bc5.chunk.js.gz} +0 -0
  61. package/dist/js/locales/{it.63acad3d71352720e323.chunk.js → it.0c911d75c50ea83190ad.chunk.js} +0 -0
  62. package/dist/js/locales/{it.63acad3d71352720e323.chunk.js.gz → it.0c911d75c50ea83190ad.chunk.js.gz} +0 -0
  63. package/dist/js/locales/{nl.a23ef3d4aff66ca3b215.chunk.js → nl.36d288d75b3d3cbabf11.chunk.js} +0 -0
  64. package/dist/js/locales/{nl.a23ef3d4aff66ca3b215.chunk.js.gz → nl.36d288d75b3d3cbabf11.chunk.js.gz} +0 -0
  65. package/dist/js/locales/{no.da135b9c1614a4616b47.chunk.js → no.8f2f465d5f785650175d.chunk.js} +0 -0
  66. package/dist/js/locales/{no.da135b9c1614a4616b47.chunk.js.gz → no.8f2f465d5f785650175d.chunk.js.gz} +0 -0
  67. package/dist/js/locales/{pl.36e1b3baf978ef6c184a.chunk.js → pl.06e51d7d7b09ba14714d.chunk.js} +0 -0
  68. package/dist/js/locales/{pl.36e1b3baf978ef6c184a.chunk.js.gz → pl.06e51d7d7b09ba14714d.chunk.js.gz} +0 -0
  69. package/dist/js/locales/{pt-br.57dff49b32efd65d6825.chunk.js → pt-br.9d19d92899e8c0917c66.chunk.js} +0 -0
  70. package/dist/js/locales/{pt-br.57dff49b32efd65d6825.chunk.js.gz → pt-br.9d19d92899e8c0917c66.chunk.js.gz} +0 -0
  71. package/dist/js/locales/{pt.ab93507031a40179f7c7.chunk.js → pt.4390db3955db29b0e7dd.chunk.js} +0 -0
  72. package/dist/js/locales/{pt.ab93507031a40179f7c7.chunk.js.gz → pt.4390db3955db29b0e7dd.chunk.js.gz} +0 -0
  73. package/dist/js/locales/{ro.551cd0a17581b2159112.chunk.js → ro.705fcd327263fcf419bf.chunk.js} +0 -0
  74. package/dist/js/locales/{ro.551cd0a17581b2159112.chunk.js.gz → ro.705fcd327263fcf419bf.chunk.js.gz} +0 -0
  75. package/dist/js/locales/{ru.cbf29ad6736a21d83bcb.chunk.js → ru.8ab7e1c0d9eee7aa7afb.chunk.js} +0 -0
  76. package/dist/js/locales/{ru.cbf29ad6736a21d83bcb.chunk.js.gz → ru.8ab7e1c0d9eee7aa7afb.chunk.js.gz} +0 -0
  77. package/dist/js/locales/{sv.d33f4b4be982814b6343.chunk.js → sv.be546e605910932db11f.chunk.js} +0 -0
  78. package/dist/js/locales/{sv.d33f4b4be982814b6343.chunk.js.gz → sv.be546e605910932db11f.chunk.js.gz} +0 -0
  79. package/dist/js/locales/{tr.88e97bf59131df380c5a.chunk.js → tr.25a0d0f19e007e2febc9.chunk.js} +0 -0
  80. package/dist/js/locales/{tr.88e97bf59131df380c5a.chunk.js.gz → tr.25a0d0f19e007e2febc9.chunk.js.gz} +0 -0
  81. package/dist/js/locales/uk_UA.61073eae675491639925.chunk.js +1 -0
  82. package/dist/js/locales/uk_UA.61073eae675491639925.chunk.js.gz +0 -0
  83. package/dist/js/locales/{zh_CN.a9edec208d0cfe49d94b.chunk.js → zh_CN.4b75674e4815a965ccea.chunk.js} +0 -0
  84. package/dist/js/locales/{zh_CN.a9edec208d0cfe49d94b.chunk.js.gz → zh_CN.4b75674e4815a965ccea.chunk.js.gz} +0 -0
  85. package/dist/js/main.51b1144fdbc0a681eb6c.entry.js +3 -0
  86. package/dist/js/{main.c01c26460331633a96e2.entry.js.LICENSE.txt → main.51b1144fdbc0a681eb6c.entry.js.LICENSE.txt} +0 -0
  87. package/dist/js/main.51b1144fdbc0a681eb6c.entry.js.gz +0 -0
  88. package/dist/js/main.51b1144fdbc0a681eb6c.entry.js.map +1 -0
  89. package/dist/js/messages.6f74e67a600c48f367ad.chunk.js +2 -0
  90. package/dist/js/messages.6f74e67a600c48f367ad.chunk.js.gz +0 -0
  91. package/dist/js/messages.6f74e67a600c48f367ad.chunk.js.map +1 -0
  92. package/dist/js/queue.82a405ba14b60974cb0f.chunk.js +2 -0
  93. package/dist/js/queue.82a405ba14b60974cb0f.chunk.js.gz +0 -0
  94. package/dist/js/queue.82a405ba14b60974cb0f.chunk.js.map +1 -0
  95. package/dist/js/search.af59b1b20b4d7194457b.chunk.js +2 -0
  96. package/dist/js/search.af59b1b20b4d7194457b.chunk.js.gz +0 -0
  97. package/dist/js/search.af59b1b20b4d7194457b.chunk.js.map +1 -0
  98. package/dist/js/settings.b543eade40a723e95c77.chunk.js +2 -0
  99. package/dist/js/settings.b543eade40a723e95c77.chunk.js.gz +0 -0
  100. package/dist/js/settings.b543eade40a723e95c77.chunk.js.map +1 -0
  101. package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js +2 -0
  102. package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js.gz +0 -0
  103. package/dist/js/share.f06abf75f7f2a6afc1b3.chunk.js.map +1 -0
  104. package/dist/js/{system-log.45dba574bcb91efd176c.chunk.js → system-log.b9763d1c0f5cf5966f21.chunk.js} +2 -2
  105. package/dist/js/system-log.b9763d1c0f5cf5966f21.chunk.js.gz +0 -0
  106. package/dist/js/system-log.b9763d1c0f5cf5966f21.chunk.js.map +1 -0
  107. package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js +2 -0
  108. package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js.gz +0 -0
  109. package/dist/js/transfers.22e0a37c676d2a0996a8.chunk.js.map +1 -0
  110. package/dist/sw.js +1 -1
  111. package/dist/sw.js.gz +0 -0
  112. package/package.json +65 -64
  113. package/dist/js/285.744e520b1611ce9c52a5.chunk.js +0 -2
  114. package/dist/js/285.744e520b1611ce9c52a5.chunk.js.gz +0 -0
  115. package/dist/js/285.744e520b1611ce9c52a5.chunk.js.map +0 -1
  116. package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js +0 -2
  117. package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js.gz +0 -0
  118. package/dist/js/334.27c2467ccb3a5cb23acf.chunk.js.map +0 -1
  119. package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js +0 -2
  120. package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js.gz +0 -0
  121. package/dist/js/424.83f0cedf9d07b9d54fcb.chunk.js.map +0 -1
  122. package/dist/js/668.ca79db34c1e147bd25d0.chunk.js.gz +0 -0
  123. package/dist/js/668.ca79db34c1e147bd25d0.chunk.js.map +0 -1
  124. package/dist/js/69.779bd39a66fa5ea5248b.chunk.js +0 -2
  125. package/dist/js/69.779bd39a66fa5ea5248b.chunk.js.gz +0 -0
  126. package/dist/js/69.779bd39a66fa5ea5248b.chunk.js.map +0 -1
  127. package/dist/js/702.dd4be667774bce5de14f.chunk.js.gz +0 -0
  128. package/dist/js/760.5448a03d335f92bedb53.chunk.js +0 -3
  129. package/dist/js/760.5448a03d335f92bedb53.chunk.js.gz +0 -0
  130. package/dist/js/760.5448a03d335f92bedb53.chunk.js.map +0 -1
  131. package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js +0 -2
  132. package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js.gz +0 -0
  133. package/dist/js/favorite-hubs.82de31826d6a7541ec24.chunk.js.map +0 -1
  134. package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js +0 -2
  135. package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js.gz +0 -0
  136. package/dist/js/filelists.7a9e00969dcca088a27c.chunk.js.map +0 -1
  137. package/dist/js/files.bb297a4f890216386a57.chunk.js +0 -2
  138. package/dist/js/files.bb297a4f890216386a57.chunk.js.gz +0 -0
  139. package/dist/js/files.bb297a4f890216386a57.chunk.js.map +0 -1
  140. package/dist/js/home.727a64f6586ed95a66bb.chunk.js +0 -3
  141. package/dist/js/home.727a64f6586ed95a66bb.chunk.js.gz +0 -0
  142. package/dist/js/home.727a64f6586ed95a66bb.chunk.js.map +0 -1
  143. package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js +0 -2
  144. package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js.gz +0 -0
  145. package/dist/js/hubs.8b51f0869cdfed35644e.chunk.js.map +0 -1
  146. package/dist/js/locales/es.784f05fd27d172e4ff10.chunk.js +0 -1
  147. package/dist/js/locales/es.784f05fd27d172e4ff10.chunk.js.gz +0 -0
  148. package/dist/js/locales/fr.ede93bff1e1571d56404.chunk.js +0 -1
  149. package/dist/js/locales/fr.ede93bff1e1571d56404.chunk.js.gz +0 -0
  150. package/dist/js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js +0 -1
  151. package/dist/js/locales/uk_UA.2b396266bb670b4b7a59.chunk.js.gz +0 -0
  152. package/dist/js/main.c01c26460331633a96e2.entry.js +0 -3
  153. package/dist/js/main.c01c26460331633a96e2.entry.js.gz +0 -0
  154. package/dist/js/main.c01c26460331633a96e2.entry.js.map +0 -1
  155. package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js +0 -2
  156. package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js.gz +0 -0
  157. package/dist/js/messages.cfb23ba34e3a288ca289.chunk.js.map +0 -1
  158. package/dist/js/queue.0e532f2a56e464d1626b.chunk.js +0 -2
  159. package/dist/js/queue.0e532f2a56e464d1626b.chunk.js.gz +0 -0
  160. package/dist/js/queue.0e532f2a56e464d1626b.chunk.js.map +0 -1
  161. package/dist/js/search.ef2d64870dc65f549d8c.chunk.js +0 -2
  162. package/dist/js/search.ef2d64870dc65f549d8c.chunk.js.gz +0 -0
  163. package/dist/js/search.ef2d64870dc65f549d8c.chunk.js.map +0 -1
  164. package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js +0 -2
  165. package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js.gz +0 -0
  166. package/dist/js/settings.b3fd7918efe3c8bfae88.chunk.js.map +0 -1
  167. package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js +0 -2
  168. package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js.gz +0 -0
  169. package/dist/js/share.c0cdc71a867839f5c8b3.chunk.js.map +0 -1
  170. package/dist/js/system-log.45dba574bcb91efd176c.chunk.js.gz +0 -0
  171. package/dist/js/system-log.45dba574bcb91efd176c.chunk.js.map +0 -1
  172. package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js +0 -2
  173. package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js.gz +0 -0
  174. package/dist/js/transfers.4ed15c9e5e62fe968fbc.chunk.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/69.7b5fa94bd7c4e6f23ed6.chunk.js","mappings":"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AAgB,+DAA+DlI,OAAO0D,EAAQ,OAAO1D,OAAOmI,EAAsB,MAC5PjE,GASLkE,GAAoB,CAAC,CACvBC,KAAM,IACNC,QAAS,odACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,gDACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,uCACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,IACNC,QAAS,mIACR,CACDD,KAAM,IACNC,QAAS,0KACR,CACDD,KAAM,IACNC,QAAS,qNACR,CACDD,KAAM,KACNC,QAAS,mCACR,CACDD,KAAM,KACNC,QAAS,mCACR,CACDD,KAAM,IACNC,QAAS,8ZACR,CACDD,KAAM,IACNC,QAAS,4FACR,CACDD,KAAM,IACNC,QAAS,qNACR,CACDD,KAAM,IACNC,QAAS,4MACR,CACDD,KAAM,IACNC,QAAS,mRACR,CACDD,KAAM,IACNC,QAAS,4EACR,CACDD,KAAM,IACNC,QAAS,8MACR,CACDD,KAAM,IACNC,QAAS,mQACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,wHACR,CACDD,KAAM,IACNC,QAAS,gPACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,8kBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,uJACR,CACDD,KAAM,IACNC,QAAS,6FACR,CACDD,KAAM,IACNC,QAAS,oPACR,CACDD,KAAM,IACNC,QAAS,oPACR,CACDD,KAAM,IACNC,QAAS,oNACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,IACNC,QAAS,idACR,CACDD,KAAM,IACNC,QAAS,uHACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,IACNC,QAAS,oJACR,CACDD,KAAM,IACNC,QAAS,8EACR,CACDD,KAAM,IACNC,QAAS,oNACR,CACDD,KAAM,IACNC,QAAS,0MACR,CACDD,KAAM,IACNC,QAAS,keACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,gDACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,KACNC,QAAS,uCACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,IACNC,QAAS,mIACR,CACDD,KAAM,IACNC,QAAS,wLACR,CACDD,KAAM,IACNC,QAAS,sNACR,CACDD,KAAM,KACNC,QAAS,mCACR,CACDD,KAAM,IACNC,QAAS,4aACR,CACDD,KAAM,IACNC,QAAS,6FACR,CACDD,KAAM,IACNC,QAAS,qNACR,CACDD,KAAM,IACNC,QAAS,yNACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,oRACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,0FACR,CACDD,KAAM,IACNC,QAAS,+MACR,CACDD,KAAM,IACNC,QAAS,kQACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,uHACR,CACDD,KAAM,IACNC,QAAS,8PACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,+kBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,wBACR,CACDD,KAAM,IACNC,QAAS,uJACR,CACDD,KAAM,IACNC,QAAS,8FACR,CACDD,KAAM,IACNC,QAAS,mPACR,CACDD,KAAM,IACNC,QAAS,gQACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,IACNC,QAAS,qOACR,CACDD,KAAM,KACNC,QAAS,sBACR,CACDD,KAAM,KACNC,QAAS,wBACR,C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","sources":["webpack://airdcpp-webui/./node_modules/attr-accept/dist/es/index.js","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/chat.css","webpack://airdcpp-webui/./src/actions/ui/decorators/ChatActionDecorator.ts","webpack://airdcpp-webui/./src/components/EncryptionState.tsx","webpack://airdcpp-webui/./src/components/file-preview/decorators/MediaFileDecorator.tsx","webpack://airdcpp-webui/./src/components/file-preview/AudioFile.tsx","webpack://airdcpp-webui/./src/components/file-preview/ImageFile.tsx","webpack://airdcpp-webui/./src/components/file-preview/TextFile.tsx","webpack://airdcpp-webui/./src/components/file-preview/VideoFile.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/components/RecentLayout.tsx","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://airdcpp-webui/./node_modules/substyle/es6/utils.js","webpack://airdcpp-webui/./node_modules/substyle/es6/filterKeys.js","webpack://airdcpp-webui/./node_modules/substyle/es6/pickStyles.js","webpack://airdcpp-webui/./node_modules/substyle/es6/defaultPropsDecorator.js","webpack://airdcpp-webui/./node_modules/substyle/es6/PropsDecoratorProvider.js","webpack://airdcpp-webui/./node_modules/substyle/es6/coerceSelection.js","webpack://airdcpp-webui/./node_modules/substyle/es6/memoize.js","webpack://airdcpp-webui/./node_modules/substyle/es6/createSubstyle.js","webpack://airdcpp-webui/./node_modules/substyle/es6/index.js","webpack://airdcpp-webui/./node_modules/substyle/es6/useStyles.js","webpack://airdcpp-webui/./node_modules/substyle/es6/inline.js","webpack://airdcpp-webui/./node_modules/react-mentions/dist/react-mentions.esm.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://airdcpp-webui/./node_modules/react-mentions/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://airdcpp-webui/./node_modules/tslib/tslib.es6.js","webpack://airdcpp-webui/./node_modules/file-selector/dist/es5/file.js","webpack://airdcpp-webui/./node_modules/file-selector/dist/es5/file-selector.js","webpack://airdcpp-webui/./node_modules/react-dropzone/dist/es/utils/index.js","webpack://airdcpp-webui/./node_modules/react-dropzone/dist/es/index.js","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/ChatCommandHandler.ts","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/FilePreviewDialog.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/TempShareDropdown.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/MessageComposer.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/chat.css?ffd6","webpack://airdcpp-webui/./src/routes/Sidebar/components/chat/ChatLayout.tsx","webpack://airdcpp-webui/./src/services/HttpService.ts","webpack://airdcpp-webui/./src/services/api/ShareApi.ts","webpack://airdcpp-webui/./src/stores/decorators/MessageStoreDecorator.ts"],"sourcesContent":["\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n if (file && acceptedFiles) {\n var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n var fileName = file.name || '';\n var mimeType = (file.type || '').toLowerCase();\n var baseMimeType = mimeType.replace(/\\/.*$/, '');\n return acceptedFilesArray.some(function (type) {\n var validType = type.trim().toLowerCase();\n\n if (validType.charAt(0) === '.') {\n return fileName.toLowerCase().endsWith(validType);\n } else if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '');\n }\n\n return mimeType === validType;\n });\n }\n\n return true;\n};","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* Layout */\\r\\n\\r\\n.chat.session,\\r\\n.chat.session .message-view {\\r\\n flex: 100 100 0%;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow-y: hidden;\\r\\n}\\r\\n\\r\\n.chat.session .message-list {\\r\\n margin: 10px 10px 10px 0px;\\r\\n}\\r\\n\\r\\n.chat.session .message-view > .ui.message {\\r\\n margin: 10px 0px 0px 0px;\\r\\n}\\r\\n\\r\\n\\r\\n/* Composer */\\r\\n.chat.session .composer {\\r\\n display: flex;\\r\\n}\\r\\n\\r\\n.chat.session .composer:focus {\\r\\n outline: none;\\r\\n}\\r\\n\\r\\n.chat.session .composer textarea, \\r\\n.chat.session .composer textarea:focus {\\r\\n resize: none;\\r\\n border-radius: .28571429rem 0 0 .28571429rem;\\r\\n margin-left: 1px;\\r\\n}\\r\\n\\r\\n.chat.session .composer .button {\\r\\n border-radius: 0 .28571429rem .28571429rem 0;\\r\\n width: 45px;\\r\\n margin: 0px;\\r\\n}\\r\\n\\r\\n.chat.session .composer.large .actions.button .caption {\\r\\n display: flex !important;\\r\\n align-items: center !important;\\r\\n opacity: 0.9;\\r\\n}\\r\\n\\r\\n#mobile-layout .chat.session .composer > .input {\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n#normal-layout .chat.session .composer > .input {\\r\\n /* Leave some empty space to the right for better styling with ugly native scrollbars (especially with Firefox) */\\r\\n width: calc(100% - 60px);\\r\\n}\\r\\n\\r\\n\\r\\n/* Messages common */\\r\\n.chat.session .item .time {\\r\\n float:right;\\r\\n color: lightgray;\\r\\n font-size: small;\\r\\n}\\r\\n\\r\\n.chat.session .status.item > .text,\\r\\n.chat.session .chat.item .left > .text {\\r\\n /* Avoid cutting text from the bottom with certain browser because of \\\"overflow: hidden\\\" */\\r\\n line-height: initial !important;\\r\\n \\r\\n overflow: hidden;\\r\\n white-space: pre-wrap;\\r\\n flex: 1;\\r\\n}\\r\\n\\r\\n/* Chat messages */\\r\\n.chat.session .chat.item {\\r\\n margin-top: 5px;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .author {\\r\\n float: left;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .left {\\r\\n display: flex;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .left:not(.third-person) {\\r\\n flex-direction: column;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .left.third-person > .text {\\r\\n float: left;\\r\\n margin-left: 3px;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item img {\\r\\n vertical-align: middle;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .third-person .author .ui.dropdown {\\r\\n margin-left: 3px;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .author .caption {\\r\\n color: steelblue !important;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item.op .author .caption {\\r\\n color: darkgoldenrod !important;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item.self .author .caption {\\r\\n color: black !important;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item.bot .author .caption {\\r\\n color: rgba(0,0,0,.40) !important;\\r\\n}\\r\\n\\r\\n\\r\\n/* Status messages */\\r\\n.chat.session .status.item {\\r\\n width: 100%;\\r\\n display: flex !important;\\r\\n flex-direction: row-reverse;\\r\\n}\\r\\n\\r\\n.chat.session .status.item > .text {\\r\\n font-size: small;\\r\\n color: rgba(0,0,0,.50);\\r\\n float: left;\\r\\n}\\r\\n\\r\\n.chat.session .status.item i {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.chat.session .status.item.warning > .text {\\r\\n color: orange;\\r\\n}\\r\\n\\r\\n.chat.session .status.item.error > .text {\\r\\n color: red;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Sidebar/components/chat/chat.css\"],\"names\":[],\"mappings\":\"AAAA,WAAW;;AAEX;;EAEE,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,wBAAwB;AAC1B;;;AAGA,aAAa;AACb;EACE,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA;;EAEE,YAAY;EACZ,4CAA4C;EAC5C,gBAAgB;AAClB;;AAEA;EACE,4CAA4C;EAC5C,WAAW;EACX,WAAW;AACb;;AAEA;EACE,wBAAwB;EACxB,8BAA8B;EAC9B,YAAY;AACd;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,iHAAiH;EACjH,wBAAwB;AAC1B;;;AAGA,oBAAoB;AACpB;EACE,WAAW;EACX,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;;EAEE,0FAA0F;EAC1F,+BAA+B;;EAE/B,gBAAgB;EAChB,qBAAqB;EACrB,OAAO;AACT;;AAEA,kBAAkB;AAClB;EACE,eAAe;AACjB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,iCAAiC;AACnC;;;AAGA,oBAAoB;AACpB;EACE,WAAW;EACX,wBAAwB;EACxB,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,sBAAsB;EACtB,WAAW;AACb;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/* Layout */\\r\\n\\r\\n.chat.session,\\r\\n.chat.session .message-view {\\r\\n flex: 100 100 0%;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow-y: hidden;\\r\\n}\\r\\n\\r\\n.chat.session .message-list {\\r\\n margin: 10px 10px 10px 0px;\\r\\n}\\r\\n\\r\\n.chat.session .message-view > .ui.message {\\r\\n margin: 10px 0px 0px 0px;\\r\\n}\\r\\n\\r\\n\\r\\n/* Composer */\\r\\n.chat.session .composer {\\r\\n display: flex;\\r\\n}\\r\\n\\r\\n.chat.session .composer:focus {\\r\\n outline: none;\\r\\n}\\r\\n\\r\\n.chat.session .composer textarea, \\r\\n.chat.session .composer textarea:focus {\\r\\n resize: none;\\r\\n border-radius: .28571429rem 0 0 .28571429rem;\\r\\n margin-left: 1px;\\r\\n}\\r\\n\\r\\n.chat.session .composer .button {\\r\\n border-radius: 0 .28571429rem .28571429rem 0;\\r\\n width: 45px;\\r\\n margin: 0px;\\r\\n}\\r\\n\\r\\n.chat.session .composer.large .actions.button .caption {\\r\\n display: flex !important;\\r\\n align-items: center !important;\\r\\n opacity: 0.9;\\r\\n}\\r\\n\\r\\n#mobile-layout .chat.session .composer > .input {\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n#normal-layout .chat.session .composer > .input {\\r\\n /* Leave some empty space to the right for better styling with ugly native scrollbars (especially with Firefox) */\\r\\n width: calc(100% - 60px);\\r\\n}\\r\\n\\r\\n\\r\\n/* Messages common */\\r\\n.chat.session .item .time {\\r\\n float:right;\\r\\n color: lightgray;\\r\\n font-size: small;\\r\\n}\\r\\n\\r\\n.chat.session .status.item > .text,\\r\\n.chat.session .chat.item .left > .text {\\r\\n /* Avoid cutting text from the bottom with certain browser because of \\\"overflow: hidden\\\" */\\r\\n line-height: initial !important;\\r\\n \\r\\n overflow: hidden;\\r\\n white-space: pre-wrap;\\r\\n flex: 1;\\r\\n}\\r\\n\\r\\n/* Chat messages */\\r\\n.chat.session .chat.item {\\r\\n margin-top: 5px;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .author {\\r\\n float: left;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .left {\\r\\n display: flex;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .left:not(.third-person) {\\r\\n flex-direction: column;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .left.third-person > .text {\\r\\n float: left;\\r\\n margin-left: 3px;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item img {\\r\\n vertical-align: middle;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .third-person .author .ui.dropdown {\\r\\n margin-left: 3px;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item .author .caption {\\r\\n color: steelblue !important;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item.op .author .caption {\\r\\n color: darkgoldenrod !important;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item.self .author .caption {\\r\\n color: black !important;\\r\\n}\\r\\n\\r\\n.chat.session .chat.item.bot .author .caption {\\r\\n color: rgba(0,0,0,.40) !important;\\r\\n}\\r\\n\\r\\n\\r\\n/* Status messages */\\r\\n.chat.session .status.item {\\r\\n width: 100%;\\r\\n display: flex !important;\\r\\n flex-direction: row-reverse;\\r\\n}\\r\\n\\r\\n.chat.session .status.item > .text {\\r\\n font-size: small;\\r\\n color: rgba(0,0,0,.50);\\r\\n float: left;\\r\\n}\\r\\n\\r\\n.chat.session .status.item i {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.chat.session .status.item.warning > .text {\\r\\n color: orange;\\r\\n}\\r\\n\\r\\n.chat.session .status.item.error > .text {\\r\\n color: red;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\n\r\ntype SessionType = UI.SessionItemBase;\r\n\r\nexport default function (\r\n actions: UI.ActionListType<SessionType>, \r\n sessionUrl: string, \r\n editAccess: API.AccessEnum\r\n) {\r\n const handleClear: UI.ActionHandler<SessionType> = (\r\n { data: session }\r\n ) => {\r\n return SocketService.delete(`${sessionUrl}/${session.id}/messages`);\r\n };\r\n\r\n const ChatActions: UI.ActionListType<SessionType> = {\r\n clear: {\r\n displayName: 'Clear chat',\r\n access: editAccess,\r\n icon: IconConstants.CLEAR,\r\n handler: handleClear,\r\n }\r\n };\r\n\r\n return Object.assign(actions, ChatActions);\r\n}","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\n\r\nimport Popup from 'components/semantic/Popup';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { Trans } from 'react-i18next';\r\nimport { toI18nKey } from 'utils/TranslationUtils';\r\nimport Icon from './semantic/Icon';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\ninterface Info {\r\n iconColor: string;\r\n messageColor: string;\r\n message: string;\r\n cornerIcon: string;\r\n translationKey: string;\r\n}\r\n\r\nconst encryptionToInfo = (encryption: API.EncryptionInfo): Info => {\r\n const tlsVersion = encryption.str.match(/TLSv([\\d\\.]+)/);\r\n if (tlsVersion && tlsVersion.length === 2 && parseFloat(tlsVersion[1]) < 1.2) {\r\n return {\r\n iconColor: 'orange',\r\n messageColor: 'red',\r\n message: 'Outdated cryptographic protocol with known security vulnerabilities',\r\n cornerIcon: 'orange warning',\r\n translationKey: 'tlsOutdatedWarning',\r\n };\r\n }\r\n\r\n if (!encryption.trusted) {\r\n return {\r\n iconColor: 'yellow',\r\n messageColor: 'orange',\r\n message: 'Authenticity of the certificate could not be validated',\r\n cornerIcon: 'blue help',\r\n translationKey: 'tlsAuthenticityWarning',\r\n };\r\n }\r\n\r\n return {\r\n iconColor: 'green',\r\n messageColor: 'green',\r\n message: 'Authenticity of the certificate is validated',\r\n cornerIcon: '',\r\n translationKey: 'tlsOk',\r\n };\r\n};\r\n\r\n\r\ninterface InfoMessageProps {\r\n info: Info;\r\n encryption: API.EncryptionInfo;\r\n}\r\n\r\nconst InfoMessage: React.FC<InfoMessageProps> = ({ info, encryption }) => (\r\n <div>\r\n <p>\r\n { encryption.str }\r\n </p>\r\n <p style={ { color: info.messageColor } }>\r\n <Trans i18nKey={ toI18nKey(info.translationKey, UI.Modules.COMMON) }>\r\n { info.message }\r\n </Trans>\r\n </p>\r\n </div>\r\n);\r\n\r\ninterface EncryptionStateProps extends Partial<Pick<SemanticUI.PopupSettings, 'boundary'>> {\r\n encryption?: API.EncryptionInfo;\r\n alwaysVisible?: boolean;\r\n}\r\n\r\nclass EncryptionState extends React.PureComponent<EncryptionStateProps> {\r\n static propTypes = {\r\n encryption: PropTypes.object,\r\n boundary: PropTypes.string,\r\n\r\n // Show the lock icon even when there is no encryption\r\n alwaysVisible: PropTypes.bool,\r\n };\r\n\r\n getChildren = () => {\r\n const { encryption } = this.props;\r\n\r\n const info = encryptionToInfo(encryption!);\r\n return <InfoMessage info={ info } encryption={ encryption! }/>;\r\n }\r\n\r\n render() {\r\n const { encryption, alwaysVisible, boundary } = this.props;\r\n if (!encryption) {\r\n return !!alwaysVisible && <Icon color=\"grey\" icon={ IconConstants.LOCK }/>;\r\n }\r\n\r\n const info = encryptionToInfo(encryption);\r\n return (\r\n <Popup \r\n triggerClassName=\"encryption\" \r\n className=\"basic encryption content\" \r\n trigger={\r\n <Icon\r\n color={ info.iconColor }\r\n icon={ IconConstants.LOCK }\r\n cornerIcon={ info.cornerIcon }\r\n />\r\n }\r\n settings={ {\r\n boundary,\r\n } as SemanticUI.PopupSettings }\r\n >\r\n { this.getChildren }\r\n </Popup>\r\n );\r\n }\r\n}\r\n\r\nexport default EncryptionState;","import * as React from 'react';\r\n\r\n//import Moment from 'moment';\r\n\r\n\r\nconst formatMediaError = (event: React.SyntheticEvent<HTMLMediaElement>) => {\r\n const error: MediaError = (event.target as any).error;\r\n switch (error.code) {\r\n case error.MEDIA_ERR_NETWORK:\r\n return 'A network error caused the media download to fail';\r\n case error.MEDIA_ERR_DECODE:\r\n // tslint:disable-next-line:max-line-length\r\n return 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support';\r\n case error.MEDIA_ERR_SRC_NOT_SUPPORTED:\r\n // tslint:disable-next-line:max-line-length\r\n return 'The media could not be loaded, either because the file was not found, network failed or because the format is not supported by your browser';\r\n default:\r\n return 'An unknown media error occurred';\r\n }\r\n};\r\n\r\n\r\nexport interface MediaFileDecoratorChildProps extends Pick<MediaFileDecoratorProps, 'url'> {\r\n mediaRef: (c: HTMLMediaElement) => void;\r\n mediaProps: {\r\n onError: (event: React.SyntheticEvent<HTMLMediaElement>) => void;\r\n autoPlay: boolean;\r\n controls: boolean;\r\n src: string;\r\n };\r\n}\r\n\r\nexport interface MediaFileDecoratorProps {\r\n url: string;\r\n autoPlay: boolean;\r\n}\r\n\r\nexport default function (\r\n Component: React.ComponentType<MediaFileDecoratorChildProps>\r\n) {\r\n class MediaFileDecorator extends React.Component<MediaFileDecoratorProps> {\r\n state = {\r\n error: null,\r\n };\r\n\r\n media: HTMLMediaElement;\r\n\r\n componentDidUpdate(prevProps: MediaFileDecoratorProps) {\r\n if (prevProps.url !== this.props.url) {\r\n if (this.media) {\r\n this.media.load();\r\n }\r\n\r\n // Reset the error when switching between items\r\n this.setState({ error: null });\r\n }\r\n }\r\n\r\n onMediaError = (event: React.SyntheticEvent<HTMLMediaElement>) => {\r\n this.setState({ \r\n error: formatMediaError(event) \r\n });\r\n }\r\n\r\n setMediaRef = (c: HTMLMediaElement) => {\r\n this.media = c;\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n return (\r\n <div>\r\n { this.state.error }\r\n </div>\r\n );\t\r\n }\r\n\r\n const { url, autoPlay } = this.props;\r\n const mediaProps = {\r\n onError: this.onMediaError,\r\n autoPlay,\r\n controls: true,\r\n src: url,\r\n };\r\n\r\n return (\r\n <Component \r\n { ...this.props } \r\n mediaRef={ this.setMediaRef }\r\n mediaProps={ mediaProps }\r\n />\r\n );\r\n }\r\n }\r\n\r\n return MediaFileDecorator;\r\n}\r\n","import * as React from 'react';\r\n\r\nimport MediaFileDecorator, { \r\n MediaFileDecoratorChildProps \r\n} from './decorators/MediaFileDecorator';\r\n\r\n\r\nconst AudioFile: React.FC<MediaFileDecoratorChildProps> = ({ mediaRef, mediaProps }) => (\r\n <audio \r\n ref={ mediaRef } \r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n }}\r\n { ...mediaProps }\r\n />\r\n);\r\n\r\nconst AudioFileDecorated = MediaFileDecorator(AudioFile);\r\n\r\nexport { AudioFileDecorated as AudioFile };\r\n","import * as React from 'react';\r\n\r\n\r\ninterface ImageFileProps extends React.ImgHTMLAttributes<HTMLImageElement> {\r\n url: string;\r\n}\r\n\r\nconst ImageFile: React.FC<ImageFileProps> = ({ url }) => (\r\n <img \r\n src={ url }\r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n }}\r\n />\r\n);\r\n\r\nexport { ImageFile };","import { useEffect, useState } from 'react';\r\nimport * as React from 'react';\r\n\r\nimport { TextDecorator } from 'components/text';\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport * as UI from 'types/ui';\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Loader from 'components/semantic/Loader';\r\n\r\n\r\ninterface TextFileProps {\r\n textGetter: () => Promise<string>;\r\n url?: string;\r\n}\r\n\r\nconst TextFile: React.FC<TextFileProps> = ({ textGetter, url }) => {\r\n const [ text, setText ] = useState<string | null>(null);\r\n const [ error, setError ] = useState<Error | null>(null);\r\n\r\n const { t } = useTranslation();\r\n useEffect(\r\n () => {\r\n textGetter()\r\n .then(setText)\r\n .catch(setError);\r\n\r\n return () => {\r\n setText(null);\r\n setError(null);\r\n };\r\n },\r\n [ url ]\r\n );\r\n\r\n if (!text) {\r\n if (error) {\r\n return (\r\n <Message\r\n title={ translate('Failed to fetch content', t, UI.Modules.COMMON) }\r\n description={ error.message }\r\n />\r\n );\r\n }\r\n\r\n return <Loader/>;\r\n }\r\n\r\n return (\r\n <pre>\r\n <TextDecorator\r\n text={ text }\r\n />\r\n </pre>\r\n );\r\n};\r\n\r\nexport { TextFile };\r\n","import * as React from 'react';\r\n\r\nimport MediaFileDecorator, { \r\n MediaFileDecoratorChildProps \r\n} from './decorators/MediaFileDecorator';\r\n\r\n\r\nconst VideoFile: React.FC<MediaFileDecoratorChildProps> = ({ mediaRef, mediaProps }) => (\r\n <video \r\n ref={ c => mediaRef(c!) } \r\n style={{\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n }}\r\n { ...mediaProps }\r\n />\r\n);\r\n\r\nconst VideoFileDecorated = MediaFileDecorator(VideoFile);\r\n\r\nexport { VideoFileDecorated as VideoFile };\r\n","//import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\n\r\nimport DataProviderDecorator, { DataProviderDecoratorChildProps } from 'decorators/DataProviderDecorator';\r\n//import RedrawDecorator from 'decorators/RedrawDecorator';\r\nimport { formatRelativeTime } from 'utils/ValueFormat';\r\n\r\nimport LayoutHeader from 'components/semantic/LayoutHeader';\r\nimport { ListItem } from 'components/semantic/List';\r\n\r\nimport HistoryConstants from 'constants/HistoryConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { TFunction } from 'i18next';\r\nimport { translate, toI18nKey } from 'utils/TranslationUtils';\r\n\r\n\r\ninterface RecentLayoutProps {\r\n entryIcon: string;\r\n entryType: string;\r\n entryTitleRenderer: (entry: API.HistoryItem) => React.ReactNode;\r\n hasSession: (entry: API.HistoryItem) => boolean;\r\n t: TFunction;\r\n}\r\n\r\ninterface DataProps {\r\n entries: API.HistoryItem[];\r\n}\r\n\r\ntype Props = RecentLayoutProps & DataProps & DataProviderDecoratorChildProps;\r\n\r\nconst RecentLayout: React.FC<Props> = ({ entries, entryTitleRenderer, hasSession, entryIcon, t }) => {\r\n if (entries.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"recents\">\r\n <LayoutHeader\r\n title={ translate('Recent sessions', t, UI.Modules.COMMON) }\r\n size=\"\"\r\n />\r\n <div className=\"ui relaxed divided list\">\r\n { entries.map((entry, index) => (\r\n <ListItem \r\n key={ index }\r\n header={ entryTitleRenderer(entry) }\r\n description={ !!entry.last_opened && t(toI18nKey('openedAgo', UI.Modules.COMMON), {\r\n defaultValue: 'Opened {{timeAgo}}',\r\n replace: {\r\n timeAgo: formatRelativeTime(entry.last_opened)\r\n }\r\n }) }\r\n icon={ (hasSession(entry) ? 'green ' : '') + entryIcon }\r\n />\r\n )) }\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/*RecentLayout.propTypes = {\r\n // Title of the button\r\n entryIcon: PropTypes.string.isRequired,\r\n\r\n // URL for fetching the recent entries\r\n entryType: PropTypes.string.isRequired,\r\n\r\n // Renders the recent entry title\r\n entryTitleRenderer: PropTypes.func.isRequired,\r\n\r\n // Returns whether the recent entry is currently active\r\n hasSession: PropTypes.func.isRequired,\r\n};*/\r\n\r\nexport default DataProviderDecorator<RecentLayoutProps, DataProps>(\r\n //RedrawDecorator<Props>(RecentLayout),\r\n RecentLayout,\r\n {\r\n urls: {\r\n entries: ({ entryType }, socket) => socket.get(`${HistoryConstants.SESSIONS_URL}/${entryType}/0`),\r\n },\r\n }\r\n);","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nexport default function _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nexport var keys = function keys(obj) {\n return obj === Object(obj) ? Object.keys(obj) : [];\n};\nexport var values = function values(obj) {\n return obj === Object(obj) ? Object.values(obj) : [];\n};\n\nfunction mergeDeep(target, source) {\n var output = Object.assign({}, target);\n\n if (isPlainObject(target) && isPlainObject(source)) {\n keys(source).forEach(function (key) {\n if (isPlainObject(source[key])) {\n if (!(key in target)) Object.assign(output, _defineProperty({}, key, source[key]));else output[key] = mergeDeep(target[key], source[key]);\n } else {\n Object.assign(output, _defineProperty({}, key, source[key]));\n }\n });\n }\n\n return output;\n}\n\nexport var merge = function merge(target) {\n for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n sources[_key - 1] = arguments[_key];\n }\n\n return sources.reduce(function (t, s) {\n return mergeDeep(t, s);\n }, target);\n};\nexport var identity = function identity(value) {\n return value;\n};\nexport var omit = function omit(obj, keys) {\n var other = Object.assign({}, obj);\n\n if (keys) {\n for (var i = 0; i < keys.length; i++) {\n delete other[keys[i]];\n }\n }\n\n return other;\n};\nexport var isPlainObject = function isPlainObject(obj) {\n return obj === Object(obj) && !(obj instanceof Date) && !Array.isArray(obj);\n};\nexport var compact = function compact(arr) {\n return (arr || []).filter(Boolean);\n};","export var isModifier = function isModifier(key) {\n return key[0] === '&';\n};\nexport var isElement = function isElement(key) {\n return !isModifier(key);\n};","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport { keys, merge, omit, values } from './utils';\nimport { isModifier } from './filterKeys';\n\nvar camelize = function camelize(key) {\n return key.replace(/-(\\w)/g, function (m, c) {\n return c.toUpperCase();\n });\n};\n\nexport var pickDirectStyles = function pickDirectStyles(style) {\n var objectPropertiesWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var styleKeys = keys(style);\n var result = {};\n\n for (var i = 0, l = styleKeys.length; i < l; i += 1) {\n var key = styleKeys[i];\n var isDirect = Object.prototype.toString.call(style[key]) !== '[object Object]' || // style defs\n key[0] === ':' || // pseudo selectors\n key[0] === '@' || // @media / @keyframes / @supports / @font-face\n objectPropertiesWhitelist.indexOf(key) >= 0; // whitelisted object-type properties\n\n if (isDirect) {\n result[key] = style[key];\n }\n }\n\n return result;\n};\nexport var pickNestedStyles = function pickNestedStyles(style, keysToPick) {\n var camelizedKeysToPick = keysToPick.map(camelize);\n var styleKeys = keys(style);\n var result = {};\n\n for (var i = 0, l = styleKeys.length; i < l; i += 1) {\n var key = styleKeys[i];\n\n if (keysToPick.indexOf(key) >= 0 || camelizedKeysToPick.indexOf(camelize(key)) >= 0) {\n result[key] = style[key];\n }\n }\n\n return result;\n}; // breadth-first hoisting of selected modifier style subtrees\n// does not traverse into element, :pseudo-selector or @directive subtrees\n\nexport var hoistModifierStylesRecursive = function hoistModifierStylesRecursive(style, modifierKeysToPick) {\n // hoist styles for selected modifiers on current level\n var result = merge.apply(void 0, [{}, omit(style, modifierKeysToPick)].concat(_toConsumableArray(values(pickNestedStyles(style, modifierKeysToPick))))); // traverse nested styled for ALL modifiers\n\n var modifierKeys = keys(result).filter(isModifier);\n\n for (var i = 0, l = modifierKeys.length; i < l; i += 1) {\n var key = modifierKeys[i];\n var subresult = hoistModifierStylesRecursive(result[key], modifierKeysToPick);\n\n if (modifierKeysToPick.indexOf(key) >= 0) {\n // selected modifier: hoist subresult\n delete result[key];\n result = merge({}, result, subresult);\n } else {\n // non-selected modifier: replace with subresult\n result[key] = subresult;\n }\n }\n\n return result;\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { pickDirectStyles } from './pickStyles';\n// many css-in-js libs process keyframes objects as the value for `animationName`\nvar defaultObjectPropsWhitelist = ['animationName'];\n\nvar defaultPropsDecorator = function defaultPropsDecorator(_ref) {\n var style = _ref.style,\n className = _ref.className;\n return _objectSpread(_objectSpread({}, style ? {\n style: pickDirectStyles(style, defaultObjectPropsWhitelist)\n } : {}), className ? {\n className: className\n } : {});\n};\n\nexport default defaultPropsDecorator;","import { createContext } from 'react';\nimport defaultPropsDecorator from './defaultPropsDecorator';\nexport var PropsDecoratorContext = /*#__PURE__*/createContext(defaultPropsDecorator);\nexport default PropsDecoratorContext.Provider;","import { keys } from './utils';\n\nvar coerceSelection = function coerceSelection(select) {\n if (!select) {\n return [];\n } else if (typeof select === 'string') {\n return [select];\n } else if (!Array.isArray(select)) {\n var objSelect = select; // workaround for https://github.com/facebook/flow/issues/5781\n\n return keys(select).reduce(function (acc, key) {\n return acc.concat(objSelect[key] ? [key] : []);\n }, []);\n }\n\n return select;\n};\n\nexport default coerceSelection;","import coerceSelection from './coerceSelection';\nvar EMPTY = {};\n\nvar memoize = function memoize(substyle) {\n return function (select, defaultStyle) {\n var cacheKey = defaultStyle || EMPTY;\n substyle.memoize = substyle.memoize || new WeakMap();\n var mapEntry;\n\n if (!substyle.memoize.has(cacheKey)) {\n mapEntry = {};\n substyle.memoize.set(cacheKey, mapEntry);\n } else {\n mapEntry = substyle.memoize.get(cacheKey);\n }\n\n var selectHash = coerceSelection(select).join(' ');\n return selectHash in mapEntry ? mapEntry[selectHash] : mapEntry[selectHash] = substyle(select || [], defaultStyle);\n };\n};\n\nexport default memoize;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport invariant from 'invariant';\nimport coerceSelection from './coerceSelection';\nimport defaultPropsDecorator from './defaultPropsDecorator';\nimport { isElement, isModifier } from './filterKeys';\nimport memoize from './memoize';\nimport { hoistModifierStylesRecursive, pickNestedStyles } from './pickStyles';\nimport { compact, isPlainObject, keys, merge, values } from './utils';\n\nvar guessBaseClassName = function guessBaseClassName(classNames) {\n // all class names must start with the same prefix: the component's base class name\n // which will finally go to the container element\n var firstKey = classNames && keys(classNames)[0];\n return firstKey && firstKey.split('__')[0].split('--')[0];\n};\n\nvar deriveClassNames = function deriveClassNames(className, elementKeys, modifierKeys) {\n // do not derive class names, if the user did not specify any class name\n if (!className) {\n return undefined;\n } // derive class names based using the passed modifier/element keys\n\n\n var firstClassName = className.split(' ')[0];\n var derivedClassNames = [].concat(_toConsumableArray(elementKeys.length === 0 ? modifierKeys.map(function (key) {\n return \"\".concat(firstClassName, \"--\").concat(key.substring(1));\n }) : []), _toConsumableArray(elementKeys.map(function (key) {\n return \"\".concat(firstClassName, \"__\").concat(key);\n }))); // also use the provided `className` if there is no sub-element selection\n\n return elementKeys.length === 0 ? [className].concat(_toConsumableArray(derivedClassNames)) : derivedClassNames;\n};\n\nfunction createSubstyle(_ref) {\n var style = _ref.style,\n className = _ref.className,\n classNames = _ref.classNames;\n var propsDecorator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultPropsDecorator;\n var baseClassName = className || guessBaseClassName(classNames) || (style === null || style === void 0 ? void 0 : style.className);\n var substyle = typeof style === 'function' ? style : memoize(function (select, defaultStyle) {\n var selectedKeys = coerceSelection(select);\n invariant(Array.isArray(selectedKeys), 'First parameter must be a string, an array of strings, ' + 'a plain object with boolean values, or a falsy value.');\n invariant(!defaultStyle || isPlainObject(defaultStyle), 'Optional second parameter must be a plain object.');\n var modifierKeys = selectedKeys.filter(isModifier);\n var elementKeys = selectedKeys.filter(isElement);\n var collectElementStyles = elementKeys.length > 0 ? function (fromStyle) {\n return values(pickNestedStyles(fromStyle, elementKeys));\n } : function (fromStyle) {\n return [fromStyle];\n };\n\n var collectSelectedStyles = function collectSelectedStyles() {\n var fromStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return collectElementStyles(hoistModifierStylesRecursive(fromStyle, modifierKeys));\n };\n\n var derivedClassNames = deriveClassNames(baseClassName, elementKeys, modifierKeys);\n return createSubstyle(_objectSpread(_objectSpread(_objectSpread({}, (style || defaultStyle) && {\n style: merge.apply(void 0, [{}].concat(_toConsumableArray(collectSelectedStyles(defaultStyle)), _toConsumableArray(collectSelectedStyles(style))))\n }), derivedClassNames && {\n className: derivedClassNames.join(' ')\n }), classNames && {\n classNames: classNames\n }), propsDecorator);\n });\n\n var styleProps = _objectSpread({}, typeof style === 'function' ? style : {\n style: style\n });\n\n var classNameSplit = _toConsumableArray(new Set([].concat(_toConsumableArray(styleProps.className ? styleProps.className.split(' ') : []), _toConsumableArray(baseClassName ? baseClassName.split(' ') : []))));\n\n var mappedClassNames = classNames ? compact(classNameSplit.map(function (singleClassName) {\n return classNames[singleClassName];\n })) : classNameSplit;\n var propsForSpread = propsDecorator(_objectSpread(_objectSpread({}, styleProps), mappedClassNames.length > 0 ? {\n className: mappedClassNames.join(' ')\n } : {})); // assign `style`, `className`, and/or any props added by the decorator to the return function object\n\n Object.assign(substyle, propsForSpread);\n return substyle;\n}\n\nexport default createSubstyle;","import PropsDecoratorProvider, { PropsDecoratorContext } from './PropsDecoratorProvider';\nimport createSubstyle from './createSubstyle';\nimport defaultPropsDecorator from './defaultPropsDecorator';\nimport inline from './inline';\nimport useStyles from './useStyles';\nexport { createSubstyle, PropsDecoratorProvider, PropsDecoratorContext, defaultPropsDecorator, inline };\nexport default useStyles;","import { useContext, useMemo } from 'react';\nimport { PropsDecoratorContext } from './PropsDecoratorProvider';\nimport createSubstyle from './createSubstyle';\n\nvar useStyles = function useStyles(defaultStyle, _ref, modifiers) {\n var style = _ref.style,\n className = _ref.className,\n classNames = _ref.classNames;\n var propsDecorator = useContext(PropsDecoratorContext);\n var substyle = useMemo(function () {\n return createSubstyle({\n style: style,\n className: className,\n classNames: classNames\n }, propsDecorator);\n }, [style, className, classNames, propsDecorator]);\n return substyle(modifiers, defaultStyle);\n};\n\nexport default useStyles;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar inline = function inline() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args.reduce(function (result, arg) {\n return _objectSpread(_objectSpread(_objectSpread({}, result), typeof arg === 'function' ? arg : {}), {}, {\n style: _objectSpread(_objectSpread({}, result.style), typeof arg === 'function' ? arg.style : arg)\n });\n }, {});\n};\n\nexport default inline;","import _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Children, Component } from 'react';\nimport invariant from 'invariant';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport useStyles, { inline } from 'substyle';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\n\n// escape RegExp special characters https://stackoverflow.com/a/9310752/5142490\nvar escapeRegex = function escapeRegex(str) {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\nvar PLACEHOLDERS = {\n id: '__id__',\n display: '__display__'\n};\n\nvar findPositionOfCapturingGroup = function findPositionOfCapturingGroup(markup, parameterName) {\n invariant(parameterName === 'id' || parameterName === 'display', \"Second arg must be either \\\"id\\\" or \\\"display\\\", got: \\\"\".concat(parameterName, \"\\\"\")); // find positions of placeholders in the markup\n\n var indexDisplay = markup.indexOf(PLACEHOLDERS.display);\n var indexId = markup.indexOf(PLACEHOLDERS.id); // set indices to null if not found\n\n if (indexDisplay < 0) indexDisplay = null;\n if (indexId < 0) indexId = null; // markup must contain one of the mandatory placeholders\n\n invariant(indexDisplay !== null || indexId !== null, \"The markup '\".concat(markup, \"' does not contain either of the placeholders '__id__' or '__display__'\"));\n\n if (indexDisplay !== null && indexId !== null) {\n // both placeholders are used, return 0 or 1 depending on the position of the requested parameter\n return parameterName === 'id' && indexId <= indexDisplay || parameterName === 'display' && indexDisplay <= indexId ? 0 : 1;\n } // just one placeholder is being used, we'll use the captured string for both parameters\n\n\n return 0;\n};\n\nvar combineRegExps = function combineRegExps(regExps) {\n var serializedRegexParser = /^\\/(.+)\\/(\\w+)?$/;\n return new RegExp(regExps.map(function (regex) {\n var _serializedRegexParse = serializedRegexParser.exec(regex.toString()),\n _serializedRegexParse2 = _slicedToArray(_serializedRegexParse, 3),\n regexString = _serializedRegexParse2[1],\n regexFlags = _serializedRegexParse2[2];\n\n invariant(!regexFlags, \"RegExp flags are not supported. Change /\".concat(regexString, \"/\").concat(regexFlags, \" into /\").concat(regexString, \"/\"));\n return \"(\".concat(regexString, \")\");\n }).join('|'), 'g');\n};\n\nvar countPlaceholders = function countPlaceholders(markup) {\n var count = 0;\n if (markup.indexOf('__id__') >= 0) count++;\n if (markup.indexOf('__display__') >= 0) count++;\n return count;\n};\n\nvar emptyFn = function emptyFn() {}; // Finds all occurrences of the markup in the value and calls the `markupIteratee` callback for each of them.\n// The optional `textIteratee` callback is called for each plain text ranges in between these markup occurrences.\n\n\nvar iterateMentionsMarkup = function iterateMentionsMarkup(value, config, markupIteratee) {\n var textIteratee = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : emptyFn;\n var regex = combineRegExps(config.map(function (c) {\n return c.regex;\n }));\n var accOffset = 2; // first is whole match, second is the for the capturing group of first regexp component\n\n var captureGroupOffsets = config.map(function (_ref) {\n var markup = _ref.markup;\n var result = accOffset; // + 1 is for the capturing group we add around each regexp component in combineRegExps\n\n accOffset += countPlaceholders(markup) + 1;\n return result;\n });\n var match;\n var start = 0;\n var currentPlainTextIndex = 0; // detect all mention markup occurrences in the value and iterate the matches\n\n while ((match = regex.exec(value)) !== null) {\n var offset = captureGroupOffsets.find(function (o) {\n return !!match[o];\n }); // eslint-disable-line no-loop-func\n\n var mentionChildIndex = captureGroupOffsets.indexOf(offset);\n var _config$mentionChildI = config[mentionChildIndex],\n markup = _config$mentionChildI.markup,\n displayTransform = _config$mentionChildI.displayTransform;\n var idPos = offset + findPositionOfCapturingGroup(markup, 'id');\n var displayPos = offset + findPositionOfCapturingGroup(markup, 'display');\n var id = match[idPos];\n var display = displayTransform(id, match[displayPos]);\n var substr = value.substring(start, match.index);\n textIteratee(substr, start, currentPlainTextIndex);\n currentPlainTextIndex += substr.length;\n markupIteratee(match[0], match.index, currentPlainTextIndex, id, display, mentionChildIndex, start);\n currentPlainTextIndex += display.length;\n start = regex.lastIndex;\n }\n\n if (start < value.length) {\n textIteratee(value.substring(start), start, currentPlainTextIndex);\n }\n};\n\nvar getPlainText = function getPlainText(value, config) {\n var result = '';\n iterateMentionsMarkup(value, config, function (match, index, plainTextIndex, id, display) {\n result += display;\n }, function (plainText) {\n result += plainText;\n });\n return result;\n};\n\n// in the marked up value string.\n// If the passed character index lies inside a mention, the value of `inMarkupCorrection` defines the\n// correction to apply:\n// - 'START' to return the index of the mention markup's first char (default)\n// - 'END' to return the index after its last char\n// - 'NULL' to return null\n\nvar mapPlainTextIndex = function mapPlainTextIndex(value, config, indexInPlainText) {\n var inMarkupCorrection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'START';\n\n if (typeof indexInPlainText !== 'number') {\n return indexInPlainText;\n }\n\n var result;\n\n var textIteratee = function textIteratee(substr, index, substrPlainTextIndex) {\n if (result !== undefined) return;\n\n if (substrPlainTextIndex + substr.length >= indexInPlainText) {\n // found the corresponding position in the current plain text range\n result = index + indexInPlainText - substrPlainTextIndex;\n }\n };\n\n var markupIteratee = function markupIteratee(markup, index, mentionPlainTextIndex, id, display, childIndex, lastMentionEndIndex) {\n if (result !== undefined) return;\n\n if (mentionPlainTextIndex + display.length > indexInPlainText) {\n // found the corresponding position inside current match,\n // return the index of the first or after the last char of the matching markup\n // depending on whether the `inMarkupCorrection`\n if (inMarkupCorrection === 'NULL') {\n result = null;\n } else {\n result = index + (inMarkupCorrection === 'END' ? markup.length : 0);\n }\n }\n };\n\n iterateMentionsMarkup(value, config, markupIteratee, textIteratee); // when a mention is at the end of the value and we want to get the caret position\n // at the end of the string, result is undefined\n\n return result === undefined ? value.length : result;\n};\n\nvar spliceString = function spliceString(str, start, end, insert) {\n return str.substring(0, start) + insert + str.substring(end);\n};\n\n// guided by the textarea text selection ranges before and after the change\n\nvar applyChangeToValue = function applyChangeToValue(value, plainTextValue, _ref, config) {\n var selectionStartBefore = _ref.selectionStartBefore,\n selectionEndBefore = _ref.selectionEndBefore,\n selectionEndAfter = _ref.selectionEndAfter;\n var oldPlainTextValue = getPlainText(value, config);\n var lengthDelta = oldPlainTextValue.length - plainTextValue.length;\n\n if (selectionStartBefore === 'undefined') {\n selectionStartBefore = selectionEndAfter + lengthDelta;\n }\n\n if (selectionEndBefore === 'undefined') {\n selectionEndBefore = selectionStartBefore;\n } // Fixes an issue with replacing combined characters for complex input. Eg like acented letters on OSX\n\n\n if (selectionStartBefore === selectionEndBefore && selectionEndBefore === selectionEndAfter && oldPlainTextValue.length === plainTextValue.length) {\n selectionStartBefore = selectionStartBefore - 1;\n } // extract the insertion from the new plain text value\n\n\n var insert = plainTextValue.slice(selectionStartBefore, selectionEndAfter); // handling for Backspace key with no range selection\n\n var spliceStart = Math.min(selectionStartBefore, selectionEndAfter);\n var spliceEnd = selectionEndBefore;\n\n if (selectionStartBefore === selectionEndAfter) {\n // handling for Delete key with no range selection\n spliceEnd = Math.max(selectionEndBefore, selectionStartBefore + lengthDelta);\n }\n\n var mappedSpliceStart = mapPlainTextIndex(value, config, spliceStart, 'START');\n var mappedSpliceEnd = mapPlainTextIndex(value, config, spliceEnd, 'END');\n var controlSpliceStart = mapPlainTextIndex(value, config, spliceStart, 'NULL');\n var controlSpliceEnd = mapPlainTextIndex(value, config, spliceEnd, 'NULL');\n var willRemoveMention = controlSpliceStart === null || controlSpliceEnd === null;\n var newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert);\n\n if (!willRemoveMention) {\n // test for auto-completion changes\n var controlPlainTextValue = getPlainText(newValue, config);\n\n if (controlPlainTextValue !== plainTextValue) {\n // some auto-correction is going on\n // find start of diff\n spliceStart = 0;\n\n while (plainTextValue[spliceStart] === controlPlainTextValue[spliceStart]) {\n spliceStart++;\n } // extract auto-corrected insertion\n\n\n insert = plainTextValue.slice(spliceStart, selectionEndAfter); // find index of the unchanged remainder\n\n spliceEnd = oldPlainTextValue.lastIndexOf(plainTextValue.substring(selectionEndAfter)); // re-map the corrected indices\n\n mappedSpliceStart = mapPlainTextIndex(value, config, spliceStart, 'START');\n mappedSpliceEnd = mapPlainTextIndex(value, config, spliceEnd, 'END');\n newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert);\n }\n }\n\n return newValue;\n};\n\n// returns a the index of of the first char of the mention in the plain text.\n// If indexInPlainText does not lie inside a mention, returns indexInPlainText.\n\nvar findStartOfMentionInPlainText = function findStartOfMentionInPlainText(value, config, indexInPlainText) {\n var result = indexInPlainText;\n var foundMention = false;\n\n var markupIteratee = function markupIteratee(markup, index, mentionPlainTextIndex, id, display, childIndex, lastMentionEndIndex) {\n if (mentionPlainTextIndex <= indexInPlainText && mentionPlainTextIndex + display.length > indexInPlainText) {\n result = mentionPlainTextIndex;\n foundMention = true;\n }\n };\n\n iterateMentionsMarkup(value, config, markupIteratee);\n\n if (foundMention) {\n return result;\n }\n};\n\nvar getMentions = function getMentions(value, config) {\n var mentions = [];\n iterateMentionsMarkup(value, config, function (match, index, plainTextIndex, id, display, childIndex, start) {\n mentions.push({\n id: id,\n display: display,\n childIndex: childIndex,\n index: index,\n plainTextIndex: plainTextIndex\n });\n });\n return mentions;\n};\n\nvar getSuggestionHtmlId = function getSuggestionHtmlId(prefix, id) {\n return \"\".concat(prefix, \"-\").concat(id);\n};\n\nvar countSuggestions = function countSuggestions(suggestions) {\n return Object.values(suggestions).reduce(function (acc, _ref) {\n var results = _ref.results;\n return acc + results.length;\n }, 0);\n};\n\nvar getEndOfLastMention = function getEndOfLastMention(value, config) {\n var mentions = getMentions(value, config);\n var lastMention = mentions[mentions.length - 1];\n return lastMention ? lastMention.plainTextIndex + lastMention.display.length : 0;\n};\n\nvar markupToRegex = function markupToRegex(markup) {\n var escapedMarkup = escapeRegex(markup);\n var charAfterDisplay = markup[markup.indexOf(PLACEHOLDERS.display) + PLACEHOLDERS.display.length];\n var charAfterId = markup[markup.indexOf(PLACEHOLDERS.id) + PLACEHOLDERS.id.length];\n return new RegExp(escapedMarkup.replace(PLACEHOLDERS.display, \"([^\".concat(escapeRegex(charAfterDisplay || ''), \"]+?)\")).replace(PLACEHOLDERS.id, \"([^\".concat(escapeRegex(charAfterId || ''), \"]+?)\")));\n};\n\nvar readConfigFromChildren = function readConfigFromChildren(children) {\n return Children.toArray(children).map(function (_ref) {\n var _ref$props = _ref.props,\n markup = _ref$props.markup,\n regex = _ref$props.regex,\n displayTransform = _ref$props.displayTransform;\n return {\n markup: markup,\n regex: regex ? coerceCapturingGroups(regex, markup) : markupToRegex(markup),\n displayTransform: displayTransform || function (id, display) {\n return display || id;\n }\n };\n });\n}; // make sure that the custom regex defines the correct number of capturing groups\n\n\nvar coerceCapturingGroups = function coerceCapturingGroups(regex, markup) {\n var numberOfGroups = new RegExp(regex.toString() + '|').exec('').length - 1;\n var numberOfPlaceholders = countPlaceholders(markup);\n invariant(numberOfGroups === numberOfPlaceholders, \"Number of capturing groups in RegExp \".concat(regex.toString(), \" (\").concat(numberOfGroups, \") does not match the number of placeholders in the markup '\").concat(markup, \"' (\").concat(numberOfPlaceholders, \")\"));\n return regex;\n};\n\nvar makeMentionsMarkup = function makeMentionsMarkup(markup, id, display) {\n return markup.replace(PLACEHOLDERS.id, id).replace(PLACEHOLDERS.display, display);\n};\n\n// This contains all the latin letters and the regex that match these letters with diacritics\n// https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript\nvar lettersDiacritics = [{\n base: 'A',\n letters: /(&#65;|&#9398;|&#65313;|&#192;|&#193;|&#194;|&#7846;|&#7844;|&#7850;|&#7848;|&#195;|&#256;|&#258;|&#7856;|&#7854;|&#7860;|&#7858;|&#550;|&#480;|&#196;|&#478;|&#7842;|&#197;|&#506;|&#461;|&#512;|&#514;|&#7840;|&#7852;|&#7862;|&#7680;|&#260;|&#570;|&#11375;|[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F])/g\n}, {\n base: 'AA',\n letters: /(&#42802;|[\\uA732])/g\n}, {\n base: 'AE',\n letters: /(&#198;|&#508;|&#482;|[\\u00C6\\u01FC\\u01E2])/g\n}, {\n base: 'AO',\n letters: /(&#42804;|[\\uA734])/g\n}, {\n base: 'AU',\n letters: /(&#42806;|[\\uA736])/g\n}, {\n base: 'AV',\n letters: /(&#42808;|&#42810;|[\\uA738\\uA73A])/g\n}, {\n base: 'AY',\n letters: /(&#42812;|[\\uA73C])/g\n}, {\n base: 'B',\n letters: /(&#66;|&#9399;|&#65314;|&#7682;|&#7684;|&#7686;|&#579;|&#386;|&#385;|[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181])/g\n}, {\n base: 'C',\n letters: /(&#67;|&#9400;|&#65315;|&#262;|&#264;|&#266;|&#268;|&#199;|&#7688;|&#391;|&#571;|&#42814;|[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E])/g\n}, {\n base: 'D',\n letters: /(&#68;|&#9401;|&#65316;|&#7690;|&#270;|&#7692;|&#7696;|&#7698;|&#7694;|&#272;|&#395;|&#394;|&#393;|&#42873;|&#208;|[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\\u00D0])/g\n}, {\n base: 'DZ',\n letters: /(&#497;|&#452;|[\\u01F1\\u01C4])/g\n}, {\n base: 'Dz',\n letters: /(&#498;|&#453;|[\\u01F2\\u01C5])/g\n}, {\n base: 'E',\n letters: /(&#69;|&#9402;|&#65317;|&#200;|&#201;|&#202;|&#7872;|&#7870;|&#7876;|&#7874;|&#7868;|&#274;|&#7700;|&#7702;|&#276;|&#278;|&#203;|&#7866;|&#282;|&#516;|&#518;|&#7864;|&#7878;|&#552;|&#7708;|&#280;|&#7704;|&#7706;|&#400;|&#398;|[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E])/g\n}, {\n base: 'F',\n letters: /(&#70;|&#9403;|&#65318;|&#7710;|&#401;|&#42875;|[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B])/g\n}, {\n base: 'G',\n letters: /(&#71;|&#9404;|&#65319;|&#500;|&#284;|&#7712;|&#286;|&#288;|&#486;|&#290;|&#484;|&#403;|&#42912;|&#42877;|&#42878;|[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E])/g\n}, {\n base: 'H',\n letters: /(&#72;|&#9405;|&#65320;|&#292;|&#7714;|&#7718;|&#542;|&#7716;|&#7720;|&#7722;|&#294;|&#11367;|&#11381;|&#42893;|[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D])/g\n}, {\n base: 'I',\n letters: /(&#73;|&#9406;|&#65321;|&#204;|&#205;|&#206;|&#296;|&#298;|&#300;|&#304;|&#207;|&#7726;|&#7880;|&#463;|&#520;|&#522;|&#7882;|&#302;|&#7724;|&#407;|[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197])/g\n}, {\n base: 'J',\n letters: /(&#74;|&#9407;|&#65322;|&#308;|&#584;|[\\u004A\\u24BF\\uFF2A\\u0134\\u0248])/g\n}, {\n base: 'K',\n letters: /(&#75;|&#9408;|&#65323;|&#7728;|&#488;|&#7730;|&#310;|&#7732;|&#408;|&#11369;|&#42816;|&#42818;|&#42820;|&#42914;|[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2])/g\n}, {\n base: 'L',\n letters: /(&#76;|&#9409;|&#65324;|&#319;|&#313;|&#317;|&#7734;|&#7736;|&#315;|&#7740;|&#7738;|&#321;|&#573;|&#11362;|&#11360;|&#42824;|&#42822;|&#42880;|[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780])/g\n}, {\n base: 'LJ',\n letters: /(&#455;|[\\u01C7])/g\n}, {\n base: 'Lj',\n letters: /(&#456;|[\\u01C8])/g\n}, {\n base: 'M',\n letters: /(&#77;|&#9410;|&#65325;|&#7742;|&#7744;|&#7746;|&#11374;|&#412;|[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C])/g\n}, {\n base: 'N',\n letters: /(&#78;|&#9411;|&#65326;|&#504;|&#323;|&#209;|&#7748;|&#327;|&#7750;|&#325;|&#7754;|&#7752;|&#544;|&#413;|&#42896;|&#42916;|&#330;|[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\\u014A])/g\n}, {\n base: 'NJ',\n letters: /(&#458;|[\\u01CA])/g\n}, {\n base: 'Nj',\n letters: /(&#459;|[\\u01CB])/g\n}, {\n base: 'O',\n letters: /(&#79;|&#9412;|&#65327;|&#210;|&#211;|&#212;|&#7890;|&#7888;|&#7894;|&#7892;|&#213;|&#7756;|&#556;|&#7758;|&#332;|&#7760;|&#7762;|&#334;|&#558;|&#560;|&#214;|&#554;|&#7886;|&#336;|&#465;|&#524;|&#526;|&#416;|&#7900;|&#7898;|&#7904;|&#7902;|&#7906;|&#7884;|&#7896;|&#490;|&#492;|&#216;|&#510;|&#390;|&#415;|&#42826;|&#42828;|[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C])/g\n}, {\n base: 'OE',\n letters: /(&#338;|[\\u0152])/g\n}, {\n base: 'OI',\n letters: /(&#418;|[\\u01A2])/g\n}, {\n base: 'OO',\n letters: /(&#42830;|[\\uA74E])/g\n}, {\n base: 'OU',\n letters: /(&#546;|[\\u0222])/g\n}, {\n base: 'P',\n letters: /(&#80;|&#9413;|&#65328;|&#7764;|&#7766;|&#420;|&#11363;|&#42832;|&#42834;|&#42836;|[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754])/g\n}, {\n base: 'Q',\n letters: /(&#81;|&#9414;|&#65329;|&#42838;|&#42840;|&#586;|[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A])/g\n}, {\n base: 'R',\n letters: /(&#82;|&#9415;|&#65330;|&#340;|&#7768;|&#344;|&#528;|&#530;|&#7770;|&#7772;|&#342;|&#7774;|&#588;|&#11364;|&#42842;|&#42918;|&#42882;|[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782])/g\n}, {\n base: 'S',\n letters: /(&#83;|&#9416;|&#65331;|&#7838;|&#346;|&#7780;|&#348;|&#7776;|&#352;|&#7782;|&#7778;|&#7784;|&#536;|&#350;|&#11390;|&#42920;|&#42884;|[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784])/g\n}, {\n base: 'T',\n letters: /(&#84;|&#9417;|&#65332;|&#7786;|&#356;|&#7788;|&#538;|&#354;|&#7792;|&#7790;|&#358;|&#428;|&#430;|&#574;|&#42886;|[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786])/g\n}, {\n base: 'TH',\n letters: /(&#222;|[\\u00DE])/g\n}, {\n base: 'TZ',\n letters: /(&#42792;|[\\uA728])/g\n}, {\n base: 'U',\n letters: /(&#85;|&#9418;|&#65333;|&#217;|&#218;|&#219;|&#360;|&#7800;|&#362;|&#7802;|&#364;|&#220;|&#475;|&#471;|&#469;|&#473;|&#7910;|&#366;|&#368;|&#467;|&#532;|&#534;|&#431;|&#7914;|&#7912;|&#7918;|&#7916;|&#7920;|&#7908;|&#7794;|&#370;|&#7798;|&#7796;|&#580;|[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244])/g\n}, {\n base: 'V',\n letters: /(&#86;|&#9419;|&#65334;|&#7804;|&#7806;|&#434;|&#42846;|&#581;|[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245])/g\n}, {\n base: 'VY',\n letters: /(&#42848;|[\\uA760])/g\n}, {\n base: 'W',\n letters: /(&#87;|&#9420;|&#65335;|&#7808;|&#7810;|&#372;|&#7814;|&#7812;|&#7816;|&#11378;|[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72])/g\n}, {\n base: 'X',\n letters: /(&#88;|&#9421;|&#65336;|&#7818;|&#7820;|[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C])/g\n}, {\n base: 'Y',\n letters: /(&#89;|&#9422;|&#65337;|&#7922;|&#221;|&#374;|&#7928;|&#562;|&#7822;|&#376;|&#7926;|&#7924;|&#435;|&#590;|&#7934;|[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE])/g\n}, {\n base: 'Z',\n letters: /(&#90;|&#9423;|&#65338;|&#377;|&#7824;|&#379;|&#381;|&#7826;|&#7828;|&#437;|&#548;|&#11391;|&#11371;|&#42850;|[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762])/g\n}, {\n base: 'a',\n letters: /(&#97;|&#9424;|&#65345;|&#7834;|&#224;|&#225;|&#226;|&#7847;|&#7845;|&#7851;|&#7849;|&#227;|&#257;|&#259;|&#7857;|&#7855;|&#7861;|&#7859;|&#551;|&#481;|&#228;|&#479;|&#7843;|&#229;|&#507;|&#462;|&#513;|&#515;|&#7841;|&#7853;|&#7863;|&#7681;|&#261;|&#11365;|&#592;|[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250])/g\n}, {\n base: 'aa',\n letters: /(&#42803;|[\\uA733])/g\n}, {\n base: 'ae',\n letters: /(&#230;|&#509;|&#483;|[\\u00E6\\u01FD\\u01E3])/g\n}, {\n base: 'ao',\n letters: /(&#42805;|[\\uA735])/g\n}, {\n base: 'au',\n letters: /(&#42807;|[\\uA737])/g\n}, {\n base: 'av',\n letters: /(&#42809;|&#42811;|[\\uA739\\uA73B])/g\n}, {\n base: 'ay',\n letters: /(&#42813;|[\\uA73D])/g\n}, {\n base: 'b',\n letters: /(&#98;|&#9425;|&#65346;|&#7683;|&#7685;|&#7687;|&#384;|&#387;|&#595;|[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253])/g\n}, {\n base: 'c',\n letters: /(&#99;|&#9426;|&#65347;|&#263;|&#265;|&#267;|&#269;|&#231;|&#7689;|&#392;|&#572;|&#42815;|&#8580;|[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184])/g\n}, {\n base: 'd',\n letters: /(&#100;|&#9427;|&#65348;|&#7691;|&#271;|&#7693;|&#7697;|&#7699;|&#7695;|&#273;|&#396;|&#598;|&#599;|&#42874;|&#240;|[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\\u00F0])/g\n}, {\n base: 'dz',\n letters: /(&#499;|&#454;|[\\u01F3\\u01C6])/g\n}, {\n base: 'e',\n letters: /(&#101;|&#9428;|&#65349;|&#232;|&#233;|&#234;|&#7873;|&#7871;|&#7877;|&#7875;|&#7869;|&#275;|&#7701;|&#7703;|&#277;|&#279;|&#235;|&#7867;|&#283;|&#517;|&#519;|&#7865;|&#7879;|&#553;|&#7709;|&#281;|&#7705;|&#7707;|&#583;|&#603;|&#477;|[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD])/g\n}, {\n base: 'f',\n letters: /(&#102;|&#9429;|&#65350;|&#7711;|&#402;|&#42876;|[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C])/g\n}, {\n base: 'g',\n letters: /(&#103;|&#9430;|&#65351;|&#501;|&#285;|&#7713;|&#287;|&#289;|&#487;|&#291;|&#485;|&#608;|&#42913;|&#7545;|&#42879;|[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F])/g\n}, {\n base: 'h',\n letters: /(&#104;|&#9431;|&#65352;|&#293;|&#7715;|&#7719;|&#543;|&#7717;|&#7721;|&#7723;|&#7830;|&#295;|&#11368;|&#11382;|&#613;|[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265])/g\n}, {\n base: 'hv',\n letters: /(&#405;|[\\u0195])/g\n}, {\n base: 'i',\n letters: /(&#105;|&#9432;|&#65353;|&#236;|&#237;|&#238;|&#297;|&#299;|&#301;|&#239;|&#7727;|&#7881;|&#464;|&#521;|&#523;|&#7883;|&#303;|&#7725;|&#616;|&#305;|[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131])/g\n}, {\n base: 'ij',\n letters: /(&#307;|[\\u0133])/g\n}, {\n base: 'j',\n letters: /(&#106;|&#9433;|&#65354;|&#309;|&#496;|&#585;|[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249])/g\n}, {\n base: 'k',\n letters: /(&#107;|&#9434;|&#65355;|&#7729;|&#489;|&#7731;|&#311;|&#7733;|&#409;|&#11370;|&#42817;|&#42819;|&#42821;|&#42915;|[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3])/g\n}, {\n base: 'l',\n letters: /(&#108;|&#9435;|&#65356;|&#320;|&#314;|&#318;|&#7735;|&#7737;|&#316;|&#7741;|&#7739;|&#322;|&#410;|&#619;|&#11361;|&#42825;|&#42881;|&#42823;|[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747])/g\n}, {\n base: 'lj',\n letters: /(&#457;|[\\u01C9])/g\n}, {\n base: 'm',\n letters: /(&#109;|&#9436;|&#65357;|&#7743;|&#7745;|&#7747;|&#625;|&#623;|[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F])/g\n}, {\n base: 'n',\n letters: /(&#110;|&#9437;|&#65358;|&#505;|&#324;|&#241;|&#7749;|&#328;|&#7751;|&#326;|&#7755;|&#7753;|&#414;|&#626;|&#329;|&#42897;|&#42917;|&#331;|[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u014B])/g\n}, {\n base: 'nj',\n letters: /(&#460;|[\\u01CC])/g\n}, {\n base: 'o',\n letters: /(&#111;|&#9438;|&#65359;|&#242;|&#243;|&#244;|&#7891;|&#7889;|&#7895;|&#7893;|&#245;|&#7757;|&#557;|&#7759;|&#333;|&#7761;|&#7763;|&#335;|&#559;|&#561;|&#246;|&#555;|&#7887;|&#337;|&#466;|&#525;|&#527;|&#417;|&#7901;|&#7899;|&#7905;|&#7903;|&#7907;|&#7885;|&#7897;|&#491;|&#493;|&#248;|&#511;|&#596;|&#42827;|&#42829;|&#629;|[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275])/g\n}, {\n base: 'oe',\n letters: /(&#339;|[\\u0153])/g\n}, {\n base: 'oi',\n letters: /(&#419;|[\\u01A3])/g\n}, {\n base: 'ou',\n letters: /(&#547;|[\\u0223])/g\n}, {\n base: 'oo',\n letters: /(&#42831;|[\\uA74F])/g\n}, {\n base: 'p',\n letters: /(&#112;|&#9439;|&#65360;|&#7765;|&#7767;|&#421;|&#7549;|&#42833;|&#42835;|&#42837;|[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755])/g\n}, {\n base: 'q',\n letters: /(&#113;|&#9440;|&#65361;|&#587;|&#42839;|&#42841;|[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759])/g\n}, {\n base: 'r',\n letters: /(&#114;|&#9441;|&#65362;|&#341;|&#7769;|&#345;|&#529;|&#531;|&#7771;|&#7773;|&#343;|&#7775;|&#589;|&#637;|&#42843;|&#42919;|&#42883;|[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783])/g\n}, {\n base: 's',\n letters: /(&#115;|&#9442;|&#65363;|&#347;|&#7781;|&#349;|&#7777;|&#353;|&#7783;|&#7779;|&#7785;|&#537;|&#351;|&#575;|&#42921;|&#42885;|&#7835;|&#383;|[\\u0073\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u017F])/g\n}, {\n base: 'ss',\n letters: /(&#223;|[\\u00DF])/g\n}, {\n base: 't',\n letters: /(&#116;|&#9443;|&#65364;|&#7787;|&#7831;|&#357;|&#7789;|&#539;|&#355;|&#7793;|&#7791;|&#359;|&#429;|&#648;|&#11366;|&#42887;|[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787])/g\n}, {\n base: 'th',\n letters: /(&#254;|[\\u00FE])/g\n}, {\n base: 'tz',\n letters: /(&#42793;|[\\uA729])/g\n}, {\n base: 'u',\n letters: /(&#117;|&#9444;|&#65365;|&#249;|&#250;|&#251;|&#361;|&#7801;|&#363;|&#7803;|&#365;|&#252;|&#476;|&#472;|&#470;|&#474;|&#7911;|&#367;|&#369;|&#468;|&#533;|&#535;|&#432;|&#7915;|&#7913;|&#7919;|&#7917;|&#7921;|&#7909;|&#7795;|&#371;|&#7799;|&#7797;|&#649;|[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289])/g\n}, {\n base: 'v',\n letters: /(&#118;|&#9445;|&#65366;|&#7805;|&#7807;|&#651;|&#42847;|&#652;|[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C])/g\n}, {\n base: 'vy',\n letters: /(&#42849;|[\\uA761])/g\n}, {\n base: 'w',\n letters: /(&#119;|&#9446;|&#65367;|&#7809;|&#7811;|&#373;|&#7815;|&#7813;|&#7832;|&#7817;|&#11379;|[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73])/g\n}, {\n base: 'x',\n letters: /(&#120;|&#9447;|&#65368;|&#7819;|&#7821;|[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D])/g\n}, {\n base: 'y',\n letters: /(&#121;|&#9448;|&#65369;|&#7923;|&#253;|&#375;|&#7929;|&#563;|&#7823;|&#255;|&#7927;|&#7833;|&#7925;|&#436;|&#591;|&#7935;|[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF])/g\n}, {\n base: 'z',\n letters: /(&#122;|&#9449;|&#65370;|&#378;|&#7825;|&#380;|&#382;|&#7827;|&#7829;|&#438;|&#549;|&#576;|&#11372;|&#42851;|[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763])/g\n}];\n\nvar removeAccents = function removeAccents(str) {\n var formattedStr = str;\n lettersDiacritics.forEach(function (letterDiacritics) {\n formattedStr = formattedStr.replace(letterDiacritics.letters, letterDiacritics.base);\n });\n return formattedStr;\n};\n\nvar normalizeString = function normalizeString(str) {\n return removeAccents(str).toLowerCase();\n};\n\nvar getSubstringIndex = function getSubstringIndex(str, substr, ignoreAccents) {\n if (!ignoreAccents) {\n return str.toLowerCase().indexOf(substr.toLowerCase());\n }\n\n return normalizeString(str).indexOf(normalizeString(substr));\n};\n\nvar isIE = function isIE() {\n return !!document.documentMode;\n};\n\nvar isNumber = function isNumber(val) {\n return typeof val === 'number';\n};\n\nvar keys = function keys(obj) {\n return obj === Object(obj) ? Object.keys(obj) : [];\n};\n\nvar omit = function omit(obj) {\n var _ref;\n\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n var keys = (_ref = []).concat.apply(_ref, rest);\n\n return Object.keys(obj).reduce(function (acc, k) {\n if (obj.hasOwnProperty(k) && !keys.includes(k) && obj[k] !== undefined) {\n acc[k] = obj[k];\n }\n\n return acc;\n }, {});\n};\n\nfunction createDefaultStyle(defaultStyle, getModifiers) {\n var enhance = function enhance(ComponentToWrap) {\n var DefaultStyleEnhancer = function DefaultStyleEnhancer(_ref) {\n var style = _ref.style,\n className = _ref.className,\n classNames = _ref.classNames,\n rest = _objectWithoutProperties(_ref, [\"style\", \"className\", \"classNames\"]);\n\n var modifiers = getModifiers ? getModifiers(rest) : undefined;\n var styles = useStyles(defaultStyle, {\n style: style,\n className: className,\n classNames: classNames\n }, modifiers);\n return React.createElement(ComponentToWrap, _extends({}, rest, {\n style: styles\n }));\n };\n\n var displayName = ComponentToWrap.displayName || ComponentToWrap.name || 'Component';\n DefaultStyleEnhancer.displayName = \"defaultStyle(\".concat(displayName, \")\");\n return DefaultStyleEnhancer;\n };\n\n return enhance;\n}\n\nvar _generateComponentKey = function _generateComponentKey(usedKeys, id) {\n if (!usedKeys.hasOwnProperty(id)) {\n usedKeys[id] = 0;\n } else {\n usedKeys[id]++;\n }\n\n return id + '_' + usedKeys[id];\n};\n\nvar Highlighter =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Highlighter, _Component);\n\n function Highlighter() {\n var _this;\n\n _classCallCheck(this, Highlighter);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Highlighter).apply(this, arguments));\n\n _defineProperty(_assertThisInitialized(_this), \"setCaretElement\", function (el) {\n _this.caretElement = el;\n });\n\n _this.state = {\n left: undefined,\n top: undefined\n };\n return _this;\n }\n\n _createClass(Highlighter, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.notifyCaretPosition();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.notifyCaretPosition();\n }\n }, {\n key: \"notifyCaretPosition\",\n value: function notifyCaretPosition() {\n if (!this.caretElement) {\n return;\n }\n\n var _this$caretElement = this.caretElement,\n offsetLeft = _this$caretElement.offsetLeft,\n offsetTop = _this$caretElement.offsetTop;\n\n if (this.state.left === offsetLeft && this.state.top === offsetTop) {\n return;\n }\n\n var newPosition = {\n left: offsetLeft,\n top: offsetTop\n };\n this.setState(newPosition);\n this.props.onCaretPositionChange(newPosition);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n selectionStart = _this$props.selectionStart,\n selectionEnd = _this$props.selectionEnd,\n value = _this$props.value,\n style = _this$props.style,\n children = _this$props.children,\n containerRef = _this$props.containerRef;\n var config = readConfigFromChildren(children); // If there's a caret (i.e. no range selection), map the caret position into the marked up value\n\n var caretPositionInMarkup;\n\n if (selectionStart === selectionEnd) {\n caretPositionInMarkup = mapPlainTextIndex(value, config, selectionStart, 'START');\n }\n\n var resultComponents = [];\n var componentKeys = {}; // start by appending directly to the resultComponents\n\n var components = resultComponents;\n var substringComponentKey = 0;\n\n var textIteratee = function textIteratee(substr, index, indexInPlainText) {\n // check whether the caret element has to be inserted inside the current plain substring\n if (isNumber(caretPositionInMarkup) && caretPositionInMarkup >= index && caretPositionInMarkup <= index + substr.length) {\n // if yes, split substr at the caret position and insert the caret component\n var splitIndex = caretPositionInMarkup - index;\n components.push(_this2.renderSubstring(substr.substring(0, splitIndex), substringComponentKey)); // add all following substrings and mention components as children of the caret component\n\n components = [_this2.renderSubstring(substr.substring(splitIndex), substringComponentKey)];\n } else {\n // otherwise just push the plain text substring\n components.push(_this2.renderSubstring(substr, substringComponentKey));\n }\n\n substringComponentKey++;\n };\n\n var mentionIteratee = function mentionIteratee(markup, index, indexInPlainText, id, display, mentionChildIndex, lastMentionEndIndex) {\n // generate a component key based on the id\n var key = _generateComponentKey(componentKeys, id);\n\n components.push(_this2.getMentionComponentForMatch(id, display, mentionChildIndex, key));\n };\n\n iterateMentionsMarkup(value, config, mentionIteratee, textIteratee); // append a span containing a space, to ensure the last text line has the correct height\n\n components.push(' ');\n\n if (components !== resultComponents) {\n // if a caret component is to be rendered, add all components that followed as its children\n resultComponents.push(this.renderHighlighterCaret(components));\n }\n\n return React.createElement(\"div\", _extends({}, style, {\n ref: containerRef\n }), resultComponents);\n }\n }, {\n key: \"renderSubstring\",\n value: function renderSubstring(string, key) {\n // set substring span to hidden, so that Emojis are not shown double in Mobile Safari\n return React.createElement(\"span\", _extends({}, this.props.style('substring'), {\n key: key\n }), string);\n } // Returns a clone of the Mention child applicable for the specified type to be rendered inside the highlighter\n\n }, {\n key: \"getMentionComponentForMatch\",\n value: function getMentionComponentForMatch(id, display, mentionChildIndex, key) {\n var props = {\n id: id,\n display: display,\n key: key\n };\n var child = Children.toArray(this.props.children)[mentionChildIndex];\n return React.cloneElement(child, props);\n } // Renders an component to be inserted in the highlighter at the current caret position\n\n }, {\n key: \"renderHighlighterCaret\",\n value: function renderHighlighterCaret(children) {\n return React.createElement(\"span\", _extends({}, this.props.style('caret'), {\n ref: this.setCaretElement,\n key: \"caret\"\n }), children);\n }\n }]);\n\n return Highlighter;\n}(Component);\n\n_defineProperty(Highlighter, \"propTypes\", {\n selectionStart: PropTypes.number,\n selectionEnd: PropTypes.number,\n value: PropTypes.string.isRequired,\n onCaretPositionChange: PropTypes.func.isRequired,\n containerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : PropTypes.instanceOf(Element)\n })]),\n children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired\n});\n\n_defineProperty(Highlighter, \"defaultProps\", {\n value: ''\n});\n\nvar styled = createDefaultStyle({\n position: 'relative',\n boxSizing: 'border-box',\n width: '100%',\n color: 'transparent',\n overflow: 'hidden',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n border: '1px solid transparent',\n textAlign: 'start',\n '&singleLine': {\n whiteSpace: 'pre',\n wordWrap: null\n },\n substring: {\n visibility: 'hidden'\n }\n}, function (props) {\n return {\n '&singleLine': props.singleLine\n };\n});\nvar Highlighter$1 = styled(Highlighter);\n\nvar Suggestion =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Suggestion, _Component);\n\n function Suggestion() {\n _classCallCheck(this, Suggestion);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Suggestion).apply(this, arguments));\n }\n\n _createClass(Suggestion, [{\n key: \"render\",\n value: function render() {\n var rest = omit(this.props, ['style', 'classNames', 'className'], // substyle props\n keys(Suggestion.propTypes));\n return React.createElement(\"li\", _extends({\n id: this.props.id,\n role: \"option\",\n \"aria-selected\": this.props.focused\n }, rest, this.props.style), this.renderContent());\n }\n }, {\n key: \"renderContent\",\n value: function renderContent() {\n var _this$props = this.props,\n query = _this$props.query,\n renderSuggestion = _this$props.renderSuggestion,\n suggestion = _this$props.suggestion,\n index = _this$props.index,\n focused = _this$props.focused;\n var display = this.getDisplay();\n var highlightedDisplay = this.renderHighlightedDisplay(display, query);\n\n if (renderSuggestion) {\n return renderSuggestion(suggestion, query, highlightedDisplay, index, focused);\n }\n\n return highlightedDisplay;\n }\n }, {\n key: \"getDisplay\",\n value: function getDisplay() {\n var suggestion = this.props.suggestion;\n\n if (typeof suggestion === 'string') {\n return suggestion;\n }\n\n var id = suggestion.id,\n display = suggestion.display;\n\n if (id === undefined || !display) {\n return id;\n }\n\n return display;\n }\n }, {\n key: \"renderHighlightedDisplay\",\n value: function renderHighlightedDisplay(display) {\n var _this$props2 = this.props,\n ignoreAccents = _this$props2.ignoreAccents,\n query = _this$props2.query,\n style = _this$props2.style;\n var i = getSubstringIndex(display, query, ignoreAccents);\n\n if (i === -1) {\n return React.createElement(\"span\", style('display'), display);\n }\n\n return React.createElement(\"span\", style('display'), display.substring(0, i), React.createElement(\"b\", style('highlight'), display.substring(i, i + query.length)), display.substring(i + query.length));\n }\n }]);\n\n return Suggestion;\n}(Component);\n\n_defineProperty(Suggestion, \"propTypes\", {\n id: PropTypes.string.isRequired,\n query: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n ignoreAccents: PropTypes.bool,\n suggestion: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n display: PropTypes.string\n })]).isRequired,\n renderSuggestion: PropTypes.func,\n focused: PropTypes.bool\n});\n\nvar styled$1 = createDefaultStyle({\n cursor: 'pointer'\n}, function (props) {\n return {\n '&focused': props.focused\n };\n});\nvar Suggestion$1 = styled$1(Suggestion);\n\nfunction LoadingIndicator() {\n var styles = useStyles();\n var spinnerStyles = styles('spinner');\n return React.createElement(\"div\", styles, React.createElement(\"div\", spinnerStyles, React.createElement(\"div\", spinnerStyles(['element', 'element1'])), React.createElement(\"div\", spinnerStyles(['element', 'element2'])), React.createElement(\"div\", spinnerStyles(['element', 'element3'])), React.createElement(\"div\", spinnerStyles(['element', 'element4'])), React.createElement(\"div\", spinnerStyles(['element', 'element5']))));\n}\n\nvar SuggestionsOverlay =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(SuggestionsOverlay, _Component);\n\n function SuggestionsOverlay() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, SuggestionsOverlay);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(SuggestionsOverlay)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"handleMouseEnter\", function (index, ev) {\n if (_this.props.onMouseEnter) {\n _this.props.onMouseEnter(index);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"select\", function (suggestion, queryInfo) {\n _this.props.onSelect(suggestion, queryInfo);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setUlElement\", function (el) {\n _this.ulElement = el;\n });\n\n return _this;\n }\n\n _createClass(SuggestionsOverlay, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (!this.ulElement || this.ulElement.offsetHeight >= this.ulElement.scrollHeight || !this.props.scrollFocusedIntoView) {\n return;\n }\n\n var scrollTop = this.ulElement.scrollTop;\n\n var _this$ulElement$child = this.ulElement.children[this.props.focusIndex].getBoundingClientRect(),\n top = _this$ulElement$child.top,\n bottom = _this$ulElement$child.bottom;\n\n var _this$ulElement$getBo = this.ulElement.getBoundingClientRect(),\n topContainer = _this$ulElement$getBo.top;\n\n top = top - topContainer + scrollTop;\n bottom = bottom - topContainer + scrollTop;\n\n if (top < scrollTop) {\n this.ulElement.scrollTop = top;\n } else if (bottom > this.ulElement.offsetHeight) {\n this.ulElement.scrollTop = bottom - this.ulElement.offsetHeight;\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n id = _this$props.id,\n a11ySuggestionsListLabel = _this$props.a11ySuggestionsListLabel,\n isOpened = _this$props.isOpened,\n style = _this$props.style,\n onMouseDown = _this$props.onMouseDown,\n containerRef = _this$props.containerRef,\n position = _this$props.position,\n left = _this$props.left,\n top = _this$props.top; // do not show suggestions until there is some data\n\n if (!isOpened) {\n return null;\n }\n\n return React.createElement(\"div\", _extends({}, inline({\n position: position || 'absolute',\n left: left,\n top: top\n }, style), {\n onMouseDown: onMouseDown,\n ref: containerRef\n }), React.createElement(\"ul\", _extends({\n ref: this.setUlElement,\n id: id,\n role: \"listbox\",\n \"aria-label\": a11ySuggestionsListLabel\n }, style('list')), this.renderSuggestions()), this.renderLoadingIndicator());\n }\n }, {\n key: \"renderSuggestions\",\n value: function renderSuggestions() {\n var _this2 = this;\n\n return Object.values(this.props.suggestions).reduce(function (accResults, _ref) {\n var results = _ref.results,\n queryInfo = _ref.queryInfo;\n return [].concat(_toConsumableArray(accResults), _toConsumableArray(results.map(function (result, index) {\n return _this2.renderSuggestion(result, queryInfo, accResults.length + index);\n })));\n }, []);\n }\n }, {\n key: \"renderSuggestion\",\n value: function renderSuggestion(result, queryInfo, index) {\n var _this3 = this;\n\n var isFocused = index === this.props.focusIndex;\n var childIndex = queryInfo.childIndex,\n query = queryInfo.query;\n var renderSuggestion = Children.toArray(this.props.children)[childIndex].props.renderSuggestion;\n var ignoreAccents = this.props.ignoreAccents;\n return React.createElement(Suggestion$1, {\n style: this.props.style('item'),\n key: \"\".concat(childIndex, \"-\").concat(getID(result)),\n id: getSuggestionHtmlId(this.props.id, index),\n query: query,\n index: index,\n ignoreAccents: ignoreAccents,\n renderSuggestion: renderSuggestion,\n suggestion: result,\n focused: isFocused,\n onClick: function onClick() {\n return _this3.select(result, queryInfo);\n },\n onMouseEnter: function onMouseEnter() {\n return _this3.handleMouseEnter(index);\n }\n });\n }\n }, {\n key: \"renderLoadingIndicator\",\n value: function renderLoadingIndicator() {\n if (!this.props.isLoading) {\n return;\n }\n\n return React.createElement(LoadingIndicator, {\n style: this.props.style('loadingIndicator')\n });\n }\n }]);\n\n return SuggestionsOverlay;\n}(Component);\n\n_defineProperty(SuggestionsOverlay, \"propTypes\", {\n id: PropTypes.string.isRequired,\n suggestions: PropTypes.object.isRequired,\n a11ySuggestionsListLabel: PropTypes.string,\n focusIndex: PropTypes.number,\n position: PropTypes.string,\n left: PropTypes.number,\n top: PropTypes.number,\n scrollFocusedIntoView: PropTypes.bool,\n isLoading: PropTypes.bool,\n isOpened: PropTypes.bool.isRequired,\n onSelect: PropTypes.func,\n ignoreAccents: PropTypes.bool,\n containerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : PropTypes.instanceOf(Element)\n })]),\n children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired\n});\n\n_defineProperty(SuggestionsOverlay, \"defaultProps\", {\n suggestions: {},\n onSelect: function onSelect() {\n return null;\n }\n});\n\nvar getID = function getID(suggestion) {\n if (typeof suggestion === 'string') {\n return suggestion;\n }\n\n return suggestion.id;\n};\n\nvar styled$2 = createDefaultStyle({\n zIndex: 1,\n backgroundColor: 'white',\n marginTop: 14,\n minWidth: 100,\n list: {\n margin: 0,\n padding: 0,\n listStyleType: 'none'\n }\n});\nvar SuggestionsOverlay$1 = styled$2(SuggestionsOverlay);\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\nvar makeTriggerRegex = function makeTriggerRegex(trigger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (trigger instanceof RegExp) {\n return trigger;\n } else {\n var allowSpaceInQuery = options.allowSpaceInQuery;\n var escapedTriggerChar = escapeRegex(trigger); // first capture group is the part to be replaced on completion\n // second capture group is for extracting the search query\n\n return new RegExp(\"(?:^|\\\\s)(\".concat(escapedTriggerChar, \"([^\").concat(allowSpaceInQuery ? '' : '\\\\s').concat(escapedTriggerChar, \"]*))$\"));\n }\n};\n\nvar getDataProvider = function getDataProvider(data, ignoreAccents) {\n if (data instanceof Array) {\n // if data is an array, create a function to query that\n return function (query, callback) {\n var results = [];\n\n for (var i = 0, l = data.length; i < l; ++i) {\n var display = data[i].display || data[i].id;\n\n if (getSubstringIndex(display, query, ignoreAccents) >= 0) {\n results.push(data[i]);\n }\n }\n\n return results;\n };\n } else {\n // expect data to be a query function\n return data;\n }\n};\n\nvar KEY = {\n TAB: 9,\n RETURN: 13,\n ESC: 27,\n UP: 38,\n DOWN: 40\n};\nvar isComposing = false;\nvar propTypes = {\n /**\n * If set to `true` a regular text input element will be rendered\n * instead of a textarea\n */\n singleLine: PropTypes.bool,\n allowSpaceInQuery: PropTypes.bool,\n allowSuggestionsAboveCursor: PropTypes.bool,\n forceSuggestionsAboveCursor: PropTypes.bool,\n ignoreAccents: PropTypes.bool,\n a11ySuggestionsListLabel: PropTypes.string,\n value: PropTypes.string,\n onKeyDown: PropTypes.func,\n onSelect: PropTypes.func,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n suggestionsPortalHost: typeof Element === 'undefined' ? PropTypes.any : PropTypes.PropTypes.instanceOf(Element),\n inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : PropTypes.instanceOf(Element)\n })]),\n children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired\n};\n\nvar MentionsInput =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(MentionsInput, _React$Component);\n\n function MentionsInput(_props) {\n var _this;\n\n _classCallCheck(this, MentionsInput);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(MentionsInput).call(this, _props));\n\n _defineProperty(_assertThisInitialized(_this), \"setContainerElement\", function (el) {\n _this.containerElement = el;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getInputProps\", function () {\n var _this$props = _this.props,\n readOnly = _this$props.readOnly,\n disabled = _this$props.disabled,\n style = _this$props.style; // pass all props that neither we, nor substyle, consume through to the input control\n\n var props = omit(_this.props, ['style', 'classNames', 'className'], // substyle props\n keys(propTypes));\n return _objectSpread({}, props, {}, style('input'), {\n value: _this.getPlainText()\n }, !readOnly && !disabled && {\n onChange: _this.handleChange,\n onSelect: _this.handleSelect,\n onKeyDown: _this.handleKeyDown,\n onBlur: _this.handleBlur,\n onCompositionStart: _this.handleCompositionStart,\n onCompositionEnd: _this.handleCompositionEnd,\n onScroll: _this.updateHighlighterScroll\n }, {}, _this.isOpened() && {\n role: 'combobox',\n 'aria-controls': _this.uuidSuggestionsOverlay,\n 'aria-expanded': true,\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n 'aria-activedescendant': getSuggestionHtmlId(_this.uuidSuggestionsOverlay, _this.state.focusIndex)\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderControl\", function () {\n var _this$props2 = _this.props,\n singleLine = _this$props2.singleLine,\n style = _this$props2.style;\n\n var inputProps = _this.getInputProps();\n\n return React.createElement(\"div\", style('control'), _this.renderHighlighter(), singleLine ? _this.renderInput(inputProps) : _this.renderTextarea(inputProps));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderInput\", function (props) {\n return React.createElement(\"input\", _extends({\n type: \"text\",\n ref: _this.setInputRef\n }, props));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderTextarea\", function (props) {\n return React.createElement(\"textarea\", _extends({\n ref: _this.setInputRef\n }, props));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setInputRef\", function (el) {\n _this.inputElement = el;\n var inputRef = _this.props.inputRef;\n\n if (typeof inputRef === 'function') {\n inputRef(el);\n } else if (inputRef) {\n inputRef.current = el;\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setSuggestionsElement\", function (el) {\n _this.suggestionsElement = el;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderSuggestionsOverlay\", function () {\n if (!isNumber(_this.state.selectionStart)) {\n // do not show suggestions when the input does not have the focus\n return null;\n }\n\n var _this$state$suggestio = _this.state.suggestionsPosition,\n position = _this$state$suggestio.position,\n left = _this$state$suggestio.left,\n top = _this$state$suggestio.top;\n var suggestionsNode = React.createElement(SuggestionsOverlay$1, {\n id: _this.uuidSuggestionsOverlay,\n style: _this.props.style('suggestions'),\n position: position,\n left: left,\n top: top,\n focusIndex: _this.state.focusIndex,\n scrollFocusedIntoView: _this.state.scrollFocusedIntoView,\n containerRef: _this.setSuggestionsElement,\n suggestions: _this.state.suggestions,\n onSelect: _this.addMention,\n onMouseDown: _this.handleSuggestionsMouseDown,\n onMouseEnter: _this.handleSuggestionsMouseEnter,\n isLoading: _this.isLoading(),\n isOpened: _this.isOpened(),\n ignoreAccents: _this.props.ignoreAccents,\n a11ySuggestionsListLabel: _this.props.a11ySuggestionsListLabel\n }, _this.props.children);\n\n if (_this.props.suggestionsPortalHost) {\n return ReactDOM.createPortal(suggestionsNode, _this.props.suggestionsPortalHost);\n } else {\n return suggestionsNode;\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderHighlighter\", function () {\n var _this$state = _this.state,\n selectionStart = _this$state.selectionStart,\n selectionEnd = _this$state.selectionEnd;\n var _this$props3 = _this.props,\n singleLine = _this$props3.singleLine,\n children = _this$props3.children,\n value = _this$props3.value,\n style = _this$props3.style;\n return React.createElement(Highlighter$1, {\n containerRef: _this.setHighlighterElement,\n style: style('highlighter'),\n value: value,\n singleLine: singleLine,\n selectionStart: selectionStart,\n selectionEnd: selectionEnd,\n onCaretPositionChange: _this.handleCaretPositionChange\n }, children);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setHighlighterElement\", function (el) {\n _this.highlighterElement = el;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleCaretPositionChange\", function (position) {\n _this.setState({\n caretPosition: position\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getPlainText\", function () {\n return getPlainText(_this.props.value || '', readConfigFromChildren(_this.props.children));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"executeOnChange\", function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (_this.props.onChange) {\n var _this$props4;\n\n return (_this$props4 = _this.props).onChange.apply(_this$props4, [event].concat(args));\n }\n\n if (_this.props.valueLink) {\n var _this$props$valueLink;\n\n return (_this$props$valueLink = _this.props.valueLink).requestChange.apply(_this$props$valueLink, [event.target.value].concat(args));\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleChange\", function (ev) {\n isComposing = false;\n\n if (isIE()) {\n // if we are inside iframe, we need to find activeElement within its contentDocument\n var currentDocument = document.activeElement && document.activeElement.contentDocument || document;\n\n if (currentDocument.activeElement !== ev.target) {\n // fix an IE bug (blur from empty input element with placeholder attribute trigger \"input\" event)\n return;\n }\n }\n\n var value = _this.props.value || '';\n var config = readConfigFromChildren(_this.props.children);\n var newPlainTextValue = ev.target.value; // Derive the new value to set by applying the local change in the textarea's plain text\n\n var newValue = applyChangeToValue(value, newPlainTextValue, {\n selectionStartBefore: _this.state.selectionStart,\n selectionEndBefore: _this.state.selectionEnd,\n selectionEndAfter: ev.target.selectionEnd\n }, config); // In case a mention is deleted, also adjust the new plain text value\n\n newPlainTextValue = getPlainText(newValue, config); // Save current selection after change to be able to restore caret position after rerendering\n\n var selectionStart = ev.target.selectionStart;\n var selectionEnd = ev.target.selectionEnd;\n var setSelectionAfterMentionChange = false; // Adjust selection range in case a mention will be deleted by the characters outside of the\n // selection range that are automatically deleted\n\n var startOfMention = findStartOfMentionInPlainText(value, config, selectionStart);\n\n if (startOfMention !== undefined && _this.state.selectionEnd > startOfMention) {\n // only if a deletion has taken place\n selectionStart = startOfMention;\n selectionEnd = selectionStart;\n setSelectionAfterMentionChange = true;\n }\n\n _this.setState({\n selectionStart: selectionStart,\n selectionEnd: selectionEnd,\n setSelectionAfterMentionChange: setSelectionAfterMentionChange\n });\n\n var mentions = getMentions(newValue, config); // Propagate change\n // let handleChange = this.getOnChange(this.props) || emptyFunction;\n\n var eventMock = {\n target: {\n value: newValue\n }\n }; // this.props.onChange.call(this, eventMock, newValue, newPlainTextValue, mentions);\n\n _this.executeOnChange(eventMock, newValue, newPlainTextValue, mentions);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleSelect\", function (ev) {\n // keep track of selection range / caret position\n _this.setState({\n selectionStart: ev.target.selectionStart,\n selectionEnd: ev.target.selectionEnd\n }); // do nothing while a IME composition session is active\n\n\n if (isComposing) return; // refresh suggestions queries\n\n var el = _this.inputElement;\n\n if (ev.target.selectionStart === ev.target.selectionEnd) {\n _this.updateMentionsQueries(el.value, ev.target.selectionStart);\n } else {\n _this.clearSuggestions();\n } // sync highlighters scroll position\n\n\n _this.updateHighlighterScroll();\n\n _this.props.onSelect(ev);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleKeyDown\", function (ev) {\n // do not intercept key events if the suggestions overlay is not shown\n var suggestionsCount = countSuggestions(_this.state.suggestions);\n\n if (suggestionsCount === 0 || !_this.suggestionsElement) {\n _this.props.onKeyDown(ev);\n\n return;\n }\n\n if (Object.values(KEY).indexOf(ev.keyCode) >= 0) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n switch (ev.keyCode) {\n case KEY.ESC:\n {\n _this.clearSuggestions();\n\n return;\n }\n\n case KEY.DOWN:\n {\n _this.shiftFocus(+1);\n\n return;\n }\n\n case KEY.UP:\n {\n _this.shiftFocus(-1);\n\n return;\n }\n\n case KEY.RETURN:\n {\n _this.selectFocused();\n\n return;\n }\n\n case KEY.TAB:\n {\n _this.selectFocused();\n\n return;\n }\n\n default:\n {\n return;\n }\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"shiftFocus\", function (delta) {\n var suggestionsCount = countSuggestions(_this.state.suggestions);\n\n _this.setState({\n focusIndex: (suggestionsCount + _this.state.focusIndex + delta) % suggestionsCount,\n scrollFocusedIntoView: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectFocused\", function () {\n var _this$state2 = _this.state,\n suggestions = _this$state2.suggestions,\n focusIndex = _this$state2.focusIndex;\n var _Object$values$reduce = Object.values(suggestions).reduce(function (acc, _ref) {\n var results = _ref.results,\n queryInfo = _ref.queryInfo;\n return [].concat(_toConsumableArray(acc), _toConsumableArray(results.map(function (result) {\n return {\n result: result,\n queryInfo: queryInfo\n };\n })));\n }, [])[focusIndex],\n result = _Object$values$reduce.result,\n queryInfo = _Object$values$reduce.queryInfo;\n\n _this.addMention(result, queryInfo);\n\n _this.setState({\n focusIndex: 0\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleBlur\", function (ev) {\n var clickedSuggestion = _this._suggestionsMouseDown;\n _this._suggestionsMouseDown = false; // only reset selection if the mousedown happened on an element\n // other than the suggestions overlay\n\n if (!clickedSuggestion) {\n _this.setState({\n selectionStart: null,\n selectionEnd: null\n });\n }\n\n window.setTimeout(function () {\n _this.updateHighlighterScroll();\n }, 1);\n\n _this.props.onBlur(ev, clickedSuggestion);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleSuggestionsMouseDown\", function (ev) {\n _this._suggestionsMouseDown = true;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleSuggestionsMouseEnter\", function (focusIndex) {\n _this.setState({\n focusIndex: focusIndex,\n scrollFocusedIntoView: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSuggestionsPosition\", function () {\n var caretPosition = _this.state.caretPosition;\n var _this$props5 = _this.props,\n suggestionsPortalHost = _this$props5.suggestionsPortalHost,\n allowSuggestionsAboveCursor = _this$props5.allowSuggestionsAboveCursor,\n forceSuggestionsAboveCursor = _this$props5.forceSuggestionsAboveCursor;\n\n if (!caretPosition || !_this.suggestionsElement) {\n return;\n }\n\n var suggestions = _this.suggestionsElement;\n var highlighter = _this.highlighterElement; // first get viewport-relative position (highlighter is offsetParent of caret):\n\n var caretOffsetParentRect = highlighter.getBoundingClientRect();\n var caretHeight = getComputedStyleLengthProp(highlighter, 'font-size');\n var viewportRelative = {\n left: caretOffsetParentRect.left + caretPosition.left,\n top: caretOffsetParentRect.top + caretPosition.top + caretHeight\n };\n var viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n\n if (!suggestions) {\n return;\n }\n\n var position = {}; // if suggestions menu is in a portal, update position to be releative to its portal node\n\n if (suggestionsPortalHost) {\n position.position = 'fixed';\n var left = viewportRelative.left;\n var top = viewportRelative.top; // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:\n\n left -= getComputedStyleLengthProp(suggestions, 'margin-left');\n top -= getComputedStyleLengthProp(suggestions, 'margin-top'); // take into account highlighter/textinput scrolling:\n\n left -= highlighter.scrollLeft;\n top -= highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window\n\n var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n if (left + suggestions.offsetWidth > viewportWidth) {\n position.left = Math.max(0, viewportWidth - suggestions.offsetWidth);\n } else {\n position.left = left;\n } // guard for mentions suggestions list clipped by bottom edge of window if allowSuggestionsAboveCursor set to true.\n // Move the list up above the caret if it's getting cut off by the bottom of the window, provided that the list height\n // is small enough to NOT cover up the caret\n\n\n if (allowSuggestionsAboveCursor && top + suggestions.offsetHeight > viewportHeight && suggestions.offsetHeight < top - caretHeight || forceSuggestionsAboveCursor) {\n position.top = Math.max(0, top - suggestions.offsetHeight - caretHeight);\n } else {\n position.top = top;\n }\n } else {\n var _left = caretPosition.left - highlighter.scrollLeft;\n\n var _top = caretPosition.top - highlighter.scrollTop; // guard for mentions suggestions list clipped by right edge of window\n\n\n if (_left + suggestions.offsetWidth > _this.containerElement.offsetWidth) {\n position.right = 0;\n } else {\n position.left = _left;\n } // guard for mentions suggestions list clipped by bottom edge of window if allowSuggestionsAboveCursor set to true.\n // move the list up above the caret if it's getting cut off by the bottom of the window, provided that the list height\n // is small enough to NOT cover up the caret\n\n\n if (allowSuggestionsAboveCursor && viewportRelative.top - highlighter.scrollTop + suggestions.offsetHeight > viewportHeight && suggestions.offsetHeight < caretOffsetParentRect.top - caretHeight - highlighter.scrollTop) {\n position.top = _top - suggestions.offsetHeight - caretHeight;\n } else {\n position.top = _top;\n }\n }\n\n if (position.left === _this.state.suggestionsPosition.left && position.top === _this.state.suggestionsPosition.top && position.position === _this.state.suggestionsPosition.position) {\n return;\n }\n\n _this.setState({\n suggestionsPosition: position\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateHighlighterScroll\", function () {\n var input = _this.inputElement;\n var highlighter = _this.highlighterElement;\n\n if (!input || !highlighter) {\n // since the invocation of this function is deferred,\n // the whole component may have been unmounted in the meanwhile\n return;\n }\n\n highlighter.scrollLeft = input.scrollLeft;\n highlighter.scrollTop = input.scrollTop;\n highlighter.height = input.height;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleCompositionStart\", function () {\n isComposing = true;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleCompositionEnd\", function () {\n isComposing = false;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setSelection\", function (selectionStart, selectionEnd) {\n if (selectionStart === null || selectionEnd === null) return;\n var el = _this.inputElement;\n\n if (el.setSelectionRange) {\n el.setSelectionRange(selectionStart, selectionEnd);\n } else if (el.createTextRange) {\n var range = el.createTextRange();\n range.collapse(true);\n range.moveEnd('character', selectionEnd);\n range.moveStart('character', selectionStart);\n range.select();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateMentionsQueries\", function (plainTextValue, caretPosition) {\n // Invalidate previous queries. Async results for previous queries will be neglected.\n _this._queryId++;\n _this.suggestions = {};\n\n _this.setState({\n suggestions: {}\n });\n\n var value = _this.props.value || '';\n var children = _this.props.children;\n var config = readConfigFromChildren(children);\n var positionInValue = mapPlainTextIndex(value, config, caretPosition, 'NULL'); // If caret is inside of mention, do not query\n\n if (positionInValue === null) {\n return;\n } // Extract substring in between the end of the previous mention and the caret\n\n\n var substringStartIndex = getEndOfLastMention(value.substring(0, positionInValue), config);\n var substring = plainTextValue.substring(substringStartIndex, caretPosition); // Check if suggestions have to be shown:\n // Match the trigger patterns of all Mention children on the extracted substring\n\n React.Children.forEach(children, function (child, childIndex) {\n if (!child) {\n return;\n }\n\n var regex = makeTriggerRegex(child.props.trigger, _this.props);\n var match = substring.match(regex);\n\n if (match) {\n var querySequenceStart = substringStartIndex + substring.indexOf(match[1], match.index);\n\n _this.queryData(match[2], childIndex, querySequenceStart, querySequenceStart + match[1].length, plainTextValue);\n }\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"clearSuggestions\", function () {\n // Invalidate previous queries. Async results for previous queries will be neglected.\n _this._queryId++;\n _this.suggestions = {};\n\n _this.setState({\n suggestions: {},\n focusIndex: 0\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"queryData\", function (query, childIndex, querySequenceStart, querySequenceEnd, plainTextValue) {\n var _this$props6 = _this.props,\n children = _this$props6.children,\n ignoreAccents = _this$props6.ignoreAccents;\n var mentionChild = Children.toArray(children)[childIndex];\n var provideData = getDataProvider(mentionChild.props.data, ignoreAccents);\n var syncResult = provideData(query, _this.updateSuggestions.bind(null, _this._queryId, childIndex, query, querySequenceStart, querySequenceEnd, plainTextValue));\n\n if (syncResult instanceof Array) {\n _this.updateSuggestions(_this._queryId, childIndex, query, querySequenceStart, querySequenceEnd, plainTextValue, syncResult);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateSuggestions\", function (queryId, childIndex, query, querySequenceStart, querySequenceEnd, plainTextValue, results) {\n // neglect async results from previous queries\n if (queryId !== _this._queryId) return; // save in property so that multiple sync state updates from different mentions sources\n // won't overwrite each other\n\n _this.suggestions = _objectSpread({}, _this.suggestions, _defineProperty({}, childIndex, {\n queryInfo: {\n childIndex: childIndex,\n query: query,\n querySequenceStart: querySequenceStart,\n querySequenceEnd: querySequenceEnd,\n plainTextValue: plainTextValue\n },\n results: results\n }));\n var focusIndex = _this.state.focusIndex;\n var suggestionsCount = countSuggestions(_this.suggestions);\n\n _this.setState({\n suggestions: _this.suggestions,\n focusIndex: focusIndex >= suggestionsCount ? Math.max(suggestionsCount - 1, 0) : focusIndex\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"addMention\", function (_ref2, _ref3) {\n var id = _ref2.id,\n display = _ref2.display;\n var childIndex = _ref3.childIndex,\n querySequenceStart = _ref3.querySequenceStart,\n querySequenceEnd = _ref3.querySequenceEnd,\n plainTextValue = _ref3.plainTextValue;\n // Insert mention in the marked up value at the correct position\n var value = _this.props.value || '';\n var config = readConfigFromChildren(_this.props.children);\n var mentionsChild = Children.toArray(_this.props.children)[childIndex];\n var _mentionsChild$props = mentionsChild.props,\n markup = _mentionsChild$props.markup,\n displayTransform = _mentionsChild$props.displayTransform,\n appendSpaceOnAdd = _mentionsChild$props.appendSpaceOnAdd,\n onAdd = _mentionsChild$props.onAdd;\n var start = mapPlainTextIndex(value, config, querySequenceStart, 'START');\n var end = start + querySequenceEnd - querySequenceStart;\n var insert = makeMentionsMarkup(markup, id, display);\n\n if (appendSpaceOnAdd) {\n insert += ' ';\n }\n\n var newValue = spliceString(value, start, end, insert); // Refocus input and set caret position to end of mention\n\n _this.inputElement.focus();\n\n var displayValue = displayTransform(id, display);\n\n if (appendSpaceOnAdd) {\n displayValue += ' ';\n }\n\n var newCaretPosition = querySequenceStart + displayValue.length;\n\n _this.setState({\n selectionStart: newCaretPosition,\n selectionEnd: newCaretPosition,\n setSelectionAfterMentionChange: true\n }); // Propagate change\n\n\n var eventMock = {\n target: {\n value: newValue\n }\n };\n var mentions = getMentions(newValue, config);\n var newPlainTextValue = spliceString(plainTextValue, querySequenceStart, querySequenceEnd, displayValue);\n\n _this.executeOnChange(eventMock, newValue, newPlainTextValue, mentions);\n\n if (onAdd) {\n onAdd(id, display, start, end);\n } // Make sure the suggestions overlay is closed\n\n\n _this.clearSuggestions();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"isLoading\", function () {\n var isLoading = false;\n React.Children.forEach(_this.props.children, function (child) {\n isLoading = isLoading || child && child.props.isLoading;\n });\n return isLoading;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"isOpened\", function () {\n return isNumber(_this.state.selectionStart) && (countSuggestions(_this.state.suggestions) !== 0 || _this.isLoading());\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_queryId\", 0);\n\n _this.suggestions = {};\n _this.uuidSuggestionsOverlay = Math.random().toString(16).substring(2);\n _this.handleCopy = _this.handleCopy.bind(_assertThisInitialized(_this));\n _this.handleCut = _this.handleCut.bind(_assertThisInitialized(_this));\n _this.handlePaste = _this.handlePaste.bind(_assertThisInitialized(_this));\n _this.state = {\n focusIndex: 0,\n selectionStart: null,\n selectionEnd: null,\n suggestions: {},\n caretPosition: null,\n suggestionsPosition: {}\n };\n return _this;\n }\n\n _createClass(MentionsInput, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n document.addEventListener('copy', this.handleCopy);\n document.addEventListener('cut', this.handleCut);\n document.addEventListener('paste', this.handlePaste);\n this.updateSuggestionsPosition();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n // Update position of suggestions unless this componentDidUpdate was\n // triggered by an update to suggestionsPosition.\n if (prevState.suggestionsPosition === this.state.suggestionsPosition) {\n this.updateSuggestionsPosition();\n } // maintain selection in case a mention is added/removed causing\n // the cursor to jump to the end\n\n\n if (this.state.setSelectionAfterMentionChange) {\n this.setState({\n setSelectionAfterMentionChange: false\n });\n this.setSelection(this.state.selectionStart, this.state.selectionEnd);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n document.removeEventListener('cut', this.handleCut);\n document.removeEventListener('paste', this.handlePaste);\n }\n }, {\n key: \"render\",\n value: function render() {\n return React.createElement(\"div\", _extends({\n ref: this.setContainerElement\n }, this.props.style), this.renderControl(), this.renderSuggestionsOverlay());\n }\n }, {\n key: \"handlePaste\",\n value: function handlePaste(event) {\n if (event.target !== this.inputElement) {\n return;\n }\n\n if (!this.supportsClipboardActions(event)) {\n return;\n }\n\n event.preventDefault();\n var _this$state3 = this.state,\n selectionStart = _this$state3.selectionStart,\n selectionEnd = _this$state3.selectionEnd;\n var _this$props7 = this.props,\n value = _this$props7.value,\n children = _this$props7.children;\n var config = readConfigFromChildren(children);\n var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');\n var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');\n var pastedMentions = event.clipboardData.getData('text/react-mentions');\n var pastedData = event.clipboardData.getData('text/plain');\n var newValue = spliceString(value, markupStartIndex, markupEndIndex, pastedMentions || pastedData).replace(/\\r/g, '');\n var newPlainTextValue = getPlainText(newValue, config);\n var eventMock = {\n target: _objectSpread({}, event.target, {\n value: newValue\n })\n };\n this.executeOnChange(eventMock, newValue, newPlainTextValue, getMentions(newValue, config));\n }\n }, {\n key: \"saveSelectionToClipboard\",\n value: function saveSelectionToClipboard(event) {\n var _this$state4 = this.state,\n selectionStart = _this$state4.selectionStart,\n selectionEnd = _this$state4.selectionEnd;\n var _this$props8 = this.props,\n children = _this$props8.children,\n value = _this$props8.value;\n var config = readConfigFromChildren(children);\n var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');\n var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');\n event.clipboardData.setData('text/plain', event.target.value.slice(selectionStart, selectionEnd));\n event.clipboardData.setData('text/react-mentions', value.slice(markupStartIndex, markupEndIndex));\n }\n }, {\n key: \"supportsClipboardActions\",\n value: function supportsClipboardActions(event) {\n return !!event.clipboardData;\n }\n }, {\n key: \"handleCopy\",\n value: function handleCopy(event) {\n if (event.target !== this.inputElement) {\n return;\n }\n\n if (!this.supportsClipboardActions(event)) {\n return;\n }\n\n event.preventDefault();\n this.saveSelectionToClipboard(event);\n }\n }, {\n key: \"handleCut\",\n value: function handleCut(event) {\n if (event.target !== this.inputElement) {\n return;\n }\n\n if (!this.supportsClipboardActions(event)) {\n return;\n }\n\n event.preventDefault();\n this.saveSelectionToClipboard(event);\n var _this$state5 = this.state,\n selectionStart = _this$state5.selectionStart,\n selectionEnd = _this$state5.selectionEnd;\n var _this$props9 = this.props,\n children = _this$props9.children,\n value = _this$props9.value;\n var config = readConfigFromChildren(children);\n var markupStartIndex = mapPlainTextIndex(value, config, selectionStart, 'START');\n var markupEndIndex = mapPlainTextIndex(value, config, selectionEnd, 'END');\n var newValue = [value.slice(0, markupStartIndex), value.slice(markupEndIndex)].join('');\n var newPlainTextValue = getPlainText(newValue, config);\n var eventMock = {\n target: _objectSpread({}, event.target, {\n value: newPlainTextValue\n })\n };\n this.executeOnChange(eventMock, newValue, newPlainTextValue, getMentions(value, config));\n } // Handle input element's change event\n\n }]);\n\n return MentionsInput;\n}(React.Component);\n/**\n * Returns the computed length property value for the provided element.\n * Note: According to spec and testing, can count on length values coming back in pixels. See https://developer.mozilla.org/en-US/docs/Web/CSS/used_value#Difference_from_computed_value\n */\n\n\n_defineProperty(MentionsInput, \"propTypes\", propTypes);\n\n_defineProperty(MentionsInput, \"defaultProps\", {\n ignoreAccents: false,\n singleLine: false,\n allowSuggestionsAboveCursor: false,\n onKeyDown: function onKeyDown() {\n return null;\n },\n onSelect: function onSelect() {\n return null;\n },\n onBlur: function onBlur() {\n return null;\n }\n});\n\nvar getComputedStyleLengthProp = function getComputedStyleLengthProp(forElement, propertyName) {\n var length = parseFloat(window.getComputedStyle(forElement, null).getPropertyValue(propertyName));\n return isFinite(length) ? length : 0;\n};\n\nvar isMobileSafari = typeof navigator !== 'undefined' && /iPhone|iPad|iPod/i.test(navigator.userAgent);\nvar styled$3 = createDefaultStyle({\n position: 'relative',\n overflowY: 'visible',\n input: {\n display: 'block',\n width: '100%',\n position: 'absolute',\n margin: 0,\n top: 0,\n left: 0,\n boxSizing: 'border-box',\n backgroundColor: 'transparent',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n letterSpacing: 'inherit'\n },\n '&multiLine': {\n input: _objectSpread({\n height: '100%',\n bottom: 0,\n overflow: 'hidden',\n resize: 'none'\n }, isMobileSafari ? {\n marginTop: 1,\n marginLeft: -3\n } : null)\n }\n}, function (_ref4) {\n var singleLine = _ref4.singleLine;\n return {\n '&singleLine': singleLine,\n '&multiLine': !singleLine\n };\n});\nvar MentionsInput$1 = styled$3(MentionsInput);\n\nvar defaultStyle = {\n fontWeight: 'inherit'\n};\n\nvar Mention = function Mention(_ref) {\n var display = _ref.display,\n style = _ref.style,\n className = _ref.className,\n classNames = _ref.classNames;\n var styles = useStyles(defaultStyle, {\n style: style,\n className: className,\n classNames: classNames\n });\n return React.createElement(\"strong\", styles, display);\n};\n\nMention.propTypes = {\n /**\n * Called when a new mention is added in the input\n *\n * Example:\n *\n * ```js\n * function(id, display) {\n * console.log(\"user \" + display + \" was mentioned!\");\n * }\n * ```\n */\n onAdd: PropTypes.func,\n onRemove: PropTypes.func,\n renderSuggestion: PropTypes.func,\n trigger: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(RegExp)]),\n markup: PropTypes.string,\n displayTransform: PropTypes.func,\n\n /**\n * If set to `true` spaces will not interrupt matching suggestions\n */\n allowSpaceInQuery: PropTypes.bool,\n isLoading: PropTypes.bool\n};\nMention.defaultProps = {\n trigger: '@',\n markup: '@[__display__](__id__)',\n displayTransform: function displayTransform(id, display) {\n return display || id;\n },\n onAdd: function onAdd() {\n return null;\n },\n onRemove: function onRemove() {\n return null;\n },\n renderSuggestion: null,\n isLoading: false,\n appendSpaceOnAdd: false\n};\n\nexport { Mention, MentionsInput$1 as MentionsInput };\n","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export var COMMON_MIME_TYPES = new Map([\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n ['aac', 'audio/aac'],\n ['abw', 'application/x-abiword'],\n ['arc', 'application/x-freearc'],\n ['avif', 'image/avif'],\n ['avi', 'video/x-msvideo'],\n ['azw', 'application/vnd.amazon.ebook'],\n ['bin', 'application/octet-stream'],\n ['bmp', 'image/bmp'],\n ['bz', 'application/x-bzip'],\n ['bz2', 'application/x-bzip2'],\n ['cda', 'application/x-cdf'],\n ['csh', 'application/x-csh'],\n ['css', 'text/css'],\n ['csv', 'text/csv'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n ['eot', 'application/vnd.ms-fontobject'],\n ['epub', 'application/epub+zip'],\n ['gz', 'application/gzip'],\n ['gif', 'image/gif'],\n ['htm', 'text/html'],\n ['html', 'text/html'],\n ['ico', 'image/vnd.microsoft.icon'],\n ['ics', 'text/calendar'],\n ['jar', 'application/java-archive'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['js', 'text/javascript'],\n ['json', 'application/json'],\n ['jsonld', 'application/ld+json'],\n ['mid', 'audio/midi'],\n ['midi', 'audio/midi'],\n ['mjs', 'text/javascript'],\n ['mp3', 'audio/mpeg'],\n ['mp4', 'video/mp4'],\n ['mpeg', 'video/mpeg'],\n ['mpkg', 'application/vnd.apple.installer+xml'],\n ['odp', 'application/vnd.oasis.opendocument.presentation'],\n ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],\n ['odt', 'application/vnd.oasis.opendocument.text'],\n ['oga', 'audio/ogg'],\n ['ogv', 'video/ogg'],\n ['ogx', 'application/ogg'],\n ['opus', 'audio/opus'],\n ['otf', 'font/otf'],\n ['png', 'image/png'],\n ['pdf', 'application/pdf'],\n ['php', 'application/x-httpd-php'],\n ['ppt', 'application/vnd.ms-powerpoint'],\n ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n ['rar', 'application/vnd.rar'],\n ['rtf', 'application/rtf'],\n ['sh', 'application/x-sh'],\n ['svg', 'image/svg+xml'],\n ['swf', 'application/x-shockwave-flash'],\n ['tar', 'application/x-tar'],\n ['tif', 'image/tiff'],\n ['tiff', 'image/tiff'],\n ['ts', 'video/mp2t'],\n ['ttf', 'font/ttf'],\n ['txt', 'text/plain'],\n ['vsd', 'application/vnd.visio'],\n ['wav', 'audio/wav'],\n ['weba', 'audio/webm'],\n ['webm', 'video/webm'],\n ['webp', 'image/webp'],\n ['woff', 'font/woff'],\n ['woff2', 'font/woff2'],\n ['xhtml', 'application/xhtml+xml'],\n ['xls', 'application/vnd.ms-excel'],\n ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n ['xml', 'application/xml'],\n ['xul', 'application/vnd.mozilla.xul+xml'],\n ['zip', 'application/zip'],\n ['7z', 'application/x-7z-compressed'],\n // Others\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['msg', 'application/vnd.ms-outlook']\n]);\nexport function toFileWithPath(file, path) {\n var f = withMimeType(file);\n if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n var webkitRelativePath = file.webkitRelativePath;\n Object.defineProperty(f, 'path', {\n value: typeof path === 'string'\n ? path\n // If <input webkitdirectory> is set,\n // the File will have a {webkitRelativePath} property\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n ? webkitRelativePath\n : file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return f;\n}\nfunction withMimeType(file) {\n var name = file.name;\n var hasExtension = name && name.lastIndexOf('.') !== -1;\n if (hasExtension && !file.type) {\n var ext = name.split('.')\n .pop().toLowerCase();\n var type = COMMON_MIME_TYPES.get(ext);\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n return file;\n}\n//# sourceMappingURL=file.js.map","import { __awaiter, __generator, __read, __spread } from \"tslib\";\nimport { toFileWithPath } from './file';\nvar FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store',\n 'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n *\n * EXPERIMENTAL: A list of https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle objects can also be passed as an arg\n * and a list of File objects will be returned.\n *\n * @param evt\n */\nexport function fromEvent(evt) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (isObject(evt) && isDataTransfer(evt)) {\n return [2 /*return*/, getDataTransferFiles(evt.dataTransfer, evt.type)];\n }\n else if (isChangeEvt(evt)) {\n return [2 /*return*/, getInputFiles(evt)];\n }\n else if (Array.isArray(evt) && evt.every(function (item) { return 'getFile' in item && typeof item.getFile === 'function'; })) {\n return [2 /*return*/, getFsHandleFiles(evt)];\n }\n return [2 /*return*/, []];\n });\n });\n}\nfunction isDataTransfer(value) {\n return isObject(value.dataTransfer);\n}\nfunction isChangeEvt(value) {\n return isObject(value) && isObject(value.target);\n}\nfunction isObject(v) {\n return typeof v === 'object' && v !== null;\n}\nfunction getInputFiles(evt) {\n return fromList(evt.target.files).map(function (file) { return toFileWithPath(file); });\n}\n// Ee expect each handle to be https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle\nfunction getFsHandleFiles(handles) {\n return __awaiter(this, void 0, void 0, function () {\n var files;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(handles.map(function (h) { return h.getFile(); }))];\n case 1:\n files = _a.sent();\n return [2 /*return*/, files.map(function (file) { return toFileWithPath(file); })];\n }\n });\n });\n}\nfunction getDataTransferFiles(dt, type) {\n return __awaiter(this, void 0, void 0, function () {\n var items, files;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (dt === null) {\n return [2 /*return*/, []];\n }\n if (!dt.items) return [3 /*break*/, 2];\n items = fromList(dt.items)\n .filter(function (item) { return item.kind === 'file'; });\n // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n // only 'dragstart' and 'drop' has access to the data (source node)\n if (type !== 'drop') {\n return [2 /*return*/, items];\n }\n return [4 /*yield*/, Promise.all(items.map(toFilePromises))];\n case 1:\n files = _a.sent();\n return [2 /*return*/, noIgnoredFiles(flatten(files))];\n case 2: return [2 /*return*/, noIgnoredFiles(fromList(dt.files)\n .map(function (file) { return toFileWithPath(file); }))];\n }\n });\n });\n}\nfunction noIgnoredFiles(files) {\n return files.filter(function (file) { return FILES_TO_IGNORE.indexOf(file.name) === -1; });\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n if (items === null) {\n return [];\n }\n var files = [];\n // tslint:disable: prefer-for-of\n for (var i = 0; i < items.length; i++) {\n var file = items[i];\n files.push(file);\n }\n return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n if (typeof item.webkitGetAsEntry !== 'function') {\n return fromDataTransferItem(item);\n }\n var entry = item.webkitGetAsEntry();\n // Safari supports dropping an image node from a different window and can be retrieved using\n // the DataTransferItem.getAsFile() API\n // NOTE: FileSystemEntry.file() throws if trying to get the file\n if (entry && entry.isDirectory) {\n return fromDirEntry(entry);\n }\n return fromDataTransferItem(item);\n}\nfunction flatten(items) {\n return items.reduce(function (acc, files) { return __spread(acc, (Array.isArray(files) ? flatten(files) : [files])); }, []);\n}\nfunction fromDataTransferItem(item) {\n var file = item.getAsFile();\n if (!file) {\n return Promise.reject(item + \" is not a File\");\n }\n var fwp = toFileWithPath(file);\n return Promise.resolve(fwp);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry)];\n });\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n var reader = entry.createReader();\n return new Promise(function (resolve, reject) {\n var entries = [];\n function readEntries() {\n var _this = this;\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n reader.readEntries(function (batch) { return __awaiter(_this, void 0, void 0, function () {\n var files, err_1, items;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!batch.length) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, Promise.all(entries)];\n case 2:\n files = _a.sent();\n resolve(files);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n reject(err_1);\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n items = Promise.all(batch.map(fromEntry));\n entries.push(items);\n // Continue reading\n readEntries();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n }); }, function (err) {\n reject(err);\n });\n }\n readEntries();\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n entry.file(function (file) {\n var fwp = toFileWithPath(file, entry.fullPath);\n resolve(fwp);\n }, function (err) {\n reject(err);\n });\n })];\n });\n });\n}\n//# sourceMappingURL=file-selector.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport accepts from \"attr-accept\"; // Error codes\n\nexport var FILE_INVALID_TYPE = \"file-invalid-type\";\nexport var FILE_TOO_LARGE = \"file-too-large\";\nexport var FILE_TOO_SMALL = \"file-too-small\";\nexport var TOO_MANY_FILES = \"too-many-files\";\nexport var ErrorCode = {\n FileInvalidType: FILE_INVALID_TYPE,\n FileTooLarge: FILE_TOO_LARGE,\n FileTooSmall: FILE_TOO_SMALL,\n TooManyFiles: TOO_MANY_FILES\n}; // File Errors\n\nexport var getInvalidTypeRejectionErr = function getInvalidTypeRejectionErr(accept) {\n accept = Array.isArray(accept) && accept.length === 1 ? accept[0] : accept;\n var messageSuffix = Array.isArray(accept) ? \"one of \".concat(accept.join(\", \")) : accept;\n return {\n code: FILE_INVALID_TYPE,\n message: \"File type must be \".concat(messageSuffix)\n };\n};\nexport var getTooLargeRejectionErr = function getTooLargeRejectionErr(maxSize) {\n return {\n code: FILE_TOO_LARGE,\n message: \"File is larger than \".concat(maxSize, \" \").concat(maxSize === 1 ? \"byte\" : \"bytes\")\n };\n};\nexport var getTooSmallRejectionErr = function getTooSmallRejectionErr(minSize) {\n return {\n code: FILE_TOO_SMALL,\n message: \"File is smaller than \".concat(minSize, \" \").concat(minSize === 1 ? \"byte\" : \"bytes\")\n };\n};\nexport var TOO_MANY_FILES_REJECTION = {\n code: TOO_MANY_FILES,\n message: \"Too many files\"\n}; // Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\n// that MIME type will always be accepted\n\nexport function fileAccepted(file, accept) {\n var isAcceptable = file.type === \"application/x-moz-file\" || accepts(file, accept);\n return [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)];\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n if (isDefined(file.size)) {\n if (isDefined(minSize) && isDefined(maxSize)) {\n if (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n if (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n } else if (isDefined(minSize) && file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];else if (isDefined(maxSize) && file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n }\n\n return [true, null];\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nexport function allFilesAccepted(_ref) {\n var files = _ref.files,\n accept = _ref.accept,\n minSize = _ref.minSize,\n maxSize = _ref.maxSize,\n multiple = _ref.multiple,\n maxFiles = _ref.maxFiles;\n\n if (!multiple && files.length > 1 || multiple && maxFiles >= 1 && files.length > maxFiles) {\n return false;\n }\n\n return files.every(function (file) {\n var _fileAccepted = fileAccepted(file, accept),\n _fileAccepted2 = _slicedToArray(_fileAccepted, 1),\n accepted = _fileAccepted2[0];\n\n var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n _fileMatchSize2 = _slicedToArray(_fileMatchSize, 1),\n sizeMatch = _fileMatchSize2[0];\n\n return accepted && sizeMatch;\n });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n if (typeof event.isPropagationStopped === \"function\") {\n return event.isPropagationStopped();\n } else if (typeof event.cancelBubble !== \"undefined\") {\n return event.cancelBubble;\n }\n\n return false;\n}\nexport function isEvtWithFiles(event) {\n if (!event.dataTransfer) {\n return !!event.target && !!event.target.files;\n } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n return type === \"Files\" || type === \"application/x-moz-file\";\n });\n}\nexport function isKindFile(item) {\n return _typeof(item) === \"object\" && item !== null && item.kind === \"file\";\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n return userAgent.indexOf(\"MSIE\") !== -1 || userAgent.indexOf(\"Trident/\") !== -1;\n}\n\nfunction isEdge(userAgent) {\n return userAgent.indexOf(\"Edge/\") !== -1;\n}\n\nexport function isIeOrEdge() {\n var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return fns.some(function (fn) {\n if (!isPropagationStopped(event) && fn) {\n fn.apply(void 0, [event].concat(args));\n }\n\n return isPropagationStopped(event);\n });\n };\n}\n/**\n * canUseFileSystemAccessAPI checks if the [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API)\n * is supported by the browser.\n * @returns {boolean}\n */\n\nexport function canUseFileSystemAccessAPI() {\n return \"showOpenFilePicker\" in window;\n}\n/**\n * filePickerOptionsTypes returns the {types} option for https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker\n * based on the accept attr (see https://github.com/react-dropzone/attr-accept)\n * E.g: converts ['image/*', 'text/*'] to {'image/*': [], 'text/*': []}\n * @param {string|string[]} accept\n */\n\nexport function filePickerOptionsTypes(accept) {\n accept = typeof accept === \"string\" ? accept.split(\",\") : accept;\n return [{\n description: \"everything\",\n // TODO: Need to handle filtering more elegantly than this!\n accept: Array.isArray(accept) ? // Accept just MIME types as per spec\n // NOTE: accept can be https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers\n accept.filter(function (item) {\n return item === \"audio/*\" || item === \"video/*\" || item === \"image/*\" || item === \"text/*\" || /\\w+\\/[-+.\\w]+/g.test(item);\n }).reduce(function (a, b) {\n return _objectSpread(_objectSpread({}, a), {}, _defineProperty({}, b, []));\n }, {}) : {}\n }];\n}\n/**\n * Check if v is an exception caused by aborting a request (e.g window.showOpenFilePicker()).\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/DOMException.\n * @param {any} v\n * @returns {boolean} True if v is an abort exception.\n */\n\nexport function isAbort(v) {\n return v instanceof DOMException && (v.name === \"AbortError\" || v.code === v.ABORT_ERR);\n}\n/**\n * Check if v is a security error.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/DOMException.\n * @param {any} v\n * @returns {boolean} True if v is a security error.\n */\n\nexport function isSecurityError(v) {\n return v instanceof DOMException && (v.name === \"SecurityError\" || v.code === v.SECURITY_ERR);\n}","var _excluded = [\"children\"],\n _excluded2 = [\"open\"],\n _excluded3 = [\"refKey\", \"role\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"],\n _excluded4 = [\"refKey\", \"onChange\", \"onClick\"];\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { fromEvent } from \"file-selector\";\nimport { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, filePickerOptionsTypes, canUseFileSystemAccessAPI, isAbort, isEvtWithFiles, isIeOrEdge, isPropagationStopped, isSecurityError, onDocumentDragOver, TOO_MANY_FILES_REJECTION } from \"./utils/index\";\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * <Dropzone>\n * {({getRootProps, getInputProps}) => (\n * <div {...getRootProps()}>\n * <input {...getInputProps()} />\n * <p>Drag 'n' drop some files here, or click to select files</p>\n * </div>\n * )}\n * </Dropzone>\n * ```\n */\n\nvar Dropzone = /*#__PURE__*/forwardRef(function (_ref, ref) {\n var children = _ref.children,\n params = _objectWithoutProperties(_ref, _excluded);\n\n var _useDropzone = useDropzone(params),\n open = _useDropzone.open,\n props = _objectWithoutProperties(_useDropzone, _excluded2);\n\n useImperativeHandle(ref, function () {\n return {\n open: open\n };\n }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n return /*#__PURE__*/React.createElement(Fragment, null, children(_objectSpread(_objectSpread({}, props), {}, {\n open: open\n })));\n});\nDropzone.displayName = \"Dropzone\"; // Add default props for react-docgen\n\nvar defaultProps = {\n disabled: false,\n getFilesFromEvent: fromEvent,\n maxSize: Infinity,\n minSize: 0,\n multiple: true,\n maxFiles: 0,\n preventDropOnDocument: true,\n noClick: false,\n noKeyboard: false,\n noDrag: false,\n noDragEventsBubbling: false,\n validator: null,\n useFsAccessApi: true\n};\nDropzone.defaultProps = defaultProps;\nDropzone.propTypes = {\n /**\n * Render function that exposes the dropzone state and prop getter fns\n *\n * @param {object} params\n * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n * @param {Function} params.open Open the native file selection dialog\n * @param {boolean} params.isFocused Dropzone area is in focus\n * @param {boolean} params.isFileDialogActive File dialog is opened\n * @param {boolean} params.isDragActive Active drag is in progress\n * @param {boolean} params.isDragAccept Dragged files are accepted\n * @param {boolean} params.isDragReject Some dragged files are rejected\n * @param {File[]} params.draggedFiles Files in active drag\n * @param {File[]} params.acceptedFiles Accepted files\n * @param {FileRejection[]} params.fileRejections Rejected files and why they were rejected\n */\n children: PropTypes.func,\n\n /**\n * Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n */\n multiple: PropTypes.bool,\n\n /**\n * If false, allow dropped items to take over the current browser window\n */\n preventDropOnDocument: PropTypes.bool,\n\n /**\n * If true, disables click to open the native file selection dialog\n */\n noClick: PropTypes.bool,\n\n /**\n * If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n */\n noKeyboard: PropTypes.bool,\n\n /**\n * If true, disables drag 'n' drop\n */\n noDrag: PropTypes.bool,\n\n /**\n * If true, stops drag event propagation to parents\n */\n noDragEventsBubbling: PropTypes.bool,\n\n /**\n * Minimum file size (in bytes)\n */\n minSize: PropTypes.number,\n\n /**\n * Maximum file size (in bytes)\n */\n maxSize: PropTypes.number,\n\n /**\n * Maximum accepted number of files\n * The default value is 0 which means there is no limitation to how many files are accepted.\n */\n maxFiles: PropTypes.number,\n\n /**\n * Enable/disable the dropzone\n */\n disabled: PropTypes.bool,\n\n /**\n * Use this to provide a custom file aggregator\n *\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n getFilesFromEvent: PropTypes.func,\n\n /**\n * Cb for when closing the file dialog with no selection\n */\n onFileDialogCancel: PropTypes.func,\n\n /**\n * Cb for when opening the file dialog\n */\n onFileDialogOpen: PropTypes.func,\n\n /**\n * Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API\n * to open the file picker instead of using an `<input type=\"file\">` click event.\n */\n useFsAccessApi: PropTypes.bool,\n\n /**\n * Cb for when the `dragenter` event occurs.\n *\n * @param {DragEvent} event\n */\n onDragEnter: PropTypes.func,\n\n /**\n * Cb for when the `dragleave` event occurs\n *\n * @param {DragEvent} event\n */\n onDragLeave: PropTypes.func,\n\n /**\n * Cb for when the `dragover` event occurs\n *\n * @param {DragEvent} event\n */\n onDragOver: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are dropped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n *\n * @param {File[]} acceptedFiles\n * @param {FileRejection[]} fileRejections\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n onDrop: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are accepted, this callback is not invoked.\n *\n * @param {File[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropAccepted: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are rejected, this callback is not invoked.\n *\n * @param {FileRejection[]} fileRejections\n * @param {(DragEvent|Event)} event\n */\n onDropRejected: PropTypes.func,\n\n /**\n * Custom validation function\n * @param {File} file\n * @returns {FileError|FileError[]}\n */\n validator: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {FileRejection[]} fileRejections List of rejected files and why they were rejected\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise<File[]>)}\n */\n\n/**\n * An object with the current dropzone state and some helper functions.\n *\n * @typedef {object} DropzoneState\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {File[]} draggedFiles Files in active drag\n * @property {File[]} acceptedFiles Accepted files\n * @property {FileRejection[]} fileRejections Rejected files and why they were rejected\n */\n\nvar initialState = {\n isFocused: false,\n isFileDialogActive: false,\n isDragActive: false,\n isDragAccept: false,\n isDragReject: false,\n draggedFiles: [],\n acceptedFiles: [],\n fileRejections: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n * const {getRootProps, getInputProps} = useDropzone({\n * onDrop: acceptedFiles => {\n * // do something with the File objects, e.g. upload to some server\n * }\n * });\n * return (\n * <div {...getRootProps()}>\n * <input {...getInputProps()} />\n * <p>Drag and drop some files here, or click to select files</p>\n * </div>\n * )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {string|string[]} [props.accept] Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {boolean} [props.useFsAccessApi] Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API\n * to open the file picker instead of using an `<input type=\"file\">` click event.\n * @param {Function} [props.onFileDialogOpen] Cb for when opening the file dialog\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are dropped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n *\n * @returns {DropzoneState}\n */\n\nexport function useDropzone() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _defaultProps$options = _objectSpread(_objectSpread({}, defaultProps), options),\n accept = _defaultProps$options.accept,\n disabled = _defaultProps$options.disabled,\n getFilesFromEvent = _defaultProps$options.getFilesFromEvent,\n maxSize = _defaultProps$options.maxSize,\n minSize = _defaultProps$options.minSize,\n multiple = _defaultProps$options.multiple,\n maxFiles = _defaultProps$options.maxFiles,\n onDragEnter = _defaultProps$options.onDragEnter,\n onDragLeave = _defaultProps$options.onDragLeave,\n onDragOver = _defaultProps$options.onDragOver,\n onDrop = _defaultProps$options.onDrop,\n onDropAccepted = _defaultProps$options.onDropAccepted,\n onDropRejected = _defaultProps$options.onDropRejected,\n onFileDialogCancel = _defaultProps$options.onFileDialogCancel,\n onFileDialogOpen = _defaultProps$options.onFileDialogOpen,\n useFsAccessApi = _defaultProps$options.useFsAccessApi,\n preventDropOnDocument = _defaultProps$options.preventDropOnDocument,\n noClick = _defaultProps$options.noClick,\n noKeyboard = _defaultProps$options.noKeyboard,\n noDrag = _defaultProps$options.noDrag,\n noDragEventsBubbling = _defaultProps$options.noDragEventsBubbling,\n validator = _defaultProps$options.validator;\n\n var onFileDialogOpenCb = useMemo(function () {\n return typeof onFileDialogOpen === \"function\" ? onFileDialogOpen : noop;\n }, [onFileDialogOpen]);\n var onFileDialogCancelCb = useMemo(function () {\n return typeof onFileDialogCancel === \"function\" ? onFileDialogCancel : noop;\n }, [onFileDialogCancel]);\n var rootRef = useRef(null);\n var inputRef = useRef(null);\n\n var _useReducer = useReducer(reducer, initialState),\n _useReducer2 = _slicedToArray(_useReducer, 2),\n state = _useReducer2[0],\n dispatch = _useReducer2[1];\n\n var isFocused = state.isFocused,\n isFileDialogActive = state.isFileDialogActive,\n draggedFiles = state.draggedFiles;\n var fsAccessApiWorksRef = useRef(typeof window !== \"undefined\" && window.isSecureContext && useFsAccessApi && canUseFileSystemAccessAPI()); // Update file dialog active state when the window is focused on\n\n var onWindowFocus = function onWindowFocus() {\n // Execute the timeout only if the file dialog is opened in the browser\n if (!fsAccessApiWorksRef.current && isFileDialogActive) {\n setTimeout(function () {\n if (inputRef.current) {\n var files = inputRef.current.files;\n\n if (!files.length) {\n dispatch({\n type: \"closeDialog\"\n });\n onFileDialogCancelCb();\n }\n }\n }, 300);\n }\n };\n\n useEffect(function () {\n window.addEventListener(\"focus\", onWindowFocus, false);\n return function () {\n window.removeEventListener(\"focus\", onWindowFocus, false);\n };\n }, [inputRef, isFileDialogActive, onFileDialogCancelCb, fsAccessApiWorksRef]);\n var dragTargetsRef = useRef([]);\n\n var onDocumentDrop = function onDocumentDrop(event) {\n if (rootRef.current && rootRef.current.contains(event.target)) {\n // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n return;\n }\n\n event.preventDefault();\n dragTargetsRef.current = [];\n };\n\n useEffect(function () {\n if (preventDropOnDocument) {\n document.addEventListener(\"dragover\", onDocumentDragOver, false);\n document.addEventListener(\"drop\", onDocumentDrop, false);\n }\n\n return function () {\n if (preventDropOnDocument) {\n document.removeEventListener(\"dragover\", onDocumentDragOver);\n document.removeEventListener(\"drop\", onDocumentDrop);\n }\n };\n }, [rootRef, preventDropOnDocument]);\n var onDragEnterCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (draggedFiles) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n dispatch({\n draggedFiles: draggedFiles,\n isDragActive: true,\n type: \"setDraggedFiles\"\n });\n\n if (onDragEnter) {\n onDragEnter(event);\n }\n });\n }\n }, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);\n var onDragOverCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event);\n var hasFiles = isEvtWithFiles(event);\n\n if (hasFiles && event.dataTransfer) {\n try {\n event.dataTransfer.dropEffect = \"copy\";\n } catch (_unused) {}\n /* eslint-disable-line no-empty */\n\n }\n\n if (hasFiles && onDragOver) {\n onDragOver(event);\n }\n\n return false;\n }, [onDragOver, noDragEventsBubbling]);\n var onDragLeaveCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n var targets = dragTargetsRef.current.filter(function (target) {\n return rootRef.current && rootRef.current.contains(target);\n }); // Make sure to remove a target present multiple times only once\n // (Firefox may fire dragenter/dragleave multiple times on the same element)\n\n var targetIdx = targets.indexOf(event.target);\n\n if (targetIdx !== -1) {\n targets.splice(targetIdx, 1);\n }\n\n dragTargetsRef.current = targets;\n\n if (targets.length > 0) {\n return;\n }\n\n dispatch({\n isDragActive: false,\n type: \"setDraggedFiles\",\n draggedFiles: []\n });\n\n if (isEvtWithFiles(event) && onDragLeave) {\n onDragLeave(event);\n }\n }, [rootRef, onDragLeave, noDragEventsBubbling]);\n var setFiles = useCallback(function (files, event) {\n var acceptedFiles = [];\n var fileRejections = [];\n files.forEach(function (file) {\n var _fileAccepted = fileAccepted(file, accept),\n _fileAccepted2 = _slicedToArray(_fileAccepted, 2),\n accepted = _fileAccepted2[0],\n acceptError = _fileAccepted2[1];\n\n var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),\n sizeMatch = _fileMatchSize2[0],\n sizeError = _fileMatchSize2[1];\n\n var customErrors = validator ? validator(file) : null;\n\n if (accepted && sizeMatch && !customErrors) {\n acceptedFiles.push(file);\n } else {\n var errors = [acceptError, sizeError];\n\n if (customErrors) {\n errors = errors.concat(customErrors);\n }\n\n fileRejections.push({\n file: file,\n errors: errors.filter(function (e) {\n return e;\n })\n });\n }\n });\n\n if (!multiple && acceptedFiles.length > 1 || multiple && maxFiles >= 1 && acceptedFiles.length > maxFiles) {\n // Reject everything and empty accepted files\n acceptedFiles.forEach(function (file) {\n fileRejections.push({\n file: file,\n errors: [TOO_MANY_FILES_REJECTION]\n });\n });\n acceptedFiles.splice(0);\n }\n\n dispatch({\n acceptedFiles: acceptedFiles,\n fileRejections: fileRejections,\n type: \"setFiles\"\n });\n\n if (onDrop) {\n onDrop(acceptedFiles, fileRejections, event);\n }\n\n if (fileRejections.length > 0 && onDropRejected) {\n onDropRejected(fileRejections, event);\n }\n\n if (acceptedFiles.length > 0 && onDropAccepted) {\n onDropAccepted(acceptedFiles, event);\n }\n }, [dispatch, multiple, accept, minSize, maxSize, maxFiles, onDrop, onDropAccepted, onDropRejected, validator]);\n var onDropCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [];\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n setFiles(files, event);\n });\n }\n\n dispatch({\n type: \"reset\"\n });\n }, [getFilesFromEvent, setFiles, noDragEventsBubbling]); // Fn for opening the file dialog programmatically\n\n var openFileDialog = useCallback(function () {\n // No point to use FS access APIs if context is not secure\n // https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#feature_detection\n if (fsAccessApiWorksRef.current) {\n dispatch({\n type: \"openDialog\"\n });\n onFileDialogOpenCb(); // https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker\n\n var opts = {\n multiple: multiple,\n types: filePickerOptionsTypes(accept)\n };\n window.showOpenFilePicker(opts).then(function (handles) {\n return getFilesFromEvent(handles);\n }).then(function (files) {\n setFiles(files, null);\n dispatch({\n type: \"closeDialog\"\n });\n }).catch(function (e) {\n // AbortError means the user canceled\n if (isAbort(e)) {\n onFileDialogCancelCb(e);\n dispatch({\n type: \"closeDialog\"\n });\n } else if (isSecurityError(e)) {\n fsAccessApiWorksRef.current = false; // CORS, so cannot use this API\n // Try using the input\n\n if (inputRef.current) {\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }\n });\n return;\n }\n\n if (inputRef.current) {\n dispatch({\n type: \"openDialog\"\n });\n onFileDialogOpenCb();\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }, [dispatch, onFileDialogOpenCb, onFileDialogCancelCb, useFsAccessApi, setFiles, accept, multiple]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n var onKeyDownCb = useCallback(function (event) {\n // Ignore keyboard events bubbling up the DOM tree\n if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n return;\n }\n\n if (event.keyCode === 32 || event.keyCode === 13) {\n event.preventDefault();\n openFileDialog();\n }\n }, [rootRef, openFileDialog]); // Update focus state for the dropzone\n\n var onFocusCb = useCallback(function () {\n dispatch({\n type: \"focus\"\n });\n }, []);\n var onBlurCb = useCallback(function () {\n dispatch({\n type: \"blur\"\n });\n }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n var onClickCb = useCallback(function () {\n if (noClick) {\n return;\n } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n // to ensure React can handle state changes\n // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n if (isIeOrEdge()) {\n setTimeout(openFileDialog, 0);\n } else {\n openFileDialog();\n }\n }, [noClick, openFileDialog]);\n\n var composeHandler = function composeHandler(fn) {\n return disabled ? null : fn;\n };\n\n var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n return noKeyboard ? null : composeHandler(fn);\n };\n\n var composeDragHandler = function composeDragHandler(fn) {\n return noDrag ? null : composeHandler(fn);\n };\n\n var stopPropagation = function stopPropagation(event) {\n if (noDragEventsBubbling) {\n event.stopPropagation();\n }\n };\n\n var getRootProps = useMemo(function () {\n return function () {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$refKey = _ref2.refKey,\n refKey = _ref2$refKey === void 0 ? \"ref\" : _ref2$refKey,\n role = _ref2.role,\n onKeyDown = _ref2.onKeyDown,\n onFocus = _ref2.onFocus,\n onBlur = _ref2.onBlur,\n onClick = _ref2.onClick,\n onDragEnter = _ref2.onDragEnter,\n onDragOver = _ref2.onDragOver,\n onDragLeave = _ref2.onDragLeave,\n onDrop = _ref2.onDrop,\n rest = _objectWithoutProperties(_ref2, _excluded3);\n\n return _objectSpread(_objectSpread(_defineProperty({\n onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb)),\n role: typeof role === \"string\" && role !== \"\" ? role : \"button\"\n }, refKey, rootRef), !disabled && !noKeyboard ? {\n tabIndex: 0\n } : {}), rest);\n };\n }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n var onInputElementClick = useCallback(function (event) {\n event.stopPropagation();\n }, []);\n var getInputProps = useMemo(function () {\n return function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$refKey = _ref3.refKey,\n refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey,\n onChange = _ref3.onChange,\n onClick = _ref3.onClick,\n rest = _objectWithoutProperties(_ref3, _excluded4);\n\n var inputProps = _defineProperty({\n accept: accept,\n multiple: multiple,\n type: \"file\",\n style: {\n display: \"none\"\n },\n onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n autoComplete: \"off\",\n tabIndex: -1\n }, refKey, inputRef);\n\n return _objectSpread(_objectSpread({}, inputProps), rest);\n };\n }, [inputRef, accept, multiple, onDropCb, disabled]);\n var fileCount = draggedFiles.length;\n var isDragAccept = fileCount > 0 && allFilesAccepted({\n files: draggedFiles,\n accept: accept,\n minSize: minSize,\n maxSize: maxSize,\n multiple: multiple,\n maxFiles: maxFiles\n });\n var isDragReject = fileCount > 0 && !isDragAccept;\n return _objectSpread(_objectSpread({}, state), {}, {\n isDragAccept: isDragAccept,\n isDragReject: isDragReject,\n isFocused: isFocused && !disabled,\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n rootRef: rootRef,\n inputRef: inputRef,\n open: composeHandler(openFileDialog)\n });\n}\n\nfunction reducer(state, action) {\n /* istanbul ignore next */\n switch (action.type) {\n case \"focus\":\n return _objectSpread(_objectSpread({}, state), {}, {\n isFocused: true\n });\n\n case \"blur\":\n return _objectSpread(_objectSpread({}, state), {}, {\n isFocused: false\n });\n\n case \"openDialog\":\n return _objectSpread(_objectSpread({}, initialState), {}, {\n isFileDialogActive: true\n });\n\n case \"closeDialog\":\n return _objectSpread(_objectSpread({}, state), {}, {\n isFileDialogActive: false\n });\n\n case \"setDraggedFiles\":\n /* eslint no-case-declarations: 0 */\n var isDragActive = action.isDragActive,\n draggedFiles = action.draggedFiles;\n return _objectSpread(_objectSpread({}, state), {}, {\n draggedFiles: draggedFiles,\n isDragActive: isDragActive\n });\n\n case \"setFiles\":\n return _objectSpread(_objectSpread({}, state), {}, {\n acceptedFiles: action.acceptedFiles,\n fileRejections: action.fileRejections\n });\n\n case \"reset\":\n return _objectSpread({}, initialState);\n\n default:\n return state;\n }\n}\n\nfunction noop() {}\n\nexport { ErrorCode } from \"./utils\";","import { actionAccess, runBackgroundSocketAction } from 'utils/ActionUtils';\r\nimport { MessageComposerProps } from './MessageComposer';\r\nimport { Location } from 'history';\r\n\r\n//import * as UI from 'types/ui';\r\nimport * as API from 'types/api';\r\n\r\n\r\ntype ParamsType = string | undefined;\r\ntype ChatCommandHandler = (params: ParamsType, props: MessageComposerProps, location: Location) => void;\r\n\r\n\r\ninterface ChatCommand {\r\n help: string;\r\n handler: ChatCommandHandler;\r\n access?: string;\r\n}\r\n\r\ntype ChatCommandList = { [key in string]: ChatCommand };\r\n\r\nconst handleMe: ChatCommandHandler = (params, { chatApi, session }) => {\r\n if (params) {\r\n chatApi.sendChatMessage(session, params, true);\r\n }\r\n};\r\n\r\nconst handleClear: ChatCommandHandler = (params, { chatActions, session, t }, location) => { \r\n runBackgroundSocketAction(\r\n () => chatActions.actions.clear.handler({\r\n data: session,\r\n location,\r\n t\r\n }) as Promise<any>,\r\n t\r\n );\r\n};\r\n\r\nconst getHelpString = (commands: ChatCommandList) => {\r\n const commandHelp = Object.keys(commands)\r\n .filter(command => actionAccess(commands[command]))\r\n .map(command => `\\t/${command} - ${commands[command].help}`)\r\n .join('\\n');\r\n\r\n return `\r\n\\tChat commands\r\n\r\n${commandHelp}\r\n`;\r\n};\r\n\r\nconst CommandHandler = (sessionProps: MessageComposerProps) => {\r\n const commands: ChatCommandList = {\r\n clear: {\r\n help: 'Clear message cache',\r\n handler: handleClear,\r\n access: sessionProps.chatActions.actions.clear.access,\r\n },\r\n me: {\r\n help: 'Send message in third person',\r\n handler: handleMe,\r\n },\r\n };\r\n\r\n return {\r\n handle: (command: string, params: ParamsType, location: Location) => {\r\n if (commands[command]) {\r\n commands[command].handler(params, sessionProps, location);\r\n } else if (command === 'help') {\r\n const { session, chatApi } = sessionProps;\r\n const text = getHelpString(commands);\r\n chatApi.sendStatusMessage(session, text, API.SeverityEnum.INFO);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default CommandHandler;","import { useEffect, useState } from 'react';\r\nimport * as React from 'react';\r\nimport Modal, { ModalProps } from 'components/semantic/Modal';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\nimport { formatSize } from 'utils/ValueFormat';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { translate } from 'utils/TranslationUtils';\r\n\r\nimport * as UI from 'types/ui';\r\n\r\nimport { AudioFile, ImageFile, TextFile, VideoFile } from 'components/file-preview';\r\n\r\nimport Message from 'components/semantic/Message';\r\nimport { TFunction } from 'i18next';\r\nimport LayoutHeader from 'components/semantic/LayoutHeader';\r\nimport { fileToText } from 'utils/FileUtils';\r\n\r\n\r\ninterface FilePreviewDialogProps extends ModalProps {\r\n files: File[];\r\n onConfirm: (files: File[]) => Promise<void>;\r\n\r\n}\r\n\r\nconst getViewerElement = (file: File, previewUrl: string, t: TFunction) => {\r\n if (file.type.indexOf('text') !== -1 && file.size <= 1 * 1024 * 1024) {\r\n return (\r\n <TextFile\r\n textGetter={ () => fileToText(file) }\r\n />\r\n );\r\n }\r\n\r\n if (file.type.indexOf('audio') !== -1) {\r\n return <AudioFile url={ previewUrl } autoPlay={ false }/>;\r\n }\r\n\r\n if (file.type.indexOf('image') !== -1) {\r\n return <ImageFile url={ previewUrl } alt={ file.name }/>;\r\n }\r\n\r\n if (file.type.indexOf('video') !== -1) {\r\n return <VideoFile url={ previewUrl } autoPlay={ false }/>;\r\n }\r\n\r\n return (\r\n <Message\r\n title={ translate('Preview is not available', t, UI.Modules.COMMON) }\r\n />\r\n );\r\n};\r\n\r\n\r\ninterface PreviewFile {\r\n file: File;\r\n url: string;\r\n}\r\n\r\nconst FilePreviewDialog: React.FC<FilePreviewDialogProps> = ({ files, onConfirm, ...other }) => {\r\n const [ previewFiles, setPreviewFiles ] = useState<PreviewFile[] | null>(null);\r\n const { t } = useTranslation();\r\n\r\n useEffect(\r\n () => {\r\n const previews = files.map(file => ({\r\n url: URL.createObjectURL(file),\r\n file\r\n }));\r\n\r\n setPreviewFiles(previews);\r\n return () => previews.forEach(p => URL.revokeObjectURL(p.url));\r\n },\r\n []\r\n );\r\n\r\n if (!previewFiles) {\r\n return null;\r\n }\r\n\r\n const handleConfirm = () => {\r\n return onConfirm(files);\r\n };\r\n\r\n return (\r\n <Modal\r\n { ...other }\r\n className=\"file-preview-dialog\"\r\n onApprove={ handleConfirm }\r\n closable={ true }\r\n fullHeight={ true }\r\n approveCaption={ translate('Upload', t, UI.Modules.COMMON) }\r\n icon={ IconConstants.UPLOAD }\r\n >\r\n { previewFiles.map(({ file, url }) => (\r\n <div \r\n key={ url } \r\n className=\"ui segment\" \r\n style={{ \r\n overflowX: 'auto'\r\n }}\r\n >\r\n <LayoutHeader\r\n title={ file.name }\r\n subHeader={ formatSize(file.size, t) }\r\n />\r\n { getViewerElement(file, url, t) }\r\n </div>\r\n )) }\r\n </Modal>\r\n );\r\n};\r\n\r\nexport default FilePreviewDialog;","//import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport cx from 'classnames';\r\n\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport SectionedDropdown from 'components/semantic/SectionedDropdown';\r\nimport MenuSection from 'components/semantic/MenuSection';\r\nimport MenuItemLink from 'components/semantic/MenuItemLink';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport DataProviderDecorator, { DataProviderDecoratorChildProps } from 'decorators/DataProviderDecorator';\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport NotificationActions from 'actions/NotificationActions';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport FileIcon from 'components/icon/FileIcon';\r\n\r\nimport { translate, toI18nKey } from 'utils/TranslationUtils';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\nexport interface TempShareDropdownProps {\r\n handleUpload: (evt: React.SyntheticEvent<any>) => void;\r\n style?: React.CSSProperties;\r\n className?: string;\r\n\r\n // Allows temporarily replacing the content without\r\n // the need to refetch all temp share data\r\n overrideContent?: React.ReactElement | null;\r\n}\r\n\r\ninterface DataProps {\r\n files: API.TempShareItem[];\r\n}\r\n\r\ntype Props = TempShareDropdownProps & DataProps &\r\n DataProviderDecoratorChildProps;\r\n\r\n\r\nconst getDropdownItem = (\r\n file: API.TempShareItem, \r\n onClick: (p: API.TempShareItem) => void\r\n) => {\r\n let title = file.name;\r\n if (file.user) {\r\n title += ` (${file.user.nicks})`;\r\n }\r\n\r\n return (\r\n <MenuItemLink \r\n key={ file.id }\r\n onClick={ () => onClick(file) }\r\n icon={ <FileIcon typeInfo={ file.type }/> }\r\n >\r\n { title }\r\n </MenuItemLink>\r\n );\r\n};\r\n\r\nconst TempShareDropdown = React.memo<Props>(({ files, handleUpload, style, className, overrideContent }) => {\r\n const { t } = useTranslation();\r\n\r\n if (!!overrideContent) {\r\n return overrideContent;\r\n }\r\n\r\n const onClickFile = (file: API.TempShareItem) => {\r\n SocketService.delete(`${ShareConstants.TEMP_SHARES_URL}/${file.id}`)\r\n .then(res => {\r\n NotificationActions.success({\r\n title: t(toI18nKey('fileNoLongerShared', UI.Modules.COMMON), {\r\n defaultValue: 'File {{file.name}} is no longer shared',\r\n replace: {\r\n file\r\n }\r\n })\r\n });\r\n })\r\n .catch(e => {\r\n NotificationActions.apiError('Failed to remove shared item', e);\r\n });\r\n };\r\n\r\n const classNames = cx(\r\n 'top left pointing actions',\r\n className\r\n );\r\n\r\n return (\r\n <SectionedDropdown \r\n className={ classNames }\r\n triggerIcon=\"plus\" \r\n button={ true }\r\n contextElement=\".message-view\"\r\n >\r\n <MenuItemLink \r\n onClick={ handleUpload }\r\n icon={ IconConstants.UPLOAD }\r\n >\r\n { translate('Send files', t, UI.Modules.COMMON) }\r\n </MenuItemLink>\r\n <MenuSection \r\n caption={ translate('Remove shared file', t, UI.Modules.COMMON) } \r\n icon={ IconConstants.FILE }\r\n >\r\n { files.map(p => getDropdownItem(p, onClickFile)) }\r\n </MenuSection>\r\n </SectionedDropdown>\r\n );\r\n});\r\n\r\nexport default DataProviderDecorator<TempShareDropdownProps, DataProps>(\r\n TempShareDropdown,\r\n {\r\n urls: {\r\n files: ShareConstants.TEMP_SHARES_URL,\r\n }, \r\n onSocketConnected: (addSocketListener, { refetchData }) => {\r\n addSocketListener(ShareConstants.MODULE_URL, ShareConstants.TEMP_ITEM_ADDED, () => refetchData());\r\n addSocketListener(ShareConstants.MODULE_URL, ShareConstants.TEMP_ITEM_REMOVED, () => refetchData());\r\n },\r\n loaderText: null,\r\n }\r\n);","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport { MentionsInput, Mention, OnChangeHandlerFunc, DataFunc } from 'react-mentions';\r\nimport Dropzone, { DropzoneRef } from 'react-dropzone';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\n\r\nimport { loadSessionProperty, saveSessionProperty, useMobileLayout } from 'utils/BrowserUtils';\r\nimport ChatCommandHandler from './ChatCommandHandler';\r\nimport NotificationActions from 'actions/NotificationActions';\r\n\r\nimport UserConstants from 'constants/UserConstants';\r\nimport SocketService from 'services/SocketService';\r\nimport { ChatLayoutProps } from 'routes/Sidebar/components/chat/ChatLayout';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { ErrorResponse } from 'airdcpp-apisocket';\r\nimport FilePreviewDialog from './FilePreviewDialog';\r\nimport TempShareDropdown from './TempShareDropdown';\r\nimport { TFunction } from 'i18next';\r\nimport { translate, toI18nKey } from 'utils/TranslationUtils';\r\nimport { formatSize } from 'utils/ValueFormat';\r\nimport LoginStore from 'stores/LoginStore';\r\nimport AccessConstants from 'constants/AccessConstants';\r\nimport Icon from 'components/semantic/Icon';\r\nimport Button from 'components/semantic/Button';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\n\r\nconst getMentionFieldStyle = (mobileLayout: boolean) => {\r\n return {\r\n suggestions: {\r\n list: {\r\n width: 200,\r\n overflow: 'auto',\r\n position: 'absolute',\r\n bottom: 3,\r\n left: 17,\r\n backgroundColor: 'white',\r\n border: '1px solid rgba(0,0,0,0.15)',\r\n fontSize: 10,\r\n },\r\n\r\n item: {\r\n padding: '5px 15px',\r\n borderBottom: '1px solid rgba(0,0,0,0.15)',\r\n\r\n '&focused': {\r\n background: 'rgba(0,0,0,.03)',\r\n color: 'rgba(0,0,0,.95)',\r\n },\r\n },\r\n },\r\n highlighter: {\r\n minHeight: !mobileLayout ? 63 : 42,\r\n maxHeight: 200,\r\n margin: 0,\r\n },\r\n input: {\r\n minHeight: !mobileLayout ? 63 : 42,\r\n maxHeight: 200,\r\n margin: 0,\r\n\r\n // Disable weird hack from react-mentions which breaks styling on iOS\r\n // tslint:disable-next-line:max-line-length\r\n // https://github.com/signavio/react-mentions/blob/e2b0273d4a629af8107ba1738f0a5846ada790f1/src/MentionsInput.js#L1033\r\n marginLeft: 0,\r\n marginTop: 0,\r\n },\r\n };\r\n};\r\n\r\nexport interface MessageComposerProps extends \r\n Pick<ChatLayoutProps, 'chatApi' | 'session' | 'chatActions' | 'handleFileUpload'> {\r\n\r\n t: TFunction;\r\n}\r\n\r\nconst getStorageKey = (props: RouteComponentProps) => {\r\n return `last_message_${props.location.pathname}`;\r\n};\r\n\r\nconst loadState = (props: RouteComponentProps) => {\r\n return {\r\n text: loadSessionProperty(getStorageKey(props), ''),\r\n };\r\n};\r\n\r\n\r\nconst saveState = (state: State, props: RouteComponentProps) => {\r\n saveSessionProperty(getStorageKey(props), state.text);\r\n};\r\n\r\nconst userToMention = (user: API.HubUser) => {\r\n return {\r\n id: user.cid,\r\n display: user.nick,\r\n };\r\n};\r\n\r\ninterface State {\r\n text: string;\r\n files: File[] | null;\r\n uploading: boolean;\r\n}\r\n\r\nclass MessageComposer extends React.Component<MessageComposerProps & RouteComponentProps> {\r\n /*static propTypes = {\r\n // Actions for this chat session type\r\n actions: PropTypes.object.isRequired,\r\n session: PropTypes.object.isRequired,\r\n };*/\r\n\r\n dropzoneRef = React.createRef<DropzoneRef>();\r\n\r\n handleCommand = (text: string) => {\r\n const { location } = this.props;\r\n\r\n let command, params;\r\n\r\n {\r\n // Parse the command\r\n const whitespace = text.indexOf(' ');\r\n if (whitespace === -1) {\r\n command = text.substr(1);\r\n } else {\r\n command = text.substr(1, whitespace - 1);\r\n params = text.substr(whitespace + 1);\r\n }\r\n }\r\n\r\n ChatCommandHandler(this.props).handle(command, params, location);\r\n }\r\n\r\n handleSend = (text: string) => {\r\n const { chatApi, session } = this.props;\r\n chatApi.sendChatMessage(session, text);\r\n }\r\n\r\n componentWillUnmount() {\r\n saveState(this.state, this.props);\r\n }\r\n\r\n componentDidUpdate(prevProps: RouteComponentProps, prevState: State) {\r\n if (prevProps.location.pathname !== this.props.location.pathname) {\r\n saveState(prevState, prevProps);\r\n this.setState(loadState(this.props));\r\n }\r\n }\r\n\r\n handleChange: OnChangeHandlerFunc = (event, markupValue, plainValue) => {\r\n this.setState({ \r\n text: plainValue \r\n });\r\n }\r\n\r\n onKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n event.preventDefault();\r\n this.sendText();\r\n }\r\n }\r\n\r\n sendText = () => {\r\n // Trim only from end to allow chat messages such as \" +help\" to be\r\n // sent to other users\r\n // This will also prevent sending empty messages\r\n const text = this.state.text.replace(/\\s+$/, '');\r\n\r\n if (text) {\r\n if (text[0] === '/') {\r\n this.handleCommand(text);\r\n }\r\n\r\n this.handleSend(text);\r\n }\r\n\r\n this.setState({ text: '' });\r\n }\r\n\r\n findUsers: DataFunc = (value, callback) => {\r\n const { session } = this.props;\r\n SocketService.post(UserConstants.SEARCH_NICKS_URL, { \r\n pattern: value, \r\n max_results: 5,\r\n hub_urls: session.hub_url ? [ session.hub_url ] : undefined,\r\n })\r\n .then((users: API.HubUser[]) => callback(users.map(userToMention)))\r\n .catch((error: ErrorResponse) => \r\n console.log(`Failed to fetch suggestions: ${error}`)\r\n );\r\n }\r\n \r\n appendText = (text: string) => {\r\n let newText = this.state.text;\r\n if (newText) {\r\n newText += ' ';\r\n }\r\n newText += text;\r\n\r\n this.setState({\r\n text: newText\r\n });\r\n }\r\n\r\n onDropFile = (acceptedFiles: File[]) => {\r\n const { t } = this.props;\r\n const maxSize = 100 * 1024 * 1024;\r\n\r\n const files = acceptedFiles\r\n .filter(file => {\r\n if (file.size > maxSize) {\r\n NotificationActions.error({\r\n title: file.name,\r\n message: t(toI18nKey('fileTooLarge', UI.Modules.COMMON), {\r\n defaultValue: 'File is too large (maximum size is {{maxSize}})',\r\n replace: {\r\n maxSize: formatSize(maxSize, t)\r\n }\r\n })\r\n });\r\n \r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n if (!files.length) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n files\r\n });\r\n }\r\n\r\n onUploadFiles = async (files: File[]) => {\r\n this.resetFiles();\r\n this.setState({\r\n uploading: true\r\n });\r\n\r\n const { handleFileUpload } = this.props;\r\n for (let file of files) {\r\n try {\r\n const res = await handleFileUpload(file);\r\n this.appendText(res.magnet);\r\n } catch (e) {\r\n NotificationActions.apiError('Failed to upload the file', e);\r\n }\r\n }\r\n\r\n this.setState({\r\n uploading: false\r\n });\r\n }\r\n\r\n onPaste = (evt: React.ClipboardEvent<HTMLTextAreaElement>) => {\r\n if (evt.clipboardData && evt.clipboardData.files && (evt.clipboardData as any).files.length) {\r\n let files: File[] = [];\r\n\r\n {\r\n // DataTransferItemList isn't a normal array, convert it first\r\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\r\n const dataTransferItemList = (evt.clipboardData as any).files as any[];\r\n for (let i = 0; i < dataTransferItemList.length; i++) {\r\n files.push(dataTransferItemList[i]);\r\n }\r\n }\r\n\r\n evt.preventDefault();\r\n this.onDropFile(files);\r\n }\r\n }\r\n\r\n resetFiles = () => {\r\n this.setState({\r\n files: null,\r\n });\r\n }\r\n\r\n state: State = {\r\n ...loadState(this.props),\r\n files: null,\r\n uploading: false,\r\n };\r\n\r\n render() {\r\n const mobile = useMobileLayout();\r\n const className = classNames(\r\n 'ui form composer',\r\n { small: mobile },\r\n { large: !mobile },\r\n );\r\n\r\n const hasFileUploadAccess = LoginStore.hasAccess(AccessConstants.FILESYSTEM_EDIT) && \r\n LoginStore.hasAccess(AccessConstants.SETTINGS_EDIT);\r\n\r\n const { files, text, uploading } = this.state;\r\n const { t } = this.props;\r\n\r\n const sendButton = (\r\n <Button \r\n className=\"blue large icon send\" \r\n onClick={ this.sendText }\r\n caption={ <Icon icon={ IconConstants.SEND }/> }\r\n loading={ uploading }\r\n />\r\n );\r\n\r\n return (\r\n <>\r\n { !!files && (\r\n <FilePreviewDialog\r\n files={ files }\r\n onConfirm={ this.onUploadFiles }\r\n onReject={ this.resetFiles }\r\n title={ translate('Send files', t, UI.Modules.COMMON) }\r\n />\r\n ) }\r\n <Dropzone\r\n onDrop={ this.onDropFile }\r\n ref={ this.dropzoneRef }\r\n disabled={ !hasFileUploadAccess }\r\n multiple={ true }\r\n minSize={ 1 }\r\n noClick={ true }\r\n // Handle max size check elsewhere (report errors)\r\n >\r\n {({ getRootProps, getInputProps, open }) => (\r\n <div \r\n className={ className }\r\n { ...getRootProps() }\r\n >\r\n <input \r\n { ...getInputProps() }\r\n />\r\n <MentionsInput \r\n className=\"input\"\r\n value={ text } \r\n onChange={ this.handleChange }\r\n onKeyDown={ this.onKeyDown }\r\n style={ getMentionFieldStyle(mobile) }\r\n autoFocus={ !mobile }\r\n onPaste={ this.onPaste }\r\n >\r\n <Mention \r\n trigger=\"@\"\r\n data={ this.findUsers }\r\n appendSpaceOnAdd={ false }\r\n />\r\n </MentionsInput>\r\n { !hasFileUploadAccess || uploading ? sendButton : (\r\n <TempShareDropdown\r\n className=\"blue large\" \r\n handleUpload={ open }\r\n overrideContent={ !text ? null : sendButton }\r\n />\r\n ) }\r\n </div>\r\n ) }\r\n </Dropzone>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst Decorated = withRouter(MessageComposer);\r\n\r\nexport default Decorated;","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./chat.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./chat.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { useEffect, useState } from 'react';\r\nimport * as React from 'react';\r\n\r\nimport Message from 'components/semantic/Message';\r\nimport MessageComposer from './MessageComposer';\r\nimport MessageView from 'components/messages/MessageView';\r\n\r\nimport LoginStore from 'stores/LoginStore';\r\n\r\nimport './chat.css';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport ActiveSessionDecorator from 'decorators/ActiveSessionDecorator';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { AddTempShareResponse } from 'services/api/ShareApi';\r\nimport { toI18nKey } from 'utils/TranslationUtils';\r\n\r\n\r\nexport interface ChatSession extends UI.SessionItemBase {\r\n hub_url?: string;\r\n}\r\n\r\nexport interface ChatAPI extends UI.RefluxActionListType<UI.SessionItemBase> {\r\n sendChatMessage: UI.RefluxActionType<UI.SessionItemBase>;\r\n sendStatusMessage: UI.RefluxActionType<UI.SessionItemBase>;\r\n fetchMessages: UI.RefluxActionType<UI.SessionItemBase>;\r\n}\r\n\r\nexport interface ChatActionList extends UI.ActionListType<UI.SessionItemBase> {\r\n clear: UI.ActionType<UI.SessionItemBase>;\r\n}\r\n\r\nexport type ChatActions = UI.ModuleActions<UI.SessionItemBase, ChatActionList>;\r\n\r\nexport interface ChatLayoutProps {\r\n chatApi: ChatAPI;\r\n chatActions: ChatActions;\r\n handleFileUpload: (file: File) => Promise<AddTempShareResponse>;\r\n session: ChatSession;\r\n chatAccess: string;\r\n messageStore: any;\r\n highlightRemoteMenuId: string;\r\n}\r\n\r\n\r\nconst useChatMessagesEffect = (session: ChatSession, messageStore: any, chatAPI: ChatAPI) => {\r\n const [ messages, setMessages ] = useState<UI.MessageListItem[] | null>([]);\r\n\r\n useEffect(\r\n () => {\r\n // Session changed, update the messages\r\n if (!messageStore.isSessionInitialized(session.id)) {\r\n setMessages(null);\r\n chatAPI.fetchMessages(session);\r\n } else {\r\n setMessages(messageStore.getSessionMessages(session.id));\r\n }\r\n },\r\n [ session.id ]\r\n );\r\n\r\n\r\n useEffect(\r\n () => {\r\n // Subscribe for new messages\r\n const unsubscribe = messageStore.listen((newMessages: UI.MessageListItem[], id: API.IdType) => {\r\n if (id !== session.id) {\r\n return;\r\n }\r\n \r\n setMessages(newMessages);\r\n });\r\n\r\n return unsubscribe;\r\n },\r\n [ session.id ]\r\n );\r\n\r\n return messages;\r\n};\r\n\r\n\r\nconst ChatLayout: React.FC<ChatLayoutProps> = (\r\n { session, chatAccess, chatApi, chatActions, messageStore, handleFileUpload, highlightRemoteMenuId }\r\n) => {\r\n const { t } = useTranslation();\r\n const messages = useChatMessagesEffect(session, messageStore, chatApi);\r\n const hasChatAccess = LoginStore.hasAccess(chatAccess);\r\n return (\r\n <div className=\"message-view\">\r\n { !hasChatAccess && (\r\n <Message \r\n description={ t<string>(\r\n toI18nKey('noChatAccess', UI.Modules.COMMON), \r\n `You aren't allowed to send new messages`\r\n ) }\r\n />\r\n ) }\r\n <MessageView \r\n className=\"chat\"\r\n messages={ messages }\r\n session={ session }\r\n scrollPositionHandler={ messageStore.scroll }\r\n t={ t }\r\n highlightRemoteMenuId={ highlightRemoteMenuId }\r\n />\r\n { hasChatAccess && (\r\n <MessageComposer \r\n session={ session }\r\n chatApi={ chatApi }\r\n chatActions={ chatActions }\r\n t={ t }\r\n handleFileUpload={ handleFileUpload }\r\n />\r\n ) }\r\n </div>\r\n );\r\n};\r\n\r\nexport default ActiveSessionDecorator(ChatLayout, true);\r\n","import LoginStore from 'stores/LoginStore';\r\nimport { fetchData } from 'utils/HttpUtils';\r\n\r\n\r\nexport const uploadTempFile = async (file: File): Promise<string> => {\r\n try {\r\n const res = await fetchData(`${getBasePath()}temp`, {\r\n method: 'POST',\r\n headers: {\r\n // https://github.com/airdcpp-web/airdcpp-webclient/issues/330\r\n 'X-Authorization': LoginStore.authToken,\r\n \r\n 'Authorization': LoginStore.authToken,\r\n },\r\n body: file\r\n });\r\n\r\n return res.headers.get('Location')!;\r\n } catch (e) {\r\n throw e;\r\n }\r\n};\r\n\r\nconst toCorsSafeUrl = (url: string) => {\r\n const proxyUrl = `${window.location.origin}${getBasePath()}proxy?url=${encodeURIComponent(url)}`;\r\n return proxyUrl;\r\n};\r\n\r\nexport const fetchCorsSafeData = async (url: string, isJSON: boolean, options?: RequestInit) => {\r\n try {\r\n //console.log(`CORS HTTP request started (${url})`);\r\n\r\n const res = await fetchData(\r\n toCorsSafeUrl(url), \r\n {\r\n headers: {\r\n // https://github.com/airdcpp-web/airdcpp-webclient/issues/330\r\n 'X-Authorization': LoginStore.authToken,\r\n\r\n // Temp workaround for people upgrading from versions < 2.7.0\r\n // If the new UI was loaded before restarting the app, a cache expiration time of \r\n // one year would have been set for \"Not found\" errors...\r\n 'Cache-Control': 'no-store, must-revalidate, max-age=0'\r\n },\r\n ...options,\r\n }\r\n );\r\n\r\n const data = await isJSON ? res.json() : res.text();\r\n return data;\r\n } catch (e) {\r\n console.error(`CORS HTTP request failed (${url})`, e);\r\n throw e;\r\n }\r\n};\r\n","\r\nimport ShareConstants from 'constants/ShareConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport { uploadTempFile } from '../HttpService';\r\n\r\nimport * as API from 'types/api';\r\n\r\n\r\nexport interface AddTempShareResponse { \r\n magnet: string; \r\n}\r\n\r\nexport const shareTempFile = async (\r\n file: File, hubUrl: string, cid: string | undefined\r\n): Promise<AddTempShareResponse> => {\r\n try {\r\n const fileId = await uploadTempFile(file);\r\n const res = await SocketService.post<AddTempShareResponse>(ShareConstants.TEMP_SHARES_URL, {\r\n name: file.name,\r\n file_id: fileId,\r\n hub_url: hubUrl,\r\n cid,\r\n });\r\n\r\n return res;\r\n } catch (e) {\r\n throw e;\r\n }\r\n};\r\n\r\n\r\nexport const refresh = (incoming: boolean) => {\r\n return SocketService.post(ShareConstants.REFRESH_URL, {\r\n incoming,\r\n priority: API.RefreshPriorityTypeEnum.MANUAL,\r\n });\r\n};\r\n\r\nexport const refreshPaths = (paths: string[]) => {\r\n return SocketService.post(ShareConstants.REFRESH_PATHS_URL, { \r\n paths,\r\n priority: API.RefreshPriorityTypeEnum.MANUAL,\r\n });\r\n};\r\n\r\nexport const refreshVirtual = (path: string) => {\r\n return SocketService.post(ShareConstants.REFRESH_VIRTUAL_URL, { \r\n path,\r\n });\r\n};\r\n\r\nexport const abortRefreshTask = (id: number) => {\r\n return SocketService.delete(`${ShareConstants.REFRESH_TASKS_URL}/${id}`);\r\n};\r\n","import { checkSplice, mergeCacheMessages, pushMessage } from 'utils/MessageUtils';\r\nimport SocketSubscriptionDecorator from '../decorators/SocketSubscriptionDecorator';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\n\r\ntype ChatSession = UI.SessionItemBase;\r\n\r\ntype MessageCache = UI.MessageListItem[];\r\n\r\nconst MessageStoreDecorator = function (store: any, actions: UI.RefluxActionListType<ChatSession>, access: string) {\r\n // Message arrays mapped by session IDs \r\n let messages = new Map();\r\n\r\n // Keep track of session IDs for which message fetching has been initialized\r\n let initializedSession = new Set<API.IdType>();\r\n\r\n\r\n const onFetchMessagesCompleted = (session: UI.SessionItemBase, cacheMessages: MessageCache) => {\r\n messages.set(session.id, mergeCacheMessages(cacheMessages, messages.get(session.id)));\r\n store.trigger(messages.get(session.id), session.id);\r\n };\r\n\r\n const onFetchMessages = (session: UI.SessionItemBase) => {\r\n initializedSession.add(session.id);\r\n };\r\n\r\n const onMessageReceived = (sessionId: API.IdType, message: API.Message, type: UI.MessageType) => {\r\n messages.set(\r\n sessionId, \r\n pushMessage(\r\n { \r\n [type]: message\r\n } as UI.MessageListItem, \r\n messages.get(sessionId)\r\n )\r\n );\r\n store.trigger(messages.get(sessionId), sessionId);\r\n };\r\n\r\n const Decorator = {\r\n _onChatMessage: (data: API.Message, sessionId: API.IdType) => {\r\n onMessageReceived(sessionId, data, 'chat_message');\r\n },\r\n\r\n _onStatusMessage: (data: API.Message, sessionId: API.IdType) => {\r\n onMessageReceived(sessionId, data, 'log_message');\r\n },\r\n\r\n _onSessionUpdated: (session: Partial<UI.MessageCounts>, sessionId: API.IdType) => {\r\n if (!session.message_counts || !messages.get(sessionId)) {\r\n return;\r\n }\r\n\r\n // Message limit exceed or messages were cleared?\r\n const splicedMessages = checkSplice(messages.get(sessionId), session.message_counts.total);\r\n\r\n // Don't update the messages if nothing has changed\r\n // Session is updated when it's marked as read, which may happen simultaneously with the initial fetch. \r\n // Triggering an update would cause an incomplete message log being flashed to the user\r\n if (splicedMessages !== messages.get(sessionId)) {\r\n messages.set(sessionId, splicedMessages);\r\n store.trigger(splicedMessages, sessionId);\r\n }\r\n },\r\n\r\n _onSessionRemoved: (session: ChatSession) => {\r\n if (store.scroll) {\r\n store.scroll._onSessionRemoved(session);\r\n }\r\n\r\n messages.delete(session.id);\r\n initializedSession.delete(session.id);\r\n },\r\n\r\n onSocketDisconnected: () => {\r\n if (store.scroll) {\r\n store.scroll.onSocketDisconnected();\r\n }\r\n \r\n messages.clear();\r\n initializedSession.clear();\r\n },\r\n\r\n hasMessages: () => messages.size > 0,\r\n hasInitializedSessions: () => initializedSession.size > 0,\r\n \r\n getSessionMessages: (sessionId: API.IdType) => messages.get(sessionId),\r\n isSessionInitialized: (sessionId: API.IdType) => initializedSession.has(sessionId),\r\n };\r\n\r\n store.listenTo(actions.fetchMessages, onFetchMessages);\r\n store.listenTo((actions.fetchMessages as UI.AsyncActionType<ChatSession>).completed, onFetchMessagesCompleted);\r\n\r\n return SocketSubscriptionDecorator(Object.assign(store, Decorator), access);\r\n};\r\n\r\nexport default MessageStoreDecorator;\r\n"],"names":["exports","file","acceptedFiles","acceptedFilesArray","Array","isArray","split","fileName","name","mimeType","type","toLowerCase","baseMimeType","replace","some","validType","trim","charAt","endsWith","___CSS_LOADER_EXPORT___","push","module","id","actions","sessionUrl","editAccess","ChatActions","clear","displayName","access","icon","handler","data","session","Object","assign","encryptionToInfo","encryption","tlsVersion","str","match","length","parseFloat","iconColor","messageColor","message","cornerIcon","translationKey","trusted","InfoMessage","info","style","color","i18nKey","EncryptionState","getChildren","this","props","render","alwaysVisible","boundary","triggerClassName","className","trigger","settings","propTypes","formatMediaError","event","error","target","code","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","Component","MediaFileDecorator","state","onMediaError","setState","setMediaRef","c","media","componentDidUpdate","prevProps","url","load","autoPlay","mediaProps","onError","controls","src","mediaRef","AudioFileDecorated","ref","maxWidth","maxHeight","ImageFile","TextFile","textGetter","text","setText","useState","setError","t","useTranslation","useEffect","then","catch","Message","title","description","Loader","VideoFileDecorated","entries","entryTitleRenderer","hasSession","entryIcon","size","map","entry","index","header","last_opened","defaultValue","timeAgo","urls","entryType","socket","get","_toConsumableArray","arr","i","arr2","iter","Symbol","iterator","prototype","toString","call","from","TypeError","_extends","arguments","source","key","hasOwnProperty","apply","_classCallCheck","instance","Constructor","_defineProperties","descriptor","enumerable","configurable","writable","defineProperty","_createClass","protoProps","staticProps","_typeof2","obj","constructor","_typeof","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_inherits","subClass","superClass","create","value","_defineProperty","keys","values","mergeDeep","output","isPlainObject","forEach","merge","_len","sources","_key","reduce","s","omit","other","Date","compact","filter","Boolean","isModifier","isElement","camelize","m","toUpperCase","pickDirectStyles","objectPropertiesWhitelist","undefined","styleKeys","result","l","isDirect","indexOf","pickNestedStyles","keysToPick","camelizedKeysToPick","hoistModifierStylesRecursive","modifierKeysToPick","concat","modifierKeys","subresult","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","defaultObjectPropsWhitelist","_ref","PropsDecoratorContext","createContext","select","objSelect","acc","EMPTY","substyle","defaultStyle","mapEntry","cacheKey","memoize","WeakMap","has","set","selectHash","join","guessBaseClassName","classNames","firstKey","deriveClassNames","elementKeys","firstClassName","derivedClassNames","substring","createSubstyle","propsDecorator","baseClassName","selectedKeys","collectElementStyles","fromStyle","collectSelectedStyles","styleProps","classNameSplit","Set","mappedClassNames","singleClassName","propsForSpread","modifiers","useContext","useMemo","escapeRegex","PLACEHOLDERS","findPositionOfCapturingGroup","markup","parameterName","indexDisplay","indexId","combineRegExps","regExps","serializedRegexParser","RegExp","regex","_serializedRegexParse2","exec","_arr","_n","_d","_e","_s","_i","next","done","err","regexString","regexFlags","countPlaceholders","count","emptyFn","iterateMentionsMarkup","config","markupIteratee","textIteratee","accOffset","captureGroupOffsets","start","currentPlainTextIndex","offset","find","mentionChildIndex","_config$mentionChildI","displayTransform","idPos","displayPos","display","substr","lastIndex","getPlainText","plainTextIndex","plainText","mapPlainTextIndex","indexInPlainText","inMarkupCorrection","substrPlainTextIndex","mentionPlainTextIndex","childIndex","lastMentionEndIndex","spliceString","end","insert","getMentions","mentions","getSuggestionHtmlId","prefix","countSuggestions","suggestions","results","markupToRegex","escapedMarkup","charAfterDisplay","charAfterId","readConfigFromChildren","children","Children","_ref$props","coerceCapturingGroups","numberOfGroups","numberOfPlaceholders","lettersDiacritics","base","letters","normalizeString","formattedStr","letterDiacritics","removeAccents","getSubstringIndex","ignoreAccents","isNumber","val","rest","k","includes","createDefaultStyle","getModifiers","ComponentToWrap","DefaultStyleEnhancer","excluded","sourceKeys","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","styles","Highlighter","_Component","_this","el","caretElement","left","top","notifyCaretPosition","_this$caretElement","offsetLeft","offsetTop","newPosition","onCaretPositionChange","caretPositionInMarkup","_this2","_this$props","selectionStart","selectionEnd","containerRef","resultComponents","componentKeys","components","substringComponentKey","usedKeys","_generateComponentKey","getMentionComponentForMatch","splitIndex","renderSubstring","renderHighlighterCaret","string","child","setCaretElement","current","Element","isRequired","Highlighter$1","position","boxSizing","width","overflow","whiteSpace","wordWrap","border","textAlign","visibility","singleLine","styled","Suggestion","role","focused","renderContent","query","renderSuggestion","suggestion","getDisplay","highlightedDisplay","renderHighlightedDisplay","_this$props2","Suggestion$1","cursor","styled$1","LoadingIndicator","spinnerStyles","SuggestionsOverlay","_getPrototypeOf2","args","ev","onMouseEnter","queryInfo","onSelect","ulElement","offsetHeight","scrollHeight","scrollFocusedIntoView","scrollTop","_this$ulElement$child","focusIndex","getBoundingClientRect","bottom","topContainer","a11ySuggestionsListLabel","isOpened","onMouseDown","arg","setUlElement","renderSuggestions","renderLoadingIndicator","accResults","_this3","isFocused","getID","onClick","handleMouseEnter","isLoading","SuggestionsOverlay$1","zIndex","backgroundColor","marginTop","minWidth","list","margin","padding","listStyleType","styled$2","KEY","TAB","RETURN","ESC","UP","DOWN","isComposing","allowSpaceInQuery","allowSuggestionsAboveCursor","forceSuggestionsAboveCursor","onKeyDown","onBlur","onChange","suggestionsPortalHost","PropTypes","inputRef","MentionsInput","_React$Component","_props","containerElement","readOnly","disabled","handleChange","handleSelect","handleKeyDown","handleBlur","onCompositionStart","handleCompositionStart","onCompositionEnd","handleCompositionEnd","onScroll","updateHighlighterScroll","uuidSuggestionsOverlay","inputProps","getInputProps","renderHighlighter","renderInput","renderTextarea","setInputRef","inputElement","suggestionsElement","_this$state$suggestio","suggestionsPosition","suggestionsNode","setSuggestionsElement","addMention","handleSuggestionsMouseDown","handleSuggestionsMouseEnter","_this$state","_this$props3","setHighlighterElement","handleCaretPositionChange","highlighterElement","caretPosition","_this$props4","_this$props$valueLink","valueLink","requestChange","document","documentMode","activeElement","contentDocument","newPlainTextValue","newValue","plainTextValue","selectionStartBefore","selectionEndBefore","selectionEndAfter","oldPlainTextValue","lengthDelta","slice","spliceStart","Math","min","spliceEnd","max","mappedSpliceStart","mappedSpliceEnd","controlSpliceStart","controlSpliceEnd","willRemoveMention","controlPlainTextValue","lastIndexOf","applyChangeToValue","setSelectionAfterMentionChange","startOfMention","foundMention","findStartOfMentionInPlainText","eventMock","executeOnChange","updateMentionsQueries","clearSuggestions","keyCode","preventDefault","stopPropagation","shiftFocus","selectFocused","delta","suggestionsCount","_this$state2","_Object$values$reduce","clickedSuggestion","_suggestionsMouseDown","window","setTimeout","_this$props5","highlighter","caretOffsetParentRect","caretHeight","getComputedStyleLengthProp","viewportRelative","viewportHeight","documentElement","clientHeight","innerHeight","scrollLeft","viewportWidth","clientWidth","innerWidth","offsetWidth","_left","_top","right","input","height","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","_queryId","positionInValue","substringStartIndex","lastMention","getEndOfLastMention","options","escapedTriggerChar","makeTriggerRegex","querySequenceStart","queryData","querySequenceEnd","_this$props6","syncResult","callback","getDataProvider","provideData","updateSuggestions","bind","queryId","_ref2","_ref3","_mentionsChild$props","appendSpaceOnAdd","onAdd","makeMentionsMarkup","focus","displayValue","newCaretPosition","random","handleCopy","handleCut","handlePaste","addEventListener","updateSuggestionsPosition","prevState","setSelection","removeEventListener","setContainerElement","renderControl","renderSuggestionsOverlay","supportsClipboardActions","_this$state3","_this$props7","markupStartIndex","markupEndIndex","pastedMentions","clipboardData","getData","pastedData","_this$state4","_this$props8","setData","saveSelectionToClipboard","_this$state5","_this$props9","forElement","propertyName","getComputedStyle","getPropertyValue","isFinite","MentionsInput$1","overflowY","fontFamily","fontSize","letterSpacing","resize","navigator","test","userAgent","marginLeft","_ref4","styled$3","fontWeight","Mention","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","e","rejected","__generator","body","f","y","g","_","label","sent","trys","ops","verb","n","v","op","pop","__read","r","ar","onRemove","defaultProps","COMMON_MIME_TYPES","Map","toFileWithPath","path","ext","withMimeType","webkitRelativePath","FILES_TO_IGNORE","isObject","getInputFiles","evt","fromList","files","getFsHandleFiles","handles","_a","all","h","getFile","getDataTransferFiles","dt","items","item","kind","toFilePromises","noIgnoredFiles","flatten","webkitGetAsEntry","fromDataTransferItem","isDirectory","fromDirEntry","__spread","getAsFile","fwp","fromEntry","fromFileEntry","reader","createReader","readEntries","batch","err_1","fullPath","minLen","_arrayLikeToArray","_unsupportedIterableToArray","len","getInvalidTypeRejectionErr","accept","messageSuffix","getTooLargeRejectionErr","maxSize","getTooSmallRejectionErr","minSize","TOO_MANY_FILES_REJECTION","fileAccepted","isAcceptable","fileMatchSize","isDefined","allFilesAccepted","multiple","maxFiles","every","accepted","sizeMatch","isPropagationStopped","cancelBubble","isEvtWithFiles","dataTransfer","types","onDocumentDragOver","isIe","isEdge","isIeOrEdge","composeEventHandlers","fns","_len2","_key2","fn","canUseFileSystemAccessAPI","filePickerOptionsTypes","a","b","isAbort","DOMException","ABORT_ERR","isSecurityError","SECURITY_ERR","_excluded","_excluded2","_excluded3","_excluded4","Dropzone","forwardRef","_useDropzone","_defaultProps$options","getFilesFromEvent","onDragEnter","onDragLeave","onDragOver","onDrop","onDropAccepted","onDropRejected","onFileDialogCancel","onFileDialogOpen","useFsAccessApi","preventDropOnDocument","noClick","noKeyboard","noDrag","noDragEventsBubbling","validator","onFileDialogOpenCb","noop","onFileDialogCancelCb","rootRef","useRef","_useReducer2","useReducer","reducer","initialState","dispatch","isFileDialogActive","draggedFiles","fsAccessApiWorksRef","isSecureContext","onWindowFocus","dragTargetsRef","onDocumentDrop","contains","onDragEnterCb","useCallback","persist","isDragActive","onDragOverCb","hasFiles","dropEffect","_unused","onDragLeaveCb","targets","targetIdx","splice","setFiles","fileRejections","_fileAccepted2","acceptError","_fileMatchSize2","sizeError","customErrors","errors","onDropCb","openFileDialog","opts","showOpenFilePicker","click","onKeyDownCb","isEqualNode","onFocusCb","onBlurCb","onClickCb","composeHandler","composeKeyboardHandler","composeDragHandler","getRootProps","_ref2$refKey","refKey","onFocus","tabIndex","onInputElementClick","_ref3$refKey","autoComplete","fileCount","isDragAccept","isDragReject","open","useDropzone","useImperativeHandle","Fragment","Infinity","action","handleMe","params","chatApi","sendChatMessage","handleClear","chatActions","location","getViewerElement","previewUrl","alt","onConfirm","previewFiles","setPreviewFiles","previews","URL","createObjectURL","revokeObjectURL","Modal","onApprove","closable","fullHeight","approveCaption","IconConstants","overflowX","LayoutHeader","subHeader","TempShareDropdown","handleUpload","overrideContent","onClickFile","SocketService","ShareConstants","res","NotificationActions","SectionedDropdown","triggerIcon","button","contextElement","MenuItemLink","MenuSection","caption","user","nicks","FileIcon","typeInfo","getDropdownItem","DataProviderDecorator","onSocketConnected","addSocketListener","refetchData","loaderText","getStorageKey","pathname","loadState","saveState","userToMention","cid","nick","MessageComposer","dropzoneRef","handleCommand","command","whitespace","sessionProps","commands","help","me","handle","getHelpString","sendStatusMessage","ChatCommandHandler","handleSend","markupValue","plainValue","shiftKey","sendText","findUsers","UserConstants","pattern","max_results","hub_urls","hub_url","users","console","log","appendText","newText","onDropFile","onUploadFiles","resetFiles","uploading","handleFileUpload","magnet","onPaste","dataTransferItemList","componentWillUnmount","mobile","small","large","hasFileUploadAccess","LoginStore","AccessConstants","sendButton","Button","Icon","loading","onReject","mobileLayout","borderBottom","background","minHeight","autoFocus","styleTagTransform","setAttributes","domAPI","insertStyleElement","chatAccess","messageStore","highlightRemoteMenuId","messages","chatAPI","setMessages","isSessionInitialized","getSessionMessages","fetchMessages","listen","newMessages","useChatMessagesEffect","hasChatAccess","MessageView","scrollPositionHandler","scroll","uploadTempFile","getBasePath","method","headers","fetchCorsSafeData","isJSON","origin","encodeURIComponent","toCorsSafeUrl","json","shareTempFile","hubUrl","fileId","file_id","refreshPaths","paths","priority","refreshVirtual","abortRefreshTask","store","initializedSession","onMessageReceived","sessionId","Decorator","_onChatMessage","_onStatusMessage","_onSessionUpdated","message_counts","splicedMessages","total","_onSessionRemoved","delete","onSocketDisconnected","hasMessages","hasInitializedSessions","listenTo","add","completed","cacheMessages"],"sourceRoot":""}