payload 2.0.0-beta.9 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/README.md +132 -0
  2. package/config.d.ts +1 -0
  3. package/config.js +5 -1
  4. package/database.d.ts +1 -2
  5. package/database.js +1 -8
  6. package/dist/admin/Root.d.ts +5 -1
  7. package/dist/admin/Root.d.ts.map +1 -1
  8. package/dist/admin/Root.js +3 -3
  9. package/dist/admin/components/elements/ArrayAction/index.js +2 -2
  10. package/dist/admin/components/elements/DocumentControls/index.d.ts +1 -1
  11. package/dist/admin/components/elements/DocumentControls/index.d.ts.map +1 -1
  12. package/dist/admin/components/elements/DocumentControls/index.js +2 -3
  13. package/dist/admin/components/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  14. package/dist/admin/components/elements/DocumentDrawer/DrawerContent.js +5 -2
  15. package/dist/admin/components/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  16. package/dist/admin/components/elements/DocumentHeader/Tabs/Tab/index.js +7 -3
  17. package/dist/admin/components/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  18. package/dist/admin/components/elements/DocumentHeader/Tabs/index.js +4 -2
  19. package/dist/admin/components/elements/DocumentHeader/Tabs/index.scss +6 -10
  20. package/dist/admin/components/elements/DocumentHeader/Tabs/tabs.d.ts.map +1 -1
  21. package/dist/admin/components/elements/DocumentHeader/Tabs/tabs.js +10 -2
  22. package/dist/admin/components/elements/DocumentHeader/Tabs/types.d.ts +4 -0
  23. package/dist/admin/components/elements/DocumentHeader/Tabs/types.d.ts.map +1 -1
  24. package/dist/admin/components/elements/Drawer/index.d.ts.map +1 -1
  25. package/dist/admin/components/elements/Drawer/index.js +4 -3
  26. package/dist/admin/components/elements/Drawer/types.d.ts +1 -0
  27. package/dist/admin/components/elements/Drawer/types.d.ts.map +1 -1
  28. package/dist/admin/components/elements/Dropzone/index.d.ts +10 -0
  29. package/dist/admin/components/elements/Dropzone/index.d.ts.map +1 -0
  30. package/dist/admin/components/elements/Dropzone/index.js +120 -0
  31. package/dist/admin/components/elements/Dropzone/index.scss +52 -0
  32. package/dist/admin/components/elements/DuplicateDocument/index.d.ts.map +1 -1
  33. package/dist/admin/components/elements/DuplicateDocument/index.js +4 -3
  34. package/dist/admin/components/elements/EditUpload/index.d.ts +13 -0
  35. package/dist/admin/components/elements/EditUpload/index.d.ts.map +1 -0
  36. package/dist/admin/components/elements/EditUpload/index.js +378 -0
  37. package/dist/admin/components/elements/EditUpload/index.scss +218 -0
  38. package/dist/admin/components/elements/FileDetails/index.d.ts.map +1 -1
  39. package/dist/admin/components/elements/FileDetails/index.js +14 -99
  40. package/dist/admin/components/elements/FileDetails/index.scss +21 -0
  41. package/dist/admin/components/elements/FileDetails/types.d.ts +3 -0
  42. package/dist/admin/components/elements/FileDetails/types.d.ts.map +1 -1
  43. package/dist/admin/components/elements/Hamburger/index.d.ts.map +1 -1
  44. package/dist/admin/components/elements/Hamburger/index.js +12 -16
  45. package/dist/admin/components/elements/Hamburger/index.scss +41 -54
  46. package/dist/admin/components/elements/Header/index.d.ts.map +1 -1
  47. package/dist/admin/components/elements/Header/index.js +6 -6
  48. package/dist/admin/components/elements/Header/index.scss +6 -1
  49. package/dist/admin/components/elements/Localizer/index.d.ts.map +1 -1
  50. package/dist/admin/components/elements/Localizer/index.js +1 -3
  51. package/dist/admin/components/elements/Nav/NavToggler/index.d.ts.map +1 -1
  52. package/dist/admin/components/elements/Nav/NavToggler/index.js +2 -1
  53. package/dist/admin/components/elements/Nav/NavToggler/index.scss +4 -0
  54. package/dist/admin/components/elements/Nav/context.d.ts +1 -1
  55. package/dist/admin/components/elements/Nav/context.d.ts.map +1 -1
  56. package/dist/admin/components/elements/Nav/context.js +12 -7
  57. package/dist/admin/components/elements/Nav/index.d.ts.map +1 -1
  58. package/dist/admin/components/elements/Nav/index.js +19 -18
  59. package/dist/admin/components/elements/Nav/index.scss +3 -1
  60. package/dist/admin/components/elements/PreviewSizes/index.d.ts +14 -0
  61. package/dist/admin/components/elements/PreviewSizes/index.d.ts.map +1 -0
  62. package/dist/admin/components/elements/PreviewSizes/index.js +146 -0
  63. package/dist/admin/components/elements/PreviewSizes/index.scss +146 -0
  64. package/dist/admin/components/elements/Thumbnail/index.d.ts.map +1 -1
  65. package/dist/admin/components/elements/Thumbnail/index.js +61 -7
  66. package/dist/admin/components/elements/Thumbnail/types.d.ts +4 -2
  67. package/dist/admin/components/elements/Thumbnail/types.d.ts.map +1 -1
  68. package/dist/admin/components/elements/WhereBuilder/Condition/index.js +6 -6
  69. package/dist/admin/components/elements/WhereBuilder/field-types.js +2 -2
  70. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.d.ts +3 -1
  71. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  72. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.js +12 -6
  73. package/dist/admin/components/forms/Form/buildStateFromSchema/index.d.ts +4 -2
  74. package/dist/admin/components/forms/Form/buildStateFromSchema/index.d.ts.map +1 -1
  75. package/dist/admin/components/forms/Form/buildStateFromSchema/index.js +3 -2
  76. package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.d.ts +3 -1
  77. package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.d.ts.map +1 -1
  78. package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.js +3 -2
  79. package/dist/admin/components/forms/Form/fieldReducer.js +7 -7
  80. package/dist/admin/components/forms/Form/index.d.ts.map +1 -1
  81. package/dist/admin/components/forms/Form/index.js +23 -8
  82. package/dist/admin/components/forms/Form/types.d.ts +1 -0
  83. package/dist/admin/components/forms/Form/types.d.ts.map +1 -1
  84. package/dist/admin/components/forms/field-types/Array/index.d.ts.map +1 -1
  85. package/dist/admin/components/forms/field-types/Array/index.js +10 -10
  86. package/dist/admin/components/forms/field-types/Blocks/index.js +8 -8
  87. package/dist/admin/components/forms/field-types/Checkbox/index.scss +4 -0
  88. package/dist/admin/components/forms/field-types/RichText/index.d.ts.map +1 -1
  89. package/dist/admin/components/forms/field-types/RichText/index.js +2 -4
  90. package/dist/admin/components/forms/field-types/RichText/types.d.ts +2 -1
  91. package/dist/admin/components/forms/field-types/RichText/types.d.ts.map +1 -1
  92. package/dist/admin/components/forms/field-types/Select/Input.d.ts.map +1 -1
  93. package/dist/admin/components/forms/field-types/Select/Input.js +4 -4
  94. package/dist/admin/components/forms/field-types/Upload/index.scss +1 -5
  95. package/dist/admin/components/forms/useField/index.d.ts.map +1 -1
  96. package/dist/admin/components/forms/useField/index.js +4 -1
  97. package/dist/admin/components/icons/MinimizeMaximize/index.d.ts +8 -0
  98. package/dist/admin/components/icons/MinimizeMaximize/index.d.ts.map +1 -0
  99. package/dist/admin/components/icons/MinimizeMaximize/index.js +85 -0
  100. package/dist/admin/components/templates/Default/index.d.ts.map +1 -1
  101. package/dist/admin/components/templates/Default/index.js +10 -10
  102. package/dist/admin/components/templates/Default/index.scss +39 -6
  103. package/dist/admin/components/utilities/FormQueryParams/index.d.ts +17 -0
  104. package/dist/admin/components/utilities/FormQueryParams/index.d.ts.map +1 -0
  105. package/dist/admin/components/utilities/FormQueryParams/index.js +23 -0
  106. package/dist/admin/components/utilities/Locale/index.d.ts +2 -2
  107. package/dist/admin/components/utilities/Locale/index.d.ts.map +1 -1
  108. package/dist/admin/components/utilities/Locale/index.js +2 -2
  109. package/dist/admin/components/utilities/OperationProvider/index.d.ts +1 -1
  110. package/dist/admin/components/utilities/OperationProvider/index.d.ts.map +1 -1
  111. package/dist/admin/components/utilities/OperationProvider/index.js +2 -2
  112. package/dist/admin/components/utilities/RenderCustomComponent/types.d.ts +1 -1
  113. package/dist/admin/components/utilities/RenderCustomComponent/types.d.ts.map +1 -1
  114. package/dist/admin/components/views/API/index.d.ts +6 -0
  115. package/dist/admin/components/views/API/index.d.ts.map +1 -0
  116. package/dist/admin/components/views/API/index.js +283 -0
  117. package/dist/admin/components/views/API/index.scss +203 -0
  118. package/dist/admin/components/views/Account/Default.d.ts.map +1 -1
  119. package/dist/admin/components/views/Account/Default.js +4 -4
  120. package/dist/admin/components/views/Account/index.d.ts.map +1 -1
  121. package/dist/admin/components/views/Account/index.js +15 -10
  122. package/dist/admin/components/views/Dashboard/index.d.ts.map +1 -1
  123. package/dist/admin/components/views/Dashboard/index.js +3 -5
  124. package/dist/admin/components/views/Global/Default/index.scss +12 -0
  125. package/dist/admin/components/views/Global/Routes/CustomComponent.d.ts.map +1 -1
  126. package/dist/admin/components/views/Global/Routes/CustomComponent.js +3 -2
  127. package/dist/admin/components/views/Global/Routes/custom.d.ts +2 -2
  128. package/dist/admin/components/views/Global/Routes/custom.d.ts.map +1 -1
  129. package/dist/admin/components/views/Global/Routes/custom.js +27 -18
  130. package/dist/admin/components/views/Global/Routes/index.d.ts.map +1 -1
  131. package/dist/admin/components/views/Global/Routes/index.js +11 -3
  132. package/dist/admin/components/views/Global/index.d.ts.map +1 -1
  133. package/dist/admin/components/views/Global/index.js +11 -4
  134. package/dist/admin/components/views/LivePreview/Context/context.d.ts +4 -4
  135. package/dist/admin/components/views/LivePreview/Context/context.d.ts.map +1 -1
  136. package/dist/admin/components/views/LivePreview/Context/context.js +1 -1
  137. package/dist/admin/components/views/LivePreview/Context/index.d.ts +2 -2
  138. package/dist/admin/components/views/LivePreview/Context/index.d.ts.map +1 -1
  139. package/dist/admin/components/views/LivePreview/Context/index.js +1 -1
  140. package/dist/admin/components/views/LivePreview/Device/index.js +2 -2
  141. package/dist/admin/components/views/LivePreview/DeviceContainer/index.js +3 -3
  142. package/dist/admin/components/views/LivePreview/Preview/index.d.ts +2 -0
  143. package/dist/admin/components/views/LivePreview/Preview/index.d.ts.map +1 -1
  144. package/dist/admin/components/views/LivePreview/Preview/index.js +30 -20
  145. package/dist/admin/components/views/LivePreview/Preview/index.scss +20 -6
  146. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.d.ts +5 -0
  147. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.d.ts.map +1 -0
  148. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.js +71 -0
  149. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.scss +54 -0
  150. package/dist/admin/components/views/LivePreview/Toolbar/index.d.ts +4 -1
  151. package/dist/admin/components/views/LivePreview/Toolbar/index.d.ts.map +1 -1
  152. package/dist/admin/components/views/LivePreview/Toolbar/index.js +24 -51
  153. package/dist/admin/components/views/LivePreview/Toolbar/index.scss +19 -60
  154. package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
  155. package/dist/admin/components/views/LivePreview/index.js +26 -5
  156. package/dist/admin/components/views/LivePreview/index.scss +6 -2
  157. package/dist/admin/components/views/Login/index.js +3 -3
  158. package/dist/admin/components/views/Routes/collections.d.ts.map +1 -1
  159. package/dist/admin/components/views/Routes/collections.js +1 -1
  160. package/dist/admin/components/views/Routes/custom.d.ts +5 -4
  161. package/dist/admin/components/views/Routes/custom.d.ts.map +1 -1
  162. package/dist/admin/components/views/Routes/custom.js +23 -7
  163. package/dist/admin/components/views/Routes/globals.d.ts.map +1 -1
  164. package/dist/admin/components/views/Routes/globals.js +1 -1
  165. package/dist/admin/components/views/Routes/index.d.ts.map +1 -1
  166. package/dist/admin/components/views/Routes/index.js +12 -8
  167. package/dist/admin/components/views/Verify/index.js +1 -1
  168. package/dist/admin/components/views/collections/Edit/Default/index.d.ts.map +1 -1
  169. package/dist/admin/components/views/collections/Edit/Default/index.js +6 -6
  170. package/dist/admin/components/views/collections/Edit/Default/index.scss +12 -0
  171. package/dist/admin/components/views/collections/Edit/Routes/CustomComponent.js +3 -3
  172. package/dist/admin/components/views/collections/Edit/Routes/custom.d.ts.map +1 -1
  173. package/dist/admin/components/views/collections/Edit/Routes/custom.js +27 -18
  174. package/dist/admin/components/views/collections/Edit/Routes/index.d.ts.map +1 -1
  175. package/dist/admin/components/views/collections/Edit/Routes/index.js +4 -3
  176. package/dist/admin/components/views/collections/Edit/SetStepNav.js +3 -3
  177. package/dist/admin/components/views/collections/Edit/Upload/index.d.ts +7 -2
  178. package/dist/admin/components/views/collections/Edit/Upload/index.d.ts.map +1 -1
  179. package/dist/admin/components/views/collections/Edit/Upload/index.js +116 -121
  180. package/dist/admin/components/views/collections/Edit/Upload/index.scss +68 -68
  181. package/dist/admin/components/views/collections/Edit/Upload/types.d.ts +2 -3
  182. package/dist/admin/components/views/collections/Edit/Upload/types.d.ts.map +1 -1
  183. package/dist/admin/components/views/collections/Edit/formatFields.d.ts +1 -1
  184. package/dist/admin/components/views/collections/Edit/formatFields.d.ts.map +1 -1
  185. package/dist/admin/components/views/collections/Edit/formatFields.js +1 -1
  186. package/dist/admin/components/views/collections/Edit/index.d.ts.map +1 -1
  187. package/dist/admin/components/views/collections/Edit/index.js +36 -7
  188. package/dist/admin/components/views/collections/Edit/types.d.ts +12 -0
  189. package/dist/admin/components/views/collections/Edit/types.d.ts.map +1 -1
  190. package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.d.ts +4 -1
  191. package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.d.ts.map +1 -1
  192. package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.js +7 -3
  193. package/dist/admin/components/views/collections/List/Cell/field-types/Code/index.scss +7 -2
  194. package/dist/admin/components/views/collections/List/Cell/field-types/Richtext/index.d.ts.map +1 -1
  195. package/dist/admin/components/views/collections/List/Cell/field-types/Richtext/index.js +2 -4
  196. package/dist/admin/components/views/collections/List/Cell/field-types/index.d.ts +1 -1
  197. package/dist/admin/components/views/collections/List/Cell/index.d.ts.map +1 -1
  198. package/dist/admin/components/views/collections/List/Cell/index.js +11 -1
  199. package/dist/admin/components/views/types.d.ts +8 -8
  200. package/dist/admin/components/views/types.d.ts.map +1 -1
  201. package/dist/auth/operations/me.d.ts.map +1 -1
  202. package/dist/auth/operations/me.js +13 -5
  203. package/dist/auth/strategies/jwt.js +3 -3
  204. package/dist/bin/build.d.ts.map +1 -1
  205. package/dist/bin/build.js +9 -5
  206. package/dist/bin/generateGraphQLSchema.js +2 -2
  207. package/dist/bin/index.js +3 -3
  208. package/dist/bin/migrate.d.ts +2 -1
  209. package/dist/bin/migrate.d.ts.map +1 -1
  210. package/dist/bin/migrate.js +16 -4
  211. package/dist/collections/config/sanitize.js +4 -4
  212. package/dist/collections/config/schema.d.ts.map +1 -1
  213. package/dist/collections/config/schema.js +7 -10
  214. package/dist/collections/config/types.d.ts +5 -41
  215. package/dist/collections/config/types.d.ts.map +1 -1
  216. package/dist/collections/config/types.js +1 -1
  217. package/dist/collections/dataloader.js +2 -2
  218. package/dist/config/defaults.js +2 -2
  219. package/dist/config/schema.d.ts.map +1 -1
  220. package/dist/config/schema.js +14 -8
  221. package/dist/config/shared/adminViewSchema.d.ts +3 -0
  222. package/dist/config/shared/adminViewSchema.d.ts.map +1 -0
  223. package/dist/config/shared/adminViewSchema.js +26 -0
  224. package/dist/config/shared/componentSchema.d.ts +4 -0
  225. package/dist/config/shared/componentSchema.d.ts.map +1 -1
  226. package/dist/config/shared/componentSchema.js +13 -1
  227. package/dist/config/types.d.ts +55 -37
  228. package/dist/config/types.d.ts.map +1 -1
  229. package/dist/config/types.js +1 -1
  230. package/dist/database/createDatabaseAdapter.d.ts +1 -1
  231. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  232. package/dist/database/createDatabaseAdapter.js +1 -10
  233. package/dist/database/migrations/createMigration.js +2 -2
  234. package/dist/database/migrations/getMigrations.d.ts +3 -0
  235. package/dist/database/migrations/getMigrations.d.ts.map +1 -1
  236. package/dist/database/migrations/getMigrations.js +7 -2
  237. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  238. package/dist/database/migrations/migrateDown.js +5 -6
  239. package/dist/database/migrations/migrateRefresh.d.ts +1 -1
  240. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  241. package/dist/database/migrations/migrateRefresh.js +63 -8
  242. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  243. package/dist/database/migrations/migrateReset.js +17 -1
  244. package/dist/database/migrations/migrationTemplate.d.ts +1 -1
  245. package/dist/database/migrations/migrationTemplate.d.ts.map +1 -1
  246. package/dist/database/migrations/migrationTemplate.js +2 -2
  247. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  248. package/dist/database/migrations/migrationsCollection.js +1 -5
  249. package/dist/database/types.d.ts +5 -15
  250. package/dist/database/types.d.ts.map +1 -1
  251. package/dist/exports/config.d.ts +1 -0
  252. package/dist/exports/config.d.ts.map +1 -1
  253. package/dist/exports/config.js +5 -1
  254. package/dist/exports/database.d.ts +1 -2
  255. package/dist/exports/database.d.ts.map +1 -1
  256. package/dist/exports/database.js +1 -8
  257. package/dist/exports/utilities.d.ts +2 -0
  258. package/dist/exports/utilities.d.ts.map +1 -1
  259. package/dist/exports/utilities.js +9 -1
  260. package/dist/fields/config/sanitize.d.ts +7 -3
  261. package/dist/fields/config/sanitize.d.ts.map +1 -1
  262. package/dist/fields/config/sanitize.js +17 -12
  263. package/dist/fields/config/sanitize.spec.js +19 -24
  264. package/dist/fields/config/schema.d.ts.map +1 -1
  265. package/dist/fields/config/schema.js +3 -2
  266. package/dist/fields/config/types.d.ts +2 -0
  267. package/dist/fields/config/types.d.ts.map +1 -1
  268. package/dist/fields/config/types.js +1 -1
  269. package/dist/fields/hooks/afterRead/promise.js +2 -2
  270. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  271. package/dist/fields/hooks/beforeChange/promise.js +3 -9
  272. package/dist/fields/validations.d.ts +3 -1
  273. package/dist/fields/validations.d.ts.map +1 -1
  274. package/dist/fields/validations.js +41 -32
  275. package/dist/globals/config/sanitize.js +4 -4
  276. package/dist/globals/config/schema.d.ts.map +1 -1
  277. package/dist/globals/config/schema.js +5 -10
  278. package/dist/globals/config/types.d.ts +6 -3
  279. package/dist/globals/config/types.d.ts.map +1 -1
  280. package/dist/graphql/schema/buildObjectType.js +2 -2
  281. package/dist/payload.d.ts.map +1 -1
  282. package/dist/payload.js +2 -2
  283. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  284. package/dist/preferences/deleteUserPreferences.js +13 -7
  285. package/dist/preferences/preferencesCollection.d.ts.map +1 -1
  286. package/dist/preferences/preferencesCollection.js +1 -13
  287. package/dist/translations/ar.json +14 -2
  288. package/dist/translations/az.json +14 -2
  289. package/dist/translations/bg.json +14 -2
  290. package/dist/translations/cs.json +14 -2
  291. package/dist/translations/de.json +14 -2
  292. package/dist/translations/en.json +12 -0
  293. package/dist/translations/es.json +14 -2
  294. package/dist/translations/fa.json +14 -2
  295. package/dist/translations/fr.json +14 -2
  296. package/dist/translations/hr.json +14 -2
  297. package/dist/translations/hu.json +14 -2
  298. package/dist/translations/index.d.ts +340 -26
  299. package/dist/translations/index.d.ts.map +1 -1
  300. package/dist/translations/it.json +16 -3
  301. package/dist/translations/ja.json +14 -2
  302. package/dist/translations/my.json +14 -2
  303. package/dist/translations/nb.json +14 -2
  304. package/dist/translations/nl.json +14 -2
  305. package/dist/translations/pl.json +15 -2
  306. package/dist/translations/pt.json +14 -2
  307. package/dist/translations/ro.json +14 -2
  308. package/dist/translations/ru.json +14 -2
  309. package/dist/translations/sv.json +14 -2
  310. package/dist/translations/th.json +14 -2
  311. package/dist/translations/tr.json +14 -2
  312. package/dist/translations/translation-schema.json +36 -0
  313. package/dist/translations/ua.json +14 -2
  314. package/dist/translations/vi.json +14 -2
  315. package/dist/translations/zh.json +14 -2
  316. package/dist/uploads/cropImage.d.ts +12 -0
  317. package/dist/uploads/cropImage.d.ts.map +1 -0
  318. package/dist/uploads/cropImage.js +47 -0
  319. package/dist/uploads/generateFileData.d.ts.map +1 -1
  320. package/dist/uploads/generateFileData.js +49 -14
  321. package/dist/uploads/imageResizer.d.ts +6 -1
  322. package/dist/uploads/imageResizer.d.ts.map +1 -1
  323. package/dist/uploads/imageResizer.js +48 -3
  324. package/dist/uploads/types.d.ts +5 -1
  325. package/dist/uploads/types.d.ts.map +1 -1
  326. package/dist/uploads/types.js +1 -1
  327. package/dist/utilities/fieldSchemaToJSON.d.ts +3 -0
  328. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -0
  329. package/dist/utilities/fieldSchemaToJSON.js +77 -0
  330. package/dist/utilities/getIDType.d.ts +2 -1
  331. package/dist/utilities/getIDType.d.ts.map +1 -1
  332. package/dist/utilities/getIDType.js +3 -3
  333. package/dist/utilities/isValidID.js +2 -2
  334. package/package.json +2 -5
  335. package/utilities.d.ts +2 -0
  336. package/utilities.js +9 -1
  337. package/components/rich-text.d.ts +0 -4
  338. package/components/rich-text.js +0 -31
  339. package/dist/admin/components/views/LivePreview/useLivePreview.d.ts +0 -8
  340. package/dist/admin/components/views/LivePreview/useLivePreview.d.ts.map +0 -1
  341. package/dist/admin/components/views/LivePreview/useLivePreview.js +0 -43
  342. package/dist/admin/components/views/RestAPI/index.d.ts +0 -4
  343. package/dist/admin/components/views/RestAPI/index.d.ts.map +0 -1
  344. package/dist/admin/components/views/RestAPI/index.js +0 -113
  345. package/dist/admin/components/views/RestAPI/index.scss +0 -107
  346. package/dist/config/shared/routeSchema.d.ts +0 -3
  347. package/dist/config/shared/routeSchema.d.ts.map +0 -1
  348. package/dist/config/shared/routeSchema.js +0 -26
  349. package/dist/database/transaction.d.ts +0 -3
  350. package/dist/database/transaction.d.ts.map +0 -1
  351. package/dist/database/transaction.js +0 -21
