@fastkit/vui-wysiwyg 7.0.35 → 7.0.37

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 (60) hide show
  1. package/dist/pm/changeset.mjs +1 -1
  2. package/dist/pm/changeset.mjs.map +1 -1
  3. package/dist/pm/collab.mjs +1 -1
  4. package/dist/pm/collab.mjs.map +1 -1
  5. package/dist/pm/commands.mjs +1 -1
  6. package/dist/pm/commands.mjs.map +1 -1
  7. package/dist/pm/dropcursor.mjs +1 -1
  8. package/dist/pm/dropcursor.mjs.map +1 -1
  9. package/dist/pm/gapcursor.mjs +1 -1
  10. package/dist/pm/gapcursor.mjs.map +1 -1
  11. package/dist/pm/history.mjs +1 -1
  12. package/dist/pm/history.mjs.map +1 -1
  13. package/dist/pm/inputrules.mjs +1 -1
  14. package/dist/pm/inputrules.mjs.map +1 -1
  15. package/dist/pm/keymap.mjs +1 -1
  16. package/dist/pm/keymap.mjs.map +1 -1
  17. package/dist/pm/markdown.mjs +1 -1
  18. package/dist/pm/markdown.mjs.map +1 -1
  19. package/dist/pm/menu.mjs +1 -1
  20. package/dist/pm/menu.mjs.map +1 -1
  21. package/dist/pm/model.mjs +1 -1
  22. package/dist/pm/model.mjs.map +1 -1
  23. package/dist/pm/schema-basic.mjs +1 -1
  24. package/dist/pm/schema-basic.mjs.map +1 -1
  25. package/dist/pm/schema-list.mjs +1 -1
  26. package/dist/pm/schema-list.mjs.map +1 -1
  27. package/dist/pm/state.mjs +1 -1
  28. package/dist/pm/state.mjs.map +1 -1
  29. package/dist/pm/tables.mjs +1 -1
  30. package/dist/pm/tables.mjs.map +1 -1
  31. package/dist/pm/trailing-node.mjs +1 -1
  32. package/dist/pm/trailing-node.mjs.map +1 -1
  33. package/dist/pm/transform.mjs +1 -1
  34. package/dist/pm/transform.mjs.map +1 -1
  35. package/dist/pm/view.mjs +1 -1
  36. package/dist/pm/view.mjs.map +1 -1
  37. package/dist/tiptap/core.mjs +1 -1
  38. package/dist/tiptap/core.mjs.map +1 -1
  39. package/dist/tiptap/extensions/bold.mjs +1 -1
  40. package/dist/tiptap/extensions/bold.mjs.map +1 -1
  41. package/dist/tiptap/extensions/bullet-list.mjs +1 -1
  42. package/dist/tiptap/extensions/bullet-list.mjs.map +1 -1
  43. package/dist/tiptap/extensions/history.mjs +1 -1
  44. package/dist/tiptap/extensions/history.mjs.map +1 -1
  45. package/dist/tiptap/extensions/italic.mjs +1 -1
  46. package/dist/tiptap/extensions/italic.mjs.map +1 -1
  47. package/dist/tiptap/extensions/link.mjs +1 -1
  48. package/dist/tiptap/extensions/link.mjs.map +1 -1
  49. package/dist/tiptap/extensions/ordered-list.mjs +1 -1
  50. package/dist/tiptap/extensions/ordered-list.mjs.map +1 -1
  51. package/dist/tiptap/extensions/text-align.mjs +1 -1
  52. package/dist/tiptap/extensions/text-align.mjs.map +1 -1
  53. package/dist/tiptap/extensions/text-style.mjs +1 -1
  54. package/dist/tiptap/extensions/text-style.mjs.map +1 -1
  55. package/dist/tiptap/extensions/underline.mjs +1 -1
  56. package/dist/tiptap/extensions/underline.mjs.map +1 -1
  57. package/dist/vui-wysiwyg.d.ts +19 -18
  58. package/dist/vui-wysiwyg.mjs +1 -1
  59. package/dist/vui-wysiwyg.mjs.map +1 -1
  60. package/package.json +15 -15
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/changeset';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=changeset.mjs.map
3
3
  //# sourceMappingURL=changeset.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/changeset.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/changeset';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"changeset.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/collab';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=collab.mjs.map
3
3
  //# sourceMappingURL=collab.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/collab.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/collab';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"collab.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/commands';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=commands.mjs.map
3
3
  //# sourceMappingURL=commands.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/commands.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/commands';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"commands.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/dropcursor';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=dropcursor.mjs.map
3
3
  //# sourceMappingURL=dropcursor.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/dropcursor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/dropcursor';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"dropcursor.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/gapcursor';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=gapcursor.mjs.map
3
3
  //# sourceMappingURL=gapcursor.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/gapcursor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/gapcursor';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"gapcursor.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/history';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=history.mjs.map
3
3
  //# sourceMappingURL=history.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/history.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/history';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"history.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/inputrules';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=inputrules.mjs.map
3
3
  //# sourceMappingURL=inputrules.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/inputrules.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/inputrules';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"inputrules.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/keymap';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=keymap.mjs.map
3
3
  //# sourceMappingURL=keymap.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/keymap.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/keymap';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"keymap.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/markdown';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=markdown.mjs.map
3
3
  //# sourceMappingURL=markdown.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/markdown.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/markdown';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"markdown.mjs","sourcesContent":[]}
package/dist/pm/menu.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/menu';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=menu.mjs.map
3
3
  //# sourceMappingURL=menu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/menu.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/menu';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"menu.mjs","sourcesContent":[]}
package/dist/pm/model.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/model';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=model.mjs.map
3
3
  //# sourceMappingURL=model.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/model';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"model.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/schema-basic';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=schema-basic.mjs.map
3
3
  //# sourceMappingURL=schema-basic.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/schema-basic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/schema-basic';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"schema-basic.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/schema-list';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=schema-list.mjs.map
3
3
  //# sourceMappingURL=schema-list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/schema-list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/schema-list';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"schema-list.mjs","sourcesContent":[]}
package/dist/pm/state.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/state';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=state.mjs.map
3
3
  //# sourceMappingURL=state.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/state.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/state';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"state.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/tables';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=tables.mjs.map
3
3
  //# sourceMappingURL=tables.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/tables.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/tables';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"tables.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/trailing-node';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=trailing-node.mjs.map
3
3
  //# sourceMappingURL=trailing-node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/trailing-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/trailing-node';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"trailing-node.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/transform';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=transform.mjs.map
3
3
  //# sourceMappingURL=transform.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/transform.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/transform';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"transform.mjs","sourcesContent":[]}
package/dist/pm/view.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/pm/view';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=view.mjs.map
3
3
  //# sourceMappingURL=view.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/pm/view.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/pm/view';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"view.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/vue-3';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=core.mjs.map
3
3
  //# sourceMappingURL=core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/tiptap/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/vue-3';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"core.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-bold';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=bold.mjs.map
3
3
  //# sourceMappingURL=bold.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/bold.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-bold';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"bold.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-bullet-list';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=bullet-list.mjs.map
3
3
  //# sourceMappingURL=bullet-list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/bullet-list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-bullet-list';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"bullet-list.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-history';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=history.mjs.map
3
3
  //# sourceMappingURL=history.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/history.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-history';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"history.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-italic';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=italic.mjs.map
3
3
  //# sourceMappingURL=italic.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/italic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-italic';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"italic.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-link';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=link.mjs.map
3
3
  //# sourceMappingURL=link.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/link.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-link';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"link.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-ordered-list';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=ordered-list.mjs.map
3
3
  //# sourceMappingURL=ordered-list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/ordered-list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-ordered-list';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ordered-list.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-text-align';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=text-align.mjs.map
3
3
  //# sourceMappingURL=text-align.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/text-align.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-text-align';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"text-align.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-text-style';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=text-style.mjs.map
3
3
  //# sourceMappingURL=text-style.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/text-style.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-text-style';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"text-style.mjs","sourcesContent":[]}
@@ -1,3 +1,3 @@
1
1
  export * from '@tiptap/extension-underline';
2
- //# sourceMappingURL=out.js.map
2
+ //# sourceMappingURL=underline.mjs.map
3
3
  //# sourceMappingURL=underline.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dependencies/tiptap/extensions/underline.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc","sourcesContent":["export * from '@tiptap/extension-underline';\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"underline.mjs","sourcesContent":[]}
@@ -1,3 +1,4 @@
1
+ import * as _fastkit_vui from '@fastkit/vui';
1
2
  import { VuiService, IconName, TextableControl } from '@fastkit/vui';
2
3
  import { EditorOptions, Editor, Extension, Node, Mark, AnyExtension, Extensions } from '@tiptap/vue-3';
3
4
  import * as vue from 'vue';
@@ -286,21 +287,21 @@ declare const VWysiwygEditor: vue.DefineComponent<{
286
287
  endAdornment?: (() => VNodeChild) | undefined;
287
288
  }>;
288
289
  size: {
289
- type: PropType<"sm" | "md" | "lg">;
290
+ type: PropType<_fastkit_vui.ControlSize>;
290
291
  validator: (value: any) => boolean;
291
292
  };
292
293
  loading: BooleanConstructor;
293
294
  variant: {
294
- type: PropType<"flat" | "outlined" | "filled">;
295
+ type: PropType<_fastkit_vui.ControlFieldVariant>;
295
296
  validator: (value: any) => boolean;
296
297
  };
297
298
  startAdornment: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
298
299
  endAdornment: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
299
300
  tabindex: {
300
- type: (NumberConstructor | StringConstructor)[];
301
+ type: (StringConstructor | NumberConstructor)[];
301
302
  default: number;
302
303
  };
303
- nodeControl: PropType<_fastkit_vue_form_control.FormNodeControl<any, any, BooleanConstructor>>;
304
+ nodeControl: PropType<_fastkit_vue_form_control.FormNodeControl>;
304
305
  label: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
305
306
  hint: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
306
307
  hinttip: PropType<_fastkit_vue_form_control.FormNodeWrapperHinttip>;
@@ -314,14 +315,14 @@ declare const VWysiwygEditor: vue.DefineComponent<{
314
315
  };
315
316
  minlength: (NumberConstructor | StringConstructor)[];
316
317
  maxlength: (NumberConstructor | StringConstructor)[];
317
- pattern: (StringConstructor | RegExpConstructor)[];
318
+ pattern: (RegExpConstructor | StringConstructor)[];
318
319
  placeholder: StringConstructor;
319
320
  autocapitalize: PropType<_fastkit_vue_form_control.FormAutoCapitalize>;
320
321
  finalizers: PropType<_fastkit_vue_form_control.TextableFinalizerSpec>;
321
- counter: PropType<string | number | boolean>;
322
+ counter: PropType<boolean | string | number>;
322
323
  counterValue: PropType<(value: string) => number>;
323
324
  limit: BooleanConstructor;
324
- autocomplete: PropType<boolean | "name" | "email" | "tel" | "url" | "off" | "on" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "photo">;
325
+ autocomplete: PropType<_fastkit_vue_form_control.FormAutoComplete | boolean>;
325
326
  name: StringConstructor;
326
327
  tag: StringConstructor;
327
328
  modelValue: vue.Prop<any, any>;
