@class-kit/vue 0.1.3 → 0.1.4

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 (239) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/components/affix.cjs.map +1 -1
  3. package/dist/components/affix.js.map +1 -1
  4. package/dist/components/backtop.cjs +61 -0
  5. package/dist/components/backtop.cjs.map +1 -1
  6. package/dist/components/backtop.js +61 -0
  7. package/dist/components/backtop.js.map +1 -1
  8. package/dist/components/badge.cjs.map +1 -1
  9. package/dist/components/badge.js.map +1 -1
  10. package/dist/components/barcode.cjs.map +1 -1
  11. package/dist/components/barcode.js.map +1 -1
  12. package/dist/components/breadcrumb.cjs.map +1 -1
  13. package/dist/components/breadcrumb.js.map +1 -1
  14. package/dist/components/button.cjs.map +1 -1
  15. package/dist/components/button.js.map +1 -1
  16. package/dist/components/calendar.cjs +61 -0
  17. package/dist/components/calendar.cjs.map +1 -1
  18. package/dist/components/calendar.js +61 -0
  19. package/dist/components/calendar.js.map +1 -1
  20. package/dist/components/canvas-editor.cjs.map +1 -1
  21. package/dist/components/canvas-editor.js.map +1 -1
  22. package/dist/components/canvas-image.cjs.map +1 -1
  23. package/dist/components/canvas-image.js.map +1 -1
  24. package/dist/components/chat-textarea.cjs +61 -0
  25. package/dist/components/chat-textarea.cjs.map +1 -1
  26. package/dist/components/chat-textarea.js +61 -0
  27. package/dist/components/chat-textarea.js.map +1 -1
  28. package/dist/components/chat-virtual-list.cjs.map +1 -1
  29. package/dist/components/chat-virtual-list.js.map +1 -1
  30. package/dist/components/checkbox.cjs.map +1 -1
  31. package/dist/components/checkbox.js.map +1 -1
  32. package/dist/components/checked.cjs.map +1 -1
  33. package/dist/components/checked.js.map +1 -1
  34. package/dist/components/code-preview.cjs.map +1 -1
  35. package/dist/components/code-preview.js.map +1 -1
  36. package/dist/components/color-picker.cjs.map +1 -1
  37. package/dist/components/color-picker.js.map +1 -1
  38. package/dist/components/comic-reader.cjs.map +1 -1
  39. package/dist/components/comic-reader.js.map +1 -1
  40. package/dist/components/config-provider.cjs.map +1 -1
  41. package/dist/components/config-provider.js.map +1 -1
  42. package/dist/components/config-table.cjs +61 -0
  43. package/dist/components/config-table.cjs.map +1 -1
  44. package/dist/components/config-table.js +61 -0
  45. package/dist/components/config-table.js.map +1 -1
  46. package/dist/components/countdown.cjs.map +1 -1
  47. package/dist/components/countdown.js.map +1 -1
  48. package/dist/components/danmaku.cjs.map +1 -1
  49. package/dist/components/danmaku.js.map +1 -1
  50. package/dist/components/date-picker.cjs +61 -0
  51. package/dist/components/date-picker.cjs.map +1 -1
  52. package/dist/components/date-picker.js +61 -0
  53. package/dist/components/date-picker.js.map +1 -1
  54. package/dist/components/date-range-picker.cjs +61 -0
  55. package/dist/components/date-range-picker.cjs.map +1 -1
  56. package/dist/components/date-range-picker.js +61 -0
  57. package/dist/components/date-range-picker.js.map +1 -1
  58. package/dist/components/design-effect.cjs.map +1 -1
  59. package/dist/components/design-effect.js.map +1 -1
  60. package/dist/components/drag-drop-board.cjs.map +1 -1
  61. package/dist/components/drag-drop-board.js.map +1 -1
  62. package/dist/components/draggable.cjs.map +1 -1
  63. package/dist/components/draggable.js.map +1 -1
  64. package/dist/components/ellipsis-text.cjs.map +1 -1
  65. package/dist/components/ellipsis-text.js.map +1 -1
  66. package/dist/components/empty.cjs.map +1 -1
  67. package/dist/components/empty.js.map +1 -1
  68. package/dist/components/field.cjs +61 -0
  69. package/dist/components/field.cjs.map +1 -1
  70. package/dist/components/field.js +61 -0
  71. package/dist/components/field.js.map +1 -1
  72. package/dist/components/file-preview.cjs.map +1 -1
  73. package/dist/components/file-preview.js.map +1 -1
  74. package/dist/components/floating-ball.cjs.map +1 -1
  75. package/dist/components/floating-ball.js.map +1 -1
  76. package/dist/components/form.cjs +5 -1
  77. package/dist/components/form.cjs.map +1 -1
  78. package/dist/components/form.js +5 -1
  79. package/dist/components/form.js.map +1 -1
  80. package/dist/components/gradient-text.cjs.map +1 -1
  81. package/dist/components/gradient-text.js.map +1 -1
  82. package/dist/components/height-transition.cjs.map +1 -1
  83. package/dist/components/height-transition.js.map +1 -1
  84. package/dist/components/input.cjs +61 -0
  85. package/dist/components/input.cjs.map +1 -1
  86. package/dist/components/input.js +61 -0
  87. package/dist/components/input.js.map +1 -1
  88. package/dist/components/lazy-image.cjs.map +1 -1
  89. package/dist/components/lazy-image.js.map +1 -1
  90. package/dist/components/live-room.cjs.map +1 -1
  91. package/dist/components/live-room.js.map +1 -1
  92. package/dist/components/loading.cjs.map +1 -1
  93. package/dist/components/loading.js.map +1 -1
  94. package/dist/components/marquee.cjs.map +1 -1
  95. package/dist/components/marquee.js.map +1 -1
  96. package/dist/components/masonry-virtual-list.cjs.map +1 -1
  97. package/dist/components/masonry-virtual-list.js.map +1 -1
  98. package/dist/components/menu.cjs +61 -0
  99. package/dist/components/menu.cjs.map +1 -1
  100. package/dist/components/menu.js +61 -0
  101. package/dist/components/menu.js.map +1 -1
  102. package/dist/components/modal.cjs +61 -0
  103. package/dist/components/modal.cjs.map +1 -1
  104. package/dist/components/modal.js +61 -0
  105. package/dist/components/modal.js.map +1 -1
  106. package/dist/components/multi-column-picker.cjs.map +1 -1
  107. package/dist/components/multi-column-picker.js.map +1 -1
  108. package/dist/components/novel-reader.cjs.map +1 -1
  109. package/dist/components/novel-reader.js.map +1 -1
  110. package/dist/components/number-input.cjs +61 -0
  111. package/dist/components/number-input.cjs.map +1 -1
  112. package/dist/components/number-input.js +61 -0
  113. package/dist/components/number-input.js.map +1 -1
  114. package/dist/components/orbital-sphere.cjs.map +1 -1
  115. package/dist/components/orbital-sphere.js.map +1 -1
  116. package/dist/components/pagination.cjs +61 -0
  117. package/dist/components/pagination.cjs.map +1 -1
  118. package/dist/components/pagination.js +61 -0
  119. package/dist/components/pagination.js.map +1 -1
  120. package/dist/components/password-input.cjs +67 -12
  121. package/dist/components/password-input.cjs.map +1 -1
  122. package/dist/components/password-input.js +67 -12
  123. package/dist/components/password-input.js.map +1 -1
  124. package/dist/components/popconfirm.cjs.map +1 -1
  125. package/dist/components/popconfirm.js.map +1 -1
  126. package/dist/components/popup.cjs +61 -0
  127. package/dist/components/popup.cjs.map +1 -1
  128. package/dist/components/popup.js +61 -0
  129. package/dist/components/popup.js.map +1 -1
  130. package/dist/components/progress-bar.cjs.map +1 -1
  131. package/dist/components/progress-bar.js.map +1 -1
  132. package/dist/components/qr-code.cjs.map +1 -1
  133. package/dist/components/qr-code.js.map +1 -1
  134. package/dist/components/radio-group.cjs.map +1 -1
  135. package/dist/components/radio-group.js.map +1 -1
  136. package/dist/components/rating.cjs +61 -0
  137. package/dist/components/rating.cjs.map +1 -1
  138. package/dist/components/rating.js +61 -0
  139. package/dist/components/rating.js.map +1 -1
  140. package/dist/components/rich-editor.cjs +1341 -0
  141. package/dist/components/rich-editor.cjs.map +1 -0
  142. package/dist/components/rich-editor.d.ts +2 -0
  143. package/dist/components/rich-editor.d.ts.map +1 -0
  144. package/dist/components/rich-editor.js +1339 -0
  145. package/dist/components/rich-editor.js.map +1 -0
  146. package/dist/components/rolling-number.cjs.map +1 -1
  147. package/dist/components/rolling-number.js.map +1 -1
  148. package/dist/components/select.cjs +61 -0
  149. package/dist/components/select.cjs.map +1 -1
  150. package/dist/components/select.js +61 -0
  151. package/dist/components/select.js.map +1 -1
  152. package/dist/components/signature.cjs.map +1 -1
  153. package/dist/components/signature.js.map +1 -1
  154. package/dist/components/skeleton.cjs.map +1 -1
  155. package/dist/components/skeleton.js.map +1 -1
  156. package/dist/components/slide-captcha.cjs +61 -0
  157. package/dist/components/slide-captcha.cjs.map +1 -1
  158. package/dist/components/slide-captcha.js +61 -0
  159. package/dist/components/slide-captcha.js.map +1 -1
  160. package/dist/components/swiper.cjs +61 -0
  161. package/dist/components/swiper.cjs.map +1 -1
  162. package/dist/components/swiper.js +61 -0
  163. package/dist/components/swiper.js.map +1 -1
  164. package/dist/components/switch.cjs.map +1 -1
  165. package/dist/components/switch.js.map +1 -1
  166. package/dist/components/table.cjs +61 -0
  167. package/dist/components/table.cjs.map +1 -1
  168. package/dist/components/table.js +61 -0
  169. package/dist/components/table.js.map +1 -1
  170. package/dist/components/tabs.cjs.map +1 -1
  171. package/dist/components/tabs.js.map +1 -1
  172. package/dist/components/tag.cjs +61 -0
  173. package/dist/components/tag.cjs.map +1 -1
  174. package/dist/components/tag.js +61 -0
  175. package/dist/components/tag.js.map +1 -1
  176. package/dist/components/textarea.cjs +61 -0
  177. package/dist/components/textarea.cjs.map +1 -1
  178. package/dist/components/textarea.js +61 -0
  179. package/dist/components/textarea.js.map +1 -1
  180. package/dist/components/theme-box.cjs.map +1 -1
  181. package/dist/components/theme-box.js.map +1 -1
  182. package/dist/components/tilt-card.cjs.map +1 -1
  183. package/dist/components/tilt-card.js.map +1 -1
  184. package/dist/components/timeline.cjs.map +1 -1
  185. package/dist/components/timeline.js.map +1 -1
  186. package/dist/components/toast.cjs +61 -0
  187. package/dist/components/toast.cjs.map +1 -1
  188. package/dist/components/toast.js +61 -0
  189. package/dist/components/toast.js.map +1 -1
  190. package/dist/components/tooltip.cjs.map +1 -1
  191. package/dist/components/tooltip.js.map +1 -1
  192. package/dist/components/typewriter-text.cjs.map +1 -1
  193. package/dist/components/typewriter-text.js.map +1 -1
  194. package/dist/components/upload.cjs +61 -0
  195. package/dist/components/upload.cjs.map +1 -1
  196. package/dist/components/upload.js +61 -0
  197. package/dist/components/upload.js.map +1 -1
  198. package/dist/components/verification-code.cjs.map +1 -1
  199. package/dist/components/verification-code.js.map +1 -1
  200. package/dist/components/video-detail-transition.cjs +61 -0
  201. package/dist/components/video-detail-transition.cjs.map +1 -1
  202. package/dist/components/video-detail-transition.js +61 -0
  203. package/dist/components/video-detail-transition.js.map +1 -1
  204. package/dist/components/video-player.cjs.map +1 -1
  205. package/dist/components/video-player.js.map +1 -1
  206. package/dist/components/virtual-list.cjs.map +1 -1
  207. package/dist/components/virtual-list.js.map +1 -1
  208. package/dist/components/virtual-select.cjs +61 -0
  209. package/dist/components/virtual-select.cjs.map +1 -1
  210. package/dist/components/virtual-select.js +61 -0
  211. package/dist/components/virtual-select.js.map +1 -1
  212. package/dist/components/virtual-table.cjs +61 -0
  213. package/dist/components/virtual-table.cjs.map +1 -1
  214. package/dist/components/virtual-table.js +61 -0
  215. package/dist/components/virtual-table.js.map +1 -1
  216. package/dist/components/width-transition.cjs.map +1 -1
  217. package/dist/components/width-transition.js.map +1 -1
  218. package/dist/import-transform-BJDUXanp.js +153 -0
  219. package/dist/import-transform-BJDUXanp.js.map +1 -0
  220. package/dist/import-transform-yUes6fHV.js +151 -0
  221. package/dist/import-transform-yUes6fHV.js.map +1 -0
  222. package/dist/import-transform.d.ts.map +1 -1
  223. package/dist/index.cjs +817 -13
  224. package/dist/index.cjs.map +1 -1
  225. package/dist/index.d.ts +80 -26
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.js +816 -17
  228. package/dist/index.js.map +1 -1
  229. package/dist/styles/components/password-input.css +4 -4
  230. package/dist/styles/components/rich-editor.css +511 -0
  231. package/dist/styles/components/tooltip.css +24 -0
  232. package/dist/styles/components.css +513 -4
  233. package/dist/styles/themes/dark-tech.css +34 -0
  234. package/dist/styles.css +513 -4
  235. package/dist/vite.cjs +1 -1
  236. package/dist/vite.js +1 -1
  237. package/dist/webpack-loader.cjs +1 -1
  238. package/dist/webpack-loader.js +1 -1
  239. package/package.json +11 -3
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { defineComponent, ref, watch, onBeforeUnmount, h, inject, shallowRef, onMounted, provide, computed, Teleport, nextTick } from 'vue';
2
- import { configureClassComponents, ToastManager, FormController, getClassComponentsLocale, PasswordInputController, ColorPickerController, DatePickerController, DateRangePickerController, ChatTextareaController, VerificationCodeController, SlideCaptchaController, VirtualSelectController, VirtualListController, RollingNumberController, CountdownController, CalendarController, TypewriterTextController, DesignEffectController, GradientTextController, LazyImageController, TiltCardController, OrbitalSphereController, HeightTransitionController, WidthTransitionController, ThemeBoxController, CodePreviewController, VideoPlayerController, VideoDetailTransitionController, FilePreviewController, CanvasEditorController, ProgressController, SignatureController, TimelineController, DragController, DropController, GestureController, FloatingBallController, MultiColumnPickerController, SwiperController, MasonryVirtualListController, ChatVirtualListController, BadgeController, TagController, SkeletonController, BreadcrumbController, MenuController, PaginationController, BacktopController, ModalController, PopupController, TooltipController, TabsController, TableController, UploadController, NovelReaderController, ComicReaderController, DanmakuController, LiveRoomController, AffixController, CanvasImageController, MarqueeController, getSafeTooltipPlacement } from '@class-kit/core';
3
- export { AffixController, BacktopController, BadgeController, BreadcrumbController, CalendarController, CanvasEditorController, CanvasImageController, ChatVirtualListController, CodePreviewController, ColorPickerController, ComicReaderController, CountdownController, DanmakuController, DatePickerController, DateRangePickerController, DesignEffectController, DragController, DropController, FilePreviewController, FloatingBallController, FormController, GestureController, GradientTextController, HeightTransitionController, LazyImageController, LiveRoomController, MasonryVirtualListController, MenuController, ModalController, MultiColumnPickerController, NovelReaderController, OrbitalSphereController, PaginationController, PasswordInputController, PopupController, ProgressController, SignatureController, SkeletonController, SlideCaptchaController, SwiperController, TableController, TabsController, TagController, ThemeBoxController, TiltCardController, TimelineController, ToastManager, TooltipController, TypewriterTextController, UploadController, VerificationCodeController, VideoDetailTransitionController, VideoPlayerController, VirtualListController, VirtualSelectController, WidthTransitionController, configureClassComponents, getClassComponentsConfig, getClassComponentsLocale, resetClassComponentsConfig } from '@class-kit/core';
1
+ import { defineComponent, ref, watch, onBeforeUnmount, h, inject, shallowRef, onMounted, provide, computed, nextTick, Teleport } from 'vue';
2
+ import { configureClassComponents, ToastManager, FormController, getClassComponentsLocale, PasswordInputController, RichEditorController, ColorPickerController, DatePickerController, DateRangePickerController, ChatTextareaController, VerificationCodeController, SlideCaptchaController, VirtualSelectController, VirtualListController, RollingNumberController, CountdownController, CalendarController, TypewriterTextController, DesignEffectController, GradientTextController, LazyImageController, TiltCardController, OrbitalSphereController, HeightTransitionController, WidthTransitionController, ThemeBoxController, CodePreviewController, VideoPlayerController, VideoDetailTransitionController, FilePreviewController, CanvasEditorController, ProgressController, SignatureController, TimelineController, DragController, DropController, GestureController, FloatingBallController, MultiColumnPickerController, SwiperController, MasonryVirtualListController, ChatVirtualListController, BadgeController, TagController, SkeletonController, BreadcrumbController, MenuController, PaginationController, BacktopController, ModalController, PopupController, TooltipController, TabsController, TableController, UploadController, NovelReaderController, ComicReaderController, DanmakuController, LiveRoomController, AffixController, CanvasImageController, MarqueeController, getSafeTooltipPlacement } from '@class-kit/core';
3
+ export { AffixController, BacktopController, BadgeController, BreadcrumbController, CalendarController, CanvasEditorController, CanvasImageController, ChatVirtualListController, CodePreviewController, ColorPickerController, ComicReaderController, CountdownController, DanmakuController, DatePickerController, DateRangePickerController, DesignEffectController, DragController, DropController, FilePreviewController, FloatingBallController, FormController, GestureController, GradientTextController, HeightTransitionController, LazyImageController, LiveRoomController, MasonryVirtualListController, MenuController, ModalController, MultiColumnPickerController, NovelReaderController, OrbitalSphereController, PaginationController, PasswordInputController, PopupController, ProgressController, RichEditorController, SignatureController, SkeletonController, SlideCaptchaController, SwiperController, TableController, TabsController, TagController, ThemeBoxController, TiltCardController, TimelineController, ToastManager, TooltipController, TypewriterTextController, UploadController, VerificationCodeController, VideoDetailTransitionController, VideoPlayerController, VirtualListController, VirtualSelectController, WidthTransitionController, configureClassComponents, getClassComponentsConfig, getClassComponentsLocale, resetClassComponentsConfig } from '@class-kit/core';
4
4
 
