ritext 1.0.19 → 1.0.25
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 +57 -0
- package/README.md +15 -41
- package/dist/chunk-EN4BPI7N.mjs +1213 -0
- package/dist/chunk-FJQ4FZRS.mjs +98 -0
- package/dist/chunk-M4ORWR74.mjs +31 -0
- package/dist/chunk-SJFT7WNM.mjs +38 -0
- package/dist/chunk-W367UGID.mjs +55 -0
- package/dist/{chunk-FWCSY2DS.mjs → chunk-WNQUEZJF.mjs} +22 -1
- package/dist/{chunk-D47XME55.mjs → chunk-WXCHG3NQ.mjs} +8 -2
- package/dist/chunk-WZKGD3DD.mjs +231 -0
- package/dist/extension/backgroundcolor.d.mts +16 -0
- package/dist/extension/backgroundcolor.d.ts +16 -0
- package/dist/extension/backgroundcolor.js +668 -0
- package/dist/extension/backgroundcolor.mjs +107 -0
- package/dist/extension/base.d.mts +6 -0
- package/dist/extension/base.d.ts +6 -0
- package/dist/extension/base.js +65 -0
- package/dist/extension/base.mjs +22 -0
- package/dist/extension/blockquote.d.mts +10 -0
- package/dist/extension/blockquote.d.ts +10 -0
- package/dist/extension/blockquote.js +239 -0
- package/dist/extension/blockquote.mjs +46 -0
- package/dist/extension/bold.d.mts +7 -2
- package/dist/extension/bold.d.ts +7 -2
- package/dist/extension/bold.js +22 -45
- package/dist/extension/bold.mjs +13 -35
- package/dist/extension/bulletlist.d.mts +10 -0
- package/dist/extension/bulletlist.d.ts +10 -0
- package/dist/extension/bulletlist.js +241 -0
- package/dist/extension/bulletlist.mjs +46 -0
- package/dist/extension/clearformat.d.mts +1 -1
- package/dist/extension/clearformat.d.ts +1 -1
- package/dist/extension/clearformat.js +11 -6
- package/dist/extension/clearformat.mjs +8 -35
- package/dist/extension/color.d.mts +17 -0
- package/dist/extension/color.d.ts +17 -0
- package/dist/extension/color.js +580 -0
- package/dist/extension/color.mjs +12 -0
- package/dist/extension/emoji.d.mts +15 -0
- package/dist/extension/emoji.d.ts +15 -0
- package/dist/extension/emoji.js +421 -0
- package/dist/extension/emoji.mjs +158 -0
- package/dist/extension/font-family.d.mts +8 -11
- package/dist/extension/font-family.d.ts +8 -11
- package/dist/extension/font-family.js +11 -12
- package/dist/extension/font-family.mjs +10 -11
- package/dist/extension/font-size.d.mts +8 -11
- package/dist/extension/font-size.d.ts +8 -11
- package/dist/extension/font-size.js +10 -12
- package/dist/extension/font-size.mjs +9 -11
- package/dist/extension/heading.d.mts +10 -10
- package/dist/extension/heading.d.ts +10 -10
- package/dist/extension/heading.js +68 -80
- package/dist/extension/heading.mjs +40 -206
- package/dist/extension/history.d.mts +4 -2
- package/dist/extension/history.d.ts +4 -2
- package/dist/extension/history.js +16 -9
- package/dist/extension/history.mjs +16 -64
- package/dist/extension/horizontalrule.d.mts +10 -0
- package/dist/extension/horizontalrule.d.ts +10 -0
- package/dist/extension/horizontalrule.js +242 -0
- package/dist/extension/horizontalrule.mjs +42 -0
- package/dist/extension/image.d.mts +26 -0
- package/dist/extension/image.d.ts +26 -0
- package/dist/extension/image.js +1611 -0
- package/dist/extension/image.mjs +1153 -0
- package/dist/extension/indentoutdent.d.mts +21 -0
- package/dist/extension/indentoutdent.d.ts +21 -0
- package/dist/extension/indentoutdent.js +380 -0
- package/dist/extension/indentoutdent.mjs +164 -0
- package/dist/extension/italic.d.mts +7 -2
- package/dist/extension/italic.d.ts +7 -2
- package/dist/extension/italic.js +22 -45
- package/dist/extension/italic.mjs +14 -40
- package/dist/extension/lineheight.d.mts +15 -0
- package/dist/extension/lineheight.d.ts +15 -0
- package/dist/extension/lineheight.js +342 -0
- package/dist/extension/lineheight.mjs +87 -0
- package/dist/extension/link.d.mts +15 -0
- package/dist/extension/link.d.ts +15 -0
- package/dist/extension/link.js +588 -0
- package/dist/extension/link.mjs +278 -0
- package/dist/extension/orderedlist.d.mts +10 -0
- package/dist/extension/orderedlist.d.ts +10 -0
- package/dist/extension/orderedlist.js +241 -0
- package/dist/extension/orderedlist.mjs +46 -0
- package/dist/extension/strike.d.mts +8 -3
- package/dist/extension/strike.d.ts +8 -3
- package/dist/extension/strike.js +22 -45
- package/dist/extension/strike.mjs +14 -40
- package/dist/extension/subandsuperscript.d.mts +7 -10
- package/dist/extension/subandsuperscript.d.ts +7 -10
- package/dist/extension/subandsuperscript.js +66 -77
- package/dist/extension/subandsuperscript.mjs +18 -48
- package/dist/extension/subscript.d.mts +4 -2
- package/dist/extension/subscript.d.ts +4 -2
- package/dist/extension/subscript.js +20 -45
- package/dist/extension/subscript.mjs +10 -10
- package/dist/extension/superscript.d.mts +4 -2
- package/dist/extension/superscript.d.ts +4 -2
- package/dist/extension/superscript.js +20 -45
- package/dist/extension/superscript.mjs +10 -10
- package/dist/extension/table.d.mts +12 -0
- package/dist/extension/table.d.ts +12 -0
- package/dist/extension/table.js +585 -0
- package/dist/extension/table.mjs +324 -0
- package/dist/extension/tasklist.d.mts +10 -0
- package/dist/extension/tasklist.d.ts +10 -0
- package/dist/extension/tasklist.js +246 -0
- package/dist/extension/tasklist.mjs +52 -0
- package/dist/extension/textalign.d.mts +15 -0
- package/dist/extension/textalign.d.ts +15 -0
- package/dist/extension/textalign.js +404 -0
- package/dist/extension/textalign.mjs +79 -0
- package/dist/extension/underline.d.mts +7 -2
- package/dist/extension/underline.d.ts +7 -2
- package/dist/extension/underline.js +22 -45
- package/dist/extension/underline.mjs +14 -39
- package/dist/index.css +683 -31
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +306 -24
- package/dist/index.mjs +141 -13
- package/dist/tiptap-ext.type-B3TtT7-J.d.mts +43 -0
- package/dist/tiptap-ext.type-B3TtT7-J.d.ts +43 -0
- package/package.json +41 -28
- package/dist/chunk-2YUUKIIT.mjs +0 -149
- package/dist/chunk-7QOFJIQ3.mjs +0 -90
- package/dist/chunk-GSHINFPO.mjs +0 -53
- package/dist/chunk-LMOTHRGQ.mjs +0 -37
- package/dist/chunk-MBF77NHS.mjs +0 -37
- package/dist/tiptap-ext.type-DrneAC5G.d.mts +0 -39
- package/dist/tiptap-ext.type-DrneAC5G.d.ts +0 -39
package/dist/index.d.mts
CHANGED
|
@@ -6,8 +6,10 @@ interface Props$2 {
|
|
|
6
6
|
children?: ReactNode;
|
|
7
7
|
extensions?: Extensions;
|
|
8
8
|
className?: string;
|
|
9
|
+
dragHandler?: boolean;
|
|
10
|
+
showBubbleMenu?: boolean;
|
|
9
11
|
}
|
|
10
|
-
declare const Editor: ({ children, extensions, className }: Props$2) => react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare const Editor: ({ children, extensions, className, dragHandler, showBubbleMenu }: Props$2) => react_jsx_runtime.JSX.Element;
|
|
11
13
|
|
|
12
14
|
interface Props$1 {
|
|
13
15
|
className?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,10 @@ interface Props$2 {
|
|
|
6
6
|
children?: ReactNode;
|
|
7
7
|
extensions?: Extensions;
|
|
8
8
|
className?: string;
|
|
9
|
+
dragHandler?: boolean;
|
|
10
|
+
showBubbleMenu?: boolean;
|
|
9
11
|
}
|
|
10
|
-
declare const Editor: ({ children, extensions, className }: Props$2) => react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare const Editor: ({ children, extensions, className, dragHandler, showBubbleMenu }: Props$2) => react_jsx_runtime.JSX.Element;
|
|
11
13
|
|
|
12
14
|
interface Props$1 {
|
|
13
15
|
className?: string;
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defProps = Object.defineProperties;
|
|
4
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
7
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
9
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
10
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __objRest = (source, exclude) => {
|
|
26
|
+
var target = {};
|
|
27
|
+
for (var prop in source)
|
|
28
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
if (source != null && __getOwnPropSymbols)
|
|
31
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
32
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
};
|
|
8
37
|
var __export = (target, all) => {
|
|
9
38
|
for (var name in all)
|
|
10
39
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -35,43 +64,287 @@ __export(src_exports, {
|
|
|
35
64
|
Toolbar: () => Toolbar_default
|
|
36
65
|
});
|
|
37
66
|
module.exports = __toCommonJS(src_exports);
|
|
67
|
+
var import_dist = require("@siamf/react-color-pick/dist/index.css");
|
|
38
68
|
|
|
39
69
|
// src/lib/Editor.tsx
|
|
40
|
-
var
|
|
41
|
-
var
|
|
42
|
-
var import_extension_document = __toESM(require("@tiptap/extension-document"));
|
|
43
|
-
var import_extension_paragraph = __toESM(require("@tiptap/extension-paragraph"));
|
|
44
|
-
var import_extension_text = __toESM(require("@tiptap/extension-text"));
|
|
70
|
+
var import_react7 = require("react");
|
|
71
|
+
var import_react8 = require("@tiptap/react");
|
|
45
72
|
|
|
46
|
-
// src/lib/
|
|
47
|
-
var
|
|
73
|
+
// src/lib/internal_com/RiDragHandler.tsx
|
|
74
|
+
var import_extension_drag_handle_react = __toESM(require("@tiptap/extension-drag-handle-react"));
|
|
75
|
+
var import_react4 = require("@tiptap/react");
|
|
76
|
+
var import_state = require("@tiptap/pm/state");
|
|
77
|
+
|
|
78
|
+
// src/lib/icons/index.tsx
|
|
48
79
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
49
|
-
var
|
|
80
|
+
var DragVerticalIcon = (_a) => {
|
|
81
|
+
var _b = _a, { size = 17, className } = _b, props = __objRest(_b, ["size", "className"]);
|
|
82
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
83
|
+
"svg",
|
|
84
|
+
__spreadProps(__spreadValues({
|
|
85
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
86
|
+
viewBox: "0 0 24 24",
|
|
87
|
+
fill: "none",
|
|
88
|
+
stroke: "currentColor",
|
|
89
|
+
strokeWidth: 2,
|
|
90
|
+
strokeLinecap: "round",
|
|
91
|
+
strokeLinejoin: "round",
|
|
92
|
+
width: size,
|
|
93
|
+
height: size,
|
|
94
|
+
className
|
|
95
|
+
}, props), {
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "9", cy: "12", r: "1" }),
|
|
98
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "9", cy: "5", r: "1" }),
|
|
99
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "9", cy: "19", r: "1" }),
|
|
100
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "15", cy: "12", r: "1" }),
|
|
101
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "15", cy: "5", r: "1" }),
|
|
102
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "15", cy: "19", r: "1" })
|
|
103
|
+
]
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
var PlusIcon = (_a) => {
|
|
108
|
+
var _b = _a, { size = 17, className } = _b, props = __objRest(_b, ["size", "className"]);
|
|
109
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
110
|
+
"svg",
|
|
111
|
+
__spreadProps(__spreadValues({
|
|
112
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
113
|
+
viewBox: "0 0 24 24",
|
|
114
|
+
fill: "none",
|
|
115
|
+
stroke: "currentColor",
|
|
116
|
+
strokeWidth: 2,
|
|
117
|
+
strokeLinecap: "round",
|
|
118
|
+
strokeLinejoin: "round",
|
|
119
|
+
width: size,
|
|
120
|
+
height: size,
|
|
121
|
+
className
|
|
122
|
+
}, props), {
|
|
123
|
+
children: [
|
|
124
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M5 12h14" }),
|
|
125
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 5v14" })
|
|
126
|
+
]
|
|
127
|
+
})
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// src/lib/components/_com/Tooltip.tsx
|
|
132
|
+
var import_react = require("react");
|
|
133
|
+
var import_react2 = require("@floating-ui/react");
|
|
134
|
+
var import_react3 = require("motion/react");
|
|
135
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
136
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
137
|
+
var Tooltip = ({ placement = "top", children, content, className }) => {
|
|
138
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
139
|
+
const { x, y, refs, strategy, context, placement: resolvedPlacement } = (0, import_react2.useFloating)({
|
|
140
|
+
open,
|
|
141
|
+
onOpenChange: setOpen,
|
|
142
|
+
placement,
|
|
143
|
+
middleware: [(0, import_react2.offset)(8), (0, import_react2.flip)(), (0, import_react2.shift)({ padding: 8 })],
|
|
144
|
+
whileElementsMounted: import_react2.autoUpdate
|
|
145
|
+
});
|
|
146
|
+
const hover = (0, import_react2.useHover)(context);
|
|
147
|
+
const dismiss = (0, import_react2.useDismiss)(context);
|
|
148
|
+
const { getReferenceProps, getFloatingProps } = (0, import_react2.useInteractions)([hover, dismiss]);
|
|
149
|
+
const id = (0, import_react.useId)();
|
|
150
|
+
function mergeRefs(...refsToMerge) {
|
|
151
|
+
return (node) => {
|
|
152
|
+
for (const r of refsToMerge) {
|
|
153
|
+
if (!r) continue;
|
|
154
|
+
if (typeof r === "function") r(node);
|
|
155
|
+
else r.current = node;
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const side = resolvedPlacement.split("-")[0];
|
|
160
|
+
const enterOffset = 6;
|
|
161
|
+
const getInitial = () => {
|
|
162
|
+
switch (side) {
|
|
163
|
+
case "top":
|
|
164
|
+
return { opacity: 0, y: enterOffset };
|
|
165
|
+
case "bottom":
|
|
166
|
+
return { opacity: 0, y: -enterOffset };
|
|
167
|
+
case "left":
|
|
168
|
+
return { opacity: 0, x: enterOffset };
|
|
169
|
+
case "right":
|
|
170
|
+
return { opacity: 0, x: -enterOffset };
|
|
171
|
+
default:
|
|
172
|
+
return { opacity: 0 };
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const getExit = () => __spreadProps(__spreadValues({}, getInitial()), { opacity: 0 });
|
|
176
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react.Fragment, { children: [
|
|
177
|
+
(0, import_react.isValidElement)(children) ? (0, import_react.cloneElement)(children, __spreadProps(__spreadValues({}, getReferenceProps({
|
|
178
|
+
onFocus: () => setOpen(true),
|
|
179
|
+
onBlur: () => setOpen(false),
|
|
180
|
+
"aria-describedby": open ? id : void 0
|
|
181
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
182
|
+
})), {
|
|
183
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
184
|
+
ref: mergeRefs(children.props.ref, refs.setReference)
|
|
185
|
+
})) : children,
|
|
186
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.FloatingPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.AnimatePresence, { children: open && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
187
|
+
import_react3.motion.div,
|
|
188
|
+
__spreadProps(__spreadValues({
|
|
189
|
+
ref: refs.setFloating
|
|
190
|
+
}, getFloatingProps({
|
|
191
|
+
role: "tooltip",
|
|
192
|
+
id,
|
|
193
|
+
style: {
|
|
194
|
+
position: strategy,
|
|
195
|
+
top: y != null ? y : 0,
|
|
196
|
+
left: x != null ? x : 0,
|
|
197
|
+
pointerEvents: "none"
|
|
198
|
+
}
|
|
199
|
+
})), {
|
|
200
|
+
initial: getInitial(),
|
|
201
|
+
animate: { opacity: 1, x: 0, y: 0, scale: 1 },
|
|
202
|
+
exit: getExit(),
|
|
203
|
+
transition: { type: "spring", stiffness: 420, damping: 30, mass: 0.6 },
|
|
204
|
+
className: (0, import_tailwind_merge.twMerge)("bg-white border border-solid border-gray-200/50 py-1 px-3 rounded-lg text-sm shadow-lg shadow-gray-50 text-center", className),
|
|
205
|
+
children: content
|
|
206
|
+
}),
|
|
207
|
+
"tooltip"
|
|
208
|
+
) }) })
|
|
209
|
+
] });
|
|
210
|
+
};
|
|
211
|
+
var Tooltip_default = Tooltip;
|
|
212
|
+
|
|
213
|
+
// src/lib/internal_com/RiDragHandler.tsx
|
|
214
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
215
|
+
var isDocEmpty = (editor) => {
|
|
216
|
+
var _a;
|
|
217
|
+
const doc = editor.state.doc;
|
|
218
|
+
return doc.childCount === 1 && ((_a = doc.firstChild) == null ? void 0 : _a.isTextblock) === true && doc.firstChild.content.size === 0;
|
|
219
|
+
};
|
|
220
|
+
var RiDragHandler = ({ editor }) => {
|
|
221
|
+
const empty = (0, import_react4.useEditorState)({
|
|
222
|
+
editor,
|
|
223
|
+
selector: ({ editor: editor2 }) => isDocEmpty(editor2)
|
|
224
|
+
});
|
|
225
|
+
const insertSlash = () => {
|
|
226
|
+
editor.chain().focus().command(({ tr, state }) => {
|
|
227
|
+
const { $from } = state.selection;
|
|
228
|
+
let blockDepth = $from.depth;
|
|
229
|
+
while (blockDepth > 0 && !$from.node(blockDepth).isBlock) blockDepth--;
|
|
230
|
+
const blockNode = $from.node(blockDepth);
|
|
231
|
+
const isEmptyBlock = blockNode.isTextblock && blockNode.content.size === 0;
|
|
232
|
+
if (isEmptyBlock) {
|
|
233
|
+
tr.insertText("/", state.selection.from, state.selection.to);
|
|
234
|
+
tr.setSelection(import_state.TextSelection.create(tr.doc, state.selection.from + 1));
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
const insertPos = $from.after(blockDepth);
|
|
238
|
+
const paragraph = state.schema.nodes.paragraph;
|
|
239
|
+
const text = state.schema.text("/");
|
|
240
|
+
if (!paragraph) return false;
|
|
241
|
+
tr.insert(insertPos, paragraph.create(null, text));
|
|
242
|
+
tr.setSelection(import_state.TextSelection.create(tr.doc, insertPos + 2));
|
|
243
|
+
return true;
|
|
244
|
+
}).run();
|
|
245
|
+
};
|
|
246
|
+
if (empty) return null;
|
|
247
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_extension_drag_handle_react.default, { editor, nested: empty, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex gap-x-1.5 mt-1.5 -translate-x-1.5", children: [
|
|
248
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Tooltip_default, { content: "Insert Content", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
249
|
+
"button",
|
|
250
|
+
{
|
|
251
|
+
type: "button",
|
|
252
|
+
draggable: false,
|
|
253
|
+
onDragStart: (e) => e.preventDefault(),
|
|
254
|
+
onMouseDown: (e) => {
|
|
255
|
+
e.preventDefault();
|
|
256
|
+
e.stopPropagation();
|
|
257
|
+
},
|
|
258
|
+
onClick: (e) => {
|
|
259
|
+
e.preventDefault();
|
|
260
|
+
e.stopPropagation();
|
|
261
|
+
insertSlash();
|
|
262
|
+
},
|
|
263
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PlusIcon, { size: 16 })
|
|
264
|
+
}
|
|
265
|
+
) }),
|
|
266
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Tooltip_default, { content: "Drag for move", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DragVerticalIcon, { size: 16 }) }) })
|
|
267
|
+
] }) });
|
|
268
|
+
};
|
|
269
|
+
var RiDragHandler_default = RiDragHandler;
|
|
270
|
+
|
|
271
|
+
// src/lib/internal_com/BubbleMenu.tsx
|
|
272
|
+
var import_react5 = require("react");
|
|
273
|
+
var import_menus = require("@tiptap/react/menus");
|
|
274
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
275
|
+
var BubbleMenu = ({ editor }) => {
|
|
276
|
+
const entries = editor.extensionManager.extensions.map((ext) => {
|
|
277
|
+
var _a, _b, _c;
|
|
278
|
+
const anyExt = ext;
|
|
279
|
+
const renderButton = (_a = anyExt.options) == null ? void 0 : _a.component;
|
|
280
|
+
if (!renderButton || !((_b = anyExt.options) == null ? void 0 : _b.showInBubbleMenu)) return null;
|
|
281
|
+
return {
|
|
282
|
+
name: anyExt.name,
|
|
283
|
+
renderButton,
|
|
284
|
+
options: anyExt.options,
|
|
285
|
+
buttonClassName: anyExt.buttonClassName,
|
|
286
|
+
dropdownContainerClassName: anyExt.dropdownContainerClassName,
|
|
287
|
+
dropdownItemClassName: anyExt.dropdownItemClassName,
|
|
288
|
+
bubbleMenuPosition: (_c = anyExt.options) == null ? void 0 : _c.bubbleMenuPosition
|
|
289
|
+
};
|
|
290
|
+
}).filter(Boolean);
|
|
291
|
+
const desiredOrder = new Map(
|
|
292
|
+
editor.options.extensions.map((ext, i) => [ext.name, i])
|
|
293
|
+
);
|
|
294
|
+
entries.sort((a, b) => {
|
|
295
|
+
var _a, _b;
|
|
296
|
+
const ap = typeof a.bubbleMenuPosition === "number" ? a.bubbleMenuPosition : Number.POSITIVE_INFINITY;
|
|
297
|
+
const bp = typeof b.bubbleMenuPosition === "number" ? b.bubbleMenuPosition : Number.POSITIVE_INFINITY;
|
|
298
|
+
if (ap !== bp) return ap - bp;
|
|
299
|
+
const ai = (_a = desiredOrder.get(a.name)) != null ? _a : Number.MAX_SAFE_INTEGER;
|
|
300
|
+
const bi = (_b = desiredOrder.get(b.name)) != null ? _b : Number.MAX_SAFE_INTEGER;
|
|
301
|
+
if (ai !== bi) return ai - bi;
|
|
302
|
+
return a.name.localeCompare(b.name);
|
|
303
|
+
});
|
|
304
|
+
if (!entries.length) return null;
|
|
305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_menus.BubbleMenu, { editor, options: { placement: "top", offset: 10, flip: true }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "bg-white flex gap-x-1 py-2 px-2 rounded-md border border-gray-200", children: entries.map(({ name, renderButton, options }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react5.Fragment, { children: renderButton({
|
|
306
|
+
editor,
|
|
307
|
+
options,
|
|
308
|
+
buttonClassName: "",
|
|
309
|
+
dropdownContainerClassName: "",
|
|
310
|
+
dropdownItemClassName: ""
|
|
311
|
+
}) }, name)) }) });
|
|
312
|
+
};
|
|
313
|
+
var BubbleMenu_default = BubbleMenu;
|
|
314
|
+
|
|
315
|
+
// src/lib/context/editor.context.tsx
|
|
316
|
+
var import_react6 = require("react");
|
|
317
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
318
|
+
var EditorContext = (0, import_react6.createContext)({ editor: null });
|
|
50
319
|
var useEditor = () => {
|
|
51
|
-
const ctx = (0,
|
|
320
|
+
const ctx = (0, import_react6.useContext)(EditorContext);
|
|
52
321
|
if (!ctx) throw new Error("<Toolbar/> & <Content/> component must be used inside <Editor>...</Editor/>");
|
|
53
322
|
return ctx;
|
|
54
323
|
};
|
|
55
324
|
var EditorProvider = ({ children, value }) => {
|
|
56
|
-
return /* @__PURE__ */ (0,
|
|
325
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(EditorContext.Provider, { value, children });
|
|
57
326
|
};
|
|
58
327
|
|
|
59
328
|
// src/lib/Editor.tsx
|
|
60
|
-
var
|
|
61
|
-
var Editor = ({ children, extensions = [], className }) => {
|
|
62
|
-
const editor = (0,
|
|
63
|
-
extensions: [
|
|
329
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
330
|
+
var Editor = ({ children, extensions = [], className, dragHandler = true, showBubbleMenu = true }) => {
|
|
331
|
+
const editor = (0, import_react8.useEditor)({
|
|
332
|
+
extensions: [...extensions],
|
|
64
333
|
immediatelyRender: false
|
|
65
334
|
});
|
|
66
|
-
const value = (0,
|
|
67
|
-
return /* @__PURE__ */ (0,
|
|
335
|
+
const value = (0, import_react7.useMemo)(() => ({ editor }), [editor]);
|
|
336
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(EditorProvider, { value: __spreadProps(__spreadValues({}, value), { dragHandler }), children: [
|
|
337
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className, children }),
|
|
338
|
+
value.editor && dragHandler && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(RiDragHandler_default, { editor: value.editor }),
|
|
339
|
+
value.editor && showBubbleMenu && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(BubbleMenu_default, { editor: value.editor })
|
|
340
|
+
] });
|
|
68
341
|
};
|
|
69
342
|
var Editor_default = Editor;
|
|
70
343
|
|
|
71
344
|
// src/lib/Toolbar.tsx
|
|
72
345
|
var React = __toESM(require("react"));
|
|
73
|
-
var
|
|
74
|
-
var
|
|
346
|
+
var import_tailwind_merge2 = require("tailwind-merge");
|
|
347
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
75
348
|
var Toolbar = ({ className, buttonClassName, dropdownContainerClassName, dropdownItemClassName }) => {
|
|
76
349
|
const { editor } = useEditor();
|
|
77
350
|
if (!editor) return null;
|
|
@@ -91,7 +364,16 @@ var Toolbar = ({ className, buttonClassName, dropdownContainerClassName, dropdow
|
|
|
91
364
|
dropdownItemClassName: anyExt.dropdownItemClassName
|
|
92
365
|
} : null;
|
|
93
366
|
}).filter(Boolean);
|
|
94
|
-
|
|
367
|
+
const desiredOrder = new Map(
|
|
368
|
+
editor.options.extensions.map((ext, i) => [ext.name, i])
|
|
369
|
+
);
|
|
370
|
+
entries.sort((a, b) => {
|
|
371
|
+
var _a, _b;
|
|
372
|
+
const ai = (_a = desiredOrder.get(a.name)) != null ? _a : Number.MAX_SAFE_INTEGER;
|
|
373
|
+
const bi = (_b = desiredOrder.get(b.name)) != null ? _b : Number.MAX_SAFE_INTEGER;
|
|
374
|
+
return ai - bi;
|
|
375
|
+
});
|
|
376
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: (0, import_tailwind_merge2.twMerge)("flex gap-x-1 flex-wrap", className), children: entries.map(({ name, renderButton, options }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(React.Fragment, { children: renderButton({
|
|
95
377
|
editor,
|
|
96
378
|
options,
|
|
97
379
|
buttonClassName: buttonClassName || "",
|
|
@@ -102,12 +384,12 @@ var Toolbar = ({ className, buttonClassName, dropdownContainerClassName, dropdow
|
|
|
102
384
|
var Toolbar_default = Toolbar;
|
|
103
385
|
|
|
104
386
|
// src/lib/Content.tsx
|
|
105
|
-
var
|
|
106
|
-
var
|
|
107
|
-
var
|
|
387
|
+
var import_react9 = require("@tiptap/react");
|
|
388
|
+
var import_tailwind_merge3 = require("tailwind-merge");
|
|
389
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
108
390
|
var Content = ({ className }) => {
|
|
109
|
-
const { editor } = useEditor();
|
|
110
|
-
return /* @__PURE__ */ (0,
|
|
391
|
+
const { editor, dragHandler } = useEditor();
|
|
392
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react9.EditorContent, { editor, className: (0, import_tailwind_merge3.twMerge)(`focus:outline-none [&_.tiptap]:focus:outline-none [&_.tiptap]:min-h-50 ${dragHandler ? "[&_.tiptap]:p-[10px_20px_10px_50px]" : "[&_.tiptap]:p-[10px_20px]"}`, className) });
|
|
111
393
|
};
|
|
112
394
|
var Content_default = Content;
|
|
113
395
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.mjs
CHANGED
|
@@ -2,29 +2,148 @@ import {
|
|
|
2
2
|
EditorProvider,
|
|
3
3
|
useEditor
|
|
4
4
|
} from "./chunk-VYDH6BZE.mjs";
|
|
5
|
-
import
|
|
5
|
+
import {
|
|
6
|
+
DragVerticalIcon,
|
|
7
|
+
PlusIcon,
|
|
8
|
+
Tooltip_default
|
|
9
|
+
} from "./chunk-EN4BPI7N.mjs";
|
|
10
|
+
import {
|
|
11
|
+
__spreadProps,
|
|
12
|
+
__spreadValues
|
|
13
|
+
} from "./chunk-WNQUEZJF.mjs";
|
|
14
|
+
|
|
15
|
+
// src/index.ts
|
|
16
|
+
import "@siamf/react-color-pick/dist/index.css";
|
|
6
17
|
|
|
7
18
|
// src/lib/Editor.tsx
|
|
8
19
|
import { useMemo } from "react";
|
|
9
20
|
import { useEditor as useEditor2 } from "@tiptap/react";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
|
|
21
|
+
|
|
22
|
+
// src/lib/internal_com/RiDragHandler.tsx
|
|
23
|
+
import DragHandle from "@tiptap/extension-drag-handle-react";
|
|
24
|
+
import { useEditorState } from "@tiptap/react";
|
|
25
|
+
import { TextSelection } from "@tiptap/pm/state";
|
|
26
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
27
|
+
var isDocEmpty = (editor) => {
|
|
28
|
+
var _a;
|
|
29
|
+
const doc = editor.state.doc;
|
|
30
|
+
return doc.childCount === 1 && ((_a = doc.firstChild) == null ? void 0 : _a.isTextblock) === true && doc.firstChild.content.size === 0;
|
|
31
|
+
};
|
|
32
|
+
var RiDragHandler = ({ editor }) => {
|
|
33
|
+
const empty = useEditorState({
|
|
34
|
+
editor,
|
|
35
|
+
selector: ({ editor: editor2 }) => isDocEmpty(editor2)
|
|
36
|
+
});
|
|
37
|
+
const insertSlash = () => {
|
|
38
|
+
editor.chain().focus().command(({ tr, state }) => {
|
|
39
|
+
const { $from } = state.selection;
|
|
40
|
+
let blockDepth = $from.depth;
|
|
41
|
+
while (blockDepth > 0 && !$from.node(blockDepth).isBlock) blockDepth--;
|
|
42
|
+
const blockNode = $from.node(blockDepth);
|
|
43
|
+
const isEmptyBlock = blockNode.isTextblock && blockNode.content.size === 0;
|
|
44
|
+
if (isEmptyBlock) {
|
|
45
|
+
tr.insertText("/", state.selection.from, state.selection.to);
|
|
46
|
+
tr.setSelection(TextSelection.create(tr.doc, state.selection.from + 1));
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
const insertPos = $from.after(blockDepth);
|
|
50
|
+
const paragraph = state.schema.nodes.paragraph;
|
|
51
|
+
const text = state.schema.text("/");
|
|
52
|
+
if (!paragraph) return false;
|
|
53
|
+
tr.insert(insertPos, paragraph.create(null, text));
|
|
54
|
+
tr.setSelection(TextSelection.create(tr.doc, insertPos + 2));
|
|
55
|
+
return true;
|
|
56
|
+
}).run();
|
|
57
|
+
};
|
|
58
|
+
if (empty) return null;
|
|
59
|
+
return /* @__PURE__ */ jsx(DragHandle, { editor, nested: empty, children: /* @__PURE__ */ jsxs("div", { className: "flex gap-x-1.5 mt-1.5 -translate-x-1.5", children: [
|
|
60
|
+
/* @__PURE__ */ jsx(Tooltip_default, { content: "Insert Content", children: /* @__PURE__ */ jsx(
|
|
61
|
+
"button",
|
|
62
|
+
{
|
|
63
|
+
type: "button",
|
|
64
|
+
draggable: false,
|
|
65
|
+
onDragStart: (e) => e.preventDefault(),
|
|
66
|
+
onMouseDown: (e) => {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
e.stopPropagation();
|
|
69
|
+
},
|
|
70
|
+
onClick: (e) => {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
e.stopPropagation();
|
|
73
|
+
insertSlash();
|
|
74
|
+
},
|
|
75
|
+
children: /* @__PURE__ */ jsx(PlusIcon, { size: 16 })
|
|
76
|
+
}
|
|
77
|
+
) }),
|
|
78
|
+
/* @__PURE__ */ jsx(Tooltip_default, { content: "Drag for move", children: /* @__PURE__ */ jsx("button", { type: "button", children: /* @__PURE__ */ jsx(DragVerticalIcon, { size: 16 }) }) })
|
|
79
|
+
] }) });
|
|
80
|
+
};
|
|
81
|
+
var RiDragHandler_default = RiDragHandler;
|
|
82
|
+
|
|
83
|
+
// src/lib/internal_com/BubbleMenu.tsx
|
|
84
|
+
import { Fragment } from "react";
|
|
85
|
+
import { BubbleMenu as TiptapBubbleMenu } from "@tiptap/react/menus";
|
|
86
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
87
|
+
var BubbleMenu = ({ editor }) => {
|
|
88
|
+
const entries = editor.extensionManager.extensions.map((ext) => {
|
|
89
|
+
var _a, _b, _c;
|
|
90
|
+
const anyExt = ext;
|
|
91
|
+
const renderButton = (_a = anyExt.options) == null ? void 0 : _a.component;
|
|
92
|
+
if (!renderButton || !((_b = anyExt.options) == null ? void 0 : _b.showInBubbleMenu)) return null;
|
|
93
|
+
return {
|
|
94
|
+
name: anyExt.name,
|
|
95
|
+
renderButton,
|
|
96
|
+
options: anyExt.options,
|
|
97
|
+
buttonClassName: anyExt.buttonClassName,
|
|
98
|
+
dropdownContainerClassName: anyExt.dropdownContainerClassName,
|
|
99
|
+
dropdownItemClassName: anyExt.dropdownItemClassName,
|
|
100
|
+
bubbleMenuPosition: (_c = anyExt.options) == null ? void 0 : _c.bubbleMenuPosition
|
|
101
|
+
};
|
|
102
|
+
}).filter(Boolean);
|
|
103
|
+
const desiredOrder = new Map(
|
|
104
|
+
editor.options.extensions.map((ext, i) => [ext.name, i])
|
|
105
|
+
);
|
|
106
|
+
entries.sort((a, b) => {
|
|
107
|
+
var _a, _b;
|
|
108
|
+
const ap = typeof a.bubbleMenuPosition === "number" ? a.bubbleMenuPosition : Number.POSITIVE_INFINITY;
|
|
109
|
+
const bp = typeof b.bubbleMenuPosition === "number" ? b.bubbleMenuPosition : Number.POSITIVE_INFINITY;
|
|
110
|
+
if (ap !== bp) return ap - bp;
|
|
111
|
+
const ai = (_a = desiredOrder.get(a.name)) != null ? _a : Number.MAX_SAFE_INTEGER;
|
|
112
|
+
const bi = (_b = desiredOrder.get(b.name)) != null ? _b : Number.MAX_SAFE_INTEGER;
|
|
113
|
+
if (ai !== bi) return ai - bi;
|
|
114
|
+
return a.name.localeCompare(b.name);
|
|
115
|
+
});
|
|
116
|
+
if (!entries.length) return null;
|
|
117
|
+
return /* @__PURE__ */ jsx2(TiptapBubbleMenu, { editor, options: { placement: "top", offset: 10, flip: true }, children: /* @__PURE__ */ jsx2("div", { className: "bg-white flex gap-x-1 py-2 px-2 rounded-md border border-gray-200", children: entries.map(({ name, renderButton, options }) => /* @__PURE__ */ jsx2(Fragment, { children: renderButton({
|
|
118
|
+
editor,
|
|
119
|
+
options,
|
|
120
|
+
buttonClassName: "",
|
|
121
|
+
dropdownContainerClassName: "",
|
|
122
|
+
dropdownItemClassName: ""
|
|
123
|
+
}) }, name)) }) });
|
|
124
|
+
};
|
|
125
|
+
var BubbleMenu_default = BubbleMenu;
|
|
126
|
+
|
|
127
|
+
// src/lib/Editor.tsx
|
|
128
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
129
|
+
var Editor = ({ children, extensions = [], className, dragHandler = true, showBubbleMenu = true }) => {
|
|
15
130
|
const editor = useEditor2({
|
|
16
|
-
extensions: [
|
|
131
|
+
extensions: [...extensions],
|
|
17
132
|
immediatelyRender: false
|
|
18
133
|
});
|
|
19
134
|
const value = useMemo(() => ({ editor }), [editor]);
|
|
20
|
-
return /* @__PURE__ */
|
|
135
|
+
return /* @__PURE__ */ jsxs2(EditorProvider, { value: __spreadProps(__spreadValues({}, value), { dragHandler }), children: [
|
|
136
|
+
/* @__PURE__ */ jsx3("div", { className, children }),
|
|
137
|
+
value.editor && dragHandler && /* @__PURE__ */ jsx3(RiDragHandler_default, { editor: value.editor }),
|
|
138
|
+
value.editor && showBubbleMenu && /* @__PURE__ */ jsx3(BubbleMenu_default, { editor: value.editor })
|
|
139
|
+
] });
|
|
21
140
|
};
|
|
22
141
|
var Editor_default = Editor;
|
|
23
142
|
|
|
24
143
|
// src/lib/Toolbar.tsx
|
|
25
144
|
import * as React from "react";
|
|
26
145
|
import { twMerge } from "tailwind-merge";
|
|
27
|
-
import { jsx as
|
|
146
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
28
147
|
var Toolbar = ({ className, buttonClassName, dropdownContainerClassName, dropdownItemClassName }) => {
|
|
29
148
|
const { editor } = useEditor();
|
|
30
149
|
if (!editor) return null;
|
|
@@ -44,7 +163,16 @@ var Toolbar = ({ className, buttonClassName, dropdownContainerClassName, dropdow
|
|
|
44
163
|
dropdownItemClassName: anyExt.dropdownItemClassName
|
|
45
164
|
} : null;
|
|
46
165
|
}).filter(Boolean);
|
|
47
|
-
|
|
166
|
+
const desiredOrder = new Map(
|
|
167
|
+
editor.options.extensions.map((ext, i) => [ext.name, i])
|
|
168
|
+
);
|
|
169
|
+
entries.sort((a, b) => {
|
|
170
|
+
var _a, _b;
|
|
171
|
+
const ai = (_a = desiredOrder.get(a.name)) != null ? _a : Number.MAX_SAFE_INTEGER;
|
|
172
|
+
const bi = (_b = desiredOrder.get(b.name)) != null ? _b : Number.MAX_SAFE_INTEGER;
|
|
173
|
+
return ai - bi;
|
|
174
|
+
});
|
|
175
|
+
return /* @__PURE__ */ jsx4("div", { className: twMerge("flex gap-x-1 flex-wrap", className), children: entries.map(({ name, renderButton, options }) => /* @__PURE__ */ jsx4(React.Fragment, { children: renderButton({
|
|
48
176
|
editor,
|
|
49
177
|
options,
|
|
50
178
|
buttonClassName: buttonClassName || "",
|
|
@@ -57,10 +185,10 @@ var Toolbar_default = Toolbar;
|
|
|
57
185
|
// src/lib/Content.tsx
|
|
58
186
|
import { EditorContent } from "@tiptap/react";
|
|
59
187
|
import { twMerge as twMerge2 } from "tailwind-merge";
|
|
60
|
-
import { jsx as
|
|
188
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
61
189
|
var Content = ({ className }) => {
|
|
62
|
-
const { editor } = useEditor();
|
|
63
|
-
return /* @__PURE__ */
|
|
190
|
+
const { editor, dragHandler } = useEditor();
|
|
191
|
+
return /* @__PURE__ */ jsx5(EditorContent, { editor, className: twMerge2(`focus:outline-none [&_.tiptap]:focus:outline-none [&_.tiptap]:min-h-50 ${dragHandler ? "[&_.tiptap]:p-[10px_20px_10px_50px]" : "[&_.tiptap]:p-[10px_20px]"}`, className) });
|
|
64
192
|
};
|
|
65
193
|
var Content_default = Content;
|
|
66
194
|
export {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ReactNode, CSSProperties } from 'react';
|
|
2
|
+
import { Placement } from '@floating-ui/react';
|
|
3
|
+
import { Editor } from '@tiptap/react';
|
|
4
|
+
|
|
5
|
+
type ExtButtonBaseOptions = {
|
|
6
|
+
className?: string;
|
|
7
|
+
activeClassName?: string;
|
|
8
|
+
icon?: ReactNode;
|
|
9
|
+
style?: CSSProperties;
|
|
10
|
+
tooltip?: boolean | string;
|
|
11
|
+
tooltipClassName?: string;
|
|
12
|
+
tooltipPlacement?: Placement;
|
|
13
|
+
};
|
|
14
|
+
type ExtDropdownBaseOptions = {
|
|
15
|
+
className?: string;
|
|
16
|
+
showArrow?: boolean;
|
|
17
|
+
content?: ReactNode;
|
|
18
|
+
dropdownClassName?: string;
|
|
19
|
+
itemClassName?: string;
|
|
20
|
+
activeClassName?: string;
|
|
21
|
+
style?: CSSProperties;
|
|
22
|
+
tooltip?: boolean | string;
|
|
23
|
+
tooltipClassName?: string;
|
|
24
|
+
tooltipPlacement?: Placement;
|
|
25
|
+
};
|
|
26
|
+
type ExtButtonComponentArgs<O, Extra extends object = {}> = {
|
|
27
|
+
options: O;
|
|
28
|
+
editor: Editor;
|
|
29
|
+
buttonClassName: string;
|
|
30
|
+
} & Extra;
|
|
31
|
+
type ExtDropdownComponentArgs<O, Extra extends object = {}> = {
|
|
32
|
+
options: O;
|
|
33
|
+
editor: Editor;
|
|
34
|
+
} & Extra;
|
|
35
|
+
type ExtButtonOptions<RootExtra extends object = {}, ComponentExtra extends object = {}, Base extends object = ExtButtonBaseOptions> = Base & RootExtra & {
|
|
36
|
+
component: (args: ExtButtonComponentArgs<Base & RootExtra, ComponentExtra>) => ReactNode;
|
|
37
|
+
};
|
|
38
|
+
type ExtDropdownOptions<RootExtra extends object = {}, ComponentExtra extends object = {}, Base extends object = ExtDropdownBaseOptions> = Base & RootExtra & {
|
|
39
|
+
component: (args: ExtDropdownComponentArgs<Base & RootExtra, ComponentExtra>) => ReactNode;
|
|
40
|
+
};
|
|
41
|
+
type ExtWithoutActiveOptions<RootExtra extends object = {}, ComponentExtra extends object = {}> = ExtButtonOptions<RootExtra, ComponentExtra, Omit<ExtButtonBaseOptions, "activeClassName">>;
|
|
42
|
+
|
|
43
|
+
export type { ExtButtonOptions as E, ExtDropdownOptions as a, ExtWithoutActiveOptions as b };
|