@ctzhian/tiptap 1.11.4 → 1.12.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.
Files changed (52) hide show
  1. package/dist/Editor/demo.js +17 -22
  2. package/dist/EditorMarkdown/index.js +1 -1
  3. package/dist/asset/css/index.css +19 -8
  4. package/dist/component/ActionDropdown/index.d.ts +25 -0
  5. package/dist/component/ActionDropdown/index.js +147 -0
  6. package/dist/component/CustomDragHandle/index.js +2 -2
  7. package/dist/component/FloatingPopover/index.d.ts +2 -0
  8. package/dist/component/FloatingPopover/index.js +7 -1
  9. package/dist/component/HoverPopover/index.d.ts +29 -0
  10. package/dist/component/HoverPopover/index.js +143 -0
  11. package/dist/component/Icons/chrome-icon.d.ts +6 -0
  12. package/dist/component/Icons/chrome-icon.js +31 -0
  13. package/dist/component/Icons/edit-line-icon.d.ts +6 -0
  14. package/dist/component/Icons/edit-line-icon.js +13 -0
  15. package/dist/component/Icons/file-icon.d.ts +6 -0
  16. package/dist/component/Icons/file-icon.js +20 -0
  17. package/dist/component/Icons/index.d.ts +3 -0
  18. package/dist/component/Icons/index.js +3 -0
  19. package/dist/component/index.d.ts +2 -0
  20. package/dist/component/index.js +2 -0
  21. package/dist/extension/component/Alert/index.js +73 -85
  22. package/dist/extension/component/Attachment/AttachmentContent.d.ts +14 -0
  23. package/dist/extension/component/Attachment/AttachmentContent.js +142 -0
  24. package/dist/extension/component/Attachment/index.js +144 -201
  25. package/dist/extension/component/CodeBlock/Readonly.js +42 -35
  26. package/dist/extension/component/CodeBlock/index.js +137 -90
  27. package/dist/extension/component/Image/Insert.js +41 -26
  28. package/dist/extension/component/Image/Readonly.js +13 -6
  29. package/dist/extension/component/Image/index.d.ts +1 -0
  30. package/dist/extension/component/Image/index.js +234 -92
  31. package/dist/extension/component/Link/Insert.js +1 -1
  32. package/dist/extension/component/Link/LinkContent.d.ts +13 -0
  33. package/dist/extension/component/Link/LinkContent.js +169 -0
  34. package/dist/extension/component/Link/index.js +182 -264
  35. package/dist/extension/component/MentionList/index.js +1 -1
  36. package/dist/extension/index.js +1 -1
  37. package/dist/index.css +65 -63
  38. package/dist/themes/dark.js +2 -2
  39. package/dist/themes/light.d.ts +1 -1
  40. package/dist/themes/light.js +2 -2
  41. package/dist/themes/palette.d.ts +1 -1
  42. package/package.json +1 -1
  43. package/dist/extension/component/Attachment/Readonly.d.ts +0 -9
  44. package/dist/extension/component/Attachment/Readonly.js +0 -91
  45. package/dist/extension/component/CustomLink/Insert.d.ts +0 -0
  46. package/dist/extension/component/CustomLink/Insert.js +0 -176
  47. package/dist/extension/component/CustomLink/Readonly.d.ts +0 -0
  48. package/dist/extension/component/CustomLink/Readonly.js +0 -106
  49. package/dist/extension/component/CustomLink/index.d.ts +0 -0
  50. package/dist/extension/component/CustomLink/index.js +0 -440
  51. package/dist/extension/component/Link/Readonly.d.ts +0 -8
  52. package/dist/extension/component/Link/Readonly.js +0 -110
@@ -12,9 +12,9 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
12
12
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
13
13
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
14
14
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
15
- import { ArrowDownSLineIcon, FileCopyLineIcon, TitleIcon } from "../../../component/Icons";
15
+ import { ArrowDownSLineIcon, FileCopyLineIcon } from "../../../component/Icons";
16
16
  import { languages } from "../../../contants/highlight";
17
- import { Box, MenuItem, Select, Stack, TextField } from '@mui/material';
17
+ import { Box, Divider, ListSubheader, MenuItem, Select, Stack, TextField } from '@mui/material';
18
18
  import { NodeViewContent, NodeViewWrapper } from '@tiptap/react';
19
19
  import React, { useCallback, useState } from 'react';
20
20
  import ReadonlyCodeBlock from "./Readonly";
