From 18805b88e1e82c6d508f00c38932ab755d28be0a Mon Sep 17 00:00:00 2001 From: woywro Date: Thu, 16 Apr 2026 13:15:15 +0200 Subject: [PATCH 1/5] fix(studio): add TipTap editor content styles for all toolbar elements --- packages/studio/src/lib/runtime-ui/styles.css | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) diff --git a/packages/studio/src/lib/runtime-ui/styles.css b/packages/studio/src/lib/runtime-ui/styles.css index 76e61257..fba47b9c 100644 --- a/packages/studio/src/lib/runtime-ui/styles.css +++ b/packages/studio/src/lib/runtime-ui/styles.css @@ -284,6 +284,185 @@ text-decoration: none; } + /* ── TipTap editor content ────────────────────────────────── */ + + .mdcms-studio-runtime .tiptap p { + margin-top: 0; + margin-bottom: 0.75em; + } + + .mdcms-studio-runtime .tiptap > *:first-child { + margin-top: 0; + } + + .mdcms-studio-runtime .tiptap > *:last-child { + margin-bottom: 0; + } + + /* Headings */ + .mdcms-studio-runtime .tiptap h1 { + font-size: 2rem; + line-height: 1.2; + letter-spacing: -0.02em; + margin-top: 1.5em; + margin-bottom: 0.5em; + } + + .mdcms-studio-runtime .tiptap h2 { + font-size: 1.5rem; + line-height: 1.25; + letter-spacing: -0.01em; + margin-top: 1.25em; + margin-bottom: 0.5em; + } + + /* Inline marks */ + .mdcms-studio-runtime .tiptap mark { + background-color: #fef08a; + border-radius: 0.125rem; + padding: 0.125em 0; + } + + .dark .mdcms-studio-runtime .tiptap mark { + background-color: rgba(250, 204, 21, 0.3); + } + + .mdcms-studio-runtime .tiptap :not(pre) > code { + background-color: var(--code-bg); + border-radius: 0.25rem; + padding: 0.125rem 0.375rem; + font-family: var(--font-mono); + font-size: 0.8125rem; + } + + /* Links */ + .mdcms-studio-runtime .tiptap a { + color: var(--primary); + text-decoration: underline; + text-underline-offset: 2px; + } + + /* Unordered list */ + .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) { + list-style-type: disc; + padding-left: 1.5rem; + margin-top: 0.5em; + margin-bottom: 0.75em; + } + + .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) li { + margin-bottom: 0.25em; + } + + .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) li p { + margin-bottom: 0; + } + + /* Ordered list */ + .mdcms-studio-runtime .tiptap ol { + list-style-type: decimal; + padding-left: 1.5rem; + margin-top: 0.5em; + margin-bottom: 0.75em; + } + + .mdcms-studio-runtime .tiptap ol li { + margin-bottom: 0.25em; + } + + .mdcms-studio-runtime .tiptap ol li p { + margin-bottom: 0; + } + + /* Task list */ + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] { + list-style: none; + padding-left: 0; + margin-top: 0.5em; + margin-bottom: 0.75em; + } + + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li { + display: flex; + align-items: flex-start; + gap: 0.5rem; + margin-bottom: 0.25em; + } + + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li > label { + display: flex; + align-items: center; + flex-shrink: 0; + margin-top: 0.25rem; + user-select: none; + } + + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li > label input[type="checkbox"] { + cursor: pointer; + accent-color: var(--primary); + } + + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li > div { + flex: 1; + min-width: 0; + } + + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li > div p { + margin-bottom: 0; + } + + .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li[data-checked="true"] > div { + text-decoration: line-through; + opacity: 0.6; + } + + /* Blockquote */ + .mdcms-studio-runtime .tiptap blockquote { + border-left: 3px solid var(--border); + padding-left: 1rem; + margin-left: 0; + margin-top: 0.75em; + margin-bottom: 0.75em; + color: var(--foreground-muted); + } + + /* Code block */ + .mdcms-studio-runtime .tiptap pre { + background-color: var(--code-bg); + padding: 0.75rem 1rem; + overflow-x: auto; + font-family: var(--font-mono); + font-size: 0.8125rem; + line-height: 1.6; + margin-top: 0.75em; + margin-bottom: 0.75em; + border: 1px solid var(--border); + } + + .mdcms-studio-runtime .tiptap pre code { + background: none; + padding: 0; + border-radius: 0; + font-size: inherit; + color: inherit; + } + + /* Horizontal rule */ + .mdcms-studio-runtime .tiptap hr { + border: none; + border-top: 1px solid var(--divider); + margin-top: 1.5em; + margin-bottom: 1.5em; + } + + /* Image */ + .mdcms-studio-runtime .tiptap img { + max-width: 100%; + height: auto; + margin-top: 0.75em; + margin-bottom: 0.75em; + } + .mdcms-studio-runtime :is(button, input, textarea, select) { font: inherit; } From 65b20d303499123960087c75d1ab4cf32aacb96e Mon Sep 17 00:00:00 2001 From: woywro Date: Thu, 16 Apr 2026 13:19:37 +0200 Subject: [PATCH 2/5] fix(studio): add TipTap editor content styles for all toolbar elements --- packages/studio/src/lib/runtime-ui/styles.css | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/studio/src/lib/runtime-ui/styles.css b/packages/studio/src/lib/runtime-ui/styles.css index fba47b9c..74e94620 100644 --- a/packages/studio/src/lib/runtime-ui/styles.css +++ b/packages/studio/src/lib/runtime-ui/styles.css @@ -288,7 +288,7 @@ .mdcms-studio-runtime .tiptap p { margin-top: 0; - margin-bottom: 0.75em; + margin-bottom: 0.5em; } .mdcms-studio-runtime .tiptap > *:first-child { @@ -304,16 +304,16 @@ font-size: 2rem; line-height: 1.2; letter-spacing: -0.02em; - margin-top: 1.5em; - margin-bottom: 0.5em; + margin-top: 0.75em; + margin-bottom: 0.25em; } .mdcms-studio-runtime .tiptap h2 { font-size: 1.5rem; line-height: 1.25; letter-spacing: -0.01em; - margin-top: 1.25em; - margin-bottom: 0.5em; + margin-top: 0.75em; + margin-bottom: 0.25em; } /* Inline marks */ @@ -346,12 +346,12 @@ .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) { list-style-type: disc; padding-left: 1.5rem; - margin-top: 0.5em; - margin-bottom: 0.75em; + margin-top: 0.25em; + margin-bottom: 0.5em; } .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) li { - margin-bottom: 0.25em; + margin-bottom: 0.125em; } .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) li p { @@ -362,12 +362,12 @@ .mdcms-studio-runtime .tiptap ol { list-style-type: decimal; padding-left: 1.5rem; - margin-top: 0.5em; - margin-bottom: 0.75em; + margin-top: 0.25em; + margin-bottom: 0.5em; } .mdcms-studio-runtime .tiptap ol li { - margin-bottom: 0.25em; + margin-bottom: 0.125em; } .mdcms-studio-runtime .tiptap ol li p { @@ -378,15 +378,15 @@ .mdcms-studio-runtime .tiptap ul[data-type="taskList"] { list-style: none; padding-left: 0; - margin-top: 0.5em; - margin-bottom: 0.75em; + margin-top: 0.25em; + margin-bottom: 0.5em; } .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li { display: flex; align-items: flex-start; gap: 0.5rem; - margin-bottom: 0.25em; + margin-bottom: 0.125em; } .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li > label { @@ -421,8 +421,8 @@ border-left: 3px solid var(--border); padding-left: 1rem; margin-left: 0; - margin-top: 0.75em; - margin-bottom: 0.75em; + margin-top: 0.5em; + margin-bottom: 0.5em; color: var(--foreground-muted); } @@ -434,8 +434,8 @@ font-family: var(--font-mono); font-size: 0.8125rem; line-height: 1.6; - margin-top: 0.75em; - margin-bottom: 0.75em; + margin-top: 0.5em; + margin-bottom: 0.5em; border: 1px solid var(--border); } @@ -451,16 +451,16 @@ .mdcms-studio-runtime .tiptap hr { border: none; border-top: 1px solid var(--divider); - margin-top: 1.5em; - margin-bottom: 1.5em; + margin-top: 1em; + margin-bottom: 1em; } /* Image */ .mdcms-studio-runtime .tiptap img { max-width: 100%; height: auto; - margin-top: 0.75em; - margin-bottom: 0.75em; + margin-top: 0.5em; + margin-bottom: 0.5em; } .mdcms-studio-runtime :is(button, input, textarea, select) { From eedc540f7e2e6882753ad08cdacc3e419df65379 Mon Sep 17 00:00:00 2001 From: woywro Date: Thu, 16 Apr 2026 14:06:35 +0200 Subject: [PATCH 3/5] fix(studio): add link popover and preserve selection on blur --- packages/studio/src/lib/editor-extensions.ts | 58 +++++- .../components/editor/tiptap-editor.tsx | 166 ++++++++++++++++-- packages/studio/src/lib/runtime-ui/styles.css | 6 + 3 files changed, 215 insertions(+), 15 deletions(-) diff --git a/packages/studio/src/lib/editor-extensions.ts b/packages/studio/src/lib/editor-extensions.ts index 35e5833a..27977854 100644 --- a/packages/studio/src/lib/editor-extensions.ts +++ b/packages/studio/src/lib/editor-extensions.ts @@ -1,13 +1,62 @@ +import { Extension } from "@tiptap/core"; +import type { Extensions } from "@tiptap/core"; import Highlight from "@tiptap/extension-highlight"; +import Link from "@tiptap/extension-link"; import TaskItem from "@tiptap/extension-task-item"; import TaskList from "@tiptap/extension-task-list"; import Underline from "@tiptap/extension-underline"; import { Markdown } from "@tiptap/markdown"; +import { Plugin, PluginKey } from "@tiptap/pm/state"; +import { Decoration, DecorationSet } from "@tiptap/pm/view"; import StarterKit from "@tiptap/starter-kit"; -import type { Extensions } from "@tiptap/core"; import { MdxComponentExtension } from "./mdx-component-extension.js"; +const BlurSelectionPreserver = Extension.create({ + name: "blurSelectionPreserver", + + addProseMirrorPlugins() { + const pluginKey = new PluginKey("blurSelectionPreserver"); + let focused = true; + + return [ + new Plugin({ + key: pluginKey, + props: { + decorations(state) { + if (focused) return DecorationSet.empty; + const { from, to } = state.selection; + if (from === to) return DecorationSet.empty; + return DecorationSet.create(state.doc, [ + Decoration.inline(from, to, { + class: "ProseMirror-blur-selection", + }), + ]); + }, + }, + view(editorView) { + const onFocus = () => { + focused = true; + editorView.dispatch(editorView.state.tr); + }; + const onBlur = () => { + focused = false; + editorView.dispatch(editorView.state.tr); + }; + editorView.dom.addEventListener("focus", onFocus); + editorView.dom.addEventListener("blur", onBlur); + return { + destroy() { + editorView.dom.removeEventListener("focus", onFocus); + editorView.dom.removeEventListener("blur", onBlur); + }, + }; + }, + }), + ]; + }, +}); + export function createEditorExtensions(options?: { mdxComponent?: Extensions[number]; }): Extensions { @@ -15,6 +64,13 @@ export function createEditorExtensions(options?: { StarterKit, Underline, Highlight, + BlurSelectionPreserver, + Link.configure({ + openOnClick: false, + HTMLAttributes: { + rel: "noopener noreferrer nofollow", + }, + }), TaskList, TaskItem.configure({ nested: true, diff --git a/packages/studio/src/lib/runtime-ui/components/editor/tiptap-editor.tsx b/packages/studio/src/lib/runtime-ui/components/editor/tiptap-editor.tsx index 71aefd05..51d793a1 100644 --- a/packages/studio/src/lib/runtime-ui/components/editor/tiptap-editor.tsx +++ b/packages/studio/src/lib/runtime-ui/components/editor/tiptap-editor.tsx @@ -30,6 +30,8 @@ import { import { Bold, Code, + CornerDownLeft, + ExternalLink, FileCode, Highlighter, Image as ImageIcon, @@ -44,6 +46,7 @@ import { Redo, Strikethrough, Table2, + Trash2, Underline as UnderlineIcon, Undo, } from "lucide-react"; @@ -74,6 +77,7 @@ import { type SlashTriggerCoords, } from "./mdx-component-slash.js"; import { Button } from "../ui/button.js"; +import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover.js"; import { Separator } from "../ui/separator.js"; import { cn } from "../../lib/utils.js"; @@ -200,6 +204,8 @@ export const TipTapEditor = forwardRef( useState(null); const [slashPickerCoords, setSlashPickerCoords] = useState(null); + const [linkPopoverOpen, setLinkPopoverOpen] = useState(false); + const [linkInputValue, setLinkInputValue] = useState(""); const editorWrapperRef = useRef(null); const pickerSourceRef = useRef(pickerSource); pickerSourceRef.current = pickerSource; @@ -625,6 +631,15 @@ export const TipTapEditor = forwardRef( return run( () => editor?.chain().focus().setHorizontalRule().run() ?? false, ); + case "link": { + if (!editor) return; + const existingHref = editor.getAttributes("link").href as + | string + | undefined; + setLinkInputValue(existingHref ?? ""); + setLinkPopoverOpen(true); + return; + } case "insertComponent": setPickerSource((currentSource) => currentSource === "toolbar" ? null : "toolbar", @@ -663,11 +678,37 @@ export const TipTapEditor = forwardRef( return isActive("blockquote"); case "codeBlock": return isActive("codeBlock"); + case "link": + return isActive("link"); default: return false; } }; + const submitLink = () => { + if (!editor) return; + const url = linkInputValue.trim(); + if (url) { + editor.chain().focus().setLink({ href: url }).run(); + } + setLinkPopoverOpen(false); + setLinkInputValue(""); + }; + + const removeLink = () => { + if (!editor) return; + editor.chain().focus().unsetLink().run(); + setLinkPopoverOpen(false); + setLinkInputValue(""); + }; + + const openLink = () => { + const url = linkInputValue.trim(); + if (url) { + window.open(url, "_blank", "noopener,noreferrer"); + } + }; + const insertSelectedComponent = ( component: (typeof catalogComponents)[number], ) => { @@ -728,18 +769,8 @@ export const TipTapEditor = forwardRef( {groupIndex > 0 ? ( ) : null} - {group.items.map((item) => ( -
{ - if ( - item.availability === "enabled" && - !isEditorReadOnly - ) { - triggerToolbarItem(item.id); - } - }} - > + {group.items.map((item) => { + const toolbarButton = ( ( > {renderToolbarItem(item.id)} -
- ))} + ); + + if (item.id === "link") { + return ( + { + setLinkPopoverOpen(open); + if (!open) setLinkInputValue(""); + }} + > + { + if ( + item.availability === "enabled" && + !isEditorReadOnly + ) { + e.preventDefault(); + triggerToolbarItem(item.id); + } + }} + > +
{toolbarButton}
+
+ e.preventDefault()} + > +
+ + setLinkInputValue(e.target.value) + } + onKeyDown={(e) => { + if (e.key === "Enter") { + e.preventDefault(); + submitLink(); + } + if (e.key === "Escape") { + setLinkPopoverOpen(false); + setLinkInputValue(""); + } + }} + placeholder="Paste a link..." + className="h-7 w-48 rounded border-none bg-transparent px-2 text-sm outline-none placeholder:text-muted-foreground" + /> + + + + +
+
+
+ ); + } + + return ( +
{ + if ( + item.availability === "enabled" && + !isEditorReadOnly + ) { + triggerToolbarItem(item.id); + } + }} + > + {toolbarButton} +
+ ); + })} ))} diff --git a/packages/studio/src/lib/runtime-ui/styles.css b/packages/studio/src/lib/runtime-ui/styles.css index 74e94620..62aabdbc 100644 --- a/packages/studio/src/lib/runtime-ui/styles.css +++ b/packages/studio/src/lib/runtime-ui/styles.css @@ -342,6 +342,12 @@ text-underline-offset: 2px; } + /* Selection highlight preserved when the editor loses focus */ + .mdcms-studio-runtime .tiptap .ProseMirror-blur-selection { + background-color: color-mix(in srgb, var(--primary) 25%, transparent); + border-radius: 2px; + } + /* Unordered list */ .mdcms-studio-runtime .tiptap ul:not([data-type="taskList"]) { list-style-type: disc; From 35e2e79e79ee4495454dc12a79b1b8f85b4224c1 Mon Sep 17 00:00:00 2001 From: woywro Date: Thu, 16 Apr 2026 14:26:23 +0200 Subject: [PATCH 4/5] fix: ci issues --- packages/studio/src/lib/runtime-ui/styles.css | 112 ++++++++++-------- 1 file changed, 64 insertions(+), 48 deletions(-) diff --git a/packages/studio/src/lib/runtime-ui/styles.css b/packages/studio/src/lib/runtime-ui/styles.css index 62aabdbc..69fe9d20 100644 --- a/packages/studio/src/lib/runtime-ui/styles.css +++ b/packages/studio/src/lib/runtime-ui/styles.css @@ -9,42 +9,42 @@ @custom-variant dark (&:is(.dark *)); :root { - --background: #FCF9F8; - --background-subtle: #F6F3F2; - --foreground: #1C1B1B; + --background: #fcf9f8; + --background-subtle: #f6f3f2; + --foreground: #1c1b1b; --foreground-muted: #444655; - --primary: #2F49E5; - --primary-foreground: #FFFFFF; - --accent: #D6FF4D; + --primary: #2f49e5; + --primary-foreground: #ffffff; + --accent: #d6ff4d; --accent-hover: #c8ea3a; --accent-subtle: rgba(47, 73, 229, 0.08); - --accent-foreground: #1C1B1B; - --secondary: #1C1B1B; - --secondary-foreground: #FFFFFF; - --muted: #F6F3F2; + --accent-foreground: #1c1b1b; + --secondary: #1c1b1b; + --secondary-foreground: #ffffff; + --muted: #f6f3f2; --muted-foreground: #444655; - --border: #C5C5D8; - --border-focus: #2F49E5; - --input: #C5C5D8; - --ring: #2F49E5; - --card: #FFFFFF; - --card-foreground: #1C1B1B; - --popover: #FFFFFF; - --popover-foreground: #1C1B1B; + --border: #c5c5d8; + --border-focus: #2f49e5; + --input: #c5c5d8; + --ring: #2f49e5; + --card: #ffffff; + --card-foreground: #1c1b1b; + --popover: #ffffff; + --popover-foreground: #1c1b1b; --destructive: #ef4444; - --destructive-foreground: #FFFFFF; + --destructive-foreground: #ffffff; --success: #22c55e; --success-subtle: #f0fdf4; --warning: #f59e0b; --warning-subtle: #fffbeb; - --blue-100: #EAEDFF; - --vibrant-green: #CAF240; - --neutral-grey: #E5E2E1; - --light-blue: #E2E2F1; - --code-bg: #F0EDEC; + --blue-100: #eaedff; + --vibrant-green: #caf240; + --neutral-grey: #e5e2e1; + --light-blue: #e2e2f1; + --code-bg: #f0edec; --divider: rgba(197, 197, 216, 0.3); --card-border: rgba(197, 197, 216, 0.2); - --chart-1: #2F49E5; + --chart-1: #2f49e5; --chart-2: #22c55e; --chart-3: #f59e0b; --chart-4: #6366f1; @@ -54,7 +54,7 @@ --sidebar: var(--background); --sidebar-foreground: var(--foreground); --sidebar-primary: var(--primary); - --sidebar-primary-foreground: #FFFFFF; + --sidebar-primary-foreground: #ffffff; --sidebar-accent: var(--accent-subtle); --sidebar-accent-foreground: var(--primary); --sidebar-border: var(--border); @@ -62,42 +62,42 @@ } .dark { - --background: #1C1B1B; + --background: #1c1b1b; --background-subtle: #242322; - --foreground: #FCF9F8; + --foreground: #fcf9f8; --foreground-muted: #9a9caa; - --primary: #6B7FFF; - --primary-foreground: #FFFFFF; - --accent: #CAF240; + --primary: #6b7fff; + --primary-foreground: #ffffff; + --accent: #caf240; --accent-hover: #b8d635; --accent-subtle: rgba(107, 127, 255, 0.1); - --accent-foreground: #FCF9F8; - --secondary: #FCF9F8; - --secondary-foreground: #1C1B1B; + --accent-foreground: #fcf9f8; + --secondary: #fcf9f8; + --secondary-foreground: #1c1b1b; --muted: #2a2928; --muted-foreground: #9a9caa; --border: rgba(197, 197, 216, 0.2); - --border-focus: #6B7FFF; + --border-focus: #6b7fff; --input: rgba(197, 197, 216, 0.3); - --ring: #6B7FFF; + --ring: #6b7fff; --card: #242322; - --card-foreground: #FCF9F8; + --card-foreground: #fcf9f8; --popover: #242322; - --popover-foreground: #FCF9F8; + --popover-foreground: #fcf9f8; --destructive: #f87171; - --destructive-foreground: #1C1B1B; + --destructive-foreground: #1c1b1b; --success: #4ade80; --success-subtle: #14532d; --warning: #fbbf24; --warning-subtle: #422006; --blue-100: rgba(234, 237, 255, 0.1); - --vibrant-green: #CAF240; + --vibrant-green: #caf240; --neutral-grey: #3a3938; --light-blue: rgba(226, 226, 241, 0.15); --code-bg: #2a2928; --divider: rgba(197, 197, 216, 0.15); --card-border: rgba(197, 197, 216, 0.1); - --chart-1: #6B7FFF; + --chart-1: #6b7fff; --chart-2: #4ade80; --chart-3: #fbbf24; --chart-4: #818cf8; @@ -106,7 +106,7 @@ --sidebar: var(--background); --sidebar-foreground: var(--foreground); --sidebar-primary: var(--primary); - --sidebar-primary-foreground: #FFFFFF; + --sidebar-primary-foreground: #ffffff; --sidebar-accent: var(--accent-subtle); --sidebar-accent-foreground: var(--primary); --sidebar-border: var(--border); @@ -115,9 +115,12 @@ @theme inline { /* Font families */ - --font-heading: "Space Grotesk Variable", "Space Grotesk", system-ui, sans-serif; - --font-body: "Inter Variable", "Inter", "Inter Fallback", system-ui, sans-serif; - --font-sans: "Inter Variable", "Inter", "Inter Fallback", system-ui, sans-serif; + --font-heading: + "Space Grotesk Variable", "Space Grotesk", system-ui, sans-serif; + --font-body: + "Inter Variable", "Inter", "Inter Fallback", system-ui, sans-serif; + --font-sans: + "Inter Variable", "Inter", "Inter Fallback", system-ui, sans-serif; --font-mono: "Geist Mono Variable", "Geist Mono", monospace; /* Heading type scale */ @@ -271,7 +274,11 @@ var(--accent-subtle), transparent 24rem ), - linear-gradient(180deg, var(--background) 0%, var(--background-subtle) 100%); + linear-gradient( + 180deg, + var(--background) 0%, + var(--background-subtle) 100% + ); } .mdcms-studio-runtime :is(h1, h2, h3, h4, h5, h6) { @@ -403,7 +410,12 @@ user-select: none; } - .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li > label input[type="checkbox"] { + .mdcms-studio-runtime + .tiptap + ul[data-type="taskList"] + li + > label + input[type="checkbox"] { cursor: pointer; accent-color: var(--primary); } @@ -417,7 +429,11 @@ margin-bottom: 0; } - .mdcms-studio-runtime .tiptap ul[data-type="taskList"] li[data-checked="true"] > div { + .mdcms-studio-runtime + .tiptap + ul[data-type="taskList"] + li[data-checked="true"] + > div { text-decoration: line-through; opacity: 0.6; } From 859b3abe8cf9ec228c36fa2da43e6a878cf82956 Mon Sep 17 00:00:00 2001 From: woywro Date: Thu, 16 Apr 2026 14:34:01 +0200 Subject: [PATCH 5/5] fix: ci errors --- bun.lock | 9 +++++---- packages/studio/package.json | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index 380d0d05..aabbc413 100644 --- a/bun.lock +++ b/bun.lock @@ -19,7 +19,7 @@ }, "apps/cli": { "name": "@mdcms/cli", - "version": "0.1.4", + "version": "0.1.5", "bin": { "mdcms": "./dist/bin/mdcms.js", }, @@ -110,7 +110,7 @@ }, "packages/shared": { "name": "@mdcms/shared", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "elysia": "^1.4.25", "tslib": "^2.3.0", @@ -120,14 +120,14 @@ }, "packages/studio": { "name": "@mdcms/studio", - "version": "0.1.3", + "version": "0.1.4", "dependencies": { "@elysiajs/eden": "^1.4.8", "@floating-ui/react-dom": "^2.1.8", "@fontsource-variable/geist-mono": "^5.2.7", "@fontsource-variable/inter": "^5.2.8", "@fontsource-variable/space-grotesk": "^5.2.10", - "@mdcms/shared": "^0.1.3", + "@mdcms/shared": "^0.1.4", "@radix-ui/react-avatar": "1.1.11", "@radix-ui/react-checkbox": "1.3.3", "@radix-ui/react-collapsible": "1.1.12", @@ -154,6 +154,7 @@ "@tiptap/extension-typography": "^3.7.0", "@tiptap/extension-underline": "^3.7.0", "@tiptap/markdown": "^3.7.0", + "@tiptap/pm": "^3.7.0", "@tiptap/react": "^3.7.0", "@tiptap/starter-kit": "^3.7.0", "class-variance-authority": "^0.7.1", diff --git a/packages/studio/package.json b/packages/studio/package.json index 013a1b4f..0bc1f549 100644 --- a/packages/studio/package.json +++ b/packages/studio/package.json @@ -107,6 +107,7 @@ "@tanstack/react-query": "^5.96.2", "@tiptap/core": "^3.7.0", "@tiptap/extension-highlight": "^3.7.0", + "@tiptap/pm": "^3.7.0", "@tiptap/extension-image": "^3.7.0", "@tiptap/extension-link": "^3.7.0", "@tiptap/extension-placeholder": "^3.7.0",