@tiny-mce-umbraco/backoffice 17.2.0 → 17.5.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 (47) hide show
  1. package/dist-cms/api/types.gen.d.ts +1 -0
  2. package/dist-cms/api/types.gen.d.ts.map +1 -1
  3. package/dist-cms/clipboard/block/copy/block-rte-to-block-copy-translator.d.ts +9 -0
  4. package/dist-cms/clipboard/block/copy/block-rte-to-block-copy-translator.d.ts.map +1 -0
  5. package/dist-cms/clipboard/block/copy/block-rte-to-block-copy-translator.js +23 -0
  6. package/dist-cms/clipboard/block/paste/block-to-block-rte-paste-translator.d.ts +15 -0
  7. package/dist-cms/clipboard/block/paste/block-to-block-rte-paste-translator.d.ts.map +1 -0
  8. package/dist-cms/clipboard/block/paste/block-to-block-rte-paste-translator.js +27 -0
  9. package/dist-cms/clipboard/manifests.d.ts +2 -0
  10. package/dist-cms/clipboard/manifests.d.ts.map +1 -0
  11. package/dist-cms/clipboard/manifests.js +20 -0
  12. package/dist-cms/components/input-tiny-mce/input-tiny-mce.defaults.d.ts.map +1 -1
  13. package/dist-cms/components/input-tiny-mce/input-tiny-mce.defaults.js +77 -8
  14. package/dist-cms/components/input-tiny-mce/input-tiny-mce.element.d.ts.map +1 -1
  15. package/dist-cms/components/input-tiny-mce/input-tiny-mce.element.js +32 -4
  16. package/dist-cms/localizations/ar.d.ts.map +1 -1
  17. package/dist-cms/localizations/ar.js +3 -0
  18. package/dist-cms/localizations/bs.d.ts.map +1 -1
  19. package/dist-cms/localizations/bs.js +3 -0
  20. package/dist-cms/localizations/cy.d.ts.map +1 -1
  21. package/dist-cms/localizations/cy.js +3 -0
  22. package/dist-cms/localizations/da.d.ts.map +1 -1
  23. package/dist-cms/localizations/da.js +4 -0
  24. package/dist-cms/localizations/en.d.ts.map +1 -1
  25. package/dist-cms/localizations/en.js +4 -0
  26. package/dist-cms/localizations/hr.d.ts.map +1 -1
  27. package/dist-cms/localizations/hr.js +3 -0
  28. package/dist-cms/localizations/it.d.ts.map +1 -1
  29. package/dist-cms/localizations/it.js +3 -0
  30. package/dist-cms/localizations/manifests.d.ts.map +1 -1
  31. package/dist-cms/localizations/manifests.js +24 -24
  32. package/dist-cms/localizations/nl.d.ts.map +1 -1
  33. package/dist-cms/localizations/nl.js +3 -0
  34. package/dist-cms/localizations/tr.d.ts.map +1 -1
  35. package/dist-cms/localizations/tr.js +3 -0
  36. package/dist-cms/manifests.d.ts.map +1 -1
  37. package/dist-cms/manifests.js +2 -0
  38. package/dist-cms/plugins/tiny-mce-block-picker.plugin.d.ts.map +1 -1
  39. package/dist-cms/plugins/tiny-mce-block-picker.plugin.js +20 -2
  40. package/dist-cms/plugins/tiny-mce-embeddedmedia.plugin.d.ts.map +1 -1
  41. package/dist-cms/plugins/tiny-mce-embeddedmedia.plugin.js +1 -0
  42. package/dist-cms/plugins/tiny-mce-mediapicker.plugin.d.ts.map +1 -1
  43. package/dist-cms/plugins/tiny-mce-mediapicker.plugin.js +7 -3
  44. package/dist-cms/property-editors/tiny-mce/manifests.d.ts.map +1 -1
  45. package/dist-cms/property-editors/tiny-mce/manifests.js +8 -0
  46. package/package.json +6 -6
  47. package/dist-cms/README.md +0 -1
