@richscripts/richtexteditor 2.4.0 → 2.4.2
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/migration/README.md +100 -0
- package/migration/cli.js +294 -0
- package/migration/index.d.ts +18 -0
- package/migration/index.js +242 -0
- package/migration/report-schema-v2.json +127 -0
- package/package.json +14 -2
- package/richtexteditor/CHANGELOG.md +326 -1
- package/richtexteditor/all_plugins.js +14982 -4831
- package/richtexteditor/all_plugins.min.js +62 -42
- package/richtexteditor/plugins/accessibilitychecker.js +8 -7
- package/richtexteditor/plugins/aitoolkit.css +17 -8
- package/richtexteditor/plugins/aitoolkit.js +8 -8
- package/richtexteditor/plugins/all_plugins.js +14982 -4831
- package/richtexteditor/plugins/all_plugins.min.js +62 -42
- package/richtexteditor/plugins/autocorrect.js +353 -0
- package/richtexteditor/plugins/bookmarkcard.js +12 -1
- package/richtexteditor/plugins/changecase.js +238 -0
- package/richtexteditor/plugins/comments.js +15 -28
- package/richtexteditor/plugins/contentminimap.js +6 -5
- package/richtexteditor/plugins/crdt-engine.js +2201 -198
- package/richtexteditor/plugins/crdt-engine.min.js +5 -5
- package/richtexteditor/plugins/crossreference.js +408 -0
- package/richtexteditor/plugins/documentimport.js +915 -21
- package/richtexteditor/plugins/documentoutline.js +5 -4
- package/richtexteditor/plugins/docxexport.js +960 -0
- package/richtexteditor/plugins/draghandle.js +309 -0
- package/richtexteditor/plugins/footnotes.js +398 -0
- package/richtexteditor/plugins/formatpainter.js +298 -0
- package/richtexteditor/plugins/formattingmarks.js +246 -0
- package/richtexteditor/plugins/html2pdf.js +108 -4
- package/richtexteditor/plugins/imageeditor.js +37 -7
- package/richtexteditor/plugins/insertgallery.js +553 -170
- package/richtexteditor/plugins/keyboarda11y.js +316 -0
- package/richtexteditor/plugins/linenumbers.js +352 -0
- package/richtexteditor/plugins/linkchecker.js +396 -0
- package/richtexteditor/plugins/mentionplugin.js +4 -3
- package/richtexteditor/plugins/mergefields.js +328 -0
- package/richtexteditor/plugins/multilevellist.js +137 -0
- package/richtexteditor/plugins/pagination.js +505 -0
- package/richtexteditor/plugins/pdfexport.js +1137 -0
- package/richtexteditor/plugins/permanentpen.js +211 -0
- package/richtexteditor/plugins/revisionhistory.js +47 -34
- package/richtexteditor/plugins/rtlui.js +150 -0
- package/richtexteditor/plugins/sanitizer.js +510 -0
- package/richtexteditor/plugins/slashcommand.js +142 -17
- package/richtexteditor/plugins/spellcheck.js +6 -3
- package/richtexteditor/plugins/tableofcontents.js +353 -0
- package/richtexteditor/plugins/tabletools.js +342 -0
- package/richtexteditor/plugins/textdirection.js +313 -0
- package/richtexteditor/plugins/trackedchanges.js +37 -6
- package/richtexteditor/plugins/tui.image-editor/tui-code-snippet.min.js +1 -1
- package/richtexteditor/plugins/tui.image-editor/tui-color-picker.min.js +1 -1
- package/richtexteditor/plugins/tui.image-editor/tui-image-editor.min.js +1 -1
- package/richtexteditor/plugins/vendor/html2pdf.bundle.min.js +3 -0
- package/richtexteditor/plugins/watermark.js +214 -0
- package/richtexteditor/plugins/wordexport.js +0 -0
- package/richtexteditor/plugins/yjscollab.js +49 -11
- package/richtexteditor/rte-config.js +44 -44
- package/richtexteditor/rte.js +91 -63
- package/richtexteditor/rte_theme_default.css +483 -384
|
@@ -79,7 +79,8 @@ function RTE_Plugin_AccessibilityChecker() {
|
|
|
79
79
|
style.innerHTML = [
|
|
80
80
|
".rte-a11y-shell{display:flex;align-items:stretch;gap:10px;}",
|
|
81
81
|
".rte-a11y-shell>.rte-a11y-host{flex:1 1 auto;min-width:0;}",
|
|
82
|
-
"
|
|
82
|
+
"/* 2026-07-12 accessibility panel precision */",
|
|
83
|
+
".rte-a11y-panel{display:none;flex:0 0 310px;min-width:270px;max-width:min(360px,32vw);border:1px solid rgba(148,163,184,.22);border-radius:8px;background:linear-gradient(180deg,rgba(255,255,255,.98),rgba(248,251,255,.96));box-shadow:0 14px 32px rgba(29,78,216,.1),0 2px 8px rgba(15,23,42,.06);overflow:hidden;color:#172033;font-family:Aptos,'Segoe UI',sans-serif;}",
|
|
83
84
|
".rte-a11y-shell.is-open>.rte-a11y-panel{display:flex;flex-direction:column;}",
|
|
84
85
|
".rte-a11y-header{padding:12px 12px 9px 14px;border-bottom:1px solid rgba(148,163,184,.16);background:rgba(255,255,255,.72);}",
|
|
85
86
|
".rte-a11y-kicker{font-size:10px;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:#52657e;font-weight:850;}",
|
|
@@ -88,11 +89,11 @@ function RTE_Plugin_AccessibilityChecker() {
|
|
|
88
89
|
".rte-a11y-toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 10px 8px 14px;border-bottom:1px solid rgba(148,163,184,.16);gap:10px;background:rgba(255,255,255,.52);}",
|
|
89
90
|
".rte-a11y-count{min-width:0;font-size:12px;font-weight:750;color:#52657e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}",
|
|
90
91
|
".rte-a11y-actions{display:flex;align-items:center;gap:6px;}",
|
|
91
|
-
".rte-a11y-link{appearance:none;border:1px solid rgba(100,116,139,.18);background:#fff;color:#315277;cursor:pointer;font-size:12px;font-weight:750;padding:6px 9px;border-radius:
|
|
92
|
+
".rte-a11y-link{appearance:none;border:1px solid rgba(100,116,139,.18);background:#fff;color:#315277;cursor:pointer;font-size:12px;font-weight:750;padding:6px 9px;border-radius:7px;line-height:1;}",
|
|
92
93
|
".rte-a11y-link:hover,.rte-a11y-link:focus-visible{background:#eef4ff;color:#0f3f9f;border-color:rgba(37,99,235,.28);}",
|
|
93
94
|
".rte-a11y-body{padding:6px;overflow:auto;min-height:160px;max-height:560px;display:flex;flex-direction:column;gap:8px;scrollbar-width:thin;}",
|
|
94
95
|
".rte-a11y-list{display:flex;flex-direction:column;gap:6px;}",
|
|
95
|
-
".rte-a11y-item{appearance:none;width:100%;text-align:left;border:1px solid rgba(148,163,184,.16);background:rgba(255,255,255,.84);cursor:pointer;border-radius:
|
|
96
|
+
".rte-a11y-item{appearance:none;width:100%;text-align:left;border:1px solid rgba(148,163,184,.16);background:rgba(255,255,255,.84);cursor:pointer;border-radius:8px;padding:10px;box-shadow:0 6px 14px rgba(15,23,42,.04);transition:background 160ms ease,box-shadow 160ms ease,transform 160ms ease;}",
|
|
96
97
|
".rte-a11y-item:hover,.rte-a11y-item:focus-visible{background:#f8fbff;border-color:rgba(37,99,235,.24);}",
|
|
97
98
|
".rte-a11y-item.is-active{border-color:rgba(37,99,235,.36);background:#eef4ff;box-shadow:0 12px 28px rgba(37,99,235,.14);transform:translateY(-1px);}",
|
|
98
99
|
".rte-a11y-item-top{display:flex;align-items:center;justify-content:space-between;gap:10px;}",
|
|
@@ -101,18 +102,18 @@ function RTE_Plugin_AccessibilityChecker() {
|
|
|
101
102
|
".rte-a11y-badge-error{background:#fff1f2;color:#9f1239;border:1px solid rgba(159,18,57,.18);}",
|
|
102
103
|
".rte-a11y-code{font-size:11px;color:#64748b;font-family:Consolas,'Cascadia Mono',monospace;}",
|
|
103
104
|
".rte-a11y-message{margin-top:7px;font-size:13px;line-height:1.42;color:#172033;}",
|
|
104
|
-
".rte-a11y-detail{border:1px solid rgba(148,163,184,.16);background:rgba(255,255,255,.86);border-radius:
|
|
105
|
+
".rte-a11y-detail{border:1px solid rgba(148,163,184,.16);background:rgba(255,255,255,.86);border-radius:8px;padding:11px;display:flex;flex-direction:column;gap:9px;box-shadow:0 6px 14px rgba(15,23,42,.04);}",
|
|
105
106
|
".rte-a11y-detail-title{font-size:13px;font-weight:850;color:#172033;}",
|
|
106
107
|
".rte-a11y-detail-copy{font-size:12px;line-height:1.45;color:#52657e;}",
|
|
107
108
|
".rte-a11y-field{display:flex;flex-direction:column;gap:6px;}",
|
|
108
109
|
".rte-a11y-label{font-size:10px;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:#52657e;font-weight:850;}",
|
|
109
|
-
".rte-a11y-input{width:100%;border:1px solid rgba(148,163,184,.24);border-radius:
|
|
110
|
+
".rte-a11y-input{width:100%;border:1px solid rgba(148,163,184,.24);border-radius:7px;padding:9px 10px;font-size:13px;line-height:1.4;box-sizing:border-box;background:#fff;}",
|
|
110
111
|
".rte-a11y-input:focus{outline:2px solid rgba(37,99,235,.18);border-color:rgba(37,99,235,.38);}",
|
|
111
112
|
".rte-a11y-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}",
|
|
112
|
-
".rte-a11y-button{appearance:none;border:1px solid #1d67ba;border-radius:
|
|
113
|
+
".rte-a11y-button{appearance:none;border:1px solid #1d67ba;border-radius:7px;background:#1d67ba;color:#fff;padding:8px 12px;font-size:12px;font-weight:750;cursor:pointer;box-shadow:0 6px 14px rgba(29,103,186,.16);}",
|
|
113
114
|
".rte-a11y-button-secondary{background:#fff;color:#315277;border-color:rgba(100,116,139,.18);box-shadow:none;}",
|
|
114
115
|
".rte-a11y-button:hover,.rte-a11y-button:focus-visible{transform:translateY(-1px);}",
|
|
115
|
-
".rte-a11y-empty{padding:14px;border-radius:
|
|
116
|
+
".rte-a11y-empty{padding:14px;border-radius:8px;background:#fff;color:#52657e;font-size:13px;font-weight:700;line-height:1.55;border:1px dashed rgba(148,163,184,.34);}",
|
|
116
117
|
"@media (max-width: 1420px){.rte-a11y-shell{display:block;}.rte-a11y-panel{margin-top:12px;max-width:none;width:100%;}.rte-a11y-body{max-height:360px;}}"
|
|
117
118
|
].join("");
|
|
118
119
|
hostDoc.head.appendChild(style);
|
|
@@ -47,14 +47,23 @@
|
|
|
47
47
|
min-width: 28px;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
.richtexteditor rte-toolbar-button.rte_command_aiassist svg,
|
|
51
|
-
.richtexteditor rte-toolbar-arrowbutton.rte_command_aiassist svg,
|
|
52
|
-
.richtexteditor rte-toolbar-dropdown.rte_command_aiassist svg,
|
|
53
|
-
.richtexteditor rte-control-toolbar rte-toolbar-button.rte_command_aiassist svg,
|
|
54
|
-
.richtexteditor rte-control-toolbar rte-toolbar-arrowbutton.rte_command_aiassist svg,
|
|
55
|
-
.richtexteditor rte-control-toolbar rte-toolbar-dropdown.rte_command_aiassist svg {
|
|
56
|
-
/* Size is button-box-driven via the inline width/height:100% rte.js
|
|
57
|
-
every icon svg
|
|
50
|
+
.richtexteditor rte-toolbar-button.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist svg,
|
|
51
|
+
.richtexteditor rte-toolbar-arrowbutton.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist svg,
|
|
52
|
+
.richtexteditor rte-toolbar-dropdown.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist svg,
|
|
53
|
+
.richtexteditor rte-control-toolbar rte-toolbar-button.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist svg,
|
|
54
|
+
.richtexteditor rte-control-toolbar rte-toolbar-arrowbutton.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist svg,
|
|
55
|
+
.richtexteditor rte-control-toolbar rte-toolbar-dropdown.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist.rte_command_aiassist svg {
|
|
56
|
+
/* Size is normally button-box-driven via the inline width/height:100% rte.js
|
|
57
|
+
sets on every icon svg (all icons render ~16-18px regardless of their own
|
|
58
|
+
svg width/height attributes). Override to make the AI brand mark read a
|
|
59
|
+
little bigger than the surrounding monochrome icons. The repeated
|
|
60
|
+
.rte_command_aiassist class (not a typo) bumps specificity above the
|
|
61
|
+
rte-modern skin's generic ".richtexteditor.rte-modern.rte-desktop
|
|
62
|
+
rte-toolbar.rte-toolbar-desktop rte-toolbar-button svg" rule in
|
|
63
|
+
rte_theme_default.css, which otherwise wins on higher specificity even
|
|
64
|
+
though both rules are !important. */
|
|
65
|
+
width: 20px !important;
|
|
66
|
+
height: 20px !important;
|
|
58
67
|
color: inherit;
|
|
59
68
|
}
|
|
60
69
|
|
|
@@ -38,8 +38,8 @@ if (!window.RTE_DefaultConfig) window.RTE_DefaultConfig = {};
|
|
|
38
38
|
})();
|
|
39
39
|
|
|
40
40
|
if (!RTE_DefaultConfig.svgCode_aiassist) {
|
|
41
|
-
RTE_DefaultConfig.svgCode_aiassist = '<svg viewBox="0 0 24 24" width="
|
|
42
|
-
RTE_DefaultConfig.svgCode_aiassist = '<svg viewBox="0 0 24 24" width="
|
|
41
|
+
RTE_DefaultConfig.svgCode_aiassist = '<svg viewBox="0 0 24 24" width="20" height="20" fill="none" aria-hidden="true"><defs><linearGradient id="rte-ai-robot-shell" x1="5" y1="6" x2="19" y2="18" gradientUnits="userSpaceOnUse"><stop stop-color="#1fb6ff"/><stop offset=".52" stop-color="#2563eb"/><stop offset="1" stop-color="#7c3aed"/></linearGradient><linearGradient id="rte-ai-robot-glow" x1="8" y1="10" x2="16" y2="15" gradientUnits="userSpaceOnUse"><stop stop-color="#fef9c3"/><stop offset="1" stop-color="#fde68a"/></linearGradient></defs><path d="M12 2.4v2.4" stroke="#f59e0b" stroke-width="1.7" stroke-linecap="round"/><circle cx="12" cy="2.4" r="1" fill="#fbbf24"/><rect x="5.1" y="6.1" width="13.8" height="11.2" rx="3.4" fill="url(#rte-ai-robot-shell)" stroke="#1e40af" stroke-width="1.2"/><path d="M8.2 6.1V5.8A1.8 1.8 0 0110 4h4a1.8 1.8 0 011.8 1.8v.3" stroke="#93c5fd" stroke-width="1.2" stroke-linecap="round"/><rect x="7.7" y="9.2" width="8.6" height="4.8" rx="2.4" fill="#0f172a" opacity=".26"/><circle cx="10" cy="11.6" r="1.15" fill="url(#rte-ai-robot-glow)"/><circle cx="14" cy="11.6" r="1.15" fill="url(#rte-ai-robot-glow)"/><path d="M9.4 14.9c.8.55 1.66.83 2.6.83s1.8-.28 2.6-.83" stroke="#ffffff" stroke-width="1.45" stroke-linecap="round"/><path d="M8.1 19.2l1-2.1M15.9 19.2l-1-2.1" stroke="#2563eb" stroke-width="1.5" stroke-linecap="round"/><path d="M18.8 6.4l.55-1.25.55 1.25 1.25.55-1.25.55-.55 1.25-.55-1.25-1.25-.55z" fill="#fef08a"/></svg>';
|
|
42
|
+
RTE_DefaultConfig.svgCode_aiassist = '<svg viewBox="0 0 24 24" width="20" height="20" fill="none" aria-hidden="true"><defs><linearGradient id="rte-ai-bot-v4-shell" x1="4.2" y1="5.8" x2="19.8" y2="18.4" gradientUnits="userSpaceOnUse"><stop stop-color="#22d3ee"/><stop offset=".52" stop-color="#2563eb"/><stop offset="1" stop-color="#4338ca"/></linearGradient><linearGradient id="rte-ai-bot-v4-visor" x1="7.8" y1="9" x2="16.2" y2="13.8" gradientUnits="userSpaceOnUse"><stop stop-color="#f8fafc"/><stop offset="1" stop-color="#bfdbfe"/></linearGradient></defs><path d="M12 2.6v2.3" stroke="#f59e0b" stroke-width="1.7" stroke-linecap="round"/><circle cx="12" cy="2.6" r=".9" fill="#fbbf24"/><path d="M4.9 12.2h-1a1.4 1.4 0 010-2.8h1M19.1 9.4h1a1.4 1.4 0 010 2.8h-1" stroke="#2563eb" stroke-width="1.25" stroke-linecap="round"/><rect x="5.2" y="5.9" width="13.6" height="12.2" rx="4" fill="url(#rte-ai-bot-v4-shell)" stroke="#1e40af" stroke-width="1.15"/><rect x="7.6" y="8.8" width="8.8" height="5.2" rx="2.6" fill="url(#rte-ai-bot-v4-visor)" opacity=".98"/><circle cx="10.2" cy="11.4" r=".9" fill="#0f172a"/><circle cx="13.8" cy="11.4" r=".9" fill="#0f172a"/><path d="M9.5 15.3c.78.52 1.6.78 2.5.78s1.72-.26 2.5-.78" stroke="#eff6ff" stroke-width="1.35" stroke-linecap="round"/><path d="M7.7 20.2l1.15-2.15M16.3 20.2l-1.15-2.15" stroke="#2563eb" stroke-width="1.45" stroke-linecap="round"/><path d="M18.6 5.1l.45-.95.45.95.95.45-.95.45-.45.95-.45-.95-.95-.45z" fill="#fde68a"/></svg>';
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
if (!RTE_DefaultConfig.svgCode_aiassist_open_dialog) {
|
|
@@ -52,22 +52,22 @@ if (!RTE_DefaultConfig.svgCode_aiassist_chat) {
|
|
|
52
52
|
RTE_DefaultConfig.svgCode_aiassist_chat = RTE_DefaultConfig.svgCode_aiassist;
|
|
53
53
|
}
|
|
54
54
|
if (!RTE_DefaultConfig.svgCode_aiassist_proofread) {
|
|
55
|
-
RTE_DefaultConfig.svgCode_aiassist_proofread = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="
|
|
55
|
+
RTE_DefaultConfig.svgCode_aiassist_proofread = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="4.5"/><path d="M14 14l5 5"/><path d="M8.8 10.5l1.2 1.3 2.3-2.5"/></svg>';
|
|
56
56
|
}
|
|
57
57
|
if (!RTE_DefaultConfig.svgCode_aiassist_rewrite) {
|
|
58
|
-
RTE_DefaultConfig.svgCode_aiassist_rewrite = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="
|
|
58
|
+
RTE_DefaultConfig.svgCode_aiassist_rewrite = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h11"/><path d="M4 12h8"/><path d="M4 17h11"/><path d="M16 5l4 4-6.5 6.5H9.5v-4z"/></svg>';
|
|
59
59
|
}
|
|
60
60
|
if (!RTE_DefaultConfig.svgCode_aiassist_translate) {
|
|
61
|
-
RTE_DefaultConfig.svgCode_aiassist_translate = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="
|
|
61
|
+
RTE_DefaultConfig.svgCode_aiassist_translate = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 6.5h10"/><path d="M8 4v2.5"/><path d="M11 6.5c-.6 2.9-2.2 5.3-4.7 7.1"/><path d="M6.5 10.5c1.2.9 2.5 1.6 3.9 2.1"/><path d="M14.5 9.5h5"/><path d="M17 7v2.5"/><path d="M15 19l2-4.5 2 4.5"/><path d="M15.8 17.2h2.4"/></svg>';
|
|
62
62
|
}
|
|
63
63
|
if (!RTE_DefaultConfig.svgCode_aiassist_comment) {
|
|
64
|
-
RTE_DefaultConfig.svgCode_aiassist_comment = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="
|
|
64
|
+
RTE_DefaultConfig.svgCode_aiassist_comment = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 7.5A3.5 3.5 0 019.5 4h8A3.5 3.5 0 0121 7.5v5a3.5 3.5 0 01-3.5 3.5H12l-4.5 3v-3H6A3.5 3.5 0 012.5 12.5v-5A3.5 3.5 0 016 4"/><path d="M8 9h8"/><path d="M8 12h5"/></svg>';
|
|
65
65
|
}
|
|
66
66
|
if (!RTE_DefaultConfig.svgCode_aiassist_paragraph) {
|
|
67
|
-
RTE_DefaultConfig.svgCode_aiassist_paragraph = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="
|
|
67
|
+
RTE_DefaultConfig.svgCode_aiassist_paragraph = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 7h8"/><path d="M5 12h14"/><path d="M5 17h10"/><path d="M18 5v6"/><path d="M15 8h6"/></svg>';
|
|
68
68
|
}
|
|
69
69
|
if (!RTE_DefaultConfig.svgCode_aiassist_justify) {
|
|
70
|
-
RTE_DefaultConfig.svgCode_aiassist_justify = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="
|
|
70
|
+
RTE_DefaultConfig.svgCode_aiassist_justify = '<svg viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 7h14"/><path d="M5 11h14"/><path d="M5 15h9"/><path d="M16 14l2 2 3-4"/></svg>';
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
RTE_DefaultConfig.plugin_aitoolkit = RTE_Plugin_AIToolkit;
|