@tiny-mce-umbraco/backoffice 17.3.4 → 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 (31) hide show
  1. package/dist-cms/components/input-tiny-mce/input-tiny-mce.defaults.d.ts.map +1 -1
  2. package/dist-cms/components/input-tiny-mce/input-tiny-mce.defaults.js +73 -6
  3. package/dist-cms/localizations/ar.d.ts.map +1 -1
  4. package/dist-cms/localizations/ar.js +3 -0
  5. package/dist-cms/localizations/bs.d.ts.map +1 -1
  6. package/dist-cms/localizations/bs.js +3 -0
  7. package/dist-cms/localizations/cy.d.ts.map +1 -1
  8. package/dist-cms/localizations/cy.js +3 -0
  9. package/dist-cms/localizations/da.d.ts.map +1 -1
  10. package/dist-cms/localizations/da.js +4 -0
  11. package/dist-cms/localizations/en.d.ts.map +1 -1
  12. package/dist-cms/localizations/en.js +4 -0
  13. package/dist-cms/localizations/hr.d.ts.map +1 -1
  14. package/dist-cms/localizations/hr.js +3 -0
  15. package/dist-cms/localizations/it.d.ts.map +1 -1
  16. package/dist-cms/localizations/it.js +3 -0
  17. package/dist-cms/localizations/manifests.d.ts.map +1 -1
  18. package/dist-cms/localizations/manifests.js +24 -24
  19. package/dist-cms/localizations/nl.d.ts.map +1 -1
  20. package/dist-cms/localizations/nl.js +3 -0
  21. package/dist-cms/localizations/tr.d.ts.map +1 -1
  22. package/dist-cms/localizations/tr.js +3 -0
  23. package/dist-cms/plugins/tiny-mce-block-picker.plugin.d.ts.map +1 -1
  24. package/dist-cms/plugins/tiny-mce-block-picker.plugin.js +20 -2
  25. package/dist-cms/plugins/tiny-mce-embeddedmedia.plugin.d.ts.map +1 -1
  26. package/dist-cms/plugins/tiny-mce-embeddedmedia.plugin.js +1 -0
  27. package/dist-cms/plugins/tiny-mce-mediapicker.plugin.d.ts.map +1 -1
  28. package/dist-cms/plugins/tiny-mce-mediapicker.plugin.js +7 -3
  29. package/dist-cms/property-editors/tiny-mce/manifests.d.ts.map +1 -1
  30. package/dist-cms/property-editors/tiny-mce/manifests.js +1 -0
  31. package/package.json +5 -5
@@ -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;AAMX,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',
@@ -27,9 +29,9 @@ export const defaultPremiumPluginsList = [
27
29
  //if a user removes an element from ValidElements config it would still be allowed via this list.
28
30
  export const defaultFallbackConfig = {
29
31
  plugins: ['anchor', 'charmap', 'table', 'lists', 'advlist', 'autolink', 'directionality', 'searchreplace'],
30
- 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|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',
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',
31
33
  invalid_elements: 'font',
32
- extended_valid_elements: '@[id|class|style],+umb-rte-block[!data-content-key],+umb-rte-block-inline[!data-content-key],ins[datetime|cite],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[*]',
33
35
  custom_elements: 'umb-rte-block,~umb-rte-block-inline',
34
36
  toolbar: [
35
37
  'styles',
@@ -124,12 +126,77 @@ export const defaultFallbackConfig = {
124
126
  // Change the history!
125
127
  window.history.pushState(null, '', path);
126
128
  });
127
- // 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.
128
176
  const script = document.createElement('script');
129
- script.type = 'text/javascript';
130
177
  script.setAttribute('type', 'module');
131
- script.text = `import "@umbraco-cms/backoffice/extension-registry";`;
132
- 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
+ `;
133
200
  editor.dom.doc.head.appendChild(script);
134
201
  },
135
202
  style_formats: [
@@ -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":"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,CAyJjD,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"}
@@ -19,6 +19,7 @@ export const manifests = [
19
19
  icon: 'icon-tinymce',
20
20
  group: 'richContent',
21
21
  supportsReadOnly: true,
22
+ keywords: ['content', 'article', 'body', 'html', 'wysiwyg', 'richtext', 'rte', 'tinymce', 'editor', 'formatted', 'paragraph'],
22
23
  settings: {
23
24
  properties: [
24
25
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiny-mce-umbraco/backoffice",
3
- "version": "17.3.4",
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",
@@ -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.3.4",
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.3.4",
58
+ "@umbraco-cms/backoffice": "^17.5.0",
59
59
  "tinymce": "^6.8.5",
60
60
  "tinymce-i18n": "^24.12.30"
61
61
  }