@plait/core 0.0.2

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.
Files changed (82) hide show
  1. package/README.md +1 -0
  2. package/board/board.component.d.ts +37 -0
  3. package/core/base/detector.d.ts +7 -0
  4. package/core/element/element.component.d.ts +27 -0
  5. package/esm2020/board/board.component.mjs +211 -0
  6. package/esm2020/core/base/detector.mjs +2 -0
  7. package/esm2020/core/element/element.component.mjs +70 -0
  8. package/esm2020/interfaces/board.mjs +2 -0
  9. package/esm2020/interfaces/cursor.mjs +6 -0
  10. package/esm2020/interfaces/custom-types.mjs +5 -0
  11. package/esm2020/interfaces/element-context.mjs +2 -0
  12. package/esm2020/interfaces/element.mjs +2 -0
  13. package/esm2020/interfaces/graph.mjs +2 -0
  14. package/esm2020/interfaces/index.mjs +14 -0
  15. package/esm2020/interfaces/node.mjs +20 -0
  16. package/esm2020/interfaces/operation.mjs +7 -0
  17. package/esm2020/interfaces/path.mjs +139 -0
  18. package/esm2020/interfaces/plugin.mjs +2 -0
  19. package/esm2020/interfaces/point.mjs +2 -0
  20. package/esm2020/interfaces/selection.mjs +2 -0
  21. package/esm2020/interfaces/viewport.mjs +10 -0
  22. package/esm2020/plait-core.mjs +5 -0
  23. package/esm2020/plait.module.mjs +19 -0
  24. package/esm2020/plugins/create-board.mjs +42 -0
  25. package/esm2020/plugins/with-board.mjs +13 -0
  26. package/esm2020/plugins/with-selection.mjs +39 -0
  27. package/esm2020/public-api.mjs +11 -0
  28. package/esm2020/transfroms/general.mjs +139 -0
  29. package/esm2020/transfroms/index.mjs +11 -0
  30. package/esm2020/transfroms/node.mjs +36 -0
  31. package/esm2020/transfroms/selection.mjs +8 -0
  32. package/esm2020/transfroms/viewport.mjs +8 -0
  33. package/esm2020/utils/board.mjs +25 -0
  34. package/esm2020/utils/dom.mjs +22 -0
  35. package/esm2020/utils/environment.mjs +13 -0
  36. package/esm2020/utils/graph.mjs +11 -0
  37. package/esm2020/utils/helper.mjs +4 -0
  38. package/esm2020/utils/hotkeys.mjs +99 -0
  39. package/esm2020/utils/id-creator.mjs +11 -0
  40. package/esm2020/utils/index.mjs +10 -0
  41. package/esm2020/utils/math.mjs +37 -0
  42. package/esm2020/utils/weak-maps.mjs +6 -0
  43. package/fesm2015/plait-core.mjs +969 -0
  44. package/fesm2015/plait-core.mjs.map +1 -0
  45. package/fesm2020/plait-core.mjs +984 -0
  46. package/fesm2020/plait-core.mjs.map +1 -0
  47. package/interfaces/board.d.ts +32 -0
  48. package/interfaces/cursor.d.ts +5 -0
  49. package/interfaces/custom-types.d.ts +9 -0
  50. package/interfaces/element-context.d.ts +4 -0
  51. package/interfaces/element.d.ts +6 -0
  52. package/interfaces/graph.d.ts +6 -0
  53. package/interfaces/index.d.ts +13 -0
  54. package/interfaces/node.d.ts +13 -0
  55. package/interfaces/operation.d.ts +39 -0
  56. package/interfaces/path.d.ts +32 -0
  57. package/interfaces/plugin.d.ts +2 -0
  58. package/interfaces/point.d.ts +1 -0
  59. package/interfaces/selection.d.ts +5 -0
  60. package/interfaces/viewport.d.ts +13 -0
  61. package/package.json +31 -0
  62. package/plait-core.d.ts +5 -0
  63. package/plait.module.d.ts +9 -0
  64. package/plugins/create-board.d.ts +3 -0
  65. package/plugins/with-board.d.ts +2 -0
  66. package/plugins/with-selection.d.ts +2 -0
  67. package/public-api.d.ts +7 -0
  68. package/transfroms/general.d.ts +6 -0
  69. package/transfroms/index.d.ts +5 -0
  70. package/transfroms/node.d.ts +14 -0
  71. package/transfroms/selection.d.ts +7 -0
  72. package/transfroms/viewport.d.ts +7 -0
  73. package/utils/board.d.ts +10 -0
  74. package/utils/dom.d.ts +6 -0
  75. package/utils/environment.d.ts +7 -0
  76. package/utils/graph.d.ts +3 -0
  77. package/utils/helper.d.ts +1 -0
  78. package/utils/hotkeys.d.ts +32 -0
  79. package/utils/id-creator.d.ts +1 -0
  80. package/utils/index.d.ts +9 -0
  81. package/utils/math.d.ts +2 -0
  82. package/utils/weak-maps.d.ts +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plait-core.mjs","sources":["../../../packages/plait/src/utils/weak-maps.ts","../../../packages/plait/src/utils/helper.ts","../../../packages/plait/src/interfaces/viewport.ts","../../../packages/plait/src/interfaces/path.ts","../../../packages/plait/src/interfaces/node.ts","../../../packages/plait/src/transfroms/general.ts","../../../packages/plait/src/transfroms/node.ts","../../../packages/plait/src/transfroms/selection.ts","../../../packages/plait/src/transfroms/viewport.ts","../../../packages/plait/src/transfroms/index.ts","../../../packages/plait/src/interfaces/cursor.ts","../../../packages/plait/src/plugins/create-board.ts","../../../packages/plait/src/plugins/with-board.ts","../../../packages/plait/src/utils/dom.ts","../../../packages/plait/src/utils/graph.ts","../../../packages/plait/src/plugins/with-selection.ts","../../../packages/plait/src/interfaces/operation.ts","../../../packages/plait/src/utils/board.ts","../../../packages/plait/src/core/element/element.component.ts","../../../packages/plait/src/board/board.component.ts","../../../packages/plait/src/plait.module.ts","../../../packages/plait/src/utils/environment.ts","../../../packages/plait/src/utils/hotkeys.ts","../../../packages/plait/src/utils/id-creator.ts","../../../packages/plait/src/utils/math.ts","../../../packages/plait/src/interfaces/custom-types.ts","../../../packages/plait/src/public-api.ts","../../../packages/plait/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { PlaitBoard } from '../interfaces/board';\n\n// record richtext type status\nexport const FLUSHING: WeakMap<PlaitBoard, boolean> = new WeakMap();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const HOST_TO_ROUGH_SVG = new WeakMap<SVGElement, RoughSVG>();\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\n\nexport interface BaseViewport {\n [key: string]: any;\n offsetX: number;\n offsetY: number;\n zoom: number;\n viewBackgroundColor: string;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return (\n !isNullOrUndefined(value.offsetX) &&\n !isNullOrUndefined(value.offsetY) &&\n !isNullOrUndefined(value.zoom) &&\n !isNullOrUndefined(value.viewBackgroundColor)\n );\n }\n};\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport type Path = number[];\n\nexport const Path = {\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return null;\n });\n }\n};\n","import { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport interface PlaitNode {\n [key: string]: any;\n children?: PlaitNode[];\n id?: string;\n}\n\nexport type Ancestor = PlaitBoard | PlaitNode;\n\nexport interface PlaitNodeInterface {\n parent: (board: PlaitBoard, path: Path) => Ancestor;\n get: (board: PlaitBoard, path: Path) => PlaitNode;\n}\n\nexport const PlaitNode: PlaitNodeInterface = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n get(board: PlaitBoard, path: Path): Ancestor {\n let node: PlaitBoard | PlaitNode = board;\n\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n\n node = node.children[p];\n }\n\n return node;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection.anchor = newProperties.anchor;\n selection.focus = newProperties.focus;\n }\n }\n break;\n }\n }\n return { selection, viewport };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n\n try {\n const state = applyToDraft(board, selection, viewport, op);\n viewport = state.viewport;\n selection = state.selection;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const operation: RemoveNodeOperation = { type: 'remove_node', path };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection\n};\n","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","export type CursorStatus = BaseCursorStatus | string;\nexport enum BaseCursorStatus {\n 'move' = 'move',\n 'select' = 'select'\n}\n","import { PlaitElement } from '../interfaces/element';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitElementContext } from '../interfaces/element-context';\nimport { SimpleChanges } from '@angular/core';\nimport { FLUSHING } from '../utils/weak-maps';\nimport { Transforms } from '../transfroms';\nimport { BaseCursorStatus } from '../interfaces/cursor';\n\nexport function createBoard(host: SVGElement, children: PlaitElement[]): PlaitBoard {\n const board: PlaitBoard = {\n host,\n viewport: {\n offsetX: 0,\n offsetY: 0,\n zoom: 1,\n viewBackgroundColor: '#000'\n },\n children,\n operations: [],\n selection: { anchor: [0, -1], focus: [-1, -1] },\n cursor: BaseCursorStatus.select,\n apply: (operation: PlaitOperation) => {\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.operations = [];\n });\n }\n },\n onChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n keydown: (event: KeyboardEvent) => {},\n keyup: (event: KeyboardEvent) => {},\n dblclick: (event: MouseEvent) => {},\n drawElement: (context: PlaitElementContext) => [],\n redrawElement: (context: PlaitElementContext, changes: SimpleChanges) => [],\n destroyElement: () => {}\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange, mouseup } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n\n if (onContextChange) {\n onContextChange();\n }\n\n onChange();\n };\n\n return board;\n}\n","import { Point } from 'roughjs/bin/geometry';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function toPoint(x: number, y: number, container: SVGElement): Point {\n const rect = container.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number,fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}","import { RectangleClient } from '../interfaces/graph';\nimport { Point } from '../interfaces/point';\n\nexport function toRectangleClient(points: [Point, Point]): RectangleClient {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n}\n","import { BaseCursorStatus } from '../interfaces/cursor';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transfroms';\nimport { toPoint } from '../utils/dom';\nimport { toRectangleClient } from '../utils/graph';\n\nexport function withSelection<T extends PlaitBoard>(board: T) {\n const { mousedown, mousemove, mouseup } = board;\n\n let start: Point | null = null;\n let end: Point | null = null;\n\n board.mousedown = (event: MouseEvent) => {\n // avoid select text when double click svg\n if (!(event.target instanceof HTMLElement && event.target.closest('.richtext'))) {\n event.preventDefault();\n }\n if (board.cursor === BaseCursorStatus.select) {\n start = toPoint(event.x, event.y, board.host);\n }\n mousedown(event);\n };\n\n board.mousemove = (event: MouseEvent) => {\n const movedTarget = toPoint(event.x, event.y, board.host);\n if (start) {\n const rectangleClient = toRectangleClient([start, movedTarget]);\n if (start && Math.hypot(rectangleClient.width, rectangleClient.height) > 5) {\n end = movedTarget;\n }\n }\n mousemove(event);\n };\n\n board.mouseup = (event: MouseEvent) => {\n if (start) {\n Transforms.setSelection(board, { anchor: start, focus: start });\n }\n start = null;\n end = null;\n mouseup(event);\n };\n\n return board;\n}\n","import { PlaitNode } from './node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation = InsertNodeOperation | SetViewportOperation | SetSelectionOperation | SetNodeOperation | RemoveNodeOperation | MoveNodeOperation;\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\n\nexport const PlaitOperation = {\n isSetViewportOperation\n};","import { PlaitBoard, Point } from '../interfaces';\n\nexport function transformPoints(board: PlaitBoard, points: Point[]) {\n const newPoints = points.map(point => {\n return transformPoint(board, point);\n });\n return newPoints;\n}\n\nexport function transformPoint(board: PlaitBoard, point: Point) {\n const { width, height } = board.host.getBoundingClientRect();\n const viewBox = getViewBox(board);\n let x = (point[0] / width) * viewBox.width + viewBox.minX;\n let y = (point[1] / height) * viewBox.height + viewBox.minY;\n const newPoint = [x - board.viewport.offsetX, y - board.viewport.offsetY] as Point;\n return newPoint;\n}\n\nexport function getViewBox(board: PlaitBoard): ViewBox {\n const { width, height } = board.host.getBoundingClientRect() as DOMRect;\n const scaleWidth = (board.viewport.zoom - 1) * width;\n const scaleHeight = (board.viewport.zoom - 1) * height;\n const viewBoxWidth = width - scaleWidth;\n const viewBoxHeight = height - scaleHeight;\n const minX = scaleWidth / 2;\n const minY = scaleHeight / 2;\n return { minX, minY: minY, width: viewBoxWidth, height: viewBoxHeight };\n}\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { Selection } from '../../interfaces/selection';\nimport { createG } from '../../utils/dom';\nimport { Viewport } from '../../interfaces/viewport';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n groupG!: SVGGElement;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() board!: PlaitBoard;\n\n @Input() viewport!: Viewport;\n\n @Input() selection: Selection | null = null;\n\n @Input() host!: SVGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.transform(true);\n this.drawElement();\n }\n\n initialize() {\n this.initialized = true;\n this.groupG = createG();\n this.renderer2.setAttribute(this.groupG, 'plait-element-group', this.index.toString());\n this.host.append(this.groupG);\n }\n\n transform(first = false) {\n if (first && this.viewport.offsetX === 0 && this.viewport.offsetY === 0) {\n return;\n }\n this.renderer2.setAttribute(this.groupG, 'transform', `translate(${this.viewport.offsetX} ${this.viewport.offsetY})`);\n }\n\n drawElement() {\n const gArray = this.board.drawElement({ elementInstance: this });\n gArray.forEach(g => {\n this.groupG.appendChild(g);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const viewport = changes['viewport'];\n if (this.initialized && viewport) {\n this.transform();\n }\n if (this.initialized) {\n this.board.redrawElement({ elementInstance: this }, changes);\n }\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement();\n this.groupG.remove();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE } from '../utils/weak-maps';\nimport { PlaitBoardChangeEvent, PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport rough from 'roughjs/bin/rough';\nimport { Transforms } from '../transfroms';\nimport { withSelection } from '../plugins/with-selection';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { getViewBox } from '../utils/board';\nimport { Viewport } from '../interfaces/viewport';\n\n@Component({\n selector: 'plait-board',\n template: `\n <svg #svg width=\"100%\" height=\"100%\"></svg>\n <div class=\"plait-toolbar island zoom-toolbar\">\n <button class=\"item\" (mousedown)=\"zoomOut($event)\">-</button>\n <button class=\"item zoom-value\" (mousedown)=\"resetZoom($event)\">{{ zoom }}%</button>\n <button class=\"item\" (mousedown)=\"zoomIn($event)\">+</button>\n </div>\n <plait-element\n *ngFor=\"let item of board.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [board]=\"board\"\n [viewport]=\"board.viewport\"\n [selection]=\"board.selection\"\n [host]=\"host\"\n ></plait-element>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaitBoardComponent implements OnInit, AfterViewInit, OnDestroy {\n zoom = 100;\n\n @HostBinding('class') hostClass = `plait-board-container`;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$: Subject<any> = new Subject();\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n get host(): SVGElement {\n return this.svg.nativeElement;\n }\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n constructor(private cdr: ChangeDetectorRef, private renderer2: Renderer2) {}\n\n ngOnInit(): void {\n const roughSVG = rough.svg(this.host as SVGSVGElement, { options: { roughness: 0, strokeWidth: 1 } });\n HOST_TO_ROUGH_SVG.set(this.host, roughSVG);\n this.initializePlugins();\n this.initializeEvents();\n this.updateViewport();\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.cdr.detectChanges();\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection\n };\n this.plaitChange.emit(changeEvent);\n // update viewBox\n if (this.board.operations.some(op => PlaitOperation.isSetViewportOperation(op))) {\n this.updateViewport();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n }\n\n initializePlugins() {\n let board = withSelection(withBoard(createBoard(this.host, this.plaitValue)));\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n }\n\n initializeEvents() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousemove(event);\n });\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.dblclick(event);\n });\n fromEvent<WheelEvent>(this.host, 'wheel')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n event.preventDefault();\n const viewport = this.board.viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n offsetX: viewport?.offsetX - event.deltaX,\n offsetY: viewport?.offsetY - event.deltaY\n });\n });\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n return !IS_TEXT_EDITABLE.get(this.board as PlaitBoard);\n })\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keydown(event);\n });\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyup(event);\n });\n\n window.onresize = () => {\n const viewBoxModel = getViewBox(this.board);\n const viewBoxValues = this.host.getAttribute('viewBox')?.split(',') as string[];\n this.renderer2.setAttribute(\n this.host,\n 'viewBox',\n `${viewBoxValues[0].trim()}, ${viewBoxValues[1].trim()}, ${viewBoxModel.width}, ${viewBoxModel.height}`\n );\n };\n }\n\n updateViewport() {\n this.zoom = Math.floor(this.board.viewport.zoom * 100);\n const viewBox = getViewBox(this.board);\n this.renderer2.setAttribute(this.host, 'viewBox', `${viewBox.minX}, ${viewBox.minY}, ${viewBox.width}, ${viewBox.height}`);\n }\n\n // 放大\n zoomIn(event: MouseEvent) {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: viewport.zoom + 0.1\n });\n }\n\n // 缩小\n zoomOut(event: MouseEvent) {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: viewport.zoom - 0.1\n });\n }\n\n resetZoom(event: MouseEvent) {\n const viewport = this.board?.viewport as Viewport;\n Transforms.setViewport(this.board, {\n ...viewport,\n zoom: 1\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return index;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n HOST_TO_ROUGH_SVG.delete(this.host);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { PlaitBoardComponent } from './board/board.component';\nimport { PlaitElementComponent } from './core/element/element.component';\n\n@NgModule({\n declarations: [PlaitBoardComponent, PlaitElementComponent],\n imports: [BrowserModule],\n exports: [PlaitBoardComponent, PlaitElementComponent]\n})\nexport class PlaitModule {}\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n","/**\n * Extendable Custom Types Interface\n */\n\ntype ExtendableTypes = 'Viewport' | 'SetViewportOperation' | 'SetSelectionOperation';\n\nexport interface CustomTypes {\n [key: string]: unknown;\n}\n\nexport type ExtendedType<K extends ExtendableTypes, B> = unknown extends CustomTypes[K] ? B : CustomTypes[K];\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './plait.module';\nexport * from './utils';\nexport * from './transfroms';\nexport * from './interfaces';\nexport * from './core/base/detector';\nexport * from './core/element/element.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PlaitElementComponent"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { SimpleChanges } from '@angular/core';