@@ -35,7 +35,26 @@ var CodeBlockView = function CodeBlockView(props) {
35
35
  _useState6 = _slicedToArray(_useState5, 2),
36
36
  titleValue = _useState6[0],
37
37
  setTitleValue = _useState6[1];
38
+ var _useState7 = useState(''),
39
+ _useState8 = _slicedToArray(_useState7, 2),
40
+ searchText = _useState8[0],
41
+ setSearchText = _useState8[1];
42
+ var menuListRef = React.useRef(null);
38
43
  var attrs = node.attrs;
44
+ var filteredLanguages = React.useMemo(function () {
45
+ if (!searchText) return languages;
46
+ var lowerSearch = searchText.toLowerCase();
47
+ return languages.filter(function (lang) {
48
+ return lang.label.toLowerCase().includes(lowerSearch) || lang.value.toLowerCase().includes(lowerSearch);
49
+ });
50
+ }, [searchText]);
51
+
52
+ // 当搜索文本改变时,重置滚动位置
53
+ React.useEffect(function () {
54
+ if (menuListRef.current) {
55
+ menuListRef.current.scrollTop = 0;
56
+ }
57
+ }, [searchText]);
39
58
  var handleLanguageChange = useCallback(function (language) {
40
59
  updateAttributes({
41
60
  language: language
@@ -105,7 +124,7 @@ var CodeBlockView = function CodeBlockView(props) {
105
124
  }, /*#__PURE__*/React.createElement(Box, {
106
125
  component: "pre",
107
126
  sx: {
108
- p: '1.75rem 1rem 0.75rem',
127
+ p: '0.75rem 1rem',
109
128
  m: 0,
110
129
  borderRadius: showTitleInput ? '6px 6px 0 0 !important' : '6px',
111
130
  overflow: 'hidden'
@@ -116,19 +135,68 @@ var CodeBlockView = function CodeBlockView(props) {
116
135
  justifyContent: "space-between",
117
136
  className: "codeblock-toolbar",
118
137
  sx: {
119
- position: 'absolute',
120
- top: 0,
121
- left: 0,
122
- right: 0,
123
- px: 0.5,
124
- pt: 0.5,
125
- zIndex: 1
138
+ zIndex: 1,
139
+ mb: 2
140
+ }
141
+ }, showTitleInput ? /*#__PURE__*/React.createElement(Box, {
142
+ sx: {
143
+ py: 0.5,
144
+ flex: 1,
145
+ borderRadius: '0 0 4px 4px',
146
+ bgcolor: 'background.paper3',
147
+ boxSizing: 'border-box',
148
+ letterSpacing: '0.01rem'
149
+ }
150
+ }, /*#__PURE__*/React.createElement(TextField, {
151
+ fullWidth: true,
152
+ size: "small",
153
+ placeholder: "\u8BF7\u8F93\u5165\u4EE3\u7801\u5757\u540D\u79F0",
154
+ value: titleValue,
155
+ onChange: handleTitleChange,
156
+ onKeyDown: handleTitleKeyDown,
157
+ onBlur: handleTitleSubmit,
158
+ autoFocus: true,
159
+ sx: {
160
+ '& .MuiInputBase-input': {
161
+ p: 0,
162
+ height: '0.875rem',
163
+ lineHeight: 1,
164
+ fontSize: '0.875rem',
165
+ color: 'text.auxiliary'
166
+ },
167
+ '& .MuiInputBase-input::placeholder': {
168
+ fontSize: '0.875rem'
169
+ },
170
+ '& .MuiOutlinedInput-root': {
171
+ '& fieldset': {
172
+ border: 'none',
173
+ top: 0,
174
+ p: 0
175
+ }
176
+ }
177
+ }
178
+ })) : /*#__PURE__*/React.createElement(Box, {
179
+ sx: {
180
+ flex: 1,
181
+ fontSize: '0.875rem',
182
+ color: 'text.auxiliary',
183
+ letterSpacing: '0.01rem'
184
+ },
185
+ onClick: handleTitleToggle
186
+ }, attrs.title || '代码块'), /*#__PURE__*/React.createElement(Stack, {
187
+ direction: "row",
188
+ alignItems: "center",
189
+ sx: {
190
+ flexShrink: 0
126
191
  }
127
192
  }, /*#__PURE__*/React.createElement(Select, {
128
193
  value: attrs.language || 'auto',
129
194
  onChange: function onChange(e) {
130
195
  return handleLanguageChange(e.target.value);
131
196
  },
197
+ onClose: function onClose() {
198
+ return setSearchText('');
199
+ },
132
200
  size: "small",
133
201
  variant: "outlined",
134
202
  sx: {
@@ -162,32 +230,79 @@ var CodeBlockView = function CodeBlockView(props) {
162
230
  },
163
231
  MenuProps: {
164
232
  PaperProps: {
165
- style: {
166
- maxHeight: 360
233
+ sx: {
234
+ maxHeight: 400,
235
+ p: 0
167
236
  }
237
+ },
238
+ autoFocus: false,
239
+ MenuListProps: {
240
+ ref: menuListRef
168
241
  }
169
242
  }
170
- }, attrs.language && !languages.find(function (it) {
243
+ }, /*#__PURE__*/React.createElement(ListSubheader, {
244
+ sx: {
245
+ position: 'sticky',
246
+ top: 0,
247
+ bgcolor: 'background.default',
248
+ zIndex: 1,
249
+ p: 0.5,
250
+ lineHeight: 1
251
+ }
252
+ }, /*#__PURE__*/React.createElement(TextField, {
253
+ size: "small",
254
+ autoFocus: true,
255
+ placeholder: "\u641C\u7D22\u8BED\u8A00...",
256
+ fullWidth: true,
257
+ value: searchText,
258
+ onChange: function onChange(e) {
259
+ return setSearchText(e.target.value);
260
+ },
261
+ onKeyDown: function onKeyDown(e) {
262
+ e.stopPropagation();
263
+ },
264
+ sx: {
265
+ '& .MuiInputBase-root': {
266
+ fontSize: '0.75rem'
267
+ }
268
+ }
269
+ })), searchText && /*#__PURE__*/React.createElement(MenuItem, {
270
+ value: searchText,
271
+ sx: {
272
+ fontSize: '0.75rem',
273
+ height: '30px',
274
+ m: 0.5,
275
+ bgcolor: 'action.hover',
276
+ fontWeight: 500
277
+ }
278
+ }, searchText, filteredLanguages.length === 0 && ' (自定义)'), !searchText && attrs.language && !languages.find(function (it) {
171
279
  return it.value === attrs.language;
172
280
  }) && /*#__PURE__*/React.createElement(MenuItem, {
173
281
  value: attrs.language,
174
282
  sx: {
175
- fontSize: '0.75rem'
283
+ fontSize: '0.75rem',
284
+ height: '30px',
285
+ m: 0.5
176
286
  }
177
- }, attrs.language), languages.map(function (lang) {
287
+ }, attrs.language), filteredLanguages.map(function (lang) {
178
288
  return /*#__PURE__*/React.createElement(MenuItem, {
179
289
  key: lang.value,
180
290
  value: lang.value,
181
291
  sx: {
182
- fontSize: '0.75rem'
292
+ fontSize: '0.75rem',
293
+ height: '30px',
294
+ m: 0.5
183
295
  }
184
296
  }, lang.label);
185
- })), /*#__PURE__*/React.createElement(Stack, {
186
- direction: "row",
297
+ })), /*#__PURE__*/React.createElement(Divider, {
298
+ orientation: "vertical",
299
+ flexItem: true,
187
300
  sx: {
188
- userSelect: 'none'
301
+ height: '1.25rem',
302
+ alignSelf: 'center',
303
+ borderColor: 'divider'
189
304
  }
190
- }, /*#__PURE__*/React.createElement(Stack, {
305
+ }), /*#__PURE__*/React.createElement(Stack, {
191
306
  direction: "row",
192
307
  alignItems: "center",
193
308
  gap: 0.5,
@@ -211,81 +326,13 @@ var CodeBlockView = function CodeBlockView(props) {
211
326
  fontSize: '0.75rem',
212
327
  lineHeight: 1
213
328
  }
214
- }, copyText)), /*#__PURE__*/React.createElement(Stack, {
215
- direction: "row",
216
- alignItems: "center",
217
- gap: 0.5,
218
- onClick: handleTitleToggle,
219
- sx: {
220
- px: 1,
221
- py: 0.5,
222
- cursor: 'pointer',
223
- bgcolor: 'inherit',
224
- color: 'inherit'
225
- }
226
- }, /*#__PURE__*/React.createElement(TitleIcon, {
227
- sx: {
228
- fontSize: '0.875rem',
229
- color: 'inherit'
230
- }
231
- }), /*#__PURE__*/React.createElement(Box, {
232
- sx: {
233
- fontSize: '0.75rem',
234
- lineHeight: 1
235
- }
236
- }, "\u6807\u9898")))), /*#__PURE__*/React.createElement(NodeViewContent, {
329
+ }, copyText)))), /*#__PURE__*/React.createElement(NodeViewContent, {
237
330
  style: {
238
331
  margin: 0,
239
332
  fontSize: '0.875rem',
240
- lineHeight: '1.5',
241
333
  whiteSpace: 'pre-wrap',
242
334
  wordBreak: 'break-word'
243
335
  }
244
- })), showTitleInput && /*#__PURE__*/React.createElement(Box, {
245
- sx: {
246
- px: 1,
247
- pt: 0.25,
248
- pb: 0.5,
249
- borderRadius: '0 0 4px 4px',
250
- bgcolor: 'background.paper3',
251
- borderTop: '1px solid var(--mui-palette-divider)',
252
- boxSizing: 'border-box',
253
- letterSpacing: '0.01rem'
254
- }
255
- }, /*#__PURE__*/React.createElement(TextField, {
256
- fullWidth: true,
257
- size: "small",
258
- placeholder: "\u8F93\u5165\u4EE3\u7801\u5757\u6807\u9898...",
259
- value: titleValue,
260
- onChange: handleTitleChange,
261
- onKeyDown: handleTitleKeyDown,
262
- onBlur: handleTitleSubmit,
263
- autoFocus: true,
264
- sx: {
265
- '& .MuiInputBase-input': {
266
- p: 0,
267
- height: '1rem',
268
- lineHeight: 1,
269
- fontSize: '0.875rem',
270
- color: 'text.secondary'
271
- },
272
- '& .MuiOutlinedInput-root': {
273
- '& fieldset': {
274
- border: 'none',
275
- top: 0,
276
- p: 0
277
- }
278
- }
279
- }
280
- })), attrs.title && !showTitleInput && /*#__PURE__*/React.createElement(Box, {
281
- sx: {
282
- px: 1,
283
- py: 0.5,
284
- fontSize: '0.875rem',
285
- color: 'text.secondary',
286
- letterSpacing: '0.01rem'
287
- },
288
- onClick: handleTitleToggle
289
- }, attrs.title));
336
+ })));
290
337
  };
