@plasmicpkgs/tiptap 0.0.1
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/LICENSE.md +21 -0
- package/README.md +1 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/components/MentionList.d.ts +12 -0
- package/dist/contexts.d.ts +30 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1400 -0
- package/dist/index.js.map +1 -0
- package/dist/registerBold.d.ts +9 -0
- package/dist/registerCode.d.ts +9 -0
- package/dist/registerItalic.d.ts +9 -0
- package/dist/registerLink.d.ts +9 -0
- package/dist/registerMention.d.ts +28 -0
- package/dist/registerStrike.d.ts +9 -0
- package/dist/registerTiptap.d.ts +18 -0
- package/dist/registerUnderline.d.ts +9 -0
- package/dist/tiptap.esm.js +1382 -0
- package/dist/tiptap.esm.js.map +1 -0
- package/dist/toolbar/registerToolbarBold.d.ts +13 -0
- package/dist/toolbar/registerToolbarCode.d.ts +13 -0
- package/dist/toolbar/registerToolbarItalic.d.ts +13 -0
- package/dist/toolbar/registerToolbarLink.d.ts +13 -0
- package/dist/toolbar/registerToolbarMention.d.ts +13 -0
- package/dist/toolbar/registerToolbarStrike.d.ts +13 -0
- package/dist/toolbar/registerToolbarUnderline.d.ts +13 -0
- package/dist/useIsClient.d.ts +3 -0
- package/dist/utils.d.ts +24 -0
- package/package.json +103 -0
- package/skinny/contexts.d.ts +30 -0
- package/skinny/registerBold.cjs.js +48 -0
- package/skinny/registerBold.cjs.js.map +1 -0
- package/skinny/registerBold.d.ts +9 -0
- package/skinny/registerBold.esm.js +41 -0
- package/skinny/registerBold.esm.js.map +1 -0
- package/skinny/registerCode.cjs.js +48 -0
- package/skinny/registerCode.cjs.js.map +1 -0
- package/skinny/registerCode.d.ts +9 -0
- package/skinny/registerCode.esm.js +41 -0
- package/skinny/registerCode.esm.js.map +1 -0
- package/skinny/registerItalic.cjs.js +48 -0
- package/skinny/registerItalic.cjs.js.map +1 -0
- package/skinny/registerItalic.d.ts +9 -0
- package/skinny/registerItalic.esm.js +41 -0
- package/skinny/registerItalic.esm.js.map +1 -0
- package/skinny/registerLink.cjs.js +48 -0
- package/skinny/registerLink.cjs.js.map +1 -0
- package/skinny/registerLink.d.ts +9 -0
- package/skinny/registerLink.esm.js +41 -0
- package/skinny/registerLink.esm.js.map +1 -0
- package/skinny/registerMention.cjs.js +420 -0
- package/skinny/registerMention.cjs.js.map +1 -0
- package/skinny/registerMention.d.ts +28 -0
- package/skinny/registerMention.esm.js +411 -0
- package/skinny/registerMention.esm.js.map +1 -0
- package/skinny/registerStrike.cjs.js +48 -0
- package/skinny/registerStrike.cjs.js.map +1 -0
- package/skinny/registerStrike.d.ts +9 -0
- package/skinny/registerStrike.esm.js +41 -0
- package/skinny/registerStrike.esm.js.map +1 -0
- package/skinny/registerTiptap-6a2d0bb4.esm.js +375 -0
- package/skinny/registerTiptap-6a2d0bb4.esm.js.map +1 -0
- package/skinny/registerTiptap-fd9bf882.cjs.js +391 -0
- package/skinny/registerTiptap-fd9bf882.cjs.js.map +1 -0
- package/skinny/registerTiptap.cjs.js +20 -0
- package/skinny/registerTiptap.cjs.js.map +1 -0
- package/skinny/registerTiptap.d.ts +18 -0
- package/skinny/registerTiptap.esm.js +10 -0
- package/skinny/registerTiptap.esm.js.map +1 -0
- package/skinny/registerToolbarBold.cjs.js +78 -0
- package/skinny/registerToolbarBold.cjs.js.map +1 -0
- package/skinny/registerToolbarBold.esm.js +71 -0
- package/skinny/registerToolbarBold.esm.js.map +1 -0
- package/skinny/registerToolbarCode.cjs.js +78 -0
- package/skinny/registerToolbarCode.cjs.js.map +1 -0
- package/skinny/registerToolbarCode.esm.js +71 -0
- package/skinny/registerToolbarCode.esm.js.map +1 -0
- package/skinny/registerToolbarItalic.cjs.js +81 -0
- package/skinny/registerToolbarItalic.cjs.js.map +1 -0
- package/skinny/registerToolbarItalic.esm.js +74 -0
- package/skinny/registerToolbarItalic.esm.js.map +1 -0
- package/skinny/registerToolbarLink.cjs.js +78 -0
- package/skinny/registerToolbarLink.cjs.js.map +1 -0
- package/skinny/registerToolbarLink.esm.js +71 -0
- package/skinny/registerToolbarLink.esm.js.map +1 -0
- package/skinny/registerToolbarMention.cjs.js +78 -0
- package/skinny/registerToolbarMention.cjs.js.map +1 -0
- package/skinny/registerToolbarMention.esm.js +71 -0
- package/skinny/registerToolbarMention.esm.js.map +1 -0
- package/skinny/registerToolbarStrike.cjs.js +78 -0
- package/skinny/registerToolbarStrike.cjs.js.map +1 -0
- package/skinny/registerToolbarStrike.esm.js +71 -0
- package/skinny/registerToolbarStrike.esm.js.map +1 -0
- package/skinny/registerToolbarUnderline.cjs.js +78 -0
- package/skinny/registerToolbarUnderline.cjs.js.map +1 -0
- package/skinny/registerToolbarUnderline.esm.js +71 -0
- package/skinny/registerToolbarUnderline.esm.js.map +1 -0
- package/skinny/registerUnderline.cjs.js +48 -0
- package/skinny/registerUnderline.cjs.js.map +1 -0
- package/skinny/registerUnderline.d.ts +9 -0
- package/skinny/registerUnderline.esm.js +41 -0
- package/skinny/registerUnderline.esm.js.map +1 -0
- package/skinny/useIsClient.d.ts +3 -0
- package/skinny/utils.d.ts +24 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Document = require('@tiptap/extension-document');
|
|
4
|
+
var Paragraph = require('@tiptap/extension-paragraph');
|
|
5
|
+
var Text = require('@tiptap/extension-text');
|
|
6
|
+
var react = require('@tiptap/react');
|
|
7
|
+
var antd = require('antd');
|
|
8
|
+
var React = require('react');
|
|
9
|
+
var registerComponent = require('@plasmicapp/host/registerComponent');
|
|
10
|
+
require('@plasmicapp/host/registerGlobalContext');
|
|
11
|
+
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var Document__default = /*#__PURE__*/_interopDefault(Document);
|
|
15
|
+
var Paragraph__default = /*#__PURE__*/_interopDefault(Paragraph);
|
|
16
|
+
var Text__default = /*#__PURE__*/_interopDefault(Text);
|
|
17
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
18
|
+
var registerComponent__default = /*#__PURE__*/_interopDefault(registerComponent);
|
|
19
|
+
|
|
20
|
+
const RESET_TIMEOUT_MS = 500;
|
|
21
|
+
const allExtensions = [
|
|
22
|
+
"bold",
|
|
23
|
+
"italic",
|
|
24
|
+
"underline",
|
|
25
|
+
"strike",
|
|
26
|
+
"code",
|
|
27
|
+
"link",
|
|
28
|
+
"mention"
|
|
29
|
+
];
|
|
30
|
+
const TiptapContext = React__default.default.createContext(void 0);
|
|
31
|
+
const useTiptapContext = () => {
|
|
32
|
+
const context = React__default.default.useContext(TiptapContext);
|
|
33
|
+
if (!context) {
|
|
34
|
+
throw new Error(
|
|
35
|
+
"useTiptapContext must be used within a TiptapContextProvider"
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return context;
|
|
39
|
+
};
|
|
40
|
+
const TiptapContextProvider = ({ children }) => {
|
|
41
|
+
const [bold, setBold] = React.useState(void 0);
|
|
42
|
+
const [code, setCode] = React.useState(void 0);
|
|
43
|
+
const [italic, setItalic] = React.useState(
|
|
44
|
+
void 0
|
|
45
|
+
);
|
|
46
|
+
const [link, setLink] = React.useState(void 0);
|
|
47
|
+
const [mention, setMention] = React.useState(
|
|
48
|
+
void 0
|
|
49
|
+
);
|
|
50
|
+
const [strike, setStrike] = React.useState(
|
|
51
|
+
void 0
|
|
52
|
+
);
|
|
53
|
+
const [underline, setUnderline] = React.useState(void 0);
|
|
54
|
+
return /* @__PURE__ */ React__default.default.createElement(
|
|
55
|
+
TiptapContext.Provider,
|
|
56
|
+
{
|
|
57
|
+
value: {
|
|
58
|
+
bold,
|
|
59
|
+
setBold,
|
|
60
|
+
code,
|
|
61
|
+
setCode,
|
|
62
|
+
italic,
|
|
63
|
+
setItalic,
|
|
64
|
+
link,
|
|
65
|
+
setLink,
|
|
66
|
+
mention,
|
|
67
|
+
/**
|
|
68
|
+
* In situations where I want to remove an extension and add it again with new options (e.g. within a useEffect - see registerMention)
|
|
69
|
+
* the options are not updated.
|
|
70
|
+
* So after removing the extension, I want to wait a few seconds before I add it again,
|
|
71
|
+
* so the Tiptap editor acknowledges the removal before it adds the extension back with new updated options.
|
|
72
|
+
* @param mentionOptions
|
|
73
|
+
* @returns
|
|
74
|
+
*/
|
|
75
|
+
setMention: (mentionOptions) => {
|
|
76
|
+
if (!mentionOptions) {
|
|
77
|
+
setMention(mentionOptions);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
setTimeout(() => {
|
|
81
|
+
setMention(mentionOptions);
|
|
82
|
+
}, RESET_TIMEOUT_MS);
|
|
83
|
+
},
|
|
84
|
+
strike,
|
|
85
|
+
setStrike,
|
|
86
|
+
underline,
|
|
87
|
+
setUnderline
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
children
|
|
91
|
+
);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
function useIsClient() {
|
|
95
|
+
const [loaded, setLoaded] = React__default.default.useState(false);
|
|
96
|
+
useIsomorphicLayoutEffect(() => {
|
|
97
|
+
setLoaded(true);
|
|
98
|
+
});
|
|
99
|
+
return loaded;
|
|
100
|
+
}
|
|
101
|
+
const isBrowser = typeof window !== "undefined";
|
|
102
|
+
const useIsomorphicLayoutEffect = isBrowser ? React__default.default.useLayoutEffect : React__default.default.useEffect;
|
|
103
|
+
|
|
104
|
+
function registerComponentHelper(loader, component, meta) {
|
|
105
|
+
if (loader) {
|
|
106
|
+
loader.registerComponent(component, meta);
|
|
107
|
+
} else {
|
|
108
|
+
registerComponent__default.default(component, meta);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function traverseReactEltTree(children, callback) {
|
|
112
|
+
const rec = (elts) => {
|
|
113
|
+
(Array.isArray(elts) ? elts : [elts]).forEach((elt) => {
|
|
114
|
+
var _a;
|
|
115
|
+
if (elt) {
|
|
116
|
+
callback(elt);
|
|
117
|
+
if (elt.children) {
|
|
118
|
+
rec(elt.children);
|
|
119
|
+
}
|
|
120
|
+
if (((_a = elt.props) == null ? void 0 : _a.children) && elt.props.children !== elt.children) {
|
|
121
|
+
rec(elt.props.children);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
rec(children);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
var __defProp = Object.defineProperty;
|
|
130
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
131
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
132
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
133
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
134
|
+
var __spreadValues = (a, b) => {
|
|
135
|
+
for (var prop in b || (b = {}))
|
|
136
|
+
if (__hasOwnProp.call(b, prop))
|
|
137
|
+
__defNormalProp(a, prop, b[prop]);
|
|
138
|
+
if (__getOwnPropSymbols)
|
|
139
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
140
|
+
if (__propIsEnum.call(b, prop))
|
|
141
|
+
__defNormalProp(a, prop, b[prop]);
|
|
142
|
+
}
|
|
143
|
+
return a;
|
|
144
|
+
};
|
|
145
|
+
var __objRest = (source, exclude) => {
|
|
146
|
+
var target = {};
|
|
147
|
+
for (var prop in source)
|
|
148
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
149
|
+
target[prop] = source[prop];
|
|
150
|
+
if (source != null && __getOwnPropSymbols)
|
|
151
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
152
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
153
|
+
target[prop] = source[prop];
|
|
154
|
+
}
|
|
155
|
+
return target;
|
|
156
|
+
};
|
|
157
|
+
const TIPTAP_COMPONENT_NAME = "hostless-tiptap";
|
|
158
|
+
function Tiptap(props) {
|
|
159
|
+
const isClient = useIsClient();
|
|
160
|
+
const [active, setActive] = React.useState(false);
|
|
161
|
+
const [refreshKey, setRefreshKey] = React.useState(0);
|
|
162
|
+
const activeRef = React.useRef();
|
|
163
|
+
activeRef.current = active;
|
|
164
|
+
const {
|
|
165
|
+
extensions,
|
|
166
|
+
contentHtml,
|
|
167
|
+
defaultContentHtml,
|
|
168
|
+
className,
|
|
169
|
+
onChange,
|
|
170
|
+
toolbar
|
|
171
|
+
} = props;
|
|
172
|
+
const tiptapContext = __objRest(useTiptapContext(), []);
|
|
173
|
+
const usedExtensions = allExtensions.reduce(
|
|
174
|
+
(acc, ext) => {
|
|
175
|
+
if (tiptapContext[ext] !== void 0) {
|
|
176
|
+
acc[ext] = tiptapContext[ext];
|
|
177
|
+
}
|
|
178
|
+
return acc;
|
|
179
|
+
},
|
|
180
|
+
{}
|
|
181
|
+
);
|
|
182
|
+
const extensionsProp = [
|
|
183
|
+
Document__default.default,
|
|
184
|
+
Paragraph__default.default,
|
|
185
|
+
Text__default.default,
|
|
186
|
+
...Object.values(usedExtensions)
|
|
187
|
+
];
|
|
188
|
+
React.useEffect(() => {
|
|
189
|
+
if (activeRef.current)
|
|
190
|
+
return;
|
|
191
|
+
setRefreshKey(Math.random() * 1e6);
|
|
192
|
+
}, [contentHtml]);
|
|
193
|
+
if (!isClient) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
const css = `
|
|
197
|
+
.tiptap {
|
|
198
|
+
padding: 0;
|
|
199
|
+
outline: none;
|
|
200
|
+
}
|
|
201
|
+
`;
|
|
202
|
+
const toolbarProp = toolbar ? /* @__PURE__ */ React__default.default.createElement("div", { style: { display: "flex", alignItems: "center" } }, toolbar) : null;
|
|
203
|
+
return /* @__PURE__ */ React__default.default.createElement("div", { className, style: { position: "relative" } }, /* @__PURE__ */ React__default.default.createElement(
|
|
204
|
+
react.EditorProvider,
|
|
205
|
+
{
|
|
206
|
+
key: `${extensionsProp.length}${refreshKey}`,
|
|
207
|
+
extensions: extensionsProp,
|
|
208
|
+
content: contentHtml || defaultContentHtml,
|
|
209
|
+
onCreate: ({ editor }) => {
|
|
210
|
+
onChange(editor.getJSON());
|
|
211
|
+
},
|
|
212
|
+
onUpdate: ({ editor }) => {
|
|
213
|
+
onChange(editor.getJSON());
|
|
214
|
+
},
|
|
215
|
+
onFocus: () => setActive(true),
|
|
216
|
+
onBlur: () => setActive(false),
|
|
217
|
+
slotBefore: toolbarProp,
|
|
218
|
+
children: void 0,
|
|
219
|
+
editorProps: {
|
|
220
|
+
attributes: {
|
|
221
|
+
className
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
), extensions, /* @__PURE__ */ React__default.default.createElement("style", { dangerouslySetInnerHTML: { __html: css } }));
|
|
226
|
+
}
|
|
227
|
+
function TiptapWrapper(props) {
|
|
228
|
+
return /* @__PURE__ */ React__default.default.createElement(TiptapContextProvider, null, /* @__PURE__ */ React__default.default.createElement(Tiptap, __spreadValues({}, props)));
|
|
229
|
+
}
|
|
230
|
+
function AddExtension({
|
|
231
|
+
studioOps,
|
|
232
|
+
componentProps
|
|
233
|
+
}) {
|
|
234
|
+
const usedExtensions = React.useMemo(() => {
|
|
235
|
+
const list = [];
|
|
236
|
+
traverseReactEltTree(componentProps == null ? void 0 : componentProps.extensions, (elt) => {
|
|
237
|
+
var _a, _b, _c;
|
|
238
|
+
const ext = (_c = (_b = (_a = elt == null ? void 0 : elt.type) == null ? void 0 : _a.displayName) == null ? void 0 : _b.toLowerCase) == null ? void 0 : _c.call(_b);
|
|
239
|
+
if (ext) {
|
|
240
|
+
list.push(ext);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
return list;
|
|
244
|
+
}, [componentProps == null ? void 0 : componentProps.extensions]);
|
|
245
|
+
const usedExtensionTools = React.useMemo(() => {
|
|
246
|
+
const list = [];
|
|
247
|
+
traverseReactEltTree(componentProps == null ? void 0 : componentProps.toolbar, (elt) => {
|
|
248
|
+
var _a, _b, _c;
|
|
249
|
+
const ext = (_c = (_b = (_a = elt == null ? void 0 : elt.type) == null ? void 0 : _a.displayName) == null ? void 0 : _b.toLowerCase) == null ? void 0 : _c.call(_b);
|
|
250
|
+
if (ext && ext.includes("toolbar")) {
|
|
251
|
+
list.push(ext.replace("toolbar", ""));
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
return list;
|
|
255
|
+
}, [componentProps == null ? void 0 : componentProps.toolbar]);
|
|
256
|
+
const handleChange = (extName, add) => {
|
|
257
|
+
if (add) {
|
|
258
|
+
studioOps.appendToSlot(
|
|
259
|
+
{
|
|
260
|
+
type: "component",
|
|
261
|
+
name: `${TIPTAP_COMPONENT_NAME}-extension-${extName}`,
|
|
262
|
+
props: {}
|
|
263
|
+
},
|
|
264
|
+
"extensions"
|
|
265
|
+
);
|
|
266
|
+
studioOps.appendToSlot(
|
|
267
|
+
{
|
|
268
|
+
type: "component",
|
|
269
|
+
name: `${TIPTAP_COMPONENT_NAME}-toolbar-${extName}`,
|
|
270
|
+
props: {}
|
|
271
|
+
},
|
|
272
|
+
"toolbar"
|
|
273
|
+
);
|
|
274
|
+
} else {
|
|
275
|
+
const extIndices = usedExtensions.flatMap(
|
|
276
|
+
(ext, i) => ext === extName ? i : []
|
|
277
|
+
);
|
|
278
|
+
extIndices.reverse().forEach(
|
|
279
|
+
(i) => i !== -1 && studioOps.removeFromSlotAt(i, "extensions")
|
|
280
|
+
);
|
|
281
|
+
const toolIndices = usedExtensionTools.flatMap(
|
|
282
|
+
(ext, i) => ext === extName ? i : []
|
|
283
|
+
);
|
|
284
|
+
toolIndices.reverse().forEach((i) => i !== -1 && studioOps.removeFromSlotAt(i, "toolbar"));
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
return /* @__PURE__ */ React__default.default.createElement(
|
|
288
|
+
"div",
|
|
289
|
+
{
|
|
290
|
+
style: {
|
|
291
|
+
marginBottom: 10,
|
|
292
|
+
paddingBottom: 10,
|
|
293
|
+
borderBottom: "1px dashed #ccc"
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
/* @__PURE__ */ React__default.default.createElement("p", null, "You can add capabilities to Tiptap Rich Text Editor using the tools below."),
|
|
297
|
+
/* @__PURE__ */ React__default.default.createElement("p", null, `To further customize the extensions, find them under the Editor's "extensions" and "toolbar" slots`),
|
|
298
|
+
allExtensions.map((ext) => /* @__PURE__ */ React__default.default.createElement(
|
|
299
|
+
"label",
|
|
300
|
+
{
|
|
301
|
+
"data-test-id": `custom-action-${ext}`,
|
|
302
|
+
style: {
|
|
303
|
+
display: "flex",
|
|
304
|
+
justifyContent: "space-between",
|
|
305
|
+
marginBottom: 5,
|
|
306
|
+
color: "#1b1b18"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
/* @__PURE__ */ React__default.default.createElement("span", null, ext),
|
|
310
|
+
/* @__PURE__ */ React__default.default.createElement(
|
|
311
|
+
antd.Switch,
|
|
312
|
+
{
|
|
313
|
+
size: "small",
|
|
314
|
+
checked: usedExtensions.includes(ext) || usedExtensionTools.includes(ext),
|
|
315
|
+
onChange: (checked) => handleChange(ext, checked)
|
|
316
|
+
}
|
|
317
|
+
)
|
|
318
|
+
))
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
function registerTiptap(loader) {
|
|
322
|
+
registerComponentHelper(loader, TiptapWrapper, {
|
|
323
|
+
name: TIPTAP_COMPONENT_NAME,
|
|
324
|
+
displayName: "Tiptap Rich Text Editor",
|
|
325
|
+
defaultStyles: {
|
|
326
|
+
borderWidth: "1px",
|
|
327
|
+
borderStyle: "solid",
|
|
328
|
+
borderColor: "rgb(204,204,204)",
|
|
329
|
+
borderRadius: "4px",
|
|
330
|
+
padding: "10px",
|
|
331
|
+
width: "300px"
|
|
332
|
+
},
|
|
333
|
+
actions: [
|
|
334
|
+
{
|
|
335
|
+
type: "custom-action",
|
|
336
|
+
control: AddExtension
|
|
337
|
+
}
|
|
338
|
+
],
|
|
339
|
+
props: {
|
|
340
|
+
contentHtml: {
|
|
341
|
+
type: "string",
|
|
342
|
+
displayName: "HTML Content",
|
|
343
|
+
editOnly: true,
|
|
344
|
+
uncontrolledProp: "defaultContentHtml",
|
|
345
|
+
description: "Contents of the editor"
|
|
346
|
+
},
|
|
347
|
+
contentJson: {
|
|
348
|
+
type: "object",
|
|
349
|
+
displayName: "JSON Content",
|
|
350
|
+
hidden: () => true
|
|
351
|
+
},
|
|
352
|
+
extensions: {
|
|
353
|
+
type: "slot",
|
|
354
|
+
hidePlaceholder: true,
|
|
355
|
+
allowedComponents: allExtensions.map(
|
|
356
|
+
(ext) => `${TIPTAP_COMPONENT_NAME}-extension-${ext}`
|
|
357
|
+
)
|
|
358
|
+
},
|
|
359
|
+
toolbar: {
|
|
360
|
+
type: "slot",
|
|
361
|
+
hidePlaceholder: true,
|
|
362
|
+
allowedComponents: allExtensions.map(
|
|
363
|
+
(ext) => `${TIPTAP_COMPONENT_NAME}-toolbar-${ext}`
|
|
364
|
+
)
|
|
365
|
+
},
|
|
366
|
+
onChange: {
|
|
367
|
+
type: "eventHandler",
|
|
368
|
+
argTypes: [{ name: "content", type: "object" }]
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
states: {
|
|
372
|
+
content: {
|
|
373
|
+
type: "writable",
|
|
374
|
+
variableType: "object",
|
|
375
|
+
valueProp: "contentJson",
|
|
376
|
+
onChangeProp: "onChange"
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
importName: "TiptapWrapper",
|
|
380
|
+
importPath: "@plasmicpkgs/tiptap/skinny/registerTiptap"
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
exports.AddExtension = AddExtension;
|
|
385
|
+
exports.TIPTAP_COMPONENT_NAME = TIPTAP_COMPONENT_NAME;
|
|
386
|
+
exports.Tiptap = Tiptap;
|
|
387
|
+
exports.TiptapWrapper = TiptapWrapper;
|
|
388
|
+
exports.registerComponentHelper = registerComponentHelper;
|
|
389
|
+
exports.registerTiptap = registerTiptap;
|
|
390
|
+
exports.useTiptapContext = useTiptapContext;
|
|
391
|
+
//# sourceMappingURL=registerTiptap-fd9bf882.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerTiptap-fd9bf882.cjs.js","sources":["../src/contexts.tsx","../src/useIsClient.ts","../src/utils.ts","../src/registerTiptap.tsx"],"sourcesContent":["import { Mark, Node } from \"@tiptap/core\";\nimport type { BoldOptions } from \"@tiptap/extension-bold\";\nimport type { CodeOptions } from \"@tiptap/extension-code\";\nimport type { ItalicOptions } from \"@tiptap/extension-italic\";\nimport type { LinkOptions } from \"@tiptap/extension-link\";\nimport type { MentionOptions } from \"@tiptap/extension-mention\";\nimport type { StrikeOptions } from \"@tiptap/extension-strike\";\nimport type { UnderlineOptions } from \"@tiptap/extension-underline\";\nimport React, { useState } from \"react\";\n\nexport const RESET_TIMEOUT_MS = 500;\nexport interface TiptapContextProps {\n bold?: Mark<BoldOptions>;\n setBold: (boldOptions?: Mark<BoldOptions>) => void;\n code?: Mark<CodeOptions>;\n setCode: (codeOptions?: Mark<CodeOptions>) => void;\n italic?: Mark<ItalicOptions>;\n setItalic: (italicOptions?: Mark<ItalicOptions>) => void;\n link?: Mark<LinkOptions>;\n setLink: (linkOptions?: Mark<LinkOptions>) => void;\n mention?: Node<MentionOptions>;\n setMention: (mentionOptions?: Node<MentionOptions>) => void;\n strike?: Mark<StrikeOptions>;\n setStrike: (strikeOptions?: Mark<StrikeOptions>) => void;\n underline?: Mark<UnderlineOptions>;\n setUnderline: (underlineOptions?: Mark<UnderlineOptions>) => void;\n}\n\nexport const allExtensions: Extract<keyof TiptapContextProps, string>[] = [\n \"bold\",\n \"italic\",\n \"underline\",\n \"strike\",\n \"code\",\n \"link\",\n \"mention\",\n];\n\nexport const TiptapContext = React.createContext<\n TiptapContextProps | undefined\n>(undefined);\n\nexport const useTiptapContext = () => {\n const context = React.useContext(TiptapContext);\n if (!context) {\n throw new Error(\n \"useTiptapContext must be used within a TiptapContextProvider\"\n );\n }\n return context;\n};\n\nexport const TiptapContextProvider = ({ children }: any) => {\n const [bold, setBold] = useState<Mark<BoldOptions> | undefined>(undefined);\n const [code, setCode] = useState<Mark<CodeOptions> | undefined>(undefined);\n const [italic, setItalic] = useState<Mark<ItalicOptions> | undefined>(\n undefined\n );\n const [link, setLink] = useState<Mark<LinkOptions> | undefined>(undefined);\n const [mention, setMention] = useState<Node<MentionOptions> | undefined>(\n undefined\n );\n const [strike, setStrike] = useState<Mark<StrikeOptions> | undefined>(\n undefined\n );\n const [underline, setUnderline] = useState<\n Mark<UnderlineOptions> | undefined\n >(undefined);\n\n return (\n <TiptapContext.Provider\n value={{\n bold,\n setBold,\n code,\n setCode,\n italic,\n setItalic,\n link,\n setLink,\n mention,\n /**\n * In situations where I want to remove an extension and add it again with new options (e.g. within a useEffect - see registerMention)\n * the options are not updated.\n * So after removing the extension, I want to wait a few seconds before I add it again,\n * so the Tiptap editor acknowledges the removal before it adds the extension back with new updated options.\n * @param mentionOptions\n * @returns\n */\n setMention: (mentionOptions?: Node<MentionOptions>) => {\n if (!mentionOptions) {\n setMention(mentionOptions);\n return;\n }\n setTimeout(() => {\n setMention(mentionOptions);\n }, RESET_TIMEOUT_MS);\n },\n strike,\n setStrike,\n underline,\n setUnderline,\n }}\n >\n {children}\n </TiptapContext.Provider>\n );\n};\n","import React from \"react\";\n\nexport function useIsClient() {\n const [loaded, setLoaded] = React.useState(false);\n useIsomorphicLayoutEffect(() => {\n setLoaded(true);\n });\n return loaded;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst isBrowser = typeof window !== \"undefined\";\nexport const useIsomorphicLayoutEffect = isBrowser\n ? React.useLayoutEffect\n : React.useEffect;\n","import {\n ComponentMeta,\n default as registerComponent,\n} from \"@plasmicapp/host/registerComponent\";\nimport {\n default as registerGlobalContext,\n GlobalContextMeta,\n} from \"@plasmicapp/host/registerGlobalContext\";\nimport { default as registerToken } from \"@plasmicapp/host/registerToken\";\nimport React from \"react\";\n\nexport type Registerable = {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n registerToken: typeof registerToken;\n};\n\nexport function makeRegisterComponent<T extends React.ComponentType<any>>(\n component: T,\n meta: ComponentMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n registerComponentHelper(loader, component, meta);\n };\n}\n\nexport function makeRegisterGlobalContext<T extends React.ComponentType<any>>(\n component: T,\n meta: GlobalContextMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n if (loader) {\n loader.registerGlobalContext(component, meta);\n } else {\n registerGlobalContext(component, meta);\n }\n };\n}\n\nexport function registerComponentHelper<T extends React.ComponentType<any>>(\n loader: Registerable | undefined,\n component: T,\n meta: ComponentMeta<React.ComponentProps<T>>\n) {\n if (loader) {\n loader.registerComponent(component, meta);\n } else {\n registerComponent(component, meta);\n }\n}\n\ntype ReactElt = {\n children: ReactElt | ReactElt[];\n props: {\n children: ReactElt | ReactElt[];\n [prop: string]: any;\n } | null;\n type: React.ComponentType<any> | null;\n key: string | null;\n} | null;\n\nexport function traverseReactEltTree(\n children: React.ReactNode,\n callback: (elt: ReactElt) => void\n) {\n const rec = (elts: ReactElt | ReactElt[] | null) => {\n (Array.isArray(elts) ? elts : [elts]).forEach((elt) => {\n if (elt) {\n callback(elt);\n if (elt.children) {\n rec(elt.children);\n }\n if (elt.props?.children && elt.props.children !== elt.children) {\n rec(elt.props.children);\n }\n }\n });\n };\n rec(children as any);\n}\n\nexport function asArray<T>(x: T[] | T | undefined | null) {\n if (Array.isArray(x)) {\n return x;\n } else if (x == null) {\n return [];\n } else {\n return [x];\n }\n}\n","import { ActionProps } from \"@plasmicapp/host/registerComponent\";\nimport Document from \"@tiptap/extension-document\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Text from \"@tiptap/extension-text\";\nimport type { Extensions, JSONContent } from \"@tiptap/react\";\nimport { EditorProvider } from \"@tiptap/react\";\nimport { Switch } from \"antd\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n allExtensions,\n TiptapContextProvider,\n useTiptapContext,\n} from \"./contexts\";\nimport { useIsClient } from \"./useIsClient\";\nimport {\n Registerable,\n registerComponentHelper,\n traverseReactEltTree,\n} from \"./utils\";\n\nexport const TIPTAP_COMPONENT_NAME = \"hostless-tiptap\";\n\nexport type TiptapProps = {\n contentHtml?: string;\n defaultContentHtml?: string;\n contentJson?: JSONContent;\n extensions?: React.ReactElement;\n toolbar?: React.ReactElement;\n className: string;\n onChange: (content: JSONContent) => void;\n};\n\nexport function Tiptap(props: TiptapProps) {\n const isClient = useIsClient();\n const [active, setActive] = useState<boolean>(false);\n const [refreshKey, setRefreshKey] = useState(0);\n const activeRef = useRef<boolean>();\n activeRef.current = active;\n\n const {\n extensions,\n contentHtml,\n defaultContentHtml,\n className,\n onChange,\n toolbar,\n } = props;\n const { ...tiptapContext } = useTiptapContext();\n const usedExtensions: Record<string, any> = allExtensions.reduce(\n (acc: any, ext) => {\n if (tiptapContext[ext] !== undefined) {\n acc[ext] = tiptapContext[ext];\n }\n return acc;\n },\n {}\n );\n\n const extensionsProp: Extensions = [\n Document,\n Paragraph,\n Text,\n ...Object.values(usedExtensions),\n ];\n\n // If you try to update the content via the content prop (as opposed to directly typing into the tiptap editor), the new content won't show. So we got to refresh the editor to make the default content appear.\n useEffect(() => {\n if (activeRef.current) return;\n setRefreshKey(Math.random() * 1000000);\n }, [contentHtml]);\n\n if (!isClient) {\n return null;\n }\n\n const css = `\n .tiptap {\n padding: 0;\n outline: none;\n }\n `;\n\n const toolbarProp = toolbar ? (\n <div style={{ display: \"flex\", alignItems: \"center\" }}>{toolbar}</div>\n ) : null;\n\n return (\n <div className={className} style={{ position: \"relative\" }}>\n <EditorProvider\n key={`${extensionsProp.length}${refreshKey}`}\n // extensions={extensionsProp}\n extensions={extensionsProp}\n content={contentHtml || defaultContentHtml}\n onCreate={({ editor }) => {\n onChange(editor.getJSON());\n }}\n onUpdate={({ editor }) => {\n onChange(editor.getJSON());\n }}\n onFocus={() => setActive(true)}\n onBlur={() => setActive(false)}\n slotBefore={toolbarProp}\n // slotAfter={<MyEditorFooter />}\n\n // TODO: HIDE children prop\n children={undefined}\n editorProps={{\n attributes: {\n className,\n },\n }}\n />\n {extensions}\n <style dangerouslySetInnerHTML={{ __html: css }} />\n </div>\n );\n}\n\nexport function TiptapWrapper(props: TiptapProps) {\n return (\n <TiptapContextProvider>\n <Tiptap {...props} />\n </TiptapContextProvider>\n );\n}\n\nexport function AddExtension({\n studioOps,\n componentProps,\n}: ActionProps<TiptapProps>) {\n const usedExtensions: string[] = useMemo(() => {\n const list: string[] = [];\n traverseReactEltTree(componentProps?.extensions, (elt) => {\n const ext = elt?.type?.displayName?.toLowerCase?.();\n if (ext) {\n list.push(ext);\n }\n });\n return list;\n }, [componentProps?.extensions]);\n\n const usedExtensionTools: string[] = useMemo(() => {\n const list: string[] = [];\n traverseReactEltTree(componentProps?.toolbar, (elt) => {\n const ext = elt?.type?.displayName?.toLowerCase?.();\n if (ext && ext.includes(\"toolbar\")) {\n list.push(ext.replace(\"toolbar\", \"\"));\n }\n });\n return list;\n }, [componentProps?.toolbar]);\n\n const handleChange = (extName: string, add: boolean) => {\n if (add) {\n studioOps.appendToSlot(\n {\n type: \"component\",\n name: `${TIPTAP_COMPONENT_NAME}-extension-${extName}`,\n props: {},\n },\n \"extensions\"\n );\n studioOps.appendToSlot(\n {\n type: \"component\",\n name: `${TIPTAP_COMPONENT_NAME}-toolbar-${extName}`,\n props: {},\n },\n \"toolbar\"\n );\n } else {\n const extIndices = usedExtensions.flatMap((ext, i) =>\n ext === extName ? i : []\n );\n extIndices\n .reverse()\n .forEach(\n (i) => i !== -1 && studioOps.removeFromSlotAt(i, \"extensions\")\n );\n\n const toolIndices = usedExtensionTools.flatMap((ext, i) =>\n ext === extName ? i : []\n );\n toolIndices\n .reverse()\n .forEach((i) => i !== -1 && studioOps.removeFromSlotAt(i, \"toolbar\"));\n }\n };\n\n return (\n <div\n style={{\n marginBottom: 10,\n paddingBottom: 10,\n borderBottom: \"1px dashed #ccc\",\n }}\n >\n <p>\n You can add capabilities to Tiptap Rich Text Editor using the tools\n below.\n </p>\n <p>\n To further customize the extensions, find them under the Editor's\n \"extensions\" and \"toolbar\" slots\n </p>\n {allExtensions.map((ext) => (\n <label\n data-test-id={`custom-action-${ext}`}\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: 5,\n color: \"#1b1b18\",\n }}\n >\n <span>{ext}</span>\n <Switch\n size=\"small\"\n checked={\n usedExtensions.includes(ext) || usedExtensionTools.includes(ext)\n }\n onChange={(checked) => handleChange(ext, checked)}\n />\n </label>\n ))}\n </div>\n );\n}\n\nexport function registerTiptap(loader?: Registerable) {\n registerComponentHelper(loader, TiptapWrapper, {\n name: TIPTAP_COMPONENT_NAME,\n displayName: \"Tiptap Rich Text Editor\",\n defaultStyles: {\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"rgb(204,204,204)\",\n borderRadius: \"4px\",\n padding: \"10px\",\n width: \"300px\",\n },\n actions: [\n {\n type: \"custom-action\",\n control: AddExtension,\n },\n ],\n props: {\n contentHtml: {\n type: \"string\",\n displayName: \"HTML Content\",\n editOnly: true,\n uncontrolledProp: \"defaultContentHtml\",\n description: \"Contents of the editor\",\n },\n contentJson: {\n type: \"object\",\n displayName: \"JSON Content\",\n hidden: () => true,\n },\n extensions: {\n type: \"slot\",\n hidePlaceholder: true,\n allowedComponents: allExtensions.map(\n (ext) => `${TIPTAP_COMPONENT_NAME}-extension-${ext}`\n ),\n },\n toolbar: {\n type: \"slot\",\n hidePlaceholder: true,\n allowedComponents: allExtensions.map(\n (ext) => `${TIPTAP_COMPONENT_NAME}-toolbar-${ext}`\n ),\n },\n onChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"content\", type: \"object\" }],\n },\n },\n states: {\n content: {\n type: \"writable\",\n variableType: \"object\",\n valueProp: \"contentJson\",\n onChangeProp: \"onChange\",\n },\n },\n importName: \"TiptapWrapper\",\n importPath: \"@plasmicpkgs/tiptap/skinny/registerTiptap\",\n });\n}\n"],"names":["React","useState","registerComponent","useRef","Document","Paragraph","Text","useEffect","EditorProvider","useMemo","Switch"],"mappings":";;;;;;;;;;;;;;;;;;;AAUO,MAAM,gBAAmB,GAAA,GAAA,CAAA;AAkBzB,MAAM,aAA6D,GAAA;AAAA,EACxE,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AACF,CAAA,CAAA;AAEa,MAAA,aAAA,GAAgBA,sBAAM,CAAA,aAAA,CAEjC,KAAS,CAAA,CAAA,CAAA;AAEJ,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,OAAA,GAAUA,sBAAM,CAAA,UAAA,CAAW,aAAa,CAAA,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,8DAAA;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAO,OAAA,OAAA,CAAA;AACT,EAAA;AAEO,MAAM,qBAAwB,GAAA,CAAC,EAAE,QAAA,EAAoB,KAAA;AAC1D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAwC,KAAS,CAAA,CAAA,CAAA;AACzE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAwC,KAAS,CAAA,CAAA,CAAA;AACzE,EAAM,MAAA,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAAA,cAAA;AAAA,IAC1B,KAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAwC,KAAS,CAAA,CAAA,CAAA;AACzE,EAAM,MAAA,CAAC,OAAS,EAAA,UAAU,CAAI,GAAAA,cAAA;AAAA,IAC5B,KAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAM,MAAA,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAAA,cAAA;AAAA,IAC1B,KAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAEhC,KAAS,CAAA,CAAA,CAAA;AAEX,EACE,uBAAAD,sBAAA,CAAA,aAAA;AAAA,IAAC,aAAc,CAAA,QAAA;AAAA,IAAd;AAAA,MACC,KAAO,EAAA;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,UAAA,EAAY,CAAC,cAA0C,KAAA;AACrD,UAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,YAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AACzB,YAAA,OAAA;AAAA,WACF;AACA,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AAAA,aACxB,gBAAgB,CAAA,CAAA;AAAA,SACrB;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAA;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,QAAA;AAAA,GACH,CAAA;AAEJ,CAAA;;ACzGO,SAAS,WAAc,GAAA;AAC5B,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAAA,sBAAA,CAAM,SAAS,KAAK,CAAA,CAAA;AAChD,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,SAAA,CAAU,IAAI,CAAA,CAAA;AAAA,GACf,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAIA,MAAM,SAAA,GAAY,OAAO,MAAW,KAAA,WAAA,CAAA;AAC7B,MAAM,yBAA4B,GAAA,SAAA,GACrCA,sBAAM,CAAA,eAAA,GACNA,sBAAM,CAAA,SAAA;;ACwBM,SAAA,uBAAA,CACd,MACA,EAAA,SAAA,EACA,IACA,EAAA;AACA,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAAE,kCAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC;AACF,CAAA;AAYgB,SAAA,oBAAA,CACd,UACA,QACA,EAAA;AACA,EAAM,MAAA,GAAA,GAAM,CAAC,IAAuC,KAAA;AAClD,IAAC,CAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAI,GAAA,IAAA,GAAO,CAAC,IAAI,CAAA,EAAG,OAAQ,CAAA,CAAC,GAAQ,KAAA;AAlE3D,MAAA,IAAA,EAAA,CAAA;AAmEM,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AACZ,QAAA,IAAI,IAAI,QAAU,EAAA;AAChB,UAAA,GAAA,CAAI,IAAI,QAAQ,CAAA,CAAA;AAAA,SAClB;AACA,QAAI,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,UAAJ,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,KAAY,IAAI,KAAM,CAAA,QAAA,KAAa,IAAI,QAAU,EAAA;AAC9D,UAAI,GAAA,CAAA,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AACA,EAAA,GAAA,CAAI,QAAe,CAAA,CAAA;AACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DO,MAAM,qBAAwB,GAAA,kBAAA;AAY9B,SAAS,OAAO,KAAoB,EAAA;AACzC,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAkB,KAAK,CAAA,CAAA;AACnD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,CAAC,CAAA,CAAA;AAC9C,EAAA,MAAM,YAAYE,YAAgB,EAAA,CAAA;AAClC,EAAA,SAAA,CAAU,OAAU,GAAA,MAAA,CAAA;AAEpB,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,GACE,GAAA,KAAA,CAAA;AACJ,EAAW,MAAA,aAAA,GAAA,SAAA,CAAkB,kBAAlB,EAAA,EAAA,CAAA,CAAA;AACX,EAAA,MAAM,iBAAsC,aAAc,CAAA,MAAA;AAAA,IACxD,CAAC,KAAU,GAAQ,KAAA;AACjB,MAAI,IAAA,aAAA,CAAc,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AACpC,QAAI,GAAA,CAAA,GAAG,CAAI,GAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAAA,OAC9B;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,cAA6B,GAAA;AAAA,IACjCC,yBAAA;AAAA,IACAC,0BAAA;AAAA,IACAC,qBAAA;AAAA,IACA,GAAG,MAAO,CAAA,MAAA,CAAO,cAAc,CAAA;AAAA,GACjC,CAAA;AAGA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAU,CAAA,OAAA;AAAS,MAAA,OAAA;AACvB,IAAc,aAAA,CAAA,IAAA,CAAK,MAAO,EAAA,GAAI,GAAO,CAAA,CAAA;AAAA,GACvC,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEhB,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,GAAM,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,CAAA;AAOZ,EAAA,MAAM,WAAc,GAAA,OAAA,mBACjBP,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,OAAS,EAAA,MAAA,EAAQ,UAAY,EAAA,QAAA,EAAa,EAAA,EAAA,OAAQ,CAC9D,GAAA,IAAA,CAAA;AAEJ,EAAA,4DACG,KAAI,EAAA,EAAA,SAAA,EAAsB,OAAO,EAAE,QAAA,EAAU,YAC5C,EAAA,kBAAAA,sBAAA,CAAA,aAAA;AAAA,IAACQ,oBAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAG,EAAA,cAAA,CAAe,MAAS,CAAA,EAAA,UAAA,CAAA,CAAA;AAAA,MAEhC,UAAY,EAAA,cAAA;AAAA,MACZ,SAAS,WAAe,IAAA,kBAAA;AAAA,MACxB,QAAU,EAAA,CAAC,EAAE,MAAA,EAAa,KAAA;AACxB,QAAS,QAAA,CAAA,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,OAC3B;AAAA,MACA,QAAU,EAAA,CAAC,EAAE,MAAA,EAAa,KAAA;AACxB,QAAS,QAAA,CAAA,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,OAC3B;AAAA,MACA,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,MAC7B,MAAA,EAAQ,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MAC7B,UAAY,EAAA,WAAA;AAAA,MAIZ,QAAU,EAAA,KAAA,CAAA;AAAA,MACV,WAAa,EAAA;AAAA,QACX,UAAY,EAAA;AAAA,UACV,SAAA;AAAA,SACF;AAAA,OACF;AAAA,KAAA;AAAA,GACF,EACC,4BACAR,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAM,yBAAyB,EAAE,MAAA,EAAQ,GAAI,EAAA,EAAG,CACnD,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,cAAc,KAAoB,EAAA;AAChD,EAAA,uBACGA,sBAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,IAAA,kBACEA,sBAAA,CAAA,aAAA,CAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAW,MAAO,CACrB,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,YAAa,CAAA;AAAA,EAC3B,SAAA;AAAA,EACA,cAAA;AACF,CAA6B,EAAA;AAC3B,EAAM,MAAA,cAAA,GAA2BS,cAAQ,MAAM;AAC7C,IAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,IAAqB,oBAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,UAAY,EAAA,CAAC,GAAQ,KAAA;AApI9D,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAqIM,MAAA,MAAM,OAAM,EAAK,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,IAAA,KAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,KAAX,mBAAwB,WAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AACZ,MAAA,IAAI,GAAK,EAAA;AACP,QAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA;AAAA,OACf;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,IAAA,CAAA;AAAA,GACN,EAAA,CAAC,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,UAAU,CAAC,CAAA,CAAA;AAE/B,EAAM,MAAA,kBAAA,GAA+BA,cAAQ,MAAM;AACjD,IAAA,MAAM,OAAiB,EAAC,CAAA;AACxB,IAAqB,oBAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,OAAS,EAAA,CAAC,GAAQ,KAAA;AA/I3D,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAgJM,MAAA,MAAM,OAAM,EAAK,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,IAAA,KAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,KAAX,mBAAwB,WAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AACZ,MAAA,IAAI,GAAO,IAAA,GAAA,CAAI,QAAS,CAAA,SAAS,CAAG,EAAA;AAClC,QAAA,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,OAAQ,CAAA,SAAA,EAAW,EAAE,CAAC,CAAA,CAAA;AAAA,OACtC;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,IAAA,CAAA;AAAA,GACN,EAAA,CAAC,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,OAAO,CAAC,CAAA,CAAA;AAE5B,EAAM,MAAA,YAAA,GAAe,CAAC,OAAA,EAAiB,GAAiB,KAAA;AACtD,IAAA,IAAI,GAAK,EAAA;AACP,MAAU,SAAA,CAAA,YAAA;AAAA,QACR;AAAA,UACE,IAAM,EAAA,WAAA;AAAA,UACN,IAAA,EAAM,GAAG,qBAAmC,CAAA,WAAA,EAAA,OAAA,CAAA,CAAA;AAAA,UAC5C,OAAO,EAAC;AAAA,SACV;AAAA,QACA,YAAA;AAAA,OACF,CAAA;AACA,MAAU,SAAA,CAAA,YAAA;AAAA,QACR;AAAA,UACE,IAAM,EAAA,WAAA;AAAA,UACN,IAAA,EAAM,GAAG,qBAAiC,CAAA,SAAA,EAAA,OAAA,CAAA,CAAA;AAAA,UAC1C,OAAO,EAAC;AAAA,SACV;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AAAA,KACK,MAAA;AACL,MAAA,MAAM,aAAa,cAAe,CAAA,OAAA;AAAA,QAAQ,CAAC,GAAK,EAAA,CAAA,KAC9C,GAAQ,KAAA,OAAA,GAAU,IAAI,EAAC;AAAA,OACzB,CAAA;AACA,MAAA,UAAA,CACG,SACA,CAAA,OAAA;AAAA,QACC,CAAC,CAAM,KAAA,CAAA,KAAM,MAAM,SAAU,CAAA,gBAAA,CAAiB,GAAG,YAAY,CAAA;AAAA,OAC/D,CAAA;AAEF,MAAA,MAAM,cAAc,kBAAmB,CAAA,OAAA;AAAA,QAAQ,CAAC,GAAK,EAAA,CAAA,KACnD,GAAQ,KAAA,OAAA,GAAU,IAAI,EAAC;AAAA,OACzB,CAAA;AACA,MACG,WAAA,CAAA,OAAA,EACA,CAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAM,KAAA,CAAA,CAAA,IAAM,SAAU,CAAA,gBAAA,CAAiB,CAAG,EAAA,SAAS,CAAC,CAAA,CAAA;AAAA,KACxE;AAAA,GACF,CAAA;AAEA,EACE,uBAAAT,sBAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,YAAc,EAAA,EAAA;AAAA,QACd,aAAe,EAAA,EAAA;AAAA,QACf,YAAc,EAAA,iBAAA;AAAA,OAChB;AAAA,KAAA;AAAA,oBAEAA,sBAAA,CAAA,aAAA,CAAC,WAAE,4EAGH,CAAA;AAAA,oBACAA,sBAAA,CAAA,aAAA,CAAC,WAAE,CAGH,kGAAA,CAAA,CAAA;AAAA,IACC,aAAA,CAAc,GAAI,CAAA,CAAC,GAClB,qBAAAA,sBAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,gBAAc,CAAiB,cAAA,EAAA,GAAA,CAAA,CAAA;AAAA,QAC/B,KAAO,EAAA;AAAA,UACL,OAAS,EAAA,MAAA;AAAA,UACT,cAAgB,EAAA,eAAA;AAAA,UAChB,YAAc,EAAA,CAAA;AAAA,UACd,KAAO,EAAA,SAAA;AAAA,SACT;AAAA,OAAA;AAAA,sBAEAA,sBAAA,CAAA,aAAA,CAAC,cAAM,GAAI,CAAA;AAAA,sBACXA,sBAAA,CAAA,aAAA;AAAA,QAACU,WAAA;AAAA,QAAA;AAAA,UACC,IAAK,EAAA,OAAA;AAAA,UACL,SACE,cAAe,CAAA,QAAA,CAAS,GAAG,CAAK,IAAA,kBAAA,CAAmB,SAAS,GAAG,CAAA;AAAA,UAEjE,QAAU,EAAA,CAAC,OAAY,KAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,SAAA;AAAA,OAClD;AAAA,KAEH,CAAA;AAAA,GACH,CAAA;AAEJ,CAAA;AAEO,SAAS,eAAe,MAAuB,EAAA;AACpD,EAAA,uBAAA,CAAwB,QAAQ,aAAe,EAAA;AAAA,IAC7C,IAAM,EAAA,qBAAA;AAAA,IACN,WAAa,EAAA,yBAAA;AAAA,IACb,aAAe,EAAA;AAAA,MACb,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA,OAAA;AAAA,MACb,WAAa,EAAA,kBAAA;AAAA,MACb,YAAc,EAAA,KAAA;AAAA,MACd,OAAS,EAAA,MAAA;AAAA,MACT,KAAO,EAAA,OAAA;AAAA,KACT;AAAA,IACA,OAAS,EAAA;AAAA,MACP;AAAA,QACE,IAAM,EAAA,eAAA;AAAA,QACN,OAAS,EAAA,YAAA;AAAA,OACX;AAAA,KACF;AAAA,IACA,KAAO,EAAA;AAAA,MACL,WAAa,EAAA;AAAA,QACX,IAAM,EAAA,QAAA;AAAA,QACN,WAAa,EAAA,cAAA;AAAA,QACb,QAAU,EAAA,IAAA;AAAA,QACV,gBAAkB,EAAA,oBAAA;AAAA,QAClB,WAAa,EAAA,wBAAA;AAAA,OACf;AAAA,MACA,WAAa,EAAA;AAAA,QACX,IAAM,EAAA,QAAA;AAAA,QACN,WAAa,EAAA,cAAA;AAAA,QACb,QAAQ,MAAM,IAAA;AAAA,OAChB;AAAA,MACA,UAAY,EAAA;AAAA,QACV,IAAM,EAAA,MAAA;AAAA,QACN,eAAiB,EAAA,IAAA;AAAA,QACjB,mBAAmB,aAAc,CAAA,GAAA;AAAA,UAC/B,CAAC,GAAQ,KAAA,CAAA,EAAG,qBAAmC,CAAA,WAAA,EAAA,GAAA,CAAA,CAAA;AAAA,SACjD;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,IAAM,EAAA,MAAA;AAAA,QACN,eAAiB,EAAA,IAAA;AAAA,QACjB,mBAAmB,aAAc,CAAA,GAAA;AAAA,UAC/B,CAAC,GAAQ,KAAA,CAAA,EAAG,qBAAiC,CAAA,SAAA,EAAA,GAAA,CAAA,CAAA;AAAA,SAC/C;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,IAAM,EAAA,cAAA;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,SAAW,EAAA,IAAA,EAAM,UAAU,CAAA;AAAA,OAChD;AAAA,KACF;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,IAAM,EAAA,UAAA;AAAA,QACN,YAAc,EAAA,QAAA;AAAA,QACd,SAAW,EAAA,aAAA;AAAA,QACX,YAAc,EAAA,UAAA;AAAA,OAChB;AAAA,KACF;AAAA,IACA,UAAY,EAAA,eAAA;AAAA,IACZ,UAAY,EAAA,2CAAA;AAAA,GACb,CAAA,CAAA;AACH;;;;;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('@tiptap/extension-document');
|
|
4
|
+
require('@tiptap/extension-paragraph');
|
|
5
|
+
require('@tiptap/extension-text');
|
|
6
|
+
require('@tiptap/react');
|
|
7
|
+
require('antd');
|
|
8
|
+
require('react');
|
|
9
|
+
var registerTiptap = require('./registerTiptap-fd9bf882.cjs.js');
|
|
10
|
+
require('@plasmicapp/host/registerComponent');
|
|
11
|
+
require('@plasmicapp/host/registerGlobalContext');
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
exports.AddExtension = registerTiptap.AddExtension;
|
|
16
|
+
exports.TIPTAP_COMPONENT_NAME = registerTiptap.TIPTAP_COMPONENT_NAME;
|
|
17
|
+
exports.Tiptap = registerTiptap.Tiptap;
|
|
18
|
+
exports.TiptapWrapper = registerTiptap.TiptapWrapper;
|
|
19
|
+
exports.registerTiptap = registerTiptap.registerTiptap;
|
|
20
|
+
//# sourceMappingURL=registerTiptap.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerTiptap.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ActionProps } from "@plasmicapp/host/registerComponent";
|
|
2
|
+
import type { JSONContent } from "@tiptap/react";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { Registerable } from "./utils";
|
|
5
|
+
export declare const TIPTAP_COMPONENT_NAME = "hostless-tiptap";
|
|
6
|
+
export type TiptapProps = {
|
|
7
|
+
contentHtml?: string;
|
|
8
|
+
defaultContentHtml?: string;
|
|
9
|
+
contentJson?: JSONContent;
|
|
10
|
+
extensions?: React.ReactElement;
|
|
11
|
+
toolbar?: React.ReactElement;
|
|
12
|
+
className: string;
|
|
13
|
+
onChange: (content: JSONContent) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function Tiptap(props: TiptapProps): React.JSX.Element | null;
|
|
16
|
+
export declare function TiptapWrapper(props: TiptapProps): React.JSX.Element;
|
|
17
|
+
export declare function AddExtension({ studioOps, componentProps, }: ActionProps<TiptapProps>): React.JSX.Element;
|
|
18
|
+
export declare function registerTiptap(loader?: Registerable): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import '@tiptap/extension-document';
|
|
2
|
+
import '@tiptap/extension-paragraph';
|
|
3
|
+
import '@tiptap/extension-text';
|
|
4
|
+
import '@tiptap/react';
|
|
5
|
+
import 'antd';
|
|
6
|
+
import 'react';
|
|
7
|
+
export { A as AddExtension, T as TIPTAP_COMPONENT_NAME, a as Tiptap, b as TiptapWrapper, c as registerTiptap } from './registerTiptap-6a2d0bb4.esm.js';
|
|
8
|
+
import '@plasmicapp/host/registerComponent';
|
|
9
|
+
import '@plasmicapp/host/registerGlobalContext';
|
|
10
|
+
//# sourceMappingURL=registerTiptap.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerTiptap.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('@tiptap/react');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var registerTiptap = require('./registerTiptap-fd9bf882.cjs.js');
|
|
6
|
+
require('@tiptap/extension-document');
|
|
7
|
+
require('@tiptap/extension-paragraph');
|
|
8
|
+
require('@tiptap/extension-text');
|
|
9
|
+
require('antd');
|
|
10
|
+
require('@plasmicapp/host/registerComponent');
|
|
11
|
+
require('@plasmicapp/host/registerGlobalContext');
|
|
12
|
+
|
|
13
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
16
|
+
|
|
17
|
+
function ToolbarBold(props) {
|
|
18
|
+
const { editor } = react.useCurrentEditor();
|
|
19
|
+
const { bold } = registerTiptap.useTiptapContext();
|
|
20
|
+
const { className, children, toolbarBoldScopeClassName } = props;
|
|
21
|
+
if (!editor || !bold)
|
|
22
|
+
return null;
|
|
23
|
+
return /* @__PURE__ */ React__default.default.createElement(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
"data-active": editor.isActive("bold") ? true : false,
|
|
27
|
+
className: `${className} ${toolbarBoldScopeClassName}`,
|
|
28
|
+
style: { cursor: "pointer" },
|
|
29
|
+
role: "button",
|
|
30
|
+
onClick: () => editor.chain().focus().toggleMark("bold").run()
|
|
31
|
+
},
|
|
32
|
+
children
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
ToolbarBold.displayName = "ToolbarBold";
|
|
36
|
+
function registerToolbarBold(loader) {
|
|
37
|
+
registerTiptap.registerComponentHelper(loader, ToolbarBold, {
|
|
38
|
+
name: `${registerTiptap.TIPTAP_COMPONENT_NAME}-toolbar-bold`,
|
|
39
|
+
displayName: "Tiptap Bold Toolbar Option",
|
|
40
|
+
defaultStyles: {
|
|
41
|
+
width: "hug",
|
|
42
|
+
padding: "5px"
|
|
43
|
+
},
|
|
44
|
+
props: {
|
|
45
|
+
children: {
|
|
46
|
+
type: "slot",
|
|
47
|
+
hidePlaceholder: true,
|
|
48
|
+
defaultValue: [
|
|
49
|
+
{
|
|
50
|
+
type: "img",
|
|
51
|
+
src: "https://static1.plasmic.app/bold.svg"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
toolbarBoldScopeClassName: {
|
|
56
|
+
type: "styleScopeClass",
|
|
57
|
+
scopeName: "toolbarBold"
|
|
58
|
+
},
|
|
59
|
+
selectedClassName: {
|
|
60
|
+
type: "class",
|
|
61
|
+
displayName: "Tool Selected",
|
|
62
|
+
selectors: [
|
|
63
|
+
{
|
|
64
|
+
selector: ":toolbarBold[data-active=true]",
|
|
65
|
+
label: "Base"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
importName: "ToolbarBold",
|
|
71
|
+
importPath: "@plasmicpkgs/tiptap/skinny/registerToolbarBold",
|
|
72
|
+
parentComponentName: registerTiptap.TIPTAP_COMPONENT_NAME
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
exports.ToolbarBold = ToolbarBold;
|
|
77
|
+
exports.registerToolbarBold = registerToolbarBold;
|
|
78
|
+
//# sourceMappingURL=registerToolbarBold.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerToolbarBold.cjs.js","sources":["../src/toolbar/registerToolbarBold.tsx"],"sourcesContent":["import { useCurrentEditor } from \"@tiptap/react\";\nimport React from \"react\";\nimport { useTiptapContext } from \"../contexts\";\nimport { TIPTAP_COMPONENT_NAME } from \"../registerTiptap\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\n\nexport interface ToolbarBoldProps {\n className: string;\n children: React.ReactNode;\n selectedClassName: string;\n toolbarBoldScopeClassName: string;\n}\n\nexport function ToolbarBold(props: ToolbarBoldProps) {\n const { editor } = useCurrentEditor();\n const { bold } = useTiptapContext();\n\n const { className, children, toolbarBoldScopeClassName } = props;\n\n if (!editor || !bold) return null;\n\n return (\n <div\n // data-active attribute is used here to increase the priority/specificity of the selectedClassName prop styles\n data-active={editor.isActive(\"bold\") ? true : false}\n className={`${className} ${toolbarBoldScopeClassName}`}\n style={{ cursor: \"pointer\" }}\n role=\"button\"\n onClick={() => editor.chain().focus().toggleMark(\"bold\").run()}\n >\n {children}\n </div>\n );\n}\nToolbarBold.displayName = \"ToolbarBold\";\n\nexport function registerToolbarBold(loader?: Registerable) {\n registerComponentHelper(loader, ToolbarBold, {\n name: `${TIPTAP_COMPONENT_NAME}-toolbar-bold`,\n displayName: \"Tiptap Bold Toolbar Option\",\n defaultStyles: {\n width: \"hug\",\n padding: \"5px\",\n },\n props: {\n children: {\n type: \"slot\",\n hidePlaceholder: true,\n defaultValue: [\n {\n type: \"img\",\n src: \"https://static1.plasmic.app/bold.svg\",\n },\n ],\n },\n toolbarBoldScopeClassName: {\n type: \"styleScopeClass\",\n scopeName: \"toolbarBold\",\n } as any,\n selectedClassName: {\n type: \"class\",\n displayName: \"Tool Selected\",\n selectors: [\n {\n selector: \":toolbarBold[data-active=true]\",\n label: \"Base\",\n },\n ],\n },\n },\n importName: \"ToolbarBold\",\n importPath: \"@plasmicpkgs/tiptap/skinny/registerToolbarBold\",\n parentComponentName: TIPTAP_COMPONENT_NAME,\n });\n}\n"],"names":["useCurrentEditor","useTiptapContext","React","registerComponentHelper","TIPTAP_COMPONENT_NAME"],"mappings":";;;;;;;;;;;;;;;;AAaO,SAAS,YAAY,KAAyB,EAAA;AACnD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAIA,sBAAiB,EAAA,CAAA;AACpC,EAAM,MAAA,EAAE,IAAK,EAAA,GAAIC,+BAAiB,EAAA,CAAA;AAElC,EAAA,MAAM,EAAE,SAAA,EAAW,QAAU,EAAA,yBAAA,EAA8B,GAAA,KAAA,CAAA;AAE3D,EAAI,IAAA,CAAC,UAAU,CAAC,IAAA;AAAM,IAAO,OAAA,IAAA,CAAA;AAE7B,EACE,uBAAAC,sBAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEC,aAAa,EAAA,MAAA,CAAO,QAAS,CAAA,MAAM,IAAI,IAAO,GAAA,KAAA;AAAA,MAC9C,SAAA,EAAW,GAAG,SAAa,CAAA,CAAA,EAAA,yBAAA,CAAA,CAAA;AAAA,MAC3B,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAU,EAAA;AAAA,MAC3B,IAAK,EAAA,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,MAAA,CAAO,KAAM,EAAA,CAAE,OAAQ,CAAA,UAAA,CAAW,MAAM,CAAA,CAAE,GAAI,EAAA;AAAA,KAAA;AAAA,IAE5D,QAAA;AAAA,GACH,CAAA;AAEJ,CAAA;AACA,WAAA,CAAY,WAAc,GAAA,aAAA,CAAA;AAEnB,SAAS,oBAAoB,MAAuB,EAAA;AACzD,EAAAC,sCAAA,CAAwB,QAAQ,WAAa,EAAA;AAAA,IAC3C,MAAM,CAAG,EAAAC,oCAAA,CAAA,aAAA,CAAA;AAAA,IACT,WAAa,EAAA,4BAAA;AAAA,IACb,aAAe,EAAA;AAAA,MACb,KAAO,EAAA,KAAA;AAAA,MACP,OAAS,EAAA,KAAA;AAAA,KACX;AAAA,IACA,KAAO,EAAA;AAAA,MACL,QAAU,EAAA;AAAA,QACR,IAAM,EAAA,MAAA;AAAA,QACN,eAAiB,EAAA,IAAA;AAAA,QACjB,YAAc,EAAA;AAAA,UACZ;AAAA,YACE,IAAM,EAAA,KAAA;AAAA,YACN,GAAK,EAAA,sCAAA;AAAA,WACP;AAAA,SACF;AAAA,OACF;AAAA,MACA,yBAA2B,EAAA;AAAA,QACzB,IAAM,EAAA,iBAAA;AAAA,QACN,SAAW,EAAA,aAAA;AAAA,OACb;AAAA,MACA,iBAAmB,EAAA;AAAA,QACjB,IAAM,EAAA,OAAA;AAAA,QACN,WAAa,EAAA,eAAA;AAAA,QACb,SAAW,EAAA;AAAA,UACT;AAAA,YACE,QAAU,EAAA,gCAAA;AAAA,YACV,KAAO,EAAA,MAAA;AAAA,WACT;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,UAAY,EAAA,aAAA;AAAA,IACZ,UAAY,EAAA,gDAAA;AAAA,IACZ,mBAAqB,EAAAA,oCAAA;AAAA,GACtB,CAAA,CAAA;AACH;;;;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useCurrentEditor } from '@tiptap/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { u as useTiptapContext, r as registerComponentHelper, T as TIPTAP_COMPONENT_NAME } from './registerTiptap-6a2d0bb4.esm.js';
|
|
4
|
+
import '@tiptap/extension-document';
|
|
5
|
+
import '@tiptap/extension-paragraph';
|
|
6
|
+
import '@tiptap/extension-text';
|
|
7
|
+
import 'antd';
|
|
8
|
+
import '@plasmicapp/host/registerComponent';
|
|
9
|
+
import '@plasmicapp/host/registerGlobalContext';
|
|
10
|
+
|
|
11
|
+
function ToolbarBold(props) {
|
|
12
|
+
const { editor } = useCurrentEditor();
|
|
13
|
+
const { bold } = useTiptapContext();
|
|
14
|
+
const { className, children, toolbarBoldScopeClassName } = props;
|
|
15
|
+
if (!editor || !bold)
|
|
16
|
+
return null;
|
|
17
|
+
return /* @__PURE__ */ React.createElement(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
"data-active": editor.isActive("bold") ? true : false,
|
|
21
|
+
className: `${className} ${toolbarBoldScopeClassName}`,
|
|
22
|
+
style: { cursor: "pointer" },
|
|
23
|
+
role: "button",
|
|
24
|
+
onClick: () => editor.chain().focus().toggleMark("bold").run()
|
|
25
|
+
},
|
|
26
|
+
children
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
ToolbarBold.displayName = "ToolbarBold";
|
|
30
|
+
function registerToolbarBold(loader) {
|
|
31
|
+
registerComponentHelper(loader, ToolbarBold, {
|
|
32
|
+
name: `${TIPTAP_COMPONENT_NAME}-toolbar-bold`,
|
|
33
|
+
displayName: "Tiptap Bold Toolbar Option",
|
|
34
|
+
defaultStyles: {
|
|
35
|
+
width: "hug",
|
|
36
|
+
padding: "5px"
|
|
37
|
+
},
|
|
38
|
+
props: {
|
|
39
|
+
children: {
|
|
40
|
+
type: "slot",
|
|
41
|
+
hidePlaceholder: true,
|
|
42
|
+
defaultValue: [
|
|
43
|
+
{
|
|
44
|
+
type: "img",
|
|
45
|
+
src: "https://static1.plasmic.app/bold.svg"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
toolbarBoldScopeClassName: {
|
|
50
|
+
type: "styleScopeClass",
|
|
51
|
+
scopeName: "toolbarBold"
|
|
52
|
+
},
|
|
53
|
+
selectedClassName: {
|
|
54
|
+
type: "class",
|
|
55
|
+
displayName: "Tool Selected",
|
|
56
|
+
selectors: [
|
|
57
|
+
{
|
|
58
|
+
selector: ":toolbarBold[data-active=true]",
|
|
59
|
+
label: "Base"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
importName: "ToolbarBold",
|
|
65
|
+
importPath: "@plasmicpkgs/tiptap/skinny/registerToolbarBold",
|
|
66
|
+
parentComponentName: TIPTAP_COMPONENT_NAME
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { ToolbarBold, registerToolbarBold };
|
|
71
|
+
//# sourceMappingURL=registerToolbarBold.esm.js.map
|