@@ -330,7 +331,7 @@ declare const VWysiwygEditor: vue.DefineComponent<{
330
331
  readonly: BooleanConstructor;
331
332
  viewonly: BooleanConstructor;
332
333
  spellcheck: BooleanConstructor;
333
- required: BooleanConstructor | PropType<boolean>;
334
+ required: PropType<boolean> | BooleanConstructor;
334
335
  clearable: BooleanConstructor;
335
336
  validateTiming: {
336
337
  type: PropType<_fastkit_vue_form_control.ValidateTiming>;
@@ -340,7 +341,7 @@ declare const VWysiwygEditor: vue.DefineComponent<{
340
341
  type: PropType<_fastkit_vue_form_control.RecursiveVerifiableRuleOrFn>;
341
342
  default: () => never[];
342
343
  };
343
- validationDeps: PropType<(nodeControl: _fastkit_vue_form_control.FormNodeControl<any, any, BooleanConstructor>) => any>;
344
+ validationDeps: PropType<(nodeControl: _fastkit_vue_form_control.FormNodeControl) => any>;
344
345
  error: BooleanConstructor;
345
346
  errorMessages: PropType<string | string[]>;
346
347
  showOwnErrors: {
@@ -381,21 +382,21 @@ declare const VWysiwygEditor: vue.DefineComponent<{
381
382
  endAdornment?: (() => VNodeChild) | undefined;
382
383
  }>;
383
384
  size: {
384
- type: PropType<"sm" | "md" | "lg">;
385
+ type: PropType<_fastkit_vui.ControlSize>;
385
386
  validator: (value: any) => boolean;
386
387
  };
387
388
  loading: BooleanConstructor;
388
389
  variant: {
389
- type: PropType<"flat" | "outlined" | "filled">;
390
+ type: PropType<_fastkit_vui.ControlFieldVariant>;
390
391
  validator: (value: any) => boolean;
391
392
  };
392
393
  startAdornment: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
393
394
  endAdornment: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
394
395
  tabindex: {
395
- type: (NumberConstructor | StringConstructor)[];
396
+ type: (StringConstructor | NumberConstructor)[];
396
397
  default: number;
397
398
  };
398
- nodeControl: PropType<_fastkit_vue_form_control.FormNodeControl<any, any, BooleanConstructor>>;
399
+ nodeControl: PropType<_fastkit_vue_form_control.FormNodeControl>;
399
400
  label: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
400
401
  hint: PropType<_fastkit_vue_utils.VNodeChildOrSlot>;
401
402
  hinttip: PropType<_fastkit_vue_form_control.FormNodeWrapperHinttip>;
@@ -409,14 +410,14 @@ declare const VWysiwygEditor: vue.DefineComponent<{
409
410
  };
410
411
  minlength: (NumberConstructor | StringConstructor)[];
411
412
  maxlength: (NumberConstructor | StringConstructor)[];
412
- pattern: (StringConstructor | RegExpConstructor)[];
413
+ pattern: (RegExpConstructor | StringConstructor)[];
413
414
  placeholder: StringConstructor;
414
415
  autocapitalize: PropType<_fastkit_vue_form_control.FormAutoCapitalize>;
415
416
  finalizers: PropType<_fastkit_vue_form_control.TextableFinalizerSpec>;
416
- counter: PropType<string | number | boolean>;
417
+ counter: PropType<boolean | string | number>;
417
418
  counterValue: PropType<(value: string) => number>;
418
419
  limit: BooleanConstructor;
419
- autocomplete: PropType<boolean | "name" | "email" | "tel" | "url" | "off" | "on" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "photo">;
420
+ autocomplete: PropType<_fastkit_vue_form_control.FormAutoComplete | boolean>;
420
421
  name: StringConstructor;
421
422
  tag: StringConstructor;
422
423
  modelValue: vue.Prop<any, any>;
@@ -425,7 +426,7 @@ declare const VWysiwygEditor: vue.DefineComponent<{
425
426
  readonly: BooleanConstructor;
426
427
  viewonly: BooleanConstructor;
427
428
  spellcheck: BooleanConstructor;
428
- required: BooleanConstructor | PropType<boolean>;
429
+ required: PropType<boolean> | BooleanConstructor;
429
430
  clearable: BooleanConstructor;
430
431
  validateTiming: {
431
432
  type: PropType<_fastkit_vue_form_control.ValidateTiming>;
@@ -435,7 +436,7 @@ declare const VWysiwygEditor: vue.DefineComponent<{
435
436
  type: PropType<_fastkit_vue_form_control.RecursiveVerifiableRuleOrFn>;
436
437
  default: () => never[];
437
438
  };
438
- validationDeps: PropType<(nodeControl: _fastkit_vue_form_control.FormNodeControl<any, any, BooleanConstructor>) => any>;
439
+ validationDeps: PropType<(nodeControl: _fastkit_vue_form_control.FormNodeControl) => any>;
439
440
  error: BooleanConstructor;
440
441
  errorMessages: PropType<string | string[]>;
441
442
  showOwnErrors: {
@@ -1046,5 +1046,5 @@ function resolveContextualValue(ctx, source) {
1046
1046
  }
1047
1047
 
1048
1048
  export { VUI_WYSIWYG_EDITOR_SYMBOL, VWysiwygEditor, WYSIWYG_TEXT_ALIGN_VALUES, WysiwygBulletListTool, WysiwygColorExtension, WysiwygCustomTagExtension, WysiwygEditorInitializeContext, WysiwygFormatBoldTool, WysiwygFormatItalicTool, WysiwygFormatUnderlineTool, WysiwygHistoryTool, WysiwygLinkTool, WysiwygLinter, WysiwygLinterBadWords, WysiwygLinterHeadingLevel, WysiwygLinterPlugin, WysiwygLinterPunctuation, WysiwygOrderedListTool, WysiwygTextAlignTool, createWysiwygColorTool, createWysiwygCustomTagMark, createWysiwygCustomTagTool, createWysiwygExtension, resolveRawWysiwygEditorTools, resolveRawWysiwygExtensions };
1049
- //# sourceMappingURL=out.js.map
1049
+ //# sourceMappingURL=vui-wysiwyg.mjs.map
1050
1050
  //# sourceMappingURL=vui-wysiwyg.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemes.ts","../src/injections.ts","../src/extensions/linter/Linter.tsx","../src/extensions/linter/utils.ts","../src/extensions/linter/LinterPlugin.ts","../src/extensions/linter/plugins/BadWords.tsx","../src/extensions/linter/plugins/HeadingLevel.ts","../src/extensions/linter/plugins/Punctuation.ts","../src/extensions/color.ts","../src/extensions/custom-tag.ts","../src/tools/bullet-list.ts","../src/tools/format-bold.ts","../src/tools/format-italic.ts","../src/tools/format-underline.ts","../src/tools/history.ts","../src/tools/link.ts","../src/tools/ordered-list.ts","../src/tools/color.tsx","../src/tools/text-align.tsx","../src/tools/custom-tag.ts","../src/components/VWysiwygEditor/VWysiwygEditor.tsx"],"names":["_createVNode","Extension","name","vui","Mark","_isVNode","VButton","VButtonGroup","_isSlot","editor"],"mappings":"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","sourcesContent":["import { type VuiService, type IconName } from '@fastkit/vui';\nimport {\n type Editor,\n type Extensions,\n type Node,\n type Extension,\n type Mark,\n type AnyExtension,\n type EditorOptions,\n} from '@tiptap/vue-3';\nimport { VNodeChild } from 'vue';\n\nconst EDITOR_EVENTS = [\n 'beforeCreate',\n 'create',\n 'update',\n 'selectionUpdate',\n 'transaction',\n 'focus',\n 'blur',\n 'destroy',\n] as const;\n\ntype PrefixedEventName<S extends string> = `on${Capitalize<S>}`;\n\nconst prefixedEventName = <S extends string>(source: S): PrefixedEventName<S> =>\n `on${source.charAt(0).toUpperCase()}${source.slice(1)}` as any;\n\nexport type WysiwygEditorEvent = (typeof EDITOR_EVENTS)[number];\n\nexport type WysiwygEditorPrefixedEvent = PrefixedEventName<WysiwygEditorEvent>;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface WysiwygEditorEventsOptions\n extends Partial<Pick<EditorOptions, WysiwygEditorPrefixedEvent>> {}\n\nexport type WysiwygEditorEventsBucket = {\n [EV in WysiwygEditorEvent]: NonNullable<\n WysiwygEditorEventsOptions[PrefixedEventName<EV>]\n >[];\n};\n\nexport class WysiwygEditorInitializeContext {\n readonly listeners: WysiwygEditorEventsBucket = {} as any;\n\n private readonly _vui: () => VuiService;\n\n get vui() {\n return this._vui();\n }\n\n constructor(\n vuiGetter: () => VuiService,\n opts: WysiwygEditorEventsOptions = {},\n ) {\n this._vui = vuiGetter;\n\n EDITOR_EVENTS.forEach((event) => {\n this.listeners[event] = [];\n const prefixed = prefixedEventName(event);\n const fn = opts[prefixed];\n fn && this.listeners[event].push(fn as any);\n });\n }\n\n on<EV extends WysiwygEditorEvent>(\n ev: EV,\n handler: NonNullable<WysiwygEditorEventsOptions[PrefixedEventName<EV>]>,\n ) {\n this.listeners[ev].push(handler);\n return () => this.off(ev, handler);\n }\n\n off<EV extends WysiwygEditorEvent>(\n ev: EV,\n handler: NonNullable<WysiwygEditorEventsOptions[PrefixedEventName<EV>]>,\n ) {\n this.listeners[ev] = this.listeners[ev].filter(\n (_handler) => _handler !== handler,\n ) as any;\n }\n\n editorOptions() {\n const opts: WysiwygEditorEventsOptions = {};\n\n EDITOR_EVENTS.forEach((event) => {\n const prefixed = prefixedEventName(event);\n opts[prefixed] = (props) => {\n const handlers = this.listeners[event];\n handlers.forEach((handler) => {\n handler(props as any);\n });\n };\n });\n\n return opts;\n }\n}\n\nexport interface WysiwygEditorContext {\n editor: Editor;\n vui: VuiService;\n}\n\nexport type WysiwygExtensionFactory<Options = any, Storage = any> = (\n ctx: WysiwygEditorInitializeContext,\n) =>\n | Extension<Options, Storage>\n | Node<Options, Storage>\n | Mark<Options, Storage>;\n\nexport interface CreatedWysiwygExtension<Options = any, Storage = any> {\n __isCreatedWysiwygExtension: true;\n _configs: Partial<Options>[];\n configure(\n options?: Partial<Options>,\n ): CreatedWysiwygExtension<Options, Storage>;\n raw: WysiwygExtensionSource<Options, Storage>;\n}\n\nexport type WysiwygExtensionSource<Options = any, Storage = any> =\n | Extension<Options, Storage>\n | Node<Options, Storage>\n | Mark<Options, Storage>\n | WysiwygExtensionFactory<Options, Storage>;\n\nexport type RawWysiwygExtension<Options = any, Storage = any> =\n | WysiwygExtensionSource<Options, Storage>\n | CreatedWysiwygExtension<Options, Storage>;\n\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// extension: Extension<Options, Storage>,\n// ): Extension<Options, Storage>;\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// node: Node<Options, Storage>,\n// ): Node<Options, Storage>;\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// mark: Mark<Options, Storage>,\n// ): Mark<Options, Storage>;\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// factory: WysiwygExtensionFactory<Options, Storage>,\n// ): WysiwygExtensionFactory<Options, Storage>;\n\nfunction isCreatedWysiwygExtension<Options = any, Storage = any>(\n source: unknown,\n): source is CreatedWysiwygExtension<Options, Storage> {\n return (\n !!source &&\n typeof source === 'object' &&\n (source as CreatedWysiwygExtension).__isCreatedWysiwygExtension === true\n );\n}\n\nexport function createWysiwygExtension<Options = any, Storage = any>(\n extension: WysiwygExtensionSource<Options, Storage>,\n) {\n const ext: CreatedWysiwygExtension<Options, Storage> = {\n __isCreatedWysiwygExtension: true,\n _configs: [],\n configure: (opts) => {\n opts && ext._configs.push(opts);\n return ext;\n },\n raw: extension,\n };\n return ext;\n}\n\nfunction resolveRawWysiwygExtension(\n raw: RawWysiwygExtension,\n ctx: WysiwygEditorInitializeContext,\n): AnyExtension {\n if (isCreatedWysiwygExtension(raw)) {\n const { raw: _raw, _configs } = raw;\n let ext = typeof _raw === 'function' ? _raw(ctx) : _raw;\n _configs.forEach((config) => {\n ext = ext.configure(config);\n });\n return ext;\n }\n return typeof raw === 'function' ? raw(ctx) : raw;\n}\n\nexport function resolveRawWysiwygExtensions(\n raws: RawWysiwygExtension[],\n ctx: WysiwygEditorInitializeContext,\n) {\n return raws.map((raw) => resolveRawWysiwygExtension(raw, ctx));\n}\n\nexport type WysiwygEditorToolIcon =\n | IconName\n | ((ctx: WysiwygEditorContext) => IconName | (() => VNodeChild) | undefined);\n\n/**\n * Tool Configuration\n */\nexport interface WysiwygEditorTool {\n /**\n * Tool Key\n *\n * Must be unique to identify the tool\n */\n key: string;\n /** Icons to be displayed on the toolbar */\n icon: WysiwygEditorToolIcon;\n /** Conditions for displaying the icon as active */\n active?: boolean | ((ctx: WysiwygEditorContext) => boolean);\n /** Conditions for deactivating the icon */\n disabled?: boolean | ((ctx: WysiwygEditorContext) => boolean);\n /** Handler when mark text is clicked */\n onClick: (ctx: WysiwygEditorContext, ev: MouseEvent) => any;\n /** Whether to display tools in floating menu or not */\n floating?: boolean;\n /** Extensions that the tool depends on */\n extensions?: Extensions;\n}\n\nexport type WysiwygEditorToolFactory<Options = void> = (\n vui: VuiService,\n options?: Options,\n) => WysiwygEditorTool | WysiwygEditorTool[];\n\nexport type RawWysiwygEditorTool =\n | WysiwygEditorTool\n | WysiwygEditorToolFactory<any>;\n\nfunction resolveRawWysiwygEditorTool(\n raw: RawWysiwygEditorTool,\n vui: VuiService,\n) {\n return typeof raw === 'function' ? raw(vui) : raw;\n}\n\nexport interface ResolvedWysiwygEditorSettings {\n tools: WysiwygEditorTool[];\n extensions: Extensions;\n}\n\nexport function resolveRawWysiwygEditorTools(\n rawTools: RawWysiwygEditorTool[],\n vui: VuiService,\n): ResolvedWysiwygEditorSettings {\n const tools: WysiwygEditorTool[] = [];\n const extensions: Extensions = [];\n\n rawTools.forEach((raw) => {\n let resolved = resolveRawWysiwygEditorTool(raw, vui);\n if (!Array.isArray(resolved)) {\n resolved = [resolved];\n }\n resolved.forEach((tool) => {\n tools.push(tool);\n if (tool.extensions) {\n extensions.push(...tool.extensions);\n }\n });\n });\n\n return {\n tools,\n extensions,\n };\n}\n","export const VUI_WYSIWYG_EDITOR_SYMBOL = 'vui-wysiwyg-editor';\n","import { createVNode as _createVNode } from \"vue\";\nimport './Linter.scss';\nimport { Extension } from '@tiptap/vue-3';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\nimport { Plugin, PluginKey, TextSelection } from '@tiptap/pm/state';\nimport { createWysiwygExtension } from '../../schemes';\nconst PROBLEM_CLASS_NAME = 'v-linter__problem';\nconst ISSUE_ICON_CLASS_NAME = 'v-linter__issue-icon';\nconst ISSUE_DATASET_NAME = 'data-issue-id';\nfunction resolveWysiwygLinterFixMessage(message) {\n return typeof message === 'function' ? message() : message;\n}\nfunction renderIcon(view, issue) {\n const {\n level = 'warning'\n } = issue;\n const icon = document.createElement('div');\n const message = resolveWysiwygLinterFixMessage(issue.message);\n icon.className = `${ISSUE_ICON_CLASS_NAME} ${level}-scope`;\n icon.setAttribute(ISSUE_DATASET_NAME, issue.id);\n if (typeof message === 'string') {\n icon.title = message;\n }\n return icon;\n}\nfunction runAllLinterPlugins(doc, plugins) {\n const decorations = [];\n const issues = plugins.map(RegisteredLinterPlugin => new RegisteredLinterPlugin(doc).scan().getResults()).flat();\n issues.forEach(issue => {\n const {\n level = 'warning',\n icon\n } = issue;\n const message = resolveWysiwygLinterFixMessage(issue.message);\n decorations.push(Decoration.inline(issue.from, issue.to, {\n class: `${PROBLEM_CLASS_NAME} ${level}-scope`,\n 'data-issue-id': issue.id,\n title: typeof message === 'string' ? message : undefined\n }));\n if (icon) {\n decorations.push(Decoration.widget(issue.from, view => renderIcon(view, issue)));\n }\n });\n const decorationSet = DecorationSet.create(doc, decorations);\n return {\n issues,\n decorationSet\n };\n}\nexport const WysiwygLinter = createWysiwygExtension(ctx => {\n function showMenu(view, issue, event) {\n const message = resolveWysiwygLinterFixMessage(issue.message);\n const variant = ctx.vui.setting('containedVariant');\n const scope = ctx.vui.setting(`${issue.level}Scope`);\n return ctx.vui.menu({\n activator: event,\n content: stack => _createVNode(\"div\", {\n \"class\": \"v-linter__issue-menu__body\"\n }, [_createVNode(\"div\", {\n \"class\": ['v-linter__issue-menu__message', `${scope}-scope ${variant}`]\n }, [message]), issue.fix.length && _createVNode(\"div\", {\n \"class\": \"v-linter__issue-menu__fixers\"\n }, [issue.fix.map((fixer, index) => _createVNode(\"div\", {\n \"key\": index,\n \"class\": \"v-linter__issue-menu__fixer\"\n }, [_createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": \"v-linter__issue-menu__fixer__button\",\n \"onClick\": () => {\n stack.close();\n fixer.handler(view, issue);\n }\n }, [_createVNode(\"span\", {\n \"class\": \"v-linter__issue-menu__fixer__button__message\"\n }, [resolveWysiwygLinterFixMessage(fixer.message)])])]))])])\n });\n }\n return Extension.create({\n name: 'linter',\n addOptions() {\n return {\n plugins: []\n };\n },\n addStorage() {\n return {\n issues: []\n };\n },\n addProseMirrorPlugins() {\n const {\n plugins\n } = this.options;\n const {\n storage\n } = this;\n const runAll = doc => {\n const {\n issues,\n decorationSet\n } = runAllLinterPlugins(doc, plugins);\n storage.issues = issues;\n return decorationSet;\n };\n const getIssue = id => storage.issues.find(issue => issue.id === id);\n const getIssueElementByEvent = source => {\n if (!source || !(source instanceof HTMLElement)) {\n return;\n }\n const issueId = source.getAttribute(ISSUE_DATASET_NAME);\n const issue = issueId && getIssue(issueId);\n if (!issue) return;\n return {\n issue\n };\n };\n const linterPlugin = new Plugin({\n key: new PluginKey('linter'),\n state: {\n init(_, {\n doc\n }) {\n return runAll(doc);\n },\n apply(transaction, oldState) {\n return transaction.docChanged ? runAll(transaction.doc) : oldState;\n }\n },\n props: {\n decorations(state) {\n return linterPlugin.getState(state);\n },\n handleClick(view, _, event) {\n const info = getIssueElementByEvent(event.target);\n if (!info) {\n return false;\n }\n const {\n issue\n } = info;\n const {\n from,\n to\n } = issue;\n const focus = () => view.dispatch(view.state.tr.setSelection(TextSelection.create(view.state.doc, from, to)).scrollIntoView());\n focus();\n showMenu(view, issue, event);\n return true;\n }\n }\n });\n return [linterPlugin];\n }\n });\n});","/* eslint-disable eqeqeq */\n/* eslint-disable no-bitwise */\nlet IDX = 256;\nlet BUFFER: any;\nconst HEX: any = [];\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nexport function cheepUUID() {\n let i = 0;\n let num;\n let out = '';\n\n if (!BUFFER || IDX + 16 > 256) {\n BUFFER = Array((i = 256));\n while (i--) BUFFER[i] = (256 * Math.random()) | 0;\n // eslint-disable-next-line no-multi-assign\n i = IDX = 0;\n }\n\n for (; i < 16; i++) {\n num = BUFFER[IDX + i];\n if (i == 6) out += HEX[(num & 15) | 64];\n else if (i == 8) out += HEX[(num & 63) | 128];\n else out += HEX[num];\n\n if (i & 1 && i > 1 && i < 11) out += '-';\n }\n\n IDX++;\n return out;\n}\n","import { VNodeChild } from 'vue';\nimport { Node as ProsemirrorNode } from '@tiptap/pm/model';\nimport { EditorView } from '@tiptap/pm/view';\nimport { cheepUUID } from './utils';\n\nexport type WysiwygLinterFixFn = (\n view: EditorView,\n issue: WysiwygLinterResult,\n) => any;\n\nexport type WysiwygLinterFixMessage = string | (() => VNodeChild);\n\nexport interface WysiwygLinterFixer {\n message: WysiwygLinterFixMessage;\n handler: WysiwygLinterFixFn;\n}\n\nexport type WysiwygLinterResultLevel = 'warning' | 'error';\n\n// fixers\nexport interface WysiwygLinterResult {\n id: string;\n icon: boolean;\n level: WysiwygLinterResultLevel;\n message: WysiwygLinterFixMessage;\n from: number;\n to: number;\n fix: WysiwygLinterFixer[];\n}\n\nexport interface RawLinterResult\n extends Omit<WysiwygLinterResult, 'level' | 'fix' | 'id' | 'icon'> {\n level?: WysiwygLinterResultLevel;\n icon?: boolean;\n fix?: WysiwygLinterFixer | WysiwygLinterFixer[];\n}\n\nexport class WysiwygLinterPlugin {\n protected doc: ProsemirrorNode;\n\n private results: Array<WysiwygLinterResult> = [];\n\n constructor(doc: ProsemirrorNode) {\n this.doc = doc;\n }\n\n record(result: RawLinterResult) {\n const { fix = [], icon = false } = result;\n this.results.push({\n level: 'error',\n id: cheepUUID(),\n ...result,\n fix: Array.isArray(fix) ? fix : [fix],\n icon,\n });\n }\n\n scan() {\n return this;\n }\n\n getResults() {\n return this.results;\n }\n}\n","import { createTextVNode as _createTextVNode, createVNode as _createVNode } from \"vue\";\nimport { WysiwygLinterPlugin } from '../LinterPlugin';\nexport function WysiwygLinterBadWords(words) {\n const regex = new RegExp(`\\\\b(${words.join('|')})\\\\b`);\n\n // eslint-disable-next-line no-shadow\n return class WysiwygLinterBadWords extends WysiwygLinterPlugin {\n scan() {\n this.doc.descendants((node, position) => {\n if (!node.isText) {\n return;\n }\n const matches = regex.exec(node.text);\n if (matches) {\n const fixValue = `${matches[0]}!!!!!`;\n this.record({\n level: 'warning',\n message: `Try not to say '${matches[0]}'`,\n from: position + matches.index,\n to: position + matches.index + matches[0].length,\n fix: [{\n message: () => _createVNode(\"span\", null, [_createVNode(\"code\", null, [fixValue]), _createTextVNode(\"\\u306B\\u4FEE\\u6B63\\u3059\\u308B\\u3002\")]),\n handler: () => {\n // eslint-disable-next-line no-console\n console.log('hoge');\n }\n }, {\n message: 'どうにかする',\n handler: () => {\n // eslint-disable-next-line no-console\n console.log('hoge');\n }\n }]\n });\n }\n });\n return this;\n }\n };\n}","import { EditorView } from '@tiptap/pm/view';\nimport {\n WysiwygLinterPlugin,\n WysiwygLinterResult as Issue,\n} from '../LinterPlugin';\n\nexport class WysiwygLinterHeadingLevel extends WysiwygLinterPlugin {\n fixHeader(level: number) {\n // eslint-disable-next-line func-names\n return function ({ state, dispatch }: EditorView, issue: Issue) {\n dispatch(state.tr.setNodeMarkup(issue.from - 1, undefined, { level }));\n };\n }\n\n scan() {\n let lastHeadLevel: number | null = null;\n\n this.doc.descendants((node, position) => {\n if (node.type.name === 'heading') {\n // Check whether heading levels fit under the current level\n const { level } = node.attrs;\n\n if (lastHeadLevel != null && level > lastHeadLevel + 1) {\n this.record({\n message: `Heading too small (${level} under ${lastHeadLevel})`,\n from: position + 1,\n to: position + 1 + node.content.size,\n fix: {\n message: '修正する',\n handler: this.fixHeader(lastHeadLevel + 1),\n },\n });\n }\n lastHeadLevel = level;\n }\n });\n\n return this;\n }\n}\n","import { EditorView } from '@tiptap/pm/view';\nimport {\n WysiwygLinterPlugin,\n WysiwygLinterResult as Issue,\n} from '../LinterPlugin';\n\nexport class WysiwygLinterPunctuation extends WysiwygLinterPlugin {\n public regex = / ([,.!?:]) ?/g;\n\n fix(replacement: any) {\n // eslint-disable-next-line func-names\n return function ({ state, dispatch }: EditorView, issue: Issue) {\n dispatch(\n state.tr.replaceWith(\n issue.from,\n issue.to,\n state.schema.text(replacement),\n ),\n );\n };\n }\n\n scan() {\n this.doc.descendants((node, position) => {\n if (!node.isText) {\n return;\n }\n\n if (!node.text) {\n return;\n }\n\n const matches = this.regex.exec(node.text);\n\n if (matches) {\n this.record({\n message: 'Suspicious spacing around punctuation',\n from: position + matches.index,\n to: position + matches.index + matches[0].length,\n fix: {\n message: 'Fix it!!!',\n handler: this.fix(`${matches[1]} `),\n },\n });\n }\n });\n\n return this;\n }\n}\n","import { Extension } from '@tiptap/vue-3';\nimport '@tiptap/extension-text-style';\n\nexport type WysiwygColorOptions = {\n types: string[];\n};\n\ndeclare module '@tiptap/vue-3' {\n interface Commands<ReturnType> {\n color: {\n /**\n * Set the text color\n */\n setColor: (color: string) => ReturnType;\n /**\n * Unset the text color\n */\n unsetColor: () => ReturnType;\n };\n }\n}\n\nexport const WysiwygColorExtension = Extension.create<WysiwygColorOptions>({\n name: 'color',\n\n addOptions() {\n return {\n types: ['textStyle'],\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n color: {\n default: null,\n parseHTML: (element) => element.style.color.replace(/['\"]+/g, ''),\n renderHTML: (attributes) => {\n if (!attributes.color) {\n return {};\n }\n\n return {\n style: `color: ${attributes.color}`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setColor:\n (color) =>\n ({ chain }) =>\n chain().setMark('textStyle', { color }).run(),\n unsetColor:\n () =>\n ({ chain }) =>\n chain()\n .setMark('textStyle', { color: null })\n .removeEmptyTextStyle()\n .run(),\n };\n },\n});\n","import { Extension, mergeAttributes, Mark } from '@tiptap/vue-3';\nimport '@tiptap/extension-text-style';\n// import '@tiptap/vue-3';\n\nexport type WysiwygCustomTagSettings = {\n /**\n * tag name\n *\n * Either the html default tag name or a custom tag name is acceptable\n *\n * @default \"span\"\n */\n tag: string;\n\n /**\n * HTML Attributes\n *\n * Attributes to be assigned to tags such as `class`, `data-xxx`, etc.\n */\n attrs?: Record<any, string>;\n};\n\ndeclare module '@tiptap/vue-3' {\n interface Commands<ReturnType> {\n customTag: {\n /**\n * Set the custom tag\n */\n setCustomTag: (markName: string) => ReturnType;\n /**\n * Toggle the custom tag\n */\n toggleCustomTag: (markName: string) => ReturnType;\n /**\n * Unset the custom tag\n */\n unsetCustomTag: (markName: string) => ReturnType;\n };\n }\n}\n\n// export type WysiwygCustomTagSettings = WysiwygCustomTagOptions & {\n// /**\n// * extension name\n// */\n// name: string;\n// };\n\nexport function createWysiwygCustomTagMark(\n name: string,\n settings: Partial<WysiwygCustomTagSettings>,\n) {\n const { tag = 'span', attrs } = settings;\n const attrEntries = attrs && Object.entries(attrs);\n // eslint-disable-next-line no-shadow\n const attrNames = attrEntries && attrEntries.map(([name]) => name);\n\n const getElementAttrs = (\n el: HTMLElement,\n ): Record<any, string> | undefined => {\n if (!attrNames) return;\n\n return (\n el\n .getAttributeNames()\n // eslint-disable-next-line no-shadow\n .reduce((acc, name) => ({ ...acc, [name]: el.getAttribute(name) }), {})\n );\n };\n\n const isMatchedElementAttrs = (elAttrs: Record<any, string>): boolean => {\n if (!attrEntries) return true;\n // eslint-disable-next-line no-shadow\n return attrEntries.every(([name, value]) => elAttrs[name] === value);\n };\n\n return Mark.create<WysiwygCustomTagSettings>({\n name,\n\n addOptions() {\n return {\n tag,\n attrs: attrs && { ...attrs },\n };\n },\n parseHTML() {\n return [\n {\n tag,\n getAttrs: (el: any) => {\n if (!attrs) return null;\n const elAttrs = getElementAttrs(el);\n if (!elAttrs) return false;\n return isMatchedElementAttrs(el) && null;\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n tag,\n attrs ? mergeAttributes(attrs, HTMLAttributes) : HTMLAttributes,\n 0,\n ];\n },\n });\n}\n\nexport const WysiwygCustomTagExtension =\n Extension.create<WysiwygCustomTagSettings>({\n name: 'custom-tag',\n addCommands() {\n return {\n setCustomTag:\n (markName) =>\n ({ chain }) =>\n chain().setMark(markName).run(),\n unsetCustomTag:\n (markName) =>\n ({ chain }) =>\n chain().unsetMark(markName).run(),\n toggleCustomTag:\n (markName) =>\n ({ chain }) =>\n chain().toggleMark(markName).run(),\n };\n },\n });\n","import { BulletList, BulletListOptions } from '@tiptap/extension-bullet-list';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygBulletListTool: WysiwygEditorToolFactory<\n BulletListOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'bulletList',\n icon: vui.icon('editorformatListBulleted'),\n active: ({ editor }) => editor.isActive('bulletList'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleBulletList().run();\n },\n floating: true,\n extensions: [BulletList.configure(options)],\n };\n return tool;\n};\n","import { Bold, BoldOptions } from '@tiptap/extension-bold';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygFormatBoldTool: WysiwygEditorToolFactory<BoldOptions> = (\n vui,\n options,\n) => {\n const tool: WysiwygEditorTool = {\n key: 'formatBold',\n icon: vui.icon('editorformatBold'),\n active: ({ editor }) => editor.isActive('bold'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleBold().run();\n },\n floating: true,\n extensions: [Bold.configure(options)],\n };\n return tool;\n};\n","import { Italic, ItalicOptions } from '@tiptap/extension-italic';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygFormatItalicTool: WysiwygEditorToolFactory<\n ItalicOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'formatItalic',\n icon: vui.icon('editorformatItalic'),\n active: ({ editor }) => editor.isActive('italic'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleItalic().run();\n },\n floating: true,\n extensions: [Italic.configure(options)],\n };\n return tool;\n};\n","import { Underline, UnderlineOptions } from '@tiptap/extension-underline';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygFormatUnderlineTool: WysiwygEditorToolFactory<\n UnderlineOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'formatUnderline',\n icon: vui.icon('editorformatUnderline'),\n active: ({ editor }) => editor.isActive('underline'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleUnderline().run();\n },\n floating: true,\n extensions: [Underline.configure(options)],\n };\n return tool;\n};\n","import { History, HistoryOptions } from '@tiptap/extension-history';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygHistoryTool: WysiwygEditorToolFactory<HistoryOptions> = (\n vui,\n options,\n) => {\n const undo: WysiwygEditorTool = {\n key: 'history-undo',\n icon: vui.icon('editorUndo'),\n disabled: ({ editor }) => !editor.can().undo(),\n onClick: ({ editor }) => {\n editor.chain().focus().undo().run();\n },\n extensions: [History.configure(options)],\n };\n const redo: WysiwygEditorTool = {\n key: 'history-redo',\n icon: vui.icon('editorRedo'),\n disabled: ({ editor }) => !editor.can().redo(),\n onClick: ({ editor }) => {\n editor.chain().focus().redo().run();\n },\n };\n return [undo, redo];\n};\n","import { Link, LinkOptions } from '@tiptap/extension-link';\nimport { validateIf, url } from '@fastkit/vui';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygLinkTool: WysiwygEditorToolFactory<LinkOptions> = (\n vui,\n options,\n) => {\n const tool: WysiwygEditorTool = {\n key: 'link',\n icon: vui.icon('editorLink'),\n active: ({ editor }) => editor.isActive('link'),\n // eslint-disable-next-line no-shadow\n onClick: async ({ vui, editor }) => {\n const { href = '' } = editor.getAttributes('link');\n const result = await vui.prompt({\n input: {\n label: 'Link URL',\n rules: [validateIf, url],\n initialValue: href,\n size: 'sm',\n autofocus: true,\n },\n });\n\n if (result === undefined || result === false) {\n return;\n }\n\n const range = editor.chain().focus().extendMarkRange('link');\n\n if (!result) {\n range.unsetLink().run();\n } else {\n range\n .setLink({\n href: result,\n })\n .run();\n }\n },\n floating: true,\n extensions: [\n Link.configure({\n openOnClick: false,\n ...options,\n }),\n ],\n };\n return tool;\n};\n","import {\n OrderedList,\n OrderedListOptions,\n} from '@tiptap/extension-ordered-list';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygOrderedListTool: WysiwygEditorToolFactory<\n OrderedListOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'orderedList',\n icon: vui.icon('editorformatListNumbered'),\n active: ({ editor }) => editor.isActive('orderedList'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleOrderedList().run();\n },\n floating: true,\n extensions: [OrderedList.configure(options)],\n };\n return tool;\n};\n","import { createVNode as _createVNode } from \"vue\";\nimport './color.scss';\nimport { VIcon } from '@fastkit/vui';\nimport TextStyle from '@tiptap/extension-text-style';\nimport { WysiwygColorExtension } from '../extensions';\nexport function createWysiwygColorTool(opts) {\n const WysiwygColorTool = vui => {\n const tool = {\n key: 'textColor',\n // active: ({ editor }) => editor.isActive('textStyle'),\n icon: ({\n editor\n }) => () => {\n const {\n color\n } = editor.getAttributes('textStyle');\n const style = {\n color\n };\n return _createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__button\"\n }, [_createVNode(VIcon, {\n \"class\": \"v-wysiwyg-color-tool__button__icon\",\n \"name\": vui.icon('editorTextColor')\n }, null), _createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__button__bar\",\n \"style\": style\n }, null)]);\n },\n onClick: (ctx, ev) => {\n ctx.vui.menu({\n class: 'v-wysiwyg-color-tool__menu',\n activator: ev,\n content: stack => _createVNode(\"div\", {\n \"class\": ['v-wysiwyg-color-tool__items', {\n 'v-wysiwyg-color-tool__items--with-label': opts.withLabel\n }]\n }, [opts.items.map((item, index) => _createVNode(\"button\", {\n \"key\": item.key == null ? index : item.key,\n \"class\": \"v-wysiwyg-color-tool__item\",\n \"type\": \"button\",\n \"onClick\": () => {\n const {\n color\n } = item;\n let command = ctx.editor.chain().focus();\n if (color) {\n command = command.setColor(color);\n } else {\n command = command.unsetColor();\n }\n command.run();\n stack.close();\n }\n }, [_createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__item__color\",\n \"style\": item.color ? {\n color: item.color\n } : {}\n }, null), opts.withLabel && _createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__item__name\"\n }, [item.name])]))])\n });\n },\n floating: true,\n extensions: [TextStyle, WysiwygColorExtension]\n };\n return tool;\n };\n return WysiwygColorTool;\n}","import { isVNode as _isVNode, createVNode as _createVNode } from \"vue\";\nimport { TextAlign } from '@tiptap/extension-text-align';\nimport { VButtonGroup, VButton } from '@fastkit/vui';\nfunction _isSlot(s) {\n return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !_isVNode(s);\n}\n/**\n * A list of available options for the text align attribute.\n * @remarks\n * `\"justify\"` has not yet been adopted because of ambiguity in browser support.\n */\nexport const WYSIWYG_TEXT_ALIGN_VALUES = ['left', 'center', 'right'\n// 'justify',\n];\n\n/** Text align value */\n\n/**\n * A list of nodes where the text align attribute should be applied to.\n */\nconst DEFAULT_TYPES = ['heading', 'paragraph'];\nconst conditions = WYSIWYG_TEXT_ALIGN_VALUES.map(value => [value, {\n textAlign: value\n}]);\nconst ICON_AT = {\n left: 'editorAlignLeft',\n center: 'editorAlignCenter',\n right: 'editorAlignRight'\n};\nfunction resolveOptions(rawOptions) {\n const types = rawOptions?.types || DEFAULT_TYPES.slice();\n const alignments = rawOptions?.alignments || WYSIWYG_TEXT_ALIGN_VALUES.slice();\n const defaultAlignment = rawOptions?.defaultAlignment || 'left';\n return {\n types,\n alignments,\n defaultAlignment\n };\n}\nfunction getCurrentAlign(editor, options) {\n for (const [align, condition] of conditions) {\n if (editor.isActive(condition)) return align;\n }\n return options.defaultAlignment;\n}\nexport const WysiwygTextAlignTool = (vui, options) => {\n const resolvedOptions = resolveOptions(options);\n const {\n alignments\n } = resolvedOptions;\n const getIcon = value => {\n const iconKey = ICON_AT[value];\n const icon = vui.icon(iconKey);\n if (icon === '$empty' || typeof icon === 'function') return;\n return icon;\n };\n const variant = vui.setting('plainVariant');\n const toolButtonActiveColor = vui.setting('primaryScope');\n const tool = {\n key: 'textAlign',\n icon: ({\n editor\n }) => getIcon(getCurrentAlign(editor, resolvedOptions)),\n // eslint-disable-next-line no-shadow\n onClick: async ({\n vui,\n editor\n }, ev) => {\n vui.menu({\n distance: 0,\n activator: ev,\n content: menu => {\n let _slot;\n return _createVNode(VButtonGroup, {\n \"variant\": variant\n }, _isSlot(_slot = alignments.map(value => {\n const isActive = editor.isActive({\n textAlign: value\n });\n return _createVNode(VButton, {\n \"tabindex\": -1,\n \"color\": isActive ? toolButtonActiveColor : undefined,\n \"key\": value,\n \"icon\": getIcon(value),\n \"onClick\": () => {\n editor.chain().focus().setTextAlign(value).run();\n }\n }, null);\n })) ? _slot : {\n default: () => [_slot]\n });\n }\n });\n },\n floating: true,\n extensions: [TextAlign.configure(resolvedOptions)]\n };\n return tool;\n};","import { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport {\n createWysiwygCustomTagMark,\n WysiwygCustomTagSettings,\n WysiwygCustomTagExtension,\n} from '../extensions/custom-tag';\n\nexport interface WysiwygCustomTagToolSettings\n extends Pick<WysiwygEditorTool, 'icon' | 'floating'>,\n Partial<WysiwygCustomTagSettings> {}\n\n/**\n * Generate Custom Tag Tool\n *\n * @param markName - Mark name\n * @param settings - Tool Configuration\n * @returns Generated Tool\n */\nexport function createWysiwygCustomTagTool(\n markName: string,\n settings: WysiwygCustomTagToolSettings,\n): WysiwygEditorToolFactory {\n const Mark = createWysiwygCustomTagMark(markName, settings);\n const { icon, floating = true } = settings;\n\n return (vui) => {\n const tool: WysiwygEditorTool = {\n key: `customTag:${markName}`,\n icon,\n floating,\n active: ({ editor }) => editor.isActive(markName),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleCustomTag(markName).run();\n },\n extensions: [WysiwygCustomTagExtension, Mark.configure(settings)],\n };\n return tool;\n };\n}\n","import { resolveDirective as _resolveDirective, createVNode as _createVNode, isVNode as _isVNode } from \"vue\";\nimport './VWysiwygEditor.scss';\nimport { defineComponent, computed, ref, watch, onBeforeUnmount } from 'vue';\nimport { createFormNodeWrapperProps, VFormControl, VControlField, createControlFieldProps, createTextableProps, createTextableEmits, TextableControl, createControlProps, useControl, createControlFieldProviderProps, useControlField, VTextCounter, defineSlots, useVui, VButton, VButtonGroup } from '@fastkit/vui';\nimport { EditorContent, useEditor, BubbleMenu } from '@tiptap/vue-3';\nimport { StarterKit } from '@tiptap/starter-kit';\nimport { VUI_WYSIWYG_EDITOR_SYMBOL } from '../../injections';\nimport { resolveRawWysiwygExtensions, resolveRawWysiwygEditorTools,\n// EditorEventsOptions,\nWysiwygEditorInitializeContext } from '../../schemes';\nfunction _isSlot(s) {\n return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !_isVNode(s);\n}\nconst slots = defineSlots();\nexport const VWysiwygEditor = defineComponent({\n name: 'VWysiwygEditor',\n props: {\n ...createTextableProps(),\n ...createFormNodeWrapperProps(),\n ...createControlFieldProps(),\n ...createControlFieldProviderProps(),\n ...createControlProps(),\n ...slots(),\n extensions: {\n type: Array,\n default: () => []\n },\n tools: {\n type: Array,\n default: () => []\n },\n floatingToolbar: Boolean,\n disabledMinHeight: Boolean,\n disabledMaxHeight: Boolean,\n removeDefaultWrapper: {\n type: Boolean,\n default: true\n }\n },\n emits: {\n ...createTextableEmits()\n },\n slots,\n setup(props, ctx) {\n const vui = useVui();\n const textRef = ref('');\n const toolButtonActiveColor = vui.setting('primaryScope');\n const wysiwygSettings = computed(() => resolveRawWysiwygEditorTools(props.tools, vui));\n const control = useControl(props);\n useControlField(props);\n const classes = computed(() => ['v-wysiwyg-editor', control.classes.value, `v-wysiwyg-editor--${control.size.value}`, {\n 'v-wysiwyg-editor--disabled-min-height': props.disabledMinHeight,\n 'v-wysiwyg-editor--disabled-max-height': props.disabledMaxHeight\n }]);\n const inputControl = new TextableControl(props, ctx, {\n nodeType: VUI_WYSIWYG_EDITOR_SYMBOL,\n validationValue: () => textRef.value\n });\n const getOutput = (editor, type) => {\n if (props.removeDefaultWrapper && editor.isEmpty) return '';\n if (type === 'html') return editor.getHTML();\n if (type === 'text') return editor.getText();\n return '';\n };\n const initializeCtx = new WysiwygEditorInitializeContext(() => vui, {\n onCreate: ({\n editor\n }) => {\n textRef.value = getOutput(editor, 'text');\n updateEditable();\n },\n onFocus: ({\n event\n }) => {\n inputControl.focusHandler(event);\n },\n onBlur: ({\n event\n }) => {\n inputControl.blurHandler(event);\n },\n onUpdate: ({\n editor\n }) => {\n inputControl.value = getOutput(editor, 'html');\n textRef.value = getOutput(editor, 'text');\n }\n });\n const extensions = [StarterKit.configure({\n bold: false,\n bulletList: false,\n orderedList: false,\n history: false,\n italic: false\n }), ...resolveRawWysiwygExtensions(props.extensions, initializeCtx), ...wysiwygSettings.value.extensions];\n const updateEditable = () => {\n if (!editor.value) return;\n editor.value.setEditable(inputControl.canOperation);\n };\n watch(() => inputControl.canOperation, updateEditable);\n watch(() => props.modelValue, modelValue => {\n const $editor = editor.value;\n if (!$editor || getOutput($editor, 'html') === modelValue) return;\n $editor.commands.setContent(modelValue == null ? '' : modelValue, false);\n textRef.value = getOutput($editor, 'text');\n });\n initializeCtx.on('create', ({\n editor\n }) => {\n textRef.value = getOutput(editor, 'text');\n updateEditable();\n });\n const editor = useEditor({\n ...initializeCtx.editorOptions(),\n autofocus: props.autofocus,\n content: props.modelValue,\n extensions,\n editorProps: {\n attributes: {\n class: 'v-wysiwyg-editor__input__prose'\n }\n }\n });\n const focus = (position, options) => editor.value?.chain().focus(position, options);\n const wysiwygContext = computed(() => ({\n vui,\n editor: editor.value\n }));\n const createTools = (bubbleMenu = false) => {\n let _slot;\n const {\n value: settings\n } = wysiwygSettings;\n const {\n value: context\n } = wysiwygContext;\n const tools = bubbleMenu ? settings.tools.filter(t => !!t.floating) : settings.tools;\n const _editor = editor.value;\n const variant = vui.setting(bubbleMenu ? 'containedVariant' : 'plainVariant');\n return _createVNode(VButtonGroup, {\n \"class\": ['v-wysiwyg-editor__toolbar', {\n 'v-wysiwyg-editor__floating-toolbar': props.floatingToolbar\n }],\n \"variant\": variant\n }, _isSlot(_slot = tools.map(({\n key,\n icon,\n onClick,\n disabled,\n active\n }) => {\n const isActive = !!_editor && resolveContextualValue(context, active);\n const isDisabled = !inputControl.canOperation || !!_editor && resolveContextualValue(context, disabled);\n let iconName;\n let child;\n if (typeof icon === 'function') {\n if (_editor) {\n const _child = icon(context);\n if (typeof _child === 'function') {\n child = _child();\n } else {\n iconName = _child;\n }\n }\n } else {\n iconName = icon;\n }\n if (!iconName && child == null) return;\n return _createVNode(VButton, {\n \"tabindex\": -1,\n \"key\": key,\n \"icon\": iconName,\n \"onClick\": ev => onClick(context, ev),\n \"color\": isActive ? toolButtonActiveColor : undefined,\n \"disabled\": isDisabled\n }, _isSlot(child) ? child : {\n default: () => [child]\n });\n })) ? _slot : {\n default: () => [_slot]\n });\n };\n onBeforeUnmount(() => {\n editor.value?.destroy();\n });\n const api = {\n get editor() {\n return editor.value;\n },\n control: inputControl\n };\n ctx.expose(api);\n const handleClickLabel = ev => {\n focus('start', {\n scrollIntoView: true\n });\n };\n const defaultSlot = () => {\n let _slot2;\n return _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__body\"\n }, [_createVNode(EditorContent, {\n \"class\": \"v-wysiwyg-editor__input__element wysiwyg\",\n \"editor\": editor.value\n }, null), !props.floatingToolbar && !!editor.value && !inputControl.isReadonly && _createVNode(BubbleMenu, {\n \"class\": \"v-wysiwyg-editor__bubble-menu\",\n \"editor\": editor.value\n }, _isSlot(_slot2 = createTools(true)) ? _slot2 : {\n default: () => [_slot2]\n })]);\n };\n const formControlDefaultSlot = () => _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__wrapper\"\n }, [!inputControl.isReadonly && createTools(), _createVNode(VControlField, {\n \"class\": \"v-wysiwyg-editor__input\",\n \"autoHeight\": true,\n \"startAdornment\": props.startAdornment,\n \"endAdornment\": props.endAdornment,\n \"size\": control.size.value\n }, {\n ...ctx.slots,\n default: defaultSlot\n })]);\n const infoAppendsSlot = () => {\n const {\n counterResult\n } = inputControl;\n if (!counterResult) return;\n return _createVNode(VTextCounter, counterResult, null);\n };\n return () => _createVNode(VFormControl, {\n \"nodeControl\": inputControl,\n \"class\": classes.value,\n \"label\": props.label,\n \"hint\": props.hint,\n \"hinttip\": props.hinttip,\n \"hiddenInfo\": props.hiddenInfo,\n \"requiredChip\": props.requiredChip,\n \"onClickLabel\": handleClickLabel\n }, {\n ...ctx.slots,\n default: formControlDefaultSlot,\n infoAppends: infoAppendsSlot\n });\n }\n});\nfunction resolveContextualValue(ctx,\n// eslint-disable-next-line no-shadow\nsource) {\n return typeof source === 'function' ? source(ctx) : source;\n}"]}
1
+ {"version":3,"sources":["../src/schemes.ts","../src/injections.ts","../src/extensions/linter/Linter.tsx","../src/extensions/linter/utils.ts","../src/extensions/linter/LinterPlugin.ts","../src/extensions/linter/plugins/BadWords.tsx","../src/extensions/linter/plugins/HeadingLevel.ts","../src/extensions/linter/plugins/Punctuation.ts","../src/extensions/color.ts","../src/extensions/custom-tag.ts","../src/tools/bullet-list.ts","../src/tools/format-bold.ts","../src/tools/format-italic.ts","../src/tools/format-underline.ts","../src/tools/history.ts","../src/tools/link.ts","../src/tools/ordered-list.ts","../src/tools/color.tsx","../src/tools/text-align.tsx","../src/tools/custom-tag.ts","../src/components/VWysiwygEditor/VWysiwygEditor.tsx"],"names":["_createVNode","_createTextVNode","Extension","name","vui","_isVNode","Mark","_isSlot","editor","VButtonGroup","VButton"],"mappings":"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","file":"vui-wysiwyg.mjs","sourcesContent":["import { type VuiService, type IconName } from '@fastkit/vui';\nimport {\n type Editor,\n type Extensions,\n type Node,\n type Extension,\n type Mark,\n type AnyExtension,\n type EditorOptions,\n} from '@tiptap/vue-3';\nimport { VNodeChild } from 'vue';\n\nconst EDITOR_EVENTS = [\n 'beforeCreate',\n 'create',\n 'update',\n 'selectionUpdate',\n 'transaction',\n 'focus',\n 'blur',\n 'destroy',\n] as const;\n\ntype PrefixedEventName<S extends string> = `on${Capitalize<S>}`;\n\nconst prefixedEventName = <S extends string>(source: S): PrefixedEventName<S> =>\n `on${source.charAt(0).toUpperCase()}${source.slice(1)}` as any;\n\nexport type WysiwygEditorEvent = (typeof EDITOR_EVENTS)[number];\n\nexport type WysiwygEditorPrefixedEvent = PrefixedEventName<WysiwygEditorEvent>;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface WysiwygEditorEventsOptions\n extends Partial<Pick<EditorOptions, WysiwygEditorPrefixedEvent>> {}\n\nexport type WysiwygEditorEventsBucket = {\n [EV in WysiwygEditorEvent]: NonNullable<\n WysiwygEditorEventsOptions[PrefixedEventName<EV>]\n >[];\n};\n\nexport class WysiwygEditorInitializeContext {\n readonly listeners: WysiwygEditorEventsBucket = {} as any;\n\n private readonly _vui: () => VuiService;\n\n get vui() {\n return this._vui();\n }\n\n constructor(\n vuiGetter: () => VuiService,\n opts: WysiwygEditorEventsOptions = {},\n ) {\n this._vui = vuiGetter;\n\n EDITOR_EVENTS.forEach((event) => {\n this.listeners[event] = [];\n const prefixed = prefixedEventName(event);\n const fn = opts[prefixed];\n fn && this.listeners[event].push(fn as any);\n });\n }\n\n on<EV extends WysiwygEditorEvent>(\n ev: EV,\n handler: NonNullable<WysiwygEditorEventsOptions[PrefixedEventName<EV>]>,\n ) {\n this.listeners[ev].push(handler);\n return () => this.off(ev, handler);\n }\n\n off<EV extends WysiwygEditorEvent>(\n ev: EV,\n handler: NonNullable<WysiwygEditorEventsOptions[PrefixedEventName<EV>]>,\n ) {\n this.listeners[ev] = this.listeners[ev].filter(\n (_handler) => _handler !== handler,\n ) as any;\n }\n\n editorOptions() {\n const opts: WysiwygEditorEventsOptions = {};\n\n EDITOR_EVENTS.forEach((event) => {\n const prefixed = prefixedEventName(event);\n opts[prefixed] = (props) => {\n const handlers = this.listeners[event];\n handlers.forEach((handler) => {\n handler(props as any);\n });\n };\n });\n\n return opts;\n }\n}\n\nexport interface WysiwygEditorContext {\n editor: Editor;\n vui: VuiService;\n}\n\nexport type WysiwygExtensionFactory<Options = any, Storage = any> = (\n ctx: WysiwygEditorInitializeContext,\n) =>\n | Extension<Options, Storage>\n | Node<Options, Storage>\n | Mark<Options, Storage>;\n\nexport interface CreatedWysiwygExtension<Options = any, Storage = any> {\n __isCreatedWysiwygExtension: true;\n _configs: Partial<Options>[];\n configure(\n options?: Partial<Options>,\n ): CreatedWysiwygExtension<Options, Storage>;\n raw: WysiwygExtensionSource<Options, Storage>;\n}\n\nexport type WysiwygExtensionSource<Options = any, Storage = any> =\n | Extension<Options, Storage>\n | Node<Options, Storage>\n | Mark<Options, Storage>\n | WysiwygExtensionFactory<Options, Storage>;\n\nexport type RawWysiwygExtension<Options = any, Storage = any> =\n | WysiwygExtensionSource<Options, Storage>\n | CreatedWysiwygExtension<Options, Storage>;\n\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// extension: Extension<Options, Storage>,\n// ): Extension<Options, Storage>;\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// node: Node<Options, Storage>,\n// ): Node<Options, Storage>;\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// mark: Mark<Options, Storage>,\n// ): Mark<Options, Storage>;\n// export function createWysiwygExtension<Options = any, Storage = any>(\n// factory: WysiwygExtensionFactory<Options, Storage>,\n// ): WysiwygExtensionFactory<Options, Storage>;\n\nfunction isCreatedWysiwygExtension<Options = any, Storage = any>(\n source: unknown,\n): source is CreatedWysiwygExtension<Options, Storage> {\n return (\n !!source &&\n typeof source === 'object' &&\n (source as CreatedWysiwygExtension).__isCreatedWysiwygExtension === true\n );\n}\n\nexport function createWysiwygExtension<Options = any, Storage = any>(\n extension: WysiwygExtensionSource<Options, Storage>,\n) {\n const ext: CreatedWysiwygExtension<Options, Storage> = {\n __isCreatedWysiwygExtension: true,\n _configs: [],\n configure: (opts) => {\n opts && ext._configs.push(opts);\n return ext;\n },\n raw: extension,\n };\n return ext;\n}\n\nfunction resolveRawWysiwygExtension(\n raw: RawWysiwygExtension,\n ctx: WysiwygEditorInitializeContext,\n): AnyExtension {\n if (isCreatedWysiwygExtension(raw)) {\n const { raw: _raw, _configs } = raw;\n let ext = typeof _raw === 'function' ? _raw(ctx) : _raw;\n _configs.forEach((config) => {\n ext = ext.configure(config);\n });\n return ext;\n }\n return typeof raw === 'function' ? raw(ctx) : raw;\n}\n\nexport function resolveRawWysiwygExtensions(\n raws: RawWysiwygExtension[],\n ctx: WysiwygEditorInitializeContext,\n) {\n return raws.map((raw) => resolveRawWysiwygExtension(raw, ctx));\n}\n\nexport type WysiwygEditorToolIcon =\n | IconName\n | ((ctx: WysiwygEditorContext) => IconName | (() => VNodeChild) | undefined);\n\n/**\n * Tool Configuration\n */\nexport interface WysiwygEditorTool {\n /**\n * Tool Key\n *\n * Must be unique to identify the tool\n */\n key: string;\n /** Icons to be displayed on the toolbar */\n icon: WysiwygEditorToolIcon;\n /** Conditions for displaying the icon as active */\n active?: boolean | ((ctx: WysiwygEditorContext) => boolean);\n /** Conditions for deactivating the icon */\n disabled?: boolean | ((ctx: WysiwygEditorContext) => boolean);\n /** Handler when mark text is clicked */\n onClick: (ctx: WysiwygEditorContext, ev: MouseEvent) => any;\n /** Whether to display tools in floating menu or not */\n floating?: boolean;\n /** Extensions that the tool depends on */\n extensions?: Extensions;\n}\n\nexport type WysiwygEditorToolFactory<Options = void> = (\n vui: VuiService,\n options?: Options,\n) => WysiwygEditorTool | WysiwygEditorTool[];\n\nexport type RawWysiwygEditorTool =\n | WysiwygEditorTool\n | WysiwygEditorToolFactory<any>;\n\nfunction resolveRawWysiwygEditorTool(\n raw: RawWysiwygEditorTool,\n vui: VuiService,\n) {\n return typeof raw === 'function' ? raw(vui) : raw;\n}\n\nexport interface ResolvedWysiwygEditorSettings {\n tools: WysiwygEditorTool[];\n extensions: Extensions;\n}\n\nexport function resolveRawWysiwygEditorTools(\n rawTools: RawWysiwygEditorTool[],\n vui: VuiService,\n): ResolvedWysiwygEditorSettings {\n const tools: WysiwygEditorTool[] = [];\n const extensions: Extensions = [];\n\n rawTools.forEach((raw) => {\n let resolved = resolveRawWysiwygEditorTool(raw, vui);\n if (!Array.isArray(resolved)) {\n resolved = [resolved];\n }\n resolved.forEach((tool) => {\n tools.push(tool);\n if (tool.extensions) {\n extensions.push(...tool.extensions);\n }\n });\n });\n\n return {\n tools,\n extensions,\n };\n}\n","export const VUI_WYSIWYG_EDITOR_SYMBOL = 'vui-wysiwyg-editor';\n","import { createVNode as _createVNode } from \"vue\";\nimport './Linter.scss';\nimport { Extension } from '@tiptap/vue-3';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\nimport { Plugin, PluginKey, TextSelection } from '@tiptap/pm/state';\nimport { createWysiwygExtension } from '../../schemes';\nconst PROBLEM_CLASS_NAME = 'v-linter__problem';\nconst ISSUE_ICON_CLASS_NAME = 'v-linter__issue-icon';\nconst ISSUE_DATASET_NAME = 'data-issue-id';\nfunction resolveWysiwygLinterFixMessage(message) {\n return typeof message === 'function' ? message() : message;\n}\nfunction renderIcon(view, issue) {\n const {\n level = 'warning'\n } = issue;\n const icon = document.createElement('div');\n const message = resolveWysiwygLinterFixMessage(issue.message);\n icon.className = `${ISSUE_ICON_CLASS_NAME} ${level}-scope`;\n icon.setAttribute(ISSUE_DATASET_NAME, issue.id);\n if (typeof message === 'string') {\n icon.title = message;\n }\n return icon;\n}\nfunction runAllLinterPlugins(doc, plugins) {\n const decorations = [];\n const issues = plugins.map(RegisteredLinterPlugin => new RegisteredLinterPlugin(doc).scan().getResults()).flat();\n issues.forEach(issue => {\n const {\n level = 'warning',\n icon\n } = issue;\n const message = resolveWysiwygLinterFixMessage(issue.message);\n decorations.push(Decoration.inline(issue.from, issue.to, {\n class: `${PROBLEM_CLASS_NAME} ${level}-scope`,\n 'data-issue-id': issue.id,\n title: typeof message === 'string' ? message : undefined\n }));\n if (icon) {\n decorations.push(Decoration.widget(issue.from, view => renderIcon(view, issue)));\n }\n });\n const decorationSet = DecorationSet.create(doc, decorations);\n return {\n issues,\n decorationSet\n };\n}\nexport const WysiwygLinter = createWysiwygExtension(ctx => {\n function showMenu(view, issue, event) {\n const message = resolveWysiwygLinterFixMessage(issue.message);\n const variant = ctx.vui.setting('containedVariant');\n const scope = ctx.vui.setting(`${issue.level}Scope`);\n return ctx.vui.menu({\n activator: event,\n content: stack => _createVNode(\"div\", {\n \"class\": \"v-linter__issue-menu__body\"\n }, [_createVNode(\"div\", {\n \"class\": ['v-linter__issue-menu__message', `${scope}-scope ${variant}`]\n }, [message]), issue.fix.length && _createVNode(\"div\", {\n \"class\": \"v-linter__issue-menu__fixers\"\n }, [issue.fix.map((fixer, index) => _createVNode(\"div\", {\n \"key\": index,\n \"class\": \"v-linter__issue-menu__fixer\"\n }, [_createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": \"v-linter__issue-menu__fixer__button\",\n \"onClick\": () => {\n stack.close();\n fixer.handler(view, issue);\n }\n }, [_createVNode(\"span\", {\n \"class\": \"v-linter__issue-menu__fixer__button__message\"\n }, [resolveWysiwygLinterFixMessage(fixer.message)])])]))])])\n });\n }\n return Extension.create({\n name: 'linter',\n addOptions() {\n return {\n plugins: []\n };\n },\n addStorage() {\n return {\n issues: []\n };\n },\n addProseMirrorPlugins() {\n const {\n plugins\n } = this.options;\n const {\n storage\n } = this;\n const runAll = doc => {\n const {\n issues,\n decorationSet\n } = runAllLinterPlugins(doc, plugins);\n storage.issues = issues;\n return decorationSet;\n };\n const getIssue = id => storage.issues.find(issue => issue.id === id);\n const getIssueElementByEvent = source => {\n if (!source || !(source instanceof HTMLElement)) {\n return;\n }\n const issueId = source.getAttribute(ISSUE_DATASET_NAME);\n const issue = issueId && getIssue(issueId);\n if (!issue) return;\n return {\n issue\n };\n };\n const linterPlugin = new Plugin({\n key: new PluginKey('linter'),\n state: {\n init(_, {\n doc\n }) {\n return runAll(doc);\n },\n apply(transaction, oldState) {\n return transaction.docChanged ? runAll(transaction.doc) : oldState;\n }\n },\n props: {\n decorations(state) {\n return linterPlugin.getState(state);\n },\n handleClick(view, _, event) {\n const info = getIssueElementByEvent(event.target);\n if (!info) {\n return false;\n }\n const {\n issue\n } = info;\n const {\n from,\n to\n } = issue;\n const focus = () => view.dispatch(view.state.tr.setSelection(TextSelection.create(view.state.doc, from, to)).scrollIntoView());\n focus();\n showMenu(view, issue, event);\n return true;\n }\n }\n });\n return [linterPlugin];\n }\n });\n});","/* eslint-disable eqeqeq */\n/* eslint-disable no-bitwise */\nlet IDX = 256;\nlet BUFFER: any;\nconst HEX: any = [];\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nexport function cheepUUID() {\n let i = 0;\n let num;\n let out = '';\n\n if (!BUFFER || IDX + 16 > 256) {\n BUFFER = Array((i = 256));\n while (i--) BUFFER[i] = (256 * Math.random()) | 0;\n // eslint-disable-next-line no-multi-assign\n i = IDX = 0;\n }\n\n for (; i < 16; i++) {\n num = BUFFER[IDX + i];\n if (i == 6) out += HEX[(num & 15) | 64];\n else if (i == 8) out += HEX[(num & 63) | 128];\n else out += HEX[num];\n\n if (i & 1 && i > 1 && i < 11) out += '-';\n }\n\n IDX++;\n return out;\n}\n","import { VNodeChild } from 'vue';\nimport { Node as ProsemirrorNode } from '@tiptap/pm/model';\nimport { EditorView } from '@tiptap/pm/view';\nimport { cheepUUID } from './utils';\n\nexport type WysiwygLinterFixFn = (\n view: EditorView,\n issue: WysiwygLinterResult,\n) => any;\n\nexport type WysiwygLinterFixMessage = string | (() => VNodeChild);\n\nexport interface WysiwygLinterFixer {\n message: WysiwygLinterFixMessage;\n handler: WysiwygLinterFixFn;\n}\n\nexport type WysiwygLinterResultLevel = 'warning' | 'error';\n\n// fixers\nexport interface WysiwygLinterResult {\n id: string;\n icon: boolean;\n level: WysiwygLinterResultLevel;\n message: WysiwygLinterFixMessage;\n from: number;\n to: number;\n fix: WysiwygLinterFixer[];\n}\n\nexport interface RawLinterResult\n extends Omit<WysiwygLinterResult, 'level' | 'fix' | 'id' | 'icon'> {\n level?: WysiwygLinterResultLevel;\n icon?: boolean;\n fix?: WysiwygLinterFixer | WysiwygLinterFixer[];\n}\n\nexport class WysiwygLinterPlugin {\n protected doc: ProsemirrorNode;\n\n private results: Array<WysiwygLinterResult> = [];\n\n constructor(doc: ProsemirrorNode) {\n this.doc = doc;\n }\n\n record(result: RawLinterResult) {\n const { fix = [], icon = false } = result;\n this.results.push({\n level: 'error',\n id: cheepUUID(),\n ...result,\n fix: Array.isArray(fix) ? fix : [fix],\n icon,\n });\n }\n\n scan() {\n return this;\n }\n\n getResults() {\n return this.results;\n }\n}\n","import { createTextVNode as _createTextVNode, createVNode as _createVNode } from \"vue\";\nimport { WysiwygLinterPlugin } from '../LinterPlugin';\nexport function WysiwygLinterBadWords(words) {\n const regex = new RegExp(`\\\\b(${words.join('|')})\\\\b`);\n\n // eslint-disable-next-line no-shadow\n return class WysiwygLinterBadWords extends WysiwygLinterPlugin {\n scan() {\n this.doc.descendants((node, position) => {\n if (!node.isText) {\n return;\n }\n const matches = regex.exec(node.text);\n if (matches) {\n const fixValue = `${matches[0]}!!!!!`;\n this.record({\n level: 'warning',\n message: `Try not to say '${matches[0]}'`,\n from: position + matches.index,\n to: position + matches.index + matches[0].length,\n fix: [{\n message: () => _createVNode(\"span\", null, [_createVNode(\"code\", null, [fixValue]), _createTextVNode(\"\\u306B\\u4FEE\\u6B63\\u3059\\u308B\\u3002\")]),\n handler: () => {\n // eslint-disable-next-line no-console\n console.log('hoge');\n }\n }, {\n message: 'どうにかする',\n handler: () => {\n // eslint-disable-next-line no-console\n console.log('hoge');\n }\n }]\n });\n }\n });\n return this;\n }\n };\n}","import { EditorView } from '@tiptap/pm/view';\nimport {\n WysiwygLinterPlugin,\n WysiwygLinterResult as Issue,\n} from '../LinterPlugin';\n\nexport class WysiwygLinterHeadingLevel extends WysiwygLinterPlugin {\n fixHeader(level: number) {\n // eslint-disable-next-line func-names\n return function ({ state, dispatch }: EditorView, issue: Issue) {\n dispatch(state.tr.setNodeMarkup(issue.from - 1, undefined, { level }));\n };\n }\n\n scan() {\n let lastHeadLevel: number | null = null;\n\n this.doc.descendants((node, position) => {\n if (node.type.name === 'heading') {\n // Check whether heading levels fit under the current level\n const { level } = node.attrs;\n\n if (lastHeadLevel != null && level > lastHeadLevel + 1) {\n this.record({\n message: `Heading too small (${level} under ${lastHeadLevel})`,\n from: position + 1,\n to: position + 1 + node.content.size,\n fix: {\n message: '修正する',\n handler: this.fixHeader(lastHeadLevel + 1),\n },\n });\n }\n lastHeadLevel = level;\n }\n });\n\n return this;\n }\n}\n","import { EditorView } from '@tiptap/pm/view';\nimport {\n WysiwygLinterPlugin,\n WysiwygLinterResult as Issue,\n} from '../LinterPlugin';\n\nexport class WysiwygLinterPunctuation extends WysiwygLinterPlugin {\n public regex = / ([,.!?:]) ?/g;\n\n fix(replacement: any) {\n // eslint-disable-next-line func-names\n return function ({ state, dispatch }: EditorView, issue: Issue) {\n dispatch(\n state.tr.replaceWith(\n issue.from,\n issue.to,\n state.schema.text(replacement),\n ),\n );\n };\n }\n\n scan() {\n this.doc.descendants((node, position) => {\n if (!node.isText) {\n return;\n }\n\n if (!node.text) {\n return;\n }\n\n const matches = this.regex.exec(node.text);\n\n if (matches) {\n this.record({\n message: 'Suspicious spacing around punctuation',\n from: position + matches.index,\n to: position + matches.index + matches[0].length,\n fix: {\n message: 'Fix it!!!',\n handler: this.fix(`${matches[1]} `),\n },\n });\n }\n });\n\n return this;\n }\n}\n","import { Extension } from '@tiptap/vue-3';\nimport '@tiptap/extension-text-style';\n\nexport type WysiwygColorOptions = {\n types: string[];\n};\n\ndeclare module '@tiptap/vue-3' {\n interface Commands<ReturnType> {\n color: {\n /**\n * Set the text color\n */\n setColor: (color: string) => ReturnType;\n /**\n * Unset the text color\n */\n unsetColor: () => ReturnType;\n };\n }\n}\n\nexport const WysiwygColorExtension = Extension.create<WysiwygColorOptions>({\n name: 'color',\n\n addOptions() {\n return {\n types: ['textStyle'],\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n color: {\n default: null,\n parseHTML: (element) => element.style.color.replace(/['\"]+/g, ''),\n renderHTML: (attributes) => {\n if (!attributes.color) {\n return {};\n }\n\n return {\n style: `color: ${attributes.color}`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setColor:\n (color) =>\n ({ chain }) =>\n chain().setMark('textStyle', { color }).run(),\n unsetColor:\n () =>\n ({ chain }) =>\n chain()\n .setMark('textStyle', { color: null })\n .removeEmptyTextStyle()\n .run(),\n };\n },\n});\n","import { Extension, mergeAttributes, Mark } from '@tiptap/vue-3';\nimport '@tiptap/extension-text-style';\n// import '@tiptap/vue-3';\n\nexport type WysiwygCustomTagSettings = {\n /**\n * tag name\n *\n * Either the html default tag name or a custom tag name is acceptable\n *\n * @default \"span\"\n */\n tag: string;\n\n /**\n * HTML Attributes\n *\n * Attributes to be assigned to tags such as `class`, `data-xxx`, etc.\n */\n attrs?: Record<any, string>;\n};\n\ndeclare module '@tiptap/vue-3' {\n interface Commands<ReturnType> {\n customTag: {\n /**\n * Set the custom tag\n */\n setCustomTag: (markName: string) => ReturnType;\n /**\n * Toggle the custom tag\n */\n toggleCustomTag: (markName: string) => ReturnType;\n /**\n * Unset the custom tag\n */\n unsetCustomTag: (markName: string) => ReturnType;\n };\n }\n}\n\n// export type WysiwygCustomTagSettings = WysiwygCustomTagOptions & {\n// /**\n// * extension name\n// */\n// name: string;\n// };\n\nexport function createWysiwygCustomTagMark(\n name: string,\n settings: Partial<WysiwygCustomTagSettings>,\n) {\n const { tag = 'span', attrs } = settings;\n const attrEntries = attrs && Object.entries(attrs);\n // eslint-disable-next-line no-shadow\n const attrNames = attrEntries && attrEntries.map(([name]) => name);\n\n const getElementAttrs = (\n el: HTMLElement,\n ): Record<any, string> | undefined => {\n if (!attrNames) return;\n\n return (\n el\n .getAttributeNames()\n // eslint-disable-next-line no-shadow\n .reduce((acc, name) => ({ ...acc, [name]: el.getAttribute(name) }), {})\n );\n };\n\n const isMatchedElementAttrs = (elAttrs: Record<any, string>): boolean => {\n if (!attrEntries) return true;\n // eslint-disable-next-line no-shadow\n return attrEntries.every(([name, value]) => elAttrs[name] === value);\n };\n\n return Mark.create<WysiwygCustomTagSettings>({\n name,\n\n addOptions() {\n return {\n tag,\n attrs: attrs && { ...attrs },\n };\n },\n parseHTML() {\n return [\n {\n tag,\n getAttrs: (el: any) => {\n if (!attrs) return null;\n const elAttrs = getElementAttrs(el);\n if (!elAttrs) return false;\n return isMatchedElementAttrs(el) && null;\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n tag,\n attrs ? mergeAttributes(attrs, HTMLAttributes) : HTMLAttributes,\n 0,\n ];\n },\n });\n}\n\nexport const WysiwygCustomTagExtension =\n Extension.create<WysiwygCustomTagSettings>({\n name: 'custom-tag',\n addCommands() {\n return {\n setCustomTag:\n (markName) =>\n ({ chain }) =>\n chain().setMark(markName).run(),\n unsetCustomTag:\n (markName) =>\n ({ chain }) =>\n chain().unsetMark(markName).run(),\n toggleCustomTag:\n (markName) =>\n ({ chain }) =>\n chain().toggleMark(markName).run(),\n };\n },\n });\n","import { BulletList, BulletListOptions } from '@tiptap/extension-bullet-list';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygBulletListTool: WysiwygEditorToolFactory<\n BulletListOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'bulletList',\n icon: vui.icon('editorformatListBulleted'),\n active: ({ editor }) => editor.isActive('bulletList'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleBulletList().run();\n },\n floating: true,\n extensions: [BulletList.configure(options)],\n };\n return tool;\n};\n","import { Bold, BoldOptions } from '@tiptap/extension-bold';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygFormatBoldTool: WysiwygEditorToolFactory<BoldOptions> = (\n vui,\n options,\n) => {\n const tool: WysiwygEditorTool = {\n key: 'formatBold',\n icon: vui.icon('editorformatBold'),\n active: ({ editor }) => editor.isActive('bold'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleBold().run();\n },\n floating: true,\n extensions: [Bold.configure(options)],\n };\n return tool;\n};\n","import { Italic, ItalicOptions } from '@tiptap/extension-italic';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygFormatItalicTool: WysiwygEditorToolFactory<\n ItalicOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'formatItalic',\n icon: vui.icon('editorformatItalic'),\n active: ({ editor }) => editor.isActive('italic'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleItalic().run();\n },\n floating: true,\n extensions: [Italic.configure(options)],\n };\n return tool;\n};\n","import { Underline, UnderlineOptions } from '@tiptap/extension-underline';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygFormatUnderlineTool: WysiwygEditorToolFactory<\n UnderlineOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'formatUnderline',\n icon: vui.icon('editorformatUnderline'),\n active: ({ editor }) => editor.isActive('underline'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleUnderline().run();\n },\n floating: true,\n extensions: [Underline.configure(options)],\n };\n return tool;\n};\n","import { History, HistoryOptions } from '@tiptap/extension-history';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygHistoryTool: WysiwygEditorToolFactory<HistoryOptions> = (\n vui,\n options,\n) => {\n const undo: WysiwygEditorTool = {\n key: 'history-undo',\n icon: vui.icon('editorUndo'),\n disabled: ({ editor }) => !editor.can().undo(),\n onClick: ({ editor }) => {\n editor.chain().focus().undo().run();\n },\n extensions: [History.configure(options)],\n };\n const redo: WysiwygEditorTool = {\n key: 'history-redo',\n icon: vui.icon('editorRedo'),\n disabled: ({ editor }) => !editor.can().redo(),\n onClick: ({ editor }) => {\n editor.chain().focus().redo().run();\n },\n };\n return [undo, redo];\n};\n","import { Link, LinkOptions } from '@tiptap/extension-link';\nimport { validateIf, url } from '@fastkit/vui';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygLinkTool: WysiwygEditorToolFactory<LinkOptions> = (\n vui,\n options,\n) => {\n const tool: WysiwygEditorTool = {\n key: 'link',\n icon: vui.icon('editorLink'),\n active: ({ editor }) => editor.isActive('link'),\n // eslint-disable-next-line no-shadow\n onClick: async ({ vui, editor }) => {\n const { href = '' } = editor.getAttributes('link');\n const result = await vui.prompt({\n input: {\n label: 'Link URL',\n rules: [validateIf, url],\n initialValue: href,\n size: 'sm',\n autofocus: true,\n },\n });\n\n if (result === undefined || result === false) {\n return;\n }\n\n const range = editor.chain().focus().extendMarkRange('link');\n\n if (!result) {\n range.unsetLink().run();\n } else {\n range\n .setLink({\n href: result,\n })\n .run();\n }\n },\n floating: true,\n extensions: [\n Link.configure({\n openOnClick: false,\n ...options,\n }),\n ],\n };\n return tool;\n};\n","import {\n OrderedList,\n OrderedListOptions,\n} from '@tiptap/extension-ordered-list';\nimport { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\n\nexport const WysiwygOrderedListTool: WysiwygEditorToolFactory<\n OrderedListOptions\n> = (vui, options) => {\n const tool: WysiwygEditorTool = {\n key: 'orderedList',\n icon: vui.icon('editorformatListNumbered'),\n active: ({ editor }) => editor.isActive('orderedList'),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleOrderedList().run();\n },\n floating: true,\n extensions: [OrderedList.configure(options)],\n };\n return tool;\n};\n","import { createVNode as _createVNode } from \"vue\";\nimport './color.scss';\nimport { VIcon } from '@fastkit/vui';\nimport TextStyle from '@tiptap/extension-text-style';\nimport { WysiwygColorExtension } from '../extensions';\nexport function createWysiwygColorTool(opts) {\n const WysiwygColorTool = vui => {\n const tool = {\n key: 'textColor',\n // active: ({ editor }) => editor.isActive('textStyle'),\n icon: ({\n editor\n }) => () => {\n const {\n color\n } = editor.getAttributes('textStyle');\n const style = {\n color\n };\n return _createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__button\"\n }, [_createVNode(VIcon, {\n \"class\": \"v-wysiwyg-color-tool__button__icon\",\n \"name\": vui.icon('editorTextColor')\n }, null), _createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__button__bar\",\n \"style\": style\n }, null)]);\n },\n onClick: (ctx, ev) => {\n ctx.vui.menu({\n class: 'v-wysiwyg-color-tool__menu',\n activator: ev,\n content: stack => _createVNode(\"div\", {\n \"class\": ['v-wysiwyg-color-tool__items', {\n 'v-wysiwyg-color-tool__items--with-label': opts.withLabel\n }]\n }, [opts.items.map((item, index) => _createVNode(\"button\", {\n \"key\": item.key == null ? index : item.key,\n \"class\": \"v-wysiwyg-color-tool__item\",\n \"type\": \"button\",\n \"onClick\": () => {\n const {\n color\n } = item;\n let command = ctx.editor.chain().focus();\n if (color) {\n command = command.setColor(color);\n } else {\n command = command.unsetColor();\n }\n command.run();\n stack.close();\n }\n }, [_createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__item__color\",\n \"style\": item.color ? {\n color: item.color\n } : {}\n }, null), opts.withLabel && _createVNode(\"span\", {\n \"class\": \"v-wysiwyg-color-tool__item__name\"\n }, [item.name])]))])\n });\n },\n floating: true,\n extensions: [TextStyle, WysiwygColorExtension]\n };\n return tool;\n };\n return WysiwygColorTool;\n}","import { isVNode as _isVNode, createVNode as _createVNode } from \"vue\";\nimport { TextAlign } from '@tiptap/extension-text-align';\nimport { VButtonGroup, VButton } from '@fastkit/vui';\nfunction _isSlot(s) {\n return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !_isVNode(s);\n}\n/**\n * A list of available options for the text align attribute.\n * @remarks\n * `\"justify\"` has not yet been adopted because of ambiguity in browser support.\n */\nexport const WYSIWYG_TEXT_ALIGN_VALUES = ['left', 'center', 'right'\n// 'justify',\n];\n\n/** Text align value */\n\n/**\n * A list of nodes where the text align attribute should be applied to.\n */\nconst DEFAULT_TYPES = ['heading', 'paragraph'];\nconst conditions = WYSIWYG_TEXT_ALIGN_VALUES.map(value => [value, {\n textAlign: value\n}]);\nconst ICON_AT = {\n left: 'editorAlignLeft',\n center: 'editorAlignCenter',\n right: 'editorAlignRight'\n};\nfunction resolveOptions(rawOptions) {\n const types = rawOptions?.types || DEFAULT_TYPES.slice();\n const alignments = rawOptions?.alignments || WYSIWYG_TEXT_ALIGN_VALUES.slice();\n const defaultAlignment = rawOptions?.defaultAlignment || 'left';\n return {\n types,\n alignments,\n defaultAlignment\n };\n}\nfunction getCurrentAlign(editor, options) {\n for (const [align, condition] of conditions) {\n if (editor.isActive(condition)) return align;\n }\n return options.defaultAlignment;\n}\nexport const WysiwygTextAlignTool = (vui, options) => {\n const resolvedOptions = resolveOptions(options);\n const {\n alignments\n } = resolvedOptions;\n const getIcon = value => {\n const iconKey = ICON_AT[value];\n const icon = vui.icon(iconKey);\n if (icon === '$empty' || typeof icon === 'function') return;\n return icon;\n };\n const variant = vui.setting('plainVariant');\n const toolButtonActiveColor = vui.setting('primaryScope');\n const tool = {\n key: 'textAlign',\n icon: ({\n editor\n }) => getIcon(getCurrentAlign(editor, resolvedOptions)),\n // eslint-disable-next-line no-shadow\n onClick: async ({\n vui,\n editor\n }, ev) => {\n vui.menu({\n distance: 0,\n activator: ev,\n content: menu => {\n let _slot;\n return _createVNode(VButtonGroup, {\n \"variant\": variant\n }, _isSlot(_slot = alignments.map(value => {\n const isActive = editor.isActive({\n textAlign: value\n });\n return _createVNode(VButton, {\n \"tabindex\": -1,\n \"color\": isActive ? toolButtonActiveColor : undefined,\n \"key\": value,\n \"icon\": getIcon(value),\n \"onClick\": () => {\n editor.chain().focus().setTextAlign(value).run();\n }\n }, null);\n })) ? _slot : {\n default: () => [_slot]\n });\n }\n });\n },\n floating: true,\n extensions: [TextAlign.configure(resolvedOptions)]\n };\n return tool;\n};","import { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport {\n createWysiwygCustomTagMark,\n WysiwygCustomTagSettings,\n WysiwygCustomTagExtension,\n} from '../extensions/custom-tag';\n\nexport interface WysiwygCustomTagToolSettings\n extends Pick<WysiwygEditorTool, 'icon' | 'floating'>,\n Partial<WysiwygCustomTagSettings> {}\n\n/**\n * Generate Custom Tag Tool\n *\n * @param markName - Mark name\n * @param settings - Tool Configuration\n * @returns Generated Tool\n */\nexport function createWysiwygCustomTagTool(\n markName: string,\n settings: WysiwygCustomTagToolSettings,\n): WysiwygEditorToolFactory {\n const Mark = createWysiwygCustomTagMark(markName, settings);\n const { icon, floating = true } = settings;\n\n return (vui) => {\n const tool: WysiwygEditorTool = {\n key: `customTag:${markName}`,\n icon,\n floating,\n active: ({ editor }) => editor.isActive(markName),\n onClick: ({ editor }) => {\n editor.chain().focus().toggleCustomTag(markName).run();\n },\n extensions: [WysiwygCustomTagExtension, Mark.configure(settings)],\n };\n return tool;\n };\n}\n","import { resolveDirective as _resolveDirective, createVNode as _createVNode, isVNode as _isVNode } from \"vue\";\nimport './VWysiwygEditor.scss';\nimport { defineComponent, computed, ref, watch, onBeforeUnmount } from 'vue';\nimport { createFormNodeWrapperProps, VFormControl, VControlField, createControlFieldProps, createTextableProps, createTextableEmits, TextableControl, createControlProps, useControl, createControlFieldProviderProps, useControlField, VTextCounter, defineSlots, useVui, VButton, VButtonGroup } from '@fastkit/vui';\nimport { EditorContent, useEditor, BubbleMenu } from '@tiptap/vue-3';\nimport { StarterKit } from '@tiptap/starter-kit';\nimport { VUI_WYSIWYG_EDITOR_SYMBOL } from '../../injections';\nimport { resolveRawWysiwygExtensions, resolveRawWysiwygEditorTools,\n// EditorEventsOptions,\nWysiwygEditorInitializeContext } from '../../schemes';\nfunction _isSlot(s) {\n return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !_isVNode(s);\n}\nconst slots = defineSlots();\nexport const VWysiwygEditor = defineComponent({\n name: 'VWysiwygEditor',\n props: {\n ...createTextableProps(),\n ...createFormNodeWrapperProps(),\n ...createControlFieldProps(),\n ...createControlFieldProviderProps(),\n ...createControlProps(),\n ...slots(),\n extensions: {\n type: Array,\n default: () => []\n },\n tools: {\n type: Array,\n default: () => []\n },\n floatingToolbar: Boolean,\n disabledMinHeight: Boolean,\n disabledMaxHeight: Boolean,\n removeDefaultWrapper: {\n type: Boolean,\n default: true\n }\n },\n emits: {\n ...createTextableEmits()\n },\n slots,\n setup(props, ctx) {\n const vui = useVui();\n const textRef = ref('');\n const toolButtonActiveColor = vui.setting('primaryScope');\n const wysiwygSettings = computed(() => resolveRawWysiwygEditorTools(props.tools, vui));\n const control = useControl(props);\n useControlField(props);\n const classes = computed(() => ['v-wysiwyg-editor', control.classes.value, `v-wysiwyg-editor--${control.size.value}`, {\n 'v-wysiwyg-editor--disabled-min-height': props.disabledMinHeight,\n 'v-wysiwyg-editor--disabled-max-height': props.disabledMaxHeight\n }]);\n const inputControl = new TextableControl(props, ctx, {\n nodeType: VUI_WYSIWYG_EDITOR_SYMBOL,\n validationValue: () => textRef.value\n });\n const getOutput = (editor, type) => {\n if (props.removeDefaultWrapper && editor.isEmpty) return '';\n if (type === 'html') return editor.getHTML();\n if (type === 'text') return editor.getText();\n return '';\n };\n const initializeCtx = new WysiwygEditorInitializeContext(() => vui, {\n onCreate: ({\n editor\n }) => {\n textRef.value = getOutput(editor, 'text');\n updateEditable();\n },\n onFocus: ({\n event\n }) => {\n inputControl.focusHandler(event);\n },\n onBlur: ({\n event\n }) => {\n inputControl.blurHandler(event);\n },\n onUpdate: ({\n editor\n }) => {\n inputControl.value = getOutput(editor, 'html');\n textRef.value = getOutput(editor, 'text');\n }\n });\n const extensions = [StarterKit.configure({\n bold: false,\n bulletList: false,\n orderedList: false,\n history: false,\n italic: false\n }), ...resolveRawWysiwygExtensions(props.extensions, initializeCtx), ...wysiwygSettings.value.extensions];\n const updateEditable = () => {\n if (!editor.value) return;\n editor.value.setEditable(inputControl.canOperation);\n };\n watch(() => inputControl.canOperation, updateEditable);\n watch(() => props.modelValue, modelValue => {\n const $editor = editor.value;\n if (!$editor || getOutput($editor, 'html') === modelValue) return;\n $editor.commands.setContent(modelValue == null ? '' : modelValue, false);\n textRef.value = getOutput($editor, 'text');\n });\n initializeCtx.on('create', ({\n editor\n }) => {\n textRef.value = getOutput(editor, 'text');\n updateEditable();\n });\n const editor = useEditor({\n ...initializeCtx.editorOptions(),\n autofocus: props.autofocus,\n content: props.modelValue,\n extensions,\n editorProps: {\n attributes: {\n class: 'v-wysiwyg-editor__input__prose'\n }\n }\n });\n const focus = (position, options) => editor.value?.chain().focus(position, options);\n const wysiwygContext = computed(() => ({\n vui,\n editor: editor.value\n }));\n const createTools = (bubbleMenu = false) => {\n let _slot;\n const {\n value: settings\n } = wysiwygSettings;\n const {\n value: context\n } = wysiwygContext;\n const tools = bubbleMenu ? settings.tools.filter(t => !!t.floating) : settings.tools;\n const _editor = editor.value;\n const variant = vui.setting(bubbleMenu ? 'containedVariant' : 'plainVariant');\n return _createVNode(VButtonGroup, {\n \"class\": ['v-wysiwyg-editor__toolbar', {\n 'v-wysiwyg-editor__floating-toolbar': props.floatingToolbar\n }],\n \"variant\": variant\n }, _isSlot(_slot = tools.map(({\n key,\n icon,\n onClick,\n disabled,\n active\n }) => {\n const isActive = !!_editor && resolveContextualValue(context, active);\n const isDisabled = !inputControl.canOperation || !!_editor && resolveContextualValue(context, disabled);\n let iconName;\n let child;\n if (typeof icon === 'function') {\n if (_editor) {\n const _child = icon(context);\n if (typeof _child === 'function') {\n child = _child();\n } else {\n iconName = _child;\n }\n }\n } else {\n iconName = icon;\n }\n if (!iconName && child == null) return;\n return _createVNode(VButton, {\n \"tabindex\": -1,\n \"key\": key,\n \"icon\": iconName,\n \"onClick\": ev => onClick(context, ev),\n \"color\": isActive ? toolButtonActiveColor : undefined,\n \"disabled\": isDisabled\n }, _isSlot(child) ? child : {\n default: () => [child]\n });\n })) ? _slot : {\n default: () => [_slot]\n });\n };\n onBeforeUnmount(() => {\n editor.value?.destroy();\n });\n const api = {\n get editor() {\n return editor.value;\n },\n control: inputControl\n };\n ctx.expose(api);\n const handleClickLabel = ev => {\n focus('start', {\n scrollIntoView: true\n });\n };\n const defaultSlot = () => {\n let _slot2;\n return _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__body\"\n }, [_createVNode(EditorContent, {\n \"class\": \"v-wysiwyg-editor__input__element wysiwyg\",\n \"editor\": editor.value\n }, null), !props.floatingToolbar && !!editor.value && !inputControl.isReadonly && _createVNode(BubbleMenu, {\n \"class\": \"v-wysiwyg-editor__bubble-menu\",\n \"editor\": editor.value\n }, _isSlot(_slot2 = createTools(true)) ? _slot2 : {\n default: () => [_slot2]\n })]);\n };\n const formControlDefaultSlot = () => _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__wrapper\"\n }, [!inputControl.isReadonly && createTools(), _createVNode(VControlField, {\n \"class\": \"v-wysiwyg-editor__input\",\n \"autoHeight\": true,\n \"startAdornment\": props.startAdornment,\n \"endAdornment\": props.endAdornment,\n \"size\": control.size.value\n }, {\n ...ctx.slots,\n default: defaultSlot\n })]);\n const infoAppendsSlot = () => {\n const {\n counterResult\n } = inputControl;\n if (!counterResult) return;\n return _createVNode(VTextCounter, counterResult, null);\n };\n return () => _createVNode(VFormControl, {\n \"nodeControl\": inputControl,\n \"class\": classes.value,\n \"label\": props.label,\n \"hint\": props.hint,\n \"hinttip\": props.hinttip,\n \"hiddenInfo\": props.hiddenInfo,\n \"requiredChip\": props.requiredChip,\n \"onClickLabel\": handleClickLabel\n }, {\n ...ctx.slots,\n default: formControlDefaultSlot,\n infoAppends: infoAppendsSlot\n });\n }\n});\nfunction resolveContextualValue(ctx,\n// eslint-disable-next-line no-shadow\nsource) {\n return typeof source === 'function' ? source(ctx) : source;\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/vui-wysiwyg",
3
- "version": "7.0.35",
3
+ "version": "7.0.37",
4
4
  "description": "vui-wysiwyg",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -286,26 +286,26 @@
286
286
  "dist"
287
287
  ],
288
288
  "dependencies": {
289
- "@tiptap/extension-bold": "^2.4.0",
290
- "@tiptap/extension-bullet-list": "^2.4.0",
291
- "@tiptap/extension-history": "^2.4.0",
292
- "@tiptap/extension-italic": "^2.4.0",
293
- "@tiptap/extension-link": "^2.4.0",
294
- "@tiptap/extension-ordered-list": "^2.4.0",
295
- "@tiptap/extension-text-align": "^2.4.0",
296
- "@tiptap/extension-text-style": "^2.4.0",
297
- "@tiptap/extension-underline": "^2.4.0",
298
- "@tiptap/pm": "^2.4.0",
299
- "@tiptap/starter-kit": "^2.4.0",
300
- "@tiptap/vue-3": "^2.4.0",
289
+ "@tiptap/extension-bold": "^2.5.4",
290
+ "@tiptap/extension-bullet-list": "^2.5.4",
291
+ "@tiptap/extension-history": "^2.5.4",
292
+ "@tiptap/extension-italic": "^2.5.4",
293
+ "@tiptap/extension-link": "^2.5.4",
294
+ "@tiptap/extension-ordered-list": "^2.5.4",
295
+ "@tiptap/extension-text-align": "^2.5.4",
296
+ "@tiptap/extension-text-style": "^2.5.4",
297
+ "@tiptap/extension-underline": "^2.5.4",
298
+ "@tiptap/pm": "^2.5.4",
299
+ "@tiptap/starter-kit": "^2.5.4",
300
+ "@tiptap/vue-3": "^2.5.4",
301
301
  "@types/markdown-it": "^14.1.1"
302
302
  },
303
303
  "devDependencies": {
304
- "@fastkit/vui": "^0.19.34"
304
+ "@fastkit/vui": "^0.19.36"
305
305
  },
306
306
  "peerDependencies": {
307
307
  "vue": "^3.4.0",
308
- "@fastkit/vui": "^0.19.34"
308
+ "@fastkit/vui": "^0.19.36"
309
309
  },
310
310
  "scripts": {
311
311
  "build": "plugboy build",