466 lines
45 KiB
Plaintext
466 lines
45 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/controls/Bottom.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/controls/ButtonToggle.vue";
|
|
import { default as __nuxt_component_1 } from "/_nuxt/components/viewer/controls/ButtonGroup.vue";
|
|
import { FormButton as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_3 } from "/_nuxt/components/viewer/measurements/Menu.vue";
|
|
import { default as __nuxt_component_4 } from "/_nuxt/components/viewer/explode/Menu.vue";
|
|
import { default as __nuxt_component_5 } from "/_nuxt/components/viewer/view-modes/Menu.vue";
|
|
import { default as __nuxt_component_6 } from "/_nuxt/components/viewer/lightControls/Menu.vue";
|
|
import { default as __nuxt_component_7 } from "/_nuxt/components/viewer/layout/Panel.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createVNode as __createVNode,createElementBlock as __createElementBlock,createBlock as __createBlock,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 _createBlock(...args) { return _interopVNode(__createBlock(...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 {
|
|
useSectionBoxUtilities,
|
|
useMeasurementUtilities,
|
|
useViewerShortcuts,
|
|
useViewModeUtilities
|
|
} from "/_nuxt/lib/viewer/composables/ui.ts";
|
|
import { useFilterUtilities } from "/_nuxt/lib/viewer/composables/filtering/filtering.ts";
|
|
import { ViewMode } from "/_nuxt/@fs/D:/speckle-server/packages/viewer/dist/index.js";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { onKeyStroke, useBreakpoints } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
import { useEmbed } from "/_nuxt/lib/viewer/composables/setup/embed.ts";
|
|
import { TailwindBreakpoints } from "/_nuxt/lib/common/helpers/tailwind.ts";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import { Ruler, Scissors, Sun, Layers2, Glasses, Scan } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
|
|
import { useOnViewerLoadComplete } from "/_nuxt/lib/viewer/composables/viewer.ts";
|
|
|
|
import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts";
|
|
import { computed, ref, shallowRef, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
var ActivePanel = /* @__PURE__ */ ((ActivePanel2) => {
|
|
ActivePanel2["none"] = "none";
|
|
ActivePanel2["measurements"] = "measurements";
|
|
ActivePanel2["sectionBox"] = "sectionBox";
|
|
ActivePanel2["explode"] = "explode";
|
|
ActivePanel2["viewModes"] = "viewModes";
|
|
ActivePanel2["lightControls"] = "lightControls";
|
|
return ActivePanel2;
|
|
})(ActivePanel || {});
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ViewerControlsBottom",
|
|
emits: ["forceClosePanels"],
|
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
const emit = __emit;
|
|
const { getShortcutDisplayText, shortcuts, registerShortcuts } = useViewerShortcuts();
|
|
const {
|
|
toggleSectionBox,
|
|
resetSectionBoxCompletely,
|
|
closeSectionBox,
|
|
isSectionBoxEnabled,
|
|
isSectionBoxVisible
|
|
} = useSectionBoxUtilities();
|
|
const { enableMeasurements, hasMeasurements, measurements } = useMeasurementUtilities();
|
|
const { resetExplode } = useFilterUtilities();
|
|
const {
|
|
viewMode: { mode: currentViewMode },
|
|
setViewMode
|
|
} = useViewModeUtilities();
|
|
const {
|
|
ui: { explodeFactor, windowSelection }
|
|
} = useInjectedViewerState();
|
|
const { getTooltipProps } = useSmartTooltipDelay();
|
|
const hasExplode = computed(() => explodeFactor.value > 0);
|
|
const hasNonDefaultViewMode = computed(() => currentViewMode.value !== ViewMode.DEFAULT);
|
|
const { isEnabled: isEmbedEnabled } = useEmbed();
|
|
const breakpoints = useBreakpoints(TailwindBreakpoints);
|
|
const isMobile = breakpoints.smaller("sm");
|
|
const mixpanel = useMixpanel();
|
|
const activePanel = ref("none" /* none */);
|
|
const viewerLoaded = ref(false);
|
|
const isWindowSelectionEnabled = windowSelection.enabled;
|
|
const panels = shallowRef({
|
|
["measurements" /* measurements */]: {
|
|
id: "measurements" /* measurements */,
|
|
name: "Measure",
|
|
icon: Ruler,
|
|
tooltip: getShortcutDisplayText(shortcuts.ToggleMeasurements, {
|
|
format: "separate"
|
|
}),
|
|
extraClasses: ""
|
|
},
|
|
["sectionBox" /* sectionBox */]: {
|
|
id: "sectionBox" /* sectionBox */,
|
|
name: "Section",
|
|
icon: Scissors,
|
|
tooltip: getShortcutDisplayText(shortcuts.ToggleSectionBox, { format: "separate" }),
|
|
extraClasses: ""
|
|
},
|
|
["explode" /* explode */]: {
|
|
id: "explode" /* explode */,
|
|
name: "Explode",
|
|
icon: Layers2,
|
|
tooltip: getShortcutDisplayText(shortcuts.ToggleExplode, { format: "separate" }),
|
|
extraClasses: "hidden md:flex"
|
|
},
|
|
["viewModes" /* viewModes */]: {
|
|
id: "viewModes" /* viewModes */,
|
|
name: "View modes",
|
|
icon: Glasses,
|
|
tooltip: getShortcutDisplayText(shortcuts.ToggleViewModes, { format: "separate" }),
|
|
extraClasses: ""
|
|
},
|
|
["lightControls" /* lightControls */]: {
|
|
id: "lightControls" /* lightControls */,
|
|
name: "Light controls",
|
|
icon: Sun,
|
|
tooltip: getShortcutDisplayText(shortcuts.ToggleLightControls, {
|
|
format: "separate"
|
|
}),
|
|
extraClasses: "hidden md:flex"
|
|
}
|
|
});
|
|
const showResetButton = computed(() => {
|
|
return activePanel.value === "explode" /* explode */ || activePanel.value === "sectionBox" /* sectionBox */;
|
|
});
|
|
const shouldShowDot = (panelId) => {
|
|
switch (panelId) {
|
|
case "measurements" /* measurements */:
|
|
return hasMeasurements.value;
|
|
case "sectionBox" /* sectionBox */:
|
|
return isSectionBoxEnabled.value;
|
|
case "explode" /* explode */:
|
|
return hasExplode.value;
|
|
case "viewModes" /* viewModes */:
|
|
return hasNonDefaultViewMode.value;
|
|
default:
|
|
return false;
|
|
}
|
|
};
|
|
const toggleActivePanel = (panel) => {
|
|
windowSelection.enabled.value = false;
|
|
activePanel.value = activePanel.value === panel ? "none" /* none */ : panel;
|
|
if (activePanel.value !== "none" /* none */ && isMobile.value) {
|
|
emit("forceClosePanels");
|
|
}
|
|
if (panel === "sectionBox" /* sectionBox */) {
|
|
toggleSectionBox();
|
|
}
|
|
if (panel === "measurements" /* measurements */) {
|
|
enableMeasurements(true);
|
|
}
|
|
};
|
|
const toggleMeasurements = () => {
|
|
windowSelection.enabled.value = false;
|
|
if (activePanel.value === "sectionBox" /* sectionBox */) {
|
|
toggleSectionBox();
|
|
}
|
|
const isMeasurementsActive = activePanel.value === "measurements" /* measurements */;
|
|
enableMeasurements(!isMeasurementsActive);
|
|
activePanel.value = isMeasurementsActive ? "none" /* none */ : "measurements" /* measurements */;
|
|
};
|
|
const toggleExplode = () => {
|
|
windowSelection.enabled.value = false;
|
|
activePanel.value = activePanel.value === "explode" /* explode */ ? "none" /* none */ : "explode" /* explode */;
|
|
};
|
|
const toggleSectionBoxPanel = () => {
|
|
windowSelection.enabled.value = false;
|
|
if (activePanel.value === "measurements" /* measurements */) {
|
|
enableMeasurements(false);
|
|
}
|
|
activePanel.value = activePanel.value === "sectionBox" /* sectionBox */ ? "none" /* none */ : "sectionBox" /* sectionBox */;
|
|
toggleSectionBox();
|
|
};
|
|
const toggleViewModes = () => {
|
|
windowSelection.enabled.value = false;
|
|
activePanel.value = activePanel.value === "viewModes" /* viewModes */ ? "none" /* none */ : "viewModes" /* viewModes */;
|
|
};
|
|
const toggleLightControls = () => {
|
|
windowSelection.enabled.value = false;
|
|
activePanel.value = activePanel.value === "lightControls" /* lightControls */ ? "none" /* none */ : "lightControls" /* lightControls */;
|
|
};
|
|
const onActivePanelClose = () => {
|
|
if (activePanel.value === "sectionBox" /* sectionBox */) {
|
|
closeSectionBox();
|
|
}
|
|
if (activePanel.value === "measurements" /* measurements */) {
|
|
enableMeasurements(false);
|
|
}
|
|
activePanel.value = "none" /* none */;
|
|
};
|
|
const toggleWindowSelection = () => {
|
|
if (activePanel.value === "sectionBox" /* sectionBox */) {
|
|
closeSectionBox();
|
|
}
|
|
if (activePanel.value === "measurements" /* measurements */) {
|
|
enableMeasurements(false);
|
|
}
|
|
activePanel.value = "none" /* none */;
|
|
windowSelection.enabled.value = !windowSelection.enabled.value;
|
|
if (windowSelection.enabled.value && isMobile.value) {
|
|
emit("forceClosePanels");
|
|
}
|
|
};
|
|
const onReset = () => {
|
|
if (activePanel.value === "explode" /* explode */) {
|
|
resetExplode();
|
|
}
|
|
if (activePanel.value === "sectionBox" /* sectionBox */) {
|
|
resetSectionBoxCompletely();
|
|
activePanel.value = "none" /* none */;
|
|
}
|
|
};
|
|
const forceClosePanels = () => {
|
|
activePanel.value = "none" /* none */;
|
|
};
|
|
const handleViewModeChange = (mode) => {
|
|
setViewMode(mode);
|
|
};
|
|
registerShortcuts({
|
|
ToggleMeasurements: () => toggleMeasurements(),
|
|
ToggleExplode: () => toggleExplode(),
|
|
ToggleSectionBox: () => toggleSectionBoxPanel(),
|
|
ToggleViewModes: () => toggleViewModes(),
|
|
ToggleLightControls: () => toggleLightControls(),
|
|
SetViewModeDefault: () => handleViewModeChange(ViewMode.DEFAULT),
|
|
SetViewModeSolid: () => handleViewModeChange(ViewMode.SOLID),
|
|
SetViewModePen: () => handleViewModeChange(ViewMode.PEN),
|
|
SetViewModeArctic: () => handleViewModeChange(ViewMode.ARCTIC),
|
|
SetViewModeShaded: () => handleViewModeChange(ViewMode.SHADED)
|
|
});
|
|
onKeyStroke("Escape", () => {
|
|
const hasActiveMeasurements = measurements.value.length > 0;
|
|
if (hasActiveMeasurements) return;
|
|
if (activePanel.value === "measurements" /* measurements */) {
|
|
toggleMeasurements();
|
|
} else if (activePanel.value === "sectionBox" /* sectionBox */) {
|
|
closeSectionBox();
|
|
}
|
|
windowSelection.enabled.value = false;
|
|
activePanel.value = "none" /* none */;
|
|
});
|
|
useOnViewerLoadComplete(
|
|
() => {
|
|
viewerLoaded.value = true;
|
|
},
|
|
{ initialOnly: true, waitForLoadingOver: true }
|
|
);
|
|
watch(activePanel, (newVal) => {
|
|
mixpanel.track("Viewer Action", {
|
|
type: "action",
|
|
name: "controls-toggle",
|
|
action: newVal
|
|
});
|
|
});
|
|
watch(isSectionBoxEnabled, (val) => {
|
|
mixpanel.track("Viewer Action", {
|
|
type: "action",
|
|
name: "section-box",
|
|
status: val
|
|
});
|
|
});
|
|
watch(isSectionBoxVisible, (val) => {
|
|
mixpanel.track("Viewer Action", {
|
|
type: "action",
|
|
name: "section-box-visibility",
|
|
status: val
|
|
});
|
|
});
|
|
__expose({
|
|
forceClosePanels
|
|
});
|
|
const __returned__ = { ActivePanel, emit, getShortcutDisplayText, shortcuts, registerShortcuts, toggleSectionBox, resetSectionBoxCompletely, closeSectionBox, isSectionBoxEnabled, isSectionBoxVisible, enableMeasurements, hasMeasurements, measurements, resetExplode, currentViewMode, setViewMode, explodeFactor, windowSelection, getTooltipProps, hasExplode, hasNonDefaultViewMode, isEmbedEnabled, breakpoints, isMobile, mixpanel, activePanel, viewerLoaded, isWindowSelectionEnabled, panels, showResetButton, shouldShowDot, toggleActivePanel, toggleMeasurements, toggleExplode, toggleSectionBoxPanel, toggleViewModes, toggleLightControls, onActivePanelClose, toggleWindowSelection, onReset, forceClosePanels, handleViewModeChange, get Scan() {
|
|
return Scan;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, normalizeClass as _normalizeClass, vShow as _vShow, withCtx as _withCtx, resolveDynamicComponent as _resolveDynamicComponent, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = { "data-v-inspector": "components/viewer/controls/Bottom.vue:2:3" };
|
|
const _hoisted_2 = {
|
|
class: "flex items-center",
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:33:7"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "text-body-2xs text-foreground",
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:35:9"
|
|
};
|
|
const _hoisted_4 = {
|
|
class: "flex items-center gap-1",
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:39:7"
|
|
};
|
|
const _hoisted_5 = {
|
|
class: "absolute left-1/2 -translate-x-1/2 bottom-11 w-80",
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:54:7"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ViewerControlsButtonToggle = __nuxt_component_0;
|
|
const _component_ViewerControlsButtonGroup = __nuxt_component_1;
|
|
const _component_FormButton = __nuxt_component_2;
|
|
const _component_ViewerMeasurementsMenu = __nuxt_component_3;
|
|
const _component_ViewerExplodeMenu = __nuxt_component_4;
|
|
const _component_ViewerViewModesMenu = __nuxt_component_5;
|
|
const _component_ViewerLightControlsMenu = __nuxt_component_6;
|
|
const _component_ViewerLayoutPanel = __nuxt_component_7;
|
|
const _directive_tippy = _resolveDirective("tippy");
|
|
return _openBlock(), _createElementBlock("aside", _hoisted_1, [
|
|
_withDirectives(_createVNode(_component_ViewerControlsButtonGroup, {
|
|
class: _normalizeClass(["absolute left-1/2 -translate-x-1/2 z-40", $setup.isEmbedEnabled ? "bottom-[4rem]" : "bottom-4"]),
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:3:5"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
|
|
active: $setup.isWindowSelectionEnabled,
|
|
disabled: !$setup.viewerLoaded,
|
|
icon: $setup.Scan,
|
|
onClick: $setup.toggleWindowSelection,
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:8:7"
|
|
}, null, 8, ["active", "disabled", "icon"]), [
|
|
[_directive_tippy, $setup.getTooltipProps("Window selection")]
|
|
]),
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.panels, (panel) => {
|
|
return _withDirectives((_openBlock(), _createBlock(_component_ViewerControlsButtonToggle, {
|
|
key: panel.id,
|
|
active: $setup.activePanel === panel.id,
|
|
disabled: !$setup.viewerLoaded,
|
|
dot: $setup.shouldShowDot(panel.id),
|
|
icon: panel.icon,
|
|
class: _normalizeClass(panel.extraClasses),
|
|
onClick: ($event) => $setup.toggleActivePanel(panel.id),
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:15:7"
|
|
}, null, 8, ["active", "disabled", "dot", "icon", "class", "onClick"])), [
|
|
[_directive_tippy, $setup.getTooltipProps(panel.tooltip)]
|
|
]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
))
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["class"]), [
|
|
[_vShow, $setup.activePanel === "none"]
|
|
]),
|
|
$setup.activePanel !== "none" ? (_openBlock(), _createBlock(_component_ViewerLayoutPanel, {
|
|
key: 0,
|
|
class: _normalizeClass(["absolute left-1/2 -translate-x-1/2 z-40 flex p-2 items-center justify-between w-80", $setup.isEmbedEnabled ? "bottom-[4rem]" : "bottom-4"]),
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:28:5"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createElementVNode("span", _hoisted_2, [
|
|
(_openBlock(), _createBlock(_resolveDynamicComponent($setup.panels[$setup.activePanel].icon), {
|
|
class: "h-4 w-4 ml-1 mr-1.5",
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:34:9"
|
|
})),
|
|
_createElementVNode(
|
|
"p",
|
|
_hoisted_3,
|
|
_toDisplayString($setup.panels[$setup.activePanel].name),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_createElementVNode("div", _hoisted_4, [
|
|
$setup.showResetButton ? (_openBlock(), _createBlock(_component_FormButton, {
|
|
key: 0,
|
|
tabindex: "-1",
|
|
size: "sm",
|
|
color: "subtle",
|
|
onClick: $setup.onReset,
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:40:9"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[0] || (_cache[0] = [
|
|
_createTextVNode(
|
|
" Reset ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
})) : _createCommentVNode("v-if", true),
|
|
_createVNode(_component_FormButton, {
|
|
tabindex: "-1",
|
|
size: "sm",
|
|
onClick: $setup.onActivePanelClose,
|
|
"data-v-inspector": "components/viewer/controls/Bottom.vue:49:9"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[1] || (_cache[1] = [
|
|
_createTextVNode(
|
|
" Done ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
})
|
|
]),
|
|
_createElementVNode("div", _hoisted_5, [
|
|
_withDirectives(_createVNode(
|
|
_component_ViewerMeasurementsMenu,
|
|
{ "data-v-inspector": "components/viewer/controls/Bottom.vue:55:9" },
|
|
null,
|
|
512
|
|
/* NEED_PATCH */
|
|
), [
|
|
[_vShow, $setup.activePanel === "measurements"]
|
|
]),
|
|
_withDirectives(_createVNode(
|
|
_component_ViewerExplodeMenu,
|
|
{ "data-v-inspector": "components/viewer/controls/Bottom.vue:56:9" },
|
|
null,
|
|
512
|
|
/* NEED_PATCH */
|
|
), [
|
|
[_vShow, $setup.activePanel === "explode"]
|
|
]),
|
|
_withDirectives(_createVNode(
|
|
_component_ViewerViewModesMenu,
|
|
{ "data-v-inspector": "components/viewer/controls/Bottom.vue:57:9" },
|
|
null,
|
|
512
|
|
/* NEED_PATCH */
|
|
), [
|
|
[_vShow, $setup.activePanel === "viewModes"]
|
|
]),
|
|
_withDirectives(_createVNode(
|
|
_component_ViewerLightControlsMenu,
|
|
{ "data-v-inspector": "components/viewer/controls/Bottom.vue:58:9" },
|
|
null,
|
|
512
|
|
/* NEED_PATCH */
|
|
), [
|
|
[_vShow, $setup.activePanel === "lightControls"]
|
|
])
|
|
])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["class"])) : _createCommentVNode("v-if", true)
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "84d0746d";
|
|
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/controls/Bottom.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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UUFHRixvQkFLTSxPQUxOLFlBS007QUFBQSwwQkFKSjtBQUFBLFlBQWdJO0FBQUEsY0FBaEUsb0JBQWlCLDZDQUE0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQTdGLHVCQUFXO0FBQUE7MEJBQzNDO0FBQUEsWUFBc0g7QUFBQSxjQUFoRSxvQkFBaUIsNkNBQTRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBeEYsdUJBQVc7QUFBQTswQkFDdEM7QUFBQSxZQUEwSDtBQUFBLGNBQWhFLG9CQUFpQiw2Q0FBNEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUExRix1QkFBVztBQUFBOzBCQUN4QztBQUFBLFlBQWtJO0FBQUEsY0FBaEUsb0JBQWlCLDZDQUE0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQTlGLHVCQUFXO0FBQUEiLCJuYW1lcyI6WyJBY3RpdmVQYW5lbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJCb3R0b20udnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8YXNpZGUgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0JvdHRvbS52dWU6MjozXCI+XHJcbiAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Hcm91cFxyXG4gICAgICB2LXNob3c9XCJhY3RpdmVQYW5lbCA9PT0gJ25vbmUnXCJcclxuICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHotNDBcIlxyXG4gICAgICA6Y2xhc3M9XCJpc0VtYmVkRW5hYmxlZCA/ICdib3R0b20tWzRyZW1dJyA6ICdib3R0b20tNCdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZTozOjVcIlxyXG4gICAgPlxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXG4gICAgICAgIHYtdGlwcHk9XCJnZXRUb29sdGlwUHJvcHMoJ1dpbmRvdyBzZWxlY3Rpb24nKVwiXG4gICAgICAgIDphY3RpdmU9XCJpc1dpbmRvd1NlbGVjdGlvbkVuYWJsZWRcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCIhdmlld2VyTG9hZGVkXCJcbiAgICAgICAgOmljb249XCJTY2FuXCJcbiAgICAgICAgQGNsaWNrPVwidG9nZ2xlV2luZG93U2VsZWN0aW9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0JvdHRvbS52dWU6ODo3XCJcbiAgICAgIC8+XG4gICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcbiAgICAgICAgdi1mb3I9XCJwYW5lbCBpbiBwYW5lbHNcIlxuICAgICAgICA6a2V5PVwicGFuZWwuaWRcIlxuICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKHBhbmVsLnRvb2x0aXApXCJcclxuICAgICAgICA6YWN0aXZlPVwiYWN0aXZlUGFuZWwgPT09IHBhbmVsLmlkXCJcclxuICAgICAgICA6ZGlzYWJsZWQ9XCIhdmlld2VyTG9hZGVkXCJcclxuICAgICAgICA6ZG90PVwic2hvdWxkU2hvd0RvdChwYW5lbC5pZClcIlxyXG4gICAgICAgIDppY29uPVwicGFuZWwuaWNvblwiXHJcbiAgICAgICAgOmNsYXNzPVwicGFuZWwuZXh0cmFDbGFzc2VzXCJcclxuICAgICAgICBAY2xpY2s9XCJ0b2dnbGVBY3RpdmVQYW5lbChwYW5lbC5pZClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZToxNTo3XCJcclxuICAgICAgLz5cclxuICAgIDwvVmlld2VyQ29udHJvbHNCdXR0b25Hcm91cD5cclxuXHJcbiAgICA8Vmlld2VyTGF5b3V0UGFuZWxcclxuICAgICAgdi1pZj1cImFjdGl2ZVBhbmVsICE9PSAnbm9uZSdcIlxyXG4gICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgei00MCBmbGV4IHAtMiBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHctODBcIlxyXG4gICAgICA6Y2xhc3M9XCJpc0VtYmVkRW5hYmxlZCA/ICdib3R0b20tWzRyZW1dJyA6ICdib3R0b20tNCdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZToyODo1XCJcclxuICAgID5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9Cb3R0b20udnVlOjMzOjdcIj5cclxuICAgICAgICA8Y29tcG9uZW50IDppcz1cInBhbmVsc1thY3RpdmVQYW5lbF0uaWNvblwiIGNsYXNzPVwiaC00IHctNCBtbC0xIG1yLTEuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9Cb3R0b20udnVlOjM0OjlcIiAvPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1ib2R5LTJ4cyB0ZXh0LWZvcmVncm91bmRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZTozNTo5XCI+XHJcbiAgICAgICAgICB7eyBwYW5lbHNbYWN0aXZlUGFuZWxdLm5hbWUgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0JvdHRvbS52dWU6Mzk6N1wiPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICB2LWlmPVwic2hvd1Jlc2V0QnV0dG9uXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgIGNvbG9yPVwic3VidGxlXCJcclxuICAgICAgICAgIEBjbGljaz1cIm9uUmVzZXRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZTo0MDo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBSZXNldFxyXG4gICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgICA8Rm9ybUJ1dHRvbiB0YWJpbmRleD1cIi0xXCIgc2l6ZT1cInNtXCIgQGNsaWNrPVwib25BY3RpdmVQYW5lbENsb3NlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0JvdHRvbS52dWU6NDk6OVwiPlxyXG4gICAgICAgICAgRG9uZVxyXG4gICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgbGVmdC0xLzIgLXRyYW5zbGF0ZS14LTEvMiBib3R0b20tMTEgdy04MFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9Cb3R0b20udnVlOjU0OjdcIj5cclxuICAgICAgICA8Vmlld2VyTWVhc3VyZW1lbnRzTWVudSB2LXNob3c9XCJhY3RpdmVQYW5lbCA9PT0gJ21lYXN1cmVtZW50cydcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZTo1NTo5XCIgLz5cclxuICAgICAgICA8Vmlld2VyRXhwbG9kZU1lbnUgdi1zaG93PVwiYWN0aXZlUGFuZWwgPT09ICdleHBsb2RlJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9Cb3R0b20udnVlOjU2OjlcIiAvPlxyXG4gICAgICAgIDxWaWV3ZXJWaWV3TW9kZXNNZW51IHYtc2hvdz1cImFjdGl2ZVBhbmVsID09PSAndmlld01vZGVzJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9Cb3R0b20udnVlOjU3OjlcIiAvPlxyXG4gICAgICAgIDxWaWV3ZXJMaWdodENvbnRyb2xzTWVudSB2LXNob3c9XCJhY3RpdmVQYW5lbCA9PT0gJ2xpZ2h0Q29udHJvbHMnXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0JvdHRvbS52dWU6NTg6OVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9WaWV3ZXJMYXlvdXRQYW5lbD5cclxuICA8L2FzaWRlPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHtcclxuICB1c2VTZWN0aW9uQm94VXRpbGl0aWVzLFxyXG4gIHVzZU1lYXN1cmVtZW50VXRpbGl0aWVzLFxyXG4gIHVzZVZpZXdlclNob3J0Y3V0cyxcclxuICB1c2VWaWV3TW9kZVV0aWxpdGllc1xyXG59IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvdWknXHJcbmltcG9ydCB7IHVzZUZpbHRlclV0aWxpdGllcyB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9maWx0ZXJpbmcvZmlsdGVyaW5nJ1xyXG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJ0BzcGVja2xlL3ZpZXdlcidcclxuaW1wb3J0IHsgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IG9uS2V5U3Ryb2tlLCB1c2VCcmVha3BvaW50cyB9IGZyb20gJ0B2dWV1c2UvY29yZSdcclxuaW1wb3J0IHsgdXNlRW1iZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAvZW1iZWQnXHJcbmltcG9ydCB7IFRhaWx3aW5kQnJlYWtwb2ludHMgfSBmcm9tICd+fi9saWIvY29tbW9uL2hlbHBlcnMvdGFpbHdpbmQnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXG5pbXBvcnQgeyBSdWxlciwgU2Npc3NvcnMsIFN1biwgTGF5ZXJzMiwgR2xhc3NlcywgU2NhbiB9IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcbmltcG9ydCB7IHVzZU9uVmlld2VyTG9hZENvbXBsZXRlIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3ZpZXdlcidcblxyXG5lbnVtIEFjdGl2ZVBhbmVsIHtcclxuICBub25lID0gJ25vbmUnLFxyXG4gIG1lYXN1cmVtZW50cyA9ICdtZWFzdXJlbWVudHMnLFxyXG4gIHNlY3Rpb25Cb3ggPSAnc2VjdGlvbkJveCcsXHJcbiAgZXhwbG9kZSA9ICdleHBsb2RlJyxcclxuICB2aWV3TW9kZXMgPSAndmlld01vZGVzJyxcclxuICBsaWdodENvbnRyb2xzID0gJ2xpZ2h0Q29udHJvbHMnXHJcbn1cclxuXHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgZm9yY2VDbG9zZVBhbmVsczogW11cclxufT4oKVxyXG5cclxuY29uc3QgeyBnZXRTaG9ydGN1dERpc3BsYXlUZXh0LCBzaG9ydGN1dHMsIHJlZ2lzdGVyU2hvcnRjdXRzIH0gPSB1c2VWaWV3ZXJTaG9ydGN1dHMoKVxyXG5jb25zdCB7XHJcbiAgdG9nZ2xlU2VjdGlvbkJveCxcclxuICByZXNldFNlY3Rpb25Cb3hDb21wbGV0ZWx5LFxyXG4gIGNsb3NlU2VjdGlvbkJveCxcclxuICBpc1NlY3Rpb25Cb3hFbmFibGVkLFxyXG4gIGlzU2VjdGlvbkJveFZpc2libGVcclxufSA9IHVzZVNlY3Rpb25Cb3hVdGlsaXRpZXMoKVxyXG5jb25zdCB7IGVuYWJsZU1lYXN1cmVtZW50cywgaGFzTWVhc3VyZW1lbnRzLCBtZWFzdXJlbWVudHMgfSA9IHVzZU1lYXN1cmVtZW50VXRpbGl0aWVzKClcclxuY29uc3QgeyByZXNldEV4cGxvZGUgfSA9IHVzZUZpbHRlclV0aWxpdGllcygpXHJcbmNvbnN0IHtcclxuICB2aWV3TW9kZTogeyBtb2RlOiBjdXJyZW50Vmlld01vZGUgfSxcclxuICBzZXRWaWV3TW9kZVxyXG59ID0gdXNlVmlld01vZGVVdGlsaXRpZXMoKVxyXG5jb25zdCB7XG4gIHVpOiB7IGV4cGxvZGVGYWN0b3IsIHdpbmRvd1NlbGVjdGlvbiB9XG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXG5jb25zdCB7IGdldFRvb2x0aXBQcm9wcyB9ID0gdXNlU21hcnRUb29sdGlwRGVsYXkoKVxyXG5cclxuY29uc3QgaGFzRXhwbG9kZSA9IGNvbXB1dGVkKCgpID0+IGV4cGxvZGVGYWN0b3IudmFsdWUgPiAwKVxyXG5jb25zdCBoYXNOb25EZWZhdWx0Vmlld01vZGUgPSBjb21wdXRlZCgoKSA9PiBjdXJyZW50Vmlld01vZGUudmFsdWUgIT09IFZpZXdNb2RlLkRFRkFVTFQpXHJcbmNvbnN0IHsgaXNFbmFibGVkOiBpc0VtYmVkRW5hYmxlZCB9ID0gdXNlRW1iZWQoKVxyXG5jb25zdCBicmVha3BvaW50cyA9IHVzZUJyZWFrcG9pbnRzKFRhaWx3aW5kQnJlYWtwb2ludHMpXHJcbmNvbnN0IGlzTW9iaWxlID0gYnJlYWtwb2ludHMuc21hbGxlcignc20nKVxyXG5jb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuXHJcbmNvbnN0IGFjdGl2ZVBhbmVsID0gcmVmPEFjdGl2ZVBhbmVsPihBY3RpdmVQYW5lbC5ub25lKVxuY29uc3Qgdmlld2VyTG9hZGVkID0gcmVmKGZhbHNlKVxuY29uc3QgaXNXaW5kb3dTZWxlY3Rpb25FbmFibGVkID0gd2luZG93U2VsZWN0aW9uLmVuYWJsZWRcblxyXG5jb25zdCBwYW5lbHMgPSBzaGFsbG93UmVmKHtcclxuICBbQWN0aXZlUGFuZWwubWVhc3VyZW1lbnRzXToge1xyXG4gICAgaWQ6IEFjdGl2ZVBhbmVsLm1lYXN1cmVtZW50cyxcclxuICAgIG5hbWU6ICdNZWFzdXJlJyxcclxuICAgIGljb246IFJ1bGVyLFxyXG4gICAgdG9vbHRpcDogZ2V0U2hvcnRjdXREaXNwbGF5VGV4dChzaG9ydGN1dHMuVG9nZ2xlTWVhc3VyZW1lbnRzLCB7XHJcbiAgICAgIGZvcm1hdDogJ3NlcGFyYXRlJ1xyXG4gICAgfSksXHJcbiAgICBleHRyYUNsYXNzZXM6ICcnXHJcbiAgfSxcclxuICBbQWN0aXZlUGFuZWwuc2VjdGlvbkJveF06IHtcclxuICAgIGlkOiBBY3RpdmVQYW5lbC5zZWN0aW9uQm94LFxyXG4gICAgbmFtZTogJ1NlY3Rpb24nLFxyXG4gICAgaWNvbjogU2Npc3NvcnMsXHJcbiAgICB0b29sdGlwOiBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVTZWN0aW9uQm94LCB7IGZvcm1hdDogJ3NlcGFyYXRlJyB9KSxcclxuICAgIGV4dHJhQ2xhc3NlczogJydcclxuICB9LFxyXG4gIFtBY3RpdmVQYW5lbC5leHBsb2RlXToge1xyXG4gICAgaWQ6IEFjdGl2ZVBhbmVsLmV4cGxvZGUsXHJcbiAgICBuYW1lOiAnRXhwbG9kZScsXHJcbiAgICBpY29uOiBMYXllcnMyLFxyXG4gICAgdG9vbHRpcDogZ2V0U2hvcnRjdXREaXNwbGF5VGV4dChzaG9ydGN1dHMuVG9nZ2xlRXhwbG9kZSwgeyBmb3JtYXQ6ICdzZXBhcmF0ZScgfSksXHJcbiAgICBleHRyYUNsYXNzZXM6ICdoaWRkZW4gbWQ6ZmxleCdcclxuICB9LFxyXG4gIFtBY3RpdmVQYW5lbC52aWV3TW9kZXNdOiB7XHJcbiAgICBpZDogQWN0aXZlUGFuZWwudmlld01vZGVzLFxyXG4gICAgbmFtZTogJ1ZpZXcgbW9kZXMnLFxyXG4gICAgaWNvbjogR2xhc3NlcyxcclxuICAgIHRvb2x0aXA6IGdldFNob3J0Y3V0RGlzcGxheVRleHQoc2hvcnRjdXRzLlRvZ2dsZVZpZXdNb2RlcywgeyBmb3JtYXQ6ICdzZXBhcmF0ZScgfSksXHJcbiAgICBleHRyYUNsYXNzZXM6ICcnXHJcbiAgfSxcclxuICBbQWN0aXZlUGFuZWwubGlnaHRDb250cm9sc106IHtcclxuICAgIGlkOiBBY3RpdmVQYW5lbC5saWdodENvbnRyb2xzLFxyXG4gICAgbmFtZTogJ0xpZ2h0IGNvbnRyb2xzJyxcclxuICAgIGljb246IFN1bixcclxuICAgIHRvb2x0aXA6IGdldFNob3J0Y3V0RGlzcGxheVRleHQoc2hvcnRjdXRzLlRvZ2dsZUxpZ2h0Q29udHJvbHMsIHtcclxuICAgICAgZm9ybWF0OiAnc2VwYXJhdGUnXHJcbiAgICB9KSxcclxuICAgIGV4dHJhQ2xhc3NlczogJ2hpZGRlbiBtZDpmbGV4J1xyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IHNob3dSZXNldEJ1dHRvbiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLmV4cGxvZGUgfHxcclxuICAgIGFjdGl2ZVBhbmVsLnZhbHVlID09PSBBY3RpdmVQYW5lbC5zZWN0aW9uQm94XHJcbiAgKVxyXG59KVxyXG5cclxuY29uc3Qgc2hvdWxkU2hvd0RvdCA9IChwYW5lbElkOiBBY3RpdmVQYW5lbCkgPT4ge1xyXG4gIHN3aXRjaCAocGFuZWxJZCkge1xyXG4gICAgY2FzZSBBY3RpdmVQYW5lbC5tZWFzdXJlbWVudHM6XHJcbiAgICAgIHJldHVybiBoYXNNZWFzdXJlbWVudHMudmFsdWVcclxuICAgIGNhc2UgQWN0aXZlUGFuZWwuc2VjdGlvbkJveDpcclxuICAgICAgcmV0dXJuIGlzU2VjdGlvbkJveEVuYWJsZWQudmFsdWVcclxuICAgIGNhc2UgQWN0aXZlUGFuZWwuZXhwbG9kZTpcclxuICAgICAgcmV0dXJuIGhhc0V4cGxvZGUudmFsdWVcclxuICAgIGNhc2UgQWN0aXZlUGFuZWwudmlld01vZGVzOlxyXG4gICAgICByZXR1cm4gaGFzTm9uRGVmYXVsdFZpZXdNb2RlLnZhbHVlXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHRvZ2dsZUFjdGl2ZVBhbmVsID0gKHBhbmVsOiBBY3RpdmVQYW5lbCkgPT4ge1xuICB3aW5kb3dTZWxlY3Rpb24uZW5hYmxlZC52YWx1ZSA9IGZhbHNlXG4gIGFjdGl2ZVBhbmVsLnZhbHVlID0gYWN0aXZlUGFuZWwudmFsdWUgPT09IHBhbmVsID8gQWN0aXZlUGFuZWwubm9uZSA6IHBhbmVsXG5cclxuICBpZiAoYWN0aXZlUGFuZWwudmFsdWUgIT09IEFjdGl2ZVBhbmVsLm5vbmUgJiYgaXNNb2JpbGUudmFsdWUpIHtcclxuICAgIGVtaXQoJ2ZvcmNlQ2xvc2VQYW5lbHMnKVxyXG4gIH1cclxuXHJcbiAgaWYgKHBhbmVsID09PSBBY3RpdmVQYW5lbC5zZWN0aW9uQm94KSB7XHJcbiAgICB0b2dnbGVTZWN0aW9uQm94KClcclxuICB9XHJcblxyXG4gIGlmIChwYW5lbCA9PT0gQWN0aXZlUGFuZWwubWVhc3VyZW1lbnRzKSB7XHJcbiAgICBlbmFibGVNZWFzdXJlbWVudHModHJ1ZSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHRvZ2dsZU1lYXN1cmVtZW50cyA9ICgpID0+IHtcbiAgd2luZG93U2VsZWN0aW9uLmVuYWJsZWQudmFsdWUgPSBmYWxzZVxuICBpZiAoYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLnNlY3Rpb25Cb3gpIHtcbiAgICB0b2dnbGVTZWN0aW9uQm94KClcclxuICB9XHJcblxyXG4gIGNvbnN0IGlzTWVhc3VyZW1lbnRzQWN0aXZlID0gYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLm1lYXN1cmVtZW50c1xyXG4gIGVuYWJsZU1lYXN1cmVtZW50cyghaXNNZWFzdXJlbWVudHNBY3RpdmUpXHJcbiAgYWN0aXZlUGFuZWwudmFsdWUgPSBpc01lYXN1cmVtZW50c0FjdGl2ZSA/IEFjdGl2ZVBhbmVsLm5vbmUgOiBBY3RpdmVQYW5lbC5tZWFzdXJlbWVudHNcclxufVxyXG5cclxuY29uc3QgdG9nZ2xlRXhwbG9kZSA9ICgpID0+IHtcbiAgd2luZG93U2VsZWN0aW9uLmVuYWJsZWQudmFsdWUgPSBmYWxzZVxuICBhY3RpdmVQYW5lbC52YWx1ZSA9XG4gICAgYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLmV4cGxvZGUgPyBBY3RpdmVQYW5lbC5ub25lIDogQWN0aXZlUGFuZWwuZXhwbG9kZVxyXG59XHJcblxyXG5jb25zdCB0b2dnbGVTZWN0aW9uQm94UGFuZWwgPSAoKSA9PiB7XG4gIHdpbmRvd1NlbGVjdGlvbi5lbmFibGVkLnZhbHVlID0gZmFsc2VcbiAgaWYgKGFjdGl2ZVBhbmVsLnZhbHVlID09PSBBY3RpdmVQYW5lbC5tZWFzdXJlbWVudHMpIHtcbiAgICBlbmFibGVNZWFzdXJlbWVudHMoZmFsc2UpXHJcbiAgfVxyXG5cclxuICBhY3RpdmVQYW5lbC52YWx1ZSA9XHJcbiAgICBhY3RpdmVQYW5lbC52YWx1ZSA9PT0gQWN0aXZlUGFuZWwuc2VjdGlvbkJveFxyXG4gICAgICA/IEFjdGl2ZVBhbmVsLm5vbmVcclxuICAgICAgOiBBY3RpdmVQYW5lbC5zZWN0aW9uQm94XHJcbiAgdG9nZ2xlU2VjdGlvbkJveCgpXHJcbn1cclxuXHJcbmNvbnN0IHRvZ2dsZVZpZXdNb2RlcyA9ICgpID0+IHtcbiAgd2luZG93U2VsZWN0aW9uLmVuYWJsZWQudmFsdWUgPSBmYWxzZVxuICBhY3RpdmVQYW5lbC52YWx1ZSA9XG4gICAgYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLnZpZXdNb2Rlc1xyXG4gICAgICA/IEFjdGl2ZVBhbmVsLm5vbmVcclxuICAgICAgOiBBY3RpdmVQYW5lbC52aWV3TW9kZXNcclxufVxyXG5cclxuY29uc3QgdG9nZ2xlTGlnaHRDb250cm9scyA9ICgpID0+IHtcbiAgd2luZG93U2VsZWN0aW9uLmVuYWJsZWQudmFsdWUgPSBmYWxzZVxuICBhY3RpdmVQYW5lbC52YWx1ZSA9XG4gICAgYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLmxpZ2h0Q29udHJvbHNcclxuICAgICAgPyBBY3RpdmVQYW5lbC5ub25lXHJcbiAgICAgIDogQWN0aXZlUGFuZWwubGlnaHRDb250cm9sc1xyXG59XHJcblxyXG5jb25zdCBvbkFjdGl2ZVBhbmVsQ2xvc2UgPSAoKSA9PiB7XG4gIGlmIChhY3RpdmVQYW5lbC52YWx1ZSA9PT0gQWN0aXZlUGFuZWwuc2VjdGlvbkJveCkge1xyXG4gICAgY2xvc2VTZWN0aW9uQm94KClcclxuICB9XHJcbiAgaWYgKGFjdGl2ZVBhbmVsLnZhbHVlID09PSBBY3RpdmVQYW5lbC5tZWFzdXJlbWVudHMpIHtcclxuICAgIGVuYWJsZU1lYXN1cmVtZW50cyhmYWxzZSlcclxuICB9XHJcbiAgYWN0aXZlUGFuZWwudmFsdWUgPSBBY3RpdmVQYW5lbC5ub25lXHJcbn1cblxuY29uc3QgdG9nZ2xlV2luZG93U2VsZWN0aW9uID0gKCkgPT4ge1xuICBpZiAoYWN0aXZlUGFuZWwudmFsdWUgPT09IEFjdGl2ZVBhbmVsLnNlY3Rpb25Cb3gpIHtcbiAgICBjbG9zZVNlY3Rpb25Cb3goKVxuICB9XG4gIGlmIChhY3RpdmVQYW5lbC52YWx1ZSA9PT0gQWN0aXZlUGFuZWwubWVhc3VyZW1lbnRzKSB7XG4gICAgZW5hYmxlTWVhc3VyZW1lbnRzKGZhbHNlKVxuICB9XG5cbiAgYWN0aXZlUGFuZWwudmFsdWUgPSBBY3RpdmVQYW5lbC5ub25lXG4gIHdpbmRvd1NlbGVjdGlvbi5lbmFibGVkLnZhbHVlID0gIXdpbmRvd1NlbGVjdGlvbi5lbmFibGVkLnZhbHVlXG5cbiAgaWYgKHdpbmRvd1NlbGVjdGlvbi5lbmFibGVkLnZhbHVlICYmIGlzTW9iaWxlLnZhbHVlKSB7XG4gICAgZW1pdCgnZm9yY2VDbG9zZVBhbmVscycpXG4gIH1cbn1cblxyXG5jb25zdCBvblJlc2V0ID0gKCkgPT4ge1xyXG4gIGlmIChhY3RpdmVQYW5lbC52YWx1ZSA9PT0gQWN0aXZlUGFuZWwuZXhwbG9kZSkge1xyXG4gICAgcmVzZXRFeHBsb2RlKClcclxuICB9XHJcbiAgaWYgKGFjdGl2ZVBhbmVsLnZhbHVlID09PSBBY3RpdmVQYW5lbC5zZWN0aW9uQm94KSB7XHJcbiAgICByZXNldFNlY3Rpb25Cb3hDb21wbGV0ZWx5KClcclxuICAgIGFjdGl2ZVBhbmVsLnZhbHVlID0gQWN0aXZlUGFuZWwubm9uZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgZm9yY2VDbG9zZVBhbmVscyA9ICgpID0+IHtcbiAgYWN0aXZlUGFuZWwudmFsdWUgPSBBY3RpdmVQYW5lbC5ub25lXG59XG5cclxuY29uc3QgaGFuZGxlVmlld01vZGVDaGFuZ2UgPSAobW9kZTogVmlld01vZGUpID0+IHtcclxuICBzZXRWaWV3TW9kZShtb2RlKVxyXG59XHJcblxyXG5yZWdpc3RlclNob3J0Y3V0cyh7XHJcbiAgVG9nZ2xlTWVhc3VyZW1lbnRzOiAoKSA9PiB0b2dnbGVNZWFzdXJlbWVudHMoKSxcclxuICBUb2dnbGVFeHBsb2RlOiAoKSA9PiB0b2dnbGVFeHBsb2RlKCksXHJcbiAgVG9nZ2xlU2VjdGlvbkJveDogKCkgPT4gdG9nZ2xlU2VjdGlvbkJveFBhbmVsKCksXHJcbiAgVG9nZ2xlVmlld01vZGVzOiAoKSA9PiB0b2dnbGVWaWV3TW9kZXMoKSxcclxuICBUb2dnbGVMaWdodENvbnRyb2xzOiAoKSA9PiB0b2dnbGVMaWdodENvbnRyb2xzKCksXHJcbiAgU2V0Vmlld01vZGVEZWZhdWx0OiAoKSA9PiBoYW5kbGVWaWV3TW9kZUNoYW5nZShWaWV3TW9kZS5ERUZBVUxUKSxcclxuICBTZXRWaWV3TW9kZVNvbGlkOiAoKSA9PiBoYW5kbGVWaWV3TW9kZUNoYW5nZShWaWV3TW9kZS5TT0xJRCksXHJcbiAgU2V0Vmlld01vZGVQZW46ICgpID0+IGhhbmRsZVZpZXdNb2RlQ2hhbmdlKFZpZXdNb2RlLlBFTiksXHJcbiAgU2V0Vmlld01vZGVBcmN0aWM6ICgpID0+IGhhbmRsZVZpZXdNb2RlQ2hhbmdlKFZpZXdNb2RlLkFSQ1RJQyksXHJcbiAgU2V0Vmlld01vZGVTaGFkZWQ6ICgpID0+IGhhbmRsZVZpZXdNb2RlQ2hhbmdlKFZpZXdNb2RlLlNIQURFRClcclxufSlcclxuXHJcbm9uS2V5U3Ryb2tlKCdFc2NhcGUnLCAoKSA9PiB7XG4gIGNvbnN0IGhhc0FjdGl2ZU1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cy52YWx1ZS5sZW5ndGggPiAwXHJcbiAgaWYgKGhhc0FjdGl2ZU1lYXN1cmVtZW50cykgcmV0dXJuXHJcblxyXG4gIC8vIE9ubHkgY2xvc2UgcGFuZWxzIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIG1lYXN1cmVtZW50XHJcbiAgaWYgKGFjdGl2ZVBhbmVsLnZhbHVlID09PSBBY3RpdmVQYW5lbC5tZWFzdXJlbWVudHMpIHtcclxuICAgIHRvZ2dsZU1lYXN1cmVtZW50cygpXHJcbiAgfSBlbHNlIGlmIChhY3RpdmVQYW5lbC52YWx1ZSA9PT0gQWN0aXZlUGFuZWwuc2VjdGlvbkJveCkge1xuICAgIGNsb3NlU2VjdGlvbkJveCgpXG4gIH1cbiAgd2luZG93U2VsZWN0aW9uLmVuYWJsZWQudmFsdWUgPSBmYWxzZVxuICBhY3RpdmVQYW5lbC52YWx1ZSA9IEFjdGl2ZVBhbmVsLm5vbmVcbn0pXG5cclxudXNlT25WaWV3ZXJMb2FkQ29tcGxldGUoXHJcbiAgKCkgPT4ge1xyXG4gICAgdmlld2VyTG9hZGVkLnZhbHVlID0gdHJ1ZVxyXG4gIH0sXHJcbiAgeyBpbml0aWFsT25seTogdHJ1ZSwgd2FpdEZvckxvYWRpbmdPdmVyOiB0cnVlIH1cclxuKVxyXG5cclxud2F0Y2goYWN0aXZlUGFuZWwsIChuZXdWYWwpID0+IHtcclxuICAvLyBVc2luZyAnY29udHJvbHMnIGhlcmUgdG8gc3RpY2sgdG8gdGhlIG9sZCBuYW1pbmcgY29udmVudGlvblxyXG4gIG1peHBhbmVsLnRyYWNrKCdWaWV3ZXIgQWN0aW9uJywge1xyXG4gICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICBuYW1lOiAnY29udHJvbHMtdG9nZ2xlJyxcclxuICAgIGFjdGlvbjogbmV3VmFsXHJcbiAgfSlcclxufSlcclxuXHJcbndhdGNoKGlzU2VjdGlvbkJveEVuYWJsZWQsICh2YWwpID0+IHtcclxuICBtaXhwYW5lbC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NlY3Rpb24tYm94JyxcclxuICAgIHN0YXR1czogdmFsXHJcbiAgfSlcclxufSlcclxuXHJcbndhdGNoKGlzU2VjdGlvbkJveFZpc2libGUsICh2YWwpID0+IHtcclxuICBtaXhwYW5lbC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NlY3Rpb24tYm94LXZpc2liaWxpdHknLFxyXG4gICAgc3RhdHVzOiB2YWxcclxuICB9KVxyXG59KVxyXG5cclxuZGVmaW5lRXhwb3NlKHtcclxuICBmb3JjZUNsb3NlUGFuZWxzXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvQm90dG9tLnZ1ZSJ9 |