2
+ import { CursorStatus } from './cursor';
3
+ import { PlaitElement } from './element';
4
+ import { PlaitElementContext } from './element-context';
5
+ import { PlaitOperation } from './operation';
6
+ import { Selection } from './selection';
7
+ import { Viewport } from './viewport';
8
+ export interface PlaitBoard {
9
+ host: SVGElement;
10
+ viewport: Viewport;
11
+ children: PlaitElement[];
12
+ operations: PlaitOperation[];
13
+ selection: Selection | null;
14
+ cursor: CursorStatus;
15
+ apply: (operation: PlaitOperation) => void;
16
+ onChange: () => void;
17
+ mousedown: (event: MouseEvent) => void;
18
+ mouseup: (event: MouseEvent) => void;
19
+ mousemove: (event: MouseEvent) => void;
20
+ keydown: (event: KeyboardEvent) => void;
21
+ keyup: (event: KeyboardEvent) => void;
22
+ dblclick: (event: MouseEvent) => void;
23
+ drawElement: (context: PlaitElementContext) => SVGGElement[];
24
+ redrawElement: (context: PlaitElementContext, changes: SimpleChanges) => SVGGElement[];
25
+ destroyElement: () => void;
26
+ }
27
+ export interface PlaitBoardChangeEvent {
28
+ children: PlaitElement[];
29
+ operations: PlaitOperation[];
30
+ viewport: Viewport;
31
+ selection: Selection | null;
32
+ }
@@ -0,0 +1,5 @@
1
+ export declare type CursorStatus = BaseCursorStatus | string;
2
+ export declare enum BaseCursorStatus {
3
+ 'move' = "move",
4
+ 'select' = "select"
5
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Extendable Custom Types Interface
3
+ */
4
+ declare type ExtendableTypes = 'Viewport' | 'SetViewportOperation' | 'SetSelectionOperation';
5
+ export interface CustomTypes {
6
+ [key: string]: unknown;
7
+ }
8
+ export declare type ExtendedType<K extends ExtendableTypes, B> = unknown extends CustomTypes[K] ? B : CustomTypes[K];
9
+ export {};
@@ -0,0 +1,4 @@
1
+ import { PlaitElementComponent } from '../core/element/element.component';
2
+ export interface PlaitElementContext {
3
+ elementInstance: PlaitElementComponent;
4
+ }
@@ -0,0 +1,6 @@
1
+ import { PlaitNode } from './node';
2
+ import { Point } from './point';
3
+ export interface PlaitElement extends PlaitNode {
4
+ points: Point[];
5
+ type: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ export interface RectangleClient {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ }
@@ -0,0 +1,13 @@
1
+ export * from './board';
2
+ export * from './cursor';
3
+ export * from './element-context';
4
+ export * from './custom-types';
5
+ export * from './element';
6
+ export * from './graph';
7
+ export * from './node';
8
+ export * from './operation';
9
+ export * from './path';
10
+ export * from './plugin';
11
+ export * from './point';
12
+ export * from './selection';
13
+ export * from './viewport';
@@ -0,0 +1,13 @@
1
+ import { PlaitBoard } from './board';
2
+ import { Path } from './path';
3
+ export interface PlaitNode {
4
+ [key: string]: any;
5
+ children?: PlaitNode[];
6
+ id?: string;
7
+ }
8
+ export declare type Ancestor = PlaitBoard | PlaitNode;
9
+ export interface PlaitNodeInterface {
10
+ parent: (board: PlaitBoard, path: Path) => Ancestor;
11
+ get: (board: PlaitBoard, path: Path) => PlaitNode;
12
+ }
13
+ export declare const PlaitNode: PlaitNodeInterface;
@@ -0,0 +1,39 @@
1
+ import { PlaitNode } from './node';
2
+ import { Path } from './path';
3
+ import { Selection } from './selection';
4
+ import { Viewport } from './viewport';
5
+ export declare type InsertNodeOperation = {
6
+ type: 'insert_node';
7
+ path: Path;
8
+ node: PlaitNode;
9
+ };
10
+ export declare type RemoveNodeOperation = {
11
+ type: 'remove_node';
12
+ path: Path;
13
+ };
14
+ export declare type MoveNodeOperation = {
15
+ type: 'move_node';
16
+ path: Path;
17
+ newPath: Path;
18
+ };
19
+ export declare type SetViewportOperation = {
20
+ type: 'set_viewport';
21
+ properties: Partial<Viewport>;
22
+ newProperties: Partial<Viewport>;
23
+ };
24
+ export declare type SetSelectionOperation = {
25
+ type: 'set_selection';
26
+ properties: Selection | null;
27
+ newProperties: Selection | null;
28
+ };
29
+ export declare type SetNodeOperation = {
30
+ type: 'set_node';
31
+ path: Path;
32
+ properties: Partial<PlaitNode>;
33
+ newProperties: Partial<PlaitNode>;
34
+ };
35
+ export declare type PlaitOperation = InsertNodeOperation | SetViewportOperation | SetSelectionOperation | SetNodeOperation | RemoveNodeOperation | MoveNodeOperation;
36
+ export declare const isSetViewportOperation: (value: any) => value is SetViewportOperation;
37
+ export declare const PlaitOperation: {
38
+ isSetViewportOperation: (value: any) => value is SetViewportOperation;
39
+ };
@@ -0,0 +1,32 @@
1
+ import { PlaitOperation } from './operation';
2
+ export declare type Path = number[];
3
+ export declare const Path: {
4
+ parent(path: Path): Path;
5
+ next(path: Path): Path;
6
+ /**
7
+ * Check if a path is an ancestor of another.
8
+ */
9
+ isAncestor(path: Path, another: Path): boolean;
10
+ /**
11
+ * Compare a path to another, returning an integer indicating whether the path
12
+ * was before, at, or after the other.
13
+ *
14
+ * Note: Two paths of unequal length can still receive a `0` result if one is
15
+ * directly above or below the other. If you want exact matching, use
16
+ * [[Path.equals]] instead.
17
+ */
18
+ compare(path: Path, another: Path): -1 | 0 | 1;
19
+ /**
20
+ * Check if a path is exactly equal to another.
21
+ */
22
+ equals(path: Path, another: Path): boolean;
23
+ /**
24
+ * Check if a path ends before one of the indexes in another.
25
+ */
26
+ endsBefore(path: Path, another: Path): boolean;
27
+ /**
28
+ * Check if a path is a sibling of another.
29
+ */
30
+ isSibling(path: Path, another: Path): boolean;
31
+ transform(path: Path | null, operation: PlaitOperation): Path | null;
32
+ };
@@ -0,0 +1,2 @@
1
+ import { PlaitBoard } from './board';
2
+ export declare type PlaitPlugin = (board: PlaitBoard) => PlaitBoard;
@@ -0,0 +1 @@
1
+ export declare type Point = [number, number];
@@ -0,0 +1,5 @@
1
+ import { Point } from './point';
2
+ export interface Selection {
3
+ anchor: Point;
4
+ focus: Point;
5
+ }
@@ -0,0 +1,13 @@
1
+ import { ExtendedType } from './custom-types';
2
+ export interface BaseViewport {
3
+ [key: string]: any;
4
+ offsetX: number;
5
+ offsetY: number;
6
+ zoom: number;
7
+ viewBackgroundColor: string;
8
+ }
9
+ export declare type Viewport = ExtendedType<'Viewport', BaseViewport>;
10
+ export interface ViewportInterface {
11
+ isViewport: (value: any) => value is Viewport;
12
+ }
13
+ export declare const Viewport: ViewportInterface;
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@plait/core",
3
+ "version": "0.0.2",
4
+ "peerDependencies": {
5
+ "@angular/common": "^12.2.0",
6
+ "@angular/core": "^12.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "module": "fesm2015/plait-core.mjs",
12
+ "es2020": "fesm2020/plait-core.mjs",
13
+ "esm2020": "esm2020/plait-core.mjs",
14
+ "fesm2020": "fesm2020/plait-core.mjs",
15
+ "fesm2015": "fesm2015/plait-core.mjs",
16
+ "typings": "plait-core.d.ts",
17
+ "exports": {
18
+ "./package.json": {
19
+ "default": "./package.json"
20
+ },
21
+ ".": {
22
+ "types": "./plait-core.d.ts",
23
+ "esm2020": "./esm2020/plait-core.mjs",
24
+ "es2020": "./fesm2020/plait-core.mjs",
25
+ "es2015": "./fesm2015/plait-core.mjs",
26
+ "node": "./fesm2015/plait-core.mjs",
27
+ "default": "./fesm2020/plait-core.mjs"
28
+ }
29
+ },
30
+ "sideEffects": false
31
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@plait/core" />
5
+ export * from './public-api';
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./board/board.component";
3
+ import * as i2 from "./core/element/element.component";
4
+ import * as i3 from "@angular/platform-browser";
5
+ export declare class PlaitModule {
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<PlaitModule, never>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PlaitModule, [typeof i1.PlaitBoardComponent, typeof i2.PlaitElementComponent], [typeof i3.BrowserModule], [typeof i1.PlaitBoardComponent, typeof i2.PlaitElementComponent]>;
8
+ static ɵinj: i0.ɵɵInjectorDeclaration<PlaitModule>;
9
+ }
@@ -0,0 +1,3 @@
1
+ import { PlaitElement } from '../interfaces/element';
2
+ import { PlaitBoard } from '../interfaces/board';
3
+ export declare function createBoard(host: SVGElement, children: PlaitElement[]): PlaitBoard;
@@ -0,0 +1,2 @@
1
+ import { PlaitBoard } from '../interfaces/board';
2
+ export declare function withBoard(board: PlaitBoard): PlaitBoard;
@@ -0,0 +1,2 @@
1
+ import { PlaitBoard } from '../interfaces/board';
2
+ export declare function withSelection<T extends PlaitBoard>(board: T): T;
@@ -0,0 +1,7 @@
1
+ export * from './board/board.component';
2
+ export * from './plait.module';
3
+ export * from './utils';
4
+ export * from './transfroms';
5
+ export * from './interfaces';
6
+ export * from './core/base/detector';
7
+ export * from './core/element/element.component';
@@ -0,0 +1,6 @@
1
+ import { PlaitOperation } from '../interfaces/operation';
2
+ import { PlaitBoard } from '../interfaces/board';
3
+ export interface GeneralTransforms {
4
+ transform: (board: PlaitBoard, op: PlaitOperation) => void;
5
+ }
6
+ export declare const GeneralTransforms: GeneralTransforms;
@@ -0,0 +1,5 @@
1
+ import { GeneralTransforms } from './general';
2
+ import { NodeTransforms } from './node';
3
+ import { SelectionTransforms } from './selection';
4
+ import { ViewportTransforms } from './viewport';
5
+ export declare const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms;
@@ -0,0 +1,14 @@
1
+ import { PlaitBoard } from '../interfaces/board';
2
+ import { PlaitNode } from '../interfaces/node';
3
+ import { Path } from '../interfaces/path';
4
+ export declare function insertNode(board: PlaitBoard, node: PlaitNode, path: Path): void;
5
+ export declare function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path): void;
6
+ export declare function removeNode(board: PlaitBoard, path: Path): void;
7
+ export declare function moveNode(board: PlaitBoard, path: Path, newPath: Path): void;
8
+ export interface NodeTransforms {
9
+ insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;
10
+ setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;
11
+ removeNode: (board: PlaitBoard, path: Path) => void;
12
+ moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;
13
+ }
14
+ export declare const NodeTransforms: NodeTransforms;
@@ -0,0 +1,7 @@
1
+ import { PlaitBoard } from '../interfaces/board';
2
+ import { Selection } from '../interfaces/selection';
3
+ export declare function setSelection(board: PlaitBoard, selection: Selection | null): void;
4
+ export interface SelectionTransforms {
5
+ setSelection: (board: PlaitBoard, selection: Selection | null) => void;
6
+ }
7
+ export declare const SelectionTransforms: SelectionTransforms;
@@ -0,0 +1,7 @@
1
+ import { PlaitBoard } from '../interfaces/board';
2
+ import { Viewport } from '../interfaces/viewport';
3
+ export declare function setViewport(board: PlaitBoard, viewport: Viewport): void;
4
+ export interface ViewportTransforms {
5
+ setViewport: (board: PlaitBoard, viewport: Viewport) => void;
6
+ }
7
+ export declare const ViewportTransforms: ViewportTransforms;
@@ -0,0 +1,10 @@
1
+ import { PlaitBoard, Point } from '../interfaces';
2
+ export declare function transformPoints(board: PlaitBoard, points: Point[]): Point[];
3
+ export declare function transformPoint(board: PlaitBoard, point: Point): Point;
4
+ export declare function getViewBox(board: PlaitBoard): ViewBox;
5
+ export declare type ViewBox = {
6
+ minX: number;
7
+ minY: number;
8
+ width: number;
9
+ height: number;
10
+ };
package/utils/dom.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { Point } from 'roughjs/bin/geometry';
2
+ export declare const NS = "http://www.w3.org/2000/svg";
3
+ export declare function toPoint(x: number, y: number, container: SVGElement): Point;
4
+ export declare function createG(): SVGGElement;
5
+ export declare function createSVG(): SVGSVGElement;
6
+ export declare function createText(x: number, y: number, fill: string, textContent: string): SVGTextElement;
@@ -0,0 +1,7 @@
1
+ export declare const IS_IOS: boolean;
2
+ export declare const IS_APPLE: boolean;
3
+ export declare const IS_FIREFOX: boolean;
4
+ export declare const IS_SAFARI: boolean;
5
+ export declare const IS_EDGE_LEGACY: boolean;
6
+ export declare const IS_CHROME: boolean;
7
+ export declare const IS_CHROME_LEGACY: boolean;
@@ -0,0 +1,3 @@
1
+ import { RectangleClient } from '../interfaces/graph';
2
+ import { Point } from '../interfaces/point';
3
+ export declare function toRectangleClient(points: [Point, Point]): RectangleClient;
@@ -0,0 +1 @@
1
+ export declare function isNullOrUndefined(value: any): boolean;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Hotkeys.
3
+ */
4
+ declare const hotkeys: {
5
+ isBold: (event: KeyboardEvent) => boolean;
6
+ isCompose: (event: KeyboardEvent) => boolean;
7
+ isMoveBackward: (event: KeyboardEvent) => boolean;
8
+ isMoveForward: (event: KeyboardEvent) => boolean;
9
+ isMoveUp: (event: KeyboardEvent) => boolean;
10
+ isMoveDown: (event: KeyboardEvent) => boolean;
11
+ isDeleteBackward: (event: KeyboardEvent) => boolean;
12
+ isDeleteForward: (event: KeyboardEvent) => boolean;
13
+ isDeleteLineBackward: (event: KeyboardEvent) => boolean;
14
+ isDeleteLineForward: (event: KeyboardEvent) => boolean;
15
+ isDeleteWordBackward: (event: KeyboardEvent) => boolean;
16
+ isDeleteWordForward: (event: KeyboardEvent) => boolean;
17
+ isExtendBackward: (event: KeyboardEvent) => boolean;
18
+ isExtendForward: (event: KeyboardEvent) => boolean;
19
+ isExtendLineBackward: (event: KeyboardEvent) => boolean;
20
+ isExtendLineForward: (event: KeyboardEvent) => boolean;
21
+ isItalic: (event: KeyboardEvent) => boolean;
22
+ isMoveLineBackward: (event: KeyboardEvent) => boolean;
23
+ isMoveLineForward: (event: KeyboardEvent) => boolean;
24
+ isMoveWordBackward: (event: KeyboardEvent) => boolean;
25
+ isMoveWordForward: (event: KeyboardEvent) => boolean;
26
+ isRedo: (event: KeyboardEvent) => boolean;
27
+ isSplitBlock: (event: KeyboardEvent) => boolean;
28
+ isTransposeCharacter: (event: KeyboardEvent) => boolean;
29
+ isUndo: (event: KeyboardEvent) => boolean;
30
+ };
31
+ export default hotkeys;
32
+ export { hotkeys };
@@ -0,0 +1 @@
1
+ export declare function idCreator(length?: number): string;
@@ -0,0 +1,9 @@
1
+ export * from './dom';
2
+ export * from './environment';
3
+ export * from './graph';
4
+ export * from './hotkeys';
5
+ export * from './id-creator';
6
+ export * from './weak-maps';
7
+ export * from './helper';
8
+ export * from './math';
9
+ export * from './board';
@@ -0,0 +1,2 @@
1
+ export declare function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number): number;
2
+ export declare function rotate(x1: number, y1: number, x2: number, y2: number, angle: number): number[];
@@ -0,0 +1,6 @@
1
+ import { RoughSVG } from 'roughjs/bin/svg';
2
+ import { PlaitBoard } from '../interfaces/board';
3
+ export declare const FLUSHING: WeakMap<PlaitBoard, boolean>;
4
+ export declare const IS_TEXT_EDITABLE: WeakMap<PlaitBoard, boolean>;
5
+ export declare const BOARD_TO_ON_CHANGE: WeakMap<PlaitBoard, () => void>;
6
+ export declare const HOST_TO_ROUGH_SVG: WeakMap<SVGElement, RoughSVG>;