168 lines
16 KiB
Plaintext
168 lines
16 KiB
Plaintext
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== |