@logicflow/core 2.0.0-beta.1 → 2.0.0-beta.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.
- package/.turbo/turbo-build$colon$dev.log +2 -2
- package/.turbo/turbo-build.log +7 -7
- package/dist/index.min.js +2 -2
- package/es/LogicFlow.d.ts +30 -18
- package/es/LogicFlow.js +22 -20
- package/es/LogicFlow.js.map +1 -1
- package/es/options.d.ts +2 -2
- package/lib/LogicFlow.d.ts +30 -18
- package/lib/LogicFlow.js +21 -19
- package/lib/LogicFlow.js.map +1 -1
- package/lib/options.d.ts +2 -2
- package/package.json +1 -1
- package/src/LogicFlow.tsx +79 -49
- package/src/options.ts +2 -2
package/lib/options.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ import GridOptions = Grid.GridOptions;
|
|
|
7
7
|
export declare namespace Options {
|
|
8
8
|
import NodeData = LogicFlow.NodeData;
|
|
9
9
|
import EdgeData = LogicFlow.EdgeData;
|
|
10
|
-
import ExtensionConstructor = LogicFlow.ExtensionConstructor;
|
|
11
10
|
import GraphData = LogicFlow.GraphData;
|
|
11
|
+
import ExtensionType = LogicFlow.ExtensionType;
|
|
12
12
|
type EdgeType = 'line' | 'polyline' | 'bezier' | string;
|
|
13
13
|
type BackgroundConfig = {
|
|
14
14
|
backgroundImage?: string;
|
|
@@ -56,7 +56,7 @@ export declare namespace Options {
|
|
|
56
56
|
textEdit?: boolean;
|
|
57
57
|
guards?: GuardsConfig;
|
|
58
58
|
overlapMode?: OverlapMode;
|
|
59
|
-
plugins?:
|
|
59
|
+
plugins?: ExtensionType[];
|
|
60
60
|
pluginsOptions?: Record<string, any>;
|
|
61
61
|
disabledPlugins?: string[];
|
|
62
62
|
disabledTools?: string[];
|
package/package.json
CHANGED
package/src/LogicFlow.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentType, createElement as h, render } from 'preact/compat'
|
|
2
|
-
import { cloneDeep, forEach } from 'lodash-es'
|
|
2
|
+
import { cloneDeep, forEach, indexOf } from 'lodash-es'
|
|
3
3
|
import { observer } from '.'
|
|
4
4
|
import { Options as LFOptions } from './options'
|
|
5
5
|
import * as _Model from './model'
|
|
@@ -24,8 +24,9 @@ import History from './history'
|
|
|
24
24
|
import { EventCallback, CallbackArgs, EventArgs } from './event/eventEmitter'
|
|
25
25
|
import { ElementType, EventType, SegmentDirection } from './constant'
|
|
26
26
|
import { initDefaultShortcut } from './keyboard/shortcut'
|
|
27
|
+
|
|
27
28
|
import Extension = LogicFlow.Extension
|
|
28
|
-
import
|
|
29
|
+
import ExtensionConfig = LogicFlow.ExtensionConfig
|
|
29
30
|
import ExtensionConstructor = LogicFlow.ExtensionConstructor
|
|
30
31
|
import GraphConfigData = LogicFlow.GraphConfigData
|
|
31
32
|
import NodeConfig = LogicFlow.NodeConfig
|
|
@@ -38,11 +39,13 @@ import RegisterParam = LogicFlow.RegisterParam
|
|
|
38
39
|
import GraphElements = LogicFlow.GraphElements
|
|
39
40
|
import Position = LogicFlow.Position
|
|
40
41
|
import PointTuple = LogicFlow.PointTuple
|
|
41
|
-
import
|
|
42
|
+
import ExtensionRenderFunc = LogicFlow.ExtensionRenderFunc
|
|
42
43
|
import RegisterElementFunc = LogicFlow.RegisterElementFunc
|
|
43
44
|
import PropertiesType = LogicFlow.PropertiesType
|
|
44
45
|
import BaseNodeModelCtor = LogicFlow.BaseNodeModelCtor
|
|
45
46
|
import ClientPosition = LogicFlow.ClientPosition
|
|
47
|
+
import ExtensionDefinition = LogicFlow.ExtensionDefinition
|
|
48
|
+
import ExtensionType = LogicFlow.ExtensionType
|
|
46
49
|
|
|
47
50
|
const pluginFlag = Symbol('plugin registered by Logicflow.use')
|
|
48
51
|
|
|
@@ -61,13 +64,13 @@ export class LogicFlow {
|
|
|
61
64
|
tool: Tool
|
|
62
65
|
snaplineModel?: SnaplineModel
|
|
63
66
|
|
|
64
|
-
components:
|
|
67
|
+
components: ExtensionRenderFunc[] = []
|
|
65
68
|
// 个性配置的插件,覆盖全局配置的插件
|
|
66
|
-
readonly plugins:
|
|
69
|
+
readonly plugins: ExtensionType[]
|
|
67
70
|
// 全局配置的插件,所有的LogicFlow示例都会使用
|
|
68
|
-
static extensions: Map<string,
|
|
71
|
+
static extensions: Map<string, ExtensionConfig> = new Map()
|
|
69
72
|
// 插件扩展方法
|
|
70
|
-
extension: Record<string, Extension> = {}
|
|
73
|
+
extension: Record<string, Extension | ExtensionDefinition> = {}
|
|
71
74
|
|
|
72
75
|
readonly width?: number // 只读:画布宽度
|
|
73
76
|
readonly height?: number // 只读:画布高度
|
|
@@ -1292,19 +1295,14 @@ export class LogicFlow {
|
|
|
1292
1295
|
* @param props
|
|
1293
1296
|
*/
|
|
1294
1297
|
static use(
|
|
1295
|
-
extension: ExtensionConstructor,
|
|
1298
|
+
extension: ExtensionConstructor | ExtensionDefinition,
|
|
1296
1299
|
props?: Record<string, unknown>,
|
|
1297
1300
|
): void {
|
|
1298
|
-
|
|
1301
|
+
const { pluginName } = extension
|
|
1299
1302
|
if (!pluginName) {
|
|
1300
|
-
|
|
1301
|
-
`请给插件${
|
|
1302
|
-
extension.name || extension.constructor.name
|
|
1303
|
-
}指定pluginName!`,
|
|
1304
|
-
)
|
|
1305
|
-
pluginName = extension.name // 兼容以前name的情况,1.0版本去掉。
|
|
1303
|
+
throw new Error(`请给插件指定 pluginName!`)
|
|
1306
1304
|
}
|
|
1307
|
-
// TODO:
|
|
1305
|
+
// TODO: 应该在何时进行插件的销毁???
|
|
1308
1306
|
// const preExtension = this.extensions.get(pluginName)?.extension
|
|
1309
1307
|
// preExtension?.destroy?.() // 该代码应该有问题,因为 preExtension 直接用的是 Constructor,没有实例化。无法访问实例方法 destroy
|
|
1310
1308
|
|
|
@@ -1316,19 +1314,26 @@ export class LogicFlow {
|
|
|
1316
1314
|
}
|
|
1317
1315
|
|
|
1318
1316
|
private installPlugins(disabledPlugins: string[] = []) {
|
|
1317
|
+
const extensionsAddByUse = Array.from(
|
|
1318
|
+
LogicFlow.extensions,
|
|
1319
|
+
([, extension]) => extension,
|
|
1320
|
+
)
|
|
1319
1321
|
// 安装插件,优先使用个性插件
|
|
1320
|
-
const extensions = this.plugins
|
|
1321
|
-
|
|
1322
|
-
let extension:
|
|
1323
|
-
let props
|
|
1324
|
-
|
|
1322
|
+
const extensions = [...extensionsAddByUse, ...this.plugins]
|
|
1323
|
+
forEach(extensions, (ext) => {
|
|
1324
|
+
let extension: ExtensionConstructor | ExtensionDefinition
|
|
1325
|
+
let props: Record<string, any> | undefined
|
|
1326
|
+
|
|
1327
|
+
if (pluginFlag in ext) {
|
|
1325
1328
|
extension = ext.extension
|
|
1326
1329
|
props = ext.props
|
|
1327
1330
|
} else {
|
|
1328
1331
|
extension = ext
|
|
1329
1332
|
}
|
|
1330
|
-
|
|
1331
|
-
|
|
1333
|
+
|
|
1334
|
+
const pluginName = extension?.pluginName
|
|
1335
|
+
|
|
1336
|
+
if (indexOf(disabledPlugins, pluginName) === -1) {
|
|
1332
1337
|
this.installPlugin(extension, props)
|
|
1333
1338
|
}
|
|
1334
1339
|
})
|
|
@@ -1337,31 +1342,38 @@ export class LogicFlow {
|
|
|
1337
1342
|
/**
|
|
1338
1343
|
* 加载插件-内部方法
|
|
1339
1344
|
*/
|
|
1340
|
-
private installPlugin(
|
|
1341
|
-
|
|
1342
|
-
|
|
1345
|
+
private installPlugin(
|
|
1346
|
+
extension: ExtensionConstructor | ExtensionDefinition,
|
|
1347
|
+
props?: Record<string, any>,
|
|
1348
|
+
) {
|
|
1349
|
+
if ('pluginName' in extension && 'install' in extension) {
|
|
1350
|
+
const { pluginName, install, render } = extension
|
|
1343
1351
|
if (pluginName) {
|
|
1344
1352
|
install && install.call(extension, this, LogicFlow)
|
|
1345
|
-
|
|
1353
|
+
render && this.components.push(render.bind(extension))
|
|
1346
1354
|
this.extension[pluginName] = extension
|
|
1347
1355
|
}
|
|
1348
1356
|
return
|
|
1349
1357
|
}
|
|
1350
|
-
|
|
1351
|
-
const
|
|
1358
|
+
|
|
1359
|
+
const ExtensionCtor = extension as ExtensionConstructor
|
|
1360
|
+
const extensionIns = new ExtensionCtor({
|
|
1352
1361
|
lf: this,
|
|
1353
1362
|
LogicFlow,
|
|
1354
|
-
options: this.options.pluginsOptions ?? {},
|
|
1355
1363
|
props,
|
|
1364
|
+
options: this.options.pluginsOptions ?? {},
|
|
1356
1365
|
})
|
|
1357
|
-
|
|
1358
|
-
this.components.push(
|
|
1359
|
-
this.extension[
|
|
1366
|
+
extensionIns.render &&
|
|
1367
|
+
this.components.push(extensionIns.render.bind(extensionIns))
|
|
1368
|
+
this.extension[ExtensionCtor.pluginName] = extensionIns
|
|
1360
1369
|
}
|
|
1361
1370
|
}
|
|
1362
1371
|
|
|
1363
1372
|
// Option
|
|
1364
1373
|
export namespace LogicFlow {
|
|
1374
|
+
/**
|
|
1375
|
+
* LogicFlow init Options
|
|
1376
|
+
*/
|
|
1365
1377
|
export interface Options extends LFOptions.Common {}
|
|
1366
1378
|
|
|
1367
1379
|
export type DomAttributes = {
|
|
@@ -1376,6 +1388,7 @@ export namespace LogicFlow {
|
|
|
1376
1388
|
ry?: number
|
|
1377
1389
|
} & Record<string, any>
|
|
1378
1390
|
export type AttributesType = Record<string, any>
|
|
1391
|
+
|
|
1379
1392
|
export type VectorData = {
|
|
1380
1393
|
deltaX: number
|
|
1381
1394
|
deltaY: number
|
|
@@ -1390,7 +1403,7 @@ export namespace LogicFlow {
|
|
|
1390
1403
|
}
|
|
1391
1404
|
export type Point = {
|
|
1392
1405
|
id?: string
|
|
1393
|
-
[key: string]: any
|
|
1406
|
+
[key: string]: any // TODO: 确认这个属性是干什么的呢?是有可以移除
|
|
1394
1407
|
} & Position
|
|
1395
1408
|
export type PointTuple = [number, number]
|
|
1396
1409
|
export type ClientPosition = {
|
|
@@ -1422,7 +1435,7 @@ export namespace LogicFlow {
|
|
|
1422
1435
|
value: string
|
|
1423
1436
|
editable?: boolean
|
|
1424
1437
|
draggable?: boolean
|
|
1425
|
-
} &
|
|
1438
|
+
} & Position
|
|
1426
1439
|
|
|
1427
1440
|
export type AppendConfig = {
|
|
1428
1441
|
startIndex: number
|
|
@@ -1755,8 +1768,14 @@ export namespace LogicFlow {
|
|
|
1755
1768
|
|
|
1756
1769
|
// Render or Functions
|
|
1757
1770
|
export namespace LogicFlow {
|
|
1758
|
-
type FocusOnById = {
|
|
1759
|
-
|
|
1771
|
+
type FocusOnById = {
|
|
1772
|
+
id: string
|
|
1773
|
+
coordinate?: never
|
|
1774
|
+
}
|
|
1775
|
+
type FocusOnByCoordinate = {
|
|
1776
|
+
id?: string
|
|
1777
|
+
coordinate: Position
|
|
1778
|
+
}
|
|
1760
1779
|
export type FocusOnArgsType = FocusOnById | FocusOnByCoordinate
|
|
1761
1780
|
|
|
1762
1781
|
export type BaseNodeModelCtor = typeof BaseNodeModel
|
|
@@ -1794,32 +1813,43 @@ export namespace LogicFlow {
|
|
|
1794
1813
|
new (options: LFOptions.Definition): LogicFlow
|
|
1795
1814
|
}
|
|
1796
1815
|
|
|
1797
|
-
|
|
1816
|
+
/**
|
|
1817
|
+
* Extension 插件类型
|
|
1818
|
+
*/
|
|
1819
|
+
export type ExtensionType = ExtensionConstructor | ExtensionDefinition
|
|
1820
|
+
export type ExtensionConfig = {
|
|
1798
1821
|
[pluginFlag]: symbol
|
|
1799
|
-
extension:
|
|
1800
|
-
props?: Record<string,
|
|
1822
|
+
extension: ExtensionType
|
|
1823
|
+
props?: Record<string, any> // TODO: 看这类型是否可以更精确
|
|
1801
1824
|
}
|
|
1802
1825
|
|
|
1803
|
-
export type
|
|
1826
|
+
export type IExtensionProps = {
|
|
1804
1827
|
lf: LogicFlow
|
|
1805
1828
|
LogicFlow: LogicFlowConstructor
|
|
1806
|
-
options: Record<string, unknown>
|
|
1807
1829
|
props?: Record<string, unknown>
|
|
1830
|
+
options: Record<string, unknown>
|
|
1808
1831
|
}
|
|
1809
1832
|
|
|
1810
1833
|
export interface ExtensionConstructor {
|
|
1811
1834
|
pluginName: string
|
|
1812
|
-
|
|
1813
|
-
new (props: ExtensionProps): Extension
|
|
1835
|
+
new (props: IExtensionProps): Extension
|
|
1814
1836
|
}
|
|
1815
1837
|
|
|
1816
|
-
export type
|
|
1838
|
+
export type ExtensionRenderFunc = (
|
|
1839
|
+
lf: LogicFlow,
|
|
1840
|
+
container: HTMLElement,
|
|
1841
|
+
) => void
|
|
1842
|
+
|
|
1843
|
+
// 对象形式定义的插件
|
|
1844
|
+
export type ExtensionDefinition = {
|
|
1845
|
+
pluginName: string
|
|
1846
|
+
install?: (lf: LogicFlow, LFCtor: LogicFlowConstructor) => void
|
|
1847
|
+
render?: ExtensionRenderFunc
|
|
1848
|
+
}
|
|
1817
1849
|
|
|
1818
1850
|
export interface Extension {
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
render?: ExtensionRender
|
|
1822
|
-
destroy?: () => void
|
|
1851
|
+
render: ExtensionRenderFunc
|
|
1852
|
+
destroy?: () => void // TODO: 确认插件销毁函数参数类型
|
|
1823
1853
|
}
|
|
1824
1854
|
}
|
|
1825
1855
|
|
package/src/options.ts
CHANGED
|
@@ -10,8 +10,8 @@ import GridOptions = Grid.GridOptions
|
|
|
10
10
|
export namespace Options {
|
|
11
11
|
import NodeData = LogicFlow.NodeData
|
|
12
12
|
import EdgeData = LogicFlow.EdgeData
|
|
13
|
-
import ExtensionConstructor = LogicFlow.ExtensionConstructor
|
|
14
13
|
import GraphData = LogicFlow.GraphData
|
|
14
|
+
import ExtensionType = LogicFlow.ExtensionType
|
|
15
15
|
export type EdgeType = 'line' | 'polyline' | 'bezier' | string
|
|
16
16
|
export type BackgroundConfig = {
|
|
17
17
|
// 背景图片地址
|
|
@@ -88,7 +88,7 @@ export namespace Options {
|
|
|
88
88
|
guards?: GuardsConfig
|
|
89
89
|
overlapMode?: OverlapMode
|
|
90
90
|
|
|
91
|
-
plugins?:
|
|
91
|
+
plugins?: ExtensionType[]
|
|
92
92
|
pluginsOptions?: Record<string, any>
|
|
93
93
|
disabledPlugins?: string[]
|
|
94
94
|
disabledTools?: string[]
|