@payloadcms/ui 3.0.0-alpha.0 → 3.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@types/assets.d.js +3 -0
- package/dist/config.js +13 -0
- package/dist/elements/ArrayAction/index.js +120 -0
- package/dist/elements/ArrayAction/types.js +6 -0
- package/dist/elements/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +207 -0
- package/dist/elements/Autosave/types.js +6 -0
- package/dist/elements/Banner/index.js +52 -0
- package/dist/elements/Banner/types.js +6 -0
- package/dist/elements/Button/index.js +166 -0
- package/dist/elements/Button/types.js +6 -0
- package/dist/elements/Card/index.js +46 -0
- package/dist/elements/Card/types.js +6 -0
- package/dist/elements/CodeEditor/CodeEditor.js +53 -0
- package/dist/elements/CodeEditor/index.js +68 -0
- package/dist/elements/CodeEditor/types.js +6 -0
- package/dist/elements/Collapsible/index.js +128 -0
- package/dist/elements/Collapsible/provider.js +90 -0
- package/dist/elements/Collapsible/types.js +6 -0
- package/dist/elements/ColumnSelector/index.js +109 -0
- package/dist/elements/ColumnSelector/types.js +6 -0
- package/dist/elements/CopyToClipboard/index.js +98 -0
- package/dist/elements/CopyToClipboard/types.js +6 -0
- package/dist/elements/DatePicker/DatePicker.js +147 -0
- package/dist/elements/DatePicker/index.js +63 -0
- package/dist/elements/DatePicker/types.js +6 -0
- package/dist/elements/DeleteDocument/index.js +178 -0
- package/dist/elements/DeleteDocument/types.js +6 -0
- package/dist/elements/DeleteMany/index.js +176 -0
- package/dist/elements/DeleteMany/types.js +6 -0
- package/dist/elements/DocumentControls/index.d.ts +2 -2
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +159 -0
- package/dist/elements/DocumentDrawer/DrawerContent.js +219 -0
- package/dist/elements/DocumentDrawer/index.js +185 -0
- package/dist/elements/DocumentDrawer/types.js +6 -0
- package/dist/elements/DocumentFields/index.js +55 -0
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +23 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +42 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +105 -0
- package/dist/elements/DocumentHeader/Tabs/getCustomViews.js +48 -0
- package/dist/elements/DocumentHeader/Tabs/getViewConfig.js +24 -0
- package/dist/elements/DocumentHeader/Tabs/index.js +84 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +27 -0
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +75 -0
- package/dist/elements/DocumentHeader/index.js +81 -0
- package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +82 -0
- package/dist/elements/DraggableSortable/DraggableSortableItem/types.js +6 -0
- package/dist/elements/DraggableSortable/index.js +96 -0
- package/dist/elements/DraggableSortable/types.js +6 -0
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js +32 -0
- package/dist/elements/DraggableSortable/useDraggableSortable/types.js +6 -0
- package/dist/elements/Drawer/index.js +156 -0
- package/dist/elements/Drawer/types.js +6 -0
- package/dist/elements/Drawer/useDrawerSlug.js +23 -0
- package/dist/elements/Dropzone/index.js +117 -0
- package/dist/elements/DuplicateDocument/index.js +217 -0
- package/dist/elements/DuplicateDocument/types.js +6 -0
- package/dist/elements/EditMany/index.js +274 -0
- package/dist/elements/EditMany/types.js +6 -0
- package/dist/elements/EditUpload/index.js +390 -0
- package/dist/elements/ErrorPill/index.js +37 -0
- package/dist/elements/ErrorPill/types.js +6 -0
- package/dist/elements/FieldSelect/index.js +138 -0
- package/dist/elements/FileDetails/FileMeta/index.js +96 -0
- package/dist/elements/FileDetails/FileMeta/types.js +6 -0
- package/dist/elements/FileDetails/index.js +59 -0
- package/dist/elements/FileDetails/types.js +6 -0
- package/dist/elements/GenerateConfirmation/index.js +72 -0
- package/dist/elements/GenerateConfirmation/types.js +6 -0
- package/dist/elements/GetFilterOptions/index.js +57 -0
- package/dist/elements/Gutter/index.js +72 -0
- package/dist/elements/Hamburger/index.js +54 -0
- package/dist/elements/Header/index.d.ts.map +1 -1
- package/dist/elements/Header/index.js +140 -0
- package/dist/elements/HydrateClientUser/index.js +28 -0
- package/dist/elements/IDLabel/index.js +28 -0
- package/dist/elements/ListControls/getTextFieldsToBeSearched.js +21 -0
- package/dist/elements/ListControls/index.js +149 -0
- package/dist/elements/ListControls/types.js +6 -0
- package/dist/elements/ListDrawer/DrawerContent.js +315 -0
- package/dist/elements/ListDrawer/index.js +198 -0
- package/dist/elements/ListDrawer/types.js +6 -0
- package/dist/elements/ListSelection/index.js +83 -0
- package/dist/elements/Loading/index.js +103 -0
- package/dist/elements/LoadingOverlay/index.js +130 -0
- package/dist/elements/LoadingOverlay/reducer.js +49 -0
- package/dist/elements/LoadingOverlay/types.js +6 -0
- package/dist/elements/Localizer/LocalizerLabel/index.js +43 -0
- package/dist/elements/Localizer/index.js +121 -0
- package/dist/elements/Logout/index.d.ts.map +1 -1
- package/dist/elements/Logout/index.js +49 -0
- package/dist/elements/Nav/NavHamburger/index.js +34 -0
- package/dist/elements/Nav/NavToggler/index.js +53 -0
- package/dist/elements/Nav/NavWrapper/index.js +34 -0
- package/dist/elements/Nav/context.js +150 -0
- package/dist/elements/Nav/index.d.ts.map +1 -1
- package/dist/elements/Nav/index.js +106 -0
- package/dist/elements/NavGroup/index.js +129 -0
- package/dist/elements/Pagination/ClickableArrow/index.js +36 -0
- package/dist/elements/Pagination/ClickableArrow/types.js +6 -0
- package/dist/elements/Pagination/Page/index.js +33 -0
- package/dist/elements/Pagination/Page/types.js +6 -0
- package/dist/elements/Pagination/Separator/index.js +22 -0
- package/dist/elements/Pagination/index.js +126 -0
- package/dist/elements/Pagination/types.js +6 -0
- package/dist/elements/PerPage/index.d.ts.map +1 -1
- package/dist/elements/PerPage/index.js +115 -0
- package/dist/elements/Pill/index.js +93 -0
- package/dist/elements/Pill/types.js +6 -0
- package/dist/elements/Popup/PopupButtonList/index.d.ts +2 -2
- package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
- package/dist/elements/Popup/PopupButtonList/index.js +118 -0
- package/dist/elements/Popup/PopupTrigger/index.js +51 -0
- package/dist/elements/Popup/PopupTrigger/types.js +6 -0
- package/dist/elements/Popup/index.js +193 -0
- package/dist/elements/Popup/types.js +6 -0
- package/dist/elements/PreviewButton/index.js +129 -0
- package/dist/elements/PreviewSizes/index.js +163 -0
- package/dist/elements/Publish/index.js +153 -0
- package/dist/elements/PublishMany/index.js +169 -0
- package/dist/elements/PublishMany/types.js +6 -0
- package/dist/elements/ReactSelect/ClearIndicator/index.js +31 -0
- package/dist/elements/ReactSelect/Control/index.js +49 -0
- package/dist/elements/ReactSelect/MultiValue/index.js +55 -0
- package/dist/elements/ReactSelect/MultiValueLabel/index.js +34 -0
- package/dist/elements/ReactSelect/MultiValueRemove/index.js +48 -0
- package/dist/elements/ReactSelect/SingleValue/index.js +30 -0
- package/dist/elements/ReactSelect/ValueContainer/index.js +29 -0
- package/dist/elements/ReactSelect/index.js +177 -0
- package/dist/elements/ReactSelect/types.js +6 -0
- package/dist/elements/RenderCustomComponent/index.js +28 -0
- package/dist/elements/RenderCustomComponent/types.js +6 -0
- package/dist/elements/RenderTitle/index.js +42 -0
- package/dist/elements/RenderTitle/types.js +6 -0
- package/dist/elements/Save/index.js +103 -0
- package/dist/elements/SaveDraft/index.js +147 -0
- package/dist/elements/SearchFilter/index.d.ts.map +1 -1
- package/dist/elements/SearchFilter/index.js +139 -0
- package/dist/elements/SearchFilter/types.js +6 -0
- package/dist/elements/SelectAll/index.js +35 -0
- package/dist/elements/SelectRow/index.js +31 -0
- package/dist/elements/ShimmerEffect/index.js +96 -0
- package/dist/elements/SortColumn/index.d.ts.map +1 -1
- package/dist/elements/SortColumn/index.js +139 -0
- package/dist/elements/SortColumn/types.js +6 -0
- package/dist/elements/SortComplex/index.d.ts.map +1 -1
- package/dist/elements/SortComplex/index.js +157 -0
- package/dist/elements/SortComplex/types.js +6 -0
- package/dist/elements/Status/index.js +202 -0
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +57 -0
- package/dist/elements/StayLoggedIn/types.js +6 -0
- package/dist/elements/StepNav/SetStepNav.js +25 -0
- package/dist/elements/StepNav/index.d.ts.map +1 -1
- package/dist/elements/StepNav/index.js +127 -0
- package/dist/elements/StepNav/types.js +6 -0
- package/dist/elements/Table/TableCellProvider/index.js +47 -0
- package/dist/elements/Table/index.js +63 -0
- package/dist/elements/Table/types.js +6 -0
- package/dist/elements/TableColumns/buildColumns.js +77 -0
- package/dist/elements/TableColumns/columnReducer.js +47 -0
- package/dist/elements/TableColumns/index.js +199 -0
- package/dist/elements/Thumbnail/index.js +89 -0
- package/dist/elements/Thumbnail/types.js +6 -0
- package/dist/elements/ThumbnailCard/index.js +54 -0
- package/dist/elements/ThumbnailCard/types.js +6 -0
- package/dist/elements/Tooltip/index.js +114 -0
- package/dist/elements/Tooltip/types.js +6 -0
- package/dist/elements/Translation/index.js +81 -0
- package/dist/elements/UnpublishMany/index.js +169 -0
- package/dist/elements/UnpublishMany/types.js +6 -0
- package/dist/elements/Upload/index.js +250 -0
- package/dist/elements/Upload/types.js +6 -0
- package/dist/elements/ViewDescription/index.js +38 -0
- package/dist/elements/ViewDescription/types.js +21 -0
- package/dist/elements/WhereBuilder/Condition/Date/index.js +32 -0
- package/dist/elements/WhereBuilder/Condition/Date/types.js +6 -0
- package/dist/elements/WhereBuilder/Condition/Number/index.js +33 -0
- package/dist/elements/WhereBuilder/Condition/Number/types.js +6 -0
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +337 -0
- package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js +98 -0
- package/dist/elements/WhereBuilder/Condition/Relationship/types.js +6 -0
- package/dist/elements/WhereBuilder/Condition/Select/index.js +96 -0
- package/dist/elements/WhereBuilder/Condition/Select/types.js +6 -0
- package/dist/elements/WhereBuilder/Condition/Text/index.js +33 -0
- package/dist/elements/WhereBuilder/Condition/Text/types.js +6 -0
- package/dist/elements/WhereBuilder/Condition/index.js +203 -0
- package/dist/elements/WhereBuilder/Condition/types.js +6 -0
- package/dist/elements/WhereBuilder/field-types.js +185 -0
- package/dist/elements/WhereBuilder/index.js +235 -0
- package/dist/elements/WhereBuilder/reducer.js +88 -0
- package/dist/elements/WhereBuilder/transformWhereQuery.js +57 -0
- package/dist/elements/WhereBuilder/types.js +6 -0
- package/dist/elements/WhereBuilder/validateWhereQuery.js +46 -0
- package/dist/exports/assets.js +27 -0
- package/dist/exports/elements.js +226 -0
- package/dist/exports/forms.js +158 -0
- package/dist/exports/graphics.js +27 -0
- package/dist/exports/hooks.js +55 -0
- package/dist/exports/icons.js +82 -0
- package/dist/exports/index.js +28 -0
- package/dist/exports/providers.js +116 -0
- package/dist/exports/templates.js +22 -0
- package/dist/exports/types.js +6 -0
- package/dist/exports/utilities.js +62 -0
- package/dist/forms/Error/index.js +43 -0
- package/dist/forms/FieldDescription/index.js +38 -0
- package/dist/forms/FieldDescription/types.js +6 -0
- package/dist/forms/FieldPathProvider/index.js +44 -0
- package/dist/forms/FieldPathProvider/types.js +6 -0
- package/dist/forms/Form/buildFieldSchemaMap.js +54 -0
- package/dist/forms/Form/buildInitialState.js +26 -0
- package/dist/forms/Form/context.js +84 -0
- package/dist/forms/Form/createNestedFieldPath.js +25 -0
- package/dist/forms/Form/errorMessages.js +15 -0
- package/dist/forms/Form/fieldReducer.js +286 -0
- package/dist/forms/Form/getDataByPath.js +29 -0
- package/dist/forms/Form/getSiblingData.js +50 -0
- package/dist/forms/Form/index.js +565 -0
- package/dist/forms/Form/initContextState.js +45 -0
- package/dist/forms/Form/mergeServerFormState.js +45 -0
- package/dist/forms/Form/reduceFieldsToValues.js +34 -0
- package/dist/forms/Form/rows.js +53 -0
- package/dist/forms/Form/types.js +6 -0
- package/dist/forms/Label/index.js +36 -0
- package/dist/forms/NullifyField/index.js +103 -0
- package/dist/forms/RenderFields/RenderField.js +30 -0
- package/dist/forms/RenderFields/index.js +66 -0
- package/dist/forms/RenderFields/types.js +6 -0
- package/dist/forms/RowLabel/index.js +50 -0
- package/dist/forms/RowLabel/types.js +21 -0
- package/dist/forms/Submit/index.js +75 -0
- package/dist/forms/WatchChildErrors/buildPathSegments.js +37 -0
- package/dist/forms/WatchChildErrors/getFieldStateFromPaths.js +35 -0
- package/dist/forms/WatchChildErrors/getNestedFieldState.js +28 -0
- package/dist/forms/WatchChildErrors/index.js +41 -0
- package/dist/forms/fields/Array/ArrayRow.js +87 -0
- package/dist/forms/fields/Array/index.js +305 -0
- package/dist/forms/fields/Array/types.js +6 -0
- package/dist/forms/fields/Blocks/BlockRow.js +101 -0
- package/dist/forms/fields/Blocks/BlocksDrawer/BlockSearch/index.js +37 -0
- package/dist/forms/fields/Blocks/BlocksDrawer/index.js +134 -0
- package/dist/forms/fields/Blocks/BlocksDrawer/types.js +6 -0
- package/dist/forms/fields/Blocks/RowActions.js +52 -0
- package/dist/forms/fields/Blocks/SectionTitle/index.js +54 -0
- package/dist/forms/fields/Blocks/SectionTitle/types.js +6 -0
- package/dist/forms/fields/Blocks/index.js +317 -0
- package/dist/forms/fields/Blocks/types.js +6 -0
- package/dist/forms/fields/Checkbox/Input.js +56 -0
- package/dist/forms/fields/Checkbox/index.js +134 -0
- package/dist/forms/fields/Checkbox/types.js +6 -0
- package/dist/forms/fields/Code/index.js +115 -0
- package/dist/forms/fields/Code/types.js +6 -0
- package/dist/forms/fields/Collapsible/index.js +169 -0
- package/dist/forms/fields/Collapsible/types.js +6 -0
- package/dist/forms/fields/ConfirmPassword/index.js +112 -0
- package/dist/forms/fields/ConfirmPassword/types.js +6 -0
- package/dist/forms/fields/DateTime/index.js +115 -0
- package/dist/forms/fields/DateTime/types.js +6 -0
- package/dist/forms/fields/Email/index.js +121 -0
- package/dist/forms/fields/Email/types.js +6 -0
- package/dist/forms/fields/Group/index.js +127 -0
- package/dist/forms/fields/Group/provider.js +74 -0
- package/dist/forms/fields/Group/types.js +6 -0
- package/dist/forms/fields/HiddenInput/index.js +88 -0
- package/dist/forms/fields/HiddenInput/types.js +6 -0
- package/dist/forms/fields/JSON/index.js +137 -0
- package/dist/forms/fields/JSON/types.js +6 -0
- package/dist/forms/fields/Number/index.js +212 -0
- package/dist/forms/fields/Number/types.js +6 -0
- package/dist/forms/fields/Password/index.js +116 -0
- package/dist/forms/fields/Password/types.js +6 -0
- package/dist/forms/fields/Point/index.js +147 -0
- package/dist/forms/fields/Point/types.js +6 -0
- package/dist/forms/fields/RadioGroup/Radio/index.js +45 -0
- package/dist/forms/fields/RadioGroup/index.js +147 -0
- package/dist/forms/fields/RadioGroup/types.js +6 -0
- package/dist/forms/fields/Relationship/AddNew/index.js +216 -0
- package/dist/forms/fields/Relationship/AddNew/types.js +6 -0
- package/dist/forms/fields/Relationship/AddNew/useRelatedCollections.js +27 -0
- package/dist/forms/fields/Relationship/createRelationMap.js +59 -0
- package/dist/forms/fields/Relationship/findOptionsByValue.js +45 -0
- package/dist/forms/fields/Relationship/index.js +509 -0
- package/dist/forms/fields/Relationship/optionsReducer.js +126 -0
- package/dist/forms/fields/Relationship/select-components/MultiValueLabel/index.js +109 -0
- package/dist/forms/fields/Relationship/select-components/SingleValue/index.js +108 -0
- package/dist/forms/fields/Relationship/types.js +6 -0
- package/dist/forms/fields/RichText/index.js +16 -0
- package/dist/forms/fields/RichText/types.js +6 -0
- package/dist/forms/fields/Row/index.js +42 -0
- package/dist/forms/fields/Row/provider.js +74 -0
- package/dist/forms/fields/Row/types.js +6 -0
- package/dist/forms/fields/Select/index.js +183 -0
- package/dist/forms/fields/Select/types.js +6 -0
- package/dist/forms/fields/Tabs/Tab/index.js +85 -0
- package/dist/forms/fields/Tabs/index.js +167 -0
- package/dist/forms/fields/Tabs/provider.js +74 -0
- package/dist/forms/fields/Tabs/types.js +6 -0
- package/dist/forms/fields/Text/index.js +194 -0
- package/dist/forms/fields/Text/types.js +6 -0
- package/dist/forms/fields/Textarea/index.js +133 -0
- package/dist/forms/fields/Textarea/types.js +6 -0
- package/dist/forms/fields/UI/index.js +16 -0
- package/dist/forms/fields/Upload/Input.js +3 -0
- package/dist/forms/fields/Upload/index.js +210 -0
- package/dist/forms/fields/Upload/types.js +6 -0
- package/dist/forms/fields/getFilterOptionsQuery.js +39 -0
- package/dist/forms/fields/index.js +67 -0
- package/dist/forms/fields/shared.js +29 -0
- package/dist/forms/useField/index.js +169 -0
- package/dist/forms/useField/types.js +6 -0
- package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js +335 -0
- package/dist/forms/utilities/buildStateFromSchema/buildStateFromSchema.spec.js +76 -0
- package/dist/forms/utilities/buildStateFromSchema/index.js +35 -0
- package/dist/forms/utilities/buildStateFromSchema/iterateFields.js +48 -0
- package/dist/forms/withCondition/WatchCondition.js +66 -0
- package/dist/forms/withCondition/index.js +33 -0
- package/dist/graphics/Account/Default/index.js +43 -0
- package/dist/graphics/Account/Gravatar/index.js +42 -0
- package/dist/graphics/Account/index.js +50 -0
- package/dist/graphics/DefaultBlockImage/index.js +84 -0
- package/dist/graphics/ExternalLink/index.js +34 -0
- package/dist/graphics/File/index.js +36 -0
- package/dist/graphics/Icon/index.js +64 -0
- package/dist/graphics/Logo/index.js +60 -0
- package/dist/graphics/Search/index.js +42 -0
- package/dist/hooks/useAdminThumbnail.js +17 -0
- package/dist/hooks/useDebounce.js +31 -0
- package/dist/hooks/useDebouncedCallback.js +29 -0
- package/dist/hooks/useDebouncedEffect.js +32 -0
- package/dist/hooks/useDelay.js +82 -0
- package/dist/hooks/useDelayedRender.js +97 -0
- package/dist/hooks/useHotkey.js +129 -0
- package/dist/hooks/useIntersect.js +39 -0
- package/dist/hooks/usePayloadAPI.js +94 -0
- package/dist/hooks/useResize.js +59 -0
- package/dist/hooks/useThrottledEffect.js +31 -0
- package/dist/hooks/useThumbnail.js +57 -0
- package/dist/hooks/useUseAsTitle.js +19 -0
- package/dist/icons/Calendar/index.js +48 -0
- package/dist/icons/Check/index.js +34 -0
- package/dist/icons/Chevron/index.js +36 -0
- package/dist/icons/CloseMenu/index.js +39 -0
- package/dist/icons/CodeBlock/index.js +32 -0
- package/dist/icons/Copy/index.js +33 -0
- package/dist/icons/DragHandle/index.js +57 -0
- package/dist/icons/Edit/index.js +37 -0
- package/dist/icons/Line/index.js +30 -0
- package/dist/icons/Link/index.js +33 -0
- package/dist/icons/LogOut/index.js +37 -0
- package/dist/icons/Menu/index.js +45 -0
- package/dist/icons/MinimizeMaximize/index.js +87 -0
- package/dist/icons/More/index.js +42 -0
- package/dist/icons/Plus/index.js +36 -0
- package/dist/icons/Search/index.js +36 -0
- package/dist/icons/Swap/index.js +43 -0
- package/dist/icons/X/index.js +41 -0
- package/dist/index.js +20 -0
- package/dist/providers/ActionsProvider/index.js +89 -0
- package/dist/providers/Auth/HydrateClientUser/index.js +28 -0
- package/dist/providers/Auth/index.js +373 -0
- package/dist/providers/Auth/types.js +6 -0
- package/dist/providers/ClientFunction/index.js +65 -0
- package/dist/providers/ComponentMapProvider/index.js +98 -0
- package/dist/providers/Config/index.js +70 -0
- package/dist/providers/CustomProvider/index.js +38 -0
- package/dist/providers/DocumentEvents/index.js +77 -0
- package/dist/providers/DocumentEvents/types.js +6 -0
- package/dist/providers/DocumentInfo/SetDocumentInfo/index.js +34 -0
- package/dist/providers/DocumentInfo/index.js +353 -0
- package/dist/providers/DocumentInfo/types.js +6 -0
- package/dist/providers/EditDepth/index.js +71 -0
- package/dist/providers/FormQueryParams/index.js +77 -0
- package/dist/providers/ListInfo/index.js +78 -0
- package/dist/providers/ListInfo/types.js +6 -0
- package/dist/providers/Locale/index.js +122 -0
- package/dist/providers/OperationProvider/index.js +71 -0
- package/dist/providers/Params/index.js +72 -0
- package/dist/providers/Portal/index.js +20 -0
- package/dist/providers/Preferences/index.js +184 -0
- package/dist/providers/Root/index.js +103 -0
- package/dist/providers/SearchParams/index.js +119 -0
- package/dist/providers/SearchParams/types.js +6 -0
- package/dist/providers/SelectionProvider/index.js +218 -0
- package/dist/providers/Theme/index.js +123 -0
- package/dist/providers/Theme/types.js +6 -0
- package/dist/providers/Theme/utilities.js +35 -0
- package/dist/providers/Translation/index.js +92 -0
- package/dist/templates/Default/NavHamburger/index.js +28 -0
- package/dist/templates/Default/Wrapper/index.js +32 -0
- package/dist/templates/Default/index.js +88 -0
- package/dist/templates/Default/types.js +6 -0
- package/dist/templates/Minimal/index.js +34 -0
- package/dist/templates/Minimal/types.js +6 -0
- package/dist/utilities/api.js +98 -0
- package/dist/utilities/arraysHaveSameStrings.js +28 -0
- package/dist/utilities/buildComponentMap/index.js +101 -0
- package/dist/utilities/buildComponentMap/mapFields.js +318 -0
- package/dist/utilities/buildComponentMap/types.js +6 -0
- package/dist/utilities/buildFieldSchemaMap/index.js +36 -0
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +94 -0
- package/dist/utilities/buildFieldSchemaMap/types.js +6 -0
- package/dist/utilities/canUseDOM.js +13 -0
- package/dist/utilities/findLocaleFromCode.js +18 -0
- package/dist/utilities/formatDate/getSupportedDateLocale.js +21 -0
- package/dist/utilities/formatDate/index.js +78 -0
- package/dist/utilities/formatDocTitle.js +33 -0
- package/dist/utilities/formatFields.js +14 -0
- package/dist/utilities/getFormState.js +28 -0
- package/dist/utilities/getOffsetTop.js +26 -0
- package/dist/utilities/getRequestLanguage.js +17 -0
- package/dist/utilities/getSupportedMonacoLocale.js +26 -0
- package/dist/utilities/groupNavItems.js +61 -0
- package/dist/utilities/scrollToID.js +22 -0
- package/dist/utilities/setsAreEqual.js +17 -0
- package/dist/utilities/withMergedProps/index.js +27 -0
- package/dist/views/Global/RenderCustomView.js +3 -0
- package/package.json +5 -5
|
@@ -0,0 +1,509 @@
|
|
|
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 _utilities = require("payload/utilities");
|
|
13
|
+
const _qs = /*#__PURE__*/ _interop_require_default(require("qs"));
|
|
14
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
15
|
+
const _GetFilterOptions = require("../../../elements/GetFilterOptions");
|
|
16
|
+
const _ReactSelect = /*#__PURE__*/ _interop_require_default(require("../../../elements/ReactSelect"));
|
|
17
|
+
const _useDebouncedCallback = require("../../../hooks/useDebouncedCallback");
|
|
18
|
+
const _Auth = require("../../../providers/Auth");
|
|
19
|
+
const _Config = require("../../../providers/Config");
|
|
20
|
+
const _Locale = require("../../../providers/Locale");
|
|
21
|
+
const _Translation = require("../../../providers/Translation");
|
|
22
|
+
const _context = require("../../Form/context");
|
|
23
|
+
const _useField = /*#__PURE__*/ _interop_require_default(require("../../useField"));
|
|
24
|
+
const _withCondition = require("../../withCondition");
|
|
25
|
+
const _shared = require("../shared");
|
|
26
|
+
const _AddNew = require("./AddNew");
|
|
27
|
+
const _createRelationMap = require("./createRelationMap");
|
|
28
|
+
const _findOptionsByValue = require("./findOptionsByValue");
|
|
29
|
+
require("./index.scss");
|
|
30
|
+
const _optionsReducer = /*#__PURE__*/ _interop_require_default(require("./optionsReducer"));
|
|
31
|
+
const _MultiValueLabel = require("./select-components/MultiValueLabel");
|
|
32
|
+
const _SingleValue = require("./select-components/SingleValue");
|
|
33
|
+
function _interop_require_default(obj) {
|
|
34
|
+
return obj && obj.__esModule ? obj : {
|
|
35
|
+
default: obj
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
39
|
+
if (typeof WeakMap !== "function") return null;
|
|
40
|
+
var cacheBabelInterop = new WeakMap();
|
|
41
|
+
var cacheNodeInterop = new WeakMap();
|
|
42
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
43
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
44
|
+
})(nodeInterop);
|
|
45
|
+
}
|
|
46
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
47
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
48
|
+
return obj;
|
|
49
|
+
}
|
|
50
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
51
|
+
return {
|
|
52
|
+
default: obj
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
56
|
+
if (cache && cache.has(obj)) {
|
|
57
|
+
return cache.get(obj);
|
|
58
|
+
}
|
|
59
|
+
var newObj = {
|
|
60
|
+
__proto__: null
|
|
61
|
+
};
|
|
62
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
63
|
+
for(var key in obj){
|
|
64
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
65
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
66
|
+
if (desc && (desc.get || desc.set)) {
|
|
67
|
+
Object.defineProperty(newObj, key, desc);
|
|
68
|
+
} else {
|
|
69
|
+
newObj[key] = obj[key];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
newObj.default = obj;
|
|
74
|
+
if (cache) {
|
|
75
|
+
cache.set(obj, newObj);
|
|
76
|
+
}
|
|
77
|
+
return newObj;
|
|
78
|
+
}
|
|
79
|
+
const maxResultsPerRequest = 10;
|
|
80
|
+
const baseClass = 'relationship';
|
|
81
|
+
const Relationship = (props)=>{
|
|
82
|
+
const { name, Description, Error, Label, className, path: pathFromProps, readOnly, required, style, validate, width } = props;
|
|
83
|
+
const config = (0, _Config.useConfig)();
|
|
84
|
+
const { collections, routes: { api }, serverURL } = config;
|
|
85
|
+
const relationTo = 'relationTo' in props ? props?.relationTo : undefined;
|
|
86
|
+
const hasMany = 'hasMany' in props ? props?.hasMany : undefined;
|
|
87
|
+
const filterOptions = 'filterOptions' in props ? props?.filterOptions : undefined;
|
|
88
|
+
const sortOptions = 'sortOptions' in props ? props?.sortOptions : undefined;
|
|
89
|
+
const isSortable = 'isSortable' in props ? props?.isSortable : true;
|
|
90
|
+
const allowCreate = 'allowCreate' in props ? props?.allowCreate : true;
|
|
91
|
+
const { i18n, t } = (0, _Translation.useTranslation)();
|
|
92
|
+
const { permissions } = (0, _Auth.useAuth)();
|
|
93
|
+
const { code: locale } = (0, _Locale.useLocale)();
|
|
94
|
+
const formProcessing = (0, _context.useFormProcessing)();
|
|
95
|
+
const hasMultipleRelations = Array.isArray(relationTo);
|
|
96
|
+
const [options, dispatchOptions] = (0, _react.useReducer)(_optionsReducer.default, []);
|
|
97
|
+
const [lastFullyLoadedRelation, setLastFullyLoadedRelation] = (0, _react.useState)(-1);
|
|
98
|
+
const [lastLoadedPage, setLastLoadedPage] = (0, _react.useState)({});
|
|
99
|
+
const [errorLoading, setErrorLoading] = (0, _react.useState)('');
|
|
100
|
+
const [filterOptionsResult, setFilterOptionsResult] = (0, _react.useState)();
|
|
101
|
+
const [search, setSearch] = (0, _react.useState)('');
|
|
102
|
+
const [isLoading, setIsLoading] = (0, _react.useState)(false);
|
|
103
|
+
const [hasLoadedFirstPage, setHasLoadedFirstPage] = (0, _react.useState)(false);
|
|
104
|
+
const [enableWordBoundarySearch, setEnableWordBoundarySearch] = (0, _react.useState)(false);
|
|
105
|
+
const firstRun = (0, _react.useRef)(true);
|
|
106
|
+
const memoizedValidate = (0, _react.useCallback)((value, validationOptions)=>{
|
|
107
|
+
if (typeof validate === 'function') {
|
|
108
|
+
return validate(value, {
|
|
109
|
+
...validationOptions,
|
|
110
|
+
required
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}, [
|
|
114
|
+
validate,
|
|
115
|
+
required
|
|
116
|
+
]);
|
|
117
|
+
const { initialValue, path, setValue, showError, value } = (0, _useField.default)({
|
|
118
|
+
path: pathFromProps || name,
|
|
119
|
+
validate: memoizedValidate
|
|
120
|
+
});
|
|
121
|
+
const [drawerIsOpen, setDrawerIsOpen] = (0, _react.useState)(false);
|
|
122
|
+
const getResults = (0, _react.useCallback)(async ({ lastFullyLoadedRelation: lastFullyLoadedRelationArg, onSuccess, search: searchArg, sort, value: valueArg })=>{
|
|
123
|
+
if (!permissions) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const lastFullyLoadedRelationToUse = typeof lastFullyLoadedRelationArg !== 'undefined' ? lastFullyLoadedRelationArg : -1;
|
|
127
|
+
const relations = Array.isArray(relationTo) ? relationTo : [
|
|
128
|
+
relationTo
|
|
129
|
+
];
|
|
130
|
+
const relationsToFetch = lastFullyLoadedRelationToUse === -1 ? relations : relations.slice(lastFullyLoadedRelationToUse + 1);
|
|
131
|
+
let resultsFetched = 0;
|
|
132
|
+
const relationMap = (0, _createRelationMap.createRelationMap)({
|
|
133
|
+
hasMany,
|
|
134
|
+
relationTo,
|
|
135
|
+
value: valueArg
|
|
136
|
+
});
|
|
137
|
+
if (!errorLoading) {
|
|
138
|
+
relationsToFetch.reduce(async (priorRelation, relation)=>{
|
|
139
|
+
const relationFilterOption = filterOptionsResult?.[relation];
|
|
140
|
+
let lastLoadedPageToUse;
|
|
141
|
+
if (search !== searchArg) {
|
|
142
|
+
lastLoadedPageToUse = 1;
|
|
143
|
+
} else {
|
|
144
|
+
lastLoadedPageToUse = lastLoadedPage[relation] + 1;
|
|
145
|
+
}
|
|
146
|
+
await priorRelation;
|
|
147
|
+
if (relationFilterOption === false) {
|
|
148
|
+
setLastFullyLoadedRelation(relations.indexOf(relation));
|
|
149
|
+
return Promise.resolve();
|
|
150
|
+
}
|
|
151
|
+
if (resultsFetched < 10) {
|
|
152
|
+
const collection = collections.find((coll)=>coll.slug === relation);
|
|
153
|
+
let fieldToSearch = collection?.defaultSort || collection?.admin?.useAsTitle || 'id';
|
|
154
|
+
if (!searchArg) {
|
|
155
|
+
if (typeof sortOptions === 'string') {
|
|
156
|
+
fieldToSearch = sortOptions;
|
|
157
|
+
} else if (sortOptions?.[relation]) {
|
|
158
|
+
fieldToSearch = sortOptions[relation];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const query = {
|
|
162
|
+
depth: 0,
|
|
163
|
+
draft: true,
|
|
164
|
+
limit: maxResultsPerRequest,
|
|
165
|
+
locale,
|
|
166
|
+
page: lastLoadedPageToUse,
|
|
167
|
+
sort: fieldToSearch,
|
|
168
|
+
where: {
|
|
169
|
+
and: [
|
|
170
|
+
{
|
|
171
|
+
id: {
|
|
172
|
+
not_in: relationMap[relation]
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
if (searchArg) {
|
|
179
|
+
query.where.and.push({
|
|
180
|
+
[fieldToSearch]: {
|
|
181
|
+
like: searchArg
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
if (relationFilterOption && typeof relationFilterOption !== 'boolean') {
|
|
186
|
+
query.where.and.push(relationFilterOption);
|
|
187
|
+
}
|
|
188
|
+
const response = await fetch(`${serverURL}${api}/${relation}?${_qs.default.stringify(query)}`, {
|
|
189
|
+
credentials: 'include',
|
|
190
|
+
headers: {
|
|
191
|
+
'Accept-Language': i18n.language
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
if (response.ok) {
|
|
195
|
+
const data = await response.json();
|
|
196
|
+
setLastLoadedPage((prevState)=>{
|
|
197
|
+
return {
|
|
198
|
+
...prevState,
|
|
199
|
+
[relation]: lastLoadedPageToUse
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
if (!data.nextPage) {
|
|
203
|
+
setLastFullyLoadedRelation(relations.indexOf(relation));
|
|
204
|
+
}
|
|
205
|
+
if (data.docs.length > 0) {
|
|
206
|
+
resultsFetched += data.docs.length;
|
|
207
|
+
dispatchOptions({
|
|
208
|
+
type: 'ADD',
|
|
209
|
+
collection,
|
|
210
|
+
// TODO: fix this
|
|
211
|
+
// @ts-ignore-next-line
|
|
212
|
+
config,
|
|
213
|
+
docs: data.docs,
|
|
214
|
+
i18n,
|
|
215
|
+
sort
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
} else if (response.status === 403) {
|
|
219
|
+
setLastFullyLoadedRelation(relations.indexOf(relation));
|
|
220
|
+
dispatchOptions({
|
|
221
|
+
type: 'ADD',
|
|
222
|
+
collection,
|
|
223
|
+
// TODO: fix this
|
|
224
|
+
// @ts-ignore-next-line
|
|
225
|
+
config,
|
|
226
|
+
docs: [],
|
|
227
|
+
i18n,
|
|
228
|
+
ids: relationMap[relation],
|
|
229
|
+
sort
|
|
230
|
+
});
|
|
231
|
+
} else {
|
|
232
|
+
setErrorLoading(t('error:unspecific'));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}, Promise.resolve());
|
|
236
|
+
if (typeof onSuccess === 'function') onSuccess();
|
|
237
|
+
}
|
|
238
|
+
}, [
|
|
239
|
+
permissions,
|
|
240
|
+
relationTo,
|
|
241
|
+
hasMany,
|
|
242
|
+
errorLoading,
|
|
243
|
+
search,
|
|
244
|
+
lastLoadedPage,
|
|
245
|
+
collections,
|
|
246
|
+
locale,
|
|
247
|
+
filterOptionsResult,
|
|
248
|
+
serverURL,
|
|
249
|
+
sortOptions,
|
|
250
|
+
api,
|
|
251
|
+
i18n,
|
|
252
|
+
config,
|
|
253
|
+
t
|
|
254
|
+
]);
|
|
255
|
+
const updateSearch = (0, _useDebouncedCallback.useDebouncedCallback)((searchArg, valueArg)=>{
|
|
256
|
+
getResults({
|
|
257
|
+
search: searchArg,
|
|
258
|
+
sort: true,
|
|
259
|
+
value: valueArg
|
|
260
|
+
});
|
|
261
|
+
setSearch(searchArg);
|
|
262
|
+
}, 300);
|
|
263
|
+
const handleInputChange = (0, _react.useCallback)((searchArg, valueArg)=>{
|
|
264
|
+
if (search !== searchArg) {
|
|
265
|
+
setLastLoadedPage({});
|
|
266
|
+
updateSearch(searchArg, valueArg, searchArg !== '');
|
|
267
|
+
}
|
|
268
|
+
}, [
|
|
269
|
+
search,
|
|
270
|
+
updateSearch
|
|
271
|
+
]);
|
|
272
|
+
// ///////////////////////////////////
|
|
273
|
+
// Ensure we have an option for each value
|
|
274
|
+
// ///////////////////////////////////
|
|
275
|
+
(0, _react.useEffect)(()=>{
|
|
276
|
+
const relationMap = (0, _createRelationMap.createRelationMap)({
|
|
277
|
+
hasMany,
|
|
278
|
+
relationTo,
|
|
279
|
+
value
|
|
280
|
+
});
|
|
281
|
+
Object.entries(relationMap).reduce(async (priorRelation, [relation, ids])=>{
|
|
282
|
+
await priorRelation;
|
|
283
|
+
const idsToLoad = ids.filter((id)=>{
|
|
284
|
+
return !options.find((optionGroup)=>optionGroup?.options?.find((option)=>option.value === id && option.relationTo === relation));
|
|
285
|
+
});
|
|
286
|
+
if (idsToLoad.length > 0) {
|
|
287
|
+
const query = {
|
|
288
|
+
depth: 0,
|
|
289
|
+
draft: true,
|
|
290
|
+
limit: idsToLoad.length,
|
|
291
|
+
locale,
|
|
292
|
+
where: {
|
|
293
|
+
id: {
|
|
294
|
+
in: idsToLoad
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
if (!errorLoading) {
|
|
299
|
+
const response = await fetch(`${serverURL}${api}/${relation}?${_qs.default.stringify(query)}`, {
|
|
300
|
+
credentials: 'include',
|
|
301
|
+
headers: {
|
|
302
|
+
'Accept-Language': i18n.language
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
const collection = collections.find((coll)=>coll.slug === relation);
|
|
306
|
+
let docs = [];
|
|
307
|
+
if (response.ok) {
|
|
308
|
+
const data = await response.json();
|
|
309
|
+
docs = data.docs;
|
|
310
|
+
}
|
|
311
|
+
dispatchOptions({
|
|
312
|
+
type: 'ADD',
|
|
313
|
+
collection,
|
|
314
|
+
// TODO: fix this
|
|
315
|
+
// @ts-ignore-next-line
|
|
316
|
+
config,
|
|
317
|
+
docs,
|
|
318
|
+
i18n,
|
|
319
|
+
ids: idsToLoad,
|
|
320
|
+
sort: true
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}, Promise.resolve());
|
|
325
|
+
}, [
|
|
326
|
+
options,
|
|
327
|
+
value,
|
|
328
|
+
hasMany,
|
|
329
|
+
errorLoading,
|
|
330
|
+
collections,
|
|
331
|
+
hasMultipleRelations,
|
|
332
|
+
serverURL,
|
|
333
|
+
api,
|
|
334
|
+
i18n,
|
|
335
|
+
relationTo,
|
|
336
|
+
locale,
|
|
337
|
+
config
|
|
338
|
+
]);
|
|
339
|
+
// Determine if we should switch to word boundary search
|
|
340
|
+
(0, _react.useEffect)(()=>{
|
|
341
|
+
const relations = Array.isArray(relationTo) ? relationTo : [
|
|
342
|
+
relationTo
|
|
343
|
+
];
|
|
344
|
+
const isIdOnly = relations.reduce((idOnly, relation)=>{
|
|
345
|
+
const collection = collections.find((coll)=>coll.slug === relation);
|
|
346
|
+
const fieldToSearch = collection?.admin?.useAsTitle || 'id';
|
|
347
|
+
return fieldToSearch === 'id' && idOnly;
|
|
348
|
+
}, true);
|
|
349
|
+
setEnableWordBoundarySearch(!isIdOnly);
|
|
350
|
+
}, [
|
|
351
|
+
relationTo,
|
|
352
|
+
collections
|
|
353
|
+
]);
|
|
354
|
+
// When (`relationTo` || `filterOptionsResult` || `locale`) changes, reset component
|
|
355
|
+
// Note - effect should not run on first run
|
|
356
|
+
(0, _react.useEffect)(()=>{
|
|
357
|
+
if (firstRun.current) {
|
|
358
|
+
firstRun.current = false;
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
dispatchOptions({
|
|
362
|
+
type: 'CLEAR'
|
|
363
|
+
});
|
|
364
|
+
setLastFullyLoadedRelation(-1);
|
|
365
|
+
setLastLoadedPage({});
|
|
366
|
+
setHasLoadedFirstPage(false);
|
|
367
|
+
}, [
|
|
368
|
+
relationTo,
|
|
369
|
+
filterOptionsResult,
|
|
370
|
+
locale
|
|
371
|
+
]);
|
|
372
|
+
const onSave = (0, _react.useCallback)((args)=>{
|
|
373
|
+
dispatchOptions({
|
|
374
|
+
type: 'UPDATE',
|
|
375
|
+
collection: args.collectionConfig,
|
|
376
|
+
// TODO: fix this
|
|
377
|
+
// @ts-ignore-next-line
|
|
378
|
+
config,
|
|
379
|
+
doc: args.doc,
|
|
380
|
+
i18n
|
|
381
|
+
});
|
|
382
|
+
}, [
|
|
383
|
+
i18n,
|
|
384
|
+
config
|
|
385
|
+
]);
|
|
386
|
+
const filterOption = (0, _react.useCallback)((item, searchFilter)=>{
|
|
387
|
+
if (!searchFilter) {
|
|
388
|
+
return true;
|
|
389
|
+
}
|
|
390
|
+
const r = (0, _utilities.wordBoundariesRegex)(searchFilter || '');
|
|
391
|
+
// breaking the labels to search into smaller parts increases performance
|
|
392
|
+
const breakApartThreshold = 250;
|
|
393
|
+
let string = item.label;
|
|
394
|
+
// strings less than breakApartThreshold length won't be chunked
|
|
395
|
+
while(string.length > breakApartThreshold){
|
|
396
|
+
// slicing by the next space after the length of the search input prevents slicing the string up by partial words
|
|
397
|
+
const indexOfSpace = string.indexOf(' ', searchFilter.length);
|
|
398
|
+
if (r.test(string.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))) {
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
string = string.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1);
|
|
402
|
+
}
|
|
403
|
+
return r.test(string.slice(-breakApartThreshold));
|
|
404
|
+
}, []);
|
|
405
|
+
const valueToRender = (0, _findOptionsByValue.findOptionsByValue)({
|
|
406
|
+
options,
|
|
407
|
+
value
|
|
408
|
+
});
|
|
409
|
+
if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') valueToRender.value = null;
|
|
410
|
+
return /*#__PURE__*/ _react.default.createElement("div", {
|
|
411
|
+
className: [
|
|
412
|
+
_shared.fieldBaseClass,
|
|
413
|
+
baseClass,
|
|
414
|
+
className,
|
|
415
|
+
showError && 'error',
|
|
416
|
+
errorLoading && 'error-loading',
|
|
417
|
+
readOnly && `${baseClass}--read-only`
|
|
418
|
+
].filter(Boolean).join(' '),
|
|
419
|
+
id: `field-${path.replace(/\./g, '__')}`,
|
|
420
|
+
style: {
|
|
421
|
+
...style,
|
|
422
|
+
width
|
|
423
|
+
}
|
|
424
|
+
}, Error, Label, /*#__PURE__*/ _react.default.createElement(_GetFilterOptions.GetFilterOptions, {
|
|
425
|
+
filterOptions,
|
|
426
|
+
filterOptionsResult,
|
|
427
|
+
path,
|
|
428
|
+
relationTo,
|
|
429
|
+
setFilterOptionsResult
|
|
430
|
+
}), !errorLoading && /*#__PURE__*/ _react.default.createElement("div", {
|
|
431
|
+
className: `${baseClass}__wrap`
|
|
432
|
+
}, /*#__PURE__*/ _react.default.createElement(_ReactSelect.default, {
|
|
433
|
+
backspaceRemovesValue: !drawerIsOpen,
|
|
434
|
+
components: {
|
|
435
|
+
MultiValueLabel: _MultiValueLabel.MultiValueLabel,
|
|
436
|
+
SingleValue: _SingleValue.SingleValue
|
|
437
|
+
},
|
|
438
|
+
customProps: {
|
|
439
|
+
disableKeyDown: drawerIsOpen,
|
|
440
|
+
disableMouseDown: drawerIsOpen,
|
|
441
|
+
onSave,
|
|
442
|
+
setDrawerIsOpen
|
|
443
|
+
},
|
|
444
|
+
disabled: readOnly || formProcessing,
|
|
445
|
+
filterOption: enableWordBoundarySearch ? filterOption : undefined,
|
|
446
|
+
isLoading: isLoading,
|
|
447
|
+
isMulti: hasMany,
|
|
448
|
+
isSortable: isSortable,
|
|
449
|
+
onChange: !readOnly ? (selected)=>{
|
|
450
|
+
if (selected === null) {
|
|
451
|
+
setValue(hasMany ? [] : null);
|
|
452
|
+
} else if (hasMany) {
|
|
453
|
+
setValue(selected ? selected.map((option)=>{
|
|
454
|
+
if (hasMultipleRelations) {
|
|
455
|
+
return {
|
|
456
|
+
relationTo: option.relationTo,
|
|
457
|
+
value: option.value
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
return option.value;
|
|
461
|
+
}) : null);
|
|
462
|
+
} else if (hasMultipleRelations) {
|
|
463
|
+
setValue({
|
|
464
|
+
relationTo: selected.relationTo,
|
|
465
|
+
value: selected.value
|
|
466
|
+
});
|
|
467
|
+
} else {
|
|
468
|
+
setValue(selected.value);
|
|
469
|
+
}
|
|
470
|
+
} : undefined,
|
|
471
|
+
onInputChange: (newSearch)=>handleInputChange(newSearch, value),
|
|
472
|
+
onMenuOpen: ()=>{
|
|
473
|
+
if (!hasLoadedFirstPage) {
|
|
474
|
+
setIsLoading(true);
|
|
475
|
+
getResults({
|
|
476
|
+
onSuccess: ()=>{
|
|
477
|
+
setHasLoadedFirstPage(true);
|
|
478
|
+
setIsLoading(false);
|
|
479
|
+
},
|
|
480
|
+
value: initialValue
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
},
|
|
484
|
+
onMenuScrollToBottom: ()=>{
|
|
485
|
+
getResults({
|
|
486
|
+
lastFullyLoadedRelation,
|
|
487
|
+
search,
|
|
488
|
+
sort: false,
|
|
489
|
+
value: initialValue
|
|
490
|
+
});
|
|
491
|
+
},
|
|
492
|
+
options: options,
|
|
493
|
+
showError: showError,
|
|
494
|
+
value: valueToRender ?? null
|
|
495
|
+
}), !readOnly && allowCreate && /*#__PURE__*/ _react.default.createElement(_AddNew.AddNewRelation, {
|
|
496
|
+
dispatchOptions,
|
|
497
|
+
hasMany,
|
|
498
|
+
options,
|
|
499
|
+
path,
|
|
500
|
+
relationTo,
|
|
501
|
+
setValue,
|
|
502
|
+
value
|
|
503
|
+
})), errorLoading && /*#__PURE__*/ _react.default.createElement("div", {
|
|
504
|
+
className: `${baseClass}__error-loading`
|
|
505
|
+
}, errorLoading), Description);
|
|
506
|
+
};
|
|
507
|
+
const _default = (0, _withCondition.withCondition)(Relationship);
|
|
508
|
+
|
|
509
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mb3Jtcy9maWVsZHMvUmVsYXRpb25zaGlwL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGVkRG9jcyB9IGZyb20gJ3BheWxvYWQvZGF0YWJhc2UnXG5pbXBvcnQgdHlwZSB7IFdoZXJlIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgd29yZEJvdW5kYXJpZXNSZWdleCB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHFzIGZyb20gJ3FzJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZHVjZXIsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudERyYXdlclByb3BzIH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRG9jdW1lbnREcmF3ZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wdGlvbnNSZXN1bHQsIEdldFJlc3VsdHMsIE9wdGlvbiwgUHJvcHMsIFZhbHVlIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgR2V0RmlsdGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0dldEZpbHRlck9wdGlvbnMnXG5pbXBvcnQgUmVhY3RTZWxlY3QgZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvUmVhY3RTZWxlY3QnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZWRDYWxsYmFjayB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZURlYm91bmNlZENhbGxiYWNrJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9BdXRoJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL0NvbmZpZydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbidcbmltcG9ydCB7IHVzZUZvcm1Qcm9jZXNzaW5nIH0gZnJvbSAnLi4vLi4vRm9ybS9jb250ZXh0J1xuaW1wb3J0IHVzZUZpZWxkIGZyb20gJy4uLy4uL3VzZUZpZWxkJ1xuaW1wb3J0IHsgd2l0aENvbmRpdGlvbiB9IGZyb20gJy4uLy4uL3dpdGhDb25kaXRpb24nXG5pbXBvcnQgeyBmaWVsZEJhc2VDbGFzcyB9IGZyb20gJy4uL3NoYXJlZCdcbmltcG9ydCB7IEFkZE5ld1JlbGF0aW9uIH0gZnJvbSAnLi9BZGROZXcnXG5pbXBvcnQgeyBjcmVhdGVSZWxhdGlvbk1hcCB9IGZyb20gJy4vY3JlYXRlUmVsYXRpb25NYXAnXG5pbXBvcnQgeyBmaW5kT3B0aW9uc0J5VmFsdWUgfSBmcm9tICcuL2ZpbmRPcHRpb25zQnlWYWx1ZSdcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuaW1wb3J0IG9wdGlvbnNSZWR1Y2VyIGZyb20gJy4vb3B0aW9uc1JlZHVjZXInXG5pbXBvcnQgeyBNdWx0aVZhbHVlTGFiZWwgfSBmcm9tICcuL3NlbGVjdC1jb21wb25lbnRzL011bHRpVmFsdWVMYWJlbCdcbmltcG9ydCB7IFNpbmdsZVZhbHVlIH0gZnJvbSAnLi9zZWxlY3QtY29tcG9uZW50cy9TaW5nbGVWYWx1ZSdcblxuY29uc3QgbWF4UmVzdWx0c1BlclJlcXVlc3QgPSAxMFxuXG5jb25zdCBiYXNlQ2xhc3MgPSAncmVsYXRpb25zaGlwJ1xuXG5jb25zdCBSZWxhdGlvbnNoaXA6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBEZXNjcmlwdGlvbixcbiAgICBFcnJvcixcbiAgICBMYWJlbCxcbiAgICBjbGFzc05hbWUsXG4gICAgcGF0aDogcGF0aEZyb21Qcm9wcyxcbiAgICByZWFkT25seSxcbiAgICByZXF1aXJlZCxcbiAgICBzdHlsZSxcbiAgICB2YWxpZGF0ZSxcbiAgICB3aWR0aCxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgY29uZmlnID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7XG4gICAgY29sbGVjdGlvbnMsXG4gICAgcm91dGVzOiB7IGFwaSB9LFxuICAgIHNlcnZlclVSTCxcbiAgfSA9IGNvbmZpZ1xuXG4gIGNvbnN0IHJlbGF0aW9uVG8gPSAncmVsYXRpb25UbycgaW4gcHJvcHMgPyBwcm9wcz8ucmVsYXRpb25UbyA6IHVuZGVmaW5lZFxuICBjb25zdCBoYXNNYW55ID0gJ2hhc01hbnknIGluIHByb3BzID8gcHJvcHM/Lmhhc01hbnkgOiB1bmRlZmluZWRcbiAgY29uc3QgZmlsdGVyT3B0aW9ucyA9ICdmaWx0ZXJPcHRpb25zJyBpbiBwcm9wcyA/IHByb3BzPy5maWx0ZXJPcHRpb25zIDogdW5kZWZpbmVkXG4gIGNvbnN0IHNvcnRPcHRpb25zID0gJ3NvcnRPcHRpb25zJyBpbiBwcm9wcyA/IHByb3BzPy5zb3J0T3B0aW9ucyA6IHVuZGVmaW5lZFxuICBjb25zdCBpc1NvcnRhYmxlID0gJ2lzU29ydGFibGUnIGluIHByb3BzID8gcHJvcHM/LmlzU29ydGFibGUgOiB0cnVlXG4gIGNvbnN0IGFsbG93Q3JlYXRlID0gJ2FsbG93Q3JlYXRlJyBpbiBwcm9wcyA/IHByb3BzPy5hbGxvd0NyZWF0ZSA6IHRydWVcblxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyBwZXJtaXNzaW9ucyB9ID0gdXNlQXV0aCgpXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCBmb3JtUHJvY2Vzc2luZyA9IHVzZUZvcm1Qcm9jZXNzaW5nKClcbiAgY29uc3QgaGFzTXVsdGlwbGVSZWxhdGlvbnMgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pXG4gIGNvbnN0IFtvcHRpb25zLCBkaXNwYXRjaE9wdGlvbnNdID0gdXNlUmVkdWNlcihvcHRpb25zUmVkdWNlciwgW10pXG4gIGNvbnN0IFtsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbiwgc2V0TGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25dID0gdXNlU3RhdGUoLTEpXG4gIGNvbnN0IFtsYXN0TG9hZGVkUGFnZSwgc2V0TGFzdExvYWRlZFBhZ2VdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oe30pXG4gIGNvbnN0IFtlcnJvckxvYWRpbmcsIHNldEVycm9yTG9hZGluZ10gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW2ZpbHRlck9wdGlvbnNSZXN1bHQsIHNldEZpbHRlck9wdGlvbnNSZXN1bHRdID0gdXNlU3RhdGU8RmlsdGVyT3B0aW9uc1Jlc3VsdD4oKVxuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc0xvYWRlZEZpcnN0UGFnZSwgc2V0SGFzTG9hZGVkRmlyc3RQYWdlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZW5hYmxlV29yZEJvdW5kYXJ5U2VhcmNoLCBzZXRFbmFibGVXb3JkQm91bmRhcnlTZWFyY2hdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGZpcnN0UnVuID0gdXNlUmVmKHRydWUpXG5cbiAgY29uc3QgbWVtb2l6ZWRWYWxpZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZSwgdmFsaWRhdGlvbk9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCB7IC4uLnZhbGlkYXRpb25PcHRpb25zLCByZXF1aXJlZCB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3ZhbGlkYXRlLCByZXF1aXJlZF0sXG4gIClcblxuICBjb25zdCB7IGluaXRpYWxWYWx1ZSwgcGF0aCwgc2V0VmFsdWUsIHNob3dFcnJvciwgdmFsdWUgfSA9IHVzZUZpZWxkPFZhbHVlIHwgVmFsdWVbXT4oe1xuICAgIHBhdGg6IHBhdGhGcm9tUHJvcHMgfHwgbmFtZSxcbiAgICB2YWxpZGF0ZTogbWVtb2l6ZWRWYWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBbZHJhd2VySXNPcGVuLCBzZXREcmF3ZXJJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgZ2V0UmVzdWx0czogR2V0UmVzdWx0cyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7XG4gICAgICBsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbjogbGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25BcmcsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBzZWFyY2g6IHNlYXJjaEFyZyxcbiAgICAgIHNvcnQsXG4gICAgICB2YWx1ZTogdmFsdWVBcmcsXG4gICAgfSkgPT4ge1xuICAgICAgaWYgKCFwZXJtaXNzaW9ucykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhc3RGdWxseUxvYWRlZFJlbGF0aW9uVG9Vc2UgPVxuICAgICAgICB0eXBlb2YgbGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25BcmcgIT09ICd1bmRlZmluZWQnID8gbGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25BcmcgOiAtMVxuXG4gICAgICBjb25zdCByZWxhdGlvbnMgPSBBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pID8gcmVsYXRpb25UbyA6IFtyZWxhdGlvblRvXVxuICAgICAgY29uc3QgcmVsYXRpb25zVG9GZXRjaCA9XG4gICAgICAgIGxhc3RGdWxseUxvYWRlZFJlbGF0aW9uVG9Vc2UgPT09IC0xXG4gICAgICAgICAgPyByZWxhdGlvbnNcbiAgICAgICAgICA6IHJlbGF0aW9ucy5zbGljZShsYXN0RnVsbHlMb2FkZWRSZWxhdGlvblRvVXNlICsgMSlcblxuICAgICAgbGV0IHJlc3VsdHNGZXRjaGVkID0gMFxuICAgICAgY29uc3QgcmVsYXRpb25NYXAgPSBjcmVhdGVSZWxhdGlvbk1hcCh7XG4gICAgICAgIGhhc01hbnksXG4gICAgICAgIHJlbGF0aW9uVG8sXG4gICAgICAgIHZhbHVlOiB2YWx1ZUFyZyxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghZXJyb3JMb2FkaW5nKSB7XG4gICAgICAgIHJlbGF0aW9uc1RvRmV0Y2gucmVkdWNlKGFzeW5jIChwcmlvclJlbGF0aW9uLCByZWxhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uRmlsdGVyT3B0aW9uID0gZmlsdGVyT3B0aW9uc1Jlc3VsdD8uW3JlbGF0aW9uXVxuICAgICAgICAgIGxldCBsYXN0TG9hZGVkUGFnZVRvVXNlXG4gICAgICAgICAgaWYgKHNlYXJjaCAhPT0gc2VhcmNoQXJnKSB7XG4gICAgICAgICAgICBsYXN0TG9hZGVkUGFnZVRvVXNlID0gMVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0TG9hZGVkUGFnZVRvVXNlID0gbGFzdExvYWRlZFBhZ2VbcmVsYXRpb25dICsgMVxuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBwcmlvclJlbGF0aW9uXG5cbiAgICAgICAgICBpZiAocmVsYXRpb25GaWx0ZXJPcHRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzZXRMYXN0RnVsbHlMb2FkZWRSZWxhdGlvbihyZWxhdGlvbnMuaW5kZXhPZihyZWxhdGlvbikpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzdWx0c0ZldGNoZWQgPCAxMCkge1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zLmZpbmQoKGNvbGwpID0+IGNvbGwuc2x1ZyA9PT0gcmVsYXRpb24pXG4gICAgICAgICAgICBsZXQgZmllbGRUb1NlYXJjaCA9IGNvbGxlY3Rpb24/LmRlZmF1bHRTb3J0IHx8IGNvbGxlY3Rpb24/LmFkbWluPy51c2VBc1RpdGxlIHx8ICdpZCdcbiAgICAgICAgICAgIGlmICghc2VhcmNoQXJnKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc29ydE9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmllbGRUb1NlYXJjaCA9IHNvcnRPcHRpb25zXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc29ydE9wdGlvbnM/LltyZWxhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICBmaWVsZFRvU2VhcmNoID0gc29ydE9wdGlvbnNbcmVsYXRpb25dXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnk6IHtcbiAgICAgICAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93blxuICAgICAgICAgICAgICB3aGVyZTogV2hlcmVcbiAgICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICBkcmFmdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbGltaXQ6IG1heFJlc3VsdHNQZXJSZXF1ZXN0LFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIHBhZ2U6IGxhc3RMb2FkZWRQYWdlVG9Vc2UsXG4gICAgICAgICAgICAgIHNvcnQ6IGZpZWxkVG9TZWFyY2gsXG4gICAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbm90X2luOiByZWxhdGlvbk1hcFtyZWxhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWFyY2hBcmcpIHtcbiAgICAgICAgICAgICAgcXVlcnkud2hlcmUuYW5kLnB1c2goe1xuICAgICAgICAgICAgICAgIFtmaWVsZFRvU2VhcmNoXToge1xuICAgICAgICAgICAgICAgICAgbGlrZTogc2VhcmNoQXJnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZWxhdGlvbkZpbHRlck9wdGlvbiAmJiB0eXBlb2YgcmVsYXRpb25GaWx0ZXJPcHRpb24gIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICBxdWVyeS53aGVyZS5hbmQucHVzaChyZWxhdGlvbkZpbHRlck9wdGlvbilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtzZXJ2ZXJVUkx9JHthcGl9LyR7cmVsYXRpb259PyR7cXMuc3RyaW5naWZ5KHF1ZXJ5KX1gLCB7XG4gICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhOiBQYWdpbmF0ZWREb2NzPHVua25vd24+ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAgIHNldExhc3RMb2FkZWRQYWdlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgW3JlbGF0aW9uXTogbGFzdExvYWRlZFBhZ2VUb1VzZSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKCFkYXRhLm5leHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgc2V0TGFzdEZ1bGx5TG9hZGVkUmVsYXRpb24ocmVsYXRpb25zLmluZGV4T2YocmVsYXRpb24pKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGRhdGEuZG9jcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c0ZldGNoZWQgKz0gZGF0YS5kb2NzLmxlbmd0aFxuXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREQnLFxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpeCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgZG9jczogZGF0YS5kb2NzLFxuICAgICAgICAgICAgICAgICAgaTE4bixcbiAgICAgICAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICBzZXRMYXN0RnVsbHlMb2FkZWRSZWxhdGlvbihyZWxhdGlvbnMuaW5kZXhPZihyZWxhdGlvbikpXG4gICAgICAgICAgICAgIGRpc3BhdGNoT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0FERCcsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhpc1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUtbmV4dC1saW5lXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGRvY3M6IFtdLFxuICAgICAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICAgICAgaWRzOiByZWxhdGlvbk1hcFtyZWxhdGlvbl0sXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldEVycm9yTG9hZGluZyh0KCdlcnJvcjp1bnNwZWNpZmljJykpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykgb25TdWNjZXNzKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgcmVsYXRpb25UbyxcbiAgICAgIGhhc01hbnksXG4gICAgICBlcnJvckxvYWRpbmcsXG4gICAgICBzZWFyY2gsXG4gICAgICBsYXN0TG9hZGVkUGFnZSxcbiAgICAgIGNvbGxlY3Rpb25zLFxuICAgICAgbG9jYWxlLFxuICAgICAgZmlsdGVyT3B0aW9uc1Jlc3VsdCxcbiAgICAgIHNlcnZlclVSTCxcbiAgICAgIHNvcnRPcHRpb25zLFxuICAgICAgYXBpLFxuICAgICAgaTE4bixcbiAgICAgIGNvbmZpZyxcbiAgICAgIHQsXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVNlYXJjaCA9IHVzZURlYm91bmNlZENhbGxiYWNrKChzZWFyY2hBcmc6IHN0cmluZywgdmFsdWVBcmc6IFZhbHVlIHwgVmFsdWVbXSkgPT4ge1xuICAgIGdldFJlc3VsdHMoeyBzZWFyY2g6IHNlYXJjaEFyZywgc29ydDogdHJ1ZSwgdmFsdWU6IHZhbHVlQXJnIH0pXG4gICAgc2V0U2VhcmNoKHNlYXJjaEFyZylcbiAgfSwgMzAwKVxuXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlYXJjaEFyZzogc3RyaW5nLCB2YWx1ZUFyZzogVmFsdWUgfCBWYWx1ZVtdKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoICE9PSBzZWFyY2hBcmcpIHtcbiAgICAgICAgc2V0TGFzdExvYWRlZFBhZ2Uoe30pXG4gICAgICAgIHVwZGF0ZVNlYXJjaChzZWFyY2hBcmcsIHZhbHVlQXJnLCBzZWFyY2hBcmcgIT09ICcnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlYXJjaCwgdXBkYXRlU2VhcmNoXSxcbiAgKVxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIEVuc3VyZSB3ZSBoYXZlIGFuIG9wdGlvbiBmb3IgZWFjaCB2YWx1ZVxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpb25NYXAgPSBjcmVhdGVSZWxhdGlvbk1hcCh7XG4gICAgICBoYXNNYW55LFxuICAgICAgcmVsYXRpb25UbyxcbiAgICAgIHZhbHVlLFxuICAgIH0pXG5cbiAgICBPYmplY3QuZW50cmllcyhyZWxhdGlvbk1hcCkucmVkdWNlKGFzeW5jIChwcmlvclJlbGF0aW9uLCBbcmVsYXRpb24sIGlkc10pID0+IHtcbiAgICAgIGF3YWl0IHByaW9yUmVsYXRpb25cblxuICAgICAgY29uc3QgaWRzVG9Mb2FkID0gaWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgcmV0dXJuICFvcHRpb25zLmZpbmQoKG9wdGlvbkdyb3VwKSA9PlxuICAgICAgICAgIG9wdGlvbkdyb3VwPy5vcHRpb25zPy5maW5kKFxuICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBpZCAmJiBvcHRpb24ucmVsYXRpb25UbyA9PT0gcmVsYXRpb24sXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgaWYgKGlkc1RvTG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgIGRyYWZ0OiB0cnVlLFxuICAgICAgICAgIGxpbWl0OiBpZHNUb0xvYWQubGVuZ3RoLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgaW46IGlkc1RvTG9hZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXJyb3JMb2FkaW5nKSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtzZXJ2ZXJVUkx9JHthcGl9LyR7cmVsYXRpb259PyR7cXMuc3RyaW5naWZ5KHF1ZXJ5KX1gLCB7XG4gICAgICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogaTE4bi5sYW5ndWFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9ucy5maW5kKChjb2xsKSA9PiBjb2xsLnNsdWcgPT09IHJlbGF0aW9uKVxuICAgICAgICAgIGxldCBkb2NzID0gW11cblxuICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgICAgZG9jcyA9IGRhdGEuZG9jc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpc3BhdGNoT3B0aW9ucyh7XG4gICAgICAgICAgICB0eXBlOiAnQUREJyxcbiAgICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhpc1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGRvY3MsXG4gICAgICAgICAgICBpMThuLFxuICAgICAgICAgICAgaWRzOiBpZHNUb0xvYWQsXG4gICAgICAgICAgICBzb3J0OiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcbiAgfSwgW1xuICAgIG9wdGlvbnMsXG4gICAgdmFsdWUsXG4gICAgaGFzTWFueSxcbiAgICBlcnJvckxvYWRpbmcsXG4gICAgY29sbGVjdGlvbnMsXG4gICAgaGFzTXVsdGlwbGVSZWxhdGlvbnMsXG4gICAgc2VydmVyVVJMLFxuICAgIGFwaSxcbiAgICBpMThuLFxuICAgIHJlbGF0aW9uVG8sXG4gICAgbG9jYWxlLFxuICAgIGNvbmZpZyxcbiAgXSlcblxuICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHN3aXRjaCB0byB3b3JkIGJvdW5kYXJ5IHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgPyByZWxhdGlvblRvIDogW3JlbGF0aW9uVG9dXG4gICAgY29uc3QgaXNJZE9ubHkgPSByZWxhdGlvbnMucmVkdWNlKChpZE9ubHksIHJlbGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gY29sbGVjdGlvbnMuZmluZCgoY29sbCkgPT4gY29sbC5zbHVnID09PSByZWxhdGlvbilcbiAgICAgIGNvbnN0IGZpZWxkVG9TZWFyY2ggPSBjb2xsZWN0aW9uPy5hZG1pbj8udXNlQXNUaXRsZSB8fCAnaWQnXG4gICAgICByZXR1cm4gZmllbGRUb1NlYXJjaCA9PT0gJ2lkJyAmJiBpZE9ubHlcbiAgICB9LCB0cnVlKVxuICAgIHNldEVuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCghaXNJZE9ubHkpXG4gIH0sIFtyZWxhdGlvblRvLCBjb2xsZWN0aW9uc10pXG5cbiAgLy8gV2hlbiAoYHJlbGF0aW9uVG9gIHx8IGBmaWx0ZXJPcHRpb25zUmVzdWx0YCB8fCBgbG9jYWxlYCkgY2hhbmdlcywgcmVzZXQgY29tcG9uZW50XG4gIC8vIE5vdGUgLSBlZmZlY3Qgc2hvdWxkIG5vdCBydW4gb24gZmlyc3QgcnVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZpcnN0UnVuLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0UnVuLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGlzcGF0Y2hPcHRpb25zKHsgdHlwZTogJ0NMRUFSJyB9KVxuICAgIHNldExhc3RGdWxseUxvYWRlZFJlbGF0aW9uKC0xKVxuICAgIHNldExhc3RMb2FkZWRQYWdlKHt9KVxuICAgIHNldEhhc0xvYWRlZEZpcnN0UGFnZShmYWxzZSlcbiAgfSwgW3JlbGF0aW9uVG8sIGZpbHRlck9wdGlvbnNSZXN1bHQsIGxvY2FsZV0pXG5cbiAgY29uc3Qgb25TYXZlID0gdXNlQ2FsbGJhY2s8RG9jdW1lbnREcmF3ZXJQcm9wc1snb25TYXZlJ10+KFxuICAgIChhcmdzKSA9PiB7XG4gICAgICBkaXNwYXRjaE9wdGlvbnMoe1xuICAgICAgICB0eXBlOiAnVVBEQVRFJyxcbiAgICAgICAgY29sbGVjdGlvbjogYXJncy5jb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAvLyBUT0RPOiBmaXggdGhpc1xuICAgICAgICAvLyBAdHMtaWdub3JlLW5leHQtbGluZVxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRvYzogYXJncy5kb2MsXG4gICAgICAgIGkxOG4sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2kxOG4sIGNvbmZpZ10sXG4gIClcblxuICBjb25zdCBmaWx0ZXJPcHRpb24gPSB1c2VDYWxsYmFjaygoaXRlbTogT3B0aW9uLCBzZWFyY2hGaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgIGlmICghc2VhcmNoRmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCByID0gd29yZEJvdW5kYXJpZXNSZWdleChzZWFyY2hGaWx0ZXIgfHwgJycpXG4gICAgLy8gYnJlYWtpbmcgdGhlIGxhYmVscyB0byBzZWFyY2ggaW50byBzbWFsbGVyIHBhcnRzIGluY3JlYXNlcyBwZXJmb3JtYW5jZVxuICAgIGNvbnN0IGJyZWFrQXBhcnRUaHJlc2hvbGQgPSAyNTBcbiAgICBsZXQgc3RyaW5nID0gaXRlbS5sYWJlbFxuICAgIC8vIHN0cmluZ3MgbGVzcyB0aGFuIGJyZWFrQXBhcnRUaHJlc2hvbGQgbGVuZ3RoIHdvbid0IGJlIGNodW5rZWRcbiAgICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA+IGJyZWFrQXBhcnRUaHJlc2hvbGQpIHtcbiAgICAgIC8vIHNsaWNpbmcgYnkgdGhlIG5leHQgc3BhY2UgYWZ0ZXIgdGhlIGxlbmd0aCBvZiB0aGUgc2VhcmNoIGlucHV0IHByZXZlbnRzIHNsaWNpbmcgdGhlIHN0cmluZyB1cCBieSBwYXJ0aWFsIHdvcmRzXG4gICAgICBjb25zdCBpbmRleE9mU3BhY2UgPSBzdHJpbmcuaW5kZXhPZignICcsIHNlYXJjaEZpbHRlci5sZW5ndGgpXG4gICAgICBpZiAoci50ZXN0KHN0cmluZy5zbGljZSgwLCBpbmRleE9mU3BhY2UgPT09IC0xID8gc2VhcmNoRmlsdGVyLmxlbmd0aCA6IGluZGV4T2ZTcGFjZSArIDEpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKGluZGV4T2ZTcGFjZSA9PT0gLTEgPyBzZWFyY2hGaWx0ZXIubGVuZ3RoIDogaW5kZXhPZlNwYWNlICsgMSlcbiAgICB9XG4gICAgcmV0dXJuIHIudGVzdChzdHJpbmcuc2xpY2UoLWJyZWFrQXBhcnRUaHJlc2hvbGQpKVxuICB9LCBbXSlcblxuICBjb25zdCB2YWx1ZVRvUmVuZGVyID0gZmluZE9wdGlvbnNCeVZhbHVlKHsgb3B0aW9ucywgdmFsdWUgfSlcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVUb1JlbmRlcikgJiYgdmFsdWVUb1JlbmRlcj8udmFsdWUgPT09ICdudWxsJykgdmFsdWVUb1JlbmRlci52YWx1ZSA9IG51bGxcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICBmaWVsZEJhc2VDbGFzcyxcbiAgICAgICAgYmFzZUNsYXNzLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHNob3dFcnJvciAmJiAnZXJyb3InLFxuICAgICAgICBlcnJvckxvYWRpbmcgJiYgJ2Vycm9yLWxvYWRpbmcnLFxuICAgICAgICByZWFkT25seSAmJiBgJHtiYXNlQ2xhc3N9LS1yZWFkLW9ubHlgLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyl9XG4gICAgICBpZD17YGZpZWxkLSR7cGF0aC5yZXBsYWNlKC9cXC4vZywgJ19fJyl9YH1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIC4uLnN0eWxlLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH19XG4gICAgPlxuICAgICAge0Vycm9yfVxuICAgICAge0xhYmVsfVxuICAgICAgPEdldEZpbHRlck9wdGlvbnNcbiAgICAgICAgey4uLntcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLFxuICAgICAgICAgIGZpbHRlck9wdGlvbnNSZXN1bHQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICByZWxhdGlvblRvLFxuICAgICAgICAgIHNldEZpbHRlck9wdGlvbnNSZXN1bHQsXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgeyFlcnJvckxvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcGB9PlxuICAgICAgICAgIDxSZWFjdFNlbGVjdFxuICAgICAgICAgICAgYmFja3NwYWNlUmVtb3Zlc1ZhbHVlPXshZHJhd2VySXNPcGVufVxuICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICBNdWx0aVZhbHVlTGFiZWwsXG4gICAgICAgICAgICAgIFNpbmdsZVZhbHVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGN1c3RvbVByb3BzPXt7XG4gICAgICAgICAgICAgIGRpc2FibGVLZXlEb3duOiBkcmF3ZXJJc09wZW4sXG4gICAgICAgICAgICAgIGRpc2FibGVNb3VzZURvd246IGRyYXdlcklzT3BlbixcbiAgICAgICAgICAgICAgb25TYXZlLFxuICAgICAgICAgICAgICBzZXREcmF3ZXJJc09wZW4sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5IHx8IGZvcm1Qcm9jZXNzaW5nfVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXtlbmFibGVXb3JkQm91bmRhcnlTZWFyY2ggPyBmaWx0ZXJPcHRpb24gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgIGlzTXVsdGk9e2hhc01hbnl9XG4gICAgICAgICAgICBpc1NvcnRhYmxlPXtpc1NvcnRhYmxlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e1xuICAgICAgICAgICAgICAhcmVhZE9ubHlcbiAgICAgICAgICAgICAgICA/IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShoYXNNYW55ID8gW10gOiBudWxsKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01hbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZWN0ZWQubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aXBsZVJlbGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IG9wdGlvbi5yZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzTXVsdGlwbGVSZWxhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBzZWxlY3RlZC5yZWxhdGlvblRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc2VsZWN0ZWQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25JbnB1dENoYW5nZT17KG5ld1NlYXJjaCkgPT4gaGFuZGxlSW5wdXRDaGFuZ2UobmV3U2VhcmNoLCB2YWx1ZSl9XG4gICAgICAgICAgICBvbk1lbnVPcGVuPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaGFzTG9hZGVkRmlyc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgZ2V0UmVzdWx0cyh7XG4gICAgICAgICAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SGFzTG9hZGVkRmlyc3RQYWdlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbk1lbnVTY3JvbGxUb0JvdHRvbT17KCkgPT4ge1xuICAgICAgICAgICAgICBnZXRSZXN1bHRzKHtcbiAgICAgICAgICAgICAgICBsYXN0RnVsbHlMb2FkZWRSZWxhdGlvbixcbiAgICAgICAgICAgICAgICBzZWFyY2gsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgc2hvd0Vycm9yPXtzaG93RXJyb3J9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWVUb1JlbmRlciA/PyBudWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyFyZWFkT25seSAmJiBhbGxvd0NyZWF0ZSAmJiAoXG4gICAgICAgICAgICA8QWRkTmV3UmVsYXRpb25cbiAgICAgICAgICAgICAgey4uLntcbiAgICAgICAgICAgICAgICBkaXNwYXRjaE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgaGFzTWFueSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgcmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge2Vycm9yTG9hZGluZyAmJiA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZXJyb3ItbG9hZGluZ2B9PntlcnJvckxvYWRpbmd9PC9kaXY+fVxuICAgICAge0Rlc2NyaXB0aW9ufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhDb25kaXRpb24oUmVsYXRpb25zaGlwKVxuIl0sIm5hbWVzIjpbIm1heFJlc3VsdHNQZXJSZXF1ZXN0IiwiYmFzZUNsYXNzIiwiUmVsYXRpb25zaGlwIiwicHJvcHMiLCJuYW1lIiwiRGVzY3JpcHRpb24iLCJFcnJvciIsIkxhYmVsIiwiY2xhc3NOYW1lIiwicGF0aCIsInBhdGhGcm9tUHJvcHMiLCJyZWFkT25seSIsInJlcXVpcmVkIiwic3R5bGUiLCJ2YWxpZGF0ZSIsIndpZHRoIiwiY29uZmlnIiwidXNlQ29uZmlnIiwiY29sbGVjdGlvbnMiLCJyb3V0ZXMiLCJhcGkiLCJzZXJ2ZXJVUkwiLCJyZWxhdGlvblRvIiwidW5kZWZpbmVkIiwiaGFzTWFueSIsImZpbHRlck9wdGlvbnMiLCJzb3J0T3B0aW9ucyIsImlzU29ydGFibGUiLCJhbGxvd0NyZWF0ZSIsImkxOG4iLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJwZXJtaXNzaW9ucyIsInVzZUF1dGgiLCJjb2RlIiwibG9jYWxlIiwidXNlTG9jYWxlIiwiZm9ybVByb2Nlc3NpbmciLCJ1c2VGb3JtUHJvY2Vzc2luZyIsImhhc011bHRpcGxlUmVsYXRpb25zIiwiQXJyYXkiLCJpc0FycmF5Iiwib3B0aW9ucyIsImRpc3BhdGNoT3B0aW9ucyIsInVzZVJlZHVjZXIiLCJvcHRpb25zUmVkdWNlciIsImxhc3RGdWxseUxvYWRlZFJlbGF0aW9uIiwic2V0TGFzdEZ1bGx5TG9hZGVkUmVsYXRpb24iLCJ1c2VTdGF0ZSIsImxhc3RMb2FkZWRQYWdlIiwic2V0TGFzdExvYWRlZFBhZ2UiLCJlcnJvckxvYWRpbmciLCJzZXRFcnJvckxvYWRpbmciLCJmaWx0ZXJPcHRpb25zUmVzdWx0Iiwic2V0RmlsdGVyT3B0aW9uc1Jlc3VsdCIsInNlYXJjaCIsInNldFNlYXJjaCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsImhhc0xvYWRlZEZpcnN0UGFnZSIsInNldEhhc0xvYWRlZEZpcnN0UGFnZSIsImVuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCIsInNldEVuYWJsZVdvcmRCb3VuZGFyeVNlYXJjaCIsImZpcnN0UnVuIiwidXNlUmVmIiwibWVtb2l6ZWRWYWxpZGF0ZSIsInVzZUNhbGxiYWNrIiwidmFsdWUiLCJ2YWxpZGF0aW9uT3B0aW9ucyIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwic2hvd0Vycm9yIiwidXNlRmllbGQiLCJkcmF3ZXJJc09wZW4iLCJzZXREcmF3ZXJJc09wZW4iLCJnZXRSZXN1bHRzIiwibGFzdEZ1bGx5TG9hZGVkUmVsYXRpb25BcmciLCJvblN1Y2Nlc3MiLCJzZWFyY2hBcmciLCJzb3J0IiwidmFsdWVBcmciLCJsYXN0RnVsbHlMb2FkZWRSZWxhdGlvblRvVXNlIiwicmVsYXRpb25zIiwicmVsYXRpb25zVG9GZXRjaCIsInNsaWNlIiwicmVzdWx0c0ZldGNoZWQiLCJyZWxhdGlvbk1hcCIsImNyZWF0ZVJlbGF0aW9uTWFwIiwicmVkdWNlIiwicHJpb3JSZWxhdGlvbiIsInJlbGF0aW9uIiwicmVsYXRpb25GaWx0ZXJPcHRpb24iLCJsYXN0TG9hZGVkUGFnZVRvVXNlIiwiaW5kZXhPZiIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29sbGVjdGlvbiIsImZpbmQiLCJjb2xsIiwic2x1ZyIsImZpZWxkVG9TZWFyY2giLCJkZWZhdWx0U29ydCIsImFkbWluIiwidXNlQXNUaXRsZSIsInF1ZXJ5IiwiZGVwdGgiLCJkcmFmdCIsImxpbWl0IiwicGFnZSIsIndoZXJlIiwiYW5kIiwiaWQiLCJub3RfaW4iLCJwdXNoIiwibGlrZSIsInJlc3BvbnNlIiwiZmV0Y2giLCJxcyIsInN0cmluZ2lmeSIsImNyZWRlbnRpYWxzIiwiaGVhZGVycyIsImxhbmd1YWdlIiwib2siLCJkYXRhIiwianNvbiIsInByZXZTdGF0ZSIsIm5leHRQYWdlIiwiZG9jcyIsImxlbmd0aCIsInR5cGUiLCJzdGF0dXMiLCJpZHMiLCJ1cGRhdGVTZWFyY2giLCJ1c2VEZWJvdW5jZWRDYWxsYmFjayIsImhhbmRsZUlucHV0Q2hhbmdlIiwidXNlRWZmZWN0IiwiT2JqZWN0IiwiZW50cmllcyIsImlkc1RvTG9hZCIsImZpbHRlciIsIm9wdGlvbkdyb3VwIiwib3B0aW9uIiwiaW4iLCJpc0lkT25seSIsImlkT25seSIsImN1cnJlbnQiLCJvblNhdmUiLCJhcmdzIiwiY29sbGVjdGlvbkNvbmZpZyIsImRvYyIsImZpbHRlck9wdGlvbiIsIml0ZW0iLCJzZWFyY2hGaWx0ZXIiLCJyIiwid29yZEJvdW5kYXJpZXNSZWdleCIsImJyZWFrQXBhcnRUaHJlc2hvbGQiLCJzdHJpbmciLCJsYWJlbCIsImluZGV4T2ZTcGFjZSIsInRlc3QiLCJ2YWx1ZVRvUmVuZGVyIiwiZmluZE9wdGlvbnNCeVZhbHVlIiwiZGl2IiwiZmllbGRCYXNlQ2xhc3MiLCJCb29sZWFuIiwiam9pbiIsInJlcGxhY2UiLCJHZXRGaWx0ZXJPcHRpb25zIiwiUmVhY3RTZWxlY3QiLCJiYWNrc3BhY2VSZW1vdmVzVmFsdWUiLCJjb21wb25lbnRzIiwiTXVsdGlWYWx1ZUxhYmVsIiwiU2luZ2xlVmFsdWUiLCJjdXN0b21Qcm9wcyIsImRpc2FibGVLZXlEb3duIiwiZGlzYWJsZU1vdXNlRG93biIsImRpc2FibGVkIiwiaXNNdWx0aSIsIm9uQ2hhbmdlIiwic2VsZWN0ZWQiLCJtYXAiLCJvbklucHV0Q2hhbmdlIiwibmV3U2VhcmNoIiwib25NZW51T3BlbiIsIm9uTWVudVNjcm9sbFRvQm90dG9tIiwiQWRkTmV3UmVsYXRpb24iLCJ3aXRoQ29uZGl0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7K0JBOGhCQTs7O2VBQUE7OzsyQkExaEJvQzsyREFDckI7K0RBQzZEO2tDQUszQztvRUFDVDtzQ0FDYTtzQkFDYjt3QkFDRTt3QkFDQTs2QkFDSzt5QkFDRztpRUFDYjsrQkFDUzt3QkFDQzt3QkFDQTttQ0FDRztvQ0FDQztRQUM1Qjt1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
|