白板实用程序
从 @tiptap-pro/extension-whiteboard 导入这些函数和常量。
- 白板上的位置和尺寸以板为单位,舞台上的位置以屏幕像素为单位。
insertShapesInFront、removeShapes、restackShapes和keepShapeHeights适用于构建自己的交易的代码,例如 AI 工具。
Attribute、Attributes、Editor、JSONContent、NodeViewRenderer 和 NodeWithPos 来自 @tiptap/core。 Node 来自 @tiptap/pm/model,EditorState 和 Transaction 来自 @tiptap/pm/state,EditorView 来自 @tiptap/pm/view。
attachStage
允许用户在 stage 中使用 editor 的板:平移和缩放、缩放快捷键、使用形状工具和选择框进行绘图。按住 Space、中间按钮或手动工具的平移胜过绘图和选择。在触摸屏上,当选择工具处于活动状态时,一根手指在空白板上进行平移,两根手指进行平移和缩放。使用白板的images,用户放置的图像文件会落在放置的位置,并将图像文件粘贴到舞台中央。
import { attachStage } from '@tiptap-pro/extension-whiteboard'
const detach = attachStage({ stage, editor, updateCamera: setCamera })参数 (StageOptions)
stage(HTMLElement):白板周围的元素,获取其指针和滚轮事件。editor(Editor):白板的编辑器。updateCamera(UpdateCamera):当用户平移、缩放或使用缩放快捷方式时移动摄像机。fitInsets?(() => number | Insets):返回 Shift + 1 适合视图的形状周围保持自由的空间,例如白板下方。默认值:每个边缘 64 个屏幕像素。
返回 (() => void)
再次分离所有内容的函数。
该阶段需要 position: relative、overflow: clip 和 touch-action: none。视口是容纳编辑器的元素,位于其左上角,包含 position: absolute、top: 0、left: 0 和 transform-origin: 0 0。用toCssTransform(camera)移动它,并将其上的--zoom设置为变焦。
toCssTransform
返回显示带有摄像头的白板的 CSS 转换。变换移动的视口需要 transform-origin: 0 0。
import { toCssTransform } from '@tiptap-pro/extension-whiteboard'
toCssTransform({ x: 100, y: 50, zoom: 2 }) // 'translate(100px, 50px) scale(2)'参数
camera(Camera):白板的摄像头。
返回 (string)
视口 transform 的值。
zoomAtStageCenter
更改舞台中间周围的缩放,使板保持在那里。
import { zoomAtStageCenter } from '@tiptap-pro/extension-whiteboard'
resetZoomButton.addEventListener('click', () => {
zoomAtStageCenter({ stage, updateCamera: setCamera, nextZoom: () => 1 })
})参数 (ZoomAtStageCenterOptions)
stage(HTMLElement):白板周围的元件。updateCamera(UpdateCamera):移动摄像机。nextZoom((zoom: number) => number):返回当前缩放的新缩放。
stepZoom
返回某个方向的下一个缩放步骤,例如应用程序的缩放按钮。步骤之间的缩放将转到该方向的下一步。步长从 10% 到 400%。
import { stepZoom } from '@tiptap-pro/extension-whiteboard'
stepZoom({ zoom: 1, direction: 1 }) // 1.25
stepZoom({ zoom: 0.8, direction: -1 }) // 0.75参数 (StepZoomOptions)
zoom(number):现在的缩放,其中 1 表示 100%。direction(1 | -1):1放大,-1缩小。
返回 (number)
下一个缩放。
zoomToFitShapes
移动并缩放相机,使每个形状都位于舞台中。它永远不会放大超过 100%,或缩小超过 minZoom,并且在空白板上不执行任何操作。
import { zoomToFitShapes } from '@tiptap-pro/extension-whiteboard'
zoomToFitShapes({ stage, editor, updateCamera: setCamera })参数 (ZoomToFitShapesOptions)
stage(HTMLElement):白板周围的元件。editor(Editor):白板的编辑器。updateCamera(UpdateCamera):移动摄像机。insets?(number | Insets):边缘处保持自由的空间,以屏幕像素为单位,每个边缘相同或每个边缘一个,就像将形状排除在浮动控件下一样。默认值:64。
scrollShapesIntoView
尽可能少地移动相机,以便具有给定 id 的形状位于舞台中。仅当它们不适合时它才会缩小,并且当它们都不在白板上时它不执行任何操作。
import { scrollShapesIntoView } from '@tiptap-pro/extension-whiteboard'
scrollShapesIntoView({ stage, editor, ids: ['note-1'], updateCamera: setCamera })参数 (ScrollShapesIntoViewOptions)
stage(HTMLElement):白板周围的元件。editor(Editor):白板的编辑器。ids(readonly string[]):要显示的形状的 ID。updateCamera(UpdateCamera):移动摄像机。insets?(number | Insets):边缘处保持空闲的空间,以屏幕像素为单位,每个边缘相同或每个边缘一个。默认值:64。
fitCameraToRect
返回一个相机位置,使矩形区域显示在舞台中央并与 insets 保持间距。函数会缩小视图以容纳该区域,但缩放不会超过 largestZoom,并且会限制在 minZoom 和 maxZoom 范围内。因此,如果该区域需要低于 minZoom 的缩放比例才能完整显示,就无法完全适配。
import { fitCameraToRect } from '@tiptap-pro/extension-whiteboard'
const rect = { x: 0, y: 0, width: 1200, height: 800 }
const camera = fitCameraToRect({ rect, viewport: { width: 1000, height: 800 } })参数 (FitCameraToRectOptions)
rect(Rect):要显示的白板部分,以白板为单位。viewport(Size):舞台的大小(以屏幕像素为单位)。insets?(number | Insets):边缘处保持空闲的空间,以屏幕像素为单位,每个边缘相同或每个边缘一个。默认值:64。largestZoom?(number):可以放大的距离。默认值:1,即 100%。
返回 (Camera)
显示零件的摄像机。
visibleBoardRect
返回舞台显示的白板部分。
import { visibleBoardRect } from '@tiptap-pro/extension-whiteboard'
const seen = visibleBoardRect({ camera, viewport: { width: 1000, height: 800 } })参数(VisibleBoardRectOptions)
camera(Camera):白板的摄像头。viewport(Size):舞台的大小(以屏幕像素为单位)。
返回 (Rect)
白板的部分(以板为单位)。
clientToBoard
使用白板显示的相机将窗口坐标中的点转换为白板单位。
import { clientToBoard } from '@tiptap-pro/extension-whiteboard'
stage.addEventListener('pointermove', (event) => {
const point = clientToBoard({ editor, point: { x: event.clientX, y: event.clientY } })
if (point) {
console.log(`The pointer is at ${point.x}, ${point.y} on the board`)
}
})参数 (ClientToBoardOptions)
editor(Editor):白板的编辑器。point(Point):窗口坐标中的点,如指针事件的clientX和clientY。
返回 (Point | null)
白板单位中的点,或当白板不在页面上时的 null,就像在安装 useEditor 的编辑器之前或在编辑器被销毁后一样。
minZoom
最小缩放,10%。相机助手永远不会进一步缩小。
值:0.1。
maxZoom
最大缩放,400%。相机助手永远不会进一步放大。
值:4。
boardContent
针对编辑器的内容,使用给定形状构建板文档的 JSON。
import { boardContent, stickyNoteContent } from '@tiptap-pro/extension-whiteboard'
editor.commands.setContent(boardContent([stickyNoteContent({ id: 'note', x: 0, y: 0 })]))参数
shapes(JSONContent[]):形状的 JSON,如stickyNoteContent()。
返回 (JSONContent)
文档的 JSON。
stickyNoteContent
使用一段文本构建便笺的 JSON,用于显示白板的内容。它采用textShapeContent() 选项,不带type 和kind。
import { stickyNoteContent } from '@tiptap-pro/extension-whiteboard'
const note = stickyNoteContent({ id: 'note', x: 0, y: 0, text: 'Hello' })参数 (StickyNoteContentOptions)
id(string):票据的 id,在白板上唯一。x、y(number):注释所在位置(以板为单位)。width?、height?(number):纸币的大小,以纸币为单位。默认值:stickyNoteSize。zIndex?(string):堆叠顺序,作为分数索引。较高的形状在前面。color?(ShapeColor):票据的颜色,如blue。请参阅shapeColors。fontSize?(ShapeStyleValue<'fontSize'>):文本的大小,如s、m、l或xl。textAlign?(ShapeStyleValue<'textAlign'>):文本如何对齐:start、center或end。font?(ShapeStyleValue<'font'>):文本的字体,如sans、serif或mono。text?(string):注释文本,在一个段落中。
返回 (JSONContent)
注释的 JSON。
textShapeContent
为白板的内容构建带有文本的形状的 JSON。
import { boardContent, textShapeContent } from '@tiptap-pro/extension-whiteboard'
const shape = textShapeContent({ type: 'geo', id: 'box', x: 0, y: 0, text: 'Hi' })
editor.commands.setContent(boardContent([shape]))参数 (TextShapeContentOptions)
type(string):形状的节点类型,如stickyNote、geo或freeText。id(string):形状的id,在白板上唯一。x、y(number):形状所在的位置(以板为单位)。width?、height?(number):形状的大小,以板为单位。zIndex?(string):堆叠顺序,作为小数索引。较高的形状在前面。color?(ShapeColor):形状的颜色,如blue。请参阅shapeColors。fontSize?(ShapeStyleValue<'fontSize'>):文本的大小,如s、m、l或xl。textAlign?(ShapeStyleValue<'textAlign'>):文本如何对齐:start、center或end。font?(ShapeStyleValue<'font'>):文本的字体,如sans、serif或mono。kind?(GeoKind):几何形状的一种,名称来自geoKinds。text?(string):形状的文本,在一个段落中。
返回 (JSONContent)
形状的 JSON。
freehandFromPoints
将以板为单位绘制的线条转换为笔线的几何形状。该框为笔划宽度留出了空间,并且点是相对于其角的。
import { freehandFromPoints } from '@tiptap-pro/extension-whiteboard'
const line = freehandFromPoints({
points: [
{ x: 0, y: 0 },
{ x: 100, y: 40 },
],
strokeWidth: 3,
})
const content = { type: 'freehand', attrs: { id: 'line', ...line, strokeWidth: 3 } }参数 (FreehandFromPointsOptions)
points(readonly Point[]):线路的点,以板为单位。它至少需要一个。strokeWidth(number):线的宽度,以板为单位。
返回 (FreehandShape)
笔线的框和点。
createShapeId
返回新的随机版本 4 UUID,作为形状的 id。也可以在没有 crypto.randomUUID 的安全来源下工作。
import { createShapeId, stickyNoteContent } from '@tiptap-pro/extension-whiteboard'
const note = stickyNoteContent({ id: createShapeId(), x: 0, y: 0 })参数
无。
返回 (string)
新 ID。
getSelectedShapeIds
返回所选形状的 ID。
import { getSelectedShapeIds } from '@tiptap-pro/extension-whiteboard'
editor.commands.bringToFront(getSelectedShapeIds(editor.state))参数
state(EditorState):白板编辑器的状态,如editor.state。
返回 (readonly string[])
id,按照选择形状的顺序排列。
isBoardEditable
用于判断用户是否可以编辑白板。调用 editor.setEditable(false) 会关闭白板编辑。请使用它代替 editor.isEditable,因为白板获得键盘焦点时 editor.isEditable 会返回 false。参见自定义形状。
import { isBoardEditable } from '@tiptap-pro/extension-whiteboard'
// Commands also change a read-only board, so check before a button in your shape runs one
if (isBoardEditable(editor)) {
editor.commands.updateShape({ id, attributes: { votes: votes + 1 } })
}参数
editor(Editor):白板的编辑器。
返回 (boolean)
用户是否可以更换板卡。
isEditingText
告知形状的文本是否已编辑,以便在其中键入按键。否则,按键将作用于白板和选定的形状。编辑文档框架的文档时,它是false,请参见getEditedDocEditor()。
import { isEditingText } from '@tiptap-pro/extension-whiteboard'
isEditingText(editor.state) // false while keys act on the board参数
state(EditorState):白板编辑器的状态,如editor.state。
返回 (boolean)
形状的文本是否已编辑。
getEditedShapeId
返回已编辑文本的形状的 ID。对于文档框架的文档,请参阅getEditedDocEditor()。
import { getEditedShapeId } from '@tiptap-pro/extension-whiteboard'
getEditedShapeId(editor.state) // 'note' while its text is edited参数
state(EditorState):白板编辑器的状态,如editor.state。
返回 (string | null)
按键作用于白板或编辑文档框架的文档时的 id 或 null。
getActiveTool
返回白板上压力机使用的工具。
import { getActiveTool } from '@tiptap-pro/extension-whiteboard'
getActiveTool(editor.state) // 'select'参数
state(EditorState):白板编辑器的状态,如editor.state。
返回 (Tool)
工具 select,除非 setTool 选择另一工具。
getNextShapeStyles
返回新形状的样式。未设置的样式保留每种形状的默认样式。
import { getNextShapeStyles } from '@tiptap-pro/extension-whiteboard'
getNextShapeStyles(editor.state).color // undefined until `setShapeStyle` chooses one参数
state(EditorState):白板编辑器的状态,如editor.state。
返回 (Partial<ShapeStyles>)
setShapeStyle 选择的样式。
getToolShapeType
返回工具添加的形状的节点类型。
import { getToolShapeType } from '@tiptap-pro/extension-whiteboard'
getToolShapeType('note') // 'stickyNote'
getToolShapeType('hand') // null参数
tool(Tool):该工具,如note或hand。
返回 (string | null)
节点类型,或 null(对于不添加任何节点的工具)。
isTypingTarget
指示是否在目标类型文本上按下按键:在字段中,还是在可编辑内容(例如形状的已编辑文本或文档框架的编辑器)中。
import { isTypingTarget } from '@tiptap-pro/extension-whiteboard'
// In a keydown listener for the app's own shortcuts
if (event.key === '?' && !isTypingTarget(event.target)) showShortcuts()参数
target(EventTarget | null):键盘事件的目标,如event.target。
返回 (boolean)
是否在目标类型文本上按下了按键。
focusBoard
对于链外的代码(如工具栏按钮的单击处理程序),立即聚焦板或编辑文本时的文本。与 ProseMirror 的 focus 不同,它在文本只读时也可以工作。在链中,使用focusBoard()命令,该命令在链的交易之后聚焦。
import { focusBoard } from '@tiptap-pro/extension-whiteboard'
// In the click handler of a toolbar button
focusBoard(editor.view)参数
view(EditorView):白板编辑器的视图,如editor.view。
findShapes
查找具有给定 ID 的形状。
import { findShapes } from '@tiptap-pro/extension-whiteboard'
const [note] = findShapes({ doc: editor.state.doc, ids: ['note-1'] })参数 (FindShapesOptions)
doc(Node):白板的文档,如editor.state.doc。ids(readonly string[]):形状的 id。
返回 (NodeWithPos[])
按文档顺序排列的形状及其位置。未知的 ID 会被跳过。
hasBoxGeometry
判断形状是否具有来自 x、y、width 和 height 的方框。箭头则不然。
import { findShapes, hasBoxGeometry } from '@tiptap-pro/extension-whiteboard'
const shapes = findShapes({ doc: editor.state.doc, ids })
const boxes = shapes.filter(({ node }) => hasBoxGeometry(node))参数
shape(Node):形状的节点。
返回 (boolean)
形状是否有方框。
docIdOf
从文档框架的节点或节点的 JSON 返回文档框架显示的文档的 ID。没有框架的框架使用它们的形状 ID,因此它们仍然可以获得自己的文档。
import { docIdOf, findShapes } from '@tiptap-pro/extension-whiteboard'
const [frame] = findShapes({ doc: editor.state.doc, ids: ['frame'] })
const docId = frame && docIdOf(frame.node)参数
frame(Node | JSONContent):框架的节点或其 JSON。
返回 (string)
文档的 ID。
shapeAttributes
返回每个形状所需的属性,对于自定义形状:其 id、位置、大小、z-index 和框架。他们将数字保留为 HTML 中的数字,当用户复制并粘贴形状时也是如此。
import { shapeAttributes } from '@tiptap-pro/extension-whiteboard'
// In the node of the shape
addAttributes: () => ({
...shapeAttributes({ width: 320, height: 200 }),
title: { default: '' },
}),参数
size?(Size):新形状的尺寸(以板为单位)。默认值:200 x 200。
返回 (Attributes)
形状节点的 addAttributes 的属性。
dataAttribute
返回 HTML 保留为数据属性的 自定义形状 的属性,因此当用户复制和粘贴形状时它会保留。缺失值或无法解析的值将回退到默认值。
import { dataAttribute, shapeAttributes } from '@tiptap-pro/extension-whiteboard'
// In the node of the shape
addAttributes: () => ({
...shapeAttributes(),
votes: dataAttribute({ name: 'votes', default: 0 }),
}),参数 (DataAttributeOptions)
name(string):属性的名称,如votes。 HTML 将其保留为data-votes,将chartData保留为data-chart-data。default(string | number | boolean | null | readonly unknown[] | Record<string, unknown>):新形状的值。它的类型决定 HTML 如何保留值:字符串、数字、布尔值或null、对象和数组的 JSON。
返回 (Attribute)
形状节点的 addAttributes 的属性。
shapeNodeView
将组件的节点视图(例如应用程序的 React 组件)转换为不带文本的 自定义形状。板像它自己的形状一样放置、选择、移动形状并调整其大小,节点视图绘制组件。按下组件中的链接、按钮、字段和可编辑内容即可转到它们,按下 data-shape-interactive 的元素内部也是如此。它们也在只读白板上执行此操作,因此组件在更改板之前会检查 isBoardEditable()。
import { ReactNodeViewRenderer } from '@tiptap/react'
import { shapeNodeView } from '@tiptap-pro/extension-whiteboard'
// In the node of the shape
addNodeView: () => shapeNodeView({ dataType: 'poll', view: ReactNodeViewRenderer(PollView) }),参数 (ShapeNodeViewOptions)
dataType(string):形状元素的data-type,类似于节点的renderHTML所设置的值。view(NodeViewRenderer):形状中零部件的节点视图,如@tiptap/react中的ReactNodeViewRenderer(Component)。它的元素填充了形状。
返回 (NodeViewRenderer)
形状的节点视图,针对其节点的 addNodeView。
insertShapesInFront
按照 shapes 的顺序从后到前将形状添加到所有其他形状的前面,除非它们的 z 索引以其他方式排序。当形状没有 id 或白板或其他形状具有 id 时,抛出 RangeError。
import {
createShapeId,
insertShapesInFront,
stickyNoteContent,
} from '@tiptap-pro/extension-whiteboard'
const { tr, schema } = editor.state
const note = stickyNoteContent({ id: createShapeId(), x: 0, y: 0, text: 'Idea' })
insertShapesInFront({ tr, shapes: [schema.nodeFromJSON(note)] })
editor.view.dispatch(tr)参数 (InsertShapesInFrontOptions)
tr(Transaction):添加形状的事务,如editor.state.tr。shapes(readonly Node[]):要添加的形状的节点。
返回 (number | null)
第一个形状的位置,如果没有添加,则为 null。
它将把交易发送给您。使用 UndoRedo,它使事务成为自己的撤消步骤。通过协作,Yjs 将快速发生的变化整合为一个步骤。
removeShapes
删除具有给定 id 的形状以及其中框架中的形状。连接已删除形状的箭头会保留下来,并在它们接触的地方有一个自由端。
import { removeShapes } from '@tiptap-pro/extension-whiteboard'
const { tr } = editor.state
removeShapes({ tr, ids: ['note-1'] })
editor.view.dispatch(tr)参数 (RemoveShapesOptions)
tr(Transaction):删除其中形状的事务,如editor.state.tr。ids(readonly string[]):形状的 id。
返回 (boolean)
白板上是否有任何形状。
它将把交易发送给您。使用 UndoRedo,它使事务成为自己的撤消步骤。通过协作,Yjs 将快速发生的变化整合为一个步骤。
restackShapes
将具有给定 ID 的形状移动到所有其他形状的前面或后面,并保持它们之间的顺序。只有移动的形状才会获得新的 z 索引,除非丢失或无效的形状没有空间。
import { restackShapes } from '@tiptap-pro/extension-whiteboard'
const { tr } = editor.state
restackShapes({ tr, ids: ['note-1'], place: 'back' })
editor.view.dispatch(tr)参数 (RestackShapesOptions)
tr(Transaction):移动形状的事务,如editor.state.tr。ids(readonly string[]):形状的 id。place(StackPlace):形状所在的位置:front,位于所有其他形状的前面,或back,位于它们的后面。
返回 (boolean)
白板上是否有任何形状。
它将把交易发送给您。使用 UndoRedo,它使事务成为自己的撤消步骤。通过协作,Yjs 将快速发生的变化整合为一个步骤。
keepShapeHeights
保留事务赋予其形状的高度,以供稍后到达的内容使用,例如 AI 在添加框架后写入的文档框架的文档。如果没有它,该白板会使自由文本和文档框架与其内容一样高。
import { keepShapeHeights } from '@tiptap-pro/extension-whiteboard'
const { tr } = editor.state
// … add a doc frame whose document arrives later
editor.view.dispatch(keepShapeHeights(tr))参数
tr(Transaction):事务,与editor.state.tr类似。
返回 (Transaction)
相同的事务。
它仅标记事务并且不执行撤消步骤。
getDocEditors
返回白板上文档框架显示的文档的编辑者。
import { getDocEditors } from '@tiptap-pro/extension-whiteboard'
const documents = getDocEditors(editor).map((docEditor) => docEditor.getJSON())参数
editor(Editor):白板的编辑器。
返回 (Editor[])
文档的编辑者,一旦白板的编辑器被销毁,则没有。
getEditedDocEditor
返回文档框架编辑的文档的编辑器。
import { getEditedDocEditor } from '@tiptap-pro/extension-whiteboard'
// A bold button that works in documents too
const textEditor = getEditedDocEditor(editor) ?? editor
textEditor.commands.toggleBold()参数
editor(Editor):白板的编辑器。
返回 (Editor | null)
文档的编辑者,或 null(当未编辑任何内容时,例如白板的编辑器被销毁时)。
addImageFiles
上传带有白板的 images 的图像文件,然后在板历史记录的一个步骤中,在所有其他形状前面为每个形状添加一个图像形状,并选择它们。这些图像保持其比例,适合舞台的一半,并排站在 point 周围。 images不允许的文件以及上传失败的文件转到其onError。在只读白板上不执行任何操作。请参阅图像。
import { addImageFiles } from '@tiptap-pro/extension-whiteboard'
input.addEventListener('change', () => addImageFiles({ stage, editor, files: input.files ?? [] }))参数 (AddImageFilesOptions)
stage(HTMLElement):白板周围的元件。editor(Editor):白板的编辑器。files(Iterable<File>):要添加的文件,如文件输入的文件。point?(Point):图像的中间,以板为单位。默认:舞台中间。
返回 (Promise<string[]>)
添加的图像形状的 ID。如果没有 images,在只读白板上,或者在上传结束之前编辑器被销毁,则不会。
createRemoteCursors
显示 editor 白板上其他用户的光标及其名称。每个光标位于用户指向的位置,在每次缩放时保持其大小,并在用户共享的点上平滑移动,但稍晚一些。用户拖动的形状会随着光标移动,但文档不会改变:其他用户的拖放会改变它。请参阅显示其他人的光标。
import { createRemoteCursors } from '@tiptap-pro/extension-whiteboard'
const cursors = createRemoteCursors(editor)
cursors.update([{ owner: clientId, point: { x: 120, y: 80 }, name: 'Ada', color: '#be185d' }])参数
editor(Editor):白板的编辑器。
返回 (RemoteCursors)
光标,具有两个功能:
update(cursors)显示这些光标](/editor/whiteboard/api-reference/types#remotecursor) 及其拖动的形状,并淡出其他光标。没有有效点的光标或没有形状 ID 和增量的拖动将被排除,因为其他用户可以共享任何内容。destroy()立即删除每个光标,并在文档中显示拖动的形状。销毁编辑器也能做到这一点。
createRemoteMoves
显示 editor 白板上其他用户的拖动情况。它们的形状和连接它们的箭头会移动,但文档不会改变:其他用户的拖放会改变它。
import { createRemoteMoves } from '@tiptap-pro/extension-whiteboard'
const moves = createRemoteMoves(editor)
moves.show({ owner: clientId, ids: ['note'], delta: { x: 40, y: 0 } })
moves.end(clientId)参数
editor(Editor):白板的编辑器。
返回 (RemoteMoves)
移动,有两个功能:
show({ owner, ids, delta })显示owner的拖动形状,由delta移动。owner是拖动的对象,就像另一个用户的客户端 ID,delta是拖动自开始以来使形状移动的距离(以板为单位)。end(owner)结束owner的拖动。它的形状显示为文档中的形状。
exportBoard
将板另存为白板文件:其 JSON 及其文档框架显示的文档。请参阅导出和导入。
import { exportBoard } from '@tiptap-pro/extension-whiteboard'
const json = JSON.stringify(exportBoard({ editor }))参数 (ExportBoardOptions)
editor(Editor):白板的编辑器。
返回 (BoardFile)
白板文件,用 JSON.stringify 写入。请参阅BoardFile。
importBoard
从 exportBoard 打开白板文件,这是白板历史记录的一步。每个文档框架显示一个新文档,BoardDocs.load 从文件中填充,因此其他板保留其文档。同时打开 Excalidraw 和 tldraw 保存的文件,请参阅打开 Excalidraw 和 tldraw 文件。当 JSON 不是这些文件或较新版本写入时,抛出 BoardFileError。
import { importBoard } from '@tiptap-pro/extension-whiteboard'
importBoard({ editor, file: JSON.parse(await file.text()) })参数 (ImportBoardOptions)
editor(Editor):白板的编辑器。file(unknown):白板文件的解析 JSON,如exportBoard返回它,或者 Excalidraw 或 tldraw 保存的文件的 JSON。mode?('replace' | 'insert'):replace显示文件的板而不是当前的板。insert将其形状的副本添加到当前形状的前面(就像粘贴一样),然后选择它们。默认值:'replace'。
返回 (ImportBoardResult)
添加的形状的 ID,以及编辑器无法显示的文件的形状。请参阅ImportBoardResult。
exportBoardSvg
将白板的形状绘制为 SVG 图像,如页面所示:使用应用程序的样式以及它们使用的字体和图像。选择项、句柄和插入符不会出现。文本是 foreignObject 中的 HTML,浏览器会显示,但某些矢量编辑器不会显示。
import { exportBoardSvg } from '@tiptap-pro/extension-whiteboard'
const image = await exportBoardSvg({ editor, background: '#fff' })参数 (ExportBoardSvgOptions)
editor(Editor):白板的编辑器。它的板必须在页面中,否则函数会抛出异常。ids?(readonly string[]):要绘制的形状的 ID。它们之间的框架带来了它的形状。默认:所有形状。padding?(number):形状周围的空间(以板为单位)。默认值:16。background?(string):形状后面的 CSS 颜色。没有它,图像在那里是透明的。
返回 (Promise<BoardSvg | null>)
SVG 及其大小,或者当没有要绘制的形状时返回 null。请参阅BoardSvg。
exportBoardImage
将白板的形状绘制为 PNG 或 JPEG 图像,如 exportBoardSvg 绘制它们。 JPEG 获得白色背景,除非 background 设置为 1。在 Safari 中,图像没有框阴影。
import { exportBoardImage } from '@tiptap-pro/extension-whiteboard'
const png = await exportBoardImage({ editor, background: '#fff' })参数 (ExportBoardImageOptions)
exportBoardSvg 的选项,以及:
format?('png' | 'jpeg'):文件类型。默认值:'png'。pixelRatio?(number):每个板单元的像素。当画布不能那么大时,它会更低。默认值:2。quality?(number):JPEG 的质量,从 0 到 1。
返回 (Promise<Blob | null>)
图像文件,或没有要绘制的形状时的 null。
geoKinds
该种几何形状,其名称为kind。
值:['rectangle', 'ellipse', 'diamond', 'triangle']。
shapeColors
形状的默认颜色,例如颜色菜单的样本颜色。形状存储名称,CSS 决定它的外观。使用 WhiteboardKit 的 colors 选项添加您自己的颜色,请参阅Colors。
值:['black', 'gray', 'red', 'orange', 'yellow', 'green', 'blue', 'violet']。
shapeStyles
形状的样式及其默认值的名称。请参阅形状和工具。
值:{ color: shapeColors, fontSize: ['s', 'm', 'l', 'xl'], textAlign: ['start', 'center', 'end'], font: ['sans', 'serif', 'mono'], arrowheads: ['none', 'end', 'both'], arrowheadKind: ['triangle', 'arrow', 'dot', 'diamond', 'bar'], arrowKind: ['straight', 'curved', 'elbow'], dash: ['solid', 'dashed', 'dotted'] }。
stickyNoteSize
未指定的便签大小(以板为单位)。
值:{ width: 220, height: 160 }。
toolKeys
未编辑文本时选择每个工具的默认键,例如工具栏的工具提示。使用 WhiteboardKit 的 toolKeys 选项更改它们。
值:{ select: 'v', hand: 'h', note: 'n', text: 't', doc: 'w', rectangle: 'r', ellipse: 'o', diamond: 'd', pen: 'p', arrow: 'a', frame: 'f', eraser: 'e' }。
defaultFrameName
不带帧的 frame 显示的名称,如白板上帧的列表。
值:'Frame'。
boardStyles
白板所需的 CSS。白板将其添加到页面本身,除非其编辑器具有 injectCSS: false。请参阅样式。
类型:string。