@knime/kds-rich-text-editor 1.1.0 → 1.2.1
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 +17 -0
- package/dist/index.css +19 -19
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/src/KdsRichTextEditor.vue.d.ts +1 -1
- package/dist/src/toolbar/KdsCreateLinkModal.vue.d.ts +15 -10
- package/dist/src/toolbar/KdsCreateLinkModal.vue.d.ts.map +1 -1
- package/package.json +23 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @knime/kds-rich-text-editor
|
|
2
2
|
|
|
3
|
+
## 1.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [8914234]
|
|
8
|
+
- @knime/kds-components@1.2.1
|
|
9
|
+
- @knime/kds-styles@1.2.1
|
|
10
|
+
|
|
11
|
+
## 1.2.0
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- bc85a76: Migrate native `title` attribute usages to the accessible `v-kds-tooltip` directive across rich-text-editor components.
|
|
16
|
+
- Updated dependencies [bc85a76]
|
|
17
|
+
- @knime/kds-components@1.2.0
|
|
18
|
+
- @knime/kds-styles@1.2.0
|
|
19
|
+
|
|
3
20
|
## 1.1.0
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
package/dist/index.css
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
gap: var(--kds-spacing-container-0-5x);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
.tools[data-v-
|
|
22
|
+
.tools[data-v-0163d303] {
|
|
23
23
|
display: flex;
|
|
24
24
|
gap: var(--kds-spacing-container-0-25x);
|
|
25
25
|
align-items: center;
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.editor-wrapper {
|
|
30
|
-
&[data-v-
|
|
30
|
+
&[data-v-7342ae63] {
|
|
31
31
|
/* Fixed 44px toolbar height per the design (28px content + 8px padding on
|
|
32
32
|
* each side); the small toolbar buttons (24px) center within the content
|
|
33
33
|
* area. */
|
|
@@ -39,16 +39,16 @@
|
|
|
39
39
|
position: relative;
|
|
40
40
|
isolation: isolate;
|
|
41
41
|
}
|
|
42
|
-
&.disabled[data-v-
|
|
42
|
+
&.disabled[data-v-7342ae63] {
|
|
43
43
|
color: var(--kds-color-text-and-icon-disabled);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/* stylelint-disable selector-class-pattern */
|
|
48
48
|
.rich-text-editor {
|
|
49
|
-
&[data-v-
|
|
49
|
+
&[data-v-7342ae63] {
|
|
50
50
|
height: 100%;
|
|
51
|
-
max-height: var(--
|
|
51
|
+
max-height: var(--v688daf92);
|
|
52
52
|
padding: var(--kds-spacing-container-0-5x);
|
|
53
53
|
overflow-y: auto;
|
|
54
54
|
|
|
@@ -56,15 +56,15 @@
|
|
|
56
56
|
/* stylelint-enable selector-class-pattern */
|
|
57
57
|
}
|
|
58
58
|
&.editable {
|
|
59
|
-
&[data-v-
|
|
59
|
+
&[data-v-7342ae63] {
|
|
60
60
|
cursor: text;
|
|
61
61
|
background: var(--kds-color-background-input-initial);
|
|
62
62
|
}
|
|
63
|
-
&[data-v-
|
|
64
|
-
min-height: var(--
|
|
63
|
+
&[data-v-7342ae63] .ProseMirror {
|
|
64
|
+
min-height: var(--v1a3e32ee);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
&[data-v-
|
|
67
|
+
&[data-v-7342ae63] .ProseMirror {
|
|
68
68
|
height: 100%;
|
|
69
69
|
font: var(--kds-font-base-body-small);
|
|
70
70
|
|
|
@@ -175,7 +175,7 @@ a {
|
|
|
175
175
|
margin-left: var(--kds-spacing-container-0-12x);
|
|
176
176
|
content: "";
|
|
177
177
|
background-color: var(--link-color);
|
|
178
|
-
mask-image: var(--
|
|
178
|
+
mask-image: var(--v7ae662d6);
|
|
179
179
|
mask-repeat: no-repeat;
|
|
180
180
|
mask-size: contain;
|
|
181
181
|
}
|
|
@@ -224,34 +224,34 @@ td {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
|
-
&[data-v-
|
|
228
|
-
&[data-v-
|
|
227
|
+
&[data-v-7342ae63] .ProseMirror:focus-visible,
|
|
228
|
+
&[data-v-7342ae63] .ProseMirror:focus {
|
|
229
229
|
outline: transparent;
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
.editor-wrapper.with-border {
|
|
233
|
-
&[data-v-
|
|
233
|
+
&[data-v-7342ae63] {
|
|
234
234
|
border: var(--kds-border-action-input);
|
|
235
235
|
border-radius: var(--kds-border-radius-container-0-37x);
|
|
236
236
|
}
|
|
237
|
-
&.disabled[data-v-
|
|
237
|
+
&.disabled[data-v-7342ae63] {
|
|
238
238
|
border: var(--kds-border-action-disabled);
|
|
239
239
|
}
|
|
240
|
-
& .toolbar-wrapper[data-v-
|
|
240
|
+
& .toolbar-wrapper[data-v-7342ae63] {
|
|
241
241
|
border-top-left-radius: var(--kds-border-radius-container-0-37x);
|
|
242
242
|
border-top-right-radius: var(--kds-border-radius-container-0-37x);
|
|
243
243
|
}
|
|
244
|
-
& .rich-text-editor[data-v-
|
|
244
|
+
& .rich-text-editor[data-v-7342ae63] {
|
|
245
245
|
border-bottom-right-radius: var(--kds-border-radius-container-0-37x);
|
|
246
246
|
border-bottom-left-radius: var(--kds-border-radius-container-0-37x);
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
|
-
.editor-wrapper.show-focus-ring[data-v-
|
|
249
|
+
.editor-wrapper.show-focus-ring[data-v-7342ae63] {
|
|
250
250
|
outline: var(--kds-border-action-focused);
|
|
251
251
|
outline-offset: var(--kds-spacing-offset-focus);
|
|
252
252
|
}
|
|
253
253
|
.embedded-toolbar {
|
|
254
|
-
&[data-v-
|
|
254
|
+
&[data-v-7342ae63] {
|
|
255
255
|
height: var(--toolbar-height);
|
|
256
256
|
padding: var(--kds-spacing-container-0-5x);
|
|
257
257
|
overflow-x: auto;
|
|
@@ -262,7 +262,7 @@ td {
|
|
|
262
262
|
border-bottom: var(--kds-border-base-muted);
|
|
263
263
|
-ms-overflow-style: none; /* needed to hide scroll bar in edge */
|
|
264
264
|
}
|
|
265
|
-
&[data-v-
|
|
265
|
+
&[data-v-7342ae63]::-webkit-scrollbar {
|
|
266
266
|
display: none;
|
|
267
267
|
}
|
|
268
268
|
}
|
package/dist/index.js
CHANGED
|
@@ -554,12 +554,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
554
554
|
disabled: tool.disabled?.(),
|
|
555
555
|
toggled: tool.active?.(),
|
|
556
556
|
"leading-icon": tool.icon,
|
|
557
|
-
|
|
557
|
+
tooltip: __props.hotkeyFormatter(tool.hotkey ?? []),
|
|
558
558
|
variant: "transparent",
|
|
559
559
|
size: "small",
|
|
560
560
|
onKeydown: withKeys(withModifiers(($event) => tool.handler?.(tool.id), ["prevent"]), ["enter"]),
|
|
561
561
|
onClick: withModifiers(($event) => tool.handler?.(tool.id), ["stop"])
|
|
562
|
-
}, null, 8, ["ariaLabel", "data-testid", "disabled", "toggled", "leading-icon", "
|
|
562
|
+
}, null, 8, ["ariaLabel", "data-testid", "disabled", "toggled", "leading-icon", "tooltip", "onKeydown", "onClick"]);
|
|
563
563
|
}), 128)),
|
|
564
564
|
secondaryTools.value.length > 0 ? (openBlock(), createBlock(unref(KdsMenuButton), {
|
|
565
565
|
key: 0,
|
|
@@ -574,7 +574,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
574
574
|
}
|
|
575
575
|
});
|
|
576
576
|
|
|
577
|
-
const RichTextEditorToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-
|
|
577
|
+
const RichTextEditorToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-0163d303"]]);
|
|
578
578
|
|
|
579
579
|
const CustomEscape = Extension.create({
|
|
580
580
|
name: "OverrideEscape",
|
|
@@ -741,9 +741,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
741
741
|
emits: /* @__PURE__ */ mergeModels(["blur"], ["update:modelValue"]),
|
|
742
742
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
743
743
|
useCssVars((_ctx) => ({
|
|
744
|
-
"
|
|
745
|
-
"
|
|
746
|
-
"
|
|
744
|
+
"v688daf92": maxHeightStyle.value,
|
|
745
|
+
"v1a3e32ee": minHeightStyle.value,
|
|
746
|
+
"v7ae662d6": externalIcon
|
|
747
747
|
}));
|
|
748
748
|
const hardCharacterLimit = Math.max(
|
|
749
749
|
__props.characterLimit.maxCharacters ?? 1e3,
|
|
@@ -952,7 +952,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
952
952
|
}
|
|
953
953
|
});
|
|
954
954
|
|
|
955
|
-
const KdsRichTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-
|
|
955
|
+
const KdsRichTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-7342ae63"]]);
|
|
956
956
|
|
|
957
957
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
958
958
|
__name: "KdsRichTextInput",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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/enums.ts","../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","../src/KdsRichTextInput.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\"","export const kdsCharacterCountDisplay = {\n NEVER: \"never\",\n ALWAYS: \"always\",\n AT_LIMIT: \"atLimit\",\n} as const;\n\nexport const kdsCharacterCountDisplays = Object.values(\n kdsCharacterCountDisplay,\n);\n","<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 {\n computed,\n nextTick,\n onMounted,\n ref,\n useId,\n useSlots,\n watch,\n} 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 { kdsCharacterCountDisplay } from \"./enums\";\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 = {},\n subText = undefined,\n error = false,\n validating = false,\n preserveSubTextSpace = false,\n customEscapeHandler = undefined,\n ariaLabel = undefined,\n ariaLabelledby = undefined,\n wrapperFocusRing = false,\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;\n// number of remaining characters at or below which the counter is surfaced\n// when `display` is set to `atLimit`\nconst AT_LIMIT_THRESHOLD = 100;\n\nconst hardCharacterLimit = Math.max(\n characterLimit.maxCharacters ?? 1000,\n MIN_CHARACTER_LIMIT,\n);\nconst characterCountDisplay =\n characterLimit.display ?? kdsCharacterCountDisplay.NEVER;\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 subTextId = useId();\n\n// Tracks focus of the editing area itself (not the toolbar). Used to draw the\n// `wrapperFocusRing` only while the user is editing — focusing a toolbar button\n// fires the editor's blur, so the ring correctly disappears.\nconst isEditorFocused = ref(false);\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 \"aria-describedby\": subTextId,\n },\n },\n onUpdate: () => {\n modelValue.value = editor.value?.getHTML() ?? \"\";\n },\n onFocus: () => {\n isEditorFocused.value = true;\n },\n onBlur: () => {\n isEditorFocused.value = false;\n emit(\"blur\");\n },\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);\n\nconst characterCount = computed(\n () => editor.value?.storage.characterCount.characters() ?? 0,\n);\n\nconst showCharacterCount = computed(() => {\n if (!editor.value || !editable) {\n return false;\n }\n\n switch (characterCountDisplay) {\n case kdsCharacterCountDisplay.ALWAYS:\n return true;\n case kdsCharacterCountDisplay.AT_LIMIT:\n return hardCharacterLimit - characterCount.value <= AT_LIMIT_THRESHOLD;\n default:\n return false;\n }\n});\n\n// A provided `subText` (e.g. a validation message) takes precedence over the\n// character count display.\nconst hasSubTextOverride = computed(() => Boolean(subText));\n\nconst subTextValue = computed(() => {\n if (hasSubTextOverride.value) {\n return subText;\n }\n return showCharacterCount.value\n ? `${characterCount.value} / ${hardCharacterLimit} characters`\n : undefined;\n});\n</script>\n\n<template>\n <div>\n <div\n :class=\"[\n 'editor-wrapper',\n {\n 'with-border': withBorder,\n disabled,\n 'show-focus-ring': wrapperFocusRing && isEditorFocused,\n },\n ]\"\n >\n <div\n v-if=\"hasTools && editor && editable && !disabled\"\n :class=\"['toolbar-wrapper', { 'embedded-toolbar': !hasCustomToolbar }]\"\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\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 <KdsSubText\n :id=\"subTextId\"\n :sub-text=\"subTextValue\"\n :error=\"hasSubTextOverride && error\"\n :validating=\"hasSubTextOverride && validating\"\n :preserve-sub-text-space=\"preserveSubTextSpace\"\n />\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); the small toolbar buttons (24px) center within the content\n * 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 font: var(--kds-font-base-body-small);\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 & :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.editor-wrapper.show-focus-ring {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-offset-focus);\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</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, useId, useTemplateRef } from \"vue\";\n\nimport { KdsLabel } from \"@knime/kds-components\";\nimport type { KdsFormFieldExpose } from \"@knime/kds-components\";\n\nimport KdsRichTextEditor from \"./KdsRichTextEditor.vue\";\nimport type { KdsRichTextInputProps } from \"./types\";\n\nconst {\n id = undefined,\n label = undefined,\n ariaLabel = undefined,\n description = undefined,\n ...editorProps\n} = defineProps<KdsRichTextInputProps>();\n\nconst modelValue = defineModel<string>();\n\nconst emit = defineEmits<{\n blur: [];\n}>();\n\nconst fallbackId = useId();\nconst inputId = computed(() => id?.trim() || fallbackId);\nconst labelId = computed(() => `${inputId.value}-label`);\n\nconst isHovered = ref(false);\n\nconst editorRef =\n useTemplateRef<InstanceType<typeof KdsRichTextEditor>>(\"editor\");\n\ndefineExpose<KdsFormFieldExpose>({\n focus: () => editorRef.value?.focus(),\n});\n</script>\n\n<template>\n <div\n class=\"kds-rich-text-input\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <KdsLabel\n v-if=\"label\"\n :id=\"labelId\"\n :label=\"label\"\n :description=\"description\"\n :show-description-button=\"isHovered\"\n />\n <KdsRichTextEditor\n ref=\"editor\"\n v-bind=\"editorProps\"\n v-model=\"modelValue\"\n with-border\n wrapper-focus-ring\n :aria-label=\"label ? undefined : ariaLabel\"\n :aria-labelledby=\"label ? labelId : undefined\"\n @blur=\"emit('blur')\"\n />\n </div>\n</template>\n\n<style scoped>\n.kds-rich-text-input {\n display: flex;\n flex-direction: column;\n}\n</style>\n"],"names":["navigatorUtils.isMac","_createBlock","_unref","_createVNode","_createElementVNode","_normalizeClass","_hoisted_1","url","text","_renderSlot","_openBlock","_createElementBlock","_Fragment","_renderList","_useModel","RichTextEditorBaseToolbar","_withCtx","_mergeProps","_toHandlers","_createPropsRestProxy"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@knime+utils@1.11.1_consola@3.4.2/node_modules/@knime/utils/src/navigator.ts","../../../node_modules/.pnpm/@knime+utils@1.11.1_consola@3.4.2/node_modules/@knime/utils/src/hotkeys.ts","../../styles/dist/img/icons/external-link.svg?url","../src/enums.ts","../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","../src/KdsRichTextInput.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\"","export const kdsCharacterCountDisplay = {\n NEVER: \"never\",\n ALWAYS: \"always\",\n AT_LIMIT: \"atLimit\",\n} as const;\n\nexport const kdsCharacterCountDisplays = Object.values(\n kdsCharacterCountDisplay,\n);\n","<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 :tooltip=\"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 {\n computed,\n nextTick,\n onMounted,\n ref,\n useId,\n useSlots,\n watch,\n} 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 { kdsCharacterCountDisplay } from \"./enums\";\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\";\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 = {},\n subText = undefined,\n error = false,\n validating = false,\n preserveSubTextSpace = false,\n customEscapeHandler = undefined,\n ariaLabel = undefined,\n ariaLabelledby = undefined,\n wrapperFocusRing = false,\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;\n// number of remaining characters at or below which the counter is surfaced\n// when `display` is set to `atLimit`\nconst AT_LIMIT_THRESHOLD = 100;\n\nconst hardCharacterLimit = Math.max(\n characterLimit.maxCharacters ?? 1000,\n MIN_CHARACTER_LIMIT,\n);\nconst characterCountDisplay =\n characterLimit.display ?? kdsCharacterCountDisplay.NEVER;\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 subTextId = useId();\n\n// Tracks focus of the editing area itself (not the toolbar). Used to draw the\n// `wrapperFocusRing` only while the user is editing — focusing a toolbar button\n// fires the editor's blur, so the ring correctly disappears.\nconst isEditorFocused = ref(false);\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 \"aria-describedby\": subTextId,\n },\n },\n onUpdate: () => {\n modelValue.value = editor.value?.getHTML() ?? \"\";\n },\n onFocus: () => {\n isEditorFocused.value = true;\n },\n onBlur: () => {\n isEditorFocused.value = false;\n emit(\"blur\");\n },\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);\n\nconst characterCount = computed(\n () => editor.value?.storage.characterCount.characters() ?? 0,\n);\n\nconst showCharacterCount = computed(() => {\n if (!editor.value || !editable) {\n return false;\n }\n\n switch (characterCountDisplay) {\n case kdsCharacterCountDisplay.ALWAYS:\n return true;\n case kdsCharacterCountDisplay.AT_LIMIT:\n return hardCharacterLimit - characterCount.value <= AT_LIMIT_THRESHOLD;\n default:\n return false;\n }\n});\n\n// A provided `subText` (e.g. a validation message) takes precedence over the\n// character count display.\nconst hasSubTextOverride = computed(() => Boolean(subText));\n\nconst subTextValue = computed(() => {\n if (hasSubTextOverride.value) {\n return subText;\n }\n return showCharacterCount.value\n ? `${characterCount.value} / ${hardCharacterLimit} characters`\n : undefined;\n});\n</script>\n\n<template>\n <div>\n <div\n :class=\"[\n 'editor-wrapper',\n {\n 'with-border': withBorder,\n disabled,\n 'show-focus-ring': wrapperFocusRing && isEditorFocused,\n },\n ]\"\n >\n <div\n v-if=\"hasTools && editor && editable && !disabled\"\n :class=\"['toolbar-wrapper', { 'embedded-toolbar': !hasCustomToolbar }]\"\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\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 <KdsSubText\n :id=\"subTextId\"\n :sub-text=\"subTextValue\"\n :error=\"hasSubTextOverride && error\"\n :validating=\"hasSubTextOverride && validating\"\n :preserve-sub-text-space=\"preserveSubTextSpace\"\n />\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); the small toolbar buttons (24px) center within the content\n * 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 font: var(--kds-font-base-body-small);\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 & :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.editor-wrapper.show-focus-ring {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-offset-focus);\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</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, useId, useTemplateRef } from \"vue\";\n\nimport { KdsLabel } from \"@knime/kds-components\";\nimport type { KdsFormFieldExpose } from \"@knime/kds-components\";\n\nimport KdsRichTextEditor from \"./KdsRichTextEditor.vue\";\nimport type { KdsRichTextInputProps } from \"./types\";\n\nconst {\n id = undefined,\n label = undefined,\n ariaLabel = undefined,\n description = undefined,\n ...editorProps\n} = defineProps<KdsRichTextInputProps>();\n\nconst modelValue = defineModel<string>();\n\nconst emit = defineEmits<{\n blur: [];\n}>();\n\nconst fallbackId = useId();\nconst inputId = computed(() => id?.trim() || fallbackId);\nconst labelId = computed(() => `${inputId.value}-label`);\n\nconst isHovered = ref(false);\n\nconst editorRef =\n useTemplateRef<InstanceType<typeof KdsRichTextEditor>>(\"editor\");\n\ndefineExpose<KdsFormFieldExpose>({\n focus: () => editorRef.value?.focus(),\n});\n</script>\n\n<template>\n <div\n class=\"kds-rich-text-input\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <KdsLabel\n v-if=\"label\"\n :id=\"labelId\"\n :label=\"label\"\n :description=\"description\"\n :show-description-button=\"isHovered\"\n />\n <KdsRichTextEditor\n ref=\"editor\"\n v-bind=\"editorProps\"\n v-model=\"modelValue\"\n with-border\n wrapper-focus-ring\n :aria-label=\"label ? undefined : ariaLabel\"\n :aria-labelledby=\"label ? labelId : undefined\"\n @blur=\"emit('blur')\"\n />\n </div>\n</template>\n\n<style scoped>\n.kds-rich-text-input {\n display: flex;\n flex-direction: column;\n}\n</style>\n"],"names":["navigatorUtils.isMac","_createBlock","_unref","_createVNode","_createElementVNode","_normalizeClass","_hoisted_1","url","text","_renderSlot","_openBlock","_createElementBlock","_Fragment","_renderList","_useModel","RichTextEditorBaseToolbar","_withCtx","_mergeProps","_toHandlers","_createPropsRestProxy"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -8,7 +8,7 @@ declare function __VLS_template(): {
|
|
|
8
8
|
slots: {
|
|
9
9
|
customToolbar?(_: {
|
|
10
10
|
editor: import('@tiptap/vue-3').Editor;
|
|
11
|
-
tools: import('./toolbar/types
|
|
11
|
+
tools: import('./toolbar/types').EditorTools;
|
|
12
12
|
hotkeyFormatter: (hotkey: Array<string>) => string;
|
|
13
13
|
}): any;
|
|
14
14
|
};
|
|
@@ -100,8 +100,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
100
100
|
readonly pattern?: string | undefined;
|
|
101
101
|
readonly segments?: import('packages/components/dist/src/forms/inputs/useInputSegments.helpers').KdsInputSegmentsConfig | undefined;
|
|
102
102
|
readonly onInput?: ((event: Event) => any) | undefined;
|
|
103
|
-
readonly onClick?: ((event: MouseEvent) => any) | undefined;
|
|
104
103
|
readonly onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
104
|
+
readonly onClick?: ((event: MouseEvent) => any) | undefined;
|
|
105
105
|
readonly onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
106
106
|
readonly onKeydown?: ((event: KeyboardEvent) => any) | undefined;
|
|
107
107
|
readonly onPaste?: ((event: ClipboardEvent) => any) | undefined;
|
|
@@ -119,7 +119,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
119
119
|
$root: import('vue').ComponentPublicInstance | null;
|
|
120
120
|
$parent: import('vue').ComponentPublicInstance | null;
|
|
121
121
|
$host: Element | null;
|
|
122
|
-
$emit: ((event: "input", event: Event) => void) & ((event: "
|
|
122
|
+
$emit: ((event: "input", event: Event) => void) & ((event: "blur", event: FocusEvent) => void) & ((event: "click", event: MouseEvent) => void) & ((event: "focus", event: FocusEvent) => void) & ((event: "keydown", event: KeyboardEvent) => void) & ((event: "paste", event: ClipboardEvent) => void) & ((event: "update:modelValue", value: string) => void);
|
|
123
123
|
$el: HTMLDivElement;
|
|
124
124
|
$options: import('vue').ComponentOptionsBase<Readonly<{
|
|
125
125
|
modelValue?: string;
|
|
@@ -156,8 +156,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
156
156
|
segments?: import('packages/components/dist/src/forms/inputs/useInputSegments.helpers').KdsInputSegmentsConfig;
|
|
157
157
|
}> & Readonly<{
|
|
158
158
|
onInput?: ((event: Event) => any) | undefined;
|
|
159
|
-
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
160
159
|
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
160
|
+
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
161
161
|
onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
162
162
|
onKeydown?: ((event: KeyboardEvent) => any) | undefined;
|
|
163
163
|
onPaste?: ((event: ClipboardEvent) => any) | undefined;
|
|
@@ -166,8 +166,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
166
166
|
focus: (options?: FocusOptions) => void;
|
|
167
167
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
168
168
|
input: (event: Event) => any;
|
|
169
|
-
click: (event: MouseEvent) => any;
|
|
170
169
|
blur: (event: FocusEvent) => any;
|
|
170
|
+
click: (event: MouseEvent) => any;
|
|
171
171
|
focus: (event: FocusEvent) => any;
|
|
172
172
|
keydown: (event: KeyboardEvent) => any;
|
|
173
173
|
paste: (event: ClipboardEvent) => any;
|
|
@@ -228,8 +228,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
228
228
|
segments?: import('packages/components/dist/src/forms/inputs/useInputSegments.helpers').KdsInputSegmentsConfig;
|
|
229
229
|
}> & Readonly<{
|
|
230
230
|
onInput?: ((event: Event) => any) | undefined;
|
|
231
|
-
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
232
231
|
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
232
|
+
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
233
233
|
onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
234
234
|
onKeydown?: ((event: KeyboardEvent) => any) | undefined;
|
|
235
235
|
onPaste?: ((event: ClipboardEvent) => any) | undefined;
|
|
@@ -237,9 +237,12 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
237
237
|
}>, "focus"> & {
|
|
238
238
|
focus: (options?: FocusOptions) => void;
|
|
239
239
|
} & {} & import('vue').ComponentCustomProperties & {} & {
|
|
240
|
-
$slots: {
|
|
241
|
-
leading?(
|
|
242
|
-
trailing?(
|
|
240
|
+
$slots: Readonly<{
|
|
241
|
+
leading?(): unknown;
|
|
242
|
+
trailing?(): unknown;
|
|
243
|
+
}> & {
|
|
244
|
+
leading?(): unknown;
|
|
245
|
+
trailing?(): unknown;
|
|
243
246
|
};
|
|
244
247
|
}) | null;
|
|
245
248
|
popoverRef: ({
|
|
@@ -366,8 +369,10 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
|
|
|
366
369
|
anchorStyle: Record<string, string>;
|
|
367
370
|
popoverId: string;
|
|
368
371
|
} & {} & import('vue').ComponentCustomProperties & {} & {
|
|
369
|
-
$slots: {
|
|
370
|
-
default
|
|
372
|
+
$slots: Readonly<{
|
|
373
|
+
default(): unknown;
|
|
374
|
+
}> & {
|
|
375
|
+
default(): unknown;
|
|
371
376
|
};
|
|
372
377
|
}) | null;
|
|
373
378
|
listContainerRef: import('vue').CreateComponentPublicInstanceWithMixins<Readonly<import('@knime/kds-components').KdsListContainerProps> & Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdsCreateLinkModal.vue.d.ts","sourceRoot":"","sources":["../../../src/toolbar/KdsCreateLinkModal.vue"],"names":[],"mappings":"AA2JA,OAAO,EAAE,KAAK,GAAG,EAAY,QAAQ,EAAc,MAAM,KAAK,CAAC;AAI/D,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAVF,CAzH8B;;;;;;;;mCAyH9B,CAzDG;2BAyDH,CAvDe;6BAuDf,CApDuB;4BAoDvB,CAlDmC;4BAkDnC,CAhDK;qCAgDL,CA7CI;6BA6CJ,CA5CU;oCA4CV,CA1CY;iCA0CZ,CAxCQ;oCAwCR,CAvCiC;qCAuCjC,CAnCmB;8BAmCnB,CAjCgB;qCAiChB,CA/BU;kCA+BV,CA3BM;uCA2BN,CAtBa;wCAsBb,CAnBU;oCAmBV,CAjBgC;6BAiBhC,CAfgB;qCAehB,CAXM;qCAWN,CAPmB;qCAOnB,CALkC;sCAGG,CAAC;6CAEnB,CAAA;qCAEV,CAAC;qCAIP,CAAC;yCAEa,CAAC;6BAIM,CAAC;kCAGjB,CAAC;kCAG0B,CAAC;gCAI3B,CAAC;iCAEC,CAAC;gCAKO,CAAA
|
|
1
|
+
{"version":3,"file":"KdsCreateLinkModal.vue.d.ts","sourceRoot":"","sources":["../../../src/toolbar/KdsCreateLinkModal.vue"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knime/kds-rich-text-editor",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Package containing the RichTextEditor component which follows the KNIME Design System",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,40 +31,38 @@
|
|
|
31
31
|
"dist",
|
|
32
32
|
"CHANGELOG.md"
|
|
33
33
|
],
|
|
34
|
-
"peerDependencies": {
|
|
35
|
-
"vue": "~3.5.0",
|
|
36
|
-
"@knime/kds-components": "^1.1.0",
|
|
37
|
-
"@knime/kds-styles": "^1.1.0"
|
|
38
|
-
},
|
|
39
34
|
"dependencies": {
|
|
40
|
-
"@knime/utils": "^1.11.
|
|
35
|
+
"@knime/utils": "^1.11.1",
|
|
41
36
|
"consola": "^3.4.2",
|
|
42
|
-
"@tiptap/core": "^3.
|
|
43
|
-
"@tiptap/extension-character-count": "^3.
|
|
44
|
-
"@tiptap/extension-hard-break": "^3.
|
|
45
|
-
"@tiptap/extension-heading": "^3.
|
|
46
|
-
"@tiptap/extension-link": "^3.
|
|
47
|
-
"@tiptap/extension-paragraph": "^3.
|
|
48
|
-
"@tiptap/extension-text-align": "^3.
|
|
49
|
-
"@tiptap/pm": "^3.
|
|
50
|
-
"@tiptap/starter-kit": "^3.
|
|
51
|
-
"@tiptap/vue-3": "^3.
|
|
37
|
+
"@tiptap/core": "^3.27.1",
|
|
38
|
+
"@tiptap/extension-character-count": "^3.27.1",
|
|
39
|
+
"@tiptap/extension-hard-break": "^3.27.1",
|
|
40
|
+
"@tiptap/extension-heading": "^3.27.1",
|
|
41
|
+
"@tiptap/extension-link": "^3.27.1",
|
|
42
|
+
"@tiptap/extension-paragraph": "^3.27.1",
|
|
43
|
+
"@tiptap/extension-text-align": "^3.27.1",
|
|
44
|
+
"@tiptap/pm": "^3.27.1",
|
|
45
|
+
"@tiptap/starter-kit": "^3.27.1",
|
|
46
|
+
"@tiptap/vue-3": "^3.27.1",
|
|
47
|
+
"@knime/kds-components": "^1.2.1",
|
|
48
|
+
"@knime/kds-styles": "^1.2.1"
|
|
52
49
|
},
|
|
53
50
|
"devDependencies": {
|
|
54
|
-
"@storybook/vue3-vite": "^10.4.
|
|
55
|
-
"@vitejs/plugin-vue": "^6.0.
|
|
56
|
-
"@vue/test-utils": "^2.4.
|
|
51
|
+
"@storybook/vue3-vite": "^10.4.6",
|
|
52
|
+
"@vitejs/plugin-vue": "^6.0.7",
|
|
53
|
+
"@vue/test-utils": "^2.4.11",
|
|
57
54
|
"@vue/tsconfig": "^0.9.1",
|
|
58
|
-
"storybook": "^10.4.
|
|
55
|
+
"storybook": "^10.4.6",
|
|
59
56
|
"ts-morph": "^28.0.0",
|
|
60
57
|
"vite": "^7.3.2",
|
|
61
58
|
"vite-plugin-dts": "^4.5.4",
|
|
62
59
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
63
60
|
"vite-svg-loader": "^5.1.1",
|
|
64
|
-
"vue": "3.5.
|
|
65
|
-
"vue-tsc": "^3.3.4"
|
|
66
|
-
|
|
67
|
-
|
|
61
|
+
"vue": "3.5.38",
|
|
62
|
+
"vue-tsc": "^3.3.4"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"vue": "~3.5.0"
|
|
68
66
|
},
|
|
69
67
|
"engines": {
|
|
70
68
|
"node": "24.10.0",
|