import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/comments/Editor.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/common/tiptap/TextEditor.vue"; import { FormFileUploadZone as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_2 } from "/_nuxt/components/form/file-upload/Progress.vue"; /* Injection by vite-plugin-vue-inspector Start */ import { createVNode as __createVNode,createBlock as __createBlock,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 _createBlock(...args) { return _interopVNode(__createBlock(...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 { useServerFileUploadLimit } from "/_nuxt/lib/common/composables/serverInfo.ts"; import { UniqueFileTypeSpecifier } from "/_nuxt/lib/core/helpers/file.ts"; import { useAttachments } from "/_nuxt/lib/core/composables/fileUpload.ts"; import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts"; import { isSuccessfullyUploaded } from "/_nuxt/lib/core/api/blobStorage.ts"; import { canInviteToProject } from "/_nuxt/lib/projects/helpers/permissions.ts"; import { acceptedFileExtensions } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/blobs/index.js"; import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ViewerCommentsEditor", props: { modelValue: { type: Object, required: false }, disabled: { type: Boolean, required: false }, autofocus: { type: Boolean, required: false }, prompt: { type: String, required: false }, disableDropZone: { type: Boolean, required: false } }, emits: ["update:modelValue", "submit", "created"], setup(__props, { expose: __expose, emit: __emit }) { const emit = __emit; const props = __props; const { projectId, resources: { response: { project } } } = useInjectedViewerState(); const { onFilesSelected, uploads, onUploadDelete } = useAttachments({ projectId }); const { maxSizeInBytes } = useServerFileUploadLimit(); const uploadZone = ref(null); const acceptValue = ref( [ UniqueFileTypeSpecifier.AnyImage, UniqueFileTypeSpecifier.AnyVideo, ...acceptedFileExtensions.map((fileExtension) => `.${fileExtension}`) ].join(",") ); const value = computed({ get: () => props.modelValue, set: (newVal) => emit("update:modelValue", newVal) }); const doc = computed({ get: () => value.value?.doc, set: (newVal) => value.value = { ...value.value || {}, doc: newVal } }); const canInvite = computed(() => canInviteToProject(project.value || {})); const onSubmit = (val) => emit("submit", { data: { doc: val.data } }); const openFilePicker = () => { uploadZone.value?.triggerPicker(); }; watch( uploads, (newUploads) => { value.value = { ...value.value, attachments: newUploads.filter(isSuccessfullyUploaded) }; }, { deep: true } ); watch( () => props.modelValue?.attachments, (newAttachments) => { if (!newAttachments && uploads.value.length) { uploads.value = []; } } ); __expose({ openFilePicker, onFilesSelected }); const __returned__ = { emit, props, projectId, project, onFilesSelected, uploads, onUploadDelete, maxSizeInBytes, uploadZone, acceptValue, value, doc, canInvite, onSubmit, openFilePicker }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, createCommentVNode as _createCommentVNode, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "flex flex-col w-full max-h-32 overflow-y-auto simple-scrollbar", "data-v-inspector": "components/viewer/comments/Editor.vue:3:3" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_CommonTiptapTextEditor = __nuxt_component_0; const _component_FormFileUploadZone = __nuxt_component_1; const _component_FormFileUploadProgress = __nuxt_component_2; return _openBlock(), _createElementBlock("div", _hoisted_1, [ _createVNode(_component_FormFileUploadZone, { ref: "uploadZone", "size-limit": $setup.maxSizeInBytes, accept: $setup.acceptValue, disabled: $props.disabled || $props.disableDropZone, multiple: "", onFilesSelected: $setup.onFilesSelected, "data-v-inspector": "components/viewer/comments/Editor.vue:4:5" }, { default: _withCtx(({ isDraggingFiles }) => [ _createVNode(_component_CommonTiptapTextEditor, { modelValue: $setup.doc, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.doc = $event), class: _normalizeClass([ "rounded-t-lg py-2.5 px-3 border-b border-outline-2 text-body-2xs min-h-[40px] flex", isDraggingFiles && !$props.disableDropZone && "border-dashed" ]), autofocus: $props.autofocus, placeholder: $props.prompt || "Add comment", "schema-options": { multiLine: false }, disabled: $props.disabled, "project-id": $setup.projectId, "disable-invitation-cta": !$setup.canInvite, onSubmit: $setup.onSubmit, onCreated: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("created")), "data-v-inspector": "components/viewer/comments/Editor.vue:13:7" }, null, 8, ["modelValue", "class", "autofocus", "placeholder", "disabled", "project-id", "disable-invitation-cta"]) ]), _: 1 /* STABLE */ }, 8, ["size-limit", "accept", "disabled", "onFilesSelected"]), $setup.uploads.length ? (_openBlock(), _createBlock(_component_FormFileUploadProgress, { key: 0, class: "p-1 pb-0", items: $setup.uploads, disabled: $props.disabled, onDelete: $setup.onUploadDelete, "data-v-inspector": "components/viewer/comments/Editor.vue:29:5" }, null, 8, ["items", "disabled", "onDelete"])) : _createCommentVNode("v-if", true) ]); } _sfc_main.__hmrId = "2e536f3d"; 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/comments/Editor.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUN6QixVQUFRO0FBQUEsVUFDUixXQUFPLHNDQUFFLFdBQUs7QUFBQSxVQUFhLG9CQUFpQjtBQUFBOzs7OztJQUl6QyxlQUFRLHdCQURoQixhQU1FO0FBQUE7TUFKQSxPQUFNO0FBQUEsTUFDTCxPQUFPO0FBQUEsTUFDUCxVQUFVO0FBQUEsTUFDVixVQUFRO0FBQUEsTUFBZ0Isb0JBQWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkVkaXRvci52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLWF1dG9mb2N1cyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBtYXgtaC0zMiBvdmVyZmxvdy15LWF1dG8gc2ltcGxlLXNjcm9sbGJhclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9FZGl0b3IudnVlOjM6M1wiPlxyXG4gICAgPEZvcm1GaWxlVXBsb2FkWm9uZVxyXG4gICAgICByZWY9XCJ1cGxvYWRab25lXCJcclxuICAgICAgdi1zbG90PVwieyBpc0RyYWdnaW5nRmlsZXMgfVwiXHJcbiAgICAgIDpzaXplLWxpbWl0PVwibWF4U2l6ZUluQnl0ZXNcIlxyXG4gICAgICA6YWNjZXB0PVwiYWNjZXB0VmFsdWVcIlxyXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBkaXNhYmxlRHJvcFpvbmVcIlxyXG4gICAgICBtdWx0aXBsZVxyXG4gICAgICBAZmlsZXMtc2VsZWN0ZWQ9XCJvbkZpbGVzU2VsZWN0ZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvRWRpdG9yLnZ1ZTo0OjVcIlxyXG4gICAgPlxyXG4gICAgICA8Q29tbW9uVGlwdGFwVGV4dEVkaXRvclxyXG4gICAgICAgIHYtbW9kZWw9XCJkb2NcIlxyXG4gICAgICAgIDpjbGFzcz1cIltcclxuICAgICAgICAgICdyb3VuZGVkLXQtbGcgcHktMi41IHB4LTMgYm9yZGVyLWIgYm9yZGVyLW91dGxpbmUtMiB0ZXh0LWJvZHktMnhzIG1pbi1oLVs0MHB4XSBmbGV4JyxcclxuICAgICAgICAgIGlzRHJhZ2dpbmdGaWxlcyAmJiAhZGlzYWJsZURyb3Bab25lICYmICdib3JkZXItZGFzaGVkJ1xyXG4gICAgICAgIF1cIlxyXG4gICAgICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxyXG4gICAgICAgIDpwbGFjZWhvbGRlcj1cInByb21wdCB8fCAnQWRkIGNvbW1lbnQnXCJcclxuICAgICAgICA6c2NoZW1hLW9wdGlvbnM9XCJ7IG11bHRpTGluZTogZmFsc2UgfVwiXHJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIDpwcm9qZWN0LWlkPVwicHJvamVjdElkXCJcclxuICAgICAgICA6ZGlzYWJsZS1pbnZpdGF0aW9uLWN0YT1cIiFjYW5JbnZpdGVcIlxyXG4gICAgICAgIEBzdWJtaXQ9XCJvblN1Ym1pdFwiXHJcbiAgICAgICAgQGNyZWF0ZWQ9XCIkZW1pdCgnY3JlYXRlZCcpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbW1lbnRzL0VkaXRvci52dWU6MTM6N1wiXHJcbiAgICAgIC8+XHJcbiAgICA8L0Zvcm1GaWxlVXBsb2FkWm9uZT5cclxuICAgIDxGb3JtRmlsZVVwbG9hZFByb2dyZXNzXHJcbiAgICAgIHYtaWY9XCJ1cGxvYWRzLmxlbmd0aFwiXHJcbiAgICAgIGNsYXNzPVwicC0xIHBiLTBcIlxyXG4gICAgICA6aXRlbXM9XCJ1cGxvYWRzXCJcclxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxyXG4gICAgICBAZGVsZXRlPVwib25VcGxvYWREZWxldGVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvRWRpdG9yLnZ1ZToyOTo1XCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgSlNPTkNvbnRlbnQgfSBmcm9tICdAdGlwdGFwL2NvcmUnXHJcbmltcG9ydCB0eXBlIHsgTnVsbGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IENvbW1lbnRFZGl0b3JWYWx1ZSB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvY29tbWVudE1hbmFnZW1lbnQnXHJcbmltcG9ydCB7IHVzZVNlcnZlckZpbGVVcGxvYWRMaW1pdCB9IGZyb20gJ35+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvc2VydmVySW5mbydcclxuaW1wb3J0IHsgVW5pcXVlRmlsZVR5cGVTcGVjaWZpZXIgfSBmcm9tICd+fi9saWIvY29yZS9oZWxwZXJzL2ZpbGUnXHJcbmltcG9ydCB7IHVzZUF0dGFjaG1lbnRzIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvZmlsZVVwbG9hZCdcclxuaW1wb3J0IHsgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IGlzU3VjY2Vzc2Z1bGx5VXBsb2FkZWQgfSBmcm9tICd+fi9saWIvY29yZS9hcGkvYmxvYlN0b3JhZ2UnXHJcbmltcG9ydCB7IGNhbkludml0ZVRvUHJvamVjdCB9IGZyb20gJ35+L2xpYi9wcm9qZWN0cy9oZWxwZXJzL3Blcm1pc3Npb25zJ1xyXG5pbXBvcnQgeyBhY2NlcHRlZEZpbGVFeHRlbnNpb25zIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL2Jsb2JzJ1xyXG5cclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICAoZTogJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsOiBPcHRpb25hbDxDb21tZW50RWRpdG9yVmFsdWU+KTogdm9pZFxyXG4gIChlOiAnc3VibWl0JywgdmFsOiB7IGRhdGE6IENvbW1lbnRFZGl0b3JWYWx1ZSB9KTogdm9pZFxyXG4gIChlOiAnY3JlYXRlZCcpOiB2b2lkXHJcbn0+KClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIG1vZGVsVmFsdWU/OiBDb21tZW50RWRpdG9yVmFsdWVcclxuICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICBhdXRvZm9jdXM/OiBib29sZWFuXHJcbiAgcHJvbXB0Pzogc3RyaW5nXHJcbiAgZGlzYWJsZURyb3Bab25lPzogYm9vbGVhblxyXG59PigpXHJcblxyXG5jb25zdCB7XHJcbiAgcHJvamVjdElkLFxyXG4gIHJlc291cmNlczoge1xyXG4gICAgcmVzcG9uc2U6IHsgcHJvamVjdCB9XHJcbiAgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbmNvbnN0IHsgb25GaWxlc1NlbGVjdGVkLCB1cGxvYWRzLCBvblVwbG9hZERlbGV0ZSB9ID0gdXNlQXR0YWNobWVudHMoeyBwcm9qZWN0SWQgfSlcclxuY29uc3QgeyBtYXhTaXplSW5CeXRlcyB9ID0gdXNlU2VydmVyRmlsZVVwbG9hZExpbWl0KClcclxuXHJcbmNvbnN0IHVwbG9hZFpvbmUgPSByZWYobnVsbCBhcyBOdWxsYWJsZTx7IHRyaWdnZXJQaWNrZXI6ICgpID0+IHZvaWQgfT4pXHJcbmNvbnN0IGFjY2VwdFZhbHVlID0gcmVmKFxyXG4gIFtcclxuICAgIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueUltYWdlLFxyXG4gICAgVW5pcXVlRmlsZVR5cGVTcGVjaWZpZXIuQW55VmlkZW8sXHJcbiAgICAuLi5hY2NlcHRlZEZpbGVFeHRlbnNpb25zLm1hcCgoZmlsZUV4dGVuc2lvbikgPT4gYC4ke2ZpbGVFeHRlbnNpb259YClcclxuICBdLmpvaW4oJywnKVxyXG4pXHJcblxyXG5jb25zdCB2YWx1ZSA9IGNvbXB1dGVkKHtcclxuICBnZXQ6ICgpID0+IHByb3BzLm1vZGVsVmFsdWUsXHJcbiAgc2V0OiAobmV3VmFsKSA9PiBlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIG5ld1ZhbClcclxufSlcclxuXHJcbmNvbnN0IGRvYyA9IGNvbXB1dGVkKHtcclxuICBnZXQ6ICgpID0+IHZhbHVlLnZhbHVlPy5kb2MsXHJcbiAgc2V0OiAobmV3VmFsKSA9PlxyXG4gICAgKHZhbHVlLnZhbHVlID0ge1xyXG4gICAgICAuLi4odmFsdWUudmFsdWUgfHwge30pLFxyXG4gICAgICBkb2M6IG5ld1ZhbFxyXG4gICAgfSlcclxufSlcclxuXHJcbmNvbnN0IGNhbkludml0ZSA9IGNvbXB1dGVkKCgpID0+IGNhbkludml0ZVRvUHJvamVjdChwcm9qZWN0LnZhbHVlIHx8IHt9KSlcclxuXHJcbmNvbnN0IG9uU3VibWl0ID0gKHZhbDogeyBkYXRhOiBKU09OQ29udGVudCB9KSA9PlxyXG4gIGVtaXQoJ3N1Ym1pdCcsIHsgZGF0YTogeyBkb2M6IHZhbC5kYXRhIH0gfSlcclxuXHJcbmNvbnN0IG9wZW5GaWxlUGlja2VyID0gKCkgPT4ge1xyXG4gIHVwbG9hZFpvbmUudmFsdWU/LnRyaWdnZXJQaWNrZXIoKVxyXG59XHJcblxyXG4vLyBzeW5jIHVwbG9hZCB1cGRhdGVzIHRvIG1vZGVsVmFsdWVcclxud2F0Y2goXHJcbiAgdXBsb2FkcyxcclxuICAobmV3VXBsb2FkcykgPT4ge1xyXG4gICAgdmFsdWUudmFsdWUgPSB7XHJcbiAgICAgIC4uLnZhbHVlLnZhbHVlLFxyXG4gICAgICBhdHRhY2htZW50czogbmV3VXBsb2Fkcy5maWx0ZXIoaXNTdWNjZXNzZnVsbHlVcGxvYWRlZClcclxuICAgIH1cclxuICB9LFxyXG4gIHsgZGVlcDogdHJ1ZSB9XHJcbilcclxuXHJcbi8vIHJlbW92ZSByZW1vdmVkIGF0dGFjaG1lbnRzIGZyb20gbW9kZWxWYWx1ZVxyXG53YXRjaChcclxuICAoKSA9PiBwcm9wcy5tb2RlbFZhbHVlPy5hdHRhY2htZW50cyxcclxuICAobmV3QXR0YWNobWVudHMpID0+IHtcclxuICAgIGlmICghbmV3QXR0YWNobWVudHMgJiYgdXBsb2Fkcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgdXBsb2Fkcy52YWx1ZSA9IFtdXHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5kZWZpbmVFeHBvc2Uoe1xyXG4gIG9wZW5GaWxlUGlja2VyLFxyXG4gIG9uRmlsZXNTZWxlY3RlZFxyXG59KVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL2NvbW1lbnRzL0VkaXRvci52dWUifQ==