291
338
  export default CodeBlockView;
@@ -1,10 +1,10 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
2
3
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
4
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
5
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
6
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
7
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
8
8
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
9
9
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
10
10
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
@@ -30,22 +30,26 @@ var InsertImage = function InsertImage(_ref) {
30
30
  _useState2 = _slicedToArray(_useState, 2),
31
31
  editSrc = _useState2[0],
32
32
  setEditSrc = _useState2[1];
33
- var _useState3 = useState(onUpload ? 'upload' : 'link'),
33
+ var _useState3 = useState(attrs.title || ''),
34
34
  _useState4 = _slicedToArray(_useState3, 2),
35
- insertType = _useState4[0],
36
- setInsertType = _useState4[1];
37
- var _useState5 = useState(null),
35
+ editTitle = _useState4[0],
36
+ setEditTitle = _useState4[1];
37
+ var _useState5 = useState(onUpload ? 'upload' : 'link'),
38
38
  _useState6 = _slicedToArray(_useState5, 2),
39
- anchorEl = _useState6[0],
40
- setAnchorEl = _useState6[1];
41
- var _useState7 = useState(false),
39
+ insertType = _useState6[0],
40
+ setInsertType = _useState6[1];
41
+ var _useState7 = useState(null),
42
42
  _useState8 = _slicedToArray(_useState7, 2),
43
- uploading = _useState8[0],
44
- setUploading = _useState8[1];
45
- var _useState9 = useState(0),
43
+ anchorEl = _useState8[0],
44
+ setAnchorEl = _useState8[1];
45
+ var _useState9 = useState(false),
46
46
  _useState10 = _slicedToArray(_useState9, 2),
47
- uploadProgress = _useState10[0],
48
- setUploadProgress = _useState10[1];
47
+ uploading = _useState10[0],
48
+ setUploading = _useState10[1];
49
+ var _useState11 = useState(0),
50
+ _useState12 = _slicedToArray(_useState11, 2),
51
+ uploadProgress = _useState12[0],
52
+ setUploadProgress = _useState12[1];
49
53
  var handleShowPopover = function handleShowPopover(event) {
50
54
  return setAnchorEl(event.currentTarget);
51
55
  };
@@ -58,7 +62,7 @@ var InsertImage = function InsertImage(_ref) {
58
62
 
59
63
  // 更新图片属性,包含自动获取的宽度
60
64
  var updateImageAttributes = /*#__PURE__*/function () {
61
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(src) {
65
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(src, title) {
62
66
  var dimensions;
63
67
  return _regeneratorRuntime().wrap(function _callee$(_context) {
64
68
  while (1) switch (_context.prev = _context.next) {
@@ -68,28 +72,30 @@ var InsertImage = function InsertImage(_ref) {
68
72
  return getImageDimensions(src);
69
73
  case 3:
70
74
  dimensions = _context.sent;
71
- updateAttributes({
75
+ updateAttributes(_objectSpread({
72
76
  src: src,
73
77
  width: dimensions.width
74
- });
75
- _context.next = 11;
78
+ }, title ? {
79
+ title: title
80
+ } : {}));
81
+ _context.next = 10;
76
82
  break;
77
83
  case 7:
78
84
  _context.prev = 7;
79
85
  _context.t0 = _context["catch"](0);
80
- // 如果无法获取尺寸,使用默认宽度
81
- console.warn('无法获取图片尺寸,使用默认宽度:', _context.t0);
82
- updateAttributes({
86
+ updateAttributes(_objectSpread({
83
87
  src: src,
84
- width: attrs.width || 400 // 默认宽度
85
- });
86
- case 11:
88
+ width: attrs.width || 400
89
+ }, title ? {
90
+ title: title
91
+ } : {}));
92
+ case 10:
87
93
  case "end":
88
94
  return _context.stop();
89
95
  }
90
96
  }, _callee, null, [[0, 7]]);
91
97
  }));
92
- return function updateImageAttributes(_x) {
98
+ return function updateImageAttributes(_x, _x2) {
93
99
  return _ref2.apply(this, arguments);
94
100
  };
95
101
  }();
@@ -143,7 +149,7 @@ var InsertImage = function InsertImage(_ref) {
143
149
  }
144
150
  }, _callee2, null, [[5, 16, 19, 23]]);
145
151
  }));
