@mekari/pixel3-rich-text-editor 0.0.18 → 0.1.0-dev.0

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 (67) hide show
  1. package/dist/{chunk-FZPMIQTC.mjs → chunk-2LGSTJSZ.mjs} +2 -1
  2. package/dist/chunk-4KJOYLJI.mjs +168 -0
  3. package/dist/chunk-4TUA5VF4.mjs +173 -0
  4. package/dist/{chunk-2OCRJNTJ.mjs → chunk-7RMCTPMN.mjs} +2 -2
  5. package/dist/{chunk-ES3FCTTF.mjs → chunk-E3MEVHFO.mjs} +27 -6
  6. package/dist/{chunk-WBMECFO3.mjs → chunk-MCGJK3E4.mjs} +18 -46
  7. package/dist/{chunk-73N5SLQ5.mjs → chunk-MUYPED2X.mjs} +82 -25
  8. package/dist/{chunk-V52XUOVW.mjs → chunk-O33DDWRB.mjs} +10 -2
  9. package/dist/{chunk-RNQQ7LGC.mjs → chunk-PQRMWB4A.mjs} +73 -1
  10. package/dist/{chunk-JAKI6TU2.mjs → chunk-QG3GEBVL.mjs} +8 -22
  11. package/dist/{chunk-GVMGRBDI.mjs → chunk-TNDDXUVW.mjs} +5 -1
  12. package/dist/{chunk-VK7QDWXR.mjs → chunk-YCSNVWMP.mjs} +18 -5
  13. package/dist/{chunk-HF36L4GZ.mjs → chunk-ZAXJ3BEP.mjs} +2 -0
  14. package/dist/{chunk-5IPS4HT7.mjs → chunk-ZRAXSVO5.mjs} +1 -1
  15. package/dist/editor-toolbar.d.mts +9 -5
  16. package/dist/editor-toolbar.d.ts +9 -5
  17. package/dist/editor-toolbar.js +193 -92
  18. package/dist/editor-toolbar.mjs +7 -7
  19. package/dist/extensions/align-extension.js +75 -21
  20. package/dist/extensions/align-extension.mjs +2 -2
  21. package/dist/extensions/color-extension.js +69 -0
  22. package/dist/extensions/color-extension.mjs +2 -2
  23. package/dist/extensions/heading-extension.js +85 -45
  24. package/dist/extensions/heading-extension.mjs +2 -2
  25. package/dist/extensions/icons.d.mts +5 -1
  26. package/dist/extensions/icons.d.ts +5 -1
  27. package/dist/extensions/icons.js +76 -0
  28. package/dist/extensions/icons.mjs +9 -1
  29. package/dist/extensions/index.js +115 -71
  30. package/dist/extensions/index.mjs +6 -6
  31. package/dist/extensions/link-extension.js +85 -4
  32. package/dist/extensions/link-extension.mjs +2 -2
  33. package/dist/extensions/mention-list-extension.d.mts +33 -0
  34. package/dist/extensions/mention-list-extension.d.ts +33 -0
  35. package/dist/extensions/mention-list-extension.js +194 -0
  36. package/dist/extensions/mention-list-extension.mjs +7 -0
  37. package/dist/extensions/single-extension.d.mts +1 -1
  38. package/dist/extensions/single-extension.d.ts +1 -1
  39. package/dist/extensions/single-extension.js +73 -1
  40. package/dist/extensions/single-extension.mjs +2 -2
  41. package/dist/index.d.mts +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +552 -104
  44. package/dist/index.mjs +14 -12
  45. package/dist/metafile-cjs.json +1 -1
  46. package/dist/metafile-esm.json +1 -1
  47. package/dist/modules/rich-text-editor.connects.js +2 -0
  48. package/dist/modules/rich-text-editor.connects.mjs +1 -1
  49. package/dist/modules/rich-text-editor.hooks.js +2 -0
  50. package/dist/modules/rich-text-editor.hooks.mjs +2 -2
  51. package/dist/modules/rich-text-editor.props.d.mts +7 -3
  52. package/dist/modules/rich-text-editor.props.d.ts +7 -3
  53. package/dist/modules/rich-text-editor.props.js +5 -1
  54. package/dist/modules/rich-text-editor.props.mjs +1 -1
  55. package/dist/modules/rich-text-editor.types.d.mts +18 -4
  56. package/dist/modules/rich-text-editor.types.d.ts +18 -4
  57. package/dist/rich-text-editor.d.mts +15 -4
  58. package/dist/rich-text-editor.d.ts +15 -4
  59. package/dist/rich-text-editor.js +552 -104
  60. package/dist/rich-text-editor.mjs +14 -12
  61. package/dist/rte-style-provider.js +1 -1
  62. package/dist/rte-style-provider.mjs +4 -4
  63. package/dist/rte-suggestion.d.mts +7 -0
  64. package/dist/rte-suggestion.d.ts +7 -0
  65. package/dist/rte-suggestion.js +354 -0
  66. package/dist/rte-suggestion.mjs +8 -0
  67. package/package.json +12 -8
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  LinkExtension
3
- } from "./chunk-VK7QDWXR.mjs";
3
+ } from "./chunk-YCSNVWMP.mjs";
4
4
  import {
5
5
  SingleExtention
6
- } from "./chunk-V52XUOVW.mjs";
6
+ } from "./chunk-O33DDWRB.mjs";
7
7
  import {
8
8
  AlignExtention
9
- } from "./chunk-JAKI6TU2.mjs";
9
+ } from "./chunk-QG3GEBVL.mjs";
10
10
  import {
11
11
  ColorExtension
12
- } from "./chunk-FZPMIQTC.mjs";
12
+ } from "./chunk-2LGSTJSZ.mjs";
13
13
  import {
14
14
  HeadingExtention
15
- } from "./chunk-WBMECFO3.mjs";
15
+ } from "./chunk-MCGJK3E4.mjs";
16
16
  import {
17
17
  __name
18
18
  } from "./chunk-QZ7VFGWC.mjs";
