478 lines
47 KiB
Plaintext
478 lines
47 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/pages/projects/[id]/index.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/projects/invite/Banner.vue";
|
|
import { default as __nuxt_component_1 } from "/_nuxt/components/projects/MoveToWorkspaceAlert.vue";
|
|
import { default as __nuxt_component_2 } from "/_nuxt/components/project/page/Header.vue";
|
|
import { CommonBadge as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { UserAvatarGroup as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_5 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29";
|
|
import { FormButton as __nuxt_component_6 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { LayoutMenu as __nuxt_component_7 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_8 } from "/_nuxt/node_modules/nuxt/dist/pages/runtime/page.js?v=e4f18c29";
|
|
import { default as __nuxt_component_9 } from "/_nuxt/components/workspace/moveProject/index.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 { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
|
|
import { Roles, RoleInfo } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
|
|
import { projectPageQuery } from "/_nuxt/lib/projects/graphql/queries.ts";
|
|
import { useGeneralProjectPageUpdateTracking } from "/_nuxt/lib/projects/composables/projectPages.ts";
|
|
import { LayoutTabsHorizontal } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { projectRoute, projectWebhooksRoute } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { EllipsisHorizontalIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_solid.js?v=e4f18c29";
|
|
import { HorizontalDirection } from "/_nuxt/lib/common/composables/window.ts";
|
|
import { useCopyProjectLink } from "/_nuxt/lib/projects/composables/projectManagement.ts";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
|
|
import { definePageMeta } from "/_nuxt/node_modules/nuxt/dist/pages/runtime/composables.js?v=e4f18c29";
|
|
import { navigateTo, useRoute, useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
|
|
import { useActiveUser, usePageQueryStandardFetchPolicy, useIsAutomateModuleEnabled, useIsWorkspacesEnabled } from "/_nuxt/composables/globals.ts";
|
|
import { computed, ref, useId } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { useHead } from "/_nuxt/node_modules/nuxt/dist/app/composables/head.js?v=e4f18c29";
|
|
var ActionTypes = /* @__PURE__ */ ((ActionTypes2) => {
|
|
ActionTypes2["CopyLink"] = "copy-link";
|
|
ActionTypes2["Move"] = "move";
|
|
return ActionTypes2;
|
|
})(ActionTypes || {});
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "index",
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
graphql(`
|
|
fragment ProjectPageProject on Project {
|
|
id
|
|
createdAt
|
|
modelCount: models(limit: 0) {
|
|
totalCount
|
|
}
|
|
commentThreadCount: commentThreads(limit: 0) {
|
|
totalCount
|
|
}
|
|
workspace {
|
|
id
|
|
permissions {
|
|
canListDashboards {
|
|
...FullPermissionCheckResult
|
|
}
|
|
}
|
|
}
|
|
permissions {
|
|
canReadSettings {
|
|
...FullPermissionCheckResult
|
|
}
|
|
canUpdate {
|
|
...FullPermissionCheckResult
|
|
}
|
|
canMoveToWorkspace {
|
|
...FullPermissionCheckResult
|
|
}
|
|
}
|
|
...ProjectPageTeamInternals_Project
|
|
...ProjectPageProjectHeader
|
|
...ProjectPageTeamDialog
|
|
...WorkspaceMoveProjectManager_ProjectBase
|
|
...ProjectPageSettingsTab_Project
|
|
...WorkspaceMoveProject_Project
|
|
hasAccessToDashboards: hasAccessToFeature(featureName: dashboards)
|
|
}
|
|
`);
|
|
definePageMeta({
|
|
middleware: [
|
|
"require-valid-project",
|
|
function(to) {
|
|
const projectId2 = to.params.id;
|
|
if (/\/models\/?$/i.test(to.path)) {
|
|
return navigateTo(projectRoute(projectId2));
|
|
}
|
|
if (/\/projects\/\w*?\/webhooks/i.test(to.path)) {
|
|
return navigateTo(projectWebhooksRoute(projectId2));
|
|
}
|
|
}
|
|
],
|
|
alias: ["/projects/:id/models", "/projects/:id/webhooks"]
|
|
});
|
|
const route = useRoute();
|
|
const router = useRouter();
|
|
const copyProjectLink = useCopyProjectLink();
|
|
const { isLoggedIn } = useActiveUser();
|
|
const mixpanel = useMixpanel();
|
|
const projectId = computed(() => route.params.id);
|
|
const token = computed(() => route.query.token);
|
|
const pageFetchPolicy = usePageQueryStandardFetchPolicy();
|
|
useGeneralProjectPageUpdateTracking({ projectId }, { notifyOnProjectUpdate: true });
|
|
const { result: projectPageResult } = useQuery(
|
|
projectPageQuery,
|
|
() => ({
|
|
id: projectId.value,
|
|
...token.value?.length ? { token: token.value } : {}
|
|
}),
|
|
() => ({
|
|
fetchPolicy: pageFetchPolicy.value
|
|
})
|
|
);
|
|
const showActionsMenu = ref(false);
|
|
const menuId = useId();
|
|
const showMoveDialog = ref(false);
|
|
const project = computed(() => projectPageResult.value?.project);
|
|
const invite = computed(() => projectPageResult.value?.projectInvite || void 0);
|
|
const projectName = computed(
|
|
() => project.value?.name.length ? project.value.name : ""
|
|
);
|
|
const modelCount = computed(() => project.value?.modelCount.totalCount);
|
|
const commentCount = computed(() => project.value?.commentThreadCount.totalCount);
|
|
const canListDashboards = computed(
|
|
() => project.value?.workspace?.permissions.canListDashboards.authorized
|
|
);
|
|
const canReadSettings = computed(() => project.value?.permissions.canReadSettings);
|
|
const canUpdate = computed(() => project.value?.permissions.canUpdate);
|
|
const hasRole = computed(() => project.value?.role);
|
|
const teamUsers = computed(() => project.value?.team.map((t) => t.user) || []);
|
|
const actionsItems = computed(() => {
|
|
const items = [
|
|
[
|
|
{
|
|
title: "Copy link",
|
|
id: "copy-link" /* CopyLink */
|
|
}
|
|
]
|
|
];
|
|
if (isWorkspacesEnabled.value && !project.value?.workspace?.id && hasRole.value) {
|
|
items.push([
|
|
{
|
|
title: "Move project...",
|
|
id: "move" /* Move */,
|
|
disabled: !isOwner.value,
|
|
disabledTooltip: "Only the project owner can move this project into a workspace"
|
|
}
|
|
]);
|
|
}
|
|
return items;
|
|
});
|
|
useHead({
|
|
title: projectName,
|
|
meta: [
|
|
{
|
|
name: "robots",
|
|
content: "noindex, nofollow"
|
|
}
|
|
]
|
|
});
|
|
const onInviteAccepted = async (params) => {
|
|
if (params.accepted) {
|
|
await router.replace({
|
|
query: { ...route.query, accept: void 0, token: void 0 }
|
|
});
|
|
}
|
|
};
|
|
const isOwner = computed(() => project.value?.role === Roles.Stream.Owner);
|
|
const isAutomateEnabled = useIsAutomateModuleEnabled();
|
|
const isWorkspacesEnabled = useIsWorkspacesEnabled();
|
|
const pageTabItems = computed(() => {
|
|
const items = [
|
|
{
|
|
title: "Models",
|
|
id: "models",
|
|
count: modelCount.value
|
|
},
|
|
{
|
|
title: "Discussions",
|
|
id: "discussions",
|
|
count: commentCount.value
|
|
}
|
|
];
|
|
if (isAutomateEnabled.value && project.value?.workspace && project.value?.workspace?.role !== Roles.Workspace.Guest) {
|
|
items.push({
|
|
title: "Automations",
|
|
id: "automations"
|
|
});
|
|
}
|
|
if (canReadSettings.value?.authorized) {
|
|
items.push({
|
|
title: "Collaborators",
|
|
id: "collaborators"
|
|
});
|
|
items.push({
|
|
title: "Settings",
|
|
id: "settings"
|
|
});
|
|
}
|
|
if (project.value?.hasAccessToDashboards && canListDashboards.value) {
|
|
items.push({
|
|
title: "Dashboards",
|
|
id: "dashboards"
|
|
});
|
|
}
|
|
return items;
|
|
});
|
|
const findTabById = (id) => pageTabItems.value.find((tab) => tab.id === id) || pageTabItems.value[0];
|
|
const collaboratorsTooltip = computed(
|
|
() => canReadSettings.value?.authorized ? canUpdate.value?.authorized ? "Manage collaborators" : "View collaborators" : null
|
|
);
|
|
const activePageTab = computed({
|
|
get: () => {
|
|
const path = router.currentRoute.value.path;
|
|
if (/\/discussions\/?$/i.test(path)) return findTabById("discussions");
|
|
if (/\/automations\/?.*$/i.test(path)) return findTabById("automations");
|
|
if (/\/acc\/?.*$/i.test(path)) return findTabById("acc");
|
|
if (/\/dashboards\/?/i.test(path)) return findTabById("dashboards");
|
|
if (/\/collaborators\/?/i.test(path) && canReadSettings.value?.authorized)
|
|
return findTabById("collaborators");
|
|
if (/\/settings\/?/i.test(path) && canReadSettings.value?.authorized)
|
|
return findTabById("settings");
|
|
return findTabById("models");
|
|
},
|
|
set: (val) => {
|
|
if (!val) return;
|
|
switch (val.id) {
|
|
case "models":
|
|
router.push({ path: projectRoute(projectId.value, "models") });
|
|
break;
|
|
case "discussions":
|
|
router.push({ path: projectRoute(projectId.value, "discussions") });
|
|
break;
|
|
case "acc":
|
|
router.push({ path: projectRoute(projectId.value, "acc") });
|
|
break;
|
|
case "automations":
|
|
router.push({ path: projectRoute(projectId.value, "automations") });
|
|
break;
|
|
case "collaborators":
|
|
if (canReadSettings.value?.authorized) {
|
|
router.push({ path: projectRoute(projectId.value, "collaborators") });
|
|
}
|
|
break;
|
|
case "dashboards":
|
|
if (project.value?.hasAccessToDashboards) {
|
|
router.push({ path: projectRoute(projectId.value, "dashboards") });
|
|
}
|
|
break;
|
|
case "settings":
|
|
if (canReadSettings.value?.authorized) {
|
|
router.push({ path: projectRoute(projectId.value, "settings") });
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
const shouldShowWorkspaceAlert = computed(
|
|
() => isWorkspacesEnabled.value && isLoggedIn.value && !project.value?.workspace && hasRole.value
|
|
);
|
|
const disableLegacyMoveProjectButton = computed(
|
|
() => !project.value?.permissions.canMoveToWorkspace.authorized
|
|
);
|
|
const onMoveProject = () => {
|
|
mixpanel.track("Move Project CTA Clicked", {
|
|
location: "project"
|
|
});
|
|
showMoveDialog.value = true;
|
|
};
|
|
const onActionChosen = (params) => {
|
|
const { item } = params;
|
|
switch (item.id) {
|
|
case "copy-link" /* CopyLink */:
|
|
copyProjectLink(projectId.value);
|
|
break;
|
|
case "move" /* Move */:
|
|
onMoveProject();
|
|
break;
|
|
}
|
|
};
|
|
const __returned__ = { ActionTypes, route, router, copyProjectLink, isLoggedIn, mixpanel, projectId, token, pageFetchPolicy, projectPageResult, showActionsMenu, menuId, showMoveDialog, project, invite, projectName, modelCount, commentCount, canListDashboards, canReadSettings, canUpdate, hasRole, teamUsers, actionsItems, onInviteAccepted, isOwner, isAutomateEnabled, isWorkspacesEnabled, pageTabItems, findTabById, collaboratorsTooltip, activePageTab, shouldShowWorkspaceAlert, disableLegacyMoveProjectButton, onMoveProject, onActionChosen, get RoleInfo() {
|
|
return RoleInfo;
|
|
}, get LayoutTabsHorizontal() {
|
|
return LayoutTabsHorizontal;
|
|
}, get projectRoute() {
|
|
return projectRoute;
|
|
}, get EllipsisHorizontalIcon() {
|
|
return EllipsisHorizontalIcon;
|
|
}, get HorizontalDirection() {
|
|
return HorizontalDirection;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, withModifiers as _withModifiers } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = { "data-v-inspector": "pages/projects/[id]/index.vue:2:3" };
|
|
const _hoisted_2 = {
|
|
key: 0,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:3:5"
|
|
};
|
|
const _hoisted_3 = {
|
|
key: 0,
|
|
class: "mb-4",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:4:7"
|
|
};
|
|
const _hoisted_4 = {
|
|
class: "flex flex-col md:flex-row md:justify-between md:items-center gap-6 mb-6",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:18:7"
|
|
};
|
|
const _hoisted_5 = {
|
|
class: "flex gap-x-3 items-center justify-between",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:22:9"
|
|
};
|
|
const _hoisted_6 = {
|
|
class: "flex flex-row gap-x-3",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:23:11"
|
|
};
|
|
const _hoisted_7 = {
|
|
class: "flex flex-row gap-x-3",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:28:11"
|
|
};
|
|
const _hoisted_8 = { "data-v-inspector": "pages/projects/[id]/index.vue:29:13" };
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ProjectsInviteBanner = __nuxt_component_0;
|
|
const _component_ProjectsMoveToWorkspaceAlert = __nuxt_component_1;
|
|
const _component_ProjectPageHeader = __nuxt_component_2;
|
|
const _component_CommonBadge = __nuxt_component_3;
|
|
const _component_UserAvatarGroup = __nuxt_component_4;
|
|
const _component_NuxtLink = __nuxt_component_5;
|
|
const _component_FormButton = __nuxt_component_6;
|
|
const _component_LayoutMenu = __nuxt_component_7;
|
|
const _component_NuxtPage = __nuxt_component_8;
|
|
const _component_WorkspaceMoveProject = __nuxt_component_9;
|
|
const _directive_tippy = _resolveDirective("tippy");
|
|
return _openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
$setup.project ? (_openBlock(), _createElementBlock("div", _hoisted_2, [
|
|
$setup.invite ? (_openBlock(), _createElementBlock("div", _hoisted_3, [
|
|
_createVNode(_component_ProjectsInviteBanner, {
|
|
invite: $setup.invite,
|
|
"show-project-name": false,
|
|
onProcessed: $setup.onInviteAccepted,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:5:9"
|
|
}, null, 8, ["invite"])
|
|
])) : _createCommentVNode("v-if", true),
|
|
$setup.shouldShowWorkspaceAlert ? (_openBlock(), _createBlock(_component_ProjectsMoveToWorkspaceAlert, {
|
|
key: 1,
|
|
"disable-button": $setup.disableLegacyMoveProjectButton,
|
|
"project-id": $setup.project.id,
|
|
onMoveProject: $setup.onMoveProject,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:11:7"
|
|
}, null, 8, ["disable-button", "project-id"])) : _createCommentVNode("v-if", true),
|
|
_createElementVNode("div", _hoisted_4, [
|
|
_createVNode(_component_ProjectPageHeader, {
|
|
project: $setup.project,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:21:9"
|
|
}, null, 8, ["project"]),
|
|
_createElementVNode("div", _hoisted_5, [
|
|
_createElementVNode("div", _hoisted_6, [
|
|
$setup.project.role ? (_openBlock(), _createBlock(_component_CommonBadge, {
|
|
key: 0,
|
|
rounded: "",
|
|
color: "secondary",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:24:13"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
_toDisplayString($setup.RoleInfo.Stream[$setup.project.role].title),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
})) : _createCommentVNode("v-if", true)
|
|
]),
|
|
_createElementVNode("div", _hoisted_7, [
|
|
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_8, [
|
|
_createVNode(_component_NuxtLink, {
|
|
to: $setup.canReadSettings?.authorized ? $setup.projectRoute($setup.project.id, "collaborators") : "",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:30:15"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_UserAvatarGroup, {
|
|
users: $setup.teamUsers,
|
|
"max-count": 2,
|
|
class: "max-w-[104px]",
|
|
"hide-tooltips": "",
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:37:17"
|
|
}, null, 8, ["users"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"])
|
|
])), [
|
|
[_directive_tippy, $setup.collaboratorsTooltip]
|
|
])
|
|
]),
|
|
_createVNode(_component_LayoutMenu, {
|
|
open: $setup.showActionsMenu,
|
|
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.showActionsMenu = $event),
|
|
items: $setup.actionsItems,
|
|
"menu-position": $setup.HorizontalDirection.Left,
|
|
"menu-id": $setup.menuId,
|
|
onClick: _cache[2] || (_cache[2] = _withModifiers(() => {
|
|
}, ["stop", "prevent"])),
|
|
onChosen: $setup.onActionChosen,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:46:11"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_FormButton, {
|
|
color: "subtle",
|
|
"hide-text": "",
|
|
"icon-right": $setup.EllipsisHorizontalIcon,
|
|
onClick: _cache[0] || (_cache[0] = ($event) => $setup.showActionsMenu = !$setup.showActionsMenu),
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:54:13"
|
|
}, null, 8, ["icon-right"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["open", "items", "menu-position", "menu-id"])
|
|
])
|
|
]),
|
|
_createVNode($setup["LayoutTabsHorizontal"], {
|
|
"active-item": $setup.activePageTab,
|
|
"onUpdate:activeItem": _cache[3] || (_cache[3] = ($event) => $setup.activePageTab = $event),
|
|
items: $setup.pageTabItems,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:63:7"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_NuxtPage, {
|
|
project: $setup.project,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:64:9"
|
|
}, null, 8, ["project"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["active-item", "items"])
|
|
])) : _createCommentVNode("v-if", true),
|
|
$setup.project && $setup.isWorkspacesEnabled ? (_openBlock(), _createBlock(_component_WorkspaceMoveProject, {
|
|
key: 1,
|
|
open: $setup.showMoveDialog,
|
|
"onUpdate:open": _cache[4] || (_cache[4] = ($event) => $setup.showMoveDialog = $event),
|
|
"event-source": "project-page",
|
|
project: $setup.project,
|
|
"data-v-inspector": "pages/projects/[id]/index.vue:68:5"
|
|
}, null, 8, ["open", "project"])) : _createCommentVNode("v-if", true)
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "0774e42a";
|
|
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/pages/projects/[id]/index.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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bkMsV0FBUztBQUFBLFlBQ1QsU0FBSyx5Q0FBTjtBQUFBLGVBQW1CO0FBQUEsWUFDbEIsVUFBUTtBQUFBLFlBQWdCLG9CQUFpQjtBQUFBOzhCQUUxQyxNQUtFO0FBQUEsY0FMRixhQUtFO0FBQUEsZ0JBSkEsT0FBTTtBQUFBLGdCQUNOO0FBQUEsZ0JBQ0MsY0FBWTtBQUFBLGdCQUNaLFNBQUssc0NBQUUseUJBQWUsQ0FBSTtBQUFBLGdCQUFpQixvQkFBaUI7QUFBQTs7Ozs7OztNQUtyRSxhQUV1QjtBQUFBLFFBRk8sZUFBYTtBQUFBLDRGQUFhO0FBQUEsUUFBRyxPQUFPO0FBQUEsUUFBYyxvQkFBaUI7QUFBQTswQkFDL0YsTUFBcUY7QUFBQSxVQUFyRixhQUFxRjtBQUFBLFlBQTFFLFNBQVM7QUFBQSxZQUFTLG9CQUFpQjtBQUFBOzs7Ozs7SUFLMUMsa0JBQVcsNENBRG5CLGFBS0U7QUFBQTtNQUhRLE1BQU07QUFBQSxxRkFBYztBQUFBLE1BQzVCLGdCQUFhO0FBQUEsTUFDWixTQUFTO0FBQUEsTUFBUyxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbIkFjdGlvblR5cGVzIiwicHJvamVjdElkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImluZGV4LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgPGRpdiBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6MjozXCI+XHJcbiAgICA8ZGl2IHYtaWY9XCJwcm9qZWN0XCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjM6NVwiPlxyXG4gICAgICA8ZGl2IHYtaWY9XCJpbnZpdGVcIiBjbGFzcz1cIm1iLTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6NDo3XCI+XHJcbiAgICAgICAgPFByb2plY3RzSW52aXRlQmFubmVyXHJcbiAgICAgICAgICA6aW52aXRlPVwiaW52aXRlXCJcclxuICAgICAgICAgIDpzaG93LXByb2plY3QtbmFtZT1cImZhbHNlXCJcclxuICAgICAgICAgIEBwcm9jZXNzZWQ9XCJvbkludml0ZUFjY2VwdGVkXCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjU6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxQcm9qZWN0c01vdmVUb1dvcmtzcGFjZUFsZXJ0XHJcbiAgICAgICAgdi1pZj1cInNob3VsZFNob3dXb3Jrc3BhY2VBbGVydFwiXHJcbiAgICAgICAgOmRpc2FibGUtYnV0dG9uPVwiZGlzYWJsZUxlZ2FjeU1vdmVQcm9qZWN0QnV0dG9uXCJcclxuICAgICAgICA6cHJvamVjdC1pZD1cInByb2plY3QuaWRcIlxyXG4gICAgICAgIEBtb3ZlLXByb2plY3Q9XCJvbk1vdmVQcm9qZWN0XCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjExOjdcIlxyXG4gICAgICAvPlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBtZDpqdXN0aWZ5LWJldHdlZW4gbWQ6aXRlbXMtY2VudGVyIGdhcC02IG1iLTZcIiBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6MTg6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8UHJvamVjdFBhZ2VIZWFkZXIgOnByb2plY3Q9XCJwcm9qZWN0XCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjIxOjlcIiAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC14LTMgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiIGRhdGEtdi1pbnNwZWN0b3I9XCJwYWdlcy9wcm9qZWN0cy9baWRdL2luZGV4LnZ1ZToyMjo5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAteC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjIzOjExXCI+XHJcbiAgICAgICAgICAgIDxDb21tb25CYWRnZSB2LWlmPVwicHJvamVjdC5yb2xlXCIgcm91bmRlZCBjb2xvcj1cInNlY29uZGFyeVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJwYWdlcy9wcm9qZWN0cy9baWRdL2luZGV4LnZ1ZToyNDoxM1wiPlxyXG4gICAgICAgICAgICAgIHt7IFJvbGVJbmZvLlN0cmVhbVtwcm9qZWN0LnJvbGUgYXMgU3RyZWFtUm9sZXNdLnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvQ29tbW9uQmFkZ2U+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC14LTNcIiBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6Mjg6MTFcIj5cclxuICAgICAgICAgICAgPGRpdiB2LXRpcHB5PVwiY29sbGFib3JhdG9yc1Rvb2x0aXBcIiBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6Mjk6MTNcIj5cclxuICAgICAgICAgICAgICA8TnV4dExpbmtcclxuICAgICAgICAgICAgICAgIDp0bz1cIlxyXG4gICAgICAgICAgICAgICAgICBjYW5SZWFkU2V0dGluZ3M/LmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgICAgICA/IHByb2plY3RSb3V0ZShwcm9qZWN0LmlkLCAnY29sbGFib3JhdG9ycycpXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICAgICAgXCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjMwOjE1XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8VXNlckF2YXRhckdyb3VwXHJcbiAgICAgICAgICAgICAgICAgIDp1c2Vycz1cInRlYW1Vc2Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgIDptYXgtY291bnQ9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXgtdy1bMTA0cHhdXCJcclxuICAgICAgICAgICAgICAgICAgaGlkZS10b29sdGlwcyBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6Mzc6MTdcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L051eHRMaW5rPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPExheW91dE1lbnVcclxuICAgICAgICAgICAgdi1tb2RlbDpvcGVuPVwic2hvd0FjdGlvbnNNZW51XCJcclxuICAgICAgICAgICAgOml0ZW1zPVwiYWN0aW9uc0l0ZW1zXCJcclxuICAgICAgICAgICAgOm1lbnUtcG9zaXRpb249XCJIb3Jpem9udGFsRGlyZWN0aW9uLkxlZnRcIlxyXG4gICAgICAgICAgICA6bWVudS1pZD1cIm1lbnVJZFwiXHJcbiAgICAgICAgICAgIEBjbGljay5zdG9wLnByZXZlbnRcclxuICAgICAgICAgICAgQGNob3Nlbj1cIm9uQWN0aW9uQ2hvc2VuXCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjQ2OjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgICAgOmljb24tcmlnaHQ9XCJFbGxpcHNpc0hvcml6b250YWxJY29uXCJcclxuICAgICAgICAgICAgICBAY2xpY2s9XCJzaG93QWN0aW9uc01lbnUgPSAhc2hvd0FjdGlvbnNNZW51XCIgZGF0YS12LWluc3BlY3Rvcj1cInBhZ2VzL3Byb2plY3RzL1tpZF0vaW5kZXgudnVlOjU0OjEzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvTGF5b3V0TWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxMYXlvdXRUYWJzSG9yaXpvbnRhbCB2LW1vZGVsOmFjdGl2ZS1pdGVtPVwiYWN0aXZlUGFnZVRhYlwiIDppdGVtcz1cInBhZ2VUYWJJdGVtc1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJwYWdlcy9wcm9qZWN0cy9baWRdL2luZGV4LnZ1ZTo2Mzo3XCI+XHJcbiAgICAgICAgPE51eHRQYWdlIDpwcm9qZWN0PVwicHJvamVjdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJwYWdlcy9wcm9qZWN0cy9baWRdL2luZGV4LnZ1ZTo2NDo5XCIgLz5cclxuICAgICAgPC9MYXlvdXRUYWJzSG9yaXpvbnRhbD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxXb3Jrc3BhY2VNb3ZlUHJvamVjdFxyXG4gICAgICB2LWlmPVwicHJvamVjdCAmJiBpc1dvcmtzcGFjZXNFbmFibGVkXCJcclxuICAgICAgdi1tb2RlbDpvcGVuPVwic2hvd01vdmVEaWFsb2dcIlxyXG4gICAgICBldmVudC1zb3VyY2U9XCJwcm9qZWN0LXBhZ2VcIlxyXG4gICAgICA6cHJvamVjdD1cInByb2plY3RcIiBkYXRhLXYtaW5zcGVjdG9yPVwicGFnZXMvcHJvamVjdHMvW2lkXS9pbmRleC52dWU6Njg6NVwiXHJcbiAgICAvPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IFJvbGVzLCB0eXBlIE9wdGlvbmFsLCBSb2xlSW5mbywgdHlwZSBTdHJlYW1Sb2xlcyB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgZ3JhcGhxbCB9IGZyb20gJ35+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHsgcHJvamVjdFBhZ2VRdWVyeSB9IGZyb20gJ35+L2xpYi9wcm9qZWN0cy9ncmFwaHFsL3F1ZXJpZXMnXHJcbmltcG9ydCB7IHVzZUdlbmVyYWxQcm9qZWN0UGFnZVVwZGF0ZVRyYWNraW5nIH0gZnJvbSAnfn4vbGliL3Byb2plY3RzL2NvbXBvc2FibGVzL3Byb2plY3RQYWdlcydcclxuaW1wb3J0IHsgTGF5b3V0VGFic0hvcml6b250YWwsIHR5cGUgTGF5b3V0UGFnZVRhYkl0ZW0gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyBwcm9qZWN0Um91dGUsIHByb2plY3RXZWJob29rc1JvdXRlIH0gZnJvbSAnfi9saWIvY29tbW9uL2hlbHBlcnMvcm91dGUnXHJcbmltcG9ydCB0eXBlIHsgTGF5b3V0TWVudUl0ZW0gfSBmcm9tICd+fi9saWIvbGF5b3V0L2hlbHBlcnMvY29tcG9uZW50cydcclxuaW1wb3J0IHsgRWxsaXBzaXNIb3Jpem9udGFsSWNvbiB9IGZyb20gJ0BoZXJvaWNvbnMvdnVlLzI0L3NvbGlkJ1xyXG5pbXBvcnQgeyBIb3Jpem9udGFsRGlyZWN0aW9uIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9jb21wb3NhYmxlcy93aW5kb3cnXHJcbmltcG9ydCB7IHVzZUNvcHlQcm9qZWN0TGluayB9IGZyb20gJ35+L2xpYi9wcm9qZWN0cy9jb21wb3NhYmxlcy9wcm9qZWN0TWFuYWdlbWVudCdcclxuaW1wb3J0IHsgdXNlTWl4cGFuZWwgfSBmcm9tICd+L2xpYi9jb3JlL2NvbXBvc2FibGVzL21wJ1xyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VQcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgaWRcclxuICAgIGNyZWF0ZWRBdFxyXG4gICAgbW9kZWxDb3VudDogbW9kZWxzKGxpbWl0OiAwKSB7XHJcbiAgICAgIHRvdGFsQ291bnRcclxuICAgIH1cclxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcclxuICAgICAgdG90YWxDb3VudFxyXG4gICAgfVxyXG4gICAgd29ya3NwYWNlIHtcclxuICAgICAgaWRcclxuICAgICAgcGVybWlzc2lvbnMge1xyXG4gICAgICAgIGNhbkxpc3REYXNoYm9hcmRzIHtcclxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgY2FuUmVhZFNldHRpbmdzIHtcclxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgICAgIH1cclxuICAgICAgY2FuVXBkYXRlIHtcclxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgICAgIH1cclxuICAgICAgY2FuTW92ZVRvV29ya3NwYWNlIHtcclxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC4uLlByb2plY3RQYWdlVGVhbUludGVybmFsc19Qcm9qZWN0XHJcbiAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RIZWFkZXJcclxuICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xyXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RCYXNlXHJcbiAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzVGFiX1Byb2plY3RcclxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcclxuICAgIGhhc0FjY2Vzc1RvRGFzaGJvYXJkczogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBkYXNoYm9hcmRzKVxyXG4gIH1cclxuYClcclxuXHJcbmRlZmluZVBhZ2VNZXRhKHtcclxuICBtaWRkbGV3YXJlOiBbXHJcbiAgICAncmVxdWlyZS12YWxpZC1wcm9qZWN0JyxcclxuICAgIGZ1bmN0aW9uICh0bykge1xyXG4gICAgICAvLyBSZWRpcmVjdCBmcm9tIC9wcm9qZWN0cy86aWQvbW9kZWxzIHRvIC9wcm9qZWN0cy86aWRcclxuICAgICAgY29uc3QgcHJvamVjdElkID0gdG8ucGFyYW1zLmlkIGFzIHN0cmluZ1xyXG4gICAgICBpZiAoL1xcL21vZGVsc1xcLz8kL2kudGVzdCh0by5wYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0ZVRvKHByb2plY3RSb3V0ZShwcm9qZWN0SWQpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZWRpcmVjdCBmcm9tIC9wcm9qZWN0cy86aWQvd2ViaG9va3MgdG8gL3Byb2plY3RzLzppZC9zZXR0aW5ncy93ZWJob29rc1xyXG4gICAgICBpZiAoL1xcL3Byb2plY3RzXFwvXFx3Kj9cXC93ZWJob29rcy9pLnRlc3QodG8ucGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdGVUbyhwcm9qZWN0V2ViaG9va3NSb3V0ZShwcm9qZWN0SWQpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgXSxcclxuICBhbGlhczogWycvcHJvamVjdHMvOmlkL21vZGVscycsICcvcHJvamVjdHMvOmlkL3dlYmhvb2tzJ11cclxufSlcclxuXHJcbmVudW0gQWN0aW9uVHlwZXMge1xyXG4gIENvcHlMaW5rID0gJ2NvcHktbGluaycsXHJcbiAgTW92ZSA9ICdtb3ZlJ1xyXG59XHJcblxyXG5jb25zdCByb3V0ZSA9IHVzZVJvdXRlKClcclxuY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcclxuY29uc3QgY29weVByb2plY3RMaW5rID0gdXNlQ29weVByb2plY3RMaW5rKClcclxuY29uc3QgeyBpc0xvZ2dlZEluIH0gPSB1c2VBY3RpdmVVc2VyKClcclxuY29uc3QgbWl4cGFuZWwgPSB1c2VNaXhwYW5lbCgpXHJcblxyXG5jb25zdCBwcm9qZWN0SWQgPSBjb21wdXRlZCgoKSA9PiByb3V0ZS5wYXJhbXMuaWQgYXMgc3RyaW5nKVxyXG5jb25zdCB0b2tlbiA9IGNvbXB1dGVkKCgpID0+IHJvdXRlLnF1ZXJ5LnRva2VuIGFzIE9wdGlvbmFsPHN0cmluZz4pXHJcblxyXG5jb25zdCBwYWdlRmV0Y2hQb2xpY3kgPSB1c2VQYWdlUXVlcnlTdGFuZGFyZEZldGNoUG9saWN5KClcclxudXNlR2VuZXJhbFByb2plY3RQYWdlVXBkYXRlVHJhY2tpbmcoeyBwcm9qZWN0SWQgfSwgeyBub3RpZnlPblByb2plY3RVcGRhdGU6IHRydWUgfSlcclxuY29uc3QgeyByZXN1bHQ6IHByb2plY3RQYWdlUmVzdWx0IH0gPSB1c2VRdWVyeShcclxuICBwcm9qZWN0UGFnZVF1ZXJ5LFxyXG4gICgpID0+ICh7XHJcbiAgICBpZDogcHJvamVjdElkLnZhbHVlLFxyXG4gICAgLi4uKHRva2VuLnZhbHVlPy5sZW5ndGggPyB7IHRva2VuOiB0b2tlbi52YWx1ZSB9IDoge30pXHJcbiAgfSksXHJcbiAgKCkgPT4gKHtcclxuICAgIGZldGNoUG9saWN5OiBwYWdlRmV0Y2hQb2xpY3kudmFsdWVcclxuICB9KVxyXG4pXHJcblxyXG5jb25zdCBzaG93QWN0aW9uc01lbnUgPSByZWYoZmFsc2UpXHJcbmNvbnN0IG1lbnVJZCA9IHVzZUlkKClcclxuY29uc3Qgc2hvd01vdmVEaWFsb2cgPSByZWYoZmFsc2UpXHJcblxyXG5jb25zdCBwcm9qZWN0ID0gY29tcHV0ZWQoKCkgPT4gcHJvamVjdFBhZ2VSZXN1bHQudmFsdWU/LnByb2plY3QpXHJcbmNvbnN0IGludml0ZSA9IGNvbXB1dGVkKCgpID0+IHByb2plY3RQYWdlUmVzdWx0LnZhbHVlPy5wcm9qZWN0SW52aXRlIHx8IHVuZGVmaW5lZClcclxuY29uc3QgcHJvamVjdE5hbWUgPSBjb21wdXRlZCgoKSA9PlxyXG4gIHByb2plY3QudmFsdWU/Lm5hbWUubGVuZ3RoID8gcHJvamVjdC52YWx1ZS5uYW1lIDogJydcclxuKVxyXG5jb25zdCBtb2RlbENvdW50ID0gY29tcHV0ZWQoKCkgPT4gcHJvamVjdC52YWx1ZT8ubW9kZWxDb3VudC50b3RhbENvdW50KVxyXG5jb25zdCBjb21tZW50Q291bnQgPSBjb21wdXRlZCgoKSA9PiBwcm9qZWN0LnZhbHVlPy5jb21tZW50VGhyZWFkQ291bnQudG90YWxDb3VudClcclxuY29uc3QgY2FuTGlzdERhc2hib2FyZHMgPSBjb21wdXRlZChcclxuICAoKSA9PiBwcm9qZWN0LnZhbHVlPy53b3Jrc3BhY2U/LnBlcm1pc3Npb25zLmNhbkxpc3REYXNoYm9hcmRzLmF1dGhvcml6ZWRcclxuKVxyXG5jb25zdCBjYW5SZWFkU2V0dGluZ3MgPSBjb21wdXRlZCgoKSA9PiBwcm9qZWN0LnZhbHVlPy5wZXJtaXNzaW9ucy5jYW5SZWFkU2V0dGluZ3MpXHJcblxyXG5jb25zdCBjYW5VcGRhdGUgPSBjb21wdXRlZCgoKSA9PiBwcm9qZWN0LnZhbHVlPy5wZXJtaXNzaW9ucy5jYW5VcGRhdGUpXHJcbmNvbnN0IGhhc1JvbGUgPSBjb21wdXRlZCgoKSA9PiBwcm9qZWN0LnZhbHVlPy5yb2xlKVxyXG5jb25zdCB0ZWFtVXNlcnMgPSBjb21wdXRlZCgoKSA9PiBwcm9qZWN0LnZhbHVlPy50ZWFtLm1hcCgodCkgPT4gdC51c2VyKSB8fCBbXSlcclxuY29uc3QgYWN0aW9uc0l0ZW1zID0gY29tcHV0ZWQ8TGF5b3V0TWVudUl0ZW1bXVtdPigoKSA9PiB7XHJcbiAgY29uc3QgaXRlbXM6IExheW91dE1lbnVJdGVtW11bXSA9IFtcclxuICAgIFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnQ29weSBsaW5rJyxcclxuICAgICAgICBpZDogQWN0aW9uVHlwZXMuQ29weUxpbmtcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIF1cclxuXHJcbiAgaWYgKGlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWUgJiYgIXByb2plY3QudmFsdWU/LndvcmtzcGFjZT8uaWQgJiYgaGFzUm9sZS52YWx1ZSkge1xyXG4gICAgaXRlbXMucHVzaChbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ01vdmUgcHJvamVjdC4uLicsXHJcbiAgICAgICAgaWQ6IEFjdGlvblR5cGVzLk1vdmUsXHJcbiAgICAgICAgZGlzYWJsZWQ6ICFpc093bmVyLnZhbHVlLFxyXG4gICAgICAgIGRpc2FibGVkVG9vbHRpcDogJ09ubHkgdGhlIHByb2plY3Qgb3duZXIgY2FuIG1vdmUgdGhpcyBwcm9qZWN0IGludG8gYSB3b3Jrc3BhY2UnXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXRlbXNcclxufSlcclxuXHJcbnVzZUhlYWQoe1xyXG4gIHRpdGxlOiBwcm9qZWN0TmFtZSxcclxuICBtZXRhOiBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb2JvdHMnLFxyXG4gICAgICBjb250ZW50OiAnbm9pbmRleCwgbm9mb2xsb3cnXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5cclxuY29uc3Qgb25JbnZpdGVBY2NlcHRlZCA9IGFzeW5jIChwYXJhbXM6IHsgYWNjZXB0ZWQ6IGJvb2xlYW4gfSkgPT4ge1xyXG4gIGlmIChwYXJhbXMuYWNjZXB0ZWQpIHtcclxuICAgIGF3YWl0IHJvdXRlci5yZXBsYWNlKHtcclxuICAgICAgcXVlcnk6IHsgLi4ucm91dGUucXVlcnksIGFjY2VwdDogdW5kZWZpbmVkLCB0b2tlbjogdW5kZWZpbmVkIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpc093bmVyID0gY29tcHV0ZWQoKCkgPT4gcHJvamVjdC52YWx1ZT8ucm9sZSA9PT0gUm9sZXMuU3RyZWFtLk93bmVyKVxyXG5jb25zdCBpc0F1dG9tYXRlRW5hYmxlZCA9IHVzZUlzQXV0b21hdGVNb2R1bGVFbmFibGVkKClcclxuY29uc3QgaXNXb3Jrc3BhY2VzRW5hYmxlZCA9IHVzZUlzV29ya3NwYWNlc0VuYWJsZWQoKVxyXG5cclxuY29uc3QgcGFnZVRhYkl0ZW1zID0gY29tcHV0ZWQoKCk6IExheW91dFBhZ2VUYWJJdGVtW10gPT4ge1xyXG4gIGNvbnN0IGl0ZW1zOiBMYXlvdXRQYWdlVGFiSXRlbVtdID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ01vZGVscycsXHJcbiAgICAgIGlkOiAnbW9kZWxzJyxcclxuICAgICAgY291bnQ6IG1vZGVsQ291bnQudmFsdWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnRGlzY3Vzc2lvbnMnLFxyXG4gICAgICBpZDogJ2Rpc2N1c3Npb25zJyxcclxuICAgICAgY291bnQ6IGNvbW1lbnRDb3VudC52YWx1ZVxyXG4gICAgfVxyXG4gIF1cclxuXHJcbiAgaWYgKFxyXG4gICAgaXNBdXRvbWF0ZUVuYWJsZWQudmFsdWUgJiZcclxuICAgIHByb2plY3QudmFsdWU/LndvcmtzcGFjZSAmJlxyXG4gICAgcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlPy5yb2xlICE9PSBSb2xlcy5Xb3Jrc3BhY2UuR3Vlc3RcclxuICApIHtcclxuICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICB0aXRsZTogJ0F1dG9tYXRpb25zJyxcclxuICAgICAgaWQ6ICdhdXRvbWF0aW9ucydcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpZiAoY2FuUmVhZFNldHRpbmdzLnZhbHVlPy5hdXRob3JpemVkKSB7XHJcbiAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgdGl0bGU6ICdDb2xsYWJvcmF0b3JzJyxcclxuICAgICAgaWQ6ICdjb2xsYWJvcmF0b3JzJ1xyXG4gICAgfSlcclxuXHJcbiAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgdGl0bGU6ICdTZXR0aW5ncycsXHJcbiAgICAgIGlkOiAnc2V0dGluZ3MnXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaWYgKHByb2plY3QudmFsdWU/Lmhhc0FjY2Vzc1RvRGFzaGJvYXJkcyAmJiBjYW5MaXN0RGFzaGJvYXJkcy52YWx1ZSkge1xyXG4gICAgaXRlbXMucHVzaCh7XHJcbiAgICAgIHRpdGxlOiAnRGFzaGJvYXJkcycsXHJcbiAgICAgIGlkOiAnZGFzaGJvYXJkcydcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXRlbXNcclxufSlcclxuXHJcbmNvbnN0IGZpbmRUYWJCeUlkID0gKGlkOiBzdHJpbmcpID0+XHJcbiAgcGFnZVRhYkl0ZW1zLnZhbHVlLmZpbmQoKHRhYikgPT4gdGFiLmlkID09PSBpZCkgfHwgcGFnZVRhYkl0ZW1zLnZhbHVlWzBdXHJcblxyXG5jb25zdCBjb2xsYWJvcmF0b3JzVG9vbHRpcCA9IGNvbXB1dGVkKCgpID0+XHJcbiAgY2FuUmVhZFNldHRpbmdzLnZhbHVlPy5hdXRob3JpemVkXHJcbiAgICA/IGNhblVwZGF0ZS52YWx1ZT8uYXV0aG9yaXplZFxyXG4gICAgICA/ICdNYW5hZ2UgY29sbGFib3JhdG9ycydcclxuICAgICAgOiAnVmlldyBjb2xsYWJvcmF0b3JzJ1xyXG4gICAgOiBudWxsXHJcbilcclxuXHJcbmNvbnN0IGFjdGl2ZVBhZ2VUYWIgPSBjb21wdXRlZCh7XHJcbiAgZ2V0OiAoKSA9PiB7XHJcbiAgICBjb25zdCBwYXRoID0gcm91dGVyLmN1cnJlbnRSb3V0ZS52YWx1ZS5wYXRoXHJcbiAgICBpZiAoL1xcL2Rpc2N1c3Npb25zXFwvPyQvaS50ZXN0KHBhdGgpKSByZXR1cm4gZmluZFRhYkJ5SWQoJ2Rpc2N1c3Npb25zJylcclxuICAgIGlmICgvXFwvYXV0b21hdGlvbnNcXC8/LiokL2kudGVzdChwYXRoKSkgcmV0dXJuIGZpbmRUYWJCeUlkKCdhdXRvbWF0aW9ucycpXHJcbiAgICBpZiAoL1xcL2FjY1xcLz8uKiQvaS50ZXN0KHBhdGgpKSByZXR1cm4gZmluZFRhYkJ5SWQoJ2FjYycpXHJcbiAgICBpZiAoL1xcL2Rhc2hib2FyZHNcXC8/L2kudGVzdChwYXRoKSkgcmV0dXJuIGZpbmRUYWJCeUlkKCdkYXNoYm9hcmRzJylcclxuICAgIGlmICgvXFwvY29sbGFib3JhdG9yc1xcLz8vaS50ZXN0KHBhdGgpICYmIGNhblJlYWRTZXR0aW5ncy52YWx1ZT8uYXV0aG9yaXplZClcclxuICAgICAgcmV0dXJuIGZpbmRUYWJCeUlkKCdjb2xsYWJvcmF0b3JzJylcclxuICAgIGlmICgvXFwvc2V0dGluZ3NcXC8/L2kudGVzdChwYXRoKSAmJiBjYW5SZWFkU2V0dGluZ3MudmFsdWU/LmF1dGhvcml6ZWQpXHJcbiAgICAgIHJldHVybiBmaW5kVGFiQnlJZCgnc2V0dGluZ3MnKVxyXG4gICAgcmV0dXJuIGZpbmRUYWJCeUlkKCdtb2RlbHMnKVxyXG4gIH0sXHJcbiAgc2V0OiAodmFsOiBMYXlvdXRQYWdlVGFiSXRlbSkgPT4ge1xyXG4gICAgaWYgKCF2YWwpIHJldHVyblxyXG4gICAgc3dpdGNoICh2YWwuaWQpIHtcclxuICAgICAgY2FzZSAnbW9kZWxzJzpcclxuICAgICAgICByb3V0ZXIucHVzaCh7IHBhdGg6IHByb2plY3RSb3V0ZShwcm9qZWN0SWQudmFsdWUsICdtb2RlbHMnKSB9KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2Rpc2N1c3Npb25zJzpcclxuICAgICAgICByb3V0ZXIucHVzaCh7IHBhdGg6IHByb2plY3RSb3V0ZShwcm9qZWN0SWQudmFsdWUsICdkaXNjdXNzaW9ucycpIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnYWNjJzpcclxuICAgICAgICByb3V0ZXIucHVzaCh7IHBhdGg6IHByb2plY3RSb3V0ZShwcm9qZWN0SWQudmFsdWUsICdhY2MnKSB9KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2F1dG9tYXRpb25zJzpcclxuICAgICAgICByb3V0ZXIucHVzaCh7IHBhdGg6IHByb2plY3RSb3V0ZShwcm9qZWN0SWQudmFsdWUsICdhdXRvbWF0aW9ucycpIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnY29sbGFib3JhdG9ycyc6XHJcbiAgICAgICAgaWYgKGNhblJlYWRTZXR0aW5ncy52YWx1ZT8uYXV0aG9yaXplZCkge1xyXG4gICAgICAgICAgcm91dGVyLnB1c2goeyBwYXRoOiBwcm9qZWN0Um91dGUocHJvamVjdElkLnZhbHVlLCAnY29sbGFib3JhdG9ycycpIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2Rhc2hib2FyZHMnOlxyXG4gICAgICAgIGlmIChwcm9qZWN0LnZhbHVlPy5oYXNBY2Nlc3NUb0Rhc2hib2FyZHMpIHtcclxuICAgICAgICAgIHJvdXRlci5wdXNoKHsgcGF0aDogcHJvamVjdFJvdXRlKHByb2plY3RJZC52YWx1ZSwgJ2Rhc2hib2FyZHMnKSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XHJcbiAgICAgICAgaWYgKGNhblJlYWRTZXR0aW5ncy52YWx1ZT8uYXV0aG9yaXplZCkge1xyXG4gICAgICAgICAgcm91dGVyLnB1c2goeyBwYXRoOiBwcm9qZWN0Um91dGUocHJvamVjdElkLnZhbHVlLCAnc2V0dGluZ3MnKSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IHNob3VsZFNob3dXb3Jrc3BhY2VBbGVydCA9IGNvbXB1dGVkKFxyXG4gICgpID0+XHJcbiAgICBpc1dvcmtzcGFjZXNFbmFibGVkLnZhbHVlICYmXHJcbiAgICBpc0xvZ2dlZEluLnZhbHVlICYmXHJcbiAgICAhcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlICYmXHJcbiAgICBoYXNSb2xlLnZhbHVlXHJcbilcclxuXHJcbmNvbnN0IGRpc2FibGVMZWdhY3lNb3ZlUHJvamVjdEJ1dHRvbiA9IGNvbXB1dGVkKFxyXG4gICgpID0+ICFwcm9qZWN0LnZhbHVlPy5wZXJtaXNzaW9ucy5jYW5Nb3ZlVG9Xb3Jrc3BhY2UuYXV0aG9yaXplZFxyXG4pXHJcblxyXG5jb25zdCBvbk1vdmVQcm9qZWN0ID0gKCkgPT4ge1xyXG4gIG1peHBhbmVsLnRyYWNrKCdNb3ZlIFByb2plY3QgQ1RBIENsaWNrZWQnLCB7XHJcbiAgICBsb2NhdGlvbjogJ3Byb2plY3QnXHJcbiAgfSlcclxuICBzaG93TW92ZURpYWxvZy52YWx1ZSA9IHRydWVcclxufVxyXG5cclxuY29uc3Qgb25BY3Rpb25DaG9zZW4gPSAocGFyYW1zOiB7IGl0ZW06IExheW91dE1lbnVJdGVtOyBldmVudDogTW91c2VFdmVudCB9KSA9PiB7XHJcbiAgY29uc3QgeyBpdGVtIH0gPSBwYXJhbXNcclxuXHJcbiAgc3dpdGNoIChpdGVtLmlkKSB7XHJcbiAgICBjYXNlIEFjdGlvblR5cGVzLkNvcHlMaW5rOlxyXG4gICAgICBjb3B5UHJvamVjdExpbmsocHJvamVjdElkLnZhbHVlKVxyXG4gICAgICBicmVha1xyXG4gICAgY2FzZSBBY3Rpb25UeXBlcy5Nb3ZlOlxyXG4gICAgICBvbk1vdmVQcm9qZWN0KClcclxuICAgICAgYnJlYWtcclxuICB9XHJcbn1cclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9wYWdlcy9wcm9qZWN0cy9baWRdL2luZGV4LnZ1ZSJ9 |