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

326 lines
32 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/saved-views/panel/Groups.vue");import { CommonLoadingIcon as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_1 } from "/_nuxt/components/viewer/saved-views/panel/views/EmptyState.vue";
import { default as __nuxt_component_2 } from "/_nuxt/components/viewer/saved-views/panel/views/Group.vue";
import { InfiniteLoading as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_4 } from "/_nuxt/components/viewer/saved-views/panel/view/EditDialog.vue";
import { default as __nuxt_component_5 } from "/_nuxt/components/viewer/saved-views/panel/view/MoveDialog.vue";
import { default as __nuxt_component_6 } from "/_nuxt/components/viewer/saved-views/panel/view/DeleteDialog.vue";
import { default as __nuxt_component_7 } from "/_nuxt/components/viewer/saved-views/panel/views/group/DeleteDialog.vue";
import { default as __nuxt_component_8 } from "/_nuxt/components/project/model-page/dialog/embed/Embed.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { 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 _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 { omit } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
import { usePaginatedQuery } from "/_nuxt/lib/common/composables/graphql.ts";
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
import { viewsTypeToFilters } from "/_nuxt/lib/viewer/helpers/savedViews.ts";
import { useEventBus } from "/_nuxt/composables/globals.ts";
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { ViewerEventBusKeys } from "/_nuxt/utils/globals.ts";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ViewerSavedViewsPanelGroups",
props: {
viewsType: { type: null, required: true },
search: { type: String, required: false }
},
setup(__props, { expose: __expose }) {
__expose();
graphql(`
fragment ViewerSavedViewsPanelGroups_Project on Project {
id
savedViewGroups(input: $savedViewGroupsInput) {
totalCount
cursor
items {
id
...ViewerSavedViewsPanelViewsGroup_SavedViewGroup
}
}
...ViewerSavedViewsPanelViewsGroup_Project
}
`);
const paginableGroupsQuery = graphql(`
query ViewerSavedViewsPanelGroups_SavedViewGroups(
$projectId: String!
$savedViewGroupsInput: SavedViewGroupsInput!
) {
project(id: $projectId) {
id
...ViewerSavedViewsPanelGroups_Project
}
}
`);
const props = __props;
const {
projectId,
resources: {
request: { resourceIdString },
response: { project: mainProject }
},
ui: {
savedViews: { openedGroupState }
}
} = useInjectedViewerState();
const eventBus = useEventBus();
const viewBeingEdited = ref();
const viewBeingMoved = ref();
const viewBeingDeleted = ref();
const groupBeingDeleted = ref();
const groupBeingRenamed = ref();
const viewBeingEmbedded = ref();
const {
identifier,
onInfiniteLoad,
query: { result },
isVeryFirstLoading
} = usePaginatedQuery({
query: paginableGroupsQuery,
baseVariables: computed(() => ({
projectId: projectId.value,
savedViewGroupsInput: {
resourceIdString: resourceIdString.value,
cursor: null,
search: props.search?.trim() || null,
...viewsTypeToFilters(props.viewsType)
}
})),
resolveKey: (vars) => ({
projectId: vars.projectId,
savedViewGroupsInput: omit(vars.savedViewGroupsInput, ["cursor"])
}),
resolveCurrentResult: (res) => res?.project.savedViewGroups,
resolveNextPageVariables: (baseVars, cursor) => ({
...baseVars,
savedViewGroupsInput: {
...baseVars.savedViewGroupsInput,
cursor
}
}),
resolveCursorFromVariables: (vars) => vars.savedViewGroupsInput.cursor
});
const hasGroups = computed(
() => (result.value?.project.savedViewGroups.items.length || 0) > 0
);
const isSearch = computed(() => (props.search || "").trim().length > 0);
const emptyStateType = computed(() => isSearch.value ? "search" : "base");
const project = computed(() => result.value?.project);
const groups = computed(() => project.value?.savedViewGroups.items || []);
const showEditDialog = computed({
get: () => !!viewBeingEdited.value,
set: (value) => {
if (!value) {
viewBeingEdited.value = void 0;
}
}
});
const showMoveDialog = computed({
get: () => !!viewBeingMoved.value,
set: (value) => {
if (!value) {
viewBeingMoved.value = void 0;
}
}
});
const showDeleteDialog = computed({
get: () => !!viewBeingDeleted.value,
set: (value) => {
if (!value) {
viewBeingDeleted.value = void 0;
}
}
});
const showGroupDeleteDialog = computed({
get: () => !!groupBeingDeleted.value,
set: (value) => {
if (!value) {
groupBeingDeleted.value = void 0;
}
}
});
const showViewEmbedDialog = computed({
get: () => !!viewBeingEmbedded.value,
set: (value) => {
if (!value) {
viewBeingEmbedded.value = void 0;
}
}
});
const isGroupInRenameMode = (group) => {
return group.id === groupBeingRenamed.value?.id;
};
const isGroupSelected = (group) => {
return openedGroupState.value.get(group.id);
};
const onIsSelectedChange = (value, group) => {
if (value) {
openedGroupState.value.set(group.id, true);
} else {
openedGroupState.value.delete(group.id);
}
};
watch(
groups,
(newGroups) => {
if (newGroups.length) {
const selectableGroupId = newGroups[0].id;
if (selectableGroupId) {
openedGroupState.value.set(selectableGroupId, true);
}
}
},
{ immediate: true }
);
eventBus.on(ViewerEventBusKeys.MarkSavedViewForEdit, ({ type, view }) => {
if (type === "edit") {
viewBeingEdited.value = view;
} else if (type === "move") {
viewBeingMoved.value = view;
} else if (type === "delete") {
viewBeingDeleted.value = view;
}
});
eventBus.on(ViewerEventBusKeys.MarkSavedViewForEmbed, ({ view }) => {
viewBeingEmbedded.value = view;
});
const onMoveSuccess = (groupId) => {
openedGroupState.value.set(groupId, true);
};
const __returned__ = { paginableGroupsQuery, props, projectId, resourceIdString, mainProject, openedGroupState, eventBus, viewBeingEdited, viewBeingMoved, viewBeingDeleted, groupBeingDeleted, groupBeingRenamed, viewBeingEmbedded, identifier, onInfiniteLoad, result, isVeryFirstLoading, hasGroups, isSearch, emptyStateType, project, groups, showEditDialog, showMoveDialog, showDeleteDialog, showGroupDeleteDialog, showViewEmbedDialog, isGroupInRenameMode, isGroupSelected, onIsSelectedChange, onMoveSuccess };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
key: 0,
class: "flex justify-center",
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:2:3"
};
const _hoisted_2 = {
key: 1,
class: "",
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:5:3"
};
const _hoisted_3 = {
key: 1,
class: "p-2 pt-2",
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:10:5"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_CommonLoadingIcon = __nuxt_component_0;
const _component_ViewerSavedViewsPanelViewsEmptyState = __nuxt_component_1;
const _component_ViewerSavedViewsPanelViewsGroup = __nuxt_component_2;
const _component_InfiniteLoading = __nuxt_component_3;
const _component_ViewerSavedViewsPanelViewEditDialog = __nuxt_component_4;
const _component_ViewerSavedViewsPanelViewMoveDialog = __nuxt_component_5;
const _component_ViewerSavedViewsPanelViewDeleteDialog = __nuxt_component_6;
const _component_ViewerSavedViewsPanelViewsGroupDeleteDialog = __nuxt_component_7;
const _component_ProjectModelPageDialogEmbed = __nuxt_component_8;
return $setup.isVeryFirstLoading ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
_createVNode(_component_CommonLoadingIcon, {
class: "m-16",
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:3:5"
})
])) : (_openBlock(), _createElementBlock("div", _hoisted_2, [
!$setup.hasGroups || !$setup.project ? (_openBlock(), _createBlock(_component_ViewerSavedViewsPanelViewsEmptyState, {
key: 0,
type: $setup.emptyStateType,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:6:5"
}, null, 8, ["type"])) : (_openBlock(), _createElementBlock("div", _hoisted_3, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.groups, (group) => {
return _openBlock(), _createBlock(_component_ViewerSavedViewsPanelViewsGroup, {
key: group.id,
"views-type": $props.viewsType,
group,
project: $setup.project,
search: $props.search,
open: $setup.isGroupSelected(group),
"rename-mode": $setup.isGroupInRenameMode(group),
"onUpdate:open": (value) => $setup.onIsSelectedChange(value, group),
"onUpdate:renameMode": (value) => $setup.groupBeingRenamed = value ? group : void 0,
onDeleteGroup: _cache[0] || (_cache[0] = ($event) => $setup.groupBeingDeleted = $event),
onRenameGroup: _cache[1] || (_cache[1] = ($event) => $setup.groupBeingRenamed = $event),
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:11:7"
}, null, 8, ["views-type", "group", "project", "search", "open", "rename-mode", "onUpdate:open", "onUpdate:renameMode"]);
}),
128
/* KEYED_FRAGMENT */
)),
$setup.groups.length ? (_openBlock(), _createBlock(_component_InfiniteLoading, {
key: 0,
settings: { identifier: $setup.identifier },
"hide-when-complete": "",
onInfinite: $setup.onInfiniteLoad,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:25:7"
}, null, 8, ["settings", "onInfinite"])) : _createCommentVNode("v-if", true)
])),
_createVNode(_component_ViewerSavedViewsPanelViewEditDialog, {
open: $setup.showEditDialog,
"onUpdate:open": _cache[2] || (_cache[2] = ($event) => $setup.showEditDialog = $event),
view: $setup.viewBeingEdited,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:32:5"
}, null, 8, ["open", "view"]),
_createVNode(_component_ViewerSavedViewsPanelViewMoveDialog, {
open: $setup.showMoveDialog,
"onUpdate:open": _cache[3] || (_cache[3] = ($event) => $setup.showMoveDialog = $event),
view: $setup.viewBeingMoved,
onSuccess: $setup.onMoveSuccess,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:36:5"
}, null, 8, ["open", "view"]),
_createVNode(_component_ViewerSavedViewsPanelViewDeleteDialog, {
open: $setup.showDeleteDialog,
"onUpdate:open": _cache[4] || (_cache[4] = ($event) => $setup.showDeleteDialog = $event),
view: $setup.viewBeingDeleted,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:41:5"
}, null, 8, ["open", "view"]),
_createVNode(_component_ViewerSavedViewsPanelViewsGroupDeleteDialog, {
open: $setup.showGroupDeleteDialog,
"onUpdate:open": _cache[5] || (_cache[5] = ($event) => $setup.showGroupDeleteDialog = $event),
group: $setup.groupBeingDeleted,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:45:5"
}, null, 8, ["open", "group"]),
$setup.mainProject ? (_openBlock(), _createBlock(_component_ProjectModelPageDialogEmbed, {
key: 2,
open: $setup.showViewEmbedDialog,
"onUpdate:open": _cache[6] || (_cache[6] = ($event) => $setup.showViewEmbedDialog = $event),
view: $setup.viewBeingEmbedded,
project: $setup.mainProject,
"data-v-inspector": "components/viewer/saved-views/panel/Groups.vue:49:5"
}, null, 8, ["open", "view", "project"])) : _createCommentVNode("v-if", true)
]));
}
_sfc_main.__hmrId = "05d4a7d6";
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/Groups.vue"]]);
//# sourceMappingURL=data:application/json;base64,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dXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IHYtaWY9XCJpc1ZlcnlGaXJzdExvYWRpbmdcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvR3JvdXBzLnZ1ZToyOjNcIj5cclxuICAgIDxDb21tb25Mb2FkaW5nSWNvbiBjbGFzcz1cIm0tMTZcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvR3JvdXBzLnZ1ZTozOjVcIiAvPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgdi1lbHNlIGNsYXNzPVwiXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL0dyb3Vwcy52dWU6NTozXCI+XHJcbiAgICA8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NFbXB0eVN0YXRlXHJcbiAgICAgIHYtaWY9XCIhaGFzR3JvdXBzIHx8ICFwcm9qZWN0XCJcclxuICAgICAgOnR5cGU9XCJlbXB0eVN0YXRlVHlwZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9Hcm91cHMudnVlOjY6NVwiXHJcbiAgICAvPlxyXG4gICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJwLTIgcHQtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9Hcm91cHMudnVlOjEwOjVcIj5cclxuICAgICAgPFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBcclxuICAgICAgICB2LWZvcj1cImdyb3VwIGluIGdyb3Vwc1wiXHJcbiAgICAgICAgOmtleT1cImdyb3VwLmlkXCJcclxuICAgICAgICA6dmlld3MtdHlwZT1cInZpZXdzVHlwZVwiXHJcbiAgICAgICAgOmdyb3VwPVwiZ3JvdXBcIlxyXG4gICAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXHJcbiAgICAgICAgOnNlYXJjaD1cInNlYXJjaFwiXHJcbiAgICAgICAgOm9wZW49XCJpc0dyb3VwU2VsZWN0ZWQoZ3JvdXApXCJcclxuICAgICAgICA6cmVuYW1lLW1vZGU9XCJpc0dyb3VwSW5SZW5hbWVNb2RlKGdyb3VwKVwiXHJcbiAgICAgICAgQHVwZGF0ZTpvcGVuPVwiKHZhbHVlKSA9PiBvbklzU2VsZWN0ZWRDaGFuZ2UodmFsdWUsIGdyb3VwKVwiXHJcbiAgICAgICAgQHVwZGF0ZTpyZW5hbWUtbW9kZT1cIih2YWx1ZSkgPT4gKGdyb3VwQmVpbmdSZW5hbWVkID0gdmFsdWUgPyBncm91cCA6IHVuZGVmaW5lZClcIlxyXG4gICAgICAgIEBkZWxldGUtZ3JvdXA9XCIoJGV2ZW50KSA9PiAoZ3JvdXBCZWluZ0RlbGV0ZWQgPSAkZXZlbnQpXCJcclxuICAgICAgICBAcmVuYW1lLWdyb3VwPVwiKCRldmVudCkgPT4gKGdyb3VwQmVpbmdSZW5hbWVkID0gJGV2ZW50KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9Hcm91cHMudnVlOjExOjdcIlxyXG4gICAgICAvPlxyXG4gICAgICA8SW5maW5pdGVMb2FkaW5nXHJcbiAgICAgICAgdi1pZj1cImdyb3Vwcy5sZW5ndGhcIlxyXG4gICAgICAgIDpzZXR0aW5ncz1cInsgaWRlbnRpZmllciB9XCJcclxuICAgICAgICBoaWRlLXdoZW4tY29tcGxldGVcclxuICAgICAgICBAaW5maW5pdGU9XCJvbkluZmluaXRlTG9hZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9Hcm91cHMudnVlOjI1OjdcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0VkaXREaWFsb2dcclxuICAgICAgdi1tb2RlbDpvcGVuPVwic2hvd0VkaXREaWFsb2dcIlxyXG4gICAgICA6dmlldz1cInZpZXdCZWluZ0VkaXRlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9Hcm91cHMudnVlOjMyOjVcIlxyXG4gICAgLz5cclxuICAgIDxWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3TW92ZURpYWxvZ1xyXG4gICAgICB2LW1vZGVsOm9wZW49XCJzaG93TW92ZURpYWxvZ1wiXHJcbiAgICAgIDp2aWV3PVwidmlld0JlaW5nTW92ZWRcIlxyXG4gICAgICBAc3VjY2Vzcz1cIm9uTW92ZVN1Y2Nlc3NcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvR3JvdXBzLnZ1ZTozNjo1XCJcclxuICAgIC8+XHJcbiAgICA8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0RlbGV0ZURpYWxvZ1xyXG4gICAgICB2LW1vZGVsOm9wZW49XCJzaG93RGVsZXRlRGlhbG9nXCJcclxuICAgICAgOnZpZXc9XCJ2aWV3QmVpbmdEZWxldGVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL0dyb3Vwcy52dWU6NDE6NVwiXHJcbiAgICAvPlxyXG4gICAgPFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dcclxuICAgICAgdi1tb2RlbDpvcGVuPVwic2hvd0dyb3VwRGVsZXRlRGlhbG9nXCJcclxuICAgICAgOmdyb3VwPVwiZ3JvdXBCZWluZ0RlbGV0ZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvR3JvdXBzLnZ1ZTo0NTo1XCJcclxuICAgIC8+XHJcbiAgICA8UHJvamVjdE1vZGVsUGFnZURpYWxvZ0VtYmVkXHJcbiAgICAgIHYtaWY9XCJtYWluUHJvamVjdFwiXHJcbiAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dWaWV3RW1iZWREaWFsb2dcIlxyXG4gICAgICA6dmlldz1cInZpZXdCZWluZ0VtYmVkZGVkXCJcclxuICAgICAgOnByb2plY3Q9XCJtYWluUHJvamVjdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9Hcm91cHMudnVlOjQ5OjVcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcydcclxuaW1wb3J0IHsgdXNlUGFnaW5hdGVkUXVlcnkgfSBmcm9tICd+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvZ3JhcGhxbCdcclxuaW1wb3J0IHsgZ3JhcGhxbCB9IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudCxcclxuICBVc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50LFxyXG4gIFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdEZWxldGVEaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnQsXHJcbiAgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0VkaXREaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnQsXHJcbiAgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld01vdmVEaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnQsXHJcbiAgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50LFxyXG4gIFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudFxyXG59IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZUluamVjdGVkVmlld2VyU3RhdGUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB0eXBlIHsgVmlld3NUeXBlIH0gZnJvbSAnfi9saWIvdmlld2VyL2hlbHBlcnMvc2F2ZWRWaWV3cydcclxuaW1wb3J0IHsgdmlld3NUeXBlVG9GaWx0ZXJzIH0gZnJvbSAnfi9saWIvdmlld2VyL2hlbHBlcnMvc2F2ZWRWaWV3cydcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc19Qcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgaWRcclxuICAgIHNhdmVkVmlld0dyb3VwcyhpbnB1dDogJHNhdmVkVmlld0dyb3Vwc0lucHV0KSB7XHJcbiAgICAgIHRvdGFsQ291bnRcclxuICAgICAgY3Vyc29yXHJcbiAgICAgIGl0ZW1zIHtcclxuICAgICAgICBpZFxyXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9Qcm9qZWN0XHJcbiAgfVxyXG5gKVxyXG5cclxuY29uc3QgcGFnaW5hYmxlR3JvdXBzUXVlcnkgPSBncmFwaHFsKGBcclxuICBxdWVyeSBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfU2F2ZWRWaWV3R3JvdXBzKFxyXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxyXG4gICAgJHNhdmVkVmlld0dyb3Vwc0lucHV0OiBTYXZlZFZpZXdHcm91cHNJbnB1dCFcclxuICApIHtcclxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcclxuICAgICAgaWRcclxuICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsR3JvdXBzX1Byb2plY3RcclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICB2aWV3c1R5cGU6IFZpZXdzVHlwZVxyXG4gIHNlYXJjaD86IHN0cmluZ1xyXG59PigpXHJcblxyXG5jb25zdCB7XHJcbiAgcHJvamVjdElkLFxyXG4gIHJlc291cmNlczoge1xyXG4gICAgcmVxdWVzdDogeyByZXNvdXJjZUlkU3RyaW5nIH0sXHJcbiAgICByZXNwb25zZTogeyBwcm9qZWN0OiBtYWluUHJvamVjdCB9XHJcbiAgfSxcclxuICB1aToge1xyXG4gICAgc2F2ZWRWaWV3czogeyBvcGVuZWRHcm91cFN0YXRlIH1cclxuICB9XHJcbn0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuY29uc3QgZXZlbnRCdXMgPSB1c2VFdmVudEJ1cygpXHJcblxyXG5jb25zdCB2aWV3QmVpbmdFZGl0ZWQgPSByZWY8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0VkaXREaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnQ+KClcclxuY29uc3Qgdmlld0JlaW5nTW92ZWQgPSByZWY8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld01vdmVEaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnQ+KClcclxuY29uc3Qgdmlld0JlaW5nRGVsZXRlZCA9IHJlZjxWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3RGVsZXRlRGlhbG9nX1NhdmVkVmlld0ZyYWdtZW50PigpXHJcbmNvbnN0IGdyb3VwQmVpbmdEZWxldGVkID1cclxuICByZWY8Vmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cERlbGV0ZURpYWxvZ19TYXZlZFZpZXdHcm91cEZyYWdtZW50PigpXHJcbmNvbnN0IGdyb3VwQmVpbmdSZW5hbWVkID0gcmVmPFVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwRnJhZ21lbnQ+KClcclxuY29uc3Qgdmlld0JlaW5nRW1iZWRkZWQgPSByZWY8Rm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudD4oKVxyXG5cclxuY29uc3Qge1xyXG4gIGlkZW50aWZpZXIsXHJcbiAgb25JbmZpbml0ZUxvYWQsXHJcbiAgcXVlcnk6IHsgcmVzdWx0IH0sXHJcbiAgaXNWZXJ5Rmlyc3RMb2FkaW5nXHJcbn0gPSB1c2VQYWdpbmF0ZWRRdWVyeSh7XHJcbiAgcXVlcnk6IHBhZ2luYWJsZUdyb3Vwc1F1ZXJ5LFxyXG4gIGJhc2VWYXJpYWJsZXM6IGNvbXB1dGVkKCgpID0+ICh7XHJcbiAgICBwcm9qZWN0SWQ6IHByb2plY3RJZC52YWx1ZSxcclxuICAgIHNhdmVkVmlld0dyb3Vwc0lucHV0OiB7XHJcbiAgICAgIHJlc291cmNlSWRTdHJpbmc6IHJlc291cmNlSWRTdHJpbmcudmFsdWUsXHJcbiAgICAgIGN1cnNvcjogbnVsbCBhcyBudWxsIHwgc3RyaW5nLFxyXG4gICAgICBzZWFyY2g6IHByb3BzLnNlYXJjaD8udHJpbSgpIHx8IG51bGwsXHJcbiAgICAgIC4uLnZpZXdzVHlwZVRvRmlsdGVycyhwcm9wcy52aWV3c1R5cGUpXHJcbiAgICB9XHJcbiAgfSkpLFxyXG4gIHJlc29sdmVLZXk6ICh2YXJzKSA9PiAoe1xyXG4gICAgcHJvamVjdElkOiB2YXJzLnByb2plY3RJZCxcclxuICAgIHNhdmVkVmlld0dyb3Vwc0lucHV0OiBvbWl0KHZhcnMuc2F2ZWRWaWV3R3JvdXBzSW5wdXQsIFsnY3Vyc29yJ10pXHJcbiAgfSksXHJcbiAgcmVzb2x2ZUN1cnJlbnRSZXN1bHQ6IChyZXMpID0+IHJlcz8ucHJvamVjdC5zYXZlZFZpZXdHcm91cHMsXHJcbiAgcmVzb2x2ZU5leHRQYWdlVmFyaWFibGVzOiAoYmFzZVZhcnMsIGN1cnNvcikgPT4gKHtcclxuICAgIC4uLmJhc2VWYXJzLFxyXG4gICAgc2F2ZWRWaWV3R3JvdXBzSW5wdXQ6IHtcclxuICAgICAgLi4uYmFzZVZhcnMuc2F2ZWRWaWV3R3JvdXBzSW5wdXQsXHJcbiAgICAgIGN1cnNvclxyXG4gICAgfVxyXG4gIH0pLFxyXG4gIHJlc29sdmVDdXJzb3JGcm9tVmFyaWFibGVzOiAodmFycykgPT4gdmFycy5zYXZlZFZpZXdHcm91cHNJbnB1dC5jdXJzb3JcclxufSlcclxuXHJcbmNvbnN0IGhhc0dyb3VwcyA9IGNvbXB1dGVkKFxyXG4gICgpID0+IChyZXN1bHQudmFsdWU/LnByb2plY3Quc2F2ZWRWaWV3R3JvdXBzLml0ZW1zLmxlbmd0aCB8fCAwKSA+IDBcclxuKVxyXG5jb25zdCBpc1NlYXJjaCA9IGNvbXB1dGVkKCgpID0+IChwcm9wcy5zZWFyY2ggfHwgJycpLnRyaW0oKS5sZW5ndGggPiAwKVxyXG5jb25zdCBlbXB0eVN0YXRlVHlwZSA9IGNvbXB1dGVkKCgpID0+IChpc1NlYXJjaC52YWx1ZSA/ICdzZWFyY2gnIDogJ2Jhc2UnKSlcclxuXHJcbmNvbnN0IHByb2plY3QgPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LnByb2plY3QpXHJcbmNvbnN0IGdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IHByb2plY3QudmFsdWU/LnNhdmVkVmlld0dyb3Vwcy5pdGVtcyB8fCBbXSlcclxuXHJcbmNvbnN0IHNob3dFZGl0RGlhbG9nID0gY29tcHV0ZWQoe1xyXG4gIGdldDogKCkgPT4gISF2aWV3QmVpbmdFZGl0ZWQudmFsdWUsXHJcbiAgc2V0OiAodmFsdWUpID0+IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgdmlld0JlaW5nRWRpdGVkLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3Qgc2hvd01vdmVEaWFsb2cgPSBjb21wdXRlZCh7XHJcbiAgZ2V0OiAoKSA9PiAhIXZpZXdCZWluZ01vdmVkLnZhbHVlLFxyXG4gIHNldDogKHZhbHVlKSA9PiB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHZpZXdCZWluZ01vdmVkLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3Qgc2hvd0RlbGV0ZURpYWxvZyA9IGNvbXB1dGVkKHtcclxuICBnZXQ6ICgpID0+ICEhdmlld0JlaW5nRGVsZXRlZC52YWx1ZSxcclxuICBzZXQ6ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB2aWV3QmVpbmdEZWxldGVkLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3Qgc2hvd0dyb3VwRGVsZXRlRGlhbG9nID0gY29tcHV0ZWQoe1xyXG4gIGdldDogKCkgPT4gISFncm91cEJlaW5nRGVsZXRlZC52YWx1ZSxcclxuICBzZXQ6ICh2YWx1ZSkgPT4ge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBncm91cEJlaW5nRGVsZXRlZC52YWx1ZSA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IHNob3dWaWV3RW1iZWREaWFsb2cgPSBjb21wdXRlZCh7XHJcbiAgZ2V0OiAoKSA9PiAhIXZpZXdCZWluZ0VtYmVkZGVkLnZhbHVlLFxyXG4gIHNldDogKHZhbHVlKSA9PiB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHZpZXdCZWluZ0VtYmVkZGVkLnZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3QgaXNHcm91cEluUmVuYW1lTW9kZSA9IChcclxuICBncm91cDogVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50XHJcbikgPT4ge1xyXG4gIHJldHVybiBncm91cC5pZCA9PT0gZ3JvdXBCZWluZ1JlbmFtZWQudmFsdWU/LmlkXHJcbn1cclxuXHJcbmNvbnN0IGlzR3JvdXBTZWxlY3RlZCA9IChcclxuICBncm91cDogVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50XHJcbikgPT4ge1xyXG4gIHJldHVybiBvcGVuZWRHcm91cFN0YXRlLnZhbHVlLmdldChncm91cC5pZClcclxufVxyXG5cclxuY29uc3Qgb25Jc1NlbGVjdGVkQ2hhbmdlID0gKFxyXG4gIHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxyXG4gIGdyb3VwOiBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwRnJhZ21lbnRcclxuKSA9PiB7XHJcbiAgaWYgKHZhbHVlKSB7XHJcbiAgICBvcGVuZWRHcm91cFN0YXRlLnZhbHVlLnNldChncm91cC5pZCwgdHJ1ZSlcclxuICB9IGVsc2Uge1xyXG4gICAgb3BlbmVkR3JvdXBTdGF0ZS52YWx1ZS5kZWxldGUoZ3JvdXAuaWQpXHJcbiAgfVxyXG59XHJcblxyXG53YXRjaChcclxuICBncm91cHMsXHJcbiAgKG5ld0dyb3VwcykgPT4ge1xyXG4gICAgaWYgKG5ld0dyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgLy8gZmlyc3QgZ3JvdXAgc2hvdWxkIGJlIHNlbGVjdGVkXHJcbiAgICAgIGNvbnN0IHNlbGVjdGFibGVHcm91cElkID0gbmV3R3JvdXBzWzBdLmlkXHJcbiAgICAgIGlmIChzZWxlY3RhYmxlR3JvdXBJZCkge1xyXG4gICAgICAgIG9wZW5lZEdyb3VwU3RhdGUudmFsdWUuc2V0KHNlbGVjdGFibGVHcm91cElkLCB0cnVlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuICB7IGltbWVkaWF0ZTogdHJ1ZSB9XHJcbilcclxuXHJcbmV2ZW50QnVzLm9uKFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRWRpdCwgKHsgdHlwZSwgdmlldyB9KSA9PiB7XHJcbiAgaWYgKHR5cGUgPT09ICdlZGl0Jykge1xyXG4gICAgdmlld0JlaW5nRWRpdGVkLnZhbHVlID0gdmlld1xyXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vdmUnKSB7XHJcbiAgICB2aWV3QmVpbmdNb3ZlZC52YWx1ZSA9IHZpZXdcclxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkZWxldGUnKSB7XHJcbiAgICB2aWV3QmVpbmdEZWxldGVkLnZhbHVlID0gdmlld1xyXG4gIH1cclxufSlcclxuXHJcbmV2ZW50QnVzLm9uKFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRW1iZWQsICh7IHZpZXcgfSkgPT4ge1xyXG4gIHZpZXdCZWluZ0VtYmVkZGVkLnZhbHVlID0gdmlld1xyXG59KVxyXG5cclxuY29uc3Qgb25Nb3ZlU3VjY2VzcyA9IChncm91cElkOiBzdHJpbmcpID0+IHtcclxuICBvcGVuZWRHcm91cFN0YXRlLnZhbHVlLnNldChncm91cElkLCB0cnVlKVxyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvR3JvdXBzLnZ1ZSJ9