@plait/mind 0.19.0 → 0.20.0

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.
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, Input, Component, ChangeDetectionStrategy, NgModule, NgZone, HostListener } from '@angular/core';
3
3
  import * as i2 from '@plait/core';
4
- import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitNode, Path, PlaitBoard, depthFirstRecursion, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, isMainPointer, BOARD_TO_HOST, PlaitPluginKey, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys } from '@plait/core';
4
+ import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitNode, Path, PlaitBoard, depthFirstRecursion, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, BOARD_TO_HOST, PlaitPluginKey, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys } from '@plait/core';
5
5
  import { MindLayoutType, isIndentedLayout, AbstractNode, getNonAbstractChildren, isStandardLayout, isLeftLayout, isRightLayout, isVerticalLogicLayout, isHorizontalLogicLayout, isTopLayout, isBottomLayout, isHorizontalLayout, getCorrectStartEnd, getAbstractLayout, ConnectingPosition, GlobalLayout } from '@plait/layouts';
6
- import { TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, TextModule, getTextFromClipboard } from '@plait/text';
6
+ import { PlaitMarkEditor, MarkTypes, DEFAULT_FONT_SIZE, TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, TextModule, getTextFromClipboard } from '@plait/text';
7
7
  import { fromEvent, Subject } from 'rxjs';
8
8
  import { Node, Path as Path$1 } from 'slate';
9
9
  import { isKeyHotkey } from 'is-hotkey';
@@ -180,6 +180,14 @@ function getEmojiFontSize(element) {
180
180
  }
181
181
  }
182
182
 