@@ -20,9 +20,12 @@ import {
20
20
  // src/editor-toolbar.tsx
21
21
  import { Fragment as _Fragment, createVNode as _createVNode } from "vue";
22
22
  import { defineComponent } from "vue";
23
+ import { css } from "@mekari/pixel3-styled-system/css";
23
24
  import { MpDivider } from "@mekari/pixel3-divider";
25
+ import { MpScrollbar } from "@mekari/pixel3-scrollbar";
24
26
  var EditorToolbar = defineComponent({
25
27
  name: "EditorToolbar",
28
+ emits: ["clickImage", "clickFile", "clickAudio"],
26
29
  props: {
27
30
  editor: {
28
31
  type: Object
@@ -34,8 +37,10 @@ var EditorToolbar = defineComponent({
34
37
  setup({
35
38
  editor,
36
39
  options
40
+ }, {
41
+ emit
37
42
  }) {
38
- const items = ["heading", "bold", "italic", "underline", "strike", "blockquote", "bulletList", "orderedList", "textColor", "fillColor", "textLink", "align", "undo", "redo", "clear"];
43
+ const items = ["heading", "bold", "italic", "underline", "strike", "blockquote", "bulletList", "orderedList", "textColor", "fillColor", "textLink", "align", "undo", "redo", "clear", "image", "file", "audio", "mention"];
39
44
  const itemOptions = {
40
45
  heading: {
41
46
  tooltipLabel: "Text style",
@@ -98,52 +103,104 @@ var EditorToolbar = defineComponent({
98
103
  clear: {
99
104
  tooltipLabel: "Reset format",
100
105
  onClick: () => (editor == null ? void 0 : editor.chain()).focus().unsetAllMarks().run()
106
+ },
107
+ image: {
108
+ tooltipLabel: "Add image",
109
+ onClick: () => emit("clickImage")
110
+ },
111
+ file: {
112
+ tooltipLabel: "Add file",
113
+ onClick: () => emit("clickFile")
114
+ },
115
+ audio: {
116
+ tooltipLabel: "Add audio",
117
+ onClick: () => emit("clickAudio")
118
+ },
119
+ mention: {
120
+ tooltipLabel: "Mention",
121
+ editor,
122
+ onClick: () => (editor == null ? void 0 : editor.chain()).focus().insertContent("@").run()
101
123
  }
102
124
  };
103
- const renderExtension = /* @__PURE__ */ __name((item) => {
104
- const options2 = itemOptions[item];
105
- if (!options2)
125
+ const getResolvedItem = /* @__PURE__ */ __name((option) => {
126
+ if (typeof option === "string") {
127
+ return {
128
+ item: option
129
+ };
130
+ }
131
+ return {
132
+ item: option.value,
133
+ tooltip: option.tooltip
134
+ };
135
+ }, "getResolvedItem");
136
+ const renderExtension = /* @__PURE__ */ __name((option) => {
137
+ const {
138
+ item,
139
+ tooltip
140
+ } = getResolvedItem(option);
141
+ if (!items.includes(item))
142
+ return null;
143
+ const resolvedItem = item;
144
+ const resolvedOptions = itemOptions[resolvedItem];
145
+ if (!resolvedOptions)
106
146
  return null;
107
- switch (item) {
147
+ const tooltipLabel = tooltip || resolvedOptions.tooltipLabel;
148
+ switch (resolvedItem) {
108
149
  case "heading":
109
150
  return _createVNode(HeadingExtention, {
110
- "tooltipLabel": options2.tooltipLabel,
151
+ "tooltipLabel": tooltipLabel,
111
152
  "editor": editor
112
153
  }, null);
113
154
  case "align":
114
155
  return _createVNode(AlignExtention, {
115
- "tooltipLabel": options2.tooltipLabel,
156
+ "tooltipLabel": tooltipLabel,
116
157
  "editor": editor
117
158
  }, null);
118
159
  case "textColor":
119
160
  case "fillColor":
120
161
  return _createVNode(ColorExtension, {
121
- "tooltipLabel": options2.tooltipLabel,
162
+ "tooltipLabel": tooltipLabel,
122
163
  "editor": editor,
123
- "type": options2.type
164
+ "type": resolvedOptions.type
124
165
  }, null);
125
166
  case "textLink":
126
167
  return _createVNode(LinkExtension, {
127
- "tooltipLabel": options2.tooltipLabel,
168
+ "tooltipLabel": tooltipLabel,
128
169
  "editor": editor
129
170
  }, null);
130
171
  default:
131
172
  return _createVNode(SingleExtention, {
132
- "name": item,
133
- "tooltipLabel": options2.tooltipLabel,
134
- "onClick": options2.onClick,
173
+ "name": resolvedItem,
174
+ "tooltipLabel": tooltipLabel,
175
+ "onClick": resolvedOptions.onClick,
135
176
  "editor": editor
136
177
  }, null);
137
178
  }
138
179
  }, "renderExtension");
139
- return () => _createVNode("div", null, [options == null ? void 0 : options.map((option, index) => _createVNode(_Fragment, null, [option.map((item) => {
140
- if (items.includes(item)) {
141
- return renderExtension(item);
180
+ return () => _createVNode(MpScrollbar, {
181
+ "options": {
182
+ overflow: {
183
+ y: "hide",
184
+ x: "scroll"
185
+ }
142
186
  }
143
- }), index !== (options == null ? void 0 : options.length) - 1 && _createVNode(MpDivider, {
144
- "id": "divider-toolbar",
145
- "orientation": "vertical"
146
- }, null)]))]);
187
+ }, {
188
+ default: () => [_createVNode("div", {
189
+ "class": css({
190
+ display: "flex",
191
+ alignItems: "stretch",
192
+ gap: "1"
193
+ })
194
+ }, [options == null ? void 0 : options.map((option, index) => _createVNode(_Fragment, null, [option.map((item) => {
195
+ const resolvedItem = typeof item === "string" ? item : item.value;
196
+ if (items.includes(resolvedItem)) {
197
+ return renderExtension(item);
198
+ }
199
+ }), index !== (options == null ? void 0 : options.length) - 1 && _createVNode(MpDivider, {
200
+ "id": "divider-toolbar",
201
+ "orientation": "vertical"
202
+ }, null)]))])]
203
+ });
147
204
  }
148
205
  });
149
206
 
@@ -1,15 +1,19 @@
1
1
  import {
2
+ AudioIcon,
2
3
  BlockquoteIcon,
3
4
  BoldIcon,
4
5
  BulletListIcon,
5
6
  ClearIcon,
7
+ FileIcon,
8
+ ImageIcon,
6
9
  ItalicIcon,
10
+ MentionIcon,
7
11
  OrderedListIcon,
8
12
  RedoIcon,
9
13
  StrikeIcon,
10
14
  UnderlineIcon,
11
15
  UndoIcon
12
- } from "./chunk-RNQQ7LGC.mjs";
16
+ } from "./chunk-PQRMWB4A.mjs";
13
17
 
14
18
  // src/extensions/single-extension.tsx
15
19
  import { withDirectives as _withDirectives, resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
@@ -46,7 +50,11 @@ var SingleExtention = defineComponent({
46
50
  orderedList: _createVNode(OrderedListIcon, null, null),
47
51
  undo: _createVNode(UndoIcon, null, null),
48
52
  redo: _createVNode(RedoIcon, null, null),
49
- clear: _createVNode(ClearIcon, null, null)
53
+ clear: _createVNode(ClearIcon, null, null),
54
+ image: _createVNode(ImageIcon, null, null),
55
+ file: _createVNode(FileIcon, null, null),
56
+ audio: _createVNode(AudioIcon, null, null),
57
+ mention: _createVNode(MentionIcon, null, null)
50
58
  };
51
59
  return () => _withDirectives(_createVNode("button", {
52
60
  "class": {
@@ -319,6 +319,74 @@ var CaretIcon = defineComponent({
319
319
  }, null)]);
320
320
  }
321
321
  });
322
+ var ImageIcon = defineComponent({
323
+ name: "ImageIcon",
324
+ setup() {
325
+ return () => _createVNode("svg", {
326
+ "xmlns": "http://www.w3.org/2000/svg",
327
+ "width": "20",
328
+ "height": "20",
329
+ "viewBox": "0 0 20 20",
330
+ "fill": "none"
331
+ }, [_createVNode("path", {
332
+ "fill-rule": "evenodd",
333
+ "clip-rule": "evenodd",
334
+ "d": "M9.13948 1.25H10.8605C12.3328 1.24998 13.5133 1.24997 14.4405 1.37376C15.4002 1.50189 16.2001 1.77481 16.8347 2.4051C17.4701 3.03609 17.7459 3.83259 17.8753 4.78811C18 5.70986 18 6.88312 18 8.34439V11.6556C18 13.1169 18 14.2901 17.8753 15.2119C17.7459 16.1674 17.4701 16.9639 16.8347 17.5949C16.2001 18.2252 15.4002 18.4981 14.4405 18.6262C13.5133 18.75 12.3328 18.75 10.8605 18.75H9.13947C7.66718 18.75 6.48666 18.75 5.55953 18.6262C4.59985 18.4981 3.79994 18.2252 3.16528 17.5949C2.58896 17.0226 2.30764 16.313 2.16398 15.4695C1.99993 14.5064 1.99996 13.2565 2 11.6731L2 8.34442C1.99998 6.88313 1.99997 5.70987 2.12475 4.78811C2.25411 3.83259 2.5299 3.03609 3.16528 2.4051C3.79994 1.77481 4.59985 1.50189 5.55953 1.37376C6.48666 1.24997 7.66719 1.24998 9.13948 1.25ZM5.75805 2.86056C4.96282 2.96674 4.53137 3.16245 4.22226 3.46942C3.91387 3.77568 3.71778 4.20206 3.61119 4.98935C3.50162 5.79875 3.5 6.87016 3.5 8.4V11.6C3.5 12.5721 3.50087 13.3576 3.52902 14.0064L6.03954 12.2878C6.94782 11.6827 8.2354 11.7423 9.0689 12.4535L9.07527 12.4589L9.33734 12.6877C9.68567 12.9822 10.2858 12.9815 10.6328 12.6855L13.984 9.82945C14.6747 9.24036 15.6655 9.09888 16.5 9.40545V8.4C16.5 6.87016 16.4984 5.79875 16.3888 4.98935C16.2822 4.20206 16.0861 3.77568 15.7777 3.46942C15.4686 3.16245 15.0372 2.96674 14.242 2.86056C13.4257 2.75157 12.3456 2.75 10.8056 2.75H9.19445C7.65442 2.75 6.57433 2.75157 5.75805 2.86056ZM16.2474 10.9638L16.5 11.1945V11.6C16.5 13.1298 16.4984 14.2013 16.3888 15.0107C16.2822 15.7979 16.0861 16.2243 15.7777 16.5306C15.4686 16.8376 15.0372 17.0333 14.242 17.1394C13.4257 17.2484 12.3456 17.25 10.8056 17.25H9.19445C7.65442 17.25 6.57433 17.2484 5.75805 17.1394C4.96282 17.0333 4.53137 16.8376 4.22226 16.5306C4.01416 16.3239 3.85786 16.0633 3.74539 15.6761L6.87456 13.534C7.23802 13.2943 7.78269 13.3303 8.09262 13.5923L8.35477 13.8211L8.36118 13.8266C9.26993 14.6019 10.6976 14.6019 11.6063 13.8266L14.9572 10.9709C15.3024 10.6764 15.8983 10.6739 16.2474 10.9638ZM5.22222 6.8C5.22222 5.49725 6.28423 4.45 7.58334 4.45C8.88244 4.45 9.94445 5.49725 9.94445 6.8C9.94445 8.10276 8.88244 9.15 7.58334 9.15C6.28423 9.15 5.22222 8.10276 5.22222 6.8Z",
335
+ "fill": "#758195"
336
+ }, null)]);
337
+ }
338
+ });
339
+ var FileIcon = defineComponent({
340
+ name: "FileIcon",
341
+ setup() {
342
+ return () => _createVNode("svg", {
343
+ "xmlns": "http://www.w3.org/2000/svg",
344
+ "width": "18",
345
+ "height": "17",
346
+ "viewBox": "0 0 18 17",
347
+ "fill": "none"
348
+ }, [_createVNode("path", {
349
+ "fill-rule": "evenodd",
350
+ "clip-rule": "evenodd",
351
+ "d": "M11.6901 2.47169C10.3906 1.1761 8.28282 1.1761 6.98332 2.47169L3.07076 6.37248C0.976415 8.46053 0.976415 11.845 3.07076 13.933C5.16636 16.0223 8.56492 16.0223 10.6605 13.933L16.2205 8.3898C16.5138 8.09734 16.9887 8.09806 17.2811 8.39139C17.5736 8.68473 17.5729 9.1596 17.2795 9.45205L11.7196 14.9953C9.03856 17.6682 4.69271 17.6682 2.0117 14.9953C-0.670564 12.3211 -0.670564 7.98442 2.0117 5.31022L5.92426 1.40943C7.80917 -0.469814 10.8643 -0.469812 12.7492 1.40943C14.6354 3.28992 14.6354 6.33973 12.7492 8.22022L8.83664 12.121C7.74783 13.2066 5.98345 13.2066 4.89464 12.121C3.80458 11.0342 3.80458 9.27127 4.89464 8.18449L8.8072 4.2837C9.10053 3.99125 9.5754 3.99196 9.86786 4.2853C10.1603 4.57863 10.1596 5.0535 9.86626 5.34596L5.9537 9.24675C5.45156 9.74738 5.45156 10.5581 5.9537 11.0588C6.45709 11.5606 7.27419 11.5606 7.77758 11.0588L11.6901 7.15797C12.9884 5.86363 12.9884 3.76603 11.6901 2.47169Z",
352
+ "fill": "#758195"
353
+ }, null)]);
354
+ }
355
+ });
356
+ var AudioIcon = defineComponent({
357
+ name: "AudioIcon",
358
+ setup() {
359
+ return () => _createVNode("svg", {
360
+ "xmlns": "http://www.w3.org/2000/svg",
361
+ "width": "20",
362
+ "height": "20",
363
+ "viewBox": "0 0 20 20",
364
+ "fill": "none"
365
+ }, [_createVNode("path", {
366
+ "fill-rule": "evenodd",
367
+ "clip-rule": "evenodd",
368
+ "d": "M6.32334 4.94737C6.32334 2.91036 7.96446 1.25 10 1.25C12.0355 1.25 13.6767 2.91036 13.6767 4.94737V10C13.6767 12.037 12.0355 13.6974 10 13.6974C7.96446 13.6974 6.32334 12.037 6.32334 10V4.94737ZM10 2.75C8.80284 2.75 7.82334 3.7288 7.82334 4.94737V10C7.82334 11.2186 8.80284 12.1974 10 12.1974C11.1972 12.1974 12.1767 11.2186 12.1767 10V4.94737C12.1767 3.7288 11.1972 2.75 10 2.75ZM14.9948 9.67107C15.409 9.66825 15.7471 10.0017 15.7499 10.4159C15.7686 13.1719 13.4277 15.3958 10.75 15.7526L10.75 17.25H11.6724C12.0866 17.25 12.4224 17.5858 12.4224 18C12.4224 18.4142 12.0866 18.75 11.6724 18.75H8.3276C7.91339 18.75 7.5776 18.4142 7.5776 18C7.5776 17.5858 7.91339 17.25 8.3276 17.25H9.24997L9.24996 15.7526C6.57163 15.3957 4.25 13.1696 4.25 10.4211C4.25 10.0068 4.58579 9.67105 5 9.67105C5.41421 9.67105 5.75 10.0068 5.75 10.4211C5.75 12.4712 7.71926 14.3026 9.99995 14.3026C12.2856 14.3026 14.2638 12.4679 14.2499 10.4262C14.2471 10.012 14.5806 9.67389 14.9948 9.67107Z",
369
+ "fill": "#758195"
370
+ }, null)]);
371
+ }
372
+ });
373
+ var MentionIcon = defineComponent({
374
+ name: "MentionIcon",
375
+ setup() {
376
+ return () => _createVNode("svg", {
377
+ "xmlns": "http://www.w3.org/2000/svg",
378
+ "width": "18",
379
+ "height": "18",
380
+ "viewBox": "0 0 18 18",
381
+ "fill": "none"
382
+ }, [_createVNode("path", {
383
+ "fill-rule": "evenodd",
384
+ "clip-rule": "evenodd",
385
+ "d": "M5.04155 0.82474C6.82687 -0.0106618 8.84196 -0.218789 10.7603 0.234079C12.6787 0.686946 14.388 1.77428 15.6112 3.3199C16.8345 4.86553 17.5 6.7789 17.5 8.75V9.55C17.5 10.3854 17.1681 11.1866 16.5774 11.7774C15.9866 12.3681 15.1854 12.7 14.35 12.7C13.5146 12.7 12.7134 12.3681 12.1226 11.7774C11.9824 11.6371 11.8567 11.485 11.7466 11.3234C11.0222 12.1662 9.94841 12.7 8.74991 12.7C6.56839 12.7 4.79991 10.9315 4.79991 8.74999C4.79991 6.56847 6.56839 4.79999 8.74991 4.79999C9.67546 4.79999 10.5267 5.11833 11.2 5.65148V5.55C11.2 5.13579 11.5358 4.8 11.95 4.8C12.3642 4.8 12.7 5.13579 12.7 5.55V9.55C12.7 9.98761 12.8738 10.4073 13.1833 10.7167C13.4927 11.0262 13.9124 11.2 14.35 11.2C14.7876 11.2 15.2073 11.0262 15.5167 10.7167C15.8262 10.4073 16 9.98761 16 9.55V8.75C16 7.1168 15.4486 5.53144 14.435 4.25078C13.4215 2.97012 12.0052 2.06919 10.4157 1.69395C8.8262 1.31872 7.15655 1.49117 5.67729 2.18336C4.19802 2.87555 2.9958 4.04692 2.26541 5.50771C1.53502 6.96849 1.31925 8.63309 1.65306 10.2318C1.98687 11.8305 2.85069 13.2697 4.10459 14.3162C5.35848 15.3627 6.92898 15.9551 8.56164 15.9976C10.1943 16.04 11.7934 15.5299 13.1 14.55C13.4314 14.3015 13.9015 14.3686 14.15 14.7C14.3985 15.0314 14.3314 15.5015 14 15.75C12.4231 16.9327 10.4931 17.5483 8.52266 17.497C6.55222 17.4458 4.65679 16.7308 3.14347 15.4678C1.63015 14.2048 0.587595 12.4679 0.184723 10.5384C-0.218148 8.6089 0.0422661 6.5999 0.923772 4.83689C1.80528 3.07387 3.25623 1.66014 5.04155 0.82474ZM8.74991 6.29999C7.39682 6.29999 6.29991 7.3969 6.29991 8.74999C6.29991 10.1031 7.39682 11.2 8.74991 11.2C10.103 11.2 11.1999 10.1031 11.1999 8.74999C11.1999 7.3969 10.103 6.29999 8.74991 6.29999Z",
386
+ "fill": "#758195"
387
+ }, null)]);
388
+ }
389
+ });
322
390
 
323
391
  export {
324
392
  BoldIcon,
@@ -338,5 +406,9 @@ export {
338
406
  UndoIcon,
339
407
  RedoIcon,
340
408
  ClearIcon,
341
- CaretIcon
409
+ CaretIcon,
410
+ ImageIcon,
411
+ FileIcon,
412
+ AudioIcon,
413
+ MentionIcon
342
414
  };
@@ -3,7 +3,7 @@ import {
3
3
  AlignJustifyIcon,
4
4
  AlignLeftIcon,
5
5
  AlignRightIcon
6
- } from "./chunk-RNQQ7LGC.mjs";
6
+ } from "./chunk-PQRMWB4A.mjs";
7
7
  import {
8
8
  __name
9
9
  } from "./chunk-QZ7VFGWC.mjs";
@@ -33,7 +33,8 @@ var AlignExtention = defineComponent({
33
33
  });
34
34
  }, "isActiveAlignment");
35
35
  return () => _createVNode(MpPopover, {
36
- "id": "popover-align-extention"
36
+ "id": "popover-align-extention",
37
+ "usePortal": true
37
38
  }, {
38
39
  default: () => [_createVNode(MpPopoverTrigger, null, {
39
40
  default: () => [_withDirectives(_createVNode("button", {
@@ -55,40 +56,25 @@ var AlignExtention = defineComponent({
55
56
  })
56
57
  }, {
57
58
  default: () => [_createVNode(MpPopoverList, {
58
- "class": css({
59
- gap: "2",
60
- alignItems: "center"
61
- })
59
+ "data-pixel-rte": true
62
60
  }, {
63
61
  default: () => [_createVNode(MpPopoverListItem, {
64
- "class": {
65
- "is-active": isActiveAlignment("left"),
66
- "text-sizing": true
67
- },
62
+ "is-active": isActiveAlignment("left"),
68
63
  "onClick": () => (editor == null ? void 0 : editor.chain()).focus().setTextAlign("left").run()
69
64
  }, {
70
65
  default: () => [_createVNode(AlignLeftIcon, null, null)]
71
66
  }), _createVNode(MpPopoverListItem, {
72
- "class": {
73
- "is-active": isActiveAlignment("center"),
74
- "text-sizing": true
75
- },
67
+ "is-active": isActiveAlignment("center"),
76
68
  "onClick": () => (editor == null ? void 0 : editor.chain()).focus().setTextAlign("center").run()
77
69
  }, {
78
70
  default: () => [_createVNode(AlignCenterIcon, null, null)]
79
71
  }), _createVNode(MpPopoverListItem, {
80
- "class": {
81
- "is-active": isActiveAlignment("right"),
82
- "text-sizing": true
83
- },
72
+ "is-active": isActiveAlignment("right"),
84
73
  "onClick": () => (editor == null ? void 0 : editor.chain()).focus().setTextAlign("right").run()
85
74
  }, {
86
75
  default: () => [_createVNode(AlignRightIcon, null, null)]
87
76
  }), _createVNode(MpPopoverListItem, {
88
- "class": {
89
- "is-active": isActiveAlignment("justify"),
90
- "text-sizing": true
91
- },
77
+ "is-active": isActiveAlignment("justify"),
92
78
  "onClick": () => (editor == null ? void 0 : editor.chain()).focus().setTextAlign("justify").run()
93
79
  }, {
94
80
  default: () => [_createVNode(AlignJustifyIcon, null, null)]
@@ -27,6 +27,10 @@ var richTextEditorProps = {
27
27
  hasBorder: {
28
28
  type: Boolean,
29
29
  default: true
30
+ },
31
+ suggestions: {
32
+ type: Array,
33
+ default: () => []
30
34
  }
31
35
  };
32
36
  var RTEStyleProviderProps = {
@@ -34,7 +38,7 @@ var RTEStyleProviderProps = {
34
38
  type: String
35
39
  }
36
40
  };
37
- var richTextEditorEmits = declareEmit(["change", "blur", "focus"]);
41
+ var richTextEditorEmits = declareEmit(["change", "blur", "focus", "action", "paste"]);
38
42
 
39
43
  export {
40
44
  richTextEditorProps,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  LinkIcon
3
- } from "./chunk-RNQQ7LGC.mjs";
3
+ } from "./chunk-PQRMWB4A.mjs";
4
4
  import {
5
5
  __name
6
6
  } from "./chunk-QZ7VFGWC.mjs";
@@ -55,6 +55,7 @@ var LinkExtension = defineComponent({
55
55
  popperInstance.destroy();
56
56
  }
57
57
  popperInstance = createPopper(target, popoverRef.value, {
58
+ strategy: "fixed",
58
59
  onFirstUpdate: () => {
59
60
  if (popperInstance) {
60
61
  popperInstance.setOptions({
@@ -113,6 +114,14 @@ var LinkExtension = defineComponent({
113
114
  }
114
115
  onClosePopover();
115
116
  }, "onSetLink");
117
+ const onOpenInNewTab = /* @__PURE__ */ __name(() => {
118
+ const trimmedUrl = url.value.trim();
119
+ if (!trimmedUrl) {
120
+ return;
121
+ }
122
+ const normalizedUrl = /^(https?:)?\/\//i.test(trimmedUrl) ? trimmedUrl : `https://${trimmedUrl}`;
123
+ window.open(normalizedUrl, "_blank", "noopener,noreferrer");
124
+ }, "onOpenInNewTab");
116
125
  const onClosePopover = /* @__PURE__ */ __name(() => {
117
126
  isShowPopover.value = false;
118
127
  editor == null ? void 0 : editor.commands.setTextSelection({
@@ -156,10 +165,9 @@ var LinkExtension = defineComponent({
156
165
  default: () => [_createVNode("div", {
157
166
  "ref": popoverRef,
158
167
  "data-pixel-rte": true,
159
- "style": {
160
- position: "absolute",
161
- zIndex: "var(--mp-z-index-popover)"
162
- }
168
+ "class": css({
169
+ zIndex: "popover"
170
+ })
163
171
  }, [_createVNode("div", {
164
172
  "class": css({
165
173
  display: "flex",
@@ -192,6 +200,11 @@ var LinkExtension = defineComponent({
192
200
  }, null) : _createVNode(MpButton, {
193
201
  "leftIcon": "check",
194
202
  "onClick": onSetLink
203
+ }, null), isEditLink.value && _createVNode(MpButton, {
204
+ "leftIcon": "newtab",
205
+ "variant": "ghost",
206
+ "isDisabled": !url.value.trim(),
207
+ "onClick": onOpenInNewTab
195
208
  }, null), isEditLink.value ? _createVNode(MpButton, {
196
209
  "leftIcon": "delete",
197
210
  "variant": "ghost",
@@ -11,6 +11,7 @@ function richTextEditorConnect(state, classes) {
11
11
  placeholder,
12
12
  maxlength,
13
13
  options,
14
+ suggestions,
14
15
  hasBorder,
15
16
  isInvalid,
16
17
  isDisabled
@@ -22,6 +23,7 @@ function richTextEditorConnect(state, classes) {
22
23
  placeholder,
23
24
  maxlength,
24
25
  options,
26
+ suggestions,
25
27
  isInvalid,
26
28
  isDisabled,
27
29
  rootProps: {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RTEStyleProviderConnect,
3
3
  richTextEditorConnect
4
- } from "./chunk-HF36L4GZ.mjs";
4
+ } from "./chunk-ZAXJ3BEP.mjs";
5
5
  import {
6
6
  __name
7
7
  } from "./chunk-QZ7VFGWC.mjs";
@@ -1,7 +1,7 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType } from 'vue';
3
3
  import * as vue_jsx_runtime from 'vue/jsx-runtime';
4
- import { Items } from './modules/rich-text-editor.types.mjs';
4
+ import { ToolbarOption } from './modules/rich-text-editor.types.mjs';
5
5
  import { Editor } from '@tiptap/vue-3';
6
6
  import '@mekari/pixel3-utils';
7
7
 
@@ -10,15 +10,19 @@ declare const EditorToolbar: vue.DefineComponent<{
10
10
  type: PropType<Editor>;
11
11
  };
12
12
  options: {
13
- type: PropType<Items[][]>;
13
+ type: PropType<ToolbarOption[][]>;
14
14
  };
15
- }, () => vue_jsx_runtime.JSX.Element, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
15
+ }, () => vue_jsx_runtime.JSX.Element, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("clickImage" | "clickFile" | "clickAudio")[], "clickImage" | "clickFile" | "clickAudio", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
16
16
  editor: {
17
17
  type: PropType<Editor>;
18
18
  };
19
19
  options: {
20
- type: PropType<Items[][]>;
20
+ type: PropType<ToolbarOption[][]>;
21
21
  };
22
- }>>, {}, {}>;
22
+ }>> & {
23
+ onClickImage?: ((...args: any[]) => any) | undefined;
24
+ onClickFile?: ((...args: any[]) => any) | undefined;
25
+ onClickAudio?: ((...args: any[]) => any) | undefined;
26
+ }, {}, {}>;
23
27
 
24
28
  export { EditorToolbar };
@@ -1,7 +1,7 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType } from 'vue';
3
3
  import * as vue_jsx_runtime from 'vue/jsx-runtime';
4
- import { Items } from './modules/rich-text-editor.types.js';
4
+ import { ToolbarOption } from './modules/rich-text-editor.types.js';
5
5
  import { Editor } from '@tiptap/vue-3';
6
6
  import '@mekari/pixel3-utils';
7
7
 
@@ -10,15 +10,19 @@ declare const EditorToolbar: vue.DefineComponent<{
10
10
  type: PropType<Editor>;
11
11
  };
12
12
  options: {
13
- type: PropType<Items[][]>;
13
+ type: PropType<ToolbarOption[][]>;
14
14
  };
15
- }, () => vue_jsx_runtime.JSX.Element, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
15
+ }, () => vue_jsx_runtime.JSX.Element, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("clickImage" | "clickFile" | "clickAudio")[], "clickImage" | "clickFile" | "clickAudio", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
16
16
  editor: {
17
17
  type: PropType<Editor>;
18
18
  };
19
19
  options: {
20
- type: PropType<Items[][]>;
20
+ type: PropType<ToolbarOption[][]>;
21
21
  };
22
- }>>, {}, {}>;
22
+ }>> & {
23
+ onClickImage?: ((...args: any[]) => any) | undefined;
24
+ onClickFile?: ((...args: any[]) => any) | undefined;
25
+ onClickAudio?: ((...args: any[]) => any) | undefined;
26
+ }, {}, {}>;
23
27
 
24
28
  export { EditorToolbar };