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

356 lines
31 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/saved-views/Panel.vue");import { FormButton as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { FormTextInput as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_2 } from "/_nuxt/components/viewer/button-group/Button.vue";
import { default as __nuxt_component_3 } from "/_nuxt/components/viewer/button-group/ButtonGroup.vue";
import { default as __nuxt_component_4 } from "/_nuxt/components/viewer/saved-views/panel/Groups.vue";
import { CommonPromoAlert as __nuxt_component_5 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_6 } from "/_nuxt/components/viewer/saved-views/panel/groups/CreateDialog.vue";
import { default as __nuxt_component_7 } from "/_nuxt/components/viewer/layout/SidePanel.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { createElementVNode as __createElementVNode,createVNode as __createVNode,createElementBlock as __createElementBlock,createBlock as __createBlock } 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 _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
function _createBlock(...args) { return _interopVNode(__createBlock(...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 { useMutationLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
import { Search, FolderPlus, Plus, X } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
import { useSynchronizedCookie } from "/_nuxt/lib/common/composables/reactiveCookie.ts";
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
import { WorkspaceSeatType } from "/_nuxt/lib/common/generated/gql/graphql.ts";
import { useCreateSavedView } from "/_nuxt/lib/viewer/composables/savedViews/management.ts";
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
import { ViewsType, viewsTypeLabels } from "/_nuxt/lib/viewer/helpers/savedViews.ts";
import { useDebouncedTextInput } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { useKeepAliveScrollState } from "/_nuxt/lib/common/composables/dom.ts";
import { ref, useTemplateRef, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ViewerSavedViewsPanel",
emits: ["close"],
setup(__props, { expose: __expose }) {
__expose();
graphql(`
fragment ViewerSavedViewsPanel_Project on Project {
id
permissions {
canCreateSavedView {
...FullPermissionCheckResult
}
}
workspace {
id
seatType
planSupportsSavedViews: hasAccessToFeature(featureName: savedViews)
}
}
`);
const {
resources: {
response: { project }
},
ui: {
savedViews: { openedGroupState }
}
} = useInjectedViewerState();
const createSavedView = useCreateSavedView();
const isLoading = useMutationLoading();
const { on, bind, value: search } = useDebouncedTextInput();
const selectedViewsType = ref(ViewsType.All);
const hideViewerSeatDisclaimer = useSynchronizedCookie(
"hideViewerSeatSavedViewsDisclaimer",
{
default: () => false
}
);
const searchMode = ref(false);
const showCreateGroupDialog = ref(false);
const { getTooltipProps } = useSmartTooltipDelay();
useKeepAliveScrollState(useTemplateRef("groupsScrollArea"));
const canCreateViewOrGroup = computed(
() => project.value?.permissions.canCreateSavedView
);
const isViewerSeat = computed(
() => project.value?.workspace?.seatType === WorkspaceSeatType.Viewer
);
const onAddView = async () => {
if (isLoading.value) return;
const view = await createSavedView({});
if (view) {
openedGroupState.value.set(view.group.id, true);
}
};
const onAddGroup = async (group) => {
openedGroupState.value.set(group.id, true);
};
const setSearchMode = (val) => {
if (val) {
searchMode.value = true;
} else {
searchMode.value = false;
}
search.value = "";
};
const __returned__ = { project, openedGroupState, createSavedView, isLoading, on, bind, search, selectedViewsType, hideViewerSeatDisclaimer, searchMode, showCreateGroupDialog, getTooltipProps, canCreateViewOrGroup, isViewerSeat, onAddView, onAddGroup, setSearchMode, get Search() {
return Search;
}, get FolderPlus() {
return FolderPlus;
}, get Plus() {
return Plus;
}, get X() {
return X;
}, get ViewsType() {
return ViewsType;
}, get viewsTypeLabels() {
return viewsTypeLabels;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, withDirectives as _withDirectives, openBlock as _openBlock, toHandlers as _toHandlers, mergeProps as _mergeProps, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, withCtx as _withCtx, createCommentVNode as _createCommentVNode, createSlots as _createSlots } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "flex items-center gap-0.5",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:9:7"
};
const _hoisted_2 = {
class: "flex items-center",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:18:9"
};
const _hoisted_3 = {
class: "flex items-center",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:30:9"
};
const _hoisted_4 = {
class: "self-center w-full pr-1 flex gap-2 items-center",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:45:7"
};
const _hoisted_5 = {
class: "px-2 pt-2",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:66:5"
};
const _hoisted_6 = {
class: "text-body-2xs text-foreground px-2 py-1",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:75:11"
};
const _hoisted_7 = {
ref: "groupsScrollArea",
class: "text-body-sm flex-1 min-h-0 overflow-y-auto simple-scrollbar",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:81:5"
};
const _hoisted_8 = {
key: 0,
class: "absolute bottom-0 left-0 right-0 p-2",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:90:5"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_FormButton = __nuxt_component_0;
const _component_FormTextInput = __nuxt_component_1;
const _component_ViewerButtonGroupButton = __nuxt_component_2;
const _component_ViewerButtonGroup = __nuxt_component_3;
const _component_ViewerSavedViewsPanelGroups = __nuxt_component_4;
const _component_CommonPromoAlert = __nuxt_component_5;
const _component_ViewerSavedViewsPanelGroupsCreateDialog = __nuxt_component_6;
const _component_ViewerLayoutSidePanel = __nuxt_component_7;
const _directive_tippy = _resolveDirective("tippy");
return _openBlock(), _createBlock(
_component_ViewerLayoutSidePanel,
{
"disable-scrollbar": "",
class: "relative",
onClose: _cache[5] || (_cache[5] = ($event) => _ctx.$emit("close")),
"data-v-inspector": "components/viewer/saved-views/Panel.vue:2:3"
},
_createSlots({
title: _withCtx(() => [
_cache[6] || (_cache[6] = _createElementVNode(
"div",
{
class: "flex justify-between items-center",
"data-v-inspector": "components/viewer/saved-views/Panel.vue:4:7"
},
[
_createElementVNode("div", { "data-v-inspector": "components/viewer/saved-views/Panel.vue:5:9" }, "Views")
],
-1
/* CACHED */
))
]),
actions: _withCtx(() => [
_createElementVNode("div", _hoisted_1, [
_withDirectives(_createVNode(_component_FormButton, {
size: "sm",
color: "subtle",
"icon-left": $setup.Search,
"hide-text": "",
onClick: _cache[0] || (_cache[0] = ($event) => $setup.setSearchMode(true)),
"data-v-inspector": "components/viewer/saved-views/Panel.vue:10:9"
}, null, 8, ["icon-left"]), [
[_directive_tippy, $setup.getTooltipProps("Search views")]
]),
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_2, [
_withDirectives(_createVNode(_component_FormButton, {
size: "sm",
color: "subtle",
"icon-left": $setup.FolderPlus,
"hide-text": "",
name: "addGroup",
disabled: !$setup.canCreateViewOrGroup?.authorized || $setup.isLoading,
onClick: _cache[1] || (_cache[1] = () => $setup.showCreateGroupDialog = true),
"data-v-inspector": "components/viewer/saved-views/Panel.vue:19:11"
}, null, 8, ["icon-left", "disabled"]), [
[_directive_tippy, $setup.getTooltipProps("Create group")]
])
])), [
[_directive_tippy, $setup.canCreateViewOrGroup?.errorMessage]
]),
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_3, [
_withDirectives(_createVNode(_component_FormButton, {
size: "sm",
color: "subtle",
"icon-left": $setup.Plus,
"hide-text": "",
name: "addView",
disabled: !$setup.canCreateViewOrGroup?.authorized || $setup.isLoading,
onClick: $setup.onAddView,
"data-v-inspector": "components/viewer/saved-views/Panel.vue:31:11"
}, null, 8, ["icon-left", "disabled"]), [
[_directive_tippy, $setup.getTooltipProps("Create view")]
])
])), [
[_directive_tippy, $setup.canCreateViewOrGroup?.errorMessage]
])
])
]),
default: _withCtx(() => [
_createElementVNode("div", _hoisted_5, [
_createVNode(_component_ViewerButtonGroup, { "data-v-inspector": "components/viewer/saved-views/Panel.vue:67:7" }, {
default: _withCtx(() => [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList(Object.values($setup.ViewsType), (viewsType) => {
return _openBlock(), _createBlock(_component_ViewerButtonGroupButton, {
key: viewsType,
"is-active": $setup.selectedViewsType === viewsType,
class: "grow",
onClick: () => $setup.selectedViewsType = viewsType,
"data-v-inspector": "components/viewer/saved-views/Panel.vue:68:9"
}, {
default: _withCtx(() => [
_createElementVNode(
"span",
_hoisted_6,
_toDisplayString($setup.viewsTypeLabels[viewsType]),
1
/* TEXT */
)
]),
_: 2
/* DYNAMIC */
}, 1032, ["is-active", "onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
]),
_: 1
/* STABLE */
})
]),
_createElementVNode(
"div",
_hoisted_7,
[
_createVNode(_component_ViewerSavedViewsPanelGroups, {
"views-type": $setup.selectedViewsType,
search: $setup.searchMode ? $setup.search || void 0 : void 0,
"data-v-inspector": "components/viewer/saved-views/Panel.vue:85:7"
}, null, 8, ["views-type", "search"])
],
512
/* NEED_PATCH */
),
$setup.isViewerSeat && !$setup.hideViewerSeatDisclaimer ? (_openBlock(), _createElementBlock("div", _hoisted_8, [
_createVNode(_component_CommonPromoAlert, {
title: "Save your views",
text: "With an Editor seat, unlock the option to save views. A workspace admin can update your seat type.",
"show-closer": "",
onClose: _cache[3] || (_cache[3] = ($event) => $setup.hideViewerSeatDisclaimer = true),
"data-v-inspector": "components/viewer/saved-views/Panel.vue:94:7"
})
])) : _createCommentVNode("v-if", true),
_createVNode(_component_ViewerSavedViewsPanelGroupsCreateDialog, {
open: $setup.showCreateGroupDialog,
"onUpdate:open": _cache[4] || (_cache[4] = ($event) => $setup.showCreateGroupDialog = $event),
onSuccess: $setup.onAddGroup,
"data-v-inspector": "components/viewer/saved-views/Panel.vue:101:5"
}, null, 8, ["open"])
]),
_: 2
/* DYNAMIC */
}, [
$setup.searchMode ? {
name: "fullTitle",
fn: _withCtx(() => [
_createElementVNode("div", _hoisted_4, [
_createVNode(
_component_FormTextInput,
_mergeProps($setup.bind, {
name: "search",
placeholder: "Search views...",
color: "foundation",
"auto-focus": "",
size: "sm",
"wrapper-classes": "flex-1 -ml-1"
}, _toHandlers($setup.on), { "data-v-inspector": "components/viewer/saved-views/Panel.vue:46:9" }),
null,
16
/* FULL_PROPS */
),
_createVNode(_component_FormButton, {
size: "sm",
color: "subtle",
"icon-left": $setup.X,
"hide-text": "",
name: "disableSearch",
onClick: _cache[2] || (_cache[2] = ($event) => $setup.setSearchMode(false)),
"data-v-inspector": "components/viewer/saved-views/Panel.vue:56:9"
}, null, 8, ["icon-left"])
])
]),
key: "0"
} : void 0
]),
1024
/* DYNAMIC_SLOTS */
);
}
_sfc_main.__hmrId = "b807abb3";
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/saved-views/Panel.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlBhbmVsLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgPFZpZXdlckxheW91dFNpZGVQYW5lbCBkaXNhYmxlLXNjcm9sbGJhciBjbGFzcz1cInJlbGF0aXZlXCIgQGNsb3NlPVwiJGVtaXQoJ2Nsb3NlJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjI6M1wiPlxyXG4gICAgPHRlbXBsYXRlICN0aXRsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9QYW5lbC52dWU6NDo3XCI+XHJcbiAgICAgICAgPGRpdiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjU6OVwiPlZpZXdzPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICAgIDx0ZW1wbGF0ZSAjYWN0aW9ucz5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0wLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjk6N1wiPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKCdTZWFyY2ggdmlld3MnKVwiXHJcbiAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgOmljb24tbGVmdD1cIlNlYXJjaFwiXHJcbiAgICAgICAgICBoaWRlLXRleHRcclxuICAgICAgICAgIEBjbGljaz1cInNldFNlYXJjaE1vZGUodHJ1ZSlcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjEwOjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiB2LXRpcHB5PVwiY2FuQ3JlYXRlVmlld09yR3JvdXA/LmVycm9yTWVzc2FnZVwiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjE4OjlcIj5cclxuICAgICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICAgIHYtdGlwcHk9XCJnZXRUb29sdGlwUHJvcHMoJ0NyZWF0ZSBncm91cCcpXCJcclxuICAgICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiRm9sZGVyUGx1c1wiXHJcbiAgICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgICBuYW1lPVwiYWRkR3JvdXBcIlxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhY2FuQ3JlYXRlVmlld09yR3JvdXA/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwiKCkgPT4gKHNob3dDcmVhdGVHcm91cERpYWxvZyA9IHRydWUpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL1BhbmVsLnZ1ZToxOToxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgdi10aXBweT1cImNhbkNyZWF0ZVZpZXdPckdyb3VwPy5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL1BhbmVsLnZ1ZTozMDo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKCdDcmVhdGUgdmlldycpXCJcclxuICAgICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiUGx1c1wiXHJcbiAgICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgICBuYW1lPVwiYWRkVmlld1wiXHJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cIiFjYW5DcmVhdGVWaWV3T3JHcm91cD8uYXV0aG9yaXplZCB8fCBpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkFkZFZpZXdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjMxOjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICAgIDx0ZW1wbGF0ZSB2LWlmPVwic2VhcmNoTW9kZVwiICNmdWxsVGl0bGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxmLWNlbnRlciB3LWZ1bGwgcHItMSBmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9QYW5lbC52dWU6NDU6N1wiPlxyXG4gICAgICAgIDxGb3JtVGV4dElucHV0XHJcbiAgICAgICAgICB2LWJpbmQ9XCJiaW5kXCJcclxuICAgICAgICAgIG5hbWU9XCJzZWFyY2hcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdmlld3MuLi5cIlxyXG4gICAgICAgICAgY29sb3I9XCJmb3VuZGF0aW9uXCJcclxuICAgICAgICAgIGF1dG8tZm9jdXNcclxuICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICB3cmFwcGVyLWNsYXNzZXM9XCJmbGV4LTEgLW1sLTFcIlxyXG4gICAgICAgICAgdi1vbj1cIm9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL1BhbmVsLnZ1ZTo0Njo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgOmljb24tbGVmdD1cIlhcIlxyXG4gICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICBuYW1lPVwiZGlzYWJsZVNlYXJjaFwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJzZXRTZWFyY2hNb2RlKGZhbHNlKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9QYW5lbC52dWU6NTY6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9QYW5lbC52dWU6NjY6NVwiPlxyXG4gICAgICA8Vmlld2VyQnV0dG9uR3JvdXAgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL1BhbmVsLnZ1ZTo2Nzo3XCI+XHJcbiAgICAgICAgPFZpZXdlckJ1dHRvbkdyb3VwQnV0dG9uXHJcbiAgICAgICAgICB2LWZvcj1cInZpZXdzVHlwZSBpbiBPYmplY3QudmFsdWVzKFZpZXdzVHlwZSlcIlxyXG4gICAgICAgICAgOmtleT1cInZpZXdzVHlwZVwiXHJcbiAgICAgICAgICA6aXMtYWN0aXZlPVwic2VsZWN0ZWRWaWV3c1R5cGUgPT09IHZpZXdzVHlwZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImdyb3dcIlxyXG4gICAgICAgICAgQGNsaWNrPVwiKCkgPT4gKHNlbGVjdGVkVmlld3NUeXBlID0gdmlld3NUeXBlKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9QYW5lbC52dWU6Njg6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZCBweC0yIHB5LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjc1OjExXCI+XHJcbiAgICAgICAgICAgIHt7IHZpZXdzVHlwZUxhYmVsc1t2aWV3c1R5cGVdIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9WaWV3ZXJCdXR0b25Hcm91cEJ1dHRvbj5cclxuICAgICAgPC9WaWV3ZXJCdXR0b25Hcm91cD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9XCJncm91cHNTY3JvbGxBcmVhXCJcclxuICAgICAgY2xhc3M9XCJ0ZXh0LWJvZHktc20gZmxleC0xIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHNpbXBsZS1zY3JvbGxiYXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjgxOjVcIlxyXG4gICAgPlxyXG4gICAgICA8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsR3JvdXBzXHJcbiAgICAgICAgOnZpZXdzLXR5cGU9XCJzZWxlY3RlZFZpZXdzVHlwZVwiXHJcbiAgICAgICAgOnNlYXJjaD1cInNlYXJjaE1vZGUgPyBzZWFyY2ggfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL1BhbmVsLnZ1ZTo4NTo3XCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICB2LWlmPVwiaXNWaWV3ZXJTZWF0ICYmICFoaWRlVmlld2VyU2VhdERpc2NsYWltZXJcIlxyXG4gICAgICBjbGFzcz1cImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIHAtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9QYW5lbC52dWU6OTA6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxDb21tb25Qcm9tb0FsZXJ0XHJcbiAgICAgICAgdGl0bGU9XCJTYXZlIHlvdXIgdmlld3NcIlxyXG4gICAgICAgIHRleHQ9XCJXaXRoIGFuIEVkaXRvciBzZWF0LCB1bmxvY2sgdGhlIG9wdGlvbiB0byBzYXZlIHZpZXdzLiBBIHdvcmtzcGFjZSBhZG1pbiBjYW4gdXBkYXRlIHlvdXIgc2VhdCB0eXBlLlwiXHJcbiAgICAgICAgc2hvdy1jbG9zZXJcclxuICAgICAgICBAY2xvc2U9XCJoaWRlVmlld2VyU2VhdERpc2NsYWltZXIgPSB0cnVlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL1BhbmVsLnZ1ZTo5NDo3XCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPFZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc0NyZWF0ZURpYWxvZ1xyXG4gICAgICB2LW1vZGVsOm9wZW49XCJzaG93Q3JlYXRlR3JvdXBEaWFsb2dcIlxyXG4gICAgICBAc3VjY2Vzcz1cIm9uQWRkR3JvdXBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlOjEwMTo1XCJcclxuICAgIC8+XHJcbiAgPC9WaWV3ZXJMYXlvdXRTaWRlUGFuZWw+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHVzZU11dGF0aW9uTG9hZGluZyB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IFNlYXJjaCwgRm9sZGVyUGx1cywgUGx1cywgWCB9IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcclxuaW1wb3J0IHsgdXNlU3luY2hyb25pemVkQ29va2llIH0gZnJvbSAnfi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3JlYWN0aXZlQ29va2llJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwnXHJcbmltcG9ydCB7IFdvcmtzcGFjZVNlYXRUeXBlIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgdXNlQ3JlYXRlU2F2ZWRWaWV3IH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NhdmVkVmlld3MvbWFuYWdlbWVudCdcclxuaW1wb3J0IHsgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cCdcclxuaW1wb3J0IHsgVmlld3NUeXBlLCB2aWV3c1R5cGVMYWJlbHMgfSBmcm9tICd+L2xpYi92aWV3ZXIvaGVscGVycy9zYXZlZFZpZXdzJ1xyXG5pbXBvcnQgeyB1c2VEZWJvdW5jZWRUZXh0SW5wdXQgfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyB1c2VLZWVwQWxpdmVTY3JvbGxTdGF0ZSB9IGZyb20gJ34vbGliL2NvbW1vbi9jb21wb3NhYmxlcy9kb20nXHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxfUHJvamVjdCBvbiBQcm9qZWN0IHtcclxuICAgIGlkXHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhbkNyZWF0ZVNhdmVkVmlldyB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3b3Jrc3BhY2Uge1xyXG4gICAgICBpZFxyXG4gICAgICBzZWF0VHlwZVxyXG4gICAgICBwbGFuU3VwcG9ydHNTYXZlZFZpZXdzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHNhdmVkVmlld3MpXHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuZGVmaW5lRW1pdHM8e1xyXG4gIGNsb3NlOiBbXVxyXG59PigpXHJcblxyXG5jb25zdCB7XHJcbiAgcmVzb3VyY2VzOiB7XHJcbiAgICByZXNwb25zZTogeyBwcm9qZWN0IH1cclxuICB9LFxyXG4gIHVpOiB7XHJcbiAgICBzYXZlZFZpZXdzOiB7IG9wZW5lZEdyb3VwU3RhdGUgfVxyXG4gIH1cclxufSA9IHVzZUluamVjdGVkVmlld2VyU3RhdGUoKVxyXG5jb25zdCBjcmVhdGVTYXZlZFZpZXcgPSB1c2VDcmVhdGVTYXZlZFZpZXcoKVxyXG5jb25zdCBpc0xvYWRpbmcgPSB1c2VNdXRhdGlvbkxvYWRpbmcoKVxyXG5jb25zdCB7IG9uLCBiaW5kLCB2YWx1ZTogc2VhcmNoIH0gPSB1c2VEZWJvdW5jZWRUZXh0SW5wdXQoKVxyXG5cclxuY29uc3Qgc2VsZWN0ZWRWaWV3c1R5cGUgPSByZWY8Vmlld3NUeXBlPihWaWV3c1R5cGUuQWxsKVxyXG5jb25zdCBoaWRlVmlld2VyU2VhdERpc2NsYWltZXIgPSB1c2VTeW5jaHJvbml6ZWRDb29raWU8Ym9vbGVhbj4oXHJcbiAgJ2hpZGVWaWV3ZXJTZWF0U2F2ZWRWaWV3c0Rpc2NsYWltZXInLFxyXG4gIHtcclxuICAgIGRlZmF1bHQ6ICgpID0+IGZhbHNlXHJcbiAgfVxyXG4pXHJcbmNvbnN0IHNlYXJjaE1vZGUgPSByZWYoZmFsc2UpXHJcbmNvbnN0IHNob3dDcmVhdGVHcm91cERpYWxvZyA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IHsgZ2V0VG9vbHRpcFByb3BzIH0gPSB1c2VTbWFydFRvb2x0aXBEZWxheSgpXHJcbnVzZUtlZXBBbGl2ZVNjcm9sbFN0YXRlKHVzZVRlbXBsYXRlUmVmKCdncm91cHNTY3JvbGxBcmVhJykpXHJcblxyXG5jb25zdCBjYW5DcmVhdGVWaWV3T3JHcm91cCA9IGNvbXB1dGVkKFxyXG4gICgpID0+IHByb2plY3QudmFsdWU/LnBlcm1pc3Npb25zLmNhbkNyZWF0ZVNhdmVkVmlld1xyXG4pXHJcbmNvbnN0IGlzVmlld2VyU2VhdCA9IGNvbXB1dGVkKFxyXG4gICgpID0+IHByb2plY3QudmFsdWU/LndvcmtzcGFjZT8uc2VhdFR5cGUgPT09IFdvcmtzcGFjZVNlYXRUeXBlLlZpZXdlclxyXG4pXHJcbmNvbnN0IG9uQWRkVmlldyA9IGFzeW5jICgpID0+IHtcclxuICBpZiAoaXNMb2FkaW5nLnZhbHVlKSByZXR1cm5cclxuICBjb25zdCB2aWV3ID0gYXdhaXQgY3JlYXRlU2F2ZWRWaWV3KHt9KVxyXG4gIGlmICh2aWV3KSB7XHJcbiAgICAvLyBBdXRvLW9wZW4gdGhlIGdyb3VwIHRoYXQgdGhlIHZpZXcgY3JlYXRlZCB0b1xyXG4gICAgb3BlbmVkR3JvdXBTdGF0ZS52YWx1ZS5zZXQodmlldy5ncm91cC5pZCwgdHJ1ZSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IG9uQWRkR3JvdXAgPSBhc3luYyAoZ3JvdXA6IHsgaWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgb3BlbmVkR3JvdXBTdGF0ZS52YWx1ZS5zZXQoZ3JvdXAuaWQsIHRydWUpXHJcbn1cclxuXHJcbmNvbnN0IHNldFNlYXJjaE1vZGUgPSAodmFsOiBib29sZWFuKSA9PiB7XHJcbiAgaWYgKHZhbCkge1xyXG4gICAgc2VhcmNoTW9kZS52YWx1ZSA9IHRydWVcclxuICB9IGVsc2Uge1xyXG4gICAgc2VhcmNoTW9kZS52YWx1ZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzZWFyY2gudmFsdWUgPSAnJ1xyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvUGFuZWwudnVlIn0=