@fastkit/vui-wysiwyg 1.1.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -203,6 +203,8 @@
203
203
  .v-wysiwyg-color-tool__items--with-label .v-wysiwyg-color-tool__item+.v-wysiwyg-color-tool__item{
204
204
  margin-top:2px;
205
205
  }
206
+ }
207
+ @layer vui{
206
208
  .v-wysiwyg-editor--sm{
207
209
  --min-height:var(--wysiwyg-min-height-sm);
208
210
  --max-height:var(--wysiwyg-max-height-sm);
@@ -1,5 +1,5 @@
1
1
  import * as _fastkit_vui from '@fastkit/vui';
2
- import { VuiService, IconName, FormControlSlots, InputBoxSlots } from '@fastkit/vui';
2
+ import { VuiService, IconName } from '@fastkit/vui';
3
3
  import * as _tiptap_vue_3 from '@tiptap/vue-3';
4
4
  import { EditorOptions, Editor, Extension, Node, Mark, AnyExtension, Extensions, FocusPosition } from '@tiptap/vue-3';
5
5
  import * as vue from 'vue';
@@ -14,8 +14,8 @@ import { HistoryOptions } from '@tiptap/extension-history';
14
14
  import { LinkOptions } from '@tiptap/extension-link';
15
15
  import { OrderedListOptions } from '@tiptap/extension-ordered-list';
16
16
  import { TextAlignOptions } from '@tiptap/extension-text-align';
17
- import * as _fastkit_vue_form_control__ from '@fastkit/vue-form-control/.';
18
17
  import * as _fastkit_vue_utils__ from '@fastkit/vue-utils/.';
18
+ import * as _fastkit_vue_form_control__ from '@fastkit/vue-form-control/.';
19
19
 
20
20
  declare const EDITOR_EVENTS: readonly ["beforeCreate", "create", "update", "selectionUpdate", "transaction", "focus", "blur", "destroy"];
21
21
  type PrefixedEventName<S extends string> = `on${Capitalize<S>}`;
@@ -268,7 +268,14 @@ declare const VWysiwygEditor: vue.DefineComponent<{
268
268
  floatingToolbar: BooleanConstructor;
269
269
  disabledMinHeight: BooleanConstructor;
270
270
  disabledMaxHeight: BooleanConstructor;
271
- 'v-slots': PropType<_fastkit_vue_utils__.ResolveRawSlots<FormControlSlots & InputBoxSlots>>;
271
+ 'v-slots': PropType<{
272
+ label?: ((form: _fastkit_vue_form_control__.FormControl) => VNodeChild) | undefined;
273
+ hint?: ((form: _fastkit_vue_form_control__.FormControl) => VNodeChild) | undefined;
274
+ infoAppends?: ((form: _fastkit_vue_form_control__.FormControl) => VNodeChild) | undefined;
275
+ default?: (() => VNodeChild) | undefined;
276
+ startAdornment?: (() => VNodeChild) | undefined;
277
+ endAdornment?: (() => VNodeChild) | undefined;
278
+ }>;
272
279
  size: {
273
280
  type: PropType<"sm" | "md" | "lg">;
274
281
  validator: (value: any) => boolean;
@@ -400,7 +407,14 @@ declare const VWysiwygEditor: vue.DefineComponent<{
400
407
  floatingToolbar: BooleanConstructor;
401
408
  disabledMinHeight: BooleanConstructor;
402
409
  disabledMaxHeight: BooleanConstructor;
403
- 'v-slots': PropType<_fastkit_vue_utils__.ResolveRawSlots<FormControlSlots & InputBoxSlots>>;
410
+ 'v-slots': PropType<{
411
+ label?: ((form: _fastkit_vue_form_control__.FormControl) => VNodeChild) | undefined;
412
+ hint?: ((form: _fastkit_vue_form_control__.FormControl) => VNodeChild) | undefined;
413
+ infoAppends?: ((form: _fastkit_vue_form_control__.FormControl) => VNodeChild) | undefined;
414
+ default?: (() => VNodeChild) | undefined;
415
+ startAdornment?: (() => VNodeChild) | undefined;
416
+ endAdornment?: (() => VNodeChild) | undefined;
417
+ }>;
404
418
  size: {
405
419
  type: PropType<"sm" | "md" | "lg">;
406
420
  validator: (value: any) => boolean;
@@ -503,6 +517,26 @@ declare const VWysiwygEditor: vue.DefineComponent<{
503
517
  floatingToolbar: boolean;
504
518
  disabledMinHeight: boolean;
505
519
  disabledMaxHeight: boolean;
506
- }>;
520
+ }, _fastkit_vue_utils__.DefinedSlots<{
521
+ label?: ((form: _fastkit_vue_form_control__.FormControl) => vue.VNode<vue.RendererNode, vue.RendererElement, {
522
+ [key: string]: any;
523
+ }>[]) | undefined;
524
+ hint?: ((form: _fastkit_vue_form_control__.FormControl) => vue.VNode<vue.RendererNode, vue.RendererElement, {
525
+ [key: string]: any;
526
+ }>[]) | undefined;
527
+ infoAppends?: ((form: _fastkit_vue_form_control__.FormControl) => vue.VNode<vue.RendererNode, vue.RendererElement, {
528
+ [key: string]: any;
529
+ }>[]) | undefined;
530
+ } & {
531
+ default?: (() => vue.VNode<vue.RendererNode, vue.RendererElement, {
532
+ [key: string]: any;
533
+ }>[]) | undefined;
534
+ startAdornment?: (() => vue.VNode<vue.RendererNode, vue.RendererElement, {
535
+ [key: string]: any;
536
+ }>[]) | undefined;
537
+ endAdornment?: (() => vue.VNode<vue.RendererNode, vue.RendererElement, {
538
+ [key: string]: any;
539
+ }>[]) | undefined;
540
+ }>>;
507
541
 
508
542
  export { CreateWysiwygColorToolOptions, CreatedWysiwygExtension, RawWysiwygEditorTool, RawWysiwygExtension, ResolvedWysiwygEditorSettings, VUI_WYSIWYG_EDITOR_SYMBOL, VWysiwygEditor, WYSIWYG_TEXT_ALIGN_VALUES, WysiwygBulletListTool, WysiwygColorExtension, WysiwygColorItem, WysiwygColorOptions, WysiwygCustomTagExtenstion, WysiwygCustomTagSettings, WysiwygCustomTagToolSettings, WysiwygEditorContext, WysiwygEditorEvent, WysiwygEditorEventsBucket, WysiwygEditorEventsOptions, WysiwygEditorInitializeContext, WysiwygEditorPrefixedEvent, WysiwygEditorTool, WysiwygEditorToolFactory, WysiwygEditorToolIcon, WysiwygExtensionFactory, WysiwygExtensionSource, WysiwygFormatBoldTool, WysiwygFormatItalicTool, WysiwygFormatUnderlineTool, WysiwygHistoryTool, WysiwygLinkTool, WysiwygLinter, WysiwygLinterBadWords, WysiwygLinterHeadingLevel, WysiwygLinterOptions, WysiwygLinterPlugin, WysiwygLinterPunctuation, WysiwygOrderedListTool, WysiwygTextAlignOptions, WysiwygTextAlignTool, WysiwygTextAlignValue, createWysiwygColorTool, createWysiwygCustomTagMark, createWysiwygCustomTagTool, createWysiwygExtension, resolveRawWysiwygEditorTools, resolveRawWysiwygExtensions };
@@ -9,7 +9,7 @@ import { Italic } from '@tiptap/extension-italic';
9
9
  import { Underline } from '@tiptap/extension-underline';
10
10
  import { History } from '@tiptap/extension-history';
11
11
  import { Link } from '@tiptap/extension-link';
12
- import { createTextableProps, createFormControlProps, createControlFieldProps, createControlFieldProviderProps, createControlProps, defineSlotsProps, createTextableEmits, useVui, useControl, useControlField, TextableControl, VFormControl, VControlField, VTextCounter, validateIf, url, VButtonGroup, VButton, VIcon } from '@fastkit/vui';
12
+ import { defineSlots, createTextableProps, createFormControlProps, createControlFieldProps, createControlFieldProviderProps, createControlProps, createTextableEmits, useVui, useControl, useControlField, TextableControl, VFormControl, VControlField, VTextCounter, validateIf, url, VButtonGroup, VButton, VIcon } from '@fastkit/vui';
13
13
  import { OrderedList } from '@tiptap/extension-ordered-list';
14
14
  import { TextAlign } from '@tiptap/extension-text-align';
15
15
  import { StarterKit } from '@tiptap/starter-kit';
@@ -842,6 +842,7 @@ function createWysiwygCustomTagTool(markName, settings) {
842
842
  function _isSlot2(s) {
843
843
  return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
844
844
  }
845
+ var slots = defineSlots();
845
846
  var VWysiwygEditor = defineComponent({
846
847
  name: "VWysiwygEditor",
847
848
  props: {
@@ -850,7 +851,7 @@ var VWysiwygEditor = defineComponent({
850
851
  ...createControlFieldProps(),
851
852
  ...createControlFieldProviderProps(),
852
853
  ...createControlProps(),
853
- ...defineSlotsProps(),
854
+ ...slots(),
854
855
  extensions: {
855
856
  type: Array,
856
857
  default: () => []
@@ -866,6 +867,7 @@ var VWysiwygEditor = defineComponent({
866
867
  emits: {
867
868
  ...createTextableEmits()
868
869
  },
870
+ slots,
869
871
  setup(props, ctx) {
870
872
  const vui = useVui();
871
873
  const textRef = ref("");
@@ -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","ev","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>(\n source: S,\n): PrefixedEventName<S> => {\n return `on${source.charAt(0).toUpperCase()}${source.slice(1)}` as any;\n};\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 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 => {\n return new RegisteredLinterPlugin(doc).scan().getResults();\n }).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});","let IDX = 256,\n BUFFER: any;\nconst HEX: any = [];\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nexport function cheepUUID() {\n let i = 0,\n num,\n out = '';\n\n if (!BUFFER || IDX + 16 > 256) {\n BUFFER = Array((i = 256));\n while (i--) BUFFER[i] = (256 * Math.random()) | 0;\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 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 console.log('hoge');\n }\n }, {\n message: 'どうにかする',\n handler: () => {\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 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 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 return chain().setMark('textStyle', { color }).run();\n },\n unsetColor:\n () =>\n ({ chain }) => {\n return chain()\n .setMark('textStyle', { color: null })\n .removeEmptyTextStyle()\n .run();\n },\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 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 el.getAttributeNames().reduce((acc, name) => {\n return { ...acc, [name]: el.getAttribute(name) };\n }, {});\n };\n\n const isMatchedElementAttrs = (elAttrs: Record<any, string>): boolean => {\n if (!attrEntries) return true;\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 WysiwygCustomTagExtenstion =\n Extension.create<WysiwygCustomTagSettings>({\n name: 'custom-tag',\n addCommands() {\n return {\n setCustomTag:\n (markName) =>\n ({ chain }) => {\n return chain().setMark(markName).run();\n },\n unsetCustomTag:\n (markName) =>\n ({ chain }) => {\n return chain().unsetMark(markName).run();\n },\n toggleCustomTag:\n (markName) =>\n ({ chain }) => {\n return chain().toggleMark(markName).run();\n },\n };\n },\n });\n","import { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { BulletList, BulletListOptions } from '@tiptap/extension-bullet-list';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Bold, BoldOptions } from '@tiptap/extension-bold';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Italic, ItalicOptions } from '@tiptap/extension-italic';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Underline, UnderlineOptions } from '@tiptap/extension-underline';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { History, HistoryOptions } from '@tiptap/extension-history';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Link, LinkOptions } from '@tiptap/extension-link';\nimport { validateIf, url } from '@fastkit/vui';\n\nexport const WysiwygLinkTool: WysiwygEditorToolFactory<LinkOptions> = (\n vui,\n options,\n) => {\n const tool: WysiwygEditorTool = {\n key: 'link',\n // icon: ({ editor }) => {\n // return vui.icon(editor.isActive('link') ? 'editorLinkOff' : 'editorLink');\n // },\n icon: vui.icon('editorLink'),\n active: ({ editor }) => editor.isActive('link'),\n // disabled: ({ editor }) => {\n // const { $from, $to } = editor.view.state.selection;\n // return $to.pos - $from.pos === 0;\n // },\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport {\n OrderedList,\n OrderedListOptions,\n} from '@tiptap/extension-ordered-list';\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 { WysiwygColorExtension } from '../extensions';\nimport { VIcon } from '@fastkit/vui';\nimport TextStyle from '@tiptap/extension-text-style';\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 color = editor.getAttributes('textStyle').color;\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';\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 */\nfunction _isSlot(s) {\n return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !_isVNode(s);\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 => {\n return [value, {\n textAlign: value\n }];\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 }) => {\n return getIcon(getCurrentAlign(editor, resolvedOptions));\n },\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\": ev => {\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 WysiwygCustomTagExtenstion,\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: [WysiwygCustomTagExtenstion, Mark.configure(settings)],\n };\n return tool;\n };\n}\n","import { resolveDirective as _resolveDirective, mergeProps as _mergeProps, createVNode as _createVNode, isVNode as _isVNode } from \"vue\";\nimport './VWysiwygEditor.scss';\nimport { defineComponent, computed, ref, watch, onBeforeUnmount } from 'vue';\nimport { createFormControlProps, VFormControl, VControlField, createControlFieldProps, createTextableProps, createTextableEmits, TextableControl, createControlProps, useControl, createControlFieldProviderProps, useControlField, VTextCounter, defineSlotsProps, useVui, VButton, VButtonGroup } from '@fastkit/vui';\nimport { VUI_WYSIWYG_EDITOR_SYMBOL } from '../../injections';\nimport { EditorContent, useEditor, BubbleMenu } from '@tiptap/vue-3';\nimport { StarterKit } from '@tiptap/starter-kit';\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}\nexport const VWysiwygEditor = defineComponent({\n name: 'VWysiwygEditor',\n props: {\n ...createTextableProps(),\n ...createFormControlProps(),\n ...createControlFieldProps(),\n ...createControlFieldProviderProps(),\n ...createControlProps(),\n ...defineSlotsProps(),\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 },\n emits: {\n ...createTextableEmits()\n },\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 inputControl = new TextableControl(props, ctx, {\n nodeType: VUI_WYSIWYG_EDITOR_SYMBOL,\n validationValue: () => textRef.value\n });\n const initializeCtx = new WysiwygEditorInitializeContext(() => vui, {\n onCreate: ({\n editor\n }) => {\n textRef.value = editor.getText();\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 = editor.getHTML();\n textRef.value = editor.getText();\n }\n });\n const extensions = [StarterKit.configure({\n bold: false,\n bulletList: false,\n orderedList: false,\n history: false,\n italic: false\n }),\n // Linter.configure({\n // plugins: [BadWords(['abc', 'evidently']), Punctuation, HeadingLevel],\n // }),\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 || $editor.getHTML() === modelValue) return;\n $editor.commands.setContent(modelValue == null ? '' : modelValue, false);\n textRef.value = $editor.getText();\n });\n initializeCtx.on('create', ({\n editor\n }) => {\n textRef.value = editor.getText();\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\n // editor.value.state.doc.content\n\n const focus = (position, options) => {\n if (!editor.value) return;\n return editor.value.chain().focus(position, options);\n };\n const blur = () => {\n if (!editor.value) return;\n return editor.value.chain().blur();\n };\n const wysiwygContext = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const _editor = editor.value;\n // if (!_editor) {\n // throw new Error('missing editor value');\n // }\n return {\n vui,\n editor: _editor\n };\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 && resolveContextableValue(context, active);\n const isDisabled = !inputControl.canOperation || !!_editor && resolveContextableValue(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 && editor.value.destroy();\n });\n return {\n editor,\n ...inputControl.expose(),\n ...control,\n focus,\n blur,\n createTools\n };\n },\n render() {\n return _createVNode(VFormControl, {\n \"nodeControl\": this.nodeControl,\n \"focused\": this.nodeControl.focused,\n \"class\": ['v-wysiwyg-editor', this.classes, `v-wysiwyg-editor--${this.size}`, {\n 'v-wysiwyg-editor--disabled-min-heihgt': this.disabledMinHeight,\n 'v-wysiwyg-editor--disabled-max-heihgt': this.disabledMaxHeight\n }],\n \"label\": this.label,\n \"hint\": this.hint,\n \"hinttip\": this.hinttip,\n \"hiddenInfo\": this.hiddenInfo,\n \"requiredChip\": this.requiredChip,\n \"onClickLabel\": ev => {\n this.focus('start', {\n scrollIntoView: true\n });\n }\n }, {\n ...this.$slots,\n default: () => {\n const {\n editor\n } = this;\n return _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__wrapper\"\n }, [!this.isReadonly && this.createTools(), _createVNode(VControlField, {\n \"class\": \"v-wysiwyg-editor__input\",\n \"autoHeight\": true,\n \"startAdornment\": this.startAdornment,\n \"endAdornment\": this.endAdornment,\n \"size\": this.size\n }, {\n ...this.$slots,\n default: () => {\n let _slot2;\n return _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__body\"\n }, [_createVNode(EditorContent, _mergeProps({\n class: 'v-wysiwyg-editor__input__element wysiwyg'\n }, {\n \"editor\": editor\n }), null), !this.floatingToolbar && !!editor && !this.isReadonly && _createVNode(BubbleMenu, _mergeProps({\n class: 'v-wysiwyg-editor__bubble-menu'\n }, {\n \"editor\": editor\n }), _isSlot(_slot2 = this.createTools(true)) ? _slot2 : {\n default: () => [_slot2]\n })]);\n }\n })]);\n },\n infoAppends: () => {\n const {\n counterResult\n } = this;\n if (!counterResult) return;\n return _createVNode(VTextCounter, counterResult, null);\n }\n });\n }\n});\nfunction resolveContextableValue(ctx, source) {\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","Extension","name","vui","ev","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>(\n source: S,\n): PrefixedEventName<S> => {\n return `on${source.charAt(0).toUpperCase()}${source.slice(1)}` as any;\n};\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 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 => {\n return new RegisteredLinterPlugin(doc).scan().getResults();\n }).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});","let IDX = 256,\n BUFFER: any;\nconst HEX: any = [];\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nexport function cheepUUID() {\n let i = 0,\n num,\n out = '';\n\n if (!BUFFER || IDX + 16 > 256) {\n BUFFER = Array((i = 256));\n while (i--) BUFFER[i] = (256 * Math.random()) | 0;\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 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 console.log('hoge');\n }\n }, {\n message: 'どうにかする',\n handler: () => {\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 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 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 return chain().setMark('textStyle', { color }).run();\n },\n unsetColor:\n () =>\n ({ chain }) => {\n return chain()\n .setMark('textStyle', { color: null })\n .removeEmptyTextStyle()\n .run();\n },\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 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 el.getAttributeNames().reduce((acc, name) => {\n return { ...acc, [name]: el.getAttribute(name) };\n }, {});\n };\n\n const isMatchedElementAttrs = (elAttrs: Record<any, string>): boolean => {\n if (!attrEntries) return true;\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 WysiwygCustomTagExtenstion =\n Extension.create<WysiwygCustomTagSettings>({\n name: 'custom-tag',\n addCommands() {\n return {\n setCustomTag:\n (markName) =>\n ({ chain }) => {\n return chain().setMark(markName).run();\n },\n unsetCustomTag:\n (markName) =>\n ({ chain }) => {\n return chain().unsetMark(markName).run();\n },\n toggleCustomTag:\n (markName) =>\n ({ chain }) => {\n return chain().toggleMark(markName).run();\n },\n };\n },\n });\n","import { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { BulletList, BulletListOptions } from '@tiptap/extension-bullet-list';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Bold, BoldOptions } from '@tiptap/extension-bold';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Italic, ItalicOptions } from '@tiptap/extension-italic';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Underline, UnderlineOptions } from '@tiptap/extension-underline';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { History, HistoryOptions } from '@tiptap/extension-history';\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport { Link, LinkOptions } from '@tiptap/extension-link';\nimport { validateIf, url } from '@fastkit/vui';\n\nexport const WysiwygLinkTool: WysiwygEditorToolFactory<LinkOptions> = (\n vui,\n options,\n) => {\n const tool: WysiwygEditorTool = {\n key: 'link',\n // icon: ({ editor }) => {\n // return vui.icon(editor.isActive('link') ? 'editorLinkOff' : 'editorLink');\n // },\n icon: vui.icon('editorLink'),\n active: ({ editor }) => editor.isActive('link'),\n // disabled: ({ editor }) => {\n // const { $from, $to } = editor.view.state.selection;\n // return $to.pos - $from.pos === 0;\n // },\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 { WysiwygEditorToolFactory, WysiwygEditorTool } from '../schemes';\nimport {\n OrderedList,\n OrderedListOptions,\n} from '@tiptap/extension-ordered-list';\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 { WysiwygColorExtension } from '../extensions';\nimport { VIcon } from '@fastkit/vui';\nimport TextStyle from '@tiptap/extension-text-style';\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 color = editor.getAttributes('textStyle').color;\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';\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 */\nfunction _isSlot(s) {\n return typeof s === 'function' || Object.prototype.toString.call(s) === '[object Object]' && !_isVNode(s);\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 => {\n return [value, {\n textAlign: value\n }];\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 }) => {\n return getIcon(getCurrentAlign(editor, resolvedOptions));\n },\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\": ev => {\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 WysiwygCustomTagExtenstion,\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: [WysiwygCustomTagExtenstion, Mark.configure(settings)],\n };\n return tool;\n };\n}\n","import { resolveDirective as _resolveDirective, mergeProps as _mergeProps, createVNode as _createVNode, isVNode as _isVNode } from \"vue\";\nimport './VWysiwygEditor.scss';\nimport { defineComponent, computed, ref, watch, onBeforeUnmount } from 'vue';\nimport { createFormControlProps, VFormControl, VControlField, createControlFieldProps, createTextableProps, createTextableEmits, TextableControl, createControlProps, useControl, createControlFieldProviderProps, useControlField, VTextCounter, defineSlots, useVui, VButton, VButtonGroup } from '@fastkit/vui';\nimport { VUI_WYSIWYG_EDITOR_SYMBOL } from '../../injections';\nimport { EditorContent, useEditor, BubbleMenu } from '@tiptap/vue-3';\nimport { StarterKit } from '@tiptap/starter-kit';\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 ...createFormControlProps(),\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 },\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 inputControl = new TextableControl(props, ctx, {\n nodeType: VUI_WYSIWYG_EDITOR_SYMBOL,\n validationValue: () => textRef.value\n });\n const initializeCtx = new WysiwygEditorInitializeContext(() => vui, {\n onCreate: ({\n editor\n }) => {\n textRef.value = editor.getText();\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 = editor.getHTML();\n textRef.value = editor.getText();\n }\n });\n const extensions = [StarterKit.configure({\n bold: false,\n bulletList: false,\n orderedList: false,\n history: false,\n italic: false\n }),\n // Linter.configure({\n // plugins: [BadWords(['abc', 'evidently']), Punctuation, HeadingLevel],\n // }),\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 || $editor.getHTML() === modelValue) return;\n $editor.commands.setContent(modelValue == null ? '' : modelValue, false);\n textRef.value = $editor.getText();\n });\n initializeCtx.on('create', ({\n editor\n }) => {\n textRef.value = editor.getText();\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\n // editor.value.state.doc.content\n\n const focus = (position, options) => {\n if (!editor.value) return;\n return editor.value.chain().focus(position, options);\n };\n const blur = () => {\n if (!editor.value) return;\n return editor.value.chain().blur();\n };\n const wysiwygContext = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const _editor = editor.value;\n // if (!_editor) {\n // throw new Error('missing editor value');\n // }\n return {\n vui,\n editor: _editor\n };\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 && resolveContextableValue(context, active);\n const isDisabled = !inputControl.canOperation || !!_editor && resolveContextableValue(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 && editor.value.destroy();\n });\n return {\n editor,\n ...inputControl.expose(),\n ...control,\n focus,\n blur,\n createTools\n };\n },\n render() {\n return _createVNode(VFormControl, {\n \"nodeControl\": this.nodeControl,\n \"focused\": this.nodeControl.focused,\n \"class\": ['v-wysiwyg-editor', this.classes, `v-wysiwyg-editor--${this.size}`, {\n 'v-wysiwyg-editor--disabled-min-heihgt': this.disabledMinHeight,\n 'v-wysiwyg-editor--disabled-max-heihgt': this.disabledMaxHeight\n }],\n \"label\": this.label,\n \"hint\": this.hint,\n \"hinttip\": this.hinttip,\n \"hiddenInfo\": this.hiddenInfo,\n \"requiredChip\": this.requiredChip,\n \"onClickLabel\": ev => {\n this.focus('start', {\n scrollIntoView: true\n });\n }\n }, {\n ...this.$slots,\n default: () => {\n const {\n editor\n } = this;\n return _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__wrapper\"\n }, [!this.isReadonly && this.createTools(), _createVNode(VControlField, {\n \"class\": \"v-wysiwyg-editor__input\",\n \"autoHeight\": true,\n \"startAdornment\": this.startAdornment,\n \"endAdornment\": this.endAdornment,\n \"size\": this.size\n }, {\n ...this.$slots,\n default: () => {\n let _slot2;\n return _createVNode(\"div\", {\n \"class\": \"v-wysiwyg-editor__body\"\n }, [_createVNode(EditorContent, _mergeProps({\n class: 'v-wysiwyg-editor__input__element wysiwyg'\n }, {\n \"editor\": editor\n }), null), !this.floatingToolbar && !!editor && !this.isReadonly && _createVNode(BubbleMenu, _mergeProps({\n class: 'v-wysiwyg-editor__bubble-menu'\n }, {\n \"editor\": editor\n }), _isSlot(_slot2 = this.createTools(true)) ? _slot2 : {\n default: () => [_slot2]\n })]);\n }\n })]);\n },\n infoAppends: () => {\n const {\n counterResult\n } = this;\n if (!counterResult) return;\n return _createVNode(VTextCounter, counterResult, null);\n }\n });\n }\n});\nfunction resolveContextableValue(ctx, source) {\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": "1.1.5",
3
+ "version": "2.0.0",
4
4
  "description": "vui-wysiwyg",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -300,11 +300,11 @@
300
300
  "@tiptap/vue-3": "^2.0.3"
301
301
  },
302
302
  "devDependencies": {
303
- "@fastkit/vui": "0.13.6"
303
+ "@fastkit/vui": "0.14.0"
304
304
  },
305
305
  "peerDependencies": {
306
- "vue": "^3.2.0",
307
- "@fastkit/vui": "0.13.6"
306
+ "vue": "^3.3.0",
307
+ "@fastkit/vui": "0.14.0"
308
308
  },
309
309
  "scripts": {
310
310
  "build": "plugboy build",