146
- return function handleUploadImage(_x2) {
152
+ return function handleUploadImage(_x3) {
147
153
  return _ref3.apply(this, arguments);
148
154
  };
149
155
  }();
@@ -171,7 +177,7 @@ var InsertImage = function InsertImage(_ref) {
171
177
  validatedUrl = _context3.sent;
172
178
  case 8:
173
179
  _context3.next = 10;
174
- return updateImageAttributes(validatedUrl);
180
+ return updateImageAttributes(validatedUrl, editTitle.trim());
175
181
  case 10:
176
182
  handleClosePopover();
177
183
  _context3.next = 16;
@@ -317,6 +323,15 @@ var InsertImage = function InsertImage(_ref) {
317
323
  },
318
324
  placeholder: "\u8F93\u5165\u56FE\u7247\u7684 URL",
319
325
  label: "\u56FE\u7247\u94FE\u63A5"
326
+ }), /*#__PURE__*/React.createElement(TextField, {
327
+ fullWidth: true,
328
+ size: "small",
329
+ value: editTitle,
330
+ onChange: function onChange(e) {
331
+ return setEditTitle(e.target.value);
332
+ },
333
+ placeholder: "\u8F93\u5165\u56FE\u7247\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09",
334
+ label: "\u56FE\u7247\u63CF\u8FF0"
320
335
  }), /*#__PURE__*/React.createElement(Button, {
321
336
  variant: "contained",
322
337
  fullWidth: true,
@@ -11,11 +11,7 @@ var ReadonlyImage = function ReadonlyImage(_ref) {
11
11
  component: 'span',
12
12
  sx: {
13
13
  position: 'relative',
14
- display: 'inline-block',
15
- border: '1px solid',
16
- borderColor: 'divider',
17
- borderRadius: 'var(--mui-shape-borderRadius)',
18
- p: '0.25rem'
14
+ display: 'inline-block'
19
15
  }
20
16
  }, /*#__PURE__*/React.createElement(PhotoView, {
21
17
  src: attrs.src
@@ -30,6 +26,17 @@ var ReadonlyImage = function ReadonlyImage(_ref) {
30
26
  onError: function onError(e) {
31
27
  console.error('Image load error:', e);
32
28
  }
33
- }))));
29
+ })), attrs.title && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(Box, {
30
+ component: "span",
31
+ sx: {
32
+ position: 'relative',
33
+ left: '50%',
34
+ transform: 'translateX(-50%)',
35
+ display: 'inline-block',
36
+ fontSize: '0.75rem',
37
+ color: 'text.auxiliary',
38
+ mt: 1.5
39
+ }
40
+ }, attrs.title))));
34
41
  };
35
42
  export default ReadonlyImage;
@@ -3,6 +3,7 @@ import { NodeViewProps } from "@tiptap/react";
3
3
  import React from "react";
4
4
  export interface ImageAttributes {
5
5
  src: string;
6
+ title?: string;
6
7
  width: number;
7
8
  }
8
9
  export declare const imageDimensionsCache: Map<string, {