@procore/text-editor 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/.jest/ckeditorMock.js +1 -0
  2. package/.jest/setupTests.js +1 -2
  3. package/CHANGELOG.md +9 -0
  4. package/README.md +15 -0
  5. package/dist/TextEditor/CKTextEditor.js +7 -3
  6. package/dist/TextEditor/CKTextEditor.js.map +1 -1
  7. package/dist/TextEditor/TextEditor.styles.js +6 -6
  8. package/dist/TextEditor/TextEditor.styles.js.map +1 -1
  9. package/dist/TextEditor/TextEditor.types.d.ts +28 -8
  10. package/dist/TextEditor/TextEditor.types.js.map +1 -1
  11. package/dist/TextEditor/TinyMCETextEditor.js +2 -1
  12. package/dist/TextEditor/TinyMCETextEditor.js.map +1 -1
  13. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.d.ts +6 -0
  14. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js +114 -14
  15. package/dist/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.js.map +1 -1
  16. package/dist/TextEditor/utils/config.js +3 -3
  17. package/dist/TextEditor/utils/config.js.map +1 -1
  18. package/dist/TextEditor/utils/richTextEditorHandlers.d.ts +4 -1
  19. package/dist/TextEditor/utils/richTextEditorHandlers.js +79 -21
  20. package/dist/TextEditor/utils/richTextEditorHandlers.js.map +1 -1
  21. package/dist/TextEditorOutput/TextEditorOutput.styles.js +2 -2
  22. package/dist/TextEditorOutput/TextEditorOutput.styles.js.map +1 -1
  23. package/dist/_typedoc/TextEditor/TextEditor.types.json +323 -49
  24. package/dist/_typedoc/TextEditor/TextEditorProvider.types.json +2 -2
  25. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +3 -3
  26. package/dist/_typedoc/deprecations.json +1 -1
  27. package/dist/locales/en.json +1 -0
  28. package/package.json +7 -7
@@ -250,16 +250,77 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
250
250
  this.configureProstoreFileIdConversion();
251
251
  this.configureUploadAdapter(imageUpload);
252
252
  this.configureUnsupportedFileDrop(imageUpload);
253
+ this.configurePastedImageFileOverExternalHtml(imageUpload);
253
254
  this.configurePastedImageLimit(imageUpload);
254
255
  }