183
+ const TOPIC_COLOR = '#333';
184
+ const TOPIC_FONT_SIZE = 14;
185
+ const ROOT_TOPIC_FONT_SIZE = 18;
186
+ const ROOT_TOPIC_HEIGHT = 25;
187
+ const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;
188
+ const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, "PingFang SC"';
189
+ const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, "PingFang SC"';
190
+
183
191
  const NodeDefaultSpace = {
184
192
  horizontal: {
185
193
  nodeAndText: BASE * 3,
@@ -217,17 +225,15 @@ const getSpaceEmojiAndText = (element) => {
217
225
  };
218
226
  const NodeSpace = {
219
227
  getNodeWidth(board, element) {
220
- var _a;
221
228
  const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
222
- const imageWidth = MindElement.hasImage(element) ? (_a = element.data.image) === null || _a === void 0 ? void 0 : _a.width : 0;
223
229
  if (MindElement.hasEmojis(element)) {
224
230
  return (NodeSpace.getEmojiLeftSpace(board, element) +
225
231
  getEmojisWidthHeight(board, element).width +
226
232
  getSpaceEmojiAndText(element) +
227
- Math.max(element.width, imageWidth) +
233
+ NodeSpace.getNodeResizableWidth(board, element) +
228
234
  nodeAndText);
229
235
  }
230
- return nodeAndText + Math.max(element.width, imageWidth) + nodeAndText;
236
+ return nodeAndText + NodeSpace.getNodeResizableWidth(board, element) + nodeAndText;
231
237
  },
232
238
  getNodeHeight(board, element) {
233
239
  const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
@@ -240,6 +246,27 @@ const NodeSpace = {
240
246
  }
241
247
  return nodeAndText + element.height + nodeAndText;
242
248
  },
249
+ getNodeResizableWidth(board, element) {
250
+ var _a;
251
+ const imageWidth = MindElement.hasImage(element) ? (_a = element.data.image) === null || _a === void 0 ? void 0 : _a.width : 0;
252
+ return Math.max(element.width, imageWidth);
253
+ },
254
+ getNodeResizableMinWidth(board, element) {
255
+ const minTopicWidth = NodeSpace.getNodeTopicMinWidth(board, element);
256
+ if (MindElement.hasImage(element) && element.data.image.width > minTopicWidth) {
257
+ return element.data.image.width;
258
+ }
259
+ else {
260
+ return minTopicWidth;
261
+ }
262
+ },
263
+ getNodeTopicMinWidth(board, element, isRoot = false) {
264
+ const defaultFontSize = getNodeDefaultFontSize(isRoot);
265
+ const editor = MindElement.getTextEditor(element);
266
+ const marks = PlaitMarkEditor.getMarks(editor);
267
+ const fontSize = marks[MarkTypes.fontSize] || defaultFontSize;
268
+ return fontSize;
269
+ },
243
270
  getTextLeftSpace(board, element) {
244
271
  const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
245
272
  if (MindElement.hasEmojis(element)) {
@@ -271,6 +298,19 @@ const NodeSpace = {
271
298
  return nodeAndText;
272
299
  }
273
300
  };
301
+ const getFontSizeBySlateElement = (text) => {
302
+ const defaultFontSize = DEFAULT_FONT_SIZE;
303
+ if (typeof text === 'string') {
304
+ return defaultFontSize;
305
+ }
306
+ const marks = PlaitMarkEditor.getMarksByElement(text);
307
+ const fontSize = marks[MarkTypes.fontSize] || defaultFontSize;
308
+ return fontSize;
309
+ };
310
+ const getNodeDefaultFontSize = (isRoot = false) => {
311
+ const defaultFontSize = isRoot ? ROOT_TOPIC_FONT_SIZE : DEFAULT_FONT_SIZE;
312
+ return defaultFontSize;
313
+ };
274
314
 
275
315
  function getEmojiRectangle(board, element) {
276
316
  let { x, y } = getRectangleByNode(MindElement.getNode(element));
@@ -330,21 +370,11 @@ const isHitImage = (board, element, range) => {
330
370
  return RectangleClient.isHit(RectangleClient.toRectangleClient([range.anchor, range.focus]), client);
331
371
  };
332
372
 
333
- const NODE_MIN_WIDTH = 18;
334
-
335
373
  function editTopic(element) {
336
374
  const component = PlaitElement.getComponent(element);
337
375
  component === null || component === void 0 ? void 0 : component.editTopic();
338
376
  }
339
377
 
340
- const TOPIC_COLOR = '#333';
341
- const TOPIC_FONT_SIZE = 14;
342
- const ROOT_TOPIC_FONT_SIZE = 18;
343
- const ROOT_TOPIC_HEIGHT = 25;
344
- const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;
345
- const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, "PingFang SC"';
346
- const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, "PingFang SC"';
347
-
348
378
  const createEmptyMind = (point) => {
349
379
  const element = createMindElement('思维导图', 72, ROOT_TOPIC_HEIGHT, { layout: MindLayoutType.right });
350
380
  element.isRoot = true;
@@ -454,7 +484,7 @@ const insertMindElement = (board, inheritNode, path) => {
454
484
  });
455
485
  delete newNode.layout;
456
486
  }
457
- const newElement = createMindElement('', NODE_MIN_WIDTH, TEXT_DEFAULT_HEIGHT, newNode);
487
+ const newElement = createMindElement('', getNodeDefaultFontSize(), TEXT_DEFAULT_HEIGHT, newNode);
458
488
  Transforms.insertNode(board, newElement, path);
459
489
  clearSelectedElement(board);
460
490
  addSelectedElement(board, newElement);
@@ -620,7 +650,7 @@ const adjustNodeToRoot = (board, node) => {
620
650
  fontSize: ROOT_TOPIC_FONT_SIZE,
621
651
  fontFamily: BRANCH_FONT_FAMILY
622
652
  });
623
- newElement.width = Math.max(width, NODE_MIN_WIDTH);
653
+ newElement.width = Math.max(width, getNodeDefaultFontSize(true));
624
654
  newElement.height = height;
625
655
  return Object.assign(Object.assign({}, newElement), { layout: (_a = newElement.layout) !== null && _a !== void 0 ? _a : MindLayoutType.right, isRoot: true, type: 'mindmap' });
626
656
  };
@@ -1036,14 +1066,7 @@ const detectDropTarget = (board, detectPoint, dropTarget, activeElements) => {
1036
1066
  if (detectResult && isValid) {
1037
1067
  dropTarget = { target: node.origin, detectResult: detectResult[0] };
1038
1068
  }
1039
- }, node => {
1040
- if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {
1041
- return true;
1042
- }
1043
- else {
1044
- return false;
1045
- }
1046
- });
1069
+ }, getIsRecursionFunc(board));
1047
1070
  return dropTarget;
1048
1071
  };