@@ -42,6 +42,7 @@ export type TinyMceConfig = {
42
42
  openAiApikey: string;
43
43
  pluginsToExclude: Array<string>;
44
44
  openAiApiConfig: OpenAiApiConfig;
45
+ sanitizeTinyMce: boolean;
45
46
  customConfig: {
46
47
  [key: string]: unknown;
47
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.gen.d.ts","sourceRoot":"","sources":["../../src/api/types.gen.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,yBAAyB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,8BAA8B,CAAC;CACxC,CAAC;AAEF,oBAAY,8BAA8B;IACtC,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,GAAG,QAAQ;CACd;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACvC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,YAAY,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACzB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,EAAE,4CAA4C,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,GAAG,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,eAAe,CAAC,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAC7B;;OAEG;IACH,GAAG,EAAE,0BAA0B,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.gen.d.ts","sourceRoot":"","sources":["../../src/api/types.gen.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,yBAAyB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,8BAA8B,CAAC;CACxC,CAAC;AAEF,oBAAY,8BAA8B;IACtC,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,GAAG,QAAQ;CACd;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACvC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,YAAY,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACzB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,cAAc,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,EAAE,4CAA4C,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,GAAG,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,eAAe,CAAC,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAC7B;;OAEG;IACH,GAAG,EAAE,0BAA0B,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
2
+ import type { UmbBlockRteValueModel } from '@umbraco-cms/backoffice/block-rte';
3
+ import type { UmbBlockClipboardEntryValueModel } from '@umbraco-cms/backoffice/block';
4
+ import type { UmbClipboardCopyPropertyValueTranslator } from '@umbraco-cms/backoffice/clipboard';
5
+ export declare class UmbTinyMceBlockRteToBlockClipboardCopyPropertyValueTranslator extends UmbControllerBase implements UmbClipboardCopyPropertyValueTranslator<UmbBlockRteValueModel> {
6
+ translate(propertyValue: UmbBlockRteValueModel): Promise<UmbBlockClipboardEntryValueModel>;
7
+ }
8
+ export { UmbTinyMceBlockRteToBlockClipboardCopyPropertyValueTranslator as api };
9
+ //# sourceMappingURL=block-rte-to-block-copy-translator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-rte-to-block-copy-translator.d.ts","sourceRoot":"","sources":["../../../../src/clipboard/block/copy/block-rte-to-block-copy-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,mCAAmC,CAAC;AAEjG,qBAAa,6DACZ,SAAQ,iBACR,YAAW,uCAAuC,CAAC,qBAAqB,CAAC;IAEnE,SAAS,CAAC,aAAa,EAAE,qBAAqB,GAAG,OAAO,CAAC,gCAAgC,CAAC;CAkBhG;AAED,OAAO,EAAE,6DAA6D,IAAI,GAAG,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
2
+ import { UMB_BLOCK_RTE_PROPERTY_EDITOR_SCHEMA_ALIAS } from '@umbraco-cms/backoffice/rte';
3
+ export class UmbTinyMceBlockRteToBlockClipboardCopyPropertyValueTranslator extends UmbControllerBase {
4
+ async translate(propertyValue) {
5
+ if (!propertyValue) {
6
+ throw new Error('Property value is missing.');
7
+ }
8
+ const valueClone = structuredClone(propertyValue);
9
+ const contentData = valueClone.contentData;
10
+ const layout = valueClone.layout?.[UMB_BLOCK_RTE_PROPERTY_EDITOR_SCHEMA_ALIAS] ?? undefined;
11
+ const settingsData = valueClone.settingsData;
12
+ layout?.forEach((layoutItem) => {
13
+ // @ts-expect-error removing $type from layout item
14
+ delete layoutItem.$type;
15
+ });
16
+ return {
17
+ contentData: contentData ?? [],
18
+ layout: layout,
19
+ settingsData: settingsData ?? [],
20
+ };
21
+ }
22
+ }
23
+ export { UmbTinyMceBlockRteToBlockClipboardCopyPropertyValueTranslator as api };
@@ -0,0 +1,15 @@
1
+ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
2
+ import type { UmbBlockClipboardEntryValueModel } from '@umbraco-cms/backoffice/block';
3
+ import type { UmbPropertyEditorRteValueType } from '@umbraco-cms/backoffice/rte';
4
+ import type { UmbClipboardPastePropertyValueTranslator } from '@umbraco-cms/backoffice/clipboard';
5
+ export declare class UmbTinyMceBlockToBlockRteClipboardPastePropertyValueTranslator extends UmbControllerBase implements UmbClipboardPastePropertyValueTranslator<UmbBlockClipboardEntryValueModel, UmbPropertyEditorRteValueType> {
6
+ translate(value: UmbBlockClipboardEntryValueModel): Promise<UmbPropertyEditorRteValueType>;
7
+ isCompatibleValue(propertyValue: UmbPropertyEditorRteValueType, config: Array<{
8
+ alias: string;
9
+ value: [{
10
+ contentElementTypeKey: string;
11
+ }];
12
+ }>): Promise<boolean>;
13
+ }
14
+ export { UmbTinyMceBlockToBlockRteClipboardPastePropertyValueTranslator as api };
15
+ //# sourceMappingURL=block-to-block-rte-paste-translator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-to-block-rte-paste-translator.d.ts","sourceRoot":"","sources":["../../../../src/clipboard/block/paste/block-to-block-rte-paste-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,KAAK,EAAE,wCAAwC,EAAE,MAAM,mCAAmC,CAAC;AAElG,qBAAa,8DACZ,SAAQ,iBACR,YAAW,wCAAwC,CAAC,gCAAgC,EAAE,6BAA6B,CAAC;IAE9G,SAAS,CAAC,KAAK,EAAE,gCAAgC,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAkB1F,iBAAiB,CACtB,aAAa,EAAE,6BAA6B,EAC5C,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC;YAAE,qBAAqB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,GAC1E,OAAO,CAAC,OAAO,CAAC;CAMnB;AAED,OAAO,EAAE,8DAA8D,IAAI,GAAG,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
2
+ import { UMB_BLOCK_RTE_PROPERTY_EDITOR_SCHEMA_ALIAS } from '@umbraco-cms/backoffice/rte';
3
+ export class UmbTinyMceBlockToBlockRteClipboardPastePropertyValueTranslator extends UmbControllerBase {
4
+ async translate(value) {
5
+ if (!value) {
6
+ throw new Error('Value is missing.');
7
+ }
8
+ const valueClone = structuredClone(value);
9
+ return {
10
+ markup: '',
11
+ blocks: {
12
+ contentData: valueClone.contentData,
13
+ settingsData: valueClone.settingsData,
14
+ expose: [],
15
+ layout: {
16
+ [UMB_BLOCK_RTE_PROPERTY_EDITOR_SCHEMA_ALIAS]: valueClone.layout ?? undefined,
17
+ },
18
+ },
19
+ };
20
+ }
21
+ async isCompatibleValue(propertyValue, config) {
22
+ const allowedBlockContentTypes = config.find((c) => c.alias === 'blocks')?.value.map((b) => b.contentElementTypeKey) ?? [];
23
+ const blockContentTypes = propertyValue.blocks?.contentData.map((c) => c.contentTypeKey) ?? [];
24
+ return blockContentTypes.every((b) => allowedBlockContentTypes.includes(b));
25
+ }
26
+ }
27
+ export { UmbTinyMceBlockToBlockRteClipboardPastePropertyValueTranslator as api };
@@ -0,0 +1,2 @@
1
+ export declare const manifests: Array<UmbExtensionManifest>;
2
+ //# sourceMappingURL=manifests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../../src/clipboard/manifests.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAiBjD,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS } from '@tiny-mce-umbraco/backoffice/core';
2
+ import { UMB_BLOCK_CLIPBOARD_ENTRY_VALUE_TYPE } from '@umbraco-cms/backoffice/block';
3
+ export const manifests = [
4
+ {
5
+ type: 'clipboardCopyPropertyValueTranslator',
6
+ alias: 'TinyMCE.ClipboardCopyPropertyValueTranslator.BlockRteToBlock',
7
+ name: 'TinyMCE Block RTE To Block Clipboard Copy Property Value Translator',
8
+ api: () => import('./block/copy/block-rte-to-block-copy-translator.js'),
9
+ fromPropertyEditorUi: UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS,
10
+ toClipboardEntryValueType: UMB_BLOCK_CLIPBOARD_ENTRY_VALUE_TYPE,
11
+ },
12
+ {
13
+ type: 'clipboardPastePropertyValueTranslator',
14
+ alias: 'TinyMCE.ClipboardPastePropertyValueTranslator.BlockToBlockRte',
15
+ name: 'TinyMCE Block To Block RTE Clipboard Paste Property Value Translator',
16
+ api: () => import('./block/paste/block-to-block-rte-paste-translator.js'),
17
+ fromClipboardEntryValueType: UMB_BLOCK_CLIPBOARD_ENTRY_VALUE_TYPE,
18
+ toPropertyEditorUi: UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS,
19
+ },
20
+ ];
@@ -1 +1 @@
1
- {"version":3,"file":"input-tiny-mce.defaults.d.ts","sourceRoot":"","sources":["../../../src/components/input-tiny-mce/input-tiny-mce.defaults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAGjF,eAAO,MAAM,4CAA4C,sCAAsC,CAAC;AAEhG,eAAO,MAAM,yBAAyB,uQAmB5B,CAAC;AAIX,eAAO,MAAM,qBAAqB,EAAE,gBAiKnC,CAAC"}
1
+ {"version":3,"file":"input-tiny-mce.defaults.d.ts","sourceRoot":"","sources":["../../../src/components/input-tiny-mce/input-tiny-mce.defaults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAKjF,eAAO,MAAM,4CAA4C,sCAAsC,CAAC;AAEhG,eAAO,MAAM,yBAAyB,uQAmB5B,CAAC;AAMX,eAAO,MAAM,qBAAqB,EAAE,gBAmOnC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { UMB_CONTEXT_REQUEST_EVENT_TYPE } from '@umbraco-cms/backoffice/context-api';
2
+ import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
2
3
  import { UUIIconRequestEvent } from '@umbraco-cms/backoffice/external/uui';
4
+ import { umbLocalizationManager } from '@umbraco-cms/backoffice/localization-api';
3
5
  export const UMB_BLOCK_ENTRY_WEB_COMPONENTS_ABSOLUTE_PATH = '@umbraco-cms/backoffice/block-rte';
4
6
  export const defaultPremiumPluginsList = [
5
7
  'a11ychecker',
@@ -21,13 +23,15 @@ export const defaultPremiumPluginsList = [
21
23
  'tinymcespellchecker',
22
24
  'tableofcontents',
23
25
  ];
24
- //we put these as extended elements because they get merged on top of the normal allowed elements by tiny mce
25
- //so we don't have to specify all the normal elements again
26
+ //we use extended_valid_elements only for Umbraco custom elements and non-standard HTML elements
27
+ //that must be added on top of valid_elements. Standard HTML elements (h1-h6, div, ul, li, span)
28
+ //must NOT appear here because extended_valid_elements overrides valid_elements exclusions —
29
+ //if a user removes an element from ValidElements config it would still be allowed via this list.
26
30
  export const defaultFallbackConfig = {
27
31
  plugins: ['anchor', 'charmap', 'table', 'lists', 'advlist', 'autolink', 'directionality', 'searchreplace'],
28
- valid_elements: '+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-s[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption,cite,video[*],audio[*],picture[*],source[*],canvas[*],details[*],summary[*],-code',
32
+ valid_elements: '+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-s[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style|contenteditable|data-embed-url|data-embed-height|data-embed-width|data-embed-constrain],-span[class|align|style|lang],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption,cite,video[*],audio[*],picture[*],source[*],canvas[*],details[*],summary[*],-code',
29
33
  invalid_elements: 'font',
30
- extended_valid_elements: '@[id|class|style],+umb-rte-block[!data-content-key],+umb-rte-block-inline[!data-content-key],-div[id|dir|class|align|style],ins[datetime|cite],-ul[class|style],-li[class|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align],span[id|class|style|lang],figure,figcaption',
34
+ extended_valid_elements: '@[id|class|style],+umb-rte-block[!data-content-key],+umb-rte-block-inline[!data-content-key],ins[datetime|cite],figure,figcaption,iframe[*]',
31
35
  custom_elements: 'umb-rte-block,~umb-rte-block-inline',
32
36
  toolbar: [
33
37
  'styles',
@@ -122,12 +126,77 @@ export const defaultFallbackConfig = {
122
126
  // Change the history!
123
127
  window.history.pushState(null, '', path);
124
128
  });
125
- // Load backoffice JS so we can get the umb-rte-block component registered inside the iframe [NL]
129
+ // Sync block editor localization keys into the iframe's module-scope umbLocalizationManager.
130
+ // The iframe has a completely separate module scope (and thus a separate umbLocalizationManager
131
+ // instance) from the outer document. Without this, requestDelete() in UmbBlockEntryContext
132
+ // falls back to returning raw keys because the iframe's manager has no registered translations.
133
+ const locSetsToSync = [];
134
+ const BLOCK_LOC_KEYS = ['blockEditor_confirmDeleteBlockTitle', 'blockEditor_confirmDeleteBlockMessage'];
135
+ umbLocalizationManager.localizations.forEach((locSet, code) => {
136
+ const locSetAny = locSet;
137
+ const entry = {
138
+ $code: code,
139
+ $dir: locSetAny['$dir'] ?? 'ltr',
140
+ };
141
+ let hasKey = false;
142
+ for (const key of BLOCK_LOC_KEYS) {
143
+ const val = locSetAny[key];
144
+ if (typeof val === 'string') {
145
+ entry[key] = val;
146
+ hasKey = true;
147
+ }
148
+ }
149
+ if (hasKey)
150
+ locSetsToSync.push(entry);
151
+ });
152
+ if (locSetsToSync.length > 0) {
153
+ const locScript = document.createElement('script');
154
+ locScript.setAttribute('type', 'module');
155
+ locScript.text = `
156
+ import { umbLocalizationManager } from "@umbraco-cms/backoffice/localization-api";
157
+ ${JSON.stringify(locSetsToSync)}.forEach(s => umbLocalizationManager.registerLocalization(s));
158
+ `;
159
+ editor.dom.doc.head.appendChild(locScript);
160
+ }
161
+ // Expose the outer extension registry on the outer window so the injected module
162
+ // script below can sync blockAction manifests into the iframe's per-realm instance.
163
+ // umb-block-action-list reads umbExtensionsRegistry as a module-level singleton
164
+ // (not via context), so the context proxy alone cannot bridge it across realms.
165
+ window._umbOuterExtReg = umbExtensionsRegistry;
166
+ // Load backoffice JS so we can get the umb-rte-block component registered inside the iframe.
167
+ // Also:
168
+ // 1. Import @umbraco-cms/backoffice/block to register the blockAction kind definition
169
+ // and the <umb-block-action> custom element in the iframe's realm. These are NOT
170
+ // transitively imported by block-rte, but umb-block-action-list needs them to
171
+ // instantiate block action extensions (kind: 'default').
172
+ // 2. Sync blockAction manifests from the outer registry into the iframe's registry.
173
+ // Umbraco registers manifests via umbraco-package.json (not module imports), so they
174
+ // only exist in the outer registry — we must copy them into the iframe's per-realm
175
+ // umbExtensionsRegistry so umb-block-action-list can discover them.
126
176
  const script = document.createElement('script');
127
- script.type = 'text/javascript';
128
177
  script.setAttribute('type', 'module');
129
- script.text = `import "@umbraco-cms/backoffice/extension-registry";`;
130
- script.text = `import "${UMB_BLOCK_ENTRY_WEB_COMPONENTS_ABSOLUTE_PATH}";`;
178
+ script.text = `
179
+ import { umbExtensionsRegistry } from "@umbraco-cms/backoffice/extension-registry";
180
+ import { UMB_BLOCK_ACTION_DEFAULT_KIND_MANIFEST } from "@umbraco-cms/backoffice/block";
181
+ import "${UMB_BLOCK_ENTRY_WEB_COMPONENTS_ABSOLUTE_PATH}";
182
+
183
+ // Register the blockAction default kind definition in the inner realm's registry.
184
+ // UMB_BLOCK_ACTION_DEFAULT_KIND_MANIFEST is imported here (inner realm), so its
185
+ // element factory — element: () => import('./block-action.element.js') — captures
186
+ // the inner realm's module URL. When the extension system later calls that factory,
187
+ // block-action.element.js is loaded in the inner realm, registering <umb-block-action>
188
+ // in the inner customElements registry.
189
+ umbExtensionsRegistry.registerMany([UMB_BLOCK_ACTION_DEFAULT_KIND_MANIFEST]);
190
+
191
+ // Sync blockAction manifests from the outer registry into the inner realm's registry.
192
+ // Umbraco registers these via umbraco-package.json at backoffice startup; they only
193
+ // exist in the outer registry and must be copied so umb-block-action-list can discover them.
194
+ const outerReg = window.parent?._umbOuterExtReg;
195
+ if (outerReg) {
196
+ const blockActions = outerReg.getByType('blockAction') ?? [];
197
+ if (blockActions.length) umbExtensionsRegistry.registerMany(blockActions);
198
+ }
199
+ `;
131
200
  editor.dom.doc.head.appendChild(script);
132
201
  },
133
202
  style_formats: [
@@ -1 +1 @@
1
- {"version":3,"file":"input-tiny-mce.element.d.ts","sourceRoot":"","sources":["../../../src/components/input-tiny-mce/input-tiny-mce.element.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAIpE,OAAO,KAAK,EAAe,MAAM,EAAoB,MAAM,+CAA+C,CAAC;AAE3G,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,yCAAyC,CAAC;;AA0CjG,qBACa,sBAAuB,SAAQ,2BAAsC;;IAEjF,aAAa,CAAC,EAAE,iCAAiC,CAAC;cAQ/B,cAAc;IAIjC,IAAa,KAAK,CAAC,QAAQ,EAAE,kBAAkB,GAAG,QAAQ,EAOzD;IAED,IAAa,KAAK,IAAI,kBAAkB,GAAG,QAAQ,CAElD;IAED;;;;;OAKG;IACH,IACW,QAAQ,YAElB;IACD,IAAW,QAAQ,CAAC,KAAK,SAAA,EAKxB;IAID,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAc;IAE9C,SAAS;IAIA,YAAY;IAsBZ,oBAAoB;IA0BvB,eAAe,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;IA6UpD;;;OAGG;IACM,MAAM;IAIf,gBAAyB,MAAM,4BAkB7B;CACF;AAED,eAAe,sBAAsB,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,oBAAoB,EAAE,sBAAsB,CAAC;KAC7C;CACD"}
1
+ {"version":3,"file":"input-tiny-mce.element.d.ts","sourceRoot":"","sources":["../../../src/components/input-tiny-mce/input-tiny-mce.element.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAIpE,OAAO,KAAK,EAAe,MAAM,EAAoB,MAAM,+CAA+C,CAAC;AAE3G,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,yCAAyC,CAAC;;AA8DjG,qBACa,sBAAuB,SAAQ,2BAAsC;;IAEjF,aAAa,CAAC,EAAE,iCAAiC,CAAC;cAS/B,cAAc;IAIjC,IAAa,KAAK,CAAC,QAAQ,EAAE,kBAAkB,GAAG,QAAQ,EAOzD;IAED,IAAa,KAAK,IAAI,kBAAkB,GAAG,QAAQ,CAElD;IAED;;;;;OAKG;IACH,IACW,QAAQ,YAElB;IACD,IAAW,QAAQ,CAAC,KAAK,SAAA,EAOxB;IAID,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAc;IAE9C,SAAS;IAIA,YAAY;IAsBZ,oBAAoB;IA0BvB,eAAe,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;IA+UpD;;;OAGG;IACM,MAAM;IAIf,gBAAyB,MAAM,4BAkB7B;CACF;AAED,eAAe,sBAAsB,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,oBAAoB,EAAE,sBAAsB,CAAC;KAC7C;CACD"}
@@ -15,7 +15,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
15
15
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
16
16
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
17
17
  };
18
- var _UmbInputTinyMceElement_instances, _UmbInputTinyMceElement_plugins, _UmbInputTinyMceElement_editorRef, _UmbInputTinyMceElement_stylesheetRepository, _UmbInputTinyMceElement_umbStylesheetRuleManager, _UmbInputTinyMceElement_readonly, _UmbInputTinyMceElement_loadEditor, _UmbInputTinyMceElement_loadPlugins, _UmbInputTinyMceElement_getTinyMceConfig, _UmbInputTinyMceElement_setTinyConfig, _UmbInputTinyMceElement_getLanguage, _UmbInputTinyMceElement_editorSetup, _UmbInputTinyMceElement_onInit, _UmbInputTinyMceElement_onChange;
18
+ var _UmbInputTinyMceElement_instances, _UmbInputTinyMceElement_plugins, _UmbInputTinyMceElement_editorRef, _UmbInputTinyMceElement_sanitizeTinyMce, _UmbInputTinyMceElement_stylesheetRepository, _UmbInputTinyMceElement_umbStylesheetRuleManager, _UmbInputTinyMceElement_readonly, _UmbInputTinyMceElement_loadEditor, _UmbInputTinyMceElement_loadPlugins, _UmbInputTinyMceElement_getTinyMceConfig, _UmbInputTinyMceElement_setTinyConfig, _UmbInputTinyMceElement_getLanguage, _UmbInputTinyMceElement_editorSetup, _UmbInputTinyMceElement_onInit, _UmbInputTinyMceElement_onChange;
19
19
  import { availableLanguages } from '@tiny-mce-umbraco/backoffice/core';
20
20
  import { defaultFallbackConfig, defaultPremiumPluginsList } from '@tiny-mce-umbraco/backoffice/core';
21
21
  import { pastePreProcessHandler } from '@tiny-mce-umbraco/backoffice/core';
@@ -57,6 +57,27 @@ function mergeArrays(arr1, arr2) {
57
57
  const a2 = Array.isArray(arr2) ? arr2 : arr2 ? [arr2] : [];
58
58
  return Array.from(new Set([...a1, ...a2]));
59
59
  }
60
+ // Some config paths (e.g. Umbraco:CMS:RichTextEditor:CustomConfig) can only store scalar string
61
+ // values via the .NET config binder. Complex TinyMCE options like style_formats were historically
62
+ // stored as JSON strings in Umbraco v13. This function parses those JSON strings back into real
63
+ // objects/arrays so TinyMCE receives the correct types.
64
+ function parseJsonStringValues(config) {
65
+ const result = {};
66
+ for (const [key, value] of Object.entries(config)) {
67
+ if (typeof value === 'string' && (value.startsWith('[') || value.startsWith('{'))) {
68
+ try {
69
+ result[key] = JSON.parse(value);
70
+ }
71
+ catch {
72
+ result[key] = value;
73
+ }
74
+ }
75
+ else {
76
+ result[key] = value;
77
+ }
78
+ }
79
+ return result;
80
+ }
60
81
  let UmbInputTinyMceElement = class UmbInputTinyMceElement extends UUIFormControlMixin(UmbLitElement, '') {
61
82
  constructor() {
62
83
  super(...arguments);
@@ -64,6 +85,7 @@ let UmbInputTinyMceElement = class UmbInputTinyMceElement extends UUIFormControl
64
85
  //#plugins: Array<ClassConstructor<UmbTinyMcePluginBase> | undefined> = [];
65
86
  _UmbInputTinyMceElement_plugins.set(this, []);
66
87
  _UmbInputTinyMceElement_editorRef.set(this, null);
88
+ _UmbInputTinyMceElement_sanitizeTinyMce.set(this, true);
67
89
  _UmbInputTinyMceElement_stylesheetRepository.set(this, new UmbStylesheetDetailRepository(this));
68
90
  _UmbInputTinyMceElement_umbStylesheetRuleManager.set(this, new UmbStylesheetRuleManager());
69
91
  _UmbInputTinyMceElement_readonly.set(this, false);
@@ -93,8 +115,10 @@ let UmbInputTinyMceElement = class UmbInputTinyMceElement extends UUIFormControl
93
115
  set readonly(value) {
94
116
  __classPrivateFieldSet(this, _UmbInputTinyMceElement_readonly, value, "f");
95
117
  const editor = this.getEditor();
96
- const mode = value ? 'readonly' : 'design';
97
- editor?.mode.set(mode);
118
+ // editor.removed is true when TinyMCE has been destroyed; mode.set() throws on a destroyed editor
119
+ if (editor && !editor.removed) {
120
+ editor.mode.set(value ? 'readonly' : 'design');
121
+ }
98
122
  }
99
123
  getEditor() {
100
124
  return __classPrivateFieldGet(this, _UmbInputTinyMceElement_editorRef, "f");
@@ -158,6 +182,7 @@ let UmbInputTinyMceElement = class UmbInputTinyMceElement extends UUIFormControl
158
182
  };
159
183
  _UmbInputTinyMceElement_plugins = new WeakMap();
160
184
  _UmbInputTinyMceElement_editorRef = new WeakMap();
185
+ _UmbInputTinyMceElement_sanitizeTinyMce = new WeakMap();
161
186
  _UmbInputTinyMceElement_stylesheetRepository = new WeakMap();
162
187
  _UmbInputTinyMceElement_umbStylesheetRuleManager = new WeakMap();
163
188
  _UmbInputTinyMceElement_readonly = new WeakMap();
@@ -218,6 +243,7 @@ _UmbInputTinyMceElement_setTinyConfig = async function _UmbInputTinyMceElement_s
218
243
  let url = '';
219
244
  let excludeList = [];
220
245
  if (appSettingsConfig) {
246
+ __classPrivateFieldSet(this, _UmbInputTinyMceElement_sanitizeTinyMce, appSettingsConfig.config?.sanitizeTinyMce ?? true, "f");
221
247
  // @ts-ignore
222
248
  apiKey = appSettingsConfig.richTextEditor?.cloudApiKey || 'no-origin';
223
249
  if (appSettingsConfig.config?.apikey) {
@@ -318,7 +344,7 @@ _UmbInputTinyMceElement_setTinyConfig = async function _UmbInputTinyMceElement_s
318
344
  if (appSettingsConfig) {
319
345
  if (appSettingsConfig.richTextEditor) {
320
346
  const mergedPlugins = mergeArrays(appSettingsConfig.richTextEditor.plugins, config.plugins);
321
- config = umbDeepMerge(appSettingsConfig.richTextEditor.customConfig, config);
347
+ config = umbDeepMerge(parseJsonStringValues(appSettingsConfig.richTextEditor.customConfig), config);
322
348
  config.plugins = mergedPlugins;
323
349
  if (appSettingsConfig.richTextEditor.validElements.length > 0) {
324
350
  config.valid_elements = appSettingsConfig.richTextEditor.validElements;
@@ -388,6 +414,8 @@ _UmbInputTinyMceElement_editorSetup = async function _UmbInputTinyMceElement_edi
388
414
  __classPrivateFieldGet(this, _UmbInputTinyMceElement_instances, "m", _UmbInputTinyMceElement_onChange).call(this, editor.getContent());
389
415
  });
390
416
  editor.on('SetContent', () => {
417
+ if (!__classPrivateFieldGet(this, _UmbInputTinyMceElement_sanitizeTinyMce, "f"))
418
+ return;
391
419
  /**
392
420
  * Prevent injecting arbitrary JavaScript execution in on-attributes.
393
421
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../src/localizations/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../src/localizations/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: 'هل أنت متأكد أنك تريد حذف المحتوى <strong>%0%</strong>؟',
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'ملف ورقة أنماط محرر النصوص الغني الجديد',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"bs.d.ts","sourceRoot":"","sources":["../../src/localizations/bs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"bs.d.ts","sourceRoot":"","sources":["../../src/localizations/bs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: 'Jeste li sigurni da želite izbrisati sadržaj <strong>%0%</strong>?',
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'Novi Rich Text Editor CSS fajl',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"cy.d.ts","sourceRoot":"","sources":["../../src/localizations/cy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"cy.d.ts","sourceRoot":"","sources":["../../src/localizations/cy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: "Ydych chi'n siŵr eich bod chi am ddileu'r cynnwys o <strong>%0%</strong>.",
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'Ffeil ddalen arddull Golygydd Testun Cyfoethog newydd',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"da.d.ts","sourceRoot":"","sources":["../../src/localizations/da.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"da.d.ts","sourceRoot":"","sources":["../../src/localizations/da.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAUrF,yBAAyB;AAR9B,wBAQ+B"}
@@ -1,4 +1,8 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockTitle: 'Slet %0',
4
+ confirmDeleteBlockMessage: 'Er du sikker på at du vil slette indholdet <strong>%0%</strong>?',
5
+ },
2
6
  create: {
3
7
  newRteStyleSheetFile: 'Ny Rich Text Editor stylesheet-fil',
4
8
  },
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/localizations/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/localizations/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAUrF,yBAAyB;AAR9B,wBAQ+B"}
@@ -1,4 +1,8 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockTitle: 'Delete %0%?',
4
+ confirmDeleteBlockMessage: 'Are you sure you want to delete this %0%?',
5
+ },
2
6
  create: {
3
7
  newRteStyleSheetFile: 'New Rich Text Editor Stylesheet',
4
8
  },
@@ -1 +1 @@
1
- {"version":3,"file":"hr.d.ts","sourceRoot":"","sources":["../../src/localizations/hr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"hr.d.ts","sourceRoot":"","sources":["../../src/localizations/hr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: 'Jeste li sigurni da želite obrisati sadržaj <strong>%0%</strong>?',
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'Nova Rich Text Editor CSS datoteka',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"it.d.ts","sourceRoot":"","sources":["../../src/localizations/it.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"it.d.ts","sourceRoot":"","sources":["../../src/localizations/it.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: 'Sei sicuro di voler eliminare il contenuto <strong>%0%</strong>?',
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'Nuovo foglio di stile per Rich Text Editor',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../../src/localizations/manifests.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAgGjD,CAAC"}
1
+ {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../../src/localizations/manifests.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAoFjD,CAAC"}
@@ -1,97 +1,97 @@
1
+ import arLocalization from './ar.js';
2
+ import bsLocalization from './bs.js';
3
+ import csLocalization from './cs.js';
4
+ import cyLocalization from './cy.js';
5
+ import daLocalization from './da.js';
6
+ import deLocalization from './de.js';
7
+ import enLocalization from './en.js';
8
+ import frLocalization from './fr.js';
9
+ import hrLocalization from './hr.js';
10
+ import itLocalization from './it.js';
11
+ import nlLocalization from './nl.js';
12
+ import trLocalization from './tr.js';
1
13
  export const manifests = [
2
14
  {
3
15
  type: 'localization',
4
16
  name: 'TinyMCE Umbraco English Localization',
5
17
  alias: 'Umb.TinyMCE.Localization.English',
6
- js: () => import('./en.js'),
7
- meta: { culture: 'en' },
18
+ meta: { culture: 'en', localizations: enLocalization },
8
19
  },
9
20
  {
10
21
  type: 'localization',
11
22
  name: 'TinyMCE Umbraco Arabic Localization',
12
23
  alias: 'Umb.TinyMCE.Localization.Arabic',
13
24
  weight: -100,
14
- meta: { culture: 'ar' },
15
- js: () => import('./ar.js'),
25
+ meta: { culture: 'ar', localizations: arLocalization },
16
26
  },
17
27
  {
18
28
  type: 'localization',
19
29
  name: 'TinyMCE Umbraco Bosnian Localization',
20
30
  alias: 'Umb.TinyMCE.Localization.Bosnian',
21
31
  weight: -100,
22
- meta: { culture: 'bs' },
23
- js: () => import('./bs.js'),
32
+ meta: { culture: 'bs', localizations: bsLocalization },
24
33
  },
25
34
  {
26
35
  type: 'localization',
27
36
  name: 'TinyMCE Umbraco Czech Localization',
28
37
  alias: 'Umb.TinyMCE.Localization.Czech',
29
38
  weight: -100,
30
- meta: { culture: 'cs-cz' },
31
- js: () => import('./cs.js'),
39
+ meta: { culture: 'cs-cz', localizations: csLocalization },
32
40
  },
33
41
  {
34
42
  type: 'localization',
35
43
  name: 'TinyMCE Umbraco Welsh Localization',
36
44
  alias: 'Umb.TinyMCE.Localization.Cy-GB',
37
45
  weight: -100,
38
- meta: { culture: 'cy' },
39
- js: () => import('./cy.js'),
46
+ meta: { culture: 'cy', localizations: cyLocalization },
40
47
  },
41
48
  {
42
49
  type: 'localization',
43
50
  name: 'TinyMCE Umbraco Danish Localization',
44
51
  alias: 'Umb.TinyMCE.Localization.Da_DK',
45
52
  weight: -100,
46
- meta: { culture: 'da' },
47
- js: () => import('./da.js'),
53
+ meta: { culture: 'da', localizations: daLocalization },
48
54
  },
49
55
  {
50
56
  type: 'localization',
51
57
  name: 'TinyMCE Umbraco German Localization',
52
58
  alias: 'Umb.TinyMCE.Localization.German',
53
59
  weight: -100,
54
- meta: { culture: 'de' },
55
- js: () => import('./de.js'),
60
+ meta: { culture: 'de', localizations: deLocalization },
56
61
  },
57
62
  {
58
63
  type: 'localization',
59
64
  name: 'TinyMCE Umbraco French Localization',
60
65
  alias: 'Umb.TinyMCE.Localization.French',
61
66
  weight: -100,
62
- meta: { culture: 'fr' },
63
- js: () => import('./fr.js'),
67
+ meta: { culture: 'fr', localizations: frLocalization },
64
68
  },
65
69
  {
66
70
  type: 'localization',
67
71
  name: 'TinyMCE Umbraco Croatian Localization',
68
72
  alias: 'Umb.TinyMCE.Localization.Croatian',
69
73
  weight: -100,
70
- meta: { culture: 'hr' },
71
- js: () => import('./hr.js'),
74
+ meta: { culture: 'hr', localizations: hrLocalization },
72
75
  },
73
76
  {
74
77
  type: 'localization',
75
78
  name: 'TinyMCE Umbraco Italian Localization',
76
79
  alias: 'Umb.TinyMCE.Localization.Italian',
77
80
  weight: -100,
78
- meta: { culture: 'it' },
79
- js: () => import('./it.js'),
81
+ meta: { culture: 'it', localizations: itLocalization },
80
82
  },
81
83
  {
82
84
  type: 'localization',
83
85
  name: 'TinyMCE Umbraco Dutch Localization',
84
86
  alias: 'Umb.TinyMCE.Localization.Dutch',
85
87
  weight: -100,
86
- meta: { culture: 'nl' },
87
- js: () => import('./nl.js'),
88
+ meta: { culture: 'nl', localizations: nlLocalization },
88
89
  },
89
90
  {
90
91
  type: 'localization',
91
92
  name: 'TinyMCE Umbraco Turkish Localization',
92
93
  alias: 'Umb.TinyMCE.Localization.Turkish',
93
94
  weight: -100,
94
- meta: { culture: 'tr' },
95
- js: () => import('./tr.js'),
95
+ meta: { culture: 'tr', localizations: trLocalization },
96
96
  },
97
97
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"nl.d.ts","sourceRoot":"","sources":["../../src/localizations/nl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"nl.d.ts","sourceRoot":"","sources":["../../src/localizations/nl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: 'Weet je zeker dat je blok <strong>%0%</strong> wil verwijderen?',
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'Nieuw Rich Text Editor style sheet bestand',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../src/localizations/tr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBAMrF,yBAAyB;AAJ9B,wBAI+B"}
1
+ {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../src/localizations/tr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;wBASrF,yBAAyB;AAP9B,wBAO+B"}
@@ -1,4 +1,7 @@
1
1
  export default {
2
+ blockEditor: {
3
+ confirmDeleteBlockMessage: '<strong>%0%</strong> içeriğini silmek istediğinizden emin misiniz?',
4
+ },
2
5
  create: {
3
6
  newRteStyleSheetFile: 'Yeni Zengin Metin Düzenleyicisi stil sayfası dosyası',
4
7
  },
@@ -1 +1 @@
1
- {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../src/manifests.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAQjD,CAAC"}
1
+ {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../src/manifests.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CASjD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { manifests as clipboard } from './clipboard/manifests.js';
1
2
  import { manifests as components } from './components/manifests.js';
2
3
  import { manifests as entryPoints } from './entry-points/manifest.js';
3
4
  import { manifests as icons } from './icons/manifests.js';
@@ -6,6 +7,7 @@ import { manifests as propertyEditors } from './property-editors/manifests.js';
6
7
  import { manifests as plugins } from './plugins/manifests.js';
7
8
  import { manifests as stylesheets } from './stylesheets/manifests.js';
8
9
  export const manifests = [
10
+ ...clipboard,
9
11
  ...components,
10
12
  ...entryPoints,
11
13
  ...icons,
@@ -1 +1 @@
1
- {"version":3,"file":"tiny-mce-block-picker.plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/tiny-mce-block-picker.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAKhF,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,oBAAoB;;gBAMnE,IAAI,EAAE,sBAAsB;IAwClC,UAAU;CA+DhB"}
1
+ {"version":3,"file":"tiny-mce-block-picker.plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/tiny-mce-block-picker.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAKhF,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,oBAAoB;;gBAOnE,IAAI,EAAE,sBAAsB;IAkDlC,UAAU;CAgFhB"}
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _UmbTinyMceMultiUrlPickerPlugin_instances, _UmbTinyMceMultiUrlPickerPlugin_localize, _UmbTinyMceMultiUrlPickerPlugin_editor, _UmbTinyMceMultiUrlPickerPlugin_blocks, _UmbTinyMceMultiUrlPickerPlugin_entriesContext, _UmbTinyMceMultiUrlPickerPlugin_createBlock, _UmbTinyMceMultiUrlPickerPlugin_updateBlocks;
12
+ var _UmbTinyMceMultiUrlPickerPlugin_instances, _UmbTinyMceMultiUrlPickerPlugin_localize, _UmbTinyMceMultiUrlPickerPlugin_editor, _UmbTinyMceMultiUrlPickerPlugin_blocks, _UmbTinyMceMultiUrlPickerPlugin_entriesContext, _UmbTinyMceMultiUrlPickerPlugin_managerContext, _UmbTinyMceMultiUrlPickerPlugin_createBlock, _UmbTinyMceMultiUrlPickerPlugin_processPendingDeletions, _UmbTinyMceMultiUrlPickerPlugin_updateBlocks;
13
13
  import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api';
14
14
  import { UmbTinyMcePluginBase } from '@tiny-mce-umbraco/backoffice/core';
15
15
  import { UMB_BLOCK_RTE_DATA_CONTENT_KEY } from '@umbraco-cms/backoffice/rte';
@@ -22,6 +22,7 @@ class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase {
22
22
  _UmbTinyMceMultiUrlPickerPlugin_editor.set(this, void 0);
23
23
  _UmbTinyMceMultiUrlPickerPlugin_blocks.set(this, void 0);
24
24
  _UmbTinyMceMultiUrlPickerPlugin_entriesContext.set(this, void 0);
25
+ _UmbTinyMceMultiUrlPickerPlugin_managerContext.set(this, void 0);
25
26
  __classPrivateFieldSet(this, _UmbTinyMceMultiUrlPickerPlugin_editor, args.editor, "f");
26
27
  args.editor.ui.registry.addToggleButton('umbblockpicker', {
27
28
  icon: 'visualblocks',
@@ -33,12 +34,16 @@ class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase {
33
34
  },
34
35
  });
35
36
  this.consumeContext(UMB_BLOCK_RTE_MANAGER_CONTEXT, (context) => {
37
+ __classPrivateFieldSet(this, _UmbTinyMceMultiUrlPickerPlugin_managerContext, context, "f");
36
38
  this.observe(context?.blockTypes, (blockTypes) => {
37
39
  __classPrivateFieldSet(this, _UmbTinyMceMultiUrlPickerPlugin_blocks, blockTypes, "f");
38
40
  }, 'blockType');
39
41
  this.observe(context?.contents, (contents) => {
40
42
  __classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_instances, "m", _UmbTinyMceMultiUrlPickerPlugin_updateBlocks).call(this, contents, context?.getLayouts());
41
43
  }, 'contents');
44
+ this.observe(context?.pendingDeletions, (pendingDeletions) => {
45
+ __classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_instances, "m", _UmbTinyMceMultiUrlPickerPlugin_processPendingDeletions).call(this, pendingDeletions);
46
+ }, 'pendingDeletions');
42
47
  });
43
48
  this.consumeContext(UMB_BLOCK_RTE_ENTRIES_CONTEXT, (context) => {
44
49
  __classPrivateFieldSet(this, _UmbTinyMceMultiUrlPickerPlugin_entriesContext, context, "f");
@@ -58,7 +63,7 @@ class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase {
58
63
  __classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_instances, "m", _UmbTinyMceMultiUrlPickerPlugin_createBlock).call(this);
59
64
  }
60
65
  }
61
- _UmbTinyMceMultiUrlPickerPlugin_localize = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_editor = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_blocks = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_entriesContext = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_instances = new WeakSet(), _UmbTinyMceMultiUrlPickerPlugin_createBlock = function _UmbTinyMceMultiUrlPickerPlugin_createBlock() {
66
+ _UmbTinyMceMultiUrlPickerPlugin_localize = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_editor = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_blocks = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_entriesContext = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_managerContext = new WeakMap(), _UmbTinyMceMultiUrlPickerPlugin_instances = new WeakSet(), _UmbTinyMceMultiUrlPickerPlugin_createBlock = function _UmbTinyMceMultiUrlPickerPlugin_createBlock() {
62
67
  if (!__classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_entriesContext, "f")) {
63
68
  console.error('[Block Picker] No entries context available.');
64
69
  return;
@@ -74,6 +79,19 @@ _UmbTinyMceMultiUrlPickerPlugin_localize = new WeakMap(), _UmbTinyMceMultiUrlPic
74
79
  if (createPath) {
75
80
  window.history.pushState({}, '', createPath);
76
81
  }
82
+ }, _UmbTinyMceMultiUrlPickerPlugin_processPendingDeletions = function _UmbTinyMceMultiUrlPickerPlugin_processPendingDeletions(pendingDeletions) {
83
+ if (!pendingDeletions?.length)
84
+ return;
85
+ const editor = __classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_editor, "f");
86
+ if (!editor?.dom)
87
+ return;
88
+ pendingDeletions.forEach((contentKey) => {
89
+ const blockEls = editor.dom.select(`umb-rte-block[${UMB_BLOCK_RTE_DATA_CONTENT_KEY}="${contentKey}"], umb-rte-block-inline[${UMB_BLOCK_RTE_DATA_CONTENT_KEY}="${contentKey}"]`);
90
+ blockEls.forEach((el) => el.remove());
91
+ __classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_managerContext, "f")?.clearPendingDeletion(contentKey);
92
+ });
93
+ editor.setDirty(true);
94
+ editor.dispatch('Change');
77
95
  }, _UmbTinyMceMultiUrlPickerPlugin_updateBlocks = function _UmbTinyMceMultiUrlPickerPlugin_updateBlocks(blocks, layouts) {
78
96
  const editor = __classPrivateFieldGet(this, _UmbTinyMceMultiUrlPickerPlugin_editor, "f");
79
97
  if (!editor?.dom)
@@ -1 +1 @@
1
- {"version":3,"file":"tiny-mce-embeddedmedia.plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/tiny-mce-embeddedmedia.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAMhF,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,oBAAoB;;gBAClE,IAAI,EAAE,sBAAsB;CAgFxC"}
1
+ {"version":3,"file":"tiny-mce-embeddedmedia.plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/tiny-mce-embeddedmedia.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAMhF,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,oBAAoB;;gBAClE,IAAI,EAAE,sBAAsB;CAiFxC"}
@@ -31,6 +31,7 @@ _UmbTinyMceEmbeddedMediaPlugin_instances = new WeakSet(), _UmbTinyMceEmbeddedMed
31
31
  let modify = {
32
32
  width: 360,
33
33
  height: 240,
34
+ constrain: true
34
35
  };
35
36
  if (selectedElm.nodeName.toUpperCase() === 'DIV' && selectedElm.classList.contains('umb-embed-holder')) {
36
37
  // See if we can go and get the attributes
@@ -1 +1 @@
1
- {"version":3,"file":"tiny-mce-mediapicker.plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/tiny-mce-mediapicker.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AA0BhF,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,oBAAoB;;gBAIhE,IAAI,EAAE,sBAAsB;CAoOxC"}
1
+ {"version":3,"file":"tiny-mce-mediapicker.plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/tiny-mce-mediapicker.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AA0BhF,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,oBAAoB;;gBAQhE,IAAI,EAAE,sBAAsB;CAsOxC"}
@@ -9,10 +9,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _UmbTinyMceMediaPickerPlugin_instances, _UmbTinyMceMediaPickerPlugin_modalManager, _UmbTinyMceMediaPickerPlugin_temporaryFileRepository, _UmbTinyMceMediaPickerPlugin_onAction, _UmbTinyMceMediaPickerPlugin_showMediaPicker, _UmbTinyMceMediaPickerPlugin_showMediaCaptionAltText, _UmbTinyMceMediaPickerPlugin_insertInEditor, _UmbTinyMceMediaPickerPlugin_uploadImageHandler;
12
+ var _UmbTinyMceMediaPickerPlugin_instances, _UmbTinyMceMediaPickerPlugin_modalManager, _UmbTinyMceMediaPickerPlugin_temporaryFileRepository, _UmbTinyMceMediaPickerPlugin_allowedMediaTypeIds_get, _UmbTinyMceMediaPickerPlugin_onAction, _UmbTinyMceMediaPickerPlugin_showMediaPicker, _UmbTinyMceMediaPickerPlugin_showMediaCaptionAltText, _UmbTinyMceMediaPickerPlugin_insertInEditor, _UmbTinyMceMediaPickerPlugin_uploadImageHandler;
13
13
  import { sizeImageInEditor, uploadBlobImages } from '@tiny-mce-umbraco/backoffice/core';
14
14
  import { UmbTinyMcePluginBase } from '@tiny-mce-umbraco/backoffice/core';
15
- import { getGuidFromUdi } from '@umbraco-cms/backoffice/utils';
15
+ import { getGuidFromUdi, splitStringToArray } from '@umbraco-cms/backoffice/utils';
16
16
  import { UmbId } from '@umbraco-cms/backoffice/id';
17
17
  import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api';
18
18
  import { UmbTemporaryFileRepository } from '@umbraco-cms/backoffice/temporary-file';
@@ -86,7 +86,9 @@ class UmbTinyMceMediaPickerPlugin extends UmbTinyMcePluginBase {
86
86
  }
87
87
  }
88
88
  }
89
- _UmbTinyMceMediaPickerPlugin_modalManager = new WeakMap(), _UmbTinyMceMediaPickerPlugin_temporaryFileRepository = new WeakMap(), _UmbTinyMceMediaPickerPlugin_uploadImageHandler = new WeakMap(), _UmbTinyMceMediaPickerPlugin_instances = new WeakSet(), _UmbTinyMceMediaPickerPlugin_onAction =
89
+ _UmbTinyMceMediaPickerPlugin_modalManager = new WeakMap(), _UmbTinyMceMediaPickerPlugin_temporaryFileRepository = new WeakMap(), _UmbTinyMceMediaPickerPlugin_uploadImageHandler = new WeakMap(), _UmbTinyMceMediaPickerPlugin_instances = new WeakSet(), _UmbTinyMceMediaPickerPlugin_allowedMediaTypeIds_get = function _UmbTinyMceMediaPickerPlugin_allowedMediaTypeIds_get() {
90
+ return splitStringToArray(this.configuration?.getValueByAlias('allowedMediaTypes'));
91
+ }, _UmbTinyMceMediaPickerPlugin_onAction =
90
92
  /*
91
93
  async #observeCurrentUser() {
92
94
  if (!this.#currentUserContext) return;
@@ -132,10 +134,12 @@ async function _UmbTinyMceMediaPickerPlugin_onAction() {
132
134
  }
133
135
  }
134
136
  */
137
+ const allowedIds = __classPrivateFieldGet(this, _UmbTinyMceMediaPickerPlugin_instances, "a", _UmbTinyMceMediaPickerPlugin_allowedMediaTypeIds_get);
135
138
  const modalHandler = __classPrivateFieldGet(this, _UmbTinyMceMediaPickerPlugin_modalManager, "f")?.open(this, UMB_MEDIA_PICKER_MODAL, {
136
139
  data: {
137
140
  multiple: false,
138
141
  //startNodeIsVirtual,
142
+ pickableFilter: allowedIds.length ? (item) => allowedIds.includes(item.mediaType.unique) : undefined,
139
143
  },
140
144
  value: {
141
145
  selection: currentTarget.udi ? [getGuidFromUdi(currentTarget.udi)] : [],
@@ -1 +1 @@
1
- {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../../../src/property-editors/tiny-mce/manifests.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAkJjD,CAAC"}
1
+ {"version":3,"file":"manifests.d.ts","sourceRoot":"","sources":["../../../src/property-editors/tiny-mce/manifests.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,oBAAoB,CA0JjD,CAAC"}
@@ -1,6 +1,13 @@
1
1
  import { UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS } from '@tiny-mce-umbraco/backoffice/core';
2
2
  import { UMB_BLOCK_RTE_PROPERTY_EDITOR_SCHEMA_ALIAS } from '@umbraco-cms/backoffice/rte';
3
3
  export const manifests = [
4
+ {
5
+ type: 'propertyContext',
6
+ kind: 'clipboard',
7
+ alias: 'TinyMCE.PropertyContext.Clipboard',
8
+ name: 'TinyMCE Clipboard Property Context',
9
+ forPropertyEditorUis: [UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS],
10
+ },
4
11
  {
5
12
  type: 'propertyEditorUi',
6
13
  alias: UMB_BLOCK_RTE_PROPERTY_EDITOR_UI_ALIAS,
@@ -12,6 +19,7 @@ export const manifests = [
12
19
  icon: 'icon-tinymce',
13
20
  group: 'richContent',
14
21
  supportsReadOnly: true,
22
+ keywords: ['content', 'article', 'body', 'html', 'wysiwyg', 'richtext', 'rte', 'tinymce', 'editor', 'formatted', 'paragraph'],
15
23
  settings: {
16
24
  properties: [
17
25
  {
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@tiny-mce-umbraco/backoffice",
3
- "version": "17.2.0",
3
+ "version": "17.5.0",
4
4
  "description": "This Umbraco CMS package enables access to the TinyMCE-based Rich Text Editor (RTE) in version 16 and above. It also supports the use of TinyMCE Premium plugins with a valid subscription. Additional features include streamlined configuration for RTE Data Types in Umbraco and enhanced settings that support direct JSON-based configuration via .NET (appsettings.config).",
5
5
  "keywords": [
6
6
  "Umbraco",
7
7
  "TinyMCE",
8
- "RTE",
8
+ "RTE",
9
9
  "Rich Text Editor"
10
10
  ],
11
11
  "author": "ProWorks Corporation",
@@ -40,22 +40,22 @@
40
40
  "@rollup/plugin-json": "^6.1.0",
41
41
  "@rollup/plugin-node-resolve": "^16.0.1",
42
42
  "@rollup/plugin-replace": "^6.0.2",
43
- "@umbraco-cms/backoffice": "^17.2.0",
43
+ "@umbraco-cms/backoffice": "^17.5.0",
44
44
  "chalk": "^5.3.0",
45
45
  "cross-env": "^10.1.0",
46
- "eslint": "^9.37.0",
46
+ "eslint": "^10.2.0",
47
47
  "node-fetch": "^3.3.2",
48
48
  "rollup": "^4.40.0",
49
49
  "rollup-plugin-esbuild": "^6.2.1",
50
50
  "rollup-plugin-import-css": "^3.5.8",
51
51
  "tiny-glob": "^0.2.9",
52
52
  "typescript": "^5.9.3",
53
- "vite": "^7.1.11",
53
+ "vite": "^7.3.2",
54
54
  "vite-plugin-static-copy": "^3.1.3",
55
55
  "vite-tsconfig-paths": "^5.1.4"
56
56
  },
57
57
  "peerDependencies": {
58
- "@umbraco-cms/backoffice": "^17.2.0",
58
+ "@umbraco-cms/backoffice": "^17.5.0",
59
59
  "tinymce": "^6.8.5",
60
60
  "tinymce-i18n": "^24.12.30"
61
61
  }
@@ -1 +0,0 @@
1
- This is an Umbraco CMS package that enables access to the paid features in the TinyMCE-based Rich Text Editor (RTE) in version 12+ with a license. It also adds a new TinyMCE Premium property editor with additional settings, providing a more targeted configuration setup for RTE Data Types in Umbraco. Finally, it allows for additional settings that support JSON directly in the configuration for .NET (appsettings.config).