256
+
257
+ /**
258
+ * "Copy Image" puts both the image bytes and HTML with the external URL on
259
+ * the clipboard. CKEditor prefers the HTML, but the backend strips external
260
+ * image URLs — so upload the bytes instead.
261
+ */
262
+ }, {
263
+ key: "configurePastedImageFileOverExternalHtml",
264
+ value: function configurePastedImageFileOverExternalHtml(imageUpload) {
265
+ var _this2 = this;
266
+ this.listenTo(this.editor.editing.view.document, 'clipboardInput', function (evt, data) {
267
+ var dataTransfer = data.dataTransfer;
268
+ var files = Array.from(dataTransfer.files);
269
+ var imageFiles = files.filter(function (file) {
270
+ return file.type.startsWith('image/');
271
+ });
272
+ var html = dataTransfer.getData('text/html');
273
+ var isImageOnlyPaste = Boolean(html) && isImageOnlyHtml(html);
274
+ var clipboardHasImageBytes = imageFiles.length > 0;
275
+ if (!isImageOnlyPaste) {
276
+ return;
277
+ }
278
+
279
+ // The clipboard carries only an image URL, no bytes to upload (e.g.
280
+ // "Copy Image" on an SVG). Show an error for clearly unsupported
281
+ // extensions; otherwise let the default clipboard flow handle it.
282
+ if (!clipboardHasImageBytes) {
283
+ var unsupportedExtension = unsupportedPastedImageExtension(html);
284
+ if (unsupportedExtension) {
285
+ var _imageUpload$onError;
286
+ evt.stop();
287
+ (_imageUpload$onError = imageUpload.onError) === null || _imageUpload$onError === void 0 || _imageUpload$onError.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {
288
+ type: "".concat(unsupportedExtension, " ")
289
+ }));
290
+ }
291
+ return;
292
+ }
293
+ evt.stop();
294
+
295
+ // Unsupported types already got a toast from the unsupported-file
296
+ // drop handler, which runs before this listener.
297
+ var tooLargeFile = imageFiles.find(function (file) {
298
+ return DEFAULT_ALLOWED_MIME_TYPES.has(file.type) && file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES;
299
+ });
300
+ if (tooLargeFile) {
301
+ var _imageUpload$onError2;
302
+ (_imageUpload$onError2 = imageUpload.onError) === null || _imageUpload$onError2 === void 0 || _imageUpload$onError2.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.fileTooLarge'));
303
+ }
304
+ var uploadableFiles = imageFiles.filter(function (file) {
305
+ return DEFAULT_ALLOWED_MIME_TYPES.has(file.type) && file.size <= MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES;
306
+ });
307
+ if (uploadableFiles.length > 0) {
308
+ _this2.editor.execute('uploadImage', {
309
+ file: uploadableFiles
310
+ });
311
+ }
312
+ }, {
313
+ priority: 'high'
314
+ });
315
+ }
255
316
  }, {
256
317
  key: "configureUploadAdapter",
257
318
  value: function configureUploadAdapter(imageUpload) {
258
- var _this2 = this;
319
+ var _this3 = this;
259
320
  var fileRepository = this.editor.plugins.get(FileRepository);
260
321
  fileRepository.createUploadAdapter = function (loader) {
261
322
  return new ProcoreImageUploadAdapter(loader, imageUpload, function () {
262
- return _this2.currentEmbeddedImageCountOrUndefined();
323
+ return _this3.currentEmbeddedImageCountOrUndefined();
263
324
  });
264
325
  };
265
326
  var imageUploadEditing = this.editor.plugins.get(ImageUploadEditing);
@@ -270,7 +331,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
270
331
  return;
271
332
  }
272
333
  var prostoreFileId = String(data.prostoreFileId);
273
- _this2.editor.model.change(function (writer) {
334
+ _this3.editor.model.change(function (writer) {
274
335
  writer.setAttribute('prostoreFileId', prostoreFileId, imageElement);
275
336
  });
276
337
  });
@@ -278,11 +339,11 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
278
339
  }, {
279
340
  key: "configureProstoreFileIdConversion",
280
341
  value: function configureProstoreFileIdConversion() {
281
- var _this3 = this;
342
+ var _this4 = this;
282
343
  var imageModelNames = ['imageBlock', 'imageInline'];
283
344
  imageModelNames.forEach(function (imageModelName) {
284
- if (_this3.canExtendSchemaElement(imageModelName)) {
285
- _this3.editor.model.schema.extend(imageModelName, {
345
+ if (_this4.canExtendSchemaElement(imageModelName)) {
346
+ _this4.editor.model.schema.extend(imageModelName, {
286
347
  allowAttributes: ['prostoreFileId']
287
348
  });
288
349
  }
@@ -314,18 +375,18 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
314
375
  }, {
315
376
  key: "configurePastedImageLimit",
316
377
  value: function configurePastedImageLimit(imageUpload) {
317
- var _this4 = this;
378
+ var _this5 = this;
318
379
  var clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);
319
380
  clipboardPipeline.on('inputTransformation', function (event, data) {
320
- var currentImageCount = _this4.currentEmbeddedImageCountOrUndefined();
381
+ var currentImageCount = _this5.currentEmbeddedImageCountOrUndefined();
321
382
  if (currentImageCount === undefined) {
322
383
  return;
323
384
  }
324
385
  var pastedImageCount = countImages(data.content);
325
386
  if (exceedsImageLimit(currentImageCount, pastedImageCount)) {
326
- var _event$stop, _imageUpload$onError;
387
+ var _event$stop, _imageUpload$onError3;
327
388
  (_event$stop = event.stop) === null || _event$stop === void 0 || _event$stop.call(event);
328
- (_imageUpload$onError = imageUpload.onError) === null || _imageUpload$onError === void 0 || _imageUpload$onError.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {
389
+ (_imageUpload$onError3 = imageUpload.onError) === null || _imageUpload$onError3 === void 0 || _imageUpload$onError3.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {
329
390
  count: MAX_RICH_TEXT_IMAGES
330
391
  }));
331
392
  }
@@ -335,7 +396,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
335
396
  key: "configureUnsupportedFileDrop",
336
397
  value: function configureUnsupportedFileDrop(imageUpload) {
337
398
  this.listenTo(this.editor.editing.view.document, 'clipboardInput', function (event, data) {
338
- var _imageUpload$onError2;
399
+ var _imageUpload$onError4;
339
400
  var files = data.dataTransfer.files;
340
401
  if (files.length === 0) {
341
402
  return;
@@ -346,7 +407,7 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
346
407
  if (!unsupportedFile) {
347
408
  return;
348
409
  }
349
- (_imageUpload$onError2 = imageUpload.onError) === null || _imageUpload$onError2 === void 0 || _imageUpload$onError2.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {
410
+ (_imageUpload$onError4 = imageUpload.onError) === null || _imageUpload$onError4 === void 0 || _imageUpload$onError4.call(imageUpload, imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {
350
411
  type: _fileTypeLabel(unsupportedFile)
351
412
  }));
352
413
  if (files.every(function (file) {
@@ -367,10 +428,10 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
367
428
  }, {
368
429
  key: "currentEmbeddedImageCountOrUndefined",
369
430
  value: function currentEmbeddedImageCountOrUndefined() {
370
- var _this5 = this;
431
+ var _this6 = this;
371
432
  try {
372
433
  return this.editor.model.document.getRootNames().reduce(function (total, rootName) {
373
- var root = _this5.editor.model.document.getRoot(rootName);
434
+ var root = _this6.editor.model.document.getRoot(rootName);
374
435
  return root ? total + countModelImages(root) : total;
375
436
  }, 0);
376
437
  } catch (_error) {
@@ -389,6 +450,45 @@ export var ProcoreImageUploadPlugin = /*#__PURE__*/function (_Plugin) {
389
450
  }
390
451
  }]);
391
452
  }(Plugin);
453
+
454
+ // "Copy Image" shape: an image with no meaningful text. Rich pastes mixing
455
+ // text and images keep the default clipboard handling.
456
+ function isImageOnlyHtml(html) {
457
+ var _doc$body$textContent;
458
+ var doc = new DOMParser().parseFromString(html, 'text/html');
459
+ return doc.body.querySelector('img') !== null && !((_doc$body$textContent = doc.body.textContent) !== null && _doc$body$textContent !== void 0 && _doc$body$textContent.trim());
460
+ }
461
+
462
+ // Uppercase extension (e.g. "SVG") when every pasted image URL clearly has an
463
+ // unsupported extension; undefined when supported, unknown, or inline data.
464
+ function unsupportedPastedImageExtension(html) {
465
+ var doc = new DOMParser().parseFromString(html, 'text/html');
466
+ var extensions = Array.from(doc.body.querySelectorAll('img')).map(function (img) {
467
+ var _img$getAttribute;
468
+ return imageUrlExtension((_img$getAttribute = img.getAttribute('src')) !== null && _img$getAttribute !== void 0 ? _img$getAttribute : '');
469
+ });
470
+ return extensions.every(isUnsupportedImageExtension) ? extensions[0] : undefined;
471
+ }
472
+
473
+ // "https://site.com/logo.svg?w=64" -> "SVG"; undefined for inline data or
474
+ // URLs without a file extension.
475
+ function imageUrlExtension(src) {
476
+ var _path$split$pop;
477
+ if (src.startsWith('data:') || src.startsWith('blob:')) {
478
+ return undefined;
479
+ }
480
+ var path = src.split(/[?#]/)[0];
481
+ var fileName = (_path$split$pop = path.split('/').pop()) !== null && _path$split$pop !== void 0 ? _path$split$pop : '';
482
+ return fileExtensionLabel(fileName);
483
+ }
484
+ function isUnsupportedImageExtension(extension) {
485
+ if (!extension) {
486
+ return false;
487
+ }
488
+ var lower = extension.toLowerCase();
489
+ var mimeType = "image/".concat(lower === 'jpg' ? 'jpeg' : lower);
490
+ return !DEFAULT_ALLOWED_MIME_TYPES.has(mimeType);
491
+ }
392
492
  function countImages(node) {
393
493
  if (!node.is('element') && !node.is('documentFragment')) {
394
494
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ProcoreImageUploadPlugin.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","_typeof","toPrimitive","String","Number","ClipboardPipeline","FileRepository","ImageUploadEditing","Plugin","DEFAULT_ALLOWED_MIME_TYPES","IMAGE_TYPE_LABELS","MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES","MAX_RICH_TEXT_IMAGES","PDF_UNSUPPORTED_MIME_TYPES","RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE","canonicalizeTextEditorImageUrl","REPORTED_UPLOAD_ERROR","exceedsImageLimit","currentImageCount","newImageCount","undefined","ProcoreImageUploadAdapter","loader","imageUpload","getEmbeddedImageCount","_upload","_callee","file","result","_t","_context","abortController","AbortController","fail","i18n","validateFile","warnPdfUnsupportedFile","validateReadableImage","validateImageCount","uploadFile","signal","aborted","toCkEditorResponse","toSilentUploadError","upload","abort","_this$abortController","_this$abortUpload","abortUpload","has","type","fileTypeLabel","size","_this$imageUpload$onW","_this$imageUpload","onWarning","_validateReadableImage","_callee2","url","image","_t2","_context2","URL","createObjectURL","Image","reject","onload","onerror","Error","src","revokeObjectURL","_x","_this$getEmbeddedImag","embeddedImageCount","count","prostoreFileId","test","defaultUrl","urls","response","width","height","get","_this","onProgress","uploaded","total","uploadTotal","message","_this$imageUpload$onE","_this$imageUpload2","onError","error","ProcoreImageUploadPlugin","_Plugin","_callSuper","_inherits","init","editor","config","configureProstoreFileIdConversion","configureUploadAdapter","configureUnsupportedFileDrop","configurePastedImageLimit","_this2","fileRepository","plugins","createUploadAdapter","currentEmbeddedImageCountOrUndefined","imageUploadEditing","on","_event","_ref","data","imageElement","model","change","writer","setAttribute","_this3","imageModelNames","forEach","imageModelName","canExtendSchemaElement","schema","extend","allowAttributes","conversion","attributeToAttribute","view","name","_this4","clipboardPipeline","event","pastedImageCount","countImages","content","_event$stop","_imageUpload$onError","stop","listenTo","editing","document","_imageUpload$onError2","files","dataTransfer","unsupportedFile","find","every","priority","isRegistered","_this5","getRootNames","reduce","rootName","root","getRoot","countModelImages","_error","node","is","imageCount","_i","_Array$from","Array","from","getChildren","child","isImageModelElement","_i2","_Array$from2","item","_IMAGE_TYPE_LABELS$fi","fileType","fileExtensionLabel","concat","fileName","extension","split","pop","toUpperCase"],"sources":["../../../../src/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.ts"],"sourcesContent":["import type {\n ClipboardInputTransformationData,\n EventInfo,\n ImageUploadCompleteData,\n ModelElement,\n ModelItem,\n UploadAdapter,\n ViewDocumentClipboardInputEvent,\n ViewDocumentFragment,\n ViewNode,\n} from 'ckeditor5'\nimport {\n ClipboardPipeline,\n FileRepository,\n ImageUploadEditing,\n Plugin,\n} from 'ckeditor5'\n\nimport type {\n TextEditorImageUploadHandlers,\n TextEditorImageUploadResult,\n} from '../../TextEditor.types'\nimport {\n DEFAULT_ALLOWED_MIME_TYPES,\n IMAGE_TYPE_LABELS,\n MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES,\n MAX_RICH_TEXT_IMAGES,\n PDF_UNSUPPORTED_MIME_TYPES,\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n} from '../../utils/imageAttributes'\nimport { canonicalizeTextEditorImageUrl } from '../../utils/imageUrls'\n\nconst REPORTED_UPLOAD_ERROR = ''\n\nconst exceedsImageLimit = (currentImageCount: number, newImageCount = 0) =>\n currentImageCount + newImageCount > MAX_RICH_TEXT_IMAGES\n\ninterface UploadLoader {\n file: Promise<File | null>\n uploaded?: number\n uploadTotal?: number | null\n}\n\ntype ClipboardCallback = (\n event: EventInfo<'inputTransformation', unknown>,\n data: ClipboardInputTransformationData\n) => void\n\ntype CkEditorUploadResponse = {\n urls: {\n default: string\n }\n prostoreFileId: number | string\n width?: number\n height?: number\n}\n\nexport class ProcoreImageUploadAdapter implements UploadAdapter {\n private abortController?: AbortController\n private abortUpload?: () => void\n\n constructor(\n private readonly loader: UploadLoader,\n private readonly imageUpload: TextEditorImageUploadHandlers,\n private readonly getEmbeddedImageCount?: () => number | undefined\n ) {}\n\n async upload(): Promise<CkEditorUploadResponse> {\n this.abortController = new AbortController()\n\n try {\n const file = await this.loader.file\n\n if (!file) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.noFile'))\n }\n\n this.validateFile(file)\n this.warnPdfUnsupportedFile(file)\n await this.validateReadableImage(file)\n this.validateImageCount()\n\n const result = await this.uploadFile(file)\n\n if (this.abortController.signal.aborted) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.aborted'))\n }\n\n return this.toCkEditorResponse(result)\n } catch (error) {\n throw this.toSilentUploadError(error)\n }\n }\n\n abort() {\n this.abortController?.abort()\n this.abortUpload?.()\n }\n\n private validateFile(file: File) {\n if (!DEFAULT_ALLOWED_MIME_TYPES.has(file.type)) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n if (file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.fileTooLarge'))\n }\n }\n\n private warnPdfUnsupportedFile(file: File) {\n if (!PDF_UNSUPPORTED_MIME_TYPES.has(file.type)) {\n return\n }\n\n this.imageUpload.onWarning?.(\n this.i18n.t('textEditor.imageUpload.pdfUnsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n private async validateReadableImage(file: File) {\n const url = URL.createObjectURL(file)\n\n try {\n const image = new Image()\n\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve()\n image.onerror = () => reject(new Error())\n image.src = url\n })\n } catch (_error) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.unreadable'))\n } finally {\n URL.revokeObjectURL(url)\n }\n }\n\n private validateImageCount() {\n const embeddedImageCount = this.getEmbeddedImageCount?.()\n\n if (\n embeddedImageCount !== undefined &&\n exceedsImageLimit(embeddedImageCount)\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n }\n\n private toCkEditorResponse(\n result: TextEditorImageUploadResult\n ): CkEditorUploadResponse {\n if (\n !result.prostoreFileId ||\n !/^[\\w-]+$/.test(String(result.prostoreFileId))\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.invalidProstoreFileId')\n )\n }\n\n const defaultUrl = canonicalizeTextEditorImageUrl(result.urls.default)\n\n if (!defaultUrl) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.invalidImageUrl'))\n }\n\n const response: CkEditorUploadResponse = {\n urls: {\n default: defaultUrl,\n },\n prostoreFileId: result.prostoreFileId,\n width: result.width,\n height: result.height,\n }\n\n return response\n }\n\n private get i18n() {\n return this.imageUpload.i18n\n }\n\n private fileTypeLabel(file: File) {\n return fileTypeLabel(file)\n }\n\n private uploadFile(file: File) {\n return new Promise<TextEditorImageUploadResult>((resolve, reject) => {\n this.abortUpload = () =>\n reject(this.fail(this.i18n.t('textEditor.imageUpload.aborted')))\n\n this.imageUpload\n .upload(\n file,\n { signal: this.abortController!.signal },\n {\n onProgress: (uploaded, total) => {\n this.loader.uploaded = uploaded\n\n if (total !== undefined) {\n this.loader.uploadTotal = total\n }\n },\n }\n )\n .then(resolve)\n .catch(reject)\n })\n }\n\n private fail(message: string) {\n this.imageUpload.onError?.(message)\n\n return REPORTED_UPLOAD_ERROR\n }\n\n private toSilentUploadError(error: unknown) {\n if (error === REPORTED_UPLOAD_ERROR) {\n return error\n }\n\n if (error instanceof Error && error.message) {\n return this.fail(error.message)\n }\n\n return this.fail(this.i18n.t('textEditor.imageUpload.failed'))\n }\n}\n\nexport class ProcoreImageUploadPlugin extends Plugin {\n static get pluginName() {\n return 'ProcoreImageUploadPlugin'\n }\n\n static get requires() {\n return [FileRepository, ImageUploadEditing]\n }\n\n init() {\n const imageUpload = this.editor.config.get('procoreImageUpload') as\n | TextEditorImageUploadHandlers\n | undefined\n\n if (!imageUpload) {\n return\n }\n\n this.configureProstoreFileIdConversion()\n this.configureUploadAdapter(imageUpload)\n this.configureUnsupportedFileDrop(imageUpload)\n this.configurePastedImageLimit(imageUpload)\n }\n\n private configureUploadAdapter(imageUpload: TextEditorImageUploadHandlers) {\n const fileRepository = this.editor.plugins.get(FileRepository)\n\n fileRepository.createUploadAdapter = (loader) =>\n new ProcoreImageUploadAdapter(loader, imageUpload, () =>\n this.currentEmbeddedImageCountOrUndefined()\n )\n\n const imageUploadEditing = this.editor.plugins.get(ImageUploadEditing)\n\n imageUploadEditing.on(\n 'uploadComplete',\n (_event, { data, imageElement }: ImageUploadCompleteData) => {\n if (!imageElement || !data?.prostoreFileId) {\n return\n }\n\n const prostoreFileId = String(data.prostoreFileId)\n\n this.editor.model.change((writer) => {\n writer.setAttribute('prostoreFileId', prostoreFileId, imageElement)\n })\n }\n )\n }\n\n private configureProstoreFileIdConversion() {\n const imageModelNames = ['imageBlock', 'imageInline']\n\n imageModelNames.forEach((imageModelName) => {\n if (this.canExtendSchemaElement(imageModelName)) {\n this.editor.model.schema.extend(imageModelName, {\n allowAttributes: ['prostoreFileId'],\n })\n }\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'figure',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'img',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('downcast').attributeToAttribute({\n model: 'prostoreFileId',\n view: (value: unknown) => ({\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n value: String(value),\n }),\n })\n }\n\n private configurePastedImageLimit(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n const clipboardPipeline = this.editor.plugins.get(ClipboardPipeline)\n\n clipboardPipeline.on('inputTransformation', (event, data) => {\n const currentImageCount = this.currentEmbeddedImageCountOrUndefined()\n\n if (currentImageCount === undefined) {\n return\n }\n\n const pastedImageCount = countImages(data.content)\n\n if (exceedsImageLimit(currentImageCount, pastedImageCount)) {\n event.stop?.()\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n })\n }\n\n private configureUnsupportedFileDrop(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n this.listenTo(\n this.editor.editing.view.document,\n 'clipboardInput',\n (event, data: ViewDocumentClipboardInputEvent['args'][0]) => {\n const files = data.dataTransfer.files\n\n if (files.length === 0) {\n return\n }\n\n const unsupportedFile = files.find(\n (file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type)\n )\n\n if (!unsupportedFile) {\n return\n }\n\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: fileTypeLabel(unsupportedFile),\n })\n )\n\n if (files.every((file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type))) {\n event.stop()\n }\n },\n { priority: 'high' }\n )\n }\n\n private canExtendSchemaElement(imageModelName: string) {\n const { schema } = this.editor.model\n\n return typeof schema.isRegistered === 'function'\n ? schema.isRegistered(imageModelName)\n : true\n }\n\n private currentEmbeddedImageCountOrUndefined() {\n try {\n return this.editor.model.document\n .getRootNames()\n .reduce((total, rootName) => {\n const root = this.editor.model.document.getRoot(rootName)\n\n return root ? total + countModelImages(root) : total\n }, 0)\n } catch (_error) {\n return undefined\n }\n }\n}\n\nfunction countImages(node: ViewNode | ViewDocumentFragment): number {\n if (!node.is('element') && !node.is('documentFragment')) {\n return 0\n }\n\n let imageCount = 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element', 'img')) {\n imageCount += 1\n continue\n }\n\n imageCount += countImages(child)\n }\n\n return imageCount\n}\n\nfunction countModelImages(node: ModelElement): number {\n let imageCount = isImageModelElement(node) ? 1 : 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element')) {\n imageCount += countModelImages(child)\n }\n }\n\n return imageCount\n}\n\nfunction isImageModelElement(item: ModelItem): item is ModelElement {\n return item.is('element', 'imageBlock') || item.is('element', 'imageInline')\n}\n\nfunction fileTypeLabel(file: File) {\n const fileType = IMAGE_TYPE_LABELS[file.type] ?? fileExtensionLabel(file.name)\n\n return fileType ? `${fileType} ` : ''\n}\n\nfunction fileExtensionLabel(fileName: string) {\n const extension = fileName.split('.').pop()\n\n if (!extension || extension === fileName) {\n return undefined\n }\n\n return extension.toUpperCase()\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ProcoreImageUploadPlugin.js","names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","_typeof","toPrimitive","String","Number","ClipboardPipeline","FileRepository","ImageUploadEditing","Plugin","DEFAULT_ALLOWED_MIME_TYPES","IMAGE_TYPE_LABELS","MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES","MAX_RICH_TEXT_IMAGES","PDF_UNSUPPORTED_MIME_TYPES","RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE","canonicalizeTextEditorImageUrl","REPORTED_UPLOAD_ERROR","exceedsImageLimit","currentImageCount","newImageCount","undefined","ProcoreImageUploadAdapter","loader","imageUpload","getEmbeddedImageCount","_upload","_callee","file","result","_t","_context","abortController","AbortController","fail","i18n","validateFile","warnPdfUnsupportedFile","validateReadableImage","validateImageCount","uploadFile","signal","aborted","toCkEditorResponse","toSilentUploadError","upload","abort","_this$abortController","_this$abortUpload","abortUpload","has","type","fileTypeLabel","size","_this$imageUpload$onW","_this$imageUpload","onWarning","_validateReadableImage","_callee2","url","image","_t2","_context2","URL","createObjectURL","Image","reject","onload","onerror","Error","src","revokeObjectURL","_x","_this$getEmbeddedImag","embeddedImageCount","count","prostoreFileId","test","defaultUrl","urls","response","width","height","get","_this","onProgress","uploaded","total","uploadTotal","message","_this$imageUpload$onE","_this$imageUpload2","onError","error","ProcoreImageUploadPlugin","_Plugin","_callSuper","_inherits","init","editor","config","configureProstoreFileIdConversion","configureUploadAdapter","configureUnsupportedFileDrop","configurePastedImageFileOverExternalHtml","configurePastedImageLimit","_this2","listenTo","editing","view","document","evt","data","dataTransfer","files","Array","from","imageFiles","filter","startsWith","html","getData","isImageOnlyPaste","Boolean","isImageOnlyHtml","clipboardHasImageBytes","unsupportedExtension","unsupportedPastedImageExtension","_imageUpload$onError","stop","concat","tooLargeFile","find","_imageUpload$onError2","uploadableFiles","execute","priority","_this3","fileRepository","plugins","createUploadAdapter","currentEmbeddedImageCountOrUndefined","imageUploadEditing","on","_event","_ref","imageElement","model","change","writer","setAttribute","_this4","imageModelNames","forEach","imageModelName","canExtendSchemaElement","schema","extend","allowAttributes","conversion","attributeToAttribute","name","_this5","clipboardPipeline","event","pastedImageCount","countImages","content","_event$stop","_imageUpload$onError3","_imageUpload$onError4","unsupportedFile","every","isRegistered","_this6","getRootNames","reduce","rootName","root","getRoot","countModelImages","_error","_doc$body$textContent","doc","DOMParser","parseFromString","body","querySelector","textContent","trim","extensions","querySelectorAll","map","img","_img$getAttribute","imageUrlExtension","getAttribute","isUnsupportedImageExtension","_path$split$pop","path","split","fileName","pop","fileExtensionLabel","extension","lower","toLowerCase","mimeType","node","is","imageCount","_i","_Array$from","getChildren","child","isImageModelElement","_i2","_Array$from2","item","_IMAGE_TYPE_LABELS$fi","fileType","toUpperCase"],"sources":["../../../../src/TextEditor/plugins/ProcoreImageUploadPlugin/ProcoreImageUploadPlugin.ts"],"sourcesContent":["import type {\n ClipboardInputTransformationData,\n EventInfo,\n ImageUploadCompleteData,\n ModelElement,\n ModelItem,\n UploadAdapter,\n ViewDocumentClipboardInputEvent,\n ViewDocumentFragment,\n ViewNode,\n} from 'ckeditor5'\nimport {\n ClipboardPipeline,\n FileRepository,\n ImageUploadEditing,\n Plugin,\n} from 'ckeditor5'\n\nimport type {\n TextEditorImageUploadHandlers,\n TextEditorImageUploadResult,\n} from '../../TextEditor.types'\nimport {\n DEFAULT_ALLOWED_MIME_TYPES,\n IMAGE_TYPE_LABELS,\n MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES,\n MAX_RICH_TEXT_IMAGES,\n PDF_UNSUPPORTED_MIME_TYPES,\n RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n} from '../../utils/imageAttributes'\nimport { canonicalizeTextEditorImageUrl } from '../../utils/imageUrls'\n\nconst REPORTED_UPLOAD_ERROR = ''\n\nconst exceedsImageLimit = (currentImageCount: number, newImageCount = 0) =>\n currentImageCount + newImageCount > MAX_RICH_TEXT_IMAGES\n\ninterface UploadLoader {\n file: Promise<File | null>\n uploaded?: number\n uploadTotal?: number | null\n}\n\ntype ClipboardCallback = (\n event: EventInfo<'inputTransformation', unknown>,\n data: ClipboardInputTransformationData\n) => void\n\ntype CkEditorUploadResponse = {\n urls: {\n default: string\n }\n prostoreFileId: number | string\n width?: number\n height?: number\n}\n\nexport class ProcoreImageUploadAdapter implements UploadAdapter {\n private abortController?: AbortController\n private abortUpload?: () => void\n\n constructor(\n private readonly loader: UploadLoader,\n private readonly imageUpload: TextEditorImageUploadHandlers,\n private readonly getEmbeddedImageCount?: () => number | undefined\n ) {}\n\n async upload(): Promise<CkEditorUploadResponse> {\n this.abortController = new AbortController()\n\n try {\n const file = await this.loader.file\n\n if (!file) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.noFile'))\n }\n\n this.validateFile(file)\n this.warnPdfUnsupportedFile(file)\n await this.validateReadableImage(file)\n this.validateImageCount()\n\n const result = await this.uploadFile(file)\n\n if (this.abortController.signal.aborted) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.aborted'))\n }\n\n return this.toCkEditorResponse(result)\n } catch (error) {\n throw this.toSilentUploadError(error)\n }\n }\n\n abort() {\n this.abortController?.abort()\n this.abortUpload?.()\n }\n\n private validateFile(file: File) {\n if (!DEFAULT_ALLOWED_MIME_TYPES.has(file.type)) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n if (file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.fileTooLarge'))\n }\n }\n\n private warnPdfUnsupportedFile(file: File) {\n if (!PDF_UNSUPPORTED_MIME_TYPES.has(file.type)) {\n return\n }\n\n this.imageUpload.onWarning?.(\n this.i18n.t('textEditor.imageUpload.pdfUnsupportedType', {\n type: this.fileTypeLabel(file),\n })\n )\n }\n\n private async validateReadableImage(file: File) {\n const url = URL.createObjectURL(file)\n\n try {\n const image = new Image()\n\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve()\n image.onerror = () => reject(new Error())\n image.src = url\n })\n } catch (_error) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.unreadable'))\n } finally {\n URL.revokeObjectURL(url)\n }\n }\n\n private validateImageCount() {\n const embeddedImageCount = this.getEmbeddedImageCount?.()\n\n if (\n embeddedImageCount !== undefined &&\n exceedsImageLimit(embeddedImageCount)\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n }\n\n private toCkEditorResponse(\n result: TextEditorImageUploadResult\n ): CkEditorUploadResponse {\n if (\n !result.prostoreFileId ||\n !/^[\\w-]+$/.test(String(result.prostoreFileId))\n ) {\n throw this.fail(\n this.i18n.t('textEditor.imageUpload.invalidProstoreFileId')\n )\n }\n\n const defaultUrl = canonicalizeTextEditorImageUrl(result.urls.default)\n\n if (!defaultUrl) {\n throw this.fail(this.i18n.t('textEditor.imageUpload.invalidImageUrl'))\n }\n\n const response: CkEditorUploadResponse = {\n urls: {\n default: defaultUrl,\n },\n prostoreFileId: result.prostoreFileId,\n width: result.width,\n height: result.height,\n }\n\n return response\n }\n\n private get i18n() {\n return this.imageUpload.i18n\n }\n\n private fileTypeLabel(file: File) {\n return fileTypeLabel(file)\n }\n\n private uploadFile(file: File) {\n return new Promise<TextEditorImageUploadResult>((resolve, reject) => {\n this.abortUpload = () =>\n reject(this.fail(this.i18n.t('textEditor.imageUpload.aborted')))\n\n this.imageUpload\n .upload(\n file,\n { signal: this.abortController!.signal },\n {\n onProgress: (uploaded, total) => {\n this.loader.uploaded = uploaded\n\n if (total !== undefined) {\n this.loader.uploadTotal = total\n }\n },\n }\n )\n .then(resolve)\n .catch(reject)\n })\n }\n\n private fail(message: string) {\n this.imageUpload.onError?.(message)\n\n return REPORTED_UPLOAD_ERROR\n }\n\n private toSilentUploadError(error: unknown) {\n if (error === REPORTED_UPLOAD_ERROR) {\n return error\n }\n\n if (error instanceof Error && error.message) {\n return this.fail(error.message)\n }\n\n return this.fail(this.i18n.t('textEditor.imageUpload.failed'))\n }\n}\n\nexport class ProcoreImageUploadPlugin extends Plugin {\n static get pluginName() {\n return 'ProcoreImageUploadPlugin'\n }\n\n static get requires() {\n return [FileRepository, ImageUploadEditing]\n }\n\n init() {\n const imageUpload = this.editor.config.get('procoreImageUpload') as\n | TextEditorImageUploadHandlers\n | undefined\n\n if (!imageUpload) {\n return\n }\n\n this.configureProstoreFileIdConversion()\n this.configureUploadAdapter(imageUpload)\n this.configureUnsupportedFileDrop(imageUpload)\n this.configurePastedImageFileOverExternalHtml(imageUpload)\n this.configurePastedImageLimit(imageUpload)\n }\n\n /**\n * \"Copy Image\" puts both the image bytes and HTML with the external URL on\n * the clipboard. CKEditor prefers the HTML, but the backend strips external\n * image URLs — so upload the bytes instead.\n */\n private configurePastedImageFileOverExternalHtml(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n this.listenTo(\n this.editor.editing.view.document,\n 'clipboardInput',\n (evt, data: ViewDocumentClipboardInputEvent['args'][0]) => {\n const dataTransfer = data.dataTransfer\n const files = Array.from(dataTransfer.files)\n const imageFiles = files.filter((file) =>\n file.type.startsWith('image/')\n )\n const html = dataTransfer.getData('text/html')\n const isImageOnlyPaste = Boolean(html) && isImageOnlyHtml(html)\n const clipboardHasImageBytes = imageFiles.length > 0\n\n if (!isImageOnlyPaste) {\n return\n }\n\n // The clipboard carries only an image URL, no bytes to upload (e.g.\n // \"Copy Image\" on an SVG). Show an error for clearly unsupported\n // extensions; otherwise let the default clipboard flow handle it.\n if (!clipboardHasImageBytes) {\n const unsupportedExtension = unsupportedPastedImageExtension(html)\n\n if (unsupportedExtension) {\n evt.stop()\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: `${unsupportedExtension} `,\n })\n )\n }\n\n return\n }\n\n evt.stop()\n\n // Unsupported types already got a toast from the unsupported-file\n // drop handler, which runs before this listener.\n const tooLargeFile = imageFiles.find(\n (file) =>\n DEFAULT_ALLOWED_MIME_TYPES.has(file.type) &&\n file.size > MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES\n )\n\n if (tooLargeFile) {\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.fileTooLarge')\n )\n }\n\n const uploadableFiles = imageFiles.filter(\n (file) =>\n DEFAULT_ALLOWED_MIME_TYPES.has(file.type) &&\n file.size <= MAX_IMAGE_UPLOAD_FILE_SIZE_BYTES\n )\n\n if (uploadableFiles.length > 0) {\n this.editor.execute('uploadImage', { file: uploadableFiles })\n }\n },\n { priority: 'high' }\n )\n }\n\n private configureUploadAdapter(imageUpload: TextEditorImageUploadHandlers) {\n const fileRepository = this.editor.plugins.get(FileRepository)\n\n fileRepository.createUploadAdapter = (loader) =>\n new ProcoreImageUploadAdapter(loader, imageUpload, () =>\n this.currentEmbeddedImageCountOrUndefined()\n )\n\n const imageUploadEditing = this.editor.plugins.get(ImageUploadEditing)\n\n imageUploadEditing.on(\n 'uploadComplete',\n (_event, { data, imageElement }: ImageUploadCompleteData) => {\n if (!imageElement || !data?.prostoreFileId) {\n return\n }\n\n const prostoreFileId = String(data.prostoreFileId)\n\n this.editor.model.change((writer) => {\n writer.setAttribute('prostoreFileId', prostoreFileId, imageElement)\n })\n }\n )\n }\n\n private configureProstoreFileIdConversion() {\n const imageModelNames = ['imageBlock', 'imageInline']\n\n imageModelNames.forEach((imageModelName) => {\n if (this.canExtendSchemaElement(imageModelName)) {\n this.editor.model.schema.extend(imageModelName, {\n allowAttributes: ['prostoreFileId'],\n })\n }\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'figure',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('upcast').attributeToAttribute({\n view: {\n name: 'img',\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n },\n model: 'prostoreFileId',\n })\n\n this.editor.conversion.for('downcast').attributeToAttribute({\n model: 'prostoreFileId',\n view: (value: unknown) => ({\n key: RICH_TEXT_EDITOR_FILE_ID_ATTRIBUTE,\n value: String(value),\n }),\n })\n }\n\n private configurePastedImageLimit(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n const clipboardPipeline = this.editor.plugins.get(ClipboardPipeline)\n\n clipboardPipeline.on('inputTransformation', (event, data) => {\n const currentImageCount = this.currentEmbeddedImageCountOrUndefined()\n\n if (currentImageCount === undefined) {\n return\n }\n\n const pastedImageCount = countImages(data.content)\n\n if (exceedsImageLimit(currentImageCount, pastedImageCount)) {\n event.stop?.()\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.imageLimit', {\n count: MAX_RICH_TEXT_IMAGES,\n })\n )\n }\n })\n }\n\n private configureUnsupportedFileDrop(\n imageUpload: TextEditorImageUploadHandlers\n ) {\n this.listenTo(\n this.editor.editing.view.document,\n 'clipboardInput',\n (event, data: ViewDocumentClipboardInputEvent['args'][0]) => {\n const files = data.dataTransfer.files\n\n if (files.length === 0) {\n return\n }\n\n const unsupportedFile = files.find(\n (file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type)\n )\n\n if (!unsupportedFile) {\n return\n }\n\n imageUpload.onError?.(\n imageUpload.i18n.t('textEditor.imageUpload.unsupportedType', {\n type: fileTypeLabel(unsupportedFile),\n })\n )\n\n if (files.every((file) => !DEFAULT_ALLOWED_MIME_TYPES.has(file.type))) {\n event.stop()\n }\n },\n { priority: 'high' }\n )\n }\n\n private canExtendSchemaElement(imageModelName: string) {\n const { schema } = this.editor.model\n\n return typeof schema.isRegistered === 'function'\n ? schema.isRegistered(imageModelName)\n : true\n }\n\n private currentEmbeddedImageCountOrUndefined() {\n try {\n return this.editor.model.document\n .getRootNames()\n .reduce((total, rootName) => {\n const root = this.editor.model.document.getRoot(rootName)\n\n return root ? total + countModelImages(root) : total\n }, 0)\n } catch (_error) {\n return undefined\n }\n }\n}\n\n// \"Copy Image\" shape: an image with no meaningful text. Rich pastes mixing\n// text and images keep the default clipboard handling.\nfunction isImageOnlyHtml(html: string) {\n const doc = new DOMParser().parseFromString(html, 'text/html')\n\n return doc.body.querySelector('img') !== null && !doc.body.textContent?.trim()\n}\n\n// Uppercase extension (e.g. \"SVG\") when every pasted image URL clearly has an\n// unsupported extension; undefined when supported, unknown, or inline data.\nfunction unsupportedPastedImageExtension(html: string) {\n const doc = new DOMParser().parseFromString(html, 'text/html')\n const extensions = Array.from(doc.body.querySelectorAll('img')).map((img) =>\n imageUrlExtension(img.getAttribute('src') ?? '')\n )\n\n return extensions.every(isUnsupportedImageExtension)\n ? extensions[0]\n : undefined\n}\n\n// \"https://site.com/logo.svg?w=64\" -> \"SVG\"; undefined for inline data or\n// URLs without a file extension.\nfunction imageUrlExtension(src: string) {\n if (src.startsWith('data:') || src.startsWith('blob:')) {\n return undefined\n }\n\n const path = src.split(/[?#]/)[0]\n const fileName = path.split('/').pop() ?? ''\n\n return fileExtensionLabel(fileName)\n}\n\nfunction isUnsupportedImageExtension(extension: string | undefined) {\n if (!extension) {\n return false\n }\n\n const lower = extension.toLowerCase()\n const mimeType = `image/${lower === 'jpg' ? 'jpeg' : lower}`\n\n return !DEFAULT_ALLOWED_MIME_TYPES.has(mimeType)\n}\n\nfunction countImages(node: ViewNode | ViewDocumentFragment): number {\n if (!node.is('element') && !node.is('documentFragment')) {\n return 0\n }\n\n let imageCount = 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element', 'img')) {\n imageCount += 1\n continue\n }\n\n imageCount += countImages(child)\n }\n\n return imageCount\n}\n\nfunction countModelImages(node: ModelElement): number {\n let imageCount = isImageModelElement(node) ? 1 : 0\n\n for (const child of Array.from(node.getChildren())) {\n if (child.is('element')) {\n imageCount += countModelImages(child)\n }\n }\n\n return imageCount\n}\n\nfunction isImageModelElement(item: ModelItem): item is ModelElement {\n return item.is('element', 'imageBlock') || item.is('element', 'imageInline')\n}\n\nfunction fileTypeLabel(file: File) {\n const fileType = IMAGE_TYPE_LABELS[file.type] ?? fileExtensionLabel(file.name)\n\n return fileType ? `${fileType} ` : ''\n}\n\nfunction fileExtensionLabel(fileName: string) {\n const extension = fileName.split('.').pop()\n\n if (!extension || extension === fileName) {\n return undefined\n }\n\n return extension.toUpperCase()\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { Alignment, Autoformat, AutoLink, BlockQuote, Bold, Clipboard, CodeBlock, Essentials, FontBackgroundColor, FontColor, FontSize, GeneralHtmlSupport, Heading, HorizontalLine, Image, ImageCaption, ImageInsert, ImageResize, ImageTextAlternative, ImageToolbar, ImageUpload, Indent, IndentBlock, Italic, Link, List, ListProperties, Paragraph, PasteFromOffice, RemoveFormat, SpecialCharacters, SpecialCharactersEssentials, Strikethrough, Subscript, Superscript, Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableToolbar, Underline } from 'ckeditor5';
1
+ import { Alignment, Autoformat, AutoLink, BlockQuote, Bold, Clipboard, CodeBlock, Essentials, FontBackgroundColor, FontColor, FontSize, GeneralHtmlSupport, Heading, HorizontalLine, Image, ImageCaption, ImageInsert, ImageResize, ImageStyle, ImageTextAlternative, ImageToolbar, ImageUpload, Indent, IndentBlock, Italic, Link, List, ListProperties, Paragraph, PasteFromOffice, RemoveFormat, SpecialCharacters, SpecialCharactersEssentials, Strikethrough, Subscript, Superscript, Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableToolbar, Underline } from 'ckeditor5';
2
2
  import { MultiLevelList } from 'ckeditor5-premium-features';
3
3
  import { CK_EDITOR_LICENSE_KEY } from '../license_key';
4
4
  import { CutPlugin } from '../plugins/CutPlugin';
@@ -158,7 +158,7 @@ export var getDefaultConfig = function getDefaultConfig() {
158
158
  if (options.imageUpload) {
159
159
  var _config$plugins;
160
160
  toolbar.splice(toolbar.indexOf('link'), 0, 'insertImage');
161
- (_config$plugins = config.plugins) === null || _config$plugins === void 0 || _config$plugins.push(Image, ImageCaption, ImageInsert, ImageResize, ImageTextAlternative, ImageToolbar, ImageUpload, ProcoreImageUploadPlugin);
161
+ (_config$plugins = config.plugins) === null || _config$plugins === void 0 || _config$plugins.push(Image, ImageCaption, ImageInsert, ImageResize, ImageStyle, ImageTextAlternative, ImageToolbar, ImageUpload, ProcoreImageUploadPlugin);
162
162
  config.image = {
163
163
  insert: {
164
164
  integrations: ['upload']
@@ -167,7 +167,7 @@ export var getDefaultConfig = function getDefaultConfig() {
167
167
  types: ['avif', 'gif', 'jpeg', 'png', 'webp']
168
168
  },
169
169
  resizeUnit: '%',
170
- toolbar: ['toggleImageCaption', 'imageTextAlternative', '|', 'resizeImage:25', 'resizeImage:50', 'resizeImage:75', 'resizeImage:original']
170
+ toolbar: ['imageStyle:inline', 'imageStyle:wrapText', 'imageStyle:breakText', '|', 'toggleImageCaption', 'imageTextAlternative', '|', 'resizeImage:25', 'resizeImage:50', 'resizeImage:75', 'resizeImage:original']
171
171
  };
172
172
  config.procoreImageUpload = options.imageUpload;
173
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["Alignment","Autoformat","AutoLink","BlockQuote","Bold","Clipboard","CodeBlock","Essentials","FontBackgroundColor","FontColor","FontSize","GeneralHtmlSupport","Heading","HorizontalLine","Image","ImageCaption","ImageInsert","ImageResize","ImageTextAlternative","ImageToolbar","ImageUpload","Indent","IndentBlock","Italic","Link","List","ListProperties","Paragraph","PasteFromOffice","RemoveFormat","SpecialCharacters","SpecialCharactersEssentials","Strikethrough","Subscript","Superscript","Table","TableCaption","TableCellProperties","TableColumnResize","TableProperties","TableToolbar","Underline","MultiLevelList","CK_EDITOR_LICENSE_KEY","CutPlugin","IndentPaddingToMarginPlugin","NormalizeTableWidthPlugin","PasteAsTextPlugin","PastePlugin","ProcoreImageUploadPlugin","TabSpacesPlugin","getEditorTranslation","getValidEditorLocale","TEXT_COLOR_PALETTE","color","getDefaultConfig","locale","arguments","length","undefined","options","toolbar","config","licenseKey","language","translations","plugins","fontSize","title","model","supportAllValues","fontColor","colors","fontBackgroundColor","indentBlock","offset","unit","htmlSupport","allow","name","styles","link","defaultProtocol","decorators","openInNewTab","mode","label","defaultValue","attributes","target","rel","list","properties","useAttribute","startIndex","reversed","table","contentToolbar","tableProperties","borderColors","backgroundColors","tableCellProperties","imageUpload","_config$plugins","splice","indexOf","push","image","insert","integrations","upload","types","resizeUnit","procoreImageUpload","addButtonDataAttributes","editor","applyAttributes","toolbarElement","ui","view","element","toolbarChildren","Array","from","querySelectorAll","moreDropdownButtons","allToolbarElements","concat","toolbarItems","get","elementIndex","forEach","itemName","classList","contains","setAttribute","observer","MutationObserver","observe","childList","subtree","on","disconnect"],"sources":["../../../src/TextEditor/utils/config.ts"],"sourcesContent":["import type { ClassicEditor, EditorConfig } from 'ckeditor5'\nimport {\n Alignment,\n Autoformat,\n AutoLink,\n BlockQuote,\n Bold,\n Clipboard,\n CodeBlock,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Heading,\n HorizontalLine,\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n Paragraph,\n PasteFromOffice,\n RemoveFormat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Strikethrough,\n Subscript,\n Superscript,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n} from 'ckeditor5'\nimport { MultiLevelList } from 'ckeditor5-premium-features'\n\nimport { CK_EDITOR_LICENSE_KEY } from '../license_key'\nimport { CutPlugin } from '../plugins/CutPlugin'\nimport { IndentPaddingToMarginPlugin } from '../plugins/IndentPaddingToMarginPlugin'\nimport { NormalizeTableWidthPlugin } from '../plugins/NormalizeTableWidthPlugin'\nimport { PasteAsTextPlugin } from '../plugins/PasteAsTextPlugin'\nimport { PastePlugin } from '../plugins/PastePlugin'\nimport { ProcoreImageUploadPlugin } from '../plugins/ProcoreImageUploadPlugin'\nimport { TabSpacesPlugin } from '../plugins/TabSpacesPlugin'\nimport type { TextEditorImageUploadHandlers } from '../TextEditor.types'\nimport { getEditorTranslation, getValidEditorLocale } from './locale'\n\ninterface TextEditorConfigOptions {\n imageUpload?: TextEditorImageUploadHandlers\n}\n\ntype ProcoreEditorConfig = EditorConfig & {\n procoreImageUpload?: TextEditorImageUploadHandlers\n}\n\nconst TEXT_COLOR_PALETTE = [\n { color: '#BFEDD2' },\n { color: '#FBEEB8' },\n { color: '#F8CAC6' },\n { color: '#ECCAFA' },\n { color: '#C2E0F4' },\n { color: '#2DC26B' },\n { color: '#F1C40F' },\n { color: '#E03E2D' },\n { color: '#B96AD9' },\n { color: '#3598DB' },\n { color: '#169179' },\n { color: '#E67E23' },\n { color: '#BA372A' },\n { color: '#843FA1' },\n { color: '#236FA1' },\n { color: '#ECF0F1' },\n { color: '#CED4D9' },\n { color: '#95A5A6' },\n { color: '#7E8C8D' },\n { color: '#34495E' },\n { color: '#000000' },\n { color: '#FFFFFF' },\n]\n\nexport const getDefaultConfig = (\n locale: string = 'en',\n options: TextEditorConfigOptions = {}\n): EditorConfig => {\n const toolbar = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n '|',\n 'alignment:left',\n 'alignment:center',\n 'alignment:right',\n '|',\n 'bulletedList',\n 'numberedList',\n 'multiLevelList',\n '|',\n 'outdent',\n 'indent',\n '|',\n 'cut',\n 'paste',\n 'pasteAsText',\n '|',\n 'fontSize',\n '|',\n 'fontColor',\n 'fontBackgroundColor',\n '|',\n 'insertTable',\n 'link',\n '|',\n 'blockquote',\n 'heading',\n '|',\n 'horizontalLine',\n 'removeFormat',\n 'specialCharacters',\n 'subscript',\n 'superscript',\n 'codeblock',\n '|',\n 'undo',\n 'redo',\n ]\n\n const config: ProcoreEditorConfig = {\n licenseKey: CK_EDITOR_LICENSE_KEY,\n language: getValidEditorLocale(locale),\n translations: [getEditorTranslation(locale)],\n plugins: [\n Alignment,\n AutoLink,\n Bold,\n Clipboard,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n MultiLevelList,\n Paragraph,\n PasteFromOffice,\n Strikethrough,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n CutPlugin,\n PastePlugin,\n PasteAsTextPlugin,\n IndentPaddingToMarginPlugin,\n NormalizeTableWidthPlugin,\n BlockQuote,\n Heading,\n Autoformat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Subscript,\n Superscript,\n HorizontalLine,\n RemoveFormat,\n CodeBlock,\n TabSpacesPlugin, // TODO - delete\n ],\n toolbar,\n fontSize: {\n options: [\n { title: '8pt', model: '8px' },\n { title: '10pt', model: '10px' },\n { title: '12pt', model: '12px' },\n { title: '14pt', model: '14px' },\n { title: '18pt', model: '18px' },\n { title: '24pt', model: '24px' },\n { title: '36pt', model: '36px' },\n ],\n supportAllValues: true,\n },\n fontColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n fontBackgroundColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n indentBlock: {\n offset: 40,\n unit: 'px',\n },\n htmlSupport: {\n allow: [\n {\n name: 'p',\n styles: {\n 'margin-left': true,\n },\n },\n ],\n },\n link: {\n // Add a protocol to links typed without one (e.g. \"www.google.com\"),\n // so they are not treated as relative URLs.\n defaultProtocol: 'https://',\n decorators: {\n // Manual decorator renders an \"Open in a new tab\" switch in the link\n // form, letting the user choose new tab vs. same window per link.\n openInNewTab: {\n mode: 'manual',\n // The label doubles as CKEditor's own translation key (resolved by\n // editor.locale.t, not Procore I18n). Every locale this editor\n // supports (en, fr, es, de, ja, pl, pt, th, zh) already ships a\n // CKEditor translation for \"Open in a new tab\" (loaded in locale.ts),\n // so it is localized automatically and no Procore i18n entry is\n // needed. Do not replace with I18n.t(...): that would bypass\n // CKEditor's translator and duplicate existing translations.\n label: 'Open in a new tab',\n defaultValue: false, // unchecked by default => opens in same window\n attributes: {\n target: '_blank',\n rel: 'noopener noreferrer',\n },\n },\n },\n },\n list: {\n properties: {\n styles: {\n useAttribute: false,\n },\n startIndex: true,\n reversed: true,\n },\n },\n table: {\n contentToolbar: [\n 'tableColumn',\n 'tableRow',\n 'mergeTableCells',\n 'tableProperties',\n 'tableCellProperties',\n ],\n tableProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n tableCellProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n },\n }\n\n if (options.imageUpload) {\n toolbar.splice(toolbar.indexOf('link'), 0, 'insertImage')\n config.plugins?.push(\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n ProcoreImageUploadPlugin\n )\n config.image = {\n insert: {\n integrations: ['upload'],\n },\n upload: {\n types: ['avif', 'gif', 'jpeg', 'png', 'webp'],\n },\n resizeUnit: '%',\n toolbar: [\n 'toggleImageCaption',\n 'imageTextAlternative',\n '|',\n 'resizeImage:25',\n 'resizeImage:50',\n 'resizeImage:75',\n 'resizeImage:original',\n ],\n }\n config.procoreImageUpload = options.imageUpload\n }\n\n return config\n}\n\n// Add stable data attributes to toolbar buttons for the styling (or testing) purposes\nexport const addButtonDataAttributes = (editor: ClassicEditor) => {\n const applyAttributes = () => {\n const toolbarElement = editor.ui.view.toolbar.element\n if (!toolbarElement) {\n return\n }\n\n // Get buttons in the main toolbar\n const toolbarChildren = Array.from(\n toolbarElement.querySelectorAll('.ck-toolbar__items > *')\n )\n\n // Get buttons hidden in \"more\" dropdown\n const moreDropdownButtons = Array.from(\n toolbarElement.querySelectorAll('.ck-dropdown__panel .ck-list .ck-button')\n )\n\n const allToolbarElements = [...toolbarChildren, ...moreDropdownButtons]\n\n // Create mapping based on toolbar configuration order\n const toolbarItems = (editor.config.get('toolbar') || []) as string[]\n let elementIndex = 0\n\n toolbarItems.forEach((itemName) => {\n const element = allToolbarElements[elementIndex]\n if (\n itemName !== '|' &&\n element &&\n !element.classList.contains('ck-toolbar__separator')\n ) {\n // Use the toolbar item name as the stable identifier\n element.setAttribute('data-cke-command', itemName)\n }\n elementIndex++\n })\n }\n\n // Apply attributes initially\n applyAttributes()\n\n // Re-apply when dropdown menus are opened (buttons get created dynamically)\n const toolbarElement = editor.ui.view.toolbar.element\n if (toolbarElement) {\n const observer = new MutationObserver(() => {\n applyAttributes()\n })\n observer.observe(toolbarElement, {\n childList: true,\n subtree: true,\n })\n editor.on('destroy', () => {\n observer.disconnect()\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"config.js","names":["Alignment","Autoformat","AutoLink","BlockQuote","Bold","Clipboard","CodeBlock","Essentials","FontBackgroundColor","FontColor","FontSize","GeneralHtmlSupport","Heading","HorizontalLine","Image","ImageCaption","ImageInsert","ImageResize","ImageStyle","ImageTextAlternative","ImageToolbar","ImageUpload","Indent","IndentBlock","Italic","Link","List","ListProperties","Paragraph","PasteFromOffice","RemoveFormat","SpecialCharacters","SpecialCharactersEssentials","Strikethrough","Subscript","Superscript","Table","TableCaption","TableCellProperties","TableColumnResize","TableProperties","TableToolbar","Underline","MultiLevelList","CK_EDITOR_LICENSE_KEY","CutPlugin","IndentPaddingToMarginPlugin","NormalizeTableWidthPlugin","PasteAsTextPlugin","PastePlugin","ProcoreImageUploadPlugin","TabSpacesPlugin","getEditorTranslation","getValidEditorLocale","TEXT_COLOR_PALETTE","color","getDefaultConfig","locale","arguments","length","undefined","options","toolbar","config","licenseKey","language","translations","plugins","fontSize","title","model","supportAllValues","fontColor","colors","fontBackgroundColor","indentBlock","offset","unit","htmlSupport","allow","name","styles","link","defaultProtocol","decorators","openInNewTab","mode","label","defaultValue","attributes","target","rel","list","properties","useAttribute","startIndex","reversed","table","contentToolbar","tableProperties","borderColors","backgroundColors","tableCellProperties","imageUpload","_config$plugins","splice","indexOf","push","image","insert","integrations","upload","types","resizeUnit","procoreImageUpload","addButtonDataAttributes","editor","applyAttributes","toolbarElement","ui","view","element","toolbarChildren","Array","from","querySelectorAll","moreDropdownButtons","allToolbarElements","concat","toolbarItems","get","elementIndex","forEach","itemName","classList","contains","setAttribute","observer","MutationObserver","observe","childList","subtree","on","disconnect"],"sources":["../../../src/TextEditor/utils/config.ts"],"sourcesContent":["import type { ClassicEditor, EditorConfig } from 'ckeditor5'\nimport {\n Alignment,\n Autoformat,\n AutoLink,\n BlockQuote,\n Bold,\n Clipboard,\n CodeBlock,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Heading,\n HorizontalLine,\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageStyle,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n Paragraph,\n PasteFromOffice,\n RemoveFormat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Strikethrough,\n Subscript,\n Superscript,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n} from 'ckeditor5'\nimport { MultiLevelList } from 'ckeditor5-premium-features'\n\nimport { CK_EDITOR_LICENSE_KEY } from '../license_key'\nimport { CutPlugin } from '../plugins/CutPlugin'\nimport { IndentPaddingToMarginPlugin } from '../plugins/IndentPaddingToMarginPlugin'\nimport { NormalizeTableWidthPlugin } from '../plugins/NormalizeTableWidthPlugin'\nimport { PasteAsTextPlugin } from '../plugins/PasteAsTextPlugin'\nimport { PastePlugin } from '../plugins/PastePlugin'\nimport { ProcoreImageUploadPlugin } from '../plugins/ProcoreImageUploadPlugin'\nimport { TabSpacesPlugin } from '../plugins/TabSpacesPlugin'\nimport type { TextEditorImageUploadHandlers } from '../TextEditor.types'\nimport { getEditorTranslation, getValidEditorLocale } from './locale'\n\ninterface TextEditorConfigOptions {\n imageUpload?: TextEditorImageUploadHandlers\n}\n\ntype ProcoreEditorConfig = EditorConfig & {\n procoreImageUpload?: TextEditorImageUploadHandlers\n}\n\nconst TEXT_COLOR_PALETTE = [\n { color: '#BFEDD2' },\n { color: '#FBEEB8' },\n { color: '#F8CAC6' },\n { color: '#ECCAFA' },\n { color: '#C2E0F4' },\n { color: '#2DC26B' },\n { color: '#F1C40F' },\n { color: '#E03E2D' },\n { color: '#B96AD9' },\n { color: '#3598DB' },\n { color: '#169179' },\n { color: '#E67E23' },\n { color: '#BA372A' },\n { color: '#843FA1' },\n { color: '#236FA1' },\n { color: '#ECF0F1' },\n { color: '#CED4D9' },\n { color: '#95A5A6' },\n { color: '#7E8C8D' },\n { color: '#34495E' },\n { color: '#000000' },\n { color: '#FFFFFF' },\n]\n\nexport const getDefaultConfig = (\n locale: string = 'en',\n options: TextEditorConfigOptions = {}\n): EditorConfig => {\n const toolbar = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n '|',\n 'alignment:left',\n 'alignment:center',\n 'alignment:right',\n '|',\n 'bulletedList',\n 'numberedList',\n 'multiLevelList',\n '|',\n 'outdent',\n 'indent',\n '|',\n 'cut',\n 'paste',\n 'pasteAsText',\n '|',\n 'fontSize',\n '|',\n 'fontColor',\n 'fontBackgroundColor',\n '|',\n 'insertTable',\n 'link',\n '|',\n 'blockquote',\n 'heading',\n '|',\n 'horizontalLine',\n 'removeFormat',\n 'specialCharacters',\n 'subscript',\n 'superscript',\n 'codeblock',\n '|',\n 'undo',\n 'redo',\n ]\n\n const config: ProcoreEditorConfig = {\n licenseKey: CK_EDITOR_LICENSE_KEY,\n language: getValidEditorLocale(locale),\n translations: [getEditorTranslation(locale)],\n plugins: [\n Alignment,\n AutoLink,\n Bold,\n Clipboard,\n Essentials,\n FontBackgroundColor,\n FontColor,\n FontSize,\n GeneralHtmlSupport,\n Indent,\n IndentBlock,\n Italic,\n Link,\n List,\n ListProperties,\n MultiLevelList,\n Paragraph,\n PasteFromOffice,\n Strikethrough,\n Table,\n TableCaption,\n TableCellProperties,\n TableColumnResize,\n TableProperties,\n TableToolbar,\n Underline,\n CutPlugin,\n PastePlugin,\n PasteAsTextPlugin,\n IndentPaddingToMarginPlugin,\n NormalizeTableWidthPlugin,\n BlockQuote,\n Heading,\n Autoformat,\n SpecialCharacters,\n SpecialCharactersEssentials,\n Subscript,\n Superscript,\n HorizontalLine,\n RemoveFormat,\n CodeBlock,\n TabSpacesPlugin, // TODO - delete\n ],\n toolbar,\n fontSize: {\n options: [\n { title: '8pt', model: '8px' },\n { title: '10pt', model: '10px' },\n { title: '12pt', model: '12px' },\n { title: '14pt', model: '14px' },\n { title: '18pt', model: '18px' },\n { title: '24pt', model: '24px' },\n { title: '36pt', model: '36px' },\n ],\n supportAllValues: true,\n },\n fontColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n fontBackgroundColor: {\n colors: TEXT_COLOR_PALETTE,\n },\n indentBlock: {\n offset: 40,\n unit: 'px',\n },\n htmlSupport: {\n allow: [\n {\n name: 'p',\n styles: {\n 'margin-left': true,\n },\n },\n ],\n },\n link: {\n // Add a protocol to links typed without one (e.g. \"www.google.com\"),\n // so they are not treated as relative URLs.\n defaultProtocol: 'https://',\n decorators: {\n // Manual decorator renders an \"Open in a new tab\" switch in the link\n // form, letting the user choose new tab vs. same window per link.\n openInNewTab: {\n mode: 'manual',\n // The label doubles as CKEditor's own translation key (resolved by\n // editor.locale.t, not Procore I18n). Every locale this editor\n // supports (en, fr, es, de, ja, pl, pt, th, zh) already ships a\n // CKEditor translation for \"Open in a new tab\" (loaded in locale.ts),\n // so it is localized automatically and no Procore i18n entry is\n // needed. Do not replace with I18n.t(...): that would bypass\n // CKEditor's translator and duplicate existing translations.\n label: 'Open in a new tab',\n defaultValue: false, // unchecked by default => opens in same window\n attributes: {\n target: '_blank',\n rel: 'noopener noreferrer',\n },\n },\n },\n },\n list: {\n properties: {\n styles: {\n useAttribute: false,\n },\n startIndex: true,\n reversed: true,\n },\n },\n table: {\n contentToolbar: [\n 'tableColumn',\n 'tableRow',\n 'mergeTableCells',\n 'tableProperties',\n 'tableCellProperties',\n ],\n tableProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n tableCellProperties: {\n borderColors: TEXT_COLOR_PALETTE,\n backgroundColors: TEXT_COLOR_PALETTE,\n },\n },\n }\n\n if (options.imageUpload) {\n toolbar.splice(toolbar.indexOf('link'), 0, 'insertImage')\n config.plugins?.push(\n Image,\n ImageCaption,\n ImageInsert,\n ImageResize,\n ImageStyle,\n ImageTextAlternative,\n ImageToolbar,\n ImageUpload,\n ProcoreImageUploadPlugin\n )\n config.image = {\n insert: {\n integrations: ['upload'],\n },\n upload: {\n types: ['avif', 'gif', 'jpeg', 'png', 'webp'],\n },\n resizeUnit: '%',\n toolbar: [\n 'imageStyle:inline',\n 'imageStyle:wrapText',\n 'imageStyle:breakText',\n '|',\n 'toggleImageCaption',\n 'imageTextAlternative',\n '|',\n 'resizeImage:25',\n 'resizeImage:50',\n 'resizeImage:75',\n 'resizeImage:original',\n ],\n }\n config.procoreImageUpload = options.imageUpload\n }\n\n return config\n}\n\n// Add stable data attributes to toolbar buttons for the styling (or testing) purposes\nexport const addButtonDataAttributes = (editor: ClassicEditor) => {\n const applyAttributes = () => {\n const toolbarElement = editor.ui.view.toolbar.element\n if (!toolbarElement) {\n return\n }\n\n // Get buttons in the main toolbar\n const toolbarChildren = Array.from(\n toolbarElement.querySelectorAll('.ck-toolbar__items > *')\n )\n\n // Get buttons hidden in \"more\" dropdown\n const moreDropdownButtons = Array.from(\n toolbarElement.querySelectorAll('.ck-dropdown__panel .ck-list .ck-button')\n )\n\n const allToolbarElements = [...toolbarChildren, ...moreDropdownButtons]\n\n // Create mapping based on toolbar configuration order\n const toolbarItems = (editor.config.get('toolbar') || []) as string[]\n let elementIndex = 0\n\n toolbarItems.forEach((itemName) => {\n const element = allToolbarElements[elementIndex]\n if (\n itemName !== '|' &&\n element &&\n !element.classList.contains('ck-toolbar__separator')\n ) {\n // Use the toolbar item name as the stable identifier\n element.setAttribute('data-cke-command', itemName)\n }\n elementIndex++\n })\n }\n\n // Apply attributes initially\n applyAttributes()\n\n // Re-apply when dropdown menus are opened (buttons get created dynamically)\n const toolbarElement = editor.ui.view.toolbar.element\n if (toolbarElement) {\n const observer = new MutationObserver(() => {\n applyAttributes()\n })\n observer.observe(toolbarElement, {\n childList: true,\n subtree: true,\n })\n editor.on('destroy', () => {\n observer.disconnect()\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,12 @@
1
+ import type { I18njs } from '@procore/core-i18n-js';
1
2
  import type { TextEditorImageUploadHandlers } from '../TextEditor.types';
3
+ type TextEditorI18n = Pick<I18njs, 't'>;
2
4
  type RichTextEditorHandlerOptions = {
3
5
  companyId: number | string;
4
6
  projectId?: number | string;
5
7
  toolName: string;
8
+ i18n: TextEditorI18n;
6
9
  fetcher?: typeof fetch;
7
10
  };
8
- export declare const richTextEditorUploadHandler: ({ companyId, projectId, toolName, fetcher, }: RichTextEditorHandlerOptions) => TextEditorImageUploadHandlers["upload"];
11
+ export declare const richTextEditorUploadHandler: ({ companyId, projectId, toolName, i18n, fetcher, }: RichTextEditorHandlerOptions) => TextEditorImageUploadHandlers["upload"];
9
12
  export {};