Hard Break
The hardBreak
node is used to represent a line break <br>
in the document.
import 'prosekit/basic/style.css' import 'prosekit/basic/typography.css' import { createEditor } from 'prosekit/core' import { ProseKit } from 'prosekit/solid' import { defineExtension } from './extension' import Toolbar from './toolbar' const defaultContent = `<p> O’er all the hilltops<br /> Is quiet now,<br /> In all the treetops<br /> Hearest thou<br /> Hardly a breath;<br /> The birds are asleep in the trees:<br /> Wait, soon like these<br /> Thou too shalt rest.<br /> </p> ` export default function Editor() { const editor = createEditor({ extension: defineExtension(), defaultContent }) return ( <ProseKit editor={editor}> <div class="box-border h-full w-full min-h-36 overflow-y-hidden overflow-x-hidden rounded-md border border-solid border-gray-200 dark:border-gray-700 shadow flex flex-col bg-white dark:bg-gray-950 color-black dark:color-white"> <Toolbar /> <div class="relative w-full flex-1 box-border overflow-y-scroll"> <div ref={editor.mount} class="ProseMirror box-border min-h-full px-[max(4rem,_calc(50%-20rem))] py-8 outline-none outline-0 [&_span[data-mention=user]]:text-blue-500 [&_span[data-mention=tag]]:text-violet-500"></div> </div> </div> </ProseKit> ) }
import { defineBaseKeymap, union, } from 'prosekit/core' import { defineDoc } from 'prosekit/extensions/doc' import { defineHardBreak } from 'prosekit/extensions/hard-break' import { defineParagraph } from 'prosekit/extensions/paragraph' import { defineText } from 'prosekit/extensions/text' export function defineExtension() { return union( defineBaseKeymap(), defineDoc(), defineText(), defineParagraph(), defineHardBreak(), ) } export type EditorExtension = ReturnType<typeof defineExtension>
import { useEditor } from 'prosekit/solid' import Button from './button' import type { EditorExtension } from './extension' export default function Toolbar() { const editor = useEditor<EditorExtension>({ update: true }) return ( <div class="z-2 box-border border-gray-200 dark:border-gray-800 border-solid border-l-0 border-r-0 border-t-0 border-b flex flex-wrap gap-1 p-2 items-center"> <Button pressed={() => false} disabled={() => !editor().commands.insertHardBreak.canExec()} onClick={() => editor().commands.insertHardBreak()} > Insert Hard Break </Button> </div> ) }
import type { ParentProps } from 'solid-js' export default function Button({ pressed, disabled, onClick, children, }: ParentProps<{ pressed: () => boolean disabled?: () => boolean onClick: () => void }>) { return ( <button data-state={pressed() ? 'on' : 'off'} disabled={disabled?.()} onClick={() => onClick()} onMouseDown={(event) => event.preventDefault()} class="outline-unset focus-visible:outline-unset flex items-center justify-center rounded-md p-2 font-medium transition focus-visible:ring-2 text-sm focus-visible:ring-gray-900 dark:focus-visible:ring-gray-300 disabled:pointer-events-none min-w-9 min-h-9 disabled:opacity-50 hover:disabled:opacity-50 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-800 data-[state=on]:bg-gray-200 dark:data-[state=on]:bg-gray-700" > {children} </button> ) }
import {
} from 'prosekit/extensions/hard-break' const defineHardBreak function defineHardBreak(): HardBreakExtension
= extension const extension: HardBreakExtension
() defineHardBreak function defineHardBreak(): HardBreakExtension
. editor const editor: Editor<HardBreakExtension>
. commands
Editor<HardBreakExtension>.commands: ToCommandAction<{ insertHardBreak: []; }>
All {@link CommandAction } s defined by the editor.() insertHardBreak
insertHardBreak: CommandAction () => boolean
Execute the current command. Return `true` if the command was successfully executed, otherwise `false`.
Non-Apple | Apple | Description |
---|---|---|
Ctrl-Enter | Command-Enter | Insert a hard break node at the current text cursor position |
Shift-Enter | Shift-Enter | Insert a hard break node at the current text cursor position |