1049
1072
  const directionDetector = (targetNode, centerPoint) => {
@@ -2212,19 +2235,20 @@ const correctLogicLayoutNode = (board, layout, path) => {
2212
2235
  }
2213
2236
  };
2214
2237
 
2215
- const normalizeWidthAndHeight = (board, width, height) => {
2216
- const newWidth = width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom;
2238
+ const normalizeWidthAndHeight = (board, element, width, height) => {
2239
+ const minWidth = NodeSpace.getNodeTopicMinWidth(board, element, element.isRoot);
2240
+ const newWidth = width < minWidth * board.viewport.zoom ? minWidth : width / board.viewport.zoom;
2217
2241
  const newHeight = height / board.viewport.zoom;
2218
2242
  return { width: newWidth, height: newHeight };
2219
2243
  };
2220
2244
  const setTopic = (board, element, topic, width, height) => {
2221
- const newElement = Object.assign({ data: Object.assign(Object.assign({}, element.data), { topic }) }, normalizeWidthAndHeight(board, width, height));
2245
+ const newElement = Object.assign({ data: Object.assign(Object.assign({}, element.data), { topic }) }, normalizeWidthAndHeight(board, element, width, height));
2222
2246
  const path = PlaitBoard.findPath(board, element);
2223
2247
  Transforms.setNode(board, newElement, path);
2224
2248
  };
2225
2249
  const setTopicSize = (board, element, width, height) => {
2226
- const newElement = Object.assign({}, normalizeWidthAndHeight(board, width, height));
2227
- if (element.width !== newElement.width || element.height !== newElement.height) {
2250
+ const newElement = Object.assign({}, normalizeWidthAndHeight(board, element, width, height));
2251
+ if (Math.floor(element.width) !== Math.floor(newElement.width) || Math.floor(element.height) !== Math.floor(newElement.height)) {
2228
2252
  const path = PlaitBoard.findPath(board, element);
2229
2253
  Transforms.setNode(board, newElement, path);
2230
2254
  }
@@ -3113,7 +3137,7 @@ const withNodeDnd = (board) => {
3113
3137
  if (PlaitBoard.isReadonly(board) ||
3114
3138
  PlaitBoard.hasBeenTextEditing(board) ||
3115
3139
  !PlaitBoard.isPointer(board, PlaitPointerType.selection) ||
3116
- event.button === 2) {
3140
+ !isMainPointer(event)) {
3117
3141
  mousedown(event);
3118
3142
  return;
3119
3143
  }
@@ -3340,7 +3364,7 @@ const insertClipboardData = (board, elements, targetPoint) => {
3340
3364
  newElement = adjustRootToNode(board, newElement);
3341
3365
  const styles = PlaitMind.isMind(targetParent) ? { fontFamily: BRANCH_FONT_FAMILY } : { fontFamily: DEFAULT_FONT_FAMILY };
3342
3366
  const { width, height } = getTextSize(board, newElement.data.topic, TOPIC_DEFAULT_MAX_WORD_COUNT, styles);
3343
- newElement.width = Math.max(width, NODE_MIN_WIDTH);
3367
+ newElement.width = Math.max(width, getNodeDefaultFontSize());
3344
3368
  newElement.height = height;
3345
3369
  }
3346
3370
  // handle abstract start and end
@@ -3370,7 +3394,7 @@ const insertClipboardData = (board, elements, targetPoint) => {
3370
3394
  const insertClipboardText = (board, targetParent, text) => {
3371
3395
  const styles = PlaitMind.isMind(targetParent) ? { fontFamily: BRANCH_FONT_FAMILY } : { fontFamily: DEFAULT_FONT_FAMILY };
3372
3396
  const { width, height } = getTextSize(board, text, TOPIC_DEFAULT_MAX_WORD_COUNT, styles);
3373
- const newElement = createMindElement(text, width, height, {});
3397
+ const newElement = createMindElement(text, Math.max(width, getFontSizeBySlateElement(text)), height, {});
3374
3398
  Transforms.insertNode(board, newElement, findNewChildNodePath(board, targetParent));
3375
3399
  return;
3376
3400
  };
@@ -3718,14 +3742,7 @@ const withNodeHover = (board) => {
3718
3742
  if (isHitElement) {
3719
3743
  target = element;
3720
3744
  }
3721
- }, node => {
3722
- if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {
3723
- return true;
3724
- }
3725
- else {
3726
- return false;
3727
- }
3728
- }, true);
3745
+ }, getIsRecursionFunc(board), true);
3729
3746
  if (hoveredMindElement && target && hoveredMindElement === target) {
3730
3747
  return;
3731
3748
  }
@@ -3808,8 +3825,9 @@ const withMindImage = (board) => {
3808
3825
  return board;
3809
3826
  };
3810
3827
 
3811
- const withMind = (board) => {
3812
- const { drawElement, dblclick, keydown, insertFragment, setFragment, deleteFragment, isHitSelection, getRectangle, isMovable, isRecursion } = board;
3828
+ const withMind = (baseBoard) => {
3829
+ const board = baseBoard;
3830
+ const { drawElement, dblclick, insertFragment, setFragment, deleteFragment, isHitSelection, getRectangle, isMovable, isRecursion } = board;
3813
3831
  board.drawElement = (context) => {
3814
3832
  if (PlaitMind.isMind(context.element)) {
3815
3833
  return PlaitMindComponent;
@@ -3866,14 +3884,7 @@ const withMind = (board) => {
3866
3884
  if (!PlaitBoard.hasBeenTextEditing(board) && isHitMindElement(board, point, node)) {
3867
3885
  editTopic(node);
3868
3886
  }
3869
- }, node => {
3870
- if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {
3871
- return true;
3872
- }
3873
- else {
3874
- return false;
3875
- }
3876
- });
3887
+ }, getIsRecursionFunc(board));
3877
3888
  });
3878
3889
  if (PlaitBoard.hasBeenTextEditing(board)) {
3879
3890
  return;
@@ -3973,5 +3984,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
3973
3984
  * Generated bundle index. Do not edit.
3974
3985
  */
3975
3986
 
3976
- export { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, AbstractHandlePosition, AbstractResizeState, BASE, BRANCH_FONT_FAMILY, BRANCH_WIDTH, BaseDrawer, BranchShape, DEFAULT_FONT_FAMILY, DefaultAbstractNodeStyle, DefaultNodeStyle, ELEMENT_TO_NODE, EXTEND_DIAMETER, EXTEND_OFFSET, GRAY_COLOR, INHERIT_ATTRIBUTE_KEYS, IS_DRAGGING, LayoutDirection, LayoutDirectionsMap, MindColorfulThemeColor, MindDarkThemeColor, MindDefaultThemeColor, MindElement, MindElementShape, MindEmojiBaseComponent, MindImageBaseComponent, MindModule, MindNode, MindNodeComponent, MindPointerType, MindQueries, MindRetroThemeColor, MindSoftThemeColor, MindStarryThemeColor, MindThemeColor, MindThemeColors, MindTransforms, NODE_MIN_WIDTH, PRIMARY_COLOR, PlaitMind, PlaitMindComponent, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_CIRCLE_OFFSET, QUICK_INSERT_INNER_CROSS_COLOR, ROOT_TOPIC_FONT_SIZE, ROOT_TOPIC_HEIGHT, STROKE_WIDTH, TOPIC_COLOR, TOPIC_DEFAULT_MAX_WORD_COUNT, TOPIC_FONT_SIZE, TRANSPARENT, WithMindPluginKey, addActiveOnDragOrigin, adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode, canSetAbstract, copyNewNode, correctLayoutByDirection, createDefaultMind, createEmptyMind, createMindElement, deleteElementHandleAbstract, deleteElementsHandleRightNodeCount, detectDropTarget, directionCorrector, directionDetector, divideElementByParent, drawFakeDragNode, drawFakeDropNode, editTopic, extractNodesText, findLastChild, findLocationLeftIndex, getAbstractBranchColor, getAbstractBranchWidth, getAbstractHandleRectangle, getAllowedDirection, getAvailableSubLayoutsByLayoutDirections, getBehindAbstracts, getBranchColorByMindElement, getBranchDirectionsByLayouts, getBranchShapeByMindElement, getBranchWidthByMindElement, getChildrenCount, getCorrespondingAbstract, getDefaultBranchColor, getDefaultBranchColorByIndex, getDefaultLayout, getEmojiForeignRectangle, getEmojiRectangle, getFillByElement, getFirstLevelElement, getHitAbstractHandle, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNextBranchColor, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getShapeByElement, getStrokeByMindElement, getStrokeWidthByElement, getTopicRectangleByElement, getTopicRectangleByNode, getValidAbstractRefs, handleTouchedAbstract, hasAfterDraw, hasPreviousOrNextOfDropPath, insertElementHandleAbstract, insertElementHandleRightNodeCount, insertMindElement, isChildElement, isChildOfAbstract, isChildRight, isChildUp, isCorrectLayout, isDragging, isDropStandardRight, isHitEmojis, isHitImage, isHitMindElement, isInRightBranchOfStandardLayout, isMixedLayout, isSetAbstract, isValidTarget, isVirtualKey, removeActiveOnDragOrigin, separateChildren, setIsDragging, withMind, withMindExtend };
3987
+ export { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, AbstractHandlePosition, AbstractResizeState, BASE, BRANCH_FONT_FAMILY, BRANCH_WIDTH, BaseDrawer, BranchShape, DEFAULT_FONT_FAMILY, DefaultAbstractNodeStyle, DefaultNodeStyle, ELEMENT_TO_NODE, EXTEND_DIAMETER, EXTEND_OFFSET, GRAY_COLOR, INHERIT_ATTRIBUTE_KEYS, IS_DRAGGING, LayoutDirection, LayoutDirectionsMap, MindColorfulThemeColor, MindDarkThemeColor, MindDefaultThemeColor, MindElement, MindElementShape, MindEmojiBaseComponent, MindImageBaseComponent, MindModule, MindNode, MindNodeComponent, MindPointerType, MindQueries, MindRetroThemeColor, MindSoftThemeColor, MindStarryThemeColor, MindThemeColor, MindThemeColors, MindTransforms, PRIMARY_COLOR, PlaitMind, PlaitMindComponent, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_CIRCLE_OFFSET, QUICK_INSERT_INNER_CROSS_COLOR, ROOT_TOPIC_FONT_SIZE, ROOT_TOPIC_HEIGHT, STROKE_WIDTH, TOPIC_COLOR, TOPIC_DEFAULT_MAX_WORD_COUNT, TOPIC_FONT_SIZE, TRANSPARENT, WithMindPluginKey, addActiveOnDragOrigin, adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode, canSetAbstract, copyNewNode, correctLayoutByDirection, createDefaultMind, createEmptyMind, createMindElement, deleteElementHandleAbstract, deleteElementsHandleRightNodeCount, detectDropTarget, directionCorrector, directionDetector, divideElementByParent, drawFakeDragNode, drawFakeDropNode, editTopic, extractNodesText, findLastChild, findLocationLeftIndex, getAbstractBranchColor, getAbstractBranchWidth, getAbstractHandleRectangle, getAllowedDirection, getAvailableSubLayoutsByLayoutDirections, getBehindAbstracts, getBranchColorByMindElement, getBranchDirectionsByLayouts, getBranchShapeByMindElement, getBranchWidthByMindElement, getChildrenCount, getCorrespondingAbstract, getDefaultBranchColor, getDefaultBranchColorByIndex, getDefaultLayout, getEmojiForeignRectangle, getEmojiRectangle, getFillByElement, getFirstLevelElement, getHitAbstractHandle, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNextBranchColor, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getShapeByElement, getStrokeByMindElement, getStrokeWidthByElement, getTopicRectangleByElement, getTopicRectangleByNode, getValidAbstractRefs, handleTouchedAbstract, hasAfterDraw, hasPreviousOrNextOfDropPath, insertElementHandleAbstract, insertElementHandleRightNodeCount, insertMindElement, isChildElement, isChildOfAbstract, isChildRight, isChildUp, isCorrectLayout, isDragging, isDropStandardRight, isHitEmojis, isHitImage, isHitMindElement, isInRightBranchOfStandardLayout, isMixedLayout, isSetAbstract, isValidTarget, isVirtualKey, removeActiveOnDragOrigin, separateChildren, setIsDragging, withMind, withMindExtend };
3977
3988
  //# sourceMappingURL=plait-mind.mjs.map