@knime/kds-rich-text-editor 0.31.1 → 0.31.3
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 +16 -0
- package/dist/index.css +28 -28
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/src/KdsRichTextEditor.vue.d.ts.map +1 -1
- package/dist/src/KdsRichTextInput.vue.d.ts +1 -0
- package/dist/src/KdsRichTextInput.vue.d.ts.map +1 -1
- package/dist/src/toolbar/KdsCreateLinkModal.vue.d.ts +5 -5
- package/dist/src/toolbar/KdsCreateLinkModal.vue.d.ts.map +1 -1
- package/dist/src/types.d.ts +7 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @knime/kds-rich-text-editor
|
|
2
2
|
|
|
3
|
+
## 0.31.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [61ce7ea]
|
|
8
|
+
- @knime/kds-components@0.31.3
|
|
9
|
+
- @knime/kds-styles@0.31.3
|
|
10
|
+
|
|
11
|
+
## 0.31.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- a49b5cd: `KdsRichTextInput`: always renders the editor with a border and shows a focus ring around the whole field (toolbar included) while the editing area is focused. The ring is not shown when focus moves to a toolbar button.
|
|
16
|
+
- @knime/kds-components@0.31.2
|
|
17
|
+
- @knime/kds-styles@0.31.2
|
|
18
|
+
|
|
3
19
|
## 0.31.1
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/index.css
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.editor-wrapper {
|
|
30
|
-
&[data-v-
|
|
30
|
+
&[data-v-656edd08] {
|
|
31
31
|
/* Fixed 44px toolbar height per the design (28px content + 8px padding on
|
|
32
32
|
* each side). Defined explicitly so the toolbar expand/collapse transition
|
|
33
33
|
* has a concrete target height; the small toolbar buttons (24px) center
|
|
@@ -40,16 +40,16 @@
|
|
|
40
40
|
position: relative;
|
|
41
41
|
isolation: isolate;
|
|
42
42
|
}
|
|
43
|
-
&.disabled[data-v-
|
|
43
|
+
&.disabled[data-v-656edd08] {
|
|
44
44
|
color: var(--kds-color-text-and-icon-disabled);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/* stylelint-disable selector-class-pattern */
|
|
49
49
|
.rich-text-editor {
|
|
50
|
-
&[data-v-
|
|
50
|
+
&[data-v-656edd08] {
|
|
51
51
|
height: 100%;
|
|
52
|
-
max-height: var(--
|
|
52
|
+
max-height: var(--c8f7b19c);
|
|
53
53
|
padding: var(--kds-spacing-container-0-5x);
|
|
54
54
|
overflow-y: auto;
|
|
55
55
|
|
|
@@ -57,15 +57,15 @@
|
|
|
57
57
|
/* stylelint-enable selector-class-pattern */
|
|
58
58
|
}
|
|
59
59
|
&.editable {
|
|
60
|
-
&[data-v-
|
|
60
|
+
&[data-v-656edd08] {
|
|
61
61
|
cursor: text;
|
|
62
62
|
background: var(--kds-color-background-input-initial);
|
|
63
63
|
}
|
|
64
|
-
&[data-v-
|
|
65
|
-
min-height: var(--
|
|
64
|
+
&[data-v-656edd08] .ProseMirror {
|
|
65
|
+
min-height: var(--v7aa834f8);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
&[data-v-
|
|
68
|
+
&[data-v-656edd08] .ProseMirror {
|
|
69
69
|
height: 100%;
|
|
70
70
|
|
|
71
71
|
/* The following rich text styles are kept in sync with KdsDescription. */
|
|
@@ -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(--v8d1d5f60);
|
|
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
|
-
|
|
229
|
-
outline-offset: var(--kds-spacing-offset-focus);
|
|
230
|
-
}
|
|
231
|
-
&[data-v-de71d3af] .ProseMirror:focus-visible,
|
|
232
|
-
&[data-v-de71d3af] .ProseMirror:focus {
|
|
227
|
+
&[data-v-656edd08] .ProseMirror:focus-visible,
|
|
228
|
+
&[data-v-656edd08] .ProseMirror:focus {
|
|
233
229
|
outline: transparent;
|
|
234
230
|
}
|
|
235
231
|
}
|
|
236
232
|
.editor-wrapper.with-border {
|
|
237
|
-
&[data-v-
|
|
233
|
+
&[data-v-656edd08] {
|
|
238
234
|
border: var(--kds-border-action-input);
|
|
239
235
|
border-radius: var(--kds-border-radius-container-0-37x);
|
|
240
236
|
}
|
|
241
|
-
&.disabled[data-v-
|
|
237
|
+
&.disabled[data-v-656edd08] {
|
|
242
238
|
border: var(--kds-border-action-disabled);
|
|
243
239
|
}
|
|
244
|
-
& .toolbar-wrapper[data-v-
|
|
240
|
+
& .toolbar-wrapper[data-v-656edd08] {
|
|
245
241
|
border-top-left-radius: var(--kds-border-radius-container-0-37x);
|
|
246
242
|
border-top-right-radius: var(--kds-border-radius-container-0-37x);
|
|
247
243
|
}
|
|
248
|
-
& .rich-text-editor[data-v-
|
|
244
|
+
& .rich-text-editor[data-v-656edd08] {
|
|
249
245
|
border-bottom-right-radius: var(--kds-border-radius-container-0-37x);
|
|
250
246
|
border-bottom-left-radius: var(--kds-border-radius-container-0-37x);
|
|
251
247
|
}
|
|
252
248
|
}
|
|
249
|
+
.editor-wrapper.show-focus-ring[data-v-656edd08] {
|
|
250
|
+
outline: var(--kds-border-action-focused);
|
|
251
|
+
outline-offset: var(--kds-spacing-offset-focus);
|
|
252
|
+
}
|
|
253
253
|
.embedded-toolbar {
|
|
254
|
-
&[data-v-
|
|
254
|
+
&[data-v-656edd08] {
|
|
255
255
|
height: var(--toolbar-height);
|
|
256
256
|
padding: var(--kds-spacing-container-0-5x);
|
|
257
257
|
overflow-x: auto;
|
|
@@ -262,26 +262,26 @@ 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-656edd08]::-webkit-scrollbar {
|
|
266
266
|
display: none;
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
|
-
.expand-enter-active[data-v-
|
|
270
|
-
.expand-leave-active[data-v-
|
|
269
|
+
.expand-enter-active[data-v-656edd08],
|
|
270
|
+
.expand-leave-active[data-v-656edd08] {
|
|
271
271
|
transition: all 0.15s ease;
|
|
272
272
|
}
|
|
273
|
-
.expand-enter-from[data-v-
|
|
274
|
-
.expand-leave-to[data-v-
|
|
273
|
+
.expand-enter-from[data-v-656edd08],
|
|
274
|
+
.expand-leave-to[data-v-656edd08] {
|
|
275
275
|
height: 0;
|
|
276
276
|
opacity: 0;
|
|
277
277
|
}
|
|
278
|
-
.expand-enter-to[data-v-
|
|
279
|
-
.expand-leave-from[data-v-
|
|
278
|
+
.expand-enter-to[data-v-656edd08],
|
|
279
|
+
.expand-leave-from[data-v-656edd08] {
|
|
280
280
|
height: var(--toolbar-height);
|
|
281
281
|
opacity: 1;
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
-
.kds-rich-text-input[data-v-
|
|
284
|
+
.kds-rich-text-input[data-v-134ca24c] {
|
|
285
285
|
display: flex;
|
|
286
286
|
flex-direction: column;
|
|
287
287
|
}
|
package/dist/index.js
CHANGED
|
@@ -732,7 +732,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
732
732
|
preserveSubTextSpace: { type: Boolean, default: false },
|
|
733
733
|
customEscapeHandler: { type: Function, default: void 0 },
|
|
734
734
|
ariaLabel: { default: () => void 0 },
|
|
735
|
-
ariaLabelledby: { default: () => void 0 }
|
|
735
|
+
ariaLabelledby: { default: () => void 0 },
|
|
736
|
+
wrapperFocusRing: { type: Boolean, default: false }
|
|
736
737
|
}, {
|
|
737
738
|
"modelValue": {},
|
|
738
739
|
"modelModifiers": {}
|
|
@@ -740,9 +741,9 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
740
741
|
emits: /* @__PURE__ */ mergeModels(["blur"], ["update:modelValue"]),
|
|
741
742
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
742
743
|
useCssVars((_ctx) => ({
|
|
743
|
-
"
|
|
744
|
-
"
|
|
745
|
-
"
|
|
744
|
+
"c8f7b19c": maxHeightStyle.value,
|
|
745
|
+
"v7aa834f8": minHeightStyle.value,
|
|
746
|
+
"v8d1d5f60": externalIcon
|
|
746
747
|
}));
|
|
747
748
|
const hardCharacterLimit = Math.max(
|
|
748
749
|
__props.characterLimit.maxCharacters ?? 1e3,
|
|
@@ -802,6 +803,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
802
803
|
...__props.customExtensions
|
|
803
804
|
];
|
|
804
805
|
const subTextId = useId();
|
|
806
|
+
const isEditorFocused = ref(false);
|
|
805
807
|
const editor = useEditor({
|
|
806
808
|
content: modelValue.value,
|
|
807
809
|
editable: __props.editable && !__props.disabled,
|
|
@@ -817,7 +819,13 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
817
819
|
onUpdate: () => {
|
|
818
820
|
modelValue.value = editor.value?.getHTML() ?? "";
|
|
819
821
|
},
|
|
820
|
-
|
|
822
|
+
onFocus: () => {
|
|
823
|
+
isEditorFocused.value = true;
|
|
824
|
+
},
|
|
825
|
+
onBlur: () => {
|
|
826
|
+
isEditorFocused.value = false;
|
|
827
|
+
emit("blur");
|
|
828
|
+
}
|
|
821
829
|
});
|
|
822
830
|
const minHeightStyle = computed(
|
|
823
831
|
() => __props.minHeight ? `${__props.minHeight}px` : "initial"
|
|
@@ -889,7 +897,14 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
889
897
|
return (_ctx, _cache) => {
|
|
890
898
|
return openBlock(), createElementBlock("div", null, [
|
|
891
899
|
createElementVNode("div", {
|
|
892
|
-
class: normalizeClass([
|
|
900
|
+
class: normalizeClass([
|
|
901
|
+
"editor-wrapper",
|
|
902
|
+
{
|
|
903
|
+
"with-border": __props.withBorder,
|
|
904
|
+
disabled: __props.disabled,
|
|
905
|
+
"show-focus-ring": __props.wrapperFocusRing && isEditorFocused.value
|
|
906
|
+
}
|
|
907
|
+
])
|
|
893
908
|
}, [
|
|
894
909
|
hasTools.value ? (openBlock(), createBlock(Transition, {
|
|
895
910
|
key: 0,
|
|
@@ -949,7 +964,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
949
964
|
}
|
|
950
965
|
});
|
|
951
966
|
|
|
952
|
-
const KdsRichTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-
|
|
967
|
+
const KdsRichTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-656edd08"]]);
|
|
953
968
|
|
|
954
969
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
955
970
|
__name: "KdsRichTextInput",
|
|
@@ -965,7 +980,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
965
980
|
hotkeyFormatter: { type: Function },
|
|
966
981
|
customExtensions: {},
|
|
967
982
|
autofocus: { type: Boolean },
|
|
968
|
-
withBorder: { type: Boolean },
|
|
969
983
|
disabled: { type: Boolean },
|
|
970
984
|
linkToolOptions: {},
|
|
971
985
|
characterLimit: {},
|
|
@@ -1007,6 +1021,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1007
1021
|
createVNode(KdsRichTextEditor, mergeProps({ ref: "editor" }, editorProps, {
|
|
1008
1022
|
modelValue: modelValue.value,
|
|
1009
1023
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
1024
|
+
"with-border": "",
|
|
1025
|
+
"wrapper-focus-ring": "",
|
|
1010
1026
|
"aria-label": __props.label ? void 0 : __props.ariaLabel,
|
|
1011
1027
|
"aria-labelledby": __props.label ? labelId.value : void 0,
|
|
1012
1028
|
onBlur: _cache[1] || (_cache[1] = ($event) => emit("blur"))
|
|
@@ -1016,7 +1032,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1016
1032
|
}
|
|
1017
1033
|
});
|
|
1018
1034
|
|
|
1019
|
-
const KdsRichTextInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
1035
|
+
const KdsRichTextInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-134ca24c"]]);
|
|
1020
1036
|
|
|
1021
1037
|
export { KdsCreateLinkModal, KdsRichTextEditor, KdsRichTextInput, kdsCharacterCountDisplay, kdsCharacterCountDisplays, kdsDefaultLinkToolOptions };
|
|
1022
1038
|
//# sourceMappingURL=index.js.map
|
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 { computed, nextTick, onMounted, useId, useSlots, watch } from \"vue\";\nimport CharacterCount from \"@tiptap/extension-character-count\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { type AnyExtension, EditorContent, useEditor } from \"@tiptap/vue-3\";\n\nimport { KdsSubText } from \"@knime/kds-components\";\nimport { navigatorUtils } from \"@knime/utils\";\n\nimport ExternalLinkIconUrl from \"../node_modules/@knime/kds-styles/dist/img/icons/external-link.svg?url\";\n\nimport { 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} = 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\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 onBlur: () => emit(\"blur\"),\n});\n\nconst minHeightStyle = computed(() =>\n minHeight ? `${minHeight}px` : \"initial\",\n);\n\nconst focus = () => {\n editor.value?.commands?.focus?.();\n};\n\ndefineExpose({ focus });\n\nconst maxHeightStyle = computed(() =>\n maxHeight ? `${maxHeight}px` : \"initial\",\n);\n\nwatch(modelValue, (newValue) => {\n if (!editor.value) {\n return;\n }\n if (editor.value.getHTML() === newValue) {\n return;\n }\n\n editor.value.commands.setContent(newValue ?? \"\");\n});\n\nwatch(\n [() => editable, () => disabled],\n ([newEditable, newDisabled], [oldEditable, oldDisabled]) => {\n if (!editor.value) {\n return;\n }\n\n const oldValue = oldEditable && !oldDisabled;\n const newValue = newEditable && !newDisabled;\n if (oldValue === newValue) {\n return;\n }\n\n editor.value.setEditable(newValue);\n\n if (autofocus) {\n focus();\n }\n },\n);\n\nonMounted(async () => {\n if (editable && autofocus) {\n await nextTick();\n focus();\n }\n});\n\nconst hasCustomToolbar = slots.customToolbar;\nconst hasTools = computed(() => Object.keys(baseExtensions).length);\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 :class=\"['editor-wrapper', { 'with-border': withBorder, disabled }]\">\n <Transition v-if=\"hasTools\" name=\"expand\" :css=\"!hasCustomToolbar\">\n <div\n v-if=\"editor && editable && !disabled\"\n :class=\"[\n 'toolbar-wrapper',\n { 'embedded-toolbar': !hasCustomToolbar },\n ]\"\n >\n <RichTextEditorBaseToolbar\n :editor=\"editor\"\n :base-extensions=\"baseExtensions\"\n :link-tool-options=\"linkToolOptions\"\n >\n <template #default=\"{ tools }\">\n <slot\n name=\"customToolbar\"\n :editor=\"editor\"\n :tools=\"tools\"\n :hotkey-formatter=\"hotkeyFormatter\"\n >\n <RichTextEditorToolbar\n :editor=\"editor\"\n :tools=\"tools\"\n :hotkey-formatter=\"hotkeyFormatter\"\n />\n </slot>\n </template>\n <template #linkModal=\"{ linkTool }\">\n <KdsCreateLinkModal\n v-if=\"isToolEnabled('link') && linkTool\"\n v-bind=\"linkTool.props\"\n v-on=\"linkTool.events\"\n />\n </template>\n </RichTextEditorBaseToolbar>\n </div>\n </Transition>\n\n <EditorContent\n class=\"rich-text-editor\"\n :editor=\"editor\"\n :class=\"{ editable: editable && !disabled }\"\n :aria-disabled=\"disabled || undefined\"\n />\n </div>\n\n <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). Defined explicitly so the toolbar expand/collapse transition\n * has a concrete target height; the small toolbar buttons (24px) center\n * within the content area. */\n --toolbar-height: calc(\n var(--kds-dimension-component-height-1-75x) +\n var(--kds-spacing-container-0-5x) * 2\n );\n\n position: relative;\n isolation: isolate;\n\n &.disabled {\n color: var(--kds-color-text-and-icon-disabled);\n }\n}\n\n/* stylelint-disable selector-class-pattern */\n.rich-text-editor {\n height: 100%;\n max-height: v-bind(\"maxHeightStyle\");\n padding: var(--kds-spacing-container-0-5x);\n overflow-y: auto;\n\n &.editable {\n cursor: text;\n background: var(--kds-color-background-input-initial);\n\n & :deep(.ProseMirror) {\n min-height: v-bind(\"minHeightStyle\");\n }\n }\n\n /* stylelint-disable knime/no-deep-nesting */\n & :deep(.ProseMirror) {\n height: 100%;\n\n /* The following rich text styles are kept in sync with KdsDescription. */\n p {\n padding: 0;\n margin: 0 0 var(--kds-spacing-container-0-37x);\n font: var(--kds-font-base-body-small);\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p.small-text {\n font: var(--kds-font-base-subtext-xsmall);\n }\n\n strong,\n b {\n font-weight: var(--kds-core-font-weight-strong);\n }\n\n i,\n em {\n font-style: italic;\n }\n\n h3 {\n margin: 0;\n font: var(--kds-font-base-body-medium-strong);\n }\n\n h4 {\n margin: 0;\n font: var(--kds-font-base-body-small-strong);\n }\n\n pre {\n width: fit-content;\n padding: var(--kds-spacing-container-0-75x);\n font: var(--kds-font-base-code-xsmall);\n background: var(--kds-color-surface-subtle);\n border-radius: var(--kds-border-radius-container-0-25x);\n\n & > code {\n padding: 0;\n background: none;\n }\n }\n\n & :not(pre) > code {\n padding: var(--kds-spacing-container-0-12x)\n var(--kds-spacing-container-0-25x);\n font: var(--kds-font-base-code-xsmall);\n background: var(--kds-color-surface-subtle);\n box-decoration-break: clone;\n border-radius: var(--kds-border-radius-container-0-12x);\n }\n\n /** keep in sync with KdsLink */\n a {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n max-width: 100%;\n padding: var(--kds-spacing-container-none)\n var(--kds-spacing-container-0-10x);\n font: var(--kds-font-base-body-small);\n color: var(--kds-color-text-and-icon-neutral);\n white-space: nowrap;\n text-decoration-line: underline;\n cursor: pointer;\n border-radius: var(--kds-border-radius-container-0-12x);\n\n &:focus-visible {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-container-none);\n }\n\n /** internal links */\n &[href^=\"http\"] {\n --link-color: var(--kds-color-text-and-icon-selected);\n\n color: var(--link-color);\n\n &:visited {\n --link-color: var(--kds-color-text-and-icon-info);\n\n color: var(--link-color);\n }\n\n &:hover {\n --link-color: var(--kds-color-text-and-icon-primary-inverted);\n\n color: var(--link-color);\n background-color: var(--kds-color-background-primary-bold-hover);\n }\n\n &:active {\n --link-color: var(--kds-color-text-and-icon-selected-inverted);\n\n color: var(--link-color);\n background-color: var(--kds-color-background-primary-bold-active);\n }\n\n &::after {\n display: block;\n width: var(--kds-dimension-icon-0-56x);\n height: var(--kds-dimension-icon-0-56x);\n margin-left: var(--kds-spacing-container-0-12x);\n content: \"\";\n background-color: var(--link-color);\n mask-image: v-bind(\"externalIcon\");\n mask-repeat: no-repeat;\n mask-size: contain;\n }\n }\n\n /** external links */\n &:not([href^=\"http\"]) {\n color: var(--kds-color-text-and-icon-neutral);\n\n &:visited {\n color: var(--kds-color-text-and-icon-info);\n }\n\n &:hover {\n background-color: var(--kds-color-background-neutral-hover);\n }\n\n &:active {\n background-color: var(--kds-color-background-neutral-active);\n }\n }\n }\n\n ol,\n ul {\n padding-left: var(--kds-spacing-container-2x);\n }\n\n dd {\n margin-left: var(--kds-spacing-container-1x);\n }\n\n table {\n border-spacing: var(--kds-spacing-container-0-25x) 0;\n border-collapse: separate;\n\n td,\n th {\n padding: var(--kds-spacing-container-0-25x);\n }\n\n th {\n font: var(--kds-font-base-body-small-strong);\n text-align: left;\n border-bottom: var(--kds-border-width-icon-stroke-l) solid\n var(--kds-color-border-neutral);\n }\n\n td {\n font: var(--kds-font-base-body-small);\n border-bottom: var(--kds-border-width-icon-stroke-s) solid\n var(--kds-color-border-neutral);\n }\n }\n }\n\n & :has(:deep(.ProseMirror:focus)) {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-offset-focus);\n }\n\n & :deep(.ProseMirror:focus-visible),\n & :deep(.ProseMirror:focus) {\n outline: transparent;\n }\n /* stylelint-enable selector-class-pattern */\n}\n\n.editor-wrapper.with-border {\n border: var(--kds-border-action-input);\n border-radius: var(--kds-border-radius-container-0-37x);\n\n &.disabled {\n border: var(--kds-border-action-disabled);\n }\n\n & .toolbar-wrapper {\n border-top-left-radius: var(--kds-border-radius-container-0-37x);\n border-top-right-radius: var(--kds-border-radius-container-0-37x);\n }\n\n & .rich-text-editor {\n border-bottom-right-radius: var(--kds-border-radius-container-0-37x);\n border-bottom-left-radius: var(--kds-border-radius-container-0-37x);\n }\n}\n\n.embedded-toolbar {\n height: var(--toolbar-height);\n padding: var(--kds-spacing-container-0-5x);\n overflow-x: auto;\n overscroll-behavior: contain;\n white-space: pre;\n scrollbar-width: none; /* for firefox */\n background: var(--kds-color-background-input-initial);\n border-bottom: var(--kds-border-base-muted);\n -ms-overflow-style: none; /* needed to hide scroll bar in edge */\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.expand-enter-active,\n.expand-leave-active {\n transition: all 0.15s ease;\n}\n\n.expand-enter-from,\n.expand-leave-to {\n height: 0;\n opacity: 0;\n}\n\n.expand-enter-to,\n.expand-leave-from {\n height: var(--toolbar-height);\n opacity: 1;\n}\n</style>\n","<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 :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","_Transition","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.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 <Transition v-if=\"hasTools\" name=\"expand\" :css=\"!hasCustomToolbar\">\n <div\n v-if=\"editor && editable && !disabled\"\n :class=\"[\n 'toolbar-wrapper',\n { 'embedded-toolbar': !hasCustomToolbar },\n ]\"\n >\n <RichTextEditorBaseToolbar\n :editor=\"editor\"\n :base-extensions=\"baseExtensions\"\n :link-tool-options=\"linkToolOptions\"\n >\n <template #default=\"{ tools }\">\n <slot\n name=\"customToolbar\"\n :editor=\"editor\"\n :tools=\"tools\"\n :hotkey-formatter=\"hotkeyFormatter\"\n >\n <RichTextEditorToolbar\n :editor=\"editor\"\n :tools=\"tools\"\n :hotkey-formatter=\"hotkeyFormatter\"\n />\n </slot>\n </template>\n <template #linkModal=\"{ linkTool }\">\n <KdsCreateLinkModal\n v-if=\"isToolEnabled('link') && linkTool\"\n v-bind=\"linkTool.props\"\n v-on=\"linkTool.events\"\n />\n </template>\n </RichTextEditorBaseToolbar>\n </div>\n </Transition>\n\n <EditorContent\n class=\"rich-text-editor\"\n :editor=\"editor\"\n :class=\"{ editable: editable && !disabled }\"\n :aria-disabled=\"disabled || undefined\"\n />\n </div>\n\n <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). Defined explicitly so the toolbar expand/collapse transition\n * has a concrete target height; the small toolbar buttons (24px) center\n * within the content area. */\n --toolbar-height: calc(\n var(--kds-dimension-component-height-1-75x) +\n var(--kds-spacing-container-0-5x) * 2\n );\n\n position: relative;\n isolation: isolate;\n\n &.disabled {\n color: var(--kds-color-text-and-icon-disabled);\n }\n}\n\n/* stylelint-disable selector-class-pattern */\n.rich-text-editor {\n height: 100%;\n max-height: v-bind(\"maxHeightStyle\");\n padding: var(--kds-spacing-container-0-5x);\n overflow-y: auto;\n\n &.editable {\n cursor: text;\n background: var(--kds-color-background-input-initial);\n\n & :deep(.ProseMirror) {\n min-height: v-bind(\"minHeightStyle\");\n }\n }\n\n /* stylelint-disable knime/no-deep-nesting */\n & :deep(.ProseMirror) {\n height: 100%;\n\n /* The following rich text styles are kept in sync with KdsDescription. */\n p {\n padding: 0;\n margin: 0 0 var(--kds-spacing-container-0-37x);\n font: var(--kds-font-base-body-small);\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n p.small-text {\n font: var(--kds-font-base-subtext-xsmall);\n }\n\n strong,\n b {\n font-weight: var(--kds-core-font-weight-strong);\n }\n\n i,\n em {\n font-style: italic;\n }\n\n h3 {\n margin: 0;\n font: var(--kds-font-base-body-medium-strong);\n }\n\n h4 {\n margin: 0;\n font: var(--kds-font-base-body-small-strong);\n }\n\n pre {\n width: fit-content;\n padding: var(--kds-spacing-container-0-75x);\n font: var(--kds-font-base-code-xsmall);\n background: var(--kds-color-surface-subtle);\n border-radius: var(--kds-border-radius-container-0-25x);\n\n & > code {\n padding: 0;\n background: none;\n }\n }\n\n & :not(pre) > code {\n padding: var(--kds-spacing-container-0-12x)\n var(--kds-spacing-container-0-25x);\n font: var(--kds-font-base-code-xsmall);\n background: var(--kds-color-surface-subtle);\n box-decoration-break: clone;\n border-radius: var(--kds-border-radius-container-0-12x);\n }\n\n /** keep in sync with KdsLink */\n a {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n max-width: 100%;\n padding: var(--kds-spacing-container-none)\n var(--kds-spacing-container-0-10x);\n font: var(--kds-font-base-body-small);\n color: var(--kds-color-text-and-icon-neutral);\n white-space: nowrap;\n text-decoration-line: underline;\n cursor: pointer;\n border-radius: var(--kds-border-radius-container-0-12x);\n\n &:focus-visible {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-container-none);\n }\n\n /** internal links */\n &[href^=\"http\"] {\n --link-color: var(--kds-color-text-and-icon-selected);\n\n color: var(--link-color);\n\n &:visited {\n --link-color: var(--kds-color-text-and-icon-info);\n\n color: var(--link-color);\n }\n\n &:hover {\n --link-color: var(--kds-color-text-and-icon-primary-inverted);\n\n color: var(--link-color);\n background-color: var(--kds-color-background-primary-bold-hover);\n }\n\n &:active {\n --link-color: var(--kds-color-text-and-icon-selected-inverted);\n\n color: var(--link-color);\n background-color: var(--kds-color-background-primary-bold-active);\n }\n\n &::after {\n display: block;\n width: var(--kds-dimension-icon-0-56x);\n height: var(--kds-dimension-icon-0-56x);\n margin-left: var(--kds-spacing-container-0-12x);\n content: \"\";\n background-color: var(--link-color);\n mask-image: v-bind(\"externalIcon\");\n mask-repeat: no-repeat;\n mask-size: contain;\n }\n }\n\n /** external links */\n &:not([href^=\"http\"]) {\n color: var(--kds-color-text-and-icon-neutral);\n\n &:visited {\n color: var(--kds-color-text-and-icon-info);\n }\n\n &:hover {\n background-color: var(--kds-color-background-neutral-hover);\n }\n\n &:active {\n background-color: var(--kds-color-background-neutral-active);\n }\n }\n }\n\n ol,\n ul {\n padding-left: var(--kds-spacing-container-2x);\n }\n\n dd {\n margin-left: var(--kds-spacing-container-1x);\n }\n\n table {\n border-spacing: var(--kds-spacing-container-0-25x) 0;\n border-collapse: separate;\n\n td,\n th {\n padding: var(--kds-spacing-container-0-25x);\n }\n\n th {\n font: var(--kds-font-base-body-small-strong);\n text-align: left;\n border-bottom: var(--kds-border-width-icon-stroke-l) solid\n var(--kds-color-border-neutral);\n }\n\n td {\n font: var(--kds-font-base-body-small);\n border-bottom: var(--kds-border-width-icon-stroke-s) solid\n var(--kds-color-border-neutral);\n }\n }\n }\n\n & :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\n.expand-enter-active,\n.expand-leave-active {\n transition: all 0.15s ease;\n}\n\n.expand-enter-from,\n.expand-leave-to {\n height: 0;\n opacity: 0;\n}\n\n.expand-enter-to,\n.expand-leave-from {\n height: var(--toolbar-height);\n opacity: 1;\n}\n</style>\n","<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","_Transition","RichTextEditorBaseToolbar","_withCtx","_mergeProps","_toHandlers","_createPropsRestProxy"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdsRichTextEditor.vue.d.ts","sourceRoot":"","sources":["../../src/KdsRichTextEditor.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KdsRichTextEditor.vue.d.ts","sourceRoot":"","sources":["../../src/KdsRichTextEditor.vue"],"names":[],"mappings":"AAsoBA,OAAO,KAAK,EAA2B,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAW/E,KAAK,WAAW,GAAG,sBAAsB,CAAC;AAgQ1C,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WAqKT,OAAO,IAA6B;;;;;;YAVd,GAAG;;;;EAetC;AAyBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;6FASnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -52,6 +52,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
52
52
|
readonly customEscapeHandler?: (() => boolean) | undefined;
|
|
53
53
|
readonly ariaLabel?: string | undefined;
|
|
54
54
|
readonly ariaLabelledby?: string | undefined;
|
|
55
|
+
readonly wrapperFocusRing?: boolean | undefined;
|
|
55
56
|
readonly "onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
56
57
|
readonly onBlur?: (() => any) | undefined;
|
|
57
58
|
} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdsRichTextInput.vue.d.ts","sourceRoot":"","sources":["../../src/KdsRichTextInput.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KdsRichTextInput.vue.d.ts","sourceRoot":"","sources":["../../src/KdsRichTextInput.vue"],"names":[],"mappings":"AA6EA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,KAAK,WAAW,GAAG,qBAAqB,CAAC;AAkCzC,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,WAAW,CAAC;;mBAL4B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmIwrmB,GAAG,8CAA8C,GAAG,yBAAyB,GAAG,6DAAmC,GAAG;;;;;;;;;;;;;;;;;;AAlB31mB,wBAUG"}
|
|
@@ -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 onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
104
103
|
readonly onClick?: ((event: MouseEvent) => any) | undefined;
|
|
104
|
+
readonly onBlur?: ((event: FocusEvent) => 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: "click", event: MouseEvent) => void) & ((event: "blur", event: FocusEvent) => 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
|
-
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
160
159
|
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
160
|
+
onBlur?: ((event: FocusEvent) => 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
|
-
blur: (event: FocusEvent) => any;
|
|
170
169
|
click: (event: MouseEvent) => any;
|
|
170
|
+
blur: (event: FocusEvent) => 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
|
-
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
232
231
|
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
232
|
+
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
233
233
|
onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
234
234
|
onKeydown?: ((event: KeyboardEvent) => any) | undefined;
|
|
235
235
|
onPaste?: ((event: ClipboardEvent) => any) | undefined;
|
|
@@ -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":"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;gCAAmE,CAAC;+BAGtD,CAAC;gCAC1B,CAAC;kCAMR,CAAC;gCAGA,CAAF;8CAIyB,CAAC;;;;;;;;;;;;;;;;;0BAgCgC,CAAC;;kBAAsC,CAAC;oBAA2B,CAAA;mBAC7D,CAAC;mBACpC,CAAA;4BACN,CAAC;oBAA2B,CAAC;2BACtC,CAAC;wBACL,CAAC;2BACS,CAAC;4BAEC,CAAC;qBAEP,CAAA;4BACI,CAAC;yBAA+B,CAAC;8BAAqC,CAAA;+BACxF,CAAC;2BAAiC,CAAC;oBAA2B,CAAC;4BACvD,CAAC;4BACoB,CAAC;4BAChC,CAAA;6BACM,CAAC;oCACI,CAAC;4BAAkC,CAAC;4BAIxC,CAAC;gCACS,CAAC;oBACiB,CAAC;yBACpC,CAAA;yBAEyB,CAAC;uBAA8B,CAAC;wBACrD,CAAC;;uBACgC,CAAC;uBAA2D,CAAA;sBAElF,CAAC;uBAC4B,CAAC;yBACa,CAAC;uBAGlC,CAAC;qCACiC,CAAC;;+BAAiF,CAAC;;;;;;;;;;4BAmBzE,CAAC;uBACjC,CAAC;2BACzB,CAAC;uBAAoD,CAAC;4BACxD,CAAC;uBACqB,CAAC;yBACiB,CAAC;2BACG,CAAA;6BACxB,CAAC;6BAA0D,CAAC;;gBAC3F,yDAAyD,CAAA,CAAzD,CAAA,yDAAyD;yBAAF,CAAA;6BAEf,CAAC;+BAIhC,CAAC;6BAGK,CAAC;;;;wCAWc,GAC7B,8CAA8C,GAAG,yBAC3B,GAAG,6DACpB,GAAG,sEAAuE,CAAA;;sBAG9D,CAAC;;cAA8B,CAAC;gBAChC,CAAC;eAEH,CAAC;eAA8B,CAAC;wBAAuC,CAAC;gBAG7E,CAAC;uBAA6B,CAAC;oBACxB,CAAC;uBAA8B,CAAC;wBACrB,CAAC;iBACwB,CAAC;wBAErC,CAAC;qBAA2B,CAAC;0BAAiC,CAAA;2BAAiC,CAAC;uBACtG,CAAC;gBAAuB,CAAC;wBAC1B,CAAC;wBACgB,CAAC;wBAA8B,CAAC;yBACtC,CAAA;gCACS,CAAC;wBAA8B,CAAC;wBAKvD,CAAC;4BACK,CAAC;gBACf,CAAC;qBACU,CAAC;qBAE0B,CAAC;mBAA0B,CAAC;oBACvD,CAAC;;mBACX,CAAC;mBACoB,CAAC;kBACqB,CAAC;mBACK,CAAC;qBACtB,CAAC;mBACtB,CAAC;iCAGG,CAAC;;2BAAoF,CAAC;;;uBAG7E,CAAC;wBAAkC,CAAC;;;;;;;mCAQ5C,CAAC;6BAGd,CAAA;oCACsC,CAAC;kCACO,CAAC;sCAAyD,CAAC;gCAE3F,CAAC;kCACW,CAAC;gDAIC,CAAC;8CAEtB,CAAC;;mCAAsF,CAAC;6BACnF,CAAC;oCAEoB,CAAC;kCAGhC,CAAC;sCACyC,CAAA;gCAE5C,CAAA;;;;;;8CAO4B,CAAC;;;;;;;;;;;;;;;;;0BAcuC,CAAC;;oBAEzD,CAAC;2BAGa,CAAC;yBAEY,CAAC;6BAErC,CAAC;uBAIJ,CAAA;;yBAA6C,CAAC;uCAIf,CAAC;;0BACQ,CAAC;;oBACV,CAAC;2BAEf,CAAC;yBAEF,CAAC;6BACT,CAAC;uBACT,CAAA;;;;;;;;qCAQwB,CAAC;;;;;;;4BAerB,CAAC;uBAAoD,CAAC;2BACX,CAAC;uBAEV,CAAC;4BAAyD,CAAC;uBAAoD,CAAC;yBAAsD,CAAC;2BAAwD,CAAC;6BAA0D,CAAC;6BAA0D,CAAC;yBAAsD,CAAC;yBAAsD,CAAC;6BAA0D,CAAC;+BAAwH,CAAC;6BAAsH,CAAC;;;;wCAA4V,GAAG,8CAA8C,GAAG,yBAAyB,GAAG,6DAA6D,GAAG,sEAAsE,CAAC;;sBAA8H,CAAC;;gBAAiC,CAAC;uBAAiE,CAAC;qBAA+D,CAAC;yBAAgC,CAAC;mBAAyB,CAAC;;qBAAqC,CAAC;mCAAqG,CAAC;;sBAAuC,CAAC;;gBAAiC,CAAC;uBAAiE,CAAC;qBAA+D,CAAC;yBAAgC,CAAC;mBAAyB,CAAC;;;;;;;;iCAA+L,CAAC;;;;;;uBAA8P,CAAC;;;;uBAAgN,CAAC,MAAM,CAAC;;;;;;;;;0BAAob,CAAC;;;;;;;;;;;uBAAsc,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBArTnlH,CAzH8B;;;AA6Z9B,wBASG"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -140,6 +140,12 @@ export type KdsRichTextEditorProps = {
|
|
|
140
140
|
* ID of the element that labels this editor (for aria-labelledby).
|
|
141
141
|
*/
|
|
142
142
|
ariaLabelledby?: string;
|
|
143
|
+
/**
|
|
144
|
+
* When true, the focus ring is drawn around the whole editor (the bordered
|
|
145
|
+
* box including the toolbar) once the editing area is focused, instead of
|
|
146
|
+
* around the content area only. Primarily used by `KdsRichTextInput`.
|
|
147
|
+
*/
|
|
148
|
+
wrapperFocusRing?: boolean;
|
|
143
149
|
};
|
|
144
150
|
export type KdsRichTextInputProps = {
|
|
145
151
|
/**
|
|
@@ -161,6 +167,6 @@ export type KdsRichTextInputProps = {
|
|
|
161
167
|
* info toggle button is only visible when hovering the field.
|
|
162
168
|
*/
|
|
163
169
|
description?: string;
|
|
164
|
-
} & Omit<KdsRichTextEditorProps, "ariaLabel" | "ariaLabelledby">;
|
|
170
|
+
} & Omit<KdsRichTextEditorProps, "ariaLabel" | "ariaLabelledby" | "withBorder" | "wrapperFocusRing">;
|
|
165
171
|
export {};
|
|
166
172
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAC;AAE3E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,KAAK,cAAc,GACf,uBAAuB,GACvB,CAAC;KAAG,GAAG,IAAI,MAAM,uBAAuB,GAAG,KAAK;CAAE,GAAG;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE3E,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;IACpD;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC;IACpC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"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": "0.31.
|
|
3
|
+
"version": "0.31.3",
|
|
4
4
|
"description": "Package containing the RichTextEditor component which follows the KNIME Design System",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
],
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"vue": "~3.5.0",
|
|
36
|
-
"@knime/kds-components": "^0.31.
|
|
36
|
+
"@knime/kds-components": "^0.31.3"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@knime/utils": "^1.11.0",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@tiptap/pm": "^3.25.0",
|
|
49
49
|
"@tiptap/starter-kit": "^3.25.0",
|
|
50
50
|
"@tiptap/vue-3": "^3.25.0",
|
|
51
|
-
"@knime/kds-styles": "^0.31.
|
|
51
|
+
"@knime/kds-styles": "^0.31.3"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@storybook/vue3-vite": "^10.4.3",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"vite-svg-loader": "^5.1.1",
|
|
64
64
|
"vue": "3.5.32",
|
|
65
65
|
"vue-tsc": "^3.3.4",
|
|
66
|
-
"@knime/kds-components": "^0.31.
|
|
66
|
+
"@knime/kds-components": "^0.31.3"
|
|
67
67
|
},
|
|
68
68
|
"engines": {
|
|
69
69
|
"node": "24.10.0",
|