UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

224 lines (223 loc) • 24.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "LivePreviewView", { enumerable: true, get: function() { return LivePreviewView; } }); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _reacti18next = require("react-i18next"); const _getTranslation = require("../../../../utilities/getTranslation"); const _DocumentControls = require("../../elements/DocumentControls"); const _DocumentFields = require("../../elements/DocumentFields"); const _LeaveWithoutSaving = require("../../modals/LeaveWithoutSaving"); const _ActionsProvider = require("../../utilities/ActionsProvider"); const _Config = require("../../utilities/Config"); const _DocumentInfo = require("../../utilities/DocumentInfo"); const _Locale = require("../../utilities/Locale"); const _Meta = /*#__PURE__*/ _interop_require_default(require("../../utilities/Meta")); const _SetStepNav = require("../collections/Edit/SetStepNav"); const _Context = require("./Context"); const _context = require("./Context/context"); const _Preview = require("./Preview"); require("./index.scss"); const _usePopupWindow = require("./usePopupWindow"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const baseClass = 'live-preview'; const PreviewView = (props)=>{ const { i18n, t } = (0, _reacti18next.useTranslation)('general'); const { previewWindowType } = (0, _context.useLivePreviewContext)(); const { apiURL, data, fieldTypes, permissions } = props; let collection; let global; let disableActions; let disableLeaveWithoutSaving; let hasSavePermission; let isEditing; let id; let fields = []; let label; let description; if ('collection' in props) { collection = props?.collection; disableActions = props?.disableActions; disableLeaveWithoutSaving = props?.disableLeaveWithoutSaving; hasSavePermission = props?.hasSavePermission; isEditing = props?.isEditing; id = props?.id; fields = props?.collection?.fields; } if ('global' in props) { global = props?.global; fields = props?.global?.fields; label = props?.global?.label; description = props?.global?.admin?.description; hasSavePermission = permissions?.update?.permission; } return /*#__PURE__*/ _react.default.createElement(_react.Fragment, null, collection && /*#__PURE__*/ _react.default.createElement(_Meta.default, { description: t('editing'), keywords: `${(0, _getTranslation.getTranslation)(collection.labels.singular, i18n)}, Payload, CMS`, title: `${isEditing ? t('editing') : t('creating')} - ${(0, _getTranslation.getTranslation)(collection.labels.singular, i18n)}` }), global && /*#__PURE__*/ _react.default.createElement(_Meta.default, { description: (0, _getTranslation.getTranslation)(label, i18n), keywords: `${(0, _getTranslation.getTranslation)(label, i18n)}, Payload, CMS`, title: (0, _getTranslation.getTranslation)(label, i18n) }), (collection && !(collection.versions?.drafts && collection.versions?.drafts?.autosave) || global && !(global.versions?.drafts && global.versions?.drafts?.autosave)) && !disableLeaveWithoutSaving && /*#__PURE__*/ _react.default.createElement(_LeaveWithoutSaving.LeaveWithoutSaving, null), /*#__PURE__*/ _react.default.createElement(_SetStepNav.SetStepNav, { collection: collection, global: global, id: id, isEditing: isEditing, view: t('livePreview') }), /*#__PURE__*/ _react.default.createElement(_DocumentControls.DocumentControls, { apiURL: apiURL, collection: collection, data: data, disableActions: disableActions, global: global, hasSavePermission: hasSavePermission, id: id, isEditing: isEditing, permissions: permissions }), /*#__PURE__*/ _react.default.createElement("div", { className: [ baseClass, previewWindowType === 'popup' && `${baseClass}--detached` ].filter(Boolean).join(' ') }, /*#__PURE__*/ _react.default.createElement("div", { className: [ `${baseClass}__main`, previewWindowType === 'popup' && `${baseClass}__main--popup-open` ].filter(Boolean).join(' ') }, /*#__PURE__*/ _react.default.createElement(_DocumentFields.DocumentFields, { description: description, fieldTypes: fieldTypes, fields: fields, forceSidebarWrap: true, hasSavePermission: hasSavePermission, permissions: permissions })), /*#__PURE__*/ _react.default.createElement(_Preview.LivePreview, props))); }; const LivePreviewView = (props)=>{ const { data } = props; const config = (0, _Config.useConfig)(); const documentInfo = (0, _DocumentInfo.useDocumentInfo)(); const locale = (0, _Locale.useLocale)(); const { setViewActions } = (0, _ActionsProvider.useActions)(); const collection = documentInfo.collection; const global = documentInfo.global; let livePreviewConfig = config?.admin?.livePreview; if ('collection' in props) { livePreviewConfig = { ...livePreviewConfig || {}, ...props?.collection.admin.livePreview || {} }; } if ('global' in props) { livePreviewConfig = { ...livePreviewConfig || {}, ...props?.global.admin.livePreview || {} }; } const [url, setURL] = _react.default.useState(()=>{ if (typeof livePreviewConfig?.url === 'string') return livePreviewConfig?.url; }); (0, _react.useEffect)(()=>{ const getURL = async ()=>{ const newURL = typeof livePreviewConfig?.url === 'function' ? await livePreviewConfig.url({ data, documentInfo, locale }) : livePreviewConfig?.url; setURL(newURL); }; getURL() // eslint-disable-line @typescript-eslint/no-floating-promises ; }, [ data, documentInfo, locale, livePreviewConfig ]); (0, _react.useEffect)(()=>{ const editConfig = (collection || global)?.admin?.components?.views?.Edit; const livePreviewActions = editConfig && 'LivePreview' in editConfig && 'actions' in editConfig.LivePreview ? editConfig.LivePreview.actions : []; setViewActions(livePreviewActions); return ()=>{ setViewActions([]); }; }, [ collection, global, setViewActions ]); const breakpoints = [ ...livePreviewConfig?.breakpoints || [], { name: 'responsive', height: '100%', label: 'Responsive', width: '100%' } ]; const { isPopupOpen, openPopupWindow, popupRef } = (0, _usePopupWindow.usePopupWindow)({ eventType: 'payload-live-preview', url }); return /*#__PURE__*/ _react.default.createElement(_Context.LivePreviewProvider, { ...props, breakpoints: breakpoints, isPopupOpen: isPopupOpen, openPopupWindow: openPopupWindow, popupRef: popupRef, url: url }, /*#__PURE__*/ _react.default.createElement(PreviewView, props)); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0xpdmVQcmV2aWV3L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9jb2xsZWN0aW9ucy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IExpdmVQcmV2aWV3Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkR2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFscy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpZWxkVHlwZXMgfSBmcm9tICcuLi8uLi9mb3Jtcy9maWVsZC10eXBlcydcbmltcG9ydCB0eXBlIHsgRWRpdFZpZXdQcm9wcyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdGllcy9nZXRUcmFuc2xhdGlvbidcbmltcG9ydCB7IERvY3VtZW50Q29udHJvbHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Eb2N1bWVudENvbnRyb2xzJ1xuaW1wb3J0IHsgRG9jdW1lbnRGaWVsZHMgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9Eb2N1bWVudEZpZWxkcydcbmltcG9ydCB7IExlYXZlV2l0aG91dFNhdmluZyB9IGZyb20gJy4uLy4uL21vZGFscy9MZWF2ZVdpdGhvdXRTYXZpbmcnXG5pbXBvcnQgeyB1c2VBY3Rpb25zIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0FjdGlvbnNQcm92aWRlcidcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Db25maWcnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvRG9jdW1lbnRJbmZvJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0xvY2FsZSdcbmltcG9ydCBNZXRhIGZyb20gJy4uLy4uL3V0aWxpdGllcy9NZXRhJ1xuaW1wb3J0IHsgU2V0U3RlcE5hdiB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL0VkaXQvU2V0U3RlcE5hdidcbmltcG9ydCB7IExpdmVQcmV2aWV3UHJvdmlkZXIgfSBmcm9tICcuL0NvbnRleHQnXG5pbXBvcnQgeyB1c2VMaXZlUHJldmlld0NvbnRleHQgfSBmcm9tICcuL0NvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IExpdmVQcmV2aWV3IH0gZnJvbSAnLi9QcmV2aWV3J1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5pbXBvcnQgeyB1c2VQb3B1cFdpbmRvdyB9IGZyb20gJy4vdXNlUG9wdXBXaW5kb3cnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdsaXZlLXByZXZpZXcnXG5cbmNvbnN0IFByZXZpZXdWaWV3OiBSZWFjdC5GQzxcbiAgRWRpdFZpZXdQcm9wcyAmIHtcbiAgICBmaWVsZFR5cGVzOiBGaWVsZFR5cGVzXG4gIH1cbj4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbignZ2VuZXJhbCcpXG4gIGNvbnN0IHsgcHJldmlld1dpbmRvd1R5cGUgfSA9IHVzZUxpdmVQcmV2aWV3Q29udGV4dCgpXG5cbiAgY29uc3QgeyBhcGlVUkwsIGRhdGEsIGZpZWxkVHlwZXMsIHBlcm1pc3Npb25zIH0gPSBwcm9wc1xuXG4gIGxldCBjb2xsZWN0aW9uOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnXG4gIGxldCBnbG9iYWw6IFNhbml0aXplZEdsb2JhbENvbmZpZ1xuICBsZXQgZGlzYWJsZUFjdGlvbnM6IGJvb2xlYW5cbiAgbGV0IGRpc2FibGVMZWF2ZVdpdGhvdXRTYXZpbmc6IGJvb2xlYW5cbiAgbGV0IGhhc1NhdmVQZXJtaXNzaW9uOiBib29sZWFuXG4gIGxldCBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgbGV0IGlkOiBzdHJpbmdcbiAgbGV0IGZpZWxkczogRmllbGRbXSA9IFtdXG4gIGxldCBsYWJlbDogU2FuaXRpemVkR2xvYmFsQ29uZmlnWydsYWJlbCddXG4gIGxldCBkZXNjcmlwdGlvbjogU2FuaXRpemVkR2xvYmFsQ29uZmlnWydhZG1pbiddWydkZXNjcmlwdGlvbiddXG5cbiAgaWYgKCdjb2xsZWN0aW9uJyBpbiBwcm9wcykge1xuICAgIGNvbGxlY3Rpb24gPSBwcm9wcz8uY29sbGVjdGlvblxuICAgIGRpc2FibGVBY3Rpb25zID0gcHJvcHM/LmRpc2FibGVBY3Rpb25zXG4gICAgZGlzYWJsZUxlYXZlV2l0aG91dFNhdmluZyA9IHByb3BzPy5kaXNhYmxlTGVhdmVXaXRob3V0U2F2aW5nXG4gICAgaGFzU2F2ZVBlcm1pc3Npb24gPSBwcm9wcz8uaGFzU2F2ZVBlcm1pc3Npb25cbiAgICBpc0VkaXRpbmcgPSBwcm9wcz8uaXNFZGl0aW5nXG4gICAgaWQgPSBwcm9wcz8uaWRcbiAgICBmaWVsZHMgPSBwcm9wcz8uY29sbGVjdGlvbj8uZmllbGRzXG4gIH1cblxuICBpZiAoJ2dsb2JhbCcgaW4gcHJvcHMpIHtcbiAgICBnbG9iYWwgPSBwcm9wcz8uZ2xvYmFsXG4gICAgZmllbGRzID0gcHJvcHM/Lmdsb2JhbD8uZmllbGRzXG4gICAgbGFiZWwgPSBwcm9wcz8uZ2xvYmFsPy5sYWJlbFxuICAgIGRlc2NyaXB0aW9uID0gcHJvcHM/Lmdsb2JhbD8uYWRtaW4/LmRlc2NyaXB0aW9uXG4gICAgaGFzU2F2ZVBlcm1pc3Npb24gPSBwZXJtaXNzaW9ucz8udXBkYXRlPy5wZXJtaXNzaW9uXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHtjb2xsZWN0aW9uICYmIChcbiAgICAgICAgPE1ldGFcbiAgICAgICAgICBkZXNjcmlwdGlvbj17dCgnZWRpdGluZycpfVxuICAgICAgICAgIGtleXdvcmRzPXtgJHtnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uLmxhYmVscy5zaW5ndWxhciwgaTE4bil9LCBQYXlsb2FkLCBDTVNgfVxuICAgICAgICAgIHRpdGxlPXtgJHtpc0VkaXRpbmcgPyB0KCdlZGl0aW5nJykgOiB0KCdjcmVhdGluZycpfSAtICR7Z2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICBjb2xsZWN0aW9uLmxhYmVscy5zaW5ndWxhcixcbiAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgKX1gfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtnbG9iYWwgJiYgKFxuICAgICAgICA8TWV0YVxuICAgICAgICAgIGRlc2NyaXB0aW9uPXtnZXRUcmFuc2xhdGlvbihsYWJlbCwgaTE4bil9XG4gICAgICAgICAga2V5d29yZHM9e2Ake2dldFRyYW5zbGF0aW9uKGxhYmVsLCBpMThuKX0sIFBheWxvYWQsIENNU2B9XG4gICAgICAgICAgdGl0bGU9e2dldFRyYW5zbGF0aW9uKGxhYmVsLCBpMThuKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7KChjb2xsZWN0aW9uICYmICEoY29sbGVjdGlvbi52ZXJzaW9ucz8uZHJhZnRzICYmIGNvbGxlY3Rpb24udmVyc2lvbnM/LmRyYWZ0cz8uYXV0b3NhdmUpKSB8fFxuICAgICAgICAoZ2xvYmFsICYmICEoZ2xvYmFsLnZlcnNpb25zPy5kcmFmdHMgJiYgZ2xvYmFsLnZlcnNpb25zPy5kcmFmdHM/LmF1dG9zYXZlKSkpICYmXG4gICAgICAgICFkaXNhYmxlTGVhdmVXaXRob3V0U2F2aW5nICYmIDxMZWF2ZVdpdGhvdXRTYXZpbmcgLz59XG4gICAgICA8U2V0U3RlcE5hdlxuICAgICAgICBjb2xsZWN0aW9uPXtjb2xsZWN0aW9ufVxuICAgICAgICBnbG9iYWw9e2dsb2JhbH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBpc0VkaXRpbmc9e2lzRWRpdGluZ31cbiAgICAgICAgdmlldz17dCgnbGl2ZVByZXZpZXcnKX1cbiAgICAgIC8+XG4gICAgICA8RG9jdW1lbnRDb250cm9sc1xuICAgICAgICBhcGlVUkw9e2FwaVVSTH1cbiAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbn1cbiAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgZGlzYWJsZUFjdGlvbnM9e2Rpc2FibGVBY3Rpb25zfVxuICAgICAgICBnbG9iYWw9e2dsb2JhbH1cbiAgICAgICAgaGFzU2F2ZVBlcm1pc3Npb249e2hhc1NhdmVQZXJtaXNzaW9ufVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGlzRWRpdGluZz17aXNFZGl0aW5nfVxuICAgICAgICBwZXJtaXNzaW9ucz17cGVybWlzc2lvbnN9XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1tiYXNlQ2xhc3MsIHByZXZpZXdXaW5kb3dUeXBlID09PSAncG9wdXAnICYmIGAke2Jhc2VDbGFzc30tLWRldGFjaGVkYF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17W1xuICAgICAgICAgICAgYCR7YmFzZUNsYXNzfV9fbWFpbmAsXG4gICAgICAgICAgICBwcmV2aWV3V2luZG93VHlwZSA9PT0gJ3BvcHVwJyAmJiBgJHtiYXNlQ2xhc3N9X19tYWluLS1wb3B1cC1vcGVuYCxcbiAgICAgICAgICBdXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAuam9pbignICcpfVxuICAgICAgICA+XG4gICAgICAgICAgPERvY3VtZW50RmllbGRzXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259XG4gICAgICAgICAgICBmaWVsZFR5cGVzPXtmaWVsZFR5cGVzfVxuICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICBmb3JjZVNpZGViYXJXcmFwXG4gICAgICAgICAgICBoYXNTYXZlUGVybWlzc2lvbj17aGFzU2F2ZVBlcm1pc3Npb259XG4gICAgICAgICAgICBwZXJtaXNzaW9ucz17cGVybWlzc2lvbnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxMaXZlUHJldmlldyB7Li4ucHJvcHN9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0ZyYWdtZW50PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBMaXZlUHJldmlld1ZpZXc6IFJlYWN0LkZDPFxuICBFZGl0Vmlld1Byb3BzICYge1xuICAgIGZpZWxkVHlwZXM6IEZpZWxkVHlwZXNcbiAgfVxuPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGRhdGEgfSA9IHByb3BzXG4gIGNvbnN0IGNvbmZpZyA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IGRvY3VtZW50SW5mbyA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IGxvY2FsZSA9IHVzZUxvY2FsZSgpXG5cbiAgY29uc3QgeyBzZXRWaWV3QWN0aW9ucyB9ID0gdXNlQWN0aW9ucygpXG5cbiAgY29uc3QgY29sbGVjdGlvbiA9IGRvY3VtZW50SW5mby5jb2xsZWN0aW9uXG4gIGNvbnN0IGdsb2JhbCA9IGRvY3VtZW50SW5mby5nbG9iYWxcblxuICBsZXQgbGl2ZVByZXZpZXdDb25maWc6IExpdmVQcmV2aWV3Q29uZmlnID0gY29uZmlnPy5hZG1pbj8ubGl2ZVByZXZpZXdcblxuICBpZiAoJ2NvbGxlY3Rpb24nIGluIHByb3BzKSB7XG4gICAgbGl2ZVByZXZpZXdDb25maWcgPSB7XG4gICAgICAuLi4obGl2ZVByZXZpZXdDb25maWcgfHwge30pLFxuICAgICAgLi4uKHByb3BzPy5jb2xsZWN0aW9uLmFkbWluLmxpdmVQcmV2aWV3IHx8IHt9KSxcbiAgICB9XG4gIH1cblxuICBpZiAoJ2dsb2JhbCcgaW4gcHJvcHMpIHtcbiAgICBsaXZlUHJldmlld0NvbmZpZyA9IHtcbiAgICAgIC4uLihsaXZlUHJldmlld0NvbmZpZyB8fCB7fSksXG4gICAgICAuLi4ocHJvcHM/Lmdsb2JhbC5hZG1pbi5saXZlUHJldmlldyB8fCB7fSksXG4gICAgfVxuICB9XG5cbiAgY29uc3QgW3VybCwgc2V0VVJMXSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgbGl2ZVByZXZpZXdDb25maWc/LnVybCA9PT0gJ3N0cmluZycpIHJldHVybiBsaXZlUHJldmlld0NvbmZpZz8udXJsXG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnZXRVUkwgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBuZXdVUkwgPVxuICAgICAgICB0eXBlb2YgbGl2ZVByZXZpZXdDb25maWc/LnVybCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gYXdhaXQgbGl2ZVByZXZpZXdDb25maWcudXJsKHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgZG9jdW1lbnRJbmZvLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbGl2ZVByZXZpZXdDb25maWc/LnVybFxuXG4gICAgICBzZXRVUkwobmV3VVJMKVxuICAgIH1cblxuICAgIGdldFVSTCgpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gIH0sIFtkYXRhLCBkb2N1bWVudEluZm8sIGxvY2FsZSwgbGl2ZVByZXZpZXdDb25maWddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWRpdENvbmZpZyA9IChjb2xsZWN0aW9uIHx8IGdsb2JhbCk/LmFkbWluPy5jb21wb25lbnRzPy52aWV3cz8uRWRpdFxuICAgIGNvbnN0IGxpdmVQcmV2aWV3QWN0aW9ucyA9XG4gICAgICBlZGl0Q29uZmlnICYmICdMaXZlUHJldmlldycgaW4gZWRpdENvbmZpZyAmJiAnYWN0aW9ucycgaW4gZWRpdENvbmZpZy5MaXZlUHJldmlld1xuICAgICAgICA/IGVkaXRDb25maWcuTGl2ZVByZXZpZXcuYWN0aW9uc1xuICAgICAgICA6IFtdXG5cbiAgICBzZXRWaWV3QWN0aW9ucyhsaXZlUHJldmlld0FjdGlvbnMpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2V0Vmlld0FjdGlvbnMoW10pXG4gICAgfVxuICB9LCBbY29sbGVjdGlvbiwgZ2xvYmFsLCBzZXRWaWV3QWN0aW9uc10pXG5cbiAgY29uc3QgYnJlYWtwb2ludHM6IExpdmVQcmV2aWV3Q29uZmlnWydicmVha3BvaW50cyddID0gW1xuICAgIC4uLihsaXZlUHJldmlld0NvbmZpZz8uYnJlYWtwb2ludHMgfHwgW10pLFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZXNwb25zaXZlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgbGFiZWw6ICdSZXNwb25zaXZlJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfSxcbiAgXVxuXG4gIGNvbnN0IHsgaXNQb3B1cE9wZW4sIG9wZW5Qb3B1cFdpbmRvdywgcG9wdXBSZWYgfSA9IHVzZVBvcHVwV2luZG93KHtcbiAgICBldmVudFR5cGU6ICdwYXlsb2FkLWxpdmUtcHJldmlldycsXG4gICAgdXJsLFxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPExpdmVQcmV2aWV3UHJvdmlkZXJcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGJyZWFrcG9pbnRzPXticmVha3BvaW50c31cbiAgICAgIGlzUG9wdXBPcGVuPXtpc1BvcHVwT3Blbn1cbiAgICAgIG9wZW5Qb3B1cFdpbmRvdz17b3BlblBvcHVwV2luZG93fVxuICAgICAgcG9wdXBSZWY9e3BvcHVwUmVmfVxuICAgICAgdXJsPXt1cmx9XG4gICAgPlxuICAgICAgPFByZXZpZXdWaWV3IHsuLi5wcm9wc30gLz5cbiAgICA8L0xpdmVQcmV2aWV3UHJvdmlkZXI+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJMaXZlUHJldmlld1ZpZXciLCJiYXNlQ2xhc3MiLCJQcmV2aWV3VmlldyIsInByb3BzIiwiaTE4biIsInQiLCJ1c2VUcmFuc2xhdGlvbiIsInByZXZpZXdXaW5kb3dUeXBlIiwidXNlTGl2ZVByZXZpZXdDb250ZXh0IiwiYXBpVVJMIiwiZGF0YSIsImZpZWxkVHlwZXMiLCJwZXJtaXNzaW9ucyIsImNvbGxlY3Rpb24iLCJnbG9iYWwiLCJkaXNhYmxlQWN0aW9ucyIsImRpc2FibGVMZWF2ZVdpdGhvdXRTYXZpbmciLCJoYXNTYXZlUGVybWlzc2lvbiIsImlzRWRpdGluZyIsImlkIiwiZmllbGRzIiwibGFiZWwiLCJkZXNjcmlwdGlvbiIsImFkbWluIiwidXBkYXRlIiwicGVybWlzc2lvbiIsIkZyYWdtZW50IiwiTWV0YSIsImtleXdvcmRzIiwiZ2V0VHJhbnNsYXRpb24iLCJsYWJlbHMiLCJzaW5ndWxhciIsInRpdGxlIiwidmVyc2lvbnMiLCJkcmFmdHMiLCJhdXRvc2F2ZSIsIkxlYXZlV2l0aG91dFNhdmluZyIsIlNldFN0ZXBOYXYiLCJ2aWV3IiwiRG9jdW1lbnRDb250cm9scyIsImRpdiIsImNsYXNzTmFtZSIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwiRG9jdW1lbnRGaWVsZHMiLCJmb3JjZVNpZGViYXJXcmFwIiwiTGl2ZVByZXZpZXciLCJjb25maWciLCJ1c2VDb25maWciLCJkb2N1bWVudEluZm8iLCJ1c2VEb2N1bWVudEluZm8iLCJsb2NhbGUiLCJ1c2VMb2NhbGUiLCJzZXRWaWV3QWN0aW9ucyIsInVzZUFjdGlvbnMiLCJsaXZlUHJldmlld0NvbmZpZyIsImxpdmVQcmV2aWV3IiwidXJsIiwic2V0VVJMIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsImdldFVSTCIsIm5ld1VSTCIsImVkaXRDb25maWciLCJjb21wb25lbnRzIiwidmlld3MiLCJFZGl0IiwibGl2ZVByZXZpZXdBY3Rpb25zIiwiYWN0aW9ucyIsImJyZWFrcG9pbnRzIiwibmFtZSIsImhlaWdodCIsIndpZHRoIiwiaXNQb3B1cE9wZW4iLCJvcGVuUG9wdXBXaW5kb3ciLCJwb3B1cFJlZiIsInVzZVBvcHVwV2luZG93IiwiZXZlbnRUeXBlIiwiTGl2ZVByZXZpZXdQcm92aWRlciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1SWFBOzs7ZUFBQUE7OzsrREF2SThCOzhCQUNaO2dDQVNBO2tDQUNFO2dDQUNGO29DQUNJO2lDQUNSO3dCQUNEOzhCQUNNO3dCQUNOOzZEQUNUOzRCQUNVO3lCQUNTO3lCQUNFO3lCQUNWO1FBQ3JCO2dDQUN3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0IsTUFBTUMsWUFBWTtBQUVsQixNQUFNQyxjQUlGLENBQUNDO0lBQ0gsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLENBQUMsRUFBRSxHQUFHQyxJQUFBQSw0QkFBYyxFQUFDO0lBQ25DLE1BQU0sRUFBRUMsaUJBQWlCLEVBQUUsR0FBR0MsSUFBQUEsOEJBQXFCO0lBRW5ELE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFLEdBQUdUO0lBRWxELElBQUlVO0lBQ0osSUFBSUM7SUFDSixJQUFJQztJQUNKLElBQUlDO0lBQ0osSUFBSUM7SUFDSixJQUFJQztJQUNKLElBQUlDO0lBQ0osSUFBSUMsU0FBa0IsRUFBRTtJQUN4QixJQUFJQztJQUNKLElBQUlDO0lBRUosSUFBSSxnQkFBZ0JuQixPQUFPO1FBQ3pCVSxhQUFhVixPQUFPVTtRQUNwQkUsaUJBQWlCWixPQUFPWTtRQUN4QkMsNEJBQTRCYixPQUFPYTtRQUNuQ0Msb0JBQW9CZCxPQUFPYztRQUMzQkMsWUFBWWYsT0FBT2U7UUFDbkJDLEtBQUtoQixPQUFPZ0I7UUFDWkMsU0FBU2pCLE9BQU9VLFlBQVlPO0lBQzlCO0lBRUEsSUFBSSxZQUFZakIsT0FBTztRQUNyQlcsU0FBU1gsT0FBT1c7UUFDaEJNLFNBQVNqQixPQUFPVyxRQUFRTTtRQUN4QkMsUUFBUWxCLE9BQU9XLFFBQVFPO1FBQ3ZCQyxjQUFjbkIsT0FBT1csUUFBUVMsT0FBT0Q7UUFDcENMLG9CQUFvQkwsYUFBYVksUUFBUUM7SUFDM0M7SUFFQSxxQkFDRSw2QkFBQ0MsZUFBUSxRQUNOYiw0QkFDQyw2QkFBQ2MsYUFBSTtRQUNITCxhQUFhakIsRUFBRTtRQUNmdUIsVUFBVSxDQUFDLEVBQUVDLElBQUFBLDhCQUFjLEVBQUNoQixXQUFXaUIsTUFBTSxDQUFDQyxRQUFRLEVBQUUzQixNQUFNLGNBQWMsQ0FBQztRQUM3RTRCLE9BQU8sQ0FBQyxFQUFFZCxZQUFZYixFQUFFLGFBQWFBLEVBQUUsWUFBWSxHQUFHLEVBQUV3QixJQUFBQSw4QkFBYyxFQUNwRWhCLFdBQVdpQixNQUFNLENBQUNDLFFBQVEsRUFDMUIzQixNQUNBLENBQUM7UUFHTlUsd0JBQ0MsNkJBQUNhLGFBQUk7UUFDSEwsYUFBYU8sSUFBQUEsOEJBQWMsRUFBQ1IsT0FBT2pCO1FBQ25Dd0IsVUFBVSxDQUFDLEVBQUVDLElBQUFBLDhCQUFjLEVBQUNSLE9BQU9qQixNQUFNLGNBQWMsQ0FBQztRQUN4RDRCLE9BQU9ILElBQUFBLDhCQUFjLEVBQUNSLE9BQU9qQjtRQUdoQyxBQUFDLENBQUEsQUFBQ1MsY0FBYyxDQUFFQSxDQUFBQSxXQUFXb0IsUUFBUSxFQUFFQyxVQUFVckIsV0FBV29CLFFBQVEsRUFBRUMsUUFBUUMsUUFBTyxLQUNuRnJCLFVBQVUsQ0FBRUEsQ0FBQUEsT0FBT21CLFFBQVEsRUFBRUMsVUFBVXBCLE9BQU9tQixRQUFRLEVBQUVDLFFBQVFDLFFBQU8sQ0FBRSxLQUMxRSxDQUFDbkIsMkNBQTZCLDZCQUFDb0Isc0NBQWtCLHVCQUNuRCw2QkFBQ0Msc0JBQVU7UUFDVHhCLFlBQVlBO1FBQ1pDLFFBQVFBO1FBQ1JLLElBQUlBO1FBQ0pELFdBQVdBO1FBQ1hvQixNQUFNakMsRUFBRTtzQkFFViw2QkFBQ2tDLGtDQUFnQjtRQUNmOUIsUUFBUUE7UUFDUkksWUFBWUE7UUFDWkgsTUFBTUE7UUFDTkssZ0JBQWdCQTtRQUNoQkQsUUFBUUE7UUFDUkcsbUJBQW1CQTtRQUNuQkUsSUFBSUE7UUFDSkQsV0FBV0E7UUFDWE4sYUFBYUE7c0JBRWYsNkJBQUM0QjtRQUNDQyxXQUFXO1lBQUN4QztZQUFXTSxzQkFBc0IsV0FBVyxDQUFDLEVBQUVOLFVBQVUsVUFBVSxDQUFDO1NBQUMsQ0FDOUV5QyxNQUFNLENBQUNDLFNBQ1BDLElBQUksQ0FBQztxQkFFUiw2QkFBQ0o7UUFDQ0MsV0FBVztZQUNULENBQUMsRUFBRXhDLFVBQVUsTUFBTSxDQUFDO1lBQ3BCTSxzQkFBc0IsV0FBVyxDQUFDLEVBQUVOLFVBQVUsa0JBQWtCLENBQUM7U0FDbEUsQ0FDRXlDLE1BQU0sQ0FBQ0MsU0FDUEMsSUFBSSxDQUFDO3FCQUVSLDZCQUFDQyw4QkFBYztRQUNidkIsYUFBYUE7UUFDYlgsWUFBWUE7UUFDWlMsUUFBUUE7UUFDUjBCLGtCQUFBQTtRQUNBN0IsbUJBQW1CQTtRQUNuQkwsYUFBYUE7dUJBR2pCLDZCQUFDbUMsb0JBQVcsRUFBSzVDO0FBSXpCO0FBRU8sTUFBTUgsa0JBSVQsQ0FBQ0c7SUFDSCxNQUFNLEVBQUVPLElBQUksRUFBRSxHQUFHUDtJQUNqQixNQUFNNkMsU0FBU0MsSUFBQUEsaUJBQVM7SUFDeEIsTUFBTUMsZUFBZUMsSUFBQUEsNkJBQWU7SUFDcEMsTUFBTUMsU0FBU0MsSUFBQUEsaUJBQVM7SUFFeEIsTUFBTSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MsSUFBQUEsMkJBQVU7SUFFckMsTUFBTTFDLGFBQWFxQyxhQUFhckMsVUFBVTtJQUMxQyxNQUFNQyxTQUFTb0MsYUFBYXBDLE1BQU07SUFFbEMsSUFBSTBDLG9CQUF1Q1IsUUFBUXpCLE9BQU9rQztJQUUxRCxJQUFJLGdCQUFnQnRELE9BQU87UUFDekJxRCxvQkFBb0I7WUFDbEIsR0FBSUEscUJBQXFCLENBQUMsQ0FBQztZQUMzQixHQUFJckQsT0FBT1UsV0FBV1UsTUFBTWtDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DO0lBQ0Y7SUFFQSxJQUFJLFlBQVl0RCxPQUFPO1FBQ3JCcUQsb0JBQW9CO1lBQ2xCLEdBQUlBLHFCQUFxQixDQUFDLENBQUM7WUFDM0IsR0FBSXJELE9BQU9XLE9BQU9TLE1BQU1rQyxlQUFlLENBQUMsQ0FBQztRQUMzQztJQUNGO0lBRUEsTUFBTSxDQUFDQyxLQUFLQyxPQUFPLEdBQUdDLGNBQUssQ0FBQ0MsUUFBUSxDQUFxQjtRQUN2RCxJQUFJLE9BQU9MLG1CQUFtQkUsUUFBUSxVQUFVLE9BQU9GLG1CQUFtQkU7SUFDNUU7SUFFQUksSUFBQUEsZ0JBQVMsRUFBQztRQUNSLE1BQU1DLFNBQVM7WUFDYixNQUFNQyxTQUNKLE9BQU9SLG1CQUFtQkUsUUFBUSxhQUM5QixNQUFNRixrQkFBa0JFLEdBQUcsQ0FBQztnQkFDMUJoRDtnQkFDQXdDO2dCQUNBRTtZQUNGLEtBQ0FJLG1CQUFtQkU7WUFFekJDLE9BQU9LO1FBQ1Q7UUFFQUQsU0FBUyw4REFBOEQ7O0lBQ3pFLEdBQUc7UUFBQ3JEO1FBQU13QztRQUFjRTtRQUFRSTtLQUFrQjtJQUVsRE0sSUFBQUEsZ0JBQVMsRUFBQztRQUNSLE1BQU1HLGFBQWNwRCxDQUFBQSxjQUFjQyxNQUFLLEdBQUlTLE9BQU8yQyxZQUFZQyxPQUFPQztRQUNyRSxNQUFNQyxxQkFDSkosY0FBYyxpQkFBaUJBLGNBQWMsYUFBYUEsV0FBV2xCLFdBQVcsR0FDNUVrQixXQUFXbEIsV0FBVyxDQUFDdUIsT0FBTyxHQUM5QixFQUFFO1FBRVJoQixlQUFlZTtRQUVmLE9BQU87WUFDTGYsZUFBZSxFQUFFO1FBQ25CO0lBQ0YsR0FBRztRQUFDekM7UUFBWUM7UUFBUXdDO0tBQWU7SUFFdkMsTUFBTWlCLGNBQWdEO1dBQ2hEZixtQkFBbUJlLGVBQWUsRUFBRTtRQUN4QztZQUNFQyxNQUFNO1lBQ05DLFFBQVE7WUFDUnBELE9BQU87WUFDUHFELE9BQU87UUFDVDtLQUNEO0lBRUQsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLGVBQWUsRUFBRUMsUUFBUSxFQUFFLEdBQUdDLElBQUFBLDhCQUFjLEVBQUM7UUFDaEVDLFdBQVc7UUFDWHJCO0lBQ0Y7SUFFQSxxQkFDRSw2QkFBQ3NCLDRCQUFtQjtRQUNqQixHQUFHN0UsS0FBSztRQUNUb0UsYUFBYUE7UUFDYkksYUFBYUE7UUFDYkMsaUJBQWlCQTtRQUNqQkMsVUFBVUE7UUFDVm5CLEtBQUtBO3FCQUVMLDZCQUFDeEQsYUFBZ0JDO0FBR3ZCIn0=