@payloadcms/ui 3.0.0-alpha.0 → 3.0.0-alpha.10

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 (452) hide show
  1. package/dist/@types/assets.d.js +3 -0
  2. package/dist/config.js +13 -0
  3. package/dist/elements/ArrayAction/index.js +120 -0
  4. package/dist/elements/ArrayAction/types.js +6 -0
  5. package/dist/elements/Autosave/index.d.ts.map +1 -1
  6. package/dist/elements/Autosave/index.js +207 -0
  7. package/dist/elements/Autosave/types.js +6 -0
  8. package/dist/elements/Banner/index.js +52 -0
  9. package/dist/elements/Banner/types.js +6 -0
  10. package/dist/elements/Button/index.js +166 -0
  11. package/dist/elements/Button/types.js +6 -0
  12. package/dist/elements/Card/index.js +46 -0
  13. package/dist/elements/Card/types.js +6 -0
  14. package/dist/elements/CodeEditor/CodeEditor.js +53 -0
  15. package/dist/elements/CodeEditor/index.js +68 -0
  16. package/dist/elements/CodeEditor/types.js +6 -0
  17. package/dist/elements/Collapsible/index.js +128 -0
  18. package/dist/elements/Collapsible/provider.js +90 -0
  19. package/dist/elements/Collapsible/types.js +6 -0
  20. package/dist/elements/ColumnSelector/index.js +109 -0
  21. package/dist/elements/ColumnSelector/types.js +6 -0
  22. package/dist/elements/CopyToClipboard/index.js +98 -0
  23. package/dist/elements/CopyToClipboard/types.js +6 -0
  24. package/dist/elements/DatePicker/DatePicker.js +147 -0
  25. package/dist/elements/DatePicker/index.js +63 -0
  26. package/dist/elements/DatePicker/types.js +6 -0
  27. package/dist/elements/DeleteDocument/index.js +178 -0
  28. package/dist/elements/DeleteDocument/types.js +6 -0
  29. package/dist/elements/DeleteMany/index.js +176 -0
  30. package/dist/elements/DeleteMany/types.js +6 -0
  31. package/dist/elements/DocumentControls/index.d.ts +2 -2
  32. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  33. package/dist/elements/DocumentControls/index.js +159 -0
  34. package/dist/elements/DocumentDrawer/DrawerContent.js +219 -0
  35. package/dist/elements/DocumentDrawer/index.js +185 -0
  36. package/dist/elements/DocumentDrawer/types.js +6 -0
  37. package/dist/elements/DocumentFields/index.js +55 -0
  38. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +23 -0
  39. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts.map +1 -1
  40. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +48 -0
  41. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +105 -0
  42. package/dist/elements/DocumentHeader/Tabs/getCustomViews.js +48 -0
  43. package/dist/elements/DocumentHeader/Tabs/getViewConfig.js +24 -0
  44. package/dist/elements/DocumentHeader/Tabs/index.js +84 -0
  45. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +27 -0
  46. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +75 -0
  47. package/dist/elements/DocumentHeader/index.js +81 -0
  48. package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +82 -0
  49. package/dist/elements/DraggableSortable/DraggableSortableItem/types.js +6 -0
  50. package/dist/elements/DraggableSortable/index.js +96 -0
  51. package/dist/elements/DraggableSortable/types.js +6 -0
  52. package/dist/elements/DraggableSortable/useDraggableSortable/index.js +32 -0
  53. package/dist/elements/DraggableSortable/useDraggableSortable/types.js +6 -0
  54. package/dist/elements/Drawer/index.d.ts +1 -1
  55. package/dist/elements/Drawer/index.js +156 -0
  56. package/dist/elements/Drawer/types.js +6 -0
  57. package/dist/elements/Drawer/useDrawerSlug.js +23 -0
  58. package/dist/elements/Dropzone/index.js +117 -0
  59. package/dist/elements/DuplicateDocument/index.js +217 -0
  60. package/dist/elements/DuplicateDocument/types.js +6 -0
  61. package/dist/elements/EditMany/index.d.ts.map +1 -1
  62. package/dist/elements/EditMany/index.js +277 -0
  63. package/dist/elements/EditMany/types.js +6 -0
  64. package/dist/elements/EditUpload/index.js +390 -0
  65. package/dist/elements/ErrorPill/index.js +37 -0
  66. package/dist/elements/ErrorPill/types.js +6 -0
  67. package/dist/elements/FieldSelect/index.js +138 -0
  68. package/dist/elements/FileDetails/FileMeta/index.js +96 -0
  69. package/dist/elements/FileDetails/FileMeta/types.js +6 -0
  70. package/dist/elements/FileDetails/index.js +59 -0
  71. package/dist/elements/FileDetails/types.js +6 -0
  72. package/dist/elements/GenerateConfirmation/index.js +72 -0
  73. package/dist/elements/GenerateConfirmation/types.js +6 -0
  74. package/dist/elements/GetFilterOptions/index.js +57 -0
  75. package/dist/elements/Gutter/index.js +72 -0
  76. package/dist/elements/Hamburger/index.js +54 -0
  77. package/dist/elements/Header/index.d.ts.map +1 -1
  78. package/dist/elements/Header/index.js +140 -0
  79. package/dist/elements/HydrateClientUser/index.js +28 -0
  80. package/dist/elements/IDLabel/index.js +28 -0
  81. package/dist/elements/ListControls/getTextFieldsToBeSearched.js +21 -0
  82. package/dist/elements/ListControls/index.js +149 -0
  83. package/dist/elements/ListControls/types.js +6 -0
  84. package/dist/elements/ListDrawer/DrawerContent.js +315 -0
  85. package/dist/elements/ListDrawer/index.js +198 -0
  86. package/dist/elements/ListDrawer/types.js +6 -0
  87. package/dist/elements/ListSelection/index.js +83 -0
  88. package/dist/elements/Loading/index.js +103 -0
  89. package/dist/elements/LoadingOverlay/index.js +130 -0
  90. package/dist/elements/LoadingOverlay/reducer.js +49 -0
  91. package/dist/elements/LoadingOverlay/types.js +6 -0
  92. package/dist/elements/Localizer/LocalizerLabel/index.js +43 -0
  93. package/dist/elements/Localizer/index.js +121 -0
  94. package/dist/elements/Logout/index.d.ts.map +1 -1
  95. package/dist/elements/Logout/index.js +49 -0
  96. package/dist/elements/Nav/NavHamburger/index.js +34 -0
  97. package/dist/elements/Nav/NavToggler/index.js +53 -0
  98. package/dist/elements/Nav/NavWrapper/index.js +34 -0
  99. package/dist/elements/Nav/context.js +150 -0
  100. package/dist/elements/Nav/index.d.ts.map +1 -1
  101. package/dist/elements/Nav/index.js +106 -0
  102. package/dist/elements/NavGroup/index.js +129 -0
  103. package/dist/elements/Pagination/ClickableArrow/index.js +36 -0
  104. package/dist/elements/Pagination/ClickableArrow/types.js +6 -0
  105. package/dist/elements/Pagination/Page/index.js +33 -0
  106. package/dist/elements/Pagination/Page/types.js +6 -0
  107. package/dist/elements/Pagination/Separator/index.js +22 -0
  108. package/dist/elements/Pagination/index.js +126 -0
  109. package/dist/elements/Pagination/types.js +6 -0
  110. package/dist/elements/PerPage/index.d.ts.map +1 -1
  111. package/dist/elements/PerPage/index.js +115 -0
  112. package/dist/elements/Pill/index.js +93 -0
  113. package/dist/elements/Pill/types.js +6 -0
  114. package/dist/elements/Popup/PopupButtonList/index.d.ts +2 -2
  115. package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  116. package/dist/elements/Popup/PopupButtonList/index.js +118 -0
  117. package/dist/elements/Popup/PopupTrigger/index.js +51 -0
  118. package/dist/elements/Popup/PopupTrigger/types.js +6 -0
  119. package/dist/elements/Popup/index.js +193 -0
  120. package/dist/elements/Popup/types.js +6 -0
  121. package/dist/elements/PreviewButton/index.js +129 -0
  122. package/dist/elements/PreviewSizes/index.js +163 -0
  123. package/dist/elements/Publish/index.js +153 -0
  124. package/dist/elements/PublishMany/index.js +169 -0
  125. package/dist/elements/PublishMany/types.js +6 -0
  126. package/dist/elements/ReactSelect/ClearIndicator/index.js +31 -0
  127. package/dist/elements/ReactSelect/Control/index.js +49 -0
  128. package/dist/elements/ReactSelect/MultiValue/index.js +55 -0
  129. package/dist/elements/ReactSelect/MultiValueLabel/index.js +34 -0
  130. package/dist/elements/ReactSelect/MultiValueRemove/index.js +48 -0
  131. package/dist/elements/ReactSelect/SingleValue/index.js +30 -0
  132. package/dist/elements/ReactSelect/ValueContainer/index.js +29 -0
  133. package/dist/elements/ReactSelect/index.js +177 -0
  134. package/dist/elements/ReactSelect/types.js +6 -0
  135. package/dist/elements/RenderCustomComponent/index.js +28 -0
  136. package/dist/elements/RenderCustomComponent/types.js +6 -0
  137. package/dist/elements/RenderTitle/index.js +42 -0
  138. package/dist/elements/RenderTitle/types.js +6 -0
  139. package/dist/elements/Save/index.js +103 -0
  140. package/dist/elements/SaveDraft/index.js +147 -0
  141. package/dist/elements/SearchFilter/index.d.ts.map +1 -1
  142. package/dist/elements/SearchFilter/index.js +139 -0
  143. package/dist/elements/SearchFilter/types.js +6 -0
  144. package/dist/elements/SelectAll/index.d.ts.map +1 -1
  145. package/dist/elements/SelectAll/index.js +37 -0
  146. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  147. package/dist/elements/SelectRow/index.js +33 -0
  148. package/dist/elements/ShimmerEffect/index.js +96 -0
  149. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  150. package/dist/elements/SortColumn/index.js +139 -0
  151. package/dist/elements/SortColumn/types.js +6 -0
  152. package/dist/elements/SortComplex/index.d.ts.map +1 -1
  153. package/dist/elements/SortComplex/index.js +157 -0
  154. package/dist/elements/SortComplex/types.js +6 -0
  155. package/dist/elements/Status/index.js +202 -0
  156. package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
  157. package/dist/elements/StayLoggedIn/index.js +57 -0
  158. package/dist/elements/StayLoggedIn/types.js +6 -0
  159. package/dist/elements/StepNav/SetStepNav.js +25 -0
  160. package/dist/elements/StepNav/index.d.ts.map +1 -1
  161. package/dist/elements/StepNav/index.js +127 -0
  162. package/dist/elements/StepNav/types.js +6 -0
  163. package/dist/elements/Table/TableCellProvider/index.js +47 -0
  164. package/dist/elements/Table/index.js +63 -0
  165. package/dist/elements/Table/types.js +6 -0
  166. package/dist/elements/TableColumns/buildColumns.d.ts.map +1 -1
  167. package/dist/elements/TableColumns/buildColumns.js +83 -0
  168. package/dist/elements/TableColumns/columnReducer.js +47 -0
  169. package/dist/elements/TableColumns/index.js +199 -0
  170. package/dist/elements/Thumbnail/index.js +89 -0
  171. package/dist/elements/Thumbnail/types.js +6 -0
  172. package/dist/elements/ThumbnailCard/index.js +54 -0
  173. package/dist/elements/ThumbnailCard/types.js +6 -0
  174. package/dist/elements/Tooltip/index.js +114 -0
  175. package/dist/elements/Tooltip/types.js +6 -0
  176. package/dist/elements/Translation/index.js +81 -0
  177. package/dist/elements/UnpublishMany/index.js +169 -0
  178. package/dist/elements/UnpublishMany/types.js +6 -0
  179. package/dist/elements/Upload/index.js +250 -0
  180. package/dist/elements/Upload/types.js +6 -0
  181. package/dist/elements/ViewDescription/index.js +38 -0
  182. package/dist/elements/ViewDescription/types.js +21 -0
  183. package/dist/elements/WhereBuilder/Condition/Date/index.js +32 -0
  184. package/dist/elements/WhereBuilder/Condition/Date/types.js +6 -0
  185. package/dist/elements/WhereBuilder/Condition/Number/index.js +33 -0
  186. package/dist/elements/WhereBuilder/Condition/Number/types.js +6 -0
  187. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +337 -0
  188. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js +98 -0
  189. package/dist/elements/WhereBuilder/Condition/Relationship/types.js +6 -0
  190. package/dist/elements/WhereBuilder/Condition/Select/index.js +96 -0
  191. package/dist/elements/WhereBuilder/Condition/Select/types.js +6 -0
  192. package/dist/elements/WhereBuilder/Condition/Text/index.js +33 -0
  193. package/dist/elements/WhereBuilder/Condition/Text/types.js +6 -0
  194. package/dist/elements/WhereBuilder/Condition/index.js +203 -0
  195. package/dist/elements/WhereBuilder/Condition/types.js +6 -0
  196. package/dist/elements/WhereBuilder/field-types.js +185 -0
  197. package/dist/elements/WhereBuilder/index.js +235 -0
  198. package/dist/elements/WhereBuilder/reducer.js +88 -0
  199. package/dist/elements/WhereBuilder/transformWhereQuery.js +57 -0
  200. package/dist/elements/WhereBuilder/types.js +6 -0
  201. package/dist/elements/WhereBuilder/validateWhereQuery.js +46 -0
  202. package/dist/exports/assets.js +27 -0
  203. package/dist/exports/elements.d.ts +6 -0
  204. package/dist/exports/elements.d.ts.map +1 -1
  205. package/dist/exports/elements.js +250 -0
  206. package/dist/exports/forms.js +158 -0
  207. package/dist/exports/graphics.js +27 -0
  208. package/dist/exports/hooks.js +55 -0
  209. package/dist/exports/icons.js +82 -0
  210. package/dist/exports/index.js +28 -0
  211. package/dist/exports/providers.js +116 -0
  212. package/dist/exports/templates.js +22 -0
  213. package/dist/exports/types.js +6 -0
  214. package/dist/exports/utilities.js +62 -0
  215. package/dist/forms/Error/index.js +43 -0
  216. package/dist/forms/FieldDescription/index.js +38 -0
  217. package/dist/forms/FieldDescription/types.js +6 -0
  218. package/dist/forms/FieldPathProvider/index.js +44 -0
  219. package/dist/forms/FieldPathProvider/types.js +6 -0
  220. package/dist/forms/Form/buildFieldSchemaMap.js +54 -0
  221. package/dist/forms/Form/buildInitialState.js +26 -0
  222. package/dist/forms/Form/context.js +84 -0
  223. package/dist/forms/Form/createNestedFieldPath.js +25 -0
  224. package/dist/forms/Form/errorMessages.js +15 -0
  225. package/dist/forms/Form/fieldReducer.js +286 -0
  226. package/dist/forms/Form/getDataByPath.js +29 -0
  227. package/dist/forms/Form/getSiblingData.js +50 -0
  228. package/dist/forms/Form/index.js +565 -0
  229. package/dist/forms/Form/initContextState.js +45 -0
  230. package/dist/forms/Form/mergeServerFormState.js +45 -0
  231. package/dist/forms/Form/reduceFieldsToValues.js +34 -0
  232. package/dist/forms/Form/rows.js +53 -0
  233. package/dist/forms/Form/types.js +6 -0
  234. package/dist/forms/Label/index.js +36 -0
  235. package/dist/forms/NullifyField/index.js +103 -0
  236. package/dist/forms/RenderFields/RenderField.js +30 -0
  237. package/dist/forms/RenderFields/index.js +66 -0
  238. package/dist/forms/RenderFields/types.js +6 -0
  239. package/dist/forms/RowLabel/index.js +50 -0
  240. package/dist/forms/RowLabel/types.d.ts +1 -1
  241. package/dist/forms/RowLabel/types.d.ts.map +1 -1
  242. package/dist/forms/RowLabel/types.js +21 -0
  243. package/dist/forms/Submit/index.js +75 -0
  244. package/dist/forms/WatchChildErrors/buildPathSegments.js +37 -0
  245. package/dist/forms/WatchChildErrors/getFieldStateFromPaths.js +35 -0
  246. package/dist/forms/WatchChildErrors/getNestedFieldState.js +28 -0
  247. package/dist/forms/WatchChildErrors/index.js +41 -0
  248. package/dist/forms/fields/Array/ArrayRow.js +87 -0
  249. package/dist/forms/fields/Array/index.js +305 -0
  250. package/dist/forms/fields/Array/types.js +6 -0
  251. package/dist/forms/fields/Blocks/BlockRow.js +101 -0
  252. package/dist/forms/fields/Blocks/BlocksDrawer/BlockSearch/index.js +37 -0
  253. package/dist/forms/fields/Blocks/BlocksDrawer/index.js +134 -0
  254. package/dist/forms/fields/Blocks/BlocksDrawer/types.js +6 -0
  255. package/dist/forms/fields/Blocks/RowActions.js +52 -0
  256. package/dist/forms/fields/Blocks/SectionTitle/index.js +54 -0
  257. package/dist/forms/fields/Blocks/SectionTitle/types.js +6 -0
  258. package/dist/forms/fields/Blocks/index.js +317 -0
  259. package/dist/forms/fields/Blocks/types.js +6 -0
  260. package/dist/forms/fields/Checkbox/Input.d.ts.map +1 -1
  261. package/dist/forms/fields/Checkbox/Input.js +57 -0
  262. package/dist/forms/fields/Checkbox/index.js +134 -0
  263. package/dist/forms/fields/Checkbox/types.js +6 -0
  264. package/dist/forms/fields/Code/index.js +115 -0
  265. package/dist/forms/fields/Code/types.js +6 -0
  266. package/dist/forms/fields/Collapsible/index.js +169 -0
  267. package/dist/forms/fields/Collapsible/types.js +6 -0
  268. package/dist/forms/fields/ConfirmPassword/index.js +112 -0
  269. package/dist/forms/fields/ConfirmPassword/types.js +6 -0
  270. package/dist/forms/fields/DateTime/index.js +115 -0
  271. package/dist/forms/fields/DateTime/types.js +6 -0
  272. package/dist/forms/fields/Email/index.js +121 -0
  273. package/dist/forms/fields/Email/types.js +6 -0
  274. package/dist/forms/fields/Group/index.js +127 -0
  275. package/dist/forms/fields/Group/provider.js +74 -0
  276. package/dist/forms/fields/Group/types.js +6 -0
  277. package/dist/forms/fields/HiddenInput/index.js +88 -0
  278. package/dist/forms/fields/HiddenInput/types.js +6 -0
  279. package/dist/forms/fields/JSON/index.js +137 -0
  280. package/dist/forms/fields/JSON/types.js +6 -0
  281. package/dist/forms/fields/Number/index.js +212 -0
  282. package/dist/forms/fields/Number/types.js +6 -0
  283. package/dist/forms/fields/Password/index.js +116 -0
  284. package/dist/forms/fields/Password/types.js +6 -0
  285. package/dist/forms/fields/Point/index.js +147 -0
  286. package/dist/forms/fields/Point/types.js +6 -0
  287. package/dist/forms/fields/RadioGroup/Radio/index.js +45 -0
  288. package/dist/forms/fields/RadioGroup/index.js +147 -0
  289. package/dist/forms/fields/RadioGroup/types.js +6 -0
  290. package/dist/forms/fields/Relationship/AddNew/index.js +216 -0
  291. package/dist/forms/fields/Relationship/AddNew/types.js +6 -0
  292. package/dist/forms/fields/Relationship/AddNew/useRelatedCollections.js +27 -0
  293. package/dist/forms/fields/Relationship/createRelationMap.js +59 -0
  294. package/dist/forms/fields/Relationship/findOptionsByValue.js +45 -0
  295. package/dist/forms/fields/Relationship/index.js +509 -0
  296. package/dist/forms/fields/Relationship/optionsReducer.js +126 -0
  297. package/dist/forms/fields/Relationship/select-components/MultiValueLabel/index.js +109 -0
  298. package/dist/forms/fields/Relationship/select-components/SingleValue/index.js +108 -0
  299. package/dist/forms/fields/Relationship/types.js +6 -0
  300. package/dist/forms/fields/RichText/index.js +16 -0
  301. package/dist/forms/fields/RichText/types.js +6 -0
  302. package/dist/forms/fields/Row/index.js +42 -0
  303. package/dist/forms/fields/Row/provider.js +74 -0
  304. package/dist/forms/fields/Row/types.js +6 -0
  305. package/dist/forms/fields/Select/index.js +183 -0
  306. package/dist/forms/fields/Select/types.js +6 -0
  307. package/dist/forms/fields/Tabs/Tab/index.js +85 -0
  308. package/dist/forms/fields/Tabs/index.js +167 -0
  309. package/dist/forms/fields/Tabs/provider.js +74 -0
  310. package/dist/forms/fields/Tabs/types.js +6 -0
  311. package/dist/forms/fields/Text/index.js +194 -0
  312. package/dist/forms/fields/Text/types.js +6 -0
  313. package/dist/forms/fields/Textarea/index.js +133 -0
  314. package/dist/forms/fields/Textarea/types.js +6 -0
  315. package/dist/forms/fields/UI/index.js +16 -0
  316. package/dist/forms/fields/Upload/Input.js +3 -0
  317. package/dist/forms/fields/Upload/index.js +210 -0
  318. package/dist/forms/fields/Upload/types.js +6 -0
  319. package/dist/forms/fields/getFilterOptionsQuery.js +39 -0
  320. package/dist/forms/fields/index.js +67 -0
  321. package/dist/forms/fields/shared.d.ts +1 -1
  322. package/dist/forms/fields/shared.d.ts.map +1 -1
  323. package/dist/forms/fields/shared.js +29 -0
  324. package/dist/forms/useField/index.js +169 -0
  325. package/dist/forms/useField/types.js +6 -0
  326. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js +335 -0
  327. package/dist/forms/utilities/buildStateFromSchema/buildStateFromSchema.spec.js +76 -0
  328. package/dist/forms/utilities/buildStateFromSchema/index.js +35 -0
  329. package/dist/forms/utilities/buildStateFromSchema/iterateFields.js +48 -0
  330. package/dist/forms/withCondition/WatchCondition.js +66 -0
  331. package/dist/forms/withCondition/index.js +33 -0
  332. package/dist/graphics/Account/Default/index.js +43 -0
  333. package/dist/graphics/Account/Gravatar/index.js +42 -0
  334. package/dist/graphics/Account/index.js +50 -0
  335. package/dist/graphics/DefaultBlockImage/index.js +84 -0
  336. package/dist/graphics/ExternalLink/index.js +34 -0
  337. package/dist/graphics/File/index.js +36 -0
  338. package/dist/graphics/Icon/index.js +64 -0
  339. package/dist/graphics/Logo/index.js +60 -0
  340. package/dist/graphics/Search/index.js +42 -0
  341. package/dist/hooks/useAdminThumbnail.js +17 -0
  342. package/dist/hooks/useDebounce.js +31 -0
  343. package/dist/hooks/useDebouncedCallback.js +29 -0
  344. package/dist/hooks/useDebouncedEffect.js +32 -0
  345. package/dist/hooks/useDelay.js +82 -0
  346. package/dist/hooks/useDelayedRender.js +97 -0
  347. package/dist/hooks/useHotkey.js +129 -0
  348. package/dist/hooks/useIntersect.js +39 -0
  349. package/dist/hooks/usePayloadAPI.js +94 -0
  350. package/dist/hooks/useResize.js +59 -0
  351. package/dist/hooks/useThrottledEffect.js +31 -0
  352. package/dist/hooks/useThumbnail.js +57 -0
  353. package/dist/hooks/useUseAsTitle.js +19 -0
  354. package/dist/icons/Calendar/index.js +48 -0
  355. package/dist/icons/Check/index.js +34 -0
  356. package/dist/icons/Chevron/index.js +36 -0
  357. package/dist/icons/CloseMenu/index.js +39 -0
  358. package/dist/icons/CodeBlock/index.js +32 -0
  359. package/dist/icons/Copy/index.js +33 -0
  360. package/dist/icons/DragHandle/index.js +57 -0
  361. package/dist/icons/Edit/index.js +37 -0
  362. package/dist/icons/Line/index.js +30 -0
  363. package/dist/icons/Link/index.js +33 -0
  364. package/dist/icons/LogOut/index.js +37 -0
  365. package/dist/icons/Menu/index.js +45 -0
  366. package/dist/icons/MinimizeMaximize/index.js +87 -0
  367. package/dist/icons/More/index.js +42 -0
  368. package/dist/icons/Plus/index.js +36 -0
  369. package/dist/icons/Search/index.js +36 -0
  370. package/dist/icons/Swap/index.js +43 -0
  371. package/dist/icons/X/index.js +41 -0
  372. package/dist/index.js +20 -0
  373. package/dist/providers/ActionsProvider/SetViewActions/index.d.ts +6 -0
  374. package/dist/providers/ActionsProvider/SetViewActions/index.d.ts.map +1 -0
  375. package/dist/providers/ActionsProvider/SetViewActions/index.js +28 -0
  376. package/dist/providers/ActionsProvider/index.d.ts +3 -2
  377. package/dist/providers/ActionsProvider/index.d.ts.map +1 -1
  378. package/dist/providers/ActionsProvider/index.js +89 -0
  379. package/dist/providers/Auth/HydrateClientUser/index.js +28 -0
  380. package/dist/providers/Auth/index.js +373 -0
  381. package/dist/providers/Auth/types.js +6 -0
  382. package/dist/providers/ClientFunction/index.js +65 -0
  383. package/dist/providers/ComponentMapProvider/index.d.ts +4 -0
  384. package/dist/providers/ComponentMapProvider/index.d.ts.map +1 -1
  385. package/dist/providers/ComponentMapProvider/index.js +110 -0
  386. package/dist/providers/Config/index.js +70 -0
  387. package/dist/providers/CustomProvider/index.js +38 -0
  388. package/dist/providers/DocumentEvents/index.js +77 -0
  389. package/dist/providers/DocumentEvents/types.js +6 -0
  390. package/dist/providers/DocumentInfo/SetDocumentInfo/index.js +34 -0
  391. package/dist/providers/DocumentInfo/index.js +353 -0
  392. package/dist/providers/DocumentInfo/types.js +6 -0
  393. package/dist/providers/EditDepth/index.js +71 -0
  394. package/dist/providers/FormQueryParams/index.js +77 -0
  395. package/dist/providers/ListInfo/index.js +78 -0
  396. package/dist/providers/ListInfo/types.d.ts +2 -2
  397. package/dist/providers/ListInfo/types.d.ts.map +1 -1
  398. package/dist/providers/ListInfo/types.js +6 -0
  399. package/dist/providers/Locale/index.js +122 -0
  400. package/dist/providers/OperationProvider/index.js +71 -0
  401. package/dist/providers/Params/index.js +72 -0
  402. package/dist/providers/Portal/index.js +20 -0
  403. package/dist/providers/Preferences/index.js +184 -0
  404. package/dist/providers/Root/index.js +103 -0
  405. package/dist/providers/SearchParams/index.js +119 -0
  406. package/dist/providers/SearchParams/types.js +6 -0
  407. package/dist/providers/SelectionProvider/index.js +218 -0
  408. package/dist/providers/Theme/index.d.ts +6 -3
  409. package/dist/providers/Theme/index.d.ts.map +1 -1
  410. package/dist/providers/Theme/index.js +121 -0
  411. package/dist/providers/Theme/types.d.ts +1 -0
  412. package/dist/providers/Theme/types.d.ts.map +1 -1
  413. package/dist/providers/Theme/types.js +6 -0
  414. package/dist/providers/Theme/utilities.js +35 -0
  415. package/dist/providers/Translation/index.js +92 -0
  416. package/dist/scss/toastify.scss +0 -1
  417. package/dist/templates/Default/NavHamburger/index.js +28 -0
  418. package/dist/templates/Default/Wrapper/index.js +32 -0
  419. package/dist/templates/Default/index.js +88 -0
  420. package/dist/templates/Default/types.js +6 -0
  421. package/dist/templates/Minimal/index.js +34 -0
  422. package/dist/templates/Minimal/types.js +6 -0
  423. package/dist/utilities/api.js +98 -0
  424. package/dist/utilities/arraysHaveSameStrings.js +28 -0
  425. package/dist/utilities/buildComponentMap/index.d.ts.map +1 -1
  426. package/dist/utilities/buildComponentMap/index.js +106 -0
  427. package/dist/utilities/buildComponentMap/mapActions.d.ts +7 -0
  428. package/dist/utilities/buildComponentMap/mapActions.d.ts.map +1 -0
  429. package/dist/utilities/buildComponentMap/mapActions.js +54 -0
  430. package/dist/utilities/buildComponentMap/mapFields.js +318 -0
  431. package/dist/utilities/buildComponentMap/types.d.ts +7 -0
  432. package/dist/utilities/buildComponentMap/types.d.ts.map +1 -1
  433. package/dist/utilities/buildComponentMap/types.js +6 -0
  434. package/dist/utilities/buildFieldSchemaMap/index.js +36 -0
  435. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +94 -0
  436. package/dist/utilities/buildFieldSchemaMap/types.js +6 -0
  437. package/dist/utilities/canUseDOM.js +13 -0
  438. package/dist/utilities/findLocaleFromCode.js +18 -0
  439. package/dist/utilities/formatDate/getSupportedDateLocale.js +21 -0
  440. package/dist/utilities/formatDate/index.js +78 -0
  441. package/dist/utilities/formatDocTitle.js +33 -0
  442. package/dist/utilities/formatFields.js +14 -0
  443. package/dist/utilities/getFormState.js +28 -0
  444. package/dist/utilities/getOffsetTop.js +26 -0
  445. package/dist/utilities/getRequestLanguage.js +17 -0
  446. package/dist/utilities/getSupportedMonacoLocale.js +26 -0
  447. package/dist/utilities/groupNavItems.js +61 -0
  448. package/dist/utilities/scrollToID.js +22 -0
  449. package/dist/utilities/setsAreEqual.js +17 -0
  450. package/dist/utilities/withMergedProps/index.js +27 -0
  451. package/dist/views/Global/RenderCustomView.js +3 -0
  452. package/package.json +8 -8
