magic-editor-x 1.1.1 → 1.3.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.
- package/README.md +82 -5
- package/dist/_chunks/{App-mtrlABtd.js → App-CWXreQMz.js} +4 -4
- package/dist/_chunks/{App-B1FgOsWa.mjs → App-Czke2os9.mjs} +4 -4
- package/dist/_chunks/{LicensePage-BnyWSrWs.js → LicensePage-BIaCAB4C.js} +2 -2
- package/dist/_chunks/{LicensePage-CWH-AFR-.mjs → LicensePage-Cj6-z6rO.mjs} +2 -2
- package/dist/_chunks/{LiveCollaborationPanel-DbDHwr2C.js → LiveCollaborationPanel-BmAFvNll.js} +1 -1
- package/dist/_chunks/{LiveCollaborationPanel-ryjcDAA7.mjs → LiveCollaborationPanel-D11eAcKk.mjs} +1 -1
- package/dist/_chunks/{Settings-Bk9bxJTy.js → Settings-BsoK7S5l.js} +1 -1
- package/dist/_chunks/{Settings-D-V2MLVm.mjs → Settings-CsaF0hO7.mjs} +1 -1
- package/dist/_chunks/{de-CSrHZWEb.mjs → de-C_0Mj-Zo.mjs} +1 -0
- package/dist/_chunks/{de-CzSo1oD2.js → de-DVNVpAt9.js} +1 -0
- package/dist/_chunks/{en-DuQun2v4.mjs → en-B7AAf1ie.mjs} +1 -0
- package/dist/_chunks/{en-DxIkVPUh.js → en-C2hv5GsA.js} +1 -0
- package/dist/_chunks/{es-DAQ_97zx.js → es-BzJqcIST.js} +1 -0
- package/dist/_chunks/{es-DEB0CA8S.mjs → es-zdP8sd-f.mjs} +1 -0
- package/dist/_chunks/{fr-Bqkhvdx2.mjs → fr-CtAgOgH1.mjs} +1 -0
- package/dist/_chunks/{fr-ChPabvNP.js → fr-D3GwqAAJ.js} +1 -0
- package/dist/_chunks/{getTranslation-C4uWR0DB.mjs → getTranslation-CZ77ytJY.mjs} +7 -6
- package/dist/_chunks/{getTranslation-D35vbDap.js → getTranslation-DB9tlKh9.js} +2 -1
- package/dist/_chunks/{index-B5MzUyo0.mjs → index-BNxjfrVK.mjs} +9 -9
- package/dist/_chunks/{index-CQx7-dFP.js → index-BmWx_nJX.js} +1099 -87
- package/dist/_chunks/{index-BRVqbnOb.mjs → index-Byp_IaHi.mjs} +1100 -88
- package/dist/_chunks/{index-BiLy_f7C.js → index-DO-QpiC9.js} +9 -9
- package/dist/_chunks/{pt-BMoYltav.mjs → pt-BmUw6YMP.mjs} +1 -0
- package/dist/_chunks/{pt-Cm74LpyZ.js → pt-CFo0nTbj.js} +1 -0
- package/dist/_chunks/{tools-DNt2tioN.js → tools-3bMqs3Or.js} +103 -4
- package/dist/_chunks/{tools-CjnQJ9w2.mjs → tools-CNqrBm-q.mjs} +103 -4
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +37242 -1292
- package/dist/server/index.mjs +37228 -1285
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
+
## 🆕 What's New in v1.2.0
|
|
13
|
+
|
|
14
|
+
- **Character-Level Collaboration** - Multiple users can now type in the same paragraph simultaneously without conflicts
|
|
15
|
+
- **Webtools Links Integration** - Optional integration with PluginPal's Webtools Links addon for internal/external link management
|
|
16
|
+
- **Improved Fullscreen Mode** - Blocks now stretch to full width, Media Library modal works correctly
|
|
17
|
+
- **Performance Improvements** - Removed debug logging, optimized Y.js sync
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
12
21
|
## Introduction
|
|
13
22
|
|
|
14
23
|
Magic Editor X is a production-ready Strapi v5 Custom Field that brings the power of Editor.js to your content management workflow. Unlike traditional WYSIWYG replacements or plugins that override Strapi's default editor, Magic Editor X integrates as a **proper Custom Field** in Strapi's Content-Type Builder, giving you complete control over when and where to use it.
|
|
@@ -59,13 +68,16 @@ admin/
|
|
|
59
68
|
├── src/
|
|
60
69
|
│ ├── components/
|
|
61
70
|
│ │ ├── EditorJS/ # Main editor component
|
|
62
|
-
│ │ ├── EditorTools/ # Custom tools (Button, Hyperlink, AI)
|
|
71
|
+
│ │ ├── EditorTools/ # Custom tools (Button, Hyperlink, AI, WebtoolsLink)
|
|
63
72
|
│ │ ├── MediaLib/ # Strapi Media Library adapter
|
|
64
73
|
│ │ └── LiveCollaborationPanel.jsx # Collaboration UI
|
|
65
74
|
│ ├── hooks/
|
|
66
75
|
│ │ ├── useMagicCollaboration.js # Y.js & Socket.io integration
|
|
76
|
+
│ │ ├── useWebtoolsLinks.js # 🆕 Webtools Links addon integration
|
|
67
77
|
│ │ ├── useAIAssistant.js # AI features
|
|
68
78
|
│ │ └── useLicense.js # License management
|
|
79
|
+
│ ├── utils/
|
|
80
|
+
│ │ └── YTextBinding.js # 🆕 Y.Text <-> contenteditable binding
|
|
69
81
|
│ ├── config/
|
|
70
82
|
│ │ └── tools.js # Editor.js tools configuration
|
|
71
83
|
│ └── index.js # Plugin registration
|
|
@@ -187,6 +199,26 @@ Magic Editor X uses Y.js, a battle-tested CRDT implementation, to enable true re
|
|
|
187
199
|
5. **Automatic Merge** - Y.js guarantees conflict-free merges (no "last write wins")
|
|
188
200
|
6. **Persistence** - Changes are stored in IndexedDB for offline capability
|
|
189
201
|
|
|
202
|
+
**🆕 Character-Level Collaboration (v1.2.0)**
|
|
203
|
+
|
|
204
|
+
Starting with v1.2.0, Magic Editor X supports **simultaneous editing within the same block**. Multiple users can type in the same paragraph at the same time without conflicts:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
┌─────────────────────────────────────────────────────────┐
|
|
208
|
+
│ Before v1.2.0: Block-Level Sync │
|
|
209
|
+
│ User A edits Block 1 → User B's Block 1 changes lost │
|
|
210
|
+
├─────────────────────────────────────────────────────────┤
|
|
211
|
+
│ After v1.2.0: Character-Level Sync │
|
|
212
|
+
│ User A types "Hello" → User B types "World" → "HelloWorld" │
|
|
213
|
+
│ Both changes merge seamlessly! │
|
|
214
|
+
└─────────────────────────────────────────────────────────┘
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Hybrid Data Structure:**
|
|
218
|
+
- `Y.Map` for block metadata (type, tunes, order)
|
|
219
|
+
- `Y.Text` for character-level content (rich text with formatting)
|
|
220
|
+
- `Y.Map` for document metadata (blockOrder, timestamps)
|
|
221
|
+
|
|
190
222
|
**Example: Collaborative Editing Flow**
|
|
191
223
|
|
|
192
224
|
```javascript
|
|
@@ -315,7 +347,44 @@ class MediaLibAdapter {
|
|
|
315
347
|
}
|
|
316
348
|
```
|
|
317
349
|
|
|
318
|
-
### 5.
|
|
350
|
+
### 5. Webtools Links Integration (Optional)
|
|
351
|
+
|
|
352
|
+
Magic Editor X integrates seamlessly with the [Webtools Links addon](https://www.pluginpal.io/plugin/webtools) by PluginPal for enhanced link management:
|
|
353
|
+
|
|
354
|
+
**Features:**
|
|
355
|
+
- 🔗 **Internal Link Picker** - Select pages/entries from your Strapi content
|
|
356
|
+
- 🌐 **External URL Support** - Paste external URLs with validation
|
|
357
|
+
- ✏️ **Edit Existing Links** - Click on a link to edit its URL and text
|
|
358
|
+
- 🔍 **Link Detection** - Automatically detects when cursor is inside a link
|
|
359
|
+
|
|
360
|
+
**Setup:**
|
|
361
|
+
|
|
362
|
+
1. Install the Webtools Links addon (requires Webtools license)
|
|
363
|
+
2. Magic Editor X auto-detects the addon and enables the Link Picker button
|
|
364
|
+
|
|
365
|
+
**Usage:**
|
|
366
|
+
|
|
367
|
+
```javascript
|
|
368
|
+
// The integration uses Strapi's plugin API
|
|
369
|
+
const getPlugin = useStrapiApp('WebtoolsLinks', (state) => state.getPlugin);
|
|
370
|
+
const linksPlugin = getPlugin('webtools-addon-links');
|
|
371
|
+
const { openLinkPicker } = linksPlugin?.apis;
|
|
372
|
+
|
|
373
|
+
// Open picker with existing link data (for editing)
|
|
374
|
+
const result = await openLinkPicker({
|
|
375
|
+
linkType: 'both', // 'internal', 'external', or 'both'
|
|
376
|
+
initialHref: existingUrl, // Pre-fill for editing
|
|
377
|
+
initialText: selectedText // Pre-fill link text
|
|
378
|
+
});
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Without Webtools:**
|
|
382
|
+
|
|
383
|
+
If Webtools is not installed, a subtle promo link appears in the editor footer pointing to the addon store page.
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
### 6. AI-Powered Features (Premium)
|
|
319
388
|
|
|
320
389
|
Built-in AI assistant for content enhancement:
|
|
321
390
|
|
|
@@ -907,13 +976,21 @@ Add to `config/plugins.ts`:
|
|
|
907
976
|
|
|
908
977
|
## Roadmap
|
|
909
978
|
|
|
910
|
-
|
|
979
|
+
### ✅ Completed
|
|
980
|
+
- **Version History** - Track all content changes with snapshot restore (v1.1.0)
|
|
981
|
+
- **Character-Level Collaboration** - Simultaneous editing in same block (v1.2.0)
|
|
982
|
+
- **Webtools Links Integration** - Internal/external link picker (v1.2.0)
|
|
983
|
+
|
|
984
|
+
### 🚧 In Progress
|
|
985
|
+
- **Comments & Annotations** - Inline comments for editorial workflow
|
|
911
986
|
- **Custom Blocks API** - Simplified API for creating custom tools
|
|
987
|
+
|
|
988
|
+
### 📋 Planned
|
|
912
989
|
- **Advanced AI** - Content suggestions, auto-completion, tone analysis
|
|
913
|
-
- **Comments & Annotations** - Inline comments for editorial workflow
|
|
914
990
|
- **Offline Mode** - Full offline editing with sync on reconnect
|
|
915
991
|
- **Import/Export** - Markdown, HTML, DOCX conversion
|
|
916
992
|
- **Templates** - Pre-built content templates
|
|
993
|
+
- **Block Permissions** - Per-block editing restrictions
|
|
917
994
|
|
|
918
995
|
---
|
|
919
996
|
|
|
@@ -953,7 +1030,7 @@ npm run watch:link
|
|
|
953
1030
|
|
|
954
1031
|
MIT License - See [LICENSE](LICENSE) for details
|
|
955
1032
|
|
|
956
|
-
Copyright (c) 2024 Schero D.
|
|
1033
|
+
Copyright (c) 2024-2025 Schero D.
|
|
957
1034
|
|
|
958
1035
|
---
|
|
959
1036
|
|
|
@@ -7,10 +7,10 @@ const admin = require("@strapi/strapi/admin");
|
|
|
7
7
|
const styled = require("styled-components");
|
|
8
8
|
const outline = require("@heroicons/react/24/outline");
|
|
9
9
|
const EditorJS = require("@editorjs/editorjs");
|
|
10
|
-
const getTranslation = require("./getTranslation-
|
|
11
|
-
const tools = require("./tools-
|
|
12
|
-
const index = require("./index-
|
|
13
|
-
const LicensePage = require("./LicensePage-
|
|
10
|
+
const getTranslation = require("./getTranslation-DB9tlKh9.js");
|
|
11
|
+
const tools = require("./tools-3bMqs3Or.js");
|
|
12
|
+
const index = require("./index-DO-QpiC9.js");
|
|
13
|
+
const LicensePage = require("./LicensePage-BIaCAB4C.js");
|
|
14
14
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
15
15
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
16
16
|
const EditorJS__default = /* @__PURE__ */ _interopDefault(EditorJS);
|
|
@@ -5,10 +5,10 @@ import { useFetchClient, useNotification, Page } from "@strapi/strapi/admin";
|
|
|
5
5
|
import styled, { css, keyframes } from "styled-components";
|
|
6
6
|
import { HashtagIcon, DocumentTextIcon, ListBulletIcon, CheckIcon, ChatBubbleBottomCenterTextIcon, CodeBracketIcon, PhotoIcon, TableCellsIcon, LinkIcon, ExclamationTriangleIcon, PaperClipIcon, BellAlertIcon, SparklesIcon, BeakerIcon, PlayCircleIcon, ArrowPathIcon, EyeIcon, DocumentDuplicateIcon, ChevronRightIcon, CubeTransparentIcon, Cog6ToothIcon, UserGroupIcon, BookOpenIcon, CommandLineIcon, UserPlusIcon, TrashIcon, CheckCircleIcon, XMarkIcon, KeyIcon } from "@heroicons/react/24/outline";
|
|
7
7
|
import EditorJS from "@editorjs/editorjs";
|
|
8
|
-
import { u as useIntl, g as getTranslation, L as Loader,
|
|
9
|
-
import { g as getTools } from "./tools-
|
|
10
|
-
import { P as PLUGIN_ID } from "./index-
|
|
11
|
-
import LicensePage from "./LicensePage-
|
|
8
|
+
import { u as useIntl, g as getTranslation, L as Loader, a as Box, T as Typography, F as Flex, c as TextInput, B as Button$2 } from "./getTranslation-CZ77ytJY.mjs";
|
|
9
|
+
import { g as getTools } from "./tools-CNqrBm-q.mjs";
|
|
10
|
+
import { P as PLUGIN_ID } from "./index-BNxjfrVK.mjs";
|
|
11
|
+
import LicensePage from "./LicensePage-Cj6-z6rO.mjs";
|
|
12
12
|
const fadeInUp = keyframes`
|
|
13
13
|
from { opacity: 0; transform: translateY(20px); }
|
|
14
14
|
to { opacity: 1; transform: translateY(0); }
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const React = require("react");
|
|
5
5
|
const admin = require("@strapi/strapi/admin");
|
|
6
|
-
const getTranslation = require("./getTranslation-
|
|
6
|
+
const getTranslation = require("./getTranslation-DB9tlKh9.js");
|
|
7
7
|
const styled = require("styled-components");
|
|
8
|
-
const index = require("./index-
|
|
8
|
+
const index = require("./index-DO-QpiC9.js");
|
|
9
9
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
10
10
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
11
11
|
const Container = styled__default.default(getTranslation.Box)`
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
3
|
import { useFetchClient, useNotification } from "@strapi/strapi/admin";
|
|
4
|
-
import { u as useIntl,
|
|
4
|
+
import { u as useIntl, F as Flex, L as Loader, T as Typography, d as Badge, a as Box, g as getTranslation, B as Button } from "./getTranslation-CZ77ytJY.mjs";
|
|
5
5
|
import styled from "styled-components";
|
|
6
|
-
import { F as ForwardRef$2o, a as ForwardRef$26, b as ForwardRef$o, c as ForwardRef$1g, d as ForwardRef$y } from "./index-
|
|
6
|
+
import { F as ForwardRef$2o, a as ForwardRef$26, b as ForwardRef$o, c as ForwardRef$1g, d as ForwardRef$y } from "./index-BNxjfrVK.mjs";
|
|
7
7
|
const Container = styled(Box)`
|
|
8
8
|
padding: 32px;
|
|
9
9
|
max-width: 1400px;
|
package/dist/_chunks/{LiveCollaborationPanel-DbDHwr2C.js → LiveCollaborationPanel-BmAFvNll.js}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const React = require("react");
|
|
5
|
-
const getTranslation = require("./getTranslation-
|
|
5
|
+
const getTranslation = require("./getTranslation-DB9tlKh9.js");
|
|
6
6
|
const styled = require("styled-components");
|
|
7
7
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
8
8
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
package/dist/_chunks/{LiveCollaborationPanel-ryjcDAA7.mjs → LiveCollaborationPanel-D11eAcKk.mjs}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect, useMemo } from "react";
|
|
3
|
-
import { u as useIntl,
|
|
3
|
+
import { u as useIntl, F as Flex, g as getTranslation } from "./getTranslation-CZ77ytJY.mjs";
|
|
4
4
|
import styled, { css, keyframes } from "styled-components";
|
|
5
5
|
const pulse = keyframes`
|
|
6
6
|
0%, 100% {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const React = require("react");
|
|
5
|
-
const getTranslation = require("./getTranslation-
|
|
5
|
+
const getTranslation = require("./getTranslation-DB9tlKh9.js");
|
|
6
6
|
const admin = require("@strapi/strapi/admin");
|
|
7
7
|
const outline = require("@heroicons/react/24/outline");
|
|
8
8
|
const styled = require("styled-components");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
|
-
import { u as useIntl, L as Loader,
|
|
3
|
+
import { u as useIntl, L as Loader, a as Box, A as Alert, F as Flex, T as Typography, B as Button, d as Badge, e as Accordion, g as getTranslation } from "./getTranslation-CZ77ytJY.mjs";
|
|
4
4
|
import { useFetchClient, useNotification } from "@strapi/strapi/admin";
|
|
5
5
|
import { ArrowPathIcon, DocumentDuplicateIcon, ArrowDownTrayIcon, UserIcon, UsersIcon, ShieldCheckIcon, SparklesIcon, ChartBarIcon } from "@heroicons/react/24/outline";
|
|
6
6
|
import styled, { css, keyframes } from "styled-components";
|
|
@@ -92,6 +92,7 @@ const de = {
|
|
|
92
92
|
"editor.clearConfirm": "Gesamten Inhalt löschen? Dies kann nicht rückgängig gemacht werden.",
|
|
93
93
|
"editor.fullscreen": "Vollbild",
|
|
94
94
|
"editor.exitFullscreen": "Vollbild beenden",
|
|
95
|
+
"editor.versionHistory": "Verlauf",
|
|
95
96
|
"editor.mediaLibrary": "Media Library",
|
|
96
97
|
"editor.placeholder": "Beginne mit dem Schreiben deines Inhalts...",
|
|
97
98
|
"collab.title": "Live-Zusammenarbeit",
|
|
@@ -94,6 +94,7 @@ const de = {
|
|
|
94
94
|
"editor.clearConfirm": "Gesamten Inhalt löschen? Dies kann nicht rückgängig gemacht werden.",
|
|
95
95
|
"editor.fullscreen": "Vollbild",
|
|
96
96
|
"editor.exitFullscreen": "Vollbild beenden",
|
|
97
|
+
"editor.versionHistory": "Verlauf",
|
|
97
98
|
"editor.mediaLibrary": "Media Library",
|
|
98
99
|
"editor.placeholder": "Beginne mit dem Schreiben deines Inhalts...",
|
|
99
100
|
"collab.title": "Live-Zusammenarbeit",
|
|
@@ -92,6 +92,7 @@ const en = {
|
|
|
92
92
|
"editor.clearConfirm": "Clear all content? This cannot be undone.",
|
|
93
93
|
"editor.fullscreen": "Fullscreen",
|
|
94
94
|
"editor.exitFullscreen": "Exit Fullscreen",
|
|
95
|
+
"editor.versionHistory": "History",
|
|
95
96
|
"editor.mediaLibrary": "Media Library",
|
|
96
97
|
"editor.placeholder": "Start writing your amazing content...",
|
|
97
98
|
"collab.title": "Live Collaboration",
|
|
@@ -94,6 +94,7 @@ const en = {
|
|
|
94
94
|
"editor.clearConfirm": "Clear all content? This cannot be undone.",
|
|
95
95
|
"editor.fullscreen": "Fullscreen",
|
|
96
96
|
"editor.exitFullscreen": "Exit Fullscreen",
|
|
97
|
+
"editor.versionHistory": "History",
|
|
97
98
|
"editor.mediaLibrary": "Media Library",
|
|
98
99
|
"editor.placeholder": "Start writing your amazing content...",
|
|
99
100
|
"collab.title": "Live Collaboration",
|
|
@@ -94,6 +94,7 @@ const es = {
|
|
|
94
94
|
"editor.clearConfirm": "¿Limpiar todo el contenido? Esto no se puede deshacer.",
|
|
95
95
|
"editor.fullscreen": "Pantalla Completa",
|
|
96
96
|
"editor.exitFullscreen": "Salir de Pantalla Completa",
|
|
97
|
+
"editor.versionHistory": "Historial",
|
|
97
98
|
"editor.mediaLibrary": "Media Library",
|
|
98
99
|
"editor.placeholder": "Comienza a escribir tu increíble contenido...",
|
|
99
100
|
"collab.title": "Colaboración en Vivo",
|
|
@@ -92,6 +92,7 @@ const es = {
|
|
|
92
92
|
"editor.clearConfirm": "¿Limpiar todo el contenido? Esto no se puede deshacer.",
|
|
93
93
|
"editor.fullscreen": "Pantalla Completa",
|
|
94
94
|
"editor.exitFullscreen": "Salir de Pantalla Completa",
|
|
95
|
+
"editor.versionHistory": "Historial",
|
|
95
96
|
"editor.mediaLibrary": "Media Library",
|
|
96
97
|
"editor.placeholder": "Comienza a escribir tu increíble contenido...",
|
|
97
98
|
"collab.title": "Colaboración en Vivo",
|
|
@@ -92,6 +92,7 @@ const fr = {
|
|
|
92
92
|
"editor.clearConfirm": "Effacer tout le contenu ? Cela ne peut pas être annulé.",
|
|
93
93
|
"editor.fullscreen": "Plein Écran",
|
|
94
94
|
"editor.exitFullscreen": "Quitter le Plein Écran",
|
|
95
|
+
"editor.versionHistory": "Historique",
|
|
95
96
|
"editor.mediaLibrary": "Media Library",
|
|
96
97
|
"editor.placeholder": "Commencez à écrire votre incroyable contenu...",
|
|
97
98
|
"collab.title": "Collaboration en Direct",
|
|
@@ -94,6 +94,7 @@ const fr = {
|
|
|
94
94
|
"editor.clearConfirm": "Effacer tout le contenu ? Cela ne peut pas être annulé.",
|
|
95
95
|
"editor.fullscreen": "Plein Écran",
|
|
96
96
|
"editor.exitFullscreen": "Quitter le Plein Écran",
|
|
97
|
+
"editor.versionHistory": "Historique",
|
|
97
98
|
"editor.mediaLibrary": "Media Library",
|
|
98
99
|
"editor.placeholder": "Commencez à écrire votre incroyable contenu...",
|
|
99
100
|
"collab.title": "Collaboration en Direct",
|
|
@@ -4,7 +4,7 @@ import { styled, css, keyframes, createGlobalStyle, useTheme } from "styled-comp
|
|
|
4
4
|
import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
5
5
|
import * as ReactDOM from "react-dom";
|
|
6
6
|
import ReactDOM__default, { flushSync, createPortal } from "react-dom";
|
|
7
|
-
import { a as ForwardRef$26, e as ForwardRef$2n, f as ForwardRef$2, g as ForwardRef$1l, h as ForwardRef$1b, i as ForwardRef$2v, j as ForwardRef$1U, k as ForwardRef$2j, l as ForwardRef$12, m as ForwardRef$2k, n as ForwardRef$2x, o as ForwardRef$2h, p as ForwardRef$v, P as PLUGIN_ID } from "./index-
|
|
7
|
+
import { a as ForwardRef$26, e as ForwardRef$2n, f as ForwardRef$2, g as ForwardRef$1l, h as ForwardRef$1b, i as ForwardRef$2v, j as ForwardRef$1U, k as ForwardRef$2j, l as ForwardRef$12, m as ForwardRef$2k, n as ForwardRef$2x, o as ForwardRef$2h, p as ForwardRef$v, P as PLUGIN_ID } from "./index-BNxjfrVK.mjs";
|
|
8
8
|
var __assign = function() {
|
|
9
9
|
__assign = Object.assign || function __assign2(t2) {
|
|
10
10
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -50971,13 +50971,14 @@ const Input = styled.input`
|
|
|
50971
50971
|
const getTranslation = (id) => `${PLUGIN_ID}.${id}`;
|
|
50972
50972
|
export {
|
|
50973
50973
|
Alert as A,
|
|
50974
|
-
|
|
50975
|
-
|
|
50974
|
+
Button as B,
|
|
50975
|
+
Divider as D,
|
|
50976
|
+
Flex as F,
|
|
50976
50977
|
Loader as L,
|
|
50977
50978
|
Typography as T,
|
|
50978
|
-
|
|
50979
|
-
|
|
50980
|
-
|
|
50979
|
+
Box as a,
|
|
50980
|
+
Field as b,
|
|
50981
|
+
TextInput as c,
|
|
50981
50982
|
Badge as d,
|
|
50982
50983
|
Accordion as e,
|
|
50983
50984
|
getTranslation as g,
|
|
@@ -3,7 +3,7 @@ const React = require("react");
|
|
|
3
3
|
const styled = require("styled-components");
|
|
4
4
|
const jsxRuntime = require("react/jsx-runtime");
|
|
5
5
|
const ReactDOM = require("react-dom");
|
|
6
|
-
const index$1 = require("./index-
|
|
6
|
+
const index$1 = require("./index-DO-QpiC9.js");
|
|
7
7
|
function _interopNamespace(e) {
|
|
8
8
|
if (e && e.__esModule) return e;
|
|
9
9
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
@@ -50992,6 +50992,7 @@ exports.Alert = Alert;
|
|
|
50992
50992
|
exports.Badge = Badge;
|
|
50993
50993
|
exports.Box = Box;
|
|
50994
50994
|
exports.Button = Button;
|
|
50995
|
+
exports.Divider = Divider;
|
|
50995
50996
|
exports.Field = Field;
|
|
50996
50997
|
exports.Flex = Flex;
|
|
50997
50998
|
exports.Loader = Loader;
|
|
@@ -2369,8 +2369,8 @@ const index = {
|
|
|
2369
2369
|
name: "richtext",
|
|
2370
2370
|
pluginId: PLUGIN_ID,
|
|
2371
2371
|
// Must match server-side plugin name
|
|
2372
|
-
type: "
|
|
2373
|
-
// Data type - stores JSON
|
|
2372
|
+
type: "json",
|
|
2373
|
+
// Data type - stores Editor.js JSON content natively
|
|
2374
2374
|
intlLabel: {
|
|
2375
2375
|
id: `${PLUGIN_ID}.richtext.label`,
|
|
2376
2376
|
defaultMessage: "Magic Editor X"
|
|
@@ -2383,7 +2383,7 @@ const index = {
|
|
|
2383
2383
|
icon: PluginIcon,
|
|
2384
2384
|
// Input component for Content Manager
|
|
2385
2385
|
components: {
|
|
2386
|
-
Input: async () => import("./index-
|
|
2386
|
+
Input: async () => import("./index-Byp_IaHi.mjs").then((module) => ({
|
|
2387
2387
|
default: module.default
|
|
2388
2388
|
}))
|
|
2389
2389
|
},
|
|
@@ -2445,7 +2445,7 @@ const index = {
|
|
|
2445
2445
|
defaultMessage: "Magic Editor X"
|
|
2446
2446
|
},
|
|
2447
2447
|
// Use lazy import without async wrapper to avoid deprecation warning
|
|
2448
|
-
Component: () => import("./App-
|
|
2448
|
+
Component: () => import("./App-Czke2os9.mjs"),
|
|
2449
2449
|
permissions: []
|
|
2450
2450
|
});
|
|
2451
2451
|
app.createSettingSection(
|
|
@@ -2464,7 +2464,7 @@ const index = {
|
|
|
2464
2464
|
id: "upgrade",
|
|
2465
2465
|
// relative path (no leading slash)
|
|
2466
2466
|
to: `${PLUGIN_ID}/upgrade`,
|
|
2467
|
-
Component: () => import("./LicensePage-
|
|
2467
|
+
Component: () => import("./LicensePage-Cj6-z6rO.mjs")
|
|
2468
2468
|
},
|
|
2469
2469
|
{
|
|
2470
2470
|
intlLabel: {
|
|
@@ -2474,7 +2474,7 @@ const index = {
|
|
|
2474
2474
|
id: "license",
|
|
2475
2475
|
// relative path (no leading slash)
|
|
2476
2476
|
to: `${PLUGIN_ID}/license`,
|
|
2477
|
-
Component: () => import("./Settings-
|
|
2477
|
+
Component: () => import("./Settings-CsaF0hO7.mjs")
|
|
2478
2478
|
}
|
|
2479
2479
|
]
|
|
2480
2480
|
);
|
|
@@ -2484,7 +2484,7 @@ const index = {
|
|
|
2484
2484
|
* Bootstrap the plugin
|
|
2485
2485
|
*/
|
|
2486
2486
|
async bootstrap(app) {
|
|
2487
|
-
const { default: LiveCollaborationPanel } = await import("./LiveCollaborationPanel-
|
|
2487
|
+
const { default: LiveCollaborationPanel } = await import("./LiveCollaborationPanel-D11eAcKk.mjs");
|
|
2488
2488
|
try {
|
|
2489
2489
|
const contentManagerPlugin = app.getPlugin("content-manager");
|
|
2490
2490
|
if (contentManagerPlugin && contentManagerPlugin.apis) {
|
|
@@ -2503,11 +2503,11 @@ const index = {
|
|
|
2503
2503
|
const importedTrads = await Promise.all(
|
|
2504
2504
|
locales.map(async (locale) => {
|
|
2505
2505
|
try {
|
|
2506
|
-
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-
|
|
2506
|
+
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-C_0Mj-Zo.mjs"), "./translations/en.json": () => import("./en-B7AAf1ie.mjs"), "./translations/es.json": () => import("./es-zdP8sd-f.mjs"), "./translations/fr.json": () => import("./fr-CtAgOgH1.mjs"), "./translations/pt.json": () => import("./pt-BmUw6YMP.mjs") }), `./translations/${locale}.json`, 3);
|
|
2507
2507
|
return { data: prefixPluginTranslations(data, PLUGIN_ID), locale };
|
|
2508
2508
|
} catch {
|
|
2509
2509
|
try {
|
|
2510
|
-
const { default: data } = await import("./en-
|
|
2510
|
+
const { default: data } = await import("./en-B7AAf1ie.mjs");
|
|
2511
2511
|
return { data: prefixPluginTranslations(data, PLUGIN_ID), locale };
|
|
2512
2512
|
} catch {
|
|
2513
2513
|
return { data: {}, locale };
|