From 0316ec20e23ceb282dc7448663f7f355bf00230b Mon Sep 17 00:00:00 2001 From: MinHo Lim Date: Tue, 23 Dec 2025 11:34:31 +0900 Subject: [PATCH 1/3] fix cellsable --- src/display/mixins/Cellsable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/display/mixins/Cellsable.js b/src/display/mixins/Cellsable.js index c5d07bb7..ad627c5e 100644 --- a/src/display/mixins/Cellsable.js +++ b/src/display/mixins/Cellsable.js @@ -41,6 +41,7 @@ export const Cellsable = (superClass) => { item.destroy({ children: true }); } }); + this.context.viewport.emit('object_transformed', this); } }; MixedClass.registerHandler( From fdc168341fc326a8cfe260f05f3d6df1a811235f Mon Sep 17 00:00:00 2001 From: MinHo Lim Date: Tue, 23 Dec 2025 11:34:50 +0900 Subject: [PATCH 2/3] fix: add key and args properties to State class --- src/events/StateManager.js | 2 +- src/events/states/SelectionState.js | 9 ++++++--- src/events/states/State.js | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/events/StateManager.js b/src/events/StateManager.js index 5db5d5bd..e32321e3 100644 --- a/src/events/StateManager.js +++ b/src/events/StateManager.js @@ -124,7 +124,7 @@ export default class StateManager extends WildcardEventEmitter { let instance = stateDef.instance; if (!instance || !stateDef.isSingleton) { const StateClass = stateDef.Class; - instance = new StateClass(); + instance = new StateClass(name); if (stateDef.isSingleton) { stateDef.instance = instance; } diff --git a/src/events/states/SelectionState.js b/src/events/states/SelectionState.js index eddc955b..e02ea3ee 100644 --- a/src/events/states/SelectionState.js +++ b/src/events/states/SelectionState.js @@ -93,8 +93,9 @@ export default class SelectionState extends State { * @param {object} context - The application context, containing the viewport. * @param {SelectionStateConfig} config - Configuration for the selection behavior. */ - enter(context, config = {}) { - super.enter(context); + enter(...args) { + super.enter(...args); + const [_, config] = args; this.config = deepMerge(defaultConfig, config); this.viewport = this.context.viewport; this.viewport.addChild(this._selectionBox); @@ -103,7 +104,9 @@ export default class SelectionState extends State { exit() { super.exit(); this.#clear({ state: true, selectionBox: true, gesture: true }); - this._selectionBox?.destroy(true); + if (this._selectionBox.parent) { + this._selectionBox.parent.removeChild(this._selectionBox); + } } pause() { diff --git a/src/events/states/State.js b/src/events/states/State.js index d10e2e67..0a07d427 100644 --- a/src/events/states/State.js +++ b/src/events/states/State.js @@ -31,7 +31,7 @@ export default class State { */ abortController = new AbortController(); - constructor() { + constructor(name) { /** * A reference to the shared context object provided by the StateManager. * This context typically contains references to global objects like the viewport, @@ -39,6 +39,7 @@ export default class State { * @type {object | null} */ this.context = null; + this.key = name; } /** @@ -49,8 +50,9 @@ export default class State { * * @param {object} context - The shared application context from the StateManager. */ - enter(context) { + enter(context, ...args) { this.context = context; + this.args = args; this.abortController = new AbortController(); } From fd7bfc9a8d49e6c25ddbcc3bfac4e5fc209df329 Mon Sep 17 00:00:00 2001 From: MinHo Lim Date: Tue, 23 Dec 2025 11:46:08 +0900 Subject: [PATCH 3/3] fix --- src/events/states/SelectionState.js | 3 +-- src/events/states/State.js | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/events/states/SelectionState.js b/src/events/states/SelectionState.js index e02ea3ee..c3658efd 100644 --- a/src/events/states/SelectionState.js +++ b/src/events/states/SelectionState.js @@ -90,8 +90,7 @@ export default class SelectionState extends State { /** * Enters the selection state with a given context and configuration. - * @param {object} context - The application context, containing the viewport. - * @param {SelectionStateConfig} config - Configuration for the selection behavior. + * @param {...*} args - Additional arguments passed to the state. */ enter(...args) { super.enter(...args); diff --git a/src/events/states/State.js b/src/events/states/State.js index 0a07d427..5d96b8cc 100644 --- a/src/events/states/State.js +++ b/src/events/states/State.js @@ -49,6 +49,7 @@ export default class State { * A new AbortController is created here for the state's lifecycle. * * @param {object} context - The shared application context from the StateManager. + * @param {...*} args - Additional arguments passed to the state. */ enter(context, ...args) { this.context = context;