import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/saved-views/panel/views/Group.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/saved-views/panel/views/group/Inner.vue"; import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { LayoutMenu 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/presentation/ShareDialog.vue"; import { LayoutDisclosure as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createVNode as __createVNode,createBlock as __createBlock,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29" function _interopVNode(vnode) { if (vnode && vnode.props && 'data-v-inspector' in vnode.props) { const data = vnode.props['data-v-inspector'] delete vnode.props['data-v-inspector'] Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false }) } return vnode } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { StringEnum, throwUncoveredError } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { useMutationLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { Ellipsis, Plus, Play } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { ToastNotificationType } from "/_nuxt/lib/common/composables/toast.ts"; import { useCreateSavedView, useUpdateSavedViewGroup } from "/_nuxt/lib/viewer/composables/savedViews/management.ts"; import { useDraggableViewTargetGroup } from "/_nuxt/lib/viewer/composables/savedViews/ui.ts"; import { presentationRoute } from "/_nuxt/lib/common/helpers/route.ts"; import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts"; import { ref, computed, useId } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useGlobalToast } from "/_nuxt/composables/globals.ts"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ViewerSavedViewsPanelViewsGroup", props: /* @__PURE__ */ _mergeModels({ project: { type: Object, required: true }, group: { type: Object, required: true }, viewsType: { type: null, required: true }, search: { type: String, required: false } }, { "open": { type: Boolean }, "openModifiers": {}, "renameMode": { type: Boolean }, "renameModeModifiers": {} }), emits: /* @__PURE__ */ _mergeModels(["delete-group", "rename-group"], ["update:open", "update:renameMode"]), setup(__props, { expose: __expose, emit: __emit }) { __expose(); const { getTooltipProps } = useSmartTooltipDelay(); const MenuItems = StringEnum(["Delete", "Share", "Rename"]); graphql(` fragment ViewerSavedViewsPanelViewsGroup_Project on Project { id permissions { canCreateSavedView { ...FullPermissionCheckResult } } workspace { id hasAccessToFeature(featureName: presentations) } } `); graphql(` fragment ViewerSavedViewsPanelViewsGroup_SavedViewGroup on SavedViewGroup { id isUngroupedViewsGroup resourceIds title permissions { canUpdate { ...FullPermissionCheckResult } } ...ViewerSavedViewsPanelViewsGroupInner_SavedViewGroup ...ViewerSavedViewsPanelViewsGroupDeleteDialog_SavedViewGroup ...UseUpdateSavedViewGroup_SavedViewGroup ...UseDraggableViewTargetGroup_SavedViewGroup } `); graphql(` fragment ViewerSavedViewsPanelViewsGroup_SavedViewGroup_Paginated on SavedViewGroup { id views(input: $savedViewsInput) { cursor totalCount items { id ...ViewerSavedViewsPanelView_SavedView } } } `); const emit = __emit; const props = __props; const open = _useModel(__props, "open"); const viewCount = ref(0); const { triggerNotification } = useGlobalToast(); const isLoading = useMutationLoading(); const createView = useCreateSavedView(); const updateGroup = useUpdateSavedViewGroup(); const { on, classes: dropZoneClasses } = useDraggableViewTargetGroup({ group: computed(() => props.group), onMoved: () => { if (!open.value) { open.value = true; } }, isGroupOpen: computed(() => !!open.value), viewCount }); const menuId = useId(); const renameMode = _useModel(__props, "renameMode"); const showMenu = ref(false); const showShareDialog = ref(false); const isUngroupedGroup = computed(() => props.group.isUngroupedViewsGroup); const canUpdate = computed(() => props.group.permissions.canUpdate); const canCreateView = computed(() => props.project.permissions.canCreateSavedView); const menuItems = computed(() => { const items = []; items.push([ { id: MenuItems.Rename, title: "Rename group", disabled: !canUpdate.value?.authorized || isLoading.value, disabledTooltip: canUpdate.value.errorMessage }, { id: MenuItems.Share, title: "Share presentation...", disabled: isLoading.value, disabledTooltip: canUpdate.value.errorMessage }, { id: MenuItems.Delete, title: "Delete group...", disabled: !canUpdate.value?.authorized || isLoading.value, disabledTooltip: canUpdate.value.errorMessage } ]); return items; }); const onActionChosen = async (item) => { switch (item.id) { case MenuItems.Delete: emit("delete-group", props.group); break; case MenuItems.Rename: emit("rename-group", props.group); break; case MenuItems.Share: showShareDialog.value = true; break; default: throwUncoveredError(item.id); } }; const onPresentGroup = () => { window.open(presentationRoute(props.project.id, props.group.id), "_blank"); }; const onAddGroupView = async () => { await createView({ groupId: props.group.id }); open.value = true; }; const onRename = async (newName) => { if (!newName.trim() || newName.length > 255) { triggerNotification({ type: ToastNotificationType.Danger, title: "Name must be between 1 and 255 characters long" }); renameMode.value = false; return; } if (props.group.title === newName) { renameMode.value = false; return; } const res = await updateGroup({ group: props.group, update: { name: newName } }); if (res?.id) { renameMode.value = false; } }; const __returned__ = { getTooltipProps, MenuItems, emit, props, open, viewCount, triggerNotification, isLoading, createView, updateGroup, on, dropZoneClasses, menuId, renameMode, showMenu, showShareDialog, isUngroupedGroup, canUpdate, canCreateView, menuItems, onActionChosen, onPresentGroup, onAddGroupView, onRename, get Ellipsis() { return Ellipsis; }, get Plus() { return Plus; }, get Play() { return Play; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, withModifiers as _withModifiers, normalizeClass as _normalizeClass, toHandlers as _toHandlers, mergeProps as _mergeProps } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { key: 1, "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:43:9" }; const _hoisted_2 = { "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:53:9" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ViewerSavedViewsPanelViewsGroupInner = __nuxt_component_0; const _component_FormButton = __nuxt_component_1; const _component_LayoutMenu = __nuxt_component_2; const _component_PresentationShareDialog = __nuxt_component_3; const _component_LayoutDisclosure = __nuxt_component_4; const _directive_tippy = _resolveDirective("tippy"); return _openBlock(), _createBlock(_component_LayoutDisclosure, _mergeProps({ open: $setup.open, "onUpdate:open": _cache[6] || (_cache[6] = ($event) => $setup.open = $event), "edit-title": $setup.renameMode, "onUpdate:editTitle": _cache[7] || (_cache[7] = ($event) => $setup.renameMode = $event), color: "subtle", title: $props.group.title, "lazy-load": "", class: $setup.dropZoneClasses, "onUpdate:title": $setup.onRename }, _toHandlers($setup.on), { "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:3:3" }), { "title-actions": _withCtx(() => [ _createElementVNode( "div", { class: _normalizeClass(["flex gap-0.5 items-center lg:group-hover/disclosure:opacity-100", { "lg:opacity-0": !$setup.showMenu }]), onClick: _cache[4] || (_cache[4] = _withModifiers(() => { }, ["stop"])), "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:20:7" }, [ !$setup.isUngroupedGroup ? (_openBlock(), _createBlock(_component_LayoutMenu, { key: 0, open: $setup.showMenu, "onUpdate:open": _cache[2] || (_cache[2] = ($event) => $setup.showMenu = $event), items: $setup.menuItems, "menu-id": $setup.menuId, "mount-menu-on-body": "", "show-ticks": "right", onChosen: _cache[3] || (_cache[3] = ({ item: actionItem }) => $setup.onActionChosen(actionItem)), "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:25:9" }, { default: _withCtx(() => [ _createVNode(_component_FormButton, { name: "viewActions", size: "sm", color: "subtle", "icon-left": $setup.Ellipsis, "hide-text": "", onClick: _cache[1] || (_cache[1] = ($event) => $setup.showMenu = !$setup.showMenu), "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:34:11" }, null, 8, ["icon-left"]) ]), _: 1 /* STABLE */ }, 8, ["open", "items", "menu-id"])) : _createCommentVNode("v-if", true), !$setup.isUngroupedGroup ? _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_1, [ _createVNode(_component_FormButton, { size: "sm", color: "subtle", "icon-left": $setup.Play, "hide-text": "", name: "presentGroup", onClick: $setup.onPresentGroup, "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:44:11" }, null, 8, ["icon-left"]) ])), [ [_directive_tippy, $setup.getTooltipProps("Present")] ]) : _createCommentVNode("v-if", true), _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_2, [ _withDirectives(_createVNode(_component_FormButton, { size: "sm", color: "subtle", "icon-left": $setup.Plus, "hide-text": "", name: "addGroupView", disabled: !$setup.canCreateView.authorized || $setup.isLoading, onClick: $setup.onAddGroupView, "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:54:11" }, null, 8, ["icon-left", "disabled"]), [ [_directive_tippy, $setup.getTooltipProps("Create view")] ]) ])), [ [_directive_tippy, $setup.canCreateView?.errorMessage] ]) ], 2 /* CLASS */ ), _createVNode(_component_PresentationShareDialog, { open: $setup.showShareDialog, "onUpdate:open": _cache[5] || (_cache[5] = ($event) => $setup.showShareDialog = $event), "project-id": $props.project.id, "presentation-id": $props.group.id, "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:67:7" }, null, 8, ["open", "project-id", "presentation-id"]) ]), default: _withCtx(() => [ _createVNode(_component_ViewerSavedViewsPanelViewsGroupInner, { group: $props.group, search: $props.search, "views-type": $props.viewsType, onViewCountUpdated: _cache[0] || (_cache[0] = (count) => $setup.viewCount = count), "data-v-inspector": "components/viewer/saved-views/panel/views/Group.vue:13:5" }, null, 8, ["group", "search", "views-type"]) ]), _: 1 /* STABLE */ }, 16, ["open", "edit-title", "title", "class"]); } _sfc_main.__hmrId = "a6d80b0a"; 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/views/Group.vue"]]); //# sourceMappingURL=data:application/json;base64,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U0FBTztBQUFBLGNBQWdCLG9CQUFpQjtBQUFBO2lDQVBoQyx1QkFBZTtBQUFBOzsrQkFGZCxzQkFBZSxZQUFZO0FBQUE7Ozs7O01BYzNDLGFBSUU7QUFBQSxRQUhRLE1BQU07QUFBQSx3RkFBZTtBQUFBLFFBQzVCLGNBQVksZUFBUTtBQUFBLFFBQ3BCLG1CQUFpQixhQUFNO0FBQUEsUUFBSSxvQkFBaUI7QUFBQTs7c0JBekRqRCxNQUtFO0FBQUEsTUFMRixhQUtFO0FBQUEsUUFKQyxPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixjQUFZO0FBQUEsUUFDWixvQkFBa0IsMkJBQUcsVUFBVyxtQkFBWTtBQUFBLFFBQVEsb0JBQWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkdyb3VwLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZWpzLWFjY2Vzc2liaWxpdHkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zIC0tPlxyXG48dGVtcGxhdGU+XHJcbiAgPExheW91dERpc2Nsb3N1cmVcclxuICAgIHYtbW9kZWw6b3Blbj1cIm9wZW5cIlxyXG4gICAgdi1tb2RlbDplZGl0LXRpdGxlPVwicmVuYW1lTW9kZVwiXHJcbiAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICA6dGl0bGU9XCJncm91cC50aXRsZVwiXHJcbiAgICBsYXp5LWxvYWRcclxuICAgIDpjbGFzcz1cImRyb3Bab25lQ2xhc3Nlc1wiXHJcbiAgICBAdXBkYXRlOnRpdGxlPVwib25SZW5hbWVcIlxyXG4gICAgdi1vbj1cIm9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL3ZpZXdzL0dyb3VwLnZ1ZTozOjNcIlxyXG4gID5cclxuICAgIDxWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJcclxuICAgICAgOmdyb3VwPVwiZ3JvdXBcIlxyXG4gICAgICA6c2VhcmNoPVwic2VhcmNoXCJcclxuICAgICAgOnZpZXdzLXR5cGU9XCJ2aWV3c1R5cGVcIlxyXG4gICAgICBAdmlldy1jb3VudC11cGRhdGVkPVwiKGNvdW50KSA9PiAodmlld0NvdW50ID0gY291bnQpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL3ZpZXdzL0dyb3VwLnZ1ZToxMzo1XCJcclxuICAgIC8+XHJcbiAgICA8dGVtcGxhdGUgI3RpdGxlLWFjdGlvbnM+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTAuNSBpdGVtcy1jZW50ZXIgbGc6Z3JvdXAtaG92ZXIvZGlzY2xvc3VyZTpvcGFjaXR5LTEwMFwiXHJcbiAgICAgICAgOmNsYXNzPVwieyAnbGc6b3BhY2l0eS0wJzogIXNob3dNZW51IH1cIlxyXG4gICAgICAgIEBjbGljay5zdG9wIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC92aWV3cy9Hcm91cC52dWU6MjA6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8TGF5b3V0TWVudVxyXG4gICAgICAgICAgdi1pZj1cIiFpc1VuZ3JvdXBlZEdyb3VwXCJcclxuICAgICAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dNZW51XCJcclxuICAgICAgICAgIDppdGVtcz1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICA6bWVudS1pZD1cIm1lbnVJZFwiXHJcbiAgICAgICAgICBtb3VudC1tZW51LW9uLWJvZHlcclxuICAgICAgICAgIHNob3ctdGlja3M9XCJyaWdodFwiXHJcbiAgICAgICAgICBAY2hvc2VuPVwiKHsgaXRlbTogYWN0aW9uSXRlbSB9KSA9PiBvbkFjdGlvbkNob3NlbihhY3Rpb25JdGVtKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC92aWV3cy9Hcm91cC52dWU6MjU6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgICAgbmFtZT1cInZpZXdBY3Rpb25zXCJcclxuICAgICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiRWxsaXBzaXNcIlxyXG4gICAgICAgICAgICBoaWRlLXRleHRcclxuICAgICAgICAgICAgQGNsaWNrPVwic2hvd01lbnUgPSAhc2hvd01lbnVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvdmlld3MvR3JvdXAudnVlOjM0OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9MYXlvdXRNZW51PlxyXG4gICAgICAgIDxkaXYgdi1pZj1cIiFpc1VuZ3JvdXBlZEdyb3VwXCIgdi10aXBweT1cImdldFRvb2x0aXBQcm9wcygnUHJlc2VudCcpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL3ZpZXdzL0dyb3VwLnZ1ZTo0Mzo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICAgICAgICAgIDppY29uLWxlZnQ9XCJQbGF5XCJcclxuICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgIG5hbWU9XCJwcmVzZW50R3JvdXBcIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJvblByZXNlbnRHcm91cFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC92aWV3cy9Hcm91cC52dWU6NDQ6MTFcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHYtdGlwcHk9XCJjYW5DcmVhdGVWaWV3Py5lcnJvck1lc3NhZ2VcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvdmlld3MvR3JvdXAudnVlOjUzOjlcIj5cclxuICAgICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICAgIHYtdGlwcHk9XCJnZXRUb29sdGlwUHJvcHMoJ0NyZWF0ZSB2aWV3JylcIlxyXG4gICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICAgICAgICAgIDppY29uLWxlZnQ9XCJQbHVzXCJcclxuICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgIG5hbWU9XCJhZGRHcm91cFZpZXdcIlxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhY2FuQ3JlYXRlVmlldy5hdXRob3JpemVkIHx8IGlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgIEBjbGljaz1cIm9uQWRkR3JvdXBWaWV3XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL3ZpZXdzL0dyb3VwLnZ1ZTo1NDoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxQcmVzZW50YXRpb25TaGFyZURpYWxvZ1xyXG4gICAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dTaGFyZURpYWxvZ1wiXHJcbiAgICAgICAgOnByb2plY3QtaWQ9XCJwcm9qZWN0LmlkXCJcclxuICAgICAgICA6cHJlc2VudGF0aW9uLWlkPVwiZ3JvdXAuaWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvdmlld3MvR3JvdXAudnVlOjY3OjdcIlxyXG4gICAgICAvPlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICA8L0xheW91dERpc2Nsb3N1cmU+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IFN0cmluZ0VudW0sIHRocm93VW5jb3ZlcmVkRXJyb3IsIHR5cGUgU3RyaW5nRW51bVZhbHVlcyB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXRNZW51SXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IHVzZU11dGF0aW9uTG9hZGluZyB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IEVsbGlwc2lzLCBQbHVzLCBQbGF5IH0gZnJvbSAnbHVjaWRlLXZ1ZS1uZXh0J1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwnXHJcbmltcG9ydCB0eXBlIHtcclxuICBVc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50LFxyXG4gIFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfUHJvamVjdEZyYWdtZW50LFxyXG4gIFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudCxcclxuICBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwRGVsZXRlRGlhbG9nX1NhdmVkVmlld0dyb3VwRnJhZ21lbnRcclxufSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQgeyBUb2FzdE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICd+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvdG9hc3QnXHJcbmltcG9ydCB7XHJcbiAgdXNlQ3JlYXRlU2F2ZWRWaWV3LFxyXG4gIHVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwXHJcbn0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NhdmVkVmlld3MvbWFuYWdlbWVudCdcclxuaW1wb3J0IHR5cGUgeyBWaWV3c1R5cGUgfSBmcm9tICd+L2xpYi92aWV3ZXIvaGVscGVycy9zYXZlZFZpZXdzJ1xyXG5pbXBvcnQgeyB1c2VEcmFnZ2FibGVWaWV3VGFyZ2V0R3JvdXAgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy91aSdcclxuaW1wb3J0IHsgcHJlc2VudGF0aW9uUm91dGUgfSBmcm9tICd+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuXHJcbmNvbnN0IHsgZ2V0VG9vbHRpcFByb3BzIH0gPSB1c2VTbWFydFRvb2x0aXBEZWxheSgpXHJcblxyXG5jb25zdCBNZW51SXRlbXMgPSBTdHJpbmdFbnVtKFsnRGVsZXRlJywgJ1NoYXJlJywgJ1JlbmFtZSddKVxyXG50eXBlIE1lbnVJdGVtcyA9IFN0cmluZ0VudW1WYWx1ZXM8dHlwZW9mIE1lbnVJdGVtcz5cclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfUHJvamVjdCBvbiBQcm9qZWN0IHtcclxuICAgIGlkXHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhbkNyZWF0ZVNhdmVkVmlldyB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3b3Jrc3BhY2Uge1xyXG4gICAgICBpZFxyXG4gICAgICBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHByZXNlbnRhdGlvbnMpXHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XHJcbiAgICBpZFxyXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXHJcbiAgICByZXNvdXJjZUlkc1xyXG4gICAgdGl0bGVcclxuICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgY2FuVXBkYXRlIHtcclxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cFxyXG4gICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cERlbGV0ZURpYWxvZ19TYXZlZFZpZXdHcm91cFxyXG4gICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBcclxuICAgIC4uLlVzZURyYWdnYWJsZVZpZXdUYXJnZXRHcm91cF9TYXZlZFZpZXdHcm91cFxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkIG9uIFNhdmVkVmlld0dyb3VwIHtcclxuICAgIGlkXHJcbiAgICB2aWV3cyhpbnB1dDogJHNhdmVkVmlld3NJbnB1dCkge1xyXG4gICAgICBjdXJzb3JcclxuICAgICAgdG90YWxDb3VudFxyXG4gICAgICBpdGVtcyB7XHJcbiAgICAgICAgaWRcclxuICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3X1NhdmVkVmlld1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICAnZGVsZXRlLWdyb3VwJzogW1xyXG4gICAgZ3JvdXA6IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudFxyXG4gIF1cclxuICAncmVuYW1lLWdyb3VwJzogW2dyb3VwOiBVc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50XVxyXG59PigpXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBwcm9qZWN0OiBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1Byb2plY3RGcmFnbWVudFxyXG4gIGdyb3VwOiBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwRnJhZ21lbnRcclxuICB2aWV3c1R5cGU6IFZpZXdzVHlwZVxyXG4gIHNlYXJjaD86IHN0cmluZ1xyXG59PigpXHJcblxyXG5jb25zdCBvcGVuID0gZGVmaW5lTW9kZWw8Ym9vbGVhbj4oJ29wZW4nKVxyXG5jb25zdCB2aWV3Q291bnQgPSByZWYoMClcclxuXHJcbmNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG5jb25zdCBpc0xvYWRpbmcgPSB1c2VNdXRhdGlvbkxvYWRpbmcoKVxyXG5jb25zdCBjcmVhdGVWaWV3ID0gdXNlQ3JlYXRlU2F2ZWRWaWV3KClcclxuY29uc3QgdXBkYXRlR3JvdXAgPSB1c2VVcGRhdGVTYXZlZFZpZXdHcm91cCgpXHJcbmNvbnN0IHsgb24sIGNsYXNzZXM6IGRyb3Bab25lQ2xhc3NlcyB9ID0gdXNlRHJhZ2dhYmxlVmlld1RhcmdldEdyb3VwKHtcclxuICBncm91cDogY29tcHV0ZWQoKCkgPT4gcHJvcHMuZ3JvdXApLFxyXG4gIG9uTW92ZWQ6ICgpID0+IHtcclxuICAgIC8vIEF1dG8tb3BlbiB0aGUgZ3JvdXAgaWYgaXQgd2FzIGNsb3NlZFxyXG4gICAgaWYgKCFvcGVuLnZhbHVlKSB7XHJcbiAgICAgIG9wZW4udmFsdWUgPSB0cnVlXHJcbiAgICB9XHJcbiAgfSxcclxuICBpc0dyb3VwT3BlbjogY29tcHV0ZWQoKCkgPT4gISFvcGVuLnZhbHVlKSxcclxuICB2aWV3Q291bnRcclxufSlcclxuY29uc3QgbWVudUlkID0gdXNlSWQoKVxyXG5cclxuY29uc3QgcmVuYW1lTW9kZSA9IGRlZmluZU1vZGVsPGJvb2xlYW4+KCdyZW5hbWVNb2RlJylcclxuXHJcbmNvbnN0IHNob3dNZW51ID0gcmVmKGZhbHNlKVxyXG5jb25zdCBzaG93U2hhcmVEaWFsb2cgPSByZWYoZmFsc2UpXHJcblxyXG5jb25zdCBpc1VuZ3JvdXBlZEdyb3VwID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMuZ3JvdXAuaXNVbmdyb3VwZWRWaWV3c0dyb3VwKVxyXG5jb25zdCBjYW5VcGRhdGUgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5ncm91cC5wZXJtaXNzaW9ucy5jYW5VcGRhdGUpXHJcbmNvbnN0IGNhbkNyZWF0ZVZpZXcgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5wcm9qZWN0LnBlcm1pc3Npb25zLmNhbkNyZWF0ZVNhdmVkVmlldylcclxuXHJcbmNvbnN0IG1lbnVJdGVtcyA9IGNvbXB1dGVkKCgpOiBMYXlvdXRNZW51SXRlbTxNZW51SXRlbXM+W11bXSA9PiB7XHJcbiAgY29uc3QgaXRlbXM6IExheW91dE1lbnVJdGVtPE1lbnVJdGVtcz5bXVtdID0gW11cclxuXHJcbiAgaXRlbXMucHVzaChbXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuUmVuYW1lLFxyXG4gICAgICB0aXRsZTogJ1JlbmFtZSBncm91cCcsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuVXBkYXRlLnZhbHVlPy5hdXRob3JpemVkIHx8IGlzTG9hZGluZy52YWx1ZSxcclxuICAgICAgZGlzYWJsZWRUb29sdGlwOiBjYW5VcGRhdGUudmFsdWUuZXJyb3JNZXNzYWdlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogTWVudUl0ZW1zLlNoYXJlLFxyXG4gICAgICB0aXRsZTogJ1NoYXJlIHByZXNlbnRhdGlvbi4uLicsXHJcbiAgICAgIGRpc2FibGVkOiBpc0xvYWRpbmcudmFsdWUsXHJcbiAgICAgIGRpc2FibGVkVG9vbHRpcDogY2FuVXBkYXRlLnZhbHVlLmVycm9yTWVzc2FnZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5EZWxldGUsXHJcbiAgICAgIHRpdGxlOiAnRGVsZXRlIGdyb3VwLi4uJyxcclxuICAgICAgZGlzYWJsZWQ6ICFjYW5VcGRhdGUudmFsdWU/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhblVwZGF0ZS52YWx1ZS5lcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICBdKVxyXG5cclxuICByZXR1cm4gaXRlbXNcclxufSlcclxuXHJcbmNvbnN0IG9uQWN0aW9uQ2hvc2VuID0gYXN5bmMgKGl0ZW06IExheW91dE1lbnVJdGVtPE1lbnVJdGVtcz4pID0+IHtcclxuICBzd2l0Y2ggKGl0ZW0uaWQpIHtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkRlbGV0ZTpcclxuICAgICAgZW1pdCgnZGVsZXRlLWdyb3VwJywgcHJvcHMuZ3JvdXApXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlIE1lbnVJdGVtcy5SZW5hbWU6XHJcbiAgICAgIGVtaXQoJ3JlbmFtZS1ncm91cCcsIHByb3BzLmdyb3VwKVxyXG4gICAgICBicmVha1xyXG4gICAgY2FzZSBNZW51SXRlbXMuU2hhcmU6XHJcbiAgICAgIHNob3dTaGFyZURpYWxvZy52YWx1ZSA9IHRydWVcclxuICAgICAgYnJlYWtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93VW5jb3ZlcmVkRXJyb3IoaXRlbS5pZClcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IG9uUHJlc2VudEdyb3VwID0gKCkgPT4ge1xyXG4gIHdpbmRvdy5vcGVuKHByZXNlbnRhdGlvblJvdXRlKHByb3BzLnByb2plY3QuaWQsIHByb3BzLmdyb3VwLmlkKSwgJ19ibGFuaycpXHJcbn1cclxuXHJcbmNvbnN0IG9uQWRkR3JvdXBWaWV3ID0gYXN5bmMgKCkgPT4ge1xyXG4gIGF3YWl0IGNyZWF0ZVZpZXcoe1xyXG4gICAgZ3JvdXBJZDogcHJvcHMuZ3JvdXAuaWRcclxuICB9KVxyXG4gIG9wZW4udmFsdWUgPSB0cnVlXHJcbn1cclxuXHJcbmNvbnN0IG9uUmVuYW1lID0gYXN5bmMgKG5ld05hbWU6IHN0cmluZykgPT4ge1xyXG4gIGlmICghbmV3TmFtZS50cmltKCkgfHwgbmV3TmFtZS5sZW5ndGggPiAyNTUpIHtcclxuICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICB0aXRsZTogJ05hbWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIGxvbmcnXHJcbiAgICB9KVxyXG4gICAgcmVuYW1lTW9kZS52YWx1ZSA9IGZhbHNlXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGlmIChwcm9wcy5ncm91cC50aXRsZSA9PT0gbmV3TmFtZSkge1xyXG4gICAgcmVuYW1lTW9kZS52YWx1ZSA9IGZhbHNlXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGNvbnN0IHJlcyA9IGF3YWl0IHVwZGF0ZUdyb3VwKHtcclxuICAgIGdyb3VwOiBwcm9wcy5ncm91cCxcclxuICAgIHVwZGF0ZToge1xyXG4gICAgICBuYW1lOiBuZXdOYW1lXHJcbiAgICB9XHJcbiAgfSlcclxuICBpZiAocmVzPy5pZCkge1xyXG4gICAgcmVuYW1lTW9kZS52YWx1ZSA9IGZhbHNlXHJcbiAgfVxyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvdmlld3MvR3JvdXAudnVlIn0=