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

280 lines
26 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/preview/Image.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/common/TransitioningContents.vue";
import { CommonLoadingBar as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
/* Injection by vite-plugin-vue-inspector Start */
import { createVNode as __createVNode,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode } 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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
/* Injection by vite-plugin-vue-inspector End */
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { CommonLoadingIcon } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { useElementVisibility, useResizeObserver } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
import { usePreviewImageBlob } from "/_nuxt/lib/projects/composables/previewImage.ts";
import { ref, computed, onMounted, watch, unref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useNuxtApp } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "PreviewImage",
props: {
previewUrl: { type: String, required: true },
panoramaOnHover: { type: Boolean, required: false, default: true },
eagerLoad: { type: Boolean, required: false, default: true }
},
setup(__props, { expose: __expose }) {
__expose();
const props = __props;
const parent = ref(null);
const finalPreviewTransitioner = ref(
null
);
const { $isAppHydrated } = useNuxtApp();
const isInViewport = useElementVisibility(parent);
const basePreviewUrl = computed(() => props.previewUrl);
const {
previewUrl: finalPreviewUrl,
panoramaPreviewUrl,
shouldLoadPanorama,
isLoadingPanorama,
hasDoneFirstLoad,
isPanoramaPlaceholder
} = usePreviewImageBlob(basePreviewUrl, {
enabled: computed(() => props.eagerLoad || isInViewport.value),
eagerLoad: props.eagerLoad
});
const hovered = ref(false);
const panorama = ref(null);
const mainPreviewClasses = computed(
() => "w-full h-full bg-cover bg-no-repeat bg-center"
);
const parentWidth = ref(0);
const parentHeight = ref(0);
const setParentDimensions = () => {
const { width = 0, height = 0 } = parent.value?.getBoundingClientRect() || {};
parentWidth.value = width;
parentHeight.value = height;
};
if (true) useResizeObserver(document.body, () => setParentDimensions());
const positionMagic = ref(0);
const latestMouseEvent = ref();
const calculatePanoramaStyle = (e) => {
latestMouseEvent.value = e;
const rect = panorama.value?.getBoundingClientRect();
if (parentHeight.value === 0) setParentDimensions();
if (!rect) return;
const x = e.clientX - rect.left;
const step = rect.width / 24;
let index = Math.abs(24 - Math.round(x / step));
if (index >= 24) index = 24 - 1;
const scaleFactor = parentHeight.value / 400;
const actualWidth = scaleFactor * 700;
const widthDiff = (parentWidth.value - actualWidth) * 0.5;
positionMagic.value = -(actualWidth * (2 * index + 1) - widthDiff);
};
const shouldShowMainPreview = computed(
() => !hovered.value && finalPreviewUrl.value || isLoadingPanorama.value || !props.panoramaOnHover || isPanoramaPlaceholder.value || !panoramaPreviewUrl.value
);
const shouldShowPanoramicPreview = computed(
() => hovered.value && panoramaPreviewUrl.value && props.panoramaOnHover && !isPanoramaPlaceholder.value && $isAppHydrated.value
);
onMounted(() => setParentDimensions());
watch(hovered, (newVal) => {
if (newVal && !panoramaPreviewUrl.value && props.panoramaOnHover)
shouldLoadPanorama.value = true;
});
watch(
() => unref(panoramaPreviewUrl),
() => {
if (latestMouseEvent.value) {
calculatePanoramaStyle(latestMouseEvent.value);
}
}
);
if (true) {
watch(finalPreviewUrl, (newVal, oldVal) => {
if (newVal === oldVal) return;
finalPreviewTransitioner.value?.triggerTransition();
});
}
const __returned__ = { props, parent, finalPreviewTransitioner, $isAppHydrated, isInViewport, basePreviewUrl, finalPreviewUrl, panoramaPreviewUrl, shouldLoadPanorama, isLoadingPanorama, hasDoneFirstLoad, isPanoramaPlaceholder, hovered, panorama, mainPreviewClasses, parentWidth, parentHeight, setParentDimensions, positionMagic, latestMouseEvent, calculatePanoramaStyle, shouldShowMainPreview, shouldShowPanoramicPreview, get CommonLoadingIcon() {
return CommonLoadingIcon;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, normalizeStyle as _normalizeStyle, resolveComponent as _resolveComponent, withCtx as _withCtx, Transition as _Transition, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
key: 0,
class: "relative w-full h-full",
"data-v-inspector": "components/preview/Image.vue:23:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_CommonTransitioningContents = __nuxt_component_0;
const _component_CommonLoadingBar = __nuxt_component_1;
return _openBlock(), _createElementBlock(
_Fragment,
null,
[
_createCommentVNode(" eslint-disable-next-line vuejs-accessibility/mouse-events-have-key-events "),
_createElementVNode(
"div",
{
ref: "parent",
class: "relative w-full h-full",
onMouseenter: _cache[0] || (_cache[0] = ($event) => $setup.hovered = true),
onMouseleave: _cache[1] || (_cache[1] = ($event) => $setup.hovered = false),
onMousemove: _cache[2] || (_cache[2] = (e) => $setup.calculatePanoramaStyle(e)),
onTouchmove: _cache[3] || (_cache[3] = (e) => $setup.calculatePanoramaStyle({
target: e.target,
clientX: e.touches[0].clientX,
clientY: e.touches[0].clientY
})),
"data-v-inspector": "components/preview/Image.vue:4:3"
},
[
_createVNode(_Transition, {
"enter-from-class": "opacity-0",
"enter-active-class": "transition duration-300",
"leave-to-class": "opacity-0",
"leave-active-class": "transition duration-300",
"data-v-inspector": "components/preview/Image.vue:17:5"
}, {
default: _withCtx(() => [
$setup.shouldShowMainPreview ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
_createVNode(
_component_CommonTransitioningContents,
{
ref: "finalPreviewTransitioner",
class: "w-full h-full",
"data-v-inspector": "components/preview/Image.vue:24:9"
},
{
default: _withCtx(() => [
!$setup.hasDoneFirstLoad || !$setup.finalPreviewUrl?.length ? (_openBlock(), _createElementBlock(
"div",
{
key: 0,
class: _normalizeClass([$setup.mainPreviewClasses, "flex items-center justify-center"]),
"data-v-inspector": "components/preview/Image.vue:28:11"
},
[
_createVNode($setup["CommonLoadingIcon"], {
class: "opacity-50",
"data-v-inspector": "components/preview/Image.vue:32:13"
})
],
2
/* CLASS */
)) : (_openBlock(), _createElementBlock(
"div",
{
key: 1,
class: _normalizeClass($setup.mainPreviewClasses),
style: _normalizeStyle({
backgroundImage: `url('${$setup.finalPreviewUrl}')`
}),
"data-v-inspector": "components/preview/Image.vue:34:11"
},
null,
6
/* CLASS, STYLE */
))
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
)
])) : _createCommentVNode("v-if", true)
]),
_: 1
/* STABLE */
}),
_createVNode(_Transition, {
"enter-from-class": "opacity-0",
"enter-active-class": "transition duration-300",
"leave-to-class": "opacity-0",
"leave-active-class": "transition duration-300",
"data-v-inspector": "components/preview/Image.vue:44:5",
persisted: ""
}, {
default: _withCtx(() => [
_withDirectives(_createElementVNode(
"div",
{
ref: "panorama",
style: _normalizeStyle({
display: $setup.shouldShowPanoramicPreview ? "block" : "none",
backgroundImage: $setup.panoramaPreviewUrl ? `url('${$setup.panoramaPreviewUrl}')` : void 0,
backgroundSize: "cover",
backgroundPosition: `${$setup.positionMagic}px 0`,
position: "absolute",
top: "0",
width: "100%",
height: "100%"
}),
"data-v-inspector": "components/preview/Image.vue:51:7"
},
null,
4
/* STYLE */
), [
[_vShow, $setup.shouldShowPanoramicPreview]
])
]),
_: 1
/* STABLE */
}),
_createVNode(_Transition, {
"enter-from-class": "opacity-0",
"leave-to-class": "opacity-0",
"enter-active-class": "transition duration-300",
"leave-active-class": "transition duration-300",
"data-v-inspector": "components/preview/Image.vue:68:5"
}, {
default: _withCtx(() => [
_createVNode(_component_CommonLoadingBar, {
loading: $setup.isLoadingPanorama && $setup.hovered,
class: "absolute bottom-0 w-full",
"data-v-inspector": "components/preview/Image.vue:74:7"
}, null, 8, ["loading"])
]),
_: 1
/* STABLE */
})
],
544
/* NEED_HYDRATION, NEED_PATCH */
)
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
}
_sfc_main.__hmrId = "48724381";
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/preview/Image.vue"]]);
//# sourceMappingURL=data:application/json;base64,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LE9BQUs7QUFBQSxxREFBNEMsc0JBQWU7QUFBQTswQkFFOUQsb0JBQWlCO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBSzVCLGFBdUJhO0FBQUEsWUF0Qlgsb0JBQWlCO0FBQUEsWUFDakIsc0JBQW1CO0FBQUEsWUFDbkIsa0JBQWU7QUFBQSxZQUNmLHNCQUFtQjtBQUFBLFlBQTBCLG9CQUFpQjtBQUFBLFlBSmhFO0FBQUE7OEJBT0UsTUFlRTtBQUFBLDhCQWZGO0FBQUEsZ0JBZUU7QUFBQTtBQUFBLGtCQWJBLEtBQUk7QUFBQSxrQkFDSCxPQUFLO0FBQUEsNkJBQXdCLG9DQUEwQjtBQUFBLHFDQUFpRCxvQ0FBMEMseUJBQWtCLE9BQW9CO0FBQUE7MkNBQWlGLG9CQUFhO0FBQUE7Ozs7O2tCQVdwUixvQkFBaUI7QUFBQTs7Ozs7eUJBYlosaUNBQTBCO0FBQUE7Ozs7O1VBZ0J0QyxhQVVhO0FBQUEsWUFUWCxvQkFBaUI7QUFBQSxZQUNqQixrQkFBZTtBQUFBLFlBQ2Ysc0JBQW1CO0FBQUEsWUFDbkIsc0JBQW1CO0FBQUEsWUFBMEIsb0JBQWlCO0FBQUE7OEJBRTlELE1BR0U7QUFBQSxjQUhGLGFBR0U7QUFBQSxnQkFGQyxTQUFTLDRCQUFxQjtBQUFBLGdCQUMvQixPQUFNO0FBQUEsZ0JBQTJCLG9CQUFpQjtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJJbWFnZS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZWpzLWFjY2Vzc2liaWxpdHkvbW91c2UtZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAtLT5cclxuICA8ZGl2XHJcbiAgICByZWY9XCJwYXJlbnRcIlxyXG4gICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsXCJcclxuICAgIEBtb3VzZWVudGVyPVwiaG92ZXJlZCA9IHRydWVcIlxyXG4gICAgQG1vdXNlbGVhdmU9XCJob3ZlcmVkID0gZmFsc2VcIlxyXG4gICAgQG1vdXNlbW92ZT1cIihlOiBNb3VzZUV2ZW50KSA9PiBjYWxjdWxhdGVQYW5vcmFtYVN0eWxlKGUpXCJcclxuICAgIEB0b3VjaG1vdmU9XCIoZTogVG91Y2hFdmVudCkgPT5cclxuICAgICAgY2FsY3VsYXRlUGFub3JhbWFTdHlsZSh7XHJcbiAgICAgICAgdGFyZ2V0OiBlLnRhcmdldCxcclxuICAgICAgICBjbGllbnRYOiBlLnRvdWNoZXNbMF0uY2xpZW50WCxcclxuICAgICAgICBjbGllbnRZOiBlLnRvdWNoZXNbMF0uY2xpZW50WVxyXG4gICAgICB9KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjQ6M1wiXHJcbiAgPlxyXG4gICAgPFRyYW5zaXRpb25cclxuICAgICAgZW50ZXItZnJvbS1jbGFzcz1cIm9wYWNpdHktMFwiXHJcbiAgICAgIGVudGVyLWFjdGl2ZS1jbGFzcz1cInRyYW5zaXRpb24gZHVyYXRpb24tMzAwXCJcclxuICAgICAgbGVhdmUtdG8tY2xhc3M9XCJvcGFjaXR5LTBcIlxyXG4gICAgICBsZWF2ZS1hY3RpdmUtY2xhc3M9XCJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjE3OjVcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IHYtaWY9XCJzaG91bGRTaG93TWFpblByZXZpZXdcIiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcmV2aWV3L0ltYWdlLnZ1ZToyMzo3XCI+XHJcbiAgICAgICAgPENvbW1vblRyYW5zaXRpb25pbmdDb250ZW50c1xyXG4gICAgICAgICAgcmVmPVwiZmluYWxQcmV2aWV3VHJhbnNpdGlvbmVyXCJcclxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjI0OjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgdi1pZj1cIiFoYXNEb25lRmlyc3RMb2FkIHx8ICFmaW5hbFByZXZpZXdVcmw/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIlttYWluUHJldmlld0NsYXNzZXMsICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciddXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJldmlldy9JbWFnZS52dWU6Mjg6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Q29tbW9uTG9hZGluZ0ljb24gY2xhc3M9XCJvcGFjaXR5LTUwXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJldmlldy9JbWFnZS52dWU6MzI6MTNcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHYtZWxzZVxyXG4gICAgICAgICAgICA6Y2xhc3M9XCJtYWluUHJldmlld0NsYXNzZXNcIlxyXG4gICAgICAgICAgICA6c3R5bGU9XCJ7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCcke2ZpbmFsUHJldmlld1VybH0nKWBcclxuICAgICAgICAgICAgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjM0OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9Db21tb25UcmFuc2l0aW9uaW5nQ29udGVudHM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9UcmFuc2l0aW9uPlxyXG4gICAgPFRyYW5zaXRpb25cclxuICAgICAgZW50ZXItZnJvbS1jbGFzcz1cIm9wYWNpdHktMFwiXHJcbiAgICAgIGVudGVyLWFjdGl2ZS1jbGFzcz1cInRyYW5zaXRpb24gZHVyYXRpb24tMzAwXCJcclxuICAgICAgbGVhdmUtdG8tY2xhc3M9XCJvcGFjaXR5LTBcIlxyXG4gICAgICBsZWF2ZS1hY3RpdmUtY2xhc3M9XCJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjQ0OjVcIlxyXG4gICAgPlxyXG4gICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L21vdXNlLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93UGFub3JhbWljUHJldmlld1wiXHJcbiAgICAgICAgcmVmPVwicGFub3JhbWFcIlxyXG4gICAgICAgIDpzdHlsZT1cIntcclxuICAgICAgICAgIGRpc3BsYXk6IHNob3VsZFNob3dQYW5vcmFtaWNQcmV2aWV3ID8gJ2Jsb2NrJyA6ICdub25lJyxcclxuICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogcGFub3JhbWFQcmV2aWV3VXJsXHJcbiAgICAgICAgICAgID8gYHVybCgnJHtwYW5vcmFtYVByZXZpZXdVcmx9JylgXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246IGAke3Bvc2l0aW9uTWFnaWN9cHggMGAsXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgIHRvcDogJzAnLFxyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgIGhlaWdodDogJzEwMCUnXHJcbiAgICAgICAgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjUxOjdcIlxyXG4gICAgICAvPlxyXG4gICAgPC9UcmFuc2l0aW9uPlxyXG4gICAgPFRyYW5zaXRpb25cclxuICAgICAgZW50ZXItZnJvbS1jbGFzcz1cIm9wYWNpdHktMFwiXHJcbiAgICAgIGxlYXZlLXRvLWNsYXNzPVwib3BhY2l0eS0wXCJcclxuICAgICAgZW50ZXItYWN0aXZlLWNsYXNzPVwidHJhbnNpdGlvbiBkdXJhdGlvbi0zMDBcIlxyXG4gICAgICBsZWF2ZS1hY3RpdmUtY2xhc3M9XCJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ByZXZpZXcvSW1hZ2UudnVlOjY4OjVcIlxyXG4gICAgPlxyXG4gICAgICA8Q29tbW9uTG9hZGluZ0JhclxyXG4gICAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nUGFub3JhbWEgJiYgaG92ZXJlZFwiXHJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBib3R0b20tMCB3LWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcmV2aWV3L0ltYWdlLnZ1ZTo3NDo3XCJcclxuICAgICAgLz5cclxuICAgIDwvVHJhbnNpdGlvbj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHR5cGUgeyBOdWxsYWJsZSB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgQ29tbW9uTG9hZGluZ0ljb24gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyB1c2VFbGVtZW50VmlzaWJpbGl0eSwgdXNlUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAdnVldXNlL2NvcmUnXHJcbmltcG9ydCB7IHVzZVByZXZpZXdJbWFnZUJsb2IgfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvcHJldmlld0ltYWdlJ1xyXG5cclxudHlwZSBQYW5vcmFtYVN0eWxlTW91c2VPclRvdWNoRXZlbnQgPSBQaWNrPE1vdXNlRXZlbnQsICd0YXJnZXQnIHwgJ2NsaWVudFgnIHwgJ2NsaWVudFknPlxyXG5cclxuY29uc3QgcHJvcHMgPSB3aXRoRGVmYXVsdHMoXHJcbiAgZGVmaW5lUHJvcHM8e1xyXG4gICAgcHJldmlld1VybDogc3RyaW5nXHJcbiAgICBwYW5vcmFtYU9uSG92ZXI/OiBib29sZWFuXHJcbiAgICBlYWdlckxvYWQ/OiBib29sZWFuXHJcbiAgfT4oKSxcclxuICB7XHJcbiAgICBwYW5vcmFtYU9uSG92ZXI6IHRydWUsXHJcbiAgICBlYWdlckxvYWQ6IHRydWVcclxuICB9XHJcbilcclxuXHJcbmNvbnN0IHBhcmVudCA9IHJlZihudWxsIGFzIE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PilcclxuY29uc3QgZmluYWxQcmV2aWV3VHJhbnNpdGlvbmVyID0gcmVmKFxyXG4gIG51bGwgYXMgTnVsbGFibGU8eyB0cmlnZ2VyVHJhbnNpdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPiB9PlxyXG4pXHJcblxyXG5jb25zdCB7ICRpc0FwcEh5ZHJhdGVkIH0gPSB1c2VOdXh0QXBwKClcclxuY29uc3QgaXNJblZpZXdwb3J0ID0gdXNlRWxlbWVudFZpc2liaWxpdHkocGFyZW50KVxyXG5jb25zdCBiYXNlUHJldmlld1VybCA9IGNvbXB1dGVkKCgpID0+IHByb3BzLnByZXZpZXdVcmwpXHJcbmNvbnN0IHtcclxuICBwcmV2aWV3VXJsOiBmaW5hbFByZXZpZXdVcmwsXHJcbiAgcGFub3JhbWFQcmV2aWV3VXJsLFxyXG4gIHNob3VsZExvYWRQYW5vcmFtYSxcclxuICBpc0xvYWRpbmdQYW5vcmFtYSxcclxuICBoYXNEb25lRmlyc3RMb2FkLFxyXG4gIGlzUGFub3JhbWFQbGFjZWhvbGRlclxyXG59ID0gdXNlUHJldmlld0ltYWdlQmxvYihiYXNlUHJldmlld1VybCwge1xyXG4gIGVuYWJsZWQ6IGNvbXB1dGVkKCgpID0+IHByb3BzLmVhZ2VyTG9hZCB8fCBpc0luVmlld3BvcnQudmFsdWUpLFxyXG4gIGVhZ2VyTG9hZDogcHJvcHMuZWFnZXJMb2FkXHJcbn0pXHJcblxyXG5jb25zdCBob3ZlcmVkID0gcmVmKGZhbHNlKVxyXG5jb25zdCBwYW5vcmFtYSA9IHJlZihudWxsIGFzIE51bGxhYmxlPEhUTUxEaXZFbGVtZW50PilcclxuXHJcbmNvbnN0IG1haW5QcmV2aWV3Q2xhc3NlcyA9IGNvbXB1dGVkKFxyXG4gICgpID0+ICd3LWZ1bGwgaC1mdWxsIGJnLWNvdmVyIGJnLW5vLXJlcGVhdCBiZy1jZW50ZXInXHJcbilcclxuXHJcbmNvbnN0IHBhcmVudFdpZHRoID0gcmVmKDApXHJcbmNvbnN0IHBhcmVudEhlaWdodCA9IHJlZigwKVxyXG5jb25zdCBzZXRQYXJlbnREaW1lbnNpb25zID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgd2lkdGggPSAwLCBoZWlnaHQgPSAwIH0gPSBwYXJlbnQudmFsdWU/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IHt9XHJcbiAgcGFyZW50V2lkdGgudmFsdWUgPSB3aWR0aFxyXG4gIHBhcmVudEhlaWdodC52YWx1ZSA9IGhlaWdodFxyXG59XHJcblxyXG5pZiAoaW1wb3J0Lm1ldGEuY2xpZW50KSB1c2VSZXNpemVPYnNlcnZlcihkb2N1bWVudC5ib2R5LCAoKSA9PiBzZXRQYXJlbnREaW1lbnNpb25zKCkpXHJcblxyXG5jb25zdCBwb3NpdGlvbk1hZ2ljID0gcmVmKDApXHJcbmNvbnN0IGxhdGVzdE1vdXNlRXZlbnQgPSByZWY8UGFub3JhbWFTdHlsZU1vdXNlT3JUb3VjaEV2ZW50PigpXHJcbmNvbnN0IGNhbGN1bGF0ZVBhbm9yYW1hU3R5bGUgPSAoZTogUGFub3JhbWFTdHlsZU1vdXNlT3JUb3VjaEV2ZW50KSA9PiB7XHJcbiAgbGF0ZXN0TW91c2VFdmVudC52YWx1ZSA9IGVcclxuICBjb25zdCByZWN0ID0gcGFub3JhbWEudmFsdWU/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgaWYgKHBhcmVudEhlaWdodC52YWx1ZSA9PT0gMCkgc2V0UGFyZW50RGltZW5zaW9ucygpXHJcbiAgaWYgKCFyZWN0KSByZXR1cm5cclxuXHJcbiAgY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdFxyXG4gIGNvbnN0IHN0ZXAgPSByZWN0LndpZHRoIC8gMjRcclxuICBsZXQgaW5kZXggPSBNYXRoLmFicygyNCAtIE1hdGgucm91bmQoeCAvIHN0ZXApKVxyXG4gIGlmIChpbmRleCA+PSAyNCkgaW5kZXggPSAyNCAtIDFcclxuXHJcbiAgY29uc3Qgc2NhbGVGYWN0b3IgPSBwYXJlbnRIZWlnaHQudmFsdWUgLyA0MDBcclxuICBjb25zdCBhY3R1YWxXaWR0aCA9IHNjYWxlRmFjdG9yICogNzAwXHJcbiAgY29uc3Qgd2lkdGhEaWZmID0gKHBhcmVudFdpZHRoLnZhbHVlIC0gYWN0dWFsV2lkdGgpICogMC41XHJcbiAgcG9zaXRpb25NYWdpYy52YWx1ZSA9IC0oYWN0dWFsV2lkdGggKiAoMiAqIGluZGV4ICsgMSkgLSB3aWR0aERpZmYpXHJcbn1cclxuXHJcbmNvbnN0IHNob3VsZFNob3dNYWluUHJldmlldyA9IGNvbXB1dGVkKFxyXG4gICgpID0+XHJcbiAgICAoIWhvdmVyZWQudmFsdWUgJiYgZmluYWxQcmV2aWV3VXJsLnZhbHVlKSB8fFxyXG4gICAgaXNMb2FkaW5nUGFub3JhbWEudmFsdWUgfHxcclxuICAgICFwcm9wcy5wYW5vcmFtYU9uSG92ZXIgfHxcclxuICAgIGlzUGFub3JhbWFQbGFjZWhvbGRlci52YWx1ZSB8fFxyXG4gICAgIXBhbm9yYW1hUHJldmlld1VybC52YWx1ZVxyXG4pXHJcblxyXG5jb25zdCBzaG91bGRTaG93UGFub3JhbWljUHJldmlldyA9IGNvbXB1dGVkKFxyXG4gICgpID0+XHJcbiAgICBob3ZlcmVkLnZhbHVlICYmXHJcbiAgICBwYW5vcmFtYVByZXZpZXdVcmwudmFsdWUgJiZcclxuICAgIHByb3BzLnBhbm9yYW1hT25Ib3ZlciAmJlxyXG4gICAgIWlzUGFub3JhbWFQbGFjZWhvbGRlci52YWx1ZSAmJlxyXG4gICAgJGlzQXBwSHlkcmF0ZWQudmFsdWVcclxuKVxyXG5cclxub25Nb3VudGVkKCgpID0+IHNldFBhcmVudERpbWVuc2lvbnMoKSlcclxuXHJcbndhdGNoKGhvdmVyZWQsIChuZXdWYWwpID0+IHtcclxuICBpZiAobmV3VmFsICYmICFwYW5vcmFtYVByZXZpZXdVcmwudmFsdWUgJiYgcHJvcHMucGFub3JhbWFPbkhvdmVyKVxyXG4gICAgc2hvdWxkTG9hZFBhbm9yYW1hLnZhbHVlID0gdHJ1ZVxyXG59KVxyXG5cclxud2F0Y2goXHJcbiAgKCkgPT4gdW5yZWYocGFub3JhbWFQcmV2aWV3VXJsKSxcclxuICAoKSA9PiB7XHJcbiAgICBpZiAobGF0ZXN0TW91c2VFdmVudC52YWx1ZSkge1xyXG4gICAgICBjYWxjdWxhdGVQYW5vcmFtYVN0eWxlKGxhdGVzdE1vdXNlRXZlbnQudmFsdWUpXHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5pZiAoaW1wb3J0Lm1ldGEuY2xpZW50KSB7XHJcbiAgLy8gVHJpZ2dlciB0cmFuc2l0aW9ucyB3aGVuIHByZXZpZXcgaW1hZ2UgY2hhbmdlc1xyXG4gIHdhdGNoKGZpbmFsUHJldmlld1VybCwgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgICBpZiAobmV3VmFsID09PSBvbGRWYWwpIHJldHVyblxyXG4gICAgZmluYWxQcmV2aWV3VHJhbnNpdGlvbmVyLnZhbHVlPy50cmlnZ2VyVHJhbnNpdGlvbigpXHJcbiAgfSlcclxufVxyXG5cclxuLy8gYXdhaXQgaW5pdCgpXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9wcmV2aWV3L0ltYWdlLnZ1ZSJ9