5
5
  const formSymbol = /*#__PURE__*/ Symbol("ClassComponentsForm");
6
6
  const formInteractivitySymbol = /*#__PURE__*/ Symbol("ClassComponentsFormInteractivity");
@@ -8,11 +8,56 @@ const rollingDigits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
8
8
  let tooltipIdSeed = 0;
9
9
  const defaultToastManager = /*#__PURE__*/ new ToastManager();
10
10
  const classIconPaths = {
11
+ alignCenter: ["M6 6h12", "M4 12h16", "M7 18h10"],
12
+ alignLeft: ["M4 6h16", "M4 12h12", "M4 18h16"],
13
+ alignRight: ["M4 6h16", "M8 12h12", "M4 18h16"],
14
+ bold: ["M7 5h6a3.5 3.5 0 0 1 0 7H7z", "M7 12h7a3.5 3.5 0 0 1 0 7H7z"],
11
15
  chevronDown: ["M6 9l6 6 6-6"],
12
16
  chevronLeft: ["M15 18l-6-6 6-6"],
13
17
  chevronRight: ["M9 18l6-6-6-6"],
14
18
  chevronUp: ["M18 15l-6-6-6 6"],
15
19
  check: ["M20 6 9 17l-5-5"],
20
+ code: ["M9 18 3 12l6-6", "M15 6l6 6-6 6"],
21
+ eraser: ["M7 21h10", "M17 3 4 16l5 5 13-13z", "M14 6l4 4"],
22
+ fileCode: [
23
+ "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z",
24
+ "M14 2v6h6",
25
+ "M10 13l-2 2 2 2",
26
+ "M14 17l2-2-2-2",
27
+ ],
28
+ heading: ["M6 5v14", "M18 5v14", "M6 12h12"],
29
+ image: ["M5 5h14v14H5z", "M8 15l3-3 2 2 3-4 3 5", "M9 9h.01"],
30
+ italic: ["M10 5h8", "M6 19h8", "M14 5l-4 14"],
31
+ link: [
32
+ "M10 13a5 5 0 0 0 7.07 0l2-2a5 5 0 0 0-7.07-7.07l-1.1 1.1",
33
+ "M14 11a5 5 0 0 0-7.07 0l-2 2A5 5 0 0 0 12 20.07l1.1-1.1",
34
+ ],
35
+ list: [
36
+ "M8 6h13",
37
+ "M8 12h13",
38
+ "M8 18h13",
39
+ "M3 6h.01",
40
+ "M3 12h.01",
41
+ "M3 18h.01",
42
+ ],
43
+ listOrdered: [
44
+ "M10 6h11",
45
+ "M10 12h11",
46
+ "M10 18h11",
47
+ "M4 6h1v4",
48
+ "M4 10h2",
49
+ "M4 14a2 2 0 0 1 2 2c0 1-2 2-2 4h3",
50
+ ],
51
+ palette: [
52
+ "M12 3a9 9 0 0 0 0 18h1.5a1.8 1.8 0 0 0 1.2-3.1 1.8 1.8 0 0 1 1.2-3.1H18a6 6 0 0 0 0-12z",
53
+ "M7.5 10h.01",
54
+ "M10 6.5h.01",
55
+ "M14 6.5h.01",
56
+ "M16.5 10h.01",
57
+ ],
58
+ paragraph: ["M13 5v14", "M17 5v14", "M7 5h8a4 4 0 0 1 0 8H7z"],
59
+ quote: ["M8 11H5a3 3 0 0 1 3-3v8", "M19 11h-3a3 3 0 0 1 3-3v8"],
60
+ redo: ["M21 7v6h-6", "M21 13a8 8 0 1 1-2.34-5.66"],
16
61
  settings: [
17
62
  "M12 15.5A3.5 3.5 0 1 0 12 8a3.5 3.5 0 0 0 0 7.5Z",
18
63
  "M19.4 15a1.8 1.8 0 0 0 .36 1.98l.04.04a2.18 2.18 0 0 1-3.08 3.08l-.04-.04a1.8 1.8 0 0 0-1.98-.36 1.8 1.8 0 0 0-1 1.62V21a2.2 2.2 0 0 1-4.4 0v-.06a1.8 1.8 0 0 0-1-1.62 1.8 1.8 0 0 0-1.98.36l-.04.04A2.18 2.18 0 0 1 3.2 16.64l.04-.04A1.8 1.8 0 0 0 3.6 14.6a1.8 1.8 0 0 0-1.62-1H2a2.2 2.2 0 0 1 0-4.4h.06a1.8 1.8 0 0 0 1.62-1 1.8 1.8 0 0 0-.36-1.98l-.04-.04A2.18 2.18 0 0 1 6.36 3.1l.04.04a1.8 1.8 0 0 0 1.98.36h.08A1.8 1.8 0 0 0 9.4 1.88V1.8a2.2 2.2 0 0 1 4.4 0v.06a1.8 1.8 0 0 0 1 1.62 1.8 1.8 0 0 0 1.98-.36l.04-.04A2.18 2.18 0 0 1 19.9 6.16l-.04.04a1.8 1.8 0 0 0-.36 1.98v.08a1.8 1.8 0 0 0 1.62.94h.08a2.2 2.2 0 0 1 0 4.4h-.06A1.8 1.8 0 0 0 19.4 15Z",
@@ -20,6 +65,22 @@ const classIconPaths = {
20
65
  star: [
21
66
  "M12 2l3.09 6.26 6.91 1-5 4.87 1.18 6.87L12 17.77 5.82 21 7 14.13l-5-4.87 6.91-1L12 2Z",
22
67
  ],
68
+ strikethrough: [
69
+ "M5 12h14",
70
+ "M16 6.5A4 4 0 0 0 12.5 5H11a3 3 0 0 0-.7 5.9",
71
+ "M8 17.5A4.2 4.2 0 0 0 11.5 19H13a3 3 0 0 0 .7-5.9",
72
+ ],
73
+ table: ["M4 5h16v14H4z", "M4 11h16", "M10 5v14"],
74
+ trash: ["M3 6h18", "M8 6V4h8v2", "M6 6l1 15h10l1-15", "M10 11v6", "M14 11v6"],
75
+ type: ["M4 7V5h16v2", "M12 5v14", "M8 19h8"],
76
+ underline: ["M7 5v6a5 5 0 0 0 10 0V5", "M5 21h14"],
77
+ undo: ["M3 7v6h6", "M3 13a8 8 0 1 0 2.34-5.66"],
78
+ uploadCloud: [
79
+ "M16 16l-4-4-4 4",
80
+ "M12 12v9",
81
+ "M20 16.6A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25",
82
+ ],
83
+ video: ["M4 6h11v12H4z", "M15 10l5-3v10l-5-3z"],
23
84
  x: ["M18 6 6 18", "M6 6l12 12"],
24
85
  };
25
86
  function getClassKitGlobal() {
@@ -385,6 +446,7 @@ const ClassForm = /*#__PURE__*/ defineComponent({
385
446
  },
386
447
  setup(props, { slots }) {
387
448
  var _a;
449
+ const ownsController = !props.form;
388
450
  const controller = (_a = props.form) !== null && _a !== void 0 ? _a : new FormController({
389
451
  initialValues: props.initialValues,
390
452
  onSubmit: props.onSubmit,
@@ -395,7 +457,10 @@ const ClassForm = /*#__PURE__*/ defineComponent({
395
457
  disabled: computed(() => props.disabled),
396
458
  readOnly: computed(() => props.readOnly || props.readonly),
397
459
  });
398
- onBeforeUnmount(() => controller.destroy());
460
+ onBeforeUnmount(() => {
461
+ if (ownsController)
462
+ controller.destroy();
463
+ });
399
464
  return () => {
400
465
  var _a;
401
466
  return h("form", {
@@ -637,22 +702,16 @@ const ClassPasswordInput = /*#__PURE__*/ defineComponent({
637
702
  viewBox: "0 0 24 24",
638
703
  }, [
639
704
  h("path", {
640
- d: "M2.4 12s3.2-6.2 9.6-6.2S21.6 12 21.6 12s-3.2 6.2-9.6 6.2S2.4 12 2.4 12Z",
705
+ d: "M3.2 12.1c1.9-3.35 4.75-5.05 8.8-5.05s6.9 1.7 8.8 5.05c-1.9 3.35-4.75 5.05-8.8 5.05s-6.9-1.7-8.8-5.05Z",
641
706
  }),
642
707
  h("path", {
643
- d: "M12 8.8a3.2 3.2 0 1 1 0 6.4 3.2 3.2 0 0 1 0-6.4Z",
708
+ d: "M12 9.45a2.65 2.65 0 1 1 0 5.3 2.65 2.65 0 0 1 0-5.3Z",
644
709
  }),
645
710
  !state.visible
646
- ? [
647
- h("path", {
648
- class: "cc-password-field__eye-mask",
649
- d: "M6.2 5.1 18.9 17.8",
650
- }),
651
- h("path", {
652
- class: "cc-password-field__eye-mask",
653
- d: "M3.7 3.9 20.3 20.1",
654
- }),
655
- ]
711
+ ? h("path", {
712
+ class: "cc-password-field__eye-mask",
713
+ d: "M4.8 4.9 19.2 19.1",
714
+ })
656
715
  : null,
657
716
  ]);
658
717
  }
@@ -729,6 +788,746 @@ const ClassPasswordInput = /*#__PURE__*/ defineComponent({
729
788
  };
730
789
  },
731
790
  });
791
+ const dynamicImportModule = (name) => new Function("name", "return import(name)")(name);
792
+ function normalizeRichEditorUrl(value) {
793
+ var _a;
794
+ const url = (_a = value === null || value === void 0 ? void 0 : value.trim()) !== null && _a !== void 0 ? _a : "";
795
+ if (!url)
796
+ return "";
797
+ try {
798
+ const parsed = new URL(url);
799
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:")
800
+ return "";
801
+ return parsed.toString();
802
+ }
803
+ catch (_b) {
804
+ return "";
805
+ }
806
+ }
807
+ function createRichEditorTableHtml() {
808
+ return [
809
+ '<table style="width: 100%; border-collapse: collapse;">',
810
+ "<tbody>",
811
+ "<tr><td>标题</td><td>内容</td></tr>",
812
+ "<tr><td>示例</td><td>可继续编辑</td></tr>",
813
+ "</tbody>",
814
+ "</table><p><br></p>",
815
+ ].join("");
816
+ }
817
+ function getRichEditorImageFiles(files) {
818
+ return Array.from(files !== null && files !== void 0 ? files : []).filter((file) => file.type.startsWith("image/"));
819
+ }
820
+ function resolveRichEditorUploadUrl(payload) {
821
+ var _a, _b, _c, _d, _e, _f, _g, _h;
822
+ if (typeof payload === "string")
823
+ return payload;
824
+ if (!payload || typeof payload !== "object")
825
+ return "";
826
+ const record = payload;
827
+ const data = record.data;
828
+ return String((_h = (_g = (_f = (_e = (_d = (_c = (_b = (_a = record.url) !== null && _a !== void 0 ? _a : record.href) !== null && _b !== void 0 ? _b : record.src) !== null && _c !== void 0 ? _c : record.path) !== null && _d !== void 0 ? _d : data === null || data === void 0 ? void 0 : data.url) !== null && _e !== void 0 ? _e : data === null || data === void 0 ? void 0 : data.href) !== null && _f !== void 0 ? _f : data === null || data === void 0 ? void 0 : data.src) !== null && _g !== void 0 ? _g : data === null || data === void 0 ? void 0 : data.path) !== null && _h !== void 0 ? _h : "");
829
+ }
830
+ async function postRichEditorImage(file, uploadUrl, uploadHeaders) {
831
+ const formData = new FormData();
832
+ formData.append("file", file);
833
+ const response = await fetch(uploadUrl, {
834
+ body: formData,
835
+ credentials: "include",
836
+ headers: uploadHeaders,
837
+ method: "POST",
838
+ });
839
+ if (!response.ok) {
840
+ throw new Error("图片上传失败,请重试");
841
+ }
842
+ const payload = await response.json().catch(() => undefined);
843
+ const url = resolveRichEditorUploadUrl(payload);
844
+ if (!url) {
845
+ throw new Error("图片上传失败,请重试");
846
+ }
847
+ return { url };
848
+ }
849
+ const ClassRichEditor = /*#__PURE__*/ defineComponent({
850
+ name: "ClassRichEditor",
851
+ props: {
852
+ className: String,
853
+ disabled: Boolean,
854
+ height: {
855
+ type: Number,
856
+ default: 400,
857
+ },
858
+ onError: Function,
859
+ placeholder: {
860
+ type: String,
861
+ default: "请输入内容",
862
+ },
863
+ readOnly: Boolean,
864
+ uploadHeaders: Object,
865
+ uploadImage: Function,
866
+ uploadUrl: String,
867
+ value: {
868
+ type: String,
869
+ default: "",
870
+ },
871
+ },
872
+ emits: ["update:value", "change", "error"],
873
+ setup(props, { emit }) {
874
+ const controller = new RichEditorController({ html: props.value });
875
+ const html = ref(controller.getState().html);
876
+ const sourceMode = ref(false);
877
+ const uploading = ref(false);
878
+ const notice = ref(null);
879
+ const wang = shallowRef(null);
880
+ const editor = shallowRef(null);
881
+ const fallbackEditor = ref(null);
882
+ const fileInput = ref(null);
883
+ const urlDialogInput = ref(null);
884
+ const fallbackSelection = shallowRef(null);
885
+ const urlDialog = ref(null);
886
+ const toastManager = new ToastManager();
887
+ const syncFallbackEditor = () => {
888
+ var _a;
889
+ const element = fallbackEditor.value;
890
+ if (!element || sourceMode.value || ((_a = wang.value) === null || _a === void 0 ? void 0 : _a.Editor))
891
+ return;
892
+ if (document.activeElement === element)
893
+ return;
894
+ if (element.innerHTML !== html.value)
895
+ element.innerHTML = html.value;
896
+ };
897
+ const emitError = (message) => {
898
+ var _a;
899
+ toastManager.show({ message, tone: "danger" });
900
+ (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, message);
901
+ emit("error", message);
902
+ };
903
+ const commitHtml = (nextHtml) => {
904
+ const state = controller.setHtml(nextHtml);
905
+ html.value = state.html;
906
+ emit("update:value", state.html);
907
+ emit("change", state.html);
908
+ return state.html;
909
+ };
910
+ const uploadHandler = async (file) => {
911
+ if (props.uploadImage)
912
+ return props.uploadImage(file);
913
+ if (props.uploadUrl) {
914
+ return postRichEditorImage(file, props.uploadUrl, props.uploadHeaders);
915
+ }
916
+ throw new Error("请配置图片上传接口");
917
+ };
918
+ const saveFallbackSelection = () => {
919
+ const element = fallbackEditor.value;
920
+ const selection = window.getSelection();
921
+ if (!element || !selection || selection.rangeCount === 0)
922
+ return;
923
+ const range = selection.getRangeAt(0);
924
+ if (!element.contains(range.commonAncestorContainer))
925
+ return;
926
+ fallbackSelection.value = range.cloneRange();
927
+ };
928
+ const restoreFallbackSelection = () => {
929
+ if (!fallbackSelection.value)
930
+ return;
931
+ const selection = window.getSelection();
932
+ selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
933
+ selection === null || selection === void 0 ? void 0 : selection.addRange(fallbackSelection.value);
934
+ };
935
+ const insertFallbackHtml = (nextHtml) => {
936
+ var _a;
937
+ (_a = fallbackEditor.value) === null || _a === void 0 ? void 0 : _a.focus();
938
+ restoreFallbackSelection();
939
+ document.execCommand("insertHTML", false, nextHtml);
940
+ if (fallbackEditor.value)
941
+ commitHtml(fallbackEditor.value.innerHTML);
942
+ };
943
+ const runFallbackCommand = (command, value) => {
944
+ var _a;
945
+ (_a = fallbackEditor.value) === null || _a === void 0 ? void 0 : _a.focus();
946
+ restoreFallbackSelection();
947
+ document.execCommand(command, false, value);
948
+ if (fallbackEditor.value)
949
+ commitHtml(fallbackEditor.value.innerHTML);
950
+ };
951
+ const deleteSelectedContent = () => {
952
+ var _a, _b, _c;
953
+ if (props.disabled)
954
+ return;
955
+ const currentEditor = editor.value;
956
+ if (currentEditor === null || currentEditor === void 0 ? void 0 : currentEditor.deleteFragment) {
957
+ (_a = currentEditor.focus) === null || _a === void 0 ? void 0 : _a.call(currentEditor);
958
+ currentEditor.deleteFragment();
959
+ const nextHtml = (_b = currentEditor.getHtml) === null || _b === void 0 ? void 0 : _b.call(currentEditor);
960
+ if (typeof nextHtml === "string")
961
+ commitHtml(nextHtml);
962
+ return;
963
+ }
964
+ (_c = fallbackEditor.value) === null || _c === void 0 ? void 0 : _c.focus();
965
+ restoreFallbackSelection();
966
+ document.execCommand("delete");
967
+ if (fallbackEditor.value)
968
+ commitHtml(fallbackEditor.value.innerHTML);
969
+ };
970
+ const handleFallbackUpload = async (files) => {
971
+ const images = getRichEditorImageFiles(files);
972
+ if (images.length === 0)
973
+ return;
974
+ uploading.value = true;
975
+ notice.value = { text: "图片上传中...", type: "loading" };
976
+ try {
977
+ for (const file of images) {
978
+ const result = await controller.uploadImage(file, uploadHandler);
979
+ insertFallbackHtml(`<p><img src="${result.url}" alt="${file.name}" /></p>`);
980
+ }
981
+ notice.value = { text: "图片上传完成", type: "success" };
982
+ }
983
+ catch (error) {
984
+ emitError(error instanceof Error ? error.message : "图片上传失败,请重试");
985
+ }
986
+ finally {
987
+ uploading.value = false;
988
+ if (fileInput.value)
989
+ fileInput.value.value = "";
990
+ }
991
+ };
992
+ const openFallbackUrlDialog = (kind) => {
993
+ saveFallbackSelection();
994
+ const locale = getClassComponentsLocale();
995
+ const dialogMap = {
996
+ image: {
997
+ icon: "image",
998
+ placeholder: locale.richEditorInsertImagePlaceholder,
999
+ title: locale.richEditorInsertImageTitle,
1000
+ },
1001
+ link: {
1002
+ icon: "link",
1003
+ placeholder: locale.richEditorInsertLinkPlaceholder,
1004
+ title: locale.richEditorInsertLinkTitle,
1005
+ },
1006
+ video: {
1007
+ icon: "video",
1008
+ placeholder: locale.richEditorInsertVideoPlaceholder,
1009
+ title: locale.richEditorInsertVideoTitle,
1010
+ },
1011
+ };
1012
+ urlDialog.value = { ...dialogMap[kind], kind, value: "" };
1013
+ void nextTick(() => { var _a; return (_a = urlDialogInput.value) === null || _a === void 0 ? void 0 : _a.focus(); });
1014
+ };
1015
+ const closeFallbackUrlDialog = () => {
1016
+ urlDialog.value = null;
1017
+ };
1018
+ const submitFallbackUrlDialog = () => {
1019
+ var _a;
1020
+ if (!urlDialog.value)
1021
+ return;
1022
+ const dialog = urlDialog.value;
1023
+ const url = normalizeRichEditorUrl(dialog.value);
1024
+ if (!url) {
1025
+ emitError(getClassComponentsLocale().richEditorInvalidUrlText);
1026
+ return;
1027
+ }
1028
+ if (dialog.kind === "image") {
1029
+ insertFallbackHtml(`<p><img src="${url}" alt="" /></p>`);
1030
+ }
1031
+ else if (dialog.kind === "video") {
1032
+ insertFallbackHtml(`<p><video controls src="${url}"></video></p>`);
1033
+ }
1034
+ else {
1035
+ restoreFallbackSelection();
1036
+ const text = ((_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) || url;
1037
+ insertFallbackHtml(`<a href="${url}" target="_blank" rel="noopener noreferrer">${text}</a>`);
1038
+ }
1039
+ urlDialog.value = null;
1040
+ };
1041
+ watch(() => props.value, (nextValue) => {
1042
+ const nextHtml = controller.setHtml(nextValue !== null && nextValue !== void 0 ? nextValue : "").html;
1043
+ if (html.value !== nextHtml)
1044
+ html.value = nextHtml;
1045
+ });
1046
+ watch(html, () => void nextTick(syncFallbackEditor), { flush: "post" });
1047
+ watch(() => { var _a; return [sourceMode.value, (_a = wang.value) === null || _a === void 0 ? void 0 : _a.Editor]; }, () => void nextTick(syncFallbackEditor), { flush: "post" });
1048
+ watch(() => [props.disabled, props.readOnly], () => {
1049
+ var _a, _b, _c, _d;
1050
+ if (props.disabled || props.readOnly)
1051
+ (_b = (_a = editor.value) === null || _a === void 0 ? void 0 : _a.disable) === null || _b === void 0 ? void 0 : _b.call(_a);
1052
+ else
1053
+ (_d = (_c = editor.value) === null || _c === void 0 ? void 0 : _c.enable) === null || _d === void 0 ? void 0 : _d.call(_c);
1054
+ });
1055
+ onMounted(() => {
1056
+ syncFallbackEditor();
1057
+ dynamicImportModule("@wangeditor/editor-for-vue")
1058
+ .then((module) => {
1059
+ wang.value = module;
1060
+ })
1061
+ .catch(() => {
1062
+ wang.value = null;
1063
+ });
1064
+ });
1065
+ onBeforeUnmount(() => {
1066
+ var _a, _b;
1067
+ (_b = (_a = editor.value) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
1068
+ editor.value = null;
1069
+ });
1070
+ const toolbarConfig = {
1071
+ toolbarKeys: [
1072
+ "bold",
1073
+ "italic",
1074
+ "underline",
1075
+ "through",
1076
+ "color",
1077
+ "bgColor",
1078
+ "fontSize",
1079
+ "justifyLeft",
1080
+ "justifyCenter",
1081
+ "justifyRight",
1082
+ "justifyJustify",
1083
+ "numberedList",
1084
+ "bulletedList",
1085
+ "lineHeight",
1086
+ "indent",
1087
+ "delIndent",
1088
+ "blockquote",
1089
+ "codeBlock",
1090
+ "uploadImage",
1091
+ "insertImage",
1092
+ "insertVideo",
1093
+ "insertTable",
1094
+ "insertLink",
1095
+ "unLink",
1096
+ "undo",
1097
+ "redo",
1098
+ "clearStyle",
1099
+ ],
1100
+ };
1101
+ const editorConfig = {
1102
+ MENU_CONF: {
1103
+ uploadImage: {
1104
+ allowedFileTypes: [
1105
+ "image/jpeg",
1106
+ "image/jpg",
1107
+ "image/png",
1108
+ "image/gif",
1109
+ "image/webp",
1110
+ ],
1111
+ customUpload: async (file, insertFn) => {
1112
+ uploading.value = true;
1113
+ notice.value = { text: "图片上传中...", type: "loading" };
1114
+ try {
1115
+ const result = await controller.uploadImage(file, uploadHandler);
1116
+ insertFn(result.url, file.name, result.url);
1117
+ notice.value = { text: "图片上传完成", type: "success" };
1118
+ }
1119
+ catch (error) {
1120
+ emitError(error instanceof Error ? error.message : "图片上传失败,请重试");
1121
+ }
1122
+ finally {
1123
+ uploading.value = false;
1124
+ }
1125
+ },
1126
+ },
1127
+ },
1128
+ autoFocus: false,
1129
+ placeholder: props.placeholder,
1130
+ readOnly: props.disabled,
1131
+ customPaste: (_editor, event) => {
1132
+ var _a;
1133
+ const pastedHtml = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData("text/html");
1134
+ if (!pastedHtml)
1135
+ return true;
1136
+ event.preventDefault();
1137
+ _editor.dangerouslyInsertHtml(controller.sanitize(pastedHtml));
1138
+ return false;
1139
+ },
1140
+ };
1141
+ const toolTip = (content, child) => h(ClassTooltip, { content, placement: "bottom" }, { default: () => child });
1142
+ const toolIcon = (icon) => h("span", { class: "cc-rich-editor__summary-icon" }, [
1143
+ classIcon(icon),
1144
+ classIcon("chevronDown", "cc-rich-editor__chevron"),
1145
+ ]);
1146
+ const toolGroup = (label, icon, children) => h("div", {
1147
+ class: "cc-rich-editor__tool-group",
1148
+ "data-disabled": props.disabled ? "true" : "false",
1149
+ }, [
1150
+ toolTip(label, h("button", {
1151
+ "aria-haspopup": "menu",
1152
+ "aria-label": label,
1153
+ class: "cc-rich-editor__tool-trigger",
1154
+ disabled: props.disabled,
1155
+ type: "button",
1156
+ }, [toolIcon(icon)])),
1157
+ h("div", { class: "cc-rich-editor__tool-menu", role: "menu" }, children),
1158
+ ]);
1159
+ return () => {
1160
+ var _a, _b, _c;
1161
+ const locale = getClassComponentsLocale();
1162
+ const rootClass = [
1163
+ "cc-rich-editor",
1164
+ props.readOnly ? "cc-rich-editor--readonly" : "",
1165
+ props.disabled ? "cc-rich-editor--disabled" : "",
1166
+ (_a = props.className) !== null && _a !== void 0 ? _a : "",
1167
+ ]
1168
+ .filter(Boolean)
1169
+ .join(" ");
1170
+ if (props.readOnly) {
1171
+ return h("div", { class: rootClass }, [
1172
+ h("div", {
1173
+ class: "cc-rich-editor__preview",
1174
+ innerHTML: html.value,
1175
+ style: { minHeight: `${props.height}px` },
1176
+ }),
1177
+ ]);
1178
+ }
1179
+ const toolbar = ((_b = wang.value) === null || _b === void 0 ? void 0 : _b.Toolbar) && editor.value
1180
+ ? h(wang.value.Toolbar, {
1181
+ defaultConfig: toolbarConfig,
1182
+ editor: editor.value,
1183
+ mode: "default",
1184
+ })
1185
+ : h("div", { class: "cc-rich-editor__fallback-toolbar" }, [
1186
+ toolTip("加粗", h("button", {
1187
+ "aria-label": "加粗",
1188
+ class: "cc-rich-editor__tool",
1189
+ disabled: props.disabled,
1190
+ type: "button",
1191
+ onClick: () => runFallbackCommand("bold"),
1192
+ }, [classIcon("bold")])),
1193
+ toolTip("斜体", h("button", {
1194
+ "aria-label": "斜体",
1195
+ class: "cc-rich-editor__tool",
1196
+ disabled: props.disabled,
1197
+ type: "button",
1198
+ onClick: () => runFallbackCommand("italic"),
1199
+ }, [classIcon("italic")])),
1200
+ toolTip("下划线", h("button", {
1201
+ "aria-label": "下划线",
1202
+ class: "cc-rich-editor__tool",
1203
+ disabled: props.disabled,
1204
+ type: "button",
1205
+ onClick: () => runFallbackCommand("underline"),
1206
+ }, [classIcon("underline")])),
1207
+ toolTip("删除线", h("button", {
1208
+ "aria-label": "删除线",
1209
+ class: "cc-rich-editor__tool",
1210
+ disabled: props.disabled,
1211
+ type: "button",
1212
+ onClick: () => runFallbackCommand("strikeThrough"),
1213
+ }, [classIcon("strikethrough")])),
1214
+ toolTip("文字色", h("label", {
1215
+ "aria-label": "文字色",
1216
+ class: "cc-rich-editor__color-tool",
1217
+ "data-disabled": props.disabled ? "true" : "false",
1218
+ }, [
1219
+ classIcon("type"),
1220
+ h("input", {
1221
+ disabled: props.disabled,
1222
+ type: "color",
1223
+ onChange: (event) => runFallbackCommand("foreColor", event.currentTarget.value),
1224
+ }),
1225
+ ])),
1226
+ toolTip("背景色", h("label", {
1227
+ "aria-label": "背景色",
1228
+ class: "cc-rich-editor__color-tool cc-rich-editor__color-tool--background",
1229
+ "data-disabled": props.disabled ? "true" : "false",
1230
+ }, [
1231
+ classIcon("palette"),
1232
+ h("input", {
1233
+ disabled: props.disabled,
1234
+ type: "color",
1235
+ onChange: (event) => runFallbackCommand("hiliteColor", event.currentTarget.value),
1236
+ }),
1237
+ ])),
1238
+ toolGroup("段落和字号", "type", [
1239
+ h("button", {
1240
+ disabled: props.disabled,
1241
+ type: "button",
1242
+ onClick: () => runFallbackCommand("formatBlock", "p"),
1243
+ }, [classIcon("paragraph"), h("span", "正文")]),
1244
+ h("button", {
1245
+ disabled: props.disabled,
1246
+ type: "button",
1247
+ onClick: () => runFallbackCommand("formatBlock", "h2"),
1248
+ }, [classIcon("heading"), h("span", "标题")]),
1249
+ h("button", {
1250
+ disabled: props.disabled,
1251
+ type: "button",
1252
+ onClick: () => runFallbackCommand("fontSize", "2"),
1253
+ }, [classIcon("type"), h("span", "小字")]),
1254
+ h("button", {
1255
+ disabled: props.disabled,
1256
+ type: "button",
1257
+ onClick: () => runFallbackCommand("fontSize", "4"),
1258
+ }, [classIcon("type"), h("span", "大字")]),
1259
+ ]),
1260
+ toolGroup("对齐", "alignLeft", [
1261
+ h("button", {
1262
+ disabled: props.disabled,
1263
+ type: "button",
1264
+ onClick: () => runFallbackCommand("justifyLeft"),
1265
+ }, [classIcon("alignLeft"), h("span", "左对齐")]),
1266
+ h("button", {
1267
+ disabled: props.disabled,
1268
+ type: "button",
1269
+ onClick: () => runFallbackCommand("justifyCenter"),
1270
+ }, [classIcon("alignCenter"), h("span", "居中")]),
1271
+ h("button", {
1272
+ disabled: props.disabled,
1273
+ type: "button",
1274
+ onClick: () => runFallbackCommand("justifyRight"),
1275
+ }, [classIcon("alignRight"), h("span", "右对齐")]),
1276
+ ]),
1277
+ toolGroup("段落功能", "list", [
1278
+ h("button", {
1279
+ disabled: props.disabled,
1280
+ type: "button",
1281
+ onClick: () => runFallbackCommand("insertOrderedList"),
1282
+ }, [classIcon("listOrdered"), h("span", "有序列表")]),
1283
+ h("button", {
1284
+ disabled: props.disabled,
1285
+ type: "button",
1286
+ onClick: () => runFallbackCommand("insertUnorderedList"),
1287
+ }, [classIcon("list"), h("span", "无序列表")]),
1288
+ h("button", {
1289
+ disabled: props.disabled,
1290
+ type: "button",
1291
+ onClick: () => runFallbackCommand("formatBlock", "blockquote"),
1292
+ }, [classIcon("quote"), h("span", "引用")]),
1293
+ h("button", {
1294
+ disabled: props.disabled,
1295
+ type: "button",
1296
+ onClick: () => runFallbackCommand("formatBlock", "pre"),
1297
+ }, [classIcon("code"), h("span", "代码块")]),
1298
+ ]),
1299
+ toolGroup("插入", "image", [
1300
+ h("button", {
1301
+ disabled: props.disabled || uploading.value,
1302
+ type: "button",
1303
+ onClick: () => { var _a; return (_a = fileInput.value) === null || _a === void 0 ? void 0 : _a.click(); },
1304
+ }, [
1305
+ classIcon("uploadCloud"),
1306
+ h("span", uploading.value ? "上传中" : "本地图片"),
1307
+ ]),
1308
+ h("button", {
1309
+ disabled: props.disabled,
1310
+ type: "button",
1311
+ onClick: () => openFallbackUrlDialog("image"),
1312
+ }, [classIcon("image"), h("span", "网络图片")]),
1313
+ h("button", {
1314
+ disabled: props.disabled,
1315
+ type: "button",
1316
+ onClick: () => openFallbackUrlDialog("video"),
1317
+ }, [classIcon("video"), h("span", "视频链接")]),
1318
+ h("button", {
1319
+ disabled: props.disabled,
1320
+ type: "button",
1321
+ onClick: () => insertFallbackHtml(createRichEditorTableHtml()),
1322
+ }, [classIcon("table"), h("span", "表格")]),
1323
+ h("button", {
1324
+ disabled: props.disabled,
1325
+ type: "button",
1326
+ onClick: () => openFallbackUrlDialog("link"),
1327
+ }, [classIcon("link"), h("span", "链接")]),
1328
+ ]),
1329
+ toolTip("清除格式", h("button", {
1330
+ "aria-label": "清除格式",
1331
+ class: "cc-rich-editor__tool",
1332
+ disabled: props.disabled,
1333
+ type: "button",
1334
+ onClick: () => runFallbackCommand("removeFormat"),
1335
+ }, [classIcon("eraser")])),
1336
+ toolTip("撤销", h("button", {
1337
+ "aria-label": "撤销",
1338
+ class: "cc-rich-editor__tool",
1339
+ disabled: props.disabled,
1340
+ type: "button",
1341
+ onClick: () => runFallbackCommand("undo"),
1342
+ }, [classIcon("undo")])),
1343
+ toolTip("恢复撤销", h("button", {
1344
+ "aria-label": "恢复撤销",
1345
+ class: "cc-rich-editor__tool",
1346
+ disabled: props.disabled,
1347
+ type: "button",
1348
+ onClick: () => runFallbackCommand("redo"),
1349
+ }, [classIcon("redo")])),
1350
+ h("input", {
1351
+ accept: "image/jpeg,image/jpg,image/png,image/gif,image/webp",
1352
+ hidden: true,
1353
+ multiple: true,
1354
+ ref: fileInput,
1355
+ type: "file",
1356
+ onChange: (event) => void handleFallbackUpload(event.currentTarget.files),
1357
+ }),
1358
+ ]);
1359
+ return h("div", { class: rootClass }, [
1360
+ h("div", { class: "cc-rich-editor__toolbar-row" }, [
1361
+ toolbar,
1362
+ h("div", { class: "cc-rich-editor__toolbar-actions" }, [
1363
+ toolTip("删除选中", h("button", {
1364
+ "aria-label": "删除选中",
1365
+ class: "cc-rich-editor__source-toggle",
1366
+ disabled: props.disabled,
1367
+ type: "button",
1368
+ onClick: deleteSelectedContent,
1369
+ onMousedown: (event) => event.preventDefault(),
1370
+ }, [classIcon("x")])),
1371
+ toolTip(sourceMode.value ? "预览" : "源码", h("button", {
1372
+ "aria-label": sourceMode.value ? "预览" : "源码",
1373
+ class: "cc-rich-editor__source-toggle",
1374
+ disabled: props.disabled,
1375
+ type: "button",
1376
+ onClick: () => {
1377
+ sourceMode.value = !sourceMode.value;
1378
+ },
1379
+ }, [classIcon(sourceMode.value ? "image" : "fileCode")])),
1380
+ toolTip("清空", h("button", {
1381
+ "aria-label": "清空",
1382
+ class: "cc-rich-editor__source-toggle",
1383
+ disabled: props.disabled,
1384
+ type: "button",
1385
+ onClick: () => commitHtml(""),
1386
+ }, [classIcon("trash")])),
1387
+ ]),
1388
+ ]),
1389
+ notice.value
1390
+ ? h("div", {
1391
+ class: "cc-rich-editor__notice",
1392
+ "data-type": notice.value.type,
1393
+ role: "status",
1394
+ }, notice.value.text)
1395
+ : null,
1396
+ h(ClassToastViewport, {
1397
+ className: "cc-toast-viewport cc-rich-editor__toast-viewport",
1398
+ manager: toastManager,
1399
+ maxVisible: 3,
1400
+ position: "top-right",
1401
+ }),
1402
+ urlDialog.value
1403
+ ? h("div", {
1404
+ "aria-modal": "true",
1405
+ class: "cc-rich-editor__url-modal",
1406
+ role: "dialog",
1407
+ }, [
1408
+ h("div", { class: "cc-rich-editor__url-panel" }, [
1409
+ h("div", { class: "cc-rich-editor__url-header" }, [
1410
+ h("span", { class: "cc-rich-editor__url-title" }, [
1411
+ classIcon(urlDialog.value.icon),
1412
+ urlDialog.value.title,
1413
+ ]),
1414
+ h("button", {
1415
+ "aria-label": "关闭",
1416
+ class: "cc-rich-editor__url-close",
1417
+ type: "button",
1418
+ onClick: closeFallbackUrlDialog,
1419
+ }, [classIcon("x")]),
1420
+ ]),
1421
+ h("label", { class: "cc-rich-editor__url-field" }, [
1422
+ h("span", locale.richEditorUrlFieldLabel),
1423
+ h("input", {
1424
+ ref: urlDialogInput,
1425
+ placeholder: urlDialog.value.placeholder,
1426
+ type: "url",
1427
+ value: urlDialog.value.value,
1428
+ onInput: (event) => {
1429
+ if (!urlDialog.value)
1430
+ return;
1431
+ urlDialog.value = {
1432
+ ...urlDialog.value,
1433
+ value: event.currentTarget
1434
+ .value,
1435
+ };
1436
+ },
1437
+ onKeydown: (event) => {
1438
+ if (event.key === "Enter")
1439
+ submitFallbackUrlDialog();
1440
+ if (event.key === "Escape")
1441
+ closeFallbackUrlDialog();
1442
+ },
1443
+ }),
1444
+ ]),
1445
+ h("div", { class: "cc-rich-editor__url-actions" }, [
1446
+ h("button", {
1447
+ type: "button",
1448
+ onClick: closeFallbackUrlDialog,
1449
+ }, locale.richEditorCancelText),
1450
+ h("button", {
1451
+ type: "button",
1452
+ onClick: submitFallbackUrlDialog,
1453
+ }, locale.richEditorInsertText),
1454
+ ]),
1455
+ ]),
1456
+ ])
1457
+ : null,
1458
+ sourceMode.value
1459
+ ? h("textarea", {
1460
+ class: "cc-rich-editor__source",
1461
+ disabled: props.disabled,
1462
+ onInput: (event) => commitHtml(event.target.value),
1463
+ placeholder: props.placeholder,
1464
+ style: { height: `${props.height}px` },
1465
+ value: html.value,
1466
+ })
1467
+ : ((_c = wang.value) === null || _c === void 0 ? void 0 : _c.Editor)
1468
+ ? h(wang.value.Editor, {
1469
+ defaultConfig: editorConfig,
1470
+ mode: "default",
1471
+ onChange: (nextEditor) => commitHtml(nextEditor.getHtml()),
1472
+ onCreated: (nextEditor) => {
1473
+ var _a;
1474
+ editor.value = nextEditor;
1475
+ if (props.disabled)
1476
+ (_a = nextEditor.disable) === null || _a === void 0 ? void 0 : _a.call(nextEditor);
1477
+ },
1478
+ "onUpdate:modelValue": (nextHtml) => commitHtml(nextHtml),
1479
+ modelValue: html.value,
1480
+ style: { height: `${props.height}px`, overflowY: "auto" },
1481
+ })
1482
+ : h("div", {
1483
+ class: "cc-rich-editor__fallback-editor",
1484
+ contenteditable: !props.disabled,
1485
+ "data-placeholder": props.placeholder,
1486
+ onBlur: (event) => commitHtml(event.currentTarget.innerHTML),
1487
+ onKeyup: saveFallbackSelection,
1488
+ onMouseup: saveFallbackSelection,
1489
+ onDragover: (event) => {
1490
+ var _a;
1491
+ if (props.disabled ||
1492
+ getRichEditorImageFiles((_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files)
1493
+ .length === 0)
1494
+ return;
1495
+ event.preventDefault();
1496
+ },
1497
+ onDrop: (event) => {
1498
+ var _a;
1499
+ const files = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files;
1500
+ if (props.disabled ||
1501
+ getRichEditorImageFiles(files).length === 0)
1502
+ return;
1503
+ event.preventDefault();
1504
+ void handleFallbackUpload(files !== null && files !== void 0 ? files : null);
1505
+ },
1506
+ onInput: (event) => commitHtml(event.currentTarget.innerHTML),
1507
+ onPaste: (event) => {
1508
+ var _a, _b, _c, _d;
1509
+ const imageFiles = getRichEditorImageFiles((_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.files);
1510
+ if (imageFiles.length > 0) {
1511
+ event.preventDefault();
1512
+ void handleFallbackUpload((_c = (_b = event.clipboardData) === null || _b === void 0 ? void 0 : _b.files) !== null && _c !== void 0 ? _c : null);
1513
+ return;
1514
+ }
1515
+ const pastedHtml = (_d = event.clipboardData) === null || _d === void 0 ? void 0 : _d.getData("text/html");
1516
+ if (!pastedHtml)
1517
+ return;
1518
+ event.preventDefault();
1519
+ document.execCommand("insertHTML", false, controller.sanitize(pastedHtml));
1520
+ if (fallbackEditor.value)
1521
+ commitHtml(fallbackEditor.value.innerHTML);
1522
+ },
1523
+ ref: fallbackEditor,
1524
+ role: "textbox",
1525
+ style: { minHeight: `${props.height}px` },
1526
+ }),
1527
+ ]);
1528
+ };
1529
+ },
1530
+ });
732
1531
  const ClassField = ClassInput;
733
1532
  const ClassColorPicker = /*#__PURE__*/ defineComponent({
734
1533
  name: "ClassColorPicker",
@@ -12374,5 +13173,5 @@ const ClassLiveRoom = /*#__PURE__*/ defineComponent({
12374
13173
  },
12375
13174
  });
12376
13175
 
12377
- export { ClassAffix, ClassBacktop, ClassBadge, ClassBarcode, ClassBreadcrumb, ClassButton, ClassCalendar, ClassCanvasEditor, ClassCanvasImage, ClassChatTextarea, ClassChatVirtualList, ClassCheckbox, ClassChecked, ClassCodePreview, ClassColorPicker, ClassComicReader, ClassConfigProvider, ClassConfigTable, ClassCountdown, ClassDanmaku, ClassDatePicker, ClassDateRangePicker, ClassDesignEffect, ClassDragDropBoard, ClassDraggable, ClassEllipsisText, ClassEmpty, ClassField, ClassFilePreview, ClassFloatingBall, ClassForm, ClassGradientText, ClassHeightTransition, ClassInput, ClassLazyImage, ClassLiveRoom, ClassLoading, ClassMarquee, ClassMasonryVirtualList, ClassMenu, ClassModal, ClassMultiColumnPicker, ClassNovelReader, ClassNumberInput, ClassOrbitalSphere, ClassPagination, ClassPasswordInput, ClassPopconfirm, ClassPopup, ClassProgressBar, ClassQRCode, ClassRadioGroup, ClassRating, ClassRollingNumber, ClassSelect, ClassSignature, ClassSkeleton, ClassSlideCaptcha, ClassSwiper, ClassSwitch, ClassTable, ClassTabs, ClassTag, ClassTextarea, ClassThemeBox, ClassTiltCard, ClassTimeline, ClassToastViewport, ClassTooltip, ClassTypewriterText, ClassUpload, ClassVerificationCode, ClassVideoDetailTransition, ClassVideoPlayer, ClassVirtualList, ClassVirtualSelect, ClassVirtualTable, ClassWidthTransition, defaultToastManager, useField, useForm, useFormState };
13176
+ export { ClassAffix, ClassBacktop, ClassBadge, ClassBarcode, ClassBreadcrumb, ClassButton, ClassCalendar, ClassCanvasEditor, ClassCanvasImage, ClassChatTextarea, ClassChatVirtualList, ClassCheckbox, ClassChecked, ClassCodePreview, ClassColorPicker, ClassComicReader, ClassConfigProvider, ClassConfigTable, ClassCountdown, ClassDanmaku, ClassDatePicker, ClassDateRangePicker, ClassDesignEffect, ClassDragDropBoard, ClassDraggable, ClassEllipsisText, ClassEmpty, ClassField, ClassFilePreview, ClassFloatingBall, ClassForm, ClassGradientText, ClassHeightTransition, ClassInput, ClassLazyImage, ClassLiveRoom, ClassLoading, ClassMarquee, ClassMasonryVirtualList, ClassMenu, ClassModal, ClassMultiColumnPicker, ClassNovelReader, ClassNumberInput, ClassOrbitalSphere, ClassPagination, ClassPasswordInput, ClassPopconfirm, ClassPopup, ClassProgressBar, ClassQRCode, ClassRadioGroup, ClassRating, ClassRichEditor, ClassRollingNumber, ClassSelect, ClassSignature, ClassSkeleton, ClassSlideCaptcha, ClassSwiper, ClassSwitch, ClassTable, ClassTabs, ClassTag, ClassTextarea, ClassThemeBox, ClassTiltCard, ClassTimeline, ClassToastViewport, ClassTooltip, ClassTypewriterText, ClassUpload, ClassVerificationCode, ClassVideoDetailTransition, ClassVideoPlayer, ClassVirtualList, ClassVirtualSelect, ClassVirtualTable, ClassWidthTransition, defaultToastManager, useField, useForm, useFormState };
12378
13177
  //# sourceMappingURL=index.js.map