@@ -0,0 +1,565 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return _default;
10
+ }
11
+ });
12
+ const _deepequal = /*#__PURE__*/ _interop_require_default(require("deep-equal"));
13
+ const _navigation = require("next/navigation");
14
+ const _objecttoformdata = require("object-to-formdata");
15
+ const _utilities = require("payload/utilities");
16
+ const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
17
+ const _reacttoastify = require("react-toastify");
18
+ const _useDebouncedEffect = require("../../hooks/useDebouncedEffect");
19
+ const _useThrottledEffect = /*#__PURE__*/ _interop_require_default(require("../../hooks/useThrottledEffect"));
20
+ const _Auth = require("../../providers/Auth");
21
+ const _Config = require("../../providers/Config");
22
+ const _DocumentInfo = require("../../providers/DocumentInfo");
23
+ const _Locale = require("../../providers/Locale");
24
+ const _OperationProvider = require("../../providers/OperationProvider");
25
+ const _Translation = require("../../providers/Translation");
26
+ const _api = require("../../utilities/api");
27
+ const _getFormState = require("../../utilities/getFormState");
28
+ const _context = require("./context");
29
+ const _errorMessages = /*#__PURE__*/ _interop_require_default(require("./errorMessages"));
30
+ const _fieldReducer = require("./fieldReducer");
31
+ const _getDataByPath = /*#__PURE__*/ _interop_require_default(require("./getDataByPath"));
32
+ const _getSiblingData = /*#__PURE__*/ _interop_require_default(require("./getSiblingData"));
33
+ const _initContextState = /*#__PURE__*/ _interop_require_default(require("./initContextState"));
34
+ const _mergeServerFormState = require("./mergeServerFormState");
35
+ const _reduceFieldsToValues = /*#__PURE__*/ _interop_require_default(require("./reduceFieldsToValues"));
36
+ function _interop_require_default(obj) {
37
+ return obj && obj.__esModule ? obj : {
38
+ default: obj
39
+ };
40
+ }
41
+ function _getRequireWildcardCache(nodeInterop) {
42
+ if (typeof WeakMap !== "function") return null;
43
+ var cacheBabelInterop = new WeakMap();
44
+ var cacheNodeInterop = new WeakMap();
45
+ return (_getRequireWildcardCache = function(nodeInterop) {
46
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
47
+ })(nodeInterop);
48
+ }
49
+ function _interop_require_wildcard(obj, nodeInterop) {
50
+ if (!nodeInterop && obj && obj.__esModule) {
51
+ return obj;
52
+ }
53
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
54
+ return {
55
+ default: obj
56
+ };
57
+ }
58
+ var cache = _getRequireWildcardCache(nodeInterop);
59
+ if (cache && cache.has(obj)) {
60
+ return cache.get(obj);
61
+ }
62
+ var newObj = {
63
+ __proto__: null
64
+ };
65
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
66
+ for(var key in obj){
67
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
68
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
69
+ if (desc && (desc.get || desc.set)) {
70
+ Object.defineProperty(newObj, key, desc);
71
+ } else {
72
+ newObj[key] = obj[key];
73
+ }
74
+ }
75
+ }
76
+ newObj.default = obj;
77
+ if (cache) {
78
+ cache.set(obj, newObj);
79
+ }
80
+ return newObj;
81
+ }
82
+ const baseClass = 'form';
83
+ const Form = (props)=>{
84
+ const { id, getDocPreferences } = (0, _DocumentInfo.useDocumentInfo)();
85
+ const { action, children, className, disableSuccessStatus, disabled, // fields: fieldsFromProps = collection?.fields || global?.fields,
86
+ beforeSubmit, handleResponse, initialState, onChange, onSubmit, onSuccess, redirect, submitted: submittedFromProps, uuid, waitForAutocomplete } = props;
87
+ const method = 'method' in props ? props.method : undefined;
88
+ const router = (0, _navigation.useRouter)();
89
+ const { code: locale } = (0, _Locale.useLocale)();
90
+ const { i18n, t } = (0, _Translation.useTranslation)();
91
+ const { refreshCookie, user } = (0, _Auth.useAuth)();
92
+ const operation = (0, _OperationProvider.useOperation)();
93
+ const config = (0, _Config.useConfig)();
94
+ const { routes: { api: apiRoute }, serverURL } = config;
95
+ const [modified, setModified] = (0, _react.useState)(false);
96
+ const [processing, setProcessing] = (0, _react.useState)(false);
97
+ const [submitted, setSubmitted] = (0, _react.useState)(false);
98
+ const formRef = (0, _react.useRef)(null);
99
+ const contextRef = (0, _react.useRef)({});
100
+ const { collectionSlug, globalSlug } = (0, _DocumentInfo.useDocumentInfo)();
101
+ const fieldsReducer = (0, _react.useReducer)(_fieldReducer.fieldReducer, {}, ()=>initialState);
102
+ /**
103
+ * `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,
104
+ * which calls the fieldReducer, which then updates the state.
105
+ */ const [fields, dispatchFields] = fieldsReducer;
106
+ contextRef.current.fields = fields;
107
+ const validateForm = (0, _react.useCallback)(async ()=>{
108
+ const validatedFieldState = {};
109
+ let isValid = true;
110
+ const dataFromContext = contextRef.current.getData();
111
+ const data = dataFromContext;
112
+ const validationPromises = Object.entries(contextRef.current.fields).map(async ([path, field])=>{
113
+ const validatedField = {
114
+ ...field,
115
+ valid: true
116
+ };
117
+ if (field.passesCondition !== false) {
118
+ let validationResult = true;
119
+ if (typeof field.validate === 'function') {
120
+ let valueToValidate = field.value;
121
+ if (field?.rows && Array.isArray(field.rows)) {
122
+ valueToValidate = contextRef.current.getDataByPath(path);
123
+ }
124
+ validationResult = await field.validate(valueToValidate, {
125
+ id,
126
+ config,
127
+ data,
128
+ operation,
129
+ siblingData: contextRef.current.getSiblingData(path),
130
+ t,
131
+ user
132
+ });
133
+ }
134
+ if (typeof validationResult === 'string') {
135
+ validatedField.errorMessage = validationResult;
136
+ validatedField.valid = false;
137
+ isValid = false;
138
+ }
139
+ }
140
+ validatedFieldState[path] = validatedField;
141
+ });
142
+ await Promise.all(validationPromises);
143
+ if (!(0, _deepequal.default)(contextRef.current.fields, validatedFieldState)) {
144
+ dispatchFields({
145
+ type: 'REPLACE_STATE',
146
+ state: validatedFieldState
147
+ });
148
+ }
149
+ return isValid;
150
+ }, [
151
+ id,
152
+ user,
153
+ operation,
154
+ t,
155
+ dispatchFields,
156
+ config
157
+ ]);
158
+ const submit = (0, _react.useCallback)(async (options = {}, e)=>{
159
+ const { action: actionToUse = action, method: methodToUse = method, overrides = {}, skipValidation } = options;
160
+ if (disabled) {
161
+ if (e) {
162
+ e.preventDefault();
163
+ }
164
+ return;
165
+ }
166
+ if (e) {
167
+ e.stopPropagation();
168
+ e.preventDefault();
169
+ }
170
+ setProcessing(true);
171
+ setSubmitted(true);
172
+ if (waitForAutocomplete) await (0, _utilities.wait)(100);
173
+ // Execute server side validations
174
+ if (Array.isArray(beforeSubmit)) {
175
+ let revalidatedFormState;
176
+ await beforeSubmit.reduce(async (priorOnChange, beforeSubmitFn)=>{
177
+ await priorOnChange;
178
+ const result = await beforeSubmitFn({
179
+ formState: fields
180
+ });
181
+ revalidatedFormState = result;
182
+ }, Promise.resolve());
183
+ const isValid = Object.entries(revalidatedFormState).every(([, field])=>field.valid);
184
+ if (!isValid) {
185
+ setProcessing(false);
186
+ return dispatchFields({
187
+ type: 'REPLACE_STATE',
188
+ state: revalidatedFormState
189
+ });
190
+ }
191
+ }
192
+ const isValid = skipValidation ? true : await contextRef.current.validateForm();
193
+ // If not valid, prevent submission
194
+ if (!isValid) {
195
+ _reacttoastify.toast.error(t('error:correctInvalidFields'));
196
+ setProcessing(false);
197
+ return;
198
+ }
199
+ // If submit handler comes through via props, run that
200
+ if (onSubmit) {
201
+ const data = {
202
+ ...(0, _reduceFieldsToValues.default)(fields, true),
203
+ ...overrides
204
+ };
205
+ onSubmit(fields, data);
206
+ }
207
+ const formData = contextRef.current.createFormData(overrides);
208
+ try {
209
+ let res;
210
+ if (typeof actionToUse === 'string') {
211
+ res = await _api.requests[methodToUse.toLowerCase()](actionToUse, {
212
+ body: formData,
213
+ headers: {
214
+ 'Accept-Language': i18n.language
215
+ }
216
+ });
217
+ } else if (typeof actionToUse === 'function') {
218
+ res = await actionToUse(formData);
219
+ }
220
+ setModified(false);
221
+ if (typeof handleResponse === 'function') {
222
+ handleResponse(res);
223
+ return;
224
+ }
225
+ setProcessing(false);
226
+ const contentType = res.headers.get('content-type');
227
+ const isJSON = contentType && contentType.indexOf('application/json') !== -1;
228
+ let json = {};
229
+ if (isJSON) json = await res.json();
230
+ if (res.status < 400) {
231
+ setSubmitted(false);
232
+ if (typeof onSuccess === 'function') onSuccess(json);
233
+ if (redirect) {
234
+ // const destination = {
235
+ // pathname: redirect,
236
+ // state: {},
237
+ // }
238
+ // if (typeof json === 'object' && json.message && !disableSuccessStatus) {
239
+ // destination.state = {
240
+ // status: [
241
+ // {
242
+ // message: json.message,
243
+ // type: 'success',
244
+ // },
245
+ // ],
246
+ // }
247
+ // }
248
+ router.push(redirect);
249
+ } else if (!disableSuccessStatus) {
250
+ _reacttoastify.toast.success(json.message || t('general:submissionSuccessful'), {
251
+ autoClose: 3000
252
+ });
253
+ }
254
+ } else {
255
+ contextRef.current = {
256
+ ...contextRef.current
257
+ } // triggers rerender of all components that subscribe to form
258
+ ;
259
+ if (json.message) {
260
+ _reacttoastify.toast.error(json.message);
261
+ return;
262
+ }
263
+ if (Array.isArray(json.errors)) {
264
+ const [fieldErrors, nonFieldErrors] = json.errors.reduce(([fieldErrs, nonFieldErrs], err)=>{
265
+ const newFieldErrs = [];
266
+ const newNonFieldErrs = [];
267
+ if (err?.message) {
268
+ newNonFieldErrs.push(err);
269
+ }
270
+ if (Array.isArray(err?.data)) {
271
+ err.data.forEach((dataError)=>{
272
+ if (dataError?.field) {
273
+ newFieldErrs.push(dataError);
274
+ } else {
275
+ newNonFieldErrs.push(dataError);
276
+ }
277
+ });
278
+ }
279
+ return [
280
+ [
281
+ ...fieldErrs,
282
+ ...newFieldErrs
283
+ ],
284
+ [
285
+ ...nonFieldErrs,
286
+ ...newNonFieldErrs
287
+ ]
288
+ ];
289
+ }, [
290
+ [],
291
+ []
292
+ ]);
293
+ fieldErrors.forEach((err)=>{
294
+ dispatchFields({
295
+ type: 'UPDATE',
296
+ ...contextRef.current?.fields?.[err.field] || {},
297
+ errorMessage: err.message,
298
+ path: err.field,
299
+ valid: false
300
+ });
301
+ });
302
+ nonFieldErrors.forEach((err)=>{
303
+ _reacttoastify.toast.error(err.message || t('error:unknown'));
304
+ });
305
+ return;
306
+ }
307
+ const message = _errorMessages.default?.[res.status] || res?.statusText || t('error:unknown');
308
+ _reacttoastify.toast.error(message);
309
+ }
310
+ } catch (err) {
311
+ setProcessing(false);
312
+ _reacttoastify.toast.error(err);
313
+ }
314
+ }, [
315
+ action,
316
+ disableSuccessStatus,
317
+ disabled,
318
+ dispatchFields,
319
+ fields,
320
+ handleResponse,
321
+ method,
322
+ onSubmit,
323
+ onSuccess,
324
+ redirect,
325
+ router,
326
+ t,
327
+ i18n,
328
+ waitForAutocomplete,
329
+ beforeSubmit
330
+ ]);
331
+ const getFields = (0, _react.useCallback)(()=>contextRef.current.fields, []);
332
+ const getField = (0, _react.useCallback)((path)=>contextRef.current.fields[path], []);
333
+ const getData = (0, _react.useCallback)(()=>(0, _reduceFieldsToValues.default)(contextRef.current.fields, true), []);
334
+ const getSiblingData = (0, _react.useCallback)((path)=>(0, _getSiblingData.default)(contextRef.current.fields, path), []);
335
+ const getDataByPath = (0, _react.useCallback)((path)=>(0, _getDataByPath.default)(contextRef.current.fields, path), []);
336
+ const createFormData = (0, _react.useCallback)((overrides = {})=>{
337
+ const data = (0, _reduceFieldsToValues.default)(contextRef.current.fields, true);
338
+ const file = data?.file;
339
+ if (file) {
340
+ delete data.file;
341
+ }
342
+ const dataWithOverrides = {
343
+ ...data,
344
+ ...overrides
345
+ };
346
+ const dataToSerialize = {
347
+ _payload: JSON.stringify(dataWithOverrides),
348
+ file
349
+ };
350
+ // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves
351
+ const formData = (0, _objecttoformdata.serialize)(dataToSerialize, {
352
+ indices: true,
353
+ nullsAsUndefineds: false
354
+ });
355
+ return formData;
356
+ }, []);
357
+ const reset = (0, _react.useCallback)(async (fieldSchema, data)=>{
358
+ const preferences = await getDocPreferences();
359
+ // const state = await buildStateFromSchema({
360
+ // id,
361
+ // // TODO: fix this
362
+ // // @ts-ignore-next-line
363
+ // config,
364
+ // data,
365
+ // fieldSchema,
366
+ // locale,
367
+ // operation,
368
+ // preferences,
369
+ // t,
370
+ // user,
371
+ // })
372
+ contextRef.current = {
373
+ ..._initContextState.default
374
+ };
375
+ setModified(false);
376
+ // dispatchFields({ state, type: 'REPLACE_STATE' })
377
+ }, [
378
+ getDocPreferences
379
+ ]);
380
+ const replaceState = (0, _react.useCallback)((state)=>{
381
+ contextRef.current = {
382
+ ..._initContextState.default
383
+ };
384
+ setModified(false);
385
+ dispatchFields({
386
+ type: 'REPLACE_STATE',
387
+ state
388
+ });
389
+ }, [
390
+ dispatchFields
391
+ ]);
392
+ const getFieldStateByPath = (0, _react.useCallback)(async ({ data, path })=>{
393
+ const fieldSchema = await (0, _getFormState.getFormState)({
394
+ apiRoute,
395
+ body: {
396
+ collectionSlug,
397
+ data,
398
+ globalSlug,
399
+ /**
400
+ Turns: 'arrayField.0.group123field.arrayField.0.textField'
401
+ Into: 'arrayField.group123field.arrayField.textField'
402
+ */ schemaPath: `${collectionSlug || globalSlug}.${path}`.replace(/\.\d+\./g, '.')
403
+ },
404
+ serverURL
405
+ });
406
+ return fieldSchema;
407
+ }, [
408
+ apiRoute,
409
+ collectionSlug,
410
+ globalSlug,
411
+ serverURL
412
+ ]);
413
+ const addFieldRow = (0, _react.useCallback)(async ({ data, path, rowIndex })=>{
414
+ const subFieldState = await getFieldStateByPath({
415
+ data,
416
+ path
417
+ });
418
+ dispatchFields({
419
+ type: 'ADD_ROW',
420
+ blockType: data?.blockType,
421
+ path,
422
+ rowIndex,
423
+ subFieldState
424
+ });
425
+ }, [
426
+ getFieldStateByPath,
427
+ dispatchFields
428
+ ]);
429
+ const removeFieldRow = (0, _react.useCallback)(({ path, rowIndex })=>{
430
+ dispatchFields({
431
+ type: 'REMOVE_ROW',
432
+ path,
433
+ rowIndex
434
+ });
435
+ }, [
436
+ dispatchFields
437
+ ]);
438
+ const replaceFieldRow = (0, _react.useCallback)(async ({ data, path, rowIndex })=>{
439
+ const subFieldState = await getFieldStateByPath({
440
+ data,
441
+ path
442
+ });
443
+ dispatchFields({
444
+ type: 'REPLACE_ROW',
445
+ blockType: data?.blockType,
446
+ path,
447
+ rowIndex,
448
+ subFieldState
449
+ });
450
+ }, [
451
+ getFieldStateByPath,
452
+ dispatchFields
453
+ ]);
454
+ contextRef.current.submit = submit;
455
+ contextRef.current.getFields = getFields;
456
+ contextRef.current.getField = getField;
457
+ contextRef.current.getData = getData;
458
+ contextRef.current.getSiblingData = getSiblingData;
459
+ contextRef.current.getDataByPath = getDataByPath;
460
+ contextRef.current.validateForm = validateForm;
461
+ contextRef.current.createFormData = createFormData;
462
+ contextRef.current.setModified = setModified;
463
+ contextRef.current.setProcessing = setProcessing;
464
+ contextRef.current.setSubmitted = setSubmitted;
465
+ contextRef.current.disabled = disabled;
466
+ contextRef.current.formRef = formRef;
467
+ contextRef.current.reset = reset;
468
+ contextRef.current.replaceState = replaceState;
469
+ contextRef.current.dispatchFields = dispatchFields;
470
+ contextRef.current.addFieldRow = addFieldRow;
471
+ contextRef.current.removeFieldRow = removeFieldRow;
472
+ contextRef.current.replaceFieldRow = replaceFieldRow;
473
+ contextRef.current.uuid = uuid;
474
+ (0, _react.useEffect)(()=>{
475
+ if (typeof submittedFromProps === 'boolean') setSubmitted(submittedFromProps);
476
+ }, [
477
+ submittedFromProps
478
+ ]);
479
+ (0, _react.useEffect)(()=>{
480
+ if (initialState) {
481
+ contextRef.current = {
482
+ ..._initContextState.default
483
+ };
484
+ dispatchFields({
485
+ type: 'REPLACE_STATE',
486
+ state: initialState
487
+ });
488
+ }
489
+ }, [
490
+ initialState,
491
+ dispatchFields
492
+ ]);
493
+ (0, _useThrottledEffect.default)(()=>{
494
+ refreshCookie();
495
+ }, 15000, [
496
+ fields
497
+ ]);
498
+ (0, _react.useEffect)(()=>{
499
+ contextRef.current = {
500
+ ...contextRef.current
501
+ } // triggers rerender of all components that subscribe to form
502
+ ;
503
+ setModified(false);
504
+ }, [
505
+ locale
506
+ ]);
507
+ const classes = [
508
+ className,
509
+ baseClass
510
+ ].filter(Boolean).join(' ');
511
+ (0, _useDebouncedEffect.useDebouncedEffect)(()=>{
512
+ const executeOnChange = async ()=>{
513
+ if (Array.isArray(onChange)) {
514
+ let revalidatedFormState;
515
+ await onChange.reduce(async (priorOnChange, onChangeFn)=>{
516
+ await priorOnChange;
517
+ const result = await onChangeFn({
518
+ formState: fields
519
+ });
520
+ revalidatedFormState = result;
521
+ }, Promise.resolve());
522
+ const { changed, newState } = (0, _mergeServerFormState.mergeServerFormState)(fields, revalidatedFormState);
523
+ if (changed) {
524
+ dispatchFields({
525
+ type: 'REPLACE_STATE',
526
+ optimize: false,
527
+ state: newState
528
+ });
529
+ }
530
+ }
531
+ };
532
+ executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises
533
+ ;
534
+ }, 150, [
535
+ fields,
536
+ dispatchFields,
537
+ onChange
538
+ ]);
539
+ return /*#__PURE__*/ _react.default.createElement("form", {
540
+ action: action,
541
+ className: classes,
542
+ method: method,
543
+ noValidate: true,
544
+ onSubmit: (e)=>contextRef.current.submit({}, e),
545
+ ref: formRef
546
+ }, /*#__PURE__*/ _react.default.createElement(_context.FormContext.Provider, {
547
+ value: contextRef.current
548
+ }, /*#__PURE__*/ _react.default.createElement(_context.FormWatchContext.Provider, {
549
+ value: {
550
+ fields,
551
+ ...contextRef.current
552
+ }
553
+ }, /*#__PURE__*/ _react.default.createElement(_context.SubmittedContext.Provider, {
554
+ value: submitted
555
+ }, /*#__PURE__*/ _react.default.createElement(_context.ProcessingContext.Provider, {
556
+ value: processing
557
+ }, /*#__PURE__*/ _react.default.createElement(_context.ModifiedContext.Provider, {
558
+ value: modified
559
+ }, /*#__PURE__*/ _react.default.createElement(_context.FormFieldsContext.Provider, {
560
+ value: fieldsReducer
561
+ }, children)))))));
562
+ };
563
+ const _default = Form;
564
+
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3Jtcy9Gb3JtL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IGlzRGVlcEVxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tICdvYmplY3QtdG8tZm9ybWRhdGEnXG5pbXBvcnQgeyB3YWl0IH0gZnJvbSAncGF5bG9hZC91dGlsaXRpZXMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVkdWNlciwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdyZWFjdC10b2FzdGlmeSdcblxuaW1wb3J0IHR5cGUge1xuICBDb250ZXh0IGFzIEZvcm1Db250ZXh0VHlwZSxcbiAgRm9ybVN0YXRlLFxuICBHZXREYXRhQnlQYXRoLFxuICBQcm9wcyxcbiAgU3VibWl0T3B0aW9ucyxcbn0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgdXNlRGVib3VuY2VkRWZmZWN0IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRGVib3VuY2VkRWZmZWN0J1xuaW1wb3J0IHVzZVRocm90dGxlZEVmZmVjdCBmcm9tICcuLi8uLi9ob29rcy91c2VUaHJvdHRsZWRFZmZlY3QnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mbydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUnXG5pbXBvcnQgeyB1c2VPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uUHJvdmlkZXInXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbidcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaSdcbmltcG9ydCB7IGdldEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9nZXRGb3JtU3RhdGUnXG5pbXBvcnQge1xuICBGb3JtQ29udGV4dCxcbiAgRm9ybUZpZWxkc0NvbnRleHQsXG4gIEZvcm1XYXRjaENvbnRleHQsXG4gIE1vZGlmaWVkQ29udGV4dCxcbiAgUHJvY2Vzc2luZ0NvbnRleHQsXG4gIFN1Ym1pdHRlZENvbnRleHQsXG59IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCBlcnJvck1lc3NhZ2VzIGZyb20gJy4vZXJyb3JNZXNzYWdlcydcbmltcG9ydCB7IGZpZWxkUmVkdWNlciB9IGZyb20gJy4vZmllbGRSZWR1Y2VyJ1xuaW1wb3J0IGdldERhdGFCeVBhdGhGdW5jIGZyb20gJy4vZ2V0RGF0YUJ5UGF0aCdcbmltcG9ydCBnZXRTaWJsaW5nRGF0YUZ1bmMgZnJvbSAnLi9nZXRTaWJsaW5nRGF0YSdcbmltcG9ydCBpbml0Q29udGV4dFN0YXRlIGZyb20gJy4vaW5pdENvbnRleHRTdGF0ZSdcbmltcG9ydCB7IG1lcmdlU2VydmVyRm9ybVN0YXRlIH0gZnJvbSAnLi9tZXJnZVNlcnZlckZvcm1TdGF0ZSdcbmltcG9ydCByZWR1Y2VGaWVsZHNUb1ZhbHVlcyBmcm9tICcuL3JlZHVjZUZpZWxkc1RvVmFsdWVzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZm9ybSdcblxuY29uc3QgRm9ybTogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaWQsIGdldERvY1ByZWZlcmVuY2VzIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IHtcbiAgICBhY3Rpb24sXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzLFxuICAgIGRpc2FibGVkLFxuICAgIC8vIGZpZWxkczogZmllbGRzRnJvbVByb3BzID0gY29sbGVjdGlvbj8uZmllbGRzIHx8IGdsb2JhbD8uZmllbGRzLFxuICAgIGJlZm9yZVN1Ym1pdCxcbiAgICBoYW5kbGVSZXNwb25zZSxcbiAgICBpbml0aWFsU3RhdGUsIC8vIGZ1bGx5IGZvcm1lZCBpbml0aWFsIGZpZWxkIHN0YXRlXG4gICAgb25DaGFuZ2UsXG4gICAgb25TdWJtaXQsXG4gICAgb25TdWNjZXNzLFxuICAgIHJlZGlyZWN0LFxuICAgIHN1Ym1pdHRlZDogc3VibWl0dGVkRnJvbVByb3BzLFxuICAgIHV1aWQsXG4gICAgd2FpdEZvckF1dG9jb21wbGV0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgbWV0aG9kID0gJ21ldGhvZCcgaW4gcHJvcHMgPyBwcm9wcy5tZXRob2QgOiB1bmRlZmluZWRcblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyByZWZyZXNoQ29va2llLCB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3Qgb3BlcmF0aW9uID0gdXNlT3BlcmF0aW9uKClcblxuICBjb25zdCBjb25maWcgPSB1c2VDb25maWcoKVxuICBjb25zdCB7XG4gICAgcm91dGVzOiB7IGFwaTogYXBpUm91dGUgfSxcbiAgICBzZXJ2ZXJVUkwsXG4gIH0gPSBjb25maWdcblxuICBjb25zdCBbbW9kaWZpZWQsIHNldE1vZGlmaWVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcHJvY2Vzc2luZywgc2V0UHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3N1Ym1pdHRlZCwgc2V0U3VibWl0dGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBmb3JtUmVmID0gdXNlUmVmPEhUTUxGb3JtRWxlbWVudD4obnVsbClcbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7fSBhcyBGb3JtQ29udGV4dFR5cGUpXG4gIGNvbnN0IHsgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcgfSA9IHVzZURvY3VtZW50SW5mbygpXG5cbiAgY29uc3QgZmllbGRzUmVkdWNlciA9IHVzZVJlZHVjZXIoZmllbGRSZWR1Y2VyLCB7fSwgKCkgPT4gaW5pdGlhbFN0YXRlKVxuICAvKipcbiAgICogYGZpZWxkc2AgaXMgdGhlIGN1cnJlbnQsIHVwLXRvLWRhdGUgc3RhdGUvZGF0YSBvZiBhbGwgZmllbGRzIGluIHRoZSBmb3JtLiBJdCBjYW4gYmUgbW9kaWZpZWQgYnkgdXNpbmcgZGlzcGF0Y2hGaWVsZHMsXG4gICAqIHdoaWNoIGNhbGxzIHRoZSBmaWVsZFJlZHVjZXIsIHdoaWNoIHRoZW4gdXBkYXRlcyB0aGUgc3RhdGUuXG4gICAqL1xuICBjb25zdCBbZmllbGRzLCBkaXNwYXRjaEZpZWxkc10gPSBmaWVsZHNSZWR1Y2VyXG5cbiAgY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcyA9IGZpZWxkc1xuXG4gIGNvbnN0IHZhbGlkYXRlRm9ybSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRGaWVsZFN0YXRlID0ge31cbiAgICBsZXQgaXNWYWxpZCA9IHRydWVcblxuICAgIGNvbnN0IGRhdGFGcm9tQ29udGV4dCA9IGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhKClcbiAgICBjb25zdCBkYXRhID0gZGF0YUZyb21Db250ZXh0XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBPYmplY3QuZW50cmllcyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzKS5tYXAoXG4gICAgICBhc3luYyAoW3BhdGgsIGZpZWxkXSkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWVsZCA9IHtcbiAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5wYXNzZXNDb25kaXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHQ6IGJvb2xlYW4gfCBzdHJpbmcgPSB0cnVlXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWVUb1ZhbGlkYXRlID0gZmllbGQudmFsdWVcblxuICAgICAgICAgICAgaWYgKGZpZWxkPy5yb3dzICYmIEFycmF5LmlzQXJyYXkoZmllbGQucm93cykpIHtcbiAgICAgICAgICAgICAgdmFsdWVUb1ZhbGlkYXRlID0gY29udGV4dFJlZi5jdXJyZW50LmdldERhdGFCeVBhdGgocGF0aClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IGZpZWxkLnZhbGlkYXRlKHZhbHVlVG9WYWxpZGF0ZSwge1xuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgICAgIHNpYmxpbmdEYXRhOiBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0U2libGluZ0RhdGEocGF0aCksXG4gICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvblJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlZEZpZWxkLmVycm9yTWVzc2FnZSA9IHZhbGlkYXRpb25SZXN1bHRcbiAgICAgICAgICAgIHZhbGlkYXRlZEZpZWxkLnZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlZEZpZWxkU3RhdGVbcGF0aF0gPSB2YWxpZGF0ZWRGaWVsZFxuICAgICAgfSxcbiAgICApXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpXG5cbiAgICBpZiAoIWlzRGVlcEVxdWFsKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHZhbGlkYXRlZEZpZWxkU3RhdGUpKSB7XG4gICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgc3RhdGU6IHZhbGlkYXRlZEZpZWxkU3RhdGUgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9LCBbaWQsIHVzZXIsIG9wZXJhdGlvbiwgdCwgZGlzcGF0Y2hGaWVsZHMsIGNvbmZpZ10pXG5cbiAgY29uc3Qgc3VibWl0ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG9wdGlvbnM6IFN1Ym1pdE9wdGlvbnMgPSB7fSwgZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhY3Rpb246IGFjdGlvblRvVXNlID0gYWN0aW9uLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZFRvVXNlID0gbWV0aG9kLFxuICAgICAgICBvdmVycmlkZXMgPSB7fSxcbiAgICAgICAgc2tpcFZhbGlkYXRpb24sXG4gICAgICB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cblxuICAgICAgc2V0UHJvY2Vzc2luZyh0cnVlKVxuICAgICAgc2V0U3VibWl0dGVkKHRydWUpXG5cbiAgICAgIGlmICh3YWl0Rm9yQXV0b2NvbXBsZXRlKSBhd2FpdCB3YWl0KDEwMClcblxuICAgICAgLy8gRXhlY3V0ZSBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmVmb3JlU3VibWl0KSkge1xuICAgICAgICBsZXQgcmV2YWxpZGF0ZWRGb3JtU3RhdGU6IEZvcm1TdGF0ZVxuXG4gICAgICAgIGF3YWl0IGJlZm9yZVN1Ym1pdC5yZWR1Y2UoYXN5bmMgKHByaW9yT25DaGFuZ2UsIGJlZm9yZVN1Ym1pdEZuKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JPbkNoYW5nZVxuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmVmb3JlU3VibWl0Rm4oe1xuICAgICAgICAgICAgZm9ybVN0YXRlOiBmaWVsZHMsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldmFsaWRhdGVkRm9ybVN0YXRlID0gcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBPYmplY3QuZW50cmllcyhyZXZhbGlkYXRlZEZvcm1TdGF0ZSkuZXZlcnkoKFssIGZpZWxkXSkgPT4gZmllbGQudmFsaWQpXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcbiAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVQTEFDRV9TVEFURScsIHN0YXRlOiByZXZhbGlkYXRlZEZvcm1TdGF0ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBza2lwVmFsaWRhdGlvbiA/IHRydWUgOiBhd2FpdCBjb250ZXh0UmVmLmN1cnJlbnQudmFsaWRhdGVGb3JtKClcblxuICAgICAgLy8gSWYgbm90IHZhbGlkLCBwcmV2ZW50IHN1Ym1pc3Npb25cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjpjb3JyZWN0SW52YWxpZEZpZWxkcycpKVxuICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBJZiBzdWJtaXQgaGFuZGxlciBjb21lcyB0aHJvdWdoIHZpYSBwcm9wcywgcnVuIHRoYXRcbiAgICAgIGlmIChvblN1Ym1pdCkge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIC4uLnJlZHVjZUZpZWxkc1RvVmFsdWVzKGZpZWxkcywgdHJ1ZSksXG4gICAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICB9XG5cbiAgICAgICAgb25TdWJtaXQoZmllbGRzLCBkYXRhKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IGNvbnRleHRSZWYuY3VycmVudC5jcmVhdGVGb3JtRGF0YShvdmVycmlkZXMpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCByZXNcblxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvblRvVXNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IHJlcXVlc3RzW21ldGhvZFRvVXNlLnRvTG93ZXJDYXNlKCldKGFjdGlvblRvVXNlLCB7XG4gICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvblRvVXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVzID0gYXdhaXQgYWN0aW9uVG9Vc2UoZm9ybURhdGEpXG4gICAgICAgIH1cblxuICAgICAgICBzZXRNb2RpZmllZChmYWxzZSlcblxuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZVJlc3BvbnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaGFuZGxlUmVzcG9uc2UocmVzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJylcbiAgICAgICAgY29uc3QgaXNKU09OID0gY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpICE9PSAtMVxuXG4gICAgICAgIGxldCBqc29uOiBhbnkgPSB7fVxuXG4gICAgICAgIGlmIChpc0pTT04pIGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICBzZXRTdWJtaXR0ZWQoZmFsc2UpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykgb25TdWNjZXNzKGpzb24pXG5cbiAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IGRlc3RpbmF0aW9uID0ge1xuICAgICAgICAgICAgLy8gICBwYXRobmFtZTogcmVkaXJlY3QsXG4gICAgICAgICAgICAvLyAgIHN0YXRlOiB7fSxcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLy8gaWYgKHR5cGVvZiBqc29uID09PSAnb2JqZWN0JyAmJiBqc29uLm1lc3NhZ2UgJiYgIWRpc2FibGVTdWNjZXNzU3RhdHVzKSB7XG4gICAgICAgICAgICAvLyAgIGRlc3RpbmF0aW9uLnN0YXRlID0ge1xuICAgICAgICAgICAgLy8gICAgIHN0YXR1czogW1xuICAgICAgICAgICAgLy8gICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlOiBqc29uLm1lc3NhZ2UsXG4gICAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIC8vICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgXSxcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICByb3V0ZXIucHVzaChyZWRpcmVjdClcbiAgICAgICAgICB9IGVsc2UgaWYgKCFkaXNhYmxlU3VjY2Vzc1N0YXR1cykge1xuICAgICAgICAgICAgdG9hc3Quc3VjY2Vzcyhqc29uLm1lc3NhZ2UgfHwgdCgnZ2VuZXJhbDpzdWJtaXNzaW9uU3VjY2Vzc2Z1bCcpLCB7IGF1dG9DbG9zZTogMzAwMCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IC4uLmNvbnRleHRSZWYuY3VycmVudCB9IC8vIHRyaWdnZXJzIHJlcmVuZGVyIG9mIGFsbCBjb21wb25lbnRzIHRoYXQgc3Vic2NyaWJlIHRvIGZvcm1cbiAgICAgICAgICBpZiAoanNvbi5tZXNzYWdlKSB7XG4gICAgICAgICAgICB0b2FzdC5lcnJvcihqc29uLm1lc3NhZ2UpXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24uZXJyb3JzKSkge1xuICAgICAgICAgICAgY29uc3QgW2ZpZWxkRXJyb3JzLCBub25GaWVsZEVycm9yc10gPSBqc29uLmVycm9ycy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChbZmllbGRFcnJzLCBub25GaWVsZEVycnNdLCBlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWVsZEVycnMgPSBbXVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vbkZpZWxkRXJycyA9IFtdXG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICBuZXdOb25GaWVsZEVycnMucHVzaChlcnIpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyPy5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgZXJyLmRhdGEuZm9yRWFjaCgoZGF0YUVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhRXJyb3I/LmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3RmllbGRFcnJzLnB1c2goZGF0YUVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIG5ld05vbkZpZWxkRXJycy5wdXNoKGRhdGFFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgWy4uLmZpZWxkRXJycywgLi4ubmV3RmllbGRFcnJzXSxcbiAgICAgICAgICAgICAgICAgIFsuLi5ub25GaWVsZEVycnMsIC4uLm5ld05vbkZpZWxkRXJyc10sXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbW10sIFtdXSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgZmllbGRFcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnVVBEQVRFJyxcbiAgICAgICAgICAgICAgICAuLi4oY29udGV4dFJlZi5jdXJyZW50Py5maWVsZHM/LltlcnIuZmllbGRdIHx8IHt9KSxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIHBhdGg6IGVyci5maWVsZCxcbiAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBub25GaWVsZEVycm9ycy5mb3JFYWNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoZXJyLm1lc3NhZ2UgfHwgdCgnZXJyb3I6dW5rbm93bicpKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yTWVzc2FnZXM/LltyZXMuc3RhdHVzXSB8fCByZXM/LnN0YXR1c1RleHQgfHwgdCgnZXJyb3I6dW5rbm93bicpXG5cbiAgICAgICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcblxuICAgICAgICB0b2FzdC5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhY3Rpb24sXG4gICAgICBkaXNhYmxlU3VjY2Vzc1N0YXR1cyxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzcGF0Y2hGaWVsZHMsXG4gICAgICBmaWVsZHMsXG4gICAgICBoYW5kbGVSZXNwb25zZSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIG9uU3VibWl0LFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgcmVkaXJlY3QsXG4gICAgICByb3V0ZXIsXG4gICAgICB0LFxuICAgICAgaTE4bixcbiAgICAgIHdhaXRGb3JBdXRvY29tcGxldGUsXG4gICAgICBiZWZvcmVTdWJtaXQsXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IGdldEZpZWxkcyA9IHVzZUNhbGxiYWNrKCgpID0+IGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIFtdKVxuXG4gIGNvbnN0IGdldEZpZWxkID0gdXNlQ2FsbGJhY2soKHBhdGg6IHN0cmluZykgPT4gY29udGV4dFJlZi5jdXJyZW50LmZpZWxkc1twYXRoXSwgW10pXG5cbiAgY29uc3QgZ2V0RGF0YSA9IHVzZUNhbGxiYWNrKCgpID0+IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHRydWUpLCBbXSlcblxuICBjb25zdCBnZXRTaWJsaW5nRGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXRoOiBzdHJpbmcpID0+IGdldFNpYmxpbmdEYXRhRnVuYyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCBwYXRoKSxcbiAgICBbXSxcbiAgKVxuICBjb25zdCBnZXREYXRhQnlQYXRoID0gdXNlQ2FsbGJhY2s8R2V0RGF0YUJ5UGF0aD4oXG4gICAgKHBhdGg6IHN0cmluZykgPT4gZ2V0RGF0YUJ5UGF0aEZ1bmMoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcywgcGF0aCksXG4gICAgW10sXG4gIClcblxuICBjb25zdCBjcmVhdGVGb3JtRGF0YSA9IHVzZUNhbGxiYWNrKChvdmVycmlkZXM6IGFueSA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHRydWUpXG5cbiAgICBjb25zdCBmaWxlID0gZGF0YT8uZmlsZVxuXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmZpbGVcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhV2l0aE92ZXJyaWRlcyA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi5vdmVycmlkZXMsXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YVRvU2VyaWFsaXplID0ge1xuICAgICAgX3BheWxvYWQ6IEpTT04uc3RyaW5naWZ5KGRhdGFXaXRoT3ZlcnJpZGVzKSxcbiAgICAgIGZpbGUsXG4gICAgfVxuXG4gICAgLy8gbnVsbEFzVW5kZWZpbmVkcyBpcyBpbXBvcnRhbnQgdG8gYWxsb3cgdXBsb2FkcyBhbmQgcmVsYXRpb25zaGlwIGZpZWxkcyB0byBjbGVhciB0aGVtc2VsdmVzXG4gICAgY29uc3QgZm9ybURhdGEgPSBzZXJpYWxpemUoZGF0YVRvU2VyaWFsaXplLCB7IGluZGljZXM6IHRydWUsIG51bGxzQXNVbmRlZmluZWRzOiBmYWxzZSB9KVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2V0ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGZpZWxkU2NoZW1hOiBGaWVsZFtdLCBkYXRhOiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBwcmVmZXJlbmNlcyA9IGF3YWl0IGdldERvY1ByZWZlcmVuY2VzKClcbiAgICAgIC8vIGNvbnN0IHN0YXRlID0gYXdhaXQgYnVpbGRTdGF0ZUZyb21TY2hlbWEoe1xuICAgICAgLy8gICBpZCxcbiAgICAgIC8vICAgLy8gVE9ETzogZml4IHRoaXNcbiAgICAgIC8vICAgLy8gQHRzLWlnbm9yZS1uZXh0LWxpbmVcbiAgICAgIC8vICAgY29uZmlnLFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICBmaWVsZFNjaGVtYSxcbiAgICAgIC8vICAgbG9jYWxlLFxuICAgICAgLy8gICBvcGVyYXRpb24sXG4gICAgICAvLyAgIHByZWZlcmVuY2VzLFxuICAgICAgLy8gICB0LFxuICAgICAgLy8gICB1c2VyLFxuICAgICAgLy8gfSlcbiAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uaW5pdENvbnRleHRTdGF0ZSB9IGFzIEZvcm1Db250ZXh0VHlwZVxuICAgICAgc2V0TW9kaWZpZWQoZmFsc2UpXG4gICAgICAvLyBkaXNwYXRjaEZpZWxkcyh7IHN0YXRlLCB0eXBlOiAnUkVQTEFDRV9TVEFURScgfSlcbiAgICB9LFxuICAgIFtnZXREb2NQcmVmZXJlbmNlc10sXG4gIClcblxuICBjb25zdCByZXBsYWNlU3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhdGU6IEZvcm1TdGF0ZSkgPT4ge1xuICAgICAgY29udGV4dFJlZi5jdXJyZW50ID0geyAuLi5pbml0Q29udGV4dFN0YXRlIH0gYXMgRm9ybUNvbnRleHRUeXBlXG4gICAgICBzZXRNb2RpZmllZChmYWxzZSlcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBzdGF0ZSB9KVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzXSxcbiAgKVxuXG4gIGNvbnN0IGdldEZpZWxkU3RhdGVCeVBhdGggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoeyBkYXRhLCBwYXRoIH0pID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gYXdhaXQgZ2V0Rm9ybVN0YXRlKHtcbiAgICAgICAgYXBpUm91dGUsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICBUdXJuczogJ2FycmF5RmllbGQuMC5ncm91cDEyM2ZpZWxkLmFycmF5RmllbGQuMC50ZXh0RmllbGQnXG4gICAgICAgICAgICBJbnRvOiAnYXJyYXlGaWVsZC5ncm91cDEyM2ZpZWxkLmFycmF5RmllbGQudGV4dEZpZWxkJ1xuICAgICAgICAgICovXG4gICAgICAgICAgc2NoZW1hUGF0aDogYCR7Y29sbGVjdGlvblNsdWcgfHwgZ2xvYmFsU2x1Z30uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxkK1xcLi9nLCAnLicpLFxuICAgICAgICB9LFxuICAgICAgICBzZXJ2ZXJVUkwsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGZpZWxkU2NoZW1hXG4gICAgfSxcbiAgICBbYXBpUm91dGUsIGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnLCBzZXJ2ZXJVUkxdLFxuICApXG5cbiAgY29uc3QgYWRkRmllbGRSb3c6IEZvcm1Db250ZXh0VHlwZVsnYWRkRmllbGRSb3cnXSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGRhdGEsIHBhdGgsIHJvd0luZGV4IH0pID0+IHtcbiAgICAgIGNvbnN0IHN1YkZpZWxkU3RhdGUgPSBhd2FpdCBnZXRGaWVsZFN0YXRlQnlQYXRoKHsgZGF0YSwgcGF0aCB9KVxuXG4gICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgIHR5cGU6ICdBRERfUk9XJyxcbiAgICAgICAgYmxvY2tUeXBlOiBkYXRhPy5ibG9ja1R5cGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBzdWJGaWVsZFN0YXRlLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtnZXRGaWVsZFN0YXRlQnlQYXRoLCBkaXNwYXRjaEZpZWxkc10sXG4gIClcblxuICBjb25zdCByZW1vdmVGaWVsZFJvdzogRm9ybUNvbnRleHRUeXBlWydyZW1vdmVGaWVsZFJvdyddID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgcGF0aCwgcm93SW5kZXggfSkgPT4ge1xuICAgICAgZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVNT1ZFX1JPVycsIHBhdGgsIHJvd0luZGV4IH0pXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHNdLFxuICApXG5cbiAgY29uc3QgcmVwbGFjZUZpZWxkUm93OiBGb3JtQ29udGV4dFR5cGVbJ3JlcGxhY2VGaWVsZFJvdyddID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgZGF0YSwgcGF0aCwgcm93SW5kZXggfSkgPT4ge1xuICAgICAgY29uc3Qgc3ViRmllbGRTdGF0ZSA9IGF3YWl0IGdldEZpZWxkU3RhdGVCeVBhdGgoeyBkYXRhLCBwYXRoIH0pXG5cbiAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgdHlwZTogJ1JFUExBQ0VfUk9XJyxcbiAgICAgICAgYmxvY2tUeXBlOiBkYXRhPy5ibG9ja1R5cGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBzdWJGaWVsZFN0YXRlLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtnZXRGaWVsZFN0YXRlQnlQYXRoLCBkaXNwYXRjaEZpZWxkc10sXG4gIClcblxuICBjb250ZXh0UmVmLmN1cnJlbnQuc3VibWl0ID0gc3VibWl0XG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXRGaWVsZHMgPSBnZXRGaWVsZHNcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldEZpZWxkID0gZ2V0RmllbGRcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldERhdGEgPSBnZXREYXRhXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXRTaWJsaW5nRGF0YSA9IGdldFNpYmxpbmdEYXRhXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhQnlQYXRoID0gZ2V0RGF0YUJ5UGF0aFxuICBjb250ZXh0UmVmLmN1cnJlbnQudmFsaWRhdGVGb3JtID0gdmFsaWRhdGVGb3JtXG4gIGNvbnRleHRSZWYuY3VycmVudC5jcmVhdGVGb3JtRGF0YSA9IGNyZWF0ZUZvcm1EYXRhXG4gIGNvbnRleHRSZWYuY3VycmVudC5zZXRNb2RpZmllZCA9IHNldE1vZGlmaWVkXG4gIGNvbnRleHRSZWYuY3VycmVudC5zZXRQcm9jZXNzaW5nID0gc2V0UHJvY2Vzc2luZ1xuICBjb250ZXh0UmVmLmN1cnJlbnQuc2V0U3VibWl0dGVkID0gc2V0U3VibWl0dGVkXG4gIGNvbnRleHRSZWYuY3VycmVudC5kaXNhYmxlZCA9IGRpc2FibGVkXG4gIGNvbnRleHRSZWYuY3VycmVudC5mb3JtUmVmID0gZm9ybVJlZlxuICBjb250ZXh0UmVmLmN1cnJlbnQucmVzZXQgPSByZXNldFxuICBjb250ZXh0UmVmLmN1cnJlbnQucmVwbGFjZVN0YXRlID0gcmVwbGFjZVN0YXRlXG4gIGNvbnRleHRSZWYuY3VycmVudC5kaXNwYXRjaEZpZWxkcyA9IGRpc3BhdGNoRmllbGRzXG4gIGNvbnRleHRSZWYuY3VycmVudC5hZGRGaWVsZFJvdyA9IGFkZEZpZWxkUm93XG4gIGNvbnRleHRSZWYuY3VycmVudC5yZW1vdmVGaWVsZFJvdyA9IHJlbW92ZUZpZWxkUm93XG4gIGNvbnRleHRSZWYuY3VycmVudC5yZXBsYWNlRmllbGRSb3cgPSByZXBsYWNlRmllbGRSb3dcbiAgY29udGV4dFJlZi5jdXJyZW50LnV1aWQgPSB1dWlkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHN1Ym1pdHRlZEZyb21Qcm9wcyA9PT0gJ2Jvb2xlYW4nKSBzZXRTdWJtaXR0ZWQoc3VibWl0dGVkRnJvbVByb3BzKVxuICB9LCBbc3VibWl0dGVkRnJvbVByb3BzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uaW5pdENvbnRleHRTdGF0ZSB9IGFzIEZvcm1Db250ZXh0VHlwZVxuICAgICAgZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVQTEFDRV9TVEFURScsIHN0YXRlOiBpbml0aWFsU3RhdGUgfSlcbiAgICB9XG4gIH0sIFtpbml0aWFsU3RhdGUsIGRpc3BhdGNoRmllbGRzXSlcblxuICB1c2VUaHJvdHRsZWRFZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgcmVmcmVzaENvb2tpZSgpXG4gICAgfSxcbiAgICAxNTAwMCxcbiAgICBbZmllbGRzXSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29udGV4dFJlZi5jdXJyZW50ID0geyAuLi5jb250ZXh0UmVmLmN1cnJlbnQgfSAvLyB0cmlnZ2VycyByZXJlbmRlciBvZiBhbGwgY29tcG9uZW50cyB0aGF0IHN1YnNjcmliZSB0byBmb3JtXG4gICAgc2V0TW9kaWZpZWQoZmFsc2UpXG4gIH0sIFtsb2NhbGVdKVxuXG4gIGNvbnN0IGNsYXNzZXMgPSBbY2xhc3NOYW1lLCBiYXNlQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcblxuICB1c2VEZWJvdW5jZWRFZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0ZU9uQ2hhbmdlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvbkNoYW5nZSkpIHtcbiAgICAgICAgICBsZXQgcmV2YWxpZGF0ZWRGb3JtU3RhdGU6IEZvcm1TdGF0ZVxuXG4gICAgICAgICAgYXdhaXQgb25DaGFuZ2UucmVkdWNlKGFzeW5jIChwcmlvck9uQ2hhbmdlLCBvbkNoYW5nZUZuKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwcmlvck9uQ2hhbmdlXG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9uQ2hhbmdlRm4oe1xuICAgICAgICAgICAgICBmb3JtU3RhdGU6IGZpZWxkcyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldmFsaWRhdGVkRm9ybVN0YXRlID0gcmVzdWx0XG4gICAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAgICAgICBjb25zdCB7IGNoYW5nZWQsIG5ld1N0YXRlIH0gPSBtZXJnZVNlcnZlckZvcm1TdGF0ZShmaWVsZHMsIHJldmFsaWRhdGVkRm9ybVN0YXRlKVxuXG4gICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBvcHRpbWl6ZTogZmFsc2UsIHN0YXRlOiBuZXdTdGF0ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleGVjdXRlT25DaGFuZ2UoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIH0sXG4gICAgMTUwLFxuICAgIFtmaWVsZHMsIGRpc3BhdGNoRmllbGRzLCBvbkNoYW5nZV0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBhY3Rpb249e2FjdGlvbn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgIG1ldGhvZD17bWV0aG9kfVxuICAgICAgbm9WYWxpZGF0ZVxuICAgICAgb25TdWJtaXQ9eyhlKSA9PiBjb250ZXh0UmVmLmN1cnJlbnQuc3VibWl0KHt9LCBlKX1cbiAgICAgIHJlZj17Zm9ybVJlZn1cbiAgICA+XG4gICAgICA8Rm9ybUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRSZWYuY3VycmVudH0+XG4gICAgICAgIDxGb3JtV2F0Y2hDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIC4uLmNvbnRleHRSZWYuY3VycmVudCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFN1Ym1pdHRlZENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N1Ym1pdHRlZH0+XG4gICAgICAgICAgICA8UHJvY2Vzc2luZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3Byb2Nlc3Npbmd9PlxuICAgICAgICAgICAgICA8TW9kaWZpZWRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXttb2RpZmllZH0+XG4gICAgICAgICAgICAgICAgPEZvcm1GaWVsZHNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmaWVsZHNSZWR1Y2VyfT5cbiAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L0Zvcm1GaWVsZHNDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L01vZGlmaWVkQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvUHJvY2Vzc2luZ0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9TdWJtaXR0ZWRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L0Zvcm1XYXRjaENvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L0Zvcm1Db250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZm9ybT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JtXG4iXSwibmFtZXMiOlsiYmFzZUNsYXNzIiwiRm9ybSIsInByb3BzIiwiaWQiLCJnZXREb2NQcmVmZXJlbmNlcyIsInVzZURvY3VtZW50SW5mbyIsImFjdGlvbiIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGlzYWJsZVN1Y2Nlc3NTdGF0dXMiLCJkaXNhYmxlZCIsImJlZm9yZVN1Ym1pdCIsImhhbmRsZVJlc3BvbnNlIiwiaW5pdGlhbFN0YXRlIiwib25DaGFuZ2UiLCJvblN1Ym1pdCIsIm9uU3VjY2VzcyIsInJlZGlyZWN0Iiwic3VibWl0dGVkIiwic3VibWl0dGVkRnJvbVByb3BzIiwidXVpZCIsIndhaXRGb3JBdXRvY29tcGxldGUiLCJtZXRob2QiLCJ1bmRlZmluZWQiLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJjb2RlIiwibG9jYWxlIiwidXNlTG9jYWxlIiwiaTE4biIsInQiLCJ1c2VUcmFuc2xhdGlvbiIsInJlZnJlc2hDb29raWUiLCJ1c2VyIiwidXNlQXV0aCIsIm9wZXJhdGlvbiIsInVzZU9wZXJhdGlvbiIsImNvbmZpZyIsInVzZUNvbmZpZyIsInJvdXRlcyIsImFwaSIsImFwaVJvdXRlIiwic2VydmVyVVJMIiwibW9kaWZpZWQiLCJzZXRNb2RpZmllZCIsInVzZVN0YXRlIiwicHJvY2Vzc2luZyIsInNldFByb2Nlc3NpbmciLCJzZXRTdWJtaXR0ZWQiLCJmb3JtUmVmIiwidXNlUmVmIiwiY29udGV4dFJlZiIsImNvbGxlY3Rpb25TbHVnIiwiZ2xvYmFsU2x1ZyIsImZpZWxkc1JlZHVjZXIiLCJ1c2VSZWR1Y2VyIiwiZmllbGRSZWR1Y2VyIiwiZmllbGRzIiwiZGlzcGF0Y2hGaWVsZHMiLCJjdXJyZW50IiwidmFsaWRhdGVGb3JtIiwidXNlQ2FsbGJhY2siLCJ2YWxpZGF0ZWRGaWVsZFN0YXRlIiwiaXNWYWxpZCIsImRhdGFGcm9tQ29udGV4dCIsImdldERhdGEiLCJkYXRhIiwidmFsaWRhdGlvblByb21pc2VzIiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsInBhdGgiLCJmaWVsZCIsInZhbGlkYXRlZEZpZWxkIiwidmFsaWQiLCJwYXNzZXNDb25kaXRpb24iLCJ2YWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGUiLCJ2YWx1ZVRvVmFsaWRhdGUiLCJ2YWx1ZSIsInJvd3MiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhQnlQYXRoIiwic2libGluZ0RhdGEiLCJnZXRTaWJsaW5nRGF0YSIsImVycm9yTWVzc2FnZSIsIlByb21pc2UiLCJhbGwiLCJpc0RlZXBFcXVhbCIsInR5cGUiLCJzdGF0ZSIsInN1Ym1pdCIsIm9wdGlvbnMiLCJlIiwiYWN0aW9uVG9Vc2UiLCJtZXRob2RUb1VzZSIsIm92ZXJyaWRlcyIsInNraXBWYWxpZGF0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ3YWl0IiwicmV2YWxpZGF0ZWRGb3JtU3RhdGUiLCJyZWR1Y2UiLCJwcmlvck9uQ2hhbmdlIiwiYmVmb3JlU3VibWl0Rm4iLCJyZXN1bHQiLCJmb3JtU3RhdGUiLCJyZXNvbHZlIiwiZXZlcnkiLCJ0b2FzdCIsImVycm9yIiwicmVkdWNlRmllbGRzVG9WYWx1ZXMiLCJmb3JtRGF0YSIsImNyZWF0ZUZvcm1EYXRhIiwicmVzIiwicmVxdWVzdHMiLCJ0b0xvd2VyQ2FzZSIsImJvZHkiLCJoZWFkZXJzIiwibGFuZ3VhZ2UiLCJjb250ZW50VHlwZSIsImdldCIsImlzSlNPTiIsImluZGV4T2YiLCJqc29uIiwic3RhdHVzIiwicHVzaCIsInN1Y2Nlc3MiLCJtZXNzYWdlIiwiYXV0b0Nsb3NlIiwiZXJyb3JzIiwiZmllbGRFcnJvcnMiLCJub25GaWVsZEVycm9ycyIsImZpZWxkRXJycyIsIm5vbkZpZWxkRXJycyIsImVyciIsIm5ld0ZpZWxkRXJycyIsIm5ld05vbkZpZWxkRXJycyIsImZvckVhY2giLCJkYXRhRXJyb3IiLCJlcnJvck1lc3NhZ2VzIiwic3RhdHVzVGV4dCIsImdldEZpZWxkcyIsImdldEZpZWxkIiwiZ2V0U2libGluZ0RhdGFGdW5jIiwiZ2V0RGF0YUJ5UGF0aEZ1bmMiLCJmaWxlIiwiZGF0YVdpdGhPdmVycmlkZXMiLCJkYXRhVG9TZXJpYWxpemUiLCJfcGF5bG9hZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXJpYWxpemUiLCJpbmRpY2VzIiwibnVsbHNBc1VuZGVmaW5lZHMiLCJyZXNldCIsImZpZWxkU2NoZW1hIiwicHJlZmVyZW5jZXMiLCJpbml0Q29udGV4dFN0YXRlIiwicmVwbGFjZVN0YXRlIiwiZ2V0RmllbGRTdGF0ZUJ5UGF0aCIsImdldEZvcm1TdGF0ZSIsInNjaGVtYVBhdGgiLCJyZXBsYWNlIiwiYWRkRmllbGRSb3ciLCJyb3dJbmRleCIsInN1YkZpZWxkU3RhdGUiLCJibG9ja1R5cGUiLCJyZW1vdmVGaWVsZFJvdyIsInJlcGxhY2VGaWVsZFJvdyIsInVzZUVmZmVjdCIsInVzZVRocm90dGxlZEVmZmVjdCIsImNsYXNzZXMiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsInVzZURlYm91bmNlZEVmZmVjdCIsImV4ZWN1dGVPbkNoYW5nZSIsIm9uQ2hhbmdlRm4iLCJjaGFuZ2VkIiwibmV3U3RhdGUiLCJtZXJnZVNlcnZlckZvcm1TdGF0ZSIsIm9wdGltaXplIiwiZm9ybSIsIm5vVmFsaWRhdGUiLCJyZWYiLCJGb3JtQ29udGV4dCIsIlByb3ZpZGVyIiwiRm9ybVdhdGNoQ29udGV4dCIsIlN1Ym1pdHRlZENvbnRleHQiLCJQcm9jZXNzaW5nQ29udGV4dCIsIk1vZGlmaWVkQ29udGV4dCIsIkZvcm1GaWVsZHNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7K0JBeWxCQTs7O2VBQUE7OztrRUFybEJ3Qjs0QkFDRTtrQ0FDQTsyQkFDTDsrREFDdUQ7K0JBQ3REO29DQVVhOzJFQUNKO3NCQUNQO3dCQUNFOzhCQUNNO3dCQUNOO21DQUNHOzZCQUNFO3FCQUNOOzhCQUNJO3lCQVF0QjtzRUFDbUI7OEJBQ0c7c0VBQ0M7dUVBQ0M7eUVBQ0Y7c0NBQ1E7NkVBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWpDLE1BQU1BLFlBQVk7QUFFbEIsTUFBTUMsT0FBd0IsQ0FBQ0M7SUFDN0IsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLGlCQUFpQixFQUFFLEdBQUdDLElBQUFBLDZCQUFlO0lBRWpELE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVEMsb0JBQW9CLEVBQ3BCQyxRQUFRLEVBQ1Isa0VBQWtFO0lBQ2xFQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsWUFB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