@flowgram-vue/core 0.2.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.
Files changed (133) hide show
  1. package/LICENSE +22 -0
  2. package/dist/index.cjs +0 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +0 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +63 -0
  8. package/src/common/config-entity.ts +80 -0
  9. package/src/common/entity-data.ts +171 -0
  10. package/src/common/entity-manager-contribution.ts +12 -0
  11. package/src/common/entity-manager.ts +475 -0
  12. package/src/common/entity.ts +482 -0
  13. package/src/common/index.ts +22 -0
  14. package/src/common/playground-context.ts +35 -0
  15. package/src/common/playground-decorator-helper.ts +113 -0
  16. package/src/common/playground-decorators.ts +85 -0
  17. package/src/common/playground-schedule.ts +30 -0
  18. package/src/common/protect-wheel-area.ts +11 -0
  19. package/src/common/schema/index.ts +14 -0
  20. package/src/common/schema/node.ts +15 -0
  21. package/src/common/schema/opacity-schema.ts +19 -0
  22. package/src/common/schema/origin-schema.ts +35 -0
  23. package/src/common/schema/position-schema.ts +35 -0
  24. package/src/common/schema/rotation-schema.ts +19 -0
  25. package/src/common/schema/scale-schema.ts +35 -0
  26. package/src/common/schema/size-schema.ts +42 -0
  27. package/src/common/schema/skew-schema.ts +35 -0
  28. package/src/common/schema/transform-schema.ts +613 -0
  29. package/src/common/utils/bounds.spec.ts +229 -0
  30. package/src/common/utils/bounds.ts +176 -0
  31. package/src/common/utils/index.ts +6 -0
  32. package/src/composables/index.ts +16 -0
  33. package/src/composables/use-config-entity.ts +31 -0
  34. package/src/composables/use-entities.ts +26 -0
  35. package/src/composables/use-entity-data-from-context.ts +34 -0
  36. package/src/composables/use-entity-from-context.ts +31 -0
  37. package/src/composables/use-listen-events.ts +22 -0
  38. package/src/composables/use-playground-container.ts +16 -0
  39. package/src/composables/use-playground-context.ts +15 -0
  40. package/src/composables/use-playground-drag.ts +31 -0
  41. package/src/composables/use-playground.ts +16 -0
  42. package/src/composables/use-refresh.ts +6 -0
  43. package/src/composables/use-service.ts +17 -0
  44. package/src/core/index.ts +8 -0
  45. package/src/core/layer/config/editor-state-config-entity.ts +180 -0
  46. package/src/core/layer/config/index.ts +7 -0
  47. package/src/core/layer/config/playground-config-entity.ts +604 -0
  48. package/src/core/layer/index.ts +8 -0
  49. package/src/core/layer/layer.ts +248 -0
  50. package/src/core/layer/playground-layer.ts +547 -0
  51. package/src/core/pipeline/index.ts +10 -0
  52. package/src/core/pipeline/pipeline-entities-selector.ts +200 -0
  53. package/src/core/pipeline/pipeline-entities.ts +230 -0
  54. package/src/core/pipeline/pipeline-registry.ts +344 -0
  55. package/src/core/pipeline/pipeline-renderer.ts +248 -0
  56. package/src/core/pipeline/pipeline-vue-utils.ts +96 -0
  57. package/src/core/pipeline/pipeline.ts +28 -0
  58. package/src/core/utils/index.ts +12 -0
  59. package/src/core/utils/inject-provider-decorators.ts +27 -0
  60. package/src/core/utils/lazy-inject-decorators.ts +38 -0
  61. package/src/core/utils/mouse-touch-event.ts +120 -0
  62. package/src/core/utils/playground-drag.ts +511 -0
  63. package/src/core/utils/playground-gesture.spec.ts +135 -0
  64. package/src/core/utils/playground-gesture.ts +118 -0
  65. package/src/core/utils/tween.ts +156 -0
  66. package/src/core/utils/use-gesture/core/Controller.ts +212 -0
  67. package/src/core/utils/use-gesture/core/EventStore.ts +46 -0
  68. package/src/core/utils/use-gesture/core/TimeoutStore.ts +28 -0
  69. package/src/core/utils/use-gesture/core/actions.ts +63 -0
  70. package/src/core/utils/use-gesture/core/config/commonConfigResolver.ts +86 -0
  71. package/src/core/utils/use-gesture/core/config/coordinatesConfigResolver.ts +48 -0
  72. package/src/core/utils/use-gesture/core/config/dragConfigResolver.ts +140 -0
  73. package/src/core/utils/use-gesture/core/config/hoverConfigResolver.ts +11 -0
  74. package/src/core/utils/use-gesture/core/config/moveConfigResolver.ts +11 -0
  75. package/src/core/utils/use-gesture/core/config/pinchConfigResolver.ts +59 -0
  76. package/src/core/utils/use-gesture/core/config/resolver.ts +70 -0
  77. package/src/core/utils/use-gesture/core/config/scrollConfigResolver.ts +8 -0
  78. package/src/core/utils/use-gesture/core/config/sharedConfigResolver.ts +28 -0
  79. package/src/core/utils/use-gesture/core/config/support.ts +52 -0
  80. package/src/core/utils/use-gesture/core/config/wheelConfigResolver.ts +8 -0
  81. package/src/core/utils/use-gesture/core/engines/CoordinatesEngine.ts +78 -0
  82. package/src/core/utils/use-gesture/core/engines/DragEngine.ts +403 -0
  83. package/src/core/utils/use-gesture/core/engines/Engine.ts +406 -0
  84. package/src/core/utils/use-gesture/core/engines/HoverEngine.ts +43 -0
  85. package/src/core/utils/use-gesture/core/engines/MoveEngine.ts +52 -0
  86. package/src/core/utils/use-gesture/core/engines/PinchEngine.ts +345 -0
  87. package/src/core/utils/use-gesture/core/engines/ScrollEngine.ts +42 -0
  88. package/src/core/utils/use-gesture/core/engines/WheelEngine.ts +48 -0
  89. package/src/core/utils/use-gesture/core/index.ts +7 -0
  90. package/src/core/utils/use-gesture/core/parser.ts +92 -0
  91. package/src/core/utils/use-gesture/core/types/action.ts +19 -0
  92. package/src/core/utils/use-gesture/core/types/config.ts +255 -0
  93. package/src/core/utils/use-gesture/core/types/handlers.ts +73 -0
  94. package/src/core/utils/use-gesture/core/types/index.ts +11 -0
  95. package/src/core/utils/use-gesture/core/types/internalConfig.ts +80 -0
  96. package/src/core/utils/use-gesture/core/types/state.ts +275 -0
  97. package/src/core/utils/use-gesture/core/types/utils.ts +204 -0
  98. package/src/core/utils/use-gesture/core/types.ts +8 -0
  99. package/src/core/utils/use-gesture/core/utils/events.ts +158 -0
  100. package/src/core/utils/use-gesture/core/utils/fn.ts +32 -0
  101. package/src/core/utils/use-gesture/core/utils/maths.ts +63 -0
  102. package/src/core/utils/use-gesture/core/utils/state.ts +24 -0
  103. package/src/core/utils/use-gesture/core/utils.ts +8 -0
  104. package/src/core/utils/use-gesture/index.ts +6 -0
  105. package/src/core/utils/use-gesture/vanilla/DragGesture.ts +27 -0
  106. package/src/core/utils/use-gesture/vanilla/Gesture.ts +45 -0
  107. package/src/core/utils/use-gesture/vanilla/HoverGesture.ts +27 -0
  108. package/src/core/utils/use-gesture/vanilla/MoveGesture.ts +27 -0
  109. package/src/core/utils/use-gesture/vanilla/PinchGesture.ts +27 -0
  110. package/src/core/utils/use-gesture/vanilla/Recognizer.ts +43 -0
  111. package/src/core/utils/use-gesture/vanilla/ScrollGesture.ts +27 -0
  112. package/src/core/utils/use-gesture/vanilla/WheelGesture.ts +27 -0
  113. package/src/core/utils/use-gesture/vanilla/createGesture.ts +18 -0
  114. package/src/core/utils/use-gesture/vanilla/index.ts +18 -0
  115. package/src/env.d.ts +10 -0
  116. package/src/index.ts +17 -0
  117. package/src/playground-config.ts +70 -0
  118. package/src/playground-container.ts +129 -0
  119. package/src/playground-contribution.ts +81 -0
  120. package/src/playground-mock-tools.ts +143 -0
  121. package/src/playground.ts +401 -0
  122. package/src/plugin/index.ts +6 -0
  123. package/src/plugin/plugin.ts +226 -0
  124. package/src/services/clipboard-service.ts +40 -0
  125. package/src/services/context-menu-service.ts +25 -0
  126. package/src/services/index.ts +10 -0
  127. package/src/services/logger-service.ts +49 -0
  128. package/src/services/selection-service.ts +54 -0
  129. package/src/services/storage-service.ts +65 -0
  130. package/src/vue/index.ts +8 -0
  131. package/src/vue/playground-vue-context.ts +22 -0
  132. package/src/vue/playground-vue-provider.ts +115 -0
  133. package/src/vue/playground-vue-renderer.vue +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/entity.ts","../src/common/entity-data.ts","../src/common/schema/origin-schema.ts","../src/common/schema/opacity-schema.ts","../src/common/schema/position-schema.ts","../src/common/schema/rotation-schema.ts","../src/common/schema/scale-schema.ts","../src/common/schema/size-schema.ts","../src/common/schema/skew-schema.ts","../src/common/utils/bounds.ts","../src/common/schema/transform-schema.ts","../src/common/playground-schedule.ts","../src/core/utils/mouse-touch-event.ts","../src/core/utils/playground-drag.ts","../src/core/utils/tween.ts","../src/core/utils/use-gesture/core/utils/state.ts","../src/core/utils/use-gesture/core/utils/maths.ts","../src/core/utils/use-gesture/core/utils/events.ts","../src/core/utils/use-gesture/core/utils/fn.ts","../src/core/utils/use-gesture/core/engines/Engine.ts","../src/core/utils/use-gesture/core/engines/CoordinatesEngine.ts","../src/core/utils/use-gesture/core/engines/WheelEngine.ts","../src/core/utils/use-gesture/core/engines/ScrollEngine.ts","../src/core/utils/use-gesture/core/engines/PinchEngine.ts","../src/core/utils/use-gesture/core/engines/MoveEngine.ts","../src/core/utils/use-gesture/core/engines/HoverEngine.ts","../src/core/utils/use-gesture/core/config/commonConfigResolver.ts","../src/core/utils/use-gesture/core/config/coordinatesConfigResolver.ts","../src/core/utils/use-gesture/core/engines/DragEngine.ts","../src/core/utils/use-gesture/core/config/wheelConfigResolver.ts","../src/core/utils/use-gesture/core/config/scrollConfigResolver.ts","../src/core/utils/use-gesture/core/config/support.ts","../src/core/utils/use-gesture/core/config/pinchConfigResolver.ts","../src/core/utils/use-gesture/core/config/moveConfigResolver.ts","../src/core/utils/use-gesture/core/config/hoverConfigResolver.ts","../src/core/utils/use-gesture/core/config/dragConfigResolver.ts","../src/core/utils/use-gesture/core/actions.ts","../src/core/utils/use-gesture/core/TimeoutStore.ts","../src/core/utils/use-gesture/core/EventStore.ts","../src/core/utils/use-gesture/core/config/sharedConfigResolver.ts","../src/core/utils/use-gesture/core/config/resolver.ts","../src/core/utils/use-gesture/core/Controller.ts","../src/core/utils/use-gesture/core/parser.ts","../src/core/utils/use-gesture/vanilla/Recognizer.ts","../src/core/utils/use-gesture/vanilla/createGesture.ts","../src/core/utils/use-gesture/vanilla/Gesture.ts","../src/core/utils/playground-gesture.ts","../src/core/utils/inject-provider-decorators.ts","../src/core/utils/lazy-inject-decorators.ts","../src/common/playground-context.ts","../src/common/entity-manager-contribution.ts","../src/common/config-entity.ts","../src/common/entity-manager.ts","../src/common/playground-decorator-helper.ts","../src/common/playground-decorators.ts","../src/common/protect-wheel-area.ts","../src/core/pipeline/pipeline.ts","../src/services/selection-service.ts","../src/services/storage-service.ts","../src/services/clipboard-service.ts","../src/services/context-menu-service.ts","../src/services/logger-service.ts","../src/core/pipeline/pipeline-vue-utils.ts","../src/core/pipeline/pipeline-entities-selector.ts","../src/core/pipeline/pipeline-renderer.ts","../src/core/layer/config/editor-state-config-entity.ts","../src/core/layer/config/playground-config-entity.ts","../src/core/layer/layer.ts","../src/core/layer/playground-layer.ts","../src/core/pipeline/pipeline-entities.ts","../src/core/pipeline/pipeline-registry.ts","../src/vue/playground-vue-context.ts","../src/playground-config.ts","../src/playground-contribution.ts","../src/plugin/plugin.ts","../src/playground.ts","../src/playground-container.ts","../src/vue/playground-vue-provider.ts","../src/composables/use-playground.ts","../src/composables/use-playground-container.ts","../src/composables/use-service.ts","../src/vue/playground-vue-renderer.vue","../src/composables/use-entities.ts","../src/composables/use-entity-from-context.ts","../src/composables/use-entity-data-from-context.ts","../src/composables/use-listen-events.ts","../src/composables/use-playground-context.ts","../src/composables/use-config-entity.ts","../src/composables/use-playground-drag.ts","../src/playground-mock-tools.ts"],"names":["Entity","Emitter","DisposableCollection","nanoid","event","Disposable","Compare","DisposableImpl","Schema","OriginSchemaDecoration","OpacitySchemaDecoration","PositionSchemaDecoration","RotationSchemaDecoration","ScaleSchemaDecoration","SizeSchemaDecoration","SkewSchemaDecoration","Point","Bounds","Rectangle","TransformData","Matrix","TransformSchemaDecoration","TransformSchema","PI_2","Circle","Angle","RAD_TO_DEG","throttle","MouseTouchEvent","PlaygroundDrag","generateLocalId","TWEEN","rubberband","id","window","Engine","inject","optional","EntityManager","entity","multiInject","postConstruct","injectable","PipelineLayerPriority","SelectionService","selection","LocalStorageService","DefaultClipboardService","ContextMenuService","LoggerEvent","LoggerService","NOOP","defineComponent","shallowRef","onMounted","nextTick","isVNode","h","createApp","PipelineEntitiesSelector","ConflatableMessage","PipelineRenderer","domUtils","MessageLoop","EditorState","SizeSchema","PromiseDeferred","Layer","PlaygroundLayer","wheelDelta","PipelineMessage","PipelineRegistry","PlaygroundRegistry","ContainerModule","Playground","ContributionProvider","CommandService","bindContributionProvider","Container","CommandContainerModule","provide","onBeforeUnmount","ref","_createElementVNode","_normalizeClass","_normalizeStyle","_openBlock","_createBlock","_Teleport","_renderSlot","_createCommentVNode","useRefresh","PlaygroundMockTools"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { nanoid } from 'nanoid';\nimport { interfaces } from 'inversify';\nimport { Compare, Disposable, DisposableCollection, Emitter, type Event } from '@flowgram-vue/utils';\n\nimport { type PlaygroundContext } from './playground-context';\nimport type { EntityManager } from './entity-manager';\nimport type { EntityData, EntityDataProps, EntityDataRegistry } from './entity-data';\n// import type { AbleChangedEvent, EntityAbles } from './entity-ables';\n// import type { AbleManager } from './able-manager';\n// import type { Able, AbleRegistry } from './able';\n\n/**\n * 注册类\n */\nexport interface EntityRegistry<E extends Entity = Entity> {\n new (opts: any): E;\n\n readonly type: E['type'];\n}\n\n/**\n * 持久化数据\n */\nexport interface EntityJSON {\n type: string;\n id: string;\n // ableList?: string[];\n dataList: object[];\n}\n\n// eslint-disable-next-line no-proto\nconst ObjectProto = (Object as any).__proto__;\n\nexport interface EntityDataChangedEvent<T extends Entity = Entity> {\n type: 'add' | 'delete' | 'update';\n data: EntityData;\n entity: T;\n}\n\nexport interface EntityOpts {\n entityManager: EntityManager;\n id?: string;\n // ables?: AbleRegistry[]; // 添加的 able\n datas?: { registry: EntityDataRegistry; data?: EntityDataProps<any> }[];\n savedInManager?: boolean; // 是否存储到 manager 上,默认 true\n}\n\nlet _version = 0;\n\nexport class Entity<OPTS extends EntityOpts = EntityOpts> implements Disposable {\n static type = 'Entity';\n\n private readonly onEntityChangeEmitter = new Emitter<Entity>();\n\n private readonly onDataChangeEmitter = new Emitter<EntityDataChangedEvent>();\n\n private readonly initializeDataKeys: string[] = []; // 初始化的\n\n protected readonly dataManager: Map<string, EntityData> = new Map(); // 存储的数据\n\n // readonly onBeforeAbleDispatchedEmitter = new Emitter<Able>();\n //\n // readonly onAfterAbleDispatchedEmitter = new Emitter<Able>();\n\n /**\n * 销毁事件管理\n */\n readonly toDispose = new DisposableCollection();\n\n /**\n * 销毁前事件管理\n */\n readonly preDispose = new DisposableCollection();\n\n // /**\n // * able 管理\n // */\n // readonly ables: EntityAbles;\n\n /**\n * 修改会触发\n */\n readonly onEntityChange = this.onEntityChangeEmitter.event;\n\n // /**\n // * able 触发之前\n // */\n // readonly onBeforeAbleDispatched = this.onBeforeAbleDispatchedEmitter.event;\n\n // /**\n // * able 触发之后\n // */\n // readonly onAfterAbleDispatched = this.onAfterAbleDispatchedEmitter.event;\n\n /**\n * 数据更改事件\n */\n readonly onDataChange = this.onDataChangeEmitter.event;\n\n // /**\n // * able 数据更改\n // */\n // readonly onAbleChange: Event<AbleChangedEvent>;\n\n // /**\n // * 默认初始化的 Able\n // */\n // getDefaultAbleRegistries(): AbleRegistry[] {\n // return [];\n // }\n\n /**\n * 默认初始化的 Data\n */\n getDefaultDataRegistries(): EntityDataRegistry[] {\n return [];\n }\n\n private _changeLockedTimes = 0;\n\n protected isInitialized = true;\n\n private _id: string;\n\n private _version: number = _version++; // 每次创建都有一个新 version,避免 id 相同的 entity 频繁创建销毁导致碰撞\n\n private _savedInManager = true;\n\n // readonly ableManager: AbleManager;\n\n /**\n * 暂停更新开关\n * @protected\n */\n protected get changeLocked(): boolean {\n return this._changeLockedTimes > 0;\n }\n\n protected set changeLocked(changeLocked) {\n this._changeLockedTimes = changeLocked\n ? this._changeLockedTimes + 1\n : this._changeLockedTimes - 1;\n\n /* istanbul ignore next */\n if (this._changeLockedTimes < 0) this._changeLockedTimes = 0;\n }\n\n /**\n * 实体类型\n */\n get type(): string {\n if (!(this.constructor as any).type) {\n throw new Error(`Entity Registry need a type: ${this.constructor.name}`);\n }\n return (this.constructor as any).type;\n }\n\n /**\n * 全局的entity管理器\n */\n readonly entityManager: EntityManager;\n\n get context(): PlaygroundContext {\n return this.entityManager.context;\n }\n\n constructor(opts: OPTS) {\n this.entityManager = opts.entityManager;\n this._id = opts.id || nanoid();\n this._savedInManager = opts.savedInManager === undefined ? true : opts.savedInManager;\n // this.ableManager = this.entityManager.ableManager;\n // this.context = this.entityManager.context;\n this.isInitialized = true;\n // this.ables = this.entityManager.ableManager.createAbleMap(this);\n // this.ables.onAbleChange(event => {\n // // 只需要监听删除,add 和 update 都由 entityData 去监听\n // if (event.type === 'delete') {\n // this.fireChange();\n // }\n // });\n this.toDispose.push(this.onEntityChangeEmitter);\n // this.toDispose.push(this.onBeforeAbleDispatchedEmitter);\n // this.toDispose.push(this.onAfterAbleDispatchedEmitter);\n this.toDispose.push(this.onDataChangeEmitter);\n // this.toDispose.push(this.ables);\n // this.onAbleChange = this.ables.onAbleChange;\n this.register();\n // if (opts.ables) {\n // opts.ables.forEach(able => this.ables.add(able));\n // }\n if (opts.datas) {\n opts.datas.forEach((data) => this.addData(data.registry, data.data));\n }\n this.isInitialized = false;\n }\n\n addInitializeData(datas: EntityDataRegistry[], dataConfig?: any) {\n this.isInitialized = true;\n datas.forEach((data) => this.addData(data, dataConfig));\n this.isInitialized = false;\n }\n\n /**\n * 实体的版本\n */\n get version(): number {\n return this._version;\n }\n\n /**\n * 存储数据,用于持久化存储\n */\n toJSON(): EntityJSON | any {\n const dataList: object[] = [];\n for (const data of this.dataManager.values()) {\n dataList.push({\n type: data.type,\n data: data.toJSON(),\n });\n }\n return {\n type: this.type,\n id: this.id,\n // ableList: this.ables.toJSON(),\n dataList,\n };\n }\n\n /**\n * 还原数据\n */\n fromJSON(data?: EntityJSON | any): void {\n if (!data || !data.id || !data.type) return;\n this.changeLocked = true;\n this.reset();\n if (data.dataList) {\n data.dataList.forEach((d: any) => {\n const registry = this.entityManager.getDataRegistryByType(d.type);\n if (registry) {\n const dataEntity = this.addData(registry);\n dataEntity.update(d.data);\n }\n });\n }\n this.changeLocked = false;\n this.fireChange();\n }\n\n /**\n * 实体 id\n */\n get id(): string {\n return this._id;\n }\n\n /**\n * 销毁实体\n */\n dispose(): void {\n this.preDispose.dispose();\n this.toDispose.dispose();\n }\n\n get disposed(): boolean {\n return this.toDispose.disposed;\n }\n\n /**\n * 重制为初始化状态\n */\n reset(): void {\n this.changeLocked = true;\n for (const data of this.dataManager.values()) {\n if (!this.initializeDataKeys.includes(data.type)) {\n data.dispose();\n }\n }\n // this.ables.reset();\n this.register();\n this.changeLocked = false;\n this.fireChange();\n }\n\n /**\n * 销毁事件\n */\n get onDispose(): Event<void> {\n return this.toDispose.onDispose;\n }\n\n /**\n * 触发实体更新\n * @protected\n */\n protected fireChange(): void {\n if (this.changeLocked || this.isInitialized || this.disposed) return;\n this._version++;\n /* istanbul ignore next */\n if (this._version >= Number.MAX_SAFE_INTEGER) {\n this._version = 0;\n }\n this.onEntityChangeEmitter.fire(this);\n }\n\n /**\n * 添加数据\n */\n addData<D extends EntityData>(\n Registry: EntityDataRegistry,\n defaultProps?: EntityDataProps<D>\n ): D {\n this.entityManager.registerEntityData(Registry);\n let entityData = this.dataManager.get(Registry.type) as D;\n\n if (entityData) {\n if (defaultProps) this.updateData(Registry, defaultProps);\n return entityData;\n }\n\n // 是否存在EntityData依赖注入器\n const injector = this.entityManager.getDataInjector(Registry);\n entityData = new Registry(this, injector?.()) as D;\n\n if (this.isInitialized) this.initializeDataKeys.push(entityData.type);\n this.dataManager.set(Registry.type, entityData);\n this.toDispose.push(entityData);\n entityData.onDataChange(() => {\n const event: EntityDataChangedEvent = {\n type: 'update',\n data: entityData,\n entity: this,\n };\n this.onDataChangeEmitter.fire(event);\n this.fireChange();\n });\n entityData.toDispose.push(\n Disposable.create(() => {\n // 初始化的 data 数据无法被删除\n if (!this.initializeDataKeys.includes(Registry.type)) {\n this.dataManager.delete(Registry.type);\n }\n const event: EntityDataChangedEvent = {\n type: 'delete',\n data: entityData,\n entity: this,\n };\n this.onDataChangeEmitter.fire(event);\n this.fireChange();\n })\n );\n entityData.changeLocked = true;\n this.updateData(Registry, defaultProps || entityData.getDefaultData());\n entityData.changeLocked = false;\n const event: EntityDataChangedEvent = {\n type: 'add',\n data: entityData,\n entity: this,\n };\n this.onDataChangeEmitter.fire(event);\n return entityData;\n }\n\n /**\n * 是否存到全局 manager,默认 true\n */\n get savedInManager(): boolean {\n return this._savedInManager;\n }\n\n /**\n * 更新实体的数据\n */\n updateData<D extends EntityData>(\n Registry: EntityDataRegistry<D>,\n props: EntityDataProps<D>\n ): void {\n const entityData = this.dataManager.get(Registry.type);\n if (entityData) {\n entityData.update(props);\n }\n }\n\n /**\n * 获取 data 数据\n */\n getData<D extends EntityData>(Registry: EntityDataRegistry<D>): D {\n return this.dataManager.get(Registry.type) as D;\n }\n\n /**\n * 是否有指定数据\n */\n hasData(Registry: EntityDataRegistry): boolean {\n return this.dataManager.has(Registry.type);\n }\n\n /**\n * 删除数据,初始化状态注入的数据无法被删除\n */\n removeData<D extends EntityData>(Registry: EntityDataRegistry<D>): void {\n // 初始化的数据无法被删除\n if (this.initializeDataKeys.includes(Registry.type)) return;\n const entityData = this.dataManager.get(Registry.type);\n if (entityData) {\n entityData.dispose();\n }\n }\n\n /**\n * 获取 IOC 服务\n * @param identifier\n */\n getService<T>(identifier: interfaces.ServiceIdentifier<T>): T {\n return this.entityManager.getService<T>(identifier);\n }\n // /**\n // * 添加 able\n // */\n // addAbles(...ables: AbleRegistry[]): void {\n // ables.forEach(able => this.ables.add(able));\n // }\n //\n // /**\n // * 删除 able\n // */\n // removeAbles(...ables: AbleRegistry[]): void {\n // ables.forEach(able => this.ables.remove(able));\n // }\n //\n // /**\n // * 是否有 able\n // */\n // hasAble(able: AbleRegistry): boolean {\n // return this.ables.has(able);\n // }\n //\n // hasAbles(...ables: AbleRegistry[]): boolean {\n // for (const able of ables) {\n // if (!this.ables.has(able)) return false;\n // }\n // return true;\n // }\n\n protected register(): void {\n // 注册默认 able\n // this.getDefaultAbleRegistries().forEach(Registry => this.ables.add(Registry));\n // 注册默认 data\n this.getDefaultDataRegistries().forEach((Registry) => this.addData(Registry));\n }\n\n declare __opts_type__: OPTS;\n}\n\nexport namespace Entity {\n export function getType(registry: EntityRegistry): string {\n return registry.type;\n }\n\n /**\n * 默认数据比较,采用浅比较\n */\n export function checkDataChanged(oldProps: any, newProps: any): boolean {\n return Compare.isChanged(oldProps, newProps);\n }\n\n export function isRegistryOf(target: any, Registry: any): boolean {\n if (target === Registry) return true;\n // eslint-disable-next-line no-proto\n let proto = target.__proto__;\n while (proto && proto !== ObjectProto) {\n if (proto.prototype === Registry.prototype) return true;\n // eslint-disable-next-line no-proto\n proto = proto.__proto__;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Compare, DisposableImpl, Emitter } from '@flowgram-vue/utils';\n\nimport { Entity } from './entity';\n\n/**\n * 实体的数据块\n */\nexport abstract class EntityData<\n DATA = any | number | string,\n OPTS extends {} = {},\n> extends DisposableImpl {\n static type = 'EntityData';\n\n protected onDataChangeEmitter = new Emitter<EntityData<DATA, OPTS>>();\n\n protected onWillChangeEmitter = new Emitter<EntityData<DATA, OPTS>>();\n\n protected _data: DATA;\n\n private _changeLocked = false;\n\n protected _version = 0;\n\n declare entity: Entity;\n\n /**\n * 修改后触发\n */\n readonly onDataChange = this.onDataChangeEmitter.event;\n\n /**\n * 修改前触发\n */\n readonly onWillChange = this.onWillChangeEmitter.event;\n\n /**\n * 初始化数据\n */\n abstract getDefaultData(): DATA;\n\n constructor(entity: Entity, readonly opts?: OPTS) {\n super();\n this.entity = entity;\n this._data = this.getDefaultData();\n this.toDispose.push(this.onDataChangeEmitter);\n this.toDispose.push(this.onWillChangeEmitter);\n }\n\n /**\n * data 类型\n */\n get type(): string {\n if (!(this.constructor as any).type) {\n throw new Error(`Entity Data Registry need a type: ${this.constructor.name}`);\n }\n return (this.constructor as any).type;\n }\n\n /**\n * 当前数据\n */\n get data(): DATA {\n return this._data;\n }\n\n /**\n * 更新单个数据\n */\n update(props: Partial<DATA> | keyof DATA | DATA, value?: any): void {\n if (arguments.length === 2) {\n if (this._data[props as keyof DATA] !== value) {\n this.fireWillChange();\n this._data[props as keyof DATA] = value;\n this.fireChange();\n }\n } else if (this.checkChanged(props as Partial<DATA>)) {\n this.fireWillChange();\n if (typeof props !== 'object') {\n this._data = props as any;\n } else {\n this._data = { ...this._data, ...(props as Partial<DATA>) };\n }\n this.fireChange();\n }\n }\n\n /**\n * 更新全量数据\n * @param props\n */\n fullyUpdate(props: DATA): void {\n // 仅做一层的全量比较\n if (Compare.isChanged(this._data, props, 1, false)) {\n this.fireWillChange();\n this._data = props;\n this.fireChange();\n }\n }\n\n /**\n * @deprecated\n * 检测属性是否更改,默认采用浅比较\n */\n checkChanged(newProps: Partial<DATA> | DATA): boolean {\n return Entity.checkDataChanged(this._data, newProps);\n }\n\n /**\n * 存储数据,一般在关闭浏览器后需要暂时存到 localStorage\n */\n toJSON(): any {\n return this.data as any;\n }\n\n /**\n * 还原数据\n */\n fromJSON(data: object): void {\n this.update(data);\n }\n\n get changeLocked(): boolean {\n return this._changeLocked;\n }\n\n set changeLocked(p) {\n this._changeLocked = p;\n }\n\n fireWillChange(): void {\n this.onWillChangeEmitter.fire(this as EntityData<DATA, OPTS>);\n }\n\n fireChange(): void {\n if (this._changeLocked) return;\n this._version++;\n /* istanbul ignore next */\n if (this._version >= Number.MAX_SAFE_INTEGER) {\n this._version = 0;\n }\n this.onDataChangeEmitter.fire(this as EntityData<DATA, OPTS>);\n }\n\n protected bindChange(data: EntityData, fn?: () => void): void {\n this.toDispose.push(\n data.onDataChange(() => {\n if (fn) fn();\n this.fireChange();\n }),\n );\n }\n\n get version() {\n return this._version;\n }\n}\n\nexport type EntityDataProps<E extends EntityData> = E['data'];\n\nexport interface EntityDataRegistry<E extends EntityData = EntityData> {\n new (...args: any[]): E;\n\n type: E['type'];\n}\n\nexport type EntityDataInjector = <OPTS extends {} = {}>() => OPTS;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { OriginSchemaDecoration, Schema } from '@flowgram-vue/utils';\nimport type { OriginSchema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { OriginSchema, OriginSchemaDecoration };\n\nexport class OriginData extends EntityData<OriginSchema> implements OriginSchema {\n static type = 'OriginData';\n\n getDefaultData(): OriginSchema {\n return Schema.createDefault<OriginSchema>(OriginSchemaDecoration);\n }\n\n get x(): number {\n return this.data.x;\n }\n\n get y(): number {\n return this.data.y;\n }\n\n set x(x: number) {\n this.update('x', x);\n }\n\n set y(y: number) {\n this.update('y', y);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { OpacitySchemaDecoration, Schema } from '@flowgram-vue/utils';\nimport type { OpacitySchema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { OpacitySchema, OpacitySchemaDecoration };\n\nexport class OpacityData extends EntityData<OpacitySchema> {\n static type = 'OpacityData';\n\n getDefaultData(): OpacitySchema {\n return Schema.createDefault<OpacitySchema>(OpacitySchemaDecoration);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PositionSchemaDecoration, Schema } from '@flowgram-vue/utils';\nimport type { PositionSchema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { PositionSchema, PositionSchemaDecoration };\n\nexport class PositionData extends EntityData<PositionSchema> implements PositionSchema {\n static type = 'PositionData';\n\n getDefaultData(): PositionSchema {\n return Schema.createDefault<PositionSchema>(PositionSchemaDecoration);\n }\n\n get x(): number {\n return this.data.x;\n }\n\n get y(): number {\n return this.data.y;\n }\n\n set x(x: number) {\n this.update('x', x);\n }\n\n set y(y: number) {\n this.update('y', y);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { RotationSchemaDecoration, Schema } from '@flowgram-vue/utils';\nimport type { RotationSchema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { RotationSchema, RotationSchemaDecoration };\n\nexport class RotationData extends EntityData<RotationSchema> {\n static type = 'RotationData';\n\n getDefaultData(): RotationSchema {\n return Schema.createDefault<RotationSchema>(RotationSchemaDecoration);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ScaleSchemaDecoration, Schema } from '@flowgram-vue/utils';\nimport type { ScaleSchema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { ScaleSchema, ScaleSchemaDecoration };\n\nexport class ScaleData extends EntityData<ScaleSchema> implements ScaleSchema {\n static type = 'ScaleData';\n\n getDefaultData(): ScaleSchema {\n return Schema.createDefault(ScaleSchemaDecoration);\n }\n\n get x(): number {\n return this.data.x;\n }\n\n get y(): number {\n return this.data.y;\n }\n\n set x(x: number) {\n this.update('x', x);\n }\n\n set y(y: number) {\n this.update('y', y);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { SizeSchema, SizeSchemaDecoration, Schema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { SizeSchema, SizeSchemaDecoration };\n\nexport class SizeData extends EntityData<SizeSchema> implements SizeSchema {\n static type = 'SizeData';\n\n getDefaultData(): SizeSchema {\n return Schema.createDefault<SizeSchema>(SizeSchemaDecoration);\n }\n\n get width(): number {\n return this.data.width;\n }\n\n get height(): number {\n return this.data.height;\n }\n\n set width(width: number) {\n this.update('width', width);\n }\n\n set height(height: number) {\n this.update('height', height);\n }\n\n get locked(): boolean {\n return !!this.data.locked;\n }\n\n set locked(locked: boolean) {\n this.update('locked', locked);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { SkewSchemaDecoration, Schema } from '@flowgram-vue/utils';\nimport type { SkewSchema } from '@flowgram-vue/utils';\n\nimport { EntityData } from '../entity-data';\n\nexport { SkewSchema, SkewSchemaDecoration };\n\nexport class SkewData extends EntityData<SkewSchema> implements SkewSchema {\n static type = 'SkewData';\n\n getDefaultData(): SkewSchema {\n return Schema.createDefault<SkewSchema>(SkewSchemaDecoration);\n }\n\n get x(): number {\n return this.data.x;\n }\n\n get y(): number {\n return this.data.y;\n }\n\n set x(x: number) {\n this.update('x', x);\n }\n\n set y(y: number) {\n this.update('y', y);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type Matrix, Point, Rectangle } from '@flowgram-vue/utils';\n\nimport type { PositionSchema, TransformSchema } from '../schema';\n\ntype TransformOriginAndSize = Pick<TransformSchema, 'origin'> & Pick<TransformSchema, 'size'>;\n\nconst { fixZero } = Point;\n\nexport namespace Bounds {\n /**\n * 位置做矩阵偏移\n */\n export function getPointWithMatrix(output: PositionSchema, matrix?: Matrix): PositionSchema {\n // if (target.rotation !== 0) {\n // rotateAround(output, target.position.x, target.position.y, target.rotation);\n // }\n if (matrix) {\n matrix.apply(output, output);\n }\n // fix: -0\n fixZero(output);\n return output;\n }\n /**\n * 获取外围边界矩形\n */\n export function getBounds(target: TransformOriginAndSize, matrix?: Matrix): Rectangle {\n const output = new Rectangle();\n if (!matrix || matrix.isSimple()) {\n const { size, origin } = target;\n output.x = -(size.width * origin.x) + (matrix?.tx || 0);\n output.y = -(size.height * origin.y) + (matrix?.ty || 0);\n output.width = size.width;\n output.height = size.height;\n // fix: -0\n fixZero(output);\n } else {\n const topLeft = getTopLeft(target, matrix);\n const topRight = getTopRight(target, matrix);\n const bottomLeft = getBottomLeft(target, matrix);\n const bottomRight = getBottomRight(target, matrix);\n output.x = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n output.y = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n output.width = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x) - output.x;\n output.height = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y) - output.y;\n }\n return output;\n }\n export function applyMatrix(bounds: Rectangle, matrix: Matrix): Rectangle {\n const output = new Rectangle();\n if (matrix.isSimple()) {\n output.x = bounds.x + matrix.tx;\n output.y = bounds.y + matrix.ty;\n output.width = bounds.width;\n output.height = bounds.height;\n // fix: -0\n fixZero(output);\n } else {\n const topLeft = getPointWithMatrix(bounds.leftTop, matrix);\n const topRight = getPointWithMatrix(bounds.rightTop, matrix);\n const bottomLeft = getPointWithMatrix(bounds.leftBottom, matrix);\n const bottomRight = getPointWithMatrix(bounds.rightBottom, matrix);\n output.x = Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x);\n output.y = Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y);\n output.width = Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x) - output.x;\n output.height = Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y) - output.y;\n }\n return output;\n }\n\n /**\n * 找到边框中最左边的点\n */\n export function getLeftPointFromBounds(\n target: TransformOriginAndSize,\n matrix?: Matrix,\n ): PositionSchema {\n const topLeft = getTopLeft(target, matrix);\n const topRight = getTopRight(target, matrix);\n const bottomLeft = getBottomLeft(target, matrix);\n const bottomRight = getBottomRight(target, matrix);\n const items = [topLeft, topRight, bottomLeft, bottomRight].sort((p1, p2) => p1.x - p2.x);\n return items[0];\n }\n /**\n * 找到边框中最上边的点\n */\n export function getTopPointFromBounds(\n target: TransformOriginAndSize,\n matrix?: Matrix,\n ): PositionSchema {\n const topLeft = getTopLeft(target, matrix);\n const topRight = getTopRight(target, matrix);\n const bottomLeft = getBottomLeft(target, matrix);\n const bottomRight = getBottomRight(target, matrix);\n const items = [topLeft, topRight, bottomLeft, bottomRight].sort((p1, p2) => p1.y - p2.y);\n return items[0];\n }\n export function getCenter(target: TransformSchema, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x) + size.width / 2,\n y: -(size.height * origin.y) + size.height / 2,\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getTopLeft(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x),\n y: -(size.height * origin.y),\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getTopCenter(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x) + size.width / 2,\n y: -(size.height * origin.y),\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getTopRight(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x) + size.width,\n y: -(size.height * origin.y),\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getLeftCenter(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x),\n y: -(size.height * origin.y) + size.height / 2,\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getRightCenter(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x) + size.width,\n y: -(size.height * origin.y) + size.height / 2,\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getBottomLeft(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x),\n y: -(size.height * origin.y) + size.height,\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getBottomCenter(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x) + size.width / 2,\n y: -(size.height * origin.y) + size.height,\n };\n return getPointWithMatrix(output, matrix);\n }\n export function getBottomRight(target: TransformOriginAndSize, matrix?: Matrix): PositionSchema {\n const { size, origin } = target;\n const output = {\n x: -(size.width * origin.x) + size.width,\n y: -(size.height * origin.y) + size.height,\n };\n return getPointWithMatrix(output, matrix);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n Angle,\n Circle,\n Disposable,\n DisposableCollection,\n Matrix,\n PI_2,\n RAD_TO_DEG,\n Rectangle,\n Schema,\n TransformSchema,\n TransformSchemaDecoration,\n} from '@flowgram-vue/utils';\n\nimport { Bounds } from '../utils/bounds';\nimport { EntityData } from '../entity-data';\nimport type { Entity } from '../entity';\nimport { SkewData, type SkewSchema } from './skew-schema';\nimport { SizeData, type SizeSchema } from './size-schema';\nimport { ScaleData, type ScaleSchema } from './scale-schema';\nimport { RotationData } from './rotation-schema';\nimport { PositionData, type PositionSchema } from './position-schema';\nimport { OriginData, type OriginSchema } from './origin-schema';\n\nexport { TransformSchemaDecoration, TransformSchema };\n\nexport class TransformData extends EntityData<TransformSchema> implements TransformSchema {\n static type = 'TransformData';\n\n protected _worldTransform: Matrix = new Matrix();\n\n protected _localTransform: Matrix = new Matrix();\n\n protected _children: TransformData[] | undefined;\n\n protected mutationCache: Map<string, any> = new Map();\n\n public sizeToScale = false; // 标记 size 转成 scale\n\n get children(): TransformData[] {\n return this._children || [];\n }\n\n clearChildren(): void {\n if (this._children) {\n this._children.slice().forEach((child) => {\n child.setParent(undefined);\n });\n }\n }\n\n /**\n * 容器选择框会动态计算子节点大小\n */\n get isContainer(): boolean {\n return !!this._children && this._children.length > 0;\n }\n\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n */\n protected _cx = 1;\n\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n */\n protected _sx = 0;\n\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n */\n protected _cy = 0;\n\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n */\n protected _sy = 1;\n\n /**\n * The locally unique ID of the local transform.\n */\n protected _localID = 0;\n\n /**\n * The locally unique ID of the local transform\n * used to calculate the current local transformation matrix.\n */\n protected _currentLocalID = 0;\n\n /**\n * The locally unique ID of the world transform.\n */\n protected _worldID = 0;\n\n /**\n * The locally unique ID of the parent's world transform\n * used to calculate the current world transformation matrix.\n */\n protected _parentID = 0;\n\n /**\n * The parent transform\n */\n protected _parent?: TransformData;\n\n constructor(entity: Entity) {\n super(entity);\n // 默认添加\n this.bindChange(this.entity.addData(PositionData));\n this.bindChange(this.entity.addData(SizeData));\n this.bindChange(this.entity.addData(OriginData));\n this.bindChange(this.entity.addData(ScaleData));\n this.bindChange(this.entity.addData(SkewData), () => this.updateSkew());\n this.bindChange(this.entity.addData(RotationData), () => this.updateSkew());\n }\n\n fireChange(): void {\n if (this.changeLocked) return;\n this._localID++;\n this.mutationCache.clear();\n super.fireChange();\n }\n\n get localTransform(): Matrix {\n this.updateLocalTransformMatrix();\n return this._localTransform;\n }\n\n get worldTransform(): Matrix {\n this.updateTransformMatrix();\n return this._worldTransform;\n }\n\n getDefaultData(): TransformSchema {\n return Schema.createDefault<TransformSchema>(TransformSchemaDecoration);\n }\n\n update(data: Partial<TransformSchema>): void {\n if (data.position) {\n this.entity.updateData(PositionData, data.position);\n }\n if (data.size) {\n this.entity.updateData(SizeData, data.size);\n }\n if (data.origin) {\n this.entity.updateData(OriginData, data.origin);\n }\n if (data.scale) {\n this.entity.updateData(ScaleData, data.scale);\n }\n if (data.skew) {\n this.entity.updateData(SkewData, data.skew);\n }\n if (data.rotation !== undefined) {\n this.entity.updateData(RotationData, data.rotation);\n }\n }\n\n get position(): PositionSchema {\n return this.entity.getData<PositionData>(PositionData)!;\n }\n\n set position(position: PositionSchema) {\n this.entity.updateData<PositionData>(PositionData, position);\n }\n\n get size(): SizeSchema {\n return this.entity.getData<SizeData>(SizeData)!;\n }\n\n set size(size: SizeSchema) {\n this.entity.updateData<SizeData>(SizeData, size);\n }\n\n get origin(): OriginSchema {\n return this.entity.getData<OriginData>(OriginData)!;\n }\n\n set origin(origin: OriginSchema) {\n this.entity.updateData<OriginData>(OriginData, origin);\n }\n\n get scale(): ScaleSchema {\n return this.entity.getData<ScaleData>(ScaleData)!;\n }\n\n set scale(scale: ScaleSchema) {\n this.entity.updateData<ScaleData>(ScaleData, scale);\n }\n\n get skew(): SkewSchema {\n return this.entity.getData<SkewData>(SkewData)!;\n }\n\n set skew(skew: SkewSchema) {\n this.entity.updateData<SkewData>(SkewData, skew);\n }\n\n get rotation(): number {\n return this.entity.getData<RotationData>(RotationData)!.data;\n }\n\n set rotation(rotation: number) {\n this.entity.updateData<RotationData>(RotationData, rotation);\n }\n\n get data(): TransformSchema {\n return TransformSchema.toJSON(this);\n }\n\n /**\n * Called when the skew or the rotation changes.\n *\n * @protected\n */\n protected updateSkew(): void {\n const { rotation } = this;\n this._cx = Math.cos(rotation + this.skew.y);\n this._sx = Math.sin(rotation + this.skew.y);\n this._cy = -Math.sin(rotation - this.skew.x); // cos, added PI/2\n this._sy = Math.cos(rotation - this.skew.x); // sin, added PI/2\n\n this._localID++;\n }\n\n /**\n * Updates the local transformation matrix.\n */\n protected updateLocalTransformMatrix(): void {\n const lt = this._localTransform;\n\n if (this._localID !== this._currentLocalID) {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n // TODO 删除这个 origin 偏移,不然会有一像素的偏差\n lt.tx = this.position.x; // - (this.origin.x * lt.a + this.origin.y * lt.c)\n lt.ty = this.position.y; // - (this.origin.x * lt.b + this.origin.y * lt.d)\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n }\n\n get localID() {\n return this._localID;\n }\n\n get worldID() {\n return this._worldID;\n }\n\n /**\n * Updates the local and the world transformation matrices.\n *\n */\n protected updateTransformMatrix(): void {\n const lt = this._localTransform;\n this.updateLocalTransformMatrix();\n let parentTransform: Matrix = Matrix.TEMP_MATRIX;\n let worldId = 0;\n if (this.parent) {\n parentTransform = this.parent.worldTransform;\n worldId = this.parent._worldID;\n }\n if (this._parentID !== worldId) {\n // concat the parent matrix with the objects transform.\n const pt = parentTransform;\n const wt = this._worldTransform;\n\n wt.a = lt.a * pt.a + lt.b * pt.c;\n wt.b = lt.a * pt.b + lt.b * pt.d;\n wt.c = lt.c * pt.a + lt.d * pt.c;\n wt.d = lt.c * pt.b + lt.d * pt.d;\n wt.tx = lt.tx * pt.a + lt.ty * pt.c + pt.tx;\n wt.ty = lt.tx * pt.b + lt.ty * pt.d + pt.ty;\n this._parentID = worldId;\n\n // update the id of the transform..\n this._worldID++;\n }\n }\n\n /**\n * Decomposes a matrix and sets the transforms properties based on it.\n *\n * matrix - The matrix to decompose\n */\n setFromMatrix(matrix: Matrix): void {\n // sort out rotation / skew..\n const { a, b, c, d } = matrix;\n\n const skewX = -Math.atan2(-c, d);\n const skewY = Math.atan2(b, a);\n\n const delta = Math.abs(skewX + skewY);\n\n if (delta < 0.00001 || Math.abs(PI_2 - delta) < 0.00001) {\n this.rotation = skewY;\n this.skew.x = this.skew.y = 0;\n } else {\n this.rotation = 0;\n this.skew.x = skewX;\n this.skew.y = skewY;\n }\n\n // next set scale\n this.scale.x = Math.sqrt(a * a + b * b);\n this.scale.y = Math.sqrt(c * c + d * d);\n\n // next set position\n this.position.x = matrix.tx;\n this.position.y = matrix.ty;\n this.fireChange();\n }\n\n /**\n * 缓存计算, 缓存只能针对 local, world 加缓存会出问题\n */\n getMutationCache<T>(key: string, fn: () => T): T {\n // 缓存设计有问题,先去掉\n if (this.mutationCache.has(key)) return this.mutationCache.get(key) as T;\n const item = fn();\n this.mutationCache.set(key, item);\n return item;\n }\n\n get bounds(): Rectangle {\n if (this.isContainer) {\n const children = this._children!;\n return Rectangle.enlarge(children.map((c) => c.bounds));\n }\n return Bounds.getBounds(this, this.worldTransform);\n }\n\n /**\n * 不旋转的 bounds\n */\n get boundsWithoutRotation(): Rectangle {\n const { center } = this.bounds;\n const { worldScale } = this;\n // TODO 目前 container 计算有误差,需要解决\n const size = this.localSize;\n const width = worldScale.x * size.width;\n const height = worldScale.y * size.height;\n const leftTop = {\n x: center.x - width / 2,\n y: center.y - height / 2,\n };\n return new Rectangle(leftTop.x, leftTop.y, width, height);\n }\n\n /**\n * 本身的大小\n */\n get localSize(): SizeSchema {\n let { size } = this;\n if (this.isContainer) {\n const childrenBounds = Rectangle.enlarge(this.children.map((c) => c.localBounds));\n size = {\n width: childrenBounds.width,\n height: childrenBounds.height,\n };\n }\n return {\n width: size.width,\n height: size.height,\n };\n }\n\n get worldSize(): SizeSchema {\n const { localSize } = this;\n const { worldScale } = this;\n return {\n width: localSize.width * worldScale.x,\n height: localSize.height * worldScale.y,\n };\n }\n\n /**\n * 本地 bounds\n */\n get localBounds(): Rectangle {\n if (this.isContainer) {\n const children = this._children!;\n const childrenBounds = Rectangle.enlarge(children.map((c) => c.localBounds));\n // 投射 local\n return Bounds.applyMatrix(childrenBounds, this.localTransform);\n }\n return this.getMutationCache<Rectangle>('localBounds', () =>\n Bounds.getBounds(this, this.localTransform)\n );\n }\n\n /**\n * 判断是否包含点\n * @param x\n * @param y\n * @param asCircle - 以圆形来算,TODO 目前不支持椭圆形\n */\n contains(x: number, y: number, asCircle?: boolean): boolean {\n // Container 情况不支持 circle\n if (this.isContainer) {\n return this.bounds.contains(x, y);\n }\n const tempPoint = this.worldTransform.applyInverse({ x, y });\n const { width, height } = this.size;\n // 不包含空大小 TODO\n if (width === 0 || height === 0) return false;\n const x1 = -width * this.origin.x;\n const y1 = -height * this.origin.y;\n if (asCircle) {\n const circle = new Circle(x1 + width / 2, y1 + height / 2, Math.min(width / 2, height / 2));\n return circle.contains(tempPoint.x, tempPoint.y);\n }\n if (tempPoint.x >= x1 && tempPoint.x < x1 + width) {\n if (tempPoint.y >= y1 && tempPoint.y < y1 + height) {\n return true;\n }\n }\n return false;\n }\n\n get parent(): TransformData | undefined {\n return this._parent;\n }\n\n isParent(parent: TransformData): boolean {\n let currentParent = this.parent;\n while (currentParent) {\n if (currentParent === parent) return true;\n currentParent = currentParent.parent;\n }\n return false;\n }\n\n isParentTransform(parent?: TransformData): boolean {\n let currentParent = this.parent;\n while (currentParent) {\n if (currentParent === parent) return true;\n currentParent = currentParent.parent;\n }\n return false;\n }\n\n private _parentChangedDispose?: DisposableCollection;\n\n private entityDispose?: Disposable;\n\n setParent(parent: TransformData | undefined, listenParentData = true): void {\n if (this._parent !== parent) {\n if (this.entityDispose) {\n this.entityDispose.dispose();\n this.entityDispose = undefined;\n }\n if (this._parentChangedDispose) {\n this._parentChangedDispose.dispose();\n this._parentChangedDispose = undefined;\n }\n this._parentID = -1;\n if (parent && listenParentData) {\n if (!parent._children) parent._children = [];\n parent._children.push(this);\n this._parentChangedDispose = new DisposableCollection();\n this.toDispose.push(this._parentChangedDispose);\n this.entityDispose = this.entity.onDispose(() => {\n parent.fireChange();\n });\n this._parentChangedDispose.pushAll([\n parent.onDispose(() => {\n this.setParent(undefined);\n }),\n Disposable.create(() => {\n const index = parent._children!.indexOf(this);\n if (index !== -1) {\n parent._children!.splice(index, 1);\n }\n }),\n ]);\n }\n this._parent = parent;\n this.fireChange();\n }\n }\n\n /**\n * 判断矩形碰撞\n */\n intersects(rect: Rectangle): boolean {\n if (!this.isContainer && (this.size.width === 0 || this.size.height === 0)) return false;\n return Rectangle.intersectsWithRotation(\n this.boundsWithoutRotation,\n this.worldRotation,\n rect,\n 0\n );\n }\n\n /**\n * 全局的 scale\n */\n get worldScale(): ScaleSchema {\n const { parent } = this;\n const parentScale = parent ? parent.worldScale : { x: 1, y: 1 };\n return {\n x: this.scale.x * parentScale.x,\n y: this.scale.y * parentScale.y,\n };\n }\n\n /**\n * 全局的 rotation\n */\n get worldRotation(): number {\n const { parent } = this;\n if (parent) {\n return Angle.wrap(this.rotation + parent.worldRotation);\n }\n return Angle.wrap(this.rotation);\n }\n\n /**\n * 全局的角度\n */\n get worldDegree(): number {\n return Math.round(this.worldRotation * RAD_TO_DEG);\n }\n\n get localOrigin(): PositionSchema {\n const matrix = this.localTransform;\n const bounds = this.localBounds;\n return matrix.apply({\n x: this.origin.x * bounds.width,\n y: this.origin.y * bounds.height,\n });\n }\n\n /**\n * 全局的原点位置\n */\n get worldOrigin(): PositionSchema {\n const matrix = this.worldTransform;\n const { bounds } = this;\n return matrix.apply({\n x: this.origin.x * bounds.width,\n y: this.origin.y * bounds.height,\n });\n }\n\n /**\n * 宽转换成 scale,用于图片等无法修改大小的场景\n * @param isWorldSize 是否为绝对大小\n */\n widthToScaleX(width: number, isWorldSize?: boolean): number {\n const parentScaleX = isWorldSize && this.parent ? this.parent.worldScale.x : 1;\n return width / parentScaleX / this.localSize.width;\n }\n\n /**\n * 绝对高转换成 scale,用于图片等无法修改大小的场景\n * @param isWorldSize 是否为绝对大小\n */\n heightToScaleY(height: number, isWorldSize?: boolean): number {\n const parentScaleY = isWorldSize && this.parent ? this.parent.worldScale.y : 1;\n return height / parentScaleY / this.localSize.height;\n }\n\n sizeToScaleValue(\n size: { width: number; height: number },\n isWorldSize?: boolean\n ): { x: number; y: number } {\n return {\n x: this.widthToScaleX(size.width, isWorldSize),\n y: this.heightToScaleY(size.height, isWorldSize),\n };\n }\n}\n\nexport namespace TransformData {\n /**\n * @param dragableEntities\n * @param target\n */\n export function isParentOrChildrenTransform(dragableEntities: Entity[], target: Entity): boolean {\n const targetTransform = target.getData<TransformData>(TransformData);\n if (!targetTransform) return false;\n for (const dragger of dragableEntities.values()) {\n const draggerTransform = dragger.getData<TransformData>(TransformData);\n // eslint-disable-next-line no-continue\n if (!draggerTransform) continue;\n if (\n draggerTransform.isParent(targetTransform) ||\n targetTransform.isParent(draggerTransform)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { throttle } from 'lodash-es';\nimport { type Disposable } from '@flowgram-vue/utils';\n\n// TODO 先用 throttle 替代\nexport class PlaygroundSchedule implements Disposable {\n protected execMap: Map<any, () => void> = new Map();\n\n push(key: any, fn: () => void): void {\n const { execMap } = this;\n if (process.env.NODE_ENV === 'test') {\n fn();\n return;\n }\n let schedule = execMap.get(key);\n if (!schedule) {\n schedule = throttle(fn, 0) as () => void;\n execMap.set(key, schedule);\n }\n schedule();\n }\n\n dispose(): void {\n this.execMap.clear();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport namespace MouseTouchEvent {\n export const isTouchEvent = (event: Event | TouchEvent): event is TouchEvent =>\n 'touches' in event;\n\n export const touchToMouseEvent = (event: Event): MouseEvent | Event => {\n if (!isTouchEvent(event as TouchEvent)) {\n return event as MouseEvent;\n }\n const touchEvent = event as TouchEvent;\n\n // 默认获取第一个触摸点\n const touch = touchEvent.touches[0] || touchEvent.changedTouches[0];\n\n if (touchEvent.type === 'touchmove') {\n preventDefault(touchEvent);\n }\n\n // 确定对应的鼠标事件类型\n const mouseEventType = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n touchcancel: 'mouseup',\n }[touchEvent.type];\n\n if (!mouseEventType) {\n throw new Error(`Unknown touch event type: ${touchEvent.type}`);\n }\n\n // 创建新的鼠标事件\n const mouseEvent = new MouseEvent(mouseEventType, {\n bubbles: touchEvent.bubbles,\n cancelable: touchEvent.cancelable,\n view: touchEvent.view,\n // 复制触摸点的位置信息\n clientX: touch.clientX,\n clientY: touch.clientY,\n screenX: touch.screenX,\n screenY: touch.screenY,\n // 复制修饰键状态\n ctrlKey: touchEvent.ctrlKey,\n altKey: touchEvent.altKey,\n shiftKey: touchEvent.shiftKey,\n metaKey: touchEvent.metaKey,\n });\n\n return mouseEvent;\n };\n export const getEventCoord = (\n e:\n | MouseEvent\n | TouchEvent\n | {\n clientX: number;\n clientY: number;\n }\n ): {\n clientX: number;\n clientY: number;\n } => {\n if (isTouchEvent(e as TouchEvent)) {\n const touchEvent = e as TouchEvent;\n if (touchEvent.touches.length === 0) {\n return {\n clientX: 0,\n clientY: 0,\n };\n }\n return {\n clientX: touchEvent.touches[0].clientX,\n clientY: touchEvent.touches[0].clientY,\n };\n } else if (e instanceof MouseEvent) {\n return {\n clientX: e.clientX,\n clientY: e.clientY,\n };\n }\n return {\n clientX: (e as MouseEvent).clientX,\n clientY: (e as MouseEvent).clientY,\n };\n };\n\n export const preventDefault = (e: Event | MouseEvent | TouchEvent) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n };\n\n export const onTouched = (\n touchStartEvent: TouchEvent,\n callback: (e: MouseEvent) => void\n ) => {\n const startTouch = touchStartEvent.changedTouches[0];\n\n const handleTouchEnd = (touchEndEvent: TouchEvent) => {\n const endTouch = touchEndEvent.changedTouches[0];\n const deltaX = endTouch.clientX - startTouch.clientX;\n const deltaY = endTouch.clientY - startTouch.clientY;\n // 判断是拖拽还是点击\n const delta = 5;\n if (Math.abs(deltaX) < delta && Math.abs(deltaY) < delta) {\n // 触发回调\n const mouseEvent = touchToMouseEvent(touchEndEvent) as MouseEvent;\n callback(mouseEvent);\n }\n document.removeEventListener('touchend', handleTouchEnd);\n document.removeEventListener('touchcancel', handleTouchEnd);\n };\n\n document.addEventListener('touchend', handleTouchEnd);\n document.addEventListener('touchcancel', handleTouchEnd);\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n Disposable,\n Emitter,\n generateLocalId,\n type LocalId,\n type Rectangle,\n} from '@flowgram-vue/utils';\n\nimport type { PlaygroundConfigEntity } from '../layer/config';\nimport type { PositionSchema } from '../../common/schema/position-schema';\nimport { MouseTouchEvent } from './mouse-touch-event';\n\n/* istanbul ignore next */\nconst SCROLL_DELTA = 4;\n/* istanbul ignore next */\nconst SCROLL_AUTO_DISTANCE = 20; // 自动滚动到边缘距离\n/* istanbul ignore next */\nconst SCROLL_INTERVAL = 6;\n\n/* istanbul ignore next */\nfunction createMouseEvent(type: string, clientX: number, clientY: number): MouseEvent {\n const event = document.createEvent('MouseEvent');\n event.initMouseEvent(\n type,\n true,\n true,\n // @ts-ignore\n undefined,\n 0,\n 0,\n 0,\n clientX,\n clientY,\n false,\n false,\n false,\n false,\n 0,\n null\n );\n return event;\n}\n\nexport interface PlaygroundDragEvent extends MouseEvent {\n id: LocalId;\n startPos: PositionSchema;\n endPos: PositionSchema;\n movingDelta: PositionSchema; // 移动的偏移量\n scale: number;\n isMoving: boolean;\n isStart: boolean;\n}\n\nexport interface PlaygroundDragOptions<T> {\n onDragStart?: (e: PlaygroundDragEvent, context?: T) => void;\n onDrag?: (e: PlaygroundDragEvent, context?: T) => void;\n onDragEnd?: (e: PlaygroundDragEvent, context?: T) => void;\n stopGlobalEventNames?: string[];\n}\n\n/* istanbul ignore next */\nexport class PlaygroundDrag<T = undefined> implements Disposable {\n private onDragStartEmitter = new Emitter<PlaygroundDragEvent>();\n\n private onDragEndEmitter = new Emitter<PlaygroundDragEvent>();\n\n private onDragEmitter = new Emitter<PlaygroundDragEvent>();\n\n private readonly _stopGlobalEventNames = [\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'contextmenu',\n ];\n\n private localId: LocalId;\n\n protected context?: T;\n\n readonly onDrag = this.onDragEmitter.event;\n\n readonly onDragStart = this.onDragStartEmitter.event;\n\n readonly onDragEnd = this.onDragEndEmitter.event;\n\n constructor(options: PlaygroundDragOptions<T> = {}) {\n if (options.onDragStart) this.onDragStart((e) => options.onDragStart!(e, this.context));\n if (options.onDrag) this.onDrag((e) => options.onDrag!(e, this.context));\n if (options.onDragEnd) this.onDragEnd((e) => options.onDragEnd!(e, this.context));\n if (options.stopGlobalEventNames) this._stopGlobalEventNames = options.stopGlobalEventNames;\n }\n\n get isStarted(): boolean {\n return !!this._promise;\n }\n\n start(\n clientX: number,\n clientY: number,\n entity?: PlaygroundConfigEntity,\n context?: T\n ): Promise<void> {\n if (this._disposed) {\n return Promise.resolve();\n }\n if (this._promise) {\n return this._promise;\n }\n this.context = context;\n this.localId = generateLocalId();\n this._addListeners();\n this._promise = new Promise((resolve) => {\n this._resolve = resolve;\n });\n this._playgroundConfigEntity = entity;\n const mousedown = createMouseEvent('mousedown', clientX, clientY);\n this._startPos = this.getRelativePos(mousedown);\n this.onDragStartEmitter.fire(this.getDragEvent(mousedown));\n return this._promise;\n }\n\n stop(clientX: number, clientY: number): void {\n if (this._disposed || !this._promise) {\n return;\n }\n const mouseup = createMouseEvent('mouseup', clientX, clientY);\n this.handleEvent(mouseup);\n }\n\n dispose(): void {\n if (this._disposed) return;\n this._stopScrollX();\n this._stopScrollY();\n this._disposed = true;\n this.onDragEmitter.dispose();\n this.onDragStartEmitter.dispose();\n this.onDragEndEmitter.dispose();\n this._finalize();\n }\n\n handleEvent(_event: Event): void {\n const event = MouseTouchEvent.touchToMouseEvent(_event);\n switch (event.type) {\n case 'mousemove':\n this._evtMouseMove(event as MouseEvent);\n break;\n case 'mouseup':\n this._stopScrollX();\n this._stopScrollY();\n this._evtMouseUp(event as MouseEvent);\n break;\n case 'keydown':\n this._evtKeyDown(event as KeyboardEvent);\n break;\n // TODO 暂时屏蔽右键菜单\n case 'contextmenu':\n const mouseup = createMouseEvent(\n 'mouseup',\n (event as MouseEvent).clientX,\n (event as MouseEvent).clientY\n );\n this._evtMouseUp(mouseup);\n break;\n default:\n // Stop all other events during drag-drop.\n MouseTouchEvent.preventDefault(event);\n event.stopPropagation();\n break;\n }\n }\n\n get scale(): number {\n return this._playgroundConfigEntity ? this._playgroundConfigEntity.finalScale : 1;\n }\n\n protected getRelativePos(event: MouseEvent): PositionSchema {\n if (this._playgroundConfigEntity) {\n return this._playgroundConfigEntity.getPosFromMouseEvent(event, false);\n }\n return {\n x: event.clientX,\n y: event.clientY,\n };\n }\n\n private _lastPos: PositionSchema = { x: 0, y: 0 };\n\n protected getDragEvent(event: MouseEvent): PlaygroundDragEvent {\n const startPos = this._startPos!;\n const { scale } = this;\n switch (event.type) {\n case 'mousedown':\n this._lastPos = startPos;\n return Object.assign(event, {\n id: this.localId,\n startPos,\n endPos: startPos,\n scale,\n movingDelta: { x: 0, y: 0 },\n isStart: true,\n isMoving: false,\n });\n case 'mousemove':\n const endPos = this.getRelativePos(event);\n const movingDelta = {\n x: endPos.x - this._lastPos.x,\n y: endPos.y - this._lastPos.y,\n };\n this._lastPos = endPos;\n return Object.assign(event, {\n id: this.localId,\n startPos,\n endPos,\n scale,\n isStart: true,\n movingDelta,\n isMoving: true,\n });\n case 'mouseup':\n this._lastPos = { x: 0, y: 0 };\n return Object.assign(event, {\n id: this.localId,\n startPos,\n endPos: this.getRelativePos(event),\n movingDelta: { x: 0, y: 0 },\n scale,\n isStart: false,\n isMoving: false,\n });\n default:\n throw new Error('unknown event');\n }\n }\n\n private _finalize(): void {\n const resolve = this._resolve;\n this._removeListeners();\n this._startPos = undefined;\n this._promise = undefined;\n this._resolve = undefined;\n if (resolve) {\n resolve();\n }\n }\n\n // 这个用于自动滚动时候使用\n private _lastMouseMoveEvent?: MouseEvent;\n\n /**\n * Handle the `'mousemove'` event for the drag object.\n */\n private _evtMouseMove(event: MouseEvent): void {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n this._lastMouseMoveEvent = event;\n const dragEvent = this.getDragEvent(event);\n // Update the playground scroller.\n this._updateDragScroll(dragEvent);\n this.onDragEmitter.fire(dragEvent);\n }\n\n /**\n * Handle the `'mouseup'` event for the drag object.\n */\n private _evtMouseUp(event: MouseEvent): void {\n this._lastMouseMoveEvent = undefined;\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n\n // Do nothing if the left or center button is not released.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n this.onDragEndEmitter.fire(this.getDragEvent(event));\n this._finalize();\n }\n\n /**\n * Handle the `'keydown'` event for the drag object.\n */\n private _evtKeyDown(event: KeyboardEvent): void {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n\n // Cancel the drag if `Escape` is pressed.\n if (event.keyCode === 27) {\n this.stop(NaN, NaN);\n }\n }\n\n /**\n * Add the document event listeners for the drag object.\n */\n private _addListeners(): void {\n // mouse\n document.addEventListener('mousedown', this, true);\n document.addEventListener('mousemove', this, true);\n document.addEventListener('mouseup', this, true);\n\n // touch\n document.addEventListener('touchstart', this, true);\n document.addEventListener('touchmove', this, { passive: false });\n document.addEventListener('touchend', this, true);\n document.addEventListener('touchcancel', this, true);\n\n this._stopGlobalEventNames.forEach((_event) => {\n document.addEventListener(_event, this, true);\n });\n }\n\n /**\n * Remove the document event listeners for the drag object.\n */\n private _removeListeners(): void {\n // mouse\n document.removeEventListener('mousedown', this, true);\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n\n // touch\n document.removeEventListener('touchstart', this, true);\n document.removeEventListener('touchmove', this);\n document.removeEventListener('touchend', this, true);\n document.removeEventListener('touchcancel', this, true);\n\n this._stopGlobalEventNames.forEach((_event) => {\n document.removeEventListener(_event, this, true);\n });\n }\n\n /**\n * 自动滚动画布\n */\n private _updateDragScroll = (event: PlaygroundDragEvent): void => {\n if (!this._playgroundConfigEntity) return;\n const playgroundConfig = this._playgroundConfigEntity.config;\n const dragPos = event.endPos;\n const { scrollX, width, height, scrollY } = playgroundConfig;\n if (dragPos.x > width + scrollX - SCROLL_AUTO_DISTANCE) {\n this._startScrollX(scrollX, true);\n } else if (dragPos.x < scrollX + SCROLL_AUTO_DISTANCE) {\n this._startScrollX(scrollX, false);\n } else {\n this._stopScrollX();\n }\n if (dragPos.y > height + scrollY - SCROLL_AUTO_DISTANCE) {\n this._startScrollY(scrollY, true);\n } else if (dragPos.y < scrollY + SCROLL_AUTO_DISTANCE) {\n this._startScrollY(scrollY, false);\n } else {\n this._stopScrollY();\n }\n };\n\n private _scrollXInterval: { interval: number; origin: number } | undefined;\n\n private _scrollYInterval: { interval: number; origin: number } | undefined;\n\n private _startScrollX(origin: number, added: boolean): void {\n if (this._scrollXInterval) {\n return;\n }\n const interval = window.setInterval(() => {\n const current = this._scrollXInterval!;\n if (!current) return;\n this.fireScroll('scrollX', added);\n }, SCROLL_INTERVAL);\n this._scrollXInterval = { interval, origin };\n }\n\n private _stopScrollX(): void {\n if (this._scrollXInterval) {\n clearInterval(this._scrollXInterval.interval);\n this._scrollXInterval = undefined;\n }\n }\n\n private _startScrollY(origin: number, added: boolean): void {\n if (this._scrollYInterval) {\n return;\n }\n const interval = window.setInterval(() => {\n this.fireScroll('scrollY', added);\n }, SCROLL_INTERVAL);\n this._scrollYInterval = { interval, origin };\n }\n\n private _stopScrollY(): void {\n if (this._scrollYInterval) {\n clearInterval(this._scrollYInterval.interval);\n this._scrollYInterval = undefined;\n }\n }\n\n /**\n * 触发滚动\n * @param scrollKey\n * @param added\n */\n fireScroll(scrollKey: 'scrollY' | 'scrollX', added: boolean): void {\n const current = scrollKey === 'scrollY' ? this._scrollYInterval : this._scrollXInterval;\n if (!current) return;\n const value = (current.origin = added\n ? current.origin + SCROLL_DELTA\n : current.origin - SCROLL_DELTA);\n const oldScroll = this._playgroundConfigEntity!.config[scrollKey];\n this._playgroundConfigEntity!.updateConfig({\n [scrollKey]: value,\n });\n const newScroll = this._playgroundConfigEntity!.config[scrollKey];\n if (newScroll !== oldScroll) {\n const lastMouseMoveEvent = this._lastMouseMoveEvent!;\n const delta = {\n x: scrollKey === 'scrollX' ? newScroll - current.origin : 0,\n y: scrollKey === 'scrollY' ? newScroll - current.origin : 0,\n };\n const mouseMove = createMouseEvent(\n 'mousemove',\n lastMouseMoveEvent.clientX + delta.x,\n lastMouseMoveEvent.clientY + delta.y\n );\n const dragEvent = this.getDragEvent(mouseMove);\n this.onDragEmitter.fire(dragEvent);\n }\n }\n\n private _disposed = false;\n\n private _promise?: Promise<void>;\n\n private _resolve?: () => void;\n\n private _startPos?: PositionSchema;\n\n private _playgroundConfigEntity?: PlaygroundConfigEntity;\n}\n\nlet dragCache: PlaygroundDrag<any> | undefined;\n\nexport interface PlaygroundDragEntitiesOpts<T> extends PlaygroundDragOptions<T> {\n // entities?: Entity[]; // 需要拖动的实体,会自动修改 position\n context?: T; // 上下文\n config?: PlaygroundConfigEntity;\n adsorbRefs?: Rectangle[]; // 需要吸附的矩形\n // adsorbLines?: Adsorber.Line[]; // 需要吸附的线\n}\n\n/* istanbul ignore next */\nexport namespace PlaygroundDrag {\n /**\n * 拖拽实体\n */\n export function startDrag<T>(\n clientX: number,\n clientY: number,\n opts: PlaygroundDragEntitiesOpts<T> = {}\n ): Disposable {\n if (dragCache) {\n dragCache.stop(NaN, NaN);\n }\n // const { entities } = opts;\n // const ableManager = entities && entities.length >= 1 ? entities[0].ableManager : undefined;\n const dragger = (dragCache = new PlaygroundDrag<T>({\n onDragStart(e, ctx): void {\n // if (ableManager) {\n // // 添加拖拽能力\n // entities!.forEach(n => n.addAbles(Dragable));\n // ableManager.dispatch<DragablePayload>(DragablePayload, e);\n // }\n if (opts.onDragStart) opts.onDragStart(e, ctx);\n },\n onDrag(e, ctx): void {\n // if (ableManager) {\n // ableManager.dispatch<DragablePayload>(DragablePayload, {\n // ...e,\n // adsorbRefs: opts.adsorbRefs,\n // adsorbLines: opts.adsorbLines,\n // });\n // }\n if (opts.onDrag) opts.onDrag(e, ctx);\n },\n onDragEnd(e, ctx): void {\n // if (ableManager) {\n // ableManager.dispatch<DragablePayload>(DragablePayload, e);\n // // 去除拖拽能力\n // entities!.forEach(n => n.removeAbles(Dragable));\n // }\n if (opts.onDragEnd) opts.onDragEnd(e, ctx);\n dragger.dispose();\n if (dragCache === dragger) dragCache = undefined;\n },\n }));\n dragger.start(clientX, clientY, opts.config, opts.context);\n return Disposable.create(() => {\n dragger.stop(0, 0);\n dragger.dispose();\n if (dragCache === dragger) {\n dragCache = undefined;\n }\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport TWEEN from '@tweenjs/tween.js';\nimport { Disposable } from '@flowgram-vue/utils';\n\nlet started = 0;\n\n// Setup the animation loop.\nfunction startTweenLoop(): void {\n started++;\n function animate(time: number): void {\n if (started <= 0) return;\n requestAnimationFrame(animate);\n TWEEN.update(time);\n }\n requestAnimationFrame(animate);\n}\n\nfunction stopTweenLoop(): void {\n started--;\n}\n\ninterface TweenValues {\n [key: string]: number;\n}\n\nexport interface TweenOpts<V> {\n from: V;\n to: V;\n onUpdate?: (v: V) => void;\n onComplete?: (v: V) => void;\n onDispose?: (v: V) => void;\n easing?: (num: number) => number;\n duration: number;\n}\n\nexport function startTween<V extends TweenValues = TweenValues>(opts: TweenOpts<V>): Disposable {\n startTweenLoop();\n let stopped = false;\n const tween = new TWEEN.Tween(opts.from)\n .to(opts.to, opts.duration)\n .easing(opts.easing || TWEEN.Easing.Quadratic.Out)\n .onUpdate(() => {\n if (stopped) return;\n if (opts.onUpdate) opts.onUpdate(opts.from);\n })\n .onComplete(() => {\n if (stopped) return;\n stopped = true;\n stopTweenLoop();\n if (opts.onComplete) opts.onComplete(opts.from);\n })\n .start();\n return Disposable.create(() => {\n if (stopped) return;\n stopped = true;\n stopTweenLoop();\n tween.stop();\n if (opts.onDispose) opts.onDispose(opts.from);\n });\n}\n\nexport interface ScrollIntoViewOpts {\n getScrollParent(): HTMLElement | undefined;\n\n getTargetNode(): HTMLElement | undefined;\n\n duration?: number;\n scrollY?: boolean; // 默认 true\n scrollX?: boolean; // 默认 true\n}\n\nconst defaultScrollIntoViewOpts = {\n duration: 300,\n scrollY: true,\n scrollX: true,\n};\n\nconst preTweenMap = new WeakMap<HTMLElement, Disposable>();\n\n/**\n * 滚动到可视区域\n * @param opts\n */\nexport function scrollIntoViewWithTween(opts: ScrollIntoViewOpts): Disposable {\n opts = { ...defaultScrollIntoViewOpts, ...opts };\n const parentNode = opts.getScrollParent();\n const targetNode = opts.getTargetNode();\n if (!parentNode || !targetNode) return Disposable.NULL;\n // 销毁上一次的\n if (preTweenMap.has(parentNode)) {\n preTweenMap.get(parentNode)!.dispose();\n }\n const startScrollTop = parentNode.scrollTop;\n const startScrollLeft = parentNode.scrollLeft;\n let endScrollTop = startScrollTop;\n let endScrollLeft = startScrollLeft;\n const parentBound = parentNode.getBoundingClientRect();\n const targetBound = targetNode.getBoundingClientRect();\n const top = targetBound.top - parentBound.top + startScrollTop;\n const left = targetBound.left - parentBound.left + startScrollLeft;\n if (startScrollTop > top) {\n endScrollTop = top;\n } else {\n const bottom = top + targetNode.clientHeight - parentNode.clientHeight;\n if (startScrollTop < bottom && targetNode.clientHeight < parentNode.clientHeight) {\n endScrollTop = bottom;\n }\n }\n if (startScrollLeft > left) {\n endScrollLeft = left;\n } else {\n const right = left + targetNode.clientWidth - parentNode.clientWidth;\n if (startScrollLeft < right && targetNode.clientWidth < parentNode.clientWidth) {\n endScrollLeft = right;\n }\n }\n if (startScrollTop !== endScrollTop || startScrollLeft !== endScrollLeft) {\n const from: { scrollTop?: number; scrollLeft?: number } = {};\n const to: { scrollTop?: number; scrollLeft?: number } = {};\n if (opts.scrollY) {\n from.scrollTop = startScrollTop;\n to.scrollTop = endScrollTop;\n }\n if (opts.scrollX) {\n from.scrollLeft = startScrollLeft;\n to.scrollLeft = endScrollLeft;\n }\n const scrollTween = startTween<{ scrollTop?: number; scrollLeft?: number }>({\n from,\n to,\n onUpdate: v => {\n if (v.scrollTop !== undefined) {\n parentNode.scrollTop = v.scrollTop;\n }\n if (v.scrollLeft !== undefined) {\n parentNode.scrollLeft = v.scrollLeft;\n }\n },\n onComplete: () => {\n toDispose.dispose();\n },\n duration: opts.duration!,\n });\n const toDispose = Disposable.create(() => {\n scrollTween.dispose();\n preTweenMap.delete(parentNode);\n });\n preTweenMap.set(parentNode, toDispose);\n return toDispose;\n }\n return Disposable.NULL;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { CommonGestureState } from '../types';\n\n// _movement rolls back to when it passed the bounds.\n/**\n * @note code is currently used in WheelEngine and PinchEngine.\n */\nexport function clampStateInternalMovementToBounds(state: CommonGestureState) {\n const [ox, oy] = state.overflow;\n const [dx, dy] = state._delta;\n const [dirx, diry] = state._direction;\n\n if ((ox < 0 && dx > 0 && dirx < 0) || (ox > 0 && dx < 0 && dirx > 0)) {\n state._movement[0] = state._movementBound[0] as number;\n }\n\n if ((oy < 0 && dy > 0 && diry < 0) || (oy > 0 && dy < 0 && diry > 0)) {\n state._movement[1] = state._movementBound[1] as number;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Vector2 } from '../types';\n\nexport function clamp(v: number, min: number, max: number) {\n return Math.max(min, Math.min(v, max));\n}\n\nexport const V = {\n toVector<T>(v: T | [T, T] | undefined, fallback?: T | [T, T]): [T, T] {\n if (v === undefined) v = fallback as T | [T, T];\n return Array.isArray(v) ? v : [v, v];\n },\n add(v1: Vector2, v2: Vector2): Vector2 {\n return [v1[0] + v2[0], v1[1] + v2[1]];\n },\n sub(v1: Vector2, v2: Vector2): Vector2 {\n return [v1[0] - v2[0], v1[1] - v2[1]];\n },\n addTo(v1: Vector2, v2: Vector2) {\n v1[0] += v2[0];\n v1[1] += v2[1];\n },\n subTo(v1: Vector2, v2: Vector2) {\n v1[0] -= v2[0];\n v1[1] -= v2[1];\n },\n};\n\n// Based on @aholachek ;)\n// https://twitter.com/chpwn/status/285540192096497664\n// iOS constant = 0.55\n\n// https://medium.com/@nathangitter/building-fluid-interfaces-ios-swift-9732bb934bf5\n\nfunction rubberband(distance: number, dimension: number, constant: number) {\n if (dimension === 0 || Math.abs(dimension) === Infinity) return Math.pow(distance, constant * 5);\n return (distance * dimension * constant) / (dimension + constant * distance);\n}\n\nexport function rubberbandIfOutOfBounds(\n position: number,\n min: number,\n max: number,\n constant = 0.15,\n) {\n if (constant === 0) return clamp(position, min, max);\n if (position < min) return -rubberband(min - position, max - min, constant) + min;\n if (position > max) return +rubberband(position - max, max - min, constant) + max;\n return position;\n}\n\nexport function computeRubberband(\n bounds: [Vector2, Vector2],\n [Vx, Vy]: Vector2,\n [Rx, Ry]: Vector2,\n): Vector2 {\n const [[X0, X1], [Y0, Y1]] = bounds;\n return [rubberbandIfOutOfBounds(Vx, X0, X1, Rx), rubberbandIfOutOfBounds(Vy, Y0, Y1, Ry)];\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PointerType } from '../types';\nimport { Vector2 } from '../types';\n\nconst EVENT_TYPE_MAP: any = {\n pointer: { start: 'down', change: 'move', end: 'up' },\n mouse: { start: 'down', change: 'move', end: 'up' },\n touch: { start: 'start', change: 'move', end: 'end' },\n gesture: { start: 'start', change: 'change', end: 'end' },\n};\n\nfunction capitalize(string: string) {\n if (!string) return '';\n return string[0].toUpperCase() + string.slice(1);\n}\n\nconst actionsWithoutCaptureSupported = ['enter', 'leave'];\n\nfunction hasCapture(capture = false, actionKey: string) {\n return capture && !actionsWithoutCaptureSupported.includes(actionKey);\n}\n\nexport function toHandlerProp(device: string, action = '', capture: boolean = false) {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return (\n 'on' +\n capitalize(device) +\n capitalize(actionKey) +\n (hasCapture(capture, actionKey) ? 'Capture' : '')\n );\n}\n\nconst pointerCaptureEvents = ['gotpointercapture', 'lostpointercapture'];\n\nexport function parseProp(prop: string) {\n let eventKey = prop.substring(2).toLowerCase();\n const passive = !!~eventKey.indexOf('passive');\n if (passive) eventKey = eventKey.replace('passive', '');\n\n const captureKey = pointerCaptureEvents.includes(eventKey) ? 'capturecapture' : 'capture';\n // capture = true\n const capture = !!~eventKey.indexOf(captureKey);\n // pointermovecapture => pointermove\n if (capture) eventKey = eventKey.replace('capture', '');\n return { device: eventKey, capture, passive };\n}\n\nexport function toDomEventType(device: string, action = '') {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return device + actionKey;\n}\n\nexport function isTouch(event: UIEvent) {\n return 'touches' in event;\n}\n\nexport function getPointerType(event: UIEvent): PointerType {\n if (isTouch(event)) return 'touch';\n if ('pointerType' in event) return (event as PointerEvent).pointerType as PointerType;\n return 'mouse';\n}\n\nfunction getCurrentTargetTouchList(event: TouchEvent) {\n return Array.from(event.touches).filter(\n e =>\n e.target === event.currentTarget ||\n (event.currentTarget as Node)?.contains?.(e.target as Node),\n );\n}\n\nfunction getTouchList(event: TouchEvent) {\n return event.type === 'touchend' || event.type === 'touchcancel'\n ? event.changedTouches\n : event.targetTouches;\n}\n\nfunction getValueEvent<EventType extends TouchEvent | PointerEvent>(\n event: EventType,\n): EventType extends TouchEvent ? Touch : PointerEvent {\n return (isTouch(event) ? getTouchList(event as TouchEvent)[0] : event) as any;\n}\n\nexport function distanceAngle(P1: Touch | PointerEvent, P2: Touch | PointerEvent) {\n // add a try catch\n // attempt to fix https://github.com/pmndrs/use-gesture/issues/551\n try {\n const dx = P2.clientX - P1.clientX;\n const dy = P2.clientY - P1.clientY;\n const cx = (P2.clientX + P1.clientX) / 2;\n const cy = (P2.clientY + P1.clientY) / 2;\n\n const distance = Math.hypot(dx, dy);\n const angle = -(Math.atan2(dx, dy) * 180) / Math.PI;\n const origin = [cx, cy] as Vector2;\n return { angle, distance, origin };\n } catch {}\n return null;\n}\n\nexport function touchIds(event: TouchEvent) {\n return getCurrentTargetTouchList(event).map(touch => touch.identifier);\n}\n\nexport function touchDistanceAngle(event: TouchEvent, ids: number[]) {\n const [P1, P2] = Array.from(event.touches).filter(touch => ids.includes(touch.identifier));\n return distanceAngle(P1, P2);\n}\n\nexport function pointerId(event: PointerEvent | TouchEvent) {\n const valueEvent = getValueEvent(event);\n return isTouch(event) ? (valueEvent as Touch).identifier : (valueEvent as PointerEvent).pointerId;\n}\n\nexport function pointerValues(event: PointerEvent | TouchEvent): Vector2 {\n // if ('spaceX' in event) return [event.spaceX, event.spaceY]\n const valueEvent = getValueEvent(event);\n return [valueEvent.clientX, valueEvent.clientY];\n}\n\n// wheel delta defaults from https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\n\nexport function wheelValues(event: WheelEvent): Vector2 {\n let { deltaX, deltaY, deltaMode } = event;\n // normalize wheel values, especially for Firefox\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n return [deltaX, deltaY];\n}\n\nexport function scrollValues(event: UIEvent): Vector2 {\n // If the currentTarget is the window then we return the scrollX/Y position.\n // If not (ie the currentTarget is a DOM element), then we return scrollLeft/Top\n const { scrollX, scrollY, scrollLeft, scrollTop } = event.currentTarget as Element & Window;\n return [scrollX ?? scrollLeft ?? 0, scrollY ?? scrollTop ?? 0];\n}\n\nexport function getEventDetails(event: any) {\n const payload: any = {};\n if ('buttons' in event) payload.buttons = event.buttons;\n if ('shiftKey' in event) {\n const { shiftKey, altKey, metaKey, ctrlKey } = event;\n Object.assign(payload, { shiftKey, altKey, metaKey, ctrlKey });\n }\n return payload;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport function call<T>(v: T | ((...args: any[]) => T), ...args: any[]): T {\n if (typeof v === 'function') {\n // @ts-ignore\n return v(...args);\n } else {\n return v;\n }\n}\n\nexport function noop() {}\n\nexport function chain(...fns: Function[]): Function {\n if (fns.length === 0) return noop;\n if (fns.length === 1) return fns[0];\n\n return function (this: any) {\n let result;\n for (const fn of fns) {\n result = fn.apply(this, arguments) || result;\n }\n return result;\n };\n}\n\nexport function assignDefault<T extends Object>(value: Partial<T> | undefined, fallback: T): T {\n return Object.assign({}, fallback, value || {});\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { V, computeRubberband } from '../utils/maths';\nimport { call } from '../utils/fn';\nimport { getEventDetails } from '../utils/events';\nimport { GestureKey, IngKey, State, Vector2 } from '../types';\nimport { NonUndefined } from '../types';\nimport { Controller } from '../Controller';\n\n/**\n * The lib doesn't compute the kinematics on the last event of the gesture\n * (i.e. for a drag gesture, the `pointerup` coordinates will generally match the\n * last `pointermove` coordinates which would result in all drags ending with a\n * `[0,0]` velocity). However, when the timestamp difference between the last\n * event (ie pointerup) and the before last event (ie pointermove) is greater\n * than BEFORE_LAST_KINEMATICS_DELAY, the kinematics are computed (which would\n * mean that if you release your drag after stopping for more than\n * BEFORE_LAST_KINEMATICS_DELAY, the velocity will be indeed 0).\n *\n * See https://github.com/pmndrs/use-gesture/issues/332 for more details.\n */\n\nconst BEFORE_LAST_KINEMATICS_DELAY = 32;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface Engine<Key extends GestureKey> {\n /**\n * Function that some gestures can use to add initilization\n * properties to the state when it is created.\n */\n init?(): void;\n /**\n * Setup function that some gestures can use to set additional properties of\n * the state when the gesture starts.\n */\n setup?(): void;\n /**\n * Function used by some gestures to determine the intentionality of a\n * a movement depending on thresholds. The intent function can change the\n * `state._active` or `state._blocked` flags if the gesture isn't intentional.\n * @param event\n */\n axisIntent?(event?: UIEvent): void;\n\n restrictToAxis?(movement: Vector2): void;\n}\n\nexport abstract class Engine<Key extends GestureKey> {\n /**\n * The Controller handling state.\n */\n ctrl: Controller;\n\n /**\n * The gesture key ('drag' | 'pinch' | 'wheel' | 'scroll' | 'move' | 'hover')\n */\n readonly key: Key;\n\n /**\n * The key representing the active state of the gesture in the shared state.\n * ('dragging' | 'pinching' | 'wheeling' | 'scrolling' | 'moving' | 'hovering')\n */\n abstract readonly ingKey: IngKey;\n /**\n * The arguments passed to the `bind` function.\n */\n\n /**\n * State prop that aliases state values (`xy` or `da`).\n */\n abstract readonly aliasKey: string;\n\n args: any[];\n\n constructor(ctrl: Controller, args: any[], key: Key) {\n this.ctrl = ctrl;\n this.args = args;\n this.key = key;\n\n if (!this.state) {\n this.state = {} as any;\n this.computeValues([0, 0]);\n this.computeInitial();\n\n if (this.init) this.init();\n this.reset();\n }\n }\n\n /**\n * Function implemented by gestures that compute the offset from the state\n * movement.\n */\n abstract computeOffset(): void;\n\n /**\n * Function implemented by the gestures that compute the movement from the\n * corrected offset (after bounds and potential rubberbanding).\n */\n abstract computeMovement(): void;\n\n /**\n * Executes the bind function so that listeners are properly set by the\n * Controller.\n * @param bindFunction\n */\n abstract bind(\n bindFunction: (\n device: string,\n action: string,\n handler: (event: any) => void,\n options?: AddEventListenerOptions,\n ) => void,\n ): void;\n\n /**\n * Shortcut to the gesture state read from the Controller.\n */\n get state() {\n return this.ctrl.state[this.key]!;\n }\n\n set state(state) {\n this.ctrl.state[this.key] = state;\n }\n\n /**\n * Shortcut to the shared state read from the Controller\n */\n get shared() {\n return this.ctrl.state.shared;\n }\n\n /**\n * Shortcut to the gesture event store read from the Controller.\n */\n get eventStore() {\n return this.ctrl.gestureEventStores[this.key]!;\n }\n\n /**\n * Shortcut to the gesture timeout store read from the Controller.\n */\n get timeoutStore() {\n return this.ctrl.gestureTimeoutStores[this.key]!;\n }\n\n /**\n * Shortcut to the gesture config read from the Controller.\n */\n get config() {\n return this.ctrl.config[this.key]!;\n }\n\n /**\n * Shortcut to the shared config read from the Controller.\n */\n get sharedConfig() {\n return this.ctrl.config.shared;\n }\n\n /**\n * Shortcut to the gesture handler read from the Controller.\n */\n get handler() {\n return this.ctrl.handlers[this.key]!;\n }\n\n reset() {\n const { state, shared, ingKey, args } = this;\n shared[ingKey] = state._active = state.active = state._blocked = state._force = false;\n state._step = [false, false];\n state.intentional = false;\n state._movement = [0, 0];\n state._distance = [0, 0];\n state._direction = [0, 0];\n state._delta = [0, 0];\n // prettier-ignore\n state._bounds = [[-Infinity, Infinity], [-Infinity, Infinity]]\n state.args = args;\n state.axis = undefined;\n state.memo = undefined;\n state.elapsedTime = state.timeDelta = 0;\n state.direction = [0, 0];\n state.distance = [0, 0];\n state.overflow = [0, 0];\n state._movementBound = [false, false];\n state.velocity = [0, 0];\n state.movement = [0, 0];\n state.delta = [0, 0];\n state.timeStamp = 0;\n }\n\n /**\n * Function ran at the start of the gesture.\n * @param event\n */\n start(event: NonUndefined<State[Key]>['event']) {\n const state = this.state;\n const config = this.config;\n if (!state._active) {\n this.reset();\n this.computeInitial();\n\n state._active = true;\n state.target = event.target!;\n state.currentTarget = event.currentTarget!;\n state.lastOffset = config.from ? call(config.from, state) : state.offset;\n state.offset = state.lastOffset;\n state.startTime = state.timeStamp = event.timeStamp;\n }\n }\n\n /**\n * Assign raw values to `state._values` and transformed values to\n * `state.values`.\n * @param values\n */\n computeValues(values: Vector2) {\n const state = this.state;\n state._values = values;\n // transforming values into user-defined coordinates (#402)\n state.values = this.config.transform(values);\n }\n\n /**\n * Assign `state._values` to `state._initial` and transformed `state.values` to\n * `state.initial`.\n * @param values\n */\n computeInitial() {\n const state = this.state;\n state._initial = state._values;\n state.initial = state.values;\n }\n\n /**\n * Computes all sorts of state attributes, including kinematics.\n * @param event\n */\n compute(event?: NonUndefined<State[Key]>['event']) {\n const { state, config, shared } = this;\n state.args = this.args;\n\n let dt = 0;\n\n if (event) {\n // sets the shared state with event properties\n state.event = event;\n // if config.preventDefault is true, then preventDefault\n if (config.preventDefault && event.cancelable) state.event.preventDefault();\n state.type = event.type;\n shared.touches = this.ctrl.pointerIds.size || this.ctrl.touchIds.size;\n shared.locked = !!document.pointerLockElement;\n Object.assign(shared, getEventDetails(event));\n shared.down = shared.pressed = shared.buttons % 2 === 1 || shared.touches > 0;\n\n // sets time stamps\n dt = event.timeStamp - state.timeStamp;\n state.timeStamp = event.timeStamp;\n state.elapsedTime = state.timeStamp - state.startTime;\n }\n\n // only compute _distance if the state is active otherwise we might compute it\n // twice when the gesture ends because state._delta wouldn't have changed on\n // the last frame.\n if (state._active) {\n const _absoluteDelta = state._delta.map(Math.abs) as Vector2;\n V.addTo(state._distance, _absoluteDelta);\n }\n\n // let's run intentionality check.\n if (this.axisIntent) this.axisIntent(event);\n\n // _movement is calculated by each gesture engine\n const [_m0, _m1] = state._movement;\n const [t0, t1] = config.threshold;\n\n const { _step, values } = state;\n\n if (config.hasCustomTransform) {\n // When the user is using a custom transform, we're using `_step` to store\n // the first value passing the threshold.\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && values[0];\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && values[1];\n } else {\n // `_step` will hold the threshold at which point the gesture was triggered.\n // The threshold is signed depending on which direction triggered it.\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && Math.sign(_m0) * t0;\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && Math.sign(_m1) * t1;\n }\n\n state.intentional = _step[0] !== false || _step[1] !== false;\n\n if (!state.intentional) return;\n\n const movement: Vector2 = [0, 0];\n\n if (config.hasCustomTransform) {\n const [v0, v1] = values;\n movement[0] = _step[0] !== false ? v0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? v1 - _step[1] : 0;\n } else {\n movement[0] = _step[0] !== false ? _m0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? _m1 - _step[1] : 0;\n }\n\n if (this.restrictToAxis && !state._blocked) this.restrictToAxis(movement);\n\n const previousOffset = state.offset;\n\n const gestureIsActive = (state._active && !state._blocked) || state.active;\n\n if (gestureIsActive) {\n state.first = state._active && !state.active;\n state.last = !state._active && state.active;\n state.active = shared[this.ingKey] = state._active;\n\n if (event) {\n if (state.first) {\n if ('bounds' in config) state._bounds = call(config.bounds, state);\n if (this.setup) this.setup();\n }\n\n state.movement = movement;\n this.computeOffset();\n }\n }\n\n const [ox, oy] = state.offset;\n const [[x0, x1], [y0, y1]] = state._bounds;\n state.overflow = [ox < x0 ? -1 : ox > x1 ? 1 : 0, oy < y0 ? -1 : oy > y1 ? 1 : 0];\n\n // _movementBound will store the latest _movement value\n // before it went off bounds.\n state._movementBound[0] = state.overflow[0]\n ? state._movementBound[0] === false\n ? state._movement[0]\n : state._movementBound[0]\n : false;\n\n state._movementBound[1] = state.overflow[1]\n ? state._movementBound[1] === false\n ? state._movement[1]\n : state._movementBound[1]\n : false;\n\n // @ts-ignore\n const rubberband: Vector2 = state._active ? config.rubberband || [0, 0] : [0, 0];\n state.offset = computeRubberband(state._bounds, state.offset, rubberband);\n state.delta = V.sub(state.offset, previousOffset);\n\n this.computeMovement();\n\n if (gestureIsActive && (!state.last || dt > BEFORE_LAST_KINEMATICS_DELAY)) {\n state.delta = V.sub(state.offset, previousOffset);\n const absoluteDelta = state.delta.map(Math.abs) as Vector2;\n\n V.addTo(state.distance, absoluteDelta);\n state.direction = state.delta.map(Math.sign) as Vector2;\n state._direction = state._delta.map(Math.sign) as Vector2;\n\n // calculates kinematics unless the gesture starts or ends or if the\n // dt === 0 (which can happen on high frame rate monitors, see issue #581)\n // because of privacy protection:\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp#reduced_time_precision\n if (!state.first && dt > 0) {\n state.velocity = [absoluteDelta[0] / dt, absoluteDelta[1] / dt];\n state.timeDelta = dt;\n }\n }\n }\n\n /**\n * Fires the gesture handler.\n */\n emit() {\n const state = this.state;\n const shared = this.shared;\n const config = this.config;\n\n if (!state._active) this.clean();\n\n // we don't trigger the handler if the gesture is blocked or non intentional,\n // unless the `_force` flag was set or the `triggerAllEvents` option was set\n // to true in the config.\n if ((state._blocked || !state.intentional) && !state._force && !config.triggerAllEvents) return;\n\n // @ts-ignore\n const memo = this.handler({ ...shared, ...state, [this.aliasKey]: state.values });\n\n // Sets memo to the returned value of the handler (unless it's undefined)\n if (memo !== undefined) state.memo = memo;\n }\n\n /**\n * Cleans the gesture timeouts and event listeners.\n */\n clean() {\n this.eventStore.clean();\n this.timeoutStore.clean();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { V } from '../utils/maths';\nimport { getPointerType } from '../utils/events';\nimport { CoordinatesKey, Vector2 } from '../types';\nimport { Engine } from './Engine';\n\nfunction selectAxis([dx, dy]: Vector2, threshold: number) {\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n if (absDx > absDy && absDx > threshold) {\n return 'x';\n }\n if (absDy > absDx && absDy > threshold) {\n return 'y';\n }\n return undefined;\n}\n\nexport abstract class CoordinatesEngine<Key extends CoordinatesKey> extends Engine<Key> {\n aliasKey = 'xy';\n\n reset() {\n super.reset();\n this.state.axis = undefined;\n }\n\n init() {\n this.state.offset = [0, 0];\n this.state.lastOffset = [0, 0];\n }\n\n computeOffset() {\n this.state.offset = V.add(this.state.lastOffset, this.state.movement);\n }\n\n computeMovement() {\n this.state.movement = V.sub(this.state.offset, this.state.lastOffset);\n }\n\n axisIntent(event?: UIEvent) {\n const state = this.state;\n const config = this.config;\n\n if (!state.axis && event) {\n const threshold =\n typeof config.axisThreshold === 'object'\n ? config.axisThreshold[getPointerType(event)]\n : config.axisThreshold;\n\n state.axis = selectAxis(state._movement, threshold);\n }\n\n // We block the movement if either:\n // - config.lockDirection or config.axis was set but axis isn't detected yet\n // - config.axis was set but is different than detected axis\n state._blocked =\n ((config.lockDirection || !!config.axis) && !state.axis) ||\n (!!config.axis && config.axis !== state.axis);\n }\n\n restrictToAxis(v: Vector2) {\n if (this.config.axis || this.config.lockDirection) {\n switch (this.state.axis) {\n case 'x':\n v[1] = 0;\n break; // [ x, 0 ]\n case 'y':\n v[0] = 0;\n break; // [ 0, y ]\n }\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { clampStateInternalMovementToBounds } from '../utils/state';\nimport { V } from '../utils/maths';\nimport { wheelValues } from '../utils/events';\nimport { CoordinatesEngine } from './CoordinatesEngine';\n\nexport interface WheelEngine extends CoordinatesEngine<'wheel'> {\n wheel(this: WheelEngine, event: WheelEvent): void;\n wheelChange(this: WheelEngine, event: WheelEvent): void;\n wheelEnd(this: WheelEngine): void;\n}\n\nexport class WheelEngine extends CoordinatesEngine<'wheel'> {\n ingKey = 'wheeling' as const;\n\n wheel(event: WheelEvent) {\n if (!this.state._active) this.start(event);\n this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n\n wheelChange(event: WheelEvent) {\n const state = this.state;\n state._delta = wheelValues(event);\n V.addTo(state._movement, state._delta);\n\n // _movement rolls back to when it passed the bounds.\n clampStateInternalMovementToBounds(state);\n\n this.compute(event);\n this.emit();\n }\n\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n\n bind(bindFunction: any) {\n bindFunction('wheel', '', this.wheel.bind(this));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { V } from '../utils/maths';\nimport { scrollValues } from '../utils/events';\nimport { CoordinatesEngine } from './CoordinatesEngine';\n\nexport class ScrollEngine extends CoordinatesEngine<'scroll'> {\n ingKey = 'scrolling' as const;\n\n scroll(event: UIEvent) {\n if (!this.state._active) this.start(event);\n this.scrollChange(event);\n this.timeoutStore.add('scrollEnd', this.scrollEnd.bind(this));\n }\n\n scrollChange(event: UIEvent) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n const values = scrollValues(event);\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n\n this.computeValues(values);\n this.compute(event);\n\n this.emit();\n }\n\n scrollEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n\n bind(bindFunction: any) {\n bindFunction('scroll', '', this.scroll.bind(this));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { clampStateInternalMovementToBounds } from '../utils/state';\nimport { V } from '../utils/maths';\nimport { touchDistanceAngle, distanceAngle, wheelValues } from '../utils/events';\nimport { Vector2, WebKitGestureEvent } from '../types';\nimport { Engine } from './Engine';\n\nconst SCALE_ANGLE_RATIO_INTENT_DEG = 30;\nconst PINCH_WHEEL_RATIO = 100;\n\nexport class PinchEngine extends Engine<'pinch'> {\n ingKey = 'pinching' as const;\n\n aliasKey = 'da';\n\n init() {\n this.state.offset = [1, 0];\n this.state.lastOffset = [1, 0];\n this.state._pointerEvents = new Map();\n }\n\n // superseeds generic Engine reset call\n reset() {\n super.reset();\n const state = this.state;\n state._touchIds = [];\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n state.turns = 0;\n }\n\n computeOffset() {\n const { type, movement, lastOffset } = this.state;\n if (type === 'wheel') {\n this.state.offset = V.add(movement, lastOffset);\n } else {\n this.state.offset = [(1 + movement[0]) * lastOffset[0], movement[1] + lastOffset[1]];\n }\n }\n\n computeMovement() {\n const { offset, lastOffset } = this.state;\n this.state.movement = [offset[0] / lastOffset[0], offset[1] - lastOffset[1]];\n }\n\n axisIntent() {\n const state = this.state;\n const [_m0, _m1] = state._movement;\n if (!state.axis) {\n const axisMovementDifference = Math.abs(_m0) * SCALE_ANGLE_RATIO_INTENT_DEG - Math.abs(_m1);\n if (axisMovementDifference < 0) state.axis = 'angle';\n else if (axisMovementDifference > 0) state.axis = 'scale';\n }\n }\n\n restrictToAxis(v: Vector2) {\n if (this.config.lockDirection) {\n if (this.state.axis === 'scale') v[1] = 0;\n else if (this.state.axis === 'angle') v[0] = 0;\n }\n }\n\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n setTimeout(() => {\n state.canceled = true;\n state._active = false;\n // we run compute with no event so that kinematics won't be computed\n this.compute();\n this.emit();\n }, 0);\n }\n\n touchStart(event: TouchEvent) {\n this.ctrl.setEventIds(event);\n const state = this.state;\n const ctrlTouchIds = this.ctrl.touchIds;\n\n if (state._active) {\n // check that the touchIds that initiated the gesture are still enabled\n // This is useful for when the page loses track of the pointers (minifying\n // gesture on iPad).\n if (state._touchIds.every(id => ctrlTouchIds.has(id))) return;\n // The gesture is still active, but probably didn't have the opportunity to\n // end properly, so we restart the pinch.\n }\n\n if (ctrlTouchIds.size < 2) return;\n\n this.start(event);\n state._touchIds = Array.from(ctrlTouchIds).slice(0, 2) as [number, number];\n\n const payload = touchDistanceAngle(event, state._touchIds);\n\n if (!payload) return;\n this.pinchStart(event, payload);\n }\n\n pointerStart(event: PointerEvent) {\n if (event.buttons != null && event.buttons % 2 !== 1) return;\n this.ctrl.setEventIds(event);\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n const state = this.state;\n const _pointerEvents = state._pointerEvents;\n const ctrlPointerIds = this.ctrl.pointerIds;\n\n if (state._active) {\n // see touchStart comment\n if (Array.from(_pointerEvents.keys()).every(id => ctrlPointerIds.has(id))) return;\n }\n\n if (_pointerEvents.size < 2) {\n _pointerEvents.set(event.pointerId, event);\n }\n\n if (state._pointerEvents.size < 2) return;\n\n this.start(event);\n\n // @ts-ignore\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n\n if (!payload) return;\n this.pinchStart(event, payload);\n }\n\n pinchStart(\n event: PointerEvent | TouchEvent,\n payload: { distance: number; angle: number; origin: Vector2 },\n ) {\n const state = this.state;\n state.origin = payload.origin;\n this.computeValues([payload.distance, payload.angle]);\n this.computeInitial();\n\n this.compute(event);\n this.emit();\n }\n\n touchMove(event: TouchEvent) {\n if (!this.state._active) return;\n const payload = touchDistanceAngle(event, this.state._touchIds);\n\n if (!payload) return;\n this.pinchMove(event, payload);\n }\n\n pointerMove(event: PointerEvent) {\n const _pointerEvents = this.state._pointerEvents;\n if (_pointerEvents.has(event.pointerId)) {\n _pointerEvents.set(event.pointerId, event);\n }\n if (!this.state._active) return;\n // @ts-ignore\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n\n if (!payload) return;\n this.pinchMove(event, payload);\n }\n\n pinchMove(\n event: PointerEvent | TouchEvent,\n payload: { distance: number; angle: number; origin: Vector2 },\n ) {\n const state = this.state;\n const prev_a = state._values[1];\n const delta_a = payload.angle - prev_a;\n\n let delta_turns = 0;\n if (Math.abs(delta_a) > 270) delta_turns += Math.sign(delta_a);\n\n this.computeValues([payload.distance, payload.angle - 360 * delta_turns]);\n\n state.origin = payload.origin;\n state.turns = delta_turns;\n state._movement = [\n state._values[0] / state._initial[0] - 1,\n state._values[1] - state._initial[1],\n ];\n\n this.compute(event);\n this.emit();\n }\n\n touchEnd(event: TouchEvent) {\n this.ctrl.setEventIds(event);\n if (!this.state._active) return;\n\n if (this.state._touchIds.some(id => !this.ctrl.touchIds.has(id))) {\n this.state._active = false;\n\n this.compute(event);\n this.emit();\n }\n }\n\n pointerEnd(event: PointerEvent) {\n const state = this.state;\n this.ctrl.setEventIds(event);\n try {\n // @ts-ignore r3f\n event.target.releasePointerCapture(event.pointerId);\n } catch {}\n\n if (state._pointerEvents.has(event.pointerId)) {\n state._pointerEvents.delete(event.pointerId);\n }\n\n if (!state._active) return;\n\n if (state._pointerEvents.size < 2) {\n state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n\n gestureStart(event: WebKitGestureEvent) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n\n if (state._active) return;\n\n this.start(event);\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n this.compute(event);\n\n this.emit();\n }\n\n gestureMove(event: WebKitGestureEvent) {\n if (event.cancelable) event.preventDefault();\n\n if (!this.state._active) return;\n\n const state = this.state;\n\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n const _previousMovement = state._movement;\n state._movement = [event.scale - 1, event.rotation];\n state._delta = V.sub(state._movement, _previousMovement);\n this.compute(event);\n this.emit();\n }\n\n gestureEnd(event: WebKitGestureEvent) {\n if (!this.state._active) return;\n\n this.state._active = false;\n\n this.compute(event);\n this.emit();\n }\n\n wheel(event: WheelEvent) {\n const modifierKey = this.config.modifierKey;\n if (\n modifierKey &&\n (Array.isArray(modifierKey) ? !modifierKey.find(k => event[k]) : !event[modifierKey])\n )\n return;\n if (!this.state._active) this.wheelStart(event);\n else this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n\n wheelStart(event: WheelEvent) {\n this.start(event);\n this.wheelChange(event);\n }\n\n wheelChange(event: WheelEvent) {\n const isR3f = 'uv' in event;\n if (!isR3f) {\n if (event.cancelable) {\n event.preventDefault();\n }\n if (process.env.NODE_ENV === 'development' && !event.defaultPrevented) {\n // eslint-disable-next-line no-console\n console.warn(\n `[@use-gesture]: To properly support zoom on trackpads, try using the \\`target\\` option.\\n\\nThis message will only appear in development mode.`,\n );\n }\n }\n const state = this.state;\n /**\n * 原版的计算对鼠标滚轮不友好\n * 1. 基数问题。鼠标滚轮的 delta 像素级在 0 - 300+ 浮动不等。相对的触摸板在 0 - 10+ 左右,所以相对会觉得触摸板缩放比较稳定\n * 2. 步进问题。一次缩放的增量 = 基数 * 上一次缩放。本身是为了营造平滑加速的感觉,但对于基数较大的滚轮加速曲线会特别快\n * 3. 所以最终步进值限制在 0.1(触摸板在 0.01 - 0.08 左右,无影响),用来约束太快的滚轮连续滚动。该值先写死(受限于 maxOffset)\n * 4. 计算公式 offset = lastOffset + movement - delta * offset\n */\n // state._delta = [(-wheelValues(event)[1] / PINCH_WHEEL_RATIO) * state.offset[0], 0]\n let stepValue = (-wheelValues(event)[1] / PINCH_WHEEL_RATIO) * state.offset[0];\n if (Math.abs(stepValue) > 0.1) {\n stepValue = 0.1 * Math.sign(stepValue);\n }\n\n state._delta = [stepValue, 0];\n V.addTo(state._movement, state._delta);\n\n // _movement rolls back to when it passed the bounds.\n clampStateInternalMovementToBounds(state);\n\n this.state.origin = [event.clientX, event.clientY];\n\n this.compute(event);\n this.emit();\n }\n\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n\n bind(bindFunction: any) {\n const device = this.config.device;\n if (!!device) {\n // @ts-ignore\n bindFunction(device, 'start', this[device + 'Start'].bind(this));\n // @ts-ignore\n bindFunction(device, 'change', this[device + 'Move'].bind(this));\n // @ts-ignore\n bindFunction(device, 'end', this[device + 'End'].bind(this));\n // @ts-ignore\n bindFunction(device, 'cancel', this[device + 'End'].bind(this));\n // @ts-ignore\n bindFunction('lostPointerCapture', '', this[device + 'End'].bind(this));\n }\n // we try to set a passive listener, knowing that in any case React will\n // ignore it.\n if (this.config.pinchOnWheel) {\n bindFunction('wheel', '', this.wheel.bind(this), { passive: false });\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { V } from '../utils/maths';\nimport { pointerValues } from '../utils/events';\nimport { CoordinatesEngine } from './CoordinatesEngine';\n\nexport class MoveEngine extends CoordinatesEngine<'move'> {\n ingKey = 'moving' as const;\n\n move(event: PointerEvent) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n if (!this.state._active) this.moveStart(event);\n else this.moveChange(event);\n this.timeoutStore.add('moveEnd', this.moveEnd.bind(this));\n }\n\n moveStart(event: PointerEvent) {\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.computeInitial();\n this.emit();\n }\n\n moveChange(event: PointerEvent) {\n if (!this.state._active) return;\n const values = pointerValues(event);\n const state = this.state;\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n\n this.computeValues(values);\n\n this.compute(event);\n this.emit();\n }\n\n moveEnd(event?: PointerEvent) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n\n bind(bindFunction: any) {\n bindFunction('pointer', 'change', this.move.bind(this));\n bindFunction('pointer', 'leave', this.moveEnd.bind(this));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { V } from '../utils/maths';\nimport { pointerValues } from '../utils/events';\nimport { CoordinatesEngine } from './CoordinatesEngine';\n\nexport class HoverEngine extends CoordinatesEngine<'hover'> {\n ingKey = 'hovering' as const;\n\n enter(event: PointerEvent) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n this.start(event);\n this.computeValues(pointerValues(event));\n\n this.compute(event);\n this.emit();\n }\n\n leave(event: PointerEvent) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n\n const state = this.state;\n if (!state._active) return;\n\n state._active = false;\n const values = pointerValues(event);\n state._movement = state._delta = V.sub(values, state._values);\n\n this.computeValues(values);\n this.compute(event);\n\n state.delta = state.movement;\n this.emit();\n }\n\n bind(bindFunction: any) {\n bindFunction('pointer', 'enter', this.enter.bind(this));\n bindFunction('pointer', 'leave', this.leave.bind(this));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { InternalGestureOptions } from '../types'\nimport { Vector2, State, GenericOptions } from '../types'\nimport { V } from '../utils/maths'\n\nexport const identity = (v: Vector2) => v\nexport const DEFAULT_RUBBERBAND = 0.15\n\nexport const commonConfigResolver = {\n enabled(value = true) {\n return value\n },\n eventOptions(value: AddEventListenerOptions | undefined, _k: string, config: { shared: GenericOptions }) {\n return { ...config.shared.eventOptions, ...value }\n },\n preventDefault(value = false) {\n return value\n },\n triggerAllEvents(value = false) {\n return value\n },\n rubberband(value: number | boolean | Vector2 = 0): Vector2 {\n switch (value) {\n case true:\n return [DEFAULT_RUBBERBAND, DEFAULT_RUBBERBAND]\n case false:\n return [0, 0]\n default:\n return V.toVector(value)\n }\n },\n from(value: number | Vector2 | ((s: State) => Vector2)) {\n if (typeof value === 'function') return value\n // eslint-disable-next-line eqeqeq\n if (value != null) return V.toVector(value)\n },\n transform(this: InternalGestureOptions, value: any, _k: string, config: { shared: GenericOptions }) {\n const transform = value || config.shared.transform\n this.hasCustomTransform = !!transform\n\n if (process.env.NODE_ENV === 'development') {\n const originalTransform = transform || identity\n return (v: Vector2) => {\n const r = originalTransform(v)\n if (!isFinite(r[0]) || !isFinite(r[1])) {\n // eslint-disable-next-line no-console\n console.warn(`[@use-gesture]: config.transform() must produce a valid result, but it was: [${r[0]},${[1]}]`)\n }\n return r\n }\n }\n return transform || identity\n },\n threshold(value: any) {\n return V.toVector(value, 0)\n }\n}\n\nif (process.env.NODE_ENV === 'development') {\n Object.assign(commonConfigResolver, {\n domTarget(value: any) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`)\n }\n return NaN\n },\n lockDirection(value: any) {\n if (value !== undefined) {\n throw Error(\n `[@use-gesture]: \\`lockDirection\\` option has been merged with \\`axis\\`. Use it as in \\`{ axis: 'lock' }\\``\n )\n }\n return NaN\n },\n initial(value: any) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`initial\\` option has been renamed to \\`from\\`.`)\n }\n return NaN\n }\n })\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { commonConfigResolver } from './commonConfigResolver'\nimport { InternalCoordinatesOptions, CoordinatesConfig, Bounds, DragBounds, State, Vector2 } from '../types'\n\nconst DEFAULT_AXIS_THRESHOLD = 0\n\nexport const coordinatesConfigResolver = {\n ...commonConfigResolver,\n axis(\n this: InternalCoordinatesOptions,\n _v: any,\n _k: string,\n { axis }: CoordinatesConfig\n ): InternalCoordinatesOptions['axis'] {\n this.lockDirection = axis === 'lock'\n if (!this.lockDirection) return axis as any\n },\n axisThreshold(value = DEFAULT_AXIS_THRESHOLD) {\n return value\n },\n bounds(\n value: DragBounds | ((state: State) => DragBounds) = {}\n ): (() => EventTarget | null) | HTMLElement | [Vector2, Vector2] {\n if (typeof value === 'function') {\n // @ts-ignore\n return (state: State) => coordinatesConfigResolver.bounds(value(state))\n }\n\n if ('current' in value) {\n return () => value.current\n }\n\n if (typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return value\n }\n\n const { left = -Infinity, right = Infinity, top = -Infinity, bottom = Infinity } = value as Bounds\n\n return [\n [left, right],\n [top, bottom]\n ]\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { V } from '../utils/maths';\nimport { pointerId, getPointerType, pointerValues } from '../utils/events';\nimport { Vector2 } from '../types';\nimport { coordinatesConfigResolver } from '../config/coordinatesConfigResolver';\nimport { CoordinatesEngine } from './CoordinatesEngine';\n\nconst KEYS_DELTA_MAP = {\n ArrowRight: (displacement: number, factor: number = 1) => [displacement * factor, 0],\n ArrowLeft: (displacement: number, factor: number = 1) => [-1 * displacement * factor, 0],\n ArrowUp: (displacement: number, factor: number = 1) => [0, -1 * displacement * factor],\n ArrowDown: (displacement: number, factor: number = 1) => [0, displacement * factor],\n};\n\nexport class DragEngine extends CoordinatesEngine<'drag'> {\n ingKey = 'dragging' as const;\n\n // superseeds generic Engine reset call\n reset(this: DragEngine) {\n super.reset();\n const state = this.state;\n state._pointerId = undefined;\n state._pointerActive = false;\n state._keyboardActive = false;\n state._preventScroll = false;\n state._delayed = false;\n state.swipe = [0, 0];\n state.tap = false;\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n }\n\n setup() {\n const state = this.state;\n\n if (state._bounds instanceof HTMLElement) {\n const boundRect = state._bounds.getBoundingClientRect();\n const targetRect = (state.currentTarget as HTMLElement).getBoundingClientRect();\n const _bounds = {\n left: boundRect.left - targetRect.left + state.offset[0],\n right: boundRect.right - targetRect.right + state.offset[0],\n top: boundRect.top - targetRect.top + state.offset[1],\n bottom: boundRect.bottom - targetRect.bottom + state.offset[1],\n };\n state._bounds = coordinatesConfigResolver.bounds(_bounds) as [Vector2, Vector2];\n }\n }\n\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n state.canceled = true;\n state._active = false;\n setTimeout(() => {\n // we run compute with no event so that kinematics won't be computed\n this.compute();\n this.emit();\n }, 0);\n }\n\n setActive() {\n this.state._active = this.state._pointerActive || this.state._keyboardActive;\n }\n\n // superseeds Engine clean function\n clean() {\n this.pointerClean();\n this.state._pointerActive = false;\n this.state._keyboardActive = false;\n super.clean();\n }\n\n pointerDown(event: PointerEvent) {\n const config = this.config;\n const state = this.state;\n\n if (\n event.buttons != null &&\n // If the user submits an array as pointer.buttons, don't start the drag\n // if event.buttons isn't included inside that array.\n (Array.isArray(config.pointerButtons)\n ? !config.pointerButtons.includes(event.buttons)\n : // If the user submits a number as pointer.buttons, refuse the drag if\n // config.pointerButtons is different than `-1` and if event.buttons\n // doesn't match the combination.\n config.pointerButtons !== -1 && config.pointerButtons !== event.buttons)\n )\n return;\n\n const ctrlIds = this.ctrl.setEventIds(event);\n // We need to capture all pointer ids so that we can keep track of them when\n // they're released off the target\n if (config.pointerCapture) {\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n }\n\n if (\n // in some situations (https://github.com/pmndrs/use-gesture/issues/494#issuecomment-1127584116)\n // like when a new browser tab is opened during a drag gesture, the drag\n // can be interrupted mid-way, and can stall. This happens because the\n // pointerId that initiated the gesture is lost, and since the drag\n // persists until that pointerId is lifted with pointerup, it never ends.\n //\n // Therefore, when we detect that only one pointer is pressing the screen,\n // we consider that the gesture can proceed.\n ctrlIds &&\n ctrlIds.size > 1 &&\n state._pointerActive\n )\n return;\n\n this.start(event);\n this.setupPointer(event);\n\n state._pointerId = pointerId(event);\n state._pointerActive = true;\n\n this.computeValues(pointerValues(event));\n this.computeInitial();\n\n if (config.preventScrollAxis && getPointerType(event) !== 'mouse') {\n // when preventScrollAxis is set we don't consider the gesture active\n // until it's deliberate\n state._active = false;\n this.setupScrollPrevention(event);\n } else if (config.delay > 0) {\n this.setupDelayTrigger(event);\n // makes sure we emit all events when `triggerAllEvents` flag is `true`\n if (config.triggerAllEvents) {\n this.compute(event);\n this.emit();\n }\n } else {\n this.startPointerDrag(event);\n }\n }\n\n startPointerDrag(event: PointerEvent) {\n const state = this.state;\n state._active = true;\n state._preventScroll = true;\n state._delayed = false;\n\n this.compute(event);\n this.emit();\n }\n\n pointerMove(event: PointerEvent) {\n const state = this.state;\n const config = this.config;\n\n if (!state._pointerActive) return;\n\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n const _values = pointerValues(event);\n\n if (document.pointerLockElement === event.target) {\n state._delta = [event.movementX, event.movementY];\n } else {\n state._delta = V.sub(_values, state._values);\n this.computeValues(_values);\n }\n\n V.addTo(state._movement, state._delta);\n this.compute(event);\n\n // if the gesture is delayed but deliberate, then we can start it\n // immediately.\n if (state._delayed && state.intentional) {\n this.timeoutStore.remove('dragDelay');\n // makes sure `first` is still true when moving for the first time after a\n // delay.\n state.active = false;\n this.startPointerDrag(event);\n return;\n }\n\n if (config.preventScrollAxis && !state._preventScroll) {\n if (state.axis) {\n if (state.axis === config.preventScrollAxis || config.preventScrollAxis === 'xy') {\n state._active = false;\n this.clean();\n return;\n } else {\n this.timeoutStore.remove('startPointerDrag');\n this.startPointerDrag(event);\n return;\n }\n } else {\n return;\n }\n }\n\n this.emit();\n }\n\n pointerUp(event: PointerEvent) {\n this.ctrl.setEventIds(event);\n // We release the pointer id if it has pointer capture\n try {\n if (\n this.config.pointerCapture &&\n (event.target as HTMLElement).hasPointerCapture(event.pointerId)\n ) {\n // this shouldn't be necessary as it should be automatic when releasing the pointer\n (event.target as HTMLElement).releasePointerCapture(event.pointerId);\n }\n } catch {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n `[@use-gesture]: If you see this message, it's likely that you're using an outdated version of \\`@react-three/fiber\\`. \\n\\nPlease upgrade to the latest version.`,\n );\n }\n }\n\n const state = this.state;\n const config = this.config;\n\n if (!state._active || !state._pointerActive) return;\n\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n\n this.state._pointerActive = false;\n this.setActive();\n this.compute(event);\n\n const [dx, dy] = state._distance;\n state.tap = dx <= config.tapsThreshold && dy <= config.tapsThreshold;\n\n if (state.tap && config.filterTaps) {\n state._force = true;\n } else {\n const [_dx, _dy] = state._delta;\n const [_mx, _my] = state._movement;\n const [svx, svy] = config.swipe.velocity;\n const [sx, sy] = config.swipe.distance;\n const sdt = config.swipe.duration;\n\n if (state.elapsedTime < sdt) {\n const _vx = Math.abs(_dx / state.timeDelta);\n const _vy = Math.abs(_dy / state.timeDelta);\n\n if (_vx > svx && Math.abs(_mx) > sx) state.swipe[0] = Math.sign(_dx);\n if (_vy > svy && Math.abs(_my) > sy) state.swipe[1] = Math.sign(_dy);\n }\n }\n\n this.emit();\n }\n\n pointerClick(event: MouseEvent) {\n // event.detail indicates the number of buttons being pressed. When it's\n // null, it's likely to be a keyboard event from the Enter Key that could\n // be used for accessibility, and therefore shouldn't be prevented.\n // See https://github.com/pmndrs/use-gesture/issues/530\n if (!this.state.tap && event.detail > 0) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n setupPointer(event: PointerEvent) {\n const config = this.config;\n const device = config.device;\n\n if (process.env.NODE_ENV === 'development') {\n try {\n if (device === 'pointer' && config.preventScrollDelay === undefined) {\n const currentTarget =\n // @ts-ignore (warning for r3f)\n 'uv' in event ? event.sourceEvent.currentTarget : event.currentTarget;\n const style = window.getComputedStyle(currentTarget);\n if (style.touchAction === 'auto') {\n // eslint-disable-next-line no-console\n console.warn(\n `[@use-gesture]: The drag target has its \\`touch-action\\` style property set to \\`auto\\`. It is recommended to add \\`touch-action: 'none'\\` so that the drag gesture behaves correctly on touch-enabled devices. For more information read this: https://use-gesture.netlify.app/docs/extras/#touch-action.\\n\\nThis message will only show in development mode. It won't appear in production. If this is intended, you can ignore it.`,\n currentTarget,\n );\n }\n }\n } catch {}\n }\n\n if (config.pointerLock) {\n (event.currentTarget as HTMLElement).requestPointerLock();\n }\n\n if (!config.pointerCapture) {\n this.eventStore.add(this.sharedConfig.window, device, 'change', this.pointerMove.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'end', this.pointerUp.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'cancel', this.pointerUp.bind(this));\n }\n }\n\n pointerClean() {\n if (this.config.pointerLock && document.pointerLockElement === this.state.currentTarget) {\n document.exitPointerLock();\n }\n }\n\n preventScroll(event: PointerEvent) {\n if (this.state._preventScroll && event.cancelable) {\n event.preventDefault();\n }\n }\n\n setupScrollPrevention(event: PointerEvent) {\n // fixes https://github.com/pmndrs/use-gesture/issues/497\n this.state._preventScroll = false;\n persistEvent(event);\n // we add window listeners that will prevent the scroll when the user has started dragging\n const remove = this.eventStore.add(\n this.sharedConfig.window,\n 'touch',\n 'change',\n this.preventScroll.bind(this),\n {\n passive: false,\n },\n );\n this.eventStore.add(this.sharedConfig.window, 'touch', 'end', remove);\n this.eventStore.add(this.sharedConfig.window, 'touch', 'cancel', remove);\n this.timeoutStore.add(\n 'startPointerDrag',\n this.startPointerDrag.bind(this),\n this.config.preventScrollDelay!,\n event,\n );\n }\n\n setupDelayTrigger(event: PointerEvent) {\n this.state._delayed = true;\n this.timeoutStore.add(\n 'dragDelay',\n () => {\n // forces drag to start no matter the threshold when delay is reached\n this.state._step = [0, 0];\n this.startPointerDrag(event);\n },\n this.config.delay,\n );\n }\n\n keyDown(event: KeyboardEvent) {\n // @ts-ignore\n const deltaFn = KEYS_DELTA_MAP[event.key];\n if (deltaFn) {\n const state = this.state;\n const factor = event.shiftKey ? 10 : event.altKey ? 0.1 : 1;\n\n this.start(event);\n\n state._delta = deltaFn(this.config.keyboardDisplacement, factor);\n state._keyboardActive = true;\n V.addTo(state._movement, state._delta);\n\n this.compute(event);\n this.emit();\n }\n }\n\n keyUp(event: KeyboardEvent) {\n if (!(event.key in KEYS_DELTA_MAP)) return;\n\n this.state._keyboardActive = false;\n this.setActive();\n this.compute(event);\n this.emit();\n }\n\n bind(bindFunction: any) {\n const device = this.config.device;\n\n bindFunction(device, 'start', this.pointerDown.bind(this));\n\n if (this.config.pointerCapture) {\n bindFunction(device, 'change', this.pointerMove.bind(this));\n bindFunction(device, 'end', this.pointerUp.bind(this));\n bindFunction(device, 'cancel', this.pointerUp.bind(this));\n bindFunction('lostPointerCapture', '', this.pointerUp.bind(this));\n }\n\n if (this.config.keys) {\n bindFunction('key', 'down', this.keyDown.bind(this));\n bindFunction('key', 'up', this.keyUp.bind(this));\n }\n if (this.config.filterTaps) {\n bindFunction('click', '', this.pointerClick.bind(this), { capture: true, passive: false });\n }\n }\n}\n\nfunction persistEvent(event: PointerEvent) {\n // @ts-ignore\n 'persist' in event && typeof event.persist === 'function' && event.persist();\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { coordinatesConfigResolver } from './coordinatesConfigResolver'\n\nexport const wheelConfigResolver = coordinatesConfigResolver\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { coordinatesConfigResolver } from './coordinatesConfigResolver'\n\nexport const scrollConfigResolver = coordinatesConfigResolver\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nconst isBrowser = typeof window !== 'undefined' && window.document && window.document.createElement\n\nfunction supportsTouchEvents(): boolean {\n return isBrowser && 'ontouchstart' in window\n}\n\nfunction isTouchScreen(): boolean {\n return supportsTouchEvents() || (isBrowser && window.navigator.maxTouchPoints > 1)\n}\n\nfunction supportsPointerEvents(): boolean {\n return isBrowser && 'onpointerdown' in window\n}\n\nfunction supportsPointerLock(): boolean {\n return isBrowser && 'exitPointerLock' in window.document\n}\n\nfunction supportsGestureEvents(): boolean {\n try {\n // TODO [TS] possibly find GestureEvent definitions?\n // @ts-ignore: no type definitions for webkit GestureEvents\n return 'constructor' in GestureEvent\n } catch (e) {\n return false\n }\n}\n\nexport const SUPPORT = {\n isBrowser,\n gesture: supportsGestureEvents(),\n /**\n * It looks from https://github.com/pmndrs/use-gesture/discussions/421 that\n * some touchscreens using webkits don't have 'ontouchstart' in window. So\n * we're considering that browsers support TouchEvent if they have\n * `maxTouchPoints > 1`\n *\n * Update 16/09/2023: This generates failure on other Windows systems, so reverting\n * back to detecting TouchEvent support only.\n * https://github.com/pmndrs/use-gesture/issues/626\n */\n touch: supportsTouchEvents(),\n // touch: isTouchScreen(),\n touchscreen: isTouchScreen(),\n pointer: supportsPointerEvents(),\n pointerLock: supportsPointerLock()\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ModifierKey } from '../types'\nimport { PinchConfig, GenericOptions, InternalPinchOptions, State, Vector2 } from '../types'\nimport { call, assignDefault } from '../utils/fn'\nimport { V } from '../utils/maths'\nimport { commonConfigResolver } from './commonConfigResolver'\nimport { SUPPORT } from './support'\n\nexport const pinchConfigResolver = {\n ...commonConfigResolver,\n device(\n this: InternalPinchOptions,\n _v: any,\n _k: string,\n { shared, pointer: { touch = false } = {} }: { shared: GenericOptions } & PinchConfig\n ) {\n // Only try to use gesture events when they are supported and domTarget is set\n // as React doesn't support gesture handlers.\n const sharedConfig = shared\n if (sharedConfig.target && !SUPPORT.touch && SUPPORT.gesture) return 'gesture'\n if (SUPPORT.touch && touch) return 'touch'\n if (SUPPORT.touchscreen) {\n if (SUPPORT.pointer) return 'pointer'\n if (SUPPORT.touch) return 'touch'\n }\n // device is undefined and that's ok, we're going to use wheel to zoom.\n },\n bounds(_v: any, _k: string, { scaleBounds = {}, angleBounds = {} }: PinchConfig) {\n const _scaleBounds = (state?: State) => {\n const D = assignDefault(call(scaleBounds, state), { min: -Infinity, max: Infinity })\n return [D.min, D.max]\n }\n\n const _angleBounds = (state?: State) => {\n const A = assignDefault(call(angleBounds, state), { min: -Infinity, max: Infinity })\n return [A.min, A.max]\n }\n\n if (typeof scaleBounds !== 'function' && typeof angleBounds !== 'function') return [_scaleBounds(), _angleBounds()]\n\n return (state: State) => [_scaleBounds(state), _angleBounds(state)]\n },\n threshold(this: InternalPinchOptions, value: number | Vector2, _k: string, config: PinchConfig) {\n this.lockDirection = config.axis === 'lock'\n const threshold = V.toVector(value, this.lockDirection ? [0.1, 3] : 0)\n return threshold\n },\n modifierKey(value: ModifierKey | ModifierKey[]) {\n if (value === undefined) return 'ctrlKey'\n return value\n },\n pinchOnWheel(value = true) {\n return value\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { coordinatesConfigResolver } from './coordinatesConfigResolver'\n\nexport const moveConfigResolver = {\n ...coordinatesConfigResolver,\n mouseOnly: (value = true) => value\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { coordinatesConfigResolver } from './coordinatesConfigResolver'\n\nexport const hoverConfigResolver = {\n ...coordinatesConfigResolver,\n mouseOnly: (value = true) => value\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { PointerType } from '../types'\nimport { DragConfig, InternalDragOptions, Vector2 } from '../types'\nimport { V } from '../utils/maths'\nimport { coordinatesConfigResolver } from './coordinatesConfigResolver'\nimport { SUPPORT } from './support'\n\nexport const DEFAULT_PREVENT_SCROLL_DELAY = 250\nexport const DEFAULT_DRAG_DELAY = 180\nexport const DEFAULT_SWIPE_VELOCITY = 0.5\nexport const DEFAULT_SWIPE_DISTANCE = 50\nexport const DEFAULT_SWIPE_DURATION = 250\nexport const DEFAULT_KEYBOARD_DISPLACEMENT = 10\n\nconst DEFAULT_DRAG_AXIS_THRESHOLD: Record<PointerType, number> = { mouse: 0, touch: 0, pen: 8 }\n\nexport const dragConfigResolver = {\n ...coordinatesConfigResolver,\n device(\n this: InternalDragOptions,\n _v: any,\n _k: string,\n { pointer: { touch = false, lock = false, mouse = false } = {} }: DragConfig\n ) {\n this.pointerLock = lock && SUPPORT.pointerLock\n if (SUPPORT.touch && touch) return 'touch'\n if (this.pointerLock) return 'mouse'\n if (SUPPORT.pointer && !mouse) return 'pointer'\n if (SUPPORT.touch) return 'touch'\n return 'mouse'\n },\n preventScrollAxis(this: InternalDragOptions, value: 'x' | 'y' | 'xy', _k: string, { preventScroll }: DragConfig) {\n this.preventScrollDelay =\n typeof preventScroll === 'number'\n ? preventScroll\n : preventScroll || (preventScroll === undefined && value)\n ? DEFAULT_PREVENT_SCROLL_DELAY\n : undefined\n if (!SUPPORT.touchscreen || preventScroll === false) return undefined\n return value ? value : preventScroll !== undefined ? 'y' : undefined\n },\n pointerCapture(\n this: InternalDragOptions,\n _v: any,\n _k: string,\n { pointer: { capture = true, buttons = 1, keys = true } = {} }\n ) {\n this.pointerButtons = buttons\n this.keys = keys\n return !this.pointerLock && this.device === 'pointer' && capture\n },\n threshold(\n this: InternalDragOptions,\n value: number | Vector2,\n _k: string,\n { filterTaps = false, tapsThreshold = 3, axis = undefined }\n ) {\n // TODO add warning when value is 0 and filterTaps or axis is set\n const threshold = V.toVector(value, filterTaps ? tapsThreshold : axis ? 1 : 0)\n this.filterTaps = filterTaps\n this.tapsThreshold = tapsThreshold\n return threshold\n },\n swipe(\n this: InternalDragOptions,\n { velocity = DEFAULT_SWIPE_VELOCITY, distance = DEFAULT_SWIPE_DISTANCE, duration = DEFAULT_SWIPE_DURATION } = {}\n ) {\n return {\n velocity: this.transform(V.toVector(velocity)),\n distance: this.transform(V.toVector(distance)),\n duration\n }\n },\n delay(value: number | boolean = 0) {\n switch (value) {\n case true:\n return DEFAULT_DRAG_DELAY\n case false:\n return 0\n default:\n return value\n }\n },\n axisThreshold(value: Record<PointerType, number>) {\n if (!value) return DEFAULT_DRAG_AXIS_THRESHOLD\n return { ...DEFAULT_DRAG_AXIS_THRESHOLD, ...value }\n },\n keyboardDisplacement(value: number = DEFAULT_KEYBOARD_DISPLACEMENT) {\n return value\n }\n}\n\nif (process.env.NODE_ENV === 'development') {\n Object.assign(dragConfigResolver, {\n useTouch(value: any) {\n if (value !== undefined) {\n throw Error(\n `[@use-gesture]: \\`useTouch\\` option has been renamed to \\`pointer.touch\\`. Use it as in \\`{ pointer: { touch: true } }\\`.`\n )\n }\n return NaN\n },\n experimental_preventWindowScrollY(value: any) {\n if (value !== undefined) {\n throw Error(\n `[@use-gesture]: \\`experimental_preventWindowScrollY\\` option has been renamed to \\`preventScroll\\`.`\n )\n }\n return NaN\n },\n swipeVelocity(value: any) {\n if (value !== undefined) {\n throw Error(\n `[@use-gesture]: \\`swipeVelocity\\` option has been renamed to \\`swipe.velocity\\`. Use it as in \\`{ swipe: { velocity: 0.5 } }\\`.`\n )\n }\n return NaN\n },\n swipeDistance(value: any) {\n if (value !== undefined) {\n throw Error(\n `[@use-gesture]: \\`swipeDistance\\` option has been renamed to \\`swipe.distance\\`. Use it as in \\`{ swipe: { distance: 50 } }\\`.`\n )\n }\n return NaN\n },\n swipeDuration(value: any) {\n if (value !== undefined) {\n throw Error(\n `[@use-gesture]: \\`swipeDuration\\` option has been renamed to \\`swipe.duration\\`. Use it as in \\`{ swipe: { duration: 250 } }\\`.`\n )\n }\n return NaN\n }\n })\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { GestureKey, EngineClass, Action } from './types';\nimport { WheelEngine } from './engines/WheelEngine';\nimport { ScrollEngine } from './engines/ScrollEngine';\nimport { PinchEngine } from './engines/PinchEngine';\nimport { MoveEngine } from './engines/MoveEngine';\nimport { HoverEngine } from './engines/HoverEngine';\nimport { DragEngine } from './engines/DragEngine';\nimport { wheelConfigResolver } from './config/wheelConfigResolver';\nimport { scrollConfigResolver } from './config/scrollConfigResolver';\nimport { ResolverMap } from './config/resolver';\nimport { pinchConfigResolver } from './config/pinchConfigResolver';\nimport { moveConfigResolver } from './config/moveConfigResolver';\nimport { hoverConfigResolver } from './config/hoverConfigResolver';\nimport { dragConfigResolver } from './config/dragConfigResolver';\n\nexport const EngineMap = new Map<GestureKey, EngineClass<any>>();\nexport const ConfigResolverMap = new Map<GestureKey, ResolverMap>();\n\nexport function registerAction(action: Action) {\n EngineMap.set(action.key, action.engine);\n ConfigResolverMap.set(action.key, action.resolver);\n}\n\nexport const dragAction: Action = {\n key: 'drag',\n engine: DragEngine as any,\n resolver: dragConfigResolver,\n};\n\nexport const hoverAction: Action = {\n key: 'hover',\n engine: HoverEngine as any,\n resolver: hoverConfigResolver,\n};\n\nexport const moveAction: Action = {\n key: 'move',\n engine: MoveEngine as any,\n resolver: moveConfigResolver,\n};\n\nexport const pinchAction: Action = {\n key: 'pinch',\n engine: PinchEngine as any,\n resolver: pinchConfigResolver,\n};\n\nexport const scrollAction: Action = {\n key: 'scroll',\n engine: ScrollEngine as any,\n resolver: scrollConfigResolver,\n};\n\nexport const wheelAction: Action = {\n key: 'wheel',\n engine: WheelEngine as any,\n resolver: wheelConfigResolver,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport class TimeoutStore {\n private _timeouts = new Map<string, number>();\n\n add<FunctionType extends (...args: any[]) => any>(\n key: string,\n callback: FunctionType,\n ms = 140,\n ...args: Parameters<FunctionType>\n ) {\n this.remove(key);\n this._timeouts.set(key, window.setTimeout(callback, ms, ...args));\n }\n\n remove(key: string) {\n const timeout = this._timeouts.get(key);\n if (timeout) window.clearTimeout(timeout);\n }\n\n clean() {\n this._timeouts.forEach(timeout => void window.clearTimeout(timeout));\n this._timeouts.clear();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { toDomEventType } from './utils/events';\nimport { GestureKey } from './types';\nimport type { Controller } from './Controller';\n\nexport class EventStore {\n private _listeners = new Set<() => void>();\n\n private _ctrl: Controller;\n\n private _gestureKey?: GestureKey;\n\n constructor(ctrl: Controller, gestureKey?: GestureKey) {\n this._ctrl = ctrl;\n this._gestureKey = gestureKey;\n }\n\n add(\n element: EventTarget,\n device: string,\n action: string,\n handler: (event: any) => void,\n options?: AddEventListenerOptions,\n ) {\n const listeners = this._listeners;\n const type = toDomEventType(device, action);\n const _options = this._gestureKey ? this._ctrl.config[this._gestureKey]!.eventOptions : {};\n const eventOptions = { ..._options, ...options };\n element.addEventListener(type, handler, eventOptions);\n const remove = () => {\n element.removeEventListener(type, handler, eventOptions);\n listeners.delete(remove);\n };\n listeners.add(remove);\n return remove;\n }\n\n clean() {\n this._listeners.forEach(remove => remove());\n this._listeners.clear(); // just for safety\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Target } from '../types'\nimport { SUPPORT } from './support'\n\nexport const sharedConfigResolver = {\n target(value: Target) {\n if (value) {\n return () => ('current' in value ? value.current : value)\n }\n return undefined\n },\n enabled(value = true) {\n return value\n },\n window(value = SUPPORT.isBrowser ? window : undefined) {\n return value\n },\n eventOptions({ passive = true, capture = false } = {}) {\n return { passive, capture }\n },\n transform(value: any) {\n return value\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { sharedConfigResolver } from './sharedConfigResolver'\nimport { ConfigResolverMap } from '../actions'\nimport { GestureKey, InternalConfig, UserGestureConfig } from '../types'\n\nexport type Resolver = (x: any, key: string, obj: any) => any\nexport type ResolverMap = { [k: string]: Resolver | ResolverMap | boolean }\n\nexport function resolveWith<T extends { [k: string]: any }, V extends { [k: string]: any }>(\n config: Partial<T> = {},\n resolvers: ResolverMap\n): V {\n const result: any = {}\n\n for (const [key, resolver] of Object.entries(resolvers)) {\n switch (typeof resolver) {\n case 'function':\n if (process.env.NODE_ENV === 'development') {\n const r = resolver.call(result, config[key], key, config)\n // prevents deprecated resolvers from applying in dev mode\n if (!Number.isNaN(r)) result[key] = r\n } else {\n result[key] = resolver.call(result, config[key], key, config)\n }\n break\n case 'object':\n result[key] = resolveWith(config[key], resolver)\n break\n case 'boolean':\n if (resolver) result[key] = config[key]\n break\n }\n }\n\n return result\n}\n\nexport function parse(newConfig: UserGestureConfig, gestureKey?: GestureKey, _config: any = {}): InternalConfig {\n const { target, eventOptions, window, enabled, transform, ...rest } = newConfig as any\n\n _config.shared = resolveWith({ target, eventOptions, window, enabled, transform }, sharedConfigResolver)\n\n if (gestureKey) {\n const resolver = ConfigResolverMap.get(gestureKey)!\n _config[gestureKey] = resolveWith({ shared: _config.shared, ...rest }, resolver)\n } else {\n for (const key in rest) {\n const resolver = ConfigResolverMap.get(key as GestureKey)!\n\n if (resolver) {\n _config[key] = resolveWith({ shared: _config.shared, ...rest[key] }, resolver)\n } else if (process.env.NODE_ENV === 'development') {\n if (!['drag', 'pinch', 'scroll', 'wheel', 'move', 'hover'].includes(key)) {\n if (key === 'domTarget') {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`)\n }\n // eslint-disable-next-line no-console\n console.warn(\n `[@use-gesture]: Unknown config key \\`${key}\\` was used. Please read the documentation for further information.`\n )\n }\n }\n }\n }\n return _config\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { chain } from './utils/fn';\nimport { isTouch, parseProp, toHandlerProp, touchIds } from './utils/events';\nimport {\n GestureKey,\n InternalConfig,\n InternalHandlers,\n NativeHandlers,\n State,\n UserGestureConfig,\n} from './types';\nimport { TimeoutStore } from './TimeoutStore';\nimport { EventStore } from './EventStore';\nimport { parse } from './config/resolver';\nimport { EngineMap } from './actions';\n\nexport class Controller {\n /**\n * The list of gestures handled by the Controller.\n */\n public gestures = new Set<GestureKey>();\n\n /**\n * The event store that keeps track of the config.target listeners.\n */\n private _targetEventStore = new EventStore(this);\n\n /**\n * Object that keeps track of all gesture event listeners.\n */\n public gestureEventStores: { [key in GestureKey]?: EventStore } = {};\n\n public gestureTimeoutStores: { [key in GestureKey]?: TimeoutStore } = {};\n\n public handlers: InternalHandlers = {};\n\n private nativeHandlers?: NativeHandlers;\n\n public config = {} as InternalConfig;\n\n public pointerIds = new Set<number>();\n\n public touchIds = new Set<number>();\n\n public state = {\n shared: {\n shiftKey: false,\n metaKey: false,\n ctrlKey: false,\n altKey: false,\n },\n } as State;\n\n constructor(handlers: InternalHandlers) {\n resolveGestures(this, handlers);\n }\n\n /**\n * Sets pointer or touch ids based on the event.\n * @param event\n */\n setEventIds(event: TouchEvent | PointerEvent) {\n if (isTouch(event)) {\n this.touchIds = new Set(touchIds(event as TouchEvent));\n return this.touchIds;\n } else if ('pointerId' in event) {\n if (event.type === 'pointerup' || event.type === 'pointercancel')\n this.pointerIds.delete(event.pointerId);\n else if (event.type === 'pointerdown') this.pointerIds.add(event.pointerId);\n return this.pointerIds;\n }\n }\n\n /**\n * Attaches handlers to the controller.\n * @param handlers\n * @param nativeHandlers\n */\n applyHandlers(handlers: InternalHandlers, nativeHandlers?: NativeHandlers) {\n this.handlers = handlers;\n this.nativeHandlers = nativeHandlers;\n }\n\n /**\n * Compute and attaches a config to the controller.\n * @param config\n * @param gestureKey\n */\n applyConfig(config: UserGestureConfig, gestureKey?: GestureKey) {\n this.config = parse(config, gestureKey, this.config);\n }\n\n /**\n * Cleans all side effects (listeners, timeouts). When the gesture is\n * destroyed (in React, when the component is unmounted.)\n */\n clean() {\n this._targetEventStore.clean();\n for (const key of this.gestures) {\n this.gestureEventStores[key]!.clean();\n this.gestureTimeoutStores[key]!.clean();\n }\n }\n\n /**\n * Executes side effects (attaching listeners to a `config.target`). Ran on\n * each render.\n */\n effect() {\n if (this.config.shared.target) this.bind();\n return () => this._targetEventStore.clean();\n }\n\n /**\n * The bind function that can be returned by the gesture handler (a hook in\n * React for example.)\n * @param args\n */\n bind(...args: any[]) {\n const sharedConfig = this.config.shared;\n const props: any = {};\n\n let target;\n if (sharedConfig.target) {\n target = sharedConfig.target();\n // if target is undefined let's stop\n if (!target) return;\n }\n\n if (sharedConfig.enabled) {\n // Adding gesture handlers\n for (const gestureKey of this.gestures) {\n const gestureConfig = this.config[gestureKey]!;\n const bindFunction = bindToProps(props, gestureConfig.eventOptions, !!target);\n if (gestureConfig.enabled) {\n const Engine = EngineMap.get(gestureKey)!;\n // @ts-ignore\n new Engine(this, args, gestureKey).bind(bindFunction);\n }\n }\n\n // Adding native handlers\n const nativeBindFunction = bindToProps(props, sharedConfig.eventOptions, !!target);\n for (const eventKey in this.nativeHandlers) {\n nativeBindFunction(\n eventKey,\n '',\n // @ts-ignore\n event => this.nativeHandlers[eventKey]({ ...this.state.shared, event, args }),\n undefined,\n true,\n );\n }\n }\n\n // If target isn't set, we return an object that contains gesture handlers\n // mapped to props handler event keys.\n for (const handlerProp in props) {\n props[handlerProp] = chain(...props[handlerProp]);\n }\n\n // When target isn't specified then return hanlder props.\n if (!target) return props;\n\n // When target is specified, then add listeners to the controller target\n // store.\n for (const handlerProp in props) {\n const { device, capture, passive } = parseProp(handlerProp);\n this._targetEventStore.add(target, device, '', props[handlerProp], { capture, passive });\n }\n }\n}\n\nfunction setupGesture(ctrl: Controller, gestureKey: GestureKey) {\n ctrl.gestures.add(gestureKey);\n ctrl.gestureEventStores[gestureKey] = new EventStore(ctrl, gestureKey);\n ctrl.gestureTimeoutStores[gestureKey] = new TimeoutStore();\n}\n\nfunction resolveGestures(ctrl: Controller, internalHandlers: InternalHandlers) {\n // make sure hover handlers are added first to prevent bugs such as #322\n // where the hover pointerLeave handler is removed before the move\n // pointerLeave, which prevents hovering: false to be fired.\n if (internalHandlers.drag) setupGesture(ctrl, 'drag');\n if (internalHandlers.wheel) setupGesture(ctrl, 'wheel');\n if (internalHandlers.scroll) setupGesture(ctrl, 'scroll');\n if (internalHandlers.move) setupGesture(ctrl, 'move');\n if (internalHandlers.pinch) setupGesture(ctrl, 'pinch');\n if (internalHandlers.hover) setupGesture(ctrl, 'hover');\n}\n\nconst bindToProps =\n (props: any, eventOptions: AddEventListenerOptions, withPassiveOption: boolean) =>\n (\n device: string,\n action: string,\n handler: (event: any) => void,\n options: AddEventListenerOptions = {},\n isNative = false,\n ) => {\n const capture = options.capture ?? eventOptions.capture;\n const passive = options.passive ?? eventOptions.passive;\n // a native handler is already passed as a prop like \"onMouseDown\"\n let handlerProp = isNative ? device : toHandlerProp(device, action, capture);\n if (withPassiveOption && passive) handlerProp += 'Passive';\n props[handlerProp] = props[handlerProp] || [];\n props[handlerProp].push(handler);\n };\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n FullGestureState,\n GestureHandlers,\n GestureKey,\n InternalHandlers,\n UserGestureConfig,\n} from './types';\nimport { EngineMap } from './actions';\n\nconst RE_NOT_NATIVE = /^on(Drag|Wheel|Scroll|Move|Pinch|Hover)/;\n\nfunction sortHandlers(_handlers: GestureHandlers) {\n const native: any = {};\n const handlers: InternalHandlers = {};\n const actions = new Set();\n\n for (let key in _handlers) {\n if (RE_NOT_NATIVE.test(key)) {\n actions.add(RegExp.lastMatch);\n // @ts-ignore\n handlers[key] = _handlers[key];\n } else {\n // @ts-ignore\n native[key] = _handlers[key];\n }\n }\n\n return [handlers, native, actions];\n}\n\ntype HandlerKey = 'onDrag' | 'onPinch' | 'onWheel' | 'onMove' | 'onScroll' | 'onHover';\n\nfunction registerGesture(\n actions: Set<unknown>,\n handlers: GestureHandlers,\n handlerKey: HandlerKey,\n key: GestureKey,\n internalHandlers: any,\n config: any,\n) {\n if (!actions.has(handlerKey)) return;\n\n if (!EngineMap.has(key)) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n `[@use-gesture]: You've created a custom handler that that uses the \\`${key}\\` gesture but isn't properly configured.\\n\\nPlease add \\`${key}Action\\` when creating your handler.`,\n );\n }\n return;\n }\n\n const startKey = handlerKey + 'Start';\n const endKey = handlerKey + 'End';\n\n const fn = (state: FullGestureState<GestureKey>) => {\n let memo = undefined;\n // @ts-ignore\n if (state.first && startKey in handlers) handlers[startKey](state);\n // @ts-ignore\n if (handlerKey in handlers) memo = handlers[handlerKey](state);\n // @ts-ignore\n if (state.last && endKey in handlers) handlers[endKey](state);\n return memo;\n };\n\n internalHandlers[key] = fn;\n config[key] = config[key] || {};\n}\n\nexport function parseMergedHandlers(\n mergedHandlers: GestureHandlers,\n mergedConfig: UserGestureConfig,\n) {\n const [handlers, nativeHandlers, actions] = sortHandlers(mergedHandlers);\n\n const internalHandlers = {};\n\n registerGesture(actions, handlers, 'onDrag', 'drag', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onWheel', 'wheel', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onScroll', 'scroll', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onPinch', 'pinch', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onMove', 'move', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onHover', 'hover', internalHandlers, mergedConfig);\n\n return { handlers: internalHandlers, config: mergedConfig, nativeHandlers };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { GestureKey, InternalHandlers, NativeHandlers, UserGestureConfig } from '../core/types';\nimport { Controller } from '../core';\n\nexport class Recognizer<GK extends GestureKey | undefined = undefined> {\n private _gestureKey?: GK;\n\n private _ctrl: Controller;\n\n private _target: EventTarget;\n\n constructor(\n target: EventTarget,\n handlers: InternalHandlers,\n config: GK extends keyof UserGestureConfig ? UserGestureConfig[GK] : UserGestureConfig,\n gestureKey?: GK,\n nativeHandlers?: NativeHandlers,\n ) {\n this._target = target;\n this._gestureKey = gestureKey;\n this._ctrl = new Controller(handlers);\n this._ctrl.applyHandlers(handlers, nativeHandlers);\n this._ctrl.applyConfig({ ...config, target }, gestureKey);\n\n this._ctrl.effect();\n }\n\n destroy() {\n this._ctrl.clean();\n }\n\n setConfig(\n config: GK extends keyof UserGestureConfig ? UserGestureConfig[GK] : UserGestureConfig,\n ) {\n this._ctrl.clean();\n this._ctrl.applyConfig({ ...config, target: this._target }, this._gestureKey);\n this._ctrl.effect();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Action, GestureHandlers, UserGestureConfig } from '../core/types';\nimport { registerAction } from '../core/actions';\nimport { parseMergedHandlers } from '../core';\nimport { Recognizer } from './Recognizer';\n\nexport function createGesture(actions: Action[]) {\n actions.forEach(registerAction);\n\n return function (target: EventTarget, _handlers: GestureHandlers, _config?: UserGestureConfig) {\n const { handlers, nativeHandlers, config } = parseMergedHandlers(_handlers, _config || {});\n return new Recognizer(target, handlers, config, undefined, nativeHandlers);\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n AnyHandlerEventTypes,\n EventTypes,\n GestureHandlers,\n UserGestureConfig,\n} from '../core/types';\nimport {\n dragAction,\n pinchAction,\n scrollAction,\n wheelAction,\n moveAction,\n hoverAction,\n} from '../core/actions';\nimport { Recognizer } from './Recognizer';\nimport { createGesture } from './createGesture';\n\ninterface GestureConstructor {\n new <HandlerTypes extends AnyHandlerEventTypes = EventTypes>(\n target: EventTarget,\n handlers: GestureHandlers<HandlerTypes>,\n config?: UserGestureConfig,\n ): Gesture;\n}\n\nexport interface Gesture extends Recognizer {}\n\nexport const Gesture: GestureConstructor = function <\n HandlerTypes extends AnyHandlerEventTypes = EventTypes,\n>(target: EventTarget, handlers: GestureHandlers<HandlerTypes>, config?: UserGestureConfig) {\n const gestureFunction = createGesture([\n dragAction,\n pinchAction,\n scrollAction,\n wheelAction,\n moveAction,\n hoverAction,\n ]);\n return gestureFunction(target, handlers, config || ({} as UserGestureConfig));\n} as any;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Disposable, DisposableImpl } from '@flowgram-vue/utils';\n\nimport { type PlaygroundConfigEntity } from '../layer/config/playground-config-entity';\nimport { Gesture } from './use-gesture';\n\n/* istanbul ignore next */\nexport class PlaygroundGesture extends DisposableImpl {\n private _pinching = false;\n\n constructor(\n public readonly target: HTMLElement,\n protected readonly config: PlaygroundConfigEntity\n ) {\n super();\n this.preventDefault();\n const gesture = new Gesture(\n target,\n {\n // onDrag: ({pinching, cancel, offset: [x, y], ...rest}) => {\n // if (pinching) return cancel();\n // onChange({ ...style, x, y })\n // api.start({ x, y })\n // },\n onPinch: ({\n origin: [originX, originY],\n first,\n last,\n movement: [ms],\n offset: [newScale, a],\n }) => {\n this.handlePinch({ first, last, originX, originY, newScale });\n },\n },\n {\n // drag: { from: () => [startState.x, startState.y] },\n pinch: {\n scaleBounds: () => this.getScaleBounds(),\n from: () => [this.config.finalScale, 0],\n /**\n * 支持 command 和 ctrl\n */\n modifierKey: ['metaKey', 'ctrlKey'],\n // rubberband: true\n },\n }\n );\n this.toDispose.push(\n Disposable.create(() => {\n gesture.destroy();\n })\n );\n }\n\n handlePinch(params: {\n first: boolean;\n last: boolean;\n originX: number;\n originY: number;\n newScale: number;\n }) {\n const { first, last, originX, originY, newScale } = params;\n if (Number.isNaN(params.newScale)) {\n // 防止画布无法缩放\n return;\n }\n if (first) {\n this._pinching = true;\n }\n if (last) {\n this._pinching = false;\n }\n const oldScale = this.config.finalScale;\n const origin = this.config.getPosFromMouseEvent({ clientX: originX, clientY: originY }, false);\n // 放大后的位置\n const finalPos = {\n x: (origin.x / oldScale) * newScale,\n y: (origin.y / oldScale) * newScale,\n };\n this.config.updateConfig({\n scrollX: this.config.config.scrollX + finalPos.x - origin.x,\n scrollY: this.config.config.scrollY + finalPos.y - origin.y,\n zoom: newScale,\n });\n }\n\n getScaleBounds(): { min: number; max: number } {\n return {\n min: this.config.config.minZoom,\n max: this.config.config.maxZoom,\n };\n }\n\n protected preventDefault(): void {\n // 阻止默认手势\n const handler = (e: MouseEvent) => e.preventDefault();\n // @ts-ignore\n document.addEventListener('gesturestart', handler);\n // @ts-ignore\n document.addEventListener('gesturechange', handler);\n this.toDispose.push(\n Disposable.create(() => {\n // @ts-ignore\n document.removeEventListener('gesturestart', handler);\n // @ts-ignore\n document.removeEventListener('gesturechange', handler);\n })\n );\n }\n\n get pinching(): boolean {\n return this._pinching;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, interfaces, optional } from 'inversify';\nimport 'reflect-metadata';\n\nexport const injectByProvider = (provider: interfaces.ServiceIdentifier) =>\n function (target: any, propertyKey: string) {\n const providerPropertyKey = `${propertyKey}Provider`;\n\n inject(provider)(target, providerPropertyKey);\n optional()(target, providerPropertyKey);\n\n // decorate 会依赖 reflect-metadata,因此解除其依赖\n // decorate(inject(provider), target, providerPropertyKey);\n // decorate(optional(), target, providerPropertyKey);\n\n return {\n get() {\n return this[providerPropertyKey]?.();\n },\n configurable: true,\n enumerable: true,\n } as any;\n };\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, interfaces } from 'inversify';\n\nexport const LazyInjectContext = Symbol('LazyInjectContext');\nexport const IS_LAZY_INJECT_CONTEXT_INJECTED = Symbol('IS_LAZY_INJECT_CONTEXT_INJECTED');\n\nexport const lazyInject = (serviceIdentifier: interfaces.ServiceIdentifier) =>\n function (target: any, propertyKey: string) {\n if (!serviceIdentifier) {\n throw new Error(\n `ServiceIdentifier ${serviceIdentifier} in @lazyInject is Empty, it might be caused by file circular dependency, please check it.`,\n );\n }\n\n // 只依赖注入一次\n if (!Reflect.hasMetadata(IS_LAZY_INJECT_CONTEXT_INJECTED, target)) {\n inject(LazyInjectContext)(target, LazyInjectContext);\n Reflect.defineMetadata(IS_LAZY_INJECT_CONTEXT_INJECTED, true, target);\n }\n\n const descriptor = {\n get() {\n const ctx = this[LazyInjectContext];\n return ctx.get(serviceIdentifier);\n },\n set() {},\n configurable: true,\n enumerable: true,\n } as any;\n\n // Object.defineProperty(target, propertyKey, descriptor);\n\n return descriptor;\n };\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { interfaces } from 'inversify';\n\nimport { injectByProvider } from '../core/utils';\n\n/**\n * 会被注入到 layer 层,可以在使用的时候替换它\n */\nexport const PlaygroundContext = Symbol('PlaygroundContext');\n\nexport type PlaygroundContext = any;\n\nexport const PlaygroundContextProvider = Symbol('PlaygroundContextProvider');\nexport type PlaygroundContextProvider = () => any;\nexport const injectPlaygroundContext = () => injectByProvider(PlaygroundContextProvider);\nexport const bindPlaygroundContextProvider = (bind: interfaces.Bind) => {\n bind(PlaygroundContextProvider).toDynamicValue(ctx => () => {\n if (ctx.container.isBound(PlaygroundContext)) {\n return ctx.container.get(PlaygroundContext);\n }\n return undefined;\n });\n};\n\nexport const PlaygroundContainerFactory = Symbol('PlaygroundContainerFactory');\n\nexport interface PlaygroundContainerFactory {\n createChild: interfaces.Container['createChild'];\n get: interfaces.Container['get'];\n getAll: interfaces.Container['getAll'];\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type EntityManager } from './entity-manager';\n\nexport const EntityManagerContribution = Symbol('EntityManagerContribution');\n\nexport interface EntityManagerContribution {\n registerEntityManager(entityManager: EntityManager): void;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type Disposable } from '@flowgram-vue/utils';\n\nimport type { EntityDataRegistry } from './entity-data';\nimport { EntityData } from './entity-data';\nimport { Entity, type EntityOpts } from './entity';\n\nexport interface ConfigEntityProps {}\n\n// let version = 0\n\nexport function createConfigDataRegistry<P>(entity: ConfigEntity<any>): EntityDataRegistry {\n class ConfigData extends EntityData<P> {\n getDefaultData(): P {\n return entity.getDefaultConfig();\n }\n\n checkChanged(newProps: Partial<P>): boolean {\n return entity.checkChanged(this.data, newProps);\n }\n\n toJSON(): object {\n return super.toJSON();\n }\n }\n\n Object.defineProperty(ConfigData, 'type', {\n value: `_${entity.type}DataMixin`,\n // value: `_${entity.type}DataMixin_${version++}`,\n });\n\n return ConfigData as any;\n}\n\n/**\n * 用于专门的数据配置,且是单例\n */\nexport class ConfigEntity<\n P extends ConfigEntityProps = ConfigEntityProps,\n O extends EntityOpts = EntityOpts,\n> extends Entity<O> {\n static type = 'ConfigEntity';\n\n protected ConfigDataRegistry: EntityDataRegistry;\n\n constructor(opts: O) {\n super(opts);\n this.isInitialized = true;\n this.ConfigDataRegistry = createConfigDataRegistry<P>(this);\n this.addData(this.ConfigDataRegistry);\n this.isInitialized = false;\n }\n\n getDefaultConfig(): P {\n return {} as P;\n }\n\n /**\n * 判断 config 数据是否变化\n */\n checkChanged(oldData: P, newData: Partial<P>): boolean {\n return Entity.checkDataChanged(oldData, newData);\n }\n\n get config(): P {\n return this.getData(this.ConfigDataRegistry)!.data as P;\n }\n\n updateConfig(props: Partial<P>): void {\n this.updateData(this.ConfigDataRegistry, props);\n }\n\n onConfigChanged(fn: (data: P) => void): Disposable {\n return this.getData<EntityData>(this.ConfigDataRegistry)!.onDataChange(d => fn(d.data as P));\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable, interfaces, multiInject, optional, postConstruct } from 'inversify';\nimport { Disposable, DisposableCollection, Emitter } from '@flowgram-vue/utils';\n\nimport { PlaygroundSchedule } from './playground-schedule';\nimport {\n injectPlaygroundContext,\n PlaygroundContainerFactory,\n PlaygroundContext,\n} from './playground-context';\nimport { EntityManagerContribution } from './entity-manager-contribution';\nimport { ConfigEntity } from './config-entity';\n// import { AbleManager } from './able-manager';\nimport type {\n Entity,\n EntityData,\n EntityDataInjector,\n EntityDataRegistry,\n EntityJSON,\n EntityOpts,\n EntityRegistry,\n} from '.';\n\n/**\n * 让 entity 可以注入到类中\n *\n * @example\n * ```\n * class SomeClass {\n * @inject(PlaygroundConfigEntity) playgroundConfig: PlaygroundConfigEntity\n * }\n * ```\n * @param bind\n * @param entityRegistry\n */\nexport function bindConfigEntity(bind: interfaces.Bind, entityRegistry: EntityRegistry): void {\n bind(entityRegistry)\n .toDynamicValue(\n ctx =>\n ctx.container.get<EntityManager>(EntityManager)!.createEntity(entityRegistry)! as never,\n )\n .inSingletonScope();\n}\n\n/**\n * TODO registry 改成 decorator\n * Entity 管理器,全局唯一\n */\n@injectable()\nexport class EntityManager implements Disposable {\n readonly toDispose = new DisposableCollection();\n\n protected onEntityChangeEmitter = new Emitter<string>();\n\n protected onEntityLifeCycleEmitter = new Emitter<{\n type: 'add' | 'update' | 'delete';\n entity: Entity;\n }>();\n\n protected onEntityDataChangeEmitter = new Emitter<{\n entityType: string;\n entityDataType: string;\n }>();\n\n /**\n * Entity 的类缓存,便于在 fromJSON 时候查询对应的类\n */\n protected registryMap: Map<string, EntityRegistry> = new Map();\n\n /**\n * Entity 数据类缓存,便于 fromJSON 使用\n */\n protected dataRegistryMap: Map<string, EntityDataRegistry> = new Map();\n\n /**\n * Entity 数据类依赖注入器,可用于在EntityData构造器中注入第三方模块\n */\n protected dataInjectorMap: Map<string, EntityDataInjector> = new Map();\n\n /**\n * Entity 的所有实例缓存\n */\n protected entityInstanceMap: Map<string, Entity> = new Map(); // By entity id\n\n /**\n * entity 全局版本更新\n * @protected\n */\n protected entityVersionMap: Map<string, number> = new Map();\n\n /**\n * data 全局版本更新\n * @protected\n */\n protected entityDataVersionMap: Map<string, number> = new Map();\n\n /**\n * Entity 的实例按类型缓存,便于查询优化\n */\n protected entityInstanceMapByType: Map<string, Entity[]> = new Map(); // By entity type\n\n /**\n * 所有配置实体的缓存\n */\n protected configEntities: Map<string, ConfigEntity> = new Map();\n\n /**\n * 当对应的实体类型变化后触发\n */\n readonly onEntityChange = this.onEntityChangeEmitter.event;\n\n /**\n * entity data 数据变化\n */\n readonly onEntityDataChange = this.onEntityDataChangeEmitter.event;\n\n /**\n * Entity 生命周期变化\n */\n readonly onEntityLifeCycleChange = this.onEntityLifeCycleEmitter.event;\n\n @multiInject(EntityManagerContribution)\n @optional()\n contributions: EntityManagerContribution[];\n\n @injectPlaygroundContext() context: PlaygroundContext;\n\n @inject(PlaygroundContainerFactory) @optional() protected containerFactory:\n | PlaygroundContainerFactory\n | undefined;\n\n /**\n * 暂停触发实体类型变化\n */\n changeEntityLocked = false;\n\n constructor() {\n this.toDispose.pushAll([this.onEntityChangeEmitter, this.schedule]);\n }\n\n @postConstruct()\n init() {\n this.contributions.forEach(contrib => contrib.registerEntityManager?.(this));\n }\n\n /**\n * 创建实体\n */\n createEntity<T extends Entity>(\n Registry: EntityRegistry,\n opts?: Omit<T['__opts_type__'], 'entityManager'>,\n ): T {\n if (!Registry.type) {\n throw new Error(`[EntityManager] createEntity need a type: ${Registry}`);\n }\n // this.registerEntity(Registry);\n // ConfigEntity 默认为单例\n if (this.configEntities.has(Registry.type)) {\n return this.configEntities.get(Registry.type) as any;\n }\n const entityOpts: EntityOpts = {\n entityManager: this,\n savedInManager: true,\n ...opts,\n };\n const entity = new Registry(entityOpts) as T;\n if (entityOpts.savedInManager) {\n this.saveEntity(entity);\n }\n return entity;\n }\n\n isConfigEntity(type: string): boolean {\n return this.configEntities.has(type);\n }\n\n /**\n * 批量删除实体\n */\n removeEntities(Registry: EntityRegistry): void {\n for (const e of this.getEntities(Registry).values()) {\n e.dispose();\n }\n }\n\n removeEntityById(id: string): boolean {\n const entity = this.getEntityById(id);\n if (entity) {\n entity.dispose();\n return true;\n }\n return false;\n }\n\n /**\n * 触发实体 reset\n * @param registry\n */\n resetEntities(registry: EntityRegistry): void {\n const entities = this.getEntities(registry);\n entities.forEach(entity => {\n entity.reset();\n });\n }\n\n resetEntity(registry: EntityRegistry, autoCreate?: boolean): void {\n const entity = this.getEntity(registry, autoCreate);\n entity?.reset();\n }\n\n updateConfigEntity<E extends ConfigEntity>(\n registry: EntityRegistry,\n config: Partial<E['config']>,\n ): void {\n const entity = this.configEntities.get(registry.type);\n if (entity) {\n entity.updateConfig(config);\n }\n }\n\n /**\n * @param type\n */\n getRegistryByType(type: string): EntityRegistry | undefined {\n return this.registryMap.get(type);\n }\n\n registerEntity(Registry: EntityRegistry): void {\n if (!Registry.type) throw new Error(`Registry entity need a type: ${Registry.name}`);\n const oldRegistry = this.registryMap.get(Registry.type);\n if (oldRegistry) {\n if (oldRegistry !== Registry) {\n throw new Error(`Entity registry ${Registry.type} need a new type`);\n }\n return;\n }\n this.registryMap.set(Registry.type, Registry);\n }\n\n registerEntityData(Registry: EntityDataRegistry, injector?: EntityDataInjector): void {\n if (!Registry.type) throw new Error(`Registry entity data need a type: ${Registry.name}`);\n const oldRegistry = this.dataRegistryMap.get(Registry.type);\n if (!oldRegistry) {\n this.dataRegistryMap.set(Registry.type, Registry);\n // if (oldRegistry !== Registry) {\n // throw new Error(`Entity data registry ${Registry.type} need a new type`)\n // }\n // return\n }\n\n const oldInjector = this.dataInjectorMap.get(Registry.type);\n if (!oldInjector && injector) {\n this.dataInjectorMap.set(Registry.type, injector);\n }\n }\n\n getDataRegistryByType(type: string): EntityDataRegistry | undefined {\n return this.dataRegistryMap.get(type);\n }\n\n getEntityById<T extends Entity>(id: string): T | undefined {\n return this.entityInstanceMap.get(id) as T;\n }\n\n /**\n * @param autoCreate 是否要自动创建,默认 false\n */\n getEntity<T extends Entity>(registry: EntityRegistry, autoCreate?: boolean): T | undefined {\n const entity = this.getEntities<T>(registry)[0];\n if (!entity && autoCreate) {\n return this.createEntity<T>(registry);\n }\n return entity;\n }\n\n getEntities<T extends Entity>(registry: EntityRegistry): T[] {\n // 获取当前 entities 的快照\n return (this.entityInstanceMapByType.get(registry.type) as T[]) || [];\n }\n\n // getEntitiesByAble<T extends Entity>(registry: AbleRegistry): T[] {\n // return this.ableManager.getEntitiesByAble<T>(registry);\n // }\n //\n // getEntitiesByAbles<T extends Entity>(...registries: AbleRegistry[]): T[] {\n // return this.ableManager.getEntitiesByAbles<T>(...registries);\n // }\n //\n // getEntityByAble<T extends Entity>(registry: AbleRegistry): T | undefined {\n // return this.ableManager.getEntityByAble<T>(registry);\n // }\n\n getEntityDatas<T extends EntityData>(\n entityRegistry: EntityRegistry,\n dataRegistry: EntityDataRegistry<T>,\n ): T[] {\n return this.getEntities<any>(entityRegistry)\n .map((e: Entity) => e.getData<T>(dataRegistry))\n .filter(d => !!d) as T[];\n }\n\n hasEntity(registry: EntityRegistry): boolean {\n return !!this.getEntity(registry);\n }\n\n /**\n * 只存储 config 数据,忽略动态数据\n */\n storeState({ configOnly = true }: { configOnly?: boolean } = {}): EntityJSON[] {\n const data: EntityJSON[] = [];\n for (const e of this.entityInstanceMap.values()) {\n if ((!configOnly || e instanceof ConfigEntity) && e.toJSON) {\n if (e.toJSON) {\n const d = e.toJSON();\n if (d) {\n data.push(d);\n }\n }\n }\n }\n return data;\n }\n\n restoreState(data: EntityJSON[]): void {\n if (!data || !Array.isArray(data)) return;\n data.forEach((s: EntityJSON) => {\n if (!s || !s.type || !s.id) return;\n const register = this.getRegistryByType(s.type);\n // 如果没有注册,则忽略掉\n if (!register) {\n console.warn(`Playground entity registry lost: ${s.type}`);\n return;\n }\n const entity = this.createEntity(register, {\n id: s.id,\n });\n if (entity.fromJSON) {\n entity.fromJSON(s);\n }\n });\n }\n\n protected saveEntity(entity: Entity): void {\n const { id } = entity;\n // 无法重复创建\n if (id && this.entityInstanceMap.has(id)) {\n console.error(`Entity ${entity.type} ${id} is created before`);\n return;\n }\n\n this.entityInstanceMap.set(entity.id, entity);\n let entities = this.entityInstanceMapByType.get(entity.type);\n if (!entities) {\n entities = [];\n this.entityInstanceMapByType.set(entity.type, entities);\n }\n if (entity instanceof ConfigEntity) {\n this.configEntities.set(entity.type, entity);\n }\n entities.push(entity);\n entity.onEntityChange(entity => {\n this.fireEntityChanged(entity);\n this.fireEntityLifeCycleChanged({ type: 'update', entity });\n });\n entity.onDataChange(e => {\n this.fireEntityDataChanged(entity.type, e.data.type);\n });\n entity.toDispose.push(\n Disposable.create(() => {\n this.removeEntity(entity);\n this.fireEntityLifeCycleChanged({ type: 'delete', entity });\n }),\n );\n entity\n .getDefaultDataRegistries()\n .forEach(registry => this.fireEntityDataChanged(entity.type, registry.type));\n this.fireEntityChanged(entity);\n this.fireEntityLifeCycleChanged({ type: 'add', entity });\n }\n\n protected removeEntity(entity: Entity): void {\n if (this.entityInstanceMap.has(entity.id) && this.entityInstanceMapByType.has(entity.type)) {\n const entities = this.entityInstanceMapByType.get(entity.type)!;\n const index = entities.indexOf(entity);\n if (index !== -1) {\n this.entityInstanceMapByType.set(\n entity.type,\n entities.filter(e => e !== entity),\n );\n this.entityInstanceMap.delete(entity.id);\n\n if (this.configEntities.has(entity.type)) {\n this.configEntities.delete(entity.type);\n }\n\n this.fireEntityChanged(entity);\n }\n }\n }\n\n /**\n * 重制所有 entity 为初始化状态\n */\n reset(): void {\n for (const entity of this.entityInstanceMap.values()) {\n entity.reset();\n }\n }\n\n private schedule = new PlaygroundSchedule();\n\n fireEntityChanged = (entity: Entity | string) => {\n const entityType = typeof entity === 'string' ? entity : entity.type;\n let version = this.entityVersionMap.get(entityType) || 0;\n /* istanbul ignore next */\n if (version === Number.MAX_SAFE_INTEGER) {\n version = 0;\n }\n this.entityVersionMap.set(entityType, version + 1);\n if (this.changeEntityLocked) return;\n this.schedule.push(entityType, () => {\n this.onEntityChangeEmitter.fire(entityType);\n });\n };\n\n fireEntityDataChanged = (entityType: string, entityDataType: string) => {\n let version = this.entityDataVersionMap.get(entityDataType) || 0;\n /* istanbul ignore next */\n if (version === Number.MAX_SAFE_INTEGER) {\n version = 0;\n }\n this.entityDataVersionMap.set(entityDataType, version + 1);\n this.schedule.push(`${entityType}/${entityDataType}`, () => {\n this.onEntityDataChangeEmitter.fire({ entityType, entityDataType });\n });\n };\n\n fireEntityLifeCycleChanged = ({\n type,\n entity,\n }: {\n type: 'add' | 'update' | 'delete';\n entity: Entity;\n }) => {\n this.schedule.push(`${type}/${entity.id}`, () => {\n this.onEntityLifeCycleEmitter.fire({ type, entity });\n });\n };\n\n getEntityVersion(registry: EntityRegistry | string): number {\n return this.entityVersionMap.get(typeof registry === 'string' ? registry : registry.type) || 0;\n }\n\n getEntityDataVersion(registry: EntityDataRegistry | string): number {\n return (\n this.entityDataVersionMap.get(typeof registry === 'string' ? registry : registry.type) || 0\n );\n }\n\n dispose(): void {\n this.toDispose.dispose();\n }\n\n getDataInjector(registry: EntityDataRegistry | string) {\n return this.dataInjectorMap.get(typeof registry === 'string' ? registry : registry.type);\n }\n\n getService<T>(identifier: interfaces.ServiceIdentifier<T>): T {\n return this.containerFactory?.get<T>(identifier) as T;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// import type { AbleRegistry } from './able';\nimport type { EntityDataRegistry, EntityRegistry } from '.';\n\ndeclare namespace Reflect {\n export function getMetadata(key: string | symbol, target: any): any;\n export function defineMetadata(key: string | symbol, value: any, target: any): any;\n}\n\n// export const ABLES_DECO_KEY = Symbol('AblesDecorator');\nexport const ENTITIES_DECO_KEY = Symbol('EntitiesDecorator');\n// export const PAYLOAD_DECO_KEY = Symbol('PayloadDecorator');\n// export const HANDLE_DECO_KEY = Symbol('HandleDecorator');\nexport const ENTITIES_BY_DATA_DECO_KEY = Symbol('EntitiesByDataDecorator');\n\nconst PROPERTEIS_INJECTED = Symbol('PropertiesInjected');\n\nexport interface RegistryValueGetter<T> {\n (target: any, method: string | symbol): T;\n}\n\nexport interface RegistryInit {\n (target: any, method: string | symbol): void;\n}\n\nexport function getRegistryMetadata(target: any, key: symbol): any[] {\n return Reflect.getMetadata(key, target.prototype) || [];\n}\n\nfunction getRegistryInjectedProperties(target: any): string[] {\n return Reflect.getMetadata(PROPERTEIS_INJECTED, target) || [];\n}\n\nfunction definePropertiesMetadata(target: any, property: string): void {\n const properties = getRegistryInjectedProperties(target);\n properties.push(property);\n Reflect.defineMetadata(PROPERTEIS_INJECTED, properties, target);\n}\n\n/**\n * 在 rspack 场景编译ts文件时候\n * decorator 注入的 property 会被当成 this 的属性, 导致 Reflect.metadata 失效\n */\nexport function removeInjectedProperties(instance: any): void {\n if (typeof instance === 'object') {\n const propertiesInjected = getRegistryInjectedProperties(instance.constructor.prototype);\n propertiesInjected.forEach(propertyKey => {\n // eslint-disable-next-line no-prototype-builtins\n if (instance.hasOwnProperty(propertyKey) && instance[propertyKey] === undefined) {\n delete instance[propertyKey];\n }\n });\n }\n}\n\nexport function createRegistryDecorator(\n key: symbol,\n data: any,\n getValue?: RegistryValueGetter<any>,\n init?: RegistryInit,\n): any {\n return (target: any, property: string): any => {\n let registries = Reflect.getMetadata(key, target);\n if (!registries) {\n registries = [];\n Reflect.defineMetadata(key, registries, target);\n }\n if (!Array.isArray(data)) {\n data = [data];\n }\n data.forEach((registry: any) => {\n if (!registries.includes(registry)) {\n registries.push(registry);\n }\n });\n if (init) init(target, property);\n if (property && getValue) {\n definePropertiesMetadata(target, property);\n return {\n enumerable: false,\n configurable: false,\n get(): any {\n return getValue(this, property);\n },\n };\n }\n };\n}\n\n// export function getAbleMetadata(layer: any): AbleRegistry[] {\n// return getRegistryMetadata(layer, ABLES_DECO_KEY);\n// }\n\nexport function getEntityMetadata(layer: any): EntityRegistry[] {\n return getRegistryMetadata(layer, ENTITIES_DECO_KEY);\n}\nexport function getEntityDatasMetadata(\n layer: any,\n): { entity: EntityRegistry; data: EntityDataRegistry }[] {\n return getRegistryMetadata(layer, ENTITIES_BY_DATA_DECO_KEY);\n}\n\n// export function getPayloadMetadata(able: AbleRegistry): string | symbol {\n// return getRegistryMetadata(able, PAYLOAD_DECO_KEY)[0];\n// }\n\n// export function getHandleParams(able: AbleRegistry): EntityDataRegistry[] {\n// return getRegistryMetadata(able, HANDLE_DECO_KEY);\n// }\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n // ABLES_DECO_KEY,\n ENTITIES_DECO_KEY,\n // HANDLE_DECO_KEY,\n // PAYLOAD_DECO_KEY,\n createRegistryDecorator,\n ENTITIES_BY_DATA_DECO_KEY,\n type RegistryValueGetter,\n} from './playground-decorator-helper';\n// import type { AbleRegistry } from './able';\nimport type { Entity, EntityDataRegistry, EntityRegistry } from '.';\n// import type { Layer } from './layer';\n\n// export function observeAble(registry: AbleRegistry): any {\n// const getValue: RegistryValueGetter<Entity[]> = (target: any) =>\n// target.observeManager.getEntitiesByAble(registry);\n// return createRegistryDecorator(ABLES_DECO_KEY, [registry], getValue);\n// }\n\n// /**\n// * @param andAbles - 多个 able,条件且\n// * @param orAbles - 多个 able,条件或\n// */\n// export function observeAbles(andAbles: AbleRegistry[], orAbles: AbleRegistry[] = []): any {\n// const getValue: RegistryValueGetter<Entity[]> = (target: any) =>\n// target.observeManager.getEntitiesByAbles(andAbles, orAbles);\n// return createRegistryDecorator(ABLES_DECO_KEY, andAbles.concat(orAbles), getValue);\n// }\nexport function observeEntity(registry: EntityRegistry): any {\n const getValue: RegistryValueGetter<Entity> = (target: any) =>\n target.observeManager.get(registry)!;\n return createRegistryDecorator(ENTITIES_DECO_KEY, registry, getValue);\n}\n\n/**\n * 监听 entity 变化\n * @param registry\n */\nexport function observeEntities(registry: EntityRegistry): any {\n const getValue: RegistryValueGetter<Entity[]> = (target: any) =>\n target.observeManager.getEntities(registry);\n return createRegistryDecorator(ENTITIES_DECO_KEY, registry, getValue);\n}\n\n// export function payload(payloadKey: string | symbol): any {\n// const check = (target: any, method: string) => {\n// if (method !== 'payload')\n// throw new Error(`@payload() should be used by \"payload\" method but get \"${method}\".`);\n// };\n// // @ts-ignore\n// return createRegistryDecorator(PAYLOAD_DECO_KEY, payloadKey, undefined, check);\n// }\n\n// export function params(...registries: EntityDataRegistry[]): any {\n// const check = (target: any, method: string) => {\n// if (method !== 'handle')\n// throw new Error(`@params() should be used by \"handle\" method but get \"${method}\".`);\n// };\n// // @ts-ignore\n// return createRegistryDecorator(HANDLE_DECO_KEY, registries, undefined, check);\n// }\n\n/**\n * 监听 entity 对应的 data 数据变化\n *\n * @param entityRegistry\n * @param dataRegistry\n */\nexport function observeEntityDatas(\n entityRegistry: EntityRegistry,\n dataRegistry: EntityDataRegistry,\n): any {\n const getValue: RegistryValueGetter<Entity[]> = (target: any) =>\n target.observeManager.getEntityDatas(entityRegistry, dataRegistry);\n return createRegistryDecorator(\n ENTITIES_BY_DATA_DECO_KEY,\n { entity: entityRegistry, data: dataRegistry },\n getValue,\n );\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * 保护区域不被画布劫持滚动事件\n */\nexport const ProtectWheelArea = Symbol('ProtectWheelArea');\n\nexport type ProtectWheelArea = (dom: Element) => boolean;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type Layer, type LayerRegistry } from '../layer';\n\nexport type PipeSupportEvent = MouseEvent | DragEvent | KeyboardEvent | UIEvent | TouchEvent | any;\nexport type PipeEventName = string;\nexport interface PipelineDimension {\n width: number;\n height: number;\n}\n\nexport type PipelineEventHandler = (event: PipeSupportEvent) => boolean | undefined;\n\nexport interface PipelineEventRegsiter {\n handle: PipelineEventHandler;\n priority: number;\n}\n\nexport enum PipelineLayerPriority {\n BASE_LAYER = -2, // 优先级最低\n TOOL_LAYER = -1, // 工具层\n NORMAL_LAYER, // 使用层\n}\nexport const PipelineLayerFactory = Symbol('PipelineLayerFactory');\nexport type PipelineLayerFactory = (layerRegistry: LayerRegistry, layerOptions?: any) => Layer;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport { Compare, type Disposable, Emitter, type Event } from '@flowgram-vue/utils';\n\nimport { type Entity } from '../common';\n\n/**\n * 画布全局的选择器,可以放任何东西\n */\n@injectable()\nexport class SelectionService implements Disposable {\n protected readonly onSelectionChangedEmitter = new Emitter<Entity[]>();\n\n readonly onSelectionChanged: Event<any> = this.onSelectionChangedEmitter.event;\n\n private currentSelection: Entity[] = [];\n\n private disposers: Disposable[] = [];\n\n get selection(): Entity[] {\n return this.currentSelection;\n }\n\n isEmpty(): boolean {\n return this.currentSelection.length === 0;\n }\n\n set selection(selection: Entity<any>[]) {\n if (!Compare.isArrayShallowChanged(this.currentSelection, selection)) {\n return;\n }\n this.disposers.forEach((disposer) => disposer.dispose());\n this.changeSelection(selection);\n this.disposers = this.currentSelection.map((selection) =>\n selection.onDispose(() => {\n const newSelection = this.currentSelection.filter((n) => n !== selection);\n this.changeSelection(newSelection);\n })\n );\n }\n\n private changeSelection(selection: Entity<any>[]) {\n this.currentSelection = selection;\n this.onSelectionChangedEmitter.fire(this.currentSelection);\n }\n\n dispose() {\n this.onSelectionChangedEmitter.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable, postConstruct } from 'inversify';\n\nexport const StorageService = Symbol('StorageService');\n\n/**\n * 存储数据到缓存\n */\nexport interface StorageService {\n /**\n * Stores the given data under the given key.\n */\n setData<T>(key: string, data: T): void;\n\n /**\n * Returns the data stored for the given key or the provided default value if nothing is stored for the given key.\n */\n getData<T>(key: string, defaultValue: T): T;\n\n getData<T>(key: string): T | undefined;\n}\n\ninterface LocalStorage {\n [key: string]: any;\n}\n\n@injectable()\nexport class LocalStorageService implements StorageService {\n private storage: LocalStorage;\n\n private _prefix = '__gedit:';\n\n setData<T>(key: string, data: T): void {\n this.storage[this.prefix(key)] = JSON.stringify(data);\n }\n\n getData<T>(key: string, defaultValue?: T): T {\n const result = this.storage[this.prefix(key)];\n if (result === undefined) {\n return defaultValue as any;\n }\n return JSON.parse(result);\n }\n\n prefix(key: string) {\n return `${this._prefix}${key}`;\n }\n\n setPrefix(prefix: string) {\n this._prefix = prefix;\n }\n\n @postConstruct()\n protected init(): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n this.storage = window.localStorage;\n } else {\n this.storage = {};\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport { Emitter, type Event, type MaybePromise } from '@flowgram-vue/utils';\n\nexport const ClipboardService = Symbol('ClipboardService');\n\nexport interface ClipboardService {\n onClipboardChanged: Event<string>;\n readText(): MaybePromise<string>;\n\n writeText(value: string): MaybePromise<void>;\n}\n\n/**\n * 剪贴板服务,一般用于管理临时的复制黏贴数据\n * TODO: 后续可以支持调用浏览器\n */\n@injectable()\nexport class DefaultClipboardService implements ClipboardService {\n private _currentData: string;\n\n protected readonly onClipboardChangedEmitter = new Emitter<string>();\n\n readonly onClipboardChanged: Event<string> = this.onClipboardChangedEmitter.event;\n\n readText(): string {\n return this._currentData;\n }\n\n writeText(value: string): void {\n if (this._currentData !== value) {\n this._currentData = value;\n this.onClipboardChangedEmitter.fire(value);\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\n\n/**\n * 圈选右键菜单相关 service\n */\n@injectable()\nexport class ContextMenuService {\n /**\n * 右键面板是否展示,展示的时候为 true\n */\n private isRightPanelVisible: boolean;\n\n get rightPanelVisible(): boolean {\n return this.isRightPanelVisible;\n }\n\n set rightPanelVisible(visible: boolean) {\n this.isRightPanelVisible = visible;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport { type Disposable, Emitter, type Event } from '@flowgram-vue/utils';\n\nexport interface LoggerProps {\n event: LoggerEvent;\n props?: Record<string, any>;\n}\n\nexport enum LoggerEvent {\n CANVAS_TTI, // Time To Interactive,画布可交互时间\n CANVAS_FPS, // Frame Per Second,画布渲染帧率\n}\n\n/**\n * 画布全局的选择器,可以放任何东西\n */\n@injectable()\nexport class LoggerService implements Disposable {\n protected readonly onLoggerEmitter = new Emitter<LoggerProps>();\n\n // plugin 内注册:loggerService.onLogger(() => {})\n readonly onLogger: Event<any> = this.onLoggerEmitter.event;\n\n onAllLayersRendered() {\n this.onLoggerEmitter.fire({\n event: LoggerEvent.CANVAS_TTI,\n });\n }\n\n onFlushRequest(renderFrameInterval: number) {\n if (renderFrameInterval <= 0) {\n return;\n }\n const fps = 1000 / renderFrameInterval;\n this.onLoggerEmitter.fire({\n event: LoggerEvent.CANVAS_FPS,\n props: { rfi: renderFrameInterval, fps },\n });\n }\n\n dispose() {\n this.onLoggerEmitter.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { NOOP } from '@flowgram-vue/utils';\nimport {\n createApp,\n defineComponent,\n h,\n isVNode,\n nextTick,\n onMounted,\n shallowRef,\n type App,\n type Component,\n type VNode,\n} from 'vue';\n\nimport type { Layer } from '../layer';\nimport { type PipelineRenderer } from './pipeline-renderer';\n\nexport type LayerRenderResult = Component | VNode | null | void;\n\nexport interface LayerVueAutorun {\n autorun: () => void;\n dispose: () => void;\n}\n\nexport function createLayerVueAutorun(\n layer: Layer,\n originRenderer: () => LayerRenderResult,\n renderedCb: (layer: Layer) => void,\n pipelineRenderer: PipelineRenderer\n): LayerVueAutorun {\n let app: App | null = null;\n let update = NOOP;\n\n const Root = defineComponent({\n name: `PlaygroundVueLayer_${layer.constructor.name}`,\n setup() {\n const version = shallowRef(0);\n update = () => {\n version.value += 1;\n };\n onMounted(() => {\n // 等 ready() 栈(含 contribution onReady)结束后再上报\n nextTick(() => renderedCb(layer));\n });\n return () => {\n void version.value;\n if (!pipelineRenderer.isReady) {\n return null;\n }\n try {\n const result = originRenderer();\n if (result == null) {\n return null;\n }\n if (isVNode(result)) {\n return result;\n }\n return h(result as Component);\n } catch (e) {\n console.error(`Render Layer \"${layer.constructor.name}\" error `, e);\n return null;\n }\n };\n },\n });\n\n function ensureMounted(): void {\n if (app || !layer.node) {\n return;\n }\n app = createApp(Root);\n app.mount(layer.node);\n }\n\n return {\n autorun: () => {\n if (!app) {\n ensureMounted();\n return;\n }\n update();\n },\n dispose: () => {\n if (app) {\n app.unmount();\n app = null;\n }\n update = NOOP;\n },\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\n\nimport { type Layer } from '../layer';\nimport {\n // AbleManager,\n // type AbleRegistry,\n type Entity,\n type EntityData,\n type EntityDataRegistry,\n EntityManager,\n type EntityRegistry,\n} from '../../common';\n\ntype SelectorVersion = Map<string, number>;\n\nexport interface LayerEntitiesSelector {\n // lastAbleVersion?: SelectorVersion;\n lastEntityVersion?: SelectorVersion;\n lastDataVersion?: SelectorVersion;\n entities: EntityRegistry[];\n // ables: AbleRegistry[];\n datas: [EntityRegistry, EntityDataRegistry][]; // entity-data\n}\n\n/**\n * 选择器用来在 pipeline 绘制之前,筛选并注入 entities\n */\n@injectable()\nexport class PipelineEntitiesSelector {\n protected layerEntitiesSelectorMap: WeakMap<Layer, LayerEntitiesSelector> = new WeakMap();\n\n readonly entityLayerMap: Map<string, Set<Layer>> = new Map();\n\n readonly ableLayerMap: Map<string, Set<Layer>> = new Map();\n\n // @inject(AbleManager) ableManager: AbleManager;\n\n @inject(EntityManager) entityManager: EntityManager;\n\n /**\n * 订阅关联的 entity,会影响 autorun\n */\n subscribeEntities(layer: Layer, entities: EntityRegistry[]): void {\n const selector = this.getSelector(layer);\n entities.forEach(e => {\n if (!selector.entities.includes(e)) selector.entities.push(e);\n let layers = this.entityLayerMap.get(e.type);\n if (!layers) {\n layers = new Set();\n this.entityLayerMap.set(e.type, layers);\n }\n layers.add(layer);\n });\n }\n\n // /**\n // * 订阅关联的 able, 会影响 autorun\n // */\n // subscribeAbles(layer: Layer, ables: AbleRegistry[]): void {\n // const selector = this.getSelector(layer);\n // ables.forEach(able => {\n // if (!selector.ables.includes(able)) selector.ables.push(able);\n // let layers = this.ableLayerMap.get(able.type);\n // if (!layers) {\n // layers = new Set();\n // this.ableLayerMap.set(able.type, layers);\n // }\n // layers.add(layer);\n // });\n // }\n\n /**\n * 订阅 data 数据\n * @param layer\n * @param entity\n * @param data\n */\n subscribleEntityByData(layer: Layer, entity: EntityRegistry, data: EntityDataRegistry): void {\n const selector = this.getSelector(layer);\n // Entity 和 layer 做关联\n let layers = this.entityLayerMap.get(entity.type);\n if (!layers) {\n layers = new Set();\n this.entityLayerMap.set(entity.type, layers);\n }\n layers.add(layer);\n const item: [EntityRegistry, EntityDataRegistry] = [entity, data];\n if (!selector.datas.find(i => i[0] === entity && i[1] === data)) selector.datas.push(item);\n }\n\n protected getSelector(layer: Layer): LayerEntitiesSelector {\n let selector = this.layerEntitiesSelectorMap.get(layer);\n if (!selector) {\n selector = { entities: [], datas: [] };\n this.layerEntitiesSelectorMap.set(layer, selector);\n }\n return selector;\n }\n\n /**\n * 查询 layer 关联的实体\n */\n getLayerEntities(layer: Layer): { entities: Entity[]; changed: boolean } {\n const selector = this.layerEntitiesSelectorMap.get(layer);\n /* v8 ignore next 1 */\n if (!selector) return { entities: [], changed: false };\n const allEntities: Set<Entity> = new Set();\n const entityVersion: SelectorVersion = new Map();\n let entityChanged = false;\n selector.entities.forEach(registry => {\n const entities = this.entityManager.getEntities(registry);\n const version = this.entityManager.getEntityVersion(registry);\n entityVersion.set(registry.type, version);\n for (const item of entities) {\n allEntities.add(item);\n }\n });\n // selector.ables.forEach(registry => {\n // const entities = this.ableManager.getEntitiesByAble(registry);\n // for (const item of entities) {\n // if (!entityVersion.has(item.type)) {\n // const version = this.entityManager.getEntityVersion(item.type);\n // entityVersion.set(item.type, version);\n // }\n // allEntities.add(item);\n // }\n // });\n // To array\n const result: Entity[] = [];\n for (const item of allEntities.values()) {\n result.push(item);\n }\n /**\n * 检查版本变化\n */\n if (checkChanged(entityVersion, selector.lastEntityVersion)) {\n selector.lastEntityVersion = entityVersion;\n entityChanged = true;\n }\n return {\n entities: result,\n changed: entityChanged,\n };\n }\n\n getLayerEntityDatas(layer: Layer): { datas: EntityData[]; changed: boolean } {\n const selector = this.layerEntitiesSelectorMap.get(layer);\n /* v8 ignore next 1 */\n if (!selector) return { datas: [], changed: false };\n const allDatas: EntityData[] = [];\n const dataVersion: SelectorVersion = new Map();\n let dataChanged = false;\n selector.datas.forEach(registries => {\n const [entityRegistry, entityDataRegistry] = registries;\n const entityDatas = this.entityManager.getEntityDatas(entityRegistry, entityDataRegistry);\n const version = this.entityManager.getEntityDataVersion(entityDataRegistry);\n dataVersion.set(entityDataRegistry.type, version);\n /* v8 ignore next 3 */\n for (const item of entityDatas) {\n allDatas.push(item);\n }\n });\n if (checkChanged(dataVersion, selector.lastDataVersion)) {\n selector.lastDataVersion = dataVersion;\n dataChanged = true;\n }\n return {\n datas: allDatas,\n changed: dataChanged,\n };\n }\n\n getLayerData(layer: Layer): {\n observeEntities: Entity[];\n observeDatas: EntityData[];\n changed: boolean;\n } {\n const entitiesSelector = this.getLayerEntities(layer);\n const datasSelector = this.getLayerEntityDatas(layer);\n return {\n observeEntities: entitiesSelector.entities,\n observeDatas: datasSelector.datas,\n changed: datasSelector.changed || entitiesSelector.changed,\n };\n }\n}\n\nfunction checkChanged(v1: SelectorVersion = new Map(), v2: SelectorVersion = new Map()): boolean {\n if (v1.size !== v2.size) return true;\n for (const key of v1.keys()) {\n /* v8 ignore next 1 */\n if (v1.get(key) !== v2.get(key)) return true;\n }\n return false;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport {\n ConflatableMessage,\n type IMessageHandler,\n type Message,\n MessageLoop,\n} from '@phosphor/messaging';\nimport { Disposable, DisposableCollection, domUtils, Emitter } from '@flowgram-vue/utils';\nimport { defineComponent, type Component } from 'vue';\n\nimport { type Layer } from '../layer';\nimport { LoggerService } from '../../services';\nimport { EntityManager } from '../../common';\nimport { createLayerVueAutorun } from './pipeline-vue-utils';\nimport { PipelineEntitiesSelector } from './pipeline-entities-selector';\nimport { type PipelineEntitiesImpl } from './pipeline-entities';\n\nexport const FLUSH_LAYER_REQUEST = 'flush-layer-request';\n\nlet id = 0;\n\nexport class FlushLayerMessage extends ConflatableMessage {\n constructor(readonly layer: Layer) {\n super(`${FLUSH_LAYER_REQUEST}_layer${id++}`);\n }\n}\n\n/**\n * pipeline 渲染器\n */\n@injectable()\nexport class PipelineRenderer implements Disposable, IMessageHandler {\n public isReady = false;\n\n protected onAllLayersRenderedEmitter = new Emitter<void>();\n\n protected toDispose = new DisposableCollection();\n\n readonly layers: Layer[] = [];\n\n protected forceUpdates: Set<Layer> = new Set();\n\n readonly layerAutorunMap: Map<Layer, () => void> = new Map();\n\n readonly layerRenderedMap: Map<Layer, boolean> = new Map();\n\n readonly layerFlushMessages: Map<Layer, FlushLayerMessage> = new Map();\n\n readonly node = domUtils.createDivWithClass('gedit-playground-pipeline');\n\n /**\n * 所有 Layer 第一次渲染完成后触发\n */\n readonly onAllLayersRendered = this.onAllLayersRenderedEmitter.event;\n\n @inject(LoggerService) protected readonly loggerService: LoggerService;\n\n constructor(\n @inject(PipelineEntitiesSelector)\n protected readonly selector: PipelineEntitiesSelector,\n @inject(EntityManager) entityManager: EntityManager\n // @inject(AbleManager) ableManager: AbleManager,\n ) {\n /**\n * entity 修改触发 layer 更新\n */\n this.toDispose.push(\n entityManager.onEntityChange((entityType: string) => {\n const layers = this.selector.entityLayerMap.get(entityType);\n if (layers) layers.forEach((layer) => this.updateLayer(layer));\n })\n );\n this.toDispose.push(this.onAllLayersRenderedEmitter);\n }\n\n reportLayerRendered(layer: Layer): void {\n this.layerRenderedMap.set(layer, true);\n const allLayersRendered = Array.from(this.layerRenderedMap.values()).every((v) => v);\n if (allLayersRendered) {\n // logger 事件点位上报\n this.loggerService.onAllLayersRendered();\n this.onAllLayersRenderedEmitter.fire();\n // e2e 性能测试时会注入以下全局变量\n if ((window as any).REPORT_TTI_FOR_E2E) {\n (window as any).REPORT_TTI_FOR_E2E(\n // 由于 e2e 环境,performance 耗时即为 tti 的完整耗时。\n performance.now(),\n performance.getEntriesByType('resource')\n );\n }\n }\n }\n\n addLayer(layer: Layer): void {\n this.layers.push(layer);\n this.toDispose.push(layer);\n this.layerFlushMessages.set(layer, new FlushLayerMessage(layer));\n layer.pipelineNode = this.node;\n layer.playgroundNode = this.node.parentElement!;\n // Auto create node\n if ((layer.autorun || layer.render) && !layer.node) {\n layer.node = document.createElement('div');\n }\n // 把 layer 加到父亲节点上\n if (layer.node) {\n this.node.appendChild(layer.node);\n layer.node.classList.add('gedit-playground-layer');\n }\n if (layer.autorun) {\n const autorun = layer.autorun.bind(layer);\n this.layerAutorunMap.set(layer, autorun);\n // 重载 layer autorun\n layer.autorun = () => {\n this.updateLayer(layer, true);\n };\n } else if (layer.render) {\n this.layerRenderedMap.set(layer, false);\n const render = layer.render.bind(layer);\n const autorun = createLayerVueAutorun(\n layer,\n render,\n this.reportLayerRendered.bind(this),\n this\n );\n this.layerAutorunMap.set(layer, autorun.autorun);\n this.toDispose.push(Disposable.create(() => autorun.dispose()));\n if (process.env.NODE_ENV === 'test') {\n // 不对外暴露_render 字段\n (layer as any)._render = layer.render;\n }\n // 重载 layer.render:外部调用时走 flush,而不是直接画\n layer.render = () => {\n this.updateLayer(layer, true);\n return null;\n };\n }\n }\n\n flush(forceUpdate?: boolean): void {\n this.layers.forEach((layer) => {\n this.updateLayer(layer, forceUpdate);\n });\n }\n\n ready(): void {\n this.layers.forEach((layer) => {\n // 先加载一次数据,保证 ready 时候能运行\n this.loadLayerEntities(layer);\n if (layer.onReady) layer.onReady();\n });\n this.isReady = true;\n // 第一次先渲染一次\n this.flush(true);\n }\n\n dispose(): void {\n this.toDispose.dispose();\n this.node.remove();\n }\n\n processMessage(msg: Message): void {\n if (msg instanceof FlushLayerMessage) {\n this.onFlushRequest(msg.layer);\n }\n }\n\n protected loadLayerEntities(layer: Layer): boolean {\n const result = this.selector.getLayerData(layer);\n if (result.changed) {\n // 这里更新 layer 的 entities\n (layer.observeManager as PipelineEntitiesImpl).load(\n result.observeEntities,\n result.observeDatas\n );\n }\n return result.changed;\n }\n\n protected onFlushRequest(layer: Layer): boolean {\n // 只有 ready 之后才能执行 autorun\n if (!this.isReady || this.toDispose.disposed) return false;\n const startRenderTime = performance.now();\n const trackRenderPerformance = () => {\n const renderDuration = performance.now() - startRenderTime;\n // 小于 4ms 的渲染时间不需要记录\n if (renderDuration < 4) {\n return;\n }\n this.loggerService.onFlushRequest(renderDuration);\n };\n const autorun = this.layerAutorunMap.get(layer);\n const changed = this.loadLayerEntities(layer);\n // 只有修改或强制刷新才会刷新\n if (autorun && (changed || this.forceUpdates.has(layer))) {\n this.forceUpdates.delete(layer);\n try {\n // console.time(`layer ${layer.constructor.name}`)\n autorun();\n // console.timeEnd(`layer ${layer.constructor.name}`)\n /* v8 ignore next 3 */\n } catch (e) {\n console.error(e);\n }\n trackRenderPerformance();\n return true;\n /* v8 ignore next 2 */\n }\n trackRenderPerformance();\n return false;\n }\n\n /**\n * 1. PostMessage: 会将消息在 nextTick 执行\n * 2. ConflatableMessage: 当多个消息进来会在下一个 nextTick 做合并\n * 3. 图层相互隔离,即时一层挂了也不受影响\n */\n updateLayer(layer: Layer, forceUpdate?: boolean): void {\n if (forceUpdate) {\n this.forceUpdates.add(layer);\n }\n if (process.env.NODE_ENV === 'test') {\n this.onFlushRequest(layer);\n } else {\n MessageLoop.postMessage(this, this.layerFlushMessages.get(layer)!);\n }\n }\n\n private vueComp?: Component;\n\n /**\n * 转成 Vue 组件。Layer 已通过 createApp 挂到 layer.node,这里仅保留 API 兼容。\n */\n toVueComponent(): Component {\n if (this.vueComp) return this.vueComp;\n this.vueComp = defineComponent({\n name: 'PipelineVueLayers',\n setup() {\n return () => null;\n },\n });\n return this.vueComp;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Disposable, Emitter } from '@flowgram-vue/utils';\nimport { ConfigEntity, EntityOpts } from '../../../common';\nimport type { PlaygroundConfigEntity } from './playground-config-entity';\n\n/**\n * 编辑态\n */\nexport interface EditorState {\n id: string;\n disabled?: boolean | ((config: PlaygroundConfigEntity) => boolean);\n cursor?: string; // 光标类型\n shortcut?: string; // 快捷键\n shortcutAutoEsc?: boolean; // 点击快捷键后自动退出到默认\n // 仅在状态发生变化时,当前快捷键才会生效\n shortcutWorksOnlyOnStateChanged?: boolean;\n handle?: (config: PlaygroundConfigEntity, e?: EditorStateChangeEvent) => void; // 触发逻辑\n disableSelector?: boolean; // 切换后会把选择器隐藏了\n cancelMode:\n | 'esc' // 按住 esc 则退\n | 'once' // 触发一次后则退出\n | 'hold' // 点击会保持该状态\n onEsc?: (config: PlaygroundConfigEntity, e?: KeyboardEvent) => void;\n}\n\nexport namespace EditorState {\n export const STATE_SELECT: EditorState = {\n id: 'STATE_SELECT',\n cursor: '',\n shortcut: '',\n cancelMode: 'hold',\n };\n\n /** 鼠标友好模式状态 */\n export const STATE_MOUSE_FRIENDLY_SELECT: EditorState = {\n id: 'STATE_MOUSE_FRIENDLY_SELECT',\n cursor: 'grab', // 初始为小手状态\n shortcut: '',\n cancelMode: 'hold',\n };\n\n export const STATE_GRAB: EditorState = {\n id: 'STATE_GRAB',\n cursor: 'grab',\n shortcut: 'SPACE', // 如果是鼠标模式,这里不用按住 SPACE 就可以拖动\n shortcutAutoEsc: true,\n shortcutWorksOnlyOnStateChanged: true,\n cancelMode: 'hold',\n };\n}\nexport const EDITOR_STATE_DEFAULTS: EditorState[] = [\n EditorState.STATE_SELECT,\n EditorState.STATE_MOUSE_FRIENDLY_SELECT,\n EditorState.STATE_GRAB,\n];\n\nexport interface EditorStateChangeEvent {\n state: EditorState;\n event?: MouseEvent;\n lastState?: EditorState;\n}\n\n/**\n * 编辑状态管理\n */\nexport class EditorStateConfigEntity extends ConfigEntity {\n static type = 'EditorStateConfigEntity';\n\n private _isPressingSpaceBar: boolean = false;\n private _isPressingShift: boolean = false;\n\n protected states = EDITOR_STATE_DEFAULTS.slice();\n\n protected selected: string = EditorState.STATE_SELECT.id;\n\n protected onStateChangeEmitter = new Emitter<EditorStateChangeEvent>();\n\n readonly onStateChange = this.onStateChangeEmitter.event;\n\n constructor(opts: EntityOpts) {\n super(opts);\n this.toDispose.push(this.onStateChangeEmitter);\n }\n\n get isPressingSpaceBar(): boolean {\n return this._isPressingSpaceBar;\n }\n\n set isPressingSpaceBar(isPressing: boolean) {\n this._isPressingSpaceBar = isPressing;\n }\n\n get isPressingShift(): boolean {\n return this._isPressingShift;\n }\n\n set isPressingShift(isPressing: boolean) {\n this._isPressingShift = isPressing;\n }\n\n /**\n * 取消指定状态后触发\n * @param stateId\n * @param fn\n */\n onCancel(stateId: string, fn: () => void): Disposable {\n return this.onStateChange(e => {\n if (e.lastState && e.lastState.id === stateId) {\n fn();\n }\n });\n }\n\n getCurrentState(): EditorState | undefined {\n return this.states.find(s => s.id === this.selected);\n }\n\n is(stateId: string): boolean {\n return this.selected === stateId;\n }\n\n changeState(stateId: string, event?: MouseEvent): void {\n const state = this.states.find(s => s.id === stateId);\n if (!state) throw new Error(`Unknown editor state ${stateId}`);\n if (this.selected !== stateId) {\n const lastState = this.getCurrentState();\n this.selected = stateId;\n this.onStateChangeEmitter.fire({ state, event, lastState });\n this.fireChange();\n }\n }\n\n toDefaultState(): void {\n this.changeState(EditorState.STATE_SELECT.id);\n }\n\n registerState(state: EditorState): void {\n this.states.push(state);\n // this.sortStates();\n this.fireChange();\n }\n\n getStates(): EditorState[] {\n return this.states;\n }\n\n /**\n * 是否为鼠标友好模式\n */\n isMouseFriendlyMode(): boolean {\n return this.getCurrentState() === EditorState.STATE_MOUSE_FRIENDLY_SELECT;\n }\n\n\n getStateFromShortcut(e: KeyboardEvent): EditorState | undefined {\n return this.states.find(s => {\n const shortcut =\n s.shortcut === 'SPACE' ? ' ' : (s.shortcut || '').toLowerCase();\n if (shortcut === e.key.toLowerCase()) {\n return s;\n // switch (e.key.toLowerCase()) {\n // case '=':\n // case '-':\n // case '0':\n // if (e.ctrlKey) {\n // return s;\n // }\n // break;\n // default:\n // return s;\n // }\n }\n return undefined;\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Disposable, domUtils, Emitter, PromiseDeferred, Rectangle } from '@flowgram-vue/utils'\nimport {\n ConfigEntity,\n Entity,\n PositionData,\n PositionSchema,\n SizeData,\n SizeSchema,\n TransformData,\n} from '../../../common'\nimport { MouseTouchEvent, startTween } from '../../utils'\n// import { Selectable } from '../../able'\n\nexport interface PlaygroundConfigEntityData {\n scrollX: number // 滚动 x\n scrollY: number // 滚动 y\n originX: number // 左上角默认开始的原点坐标\n originY: number // 左上角默认开始原点坐标\n width: number // 编辑区宽,在 onResize 触发后重制\n height: number // 编辑区高,在 onResize 触发后重制\n reverseScroll: boolean // 支持反方向滚动\n overflowX: 'hidden' | 'scroll'\n overflowY: 'hidden' | 'scroll'\n minZoom: number // 最大\n maxZoom: number // 最小\n zoom: number // 缩放比\n scrollLimitX?: number // 水平滚动限制\n scrollLimitY?: number // 垂直滚动限制\n mouseScrollDelta?: number | ((zoom: number) => number); // 鼠标滚动时的 delta 值\n pageBounds?: { x: number; y: number; width: number; height: number } // 编辑的画布边框,用于处理外部对齐问题\n disabled: boolean // 禁用状态\n readonly: boolean // readonly 状态\n scrollDisable: boolean\n grabDisable: boolean // 禁用抓取拖拽画布能力\n zoomDisable: boolean\n}\n\nexport interface PlaygroundConfigRevealOpts {\n entities?: Entity[]\n position?: PositionSchema // 滚动到指定位置,并居中\n bounds?: Rectangle // 滚动的 bounds\n // selection?: boolean 是否回到选择器所在位置,默认 true\n scrollDelta?: PositionSchema\n zoom?: number // 需要缩放的比例\n easing?: boolean // 是否开启缓动,默认开启\n easingDuration?: number // 默认 500 ms\n scrollToCenter?: boolean // 是否滚动到中心\n}\nexport const SCALE_WIDTH = 0\n\n/** 鼠标缩放 delta */\nexport const MOUSE_SCROLL_DELTA = (zoom: number) => zoom / 20;\nexport type PlaygroundScrollLimitFn = (scroll: { scrollX: number; scrollY: number }) => {\n scrollX: number\n scrollY: number\n}\nexport type Cursors = Record<string, string>;\n/**\n * 全局画布的配置信息\n */\nexport class PlaygroundConfigEntity extends ConfigEntity<PlaygroundConfigEntityData> {\n static type = 'PlaygroundConfigEntity'\n\n public getCursors: (() => Cursors | undefined) | undefined;\n private _loading = false\n private _zoomEnable = true\n\n private _scrollLimitFn?: PlaygroundScrollLimitFn\n\n private _onReadonlyOrDisabledChangeEmitter = new Emitter<{ readonly: boolean, disabled: boolean }>()\n private _onGrabDisableChangeEmitter = new Emitter<boolean>()\n readonly onGrabDisableChange = this._onGrabDisableChangeEmitter.event;\n readonly onReadonlyOrDisabledChange = this._onReadonlyOrDisabledChangeEmitter.event\n playgroundDomNode: HTMLElement = document.createElement('div')\n\n cursor = 'default'\n constructor(opts: any) {\n super(opts);\n this.toDispose.push(this._onReadonlyOrDisabledChangeEmitter)\n }\n\n /**\n * 是否禁用抓取拖拽画布能力\n */\n get grabDisable(): boolean {\n return this.config.grabDisable;\n }\n\n /**\n * 是否禁用抓取拖拽画布能力\n */\n set grabDisable(grabDisable: boolean) {\n this.updateConfig({\n grabDisable\n })\n }\n get scrollDisable(): boolean {\n return this.config.scrollDisable;\n }\n set scrollDisable(scrollDisable: boolean) {\n this.updateConfig({\n scrollDisable\n })\n }\n get zoomDisable(): boolean {\n return this.config.zoomDisable;\n }\n set zoomDisable(zoomDisable: boolean) {\n this.updateConfig({\n zoomDisable\n })\n }\n getDefaultConfig(): PlaygroundConfigEntityData {\n return {\n scrollX: 0,\n scrollY: 0,\n originX: 0,\n originY: 0,\n width: 0,\n height: 0,\n minZoom: 0.25,\n maxZoom: 2,\n zoom: 1,\n reverseScroll: true,\n overflowX: 'scroll',\n overflowY: 'scroll',\n disabled: false,\n readonly: false,\n grabDisable: false,\n scrollDisable: false,\n zoomDisable: false,\n mouseScrollDelta: MOUSE_SCROLL_DELTA\n }\n }\n\n /**\n * 添加滚动限制逻辑\n * @param fn\n */\n addScrollLimit(fn: PlaygroundScrollLimitFn): void {\n this._scrollLimitFn = fn\n }\n\n /**\n * 更新实体配置\n * @param props\n */\n updateConfig(props: Partial<PlaygroundConfigEntityData>): void {\n if (props.zoom !== undefined) {\n props = { ...props, zoom: this.normalizeZoom(props.zoom) }\n }\n props = { ...this.config, ...props }\n if (!props.reverseScroll) {\n if (props.scrollX! < this.config.originX) {\n props.scrollX = this.config.originX\n }\n if (props.scrollY! < this.config.originY) {\n props.scrollY = this.config.originY\n }\n }\n if (props.scrollLimitX !== undefined && props.scrollX! < props.scrollLimitX) {\n props.scrollX = props.scrollLimitX\n }\n if (props.scrollLimitY !== undefined && props.scrollY! < props.scrollLimitY) {\n props.scrollY = props.scrollLimitY\n }\n if (props.overflowX === 'hidden') {\n props.scrollX = this.config.originX\n }\n if (props.overflowY === 'hidden') {\n props.scrollY = this.config.originY\n }\n const scrollDisable = props.scrollDisable || this.scrollDisable\n const { readonly, disabled, grabDisable } = this\n if (scrollDisable) {\n props.scrollX = this.config.scrollX\n props.scrollY = this.config.scrollY\n }\n super.updateConfig(\n this._scrollLimitFn\n ? { ...props, ...this._scrollLimitFn({ scrollX: props.scrollX!, scrollY: props.scrollY! }) }\n : props\n )\n const readonlyOrDisableChanged = readonly !== this.readonly || disabled !== this.disabled\n if (readonlyOrDisableChanged) this._onReadonlyOrDisabledChangeEmitter.fire({ readonly: this.readonly, disabled: this.disabled })\n if (grabDisable !== this.grabDisable) this._onGrabDisableChangeEmitter.fire(this.grabDisable)\n }\n\n /**\n * 缩放比例\n * 使用 zoom 替代\n * @deprecated\n */\n get finalScale(): number {\n if (!this.zoomEnable) return 1\n return this.config.zoom\n }\n\n /**\n * 缩放比例\n */\n get zoom(): number {\n if (!this.zoomEnable) return 1\n return this.config.zoom\n }\n\n get scrollData(): { scrollX: number; scrollY: number } {\n return {\n scrollX: this.config.scrollX,\n scrollY: this.config.scrollY,\n }\n }\n\n protected normalizeZoom(zoom: number): number {\n if (!this.zoomEnable) return 1\n if (this.zoomDisable) return this.config.zoom;\n if (zoom < this.config.minZoom) {\n zoom = this.config.minZoom\n } else if (zoom > this.config.maxZoom) {\n zoom = this.config.maxZoom\n }\n return zoom\n }\n\n /**\n * 修改画布光标\n * @param cursor\n */\n updateCursor(cursor: string): void {\n if (this.cursor !== cursor) {\n this.cursor = cursor\n this.fireChange()\n }\n }\n\n /**\n * 获取相对画布的位置\n * @param event\n * @param widthScale 是否要计算缩放\n */\n getPosFromMouseEvent(\n event:\n | MouseEvent\n | TouchEvent\n | {\n clientX: number;\n clientY: number;\n },\n withScale = true\n ): PositionSchema {\n const { config } = this\n const scale = withScale ? this.zoom : 1\n const { clientX, clientY } = MouseTouchEvent.getEventCoord(event)\n const clientRect = this.playgroundDomNode.getBoundingClientRect()\n return {\n x: (clientX + config.scrollX - clientRect.x) / scale,\n y: (clientY + config.scrollY - clientRect.y) / scale,\n }\n }\n getClientBounds(): Rectangle {\n const clientRect = this.playgroundDomNode.getBoundingClientRect()\n return new Rectangle(clientRect.x, clientRect.y, clientRect.width, clientRect.height)\n }\n /**\n * 将画布中的位置转成相对 window 的位置\n * @param pos\n */\n toFixedPos(pos: PositionSchema): PositionSchema {\n const { config } = this\n const clientRect = this.playgroundDomNode.getBoundingClientRect()\n return {\n x: pos.x - config.scrollX + clientRect.x,\n y: pos.y - config.scrollY + clientRect.y,\n }\n }\n\n /**\n * 获取可视区域\n */\n getViewport(withScale: boolean = true): Rectangle {\n const { config } = this\n const scale = withScale ? this.finalScale : 1\n return new Rectangle(\n config.scrollX / scale,\n config.scrollY / scale,\n config.width / scale,\n config.height / scale\n )\n }\n\n /**\n * 判断矩形是否在可视区域,如果有擦边页代表在可是区域\n * @param bounds\n * @param rotation\n * @param includeAll - 是否包含在里边,默认 false\n */\n isViewportVisible(bounds: Rectangle, rotation: number = 0, includeAll: boolean = false): boolean {\n return Rectangle.isViewportVisible(bounds, this.getViewport(), rotation, includeAll)\n }\n\n /**\n * 按下边顺序执行\n * 1. 指定的 entity 位置或 pos 位置\n * 3. 初始化位置\n */\n scrollToView(opts: PlaygroundConfigRevealOpts = {}): Promise<void> {\n const {\n scrollDelta,\n position: pos,\n // selection = true,\n easing = true,\n easingDuration = 300,\n entities,\n } = opts\n const { config } = this\n const scale = opts.zoom ? opts.zoom : this.finalScale\n let bounds: Rectangle | undefined\n if (entities && entities.length > 0) {\n const entitiesBounds = entities\n .map((e) => {\n const transform = e.getData<TransformData>(TransformData)\n if (transform) return transform.bounds\n const position = e.getData<PositionData>(PositionData)\n const size = e.getData<SizeData>(SizeData) || { width: 0, height: 0 }\n if (!position) return\n return new Rectangle(position.x, position.y, size.width, size.height || 0)\n })\n .filter((e) => !!e) as Rectangle[]\n if (entitiesBounds.length > 0) {\n bounds = Rectangle.enlarge(entitiesBounds)\n }\n } else if (pos) {\n bounds = new Rectangle(pos.x, pos.y, 0, 0)\n } else if (opts.bounds) {\n bounds = opts.bounds\n } // else if (selection) {\n // bounds = Selectable.getSelectedBounds(this.entityManager)\n // }\n if (!bounds) {\n const defaultConfig = this.getDefaultConfig()\n bounds = new Rectangle(\n (defaultConfig.scrollX + config.width / 2) / scale,\n (defaultConfig.scrollY + config.height / 2) / scale,\n 0,\n 0\n )\n }\n if (!opts.scrollToCenter) {\n const boundsVisible = this.getViewport()\n // 判断是否看得见\n if (boundsVisible.containsRectangle(bounds)) {\n return Promise.resolve()\n }\n }\n // TODO 微调滚动,而不是直接滚动到中心\n const toValues = {\n scrollX:\n (bounds.x + bounds.width / 2 + (scrollDelta ? scrollDelta.x : 0)) * scale -\n config.width / 2,\n scrollY:\n (bounds.y + bounds.height / 2 + (scrollDelta ? scrollDelta.y : 0)) * scale -\n config.height / 2,\n zoom: opts.zoom,\n }\n return this.scroll(toValues, easing, easingDuration)\n }\n\n /**\n * 这只画布边框,元素编辑的时候回吸附画布边框\n * @param bounds\n */\n setPageBounds(bounds: Rectangle): void {\n this.updateConfig({\n pageBounds: {\n x: bounds.x,\n y: bounds.y,\n width: bounds.width,\n height: bounds.height,\n },\n })\n }\n\n getPageBounds(): Rectangle | undefined {\n const { pageBounds } = this.config\n if (pageBounds) {\n return new Rectangle(pageBounds.x, pageBounds.y, pageBounds.width, pageBounds.height)\n }\n }\n\n /**\n * 滚动到画布中央\n * @param zoomToFit 是否缩放并适配外围大小\n * @param fitPadding 适配外围的留白\n * @param easing 是否缓动\n */\n scrollPageBoundsToCenter(\n zoomToFit: boolean = true,\n fitPadding = 16,\n easing = true\n ): Promise<void> {\n const pageBounds = this.getPageBounds()\n if (pageBounds) {\n let zoom: number | undefined\n const fitPaddingDouble = fitPadding * 2\n if (zoomToFit) {\n const fixedScale = SizeSchema.fixSize(\n {\n width: pageBounds.width,\n height: pageBounds.height,\n },\n {\n width:\n fitPaddingDouble > this.config.width\n ? fitPaddingDouble\n : this.config.width - fitPaddingDouble,\n height:\n fitPaddingDouble > this.config.height\n ? fitPaddingDouble\n : this.config.height - fitPaddingDouble,\n }\n )\n zoom = fixedScale\n }\n return this.scrollToView({\n bounds: pageBounds,\n zoom,\n scrollToCenter: true,\n // selection: false,\n easing,\n })\n }\n return this.scrollToView({ easing })\n }\n\n private cancelScrollTeeen?: Disposable\n\n /**\n * 滚动\n * @param scroll\n * @param easing - 是否开启缓动,默认开启\n * @param easingDuration - 滚动持续时间,默认 300ms\n */\n scroll(\n scroll: Partial<{ scrollX: number; scrollY: number; zoom: number }>,\n easing: boolean = true,\n easingDuration = 300\n ): Promise<void> {\n const deferred = new PromiseDeferred<void>()\n if (this.cancelScrollTeeen) this.cancelScrollTeeen.dispose()\n if (easing) {\n const fromValues = {\n scrollX: this.config.scrollX,\n scrollY: this.config.scrollY,\n zoom: this.config.zoom,\n }\n this.cancelScrollTeeen = startTween({\n from: fromValues,\n to: {\n ...fromValues,\n ...scroll,\n },\n onUpdate: (v) => {\n this.updateConfig(v)\n },\n onComplete: () => {\n this.cancelScrollTeeen = undefined\n deferred.resolve()\n },\n onDispose: () => {\n deferred.resolve()\n },\n duration: easingDuration,\n })\n } else {\n this.updateConfig(scroll)\n deferred.resolve()\n }\n return deferred.promise\n }\n\n /**\n * 让 layer 的 node 节点不随着画布滚动条滚动\n * @param layerNode\n */\n fixLayerPosition(layerNode: HTMLElement): void {\n domUtils.setStyle(layerNode, {\n left: this.config.scrollX,\n top: this.config.scrollY,\n })\n }\n\n get loading(): boolean {\n return this._loading\n }\n\n set loading(loading: boolean) {\n if (this.loading !== loading) {\n this._loading = loading\n this.fireChange()\n }\n }\n\n /**\n * @deprecated use 'zoomDisable' instead\n */\n get zoomEnable(): boolean {\n return this._zoomEnable\n }\n\n /**\n * 开启缩放\n * @deprecated use 'zoomDisable' instead\n */\n set zoomEnable(zoomEnable: boolean) {\n if (this._zoomEnable !== zoomEnable) {\n this._zoomEnable = zoomEnable\n this.fireChange()\n }\n }\n\n /**\n * 放大\n */\n zoomin(easing?: boolean, easingDuration?: number): void {\n const unit = this.config.zoom / 10\n const newZoom = Math.ceil((this.config.zoom + unit) * 10) / 10\n this.updateZoom(newZoom, easing, easingDuration)\n }\n\n /**\n * 缩小\n */\n zoomout(easing?: boolean, easingDuration?: number): void {\n const unit = this.config.zoom / 10\n const newZoom = Math.floor((this.config.zoom - unit) * 10) / 10\n this.updateZoom(newZoom, easing, easingDuration)\n }\n\n updateZoom(newZoom: number, easing: boolean = true, easingDuration = 200): void {\n newZoom = this.normalizeZoom(newZoom)\n const { center } = this.getViewport()\n const oldScale = this.finalScale\n const newScale = !this.zoomEnable ? oldScale : newZoom\n if (newScale !== oldScale) {\n const delta = {\n x: center.x * newScale - center.x * oldScale,\n y: center.y * newScale - center.y * oldScale,\n }\n this.scroll(\n {\n scrollX: this.config.scrollX + delta.x,\n scrollY: this.config.scrollY + delta.y,\n zoom: newZoom,\n },\n easing,\n easingDuration\n )\n }\n }\n get disabled(): boolean {\n return this.config.disabled\n }\n get readonly(): boolean {\n return this.config.readonly\n }\n get readonlyOrDisabled(): boolean {\n return this.config.readonly || this.config.disabled\n }\n set readonly(readonly) {\n this.updateConfig({\n readonly\n })\n }\n set disabled(disabled) {\n this.updateConfig({\n disabled\n })\n }\n\n /**\n * 适应大小\n * @param bounds 目标大小\n * @param easing 是否开启动画,默认开启\n * @param padding 边界空白\n * @param easingDuration\n */\n fitView(bounds: Rectangle, easing = true, padding = 0, easingDuration = 300): Promise<void> {\n const viewport = this.getViewport(false);\n const zoom = SizeSchema.fixSize(bounds.clone().pad(padding, padding), viewport);\n return this.scrollToView({\n bounds,\n zoom,\n easing,\n easingDuration,\n scrollToCenter: true,\n });\n\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport type { Component, VNode } from 'vue';\nimport {\n type CacheManager,\n type Disposable,\n DisposableCollection,\n type DOMCache,\n domUtils,\n} from '@flowgram-vue/utils';\n\n// import { Adsorber } from '../utils/adsorber';\n// import { PlaygroundDrag, type PlaygroundDragEntitiesOpts } from '../utils';\nimport { type PipelineEntities } from '../pipeline/pipeline-entities';\nimport { type PipeEventName, type PipelineDimension, type PipeSupportEvent } from '../pipeline';\nimport {\n EntityManager,\n injectPlaygroundContext,\n PlaygroundContext,\n type PositionSchema,\n} from '../../common';\n// import { SelectionService } from '@flowgram-vue/application-common';\nimport { type PlaygroundConfigEntity } from './config';\n\nexport interface LayerOptions {}\n\nexport const LayerOptions = Symbol('LayerOptions');\n\n/**\n * 基础 layer\n */\n@injectable()\nexport class Layer<\n OPT extends LayerOptions = any,\n CONTEXT extends PlaygroundContext = PlaygroundContext\n> {\n /**\n * layer 的配置, 由 registerLayer(Layer, LayerOptions) 传入\n */\n @inject(LayerOptions) options: OPT;\n\n protected readonly toDispose = new DisposableCollection();\n\n /**\n * layer 可能存在 dom 也可能没有,如果有,则会加入到 pipeline 的 dom 节点上\n */\n node: HTMLElement;\n\n /**\n * 父节点\n */\n pipelineNode: HTMLElement;\n\n /**\n * 画布根节点\n */\n playgroundNode: HTMLElement;\n\n // /**\n // * 发送 payload\n // * @param payloadKey\n // * @param payloadValue\n // * @param cb - layer 触发 autorun 后的回调\n // */\n // dispatch<P>(payloadKey: string | symbol, payloadValue: P, cb?: () => void): void {}\n\n /**\n * 当前 layer 的所有监听的实体数据\n */\n observeManager: PipelineEntities;\n\n /**\n * 实体管理器\n */\n @inject(EntityManager) readonly entityManager: EntityManager;\n\n @injectPlaygroundContext() readonly context: CONTEXT;\n\n /**\n * 自动触发更新,在不需要 Vue 渲染的时候用这个方法\n */\n autorun?(): void;\n\n /**\n * 绘制 Vue 组件或 VNode\n */\n render?(): Component | VNode | null;\n\n /**\n * 默认每个 Layer 独立 createApp 隔离更新,这种情况就需要数据驱动刷新\n */\n renderWithVueMemo = true;\n\n /**\n * 全局选择\n */\n // selectionService?: SelectionService;\n /**\n * 监听 playground 上的事件\n * 规则:\n * 1. 按 priority 排序,越高先执行\n * 2. 没有提供,按 layer 的注册顺序,后注册先执行 (符合冒泡排序)\n * 3. 执行返回 true,则阻止后续的执行\n */\n listenPlaygroundEvent: (\n name: PipeEventName,\n handle: (event: PipeSupportEvent) => boolean | void,\n priority?: number,\n options?: AddEventListenerOptions\n ) => Disposable;\n\n /**\n * 监听 document 上的事件\n * 规则:\n * 1. 按 priority 排序,越高先执行\n * 2. 没有提供,按 layer 的注册顺序,后注册先执行 (符合冒泡排序)\n * 3. 执行返回 true,则阻止后续的执行\n */\n listenGlobalEvent: (\n name: PipeEventName,\n handle: (event: PipeSupportEvent) => boolean | void,\n priority?: number,\n options?: AddEventListenerOptions\n ) => Disposable;\n\n /**\n * 初始化时候触发\n */\n onReady?(): void;\n\n /**\n * playground 大小变化时候会触发\n */\n onResize?(size: PipelineDimension): void;\n\n /**\n * playground focus 时候触发\n */\n onFocus?(): void;\n\n /**\n * playground blur 时候触发\n */\n onBlur?(): void;\n\n /**\n * 监听缩放\n */\n onZoom?(zoom: number): void;\n\n /**\n * 监听滚动\n */\n onScroll?(scroll: { scrollX: number; scrollY: number }): void;\n\n /**\n * viewport 更新触发\n */\n onViewportChange?(): void;\n\n /**\n * readonly 或 disable 状态变化\n * @param state\n */\n onReadonlyOrDisabledChange?(state: { disabled: boolean; readonly: boolean }): void;\n\n /**\n * playground 是否 focused\n */\n readonly isFocused: boolean;\n\n /**\n * 销毁\n */\n dispose(): void {\n this.toDispose.dispose();\n }\n\n /**\n * 创建 dom 缓冲池\n * @param className\n */\n createDOMCache<T extends DOMCache>(\n className: string | (() => HTMLElement),\n children?: string\n ): CacheManager<T> {\n if (!this.node) throw new Error('DomCache need a parent dom node.');\n return domUtils.createDOMCache<T>(this.node, className, children);\n }\n\n /**\n * 加载 layer 注册的实体数据,内部使用,不需要手动触发\n * @return 数据是否变化\n */\n declare reloadEntities: () => boolean;\n\n // /**\n // * 在画布上拖动实体\n // */\n // startDrag<T>(\n // clientX: number,\n // clientY: number,\n // opts: PlaygroundDragEntitiesOpts<T> = {},\n // ): Disposable {\n // const adsorbRefs = Adsorber.getRefsFromEntities(\n // this.entityManager,\n // opts.entities || [],\n // this.config,\n // );\n // return PlaygroundDrag.startDrag(clientX, clientY, {\n // ...opts,\n // adsorbRefs,\n // config: this.config,\n // });\n // }\n\n /**\n * 全局画布配置\n */\n config: PlaygroundConfigEntity;\n\n /**\n * 获取鼠标在 Playground 的位置\n */\n getPosFromMouseEvent(\n event: { clientX: number; clientY: number },\n addScale = true\n ): PositionSchema {\n const pos = this.config.getPosFromMouseEvent(event, addScale);\n return {\n x: pos.x,\n y: pos.y,\n };\n }\n\n /**\n * 可以用于获取别的 layer\n */\n getOtherLayer: <T extends Layer>(layerRegistry: LayerRegistry<T>) => T | undefined;\n}\n\nexport interface LayerRegistry<P extends Layer = Layer> {\n new (): P;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable, optional } from 'inversify';\nimport { Disposable, domUtils, PositionSchema } from '@flowgram-vue/utils';\n\nimport { Gesture } from '../utils/use-gesture';\nimport { PlaygroundGesture } from '../utils/playground-gesture';\nimport { MouseTouchEvent, PlaygroundDrag } from '../utils';\nimport { PipelineLayerPriority } from '../pipeline';\nimport { ProtectWheelArea } from '../../common/protect-wheel-area';\nimport { observeEntity } from '../../common';\nimport { Layer, LayerOptions } from './layer';\nimport {\n EditorState,\n type EditorStateChangeEvent,\n EditorStateConfigEntity,\n PlaygroundConfigEntity,\n type PlaygroundConfigEntityData,\n} from './config';\n\n/**\n * MOUSE: 鼠标友好模式,鼠标左键拖动画布,滚动缩放 (适合 windows )\n * PAD: 双指同向移动拖动,双指张开捏合缩放 (适合 mac)\n */\nexport type PlaygroundInteractiveType = 'MOUSE' | 'PAD';\n\nexport interface PlaygroundLayerOptions extends LayerOptions {\n /**\n * 阻止浏览器默认的手势(苹果触摸板),包含:放大缩小、左右滑动翻页,默认为 false\n */\n preventGlobalGesture?: boolean;\n\n ineractiveType?: PlaygroundInteractiveType;\n\n /** 悬浮服务 */\n hoverService?: {\n /** 精确判断当前鼠标位置是否有元素存在 */\n isSomeHovered: () => boolean;\n updateHoverPosition: (position: PositionSchema, target?: HTMLElement) => void;\n clearHovered: () => void;\n };\n}\n\n/**\n * 基础层,控制画布缩放/滚动等操作\n */\n@injectable()\nexport class PlaygroundLayer extends Layer<PlaygroundLayerOptions> {\n @observeEntity(PlaygroundConfigEntity)\n protected playgroundConfigEntity: PlaygroundConfigEntity;\n\n @observeEntity(EditorStateConfigEntity)\n protected editorStateConfig: EditorStateConfigEntity;\n\n @optional()\n @inject(ProtectWheelArea)\n protectWheelArea?: ProtectWheelArea;\n\n private cancelStateListen?: Disposable;\n\n private lastShortcutState?: EditorState;\n\n private currentGesture?: PlaygroundGesture;\n\n private startGrabScroll: { scrollX: number; scrollY: number } = {\n scrollX: 0,\n scrollY: 0,\n };\n\n private cursorStyle: HTMLStyleElement = document.createElement('style');\n\n private maskNode: HTMLDivElement = document.createElement('div');\n\n onReady(): void {\n this.options = {\n preventGlobalGesture: false,\n ...this.options,\n };\n /**\n * 阻止默认的浏览器手势缩放\n */\n if (this.options.preventGlobalGesture) {\n const gesturePreventGlobal = new Gesture(document.body, {\n /* v8 ignore next 3 */\n onPinch: () => {\n // Do nothing\n },\n });\n if (document.documentElement) {\n document.documentElement.style.overscrollBehaviorX = 'none';\n }\n document.body.style.overscrollBehaviorX = 'none';\n this.toDispose.push(Disposable.create(() => gesturePreventGlobal.destroy()));\n }\n this.toDispose.pushAll([\n this.config.onGrabDisableChange((disable) => {\n if (disable) {\n this.grabDragger.stop(0, 0);\n }\n }),\n /**\n * 防止滚动事件被透出到业务层滚动\n */\n domUtils.addStandardDisposableListener(this.playgroundNode, 'wheel', (event: WheelEvent) => {\n // 判断当前 scrollParent,有滚动条则停止滚动\n if (this.getScrollParent(event.target as HTMLElement)) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n }),\n /**\n * 在父节点上监听滚动事件\n */\n this.listenPlaygroundEvent(\n 'wheel',\n this.handleWheelEvent.bind(this),\n PipelineLayerPriority.BASE_LAYER,\n { passive: true }\n ),\n /**\n * 监听触控拖动画布操作\n */\n this.listenPlaygroundEvent(\n 'touchstart',\n (e: TouchEvent) => {\n const { clientX: x, clientY: y } = MouseTouchEvent.getEventCoord(e);\n if (!this.options?.hoverService) {\n return;\n }\n this.options.hoverService.updateHoverPosition(\n {\n x,\n y,\n },\n e.target as HTMLElement\n );\n const isSomeHovered = this.options.hoverService?.isSomeHovered();\n if (isSomeHovered) {\n return;\n }\n this.grabDragger.start(x, y);\n },\n // 这里必须监听 NORMAL_LAYER,该图层最先触发\n PipelineLayerPriority.NORMAL_LAYER\n ),\n this.listenPlaygroundEvent('touchend', (e: TouchEvent) => {\n this.options.hoverService?.clearHovered();\n }),\n this.listenPlaygroundEvent('touchcancel', (e: TouchEvent) => {\n this.options.hoverService?.clearHovered();\n }),\n this.listenPlaygroundEvent(\n 'mousedown',\n (e: MouseEvent) => {\n const isMouseCenterButton = e.button === 1;\n\n // 按住中键,进入拖拽模式,鼠标模式不支持\n if (isMouseCenterButton && !this.isMouseMode()) {\n this.editorStateConfig.changeState(EditorState.STATE_GRAB.id);\n }\n\n // 触控板模式下,目前支持按住 space 键或者鼠标中键后拖动\n if (this.isGrab() && (this.editorStateConfig.isPressingSpaceBar || isMouseCenterButton)) {\n this.grabDragger.start(e.clientX, e.clientY);\n }\n },\n PipelineLayerPriority.BASE_LAYER\n ),\n this.listenPlaygroundEvent(\n 'mousedown',\n (e: MouseEvent) => {\n const isSomeHovered = this.options?.hoverService?.isSomeHovered();\n\n // 如果是鼠标优先模式,当前位置不是节点,并且没有按下 shift,才启动拖拽\n if (this.isMouseMode() && !isSomeHovered && !this.editorStateConfig.isPressingShift) {\n this.grabDragger.start(e.clientX, e.clientY);\n }\n },\n // 这里必须监听 NORMAL_LAYER,该图层最先触发\n PipelineLayerPriority.NORMAL_LAYER\n ),\n\n this.editorStateConfig.onStateChange(this.onStateChanged.bind(this)),\n\n // 单独监听 shift 按键\n // 只有 keydown 能监听到 shift 按键,keypress 无法监听到\n this.listenGlobalEvent(\n 'keydown',\n (e: KeyboardEvent) => {\n if (e.shiftKey) {\n this.editorStateConfig.isPressingShift = true;\n\n // 如果是鼠标优先,按住 shift 键需要更新鼠标为默认\n if (this.isMouseMode()) {\n this.config.updateCursor('');\n }\n }\n },\n PipelineLayerPriority.BASE_LAYER\n ),\n\n // 监听快捷键\n this.listenGlobalEvent(\n 'keypress',\n (e: KeyboardEvent) => {\n if (!this.isFocused || e.target !== this.playgroundNode) return;\n\n // PS: 如果是鼠标优先模式,不监听快捷键\n if (this.isMouseMode()) {\n return;\n }\n\n const state = this.editorStateConfig.getStateFromShortcut(e);\n\n // 使用场景:\n // 在按住空格时(进入 grab 模式),此时点击工具栏的手型工具,需禁止退出 grab 模式\n // 需要让业务侧感知是否按住空格\n if (e.key === ' ') {\n this.editorStateConfig.isPressingSpaceBar = true;\n }\n\n // 部分状态不允许重复进入\n if (\n state?.shortcutWorksOnlyOnStateChanged === true &&\n state === this.editorStateConfig.getCurrentState()\n ) {\n return;\n }\n\n this.lastShortcutState = state;\n if (state) {\n this.editorStateConfig.changeState(state.id);\n }\n },\n PipelineLayerPriority.BASE_LAYER\n ),\n this.listenGlobalEvent('keyup', (e: KeyboardEvent) => {\n if (e.key === ' ') {\n this.editorStateConfig.isPressingSpaceBar = false;\n }\n\n this.editorStateConfig.isPressingShift = false;\n\n if (this.lastShortcutState && this.lastShortcutState.shortcutAutoEsc) {\n this.editorStateConfig.toDefaultState();\n }\n\n this.lastShortcutState = undefined;\n }),\n {\n // 在进入 grab 模式后,此时后退页面,需清理样式\n dispose: () => {\n if (this.maskNode.parentNode) {\n this.maskNode.parentNode.removeChild(this.maskNode);\n }\n if (this.cursorStyle.parentNode) {\n this.cursorStyle.parentNode.removeChild(this.cursorStyle);\n }\n },\n },\n ]);\n // 切换到鼠标模式\n if (this.options.ineractiveType === 'MOUSE') {\n this.editorStateConfig.changeState(EditorState.STATE_MOUSE_FRIENDLY_SELECT.id);\n }\n }\n\n private getCursor(cursor: string | undefined) {\n if (!cursor) {\n return '';\n }\n return this.playgroundConfigEntity.getCursors?.()?.[cursor] ?? cursor;\n }\n\n /** 是否为鼠标优先模式 */\n private isMouseMode() {\n return this.editorStateConfig.isMouseFriendlyMode();\n }\n\n onStateChanged(e: EditorStateChangeEvent): void {\n const { state } = e;\n if (this.cancelStateListen) {\n this.cancelStateListen.dispose();\n this.cancelStateListen = undefined;\n }\n if (state.handle) {\n state.handle(this.config, e);\n }\n if (state.cursor) {\n this.playgroundConfigEntity.updateCursor(state.cursor);\n if (this.currentGesture) {\n this.playgroundNode.style.cursor = this.getCursor(state.cursor);\n }\n } else {\n this.playgroundConfigEntity.updateCursor('');\n this.playgroundNode.style.cursor = '';\n }\n\n // 避免触发控件交互\n if (state.cursor === 'grab' || state.cursor === 'grabbing') {\n // 在鼠标优先交互模式下,应该要允许控件交互,可以选择节点拖动\n if (state === EditorState.STATE_MOUSE_FRIENDLY_SELECT) {\n return;\n }\n\n this.maskNode.style.cssText = `\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 100;\n `;\n this.playgroundNode.appendChild(this.maskNode);\n } else {\n if (this.maskNode.parentNode) {\n this.maskNode.parentNode.removeChild(this.maskNode);\n }\n }\n // 按 esc 退出\n if (state.cancelMode === 'esc') {\n this.cancelStateListen = domUtils.addStandardDisposableListener(\n document.body,\n 'keydown',\n (keyboard: KeyboardEvent) => {\n if (keyboard.key === 'Escape') {\n this.editorStateConfig.toDefaultState();\n }\n },\n true\n );\n } else if (state.cancelMode === 'once') {\n // 只执行一次\n this.editorStateConfig.toDefaultState();\n }\n }\n\n protected grabDragger = new PlaygroundDrag({\n onDragStart: (e) => {\n if (this.config.grabDisable) return;\n this.config.updateCursor('grabbing');\n this.startGrabScroll = {\n scrollX: this.config.config.scrollX,\n scrollY: this.config.config.scrollY,\n };\n },\n onDrag: (e) => {\n if (this.config.grabDisable) return;\n this.config.updateConfig({\n scrollX: this.startGrabScroll.scrollX - e.endPos.x + e.startPos.x,\n scrollY: this.startGrabScroll.scrollY - e.endPos.y + e.startPos.y,\n });\n },\n onDragEnd: (e) => {\n if (this.isGrab()) {\n // 可能已经取消了\n this.config.updateCursor('grab');\n }\n\n // 如果拖拽触发自中键,需从拖拽态退出,且重置光标\n const isMouseCenterButton = e.button === 1;\n if (isMouseCenterButton) {\n if (this.isMouseMode()) {\n this.editorStateConfig.changeState(EditorState.STATE_MOUSE_FRIENDLY_SELECT.id);\n this.config.updateCursor('grab');\n } else {\n this.editorStateConfig.toDefaultState();\n this.config.updateCursor('');\n }\n }\n },\n });\n\n protected isGrab(): boolean {\n const currentState = this.editorStateConfig.getCurrentState();\n\n // STATE_GRAB 和 STATE_MOUSE_FRIENDLY_SELECT 都允许拖动\n return (\n currentState === EditorState.STATE_GRAB ||\n currentState === EditorState.STATE_MOUSE_FRIENDLY_SELECT\n );\n }\n\n createGesture(): void {\n if (!this.currentGesture) {\n this.currentGesture = new PlaygroundGesture(this.playgroundNode, this.config);\n this.currentGesture.onDispose(() => {\n this.currentGesture = undefined;\n });\n this.toDispose.push(this.currentGesture);\n }\n }\n\n protected handleScrollEvent(event: WheelEvent): void {\n const { playgroundConfigEntity } = this;\n const scrollX = playgroundConfigEntity.config.scrollX + event.deltaX;\n const scrollY = playgroundConfigEntity.config.scrollY + event.deltaY;\n const state: Partial<PlaygroundConfigEntityData> = {\n scrollX,\n scrollY,\n };\n playgroundConfigEntity.updateConfig(state);\n }\n\n protected getMouseScaleDelta(): number {\n const { mouseScrollDelta, zoom } = this.config.config;\n if (typeof mouseScrollDelta === 'function') {\n return mouseScrollDelta(zoom);\n }\n return mouseScrollDelta!;\n }\n\n /**\n * 监听滚动事件\n * @param event\n */\n protected handleWheelEvent(event: WheelEvent): void {\n const e = event as any;\n if ((this.currentGesture && this.currentGesture.pinching) || event.ctrlKey || event.metaKey)\n return;\n\n // 判断当前 scrollParent,有滚动条则停止滚动\n if (this.getScrollParent(event.target as HTMLElement)) {\n return;\n }\n\n // 鼠标优先模式,使用滚轮缩放,并且在当前鼠标位置放大缩小\n if (this.isMouseMode()) {\n // 这里没有使用 this.config.zoomin 和 zoomout 方法\n // 因为这两个方法目前看没有实现居中缩放的效果,且体验有些卡顿\n const { zoom, minZoom, maxZoom, scrollX, scrollY } = this.playgroundConfigEntity.config;\n\n // 鼠标模式下,为了避免过快缩放,这里比例相对触控板模式缩小一倍,这个参数从业务侧传过来,同时提供默认值\n const scaleStep = this.getMouseScaleDelta();\n const scaleMin = minZoom;\n const scaleMax = maxZoom;\n\n // 处理横向和竖向滚轮\n const getDelta = (wheelDelta: number): number => (wheelDelta > 0 ? -scaleStep : scaleStep);\n\n // 优先使用垂直滚动,如果垂直滚动为0则使用水平滚动\n const wheelDelta = Math.abs(e.deltaY) > 0 ? e.deltaY : e.deltaX;\n const delta = getDelta(wheelDelta);\n\n const oldScale = this.config.finalScale;\n const originX = event.clientX;\n const originY = event.clientY;\n\n const newScale = Math.max(scaleMin, Math.min(scaleMax, zoom + delta));\n\n const origin = this.config.getPosFromMouseEvent(\n { clientX: originX, clientY: originY },\n false\n );\n\n // 计算放大后的位置,鼠标位置居中缩放\n // 参见 packages-ide-editor/common/core/src/core/utils/playground-gesture.ts\n const finalPos = {\n x: (origin.x / oldScale) * newScale,\n y: (origin.y / oldScale) * newScale,\n };\n this.config.updateConfig({\n scrollX: scrollX + finalPos.x - origin.x,\n scrollY: scrollY + finalPos.y - origin.y,\n zoom: newScale,\n });\n return;\n }\n\n this.handleScrollEvent(e);\n }\n\n /**\n * 获取 wheel 事件滚动的父元素\n * @param dom\n */\n protected getScrollParent(ele?: HTMLElement | null): HTMLElement | null {\n if (!ele || ele === this.pipelineNode.parentElement) {\n return null;\n }\n\n const hasScrollableXContent = ele.scrollWidth > ele.clientWidth;\n const hasScrollableYContent = ele.scrollHeight > ele.clientHeight;\n const overflowXStyle = window.getComputedStyle(ele).overflowX;\n const overflowYStyle = window.getComputedStyle(ele).overflowY;\n const isOverflowXScrollable = ['auto', 'scroll', 'overlay'].includes(overflowXStyle);\n const isOverflowYScrollable = ['auto', 'scroll', 'overlay'].includes(overflowYStyle);\n\n const hasScrollableContent =\n (hasScrollableXContent && isOverflowXScrollable) ||\n (hasScrollableYContent && isOverflowYScrollable);\n\n if (hasScrollableContent || this.protectWheelArea?.(ele)) {\n return ele;\n }\n\n return this.getScrollParent(ele.parentElement);\n }\n\n autorun(): void {\n const playgroundConfig = this.playgroundConfigEntity.config;\n const { cursor } = this.playgroundConfigEntity;\n const finalCursor = this.getCursor(cursor);\n\n // 创建手势\n if (this.config.zoomEnable) {\n this.createGesture();\n } else if (this.currentGesture) {\n this.currentGesture.dispose();\n }\n // // 设置 pipeline 的样式\n // if (scaleVisible) {\n // domUtils.setStyle(this.pipelineNode, {\n // left: SCALE_WIDTH - playgroundConfig.scrollX,\n // top: SCALE_WIDTH - playgroundConfig.scrollY,\n // width: playgroundConfig.width,\n // height: playgroundConfig.height,\n // });\n // } else {\n // }\n domUtils.setStyle(this.pipelineNode, {\n left: -playgroundConfig.scrollX,\n top: -playgroundConfig.scrollY,\n width: playgroundConfig.width,\n height: playgroundConfig.height,\n });\n this.playgroundNode.style.cursor = finalCursor;\n // Note: 为什么要通过 style 注入样式\n // 原因:在 pipelineNode.parentElement 上设置 style.cursor,子元素继承样式时 cursor 样式优先级不够(子元素自身也存在 cursor 配置)\n if (cursor === 'grab' || cursor === 'grabbing') {\n let classSelector = '';\n this.playgroundNode.classList.forEach((className) => {\n classSelector += `.${className}`;\n });\n this.cursorStyle.innerText = `.${classSelector} * { cursor: ${finalCursor} }`;\n if (!this.cursorStyle.parentNode) {\n document.head.appendChild(this.cursorStyle);\n }\n } else {\n if (this.cursorStyle.parentNode) {\n this.cursorStyle.parentNode.removeChild(this.cursorStyle);\n }\n }\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport {\n // type AbleRegistry,\n type ConfigEntity,\n type Entity,\n type EntityData,\n type EntityManager,\n type EntityRegistry,\n} from '../../common';\n\n/**\n * 注入到 Layer 中的实体选择器\n */\nexport interface PipelineEntities extends Iterable<Entity> {\n /**\n * 获取单个实体,如果该实体是单例且被注册过,则会自动创建\n * @param registry\n */\n get<T extends Entity>(registry: EntityRegistry, id?: string): T | undefined;\n /**\n * 获取多个实体\n * @param registry\n */\n getEntities<T extends Entity>(registry: EntityRegistry): T[];\n\n // /**\n // * 通过 Able 获取多个实体\n // * @param registry\n // */\n // getEntitiesByAble<T extends Entity>(registry: AbleRegistry): T[];\n // /**\n // * 通过多个 Ables 获取多个实体\n // * @param andAbles - 多个 able,条件且\n // * @param orAbles - 多个 able,条件或\n // */\n // getEntitiesByAbles<T extends Entity>(andAbles: AbleRegistry[], orAbles?: AbleRegistry[]): T[];\n\n /**\n * 获取 entity\n * @param entityRegistry\n * @param dataRegistry\n */\n getEntityDatas<T extends EntityData>(entityRegistry: EntityRegistry, dataRegistry: T): T[];\n /**\n * 是否存在\n * @param registry\n */\n has(registry: EntityRegistry): boolean;\n /**\n * 获取配置信息\n * @param registry\n */\n getConfig<E extends ConfigEntity>(registry: EntityRegistry): E['config'] | undefined;\n /**\n * 更新配置数据\n */\n updateConfig<E extends ConfigEntity>(registry: EntityRegistry, props: Partial<E['config']>): void;\n\n /**\n * 创建实体\n */\n createEntity: <E extends Entity>(\n registry: EntityRegistry,\n opts?: Omit<E['__opts_type__'], 'entityManager'>,\n ) => E;\n /**\n * 批量删除实体\n */\n removeEntities: (registry: EntityRegistry) => void;\n /**\n * 当前画布订阅的实体数目\n */\n readonly size: number;\n}\n\nexport class PipelineEntitiesImpl implements PipelineEntities {\n protected observeEntities: Entity[] = [];\n\n protected observeDatas: EntityData[] = [];\n\n // @Action 这里要加多个缓存的原因是,每次 decorator 触发都会频繁调用获取方法,\"this.xxx\" 也会触发 decorator 方法\n protected entitiesTypeCache: Map<EntityRegistry, Entity[]> = new Map();\n\n protected entitiesAbleCache: Map<string, Entity[]> = new Map();\n\n protected entitiyDataCache: Map<string, EntityData[]> = new Map();\n\n constructor(protected readonly entityManager: EntityManager) {}\n\n get size(): number {\n return this.observeEntities.length;\n }\n\n /**\n * 加载订阅数据,会缓存到 layer 内部,layer 只能拿到订阅数据的子集\n * @param observeEntites\n * @param observeDatas\n */\n load(observeEntites: Entity[], observeDatas: EntityData[]): void {\n this.observeEntities = observeEntites;\n this.observeDatas = observeDatas;\n // clear cache\n this.entitiesTypeCache.clear();\n this.entitiesAbleCache.clear();\n this.entitiyDataCache.clear();\n }\n\n get<T extends Entity>(registry: EntityRegistry, id?: string): T | undefined {\n const entities = this.getEntities(registry) as T[];\n if (id !== undefined) {\n return entities.find(e => e.id === id);\n }\n return entities[0];\n }\n\n has(registy: EntityRegistry): boolean {\n return !!this.get(registy);\n }\n\n getEntities<T extends Entity>(registry: EntityRegistry): T[] {\n let result = this.entitiesTypeCache.get(registry) as T[];\n // 缓存查询结果\n if (!result) {\n result = [];\n this.observeEntities.forEach(e => {\n if (e.type === registry.type) result!.push(e as T);\n });\n this.entitiesTypeCache.set(registry, result);\n }\n // 可能会出现延迟更新\n return result.filter(r => !r.disposed);\n }\n\n getEntityDatas<T extends EntityData = EntityData>(\n entityRegistry: EntityRegistry,\n dataRegistry: T,\n ): T[] {\n const dataKey = `${entityRegistry.type}:${dataRegistry.type}`;\n let result = this.entitiyDataCache.get(dataKey) as T[];\n if (result) {\n return result;\n }\n result = this.observeDatas.filter(\n data => data.type === dataRegistry.type && data.entity.type === entityRegistry.type,\n ) as T[];\n this.entitiyDataCache.set(dataKey, result);\n return result;\n }\n\n // getEntitiesByAble<T extends Entity = Entity>(able: AbleRegistry): T[] {\n // return this.getEntitiesByAbles([able]);\n // }\n\n // getEntitiesByAbles<T extends Entity = Entity>(\n // andAbles: AbleRegistry[] = [],\n // orAbles: AbleRegistry[] = [],\n // ): T[] {\n // const ableKey = `${andAbles.map(a => a.type).join(':')}_${orAbles.map(a => a.type).join(':')}`;\n // let result = this.entitiesAbleCache.get(ableKey) as T[];\n // // 缓存查询结果\n // if (!result) {\n // result = [];\n // this.observeEntities.forEach(entity => {\n // const checkAnd = andAbles.length === 0 || !andAbles.find(able => !entity.ables.has(able));\n // const checkOr = orAbles.length === 0 || orAbles.find(able => entity.ables.has(able));\n // if (checkAnd && checkOr) {\n // result.push(entity as T);\n // }\n // });\n // this.entitiesAbleCache.set(ableKey, result);\n // }\n // // 可能会出现延迟更新\n // return result.filter(r => !r.disposed);\n // }\n\n updateConfig<E extends ConfigEntity>(\n registry: EntityRegistry,\n props: Partial<E['config']>,\n ): void {\n const entity = this.get(registry) as ConfigEntity;\n /* v8 ignore next 3 */\n if (entity && entity.updateConfig) {\n entity.updateConfig(props);\n }\n }\n\n getConfig<E extends ConfigEntity>(registry: EntityRegistry): E['config'] | undefined {\n const entity = this.get(registry) as ConfigEntity;\n /* v8 ignore next 3 */\n if (entity) {\n return entity.config;\n }\n }\n\n /**\n * 创建实体\n */\n createEntity<E extends Entity>(\n registry: EntityRegistry,\n opts?: Omit<E['__opts_type__'], 'entityManager'>,\n ): E {\n return this.entityManager.createEntity<E>(registry, opts);\n }\n\n /**\n * 批量删除实体\n */\n removeEntities(registry: EntityRegistry): void {\n this.entityManager.removeEntities(registry);\n }\n\n [Symbol.iterator](): Iterator<Entity> {\n let index = 0;\n const len = this.observeEntities.length;\n return {\n next: () => {\n const current = index++;\n const done = current === len;\n return {\n value: this.observeEntities[current],\n done,\n };\n },\n };\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport {\n ConflatableMessage,\n type IMessageHandler,\n type Message,\n MessageLoop,\n} from '@phosphor/messaging';\nimport { Disposable, DisposableCollection, Emitter } from '@flowgram-vue/utils';\n\nimport { type Layer, type LayerRegistry, PlaygroundConfigEntity } from '../layer';\nimport {\n // AbleManager,\n ConfigEntity,\n Entity,\n EntityManager,\n // getAbleMetadata,\n getEntityDatasMetadata,\n getEntityMetadata,\n injectPlaygroundContext,\n PlaygroundContext,\n} from '../../common';\nimport { PipelineRenderer } from './pipeline-renderer';\nimport { PipelineEntitiesSelector } from './pipeline-entities-selector';\nimport { PipelineEntitiesImpl } from './pipeline-entities';\n// import { PipelineDispatcher } from './pipeline-dispatcher';\nimport {\n type PipeEventName,\n type PipelineDimension,\n type PipelineEventHandler,\n type PipelineEventRegsiter,\n PipelineLayerFactory,\n type PipeSupportEvent,\n} from './pipeline';\n\nexport enum PipelineMessage {\n ZOOM = 'PIPELINE_ZOOM',\n SCROLL = 'PIPELINE_SCROLL',\n}\nconst zoomMessage = new ConflatableMessage(PipelineMessage.ZOOM);\nconst scrollMessage = new ConflatableMessage(PipelineMessage.SCROLL);\n/**\n * pipeline 注册器,用于注册一些事件\n */\n@injectable()\nexport class PipelineRegistry implements Disposable, IMessageHandler {\n private _isFocused = false;\n\n protected toDispose = new DisposableCollection();\n\n protected allLayersMap = new Map<LayerRegistry, Layer>();\n\n readonly onResizeEmitter = new Emitter<PipelineDimension>();\n\n readonly onFocusEmitter = new Emitter<void>();\n\n readonly onBlurEmitter = new Emitter<void>();\n\n readonly onZoomEmitter = new Emitter<number>();\n\n readonly onScrollEmitter = new Emitter<{ scrollX: number; scrollY: number }>();\n\n readonly onFocus = this.onFocusEmitter.event;\n\n readonly onBlur = this.onBlurEmitter.event;\n\n readonly onZoom = this.onZoomEmitter.event;\n\n readonly onScroll = this.onScrollEmitter.event;\n\n constructor() {\n this.toDispose.pushAll([\n this.onResizeEmitter,\n this.onFocusEmitter,\n this.onZoomEmitter,\n this.onBlurEmitter,\n this.onScrollEmitter,\n ]);\n this.onFocusEmitter.event(() => {\n this._isFocused = true;\n });\n this.onBlurEmitter.event(() => {\n this._isFocused = false;\n });\n }\n\n // @inject(PipelineDispatcher) dispatcher: PipelineDispatcher;\n\n @inject(PipelineRenderer) renderer: PipelineRenderer;\n\n @inject(PipelineEntitiesSelector) selector: PipelineEntitiesSelector;\n\n @inject(EntityManager) entityManager: EntityManager;\n\n // @inject(AbleManager) ableManager: AbleManager;\n\n @injectPlaygroundContext() context: PlaygroundContext;\n\n @inject(PipelineLayerFactory) layerFactory: PipelineLayerFactory;\n\n // @inject(SelectionService) @optional() selectionService?: SelectionService;\n protected playgroundEvents: {\n [key: string]: { handlers: PipelineEventRegsiter[] } & Disposable;\n } = {};\n\n protected globalEvents: {\n [key: string]: { handlers: PipelineEventRegsiter[] } & Disposable;\n } = {};\n\n _listenEvent(\n name: PipeEventName,\n handle: PipelineEventHandler,\n isGlobal: boolean,\n priority = 0,\n options?: AddEventListenerOptions\n ): Disposable {\n const eventsCache = isGlobal ? this.globalEvents : this.playgroundEvents;\n const domNode = isGlobal ? document : this.renderer.node.parentNode!;\n let eventRegister = eventsCache[name];\n if (!eventRegister) {\n const realHandler = {\n handleEvent: (e: PipeSupportEvent) => {\n const list = eventRegister.handlers;\n for (let i = 0, len = list.length; i < len; i++) {\n const prevent = list[i].handle(e);\n /* v8 ignore next 1 */\n if (prevent) return;\n }\n },\n };\n domNode.addEventListener(name, realHandler, options);\n eventRegister = eventsCache[name] = {\n handlers: [],\n dispose: () => {\n domNode.removeEventListener(name, realHandler);\n delete eventsCache[name];\n },\n };\n }\n const { handlers } = eventRegister;\n const item = { handle, priority };\n /**\n * handlers 排序:\n * 1. 后注册先执行 (符合冒泡规则)\n * 2. 按 priority 排序\n */\n handlers.unshift(item);\n handlers.sort((a, b) => b.priority - a.priority);\n const dispose = Disposable.create(() => {\n const index = eventRegister.handlers.indexOf(item);\n if (index !== -1) eventRegister.handlers.splice(index, 1);\n if (eventRegister.handlers.length === 0) {\n eventRegister.dispose();\n }\n });\n this.toDispose.push(dispose);\n return dispose;\n }\n\n /**\n * 监听画布上的浏览器事件\n */\n listenPlaygroundEvent(\n name: PipeEventName,\n handle: (event: PipeSupportEvent) => boolean | undefined,\n priority?: number,\n options?: AddEventListenerOptions\n ): Disposable {\n return this._listenEvent(name, handle, false, priority, options);\n }\n\n /**\n * 监听全局的事件\n * @param name\n * @param handle\n */\n listenGlobalEvent(\n name: PipeEventName,\n handle: (event: PipeSupportEvent) => boolean | undefined,\n priority?: number,\n options?: AddEventListenerOptions\n ): Disposable {\n return this._listenEvent(name, handle, true, priority, options);\n }\n\n /**\n * 注册 layer\n * @param layerRegistry\n * @param layerOptions 配置\n */\n registerLayer<P extends Layer = Layer>(\n layerRegistry: LayerRegistry<P>,\n layerOptions?: P['options']\n ): void {\n // layer 不允许重复添加\n if (this.allLayersMap.has(layerRegistry)) return;\n const layer = this.layerFactory(layerRegistry, layerOptions);\n this.allLayersMap.set(layerRegistry, layer);\n // const ableRegistries = getAbleMetadata(layerRegistry);\n const entityRegistries = getEntityMetadata(layerRegistry);\n const entityDataRegistries = getEntityDatasMetadata(layerRegistry);\n // ableRegistries.forEach(r => this.ableManager.registerAble(r));\n entityRegistries.forEach((r) => {\n this.entityManager.registerEntity(r);\n if (Entity.isRegistryOf(r, ConfigEntity)) {\n // 自动创建注册的 entity\n this.entityManager.createEntity(r);\n }\n });\n entityDataRegistries.forEach((r) => {\n this.entityManager.registerEntity(r.entity);\n this.entityManager.registerEntityData(r.data);\n });\n // this.selector.subscribeAVbles(layer, ableRegistries);\n this.selector.subscribeEntities(layer, entityRegistries);\n entityDataRegistries.forEach((r) =>\n this.selector.subscribleEntityByData(layer, r.entity, r.data)\n );\n layer.observeManager = new PipelineEntitiesImpl(this.entityManager);\n // layer.commands = this.commands;\n // layer.menus = this.menus;\n // layer.keybindings = this.keybindings;\n // layer.selectionService = this.selectionService;\n layer.reloadEntities = () => {\n const result = this.selector.getLayerData(layer);\n if (result.changed) {\n (layer.observeManager as PipelineEntitiesImpl).load(\n result.observeEntities,\n result.observeDatas\n );\n }\n return result.changed;\n };\n // layer.dispatch = (payloadKey: string | symbol, payloadValue: object, cb?: () => void) => {\n // const changedEntities = this.dispatcher.dispatch(payloadKey, payloadValue);\n // if (cb) {\n // if (changedEntities.length > 0) {\n // const changed = layer.reloadEntities();\n // if (changed && layer.autorun) layer.autorun();\n // }\n // cb();\n // }\n // };\n // @ts-ignore\n layer.listenPlaygroundEvent = this.listenPlaygroundEvent.bind(this);\n // @ts-ignore\n layer.listenGlobalEvent = this.listenGlobalEvent.bind(this);\n layer.config = this.configEntity;\n layer.getOtherLayer = this.getLayer.bind(this);\n Object.defineProperty(layer, 'isFocused', {\n get: () => this._isFocused,\n });\n if (layer.onResize) {\n this.onResize(layer.onResize.bind(layer));\n }\n if (layer.onBlur) {\n this.onBlurEmitter.event(layer.onBlur.bind(layer));\n }\n if (layer.onFocus) {\n this.onFocusEmitter.event(layer.onFocus.bind(layer));\n }\n if (layer.onZoom) {\n this.onZoomEmitter.event(layer.onZoom.bind(layer));\n }\n if (layer.onScroll) {\n this.onScrollEmitter.event(layer.onScroll.bind(layer));\n }\n if (layer.onViewportChange) {\n const viewportChange = layer.onViewportChange.bind(layer);\n this.onResize(viewportChange);\n this.onZoomEmitter.event(viewportChange);\n this.onScrollEmitter.event(viewportChange);\n }\n if (layer.onReadonlyOrDisabledChange) {\n this.configEntity.onReadonlyOrDisabledChange(layer.onReadonlyOrDisabledChange.bind(layer));\n }\n this.renderer.addLayer(layer);\n }\n\n /**\n * 获取 layer\n */\n getLayer<T extends Layer>(layerRegistry: LayerRegistry<T>): T | undefined {\n return this.allLayersMap.get(layerRegistry) as T;\n }\n\n get configEntity(): PlaygroundConfigEntity {\n return this.entityManager.getEntity<PlaygroundConfigEntity>(PlaygroundConfigEntity, true)!;\n }\n\n ready(): void {\n const config = this.configEntity;\n let lastScale = config.finalScale;\n let lastScroll = config.scrollData;\n // 监听 zoom\n config.onConfigChanged(() => {\n /* v8 ignore next 10 */\n const newScale = config.finalScale;\n const newScroll = config.scrollData;\n if (newScale !== lastScale) {\n lastScale = newScale;\n if (process.env.NODE_ENV === 'test') {\n this.processMessage(zoomMessage);\n } else {\n MessageLoop.postMessage(this, zoomMessage);\n }\n }\n if (lastScroll.scrollX !== newScroll.scrollX || lastScroll.scrollY !== newScroll.scrollY) {\n lastScroll = newScroll;\n if (process.env.NODE_ENV === 'test') {\n this.processMessage(scrollMessage);\n } else {\n MessageLoop.postMessage(this, scrollMessage);\n }\n }\n });\n }\n\n processMessage(msg: Message): void {\n const config = this.configEntity;\n switch (msg.type) {\n case PipelineMessage.SCROLL:\n this.onScrollEmitter.fire(config.scrollData);\n break;\n case PipelineMessage.ZOOM:\n this.onZoomEmitter.fire(config.finalScale);\n break;\n default:\n }\n }\n\n /**\n * pipline 大小变化时候会触发\n */\n readonly onResize = this.onResizeEmitter.event;\n\n dispose(): void {\n this.toDispose.dispose();\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type { interfaces } from 'inversify';\nimport type { InjectionKey } from 'vue';\n\nimport type { Playground } from '../playground';\n\nexport const PlaygroundVueContextKey: InjectionKey<any> = Symbol('PlaygroundVueContext');\n\nexport const PlaygroundVueContainerKey: InjectionKey<interfaces.Container> = Symbol(\n 'PlaygroundVueContainer'\n);\n\nexport const PlaygroundVueRefKey: InjectionKey<Playground> = Symbol('PlaygroundVueRef');\n\n/**\n * 当前 entity\n */\nexport const PlaygroundEntityContextKey: InjectionKey<any> = Symbol('PlaygroundEntityContext');\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// import {\n// PlaygroundConfigEntity,\n// SelectorBoxConfigEntity,\n// SnaplineConfigEntity,\n// EditorStateConfigEntity,\n// } from './core/layer/config';\nimport {\n // AlignLayer,\n type EditorState,\n type LayerRegistry,\n // SelectorBoxLayer,\n // SelectorLayer,\n // SnaplineLayer,\n} from './core/layer';\n// import { SelectableEntity } from './core/entity';\n// import { Selectable } from './core/able/selectable';\n// import { Dragable, Resizable } from './core/able';\nimport { type ConfigEntity, type EntityRegistry } from './common';\n\nexport const PlaygroundConfig = Symbol('PlaygroundConfig');\n\n/**\n * 画布配置\n */\nexport interface PlaygroundConfig {\n layers?: LayerRegistry[]; // 渲染分层\n // ables?: AbleRegistry[]; // 能力\n // entities?: EntityRegistry[]; // 数据实体\n editorStates?: EditorState[]; // 编辑态切换\n width?: number; // 画布的初始宽度\n height?: number; // 画布的初始高度\n node?: HTMLElement; // 画布的容器节点\n autoFocus?: boolean; // 自动 focus 及 blur,默认 true\n autoResize?: boolean; // 监听变化\n zoomEnable?: boolean; // 是否支持缩放,默认 true\n contextMenuPath?: string[]; // 右键菜单路径\n entityConfigs?: Map<EntityRegistry<ConfigEntity>, any>;\n context?: any; // 注入到 layer 中的上下文数据\n}\n\n/**\n * 默认配置\n */\nexport function createDefaultPlaygroundConfig(): PlaygroundConfig {\n return {\n autoFocus: true,\n autoResize: true,\n zoomEnable: true,\n layers: [\n // PlaygroundLayer, // 基础配置\n // SelectorLayer, // 节点选择器\n // SelectorBoxLayer, // 选择框\n // SnaplineLayer, // 参考线\n // AlignLayer, // 对齐线\n ],\n // ables: [Dragable, Selectable, Resizable],\n // entities: [\n // SelectableEntity,\n // SnaplineConfigEntity,\n // PlaygroundConfigEntity,\n // SelectorBoxConfigEntity,\n // EditorStateConfigEntity,\n // ],\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\n\nimport { PlaygroundConfig } from './playground-config';\nimport { type Playground } from './playground';\nimport {\n PipelineRegistry,\n type EditorState,\n EditorStateConfigEntity,\n type LayerRegistry,\n} from './core';\nimport { EntityManager, type EntityRegistry } from './common';\n\nexport const PlaygroundContribution = Symbol('PlaygroundContribution');\n\nexport interface PlaygroundContribution {\n /**\n * 注册 Layer/Entity/Able 相关\n * @param registry\n * @deprecated\n */\n registerPlayground?(registry: PlaygroundRegistry): void;\n /**\n * 初始化画布 (onReady 之前)\n * @param playground\n */\n onInit?(playground: Playground): void;\n /**\n * 初始化 entity 完毕后触发\n * @param playground\n */\n onReady?(playground: Playground): void;\n /**\n * 销毁\n * @param playground\n */\n onDispose?(playground: Playground): void;\n\n /**\n * 所有 Layer 第一次渲染完毕后触发\n * @param playground\n */\n onAllLayersRendered?(playground: Playground): void;\n}\n\n@injectable()\nexport class PlaygroundRegistry {\n @inject(PipelineRegistry) protected readonly pipeline: PipelineRegistry;\n\n // @inject(AbleManager) readonly ableManager: AbleManager;\n\n @inject(EntityManager) readonly entityManager: EntityManager;\n\n @inject(PlaygroundConfig) readonly playgroundConfig: PlaygroundConfig;\n\n config(config: Partial<PlaygroundConfig>): void {\n Object.assign(this.playgroundConfig, config);\n }\n\n registerLayer(layerRegistry: LayerRegistry): void {\n this.pipeline.registerLayer(layerRegistry);\n }\n\n registerEntity(entityRegistry: EntityRegistry): void {\n this.entityManager.registerEntity(entityRegistry);\n }\n\n // registerAble(ableRegistry: AbleRegistry): void {\n // this.ableManager.registerAble(ableRegistry);\n // }\n\n registerEditorState(state: EditorState): void {\n const stateConfig =\n this.entityManager.getEntity<EditorStateConfigEntity>(EditorStateConfigEntity);\n stateConfig?.registerState(state);\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { ContainerModule, interfaces } from 'inversify';\n\nimport { PlaygroundContribution } from '../playground-contribution';\nimport { type Playground } from '../playground';\n\nexport interface PluginContext {\n /**\n * 画布实例\n */\n playground: Playground;\n /**\n * IOC 容器\n */\n container: interfaces.Container;\n /**\n * 获取 IOC 容器的 单例模块\n * @param identifier\n */\n get<T>(identifier: interfaces.ServiceIdentifier<T>): T;\n\n /**\n * 获取 IOC 容器的 多例模块\n */\n getAll<T>(identifier: interfaces.ServiceIdentifier<T>): T[];\n}\n\nexport const PluginContext = Symbol('PluginContext');\nexport interface PluginBindConfig {\n bind: interfaces.Bind;\n unbind: interfaces.Unbind;\n isBound: interfaces.IsBound;\n rebind: interfaces.Rebind;\n}\n\nexport interface PluginConfig<Opts, CTX extends PluginContext = PluginContext> {\n /**\n * 插件 IOC 注册, 等价于 containerModule\n * @param ctx\n */\n onBind?: (bindConfig: PluginBindConfig, opts: Opts) => void;\n /**\n * 画布注册阶段\n */\n onInit?: (ctx: CTX, opts: Opts) => void;\n /**\n * 画布准备阶段,一般用于 dom 事件注册等\n */\n onReady?: (ctx: CTX, opts: Opts) => void;\n /**\n * 画布销毁阶段\n */\n onDispose?: (ctx: CTX, opts: Opts) => void;\n /**\n * 画布所有 layer 渲染结束\n */\n onAllLayersRendered?: (ctx: CTX, opts: Opts) => void;\n /**\n * IOC 模块,用于更底层的插件扩展\n */\n containerModules?: interfaces.ContainerModule[];\n}\n\nexport const Plugin = Symbol('Plugin');\n\nexport type Plugin<Options = any> = {\n options: Options;\n pluginId: string;\n singleton: boolean;\n initPlugin: () => void;\n contributionKeys?: interfaces.ServiceIdentifier[];\n containerModules?: interfaces.ContainerModule[];\n};\n\nexport interface PluginsProvider<CTX extends PluginContext = PluginContext> {\n (ctx: CTX): Plugin[];\n}\n\nexport type PluginCreator<Options> = (opts: Options) => Plugin<Options>;\n\nexport function loadPlugins(plugins: Plugin[], container: interfaces.Container): void {\n const pluginInitSet = new Set<string>();\n const singletonPluginIds = new Set<string>();\n const modules: interfaces.ContainerModule[] = plugins\n .reduceRight((result: Plugin[], plugin: Plugin) => {\n const shouldSkip = plugin.singleton && singletonPluginIds.has(plugin.pluginId);\n if (plugin.singleton) {\n singletonPluginIds.add(plugin.pluginId);\n }\n return shouldSkip ? result : [plugin, ...result];\n }, [])\n .reduce((res, plugin) => {\n if (!pluginInitSet.has(plugin.pluginId)) {\n plugin.initPlugin();\n pluginInitSet.add(plugin.pluginId);\n }\n if (plugin.containerModules && plugin.containerModules.length > 0) {\n for (let module of plugin.containerModules) {\n // 去重\n if (!res.includes(module)) {\n res.push(module);\n }\n }\n return res;\n }\n return res;\n }, [] as interfaces.ContainerModule[]);\n modules.forEach((module) => container.load(module));\n plugins.forEach((plugin) => {\n if (plugin.contributionKeys) {\n for (const contribution of plugin.contributionKeys) {\n container.bind(contribution).toConstantValue(plugin.options);\n }\n }\n });\n}\n\nfunction toPlaygroundContainerModule<Options, CTX extends PluginContext = PluginContext>(\n config: {\n onInit?: (ctx: CTX, opts: Options) => void;\n onDispose?: (ctx: CTX, opts: Options) => void;\n onReady?: (ctx: CTX, opts: Options) => void;\n onAllLayersRendered?: (ctx: CTX, opts: Options) => void;\n },\n opts: Options\n): interfaces.ContainerModule {\n return new ContainerModule((bind) => {\n bind(PlaygroundContribution).toDynamicValue((ctx) => {\n const pluginContext = ctx.container.get<CTX>(PluginContext);\n return {\n onInit: () => {\n config.onInit?.(pluginContext, opts);\n },\n onReady: () => {\n config.onReady?.(pluginContext, opts);\n },\n onDispose: () => {\n config.onDispose?.(pluginContext, opts);\n },\n onAllLayersRendered: () => {\n config.onAllLayersRendered?.(pluginContext, opts);\n },\n };\n });\n });\n}\n\nlet pluginIndex = 0;\nexport function definePluginCreator<Options, CTX extends PluginContext = PluginContext>(\n config: {\n containerModules?: interfaces.ContainerModule[];\n contributionKeys?: interfaces.ServiceIdentifier[];\n singleton?: boolean;\n } & PluginConfig<Options, CTX>\n): PluginCreator<Options> {\n const { contributionKeys, singleton = false } = config;\n pluginIndex += 1;\n const pluginId = `Playground_${pluginIndex}`;\n return (opts: Options) => {\n const containerModules: interfaces.ContainerModule[] = [];\n let isInit = false;\n\n return {\n pluginId,\n singleton,\n initPlugin: () => {\n // 防止 plugin 被上层业务多次 init\n if (isInit) {\n return;\n }\n isInit = true;\n\n if (config.containerModules) {\n containerModules.push(...config.containerModules);\n }\n if (config.onBind) {\n containerModules.push(\n new ContainerModule((bind, unbind, isBound, rebind) => {\n config.onBind!(\n {\n bind,\n unbind,\n isBound,\n rebind,\n },\n opts\n );\n })\n );\n }\n if (config.onInit || config.onDispose || config.onReady || config.onAllLayersRendered) {\n containerModules.push(toPlaygroundContainerModule<Options, CTX>(config, opts));\n }\n },\n options: opts,\n contributionKeys,\n containerModules,\n };\n };\n}\n\n/**\n * @example\n * createPlaygroundPlugin({\n * // IOC 注册\n * onBind(bind) {\n * bind('xxx').toSelf().inSingletonScope()\n * },\n * // 画布初始化\n * onInit(ctx) {\n * ctx.playground.registerLayer(MyLayer)\n * },\n * // 画布销毁\n * onDispose(ctx) {\n * },\n * // IOC 模块\n * containerModules: [new ContainerModule(() => {})]\n * })\n */\nexport const createPlaygroundPlugin = <CTX extends PluginContext = PluginContext>(\n options: PluginConfig<undefined, CTX>\n) => definePluginCreator<undefined, CTX>(options)(undefined);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Component } from 'vue';\nimport { inject, injectable, optional, named } from 'inversify';\nimport { Disposable, DisposableCollection, domUtils, type Event } from '@flowgram-vue/utils';\nimport { CommandService } from '@flowgram-vue/command';\n\nimport { SelectionService } from './services';\nimport { PlaygroundContribution, PlaygroundRegistry } from './playground-contribution';\nimport { PlaygroundConfig } from './playground-config';\nimport {\n type PipelineDimension,\n // PipelineDispatcher,\n PipelineRegistry,\n PipelineRenderer,\n} from './core/pipeline';\nimport {\n EditorStateConfigEntity,\n PlaygroundConfigEntity,\n type PlaygroundConfigRevealOpts,\n} from './core/layer/config';\nimport { Layer, LayerRegistry } from './core';\nimport {\n // type AbleDispatchEvent,\n // AbleManager,\n type ConfigEntity,\n EntityManager,\n type EntityRegistry,\n PlaygroundContext,\n ContributionProvider,\n PlaygroundContextProvider,\n} from './common';\n// import { PlaygroundCommandRegistry, PlaygroundId, toContextMenuPath } from './playground-registries';\n\n@injectable()\nexport class Playground<CONTEXT = PlaygroundContext> implements Disposable {\n readonly toDispose = new DisposableCollection();\n\n readonly node: HTMLElement;\n\n private _focused = false;\n\n readonly onBlur: Event<void>;\n\n readonly onFocus: Event<void>;\n\n readonly onZoom: Event<number>;\n\n readonly onScroll: Event<{ scrollX: number; scrollY: number }>;\n\n get onResize() {\n return this.pipelineRegistry.onResizeEmitter.event;\n }\n\n // 唯一 className,适配画布多实例场景\n private playgroundClassName = nanoid();\n\n constructor(\n // @inject(PlaygroundId) readonly id: PlaygroundId,\n @inject(EntityManager) readonly entityManager: EntityManager,\n @inject(PlaygroundRegistry) readonly registry: PlaygroundRegistry,\n @inject(PlaygroundContextProvider)\n @optional()\n readonly contextProvider: PlaygroundContextProvider,\n @inject(PipelineRenderer)\n readonly pipelineRenderer: PipelineRenderer,\n // @inject(PlaygroundCommandRegistry) protected readonly commands: PlaygroundCommandRegistry,\n @inject(PipelineRegistry)\n readonly pipelineRegistry: PipelineRegistry,\n // @inject(AbleManager) readonly ableManager: AbleManager,\n // @inject(PipelineDispatcher) protected readonly dispatcher: PipelineDispatcher,\n @inject(PlaygroundConfig)\n protected readonly playgroundConfig: PlaygroundConfig,\n @inject(ContributionProvider)\n @named(PlaygroundContribution)\n @optional()\n protected readonly contributionProvider: ContributionProvider<PlaygroundContribution>,\n /**\n * 用于管理画布命令\n */\n @inject(CommandService) readonly commandService: CommandService,\n /**\n * 用于管理画布选择\n */\n @inject(SelectionService) readonly selectionService: SelectionService\n ) {\n this.toDispose.pushAll([\n this.pipelineRenderer,\n this.pipelineRegistry,\n this.entityManager,\n // this.ableManager,\n this.commandService,\n this.selectionService,\n Disposable.create(() => {\n this.node.remove();\n }),\n pipelineRenderer.onAllLayersRendered(() => {\n this.contributions.forEach((contrib) => contrib.onAllLayersRendered?.(this));\n }),\n ]);\n // Deafult entities added\n const editStates =\n this.entityManager.createEntity<EditorStateConfigEntity>(EditorStateConfigEntity);\n this.entityManager.createEntity(PlaygroundConfigEntity);\n this.node = playgroundConfig.node || document.createElement('div');\n this.config.playgroundDomNode = this.node;\n this.toDispose.pushAll([\n // 浏览器原生的 scrollIntoView 会导致页面的滚动\n // 需要禁用这种操作,否则会引发画布 viewport 计算问题\n domUtils.addStandardDisposableListener(this.node, 'scroll', (event: UIEvent) => {\n this.node.scrollTop = 0;\n this.node.scrollLeft = 0;\n event.preventDefault();\n event.stopPropagation();\n }),\n ]);\n this.node.classList.add('gedit-playground');\n if (process.env.NODE_ENV !== 'test') {\n this.node.classList.add(this.playgroundClassName);\n }\n this.node.dataset.testid = 'sdk.workflow.canvas';\n if (playgroundConfig.layers)\n playgroundConfig.layers.forEach((layer) => this.registry.registerLayer(layer));\n // if (playgroundConfig.ables)\n // playgroundConfig.ables.forEach(able => this.ableManager.registerAble(able));\n // if (playgroundConfig.entities)\n // playgroundConfig.entities.forEach(entity => this.entityManager.registerEntity(entity));\n if (playgroundConfig.editorStates)\n playgroundConfig.editorStates.forEach((state) => editStates.registerState(state));\n if (playgroundConfig.zoomEnable !== undefined) this.zoomEnable = playgroundConfig.zoomEnable;\n if (playgroundConfig.entityConfigs) {\n for (const [k, v] of playgroundConfig.entityConfigs) {\n const entity = this.entityManager.getEntity<ConfigEntity>(k, true);\n entity?.updateConfig(v);\n }\n }\n this.node.addEventListener('blur', () => {\n this.blur();\n });\n this.node.addEventListener('focus', () => {\n this.focus();\n });\n this.node.tabIndex = 0;\n this.node.appendChild(this.pipelineRenderer.node);\n this.onBlur = this.pipelineRegistry.onBlurEmitter.event;\n this.onFocus = this.pipelineRegistry.onFocusEmitter.event;\n this.onZoom = this.pipelineRegistry.onZoomEmitter.event;\n this.onScroll = this.pipelineRegistry.onScrollEmitter.event;\n }\n\n get context(): CONTEXT {\n return this.contextProvider?.();\n }\n\n protected get contributions(): PlaygroundContribution[] {\n return this.contributionProvider.getContributions();\n }\n\n init(): void {\n const { contributions } = this;\n for (const contrib of contributions) {\n if (contrib.registerPlayground) contrib.registerPlayground(this.registry);\n }\n for (const contrib of contributions) {\n if (contrib.onInit) contrib.onInit(this);\n }\n }\n\n get pipelineNode(): HTMLDivElement {\n return this.pipelineRenderer.node;\n }\n\n setParent(parent: HTMLElement): void {\n parent.appendChild(this.node);\n this.resize();\n }\n\n // get onDispatch(): Event<AbleDispatchEvent> {\n // return this.ableManager.onAbleDispatch;\n // }\n\n /**\n * 对应的右键菜单路径\n */\n // get contextMenuPath(): string[] {\n // return this.playgroundConfig.contextMenuPath ? this.playgroundConfig.contextMenuPath : toContextMenuPath(this.id);\n // }\n get zoomEnable(): boolean {\n return this.config.zoomEnable;\n }\n\n set zoomEnable(zoomEnable) {\n this.config.zoomEnable = zoomEnable;\n }\n\n /**\n * 转换为内部的命令 id\n * @param commandId\n */\n // toPlaygroundCommandId(commandId: string): string {\n // return this.registry.commands.toCommandId(commandId);\n // }\n /**\n * 通知所有关联 able 的 entity\n */\n // dispatch<P>(payloadKey: string | symbol, payload: P): string[] {\n // return this.ableManager.dispatch(payloadKey, payload);\n // }\n\n /**\n * 刷新所有 layer\n */\n flush(): void {\n this.pipelineRenderer.flush();\n }\n\n /**\n * 执行命令\n * @param commandId\n * @param args\n */\n // execCommand<T>(commandId: string, ...args: any[]): Promise<T | undefined> {\n // return this.commands.executeCommand<T>(commandId, ...args);\n // }\n private isReady = false;\n\n ready(): void {\n if (this.isReady) return;\n this.isReady = true;\n if (this.playgroundConfig.autoResize) {\n const resize = () => {\n if (this.disposed) return;\n this.resize();\n };\n if (typeof ResizeObserver !== 'undefined') {\n const resizeObserver = new ResizeObserver(resize);\n resizeObserver.observe(this.node);\n this.toDispose.push(\n Disposable.create(() => {\n resizeObserver.disconnect();\n })\n );\n } else {\n this.toDispose.push(\n domUtils.addStandardDisposableListener(window.document.body, 'resize', resize, {\n passive: true,\n })\n );\n }\n this.resize();\n }\n this.pipelineRegistry.ready();\n this.pipelineRenderer.ready();\n const { contributions } = this;\n for (const contrib of contributions) {\n if (contrib.onReady) contrib.onReady(this);\n }\n }\n\n /**\n * 按下边顺序执行\n * 1. 指定的 entity 位置或 pos 位置\n * 2. selection 位置\n * 3. 初始化位置\n */\n scrollToView(opts?: PlaygroundConfigRevealOpts): Promise<void> {\n const playgroundEntity =\n this.entityManager.getEntity<PlaygroundConfigEntity>(PlaygroundConfigEntity)!;\n return playgroundEntity.scrollToView(opts);\n }\n\n /**\n * 这里会由 widget 透传进来\n * @param msg\n */\n resize(msg?: PipelineDimension, scrollToCenter = true): boolean {\n if (!msg) {\n const boundingRect = this.node.getBoundingClientRect();\n msg = {\n width: boundingRect.width,\n height: boundingRect.height,\n };\n }\n // 页面宽度变更 触发滚动偏移\n const { width, height } = this.config.config;\n if (msg.width === 0 || msg.height === 0) {\n return false;\n }\n const oldConfig = this.config.config;\n let { scrollX, scrollY } = this.config.config;\n // 这个在处理滚动\n if (scrollToCenter && width && Math.round(msg.width) !== width) {\n scrollX += (width - msg.width) / 2;\n }\n if (scrollToCenter && height && Math.round(msg.height) !== height) {\n scrollY += (height - msg.height) / 2;\n }\n if (\n Math.round(msg.width) !== width ||\n Math.round(msg.height) !== height ||\n oldConfig.scrollX !== scrollX ||\n oldConfig.scrollY !== scrollY\n ) {\n this.config.updateConfig({ ...msg, scrollX, scrollY });\n this.pipelineRegistry.onResizeEmitter.fire(msg);\n }\n return true;\n }\n\n /**\n * 触发 focus\n */\n protected focus(): void {\n if (this._focused) return;\n this._focused = true;\n this.pipelineRegistry.onFocusEmitter.fire();\n }\n\n /**\n * 触发 blur\n */\n protected blur(): void {\n if (!this._focused) return;\n this._focused = false;\n this.pipelineRegistry.onBlurEmitter.fire();\n }\n\n get focused(): boolean {\n return this._focused;\n }\n\n /**\n * 画布配置数据\n */\n get config(): PlaygroundConfigEntity {\n return this.entityManager.getEntity<PlaygroundConfigEntity>(PlaygroundConfigEntity)!;\n }\n\n /**\n * 画布编辑状态管理\n */\n get editorState(): EditorStateConfigEntity {\n return this.entityManager.getEntity<EditorStateConfigEntity>(EditorStateConfigEntity)!;\n }\n\n getConfigEntity<T extends ConfigEntity>(r: EntityRegistry<T>): T {\n return this.entityManager.getEntity<T>(r, true) as T;\n }\n\n dispose(): void {\n if (this.disposed) return;\n const { contributions } = this;\n for (const contrib of contributions) {\n if (contrib.onDispose) contrib.onDispose(this);\n }\n this.toDispose.dispose();\n }\n\n get disposed(): boolean {\n return this.toDispose.disposed;\n }\n\n /**\n * 转换成 Vue 组件\n */\n toVueComponent(): Component {\n return this.pipelineRenderer.toVueComponent();\n }\n\n /**\n * 注册 layer\n */\n registerLayer<P extends Layer = Layer>(\n layerRegistry: LayerRegistry<P>,\n layerOptions?: P['options']\n ): void {\n this.pipelineRegistry.registerLayer<P>(layerRegistry, layerOptions);\n }\n\n /**\n * 注册 多个 layer\n */\n registerLayers(...layerRegistries: LayerRegistry[]): void {\n layerRegistries.forEach((layer) => this.pipelineRegistry.registerLayer(layer));\n }\n\n /**\n * 获取 layer\n */\n getLayer<T extends Layer>(layerRegistry: LayerRegistry<T>): T | undefined {\n return this.pipelineRegistry.getLayer<T>(layerRegistry);\n }\n\n get onAllLayersRendered(): Event<void> {\n return this.pipelineRenderer.onAllLayersRendered;\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Container, ContainerModule, type interfaces } from 'inversify';\nimport { CommandService, CommandContainerModule } from '@flowgram-vue/command';\n\nimport { ContextMenuService } from './services/context-menu-service';\nimport {\n ClipboardService,\n DefaultClipboardService,\n LocalStorageService,\n SelectionService,\n StorageService,\n LoggerService,\n} from './services';\nimport { PluginContext } from './plugin';\nimport { PlaygroundContribution, PlaygroundRegistry } from './playground-contribution';\nimport { createDefaultPlaygroundConfig, PlaygroundConfig } from './playground-config';\nimport { Playground } from './playground';\nimport {\n type LayerRegistry,\n LayerOptions,\n // PipelineDispatcher,\n PipelineEntitiesSelector,\n PipelineLayerFactory,\n PipelineRegistry,\n PipelineRenderer,\n PlaygroundConfigEntity,\n LazyInjectContext,\n} from './core';\nimport {\n // AbleManager,\n bindConfigEntity,\n bindContributionProvider,\n bindPlaygroundContextProvider,\n EntityManager,\n PlaygroundContainerFactory,\n PlaygroundContext,\n removeInjectedProperties,\n} from './common';\n\nexport function createPluginContextDefault(container: interfaces.Container): PluginContext {\n return {\n container,\n playground: container.get(Playground),\n get<T>(identifier: interfaces.ServiceIdentifier): T {\n return container.get(identifier) as T;\n },\n getAll<T>(identifier: interfaces.ServiceIdentifier): T[] {\n return container.getAll(identifier) as T[];\n },\n };\n}\n\nexport function createPlaygroundLayerDefault(\n container: interfaces.Container,\n layerRegistry: LayerRegistry,\n options: any = {},\n) {\n const layerContainer = container.createChild();\n layerContainer.bind(layerRegistry).toSelf().inSingletonScope();\n layerContainer.bind(LayerOptions).toConstantValue(options);\n const layerInstance = layerContainer.get(layerRegistry);\n removeInjectedProperties(layerInstance);\n return layerInstance;\n}\n\nexport const PlaygroundContainerModule = new ContainerModule(bind => {\n // bind(AbleManager).toSelf().inSingletonScope();\n bind(EntityManager).toSelf().inSingletonScope();\n bind(PipelineRenderer).toSelf().inSingletonScope();\n bind(PlaygroundRegistry).toSelf().inSingletonScope();\n bind(Playground).toSelf().inSingletonScope();\n bind(PipelineEntitiesSelector).toSelf().inSingletonScope();\n bind(PipelineLayerFactory)\n .toDynamicValue(\n (context: interfaces.Context) => (layerRegistry: LayerRegistry, options?: any) =>\n createPlaygroundLayerDefault(context.container, layerRegistry, options),\n )\n .inSingletonScope();\n // bind(PipelineDispatcher).toSelf().inSingletonScope();\n bind(PipelineRegistry).toSelf().inSingletonScope();\n bind(PlaygroundContainerFactory)\n .toDynamicValue(ctx => ctx.container)\n .inSingletonScope();\n bind(PlaygroundConfig).toConstantValue(createDefaultPlaygroundConfig());\n bind(PlaygroundContext).toConstantValue({});\n bindPlaygroundContextProvider(bind);\n\n bind(LoggerService).toSelf().inSingletonScope();\n\n bind(ContextMenuService).toSelf().inSingletonScope();\n bind(SelectionService).toSelf().inSingletonScope();\n\n // 默认采用 LocalStorageService\n bind(StorageService).to(LocalStorageService).inSingletonScope();\n bind(ClipboardService).to(DefaultClipboardService).inSingletonScope();\n bindConfigEntity(bind, PlaygroundConfigEntity);\n bindContributionProvider(bind, PlaygroundContribution);\n bind(PluginContext)\n .toDynamicValue(ctx => createPluginContextDefault(ctx.container))\n .inSingletonScope();\n\n bind(LazyInjectContext).toService(PluginContext);\n});\n\nexport function createPlaygroundContainer(\n config?: PlaygroundConfig,\n parent?: interfaces.Container,\n container?: interfaces.Container,\n): interfaces.Container {\n const child = container || new Container({ defaultScope: 'Singleton' });\n if (parent) {\n child.parent = parent;\n }\n child.load(PlaygroundContainerModule);\n if (!child.isBound(CommandService)) {\n child.load(CommandContainerModule);\n }\n if (config) {\n child.rebind(PlaygroundConfig).toConstantValue(config);\n if (config.context) {\n child.rebind(PlaygroundContext).toConstantValue(config.context);\n }\n }\n return child;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\nimport { defineComponent, onBeforeUnmount, onMounted, provide, type PropType } from 'vue';\n\nimport { PluginContext, loadPlugins, type PluginsProvider } from '../plugin';\nimport { createPlaygroundContainer } from '../playground-container';\nimport { Playground } from '../playground';\nimport { PlaygroundContext } from '../common';\nimport {\n PlaygroundVueContainerKey,\n PlaygroundVueContextKey,\n PlaygroundVueRefKey,\n} from './playground-vue-context';\n\nexport interface PlaygroundVueProviderProps {\n containerModules?: interfaces.ContainerModule[];\n parentContainer?: interfaces.Container;\n playgroundContainer?: interfaces.Container;\n playgroundContext?: any;\n autoFocus?: boolean;\n autoResize?: boolean;\n zoomEnable?: boolean;\n plugins?: PluginsProvider<any>;\n customPluginContext?: (container: interfaces.Container) => PluginContext;\n}\n\n/**\n * Playground Vue 容器:创建 inversify 容器并 provide 给子组件\n */\nexport const PlaygroundVueProvider = defineComponent({\n name: 'PlaygroundVueProvider',\n props: {\n containerModules: Array as PropType<interfaces.ContainerModule[]>,\n parentContainer: Object as PropType<interfaces.Container>,\n playgroundContainer: Object as PropType<interfaces.Container>,\n playgroundContext: { type: null as unknown as PropType<any>, default: undefined },\n autoFocus: { type: Boolean, default: true },\n autoResize: { type: Boolean, default: true },\n zoomEnable: { type: Boolean, default: true },\n plugins: Function as PropType<PluginsProvider<any>>,\n customPluginContext: Function as PropType<(container: interfaces.Container) => PluginContext>,\n },\n setup(props, { slots, expose }) {\n const container = (() => {\n let flowContainer: interfaces.Container;\n if (props.playgroundContainer) {\n flowContainer = props.playgroundContainer;\n } else {\n flowContainer = createPlaygroundContainer(\n {\n autoFocus: props.autoFocus,\n autoResize: props.autoResize,\n zoomEnable: props.zoomEnable,\n },\n props.parentContainer\n );\n if (props.playgroundContext) {\n flowContainer.rebind(PlaygroundContext).toConstantValue(props.playgroundContext);\n }\n if (props.containerModules) {\n props.containerModules.forEach((module) => flowContainer.load(module));\n }\n }\n return flowContainer;\n })();\n\n const playground = (() => {\n const instance = container.get(Playground);\n let ctx: PluginContext;\n if (props.customPluginContext) {\n ctx = props.customPluginContext(container);\n container.rebind(PluginContext).toConstantValue(ctx);\n } else {\n ctx = container.get<PluginContext>(PluginContext);\n }\n if (props.plugins) {\n loadPlugins(props.plugins(ctx), container);\n }\n instance.init();\n return instance;\n })();\n\n provide(PlaygroundVueContainerKey, container);\n provide(PlaygroundVueRefKey, playground);\n provide(PlaygroundVueContextKey, props.playgroundContext);\n\n const pluginContext = container.get<PluginContext>(PluginContext);\n expose(pluginContext);\n\n let effectSignal = 0;\n onMounted(() => {\n effectSignal += 1;\n });\n onBeforeUnmount(() => {\n // 开发环境下延迟处理 dispose,防止 HMR / Strict 双调用卸载\n if (process.env.NODE_ENV === 'development') {\n const FRAME = 16;\n setTimeout(() => {\n effectSignal -= 1;\n if (effectSignal === 0) {\n playground.dispose();\n }\n }, FRAME);\n return;\n }\n playground.dispose();\n });\n\n return () => slots.default?.();\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject } from 'vue';\n\nimport { PlaygroundVueRefKey } from '../vue/playground-vue-context';\nimport { Playground } from '../playground';\n\n/**\n * 获取 playground\n */\nexport function usePlayground(): Playground {\n return inject(PlaygroundVueRefKey) as Playground;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\nimport { inject } from 'vue';\n\nimport { PlaygroundVueContainerKey } from '../vue/playground-vue-context';\n\n/**\n * 获取 playground inversify container\n */\nexport function usePlaygroundContainer(): interfaces.Container {\n return inject(PlaygroundVueContainerKey) as interfaces.Container;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type interfaces } from 'inversify';\n\nimport { usePlaygroundContainer } from './use-playground-container';\n\n/**\n * 获取画布的 IOC 模块\n * @param identifier\n */\nexport function useService<T>(identifier: interfaces.ServiceIdentifier<T>): T {\n const container = usePlaygroundContainer();\n return container.get?.(identifier) as T;\n}\n","<script setup lang=\"ts\">\n/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\nimport { onMounted, ref, type CSSProperties } from 'vue';\n\nimport { usePlayground } from '../composables/use-playground';\nimport { useService } from '../composables/use-service';\nimport { PlaygroundConfig } from '../playground-config';\n\ndefineOptions({ name: 'PlaygroundVueRenderer' });\n\nconst props = defineProps<{\n className?: string;\n style?: CSSProperties;\n}>();\n\nconst playground = usePlayground();\nconst playgroundConfig = useService<PlaygroundConfig>(PlaygroundConfig);\nconst containerRef = ref<HTMLElement>();\n\nonMounted(() => {\n if (!containerRef.value) {\n return;\n }\n playground.setParent(containerRef.value);\n playground.ready();\n if (playgroundConfig.autoFocus) {\n playground.node.focus();\n }\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n :class=\"['gedit-playground-container', props.className]\"\n :style=\"props.style\"\n />\n <Teleport v-if=\"$slots.default\" :to=\"playground.node\">\n <slot />\n </Teleport>\n</template>\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount } from 'vue';\n\nimport { Entity, EntityManager, EntityRegistry } from '../common';\nimport { useRefresh } from './use-refresh';\nimport { usePlaygroundContainer } from './use-playground-container';\n\n/**\n * 获取 entities 并监听变化\n * @deprecated\n */\nexport function useEntities<T extends Entity>(entityRegistry: EntityRegistry): T[] {\n const entityManager = usePlaygroundContainer().get(EntityManager);\n const refresh = useRefresh();\n const dispose = entityManager.onEntityChange((entityKey) => {\n if (entityKey === entityRegistry.type) {\n refresh();\n }\n });\n onBeforeUnmount(() => dispose.dispose());\n return entityManager.getEntities<T>(entityRegistry);\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, onBeforeUnmount } from 'vue';\n\nimport { Disposable } from '@flowgram-vue/utils';\n\nimport { PlaygroundEntityContextKey } from '../vue';\nimport { Entity, EntityManager } from '../common';\nimport { useRefresh } from './use-refresh';\nimport { usePlaygroundContainer } from './use-playground-container';\n\n/**\n * 从上下 PlaygroundEntityContext 获取 entity 并监听变化(默认不监听)\n */\nexport function useEntityFromContext<T extends Entity>(listenChange = false): T {\n const entityManager = usePlaygroundContainer().get(EntityManager);\n const entity = inject(PlaygroundEntityContextKey) as T;\n if (!entity) {\n throw new Error('[useEntityFromContext] Unknown entity from \"PlaygroundEntityContext\"');\n }\n const refresh = useRefresh(entity.version);\n const dispose = listenChange\n ? entity.onEntityChange(() => refresh(entity.version))\n : Disposable.NULL;\n onBeforeUnmount(() => dispose.dispose());\n void entityManager;\n return entity;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount } from 'vue';\n\nimport { EntityData, type EntityDataRegistry, EntityManager } from '../common';\nimport { useRefresh } from './use-refresh';\nimport { usePlaygroundContainer } from './use-playground-container';\nimport { useEntityFromContext } from './use-entity-from-context';\n\n/**\n * 从上下 PlaygroundEntityContext 获取 entity data 并监听变化 (默认不监听)\n */\nexport function useEntityDataFromContext<T extends EntityData>(\n dataRegistry: EntityDataRegistry<any>,\n listenChange = false\n): T {\n const entityManager = usePlaygroundContainer().get(EntityManager);\n const entityData = useEntityFromContext().getData<T>(dataRegistry)!;\n if (!entityData) {\n throw new Error(\n `[useEntityDataFromContext] Unknown entity Data ${dataRegistry.name} from \"PlaygroundEntityContext\".`\n );\n }\n const refresh = useRefresh(entityData.version);\n const dispose = entityData.onDataChange(() => {\n if (listenChange) refresh(entityData.version);\n });\n onBeforeUnmount(() => dispose.dispose());\n void entityManager;\n return entityData;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount } from 'vue';\n\nimport { DisposableCollection, type Event } from '@flowgram-vue/utils';\n\nimport { useRefresh } from './use-refresh';\n\n/**\n * 监听 event 事件变化\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useListenEvents(...events: Event<any>[]): void {\n const refresh = useRefresh();\n const collection = new DisposableCollection();\n collection.pushAll(events.map((e) => e(() => refresh())));\n onBeforeUnmount(() => collection.dispose());\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject } from 'vue';\n\nimport { PlaygroundVueContextKey } from '../vue/playground-vue-context';\n\n/**\n * 获取 playground context 数据\n */\nexport function usePlaygroundContext<T>(): T {\n return inject(PlaygroundVueContextKey) as T;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { onBeforeUnmount } from 'vue';\n\nimport { Disposable } from '@flowgram-vue/utils';\n\nimport { ConfigEntity, EntityManager, EntityRegistry } from '../common';\nimport { useRefresh } from './use-refresh';\nimport { usePlaygroundContainer } from './use-playground-container';\n\n/**\n * 获取 config entity\n */\nexport function useConfigEntity<T extends ConfigEntity>(\n entityRegistry: EntityRegistry<T>,\n listenChange = false\n): T {\n const entityManager = usePlaygroundContainer().get(EntityManager);\n const entity = entityManager.getEntity<T>(entityRegistry, true) as T;\n const refresh = useRefresh(entity.version);\n const dispose = listenChange\n ? entity.onEntityChange(() => {\n refresh(entity.version);\n })\n : Disposable.NULL;\n onBeforeUnmount(() => dispose.dispose());\n return entity;\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Disposable } from '@flowgram-vue/utils';\n\nimport { PlaygroundDragOptions, PlaygroundDrag } from '../core';\nimport { usePlayground } from './use-playground';\n\ninterface UsePlaygroundDragReturn {\n start<T = undefined>(\n e: { clientX: number; clientY: number },\n opts: PlaygroundDragOptions<T> & { context?: T }\n ): Disposable;\n}\n\nexport function usePlaygroundDrag(): UsePlaygroundDragReturn {\n const playground = usePlayground();\n return {\n start<T>(\n e: { clientX: number; clientY: number },\n opts: PlaygroundDragOptions<T> & { context?: T }\n ): Disposable {\n return PlaygroundDrag.startDrag(e.clientX, e.clientY, {\n ...opts,\n config: playground.config,\n });\n },\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { interfaces } from 'inversify';\n\nimport { createPlaygroundContainer, createPlaygroundLayerDefault } from './playground-container';\nimport { Playground } from './playground';\nimport { LayerRegistry, Layer, PipelineLayerFactory } from './core';\n\n/**\n * 画布测试工具\n *\n * @example\n *\n * 监听 layer 的执行\n * const layerState = PlaygroundMockTools.createLayerTestState(PlaygroundLayer)\n * layerState.playground.ready()\n * expect(layerState.onReady.mock.calls.length).toEqual(1)\n * expect(layerState.autorun.mock.calls.length).toEqual(1)\n * layerState.playground.config.updateConfig({\n * scrollX: 100\n * })\n * expect(layerState.onReady.mock.calls.length).toEqual(1)\n * expect(layerState.autorun.mock.calls.length).toEqual(2)\n */\nexport namespace PlaygroundMockTools {\n const LayerStateProvider = Symbol('LayerStateProvider');\n type LayerStateProvider = WeakMap<LayerRegistry, LayerTestState>;\n\n interface SpyInstance {\n mock: {\n calls: any[][];\n instances: any[];\n invocationCallOrder: any;\n results: { type: string; value: any }[];\n lastCall: any[];\n };\n }\n export class LayerTestState<T extends Layer = Layer> {\n autorun: SpyInstance;\n\n render: SpyInstance;\n\n onReady: SpyInstance;\n\n onResize: SpyInstance;\n\n onFocus: SpyInstance;\n\n onBlur: SpyInstance;\n\n onZoom: SpyInstance;\n\n onScroll: SpyInstance;\n\n onViewportChange: SpyInstance;\n\n onReadonlyOrDisabledChange: SpyInstance;\n\n constructor(\n readonly instance: T,\n readonly playground: Playground,\n readonly container: interfaces.Container\n ) {\n this.hijackMethod(instance, 'autorun');\n this.hijackMethod(instance, 'render');\n this.hijackMethod(instance, 'onReady');\n this.hijackMethod(instance, 'onResize');\n this.hijackMethod(instance, 'onFocus');\n this.hijackMethod(instance, 'onBlur');\n this.hijackMethod(instance, 'onZoom');\n this.hijackMethod(instance, 'onScroll');\n this.hijackMethod(instance, 'onViewportChange');\n this.hijackMethod(instance, 'onReadonlyOrDisabledChange');\n }\n\n private hijackMethod(layer: Layer, layerMethod: keyof Layer & keyof LayerTestState): void {\n if (typeof layer[layerMethod] === 'function') {\n // vi should be global\n // @ts-ignore\n (this as any)[layerMethod] = vi.spyOn(layer as any, layerMethod);\n }\n }\n }\n\n export function createContainer(modules?: interfaces.ContainerModule[]): interfaces.Container {\n const container = createPlaygroundContainer();\n container.bind(LayerStateProvider).toConstantValue(new WeakMap());\n container\n .rebind(PipelineLayerFactory)\n .toDynamicValue((context) => (layerRegistry: LayerRegistry, options?: any) => {\n const layerInstance = createPlaygroundLayerDefault(\n context.container,\n layerRegistry,\n options\n );\n context.container\n .get<LayerStateProvider>(LayerStateProvider)\n .set(\n layerRegistry,\n new LayerTestState(layerInstance, container.get<Playground>(Playground), container)\n );\n return layerInstance;\n });\n if (modules) {\n modules.forEach((module) => container.load(module));\n }\n return container;\n }\n\n export function createPlayground(modules?: interfaces.ContainerModule[]): Playground {\n return createContainer(modules).get(Playground);\n }\n\n export function getLayerTestState<T extends Layer = Layer>(\n container: interfaces.Container,\n layerRegistry: LayerRegistry<T>\n ): LayerTestState<T> {\n return container\n .get<LayerStateProvider>(LayerStateProvider)\n .get(layerRegistry) as LayerTestState<T>;\n }\n\n /**\n * 创建layer, 并记录layer的回调数据\n * @param Layer\n * @param opts\n */\n export function createLayerTestState<T extends Layer = Layer>(\n layerRegistry: LayerRegistry<T>,\n opts?: any,\n modules?: interfaces.ContainerModule[]\n ): LayerTestState<T> {\n const container = createContainer(modules);\n const playground = container.get<Playground>(Playground);\n playground.registerLayer(layerRegistry, opts);\n playground.init();\n playground.ready();\n return getLayerTestState(container, layerRegistry);\n }\n}\n"]}