170 lines
17 KiB
Plaintext
170 lines
17 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/common/tiptap/TextEditor.vue");/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createVNode as __createVNode,createElementBlock as __createElementBlock } 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)) }
|
|
/* 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 { EditorContent, Editor } from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_vue-3.js?v=e4f18c29";
|
|
import { getEditorExtensions } from "/_nuxt/lib/common/helpers/tiptap.ts";
|
|
import { onKeyDown } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
import { noop } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
|
|
|
|
import { ref, computed, watch, onBeforeUnmount } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "CommonTiptapTextEditor",
|
|
props: {
|
|
modelValue: { type: [Object, null], required: false },
|
|
schemaOptions: { type: Object, required: false },
|
|
maxHeight: { type: String, required: false },
|
|
autofocus: { type: Boolean, required: false },
|
|
disabled: { type: Boolean, required: false },
|
|
placeholder: { type: String, required: false },
|
|
readonly: { type: Boolean, required: false },
|
|
projectId: { type: String, required: false }
|
|
},
|
|
emits: ["update:modelValue", "submit", "created", "keydown"],
|
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
__expose();
|
|
const emit = __emit;
|
|
const props = __props;
|
|
const editorContentRef = ref(null);
|
|
const isMultiLine = computed(() => !!props.schemaOptions?.multiLine);
|
|
const isEditable = computed(() => !props.disabled && !props.readonly);
|
|
const hasEnterTracking = computed(() => !props.readonly && !isMultiLine.value);
|
|
const editor = new Editor({
|
|
content: props.modelValue,
|
|
autofocus: props.autofocus,
|
|
editable: isEditable.value,
|
|
extensions: getEditorExtensions(props.schemaOptions, {
|
|
placeholder: props.placeholder,
|
|
projectId: props.projectId
|
|
}),
|
|
onUpdate: () => {
|
|
const data = getData();
|
|
if (!data || Object.keys(data).length < 1) return;
|
|
emit("update:modelValue", data);
|
|
},
|
|
onCreate: () => {
|
|
emit("created");
|
|
}
|
|
});
|
|
const enterKeypressTracker = editor.storage.enterKeypressTracker;
|
|
const getData = () => editor.getJSON();
|
|
const onEnter = () => {
|
|
if (isMultiLine.value || props.readonly) return;
|
|
emit("submit", { data: getData() });
|
|
};
|
|
const onKeyDownHandler = (e) => emit("keydown", e);
|
|
const onEditorContentClick = (e) => {
|
|
const closestSelectorTarget = e.target.closest(
|
|
".editor-mention"
|
|
);
|
|
if (!closestSelectorTarget) return;
|
|
onMentionClick(closestSelectorTarget.dataset.id, e);
|
|
e.stopPropagation();
|
|
};
|
|
const onMentionClick = noop;
|
|
onKeyDown(
|
|
"Escape",
|
|
(e) => {
|
|
e.stopImmediatePropagation();
|
|
e.stopPropagation();
|
|
},
|
|
{ target: editorContentRef }
|
|
);
|
|
watch(
|
|
() => hasEnterTracking.value,
|
|
(hasEnterTracking2) => {
|
|
if (hasEnterTracking2) {
|
|
enterKeypressTracker.subscribe(editor, onEnter);
|
|
} else {
|
|
enterKeypressTracker.unsubscribe(editor, onEnter);
|
|
}
|
|
},
|
|
{ immediate: true }
|
|
);
|
|
watch(
|
|
() => props.modelValue,
|
|
(newVal) => {
|
|
const isSame = JSON.stringify(newVal) === JSON.stringify(getData());
|
|
if (isSame) return;
|
|
editor.commands.setContent(newVal || "");
|
|
}
|
|
);
|
|
watch(
|
|
() => isEditable.value,
|
|
(isEditable2) => {
|
|
editor.setEditable(isEditable2);
|
|
}
|
|
);
|
|
onBeforeUnmount(() => {
|
|
editor.destroy();
|
|
enterKeypressTracker.unsubscribe(editor, onEnter);
|
|
});
|
|
const __returned__ = { emit, props, editorContentRef, isMultiLine, isEditable, hasEnterTracking, editor, enterKeypressTracker, getData, onEnter, onKeyDownHandler, onEditorContentClick, onMentionClick, get EditorContent() {
|
|
return EditorContent;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, renderSlot as _renderSlot, openBlock as _openBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
key: 0,
|
|
"data-v-inspector": "components/common/tiptap/TextEditor.vue:16:5"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return _openBlock(), _createElementBlock(
|
|
"div",
|
|
{
|
|
class: _normalizeClass([
|
|
"text-editor flex flex-col relative text-foreground",
|
|
!!$props.readonly ? "text-editor--read-only" : ""
|
|
]),
|
|
"data-v-inspector": "components/common/tiptap/TextEditor.vue:2:3"
|
|
},
|
|
[
|
|
_createVNode($setup["EditorContent"], {
|
|
ref: "editorContentRef",
|
|
class: "simple-scrollbar flex flex-1",
|
|
editor: $setup.editor,
|
|
style: _normalizeStyle($props.maxHeight ? `max-height: ${$props.maxHeight}; overflow-y: auto;` : ""),
|
|
onClick: $setup.onEditorContentClick,
|
|
onKeydown: _withModifiers($setup.onKeyDownHandler, ["stop"]),
|
|
"data-v-inspector": "components/common/tiptap/TextEditor.vue:8:5"
|
|
}, null, 8, ["editor", "style"]),
|
|
_ctx.$slots.actions && !$props.readonly ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
_renderSlot(_ctx.$slots, "actions")
|
|
])) : _createCommentVNode("v-if", true)
|
|
],
|
|
2
|
|
/* CLASS */
|
|
);
|
|
}
|
|
import "/_nuxt/components/common/tiptap/TextEditor.vue?vue&type=style&index=0&lang.postcss";
|
|
_sfc_main.__hmrId = "e78618be";
|
|
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/common/tiptap/TextEditor.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QUFBQTtBQUFBLE1BaEJILE9BQUs7QUFBQTtVQUEwRSxrQkFBUTtBQUFBO01BR3JGLG9CQUFpQjtBQUFBOztNQUVwQixhQU9FO0FBQUEsUUFOQSxLQUFJO0FBQUEsUUFDSixPQUFNO0FBQUEsUUFDTCxRQUFRO0FBQUEsUUFDUixPQUFLLGdCQUFFLG1CQUFTLGVBQWtCLGdCQUFTO0FBQUEsUUFDM0MsU0FBTztBQUFBLFFBQ1AsV0FBTyxlQUFPLHlCQUFnQjtBQUFBLFFBQUUsb0JBQWlCO0FBQUE7TUFFekMsWUFBTyxXQUFPLENBQUssaUNBQTlCLG9CQUVNLE9BRk4sWUFFTTtBQUFBLFFBREosWUFBdUI7QUFBQSIsIm5hbWVzIjpbImhhc0VudGVyVHJhY2tpbmciLCJpc0VkaXRhYmxlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlRleHRFZGl0b3IudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2XHJcbiAgICA6Y2xhc3M9XCJbXHJcbiAgICAgICd0ZXh0LWVkaXRvciBmbGV4IGZsZXgtY29sIHJlbGF0aXZlIHRleHQtZm9yZWdyb3VuZCcsXHJcbiAgICAgICEhcmVhZG9ubHkgPyAndGV4dC1lZGl0b3ItLXJlYWQtb25seScgOiAnJ1xyXG4gICAgXVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2NvbW1vbi90aXB0YXAvVGV4dEVkaXRvci52dWU6MjozXCJcclxuICA+XHJcbiAgICA8RWRpdG9yQ29udGVudFxyXG4gICAgICByZWY9XCJlZGl0b3JDb250ZW50UmVmXCJcclxuICAgICAgY2xhc3M9XCJzaW1wbGUtc2Nyb2xsYmFyIGZsZXggZmxleC0xXCJcclxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXHJcbiAgICAgIDpzdHlsZT1cIm1heEhlaWdodCA/IGBtYXgtaGVpZ2h0OiAke21heEhlaWdodH07IG92ZXJmbG93LXk6IGF1dG87YCA6ICcnXCJcclxuICAgICAgQGNsaWNrPVwib25FZGl0b3JDb250ZW50Q2xpY2tcIlxyXG4gICAgICBAa2V5ZG93bi5zdG9wPVwib25LZXlEb3duSGFuZGxlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2NvbW1vbi90aXB0YXAvVGV4dEVkaXRvci52dWU6ODo1XCJcclxuICAgIC8+XHJcbiAgICA8ZGl2IHYtaWY9XCIkc2xvdHMuYWN0aW9ucyAmJiAhcmVhZG9ubHlcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9jb21tb24vdGlwdGFwL1RleHRFZGl0b3IudnVlOjE2OjVcIj5cclxuICAgICAgPHNsb3QgbmFtZT1cImFjdGlvbnNcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IEVkaXRvckNvbnRlbnQsIEVkaXRvciB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXHJcbmltcG9ydCB0eXBlIHsgSlNPTkNvbnRlbnQgfSBmcm9tICdAdGlwdGFwL2NvcmUnXHJcbmltcG9ydCB7IGdldEVkaXRvckV4dGVuc2lvbnMgfSBmcm9tICd+fi9saWIvY29tbW9uL2hlbHBlcnMvdGlwdGFwJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgRW50ZXJLZXlwcmVzc1RyYWNrZXJFeHRlbnNpb25TdG9yYWdlLFxyXG4gIFRpcHRhcEVkaXRvclNjaGVtYU9wdGlvbnNcclxufSBmcm9tICd+fi9saWIvY29tbW9uL2hlbHBlcnMvdGlwdGFwJ1xyXG5pbXBvcnQgdHlwZSB7IE51bGxhYmxlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyBvbktleURvd24gfSBmcm9tICdAdnVldXNlL2NvcmUnXHJcbmltcG9ydCB7IG5vb3AgfSBmcm9tICdsb2Rhc2gtZXMnXHJcblxyXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xyXG4gIChlOiAndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWw6IEpTT05Db250ZW50KTogdm9pZFxyXG4gIChlOiAnc3VibWl0JywgdmFsOiB7IGRhdGE6IEpTT05Db250ZW50IH0pOiB2b2lkXHJcbiAgKGU6ICdjcmVhdGVkJyk6IHZvaWRcclxuICAoZTogJ2tleWRvd24nLCB2YWw6IEtleWJvYXJkRXZlbnQpOiB2b2lkXHJcbn0+KClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIG1vZGVsVmFsdWU/OiBKU09OQ29udGVudCB8IG51bGxcclxuICBzY2hlbWFPcHRpb25zPzogVGlwdGFwRWRpdG9yU2NoZW1hT3B0aW9uc1xyXG4gIG1heEhlaWdodD86IHN0cmluZ1xyXG4gIGF1dG9mb2N1cz86IGJvb2xlYW5cclxuICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8gc2NvcGUgdGhpbmdzIGxpa2UgdXNlciBtZW50aW9ucyB0byBwcm9qZWN0IGNvbGxhYm9yYXRvcnMgZXRjLlxyXG4gICAqL1xyXG4gIHByb2plY3RJZD86IHN0cmluZ1xyXG59PigpXHJcblxyXG5jb25zdCBlZGl0b3JDb250ZW50UmVmID0gcmVmKG51bGwgYXMgTnVsbGFibGU8SFRNTEVsZW1lbnQ+KVxyXG5cclxuY29uc3QgaXNNdWx0aUxpbmUgPSBjb21wdXRlZCgoKSA9PiAhIXByb3BzLnNjaGVtYU9wdGlvbnM/Lm11bHRpTGluZSlcclxuY29uc3QgaXNFZGl0YWJsZSA9IGNvbXB1dGVkKCgpID0+ICFwcm9wcy5kaXNhYmxlZCAmJiAhcHJvcHMucmVhZG9ubHkpXHJcbmNvbnN0IGhhc0VudGVyVHJhY2tpbmcgPSBjb21wdXRlZCgoKSA9PiAhcHJvcHMucmVhZG9ubHkgJiYgIWlzTXVsdGlMaW5lLnZhbHVlKVxyXG5cclxuY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvcih7XHJcbiAgY29udGVudDogcHJvcHMubW9kZWxWYWx1ZSxcclxuICBhdXRvZm9jdXM6IHByb3BzLmF1dG9mb2N1cyxcclxuICBlZGl0YWJsZTogaXNFZGl0YWJsZS52YWx1ZSxcclxuICBleHRlbnNpb25zOiBnZXRFZGl0b3JFeHRlbnNpb25zKHByb3BzLnNjaGVtYU9wdGlvbnMsIHtcclxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcclxuICAgIHByb2plY3RJZDogcHJvcHMucHJvamVjdElkXHJcbiAgfSksXHJcbiAgb25VcGRhdGU6ICgpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBnZXREYXRhKClcclxuICAgIGlmICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPCAxKSByZXR1cm5cclxuICAgIGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZGF0YSlcclxuICB9LFxyXG4gIG9uQ3JlYXRlOiAoKSA9PiB7XHJcbiAgICBlbWl0KCdjcmVhdGVkJylcclxuICB9XHJcbn0pXHJcblxyXG5jb25zdCBlbnRlcktleXByZXNzVHJhY2tlciA9IGVkaXRvci5zdG9yYWdlXHJcbiAgLmVudGVyS2V5cHJlc3NUcmFja2VyIGFzIEVudGVyS2V5cHJlc3NUcmFja2VyRXh0ZW5zaW9uU3RvcmFnZVxyXG5jb25zdCBnZXREYXRhID0gKCk6IEpTT05Db250ZW50ID0+IGVkaXRvci5nZXRKU09OKClcclxuY29uc3Qgb25FbnRlciA9ICgpID0+IHtcclxuICBpZiAoaXNNdWx0aUxpbmUudmFsdWUgfHwgcHJvcHMucmVhZG9ubHkpIHJldHVyblxyXG4gIGVtaXQoJ3N1Ym1pdCcsIHsgZGF0YTogZ2V0RGF0YSgpIH0pXHJcbn1cclxuY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiBlbWl0KCdrZXlkb3duJywgZSlcclxuXHJcbmNvbnN0IG9uRWRpdG9yQ29udGVudENsaWNrID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICBjb25zdCBjbG9zZXN0U2VsZWN0b3JUYXJnZXQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoXHJcbiAgICAnLmVkaXRvci1tZW50aW9uJ1xyXG4gICkgYXMgTnVsbGFibGU8SFRNTEVsZW1lbnQ+XHJcbiAgaWYgKCFjbG9zZXN0U2VsZWN0b3JUYXJnZXQpIHJldHVyblxyXG5cclxuICBvbk1lbnRpb25DbGljayhjbG9zZXN0U2VsZWN0b3JUYXJnZXQuZGF0YXNldC5pZCBhcyBzdHJpbmcsIGUpXHJcbiAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG59XHJcblxyXG5jb25zdCBvbk1lbnRpb25DbGljayA9IG5vb3BcclxuXHJcbm9uS2V5RG93bihcclxuICAnRXNjYXBlJyxcclxuICAoZSkgPT4ge1xyXG4gICAgLy8gVGlwVGFwIGhhbmRsZXMgRXNjYXBlLCB3ZSBkb24ndCB3YW50IHRoaXMgdG8gYnViYmxlIHVwIGFuZCBjbG9zZSB0aGUgdGhyZWFkXHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgfSxcclxuICB7IHRhcmdldDogZWRpdG9yQ29udGVudFJlZiB9XHJcbilcclxuXHJcbndhdGNoKFxyXG4gICgpID0+IGhhc0VudGVyVHJhY2tpbmcudmFsdWUsXHJcbiAgKGhhc0VudGVyVHJhY2tpbmcpID0+IHtcclxuICAgIGlmIChoYXNFbnRlclRyYWNraW5nKSB7XHJcbiAgICAgIGVudGVyS2V5cHJlc3NUcmFja2VyLnN1YnNjcmliZShlZGl0b3IsIG9uRW50ZXIpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbnRlcktleXByZXNzVHJhY2tlci51bnN1YnNjcmliZShlZGl0b3IsIG9uRW50ZXIpXHJcbiAgICB9XHJcbiAgfSxcclxuICB7IGltbWVkaWF0ZTogdHJ1ZSB9XHJcbilcclxuXHJcbndhdGNoKFxyXG4gICgpID0+IHByb3BzLm1vZGVsVmFsdWUsXHJcbiAgKG5ld1ZhbCkgPT4ge1xyXG4gICAgY29uc3QgaXNTYW1lID0gSlNPTi5zdHJpbmdpZnkobmV3VmFsKSA9PT0gSlNPTi5zdHJpbmdpZnkoZ2V0RGF0YSgpKVxyXG4gICAgaWYgKGlzU2FtZSkgcmV0dXJuXHJcblxyXG4gICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQobmV3VmFsIHx8ICcnKVxyXG4gIH1cclxuKVxyXG5cclxud2F0Y2goXHJcbiAgKCkgPT4gaXNFZGl0YWJsZS52YWx1ZSxcclxuICAoaXNFZGl0YWJsZSkgPT4ge1xyXG4gICAgZWRpdG9yLnNldEVkaXRhYmxlKGlzRWRpdGFibGUpXHJcbiAgfVxyXG4pXHJcblxyXG5vbkJlZm9yZVVubW91bnQoKCkgPT4ge1xyXG4gIGVkaXRvci5kZXN0cm95KClcclxuICBlbnRlcktleXByZXNzVHJhY2tlci51bnN1YnNjcmliZShlZGl0b3IsIG9uRW50ZXIpXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG48c3R5bGUgbGFuZz1cInBvc3Rjc3NcIj5cclxuLyogc3R5bGVsaW50LWRpc2FibGUgc2VsZWN0b3ItY2xhc3MtcGF0dGVybiAqL1xyXG4uUHJvc2VNaXJyb3ItZm9jdXNlZCB7XHJcbiAgb3V0bGluZTogbm9uZTtcclxufVxyXG5cclxuLlByb3NlTWlycm9yIHtcclxuICBmbGV4OiAxO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG5cclxuICAmIHA6bGFzdC1vZi10eXBlIHtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgfVxyXG5cclxuICAmIHAuaXMtZWRpdG9yLWVtcHR5OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xyXG4gICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBAYXBwbHkgdGV4dC1mb3JlZ3JvdW5kLWRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgJiAuZWRpdG9yLW1lbnRpb24ge1xyXG4gICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xyXG4gICAgQGFwcGx5IHRleHQtcHJpbWFyeSBkYXJrOnRleHQtYmx1ZS00MDAgdGV4dC1ib2R5LTJ4cztcclxuICB9XHJcblxyXG4gICYgYSB7XHJcbiAgICBAYXBwbHkgYm9yZGVyLWIgYm9yZGVyLW91dGxpbmUtMztcclxuICB9XHJcbn1cclxuXHJcbi50ZXh0LWVkaXRvciB7XHJcbiAgJi0tcmVhZC1vbmx5IHtcclxuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB1bnNldCAhaW1wb3J0YW50O1xyXG4gICAgYm94LXNoYWRvdzogdW5zZXQgIWltcG9ydGFudDtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvY29tbW9uL3RpcHRhcC9UZXh0RWRpdG9yLnZ1ZSJ9 |