Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000148
T

237 lines
22 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/camera/Menu.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/menu/Item.vue";
import { default as __nuxt_component_1 } from "/_nuxt/components/viewer/layout/Panel.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { createElementBlock as __createElementBlock,createBlock as __createBlock,createElementVNode as __createElementVNode,createVNode as __createVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
function _interopVNode(vnode) {
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
const data = vnode.props['data-v-inspector']
delete vnode.props['data-v-inspector']
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
}
return vnode
}
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
/* Injection by vite-plugin-vue-inspector End */
import { useModel as _useModel, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import {
useInjectedViewerState,
useInjectedViewer
} from "/_nuxt/lib/viewer/composables/setup.ts";
import { useCameraUtilities, useViewerShortcuts } from "/_nuxt/lib/viewer/composables/ui.ts";
import { ViewShortcuts } from "/_nuxt/lib/viewer/helpers/shortcuts/shortcuts.ts";
import { useViewerCameraControlEndTracker } from "/_nuxt/lib/viewer/composables/viewer.ts";
import { CameraController } from "/_nuxt/@fs/D:/speckle-server/packages/viewer/dist/index.js";
import { useSynchronizedCookie } from "/_nuxt/lib/common/composables/reactiveCookie.ts";
import { ref, onMounted } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ViewerCameraMenu",
props: {
"open": { type: Boolean, ...{ default: false } },
"openModifiers": {}
},
emits: ["update:open"],
setup(__props, { expose: __expose }) {
__expose();
const localViewerSettings = useSynchronizedCookie(
`localViewerSettings`,
{
default: () => {
return { turntableMode: false };
}
}
);
const {
viewer: {
metadata: { views }
}
} = useInjectedViewerState();
const { instance } = useInjectedViewer();
const { getShortcutDisplayText, registerShortcuts, shortcuts } = useViewerShortcuts();
const mixpanel = useMixpanel();
const {
setView: setViewRaw,
toggleProjection,
camera: { isOrthoProjection }
} = useCameraUtilities();
const open = _useModel(__props, "open");
const activeView = ref(null);
const viewShortcuts = Object.values(ViewShortcuts);
useViewerCameraControlEndTracker(() => {
activeView.value = null;
});
const handleViewChange = (v, isShortcut = false) => {
setViewRaw(v);
activeView.value = typeof v === "string" ? v : v.id;
if (isShortcut) {
open.value = true;
}
mixpanel.track("Viewer Action", {
type: "action",
name: "set-view",
view: v?.name || v
});
};
const trackAndtoggleProjection = () => {
toggleProjection();
mixpanel.track("Viewer Action", {
type: "action",
name: "camera",
camera: isOrthoProjection ? "ortho" : "perspective"
});
};
const setViewerCameraHandlerControlsMaxPolarAngle = (angle) => {
const extension = instance.getExtension(CameraController);
if (extension) extension.options = { maximumPolarAngle: angle };
};
const toggleTurntableMode = () => {
localViewerSettings.value = {
...localViewerSettings.value,
turntableMode: !localViewerSettings.value.turntableMode
};
if (localViewerSettings.value.turntableMode) {
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI / 2);
} else {
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI);
}
};
registerShortcuts({
SetViewTop: () => handleViewChange("top", true),
SetViewFront: () => handleViewChange("front", true),
SetViewLeft: () => handleViewChange("left", true),
SetViewBack: () => handleViewChange("back", true),
SetViewRight: () => handleViewChange("right", true),
ToggleProjection: () => trackAndtoggleProjection()
});
onMounted(() => {
if (localViewerSettings.value.turntableMode) {
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI / 2);
} else {
setViewerCameraHandlerControlsMaxPolarAngle(Math.PI);
}
});
const __returned__ = { localViewerSettings, views, instance, getShortcutDisplayText, registerShortcuts, shortcuts, mixpanel, setViewRaw, toggleProjection, isOrthoProjection, open, activeView, viewShortcuts, handleViewChange, trackAndtoggleProjection, setViewerCameraHandlerControlsMaxPolarAngle, toggleTurntableMode };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "w-64 simple-scrollbar overflow-y-auto flex flex-col",
"data-v-inspector": "components/viewer/camera/Menu.vue:4:5"
};
const _hoisted_2 = {
class: "p-1",
"data-v-inspector": "components/viewer/camera/Menu.vue:5:7"
};
const _hoisted_3 = {
class: "p-1 flex flex-col gap-1",
"data-v-inspector": "components/viewer/camera/Menu.vue:18:7"
};
const _hoisted_4 = {
key: 0,
class: "w-full border-outline-2",
"data-v-inspector": "components/viewer/camera/Menu.vue:34:7"
};
const _hoisted_5 = {
key: 1,
class: "p-1",
"data-v-inspector": "components/viewer/camera/Menu.vue:35:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_ViewerMenuItem = __nuxt_component_0;
const _component_ViewerLayoutPanel = __nuxt_component_1;
return _openBlock(), _createBlock(_component_ViewerLayoutPanel, { "data-v-inspector": "components/viewer/camera/Menu.vue:3:3" }, {
default: _withCtx(() => [
_createElementVNode("div", _hoisted_1, [
_createElementVNode("div", _hoisted_2, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.viewShortcuts, (shortcut) => {
return _openBlock(), _createBlock(_component_ViewerMenuItem, {
key: shortcut.name,
label: shortcut.name,
"hide-active-tick": "",
active: $setup.activeView === shortcut.name.toLowerCase(),
shortcut: $setup.getShortcutDisplayText(shortcut, { hideName: true }),
onClick: ($event) => $setup.handleViewChange(shortcut.name.toLowerCase()),
"data-v-inspector": "components/viewer/camera/Menu.vue:6:9"
}, null, 8, ["label", "active", "shortcut", "onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
]),
_cache[2] || (_cache[2] = _createElementVNode(
"hr",
{
class: "w-full border-outline-2",
"data-v-inspector": "components/viewer/camera/Menu.vue:17:7"
},
null,
-1
/* CACHED */
)),
_createElementVNode("div", _hoisted_3, [
_createVNode(_component_ViewerMenuItem, {
label: "Orthographic projection",
active: $setup.isOrthoProjection,
shortcut: $setup.getShortcutDisplayText($setup.shortcuts.ToggleProjection, { hideName: true }),
onClick: _cache[0] || (_cache[0] = ($event) => $setup.trackAndtoggleProjection()),
"data-v-inspector": "components/viewer/camera/Menu.vue:19:9"
}, null, 8, ["active", "shortcut"]),
_createVNode(_component_ViewerMenuItem, {
label: "Free orbit",
active: !$setup.localViewerSettings.turntableMode,
onClick: _cache[1] || (_cache[1] = ($event) => $setup.toggleTurntableMode()),
"data-v-inspector": "components/viewer/camera/Menu.vue:27:9"
}, null, 8, ["active"])
]),
$setup.views.length !== 0 ? (_openBlock(), _createElementBlock("hr", _hoisted_4)) : _createCommentVNode("v-if", true),
$setup.views.length !== 0 ? (_openBlock(), _createElementBlock("div", _hoisted_5, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.views, (view) => {
return _openBlock(), _createBlock(_component_ViewerMenuItem, {
key: view.id,
"hide-active-tick": "",
active: $setup.activeView === view.id,
label: view.name ? view.name : view.id,
onClick: ($event) => $setup.handleViewChange(view),
"data-v-inspector": "components/viewer/camera/Menu.vue:36:9"
}, null, 8, ["active", "label", "onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
])) : _createCommentVNode("v-if", true)
])
]),
_: 1
/* STABLE */
});
}
_sfc_main.__hmrId = "62c49a11";
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
import.meta.hot.on("file-changed", ({ file }) => {
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
});
import.meta.hot.accept((mod) => {
if (!mod) return;
const { default: updated, _rerender_only } = mod;
if (_rerender_only) {
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
} else {
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
}
});
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/viewer/camera/Menu.vue"]]);
//# sourceMappingURL=data:application/json;base64,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MUMsYUFBTSxXQUFNLG1CQUF0QixvQkFBMEgsTUFBMUgsVUFBMEg7UUFDL0csYUFBTSxXQUFNLG1CQUF2QixvQkFTTSxPQVROLFlBU007QUFBQSw2QkFSSjtBQUFBLFlBT0U7QUFBQTtBQUFBLHdCQU5lLGNBQUssQ0FBYixTQUFJO21DQURiLGFBT0U7QUFBQSxnQkFMQyxLQUFLLEtBQUs7QUFBQSxnQkFDWDtBQUFBLGdCQUNDLFFBQVEsc0JBQWUsS0FBSztBQUFBLGdCQUM1QixPQUFPLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSztBQUFBLGdCQUNwQyxTQUFLLFlBQUUsd0JBQWlCLElBQUk7QUFBQSxnQkFBRyxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTWVudS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDxWaWV3ZXJMYXlvdXRQYW5lbCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM6M1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInctNjQgc2ltcGxlLXNjcm9sbGJhciBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6NDo1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjU6N1wiPlxyXG4gICAgICAgIDxWaWV3ZXJNZW51SXRlbVxyXG4gICAgICAgICAgdi1mb3I9XCJzaG9ydGN1dCBpbiB2aWV3U2hvcnRjdXRzXCJcclxuICAgICAgICAgIDprZXk9XCJzaG9ydGN1dC5uYW1lXCJcclxuICAgICAgICAgIDpsYWJlbD1cInNob3J0Y3V0Lm5hbWVcIlxyXG4gICAgICAgICAgaGlkZS1hY3RpdmUtdGlja1xyXG4gICAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVZpZXcgPT09IHNob3J0Y3V0Lm5hbWUudG9Mb3dlckNhc2UoKVwiXHJcbiAgICAgICAgICA6c2hvcnRjdXQ9XCJnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0LCB7IGhpZGVOYW1lOiB0cnVlIH0pIGFzIHN0cmluZ1wiXHJcbiAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVWaWV3Q2hhbmdlKHNob3J0Y3V0Lm5hbWUudG9Mb3dlckNhc2UoKSBhcyBDYW5vbmljYWxWaWV3KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6Njo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxociBjbGFzcz1cInctZnVsbCBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZToxNzo3XCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMSBmbGV4IGZsZXgtY29sIGdhcC0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZToxODo3XCI+XHJcbiAgICAgICAgPFZpZXdlck1lbnVJdGVtXHJcbiAgICAgICAgICBsYWJlbD1cIk9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXCJcclxuICAgICAgICAgIDphY3RpdmU9XCJpc09ydGhvUHJvamVjdGlvblwiXHJcbiAgICAgICAgICA6c2hvcnRjdXQ9XCJcclxuICAgICAgICAgICAgZ2V0U2hvcnRjdXREaXNwbGF5VGV4dChzaG9ydGN1dHMuVG9nZ2xlUHJvamVjdGlvbiwgeyBoaWRlTmFtZTogdHJ1ZSB9KSBhcyBzdHJpbmdcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJ0cmFja0FuZHRvZ2dsZVByb2plY3Rpb24oKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6MTk6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyTWVudUl0ZW1cclxuICAgICAgICAgIGxhYmVsPVwiRnJlZSBvcmJpdFwiXHJcbiAgICAgICAgICA6YWN0aXZlPVwiIWxvY2FsVmlld2VyU2V0dGluZ3MudHVybnRhYmxlTW9kZVwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVUdXJudGFibGVNb2RlKClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjI3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGhyIHYtaWY9XCJ2aWV3cy5sZW5ndGggIT09IDBcIiBjbGFzcz1cInctZnVsbCBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZTozNDo3XCIgLz5cclxuICAgICAgPGRpdiB2LWlmPVwidmlld3MubGVuZ3RoICE9PSAwXCIgY2xhc3M9XCJwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM1OjdcIj5cclxuICAgICAgICA8Vmlld2VyTWVudUl0ZW1cclxuICAgICAgICAgIHYtZm9yPVwidmlldyBpbiB2aWV3c1wiXHJcbiAgICAgICAgICA6a2V5PVwidmlldy5pZFwiXHJcbiAgICAgICAgICBoaWRlLWFjdGl2ZS10aWNrXHJcbiAgICAgICAgICA6YWN0aXZlPVwiYWN0aXZlVmlldyA9PT0gdmlldy5pZFwiXHJcbiAgICAgICAgICA6bGFiZWw9XCJ2aWV3Lm5hbWUgPyB2aWV3Lm5hbWUgOiB2aWV3LmlkXCJcclxuICAgICAgICAgIEBjbGljaz1cImhhbmRsZVZpZXdDaGFuZ2UodmlldylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM2OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9WaWV3ZXJMYXlvdXRQYW5lbD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQ2Fub25pY2FsVmlldywgU3BlY2tsZVZpZXcgfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7XHJcbiAgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSxcclxuICB1c2VJbmplY3RlZFZpZXdlclxyXG59IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IHVzZUNhbWVyYVV0aWxpdGllcywgdXNlVmlld2VyU2hvcnRjdXRzIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy91aSdcclxuaW1wb3J0IHsgVmlld1Nob3J0Y3V0cyB9IGZyb20gJ34vbGliL3ZpZXdlci9oZWxwZXJzL3Nob3J0Y3V0cy9zaG9ydGN1dHMnXHJcbmltcG9ydCB7IHVzZVZpZXdlckNhbWVyYUNvbnRyb2xFbmRUcmFja2VyIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy92aWV3ZXInXHJcbmltcG9ydCB7IENhbWVyYUNvbnRyb2xsZXIgfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHVzZVN5bmNocm9uaXplZENvb2tpZSB9IGZyb20gJ35+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvcmVhY3RpdmVDb29raWUnXHJcblxyXG50eXBlIFZpZXdlclVzZXJTZXR0aW5ncyA9IHtcclxuICB0dXJudGFibGVNb2RlOiBib29sZWFuXHJcbn1cclxuXHJcbmNvbnN0IGxvY2FsVmlld2VyU2V0dGluZ3MgPSB1c2VTeW5jaHJvbml6ZWRDb29raWU8Vmlld2VyVXNlclNldHRpbmdzPihcclxuICBgbG9jYWxWaWV3ZXJTZXR0aW5nc2AsXHJcbiAge1xyXG4gICAgZGVmYXVsdDogKCkgPT4ge1xyXG4gICAgICByZXR1cm4geyB0dXJudGFibGVNb2RlOiBmYWxzZSB9XHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5jb25zdCB7XHJcbiAgdmlld2VyOiB7XHJcbiAgICBtZXRhZGF0YTogeyB2aWV3cyB9XHJcbiAgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbmNvbnN0IHsgaW5zdGFuY2UgfSA9IHVzZUluamVjdGVkVmlld2VyKClcclxuY29uc3QgeyBnZXRTaG9ydGN1dERpc3BsYXlUZXh0LCByZWdpc3RlclNob3J0Y3V0cywgc2hvcnRjdXRzIH0gPSB1c2VWaWV3ZXJTaG9ydGN1dHMoKVxyXG5jb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuY29uc3Qge1xyXG4gIHNldFZpZXc6IHNldFZpZXdSYXcsXHJcbiAgdG9nZ2xlUHJvamVjdGlvbixcclxuICBjYW1lcmE6IHsgaXNPcnRob1Byb2plY3Rpb24gfVxyXG59ID0gdXNlQ2FtZXJhVXRpbGl0aWVzKClcclxuXHJcbmNvbnN0IG9wZW4gPSBkZWZpbmVNb2RlbDxib29sZWFuPignb3BlbicsIHsgZGVmYXVsdDogZmFsc2UgfSlcclxuY29uc3QgYWN0aXZlVmlldyA9IHJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxyXG5jb25zdCB2aWV3U2hvcnRjdXRzID0gT2JqZWN0LnZhbHVlcyhWaWV3U2hvcnRjdXRzKVxyXG5cclxuLy8gQ2xlYXIgYWN0aXZlIHZpZXcgd2hlbiBjYW1lcmEgY29udHJvbCBlbmRzXHJcbnVzZVZpZXdlckNhbWVyYUNvbnRyb2xFbmRUcmFja2VyKCgpID0+IHtcclxuICBhY3RpdmVWaWV3LnZhbHVlID0gbnVsbFxyXG59KVxyXG5cclxuY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9ICh2OiBDYW5vbmljYWxWaWV3IHwgU3BlY2tsZVZpZXcsIGlzU2hvcnRjdXQgPSBmYWxzZSkgPT4ge1xyXG4gIHNldFZpZXdSYXcodilcclxuICBhY3RpdmVWaWV3LnZhbHVlID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHYuaWRcclxuXHJcbiAgaWYgKGlzU2hvcnRjdXQpIHtcclxuICAgIG9wZW4udmFsdWUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBtaXhwYW5lbC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NldC12aWV3JyxcclxuICAgIHZpZXc6ICh2IGFzIFNwZWNrbGVWaWV3KT8ubmFtZSB8fCB2XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgdHJhY2tBbmR0b2dnbGVQcm9qZWN0aW9uID0gKCkgPT4ge1xyXG4gIHRvZ2dsZVByb2plY3Rpb24oKVxyXG4gIG1peHBhbmVsLnRyYWNrKCdWaWV3ZXIgQWN0aW9uJywge1xyXG4gICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICBuYW1lOiAnY2FtZXJhJyxcclxuICAgIGNhbWVyYTogaXNPcnRob1Byb2plY3Rpb24gPyAnb3J0aG8nIDogJ3BlcnNwZWN0aXZlJ1xyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IHNldFZpZXdlckNhbWVyYUhhbmRsZXJDb250cm9sc01heFBvbGFyQW5nbGUgPSAoYW5nbGU6IG51bWJlcikgPT4ge1xyXG4gIGNvbnN0IGV4dGVuc2lvbiA9IGluc3RhbmNlLmdldEV4dGVuc2lvbihDYW1lcmFDb250cm9sbGVyKVxyXG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbi5vcHRpb25zID0geyBtYXhpbXVtUG9sYXJBbmdsZTogYW5nbGUgfVxyXG59XHJcblxyXG5jb25zdCB0b2dnbGVUdXJudGFibGVNb2RlID0gKCkgPT4ge1xyXG4gIGxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUgPSB7XHJcbiAgICAuLi5sb2NhbFZpZXdlclNldHRpbmdzLnZhbHVlLFxyXG4gICAgdHVybnRhYmxlTW9kZTogIWxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUudHVybnRhYmxlTW9kZVxyXG4gIH1cclxuICBpZiAobG9jYWxWaWV3ZXJTZXR0aW5ncy52YWx1ZS50dXJudGFibGVNb2RlKSB7XHJcbiAgICBzZXRWaWV3ZXJDYW1lcmFIYW5kbGVyQ29udHJvbHNNYXhQb2xhckFuZ2xlKE1hdGguUEkgLyAyKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBzZXRWaWV3ZXJDYW1lcmFIYW5kbGVyQ29udHJvbHNNYXhQb2xhckFuZ2xlKE1hdGguUEkpXHJcbiAgfVxyXG59XHJcblxyXG5yZWdpc3RlclNob3J0Y3V0cyh7XHJcbiAgU2V0Vmlld1RvcDogKCkgPT4gaGFuZGxlVmlld0NoYW5nZSgndG9wJywgdHJ1ZSksXHJcbiAgU2V0Vmlld0Zyb250OiAoKSA9PiBoYW5kbGVWaWV3Q2hhbmdlKCdmcm9udCcsIHRydWUpLFxyXG4gIFNldFZpZXdMZWZ0OiAoKSA9PiBoYW5kbGVWaWV3Q2hhbmdlKCdsZWZ0JywgdHJ1ZSksXHJcbiAgU2V0Vmlld0JhY2s6ICgpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ2JhY2snLCB0cnVlKSxcclxuICBTZXRWaWV3UmlnaHQ6ICgpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ3JpZ2h0JywgdHJ1ZSksXHJcbiAgVG9nZ2xlUHJvamVjdGlvbjogKCkgPT4gdHJhY2tBbmR0b2dnbGVQcm9qZWN0aW9uKClcclxufSlcclxuXHJcbm9uTW91bnRlZCgoKSA9PiB7XHJcbiAgaWYgKGxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUudHVybnRhYmxlTW9kZSkge1xyXG4gICAgc2V0Vmlld2VyQ2FtZXJhSGFuZGxlckNvbnRyb2xzTWF4UG9sYXJBbmdsZShNYXRoLlBJIC8gMilcclxuICB9IGVsc2Uge1xyXG4gICAgc2V0Vmlld2VyQ2FtZXJhSGFuZGxlckNvbnRyb2xzTWF4UG9sYXJBbmdsZShNYXRoLlBJKVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWUifQ==