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.
Files changed (133) hide show
  1. package/LICENSE +57 -0
  2. package/README.md +15 -41
  3. package/dist/chunk-EN4BPI7N.mjs +1213 -0
  4. package/dist/chunk-FJQ4FZRS.mjs +98 -0
  5. package/dist/chunk-M4ORWR74.mjs +31 -0
  6. package/dist/chunk-SJFT7WNM.mjs +38 -0
  7. package/dist/chunk-W367UGID.mjs +55 -0
  8. package/dist/{chunk-FWCSY2DS.mjs → chunk-WNQUEZJF.mjs} +22 -1
  9. package/dist/{chunk-D47XME55.mjs → chunk-WXCHG3NQ.mjs} +8 -2
  10. package/dist/chunk-WZKGD3DD.mjs +231 -0
  11. package/dist/extension/backgroundcolor.d.mts +16 -0
  12. package/dist/extension/backgroundcolor.d.ts +16 -0
  13. package/dist/extension/backgroundcolor.js +668 -0
  14. package/dist/extension/backgroundcolor.mjs +107 -0
  15. package/dist/extension/base.d.mts +6 -0
  16. package/dist/extension/base.d.ts +6 -0
  17. package/dist/extension/base.js +65 -0
  18. package/dist/extension/base.mjs +22 -0
  19. package/dist/extension/blockquote.d.mts +10 -0
  20. package/dist/extension/blockquote.d.ts +10 -0
  21. package/dist/extension/blockquote.js +239 -0
  22. package/dist/extension/blockquote.mjs +46 -0
  23. package/dist/extension/bold.d.mts +7 -2
  24. package/dist/extension/bold.d.ts +7 -2
  25. package/dist/extension/bold.js +22 -45
  26. package/dist/extension/bold.mjs +13 -35
  27. package/dist/extension/bulletlist.d.mts +10 -0
  28. package/dist/extension/bulletlist.d.ts +10 -0
  29. package/dist/extension/bulletlist.js +241 -0
  30. package/dist/extension/bulletlist.mjs +46 -0
  31. package/dist/extension/clearformat.d.mts +1 -1
  32. package/dist/extension/clearformat.d.ts +1 -1
  33. package/dist/extension/clearformat.js +11 -6
  34. package/dist/extension/clearformat.mjs +8 -35
  35. package/dist/extension/color.d.mts +17 -0
  36. package/dist/extension/color.d.ts +17 -0
  37. package/dist/extension/color.js +580 -0
  38. package/dist/extension/color.mjs +12 -0
  39. package/dist/extension/emoji.d.mts +15 -0
  40. package/dist/extension/emoji.d.ts +15 -0
  41. package/dist/extension/emoji.js +421 -0
  42. package/dist/extension/emoji.mjs +158 -0
  43. package/dist/extension/font-family.d.mts +8 -11
  44. package/dist/extension/font-family.d.ts +8 -11
  45. package/dist/extension/font-family.js +11 -12
  46. package/dist/extension/font-family.mjs +10 -11
  47. package/dist/extension/font-size.d.mts +8 -11
  48. package/dist/extension/font-size.d.ts +8 -11
  49. package/dist/extension/font-size.js +10 -12
  50. package/dist/extension/font-size.mjs +9 -11
  51. package/dist/extension/heading.d.mts +10 -10
  52. package/dist/extension/heading.d.ts +10 -10
  53. package/dist/extension/heading.js +68 -80
  54. package/dist/extension/heading.mjs +40 -206
  55. package/dist/extension/history.d.mts +4 -2
  56. package/dist/extension/history.d.ts +4 -2
  57. package/dist/extension/history.js +16 -9
  58. package/dist/extension/history.mjs +16 -64
  59. package/dist/extension/horizontalrule.d.mts +10 -0
  60. package/dist/extension/horizontalrule.d.ts +10 -0
  61. package/dist/extension/horizontalrule.js +242 -0
  62. package/dist/extension/horizontalrule.mjs +42 -0
  63. package/dist/extension/image.d.mts +26 -0
  64. package/dist/extension/image.d.ts +26 -0
  65. package/dist/extension/image.js +1611 -0
  66. package/dist/extension/image.mjs +1153 -0
  67. package/dist/extension/indentoutdent.d.mts +21 -0
  68. package/dist/extension/indentoutdent.d.ts +21 -0
  69. package/dist/extension/indentoutdent.js +380 -0
  70. package/dist/extension/indentoutdent.mjs +164 -0
  71. package/dist/extension/italic.d.mts +7 -2
  72. package/dist/extension/italic.d.ts +7 -2
  73. package/dist/extension/italic.js +22 -45
  74. package/dist/extension/italic.mjs +14 -40
  75. package/dist/extension/lineheight.d.mts +15 -0
  76. package/dist/extension/lineheight.d.ts +15 -0
  77. package/dist/extension/lineheight.js +342 -0
  78. package/dist/extension/lineheight.mjs +87 -0
  79. package/dist/extension/link.d.mts +15 -0
  80. package/dist/extension/link.d.ts +15 -0
  81. package/dist/extension/link.js +588 -0
  82. package/dist/extension/link.mjs +278 -0
  83. package/dist/extension/orderedlist.d.mts +10 -0
  84. package/dist/extension/orderedlist.d.ts +10 -0
  85. package/dist/extension/orderedlist.js +241 -0
  86. package/dist/extension/orderedlist.mjs +46 -0
  87. package/dist/extension/strike.d.mts +8 -3
  88. package/dist/extension/strike.d.ts +8 -3
  89. package/dist/extension/strike.js +22 -45
  90. package/dist/extension/strike.mjs +14 -40
  91. package/dist/extension/subandsuperscript.d.mts +7 -10
  92. package/dist/extension/subandsuperscript.d.ts +7 -10
  93. package/dist/extension/subandsuperscript.js +66 -77
  94. package/dist/extension/subandsuperscript.mjs +18 -48
  95. package/dist/extension/subscript.d.mts +4 -2
  96. package/dist/extension/subscript.d.ts +4 -2
  97. package/dist/extension/subscript.js +20 -45
  98. package/dist/extension/subscript.mjs +10 -10
  99. package/dist/extension/superscript.d.mts +4 -2
  100. package/dist/extension/superscript.d.ts +4 -2
  101. package/dist/extension/superscript.js +20 -45
  102. package/dist/extension/superscript.mjs +10 -10
  103. package/dist/extension/table.d.mts +12 -0
  104. package/dist/extension/table.d.ts +12 -0
  105. package/dist/extension/table.js +585 -0
  106. package/dist/extension/table.mjs +324 -0
  107. package/dist/extension/tasklist.d.mts +10 -0
  108. package/dist/extension/tasklist.d.ts +10 -0
  109. package/dist/extension/tasklist.js +246 -0
  110. package/dist/extension/tasklist.mjs +52 -0
  111. package/dist/extension/textalign.d.mts +15 -0
  112. package/dist/extension/textalign.d.ts +15 -0
  113. package/dist/extension/textalign.js +404 -0
  114. package/dist/extension/textalign.mjs +79 -0
  115. package/dist/extension/underline.d.mts +7 -2
  116. package/dist/extension/underline.d.ts +7 -2
  117. package/dist/extension/underline.js +22 -45
  118. package/dist/extension/underline.mjs +14 -39
  119. package/dist/index.css +683 -31
  120. package/dist/index.d.mts +3 -1
  121. package/dist/index.d.ts +3 -1
  122. package/dist/index.js +306 -24
  123. package/dist/index.mjs +141 -13
  124. package/dist/tiptap-ext.type-B3TtT7-J.d.mts +43 -0
  125. package/dist/tiptap-ext.type-B3TtT7-J.d.ts +43 -0
  126. package/package.json +41 -28
  127. package/dist/chunk-2YUUKIIT.mjs +0 -149
  128. package/dist/chunk-7QOFJIQ3.mjs +0 -90
  129. package/dist/chunk-GSHINFPO.mjs +0 -53
  130. package/dist/chunk-LMOTHRGQ.mjs +0 -37
  131. package/dist/chunk-MBF77NHS.mjs +0 -37
  132. package/dist/tiptap-ext.type-DrneAC5G.d.mts +0 -39
  133. package/dist/tiptap-ext.type-DrneAC5G.d.ts +0 -39
