@knime/kds-rich-text-editor 0.30.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENSE +710 -0
- package/README.md +116 -0
- package/dist/index.css +282 -0
- package/dist/index.js +917 -0
- package/dist/index.js.map +1 -0
- package/dist/src/KdsRichTextEditor.vue.d.ts +35 -0
- package/dist/src/KdsRichTextEditor.vue.d.ts.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/toolbar/KdsCreateLinkModal.vue.d.ts +459 -0
- package/dist/src/toolbar/KdsCreateLinkModal.vue.d.ts.map +1 -0
- package/dist/src/toolbar/RichTextEditorBaseToolbar.vue.d.ts +48 -0
- package/dist/src/toolbar/RichTextEditorBaseToolbar.vue.d.ts.map +1 -0
- package/dist/src/toolbar/RichTextEditorToolbar.vue.d.ts +10 -0
- package/dist/src/toolbar/RichTextEditorToolbar.vue.d.ts.map +1 -0
- package/dist/src/toolbar/types.d.ts +29 -0
- package/dist/src/toolbar/types.d.ts.map +1 -0
- package/dist/src/toolbar/useLinkTool.d.ts +22 -0
- package/dist/src/toolbar/useLinkTool.d.ts.map +1 -0
- package/dist/src/types.d.ts +112 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/utils/custom-escape.d.ts +15 -0
- package/dist/src/utils/custom-escape.d.ts.map +1 -0
- package/dist/src/utils/custom-hard-break.d.ts +2 -0
- package/dist/src/utils/custom-hard-break.d.ts.map +1 -0
- package/dist/src/utils/custom-link.d.ts +16 -0
- package/dist/src/utils/custom-link.d.ts.map +1 -0
- package/dist/src/utils/custom-text-align.d.ts +2 -0
- package/dist/src/utils/custom-text-align.d.ts.map +1 -0
- package/dist/src/utils/paragraphTextStyle/extension.d.ts +17 -0
- package/dist/src/utils/paragraphTextStyle/extension.d.ts.map +1 -0
- package/dist/src/utils/paragraphTextStyle/index.d.ts +4 -0
- package/dist/src/utils/paragraphTextStyle/index.d.ts.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@knime+utils@1.11.0_consola@3.4.2/node_modules/@knime/utils/src/navigator.ts","../../../node_modules/.pnpm/@knime+utils@1.11.0_consola@3.4.2/node_modules/@knime/utils/src/hotkeys.ts","../../styles/dist/img/icons/external-link.svg?url","../src/toolbar/KdsCreateLinkModal.vue","../src/utils/paragraphTextStyle/index.ts","../src/toolbar/useLinkTool.ts","../src/toolbar/RichTextEditorBaseToolbar.vue","../src/toolbar/RichTextEditorToolbar.vue","../src/utils/custom-escape.ts","../src/utils/custom-hard-break.ts","../src/utils/custom-link.ts","../src/utils/custom-text-align.ts","../src/utils/paragraphTextStyle/extension.ts","../src/KdsRichTextEditor.vue"],"sourcesContent":["/**\n *\n * @returns true if the platform of the user is Mac\n */\nexport const isMac = (): boolean =>\n navigator?.userAgent?.toLowerCase()?.includes(\"mac\");\n\n/**\n *\n * @returns true if the platform of the user is Windows\n */\nexport const isWindows = (): boolean =>\n navigator?.userAgent?.toLowerCase()?.includes(\"windows\");\n","import { navigatorUtils } from \"@knime/utils\";\n\n/**\n * Checks if any modifier key (Ctrl, Meta, Alt, or Shift) is pressed.\n * @param {KeyboardEvent} event - The keyboard event to check.\n * @returns {boolean} True if a modifier key is pressed, otherwise false.\n */\nexport const isModifierKeyPressed = (event: KeyboardEvent): boolean => {\n return event.ctrlKey || event.metaKey || event.altKey || event.shiftKey;\n};\n\n/**\n * Checks if a specific key (or keys) were pressed without any modifier keys.\n * @param {KeyboardEvent} event - The keyboard event to check.\n * @param {string | string[]} keys - The key or keys to check for.\n * @returns {boolean} True if the specified key(s) were pressed without modifiers, otherwise false.\n */\nexport const isKeyWithoutModifiers = (\n event: KeyboardEvent,\n keys: string | string[],\n): boolean => {\n const keyList = Array.isArray(keys) ? keys : [keys];\n return keyList.includes(event.key) && !isModifierKeyPressed(event);\n};\n\n/**\n *\n * @returns name of the primary modifier key for the current platform\n */\nexport const getMetaOrCtrlKey = (): \"ctrlKey\" | \"metaKey\" => {\n return navigatorUtils.isMac() ? \"metaKey\" : \"ctrlKey\";\n};\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20viewBox='0%200%2012%2012'%3e%3cpath%20d='M5.5%201.5h-3a1%201%200%200%200-1%201v7a1%201%200%200%200%201%201h7a1%201%200%200%200%201-1v-3m0-5L6%205.892M10.5%201.5v2.75m0-2.75H7.75'%20vector-effect='non-scaling-stroke'/%3e%3c/svg%3e\"","<script setup lang=\"ts\">\nimport { type Ref, computed, nextTick, ref, watch } from \"vue\";\n\nimport { KdsButton, KdsModal, KdsTextInput } from \"@knime/kds-components\";\n\ntype Props = {\n text: Ref<string>;\n url: Ref<string>;\n isActive: Ref<boolean>;\n isEdit: Ref<boolean>;\n urlValidator: (url: string) => boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nconst editedText = ref(props.text.value);\nconst editedUrl = ref(props.url.value);\n\nwatch(\n () => props.isActive.value,\n async (isOpen: boolean) => {\n if (!isOpen) {\n return;\n }\n editedText.value = props.text.value;\n editedUrl.value = props.url.value;\n\n // Wait a tick as KdsModal internally also waits for the DOM to update before calling showModal()\n await nextTick();\n\n // Focus first input field, requestAnimationFrame ensures the browser has un-hidden the modal\n requestAnimationFrame(() => {\n inputRef.value?.focus();\n });\n },\n);\n\nconst emit = defineEmits<{\n addLink: [text: string, url: string];\n removeLink: [];\n cancelAddLink: [];\n}>();\n\nconst closeModal = () => {\n emit(\"cancelAddLink\");\n};\n\nconst onSubmit = () => {\n emit(\"addLink\", editedText.value, editedUrl.value);\n};\n\nconst validateUrl = () => {\n const validScheme = props.urlValidator(editedUrl.value);\n\n return !editedUrl.value || validScheme;\n};\n\nconst isValid = computed(() => {\n const textChanged = editedText.value !== props.text.value;\n const urlChanged = editedUrl.value !== props.url.value;\n const urlNotEmpty = editedUrl.value !== \"\";\n\n return (textChanged || urlChanged) && validateUrl() && urlNotEmpty;\n});\n\nconst onkeyup = (keyupEvent: KeyboardEvent) => {\n if (keyupEvent.key === \"Enter\" && isValid.value) {\n onSubmit();\n }\n};\n</script>\n\n<template>\n <KdsModal\n :active=\"isActive.value\"\n :headline=\"isEdit.value ? 'Edit link' : 'Insert link'\"\n class=\"modal\"\n @close=\"closeModal\"\n >\n <template #body>\n <KdsTextInput\n ref=\"inputRef\"\n v-model=\"editedText\"\n label=\"Link text\"\n type=\"text\"\n @keyup=\"onkeyup\"\n />\n\n <KdsTextInput\n v-model=\"editedUrl\"\n label=\"URL\"\n :sub-text=\"\n !validateUrl() ? 'Enter a valid URL (e.g. https://example.com)' : ''\n \"\n :error=\"!validateUrl()\"\n :preserve-sub-text-space=\"true\"\n @keyup=\"onkeyup\"\n />\n </template>\n\n <template #footer>\n <div class=\"modal-footer\" :class=\"{ 'spread-buttons': isEdit.value }\">\n <KdsButton\n :variant=\"isEdit.value ? 'transparent' : 'outlined'\"\n size=\"small\"\n label=\"Cancel\"\n @click=\"closeModal\"\n />\n <div class=\"controls-apply-group\">\n <KdsButton\n v-if=\"isEdit.value\"\n variant=\"outlined\"\n size=\"small\"\n label=\"Remove URL\"\n @click=\"emit('removeLink')\"\n />\n <KdsButton\n variant=\"filled\"\n size=\"small\"\n :label=\"isEdit.value ? 'Apply' : 'Insert link'\"\n :disabled=\"!isValid\"\n @click=\"onSubmit\"\n />\n </div>\n </div>\n </template>\n </KdsModal>\n</template>\n\n<style scoped>\n.modal {\n --modal-width: var(--kds-dimension-component-width-32x);\n}\n\n.modal-footer {\n display: flex;\n gap: var(--kds-spacing-container-0-5x);\n align-items: center;\n justify-content: flex-end;\n width: 100%;\n\n &.spread-buttons {\n justify-content: space-between;\n }\n}\n\n.controls-apply-group {\n display: flex;\n gap: var(--kds-spacing-container-0-5x);\n}\n</style>\n","import type { Level } from \"@tiptap/extension-heading\";\nimport type { Editor } from \"@tiptap/vue-3\";\n\nimport type {\n EditorToolSecondaryItem,\n EditorToolSecondaryItemChild,\n} from \"../../toolbar/types\";\n\nconst clearHeading = (editor: Editor) => {\n const maxLevel = 6;\n for (let i = 1; i <= maxLevel; i++) {\n if (editor.isActive(\"heading\", { level: i })) {\n editor\n .chain()\n .focus()\n .toggleHeading({ level: i as Level })\n .run();\n break;\n }\n }\n};\n\nconst getHeadingOptionChild = (level: Level, getEditor: () => Editor) =>\n ({\n id: `${level}`,\n text: `Heading ${level}`,\n hotkey: [\"Ctrl\", \"Alt\", `${level}`],\n active: () => getEditor().isActive(\"heading\", { level }),\n handler: () => {\n const editor = getEditor();\n editor.chain().focus().toggleHeading({ level }).run();\n },\n }) satisfies EditorToolSecondaryItemChild;\n\nexport const getParagraphTextStyleTool = (\n getEditor: () => Editor,\n): EditorToolSecondaryItem => {\n return {\n id: \"paragraphTextStyle\",\n type: \"secondary\",\n icon: \"textstyles\",\n text: \"Text style\",\n children: [\n {\n id: \"standard\",\n text: \"Standard\",\n hotkey: [\"Ctrl\", \"Alt\", \"0\"],\n handler: () => {\n const editor = getEditor();\n clearHeading(editor);\n editor.chain().focus().unsetSmallText().run();\n },\n },\n {\n id: \"small\",\n text: \"Small text\",\n hotkey: [\"Ctrl\", \"Alt\", \"−\"], // this is a wider minus character for aesthetic reasons\n active: () => getEditor().isActive({ smallText: true }),\n handler: () => {\n const editor = getEditor();\n clearHeading(editor);\n editor.chain().focus().setSmallText().run();\n },\n },\n ...Array.from({ length: 6 }, (_, i) =>\n getHeadingOptionChild((i + 1) as Level, getEditor),\n ),\n ],\n };\n};\n","import { computed, onMounted, onUnmounted, ref } from \"vue\";\nimport type { Editor } from \"@tiptap/vue-3\";\n\nimport { getMetaOrCtrlKey } from \"@knime/utils\";\n\nimport type { KdsLinkToolOptions } from \"../utils/custom-link\";\n\nexport const useLinkTool = ({\n editor,\n isRegistered,\n linkToolOptions,\n}: {\n editor: Editor;\n isRegistered: boolean;\n linkToolOptions: KdsLinkToolOptions;\n}) => {\n if (!isRegistered) {\n return null;\n }\n\n const isActive = ref(false);\n const text = ref(\"\");\n const url = ref(\"\");\n const isEdit = computed(() => url.value !== \"\");\n const isReplacingText = ref(false);\n\n const onLinkToolClick = () => {\n const { view, state } = editor;\n const { from, to } = view.state.selection;\n\n const currentLink = editor.getAttributes(\"link\").href;\n url.value = currentLink || \"\";\n\n if (currentLink) {\n const hasSelection = from !== to;\n if (hasSelection) {\n // manually update the cursor position to get the entire link text\n const newCursorPosition = from + Math.floor((to - from) / 2);\n editor.chain().focus().setTextSelection(newCursorPosition).run();\n }\n\n const textBefore =\n view.state.selection.$from.nodeBefore?.textContent ?? \"\";\n const textAfter = view.state.selection.$to.nodeAfter?.textContent ?? \"\";\n\n text.value = textBefore + textAfter;\n } else {\n text.value = state.doc.textBetween(from, to, \"\");\n }\n\n isReplacingText.value = Boolean(currentLink || text.value);\n isActive.value = true;\n };\n\n const onRemoveLink = () => {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n\n isActive.value = false;\n isReplacingText.value = false;\n };\n\n const addCustomLink = ({\n isEditing,\n url,\n urlText,\n text,\n }: {\n isEditing: boolean;\n url: string;\n urlText: string;\n text: string;\n }) => {\n if (isEditing) {\n editor\n .chain()\n .focus()\n .setLink({ href: url })\n .command(({ tr }) => {\n tr.insertText(text || urlText);\n return true;\n })\n .run();\n } else {\n // TODO replace this rather complicated way to add a link once the tiptap bug is fixed\n const { view } = editor;\n const { from: startIndex } = view.state.selection;\n\n // escape link with space when creating a new link\n editor\n .chain()\n .focus()\n .insertContent([{ type: \"text\", text: \" \" }])\n .run();\n editor\n .chain()\n .focus()\n .insertContentAt(startIndex, [{ type: \"text\", text: text || urlText }])\n .run();\n\n const { from: endIndex } = view.state.selection;\n\n editor.commands.setTextSelection({\n from: startIndex,\n to: endIndex,\n });\n\n editor.chain().focus().setLink({ href: url }).run();\n }\n };\n\n const onAddLink = (text: string, urlText: string) => {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n\n if (urlText) {\n const url = linkToolOptions.sanitizeUrlText?.(urlText) ?? urlText;\n\n addCustomLink({\n isEditing: isReplacingText.value,\n urlText,\n url,\n text,\n });\n }\n\n isActive.value = false;\n isReplacingText.value = false;\n };\n\n const onCancelAddLink = () => {\n isActive.value = false;\n isReplacingText.value = false;\n };\n\n /**\n * Handle custom hotkeys for link tool that are not supported by tiptap.\n */\n const onKeyDown = (event: KeyboardEvent) => {\n if (!editor?.isFocused) {\n return;\n }\n const ctrlPressed = event[getMetaOrCtrlKey()];\n if (ctrlPressed && event.key === \"k\") {\n event.preventDefault();\n onLinkToolClick();\n }\n };\n onMounted(() => {\n window.addEventListener(\"keydown\", onKeyDown);\n });\n\n onUnmounted(() => {\n window.removeEventListener(\"keydown\", onKeyDown);\n });\n\n return {\n onLinkToolClick,\n props: {\n url,\n text,\n isActive,\n isEdit,\n urlValidator: linkToolOptions.urlValidator,\n },\n events: {\n addLink: onAddLink,\n removeLink: onRemoveLink,\n cancelAddLink: onCancelAddLink,\n },\n };\n};\n","<script setup lang=\"ts\">\nimport type { Editor } from \"@tiptap/vue-3\";\n\nimport type { KdsBaseExtensionsConfig } from \"../types\";\nimport type { KdsLinkToolOptions } from \"../utils/custom-link\";\nimport { getParagraphTextStyleTool } from \"../utils/paragraphTextStyle\";\n\nimport type { EditorToolItem, EditorTools } from \"./types\";\nimport { useLinkTool } from \"./useLinkTool\";\n\ntype Props = {\n editor: Editor;\n baseExtensions: KdsBaseExtensionsConfig | { all: true };\n linkToolOptions: KdsLinkToolOptions;\n};\n\nconst props = defineProps<Props>();\n\nconst registerTool = (\n toolName: keyof KdsBaseExtensionsConfig,\n tool: EditorToolItem,\n) => {\n if (\"all\" in props.baseExtensions) {\n return [tool];\n }\n\n return props.baseExtensions[toolName] ? [tool] : [];\n};\n\nconst isToolRegistered = (toolName: keyof KdsBaseExtensionsConfig) => {\n if (\"all\" in props.baseExtensions) {\n return true;\n }\n\n return Boolean(props.baseExtensions[toolName]);\n};\n\nconst isListActive = () =>\n props.editor.isActive(\"orderedList\") || props.editor.isActive(\"bulletList\");\n\nconst linkTool = useLinkTool({\n editor: props.editor,\n isRegistered: isToolRegistered(\"link\"),\n linkToolOptions: props.linkToolOptions,\n});\n\nconst editorTools: EditorTools = [\n ...registerTool(\"bold\", {\n id: \"bold\",\n type: \"primary\",\n text: \"Bold\",\n hotkey: [\"Ctrl\", \"B\"],\n icon: \"bold\",\n active: () => props.editor.isActive(\"bold\"),\n handler: () => props.editor.chain().focus().toggleBold().run(),\n }),\n\n ...registerTool(\"italic\", {\n id: \"italic\",\n type: \"primary\",\n text: \"Italic\",\n icon: \"italic\",\n hotkey: [\"Ctrl\", \"I\"],\n active: () => props.editor.isActive(\"italic\"),\n handler: () => props.editor.chain().focus().toggleItalic().run(),\n }),\n\n ...registerTool(\"underline\", {\n id: \"underline\",\n type: \"primary\",\n text: \"Underline\",\n icon: \"underline\",\n hotkey: [\"Ctrl\", \"U\"],\n active: () => props.editor.isActive(\"underline\"),\n handler: () => props.editor.chain().focus().toggleUnderline().run(),\n }),\n\n ...registerTool(\"bulletList\", {\n id: \"bulletList\",\n type: \"primary\",\n text: \"Bullet list\",\n icon: \"list-bulletpoint\",\n hotkey: [\"Ctrl\", \"Shift\", \"8\"],\n active: () => props.editor.isActive(\"bulletList\"),\n handler: () => {\n const commandChain = props.editor.chain().focus();\n if (isToolRegistered(\"textAlign\")) {\n commandChain.setTextAlign(\"left\");\n }\n\n commandChain.toggleBulletList().run();\n },\n }),\n\n ...registerTool(\"orderedList\", {\n id: \"orderedList\",\n type: \"primary\",\n text: \"Ordered list\",\n icon: \"list-number\",\n hotkey: [\"Ctrl\", \"Shift\", \"7\"],\n active: () => props.editor.isActive(\"orderedList\"),\n handler: () => {\n const commandChain = props.editor.chain().focus();\n if (isToolRegistered(\"textAlign\")) {\n commandChain.setTextAlign(\"left\");\n }\n\n commandChain.toggleOrderedList().run();\n },\n }),\n\n ...registerTool(\"textAlign\", {\n id: \"align-left\",\n type: \"primary\",\n icon: \"left-aligned\",\n text: \"Align left\",\n hotkey: [\"Ctrl\", \"Shift\", \"L\"],\n active: () =>\n !isListActive() && props.editor.isActive({ textAlign: \"left\" }),\n handler: () => props.editor.chain().focus().setTextAlign(\"left\").run(),\n disabled: () => isListActive(),\n }),\n\n ...registerTool(\"textAlign\", {\n id: \"align-center\",\n type: \"primary\",\n icon: \"center-aligned\",\n text: \"Align center\",\n hotkey: [\"Ctrl\", \"Shift\", \"E\"],\n active: () =>\n !isListActive() && props.editor.isActive({ textAlign: \"center\" }),\n handler: () => props.editor.chain().focus().setTextAlign(\"center\").run(),\n disabled: () => isListActive(),\n }),\n\n ...registerTool(\"textAlign\", {\n id: \"align-right\",\n type: \"primary\",\n icon: \"right-aligned\",\n text: \"Align right\",\n hotkey: [\"Ctrl\", \"Shift\", \"R\"],\n active: () =>\n !isListActive() && props.editor.isActive({ textAlign: \"right\" }),\n handler: () => props.editor.chain().focus().setTextAlign(\"right\").run(),\n disabled: () => isListActive(),\n }),\n\n ...registerTool(\"link\", {\n id: \"link\",\n type: \"primary\",\n icon: \"link\",\n text: \"Link\",\n hotkey: [\"Ctrl\", \"K\"],\n active: () => props.editor.isActive(\"link\"),\n handler: () => linkTool?.onLinkToolClick(),\n }),\n\n ...registerTool(\n \"paragraphTextStyle\",\n getParagraphTextStyleTool(() => props.editor),\n ),\n\n ...registerTool(\"blockquote\", {\n id: \"blockquote\",\n type: \"secondary\",\n icon: \"quote\",\n text: \"Blockquote\",\n active: () => props.editor.isActive(\"blockquote\"),\n handler: () => props.editor.chain().focus().toggleBlockquote().run(),\n }),\n\n ...registerTool(\"codeBlock\", {\n id: \"codeBlock\",\n type: \"secondary\",\n icon: \"code-block\",\n text: \"Code block\",\n hotkey: [\"Ctrl\", \"Alt\", \"C\"],\n active: () => props.editor.isActive(\"codeBlock\"),\n handler: () => props.editor.chain().focus().toggleCodeBlock().run(),\n }),\n\n ...registerTool(\"strike\", {\n id: \"strikethrough\",\n type: \"secondary\",\n icon: \"strikethrough\",\n text: \"Strikethrough\",\n hotkey: [\"Ctrl\", \"Shift\", \"X\"],\n active: () => props.editor.isActive(\"strike\"),\n handler: () => props.editor.chain().focus().toggleStrike().run(),\n }),\n\n ...registerTool(\"horizontalRule\", {\n id: \"horizontalRule\",\n type: \"secondary\",\n icon: \"divider\",\n text: \"Divider\",\n active: () => false,\n handler: () => props.editor.chain().focus().setHorizontalRule().run(),\n }),\n];\n</script>\n\n<template>\n <slot :tools=\"editorTools\" />\n <slot :link-tool=\"linkTool\" name=\"linkModal\" />\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { Editor } from \"@tiptap/vue-3\";\n\nimport {\n KdsMenuButton,\n type KdsMenuItem,\n KdsToggleButton,\n} from \"@knime/kds-components\";\n\nimport type {\n EditorToolPrimaryItem,\n EditorToolSecondaryItem,\n EditorTools,\n} from \"./types\";\n\ntype Props = {\n editor: Editor;\n tools: EditorTools;\n hotkeyFormatter: (hotkey: Array<string>) => string;\n};\n\nconst props = defineProps<Props>();\n\nconst baseTools = computed(\n () =>\n props.tools.filter(\n ({ type }) => type === \"primary\",\n ) as EditorToolPrimaryItem[],\n);\n\nconst secondaryTools = computed(\n () =>\n props.tools.filter(\n ({ type }) => type === \"secondary\",\n ) as EditorToolSecondaryItem[],\n);\n\nconst secondaryToolsMenuItems = computed<KdsMenuItem[]>(() => {\n const tools = secondaryTools.value.map((tool) => {\n const base = {\n id: tool.id,\n text: tool.text,\n disabled: tool.disabled?.(),\n shortcut: props.hotkeyFormatter(tool.hotkey ?? []),\n accessory: {\n type: \"icon\",\n name: tool.icon,\n },\n } satisfies KdsMenuItem;\n\n if (tool.children) {\n return {\n ...base,\n children: tool.children.map((toolChild) => {\n return {\n id: toolChild.id,\n text: toolChild.text,\n shortcut: props.hotkeyFormatter(toolChild.hotkey ?? []),\n handler: () => toolChild.handler(toolChild.id),\n };\n }),\n } satisfies KdsMenuItem;\n }\n\n return {\n ...base,\n handler: () => tool.handler(tool.id),\n } satisfies KdsMenuItem;\n });\n\n return tools;\n});\n</script>\n\n<template>\n <div class=\"tools\">\n <KdsToggleButton\n v-for=\"tool of baseTools\"\n :key=\"tool.id\"\n class=\"tool\"\n :ariaLabel=\"tool.text\"\n :data-testid=\"tool.id\"\n :disabled=\"tool.disabled?.()\"\n :toggled=\"tool.active?.()\"\n :leading-icon=\"tool.icon\"\n :title=\"hotkeyFormatter(tool.hotkey ?? [])\"\n variant=\"transparent\"\n size=\"small\"\n @keydown.enter.prevent=\"tool.handler?.(tool.id)\"\n @click.stop=\"tool.handler?.(tool.id)\"\n />\n\n <KdsMenuButton\n v-if=\"secondaryTools.length > 0\"\n :items=\"secondaryToolsMenuItems\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n variant=\"transparent\"\n size=\"small\"\n />\n </div>\n</template>\n\n<style scoped>\n.tools {\n display: flex;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n height: 100%;\n}\n</style>\n","import { Extension } from \"@tiptap/vue-3\";\n\n/**\n * TODO UIEXT-1461 Remove and resolve properly with https://knime-com.atlassian.net/browse/UIEXT-1461-\n */\ntype CustomEscapeExtensionOptions = {\n handler: () => boolean;\n};\n\ndeclare module \"@tiptap/core\" {\n interface ExtensionOptions {\n customEscape: CustomEscapeExtensionOptions;\n }\n}\n\nexport const CustomEscape = Extension.create<CustomEscapeExtensionOptions>({\n name: \"OverrideEscape\",\n\n addOptions() {\n return {\n handler: () => false,\n };\n },\n\n addKeyboardShortcuts() {\n return {\n Escape: this.options.handler,\n };\n },\n});\n","import HardBreak from \"@tiptap/extension-hard-break\";\n\nexport const CustomHardBreak = HardBreak.extend({\n addKeyboardShortcuts() {\n return {\n \"Shift-Enter\": () => this.editor.commands.setHardBreak(),\n };\n },\n});\n","import { getAttributes } from \"@tiptap/core\";\nimport Link from \"@tiptap/extension-link\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\n\nimport { getMetaOrCtrlKey, navigatorUtils } from \"@knime/utils\";\n\nconst buildUrlRegex = () => {\n const httpPrefixCheck = \"(http://www\\\\.|https://www\\\\.|http://|https://)\";\n\n const urlCheck =\n \"[a-z0-9]+([-.]{1}[a-z0-9]+)*\\\\.[a-z]{2,5}(:[0-9]{1,5})?(/.*)?\";\n\n return new RegExp(`^${httpPrefixCheck}?${urlCheck}$`);\n};\n\nconst URL_REGEX = buildUrlRegex();\n\nexport const validateURL = (href: string) => URL_REGEX.test(href);\n\nexport type KdsLinkToolOptions = {\n /**\n * Custom function that can be supplied to validate urls added with the link tool\n * @param url The url of the link to be added\n */\n urlValidator: (url: string) => boolean;\n /**\n * Custom function that can, e.g., be used to append a protocol like https:// to a url if not present\n * @param url The url of the link to be added\n */\n sanitizeUrlText: (url: string) => string;\n};\n\nexport const kdsDefaultLinkToolOptions: KdsLinkToolOptions = {\n urlValidator: validateURL,\n sanitizeUrlText: (urlText: string) => {\n const containsHttp = [\"http://\", \"https://\"].some((protocol) =>\n urlText.includes(protocol),\n );\n return containsHttp ? urlText : `https://${urlText}`;\n },\n};\n\nexport const CustomLink = Link.extend({\n addAttributes() {\n const modifier = navigatorUtils.isMac() ? \"⌘\" : \"Ctrl +\";\n\n return {\n ...this.parent?.(),\n\n draggable: {\n default: \"false\",\n },\n\n title: {\n default: `Use \"${modifier} click\" to follow link`,\n },\n\n rel: {\n default: \"ugc noopener noreferrer nofollow\",\n },\n };\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = this.parent?.() || [];\n\n const ctrlClickHandler = new Plugin({\n key: new PluginKey(\"handleControlClick\"),\n props: {\n handleClick(view, _pos, event) {\n const attrs = getAttributes(view.state, \"link\");\n const link = (event.target as HTMLElement)?.closest(\"a\");\n\n const metaOrCtrlKeyPressed = event[getMetaOrCtrlKey()];\n\n if (metaOrCtrlKeyPressed && link && attrs.href) {\n window.open(attrs.href, attrs.target);\n }\n // always return true, otherwise the cursor disappears, which causes some unexpected bugs\n // see: https://knime-com.atlassian.net/browse/HUB-8669\n return true;\n },\n },\n });\n\n plugins.push(ctrlClickHandler);\n\n return plugins;\n },\n});\n","import TextAlign from \"@tiptap/extension-text-align\";\n\nexport const CustomTextAlign = TextAlign.extend({\n addKeyboardShortcuts() {\n const canActivate = () => {\n return !(\n this.editor.isActive(\"bulletList\") ||\n this.editor.isActive(\"orderedList\")\n );\n };\n\n return {\n \"Mod-Shift-l\": () =>\n canActivate() && this.editor.commands.setTextAlign(\"left\"),\n \"Mod-Shift-e\": () =>\n canActivate() && this.editor.commands.setTextAlign(\"center\"),\n \"Mod-Shift-r\": () =>\n canActivate() && this.editor.commands.setTextAlign(\"right\"),\n };\n },\n});\n","import Paragraph from \"@tiptap/extension-paragraph\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n fontSize: {\n /**\n * Sets a custom class on the paragraph which is used to set a small font size\n */\n setSmallText: () => ReturnType;\n /**\n * Reverts setSmallText\n */\n unsetSmallText: () => ReturnType;\n };\n }\n}\n\nconst SmallText = Paragraph.extend({\n addAttributes() {\n const smallTextClass = \"small-text\";\n return {\n ...this.parent?.(),\n smallText: {\n default: false,\n parseHTML: (element) => element.className === smallTextClass,\n renderHTML: (attributes) => {\n return attributes.smallText\n ? {\n class: smallTextClass,\n }\n : {};\n },\n },\n };\n },\n\n addCommands() {\n return {\n ...this.parent?.(),\n setSmallText:\n () =>\n ({ commands }) => {\n return commands.toggleNode(this.name, \"paragraph\", {\n smallText: true,\n });\n },\n unsetSmallText:\n () =>\n ({ chain }) => {\n return chain()\n .updateAttributes(this.name, { smallText: false })\n .run();\n },\n };\n },\n\n addKeyboardShortcuts() {\n return {\n ...this.parent?.(),\n \"Mod-Alt--\": () => this.editor.commands.setSmallText(),\n };\n },\n});\n\nexport { SmallText };\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, useId, useSlots, watch } from \"vue\";\nimport CharacterCount from \"@tiptap/extension-character-count\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { type AnyExtension, EditorContent, useEditor } from \"@tiptap/vue-3\";\n\nimport { KdsSubText } from \"@knime/kds-components\";\nimport { navigatorUtils } from \"@knime/utils\";\n\nimport ExternalLinkIconUrl from \"../node_modules/@knime/kds-styles/dist/img/icons/external-link.svg?url\";\n\nimport KdsCreateLinkModal from \"./toolbar/KdsCreateLinkModal.vue\";\nimport RichTextEditorBaseToolbar from \"./toolbar/RichTextEditorBaseToolbar.vue\";\nimport RichTextEditorToolbar from \"./toolbar/RichTextEditorToolbar.vue\";\nimport type { KdsBaseExtensionsConfig, KdsRichTextEditorProps } from \"./types\";\nimport { CustomEscape } from \"./utils/custom-escape.ts\";\nimport { CustomHardBreak } from \"./utils/custom-hard-break\";\nimport {\n CustomLink,\n kdsDefaultLinkToolOptions,\n validateURL,\n} from \"./utils/custom-link\";\nimport { CustomTextAlign } from \"./utils/custom-text-align\";\nimport { SmallText } from \"./utils/paragraphTextStyle/extension\";\n\nconst {\n editable = true,\n minHeight = null,\n maxHeight = null,\n baseExtensions = {} as KdsBaseExtensionsConfig,\n hotkeyFormatter = (hotkey: string[]) => {\n const MacOSkeyMap: Record<string, string> = {\n Shift: \"⇧\",\n Ctrl: \"⌘\",\n Alt: \"⌥\",\n };\n\n const mapSymbols = (key: string) => MacOSkeyMap[key] || key;\n const identityFn = (value: unknown) => value;\n\n return (\n hotkey\n // map only for mac the symbols that should be displayed differently\n .map(navigatorUtils.isMac() ? mapSymbols : identityFn)\n .join(\" \")\n );\n },\n customExtensions = [] as Array<AnyExtension>,\n autofocus = false,\n withBorder = true,\n disabled = false,\n linkToolOptions = kdsDefaultLinkToolOptions,\n characterLimit = 1000,\n showCharacterCount = false,\n customEscapeHandler = undefined,\n ariaLabel = undefined,\n ariaLabelledby = undefined,\n} = defineProps<KdsRichTextEditorProps>();\n\n// we need to define a minimum amount for a character limit so that we\n// can make static calculations for the character counter and show it\n// only when the user has 100 chars or less left\nconst MIN_CHARACTER_LIMIT = 200;\nconst hardCharacterLimit = Math.max(characterLimit, MIN_CHARACTER_LIMIT);\n\nconst slots = useSlots();\n\n// this assumes a svg without any double quotes\nconst externalIcon = `url(\"${ExternalLinkIconUrl}\")`;\n\nconst modelValue = defineModel<string>();\n\nconst emit = defineEmits<{\n blur: [];\n}>();\n\nconst isToolEnabled = (extensionName: keyof KdsBaseExtensionsConfig) => {\n if (\"all\" in baseExtensions) {\n return true;\n }\n\n return Boolean(baseExtensions[extensionName]);\n};\n\nconst getStarterKitExtensionConfig = (\n extensionName: keyof KdsBaseExtensionsConfig,\n): false | undefined | Partial<unknown> => {\n return isToolEnabled(extensionName) ? undefined : false;\n};\n\nconst extensions = [\n StarterKit.configure({\n bold: getStarterKitExtensionConfig(\"bold\"),\n italic: getStarterKitExtensionConfig(\"italic\"),\n bulletList: getStarterKitExtensionConfig(\"bulletList\"),\n orderedList: getStarterKitExtensionConfig(\"orderedList\"),\n heading: getStarterKitExtensionConfig(\"heading\"),\n blockquote: getStarterKitExtensionConfig(\"blockquote\"),\n code: getStarterKitExtensionConfig(\"code\"),\n codeBlock: getStarterKitExtensionConfig(\"codeBlock\"),\n horizontalRule: getStarterKitExtensionConfig(\"horizontalRule\"),\n strike: getStarterKitExtensionConfig(\"strike\"),\n underline: getStarterKitExtensionConfig(\"underline\"),\n ...(isToolEnabled(\"paragraphTextStyle\") && { paragraph: false }),\n hardBreak: false,\n // StarterKit v3 bundles a link extension, but we register our own\n // CustomLink (opt-in via baseExtensions) for the custom validation,\n // attributes and ctrl/cmd-click handling, so the bundled one is disabled\n // to avoid a duplicate-extension conflict.\n link: false,\n }),\n\n ...(isToolEnabled(\"paragraphTextStyle\") ? [SmallText] : []),\n ...(isToolEnabled(\"textAlign\")\n ? [\n CustomTextAlign.configure({\n types: [\n isToolEnabled(\"heading\") ? \"heading\" : \"\",\n \"paragraph\",\n ].filter(Boolean),\n\n alignments: [\"left\", \"right\", \"center\"],\n }),\n ]\n : []),\n\n ...(isToolEnabled(\"link\")\n ? [CustomLink.configure({ validate: validateURL, openOnClick: false })]\n : []),\n\n CustomHardBreak,\n CharacterCount.configure({\n limit: hardCharacterLimit,\n }),\n\n ...(customEscapeHandler\n ? [CustomEscape.configure({ handler: customEscapeHandler })]\n : []),\n\n ...customExtensions,\n];\n\nconst editor = useEditor({\n content: modelValue.value,\n editable: editable && !disabled,\n autofocus,\n extensions,\n editorProps: {\n attributes: {\n ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}),\n ...(ariaLabelledby ? { \"aria-labelledby\": ariaLabelledby } : {}),\n },\n },\n onUpdate: () => {\n modelValue.value = editor.value?.getHTML() ?? \"\";\n },\n onBlur: () => emit(\"blur\"),\n});\n\nconst minHeightStyle = computed(() =>\n minHeight ? `${minHeight}px` : \"initial\",\n);\n\nconst focus = () => {\n editor.value?.commands?.focus?.();\n};\n\ndefineExpose({ focus });\n\nconst maxHeightStyle = computed(() =>\n maxHeight ? `${maxHeight}px` : \"initial\",\n);\n\nwatch(modelValue, (newValue) => {\n if (!editor.value) {\n return;\n }\n if (editor.value.getHTML() === newValue) {\n return;\n }\n\n editor.value.commands.setContent(newValue ?? \"\");\n});\n\nwatch(\n [() => editable, () => disabled],\n ([newEditable, newDisabled], [oldEditable, oldDisabled]) => {\n if (!editor.value) {\n return;\n }\n\n const oldValue = oldEditable && !oldDisabled;\n const newValue = newEditable && !newDisabled;\n if (oldValue === newValue) {\n return;\n }\n\n editor.value.setEditable(newValue);\n\n if (autofocus) {\n focus();\n }\n },\n);\n\nonMounted(async () => {\n if (editable && autofocus) {\n await nextTick();\n focus();\n }\n});\n\nconst hasCustomToolbar = slots.customToolbar;\nconst hasTools = computed(() => Object.keys(baseExtensions).length);\nconst characterCountId = useId();\n</script>\n\n<template>\n <div>\n <div :class=\"['editor-wrapper', { 'with-border': withBorder, disabled }]\">\n <Transition v-if=\"hasTools\" name=\"expand\" :css=\"!hasCustomToolbar\">\n <div\n v-if=\"editor && editable && !disabled\"\n :class=\"[\n 'toolbar-wrapper',\n { 'embedded-toolbar': !hasCustomToolbar },\n ]\"\n >\n <RichTextEditorBaseToolbar\n :editor=\"editor\"\n :base-extensions=\"baseExtensions\"\n :link-tool-options=\"linkToolOptions\"\n >\n <template #default=\"{ tools }\">\n <slot\n name=\"customToolbar\"\n :editor=\"editor\"\n :tools=\"tools\"\n :hotkey-formatter=\"hotkeyFormatter\"\n >\n <RichTextEditorToolbar\n :editor=\"editor\"\n :tools=\"tools\"\n :hotkey-formatter=\"hotkeyFormatter\"\n />\n </slot>\n </template>\n <template #linkModal=\"{ linkTool }\">\n <KdsCreateLinkModal\n v-if=\"isToolEnabled('link') && linkTool\"\n v-bind=\"linkTool.props\"\n v-on=\"linkTool.events\"\n />\n </template>\n </RichTextEditorBaseToolbar>\n </div>\n </Transition>\n\n <EditorContent\n class=\"rich-text-editor\"\n :editor=\"editor\"\n :class=\"{ editable: editable && !disabled }\"\n :aria-disabled=\"disabled || undefined\"\n />\n </div>\n\n <div v-if=\"editor && editable && showCharacterCount\">\n <KdsSubText\n :id=\"characterCountId\"\n :sub-text=\"`${editor.storage.characterCount.characters()} / ${hardCharacterLimit} characters`\"\n :error=\"false\"\n :validating=\"false\"\n :preserve-sub-text-space=\"true\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.editor-wrapper {\n /* Fixed 44px toolbar height per the design (28px content + 8px padding on\n * each side). Defined explicitly so the toolbar expand/collapse transition\n * has a concrete target height; the small toolbar buttons (24px) center\n * within the content area. */\n --toolbar-height: calc(\n var(--kds-dimension-component-height-1-75x) +\n var(--kds-spacing-container-0-5x) * 2\n );\n\n position: relative;\n isolation: isolate;\n\n &.disabled {\n color: var(--kds-color-text-and-icon-disabled);\n }\n}\n\n/* stylelint-disable selector-class-pattern */\n.rich-text-editor {\n height: 100%;\n max-height: v-bind(\"maxHeightStyle\");\n padding: var(--kds-spacing-container-0-5x);\n overflow-y: auto;\n\n &.editable {\n cursor: text;\n background: var(--kds-color-background-input-initial);\n\n & :deep(.ProseMirror) {\n min-height: v-bind(\"minHeightStyle\");\n }\n }\n\n /* stylelint-disable knime/no-deep-nesting */\n & :deep(.ProseMirror) {\n height: 100%;\n\n /* The following rich text styles are kept in sync with KdsDescription. */\n p {\n padding: 0;\n margin: 0 0 var(--kds-spacing-container-0-37x);\n font: var(--kds-font-base-body-small);\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p.small-text {\n font: var(--kds-font-base-subtext-xsmall);\n }\n\n strong,\n b {\n font-weight: var(--kds-core-font-weight-strong);\n }\n\n i,\n em {\n font-style: italic;\n }\n\n h3 {\n margin: 0;\n font: var(--kds-font-base-body-medium-strong);\n }\n\n h4 {\n margin: 0;\n font: var(--kds-font-base-body-small-strong);\n }\n\n pre {\n width: fit-content;\n padding: var(--kds-spacing-container-0-75x);\n font: var(--kds-font-base-code-xsmall);\n background: var(--kds-color-surface-subtle);\n border-radius: var(--kds-border-radius-container-0-25x);\n\n & > code {\n padding: 0;\n background: none;\n }\n }\n\n & :not(pre) > code {\n padding: var(--kds-spacing-container-0-12x)\n var(--kds-spacing-container-0-25x);\n font: var(--kds-font-base-code-xsmall);\n background: var(--kds-color-surface-subtle);\n box-decoration-break: clone;\n border-radius: var(--kds-border-radius-container-0-12x);\n }\n\n /** keep in sync with KdsLink */\n a {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n max-width: 100%;\n padding: var(--kds-spacing-container-none)\n var(--kds-spacing-container-0-10x);\n font: var(--kds-font-base-body-small);\n color: var(--kds-color-text-and-icon-neutral);\n white-space: nowrap;\n text-decoration-line: underline;\n cursor: pointer;\n border-radius: var(--kds-border-radius-container-0-12x);\n\n &:focus-visible {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-container-none);\n }\n\n /** internal links */\n &[href^=\"http\"] {\n --link-color: var(--kds-color-text-and-icon-selected);\n\n color: var(--link-color);\n\n &:visited {\n --link-color: var(--kds-color-text-and-icon-info);\n\n color: var(--link-color);\n }\n\n &:hover {\n --link-color: var(--kds-color-text-and-icon-primary-inverted);\n\n color: var(--link-color);\n background-color: var(--kds-color-background-primary-bold-hover);\n }\n\n &:active {\n --link-color: var(--kds-color-text-and-icon-selected-inverted);\n\n color: var(--link-color);\n background-color: var(--kds-color-background-primary-bold-active);\n }\n\n &::after {\n display: block;\n width: var(--kds-dimension-icon-0-56x);\n height: var(--kds-dimension-icon-0-56x);\n margin-left: var(--kds-spacing-container-0-12x);\n content: \"\";\n background-color: var(--link-color);\n mask-image: v-bind(\"externalIcon\");\n mask-repeat: no-repeat;\n mask-size: contain;\n }\n }\n\n /** external links */\n &:not([href^=\"http\"]) {\n color: var(--kds-color-text-and-icon-neutral);\n\n &:visited {\n color: var(--kds-color-text-and-icon-info);\n }\n\n &:hover {\n background-color: var(--kds-color-background-neutral-hover);\n }\n\n &:active {\n background-color: var(--kds-color-background-neutral-active);\n }\n }\n }\n\n ol,\n ul {\n padding-left: var(--kds-spacing-container-2x);\n }\n\n dd {\n margin-left: var(--kds-spacing-container-1x);\n }\n\n table {\n border-spacing: var(--kds-spacing-container-0-25x) 0;\n border-collapse: separate;\n\n td,\n th {\n padding: var(--kds-spacing-container-0-25x);\n }\n\n th {\n font: var(--kds-font-base-body-small-strong);\n text-align: left;\n border-bottom: var(--kds-border-width-icon-stroke-l) solid\n var(--kds-color-border-neutral);\n }\n\n td {\n font: var(--kds-font-base-body-small);\n border-bottom: var(--kds-border-width-icon-stroke-s) solid\n var(--kds-color-border-neutral);\n }\n }\n }\n\n & :has(:deep(.ProseMirror:focus)) {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-offset-focus);\n }\n\n & :deep(.ProseMirror:focus-visible),\n & :deep(.ProseMirror:focus) {\n outline: transparent;\n }\n /* stylelint-enable selector-class-pattern */\n}\n\n.editor-wrapper.with-border {\n border: var(--kds-border-action-input);\n border-radius: var(--kds-border-radius-container-0-37x);\n\n &.disabled {\n border: var(--kds-border-action-disabled);\n }\n\n & .toolbar-wrapper {\n border-top-left-radius: var(--kds-border-radius-container-0-37x);\n border-top-right-radius: var(--kds-border-radius-container-0-37x);\n }\n\n & .rich-text-editor {\n border-bottom-right-radius: var(--kds-border-radius-container-0-37x);\n border-bottom-left-radius: var(--kds-border-radius-container-0-37x);\n }\n}\n\n.embedded-toolbar {\n height: var(--toolbar-height);\n padding: var(--kds-spacing-container-0-5x);\n overflow-x: auto;\n overscroll-behavior: contain;\n white-space: pre;\n scrollbar-width: none; /* for firefox */\n background: var(--kds-color-background-input-initial);\n border-bottom: var(--kds-border-base-muted);\n -ms-overflow-style: none; /* needed to hide scroll bar in edge */\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.expand-enter-active,\n.expand-leave-active {\n transition: all 0.15s ease;\n}\n\n.expand-enter-from,\n.expand-leave-to {\n height: 0;\n opacity: 0;\n}\n\n.expand-enter-to,\n.expand-leave-from {\n height: var(--toolbar-height);\n opacity: 1;\n}\n</style>\n"],"names":["navigatorUtils.isMac","_createBlock","_unref","_createVNode","_createElementVNode","_normalizeClass","_hoisted_1","url","text","_renderSlot","_openBlock","_createElementBlock","_Fragment","_renderList","_useModel","_Transition","RichTextEditorBaseToolbar","_withCtx","_mergeProps","_toHandlers"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { KdsRichTextEditorProps } from './types';
|
|
2
|
+
type __VLS_Props = KdsRichTextEditorProps;
|
|
3
|
+
type __VLS_PublicProps = {
|
|
4
|
+
modelValue?: string;
|
|
5
|
+
} & __VLS_Props;
|
|
6
|
+
declare function __VLS_template(): {
|
|
7
|
+
attrs: Partial<{}>;
|
|
8
|
+
slots: {
|
|
9
|
+
customToolbar?(_: {
|
|
10
|
+
editor: import('@tiptap/vue-3').Editor;
|
|
11
|
+
tools: import('./toolbar/types.ts').EditorTools;
|
|
12
|
+
hotkeyFormatter: (hotkey: Array<string>) => string;
|
|
13
|
+
}): any;
|
|
14
|
+
};
|
|
15
|
+
refs: {};
|
|
16
|
+
rootEl: HTMLDivElement;
|
|
17
|
+
};
|
|
18
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
19
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
20
|
+
focus: () => void;
|
|
21
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
22
|
+
"update:modelValue": (value: string) => any;
|
|
23
|
+
blur: () => any;
|
|
24
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
25
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
26
|
+
onBlur?: (() => any) | undefined;
|
|
27
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
28
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
29
|
+
export default _default;
|
|
30
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
31
|
+
new (): {
|
|
32
|
+
$slots: S;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=KdsRichTextEditor.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KdsRichTextEditor.vue.d.ts","sourceRoot":"","sources":["../../src/KdsRichTextEditor.vue"],"names":[],"mappings":"AAmjBA,OAAO,KAAK,EAA2B,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAW/E,KAAK,WAAW,GAAG,sBAAsB,CAAC;AAsM1C,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WAiKT,OAAO,IAA6B;;;;;;YAVd,GAAG;;;;EAetC;AAuBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;6FASnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as KdsRichTextEditor } from './KdsRichTextEditor.vue';
|
|
2
|
+
export { default as KdsCreateLinkModal } from './toolbar/KdsCreateLinkModal.vue';
|
|
3
|
+
export { kdsDefaultLinkToolOptions } from './utils/custom-link';
|
|
4
|
+
export type { KdsLinkToolOptions } from './utils/custom-link';
|
|
5
|
+
export type * from './types';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,mBAAmB,SAAS,CAAC"}
|