payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
224 lines (223 loc) • 24.7 kB
JavaScript
"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=