@@ -0,0 +1,378 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "EditUpload", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return EditUpload;
9
+ }
10
+ });
11
+ const _modal = require("@faceless-ui/modal");
12
+ const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
13
+ const _reacti18next = require("react-i18next");
14
+ const _reactimagecrop = /*#__PURE__*/ _interop_require_default(require("react-image-crop"));
15
+ require("react-image-crop/dist/ReactCrop.css");
16
+ const _Plus = /*#__PURE__*/ _interop_require_default(require("../../icons/Plus"));
17
+ const _FormQueryParams = require("../../utilities/FormQueryParams");
18
+ const _Upload = require("../../views/collections/Edit/Upload");
19
+ const _Button = /*#__PURE__*/ _interop_require_default(require("../Button"));
20
+ require("./index.scss");
21
+ function _interop_require_default(obj) {
22
+ return obj && obj.__esModule ? obj : {
23
+ default: obj
24
+ };
25
+ }
26
+ function _getRequireWildcardCache(nodeInterop) {
27
+ if (typeof WeakMap !== "function") return null;
28
+ var cacheBabelInterop = new WeakMap();
29
+ var cacheNodeInterop = new WeakMap();
30
+ return (_getRequireWildcardCache = function(nodeInterop) {
31
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
32
+ })(nodeInterop);
33
+ }
34
+ function _interop_require_wildcard(obj, nodeInterop) {
35
+ if (!nodeInterop && obj && obj.__esModule) {
36
+ return obj;
37
+ }
38
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
39
+ return {
40
+ default: obj
41
+ };
42
+ }
43
+ var cache = _getRequireWildcardCache(nodeInterop);
44
+ if (cache && cache.has(obj)) {
45
+ return cache.get(obj);
46
+ }
47
+ var newObj = {};
48
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
49
+ for(var key in obj){
50
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
51
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
52
+ if (desc && (desc.get || desc.set)) {
53
+ Object.defineProperty(newObj, key, desc);
54
+ } else {
55
+ newObj[key] = obj[key];
56
+ }
57
+ }
58
+ }
59
+ newObj.default = obj;
60
+ if (cache) {
61
+ cache.set(obj, newObj);
62
+ }
63
+ return newObj;
64
+ }
65
+ const baseClass = 'edit-upload';
66
+ const Input = ({ name, onChange, value })=>/*#__PURE__*/ _react.default.createElement("div", {
67
+ className: `${baseClass}__input`
68
+ }, name, /*#__PURE__*/ _react.default.createElement("input", {
69
+ name: name,
70
+ onChange: (e)=>onChange(e.target.value),
71
+ type: "number",
72
+ value: value
73
+ }));
74
+ const EditUpload = ({ fileName, fileSrc, imageCacheTag, showCrop, showFocalPoint })=>{
75
+ const { closeModal } = (0, _modal.useModal)();
76
+ const { t } = (0, _reacti18next.useTranslation)([
77
+ 'general',
78
+ 'upload'
79
+ ]);
80
+ const { formQueryParams, setFormQueryParams } = (0, _FormQueryParams.useFormQueryParams)();
81
+ const { uploadEdits } = formQueryParams || {};
82
+ const [crop, setCrop] = (0, _react.useState)({
83
+ height: uploadEdits?.crop?.height || 100,
84
+ unit: '%',
85
+ width: uploadEdits?.crop?.width || 100,
86
+ x: uploadEdits?.crop?.x || 0,
87
+ y: uploadEdits?.crop?.y || 0
88
+ });
89
+ const [pointPosition, setPointPosition] = (0, _react.useState)({
90
+ x: uploadEdits?.focalPoint?.x || 50,
91
+ y: uploadEdits?.focalPoint?.y || 50
92
+ });
93
+ const [checkBounds, setCheckBounds] = (0, _react.useState)(false);
94
+ const focalWrapRef = (0, _react.useRef)();
95
+ const imageRef = (0, _react.useRef)();
96
+ const cropRef = (0, _react.useRef)();
97
+ const originalHeight = imageRef.current ? imageRef.current.naturalHeight : 0;
98
+ const originalWidth = imageRef.current ? imageRef.current.naturalWidth : 0;
99
+ const fineTuneCrop = ({ dimension, value })=>{
100
+ const intValue = parseInt(value);
101
+ if (dimension === 'width' && intValue >= originalWidth) return null;
102
+ if (dimension === 'height' && intValue >= originalHeight) return null;
103
+ const percentage = 100 * (intValue / (dimension === 'width' ? originalWidth : originalHeight));
104
+ if (percentage === 100 || percentage === 0) return null;
105
+ setCrop({
106
+ ...crop,
107
+ [dimension]: percentage
108
+ });
109
+ };
110
+ const fineTuneFocalPoint = ({ coordinate, value })=>{
111
+ const intValue = parseInt(value);
112
+ if (intValue >= 0 && intValue <= 100) {
113
+ setPointPosition((prevPosition)=>({
114
+ ...prevPosition,
115
+ [coordinate]: intValue
116
+ }));
117
+ }
118
+ };
119
+ const saveEdits = ()=>{
120
+ setFormQueryParams({
121
+ ...formQueryParams,
122
+ uploadEdits: {
123
+ crop: crop ? crop : undefined,
124
+ focalPoint: pointPosition ? pointPosition : undefined
125
+ }
126
+ });
127
+ closeModal(_Upload.editDrawerSlug);
128
+ };
129
+ const onDragEnd = _react.default.useCallback(({ x, y })=>{
130
+ setPointPosition({
131
+ x,
132
+ y
133
+ });
134
+ setCheckBounds(false);
135
+ }, []);
136
+ const centerFocalPoint = ()=>{
137
+ const containerRect = focalWrapRef.current.getBoundingClientRect();
138
+ const boundsRect = cropRef.current.getBoundingClientRect();
139
+ const xCenter = (boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width * 100;
140
+ const yCenter = (boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height * 100;
141
+ setPointPosition({
142
+ x: xCenter,
143
+ y: yCenter
144
+ });
145
+ };
146
+ const fileSrcToUse = imageCacheTag ? `${fileSrc}?${imageCacheTag}` : fileSrc;
147
+ return /*#__PURE__*/ _react.default.createElement("div", {
148
+ className: baseClass
149
+ }, /*#__PURE__*/ _react.default.createElement("div", {
150
+ className: `${baseClass}__header`
151
+ }, /*#__PURE__*/ _react.default.createElement("h2", {
152
+ title: `${t('general:editing')} ${fileName}`
153
+ }, t('general:editing'), " ", fileName), /*#__PURE__*/ _react.default.createElement("div", {
154
+ className: `${baseClass}__actions`
155
+ }, /*#__PURE__*/ _react.default.createElement(_Button.default, {
156
+ "aria-label": t('cancel'),
157
+ buttonStyle: "secondary",
158
+ className: `${baseClass}__cancel`,
159
+ onClick: ()=>closeModal(_Upload.editDrawerSlug)
160
+ }, t('general:cancel')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
161
+ "aria-label": t('general:applyChanges'),
162
+ buttonStyle: "primary",
163
+ className: `${baseClass}__save`,
164
+ onClick: ()=>saveEdits()
165
+ }, t('general:applyChanges')))), /*#__PURE__*/ _react.default.createElement("div", {
166
+ className: `${baseClass}__toolWrap`
167
+ }, /*#__PURE__*/ _react.default.createElement("div", {
168
+ className: `${baseClass}__crop`
169
+ }, /*#__PURE__*/ _react.default.createElement("div", {
170
+ className: `${baseClass}__focal-wrapper`,
171
+ ref: focalWrapRef,
172
+ style: {
173
+ aspectRatio: `${originalWidth / originalHeight}`
174
+ }
175
+ }, showCrop ? /*#__PURE__*/ _react.default.createElement(_reactimagecrop.default, {
176
+ className: `${baseClass}__reactCrop`,
177
+ crop: crop,
178
+ onChange: (_, c)=>setCrop(c),
179
+ onComplete: ()=>setCheckBounds(true),
180
+ renderSelectionAddon: ()=>{
181
+ return /*#__PURE__*/ _react.default.createElement("div", {
182
+ className: `${baseClass}__crop-window`,
183
+ ref: cropRef
184
+ });
185
+ }
186
+ }, /*#__PURE__*/ _react.default.createElement("img", {
187
+ alt: t('upload:setCropArea'),
188
+ ref: imageRef,
189
+ src: fileSrcToUse
190
+ })) : /*#__PURE__*/ _react.default.createElement("img", {
191
+ alt: t('upload:setFocalPoint'),
192
+ ref: imageRef,
193
+ src: fileSrcToUse
194
+ }), /*#__PURE__*/ _react.default.createElement(DraggableElement, {
195
+ boundsRef: cropRef,
196
+ checkBounds: checkBounds,
197
+ className: `${baseClass}__focalPoint`,
198
+ containerRef: focalWrapRef,
199
+ initialPosition: pointPosition,
200
+ onDragEnd: onDragEnd,
201
+ setCheckBounds: setCheckBounds
202
+ }, /*#__PURE__*/ _react.default.createElement(_Plus.default, null)))), (showCrop || showFocalPoint) && /*#__PURE__*/ _react.default.createElement("div", {
203
+ className: `${baseClass}__sidebar`
204
+ }, showCrop && /*#__PURE__*/ _react.default.createElement("div", {
205
+ className: `${baseClass}__groupWrap`
206
+ }, /*#__PURE__*/ _react.default.createElement("div", null, /*#__PURE__*/ _react.default.createElement("div", {
207
+ className: `${baseClass}__titleWrap`
208
+ }, /*#__PURE__*/ _react.default.createElement("h3", null, t('upload:crop')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
209
+ buttonStyle: "none",
210
+ className: `${baseClass}__reset`,
211
+ onClick: ()=>setCrop({
212
+ height: 100,
213
+ unit: '%',
214
+ width: 100,
215
+ x: 0,
216
+ y: 0
217
+ })
218
+ }, t('general:reset')))), /*#__PURE__*/ _react.default.createElement("span", {
219
+ className: `${baseClass}__description`
220
+ }, t('upload:cropToolDescription')), /*#__PURE__*/ _react.default.createElement("div", {
221
+ className: `${baseClass}__inputsWrap`
222
+ }, /*#__PURE__*/ _react.default.createElement(Input, {
223
+ name: `${t('upload:width')} (px)`,
224
+ onChange: (value)=>fineTuneCrop({
225
+ dimension: 'width',
226
+ value
227
+ }),
228
+ value: (crop.width / 100 * originalWidth).toFixed(0)
229
+ }), /*#__PURE__*/ _react.default.createElement(Input, {
230
+ name: `${t('upload:height')} (px)`,
231
+ onChange: (value)=>fineTuneCrop({
232
+ dimension: 'height',
233
+ value
234
+ }),
235
+ value: (crop.height / 100 * originalHeight).toFixed(0)
236
+ }))), showFocalPoint && /*#__PURE__*/ _react.default.createElement("div", {
237
+ className: `${baseClass}__groupWrap`
238
+ }, /*#__PURE__*/ _react.default.createElement("div", null, /*#__PURE__*/ _react.default.createElement("div", {
239
+ className: `${baseClass}__titleWrap`
240
+ }, /*#__PURE__*/ _react.default.createElement("h3", null, t('upload:focalPoint')), /*#__PURE__*/ _react.default.createElement(_Button.default, {
241
+ buttonStyle: "none",
242
+ className: `${baseClass}__reset`,
243
+ onClick: centerFocalPoint
244
+ }, t('general:reset')))), /*#__PURE__*/ _react.default.createElement("span", {
245
+ className: `${baseClass}__description`
246
+ }, t('upload:focalPointDescription')), /*#__PURE__*/ _react.default.createElement("div", {
247
+ className: `${baseClass}__inputsWrap`
248
+ }, /*#__PURE__*/ _react.default.createElement(Input, {
249
+ name: "X %",
250
+ onChange: (value)=>fineTuneFocalPoint({
251
+ coordinate: 'x',
252
+ value
253
+ }),
254
+ value: pointPosition.x.toFixed(0)
255
+ }), /*#__PURE__*/ _react.default.createElement(Input, {
256
+ name: "Y %",
257
+ onChange: (value)=>fineTuneFocalPoint({
258
+ coordinate: 'y',
259
+ value
260
+ }),
261
+ value: pointPosition.y.toFixed(0)
262
+ }))))));
263
+ };
264
+ const DraggableElement = ({ boundsRef, checkBounds, children, className, containerRef, initialPosition = {
265
+ x: 50,
266
+ y: 50
267
+ }, onDragEnd, setCheckBounds })=>{
268
+ const [position, setPosition] = (0, _react.useState)({
269
+ x: initialPosition.x,
270
+ y: initialPosition.y
271
+ });
272
+ const [isDragging, setIsDragging] = (0, _react.useState)(false);
273
+ const dragRef = (0, _react.useRef)();
274
+ const getCoordinates = _react.default.useCallback((mouseXArg, mouseYArg, recenter)=>{
275
+ const containerRect = containerRef.current.getBoundingClientRect();
276
+ const boundsRect = boundsRef.current.getBoundingClientRect();
277
+ const mouseX = mouseXArg ?? boundsRect.left;
278
+ const mouseY = mouseYArg ?? boundsRect.top;
279
+ const xOutOfBounds = mouseX < boundsRect.left || mouseX > boundsRect.right;
280
+ const yOutOfBounds = mouseY < boundsRect.top || mouseY > boundsRect.bottom;
281
+ let x = (mouseX - containerRect.left) / containerRect.width * 100;
282
+ let y = (mouseY - containerRect.top) / containerRect.height * 100;
283
+ const xCenter = (boundsRect.left - containerRect.left + boundsRect.width / 2) / containerRect.width * 100;
284
+ const yCenter = (boundsRect.top - containerRect.top + boundsRect.height / 2) / containerRect.height * 100;
285
+ if (xOutOfBounds || yOutOfBounds) {
286
+ setIsDragging(false);
287
+ if (mouseX < boundsRect.left) {
288
+ x = (boundsRect.left - containerRect.left) / containerRect.width * 100;
289
+ } else if (mouseX > boundsRect.right) {
290
+ x = (containerRect.width - (containerRect.right - boundsRect.right)) / containerRect.width * 100;
291
+ }
292
+ if (mouseY < boundsRect.top) {
293
+ y = (boundsRect.top - containerRect.top) / containerRect.height * 100;
294
+ } else if (mouseY > boundsRect.bottom) {
295
+ y = (containerRect.height - (containerRect.bottom - boundsRect.bottom)) / containerRect.height * 100;
296
+ }
297
+ if (recenter) {
298
+ x = xOutOfBounds ? xCenter : x;
299
+ y = yOutOfBounds ? yCenter : y;
300
+ }
301
+ }
302
+ return {
303
+ x,
304
+ y
305
+ };
306
+ }, []);
307
+ const handleMouseDown = (event)=>{
308
+ event.preventDefault();
309
+ setIsDragging(true);
310
+ };
311
+ const handleMouseMove = (event)=>{
312
+ if (!isDragging) return null;
313
+ const { x, y } = getCoordinates(event.clientX, event.clientY);
314
+ setPosition({
315
+ x,
316
+ y
317
+ });
318
+ };
319
+ const onDrop = ()=>{
320
+ setIsDragging(false);
321
+ onDragEnd(position);
322
+ };
323
+ _react.default.useEffect(()=>{
324
+ if (isDragging || !dragRef.current) return;
325
+ if (checkBounds) {
326
+ const { height, left, top, width } = dragRef.current.getBoundingClientRect();
327
+ const { x, y } = getCoordinates(left + width / 2, top + height / 2, true);
328
+ onDragEnd({
329
+ x,
330
+ y
331
+ });
332
+ setPosition({
333
+ x,
334
+ y
335
+ });
336
+ setCheckBounds(false);
337
+ return;
338
+ }
339
+ }, [
340
+ getCoordinates,
341
+ isDragging,
342
+ checkBounds,
343
+ setCheckBounds,
344
+ position.x,
345
+ position.y
346
+ ]);
347
+ _react.default.useEffect(()=>{
348
+ setPosition({
349
+ x: initialPosition.x,
350
+ y: initialPosition.y
351
+ });
352
+ }, [
353
+ initialPosition.x,
354
+ initialPosition.y
355
+ ]);
356
+ return /*#__PURE__*/ _react.default.createElement("div", {
357
+ className: [
358
+ `${baseClass}__draggable-container`,
359
+ isDragging && `${baseClass}__draggable-container--dragging`
360
+ ].filter(Boolean).join(' '),
361
+ onMouseMove: handleMouseMove
362
+ }, /*#__PURE__*/ _react.default.createElement("div", {
363
+ className: [
364
+ `${baseClass}__draggable`,
365
+ className
366
+ ].filter(Boolean).join(' '),
367
+ onMouseDown: handleMouseDown,
368
+ onMouseUp: onDrop,
369
+ ref: dragRef,
370
+ style: {
371
+ left: `${position.x}%`,
372
+ position: 'absolute',
373
+ top: `${position.y}%`
374
+ }
375
+ }, children), /*#__PURE__*/ _react.default.createElement("div", null));
376
+ };
377
+
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2VsZW1lbnRzL0VkaXRVcGxvYWQvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnQGZhY2VsZXNzLXVpL21vZGFsJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCBSZWFjdENyb3AsIHsgdHlwZSBDcm9wIGFzIENyb3BUeXBlIH0gZnJvbSAncmVhY3QtaW1hZ2UtY3JvcCdcbmltcG9ydCAncmVhY3QtaW1hZ2UtY3JvcC9kaXN0L1JlYWN0Q3JvcC5jc3MnXG5cbmltcG9ydCB0eXBlIHsgRGF0YSB9IGZyb20gJy4uLy4uL2Zvcm1zL0Zvcm0vdHlwZXMnXG5cbmltcG9ydCBQbHVzIGZyb20gJy4uLy4uL2ljb25zL1BsdXMnXG5pbXBvcnQgeyB1c2VGb3JtUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvRm9ybVF1ZXJ5UGFyYW1zJ1xuaW1wb3J0IHsgZWRpdERyYXdlclNsdWcgfSBmcm9tICcuLi8uLi92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L1VwbG9hZCdcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vQnV0dG9uJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdlZGl0LXVwbG9hZCdcblxuY29uc3QgSW5wdXQ6IFJlYWN0LkZDPHsgbmFtZTogc3RyaW5nOyBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7IHZhbHVlOiBzdHJpbmcgfT4gPSAoe1xuICBuYW1lLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG59KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pbnB1dGB9PlxuICAgIHtuYW1lfVxuICAgIDxpbnB1dCBuYW1lPXtuYW1lfSBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0gdHlwZT1cIm51bWJlclwiIHZhbHVlPXt2YWx1ZX0gLz5cbiAgPC9kaXY+XG4pXG5cbmV4cG9ydCBjb25zdCBFZGl0VXBsb2FkOiBSZWFjdC5GQzx7XG4gIGRvYz86IERhdGFcbiAgZmlsZU5hbWU6IHN0cmluZ1xuICBmaWxlU3JjOiBzdHJpbmdcbiAgaW1hZ2VDYWNoZVRhZz86IHN0cmluZ1xuICBzaG93Q3JvcD86IGJvb2xlYW5cbiAgc2hvd0ZvY2FsUG9pbnQ/OiBib29sZWFuXG59PiA9ICh7IGZpbGVOYW1lLCBmaWxlU3JjLCBpbWFnZUNhY2hlVGFnLCBzaG93Q3JvcCwgc2hvd0ZvY2FsUG9pbnQgfSkgPT4ge1xuICBjb25zdCB7IGNsb3NlTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ2dlbmVyYWwnLCAndXBsb2FkJ10pXG4gIGNvbnN0IHsgZm9ybVF1ZXJ5UGFyYW1zLCBzZXRGb3JtUXVlcnlQYXJhbXMgfSA9IHVzZUZvcm1RdWVyeVBhcmFtcygpXG4gIGNvbnN0IHsgdXBsb2FkRWRpdHMgfSA9IGZvcm1RdWVyeVBhcmFtcyB8fCB7fVxuICBjb25zdCBbY3JvcCwgc2V0Q3JvcF0gPSB1c2VTdGF0ZTxDcm9wVHlwZT4oe1xuICAgIGhlaWdodDogdXBsb2FkRWRpdHM/LmNyb3A/LmhlaWdodCB8fCAxMDAsXG4gICAgdW5pdDogJyUnLFxuICAgIHdpZHRoOiB1cGxvYWRFZGl0cz8uY3JvcD8ud2lkdGggfHwgMTAwLFxuICAgIHg6IHVwbG9hZEVkaXRzPy5jcm9wPy54IHx8IDAsXG4gICAgeTogdXBsb2FkRWRpdHM/LmNyb3A/LnkgfHwgMCxcbiAgfSlcblxuICBjb25zdCBbcG9pbnRQb3NpdGlvbiwgc2V0UG9pbnRQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+KHtcbiAgICB4OiB1cGxvYWRFZGl0cz8uZm9jYWxQb2ludD8ueCB8fCA1MCxcbiAgICB5OiB1cGxvYWRFZGl0cz8uZm9jYWxQb2ludD8ueSB8fCA1MCxcbiAgfSlcbiAgY29uc3QgW2NoZWNrQm91bmRzLCBzZXRDaGVja0JvdW5kc10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcblxuICBjb25zdCBmb2NhbFdyYXBSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ+KClcbiAgY29uc3QgaW1hZ2VSZWYgPSB1c2VSZWY8SFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZD4oKVxuICBjb25zdCBjcm9wUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkPigpXG5cbiAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSBpbWFnZVJlZi5jdXJyZW50ID8gaW1hZ2VSZWYuY3VycmVudC5uYXR1cmFsSGVpZ2h0IDogMFxuICBjb25zdCBvcmlnaW5hbFdpZHRoID0gaW1hZ2VSZWYuY3VycmVudCA/IGltYWdlUmVmLmN1cnJlbnQubmF0dXJhbFdpZHRoIDogMFxuXG4gIGNvbnN0IGZpbmVUdW5lQ3JvcCA9ICh7IGRpbWVuc2lvbiwgdmFsdWUgfTogeyBkaW1lbnNpb246ICdoZWlnaHQnIHwgJ3dpZHRoJzsgdmFsdWU6IHN0cmluZyB9KSA9PiB7XG4gICAgY29uc3QgaW50VmFsdWUgPSBwYXJzZUludCh2YWx1ZSlcbiAgICBpZiAoZGltZW5zaW9uID09PSAnd2lkdGgnICYmIGludFZhbHVlID49IG9yaWdpbmFsV2lkdGgpIHJldHVybiBudWxsXG4gICAgaWYgKGRpbWVuc2lvbiA9PT0gJ2hlaWdodCcgJiYgaW50VmFsdWUgPj0gb3JpZ2luYWxIZWlnaHQpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwZXJjZW50YWdlID0gMTAwICogKGludFZhbHVlIC8gKGRpbWVuc2lvbiA9PT0gJ3dpZHRoJyA/IG9yaWdpbmFsV2lkdGggOiBvcmlnaW5hbEhlaWdodCkpXG5cbiAgICBpZiAocGVyY2VudGFnZSA9PT0gMTAwIHx8IHBlcmNlbnRhZ2UgPT09IDApIHJldHVybiBudWxsXG5cbiAgICBzZXRDcm9wKHtcbiAgICAgIC4uLmNyb3AsXG4gICAgICBbZGltZW5zaW9uXTogcGVyY2VudGFnZSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgZmluZVR1bmVGb2NhbFBvaW50ID0gKHsgY29vcmRpbmF0ZSwgdmFsdWUgfTogeyBjb29yZGluYXRlOiAneCcgfCAneSc7IHZhbHVlOiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGludFZhbHVlID0gcGFyc2VJbnQodmFsdWUpXG4gICAgaWYgKGludFZhbHVlID49IDAgJiYgaW50VmFsdWUgPD0gMTAwKSB7XG4gICAgICBzZXRQb2ludFBvc2l0aW9uKChwcmV2UG9zaXRpb24pID0+ICh7IC4uLnByZXZQb3NpdGlvbiwgW2Nvb3JkaW5hdGVdOiBpbnRWYWx1ZSB9KSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzYXZlRWRpdHMgPSAoKSA9PiB7XG4gICAgc2V0Rm9ybVF1ZXJ5UGFyYW1zKHtcbiAgICAgIC4uLmZvcm1RdWVyeVBhcmFtcyxcbiAgICAgIHVwbG9hZEVkaXRzOiB7XG4gICAgICAgIGNyb3A6IGNyb3AgPyBjcm9wIDogdW5kZWZpbmVkLFxuICAgICAgICBmb2NhbFBvaW50OiBwb2ludFBvc2l0aW9uID8gcG9pbnRQb3NpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBjbG9zZU1vZGFsKGVkaXREcmF3ZXJTbHVnKVxuICB9XG5cbiAgY29uc3Qgb25EcmFnRW5kID0gUmVhY3QudXNlQ2FsbGJhY2soKHsgeCwgeSB9KSA9PiB7XG4gICAgc2V0UG9pbnRQb3NpdGlvbih7IHgsIHkgfSlcbiAgICBzZXRDaGVja0JvdW5kcyhmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgY2VudGVyRm9jYWxQb2ludCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gZm9jYWxXcmFwUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBib3VuZHNSZWN0ID0gY3JvcFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3QgeENlbnRlciA9XG4gICAgICAoKGJvdW5kc1JlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCArIGJvdW5kc1JlY3Qud2lkdGggLyAyKSAvIGNvbnRhaW5lclJlY3Qud2lkdGgpICogMTAwXG4gICAgY29uc3QgeUNlbnRlciA9XG4gICAgICAoKGJvdW5kc1JlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3AgKyBib3VuZHNSZWN0LmhlaWdodCAvIDIpIC8gY29udGFpbmVyUmVjdC5oZWlnaHQpICogMTAwXG4gICAgc2V0UG9pbnRQb3NpdGlvbih7IHg6IHhDZW50ZXIsIHk6IHlDZW50ZXIgfSlcbiAgfVxuXG4gIGNvbnN0IGZpbGVTcmNUb1VzZSA9IGltYWdlQ2FjaGVUYWcgPyBgJHtmaWxlU3JjfT8ke2ltYWdlQ2FjaGVUYWd9YCA6IGZpbGVTcmNcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2hlYWRlcmB9PlxuICAgICAgICA8aDIgdGl0bGU9e2Ake3QoJ2dlbmVyYWw6ZWRpdGluZycpfSAke2ZpbGVOYW1lfWB9PlxuICAgICAgICAgIHt0KCdnZW5lcmFsOmVkaXRpbmcnKX0ge2ZpbGVOYW1lfVxuICAgICAgICA8L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWN0aW9uc2B9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jYW5jZWxgfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2VNb2RhbChlZGl0RHJhd2VyU2x1Zyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6Y2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnZ2VuZXJhbDphcHBseUNoYW5nZXMnKX1cbiAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NhdmVgfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2F2ZUVkaXRzKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2dlbmVyYWw6YXBwbHlDaGFuZ2VzJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdG9vbFdyYXBgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Nyb3BgfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZvY2FsLXdyYXBwZXJgfVxuICAgICAgICAgICAgcmVmPXtmb2NhbFdyYXBSZWZ9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogYCR7b3JpZ2luYWxXaWR0aCAvIG9yaWdpbmFsSGVpZ2h0fWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzaG93Q3JvcCA/IChcbiAgICAgICAgICAgICAgPFJlYWN0Q3JvcFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVhY3RDcm9wYH1cbiAgICAgICAgICAgICAgICBjcm9wPXtjcm9wfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoXywgYykgPT4gc2V0Q3JvcChjKX1cbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXsoKSA9PiBzZXRDaGVja0JvdW5kcyh0cnVlKX1cbiAgICAgICAgICAgICAgICByZW5kZXJTZWxlY3Rpb25BZGRvbj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jcm9wLXdpbmRvd2B9IHJlZj17Y3JvcFJlZn0gLz5cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGltZyBhbHQ9e3QoJ3VwbG9hZDpzZXRDcm9wQXJlYScpfSByZWY9e2ltYWdlUmVmfSBzcmM9e2ZpbGVTcmNUb1VzZX0gLz5cbiAgICAgICAgICAgICAgPC9SZWFjdENyb3A+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8aW1nIGFsdD17dCgndXBsb2FkOnNldEZvY2FsUG9pbnQnKX0gcmVmPXtpbWFnZVJlZn0gc3JjPXtmaWxlU3JjVG9Vc2V9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPERyYWdnYWJsZUVsZW1lbnRcbiAgICAgICAgICAgICAgYm91bmRzUmVmPXtjcm9wUmVmfVxuICAgICAgICAgICAgICBjaGVja0JvdW5kcz17Y2hlY2tCb3VuZHN9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZm9jYWxQb2ludGB9XG4gICAgICAgICAgICAgIGNvbnRhaW5lclJlZj17Zm9jYWxXcmFwUmVmfVxuICAgICAgICAgICAgICBpbml0aWFsUG9zaXRpb249e3BvaW50UG9zaXRpb259XG4gICAgICAgICAgICAgIG9uRHJhZ0VuZD17b25EcmFnRW5kfVxuICAgICAgICAgICAgICBzZXRDaGVja0JvdW5kcz17c2V0Q2hlY2tCb3VuZHN9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzIC8+XG4gICAgICAgICAgICA8L0RyYWdnYWJsZUVsZW1lbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KHNob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50KSAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3NpZGViYXJgfT5cbiAgICAgICAgICAgIHtzaG93Q3JvcCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ncm91cFdyYXBgfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RpdGxlV3JhcGB9PlxuICAgICAgICAgICAgICAgICAgICA8aDM+e3QoJ3VwbG9hZDpjcm9wJyl9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZXNldGB9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENyb3Aoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbDpyZXNldCcpfVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZGVzY3JpcHRpb25gfT5cbiAgICAgICAgICAgICAgICAgIHt0KCd1cGxvYWQ6Y3JvcFRvb2xEZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faW5wdXRzV3JhcGB9PlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9e2Ake3QoJ3VwbG9hZDp3aWR0aCcpfSAocHgpYH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVDcm9wKHsgZGltZW5zaW9uOiAnd2lkdGgnLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9eygoY3JvcC53aWR0aCAvIDEwMCkgKiBvcmlnaW5hbFdpZHRoKS50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lPXtgJHt0KCd1cGxvYWQ6aGVpZ2h0Jyl9IChweClgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiBmaW5lVHVuZUNyb3AoeyBkaW1lbnNpb246ICdoZWlnaHQnLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9eygoY3JvcC5oZWlnaHQgLyAxMDApICogb3JpZ2luYWxIZWlnaHQpLnRvRml4ZWQoMCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtzaG93Rm9jYWxQb2ludCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19ncm91cFdyYXBgfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RpdGxlV3JhcGB9PlxuICAgICAgICAgICAgICAgICAgICA8aDM+e3QoJ3VwbG9hZDpmb2NhbFBvaW50Jyl9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZXNldGB9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2VudGVyRm9jYWxQb2ludH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsOnJlc2V0Jyl9XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kZXNjcmlwdGlvbmB9PlxuICAgICAgICAgICAgICAgICAge3QoJ3VwbG9hZDpmb2NhbFBvaW50RGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2lucHV0c1dyYXBgfT5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiWCAlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVGb2NhbFBvaW50KHsgY29vcmRpbmF0ZTogJ3gnLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BvaW50UG9zaXRpb24ueC50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiWSAlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gZmluZVR1bmVGb2NhbFBvaW50KHsgY29vcmRpbmF0ZTogJ3knLCB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BvaW50UG9zaXRpb24ueS50b0ZpeGVkKDApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuY29uc3QgRHJhZ2dhYmxlRWxlbWVudCA9ICh7XG4gIGJvdW5kc1JlZixcbiAgY2hlY2tCb3VuZHMsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW5pdGlhbFBvc2l0aW9uID0geyB4OiA1MCwgeTogNTAgfSxcbiAgb25EcmFnRW5kLFxuICBzZXRDaGVja0JvdW5kcyxcbn0pID0+IHtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSh7IHg6IGluaXRpYWxQb3NpdGlvbi54LCB5OiBpbml0aWFsUG9zaXRpb24ueSB9KVxuICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgZHJhZ1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZD4oKVxuXG4gIGNvbnN0IGdldENvb3JkaW5hdGVzID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG1vdXNlWEFyZz86IG51bWJlciwgbW91c2VZQXJnPzogbnVtYmVyLCByZWNlbnRlcj86IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgYm91bmRzUmVjdCA9IGJvdW5kc1JlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBtb3VzZVggPSBtb3VzZVhBcmcgPz8gYm91bmRzUmVjdC5sZWZ0XG4gICAgICBjb25zdCBtb3VzZVkgPSBtb3VzZVlBcmcgPz8gYm91bmRzUmVjdC50b3BcblxuICAgICAgY29uc3QgeE91dE9mQm91bmRzID0gbW91c2VYIDwgYm91bmRzUmVjdC5sZWZ0IHx8IG1vdXNlWCA+IGJvdW5kc1JlY3QucmlnaHRcbiAgICAgIGNvbnN0IHlPdXRPZkJvdW5kcyA9IG1vdXNlWSA8IGJvdW5kc1JlY3QudG9wIHx8IG1vdXNlWSA+IGJvdW5kc1JlY3QuYm90dG9tXG5cbiAgICAgIGxldCB4ID0gKChtb3VzZVggLSBjb250YWluZXJSZWN0LmxlZnQpIC8gY29udGFpbmVyUmVjdC53aWR0aCkgKiAxMDBcbiAgICAgIGxldCB5ID0gKChtb3VzZVkgLSBjb250YWluZXJSZWN0LnRvcCkgLyBjb250YWluZXJSZWN0LmhlaWdodCkgKiAxMDBcbiAgICAgIGNvbnN0IHhDZW50ZXIgPVxuICAgICAgICAoKGJvdW5kc1JlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCArIGJvdW5kc1JlY3Qud2lkdGggLyAyKSAvIGNvbnRhaW5lclJlY3Qud2lkdGgpICogMTAwXG4gICAgICBjb25zdCB5Q2VudGVyID1cbiAgICAgICAgKChib3VuZHNSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wICsgYm91bmRzUmVjdC5oZWlnaHQgLyAyKSAvIGNvbnRhaW5lclJlY3QuaGVpZ2h0KSAqIDEwMFxuICAgICAgaWYgKHhPdXRPZkJvdW5kcyB8fCB5T3V0T2ZCb3VuZHMpIHtcbiAgICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSlcbiAgICAgICAgaWYgKG1vdXNlWCA8IGJvdW5kc1JlY3QubGVmdCkge1xuICAgICAgICAgIHggPSAoKGJvdW5kc1JlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCkgLyBjb250YWluZXJSZWN0LndpZHRoKSAqIDEwMFxuICAgICAgICB9IGVsc2UgaWYgKG1vdXNlWCA+IGJvdW5kc1JlY3QucmlnaHQpIHtcbiAgICAgICAgICB4ID1cbiAgICAgICAgICAgICgoY29udGFpbmVyUmVjdC53aWR0aCAtIChjb250YWluZXJSZWN0LnJpZ2h0IC0gYm91bmRzUmVjdC5yaWdodCkpIC9cbiAgICAgICAgICAgICAgY29udGFpbmVyUmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgMTAwXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW91c2VZIDwgYm91bmRzUmVjdC50b3ApIHtcbiAgICAgICAgICB5ID0gKChib3VuZHNSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wKSAvIGNvbnRhaW5lclJlY3QuaGVpZ2h0KSAqIDEwMFxuICAgICAgICB9IGVsc2UgaWYgKG1vdXNlWSA+IGJvdW5kc1JlY3QuYm90dG9tKSB7XG4gICAgICAgICAgeSA9XG4gICAgICAgICAgICAoKGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gKGNvbnRhaW5lclJlY3QuYm90dG9tIC0gYm91bmRzUmVjdC5ib3R0b20pKSAvXG4gICAgICAgICAgICAgIGNvbnRhaW5lclJlY3QuaGVpZ2h0KSAqXG4gICAgICAgICAgICAxMDBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWNlbnRlcikge1xuICAgICAgICAgIHggPSB4T3V0T2ZCb3VuZHMgPyB4Q2VudGVyIDogeFxuICAgICAgICAgIHkgPSB5T3V0T2ZCb3VuZHMgPyB5Q2VudGVyIDogeVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH0sXG4gICAgW10sXG4gIClcblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgc2V0SXNEcmFnZ2luZyh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHsgeCwgeSB9ID0gZ2V0Q29vcmRpbmF0ZXMoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcblxuICAgIHNldFBvc2l0aW9uKHsgeCwgeSB9KVxuICB9XG5cbiAgY29uc3Qgb25Ecm9wID0gKCkgPT4ge1xuICAgIHNldElzRHJhZ2dpbmcoZmFsc2UpXG4gICAgb25EcmFnRW5kKHBvc2l0aW9uKVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNEcmFnZ2luZyB8fCAhZHJhZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBpZiAoY2hlY2tCb3VuZHMpIHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0LCBsZWZ0LCB0b3AsIHdpZHRoIH0gPSBkcmFnUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gZ2V0Q29vcmRpbmF0ZXMobGVmdCArIHdpZHRoIC8gMiwgdG9wICsgaGVpZ2h0IC8gMiwgdHJ1ZSlcbiAgICAgIG9uRHJhZ0VuZCh7IHgsIHkgfSlcbiAgICAgIHNldFBvc2l0aW9uKHsgeCwgeSB9KVxuICAgICAgc2V0Q2hlY2tCb3VuZHMoZmFsc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0sIFtnZXRDb29yZGluYXRlcywgaXNEcmFnZ2luZywgY2hlY2tCb3VuZHMsIHNldENoZWNrQm91bmRzLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55XSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvc2l0aW9uKHsgeDogaW5pdGlhbFBvc2l0aW9uLngsIHk6IGluaXRpYWxQb3NpdGlvbi55IH0pXG4gIH0sIFtpbml0aWFsUG9zaXRpb24ueCwgaW5pdGlhbFBvc2l0aW9uLnldKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtbXG4gICAgICAgIGAke2Jhc2VDbGFzc31fX2RyYWdnYWJsZS1jb250YWluZXJgLFxuICAgICAgICBpc0RyYWdnaW5nICYmIGAke2Jhc2VDbGFzc31fX2RyYWdnYWJsZS1jb250YWluZXItLWRyYWdnaW5nYCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpfVxuICAgICAgb25Nb3VzZU1vdmU9e2hhbmRsZU1vdXNlTW92ZX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17W2Ake2Jhc2VDbGFzc31fX2RyYWdnYWJsZWAsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX1cbiAgICAgICAgb25Nb3VzZURvd249e2hhbmRsZU1vdXNlRG93bn1cbiAgICAgICAgb25Nb3VzZVVwPXtvbkRyb3B9XG4gICAgICAgIHJlZj17ZHJhZ1JlZn1cbiAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7cG9zaXRpb24ueH0lYCwgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogYCR7cG9zaXRpb24ueX0lYCB9fVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIkVkaXRVcGxvYWQiLCJiYXNlQ2xhc3MiLCJJbnB1dCIsIm5hbWUiLCJvbkNoYW5nZSIsInZhbHVlIiwiZGl2IiwiY2xhc3NOYW1lIiwiaW5wdXQiLCJlIiwidGFyZ2V0IiwidHlwZSIsImZpbGVOYW1lIiwiZmlsZVNyYyIsImltYWdlQ2FjaGVUYWciLCJzaG93Q3JvcCIsInNob3dGb2NhbFBvaW50IiwiY2xvc2VNb2RhbCIsInVzZU1vZGFsIiwidCIsInVzZVRyYW5zbGF0aW9uIiwiZm9ybVF1ZXJ5UGFyYW1zIiwic2V0Rm9ybVF1ZXJ5UGFyYW1zIiwidXNlRm9ybVF1ZXJ5UGFyYW1zIiwidXBsb2FkRWRpdHMiLCJjcm9wIiwic2V0Q3JvcCIsInVzZVN0YXRlIiwiaGVpZ2h0IiwidW5pdCIsIndpZHRoIiwieCIsInkiLCJwb2ludFBvc2l0aW9uIiwic2V0UG9pbnRQb3NpdGlvbiIsImZvY2FsUG9pbnQiLCJjaGVja0JvdW5kcyIsInNldENoZWNrQm91bmRzIiwiZm9jYWxXcmFwUmVmIiwidXNlUmVmIiwiaW1hZ2VSZWYiLCJjcm9wUmVmIiwib3JpZ2luYWxIZWlnaHQiLCJjdXJyZW50IiwibmF0dXJhbEhlaWdodCIsIm9yaWdpbmFsV2lkdGgiLCJuYXR1cmFsV2lkdGgiLCJmaW5lVHVuZUNyb3AiLCJkaW1lbnNpb24iLCJpbnRWYWx1ZSIsInBhcnNlSW50IiwicGVyY2VudGFnZSIsImZpbmVUdW5lRm9jYWxQb2ludCIsImNvb3JkaW5hdGUiLCJwcmV2UG9zaXRpb24iLCJzYXZlRWRpdHMiLCJ1bmRlZmluZWQiLCJlZGl0RHJhd2VyU2x1ZyIsIm9uRHJhZ0VuZCIsIlJlYWN0IiwidXNlQ2FsbGJhY2siLCJjZW50ZXJGb2NhbFBvaW50IiwiY29udGFpbmVyUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdW5kc1JlY3QiLCJ4Q2VudGVyIiwibGVmdCIsInlDZW50ZXIiLCJ0b3AiLCJmaWxlU3JjVG9Vc2UiLCJoMiIsInRpdGxlIiwiQnV0dG9uIiwiYXJpYS1sYWJlbCIsImJ1dHRvblN0eWxlIiwib25DbGljayIsInJlZiIsInN0eWxlIiwiYXNwZWN0UmF0aW8iLCJSZWFjdENyb3AiLCJfIiwiYyIsIm9uQ29tcGxldGUiLCJyZW5kZXJTZWxlY3Rpb25BZGRvbiIsImltZyIsImFsdCIsInNyYyIsIkRyYWdnYWJsZUVsZW1lbnQiLCJib3VuZHNSZWYiLCJjb250YWluZXJSZWYiLCJpbml0aWFsUG9zaXRpb24iLCJQbHVzIiwiaDMiLCJzcGFuIiwidG9GaXhlZCIsImNoaWxkcmVuIiwicG9zaXRpb24iLCJzZXRQb3NpdGlvbiIsImlzRHJhZ2dpbmciLCJzZXRJc0RyYWdnaW5nIiwiZHJhZ1JlZiIsImdldENvb3JkaW5hdGVzIiwibW91c2VYQXJnIiwibW91c2VZQXJnIiwicmVjZW50ZXIiLCJtb3VzZVgiLCJtb3VzZVkiLCJ4T3V0T2ZCb3VuZHMiLCJyaWdodCIsInlPdXRPZkJvdW5kcyIsImJvdHRvbSIsImhhbmRsZU1vdXNlRG93biIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVNb3VzZU1vdmUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9uRHJvcCIsInVzZUVmZmVjdCIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwib25Nb3VzZU1vdmUiLCJvbk1vdXNlRG93biIsIm9uTW91c2VVcCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEyQmFBOzs7ZUFBQUE7Ozt1QkEzQlk7K0RBQ2U7OEJBQ1Q7dUVBQ2tCO1FBQzFDOzZEQUlVO2lDQUNrQjt3QkFDSjsrREFDWjtRQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFUCxNQUFNQyxZQUFZO0FBRWxCLE1BQU1DLFFBQXNGLENBQUMsRUFDM0ZDLElBQUksRUFDSkMsUUFBUSxFQUNSQyxLQUFLLEVBQ04saUJBQ0MsNkJBQUNDO1FBQUlDLFdBQVcsQ0FBQyxFQUFFTixVQUFVLE9BQU8sQ0FBQztPQUNsQ0Usb0JBQ0QsNkJBQUNLO1FBQU1MLE1BQU1BO1FBQU1DLFVBQVUsQ0FBQ0ssSUFBTUwsU0FBU0ssRUFBRUMsTUFBTSxDQUFDTCxLQUFLO1FBQUdNLE1BQUs7UUFBU04sT0FBT0E7O0FBSWhGLE1BQU1MLGFBT1IsQ0FBQyxFQUFFWSxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxRQUFRLEVBQUVDLGNBQWMsRUFBRTtJQUNsRSxNQUFNLEVBQUVDLFVBQVUsRUFBRSxHQUFHQyxJQUFBQSxlQUFRO0lBQy9CLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEdBQUdDLElBQUFBLDRCQUFjLEVBQUM7UUFBQztRQUFXO0tBQVM7SUFDbEQsTUFBTSxFQUFFQyxlQUFlLEVBQUVDLGtCQUFrQixFQUFFLEdBQUdDLElBQUFBLG1DQUFrQjtJQUNsRSxNQUFNLEVBQUVDLFdBQVcsRUFBRSxHQUFH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
@@ -0,0 +1,218 @@
1
+ @import '../../../scss/styles.scss';
2
+
3
+ $header-height: base(5);
4
+
5
+ .edit-upload {
6
+ --edit-upload-cell-spacing: calc(var(--base) * 1.5);
7
+ --edit-upload-sidebar-width: calc(350px + var(--gutter-h));
8
+ height: 100%;
9
+ margin-right: calc(var(--gutter-h) * -1);
10
+ margin-left: calc(var(--gutter-h) * -1);
11
+
12
+ &__header {
13
+ height: $header-height;
14
+ border-bottom: 1px solid var(--theme-elevation-150);
15
+ padding: 0 var(--gutter-h);
16
+ display: flex;
17
+ justify-content: space-between;
18
+ align-items: center;
19
+
20
+ & h2 {
21
+ margin: 0;
22
+ text-wrap: nowrap;
23
+ overflow: hidden;
24
+ text-overflow: ellipsis;
25
+ }
26
+ }
27
+
28
+ &__actions {
29
+ min-width: 350px;
30
+ margin-left: auto;
31
+ padding: base(0.5) 0 base(0.5) base(1.5);
32
+ justify-content: flex-end;
33
+ display: flex;
34
+ gap: base(1);
35
+ text-wrap: nowrap;
36
+ }
37
+
38
+ &__cancel,
39
+ &__save {
40
+ width: 50%;
41
+ }
42
+
43
+ &__toolWrap {
44
+ display: flex;
45
+ justify-content: flex-end;
46
+ height: (calc(100% - #{$header-height}));
47
+ }
48
+
49
+ .ReactCrop__selection-addon,
50
+ &__crop-window {
51
+ height: 100%;
52
+ width: 100%;
53
+ }
54
+
55
+ &__focal-wrapper {
56
+ position: relative;
57
+ display: inline-flex;
58
+ max-height: 100%;
59
+ }
60
+
61
+ &__draggable-container {
62
+ position: absolute;
63
+ left: 0;
64
+ right: 0;
65
+ bottom: 0;
66
+ top: 0;
67
+ pointer-events: none;
68
+
69
+ &--dragging {
70
+ pointer-events: all;
71
+
72
+ .edit-upload__focalPoint {
73
+ cursor: grabbing;
74
+ }
75
+ }
76
+ }
77
+
78
+ &__focalPoint {
79
+ position: absolute;
80
+ top: 50%;
81
+ left: 50%;
82
+ border-radius: 50%;
83
+ display: flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ cursor: grab;
87
+ width: 50px;
88
+ height: 50px;
89
+ transform: translate3d(-50%, -50%, 0);
90
+ pointer-events: all;
91
+
92
+ svg {
93
+ position: absolute;
94
+ left: 0;
95
+ right: 0;
96
+ top: 0;
97
+ bottom: 0;
98
+ background: rgba(0, 0, 0, 0.5);
99
+ border-radius: 100%;
100
+ width: base(2);
101
+ height: base(2);
102
+ color: white;
103
+ }
104
+ }
105
+
106
+ &__crop,
107
+ &__focalOnly {
108
+ padding: base(1.5) base(1.5) base(1.5) 0;
109
+ }
110
+
111
+ &__crop {
112
+ padding: var(--edit-upload-cell-spacing);
113
+ padding-left: var(--gutter-h);
114
+ display: flex;
115
+ align-items: flex-start;
116
+ height: 100%;
117
+ }
118
+
119
+ &__imageWrap {
120
+ position: relative;
121
+ }
122
+
123
+ &__point {
124
+ cursor: move;
125
+ position: absolute;
126
+ background: rgba(0, 0, 0, 0.5);
127
+ border-radius: 100%;
128
+
129
+ & svg {
130
+ width: base(2);
131
+ height: base(2);
132
+ }
133
+ }
134
+
135
+ &__sidebar {
136
+ border-left: 1px solid var(--theme-elevation-150);
137
+ padding-top: var(--edit-upload-cell-spacing);
138
+ min-width: var(--edit-upload-sidebar-width);
139
+
140
+ & > div:first-child {
141
+ margin-bottom: base(1);
142
+ }
143
+ }
144
+
145
+ &__groupWrap {
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: base(0.5);
149
+ padding-right: var(--gutter-h);
150
+ padding-left: var(--edit-upload-cell-spacing);
151
+ width: 100%;
152
+
153
+ + .edit-upload__groupWrap {
154
+ padding-top: var(--edit-upload-cell-spacing);
155
+ margin-top: var(--edit-upload-cell-spacing);
156
+ border-top: 1px solid var(--theme-elevation-150);
157
+ }
158
+ }
159
+
160
+ &__inputsWrap,
161
+ &__titleWrap {
162
+ display: flex;
163
+ gap: base(1);
164
+ }
165
+
166
+ &__titleWrap {
167
+ justify-content: space-between;
168
+ align-items: center;
169
+
170
+ & h3 {
171
+ margin: 0;
172
+ }
173
+ }
174
+
175
+ &__reset {
176
+ height: fit-content;
177
+ border-radius: var(--style-radius-s);
178
+ background-color: var(--theme-elevation-150);
179
+ padding: 0 base(0.25);
180
+ }
181
+
182
+ &__input {
183
+ flex: 1;
184
+ & input {
185
+ @include formInput;
186
+ }
187
+ }
188
+
189
+ @include mid-break {
190
+ --edit-upload-cell-spacing: var(--gutter-h);
191
+ &__sidebar {
192
+ padding-left: 0;
193
+ border-left: 0;
194
+ width: 100%;
195
+ }
196
+ &__toolWrap {
197
+ flex-direction: column-reverse;
198
+ }
199
+ }
200
+
201
+ @include small-break {
202
+ flex-direction: column;
203
+
204
+ &__focalPoint {
205
+ border-right: none;
206
+ padding: base(1) 0;
207
+ }
208
+
209
+ &__inputsWrap {
210
+ flex-direction: column;
211
+ gap: base(1);
212
+ }
213
+
214
+ &__sidebar {
215
+ min-width: 0;
216
+ }
217
+ }
218
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/admin/components/elements/FileDetails/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAMpC,OAAO,cAAc,CAAA;AAmBrB,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6FhC,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/admin/components/elements/FileDetails/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAOpC,OAAO,cAAc,CAAA;AAIrB,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4ChC,CAAA;AAED,eAAe,WAAW,CAAA"}