@@ -0,0 +1,15 @@
1
+ import { Mark } from '@tiptap/react';
2
+ import { LinkOptions } from '@tiptap/extension-link';
3
+ import { a as ExtDropdownOptions } from '../tiptap-ext.type-B3TtT7-J.mjs';
4
+ import 'react';
5
+ import '@floating-ui/react';
6
+
7
+ type ExtLinkOptions = ExtDropdownOptions<LinkOptions & {
8
+ showInBubbleMenu?: boolean;
9
+ bubbleMenuPosition?: number;
10
+ }, {
11
+ dropdownContainerClassName: string;
12
+ }>;
13
+ declare const Links: Mark<ExtLinkOptions>;
14
+
15
+ export { Links };
@@ -0,0 +1,15 @@
1
+ import { Mark } from '@tiptap/react';
2
+ import { LinkOptions } from '@tiptap/extension-link';
3
+ import { a as ExtDropdownOptions } from '../tiptap-ext.type-B3TtT7-J.js';
4
+ import 'react';
5
+ import '@floating-ui/react';
6
+
7
+ type ExtLinkOptions = ExtDropdownOptions<LinkOptions & {
8
+ showInBubbleMenu?: boolean;
9
+ bubbleMenuPosition?: number;
10
+ }, {
11
+ dropdownContainerClassName: string;
12
+ }>;
13
+ declare const Links: Mark<ExtLinkOptions>;
14
+
15
+ export { Links };
@@ -0,0 +1,588 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __objRest = (source, exclude) => {
24
+ var target = {};
25
+ for (var prop in source)
26
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
27
+ target[prop] = source[prop];
28
+ if (source != null && __getOwnPropSymbols)
29
+ for (var prop of __getOwnPropSymbols(source)) {
30
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
31
+ target[prop] = source[prop];
32
+ }
33
+ return target;
34
+ };
35
+ var __export = (target, all) => {
36
+ for (var name in all)
37
+ __defProp(target, name, { get: all[name], enumerable: true });
38
+ };
39
+ var __copyProps = (to, from, except, desc) => {
40
+ if (from && typeof from === "object" || typeof from === "function") {
41
+ for (let key of __getOwnPropNames(from))
42
+ if (!__hasOwnProp.call(to, key) && key !== except)
43
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
44
+ }
45
+ return to;
46
+ };
47
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
48
+
49
+ // src/extension/Link.tsx
50
+ var Link_exports = {};
51
+ __export(Link_exports, {
52
+ Links: () => Links
53
+ });
54
+ module.exports = __toCommonJS(Link_exports);
55
+ var import_react11 = require("react");
56
+ var import_react12 = require("@tiptap/react");
57
+ var import_extension_link = require("@tiptap/extension-link");
58
+
59
+ // src/lib/icons/index.tsx
60
+ var import_jsx_runtime = require("react/jsx-runtime");
61
+ var ArrowIcon = (_a) => {
62
+ var _b = _a, { size = 17, className } = _b, props = __objRest(_b, ["size", "className"]);
63
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
64
+ "svg",
65
+ __spreadProps(__spreadValues({
66
+ xmlns: "http://www.w3.org/2000/svg",
67
+ viewBox: "0 0 48 48",
68
+ fill: "none",
69
+ stroke: "currentColor",
70
+ strokeWidth: 2,
71
+ strokeLinecap: "round",
72
+ strokeLinejoin: "round",
73
+ width: size,
74
+ height: size,
75
+ className
76
+ }, props), {
77
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { fill: "currentColor", stroke: "currentColor", strokeLinejoin: "round", strokeWidth: "4", d: "M36 19L24 31L12 19z" })
78
+ })
79
+ );
80
+ };
81
+ var LinkIcon = (_a) => {
82
+ var _b = _a, { size = 17, className } = _b, props = __objRest(_b, ["size", "className"]);
83
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
84
+ "svg",
85
+ __spreadProps(__spreadValues({
86
+ xmlns: "http://www.w3.org/2000/svg",
87
+ width: size,
88
+ height: size,
89
+ viewBox: "0 0 24 24",
90
+ fill: "none",
91
+ stroke: "currentColor",
92
+ strokeWidth: "2",
93
+ strokeLinecap: "round",
94
+ strokeLinejoin: "round"
95
+ }, props), {
96
+ children: [
97
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }),
98
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })
99
+ ]
100
+ })
101
+ );
102
+ };
103
+
104
+ // src/lib/components/DropdownComponent.tsx
105
+ var import_react4 = require("react");
106
+ var import_tailwind_merge2 = require("tailwind-merge");
107
+
108
+ // src/lib/components/_com/Tooltip.tsx
109
+ var import_react = require("react");
110
+ var import_react2 = require("@floating-ui/react");
111
+ var import_react3 = require("motion/react");
112
+ var import_tailwind_merge = require("tailwind-merge");
113
+ var import_jsx_runtime2 = require("react/jsx-runtime");
114
+ var Tooltip = ({ placement = "top", children, content, className }) => {
115
+ const [open, setOpen] = (0, import_react.useState)(false);
116
+ const { x, y, refs, strategy, context, placement: resolvedPlacement } = (0, import_react2.useFloating)({
117
+ open,
118
+ onOpenChange: setOpen,
119
+ placement,
120
+ middleware: [(0, import_react2.offset)(8), (0, import_react2.flip)(), (0, import_react2.shift)({ padding: 8 })],
121
+ whileElementsMounted: import_react2.autoUpdate
122
+ });
123
+ const hover = (0, import_react2.useHover)(context);
124
+ const dismiss = (0, import_react2.useDismiss)(context);
125
+ const { getReferenceProps, getFloatingProps } = (0, import_react2.useInteractions)([hover, dismiss]);
126
+ const id = (0, import_react.useId)();
127
+ function mergeRefs(...refsToMerge) {
128
+ return (node) => {
129
+ for (const r of refsToMerge) {
130
+ if (!r) continue;
131
+ if (typeof r === "function") r(node);
132
+ else r.current = node;
133
+ }
134
+ };
135
+ }
136
+ const side = resolvedPlacement.split("-")[0];
137
+ const enterOffset = 6;
138
+ const getInitial = () => {
139
+ switch (side) {
140
+ case "top":
141
+ return { opacity: 0, y: enterOffset };
142
+ case "bottom":
143
+ return { opacity: 0, y: -enterOffset };
144
+ case "left":
145
+ return { opacity: 0, x: enterOffset };
146
+ case "right":
147
+ return { opacity: 0, x: -enterOffset };
148
+ default:
149
+ return { opacity: 0 };
150
+ }
151
+ };
152
+ const getExit = () => __spreadProps(__spreadValues({}, getInitial()), { opacity: 0 });
153
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react.Fragment, { children: [
154
+ (0, import_react.isValidElement)(children) ? (0, import_react.cloneElement)(children, __spreadProps(__spreadValues({}, getReferenceProps({
155
+ onFocus: () => setOpen(true),
156
+ onBlur: () => setOpen(false),
157
+ "aria-describedby": open ? id : void 0
158
+ /* eslint-disable @typescript-eslint/no-explicit-any */
159
+ })), {
160
+ /* eslint-disable @typescript-eslint/no-explicit-any */
161
+ ref: mergeRefs(children.props.ref, refs.setReference)
162
+ })) : children,
163
+ /* @__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)(
164
+ import_react3.motion.div,
165
+ __spreadProps(__spreadValues({
166
+ ref: refs.setFloating
167
+ }, getFloatingProps({
168
+ role: "tooltip",
169
+ id,
170
+ style: {
171
+ position: strategy,
172
+ top: y != null ? y : 0,
173
+ left: x != null ? x : 0,
174
+ pointerEvents: "none"
175
+ }
176
+ })), {
177
+ initial: getInitial(),
178
+ animate: { opacity: 1, x: 0, y: 0, scale: 1 },
179
+ exit: getExit(),
180
+ transition: { type: "spring", stiffness: 420, damping: 30, mass: 0.6 },
181
+ 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),
182
+ children: content
183
+ }),
184
+ "tooltip"
185
+ ) }) })
186
+ ] });
187
+ };
188
+ var Tooltip_default = Tooltip;
189
+
190
+ // src/lib/components/DropdownComponent.tsx
191
+ var import_react5 = require("@floating-ui/react");
192
+ var import_react6 = require("motion/react");
193
+ var import_jsx_runtime3 = require("react/jsx-runtime");
194
+ var DropdownComponent = ({ children, className, showArrow = true, content, dropdownClassName, style, tooltip, tooltipClassName, tooltipPlacement, _tooltipContent, _internalContent, _dropdownClassName }) => {
195
+ const [open, setOpen] = (0, import_react4.useState)(false);
196
+ const { x, y, refs, strategy, context } = (0, import_react5.useFloating)({
197
+ open,
198
+ onOpenChange: setOpen,
199
+ placement: "bottom",
200
+ middleware: [(0, import_react5.offset)(4), (0, import_react5.flip)(), (0, import_react5.shift)({ padding: 8 })],
201
+ whileElementsMounted: import_react5.autoUpdate
202
+ });
203
+ const click = (0, import_react5.useClick)(context);
204
+ const dismiss = (0, import_react5.useDismiss)(context);
205
+ const { getReferenceProps, getFloatingProps } = (0, import_react5.useInteractions)([click, dismiss]);
206
+ const listId = (0, import_react4.useId)();
207
+ const tooltipContent = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { children: typeof tooltip === "string" ? tooltip : _tooltipContent });
208
+ const initialMotion = { opacity: 0, scale: 0.95 };
209
+ const animateMotion = { opacity: 1, scale: 1 };
210
+ const enhancedChildren = import_react4.Children.map(children, (child) => {
211
+ if (!(0, import_react4.isValidElement)(child)) return child;
212
+ const prevOnSelect = child.props.onSelect;
213
+ const combinedOnSelect = () => {
214
+ prevOnSelect == null ? void 0 : prevOnSelect();
215
+ setOpen(false);
216
+ };
217
+ return (0, import_react4.cloneElement)(child, {
218
+ onSelect: prevOnSelect ? combinedOnSelect : void 0,
219
+ open,
220
+ onClose: () => setOpen(false)
221
+ });
222
+ });
223
+ const btn = /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
224
+ "button",
225
+ __spreadProps(__spreadValues({}, getReferenceProps({
226
+ ref: refs.setReference,
227
+ type: "button",
228
+ "aria-controls": open ? listId : void 0
229
+ })), {
230
+ className: (0, import_tailwind_merge2.twMerge)(
231
+ "p-1.5 rounded-md hover:bg-gray-100 items-center flex gap-x-0.5",
232
+ className
233
+ ),
234
+ style,
235
+ children: [
236
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: content != null ? content : _internalContent }),
237
+ showArrow && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ArrowIcon, { size: 14, className: "text-gray-500 block" })
238
+ ]
239
+ })
240
+ );
241
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react4.Fragment, { children: [
242
+ tooltip === false ? btn : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
243
+ Tooltip_default,
244
+ {
245
+ content: tooltipContent,
246
+ className: tooltipClassName,
247
+ placement: tooltipPlacement,
248
+ children: btn
249
+ }
250
+ ),
251
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react5.FloatingPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react6.AnimatePresence, { children: open && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
252
+ import_react6.motion.div,
253
+ __spreadProps(__spreadValues({}, getFloatingProps({
254
+ ref: refs.setFloating,
255
+ style: {
256
+ position: strategy,
257
+ top: y != null ? y : 0,
258
+ left: x != null ? x : 0
259
+ },
260
+ role: "listbox",
261
+ id: listId
262
+ })), {
263
+ initial: initialMotion,
264
+ animate: animateMotion,
265
+ exit: initialMotion,
266
+ className: (0, import_tailwind_merge2.twMerge)("bg-white border border-solid border-gray-200 p-2 space-y-1 rounded-lg shadow-sm shadow-gray-200/40 z-99999999 max-h-125 overflow-auto", _dropdownClassName, dropdownClassName),
267
+ children: enhancedChildren
268
+ })
269
+ ) }) })
270
+ ] });
271
+ };
272
+ var DropdownComponent_default = DropdownComponent;
273
+
274
+ // src/lib/components/LinkComponent.tsx
275
+ var import_react7 = require("react");
276
+
277
+ // src/lib/components/InputComponent.tsx
278
+ var import_jsx_runtime4 = require("react/jsx-runtime");
279
+ var InputComponent = (_a) => {
280
+ var _b = _a, { id, label, containerClassName = "", icon } = _b, rest = __objRest(_b, ["id", "label", "containerClassName", "icon"]);
281
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: containerClassName, children: [
282
+ label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("label", { htmlFor: id, className: "block mb-1 text-gray-700 text-base font-medium", children: label }),
283
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
284
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
285
+ "input",
286
+ __spreadProps(__spreadValues({}, rest), {
287
+ className: "border border-solid border-gray-200 px-2 py-1.5 w-full rounded-md focus:outline-none"
288
+ })
289
+ ),
290
+ icon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: icon })
291
+ ] })
292
+ ] });
293
+ };
294
+ var InputComponent_default = InputComponent;
295
+
296
+ // src/lib/components/CheckboxComponent.tsx
297
+ var import_tailwind_merge3 = require("tailwind-merge");
298
+ var import_jsx_runtime5 = require("react/jsx-runtime");
299
+ var CheckboxComponent = ({ id, checked, onChange, className, label, labelPlacement = "right", bottomSpace = true, customLabel, errorMessage = false, containerClassName = "" }) => {
300
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: (0, import_tailwind_merge3.twMerge)(`flex items-start ${labelPlacement === "left" ? "gap-7" : "gap-2"} ${bottomSpace && "mb-6"}`, containerClassName), children: [
301
+ label && labelPlacement === "left" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: id, className: `select-none cursor-pointer block text-[15px] ${errorMessage ? "text-error" : "text-gray-700"}`, children: label }),
302
+ customLabel && labelPlacement === "left" && customLabel,
303
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative mt-0.5", children: [
304
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
305
+ "input",
306
+ {
307
+ type: "checkbox",
308
+ id,
309
+ className: `peer appearance-none border border-gray-300 w-4 h-4 rounded align-middle block bg-white checked:border-gray-700 checked:bg-gray-700 cursor-pointer ${className}`,
310
+ checked,
311
+ onChange: (e) => onChange(e.target.checked)
312
+ }
313
+ ),
314
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-white p-px pointer-events-none opacity-0 invisible peer-checked:opacity-100 peer-checked:visible", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-3.5 w-3.5", viewBox: "0 0 20 20", fill: "currentColor", stroke: "currentColor", strokeWidth: "1", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) })
315
+ ] }),
316
+ customLabel && labelPlacement === "right" && customLabel,
317
+ label && labelPlacement === "right" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("label", { htmlFor: id, className: `select-none cursor-pointer block text-[15px] ${errorMessage ? "text-error" : "text-gray-700"}`, children: label })
318
+ ] });
319
+ };
320
+ var CheckboxComponent_default = CheckboxComponent;
321
+
322
+ // src/lib/components/LinkComponent.tsx
323
+ var import_jsx_runtime6 = require("react/jsx-runtime");
324
+ var LinkComponent = ({ editor, onClose, open }) => {
325
+ const [form, setForm] = (0, import_react7.useState)({
326
+ text: "",
327
+ link: "",
328
+ target: "_self"
329
+ });
330
+ const textInputRef = (0, import_react7.useRef)(null);
331
+ const linkInputRef = (0, import_react7.useRef)(null);
332
+ const onApply = () => {
333
+ const { link, text, target } = form;
334
+ if (!link) {
335
+ editor.chain().extendMarkRange("link").unsetLink().run();
336
+ return;
337
+ }
338
+ if (editor.isActive("link")) {
339
+ editor.chain().extendMarkRange("link").run();
340
+ }
341
+ const { from } = editor.state.selection;
342
+ const insertedLength = text.length;
343
+ editor.chain().insertContent({
344
+ type: "text",
345
+ text,
346
+ marks: [
347
+ {
348
+ type: "link",
349
+ attrs: {
350
+ href: /^https?:\/\//i.test(link) ? link : `https://${link}`,
351
+ target
352
+ }
353
+ }
354
+ ]
355
+ }).setLink({ href: link }).setTextSelection({ from, to: from + insertedLength }).focus().run();
356
+ onClose == null ? void 0 : onClose();
357
+ };
358
+ (0, import_react7.useEffect)(() => {
359
+ const updateForm = () => {
360
+ var _a, _b;
361
+ const { from, to, empty } = editor.state.selection;
362
+ let text = "";
363
+ let link = "";
364
+ let target = "_self";
365
+ const node = editor.state.doc.nodeAt(from);
366
+ if (node) {
367
+ const linkMark = node.marks.find((mark) => mark.type.name === "link");
368
+ if (linkMark) {
369
+ link = linkMark.attrs.href || "";
370
+ target = linkMark.attrs.target;
371
+ if (empty) {
372
+ text = node.text || "";
373
+ } else {
374
+ text = editor.state.doc.textBetween(from, to, " ");
375
+ }
376
+ } else {
377
+ text = editor.state.doc.textBetween(from, to, " ");
378
+ }
379
+ }
380
+ if (!node) {
381
+ text = editor.state.doc.textBetween(from, to, " ");
382
+ }
383
+ setForm({ link, text, target });
384
+ if (open) {
385
+ if (text === "") {
386
+ (_a = textInputRef.current) == null ? void 0 : _a.focus();
387
+ } else {
388
+ (_b = linkInputRef.current) == null ? void 0 : _b.focus();
389
+ }
390
+ }
391
+ };
392
+ updateForm();
393
+ editor.on("selectionUpdate", updateForm);
394
+ return () => {
395
+ editor.off("selectionUpdate", updateForm);
396
+ };
397
+ }, [editor, open]);
398
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { children: [
399
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
400
+ InputComponent_default,
401
+ {
402
+ id: "text",
403
+ label: "Text",
404
+ value: form.text,
405
+ onChange: (e) => setForm((prev) => __spreadProps(__spreadValues({}, prev), { text: e.target.value })),
406
+ ref: textInputRef
407
+ }
408
+ ),
409
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
410
+ InputComponent_default,
411
+ {
412
+ id: "link",
413
+ label: "Link",
414
+ value: form.link,
415
+ onChange: (e) => setForm((prev) => __spreadProps(__spreadValues({}, prev), { link: e.target.value })),
416
+ placeholder: "https://yourlink.com",
417
+ ref: linkInputRef,
418
+ containerClassName: "mt-3 mb-2.5"
419
+ }
420
+ ),
421
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
422
+ CheckboxComponent_default,
423
+ {
424
+ id: "openNewTab",
425
+ checked: form.target === "_blank",
426
+ onChange: () => setForm((prev) => __spreadProps(__spreadValues({}, prev), { target: prev.target === "_self" ? "_blank" : "_self" })),
427
+ label: "Open in a new tab?",
428
+ bottomSpace: false
429
+ }
430
+ ),
431
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("button", { type: "button", className: "bg-gray-800 text-white w-full py-1.5 rounded-lg mt-5", onClick: onApply, children: "Apply Now" })
432
+ ] });
433
+ };
434
+ var LinkComponent_default = LinkComponent;
435
+
436
+ // src/lib/components/LinkMenuComponent.tsx
437
+ var import_react9 = require("react");
438
+ var import_react10 = require("@floating-ui/react");
439
+
440
+ // src/lib/context/editor.context.tsx
441
+ var import_react8 = require("react");
442
+ var import_jsx_runtime7 = require("react/jsx-runtime");
443
+ var EditorContext = (0, import_react8.createContext)({ editor: null });
444
+ var useEditor = () => {
445
+ const ctx = (0, import_react8.useContext)(EditorContext);
446
+ if (!ctx) throw new Error("<Toolbar/> & <Content/> component must be used inside <Editor>...</Editor/>");
447
+ return ctx;
448
+ };
449
+
450
+ // src/lib/components/LinkMenuComponent.tsx
451
+ var import_jsx_runtime8 = require("react/jsx-runtime");
452
+ var LinkMenuComponent = () => {
453
+ const { editor } = useEditor();
454
+ const [pop, setPop] = (0, import_react9.useState)({ open: false });
455
+ const { refs, floatingStyles, context } = (0, import_react10.useFloating)({
456
+ open: pop.open,
457
+ onOpenChange: (o) => setPop((s) => o ? s : { open: false }),
458
+ placement: "bottom-start",
459
+ whileElementsMounted: import_react10.autoUpdate,
460
+ strategy: "fixed",
461
+ middleware: [(0, import_react10.offset)(8), (0, import_react10.flip)(), (0, import_react10.shift)({ padding: 8 })]
462
+ });
463
+ const dismiss = (0, import_react10.useDismiss)(context, { outsidePressEvent: "pointerdown" });
464
+ const { getFloatingProps } = (0, import_react10.useInteractions)([dismiss]);
465
+ (0, import_react9.useEffect)(() => {
466
+ if (!editor) return;
467
+ const dom = editor.view.dom;
468
+ const onClick = (e) => {
469
+ var _a, _b;
470
+ const target = e.target;
471
+ if (!target) return;
472
+ const a = target.closest("a[href]");
473
+ if (!a || !dom.contains(a)) return;
474
+ if (e.metaKey || e.ctrlKey) return;
475
+ e.preventDefault();
476
+ e.stopPropagation();
477
+ refs.setReference(a);
478
+ const href = (_a = a.getAttribute("href")) != null ? _a : "";
479
+ const targetBlank = ((_b = a.getAttribute("target")) != null ? _b : "") === "_blank";
480
+ setPop({ open: true, href, targetBlank });
481
+ };
482
+ dom.addEventListener("click", onClick, true);
483
+ return () => dom.removeEventListener("click", onClick, true);
484
+ }, [editor, refs]);
485
+ const applyLink = () => {
486
+ if (!editor || !pop.open) return;
487
+ editor.chain().focus().extendMarkRange("link").setLink({ href: pop.href, target: pop.targetBlank ? "_blank" : null }).run();
488
+ setPop({ open: false });
489
+ };
490
+ const removeLink = () => {
491
+ if (!editor) return;
492
+ editor.chain().focus().extendMarkRange("link").unsetLink().run();
493
+ setPop({ open: false });
494
+ };
495
+ if (!editor || !pop.open) return null;
496
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", __spreadProps(__spreadValues({ ref: refs.setFloating, style: floatingStyles }, getFloatingProps()), { className: "z-99999999 w-66 rounded-xl border border-gray-200 bg-white p-3 shadow-lg", children: [
497
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
498
+ InputComponent_default,
499
+ {
500
+ id: "link",
501
+ label: "Link",
502
+ value: pop.href,
503
+ onMouseDown: (e) => e.stopPropagation(),
504
+ onChange: (e) => setPop((s) => s.open ? __spreadProps(__spreadValues({}, s), { href: e.target.value }) : s),
505
+ placeholder: "https://yourlink.com",
506
+ containerClassName: "mb-2.5"
507
+ }
508
+ ),
509
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
510
+ CheckboxComponent_default,
511
+ {
512
+ id: "openNewTab",
513
+ checked: pop.targetBlank,
514
+ onChange: (e) => setPop((s) => s.open ? __spreadProps(__spreadValues({}, s), { targetBlank: e }) : s),
515
+ label: "Open in a new tab?",
516
+ bottomSpace: false
517
+ }
518
+ ),
519
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "mt-3 flex gap-2", children: [
520
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { className: "rounded-lg border bg-gray-700 text-white border-gray-700 px-3 py-1 text-sm", onMouseDown: (e) => e.stopPropagation(), onClick: applyLink, children: "Apply" }),
521
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { className: "rounded-lg border border-gray-200 px-3 py-1 text-sm", onMouseDown: (e) => e.stopPropagation(), onClick: removeLink, children: "Unlink" }),
522
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { className: "ml-auto rounded-lg border border-gray-200 px-3 py-1 text-sm", onMouseDown: (e) => e.stopPropagation(), onClick: () => setPop({ open: false }), children: "Cancel" })
523
+ ] })
524
+ ] }));
525
+ };
526
+ var LinkMenuComponent_default = LinkMenuComponent;
527
+
528
+ // src/extension/Link.tsx
529
+ var import_jsx_runtime9 = require("react/jsx-runtime");
530
+ var Links = import_extension_link.Link.extend({
531
+ inclusive: false,
532
+ parseHTML() {
533
+ return [
534
+ {
535
+ tag: 'a[href]:not([data-type="button"]):not([href *= "javascript:" i])'
536
+ }
537
+ ];
538
+ },
539
+ renderHTML({ HTMLAttributes }) {
540
+ return [
541
+ "a",
542
+ (0, import_react12.mergeAttributes)(this.options.HTMLAttributes, HTMLAttributes, {
543
+ class: "link"
544
+ }),
545
+ 0
546
+ ];
547
+ },
548
+ addOptions() {
549
+ var _a;
550
+ const parent = (_a = this.parent) == null ? void 0 : _a.call(this);
551
+ return __spreadProps(__spreadValues({}, parent != null ? parent : {}), {
552
+ openOnClick: false,
553
+ showInBubbleMenu: true,
554
+ bubbleMenuPosition: 9,
555
+ component: ({ options, editor, dropdownContainerClassName }) => {
556
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react11.Fragment, { children: [
557
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
558
+ DropdownComponent_default,
559
+ {
560
+ className: options.className,
561
+ showArrow: options.showArrow || false,
562
+ content: options.content,
563
+ dropdownClassName: options.dropdownClassName,
564
+ style: options.style,
565
+ tooltip: options.tooltip,
566
+ tooltipClassName: options.tooltipClassName,
567
+ tooltipPlacement: options.tooltipPlacement,
568
+ _tooltipContent: "Link",
569
+ _internalContent: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(LinkIcon, {}),
570
+ _dropdownClassName: "w-66 " + dropdownContainerClassName,
571
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
572
+ LinkComponent_default,
573
+ {
574
+ editor
575
+ }
576
+ )
577
+ }
578
+ ),
579
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(LinkMenuComponent_default, {})
580
+ ] });
581
+ }
582
+ });
583
+ }
584
+ });
585
+ // Annotate the CommonJS export names for ESM import in node:
586
+ 0 && (module.exports = {
587
+ Links
588
+ });