@dnd-kit/abstract 0.1.1 → 0.1.2-beta-20250420020552
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs +5 -4
- package/index.cjs.map +1 -1
- package/index.d.cts +1 -1
- package/index.d.ts +1 -1
- package/index.js +5 -4
- package/index.js.map +1 -1
- package/package.json +3 -3
package/index.cjs
CHANGED
|
@@ -981,11 +981,11 @@ function DragOperationManager(manager) {
|
|
|
981
981
|
operation: snapshot(operation)
|
|
982
982
|
});
|
|
983
983
|
monitor.dispatch("beforedragstart", beforeStartEvent);
|
|
984
|
+
if (beforeStartEvent.defaultPrevented) {
|
|
985
|
+
reset();
|
|
986
|
+
return false;
|
|
987
|
+
}
|
|
984
988
|
manager.renderer.rendering.then(() => {
|
|
985
|
-
if (beforeStartEvent.defaultPrevented) {
|
|
986
|
-
reset();
|
|
987
|
-
return;
|
|
988
|
-
}
|
|
989
989
|
status.value = "initializing" /* Initializing */;
|
|
990
990
|
requestAnimationFrame(() => {
|
|
991
991
|
status.value = "dragging" /* Dragging */;
|
|
@@ -996,6 +996,7 @@ function DragOperationManager(manager) {
|
|
|
996
996
|
});
|
|
997
997
|
});
|
|
998
998
|
});
|
|
999
|
+
return true;
|
|
999
1000
|
},
|
|
1000
1001
|
move({
|
|
1001
1002
|
by,
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/core/plugins/utilities.ts","src/core/plugins/plugin.ts","src/core/plugins/registry.ts","src/core/collision/utilities.ts","src/core/collision/observer.ts","src/core/manager/events.ts","src/core/collision/notifier.ts","src/core/collision/types.ts","src/core/entities/entity/entity.ts","src/core/entities/entity/registry.ts","src/core/entities/draggable/draggable.ts","src/core/entities/droppable/droppable.ts","src/core/sensors/sensor.ts","src/core/modifiers/modifier.ts","src/core/manager/registry.ts","src/core/manager/dragOperation.ts","src/core/manager/renderer.ts","src/core/manager/manager.ts"],"names":["reactive","untracked","effect","descriptor","signal","effects","CollisionPriority","CollisionType","_disabled_dec","_init","_disabled","id","manager","cleanup","derived","_type_dec","_c","_type","Status","Position","computed","deepEqual","transform","operation","batch","dispose"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n PluginConstructor,\n PluginOptions,\n PluginDescriptor,\n InferPluginOptions,\n} from './types.ts';\n\nexport function configure<\n T extends PluginConstructor<any, any, any>,\n V extends PluginOptions = InferPluginOptions<T>,\n>(plugin: T, options: V): PluginDescriptor<any, any, T> {\n return {\n plugin,\n options,\n };\n}\n\nexport function configurator<T extends PluginConstructor<any, any, any>>(\n plugin: T\n) {\n return (options: InferPluginOptions<T>): PluginDescriptor<any, any, T> => {\n return configure(plugin, options);\n };\n}\n\nexport function descriptor<T extends PluginConstructor<any, any, any>>(\n plugin: T | PluginDescriptor<any, any, T>\n): PluginDescriptor<any, any, T> {\n if (typeof plugin === 'function') {\n return {\n plugin,\n options: undefined,\n };\n }\n\n return plugin;\n}\n","import {\n type CleanupFunction,\n effect,\n reactive,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {PluginOptions} from './types.ts';\nimport {configure} from './utilities.ts';\n\n/**\n * An abstract plugin class that can be extended to implement custom\n * functionality that augments the `DragDropManager`'s core capabilities.\n */\nexport abstract class Plugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> {\n constructor(\n public manager: T,\n public options?: U\n ) {}\n\n /**\n * Whether the plugin instance is disabled.\n * Triggers effects when accessed.\n */\n @reactive\n public accessor disabled: boolean = false;\n\n /**\n * Enable a disabled plugin instance.\n * Triggers effects.\n */\n public enable() {\n this.disabled = false;\n }\n\n /**\n * Disable an enabled plugin instance.\n * Triggers effects.\n */\n public disable() {\n this.disabled = true;\n }\n\n /**\n * Whether the plugin instance is disabled.\n * Does not trigger effects when accessed.\n */\n public isDisabled() {\n return untracked(() => {\n return this.disabled;\n });\n }\n\n /**\n * Configure a plugin instance with new options.\n */\n public configure(options?: U) {\n this.options = options;\n }\n\n #cleanupFunctions = new Set<CleanupFunction>();\n\n /**\n * Register an effect that will be cleaned up when the plugin instance is destroyed.\n * Returns a cleanup function that can be used to dispose of the effect.\n */\n protected registerEffect(callback: () => void) {\n const dispose = effect(callback.bind(this));\n\n this.#cleanupFunctions.add(dispose);\n\n return dispose;\n }\n\n /**\n * Destroy a plugin instance.\n */\n public destroy() {\n /*\n * Each plugin is responsible for implementing its own\n * destroy method to clean up effects and listeners\n */\n\n this.#cleanupFunctions.forEach((cleanup) => cleanup());\n }\n\n /**\n * Configure a plugin constructor with options.\n * This method is used to configure the options that the\n * plugin constructor will use to create plugin instances.\n */\n static configure(options: PluginOptions) {\n return configure(this as any, options);\n }\n}\n\nexport class CorePlugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> extends Plugin<T, U> {}\n","import {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin, type Plugin} from './plugin.ts';\nimport type {\n InferPluginOptions,\n PluginDescriptor,\n PluginConstructor,\n Plugins,\n} from './types.ts';\nimport {descriptor} from './utilities.ts';\n\nexport class PluginRegistry<\n T extends DragDropManager<any, any>,\n W extends PluginConstructor<T> = PluginConstructor<T>,\n U extends Plugin<T> = InstanceType<W>,\n> {\n private instances: Map<W, U> = new Map();\n\n constructor(private manager: T) {}\n\n public get values(): U[] {\n return Array.from(this.instances.values());\n }\n\n #previousValues: PluginConstructor<T>[] = [];\n\n public set values(entries: Plugins<T>) {\n const descriptors = entries\n .map(descriptor)\n .reduceRight<PluginDescriptor<T>[]>((acc, descriptor) => {\n if (acc.some(({plugin}) => plugin === descriptor.plugin)) {\n // Filter out duplicate plugins\n return acc;\n }\n\n return [descriptor, ...acc];\n }, []);\n const constructors = descriptors.map(({plugin}) => plugin);\n\n for (const plugin of this.#previousValues) {\n if (!constructors.includes(plugin)) {\n if (plugin.prototype instanceof CorePlugin) {\n continue;\n }\n\n this.unregister(plugin as W);\n }\n }\n\n for (const {plugin, options} of descriptors) {\n this.register(plugin as W, options as InferPluginOptions<W>);\n }\n\n this.#previousValues = constructors;\n }\n\n public get<X extends W>(plugin: X): InstanceType<X> | undefined {\n const instance = this.instances.get(plugin);\n\n return instance as any;\n }\n\n public register<X extends W>(\n plugin: X,\n options?: InferPluginOptions<X>\n ): InstanceType<X> {\n const existingInstance = this.instances.get(plugin);\n\n if (existingInstance) {\n if (existingInstance.options !== options) {\n existingInstance.options = options;\n }\n\n return existingInstance as InstanceType<X>;\n }\n\n const instance = new plugin(this.manager, options) as U;\n\n this.instances.set(plugin, instance);\n\n return instance as InstanceType<X>;\n }\n\n public unregister<X extends W>(plugin: X) {\n const instance = this.instances.get(plugin);\n\n if (instance) {\n instance.destroy();\n this.instances.delete(plugin);\n }\n }\n\n public destroy() {\n for (const plugin of this.instances.values()) {\n plugin.destroy();\n }\n\n this.instances.clear();\n }\n}\n","import {Collision} from './types.ts';\n\n/**\n * Sort collisions from greatest to smallest priority\n * Collisions of equal priority are sorted from greatest to smallest value\n */\nexport function sortCollisions(a: Collision, b: Collision) {\n if (a.priority === b.priority) {\n if (a.type === b.type) {\n return b.value - a.value;\n }\n\n return b.type - a.type;\n }\n\n return b.priority - a.priority;\n}\n","import {signal, untracked, type Signal, effects} from '@dnd-kit/state';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {Plugin} from '../plugins/index.ts';\nimport type {Collision, CollisionDetector, Collisions} from './types.ts';\nimport {sortCollisions} from './utilities.ts';\n\nconst DEFAULT_VALUE: Collisions = [];\n\nexport class CollisionObserver<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n V extends DragDropManager<T, U> = DragDropManager<T, U>,\n> extends Plugin<V> {\n constructor(manager: V) {\n super(manager);\n\n this.computeCollisions = this.computeCollisions.bind(this);\n this.#collisions = signal(DEFAULT_VALUE);\n\n this.destroy = effects(\n () => {\n const collisions = this.computeCollisions();\n const coordinates = untracked(\n () => this.manager.dragOperation.position.current\n );\n\n if (collisions !== DEFAULT_VALUE) {\n const previousCoordinates = this.#previousCoordinates;\n this.#previousCoordinates = coordinates;\n\n if (\n previousCoordinates &&\n coordinates.x == previousCoordinates.x &&\n coordinates.y == previousCoordinates.y\n ) {\n return;\n }\n } else {\n this.#previousCoordinates = undefined;\n }\n\n this.#collisions.value = collisions;\n },\n () => {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n this.forceUpdate();\n }\n }\n );\n }\n\n #previousCoordinates: Coordinates | undefined;\n\n public forceUpdate(immediate = true) {\n untracked(() => {\n if (immediate) {\n this.#collisions.value = this.computeCollisions();\n } else {\n this.#previousCoordinates = undefined;\n }\n });\n }\n\n public computeCollisions(\n entries?: Droppable[],\n collisionDetector?: CollisionDetector\n ) {\n const {registry, dragOperation} = this.manager;\n const {source, shape, status} = dragOperation;\n\n if (!status.initialized || !shape) {\n return DEFAULT_VALUE;\n }\n\n const collisions: Collision[] = [];\n const potentialTargets = [];\n\n for (const entry of entries ?? registry.droppables) {\n if (entry.disabled) {\n continue;\n }\n\n if (source && !entry.accepts(source)) {\n continue;\n }\n\n const detectCollision = collisionDetector ?? entry.collisionDetector;\n\n if (!detectCollision) {\n continue;\n }\n\n potentialTargets.push(entry);\n\n // Force collisions to be recomputed when the shape changes\n void entry.shape;\n\n const collision = untracked(() =>\n detectCollision({\n droppable: entry,\n dragOperation,\n })\n );\n\n if (collision) {\n if (entry.collisionPriority != null) {\n collision.priority = entry.collisionPriority;\n }\n\n collisions.push(collision);\n }\n }\n\n if (potentialTargets.length === 0) {\n return DEFAULT_VALUE;\n }\n\n collisions.sort(sortCollisions);\n\n return collisions;\n }\n\n public get collisions() {\n return this.#collisions.value;\n }\n\n #collisions: Signal<Collisions>;\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport type {Collisions} from '../collision/index.ts';\nimport type {DragDropManager} from './manager.ts';\nimport type {DragOperation} from './dragOperation.ts';\n\nexport type Events = Record<string, (...args: any[]) => void>;\n\nexport type Preventable<T> = T & {\n cancelable: boolean;\n defaultPrevented: boolean;\n preventDefault(): void;\n};\n\nclass Monitor<T extends Events> {\n private registry = new Map<keyof T, Set<T[keyof T]>>();\n\n public addEventListener<U extends keyof T>(name: U, handler: T[U]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.add(handler);\n registry.set(name, listeners);\n\n return () => this.removeEventListener(name, handler);\n }\n\n public removeEventListener(name: keyof T, handler: T[keyof T]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.delete(handler);\n registry.set(name, listeners);\n }\n\n protected dispatch<U extends keyof T>(name: U, ...args: any[]) {\n const {registry} = this;\n const listeners = registry.get(name);\n\n if (!listeners) {\n return;\n }\n\n for (const listener of listeners) {\n listener(...args);\n }\n }\n}\n\nexport type DragDropEvents<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = {\n collision(\n event: Preventable<{\n collisions: Collisions;\n }>,\n manager: V\n ): void;\n beforedragstart(\n event: Preventable<{\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragstart(\n event: {\n cancelable: false;\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n },\n manager: V\n ): void;\n dragmove(\n event: Preventable<{\n operation: DragOperation<T, U>;\n to?: Coordinates;\n by?: Coordinates;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragover(\n event: Preventable<{\n operation: DragOperation<T, U>;\n }>,\n manager: V\n ): void;\n dragend(\n event: {\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n canceled: boolean;\n suspend(): {resume(): void; abort(): void};\n },\n manager: V\n ): void;\n};\n\nexport class DragDropMonitor<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> extends Monitor<DragDropEvents<T, U, V>> {\n constructor(private manager: V) {\n super();\n }\n\n public dispatch<Key extends keyof DragDropEvents<T, U, V>>(\n type: Key,\n event: Parameters<DragDropEvents<T, U, V>[Key]>[0]\n ) {\n const args = [event, this.manager] as any;\n\n super.dispatch(type, ...args);\n }\n}\n\nexport function defaultPreventable<T>(\n event: T,\n cancelable = true\n): Preventable<T> {\n let defaultPrevented = false;\n\n return {\n ...event,\n cancelable,\n get defaultPrevented() {\n return defaultPrevented;\n },\n preventDefault() {\n if (!cancelable) {\n return;\n }\n\n defaultPrevented = true;\n },\n };\n}\n","import {effect, effects, untracked} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin} from '../plugins/index.ts';\nimport {defaultPreventable} from '../manager/events.ts';\n\nimport type {Collision} from './types.ts';\n\nexport class CollisionNotifier extends CorePlugin {\n constructor(manager: DragDropManager<any, any>) {\n super(manager);\n\n const isEqual = (a: Collision[], b: Collision[]) =>\n a.map(({id}) => id).join('') === b.map(({id}) => id).join('');\n\n let previousCollisions: Collision[] = [];\n\n this.destroy = effects(\n () => {\n const {dragOperation, collisionObserver} = manager;\n\n if (dragOperation.status.initializing) {\n previousCollisions = [];\n collisionObserver.enable();\n }\n },\n () => {\n const {collisionObserver, monitor} = manager;\n const {collisions} = collisionObserver;\n\n if (collisionObserver.isDisabled()) {\n return;\n }\n\n const event = defaultPreventable({\n collisions,\n });\n\n monitor.dispatch('collision', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isEqual(collisions, previousCollisions)) {\n return;\n } else {\n previousCollisions = collisions;\n }\n\n const [firstCollision] = collisions;\n\n untracked(() => {\n if (firstCollision?.id !== manager.dragOperation.target?.id) {\n collisionObserver.disable();\n\n manager.actions.setDropTarget(firstCollision?.id).then(() => {\n collisionObserver.enable();\n });\n }\n });\n }\n );\n }\n}\n","import type {DragOperation} from '../manager/index.ts';\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\n\nexport enum CollisionPriority {\n Lowest,\n Low,\n Normal,\n High,\n Highest,\n}\n\nexport enum CollisionType {\n Collision,\n ShapeIntersection,\n PointerIntersection,\n}\n\nexport interface Collision {\n id: UniqueIdentifier;\n priority: CollisionPriority | number;\n type: CollisionType;\n value: number;\n data?: Record<string, any>;\n}\n\nexport type Collisions = Collision[];\n\nexport interface CollisionDetectorInput<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n droppable: U;\n dragOperation: DragOperation<T, U>;\n}\n\nexport type CollisionDetector = <\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n>(\n input: CollisionDetectorInput<T, U>\n) => Collision | null;\n","import {CleanupFunction, reactive, type Effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\nimport type {Data, UniqueIdentifier} from './types.ts';\n\nexport interface Input<T extends Data = Data> {\n /**\n * The unique identifier of the entity.\n */\n id: UniqueIdentifier;\n /**\n * Optional data associated with the entity.\n */\n data?: T;\n /**\n * Whether the entity should initially be disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the entity should be automatically registered with the manager when it is created.\n * @default true\n */\n register?: boolean;\n /**\n * An array of effects that are set up when the entity is registered and cleaned up when it is unregistered.\n */\n effects?(): Effect[];\n}\n\n/**\n * The `Entity` class is an abstract representation of a distinct unit in the drag and drop system.\n * It is a base class that other concrete classes like `Draggable` and `Droppable` can extend.\n *\n * @template T - The type of data associated with the entity.\n */\nexport class Entity<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> {\n /**\n * Creates a new instance of the `Entity` class.\n *\n * @param input - An object containing the initial properties of the entity.\n * @param manager - The manager that controls the drag and drop operations.\n */\n constructor(input: Input<T>, manager: U | undefined) {\n const {effects, id, data = {}, disabled = false, register = true} = input;\n\n let previousId = id;\n\n this.manager = manager;\n this.id = id;\n this.data = data;\n this.disabled = disabled;\n this.effects = () => [\n () => {\n // Re-run this effect whenever the `id` changes\n const {id, manager} = this;\n\n if (id === previousId) {\n return;\n }\n\n manager?.registry.register(this);\n\n return () => manager?.registry.unregister(this);\n },\n ...(effects?.() ?? []),\n ];\n\n this.register = this.register.bind(this);\n this.unregister = this.unregister.bind(this);\n this.destroy = this.destroy.bind(this);\n\n if (manager && register) {\n queueMicrotask(this.register);\n }\n }\n\n /**\n * The manager that controls the drag and drop operations.\n */\n @reactive\n public accessor manager: U | undefined;\n\n /**\n * The unique identifier of the entity.\n */\n @reactive\n public accessor id: UniqueIdentifier;\n\n /**\n * The data associated with the entity.\n */\n @reactive\n public accessor data: Data;\n\n /**\n * A boolean indicating whether the entity is disabled.\n */\n @reactive\n public accessor disabled: boolean;\n\n /**\n * An array of effects that are applied to the entity.\n */\n public effects: () => Effect[];\n\n /**\n * A method that registers the entity with the manager.\n * @returns CleanupFunction | void\n */\n public register(): CleanupFunction | void {\n return this.manager?.registry.register(this);\n }\n\n /**\n * A method that unregisters the entity from the manager.\n * @returns void\n */\n public unregister(): void {\n this.manager?.registry.unregister(this);\n }\n\n /**\n * A method that cleans up the entity when it is no longer needed.\n * @returns void\n */\n public destroy(): void {\n this.manager?.registry.unregister(this);\n }\n}\n","import {effects, signal} from '@dnd-kit/state';\n\nimport type {Entity} from './entity.ts';\nimport type {UniqueIdentifier} from './types.ts';\n\n/**\n * Reactive class representing a registry for entities.\n * @template T - The type of entries that the registry manages,\n * for example, `Draggable` or `Droppable` entities.\n */\nexport class EntityRegistry<T extends Entity> {\n private map = signal<Map<UniqueIdentifier, T>>(new Map());\n private cleanupFunctions = new WeakMap<T, () => void>();\n\n /**\n * Iterator for the EntityRegistry class.\n * @returns An iterator for the values in the map.\n */\n public [Symbol.iterator]() {\n return this.map.peek().values();\n }\n\n public get value() {\n return this.map.value.values();\n }\n\n /**\n * Checks if a entity with the given identifier exists in the registry.\n * @param identifier - The unique identifier of the entity.\n * @returns True if the entity exists, false otherwise.\n */\n public has(identifier: UniqueIdentifier): boolean {\n return this.map.value.has(identifier);\n }\n\n /**\n * Retrieves a entity from the registry using its identifier.\n * @param identifier - The unique identifier of the entity.\n * @returns The entity if it exists, undefined otherwise.\n */\n public get(identifier: UniqueIdentifier): T | undefined {\n return this.map.value.get(identifier);\n }\n\n /**\n * Registers a entity in the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity to register.\n * @returns A function that unregisters the entity.\n */\n public register = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n const currentValue = current.get(key);\n const unregister = () => this.unregister(key, value);\n\n if (currentValue === value) return unregister;\n\n if (currentValue) {\n const cleanup = this.cleanupFunctions.get(currentValue);\n cleanup?.();\n this.cleanupFunctions.delete(currentValue);\n }\n\n const updatedMap = new Map(current);\n updatedMap.set(key, value);\n\n this.map.value = updatedMap;\n\n const cleanup = effects(...value.effects());\n this.cleanupFunctions.set(value, cleanup);\n\n return unregister;\n };\n\n /**\n * Unregisters an entity from the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity instance to unregister.\n */\n public unregister = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n\n if (current.get(key) !== value) {\n return;\n }\n\n const cleanup = this.cleanupFunctions.get(value);\n cleanup?.();\n this.cleanupFunctions.delete(value);\n\n const updatedMap = new Map(current);\n updatedMap.delete(key);\n\n this.map.value = updatedMap;\n };\n\n /**\n * Destroys all entries in the registry and clears the registry.\n */\n public destroy() {\n for (const entry of this) {\n const cleanup = this.cleanupFunctions.get(entry);\n cleanup?.();\n entry.destroy();\n }\n\n this.map.value = new Map();\n }\n}\n","import {derived, reactive} from '@dnd-kit/state';\nimport type {Alignment} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport type {Modifiers} from '../../modifiers/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Sensors} from '../../sensors/sensor.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n type?: Type;\n sensors?: Sensors;\n modifiers?: Modifiers;\n alignment?: Alignment;\n}\n\nexport type DraggableStatus = 'idle' | 'dragging' | 'dropping';\n\nexport class Draggable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {modifiers, type, sensors, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.type = type;\n this.sensors = sensors;\n this.modifiers = modifiers;\n this.alignment = input.alignment;\n }\n\n @reactive\n public accessor type: Type | undefined;\n\n public sensors: Sensors | undefined;\n\n @reactive\n public accessor modifiers: Modifiers | undefined;\n\n public alignment: Alignment | undefined;\n\n @reactive\n public accessor status: DraggableStatus = this.isDragSource\n ? 'dragging'\n : 'idle';\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDropping() {\n return this.status === 'dropping' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDragging() {\n return this.status === 'dragging' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is the source of a drag operation.\n */\n @derived\n public get isDragSource() {\n return this.manager?.dragOperation.source?.id === this.id;\n }\n}\n","import {derived, effects, reactive, type Effect} from '@dnd-kit/state';\nimport type {Shape} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport {\n CollisionPriority,\n type CollisionDetector,\n} from '../../collision/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {Draggable} from '../draggable/draggable.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n accept?: Type | Type[] | ((source: Draggable) => boolean);\n collisionPriority?: CollisionPriority | number;\n collisionDetector: CollisionDetector;\n type?: Type;\n}\n\nexport class Droppable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {accept, collisionDetector, collisionPriority, type, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.accept = accept;\n this.collisionDetector = collisionDetector;\n this.collisionPriority = collisionPriority;\n this.type = type;\n }\n\n /**\n * An array of types that are compatible with the droppable.\n */\n @reactive\n public accessor accept:\n | Type\n | Type[]\n | ((draggable: Draggable) => boolean)\n | undefined;\n\n /**\n * The type of the droppable.\n */\n @reactive\n public accessor type: Type | undefined;\n\n /**\n * Checks whether or not the droppable accepts a given draggable.\n *\n * @param {Draggable} draggable\n * @returns {boolean}\n */\n public accepts(draggable: Draggable): boolean {\n const {accept} = this;\n\n if (!accept) {\n return true;\n }\n\n if (typeof accept === 'function') {\n return accept(draggable);\n }\n\n if (!draggable.type) {\n return false;\n }\n\n if (Array.isArray(accept)) {\n return accept.includes(draggable.type);\n }\n\n return draggable.type === accept;\n }\n\n @reactive\n public accessor collisionDetector: CollisionDetector;\n\n @reactive\n public accessor collisionPriority: CollisionPriority | number | undefined;\n\n @reactive\n public accessor shape: Shape | undefined;\n\n @derived\n public get isDropTarget() {\n return this.manager?.dragOperation.target?.id === this.id;\n }\n}\n","import {CleanupFunction} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {\n Plugin,\n type PluginConstructor,\n type PluginDescriptor,\n type PluginOptions,\n} from '../plugins/index.ts';\n\nexport type SensorOptions = PluginOptions;\n\nexport abstract class Sensor<\n T extends DragDropManager<any, any> = DragDropManager<Draggable, Droppable>,\n U extends SensorOptions = SensorOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n /**\n * Bind the sensor to a draggable source, and optionally pass\n * in sensor options to override the default sensor options\n * for this draggable source only.\n */\n public abstract bind(source: Draggable, options?: U): CleanupFunction;\n}\n\nexport type SensorConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Sensor<T>>;\n\nexport type SensorDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Sensor<T>, SensorConstructor<T>>;\n\nexport type Sensors<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (SensorConstructor<T> | SensorDescriptor<T>)[];\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {\n Plugin,\n type PluginOptions,\n type PluginConstructor,\n type PluginDescriptor,\n} from '../plugins/index.ts';\nimport type {DragDropManager} from '../manager/index.ts';\n\nexport type ModifierOptions = PluginOptions;\n\nexport class Modifier<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends ModifierOptions = ModifierOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n public apply(operation: T['dragOperation']): Coordinates {\n return operation.transform;\n }\n}\n\nexport type ModifierConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Modifier<T, any>>;\n\nexport type ModifierDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Modifier<T, any>, ModifierConstructor<T>>;\n\nexport type Modifiers<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (ModifierConstructor<T> | ModifierDescriptor<T>)[];\n","import type {CleanupFunction} from '@dnd-kit/state';\n\nimport {\n Draggable,\n Droppable,\n Entity,\n EntityRegistry,\n} from '../entities/index.ts';\nimport {\n PluginRegistry,\n Plugin,\n type PluginConstructor,\n PluginOptions,\n} from '../plugins/index.ts';\nimport {\n Sensor,\n SensorOptions,\n type SensorConstructor,\n} from '../sensors/index.ts';\nimport {Modifier, type ModifierConstructor} from '../modifiers/index.ts';\nimport type {DragDropManager} from './manager.ts';\n\nexport class DragDropRegistry<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> {\n constructor(manager: V) {\n this.plugins = new PluginRegistry<V, PluginConstructor<V>>(manager);\n this.sensors = new PluginRegistry<V, SensorConstructor<V>>(manager);\n this.modifiers = new PluginRegistry<V, ModifierConstructor<V>>(manager);\n }\n\n public draggables = new EntityRegistry<T>();\n public droppables = new EntityRegistry<U>();\n public plugins: PluginRegistry<V, PluginConstructor<V>>;\n public sensors: PluginRegistry<V, SensorConstructor<V>>;\n public modifiers: PluginRegistry<V, ModifierConstructor<V>>;\n\n public register(input: Entity): () => void;\n public register(input: Draggable): () => void;\n public register(input: Droppable): () => void;\n public register(input: SensorConstructor, options?: SensorOptions): Sensor;\n public register(input: ModifierConstructor): Modifier;\n public register(input: PluginConstructor, options?: PluginOptions): Plugin;\n public register(input: any, options?: Record<string, any>) {\n if (input instanceof Draggable) {\n return this.draggables.register(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.register(input.id, input as U);\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.register(input, options);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.register(input, options);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.register(input, options);\n }\n\n throw new Error('Invalid instance type');\n }\n\n public unregister(input: Entity): CleanupFunction;\n public unregister(input: Draggable): CleanupFunction;\n public unregister(input: Droppable): CleanupFunction;\n public unregister(input: SensorConstructor): CleanupFunction;\n public unregister(input: ModifierConstructor): CleanupFunction;\n public unregister(input: PluginConstructor): CleanupFunction;\n public unregister(input: any) {\n if (input instanceof Entity) {\n if (input instanceof Draggable) {\n return this.draggables.unregister(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.unregister(input.id, input as U);\n }\n\n // no-op\n return () => {};\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.unregister(input);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.unregister(input);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.unregister(input);\n }\n\n throw new Error('Invalid instance type');\n }\n\n destroy() {\n this.draggables.destroy();\n this.droppables.destroy();\n this.plugins.destroy();\n this.sensors.destroy();\n this.modifiers.destroy();\n }\n}\n","import {Position, type Shape} from '@dnd-kit/geometry';\nimport type {Coordinates} from '@dnd-kit/geometry';\nimport {\n batch,\n computed,\n deepEqual,\n effect,\n signal,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\nimport type {Modifier} from '../modifiers/index.ts';\nimport {descriptor} from '../plugins/index.ts';\n\nimport type {DragDropManager} from './manager.ts';\nimport {defaultPreventable} from './events.ts';\n\nexport enum Status {\n Idle = 'idle',\n InitializationPending = 'initialization-pending',\n Initializing = 'initializing',\n Dragging = 'dragging',\n Dropped = 'dropped',\n}\n\nexport type Serializable = {\n [key: string]: string | number | null | Serializable | Serializable[];\n};\n\nexport interface DragOperation<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n activatorEvent: Event | null;\n canceled: boolean;\n position: Position;\n transform: Coordinates;\n status: {\n current: Status;\n initialized: boolean;\n initializing: boolean;\n dragging: boolean;\n dragended: boolean;\n dropped: boolean;\n idle: boolean;\n };\n get shape(): {\n initial: Shape;\n current: Shape;\n } | null;\n set shape(value: Shape | null);\n source: T | null;\n target: U | null;\n data?: Serializable;\n}\n\nexport type DragActions<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = ReturnType<typeof DragOperationManager<T, U, V>>['actions'];\n\nexport function DragOperationManager<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n>(manager: V) {\n const {\n registry: {draggables, droppables},\n monitor,\n } = manager;\n const status = signal<Status>(Status.Idle);\n const shape = {\n initial: signal<Shape | null>(null),\n current: signal<Shape | null>(null),\n };\n const canceled = signal<boolean>(false);\n const position = new Position({x: 0, y: 0});\n const activatorEvent = signal<Event | null>(null);\n const sourceIdentifier = signal<UniqueIdentifier | null>(null);\n const targetIdentifier = signal<UniqueIdentifier | null>(null);\n const dragging = computed(() => status.value === Status.Dragging);\n const initialized = computed(() => status.value !== Status.Idle);\n const initializing = computed(() => status.value === Status.Initializing);\n const idle = computed(() => status.value === Status.Idle);\n const dropped = computed(() => status.value === Status.Dropped);\n const dragended = signal<boolean>(true);\n let previousSource: T | undefined;\n const source = computed<T | null>(() => {\n const identifier = sourceIdentifier.value;\n\n if (identifier == null) return null;\n\n const value = draggables.get(identifier);\n\n if (value) {\n // It's possible for the source to unmount during the drag operation\n previousSource = value;\n }\n\n return value ?? previousSource ?? null;\n });\n const target = computed<U | null>(() => {\n const identifier = targetIdentifier.value;\n return identifier != null ? (droppables.get(identifier) ?? null) : null;\n });\n\n const modifiers = signal<Modifier[]>([]);\n\n const dispose = effect(() => {\n const currentModifiers = modifiers.peek();\n\n if (!deepEqual(currentModifiers, manager.modifiers)) {\n currentModifiers.forEach((modifier) => modifier.destroy());\n }\n\n modifiers.value =\n source.value?.modifiers?.map((modifier) => {\n const {plugin, options} = descriptor(modifier);\n return new plugin(manager, options);\n }) ?? manager.modifiers;\n });\n\n const transform = computed(() => {\n const {x, y} = position.delta;\n\n let transform = {x, y};\n const initialShape = shape.initial.value;\n const currentShape = shape.current.peek();\n const operation: Omit<DragOperation<T, U>, 'transform'> = {\n activatorEvent: activatorEvent.peek(),\n canceled: canceled.peek(),\n source: source.peek(),\n target: target.peek(),\n status: {\n current: status.peek(),\n idle: idle.peek(),\n initializing: initializing.peek(),\n initialized: initialized.peek(),\n dragging: dragging.peek(),\n dragended: dragended.peek(),\n dropped: dropped.peek(),\n },\n shape:\n initialShape && currentShape\n ? {initial: initialShape, current: currentShape}\n : null,\n position,\n };\n\n for (const modifier of modifiers.value) {\n transform = modifier.apply({...operation, transform});\n }\n\n return transform;\n });\n\n const operation: DragOperation<T, U> = {\n get activatorEvent() {\n return activatorEvent.value;\n },\n get canceled() {\n return canceled.value;\n },\n get source() {\n return source.value;\n },\n get target() {\n return target.value;\n },\n status: {\n get current() {\n return status.value;\n },\n get idle() {\n return idle.value;\n },\n get initializing() {\n return initializing.value;\n },\n get initialized() {\n return initialized.value;\n },\n get dragging() {\n return dragging.value;\n },\n get dragended() {\n return dragended.value;\n },\n get dropped() {\n return dropped.value;\n },\n },\n get shape(): DragOperation['shape'] {\n const initial = shape.initial.value;\n const current = shape.current.value;\n\n return initial && current ? {initial, current} : null;\n },\n set shape(value: Shape | null) {\n if (value && shape.current.peek()?.equals(value)) {\n return;\n }\n\n const initial = shape.initial.peek();\n\n if (!initial) {\n shape.initial.value = value;\n }\n\n shape.current.value = value;\n },\n get transform() {\n return transform.value;\n },\n position,\n };\n\n const reset = () => {\n batch(() => {\n status.value = Status.Idle;\n sourceIdentifier.value = null;\n targetIdentifier.value = null;\n shape.current.value = null;\n shape.initial.value = null;\n position.reset({x: 0, y: 0});\n modifiers.value = [];\n });\n };\n\n const actions = {\n setDragSource(identifier: UniqueIdentifier) {\n sourceIdentifier.value = identifier;\n },\n setDropTarget(\n identifier: UniqueIdentifier | null | undefined\n ): Promise<boolean> {\n const id = identifier ?? null;\n\n if (targetIdentifier.peek() === id) {\n return Promise.resolve(false);\n }\n\n targetIdentifier.value = id;\n\n const event = defaultPreventable({\n operation: snapshot(operation),\n });\n\n if (status.peek() === Status.Dragging) {\n monitor.dispatch('dragover', event);\n }\n\n return manager.renderer.rendering.then(() => event.defaultPrevented);\n },\n start({\n event: nativeEvent,\n coordinates,\n }: {\n event?: Event;\n coordinates: Coordinates;\n }) {\n const sourceInstance = source.peek();\n\n if (!sourceInstance) {\n throw new Error('Cannot start a drag operation without a drag source');\n }\n\n batch(() => {\n status.value = Status.InitializationPending;\n shape.initial.value = null;\n shape.current.value = null;\n dragended.value = false;\n canceled.value = false;\n activatorEvent.value = nativeEvent ?? null;\n position.reset(coordinates);\n });\n\n const beforeStartEvent = defaultPreventable({\n operation: snapshot(operation),\n });\n\n monitor.dispatch('beforedragstart', beforeStartEvent);\n\n manager.renderer.rendering.then(() => {\n if (beforeStartEvent.defaultPrevented) {\n reset();\n return;\n }\n\n status.value = Status.Initializing;\n\n requestAnimationFrame(() => {\n status.value = Status.Dragging;\n\n monitor.dispatch('dragstart', {\n nativeEvent,\n operation: snapshot(operation),\n cancelable: false,\n });\n });\n });\n },\n move({\n by,\n to,\n event: nativeEvent,\n cancelable = true,\n propagate = true,\n }:\n | {\n by: Coordinates;\n to?: undefined;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }\n | {\n by?: undefined;\n to: Coordinates;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }) {\n if (!dragging.peek()) {\n return;\n }\n\n const event = defaultPreventable(\n {\n nativeEvent,\n operation: snapshot(operation),\n by,\n to,\n },\n cancelable\n );\n\n if (propagate) {\n monitor.dispatch('dragmove', event);\n }\n\n queueMicrotask(() => {\n if (event.defaultPrevented) {\n return;\n }\n\n const coordinates = to ?? {\n x: position.current.x + by.x,\n y: position.current.y + by.y,\n };\n\n position.update(coordinates);\n });\n },\n stop({\n canceled: eventCanceled = false,\n event: nativeEvent,\n }: {event?: Event; canceled?: boolean} = {}) {\n let promise: Promise<void> | undefined;\n const suspend = () => {\n const output = {\n resume: () => {},\n abort: () => {},\n };\n\n promise = new Promise<void>((resolve, reject) => {\n output.resume = resolve;\n output.abort = reject;\n });\n\n return output;\n };\n const end = () => {\n /* Wait for the renderer to finish rendering before finalizing the drag operation */\n manager.renderer.rendering.then(() => {\n status.value = Status.Dropped;\n\n const dropping = untracked(() => source.value?.status === 'dropping');\n\n if (dropping) {\n const currentSource = source.value;\n\n // Wait until the source has finished dropping before resetting the operation\n const dispose = effect(() => {\n if (currentSource?.status === 'idle') {\n dispose();\n\n // Only reset the drag operation if the source is still the same source that was active when the drag operation\n // was ended, as it's possible for a new drag operation to start while the previous source is still dropping\n if (source.value !== currentSource) return;\n\n reset();\n }\n });\n } else {\n manager.renderer.rendering.then(reset);\n }\n });\n };\n\n batch(() => {\n dragended.value = true;\n canceled.value = eventCanceled;\n });\n\n monitor.dispatch('dragend', {\n nativeEvent,\n operation: snapshot(operation),\n canceled: eventCanceled,\n suspend,\n });\n\n if (promise) {\n promise.then(end).catch(reset);\n } else {\n end();\n }\n },\n };\n\n return {\n operation,\n actions,\n cleanup() {\n if (status.peek() !== Status.Idle) {\n actions.stop({canceled: true});\n }\n\n modifiers.value.forEach((modifier) => modifier.destroy());\n dispose();\n },\n };\n}\n\nfunction snapshot<T extends Record<string, any>>(obj: T): T {\n return {\n ...obj,\n };\n}\n","export interface Renderer {\n get rendering(): Promise<void>;\n}\n\nexport const defaultRenderer: Renderer = {\n get rendering() {\n return Promise.resolve();\n },\n};\n","import type {Draggable, Droppable} from '../entities/index.ts';\nimport {CollisionObserver, CollisionNotifier} from '../collision/index.ts';\nimport type {Plugins, Plugin} from '../plugins/index.ts';\nimport type {Sensor, Sensors} from '../sensors/index.ts';\nimport type {Modifier, Modifiers} from '../modifiers/index.ts';\n\nimport {DragDropRegistry} from './registry.ts';\nimport {\n DragOperationManager,\n type DragOperation,\n type DragActions,\n} from './dragOperation.ts';\nimport {DragDropMonitor} from './events.ts';\nimport {defaultRenderer, type Renderer} from './renderer.ts';\n\nexport type DragDropManagerInput<T extends DragDropManager<any, any>> = {\n plugins?: Plugins<T>;\n sensors?: Sensors<T>;\n modifiers?: Modifiers<T>;\n renderer?: Renderer;\n};\n\nexport class DragDropManager<T extends Draggable, U extends Droppable> {\n public actions: DragActions<T, U, DragDropManager<T, U>>;\n public collisionObserver: CollisionObserver<T, U>;\n public dragOperation: DragOperation<T, U>;\n public monitor: DragDropMonitor<T, U, DragDropManager<T, U>>;\n public registry: DragDropRegistry<T, U, DragDropManager<T, U>>;\n public renderer: Renderer;\n\n constructor(config?: DragDropManagerInput<any>) {\n type V = DragDropManager<T, U>;\n\n const {\n plugins = [],\n sensors = [],\n modifiers = [],\n renderer = defaultRenderer,\n } = config ?? {};\n const monitor = new DragDropMonitor<T, U, V>(this);\n const registry = new DragDropRegistry<T, U, V>(this);\n\n this.registry = registry;\n this.monitor = monitor;\n this.renderer = renderer;\n\n const {actions, operation, cleanup} = DragOperationManager<T, U, V>(this);\n\n this.actions = actions;\n this.dragOperation = operation;\n this.collisionObserver = new CollisionObserver<T, U, V>(this);\n this.plugins = [CollisionNotifier, ...plugins];\n this.modifiers = modifiers;\n this.sensors = sensors;\n\n const {destroy} = this;\n\n this.destroy = () => {\n cleanup();\n destroy();\n };\n }\n\n get plugins(): Plugin<any>[] {\n return this.registry.plugins.values;\n }\n\n set plugins(plugins: Plugins<any>) {\n this.registry.plugins.values = plugins;\n }\n\n get modifiers(): Modifier<any>[] {\n return this.registry.modifiers.values;\n }\n\n set modifiers(modifiers: Modifiers<any>) {\n this.registry.modifiers.values = modifiers;\n }\n\n get sensors(): Sensor<any>[] {\n return this.registry.sensors.values;\n }\n\n set sensors(sensors: Sensors<any>) {\n this.registry.sensors.values = sensors;\n }\n\n public destroy = () => {\n this.registry.destroy();\n this.collisionObserver.destroy();\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["src/core/plugins/utilities.ts","src/core/plugins/plugin.ts","src/core/plugins/registry.ts","src/core/collision/utilities.ts","src/core/collision/observer.ts","src/core/manager/events.ts","src/core/collision/notifier.ts","src/core/collision/types.ts","src/core/entities/entity/entity.ts","src/core/entities/entity/registry.ts","src/core/entities/draggable/draggable.ts","src/core/entities/droppable/droppable.ts","src/core/sensors/sensor.ts","src/core/modifiers/modifier.ts","src/core/manager/registry.ts","src/core/manager/dragOperation.ts","src/core/manager/renderer.ts","src/core/manager/manager.ts"],"names":["reactive","untracked","effect","descriptor","signal","effects","CollisionPriority","CollisionType","_disabled_dec","_init","_disabled","id","manager","cleanup","derived","_type_dec","_c","_type","Status","Position","computed","deepEqual","transform","operation","batch","dispose"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n PluginConstructor,\n PluginOptions,\n PluginDescriptor,\n InferPluginOptions,\n} from './types.ts';\n\nexport function configure<\n T extends PluginConstructor<any, any, any>,\n V extends PluginOptions = InferPluginOptions<T>,\n>(plugin: T, options: V): PluginDescriptor<any, any, T> {\n return {\n plugin,\n options,\n };\n}\n\nexport function configurator<T extends PluginConstructor<any, any, any>>(\n plugin: T\n) {\n return (options: InferPluginOptions<T>): PluginDescriptor<any, any, T> => {\n return configure(plugin, options);\n };\n}\n\nexport function descriptor<T extends PluginConstructor<any, any, any>>(\n plugin: T | PluginDescriptor<any, any, T>\n): PluginDescriptor<any, any, T> {\n if (typeof plugin === 'function') {\n return {\n plugin,\n options: undefined,\n };\n }\n\n return plugin;\n}\n","import {\n type CleanupFunction,\n effect,\n reactive,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {PluginOptions} from './types.ts';\nimport {configure} from './utilities.ts';\n\n/**\n * An abstract plugin class that can be extended to implement custom\n * functionality that augments the `DragDropManager`'s core capabilities.\n */\nexport abstract class Plugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> {\n constructor(\n public manager: T,\n public options?: U\n ) {}\n\n /**\n * Whether the plugin instance is disabled.\n * Triggers effects when accessed.\n */\n @reactive\n public accessor disabled: boolean = false;\n\n /**\n * Enable a disabled plugin instance.\n * Triggers effects.\n */\n public enable() {\n this.disabled = false;\n }\n\n /**\n * Disable an enabled plugin instance.\n * Triggers effects.\n */\n public disable() {\n this.disabled = true;\n }\n\n /**\n * Whether the plugin instance is disabled.\n * Does not trigger effects when accessed.\n */\n public isDisabled() {\n return untracked(() => {\n return this.disabled;\n });\n }\n\n /**\n * Configure a plugin instance with new options.\n */\n public configure(options?: U) {\n this.options = options;\n }\n\n #cleanupFunctions = new Set<CleanupFunction>();\n\n /**\n * Register an effect that will be cleaned up when the plugin instance is destroyed.\n * Returns a cleanup function that can be used to dispose of the effect.\n */\n protected registerEffect(callback: () => void) {\n const dispose = effect(callback.bind(this));\n\n this.#cleanupFunctions.add(dispose);\n\n return dispose;\n }\n\n /**\n * Destroy a plugin instance.\n */\n public destroy() {\n /*\n * Each plugin is responsible for implementing its own\n * destroy method to clean up effects and listeners\n */\n\n this.#cleanupFunctions.forEach((cleanup) => cleanup());\n }\n\n /**\n * Configure a plugin constructor with options.\n * This method is used to configure the options that the\n * plugin constructor will use to create plugin instances.\n */\n static configure(options: PluginOptions) {\n return configure(this as any, options);\n }\n}\n\nexport class CorePlugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> extends Plugin<T, U> {}\n","import {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin, type Plugin} from './plugin.ts';\nimport type {\n InferPluginOptions,\n PluginDescriptor,\n PluginConstructor,\n Plugins,\n} from './types.ts';\nimport {descriptor} from './utilities.ts';\n\nexport class PluginRegistry<\n T extends DragDropManager<any, any>,\n W extends PluginConstructor<T> = PluginConstructor<T>,\n U extends Plugin<T> = InstanceType<W>,\n> {\n private instances: Map<W, U> = new Map();\n\n constructor(private manager: T) {}\n\n public get values(): U[] {\n return Array.from(this.instances.values());\n }\n\n #previousValues: PluginConstructor<T>[] = [];\n\n public set values(entries: Plugins<T>) {\n const descriptors = entries\n .map(descriptor)\n .reduceRight<PluginDescriptor<T>[]>((acc, descriptor) => {\n if (acc.some(({plugin}) => plugin === descriptor.plugin)) {\n // Filter out duplicate plugins\n return acc;\n }\n\n return [descriptor, ...acc];\n }, []);\n const constructors = descriptors.map(({plugin}) => plugin);\n\n for (const plugin of this.#previousValues) {\n if (!constructors.includes(plugin)) {\n if (plugin.prototype instanceof CorePlugin) {\n continue;\n }\n\n this.unregister(plugin as W);\n }\n }\n\n for (const {plugin, options} of descriptors) {\n this.register(plugin as W, options as InferPluginOptions<W>);\n }\n\n this.#previousValues = constructors;\n }\n\n public get<X extends W>(plugin: X): InstanceType<X> | undefined {\n const instance = this.instances.get(plugin);\n\n return instance as any;\n }\n\n public register<X extends W>(\n plugin: X,\n options?: InferPluginOptions<X>\n ): InstanceType<X> {\n const existingInstance = this.instances.get(plugin);\n\n if (existingInstance) {\n if (existingInstance.options !== options) {\n existingInstance.options = options;\n }\n\n return existingInstance as InstanceType<X>;\n }\n\n const instance = new plugin(this.manager, options) as U;\n\n this.instances.set(plugin, instance);\n\n return instance as InstanceType<X>;\n }\n\n public unregister<X extends W>(plugin: X) {\n const instance = this.instances.get(plugin);\n\n if (instance) {\n instance.destroy();\n this.instances.delete(plugin);\n }\n }\n\n public destroy() {\n for (const plugin of this.instances.values()) {\n plugin.destroy();\n }\n\n this.instances.clear();\n }\n}\n","import {Collision} from './types.ts';\n\n/**\n * Sort collisions from greatest to smallest priority\n * Collisions of equal priority are sorted from greatest to smallest value\n */\nexport function sortCollisions(a: Collision, b: Collision) {\n if (a.priority === b.priority) {\n if (a.type === b.type) {\n return b.value - a.value;\n }\n\n return b.type - a.type;\n }\n\n return b.priority - a.priority;\n}\n","import {signal, untracked, type Signal, effects} from '@dnd-kit/state';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {Plugin} from '../plugins/index.ts';\nimport type {Collision, CollisionDetector, Collisions} from './types.ts';\nimport {sortCollisions} from './utilities.ts';\n\nconst DEFAULT_VALUE: Collisions = [];\n\nexport class CollisionObserver<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n V extends DragDropManager<T, U> = DragDropManager<T, U>,\n> extends Plugin<V> {\n constructor(manager: V) {\n super(manager);\n\n this.computeCollisions = this.computeCollisions.bind(this);\n this.#collisions = signal(DEFAULT_VALUE);\n\n this.destroy = effects(\n () => {\n const collisions = this.computeCollisions();\n const coordinates = untracked(\n () => this.manager.dragOperation.position.current\n );\n\n if (collisions !== DEFAULT_VALUE) {\n const previousCoordinates = this.#previousCoordinates;\n this.#previousCoordinates = coordinates;\n\n if (\n previousCoordinates &&\n coordinates.x == previousCoordinates.x &&\n coordinates.y == previousCoordinates.y\n ) {\n return;\n }\n } else {\n this.#previousCoordinates = undefined;\n }\n\n this.#collisions.value = collisions;\n },\n () => {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n this.forceUpdate();\n }\n }\n );\n }\n\n #previousCoordinates: Coordinates | undefined;\n\n public forceUpdate(immediate = true) {\n untracked(() => {\n if (immediate) {\n this.#collisions.value = this.computeCollisions();\n } else {\n this.#previousCoordinates = undefined;\n }\n });\n }\n\n public computeCollisions(\n entries?: Droppable[],\n collisionDetector?: CollisionDetector\n ) {\n const {registry, dragOperation} = this.manager;\n const {source, shape, status} = dragOperation;\n\n if (!status.initialized || !shape) {\n return DEFAULT_VALUE;\n }\n\n const collisions: Collision[] = [];\n const potentialTargets = [];\n\n for (const entry of entries ?? registry.droppables) {\n if (entry.disabled) {\n continue;\n }\n\n if (source && !entry.accepts(source)) {\n continue;\n }\n\n const detectCollision = collisionDetector ?? entry.collisionDetector;\n\n if (!detectCollision) {\n continue;\n }\n\n potentialTargets.push(entry);\n\n // Force collisions to be recomputed when the shape changes\n void entry.shape;\n\n const collision = untracked(() =>\n detectCollision({\n droppable: entry,\n dragOperation,\n })\n );\n\n if (collision) {\n if (entry.collisionPriority != null) {\n collision.priority = entry.collisionPriority;\n }\n\n collisions.push(collision);\n }\n }\n\n if (potentialTargets.length === 0) {\n return DEFAULT_VALUE;\n }\n\n collisions.sort(sortCollisions);\n\n return collisions;\n }\n\n public get collisions() {\n return this.#collisions.value;\n }\n\n #collisions: Signal<Collisions>;\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport type {Collisions} from '../collision/index.ts';\nimport type {DragDropManager} from './manager.ts';\nimport type {DragOperation} from './dragOperation.ts';\n\nexport type Events = Record<string, (...args: any[]) => void>;\n\nexport type Preventable<T> = T & {\n cancelable: boolean;\n defaultPrevented: boolean;\n preventDefault(): void;\n};\n\nclass Monitor<T extends Events> {\n private registry = new Map<keyof T, Set<T[keyof T]>>();\n\n public addEventListener<U extends keyof T>(name: U, handler: T[U]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.add(handler);\n registry.set(name, listeners);\n\n return () => this.removeEventListener(name, handler);\n }\n\n public removeEventListener(name: keyof T, handler: T[keyof T]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.delete(handler);\n registry.set(name, listeners);\n }\n\n protected dispatch<U extends keyof T>(name: U, ...args: any[]) {\n const {registry} = this;\n const listeners = registry.get(name);\n\n if (!listeners) {\n return;\n }\n\n for (const listener of listeners) {\n listener(...args);\n }\n }\n}\n\nexport type DragDropEvents<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = {\n collision(\n event: Preventable<{\n collisions: Collisions;\n }>,\n manager: V\n ): void;\n beforedragstart(\n event: Preventable<{\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragstart(\n event: {\n cancelable: false;\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n },\n manager: V\n ): void;\n dragmove(\n event: Preventable<{\n operation: DragOperation<T, U>;\n to?: Coordinates;\n by?: Coordinates;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragover(\n event: Preventable<{\n operation: DragOperation<T, U>;\n }>,\n manager: V\n ): void;\n dragend(\n event: {\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n canceled: boolean;\n suspend(): {resume(): void; abort(): void};\n },\n manager: V\n ): void;\n};\n\nexport class DragDropMonitor<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> extends Monitor<DragDropEvents<T, U, V>> {\n constructor(private manager: V) {\n super();\n }\n\n public dispatch<Key extends keyof DragDropEvents<T, U, V>>(\n type: Key,\n event: Parameters<DragDropEvents<T, U, V>[Key]>[0]\n ) {\n const args = [event, this.manager] as any;\n\n super.dispatch(type, ...args);\n }\n}\n\nexport function defaultPreventable<T>(\n event: T,\n cancelable = true\n): Preventable<T> {\n let defaultPrevented = false;\n\n return {\n ...event,\n cancelable,\n get defaultPrevented() {\n return defaultPrevented;\n },\n preventDefault() {\n if (!cancelable) {\n return;\n }\n\n defaultPrevented = true;\n },\n };\n}\n","import {effect, effects, untracked} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin} from '../plugins/index.ts';\nimport {defaultPreventable} from '../manager/events.ts';\n\nimport type {Collision} from './types.ts';\n\nexport class CollisionNotifier extends CorePlugin {\n constructor(manager: DragDropManager<any, any>) {\n super(manager);\n\n const isEqual = (a: Collision[], b: Collision[]) =>\n a.map(({id}) => id).join('') === b.map(({id}) => id).join('');\n\n let previousCollisions: Collision[] = [];\n\n this.destroy = effects(\n () => {\n const {dragOperation, collisionObserver} = manager;\n\n if (dragOperation.status.initializing) {\n previousCollisions = [];\n collisionObserver.enable();\n }\n },\n () => {\n const {collisionObserver, monitor} = manager;\n const {collisions} = collisionObserver;\n\n if (collisionObserver.isDisabled()) {\n return;\n }\n\n const event = defaultPreventable({\n collisions,\n });\n\n monitor.dispatch('collision', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isEqual(collisions, previousCollisions)) {\n return;\n } else {\n previousCollisions = collisions;\n }\n\n const [firstCollision] = collisions;\n\n untracked(() => {\n if (firstCollision?.id !== manager.dragOperation.target?.id) {\n collisionObserver.disable();\n\n manager.actions.setDropTarget(firstCollision?.id).then(() => {\n collisionObserver.enable();\n });\n }\n });\n }\n );\n }\n}\n","import type {DragOperation} from '../manager/index.ts';\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\n\nexport enum CollisionPriority {\n Lowest,\n Low,\n Normal,\n High,\n Highest,\n}\n\nexport enum CollisionType {\n Collision,\n ShapeIntersection,\n PointerIntersection,\n}\n\nexport interface Collision {\n id: UniqueIdentifier;\n priority: CollisionPriority | number;\n type: CollisionType;\n value: number;\n data?: Record<string, any>;\n}\n\nexport type Collisions = Collision[];\n\nexport interface CollisionDetectorInput<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n droppable: U;\n dragOperation: DragOperation<T, U>;\n}\n\nexport type CollisionDetector = <\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n>(\n input: CollisionDetectorInput<T, U>\n) => Collision | null;\n","import {CleanupFunction, reactive, type Effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\nimport type {Data, UniqueIdentifier} from './types.ts';\n\nexport interface Input<T extends Data = Data> {\n /**\n * The unique identifier of the entity.\n */\n id: UniqueIdentifier;\n /**\n * Optional data associated with the entity.\n */\n data?: T;\n /**\n * Whether the entity should initially be disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the entity should be automatically registered with the manager when it is created.\n * @default true\n */\n register?: boolean;\n /**\n * An array of effects that are set up when the entity is registered and cleaned up when it is unregistered.\n */\n effects?(): Effect[];\n}\n\n/**\n * The `Entity` class is an abstract representation of a distinct unit in the drag and drop system.\n * It is a base class that other concrete classes like `Draggable` and `Droppable` can extend.\n *\n * @template T - The type of data associated with the entity.\n */\nexport class Entity<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> {\n /**\n * Creates a new instance of the `Entity` class.\n *\n * @param input - An object containing the initial properties of the entity.\n * @param manager - The manager that controls the drag and drop operations.\n */\n constructor(input: Input<T>, manager: U | undefined) {\n const {effects, id, data = {}, disabled = false, register = true} = input;\n\n let previousId = id;\n\n this.manager = manager;\n this.id = id;\n this.data = data;\n this.disabled = disabled;\n this.effects = () => [\n () => {\n // Re-run this effect whenever the `id` changes\n const {id, manager} = this;\n\n if (id === previousId) {\n return;\n }\n\n manager?.registry.register(this);\n\n return () => manager?.registry.unregister(this);\n },\n ...(effects?.() ?? []),\n ];\n\n this.register = this.register.bind(this);\n this.unregister = this.unregister.bind(this);\n this.destroy = this.destroy.bind(this);\n\n if (manager && register) {\n queueMicrotask(this.register);\n }\n }\n\n /**\n * The manager that controls the drag and drop operations.\n */\n @reactive\n public accessor manager: U | undefined;\n\n /**\n * The unique identifier of the entity.\n */\n @reactive\n public accessor id: UniqueIdentifier;\n\n /**\n * The data associated with the entity.\n */\n @reactive\n public accessor data: Data;\n\n /**\n * A boolean indicating whether the entity is disabled.\n */\n @reactive\n public accessor disabled: boolean;\n\n /**\n * An array of effects that are applied to the entity.\n */\n public effects: () => Effect[];\n\n /**\n * A method that registers the entity with the manager.\n * @returns CleanupFunction | void\n */\n public register(): CleanupFunction | void {\n return this.manager?.registry.register(this);\n }\n\n /**\n * A method that unregisters the entity from the manager.\n * @returns void\n */\n public unregister(): void {\n this.manager?.registry.unregister(this);\n }\n\n /**\n * A method that cleans up the entity when it is no longer needed.\n * @returns void\n */\n public destroy(): void {\n this.manager?.registry.unregister(this);\n }\n}\n","import {effects, signal} from '@dnd-kit/state';\n\nimport type {Entity} from './entity.ts';\nimport type {UniqueIdentifier} from './types.ts';\n\n/**\n * Reactive class representing a registry for entities.\n * @template T - The type of entries that the registry manages,\n * for example, `Draggable` or `Droppable` entities.\n */\nexport class EntityRegistry<T extends Entity> {\n private map = signal<Map<UniqueIdentifier, T>>(new Map());\n private cleanupFunctions = new WeakMap<T, () => void>();\n\n /**\n * Iterator for the EntityRegistry class.\n * @returns An iterator for the values in the map.\n */\n public [Symbol.iterator]() {\n return this.map.peek().values();\n }\n\n public get value() {\n return this.map.value.values();\n }\n\n /**\n * Checks if a entity with the given identifier exists in the registry.\n * @param identifier - The unique identifier of the entity.\n * @returns True if the entity exists, false otherwise.\n */\n public has(identifier: UniqueIdentifier): boolean {\n return this.map.value.has(identifier);\n }\n\n /**\n * Retrieves a entity from the registry using its identifier.\n * @param identifier - The unique identifier of the entity.\n * @returns The entity if it exists, undefined otherwise.\n */\n public get(identifier: UniqueIdentifier): T | undefined {\n return this.map.value.get(identifier);\n }\n\n /**\n * Registers a entity in the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity to register.\n * @returns A function that unregisters the entity.\n */\n public register = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n const currentValue = current.get(key);\n const unregister = () => this.unregister(key, value);\n\n if (currentValue === value) return unregister;\n\n if (currentValue) {\n const cleanup = this.cleanupFunctions.get(currentValue);\n cleanup?.();\n this.cleanupFunctions.delete(currentValue);\n }\n\n const updatedMap = new Map(current);\n updatedMap.set(key, value);\n\n this.map.value = updatedMap;\n\n const cleanup = effects(...value.effects());\n this.cleanupFunctions.set(value, cleanup);\n\n return unregister;\n };\n\n /**\n * Unregisters an entity from the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity instance to unregister.\n */\n public unregister = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n\n if (current.get(key) !== value) {\n return;\n }\n\n const cleanup = this.cleanupFunctions.get(value);\n cleanup?.();\n this.cleanupFunctions.delete(value);\n\n const updatedMap = new Map(current);\n updatedMap.delete(key);\n\n this.map.value = updatedMap;\n };\n\n /**\n * Destroys all entries in the registry and clears the registry.\n */\n public destroy() {\n for (const entry of this) {\n const cleanup = this.cleanupFunctions.get(entry);\n cleanup?.();\n entry.destroy();\n }\n\n this.map.value = new Map();\n }\n}\n","import {derived, reactive} from '@dnd-kit/state';\nimport type {Alignment} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport type {Modifiers} from '../../modifiers/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Sensors} from '../../sensors/sensor.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n type?: Type;\n sensors?: Sensors;\n modifiers?: Modifiers;\n alignment?: Alignment;\n}\n\nexport type DraggableStatus = 'idle' | 'dragging' | 'dropping';\n\nexport class Draggable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {modifiers, type, sensors, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.type = type;\n this.sensors = sensors;\n this.modifiers = modifiers;\n this.alignment = input.alignment;\n }\n\n @reactive\n public accessor type: Type | undefined;\n\n public sensors: Sensors | undefined;\n\n @reactive\n public accessor modifiers: Modifiers | undefined;\n\n public alignment: Alignment | undefined;\n\n @reactive\n public accessor status: DraggableStatus = this.isDragSource\n ? 'dragging'\n : 'idle';\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDropping() {\n return this.status === 'dropping' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDragging() {\n return this.status === 'dragging' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is the source of a drag operation.\n */\n @derived\n public get isDragSource() {\n return this.manager?.dragOperation.source?.id === this.id;\n }\n}\n","import {derived, effects, reactive, type Effect} from '@dnd-kit/state';\nimport type {Shape} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport {\n CollisionPriority,\n type CollisionDetector,\n} from '../../collision/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {Draggable} from '../draggable/draggable.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n accept?: Type | Type[] | ((source: Draggable) => boolean);\n collisionPriority?: CollisionPriority | number;\n collisionDetector: CollisionDetector;\n type?: Type;\n}\n\nexport class Droppable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {accept, collisionDetector, collisionPriority, type, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.accept = accept;\n this.collisionDetector = collisionDetector;\n this.collisionPriority = collisionPriority;\n this.type = type;\n }\n\n /**\n * An array of types that are compatible with the droppable.\n */\n @reactive\n public accessor accept:\n | Type\n | Type[]\n | ((draggable: Draggable) => boolean)\n | undefined;\n\n /**\n * The type of the droppable.\n */\n @reactive\n public accessor type: Type | undefined;\n\n /**\n * Checks whether or not the droppable accepts a given draggable.\n *\n * @param {Draggable} draggable\n * @returns {boolean}\n */\n public accepts(draggable: Draggable): boolean {\n const {accept} = this;\n\n if (!accept) {\n return true;\n }\n\n if (typeof accept === 'function') {\n return accept(draggable);\n }\n\n if (!draggable.type) {\n return false;\n }\n\n if (Array.isArray(accept)) {\n return accept.includes(draggable.type);\n }\n\n return draggable.type === accept;\n }\n\n @reactive\n public accessor collisionDetector: CollisionDetector;\n\n @reactive\n public accessor collisionPriority: CollisionPriority | number | undefined;\n\n @reactive\n public accessor shape: Shape | undefined;\n\n @derived\n public get isDropTarget() {\n return this.manager?.dragOperation.target?.id === this.id;\n }\n}\n","import {CleanupFunction} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {\n Plugin,\n type PluginConstructor,\n type PluginDescriptor,\n type PluginOptions,\n} from '../plugins/index.ts';\n\nexport type SensorOptions = PluginOptions;\n\nexport abstract class Sensor<\n T extends DragDropManager<any, any> = DragDropManager<Draggable, Droppable>,\n U extends SensorOptions = SensorOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n /**\n * Bind the sensor to a draggable source, and optionally pass\n * in sensor options to override the default sensor options\n * for this draggable source only.\n */\n public abstract bind(source: Draggable, options?: U): CleanupFunction;\n}\n\nexport type SensorConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Sensor<T>>;\n\nexport type SensorDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Sensor<T>, SensorConstructor<T>>;\n\nexport type Sensors<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (SensorConstructor<T> | SensorDescriptor<T>)[];\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {\n Plugin,\n type PluginOptions,\n type PluginConstructor,\n type PluginDescriptor,\n} from '../plugins/index.ts';\nimport type {DragDropManager} from '../manager/index.ts';\n\nexport type ModifierOptions = PluginOptions;\n\nexport class Modifier<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends ModifierOptions = ModifierOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n public apply(operation: T['dragOperation']): Coordinates {\n return operation.transform;\n }\n}\n\nexport type ModifierConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Modifier<T, any>>;\n\nexport type ModifierDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Modifier<T, any>, ModifierConstructor<T>>;\n\nexport type Modifiers<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (ModifierConstructor<T> | ModifierDescriptor<T>)[];\n","import type {CleanupFunction} from '@dnd-kit/state';\n\nimport {\n Draggable,\n Droppable,\n Entity,\n EntityRegistry,\n} from '../entities/index.ts';\nimport {\n PluginRegistry,\n Plugin,\n type PluginConstructor,\n PluginOptions,\n} from '../plugins/index.ts';\nimport {\n Sensor,\n SensorOptions,\n type SensorConstructor,\n} from '../sensors/index.ts';\nimport {Modifier, type ModifierConstructor} from '../modifiers/index.ts';\nimport type {DragDropManager} from './manager.ts';\n\nexport class DragDropRegistry<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> {\n constructor(manager: V) {\n this.plugins = new PluginRegistry<V, PluginConstructor<V>>(manager);\n this.sensors = new PluginRegistry<V, SensorConstructor<V>>(manager);\n this.modifiers = new PluginRegistry<V, ModifierConstructor<V>>(manager);\n }\n\n public draggables = new EntityRegistry<T>();\n public droppables = new EntityRegistry<U>();\n public plugins: PluginRegistry<V, PluginConstructor<V>>;\n public sensors: PluginRegistry<V, SensorConstructor<V>>;\n public modifiers: PluginRegistry<V, ModifierConstructor<V>>;\n\n public register(input: Entity): () => void;\n public register(input: Draggable): () => void;\n public register(input: Droppable): () => void;\n public register(input: SensorConstructor, options?: SensorOptions): Sensor;\n public register(input: ModifierConstructor): Modifier;\n public register(input: PluginConstructor, options?: PluginOptions): Plugin;\n public register(input: any, options?: Record<string, any>) {\n if (input instanceof Draggable) {\n return this.draggables.register(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.register(input.id, input as U);\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.register(input, options);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.register(input, options);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.register(input, options);\n }\n\n throw new Error('Invalid instance type');\n }\n\n public unregister(input: Entity): CleanupFunction;\n public unregister(input: Draggable): CleanupFunction;\n public unregister(input: Droppable): CleanupFunction;\n public unregister(input: SensorConstructor): CleanupFunction;\n public unregister(input: ModifierConstructor): CleanupFunction;\n public unregister(input: PluginConstructor): CleanupFunction;\n public unregister(input: any) {\n if (input instanceof Entity) {\n if (input instanceof Draggable) {\n return this.draggables.unregister(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.unregister(input.id, input as U);\n }\n\n // no-op\n return () => {};\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.unregister(input);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.unregister(input);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.unregister(input);\n }\n\n throw new Error('Invalid instance type');\n }\n\n destroy() {\n this.draggables.destroy();\n this.droppables.destroy();\n this.plugins.destroy();\n this.sensors.destroy();\n this.modifiers.destroy();\n }\n}\n","import {Position, type Shape} from '@dnd-kit/geometry';\nimport type {Coordinates} from '@dnd-kit/geometry';\nimport {\n batch,\n computed,\n deepEqual,\n effect,\n signal,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\nimport type {Modifier} from '../modifiers/index.ts';\nimport {descriptor} from '../plugins/index.ts';\n\nimport type {DragDropManager} from './manager.ts';\nimport {defaultPreventable} from './events.ts';\n\nexport enum Status {\n Idle = 'idle',\n InitializationPending = 'initialization-pending',\n Initializing = 'initializing',\n Dragging = 'dragging',\n Dropped = 'dropped',\n}\n\nexport type Serializable = {\n [key: string]: string | number | null | Serializable | Serializable[];\n};\n\nexport interface DragOperation<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n activatorEvent: Event | null;\n canceled: boolean;\n position: Position;\n transform: Coordinates;\n status: {\n current: Status;\n initialized: boolean;\n initializing: boolean;\n dragging: boolean;\n dragended: boolean;\n dropped: boolean;\n idle: boolean;\n };\n get shape(): {\n initial: Shape;\n current: Shape;\n } | null;\n set shape(value: Shape | null);\n source: T | null;\n target: U | null;\n data?: Serializable;\n}\n\nexport type DragActions<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = ReturnType<typeof DragOperationManager<T, U, V>>['actions'];\n\nexport function DragOperationManager<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n>(manager: V) {\n const {\n registry: {draggables, droppables},\n monitor,\n } = manager;\n const status = signal<Status>(Status.Idle);\n const shape = {\n initial: signal<Shape | null>(null),\n current: signal<Shape | null>(null),\n };\n const canceled = signal<boolean>(false);\n const position = new Position({x: 0, y: 0});\n const activatorEvent = signal<Event | null>(null);\n const sourceIdentifier = signal<UniqueIdentifier | null>(null);\n const targetIdentifier = signal<UniqueIdentifier | null>(null);\n const dragging = computed(() => status.value === Status.Dragging);\n const initialized = computed(() => status.value !== Status.Idle);\n const initializing = computed(() => status.value === Status.Initializing);\n const idle = computed(() => status.value === Status.Idle);\n const dropped = computed(() => status.value === Status.Dropped);\n const dragended = signal<boolean>(true);\n let previousSource: T | undefined;\n const source = computed<T | null>(() => {\n const identifier = sourceIdentifier.value;\n\n if (identifier == null) return null;\n\n const value = draggables.get(identifier);\n\n if (value) {\n // It's possible for the source to unmount during the drag operation\n previousSource = value;\n }\n\n return value ?? previousSource ?? null;\n });\n const target = computed<U | null>(() => {\n const identifier = targetIdentifier.value;\n return identifier != null ? (droppables.get(identifier) ?? null) : null;\n });\n\n const modifiers = signal<Modifier[]>([]);\n\n const dispose = effect(() => {\n const currentModifiers = modifiers.peek();\n\n if (!deepEqual(currentModifiers, manager.modifiers)) {\n currentModifiers.forEach((modifier) => modifier.destroy());\n }\n\n modifiers.value =\n source.value?.modifiers?.map((modifier) => {\n const {plugin, options} = descriptor(modifier);\n return new plugin(manager, options);\n }) ?? manager.modifiers;\n });\n\n const transform = computed(() => {\n const {x, y} = position.delta;\n\n let transform = {x, y};\n const initialShape = shape.initial.value;\n const currentShape = shape.current.peek();\n const operation: Omit<DragOperation<T, U>, 'transform'> = {\n activatorEvent: activatorEvent.peek(),\n canceled: canceled.peek(),\n source: source.peek(),\n target: target.peek(),\n status: {\n current: status.peek(),\n idle: idle.peek(),\n initializing: initializing.peek(),\n initialized: initialized.peek(),\n dragging: dragging.peek(),\n dragended: dragended.peek(),\n dropped: dropped.peek(),\n },\n shape:\n initialShape && currentShape\n ? {initial: initialShape, current: currentShape}\n : null,\n position,\n };\n\n for (const modifier of modifiers.value) {\n transform = modifier.apply({...operation, transform});\n }\n\n return transform;\n });\n\n const operation: DragOperation<T, U> = {\n get activatorEvent() {\n return activatorEvent.value;\n },\n get canceled() {\n return canceled.value;\n },\n get source() {\n return source.value;\n },\n get target() {\n return target.value;\n },\n status: {\n get current() {\n return status.value;\n },\n get idle() {\n return idle.value;\n },\n get initializing() {\n return initializing.value;\n },\n get initialized() {\n return initialized.value;\n },\n get dragging() {\n return dragging.value;\n },\n get dragended() {\n return dragended.value;\n },\n get dropped() {\n return dropped.value;\n },\n },\n get shape(): DragOperation['shape'] {\n const initial = shape.initial.value;\n const current = shape.current.value;\n\n return initial && current ? {initial, current} : null;\n },\n set shape(value: Shape | null) {\n if (value && shape.current.peek()?.equals(value)) {\n return;\n }\n\n const initial = shape.initial.peek();\n\n if (!initial) {\n shape.initial.value = value;\n }\n\n shape.current.value = value;\n },\n get transform() {\n return transform.value;\n },\n position,\n };\n\n const reset = () => {\n batch(() => {\n status.value = Status.Idle;\n sourceIdentifier.value = null;\n targetIdentifier.value = null;\n shape.current.value = null;\n shape.initial.value = null;\n position.reset({x: 0, y: 0});\n modifiers.value = [];\n });\n };\n\n const actions = {\n setDragSource(identifier: UniqueIdentifier) {\n sourceIdentifier.value = identifier;\n },\n setDropTarget(\n identifier: UniqueIdentifier | null | undefined\n ): Promise<boolean> {\n const id = identifier ?? null;\n\n if (targetIdentifier.peek() === id) {\n return Promise.resolve(false);\n }\n\n targetIdentifier.value = id;\n\n const event = defaultPreventable({\n operation: snapshot(operation),\n });\n\n if (status.peek() === Status.Dragging) {\n monitor.dispatch('dragover', event);\n }\n\n return manager.renderer.rendering.then(() => event.defaultPrevented);\n },\n start({\n event: nativeEvent,\n coordinates,\n }: {\n event?: Event;\n coordinates: Coordinates;\n }): boolean {\n const sourceInstance = source.peek();\n\n if (!sourceInstance) {\n throw new Error('Cannot start a drag operation without a drag source');\n }\n\n batch(() => {\n status.value = Status.InitializationPending;\n shape.initial.value = null;\n shape.current.value = null;\n dragended.value = false;\n canceled.value = false;\n activatorEvent.value = nativeEvent ?? null;\n position.reset(coordinates);\n });\n\n const beforeStartEvent = defaultPreventable({\n operation: snapshot(operation),\n });\n\n monitor.dispatch('beforedragstart', beforeStartEvent);\n\n if (beforeStartEvent.defaultPrevented) {\n reset();\n return false;\n }\n\n manager.renderer.rendering.then(() => {\n status.value = Status.Initializing;\n\n requestAnimationFrame(() => {\n status.value = Status.Dragging;\n\n monitor.dispatch('dragstart', {\n nativeEvent,\n operation: snapshot(operation),\n cancelable: false,\n });\n });\n });\n\n return true;\n },\n move({\n by,\n to,\n event: nativeEvent,\n cancelable = true,\n propagate = true,\n }:\n | {\n by: Coordinates;\n to?: undefined;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }\n | {\n by?: undefined;\n to: Coordinates;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }) {\n if (!dragging.peek()) {\n return;\n }\n\n const event = defaultPreventable(\n {\n nativeEvent,\n operation: snapshot(operation),\n by,\n to,\n },\n cancelable\n );\n\n if (propagate) {\n monitor.dispatch('dragmove', event);\n }\n\n queueMicrotask(() => {\n if (event.defaultPrevented) {\n return;\n }\n\n const coordinates = to ?? {\n x: position.current.x + by.x,\n y: position.current.y + by.y,\n };\n\n position.update(coordinates);\n });\n },\n stop({\n canceled: eventCanceled = false,\n event: nativeEvent,\n }: {event?: Event; canceled?: boolean} = {}) {\n let promise: Promise<void> | undefined;\n const suspend = () => {\n const output = {\n resume: () => {},\n abort: () => {},\n };\n\n promise = new Promise<void>((resolve, reject) => {\n output.resume = resolve;\n output.abort = reject;\n });\n\n return output;\n };\n const end = () => {\n /* Wait for the renderer to finish rendering before finalizing the drag operation */\n manager.renderer.rendering.then(() => {\n status.value = Status.Dropped;\n\n const dropping = untracked(() => source.value?.status === 'dropping');\n\n if (dropping) {\n const currentSource = source.value;\n\n // Wait until the source has finished dropping before resetting the operation\n const dispose = effect(() => {\n if (currentSource?.status === 'idle') {\n dispose();\n\n // Only reset the drag operation if the source is still the same source that was active when the drag operation\n // was ended, as it's possible for a new drag operation to start while the previous source is still dropping\n if (source.value !== currentSource) return;\n\n reset();\n }\n });\n } else {\n manager.renderer.rendering.then(reset);\n }\n });\n };\n\n batch(() => {\n dragended.value = true;\n canceled.value = eventCanceled;\n });\n\n monitor.dispatch('dragend', {\n nativeEvent,\n operation: snapshot(operation),\n canceled: eventCanceled,\n suspend,\n });\n\n if (promise) {\n promise.then(end).catch(reset);\n } else {\n end();\n }\n },\n };\n\n return {\n operation,\n actions,\n cleanup() {\n if (status.peek() !== Status.Idle) {\n actions.stop({canceled: true});\n }\n\n modifiers.value.forEach((modifier) => modifier.destroy());\n dispose();\n },\n };\n}\n\nfunction snapshot<T extends Record<string, any>>(obj: T): T {\n return {\n ...obj,\n };\n}\n","export interface Renderer {\n get rendering(): Promise<void>;\n}\n\nexport const defaultRenderer: Renderer = {\n get rendering() {\n return Promise.resolve();\n },\n};\n","import type {Draggable, Droppable} from '../entities/index.ts';\nimport {CollisionObserver, CollisionNotifier} from '../collision/index.ts';\nimport type {Plugins, Plugin} from '../plugins/index.ts';\nimport type {Sensor, Sensors} from '../sensors/index.ts';\nimport type {Modifier, Modifiers} from '../modifiers/index.ts';\n\nimport {DragDropRegistry} from './registry.ts';\nimport {\n DragOperationManager,\n type DragOperation,\n type DragActions,\n} from './dragOperation.ts';\nimport {DragDropMonitor} from './events.ts';\nimport {defaultRenderer, type Renderer} from './renderer.ts';\n\nexport type DragDropManagerInput<T extends DragDropManager<any, any>> = {\n plugins?: Plugins<T>;\n sensors?: Sensors<T>;\n modifiers?: Modifiers<T>;\n renderer?: Renderer;\n};\n\nexport class DragDropManager<T extends Draggable, U extends Droppable> {\n public actions: DragActions<T, U, DragDropManager<T, U>>;\n public collisionObserver: CollisionObserver<T, U>;\n public dragOperation: DragOperation<T, U>;\n public monitor: DragDropMonitor<T, U, DragDropManager<T, U>>;\n public registry: DragDropRegistry<T, U, DragDropManager<T, U>>;\n public renderer: Renderer;\n\n constructor(config?: DragDropManagerInput<any>) {\n type V = DragDropManager<T, U>;\n\n const {\n plugins = [],\n sensors = [],\n modifiers = [],\n renderer = defaultRenderer,\n } = config ?? {};\n const monitor = new DragDropMonitor<T, U, V>(this);\n const registry = new DragDropRegistry<T, U, V>(this);\n\n this.registry = registry;\n this.monitor = monitor;\n this.renderer = renderer;\n\n const {actions, operation, cleanup} = DragOperationManager<T, U, V>(this);\n\n this.actions = actions;\n this.dragOperation = operation;\n this.collisionObserver = new CollisionObserver<T, U, V>(this);\n this.plugins = [CollisionNotifier, ...plugins];\n this.modifiers = modifiers;\n this.sensors = sensors;\n\n const {destroy} = this;\n\n this.destroy = () => {\n cleanup();\n destroy();\n };\n }\n\n get plugins(): Plugin<any>[] {\n return this.registry.plugins.values;\n }\n\n set plugins(plugins: Plugins<any>) {\n this.registry.plugins.values = plugins;\n }\n\n get modifiers(): Modifier<any>[] {\n return this.registry.modifiers.values;\n }\n\n set modifiers(modifiers: Modifiers<any>) {\n this.registry.modifiers.values = modifiers;\n }\n\n get sensors(): Sensor<any>[] {\n return this.registry.sensors.values;\n }\n\n set sensors(sensors: Sensors<any>) {\n this.registry.sensors.values = sensors;\n }\n\n public destroy = () => {\n this.registry.destroy();\n this.collisionObserver.destroy();\n };\n}\n"]}
|
package/index.d.cts
CHANGED
|
@@ -393,7 +393,7 @@ declare function DragOperationManager<T extends Draggable, U extends Droppable,
|
|
|
393
393
|
start({ event: nativeEvent, coordinates, }: {
|
|
394
394
|
event?: Event;
|
|
395
395
|
coordinates: Coordinates;
|
|
396
|
-
}):
|
|
396
|
+
}): boolean;
|
|
397
397
|
move({ by, to, event: nativeEvent, cancelable, propagate, }: {
|
|
398
398
|
by: Coordinates;
|
|
399
399
|
to?: undefined;
|
package/index.d.ts
CHANGED
|
@@ -393,7 +393,7 @@ declare function DragOperationManager<T extends Draggable, U extends Droppable,
|
|
|
393
393
|
start({ event: nativeEvent, coordinates, }: {
|
|
394
394
|
event?: Event;
|
|
395
395
|
coordinates: Coordinates;
|
|
396
|
-
}):
|
|
396
|
+
}): boolean;
|
|
397
397
|
move({ by, to, event: nativeEvent, cancelable, propagate, }: {
|
|
398
398
|
by: Coordinates;
|
|
399
399
|
to?: undefined;
|
package/index.js
CHANGED
|
@@ -979,11 +979,11 @@ function DragOperationManager(manager) {
|
|
|
979
979
|
operation: snapshot(operation)
|
|
980
980
|
});
|
|
981
981
|
monitor.dispatch("beforedragstart", beforeStartEvent);
|
|
982
|
+
if (beforeStartEvent.defaultPrevented) {
|
|
983
|
+
reset();
|
|
984
|
+
return false;
|
|
985
|
+
}
|
|
982
986
|
manager.renderer.rendering.then(() => {
|
|
983
|
-
if (beforeStartEvent.defaultPrevented) {
|
|
984
|
-
reset();
|
|
985
|
-
return;
|
|
986
|
-
}
|
|
987
987
|
status.value = "initializing" /* Initializing */;
|
|
988
988
|
requestAnimationFrame(() => {
|
|
989
989
|
status.value = "dragging" /* Dragging */;
|
|
@@ -994,6 +994,7 @@ function DragOperationManager(manager) {
|
|
|
994
994
|
});
|
|
995
995
|
});
|
|
996
996
|
});
|
|
997
|
+
return true;
|
|
997
998
|
},
|
|
998
999
|
move({
|
|
999
1000
|
by,
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/core/plugins/utilities.ts","src/core/plugins/plugin.ts","src/core/plugins/registry.ts","src/core/collision/utilities.ts","src/core/collision/observer.ts","src/core/manager/events.ts","src/core/collision/notifier.ts","src/core/collision/types.ts","src/core/entities/entity/entity.ts","src/core/entities/entity/registry.ts","src/core/entities/draggable/draggable.ts","src/core/entities/droppable/droppable.ts","src/core/sensors/sensor.ts","src/core/modifiers/modifier.ts","src/core/manager/registry.ts","src/core/manager/dragOperation.ts","src/core/manager/renderer.ts","src/core/manager/manager.ts"],"names":["descriptor","untracked","effects","CollisionPriority","CollisionType","_disabled_dec","_init","_disabled","reactive","id","manager","signal","cleanup","_type_dec","_c","_type","derived","Status","effect","transform","operation","dispose"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n PluginConstructor,\n PluginOptions,\n PluginDescriptor,\n InferPluginOptions,\n} from './types.ts';\n\nexport function configure<\n T extends PluginConstructor<any, any, any>,\n V extends PluginOptions = InferPluginOptions<T>,\n>(plugin: T, options: V): PluginDescriptor<any, any, T> {\n return {\n plugin,\n options,\n };\n}\n\nexport function configurator<T extends PluginConstructor<any, any, any>>(\n plugin: T\n) {\n return (options: InferPluginOptions<T>): PluginDescriptor<any, any, T> => {\n return configure(plugin, options);\n };\n}\n\nexport function descriptor<T extends PluginConstructor<any, any, any>>(\n plugin: T | PluginDescriptor<any, any, T>\n): PluginDescriptor<any, any, T> {\n if (typeof plugin === 'function') {\n return {\n plugin,\n options: undefined,\n };\n }\n\n return plugin;\n}\n","import {\n type CleanupFunction,\n effect,\n reactive,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {PluginOptions} from './types.ts';\nimport {configure} from './utilities.ts';\n\n/**\n * An abstract plugin class that can be extended to implement custom\n * functionality that augments the `DragDropManager`'s core capabilities.\n */\nexport abstract class Plugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> {\n constructor(\n public manager: T,\n public options?: U\n ) {}\n\n /**\n * Whether the plugin instance is disabled.\n * Triggers effects when accessed.\n */\n @reactive\n public accessor disabled: boolean = false;\n\n /**\n * Enable a disabled plugin instance.\n * Triggers effects.\n */\n public enable() {\n this.disabled = false;\n }\n\n /**\n * Disable an enabled plugin instance.\n * Triggers effects.\n */\n public disable() {\n this.disabled = true;\n }\n\n /**\n * Whether the plugin instance is disabled.\n * Does not trigger effects when accessed.\n */\n public isDisabled() {\n return untracked(() => {\n return this.disabled;\n });\n }\n\n /**\n * Configure a plugin instance with new options.\n */\n public configure(options?: U) {\n this.options = options;\n }\n\n #cleanupFunctions = new Set<CleanupFunction>();\n\n /**\n * Register an effect that will be cleaned up when the plugin instance is destroyed.\n * Returns a cleanup function that can be used to dispose of the effect.\n */\n protected registerEffect(callback: () => void) {\n const dispose = effect(callback.bind(this));\n\n this.#cleanupFunctions.add(dispose);\n\n return dispose;\n }\n\n /**\n * Destroy a plugin instance.\n */\n public destroy() {\n /*\n * Each plugin is responsible for implementing its own\n * destroy method to clean up effects and listeners\n */\n\n this.#cleanupFunctions.forEach((cleanup) => cleanup());\n }\n\n /**\n * Configure a plugin constructor with options.\n * This method is used to configure the options that the\n * plugin constructor will use to create plugin instances.\n */\n static configure(options: PluginOptions) {\n return configure(this as any, options);\n }\n}\n\nexport class CorePlugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> extends Plugin<T, U> {}\n","import {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin, type Plugin} from './plugin.ts';\nimport type {\n InferPluginOptions,\n PluginDescriptor,\n PluginConstructor,\n Plugins,\n} from './types.ts';\nimport {descriptor} from './utilities.ts';\n\nexport class PluginRegistry<\n T extends DragDropManager<any, any>,\n W extends PluginConstructor<T> = PluginConstructor<T>,\n U extends Plugin<T> = InstanceType<W>,\n> {\n private instances: Map<W, U> = new Map();\n\n constructor(private manager: T) {}\n\n public get values(): U[] {\n return Array.from(this.instances.values());\n }\n\n #previousValues: PluginConstructor<T>[] = [];\n\n public set values(entries: Plugins<T>) {\n const descriptors = entries\n .map(descriptor)\n .reduceRight<PluginDescriptor<T>[]>((acc, descriptor) => {\n if (acc.some(({plugin}) => plugin === descriptor.plugin)) {\n // Filter out duplicate plugins\n return acc;\n }\n\n return [descriptor, ...acc];\n }, []);\n const constructors = descriptors.map(({plugin}) => plugin);\n\n for (const plugin of this.#previousValues) {\n if (!constructors.includes(plugin)) {\n if (plugin.prototype instanceof CorePlugin) {\n continue;\n }\n\n this.unregister(plugin as W);\n }\n }\n\n for (const {plugin, options} of descriptors) {\n this.register(plugin as W, options as InferPluginOptions<W>);\n }\n\n this.#previousValues = constructors;\n }\n\n public get<X extends W>(plugin: X): InstanceType<X> | undefined {\n const instance = this.instances.get(plugin);\n\n return instance as any;\n }\n\n public register<X extends W>(\n plugin: X,\n options?: InferPluginOptions<X>\n ): InstanceType<X> {\n const existingInstance = this.instances.get(plugin);\n\n if (existingInstance) {\n if (existingInstance.options !== options) {\n existingInstance.options = options;\n }\n\n return existingInstance as InstanceType<X>;\n }\n\n const instance = new plugin(this.manager, options) as U;\n\n this.instances.set(plugin, instance);\n\n return instance as InstanceType<X>;\n }\n\n public unregister<X extends W>(plugin: X) {\n const instance = this.instances.get(plugin);\n\n if (instance) {\n instance.destroy();\n this.instances.delete(plugin);\n }\n }\n\n public destroy() {\n for (const plugin of this.instances.values()) {\n plugin.destroy();\n }\n\n this.instances.clear();\n }\n}\n","import {Collision} from './types.ts';\n\n/**\n * Sort collisions from greatest to smallest priority\n * Collisions of equal priority are sorted from greatest to smallest value\n */\nexport function sortCollisions(a: Collision, b: Collision) {\n if (a.priority === b.priority) {\n if (a.type === b.type) {\n return b.value - a.value;\n }\n\n return b.type - a.type;\n }\n\n return b.priority - a.priority;\n}\n","import {signal, untracked, type Signal, effects} from '@dnd-kit/state';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {Plugin} from '../plugins/index.ts';\nimport type {Collision, CollisionDetector, Collisions} from './types.ts';\nimport {sortCollisions} from './utilities.ts';\n\nconst DEFAULT_VALUE: Collisions = [];\n\nexport class CollisionObserver<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n V extends DragDropManager<T, U> = DragDropManager<T, U>,\n> extends Plugin<V> {\n constructor(manager: V) {\n super(manager);\n\n this.computeCollisions = this.computeCollisions.bind(this);\n this.#collisions = signal(DEFAULT_VALUE);\n\n this.destroy = effects(\n () => {\n const collisions = this.computeCollisions();\n const coordinates = untracked(\n () => this.manager.dragOperation.position.current\n );\n\n if (collisions !== DEFAULT_VALUE) {\n const previousCoordinates = this.#previousCoordinates;\n this.#previousCoordinates = coordinates;\n\n if (\n previousCoordinates &&\n coordinates.x == previousCoordinates.x &&\n coordinates.y == previousCoordinates.y\n ) {\n return;\n }\n } else {\n this.#previousCoordinates = undefined;\n }\n\n this.#collisions.value = collisions;\n },\n () => {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n this.forceUpdate();\n }\n }\n );\n }\n\n #previousCoordinates: Coordinates | undefined;\n\n public forceUpdate(immediate = true) {\n untracked(() => {\n if (immediate) {\n this.#collisions.value = this.computeCollisions();\n } else {\n this.#previousCoordinates = undefined;\n }\n });\n }\n\n public computeCollisions(\n entries?: Droppable[],\n collisionDetector?: CollisionDetector\n ) {\n const {registry, dragOperation} = this.manager;\n const {source, shape, status} = dragOperation;\n\n if (!status.initialized || !shape) {\n return DEFAULT_VALUE;\n }\n\n const collisions: Collision[] = [];\n const potentialTargets = [];\n\n for (const entry of entries ?? registry.droppables) {\n if (entry.disabled) {\n continue;\n }\n\n if (source && !entry.accepts(source)) {\n continue;\n }\n\n const detectCollision = collisionDetector ?? entry.collisionDetector;\n\n if (!detectCollision) {\n continue;\n }\n\n potentialTargets.push(entry);\n\n // Force collisions to be recomputed when the shape changes\n void entry.shape;\n\n const collision = untracked(() =>\n detectCollision({\n droppable: entry,\n dragOperation,\n })\n );\n\n if (collision) {\n if (entry.collisionPriority != null) {\n collision.priority = entry.collisionPriority;\n }\n\n collisions.push(collision);\n }\n }\n\n if (potentialTargets.length === 0) {\n return DEFAULT_VALUE;\n }\n\n collisions.sort(sortCollisions);\n\n return collisions;\n }\n\n public get collisions() {\n return this.#collisions.value;\n }\n\n #collisions: Signal<Collisions>;\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport type {Collisions} from '../collision/index.ts';\nimport type {DragDropManager} from './manager.ts';\nimport type {DragOperation} from './dragOperation.ts';\n\nexport type Events = Record<string, (...args: any[]) => void>;\n\nexport type Preventable<T> = T & {\n cancelable: boolean;\n defaultPrevented: boolean;\n preventDefault(): void;\n};\n\nclass Monitor<T extends Events> {\n private registry = new Map<keyof T, Set<T[keyof T]>>();\n\n public addEventListener<U extends keyof T>(name: U, handler: T[U]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.add(handler);\n registry.set(name, listeners);\n\n return () => this.removeEventListener(name, handler);\n }\n\n public removeEventListener(name: keyof T, handler: T[keyof T]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.delete(handler);\n registry.set(name, listeners);\n }\n\n protected dispatch<U extends keyof T>(name: U, ...args: any[]) {\n const {registry} = this;\n const listeners = registry.get(name);\n\n if (!listeners) {\n return;\n }\n\n for (const listener of listeners) {\n listener(...args);\n }\n }\n}\n\nexport type DragDropEvents<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = {\n collision(\n event: Preventable<{\n collisions: Collisions;\n }>,\n manager: V\n ): void;\n beforedragstart(\n event: Preventable<{\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragstart(\n event: {\n cancelable: false;\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n },\n manager: V\n ): void;\n dragmove(\n event: Preventable<{\n operation: DragOperation<T, U>;\n to?: Coordinates;\n by?: Coordinates;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragover(\n event: Preventable<{\n operation: DragOperation<T, U>;\n }>,\n manager: V\n ): void;\n dragend(\n event: {\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n canceled: boolean;\n suspend(): {resume(): void; abort(): void};\n },\n manager: V\n ): void;\n};\n\nexport class DragDropMonitor<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> extends Monitor<DragDropEvents<T, U, V>> {\n constructor(private manager: V) {\n super();\n }\n\n public dispatch<Key extends keyof DragDropEvents<T, U, V>>(\n type: Key,\n event: Parameters<DragDropEvents<T, U, V>[Key]>[0]\n ) {\n const args = [event, this.manager] as any;\n\n super.dispatch(type, ...args);\n }\n}\n\nexport function defaultPreventable<T>(\n event: T,\n cancelable = true\n): Preventable<T> {\n let defaultPrevented = false;\n\n return {\n ...event,\n cancelable,\n get defaultPrevented() {\n return defaultPrevented;\n },\n preventDefault() {\n if (!cancelable) {\n return;\n }\n\n defaultPrevented = true;\n },\n };\n}\n","import {effect, effects, untracked} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin} from '../plugins/index.ts';\nimport {defaultPreventable} from '../manager/events.ts';\n\nimport type {Collision} from './types.ts';\n\nexport class CollisionNotifier extends CorePlugin {\n constructor(manager: DragDropManager<any, any>) {\n super(manager);\n\n const isEqual = (a: Collision[], b: Collision[]) =>\n a.map(({id}) => id).join('') === b.map(({id}) => id).join('');\n\n let previousCollisions: Collision[] = [];\n\n this.destroy = effects(\n () => {\n const {dragOperation, collisionObserver} = manager;\n\n if (dragOperation.status.initializing) {\n previousCollisions = [];\n collisionObserver.enable();\n }\n },\n () => {\n const {collisionObserver, monitor} = manager;\n const {collisions} = collisionObserver;\n\n if (collisionObserver.isDisabled()) {\n return;\n }\n\n const event = defaultPreventable({\n collisions,\n });\n\n monitor.dispatch('collision', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isEqual(collisions, previousCollisions)) {\n return;\n } else {\n previousCollisions = collisions;\n }\n\n const [firstCollision] = collisions;\n\n untracked(() => {\n if (firstCollision?.id !== manager.dragOperation.target?.id) {\n collisionObserver.disable();\n\n manager.actions.setDropTarget(firstCollision?.id).then(() => {\n collisionObserver.enable();\n });\n }\n });\n }\n );\n }\n}\n","import type {DragOperation} from '../manager/index.ts';\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\n\nexport enum CollisionPriority {\n Lowest,\n Low,\n Normal,\n High,\n Highest,\n}\n\nexport enum CollisionType {\n Collision,\n ShapeIntersection,\n PointerIntersection,\n}\n\nexport interface Collision {\n id: UniqueIdentifier;\n priority: CollisionPriority | number;\n type: CollisionType;\n value: number;\n data?: Record<string, any>;\n}\n\nexport type Collisions = Collision[];\n\nexport interface CollisionDetectorInput<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n droppable: U;\n dragOperation: DragOperation<T, U>;\n}\n\nexport type CollisionDetector = <\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n>(\n input: CollisionDetectorInput<T, U>\n) => Collision | null;\n","import {CleanupFunction, reactive, type Effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\nimport type {Data, UniqueIdentifier} from './types.ts';\n\nexport interface Input<T extends Data = Data> {\n /**\n * The unique identifier of the entity.\n */\n id: UniqueIdentifier;\n /**\n * Optional data associated with the entity.\n */\n data?: T;\n /**\n * Whether the entity should initially be disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the entity should be automatically registered with the manager when it is created.\n * @default true\n */\n register?: boolean;\n /**\n * An array of effects that are set up when the entity is registered and cleaned up when it is unregistered.\n */\n effects?(): Effect[];\n}\n\n/**\n * The `Entity` class is an abstract representation of a distinct unit in the drag and drop system.\n * It is a base class that other concrete classes like `Draggable` and `Droppable` can extend.\n *\n * @template T - The type of data associated with the entity.\n */\nexport class Entity<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> {\n /**\n * Creates a new instance of the `Entity` class.\n *\n * @param input - An object containing the initial properties of the entity.\n * @param manager - The manager that controls the drag and drop operations.\n */\n constructor(input: Input<T>, manager: U | undefined) {\n const {effects, id, data = {}, disabled = false, register = true} = input;\n\n let previousId = id;\n\n this.manager = manager;\n this.id = id;\n this.data = data;\n this.disabled = disabled;\n this.effects = () => [\n () => {\n // Re-run this effect whenever the `id` changes\n const {id, manager} = this;\n\n if (id === previousId) {\n return;\n }\n\n manager?.registry.register(this);\n\n return () => manager?.registry.unregister(this);\n },\n ...(effects?.() ?? []),\n ];\n\n this.register = this.register.bind(this);\n this.unregister = this.unregister.bind(this);\n this.destroy = this.destroy.bind(this);\n\n if (manager && register) {\n queueMicrotask(this.register);\n }\n }\n\n /**\n * The manager that controls the drag and drop operations.\n */\n @reactive\n public accessor manager: U | undefined;\n\n /**\n * The unique identifier of the entity.\n */\n @reactive\n public accessor id: UniqueIdentifier;\n\n /**\n * The data associated with the entity.\n */\n @reactive\n public accessor data: Data;\n\n /**\n * A boolean indicating whether the entity is disabled.\n */\n @reactive\n public accessor disabled: boolean;\n\n /**\n * An array of effects that are applied to the entity.\n */\n public effects: () => Effect[];\n\n /**\n * A method that registers the entity with the manager.\n * @returns CleanupFunction | void\n */\n public register(): CleanupFunction | void {\n return this.manager?.registry.register(this);\n }\n\n /**\n * A method that unregisters the entity from the manager.\n * @returns void\n */\n public unregister(): void {\n this.manager?.registry.unregister(this);\n }\n\n /**\n * A method that cleans up the entity when it is no longer needed.\n * @returns void\n */\n public destroy(): void {\n this.manager?.registry.unregister(this);\n }\n}\n","import {effects, signal} from '@dnd-kit/state';\n\nimport type {Entity} from './entity.ts';\nimport type {UniqueIdentifier} from './types.ts';\n\n/**\n * Reactive class representing a registry for entities.\n * @template T - The type of entries that the registry manages,\n * for example, `Draggable` or `Droppable` entities.\n */\nexport class EntityRegistry<T extends Entity> {\n private map = signal<Map<UniqueIdentifier, T>>(new Map());\n private cleanupFunctions = new WeakMap<T, () => void>();\n\n /**\n * Iterator for the EntityRegistry class.\n * @returns An iterator for the values in the map.\n */\n public [Symbol.iterator]() {\n return this.map.peek().values();\n }\n\n public get value() {\n return this.map.value.values();\n }\n\n /**\n * Checks if a entity with the given identifier exists in the registry.\n * @param identifier - The unique identifier of the entity.\n * @returns True if the entity exists, false otherwise.\n */\n public has(identifier: UniqueIdentifier): boolean {\n return this.map.value.has(identifier);\n }\n\n /**\n * Retrieves a entity from the registry using its identifier.\n * @param identifier - The unique identifier of the entity.\n * @returns The entity if it exists, undefined otherwise.\n */\n public get(identifier: UniqueIdentifier): T | undefined {\n return this.map.value.get(identifier);\n }\n\n /**\n * Registers a entity in the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity to register.\n * @returns A function that unregisters the entity.\n */\n public register = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n const currentValue = current.get(key);\n const unregister = () => this.unregister(key, value);\n\n if (currentValue === value) return unregister;\n\n if (currentValue) {\n const cleanup = this.cleanupFunctions.get(currentValue);\n cleanup?.();\n this.cleanupFunctions.delete(currentValue);\n }\n\n const updatedMap = new Map(current);\n updatedMap.set(key, value);\n\n this.map.value = updatedMap;\n\n const cleanup = effects(...value.effects());\n this.cleanupFunctions.set(value, cleanup);\n\n return unregister;\n };\n\n /**\n * Unregisters an entity from the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity instance to unregister.\n */\n public unregister = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n\n if (current.get(key) !== value) {\n return;\n }\n\n const cleanup = this.cleanupFunctions.get(value);\n cleanup?.();\n this.cleanupFunctions.delete(value);\n\n const updatedMap = new Map(current);\n updatedMap.delete(key);\n\n this.map.value = updatedMap;\n };\n\n /**\n * Destroys all entries in the registry and clears the registry.\n */\n public destroy() {\n for (const entry of this) {\n const cleanup = this.cleanupFunctions.get(entry);\n cleanup?.();\n entry.destroy();\n }\n\n this.map.value = new Map();\n }\n}\n","import {derived, reactive} from '@dnd-kit/state';\nimport type {Alignment} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport type {Modifiers} from '../../modifiers/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Sensors} from '../../sensors/sensor.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n type?: Type;\n sensors?: Sensors;\n modifiers?: Modifiers;\n alignment?: Alignment;\n}\n\nexport type DraggableStatus = 'idle' | 'dragging' | 'dropping';\n\nexport class Draggable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {modifiers, type, sensors, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.type = type;\n this.sensors = sensors;\n this.modifiers = modifiers;\n this.alignment = input.alignment;\n }\n\n @reactive\n public accessor type: Type | undefined;\n\n public sensors: Sensors | undefined;\n\n @reactive\n public accessor modifiers: Modifiers | undefined;\n\n public alignment: Alignment | undefined;\n\n @reactive\n public accessor status: DraggableStatus = this.isDragSource\n ? 'dragging'\n : 'idle';\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDropping() {\n return this.status === 'dropping' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDragging() {\n return this.status === 'dragging' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is the source of a drag operation.\n */\n @derived\n public get isDragSource() {\n return this.manager?.dragOperation.source?.id === this.id;\n }\n}\n","import {derived, effects, reactive, type Effect} from '@dnd-kit/state';\nimport type {Shape} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport {\n CollisionPriority,\n type CollisionDetector,\n} from '../../collision/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {Draggable} from '../draggable/draggable.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n accept?: Type | Type[] | ((source: Draggable) => boolean);\n collisionPriority?: CollisionPriority | number;\n collisionDetector: CollisionDetector;\n type?: Type;\n}\n\nexport class Droppable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {accept, collisionDetector, collisionPriority, type, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.accept = accept;\n this.collisionDetector = collisionDetector;\n this.collisionPriority = collisionPriority;\n this.type = type;\n }\n\n /**\n * An array of types that are compatible with the droppable.\n */\n @reactive\n public accessor accept:\n | Type\n | Type[]\n | ((draggable: Draggable) => boolean)\n | undefined;\n\n /**\n * The type of the droppable.\n */\n @reactive\n public accessor type: Type | undefined;\n\n /**\n * Checks whether or not the droppable accepts a given draggable.\n *\n * @param {Draggable} draggable\n * @returns {boolean}\n */\n public accepts(draggable: Draggable): boolean {\n const {accept} = this;\n\n if (!accept) {\n return true;\n }\n\n if (typeof accept === 'function') {\n return accept(draggable);\n }\n\n if (!draggable.type) {\n return false;\n }\n\n if (Array.isArray(accept)) {\n return accept.includes(draggable.type);\n }\n\n return draggable.type === accept;\n }\n\n @reactive\n public accessor collisionDetector: CollisionDetector;\n\n @reactive\n public accessor collisionPriority: CollisionPriority | number | undefined;\n\n @reactive\n public accessor shape: Shape | undefined;\n\n @derived\n public get isDropTarget() {\n return this.manager?.dragOperation.target?.id === this.id;\n }\n}\n","import {CleanupFunction} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {\n Plugin,\n type PluginConstructor,\n type PluginDescriptor,\n type PluginOptions,\n} from '../plugins/index.ts';\n\nexport type SensorOptions = PluginOptions;\n\nexport abstract class Sensor<\n T extends DragDropManager<any, any> = DragDropManager<Draggable, Droppable>,\n U extends SensorOptions = SensorOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n /**\n * Bind the sensor to a draggable source, and optionally pass\n * in sensor options to override the default sensor options\n * for this draggable source only.\n */\n public abstract bind(source: Draggable, options?: U): CleanupFunction;\n}\n\nexport type SensorConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Sensor<T>>;\n\nexport type SensorDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Sensor<T>, SensorConstructor<T>>;\n\nexport type Sensors<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (SensorConstructor<T> | SensorDescriptor<T>)[];\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {\n Plugin,\n type PluginOptions,\n type PluginConstructor,\n type PluginDescriptor,\n} from '../plugins/index.ts';\nimport type {DragDropManager} from '../manager/index.ts';\n\nexport type ModifierOptions = PluginOptions;\n\nexport class Modifier<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends ModifierOptions = ModifierOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n public apply(operation: T['dragOperation']): Coordinates {\n return operation.transform;\n }\n}\n\nexport type ModifierConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Modifier<T, any>>;\n\nexport type ModifierDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Modifier<T, any>, ModifierConstructor<T>>;\n\nexport type Modifiers<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (ModifierConstructor<T> | ModifierDescriptor<T>)[];\n","import type {CleanupFunction} from '@dnd-kit/state';\n\nimport {\n Draggable,\n Droppable,\n Entity,\n EntityRegistry,\n} from '../entities/index.ts';\nimport {\n PluginRegistry,\n Plugin,\n type PluginConstructor,\n PluginOptions,\n} from '../plugins/index.ts';\nimport {\n Sensor,\n SensorOptions,\n type SensorConstructor,\n} from '../sensors/index.ts';\nimport {Modifier, type ModifierConstructor} from '../modifiers/index.ts';\nimport type {DragDropManager} from './manager.ts';\n\nexport class DragDropRegistry<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> {\n constructor(manager: V) {\n this.plugins = new PluginRegistry<V, PluginConstructor<V>>(manager);\n this.sensors = new PluginRegistry<V, SensorConstructor<V>>(manager);\n this.modifiers = new PluginRegistry<V, ModifierConstructor<V>>(manager);\n }\n\n public draggables = new EntityRegistry<T>();\n public droppables = new EntityRegistry<U>();\n public plugins: PluginRegistry<V, PluginConstructor<V>>;\n public sensors: PluginRegistry<V, SensorConstructor<V>>;\n public modifiers: PluginRegistry<V, ModifierConstructor<V>>;\n\n public register(input: Entity): () => void;\n public register(input: Draggable): () => void;\n public register(input: Droppable): () => void;\n public register(input: SensorConstructor, options?: SensorOptions): Sensor;\n public register(input: ModifierConstructor): Modifier;\n public register(input: PluginConstructor, options?: PluginOptions): Plugin;\n public register(input: any, options?: Record<string, any>) {\n if (input instanceof Draggable) {\n return this.draggables.register(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.register(input.id, input as U);\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.register(input, options);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.register(input, options);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.register(input, options);\n }\n\n throw new Error('Invalid instance type');\n }\n\n public unregister(input: Entity): CleanupFunction;\n public unregister(input: Draggable): CleanupFunction;\n public unregister(input: Droppable): CleanupFunction;\n public unregister(input: SensorConstructor): CleanupFunction;\n public unregister(input: ModifierConstructor): CleanupFunction;\n public unregister(input: PluginConstructor): CleanupFunction;\n public unregister(input: any) {\n if (input instanceof Entity) {\n if (input instanceof Draggable) {\n return this.draggables.unregister(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.unregister(input.id, input as U);\n }\n\n // no-op\n return () => {};\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.unregister(input);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.unregister(input);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.unregister(input);\n }\n\n throw new Error('Invalid instance type');\n }\n\n destroy() {\n this.draggables.destroy();\n this.droppables.destroy();\n this.plugins.destroy();\n this.sensors.destroy();\n this.modifiers.destroy();\n }\n}\n","import {Position, type Shape} from '@dnd-kit/geometry';\nimport type {Coordinates} from '@dnd-kit/geometry';\nimport {\n batch,\n computed,\n deepEqual,\n effect,\n signal,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\nimport type {Modifier} from '../modifiers/index.ts';\nimport {descriptor} from '../plugins/index.ts';\n\nimport type {DragDropManager} from './manager.ts';\nimport {defaultPreventable} from './events.ts';\n\nexport enum Status {\n Idle = 'idle',\n InitializationPending = 'initialization-pending',\n Initializing = 'initializing',\n Dragging = 'dragging',\n Dropped = 'dropped',\n}\n\nexport type Serializable = {\n [key: string]: string | number | null | Serializable | Serializable[];\n};\n\nexport interface DragOperation<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n activatorEvent: Event | null;\n canceled: boolean;\n position: Position;\n transform: Coordinates;\n status: {\n current: Status;\n initialized: boolean;\n initializing: boolean;\n dragging: boolean;\n dragended: boolean;\n dropped: boolean;\n idle: boolean;\n };\n get shape(): {\n initial: Shape;\n current: Shape;\n } | null;\n set shape(value: Shape | null);\n source: T | null;\n target: U | null;\n data?: Serializable;\n}\n\nexport type DragActions<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = ReturnType<typeof DragOperationManager<T, U, V>>['actions'];\n\nexport function DragOperationManager<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n>(manager: V) {\n const {\n registry: {draggables, droppables},\n monitor,\n } = manager;\n const status = signal<Status>(Status.Idle);\n const shape = {\n initial: signal<Shape | null>(null),\n current: signal<Shape | null>(null),\n };\n const canceled = signal<boolean>(false);\n const position = new Position({x: 0, y: 0});\n const activatorEvent = signal<Event | null>(null);\n const sourceIdentifier = signal<UniqueIdentifier | null>(null);\n const targetIdentifier = signal<UniqueIdentifier | null>(null);\n const dragging = computed(() => status.value === Status.Dragging);\n const initialized = computed(() => status.value !== Status.Idle);\n const initializing = computed(() => status.value === Status.Initializing);\n const idle = computed(() => status.value === Status.Idle);\n const dropped = computed(() => status.value === Status.Dropped);\n const dragended = signal<boolean>(true);\n let previousSource: T | undefined;\n const source = computed<T | null>(() => {\n const identifier = sourceIdentifier.value;\n\n if (identifier == null) return null;\n\n const value = draggables.get(identifier);\n\n if (value) {\n // It's possible for the source to unmount during the drag operation\n previousSource = value;\n }\n\n return value ?? previousSource ?? null;\n });\n const target = computed<U | null>(() => {\n const identifier = targetIdentifier.value;\n return identifier != null ? (droppables.get(identifier) ?? null) : null;\n });\n\n const modifiers = signal<Modifier[]>([]);\n\n const dispose = effect(() => {\n const currentModifiers = modifiers.peek();\n\n if (!deepEqual(currentModifiers, manager.modifiers)) {\n currentModifiers.forEach((modifier) => modifier.destroy());\n }\n\n modifiers.value =\n source.value?.modifiers?.map((modifier) => {\n const {plugin, options} = descriptor(modifier);\n return new plugin(manager, options);\n }) ?? manager.modifiers;\n });\n\n const transform = computed(() => {\n const {x, y} = position.delta;\n\n let transform = {x, y};\n const initialShape = shape.initial.value;\n const currentShape = shape.current.peek();\n const operation: Omit<DragOperation<T, U>, 'transform'> = {\n activatorEvent: activatorEvent.peek(),\n canceled: canceled.peek(),\n source: source.peek(),\n target: target.peek(),\n status: {\n current: status.peek(),\n idle: idle.peek(),\n initializing: initializing.peek(),\n initialized: initialized.peek(),\n dragging: dragging.peek(),\n dragended: dragended.peek(),\n dropped: dropped.peek(),\n },\n shape:\n initialShape && currentShape\n ? {initial: initialShape, current: currentShape}\n : null,\n position,\n };\n\n for (const modifier of modifiers.value) {\n transform = modifier.apply({...operation, transform});\n }\n\n return transform;\n });\n\n const operation: DragOperation<T, U> = {\n get activatorEvent() {\n return activatorEvent.value;\n },\n get canceled() {\n return canceled.value;\n },\n get source() {\n return source.value;\n },\n get target() {\n return target.value;\n },\n status: {\n get current() {\n return status.value;\n },\n get idle() {\n return idle.value;\n },\n get initializing() {\n return initializing.value;\n },\n get initialized() {\n return initialized.value;\n },\n get dragging() {\n return dragging.value;\n },\n get dragended() {\n return dragended.value;\n },\n get dropped() {\n return dropped.value;\n },\n },\n get shape(): DragOperation['shape'] {\n const initial = shape.initial.value;\n const current = shape.current.value;\n\n return initial && current ? {initial, current} : null;\n },\n set shape(value: Shape | null) {\n if (value && shape.current.peek()?.equals(value)) {\n return;\n }\n\n const initial = shape.initial.peek();\n\n if (!initial) {\n shape.initial.value = value;\n }\n\n shape.current.value = value;\n },\n get transform() {\n return transform.value;\n },\n position,\n };\n\n const reset = () => {\n batch(() => {\n status.value = Status.Idle;\n sourceIdentifier.value = null;\n targetIdentifier.value = null;\n shape.current.value = null;\n shape.initial.value = null;\n position.reset({x: 0, y: 0});\n modifiers.value = [];\n });\n };\n\n const actions = {\n setDragSource(identifier: UniqueIdentifier) {\n sourceIdentifier.value = identifier;\n },\n setDropTarget(\n identifier: UniqueIdentifier | null | undefined\n ): Promise<boolean> {\n const id = identifier ?? null;\n\n if (targetIdentifier.peek() === id) {\n return Promise.resolve(false);\n }\n\n targetIdentifier.value = id;\n\n const event = defaultPreventable({\n operation: snapshot(operation),\n });\n\n if (status.peek() === Status.Dragging) {\n monitor.dispatch('dragover', event);\n }\n\n return manager.renderer.rendering.then(() => event.defaultPrevented);\n },\n start({\n event: nativeEvent,\n coordinates,\n }: {\n event?: Event;\n coordinates: Coordinates;\n }) {\n const sourceInstance = source.peek();\n\n if (!sourceInstance) {\n throw new Error('Cannot start a drag operation without a drag source');\n }\n\n batch(() => {\n status.value = Status.InitializationPending;\n shape.initial.value = null;\n shape.current.value = null;\n dragended.value = false;\n canceled.value = false;\n activatorEvent.value = nativeEvent ?? null;\n position.reset(coordinates);\n });\n\n const beforeStartEvent = defaultPreventable({\n operation: snapshot(operation),\n });\n\n monitor.dispatch('beforedragstart', beforeStartEvent);\n\n manager.renderer.rendering.then(() => {\n if (beforeStartEvent.defaultPrevented) {\n reset();\n return;\n }\n\n status.value = Status.Initializing;\n\n requestAnimationFrame(() => {\n status.value = Status.Dragging;\n\n monitor.dispatch('dragstart', {\n nativeEvent,\n operation: snapshot(operation),\n cancelable: false,\n });\n });\n });\n },\n move({\n by,\n to,\n event: nativeEvent,\n cancelable = true,\n propagate = true,\n }:\n | {\n by: Coordinates;\n to?: undefined;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }\n | {\n by?: undefined;\n to: Coordinates;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }) {\n if (!dragging.peek()) {\n return;\n }\n\n const event = defaultPreventable(\n {\n nativeEvent,\n operation: snapshot(operation),\n by,\n to,\n },\n cancelable\n );\n\n if (propagate) {\n monitor.dispatch('dragmove', event);\n }\n\n queueMicrotask(() => {\n if (event.defaultPrevented) {\n return;\n }\n\n const coordinates = to ?? {\n x: position.current.x + by.x,\n y: position.current.y + by.y,\n };\n\n position.update(coordinates);\n });\n },\n stop({\n canceled: eventCanceled = false,\n event: nativeEvent,\n }: {event?: Event; canceled?: boolean} = {}) {\n let promise: Promise<void> | undefined;\n const suspend = () => {\n const output = {\n resume: () => {},\n abort: () => {},\n };\n\n promise = new Promise<void>((resolve, reject) => {\n output.resume = resolve;\n output.abort = reject;\n });\n\n return output;\n };\n const end = () => {\n /* Wait for the renderer to finish rendering before finalizing the drag operation */\n manager.renderer.rendering.then(() => {\n status.value = Status.Dropped;\n\n const dropping = untracked(() => source.value?.status === 'dropping');\n\n if (dropping) {\n const currentSource = source.value;\n\n // Wait until the source has finished dropping before resetting the operation\n const dispose = effect(() => {\n if (currentSource?.status === 'idle') {\n dispose();\n\n // Only reset the drag operation if the source is still the same source that was active when the drag operation\n // was ended, as it's possible for a new drag operation to start while the previous source is still dropping\n if (source.value !== currentSource) return;\n\n reset();\n }\n });\n } else {\n manager.renderer.rendering.then(reset);\n }\n });\n };\n\n batch(() => {\n dragended.value = true;\n canceled.value = eventCanceled;\n });\n\n monitor.dispatch('dragend', {\n nativeEvent,\n operation: snapshot(operation),\n canceled: eventCanceled,\n suspend,\n });\n\n if (promise) {\n promise.then(end).catch(reset);\n } else {\n end();\n }\n },\n };\n\n return {\n operation,\n actions,\n cleanup() {\n if (status.peek() !== Status.Idle) {\n actions.stop({canceled: true});\n }\n\n modifiers.value.forEach((modifier) => modifier.destroy());\n dispose();\n },\n };\n}\n\nfunction snapshot<T extends Record<string, any>>(obj: T): T {\n return {\n ...obj,\n };\n}\n","export interface Renderer {\n get rendering(): Promise<void>;\n}\n\nexport const defaultRenderer: Renderer = {\n get rendering() {\n return Promise.resolve();\n },\n};\n","import type {Draggable, Droppable} from '../entities/index.ts';\nimport {CollisionObserver, CollisionNotifier} from '../collision/index.ts';\nimport type {Plugins, Plugin} from '../plugins/index.ts';\nimport type {Sensor, Sensors} from '../sensors/index.ts';\nimport type {Modifier, Modifiers} from '../modifiers/index.ts';\n\nimport {DragDropRegistry} from './registry.ts';\nimport {\n DragOperationManager,\n type DragOperation,\n type DragActions,\n} from './dragOperation.ts';\nimport {DragDropMonitor} from './events.ts';\nimport {defaultRenderer, type Renderer} from './renderer.ts';\n\nexport type DragDropManagerInput<T extends DragDropManager<any, any>> = {\n plugins?: Plugins<T>;\n sensors?: Sensors<T>;\n modifiers?: Modifiers<T>;\n renderer?: Renderer;\n};\n\nexport class DragDropManager<T extends Draggable, U extends Droppable> {\n public actions: DragActions<T, U, DragDropManager<T, U>>;\n public collisionObserver: CollisionObserver<T, U>;\n public dragOperation: DragOperation<T, U>;\n public monitor: DragDropMonitor<T, U, DragDropManager<T, U>>;\n public registry: DragDropRegistry<T, U, DragDropManager<T, U>>;\n public renderer: Renderer;\n\n constructor(config?: DragDropManagerInput<any>) {\n type V = DragDropManager<T, U>;\n\n const {\n plugins = [],\n sensors = [],\n modifiers = [],\n renderer = defaultRenderer,\n } = config ?? {};\n const monitor = new DragDropMonitor<T, U, V>(this);\n const registry = new DragDropRegistry<T, U, V>(this);\n\n this.registry = registry;\n this.monitor = monitor;\n this.renderer = renderer;\n\n const {actions, operation, cleanup} = DragOperationManager<T, U, V>(this);\n\n this.actions = actions;\n this.dragOperation = operation;\n this.collisionObserver = new CollisionObserver<T, U, V>(this);\n this.plugins = [CollisionNotifier, ...plugins];\n this.modifiers = modifiers;\n this.sensors = sensors;\n\n const {destroy} = this;\n\n this.destroy = () => {\n cleanup();\n destroy();\n };\n }\n\n get plugins(): Plugin<any>[] {\n return this.registry.plugins.values;\n }\n\n set plugins(plugins: Plugins<any>) {\n this.registry.plugins.values = plugins;\n }\n\n get modifiers(): Modifier<any>[] {\n return this.registry.modifiers.values;\n }\n\n set modifiers(modifiers: Modifiers<any>) {\n this.registry.modifiers.values = modifiers;\n }\n\n get sensors(): Sensor<any>[] {\n return this.registry.sensors.values;\n }\n\n set sensors(sensors: Sensors<any>) {\n this.registry.sensors.values = sensors;\n }\n\n public destroy = () => {\n this.registry.destroy();\n this.collisionObserver.destroy();\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["src/core/plugins/utilities.ts","src/core/plugins/plugin.ts","src/core/plugins/registry.ts","src/core/collision/utilities.ts","src/core/collision/observer.ts","src/core/manager/events.ts","src/core/collision/notifier.ts","src/core/collision/types.ts","src/core/entities/entity/entity.ts","src/core/entities/entity/registry.ts","src/core/entities/draggable/draggable.ts","src/core/entities/droppable/droppable.ts","src/core/sensors/sensor.ts","src/core/modifiers/modifier.ts","src/core/manager/registry.ts","src/core/manager/dragOperation.ts","src/core/manager/renderer.ts","src/core/manager/manager.ts"],"names":["descriptor","untracked","effects","CollisionPriority","CollisionType","_disabled_dec","_init","_disabled","reactive","id","manager","signal","cleanup","_type_dec","_c","_type","derived","Status","effect","transform","operation","dispose"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n PluginConstructor,\n PluginOptions,\n PluginDescriptor,\n InferPluginOptions,\n} from './types.ts';\n\nexport function configure<\n T extends PluginConstructor<any, any, any>,\n V extends PluginOptions = InferPluginOptions<T>,\n>(plugin: T, options: V): PluginDescriptor<any, any, T> {\n return {\n plugin,\n options,\n };\n}\n\nexport function configurator<T extends PluginConstructor<any, any, any>>(\n plugin: T\n) {\n return (options: InferPluginOptions<T>): PluginDescriptor<any, any, T> => {\n return configure(plugin, options);\n };\n}\n\nexport function descriptor<T extends PluginConstructor<any, any, any>>(\n plugin: T | PluginDescriptor<any, any, T>\n): PluginDescriptor<any, any, T> {\n if (typeof plugin === 'function') {\n return {\n plugin,\n options: undefined,\n };\n }\n\n return plugin;\n}\n","import {\n type CleanupFunction,\n effect,\n reactive,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {PluginOptions} from './types.ts';\nimport {configure} from './utilities.ts';\n\n/**\n * An abstract plugin class that can be extended to implement custom\n * functionality that augments the `DragDropManager`'s core capabilities.\n */\nexport abstract class Plugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> {\n constructor(\n public manager: T,\n public options?: U\n ) {}\n\n /**\n * Whether the plugin instance is disabled.\n * Triggers effects when accessed.\n */\n @reactive\n public accessor disabled: boolean = false;\n\n /**\n * Enable a disabled plugin instance.\n * Triggers effects.\n */\n public enable() {\n this.disabled = false;\n }\n\n /**\n * Disable an enabled plugin instance.\n * Triggers effects.\n */\n public disable() {\n this.disabled = true;\n }\n\n /**\n * Whether the plugin instance is disabled.\n * Does not trigger effects when accessed.\n */\n public isDisabled() {\n return untracked(() => {\n return this.disabled;\n });\n }\n\n /**\n * Configure a plugin instance with new options.\n */\n public configure(options?: U) {\n this.options = options;\n }\n\n #cleanupFunctions = new Set<CleanupFunction>();\n\n /**\n * Register an effect that will be cleaned up when the plugin instance is destroyed.\n * Returns a cleanup function that can be used to dispose of the effect.\n */\n protected registerEffect(callback: () => void) {\n const dispose = effect(callback.bind(this));\n\n this.#cleanupFunctions.add(dispose);\n\n return dispose;\n }\n\n /**\n * Destroy a plugin instance.\n */\n public destroy() {\n /*\n * Each plugin is responsible for implementing its own\n * destroy method to clean up effects and listeners\n */\n\n this.#cleanupFunctions.forEach((cleanup) => cleanup());\n }\n\n /**\n * Configure a plugin constructor with options.\n * This method is used to configure the options that the\n * plugin constructor will use to create plugin instances.\n */\n static configure(options: PluginOptions) {\n return configure(this as any, options);\n }\n}\n\nexport class CorePlugin<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends PluginOptions = PluginOptions,\n> extends Plugin<T, U> {}\n","import {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin, type Plugin} from './plugin.ts';\nimport type {\n InferPluginOptions,\n PluginDescriptor,\n PluginConstructor,\n Plugins,\n} from './types.ts';\nimport {descriptor} from './utilities.ts';\n\nexport class PluginRegistry<\n T extends DragDropManager<any, any>,\n W extends PluginConstructor<T> = PluginConstructor<T>,\n U extends Plugin<T> = InstanceType<W>,\n> {\n private instances: Map<W, U> = new Map();\n\n constructor(private manager: T) {}\n\n public get values(): U[] {\n return Array.from(this.instances.values());\n }\n\n #previousValues: PluginConstructor<T>[] = [];\n\n public set values(entries: Plugins<T>) {\n const descriptors = entries\n .map(descriptor)\n .reduceRight<PluginDescriptor<T>[]>((acc, descriptor) => {\n if (acc.some(({plugin}) => plugin === descriptor.plugin)) {\n // Filter out duplicate plugins\n return acc;\n }\n\n return [descriptor, ...acc];\n }, []);\n const constructors = descriptors.map(({plugin}) => plugin);\n\n for (const plugin of this.#previousValues) {\n if (!constructors.includes(plugin)) {\n if (plugin.prototype instanceof CorePlugin) {\n continue;\n }\n\n this.unregister(plugin as W);\n }\n }\n\n for (const {plugin, options} of descriptors) {\n this.register(plugin as W, options as InferPluginOptions<W>);\n }\n\n this.#previousValues = constructors;\n }\n\n public get<X extends W>(plugin: X): InstanceType<X> | undefined {\n const instance = this.instances.get(plugin);\n\n return instance as any;\n }\n\n public register<X extends W>(\n plugin: X,\n options?: InferPluginOptions<X>\n ): InstanceType<X> {\n const existingInstance = this.instances.get(plugin);\n\n if (existingInstance) {\n if (existingInstance.options !== options) {\n existingInstance.options = options;\n }\n\n return existingInstance as InstanceType<X>;\n }\n\n const instance = new plugin(this.manager, options) as U;\n\n this.instances.set(plugin, instance);\n\n return instance as InstanceType<X>;\n }\n\n public unregister<X extends W>(plugin: X) {\n const instance = this.instances.get(plugin);\n\n if (instance) {\n instance.destroy();\n this.instances.delete(plugin);\n }\n }\n\n public destroy() {\n for (const plugin of this.instances.values()) {\n plugin.destroy();\n }\n\n this.instances.clear();\n }\n}\n","import {Collision} from './types.ts';\n\n/**\n * Sort collisions from greatest to smallest priority\n * Collisions of equal priority are sorted from greatest to smallest value\n */\nexport function sortCollisions(a: Collision, b: Collision) {\n if (a.priority === b.priority) {\n if (a.type === b.type) {\n return b.value - a.value;\n }\n\n return b.type - a.type;\n }\n\n return b.priority - a.priority;\n}\n","import {signal, untracked, type Signal, effects} from '@dnd-kit/state';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {Plugin} from '../plugins/index.ts';\nimport type {Collision, CollisionDetector, Collisions} from './types.ts';\nimport {sortCollisions} from './utilities.ts';\n\nconst DEFAULT_VALUE: Collisions = [];\n\nexport class CollisionObserver<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n V extends DragDropManager<T, U> = DragDropManager<T, U>,\n> extends Plugin<V> {\n constructor(manager: V) {\n super(manager);\n\n this.computeCollisions = this.computeCollisions.bind(this);\n this.#collisions = signal(DEFAULT_VALUE);\n\n this.destroy = effects(\n () => {\n const collisions = this.computeCollisions();\n const coordinates = untracked(\n () => this.manager.dragOperation.position.current\n );\n\n if (collisions !== DEFAULT_VALUE) {\n const previousCoordinates = this.#previousCoordinates;\n this.#previousCoordinates = coordinates;\n\n if (\n previousCoordinates &&\n coordinates.x == previousCoordinates.x &&\n coordinates.y == previousCoordinates.y\n ) {\n return;\n }\n } else {\n this.#previousCoordinates = undefined;\n }\n\n this.#collisions.value = collisions;\n },\n () => {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n this.forceUpdate();\n }\n }\n );\n }\n\n #previousCoordinates: Coordinates | undefined;\n\n public forceUpdate(immediate = true) {\n untracked(() => {\n if (immediate) {\n this.#collisions.value = this.computeCollisions();\n } else {\n this.#previousCoordinates = undefined;\n }\n });\n }\n\n public computeCollisions(\n entries?: Droppable[],\n collisionDetector?: CollisionDetector\n ) {\n const {registry, dragOperation} = this.manager;\n const {source, shape, status} = dragOperation;\n\n if (!status.initialized || !shape) {\n return DEFAULT_VALUE;\n }\n\n const collisions: Collision[] = [];\n const potentialTargets = [];\n\n for (const entry of entries ?? registry.droppables) {\n if (entry.disabled) {\n continue;\n }\n\n if (source && !entry.accepts(source)) {\n continue;\n }\n\n const detectCollision = collisionDetector ?? entry.collisionDetector;\n\n if (!detectCollision) {\n continue;\n }\n\n potentialTargets.push(entry);\n\n // Force collisions to be recomputed when the shape changes\n void entry.shape;\n\n const collision = untracked(() =>\n detectCollision({\n droppable: entry,\n dragOperation,\n })\n );\n\n if (collision) {\n if (entry.collisionPriority != null) {\n collision.priority = entry.collisionPriority;\n }\n\n collisions.push(collision);\n }\n }\n\n if (potentialTargets.length === 0) {\n return DEFAULT_VALUE;\n }\n\n collisions.sort(sortCollisions);\n\n return collisions;\n }\n\n public get collisions() {\n return this.#collisions.value;\n }\n\n #collisions: Signal<Collisions>;\n}\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport type {Collisions} from '../collision/index.ts';\nimport type {DragDropManager} from './manager.ts';\nimport type {DragOperation} from './dragOperation.ts';\n\nexport type Events = Record<string, (...args: any[]) => void>;\n\nexport type Preventable<T> = T & {\n cancelable: boolean;\n defaultPrevented: boolean;\n preventDefault(): void;\n};\n\nclass Monitor<T extends Events> {\n private registry = new Map<keyof T, Set<T[keyof T]>>();\n\n public addEventListener<U extends keyof T>(name: U, handler: T[U]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.add(handler);\n registry.set(name, listeners);\n\n return () => this.removeEventListener(name, handler);\n }\n\n public removeEventListener(name: keyof T, handler: T[keyof T]) {\n const {registry} = this;\n const listeners = new Set(registry.get(name));\n\n listeners.delete(handler);\n registry.set(name, listeners);\n }\n\n protected dispatch<U extends keyof T>(name: U, ...args: any[]) {\n const {registry} = this;\n const listeners = registry.get(name);\n\n if (!listeners) {\n return;\n }\n\n for (const listener of listeners) {\n listener(...args);\n }\n }\n}\n\nexport type DragDropEvents<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = {\n collision(\n event: Preventable<{\n collisions: Collisions;\n }>,\n manager: V\n ): void;\n beforedragstart(\n event: Preventable<{\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragstart(\n event: {\n cancelable: false;\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n },\n manager: V\n ): void;\n dragmove(\n event: Preventable<{\n operation: DragOperation<T, U>;\n to?: Coordinates;\n by?: Coordinates;\n nativeEvent?: Event;\n }>,\n manager: V\n ): void;\n dragover(\n event: Preventable<{\n operation: DragOperation<T, U>;\n }>,\n manager: V\n ): void;\n dragend(\n event: {\n operation: DragOperation<T, U>;\n nativeEvent?: Event;\n canceled: boolean;\n suspend(): {resume(): void; abort(): void};\n },\n manager: V\n ): void;\n};\n\nexport class DragDropMonitor<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> extends Monitor<DragDropEvents<T, U, V>> {\n constructor(private manager: V) {\n super();\n }\n\n public dispatch<Key extends keyof DragDropEvents<T, U, V>>(\n type: Key,\n event: Parameters<DragDropEvents<T, U, V>[Key]>[0]\n ) {\n const args = [event, this.manager] as any;\n\n super.dispatch(type, ...args);\n }\n}\n\nexport function defaultPreventable<T>(\n event: T,\n cancelable = true\n): Preventable<T> {\n let defaultPrevented = false;\n\n return {\n ...event,\n cancelable,\n get defaultPrevented() {\n return defaultPrevented;\n },\n preventDefault() {\n if (!cancelable) {\n return;\n }\n\n defaultPrevented = true;\n },\n };\n}\n","import {effect, effects, untracked} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../manager/index.ts';\nimport {CorePlugin} from '../plugins/index.ts';\nimport {defaultPreventable} from '../manager/events.ts';\n\nimport type {Collision} from './types.ts';\n\nexport class CollisionNotifier extends CorePlugin {\n constructor(manager: DragDropManager<any, any>) {\n super(manager);\n\n const isEqual = (a: Collision[], b: Collision[]) =>\n a.map(({id}) => id).join('') === b.map(({id}) => id).join('');\n\n let previousCollisions: Collision[] = [];\n\n this.destroy = effects(\n () => {\n const {dragOperation, collisionObserver} = manager;\n\n if (dragOperation.status.initializing) {\n previousCollisions = [];\n collisionObserver.enable();\n }\n },\n () => {\n const {collisionObserver, monitor} = manager;\n const {collisions} = collisionObserver;\n\n if (collisionObserver.isDisabled()) {\n return;\n }\n\n const event = defaultPreventable({\n collisions,\n });\n\n monitor.dispatch('collision', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isEqual(collisions, previousCollisions)) {\n return;\n } else {\n previousCollisions = collisions;\n }\n\n const [firstCollision] = collisions;\n\n untracked(() => {\n if (firstCollision?.id !== manager.dragOperation.target?.id) {\n collisionObserver.disable();\n\n manager.actions.setDropTarget(firstCollision?.id).then(() => {\n collisionObserver.enable();\n });\n }\n });\n }\n );\n }\n}\n","import type {DragOperation} from '../manager/index.ts';\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\n\nexport enum CollisionPriority {\n Lowest,\n Low,\n Normal,\n High,\n Highest,\n}\n\nexport enum CollisionType {\n Collision,\n ShapeIntersection,\n PointerIntersection,\n}\n\nexport interface Collision {\n id: UniqueIdentifier;\n priority: CollisionPriority | number;\n type: CollisionType;\n value: number;\n data?: Record<string, any>;\n}\n\nexport type Collisions = Collision[];\n\nexport interface CollisionDetectorInput<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n droppable: U;\n dragOperation: DragOperation<T, U>;\n}\n\nexport type CollisionDetector = <\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n>(\n input: CollisionDetectorInput<T, U>\n) => Collision | null;\n","import {CleanupFunction, reactive, type Effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\nimport type {Data, UniqueIdentifier} from './types.ts';\n\nexport interface Input<T extends Data = Data> {\n /**\n * The unique identifier of the entity.\n */\n id: UniqueIdentifier;\n /**\n * Optional data associated with the entity.\n */\n data?: T;\n /**\n * Whether the entity should initially be disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the entity should be automatically registered with the manager when it is created.\n * @default true\n */\n register?: boolean;\n /**\n * An array of effects that are set up when the entity is registered and cleaned up when it is unregistered.\n */\n effects?(): Effect[];\n}\n\n/**\n * The `Entity` class is an abstract representation of a distinct unit in the drag and drop system.\n * It is a base class that other concrete classes like `Draggable` and `Droppable` can extend.\n *\n * @template T - The type of data associated with the entity.\n */\nexport class Entity<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> {\n /**\n * Creates a new instance of the `Entity` class.\n *\n * @param input - An object containing the initial properties of the entity.\n * @param manager - The manager that controls the drag and drop operations.\n */\n constructor(input: Input<T>, manager: U | undefined) {\n const {effects, id, data = {}, disabled = false, register = true} = input;\n\n let previousId = id;\n\n this.manager = manager;\n this.id = id;\n this.data = data;\n this.disabled = disabled;\n this.effects = () => [\n () => {\n // Re-run this effect whenever the `id` changes\n const {id, manager} = this;\n\n if (id === previousId) {\n return;\n }\n\n manager?.registry.register(this);\n\n return () => manager?.registry.unregister(this);\n },\n ...(effects?.() ?? []),\n ];\n\n this.register = this.register.bind(this);\n this.unregister = this.unregister.bind(this);\n this.destroy = this.destroy.bind(this);\n\n if (manager && register) {\n queueMicrotask(this.register);\n }\n }\n\n /**\n * The manager that controls the drag and drop operations.\n */\n @reactive\n public accessor manager: U | undefined;\n\n /**\n * The unique identifier of the entity.\n */\n @reactive\n public accessor id: UniqueIdentifier;\n\n /**\n * The data associated with the entity.\n */\n @reactive\n public accessor data: Data;\n\n /**\n * A boolean indicating whether the entity is disabled.\n */\n @reactive\n public accessor disabled: boolean;\n\n /**\n * An array of effects that are applied to the entity.\n */\n public effects: () => Effect[];\n\n /**\n * A method that registers the entity with the manager.\n * @returns CleanupFunction | void\n */\n public register(): CleanupFunction | void {\n return this.manager?.registry.register(this);\n }\n\n /**\n * A method that unregisters the entity from the manager.\n * @returns void\n */\n public unregister(): void {\n this.manager?.registry.unregister(this);\n }\n\n /**\n * A method that cleans up the entity when it is no longer needed.\n * @returns void\n */\n public destroy(): void {\n this.manager?.registry.unregister(this);\n }\n}\n","import {effects, signal} from '@dnd-kit/state';\n\nimport type {Entity} from './entity.ts';\nimport type {UniqueIdentifier} from './types.ts';\n\n/**\n * Reactive class representing a registry for entities.\n * @template T - The type of entries that the registry manages,\n * for example, `Draggable` or `Droppable` entities.\n */\nexport class EntityRegistry<T extends Entity> {\n private map = signal<Map<UniqueIdentifier, T>>(new Map());\n private cleanupFunctions = new WeakMap<T, () => void>();\n\n /**\n * Iterator for the EntityRegistry class.\n * @returns An iterator for the values in the map.\n */\n public [Symbol.iterator]() {\n return this.map.peek().values();\n }\n\n public get value() {\n return this.map.value.values();\n }\n\n /**\n * Checks if a entity with the given identifier exists in the registry.\n * @param identifier - The unique identifier of the entity.\n * @returns True if the entity exists, false otherwise.\n */\n public has(identifier: UniqueIdentifier): boolean {\n return this.map.value.has(identifier);\n }\n\n /**\n * Retrieves a entity from the registry using its identifier.\n * @param identifier - The unique identifier of the entity.\n * @returns The entity if it exists, undefined otherwise.\n */\n public get(identifier: UniqueIdentifier): T | undefined {\n return this.map.value.get(identifier);\n }\n\n /**\n * Registers a entity in the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity to register.\n * @returns A function that unregisters the entity.\n */\n public register = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n const currentValue = current.get(key);\n const unregister = () => this.unregister(key, value);\n\n if (currentValue === value) return unregister;\n\n if (currentValue) {\n const cleanup = this.cleanupFunctions.get(currentValue);\n cleanup?.();\n this.cleanupFunctions.delete(currentValue);\n }\n\n const updatedMap = new Map(current);\n updatedMap.set(key, value);\n\n this.map.value = updatedMap;\n\n const cleanup = effects(...value.effects());\n this.cleanupFunctions.set(value, cleanup);\n\n return unregister;\n };\n\n /**\n * Unregisters an entity from the registry.\n * @param key - The unique identifier of the entity.\n * @param value - The entity instance to unregister.\n */\n public unregister = (key: UniqueIdentifier, value: T) => {\n const current = this.map.peek();\n\n if (current.get(key) !== value) {\n return;\n }\n\n const cleanup = this.cleanupFunctions.get(value);\n cleanup?.();\n this.cleanupFunctions.delete(value);\n\n const updatedMap = new Map(current);\n updatedMap.delete(key);\n\n this.map.value = updatedMap;\n };\n\n /**\n * Destroys all entries in the registry and clears the registry.\n */\n public destroy() {\n for (const entry of this) {\n const cleanup = this.cleanupFunctions.get(entry);\n cleanup?.();\n entry.destroy();\n }\n\n this.map.value = new Map();\n }\n}\n","import {derived, reactive} from '@dnd-kit/state';\nimport type {Alignment} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport type {Modifiers} from '../../modifiers/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Sensors} from '../../sensors/sensor.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n type?: Type;\n sensors?: Sensors;\n modifiers?: Modifiers;\n alignment?: Alignment;\n}\n\nexport type DraggableStatus = 'idle' | 'dragging' | 'dropping';\n\nexport class Draggable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {modifiers, type, sensors, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.type = type;\n this.sensors = sensors;\n this.modifiers = modifiers;\n this.alignment = input.alignment;\n }\n\n @reactive\n public accessor type: Type | undefined;\n\n public sensors: Sensors | undefined;\n\n @reactive\n public accessor modifiers: Modifiers | undefined;\n\n public alignment: Alignment | undefined;\n\n @reactive\n public accessor status: DraggableStatus = this.isDragSource\n ? 'dragging'\n : 'idle';\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDropping() {\n return this.status === 'dropping' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is being dropped.\n */\n @derived\n public get isDragging() {\n return this.status === 'dragging' && this.isDragSource;\n }\n\n /**\n * A boolean indicating whether the draggable item is the source of a drag operation.\n */\n @derived\n public get isDragSource() {\n return this.manager?.dragOperation.source?.id === this.id;\n }\n}\n","import {derived, effects, reactive, type Effect} from '@dnd-kit/state';\nimport type {Shape} from '@dnd-kit/geometry';\n\nimport {Entity} from '../entity/index.ts';\nimport type {EntityInput, Data, Type} from '../entity/index.ts';\nimport {\n CollisionPriority,\n type CollisionDetector,\n} from '../../collision/index.ts';\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {Draggable} from '../draggable/draggable.ts';\n\nexport interface Input<T extends Data = Data> extends EntityInput<T> {\n accept?: Type | Type[] | ((source: Draggable) => boolean);\n collisionPriority?: CollisionPriority | number;\n collisionDetector: CollisionDetector;\n type?: Type;\n}\n\nexport class Droppable<\n T extends Data = Data,\n U extends DragDropManager<any, any> = DragDropManager<any, any>,\n> extends Entity<T, U> {\n constructor(\n {accept, collisionDetector, collisionPriority, type, ...input}: Input<T>,\n manager: U | undefined\n ) {\n super(input, manager);\n\n this.accept = accept;\n this.collisionDetector = collisionDetector;\n this.collisionPriority = collisionPriority;\n this.type = type;\n }\n\n /**\n * An array of types that are compatible with the droppable.\n */\n @reactive\n public accessor accept:\n | Type\n | Type[]\n | ((draggable: Draggable) => boolean)\n | undefined;\n\n /**\n * The type of the droppable.\n */\n @reactive\n public accessor type: Type | undefined;\n\n /**\n * Checks whether or not the droppable accepts a given draggable.\n *\n * @param {Draggable} draggable\n * @returns {boolean}\n */\n public accepts(draggable: Draggable): boolean {\n const {accept} = this;\n\n if (!accept) {\n return true;\n }\n\n if (typeof accept === 'function') {\n return accept(draggable);\n }\n\n if (!draggable.type) {\n return false;\n }\n\n if (Array.isArray(accept)) {\n return accept.includes(draggable.type);\n }\n\n return draggable.type === accept;\n }\n\n @reactive\n public accessor collisionDetector: CollisionDetector;\n\n @reactive\n public accessor collisionPriority: CollisionPriority | number | undefined;\n\n @reactive\n public accessor shape: Shape | undefined;\n\n @derived\n public get isDropTarget() {\n return this.manager?.dragOperation.target?.id === this.id;\n }\n}\n","import {CleanupFunction} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../manager/index.ts';\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {\n Plugin,\n type PluginConstructor,\n type PluginDescriptor,\n type PluginOptions,\n} from '../plugins/index.ts';\n\nexport type SensorOptions = PluginOptions;\n\nexport abstract class Sensor<\n T extends DragDropManager<any, any> = DragDropManager<Draggable, Droppable>,\n U extends SensorOptions = SensorOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n /**\n * Bind the sensor to a draggable source, and optionally pass\n * in sensor options to override the default sensor options\n * for this draggable source only.\n */\n public abstract bind(source: Draggable, options?: U): CleanupFunction;\n}\n\nexport type SensorConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Sensor<T>>;\n\nexport type SensorDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Sensor<T>, SensorConstructor<T>>;\n\nexport type Sensors<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (SensorConstructor<T> | SensorDescriptor<T>)[];\n","import type {Coordinates} from '@dnd-kit/geometry';\n\nimport {\n Plugin,\n type PluginOptions,\n type PluginConstructor,\n type PluginDescriptor,\n} from '../plugins/index.ts';\nimport type {DragDropManager} from '../manager/index.ts';\n\nexport type ModifierOptions = PluginOptions;\n\nexport class Modifier<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n U extends ModifierOptions = ModifierOptions,\n> extends Plugin<T, U> {\n constructor(\n public manager: T,\n public options?: U\n ) {\n super(manager, options);\n }\n\n public apply(operation: T['dragOperation']): Coordinates {\n return operation.transform;\n }\n}\n\nexport type ModifierConstructor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginConstructor<T, Modifier<T, any>>;\n\nexport type ModifierDescriptor<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = PluginDescriptor<T, Modifier<T, any>, ModifierConstructor<T>>;\n\nexport type Modifiers<\n T extends DragDropManager<any, any> = DragDropManager<any, any>,\n> = (ModifierConstructor<T> | ModifierDescriptor<T>)[];\n","import type {CleanupFunction} from '@dnd-kit/state';\n\nimport {\n Draggable,\n Droppable,\n Entity,\n EntityRegistry,\n} from '../entities/index.ts';\nimport {\n PluginRegistry,\n Plugin,\n type PluginConstructor,\n PluginOptions,\n} from '../plugins/index.ts';\nimport {\n Sensor,\n SensorOptions,\n type SensorConstructor,\n} from '../sensors/index.ts';\nimport {Modifier, type ModifierConstructor} from '../modifiers/index.ts';\nimport type {DragDropManager} from './manager.ts';\n\nexport class DragDropRegistry<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> {\n constructor(manager: V) {\n this.plugins = new PluginRegistry<V, PluginConstructor<V>>(manager);\n this.sensors = new PluginRegistry<V, SensorConstructor<V>>(manager);\n this.modifiers = new PluginRegistry<V, ModifierConstructor<V>>(manager);\n }\n\n public draggables = new EntityRegistry<T>();\n public droppables = new EntityRegistry<U>();\n public plugins: PluginRegistry<V, PluginConstructor<V>>;\n public sensors: PluginRegistry<V, SensorConstructor<V>>;\n public modifiers: PluginRegistry<V, ModifierConstructor<V>>;\n\n public register(input: Entity): () => void;\n public register(input: Draggable): () => void;\n public register(input: Droppable): () => void;\n public register(input: SensorConstructor, options?: SensorOptions): Sensor;\n public register(input: ModifierConstructor): Modifier;\n public register(input: PluginConstructor, options?: PluginOptions): Plugin;\n public register(input: any, options?: Record<string, any>) {\n if (input instanceof Draggable) {\n return this.draggables.register(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.register(input.id, input as U);\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.register(input, options);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.register(input, options);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.register(input, options);\n }\n\n throw new Error('Invalid instance type');\n }\n\n public unregister(input: Entity): CleanupFunction;\n public unregister(input: Draggable): CleanupFunction;\n public unregister(input: Droppable): CleanupFunction;\n public unregister(input: SensorConstructor): CleanupFunction;\n public unregister(input: ModifierConstructor): CleanupFunction;\n public unregister(input: PluginConstructor): CleanupFunction;\n public unregister(input: any) {\n if (input instanceof Entity) {\n if (input instanceof Draggable) {\n return this.draggables.unregister(input.id, input as T);\n }\n\n if (input instanceof Droppable) {\n return this.droppables.unregister(input.id, input as U);\n }\n\n // no-op\n return () => {};\n }\n\n if (input.prototype instanceof Modifier) {\n return this.modifiers.unregister(input);\n }\n\n if (input.prototype instanceof Sensor) {\n return this.sensors.unregister(input);\n }\n\n if (input.prototype instanceof Plugin) {\n return this.plugins.unregister(input);\n }\n\n throw new Error('Invalid instance type');\n }\n\n destroy() {\n this.draggables.destroy();\n this.droppables.destroy();\n this.plugins.destroy();\n this.sensors.destroy();\n this.modifiers.destroy();\n }\n}\n","import {Position, type Shape} from '@dnd-kit/geometry';\nimport type {Coordinates} from '@dnd-kit/geometry';\nimport {\n batch,\n computed,\n deepEqual,\n effect,\n signal,\n untracked,\n} from '@dnd-kit/state';\n\nimport type {\n Draggable,\n Droppable,\n UniqueIdentifier,\n} from '../entities/index.ts';\nimport type {Modifier} from '../modifiers/index.ts';\nimport {descriptor} from '../plugins/index.ts';\n\nimport type {DragDropManager} from './manager.ts';\nimport {defaultPreventable} from './events.ts';\n\nexport enum Status {\n Idle = 'idle',\n InitializationPending = 'initialization-pending',\n Initializing = 'initializing',\n Dragging = 'dragging',\n Dropped = 'dropped',\n}\n\nexport type Serializable = {\n [key: string]: string | number | null | Serializable | Serializable[];\n};\n\nexport interface DragOperation<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> {\n activatorEvent: Event | null;\n canceled: boolean;\n position: Position;\n transform: Coordinates;\n status: {\n current: Status;\n initialized: boolean;\n initializing: boolean;\n dragging: boolean;\n dragended: boolean;\n dropped: boolean;\n idle: boolean;\n };\n get shape(): {\n initial: Shape;\n current: Shape;\n } | null;\n set shape(value: Shape | null);\n source: T | null;\n target: U | null;\n data?: Serializable;\n}\n\nexport type DragActions<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n> = ReturnType<typeof DragOperationManager<T, U, V>>['actions'];\n\nexport function DragOperationManager<\n T extends Draggable,\n U extends Droppable,\n V extends DragDropManager<T, U>,\n>(manager: V) {\n const {\n registry: {draggables, droppables},\n monitor,\n } = manager;\n const status = signal<Status>(Status.Idle);\n const shape = {\n initial: signal<Shape | null>(null),\n current: signal<Shape | null>(null),\n };\n const canceled = signal<boolean>(false);\n const position = new Position({x: 0, y: 0});\n const activatorEvent = signal<Event | null>(null);\n const sourceIdentifier = signal<UniqueIdentifier | null>(null);\n const targetIdentifier = signal<UniqueIdentifier | null>(null);\n const dragging = computed(() => status.value === Status.Dragging);\n const initialized = computed(() => status.value !== Status.Idle);\n const initializing = computed(() => status.value === Status.Initializing);\n const idle = computed(() => status.value === Status.Idle);\n const dropped = computed(() => status.value === Status.Dropped);\n const dragended = signal<boolean>(true);\n let previousSource: T | undefined;\n const source = computed<T | null>(() => {\n const identifier = sourceIdentifier.value;\n\n if (identifier == null) return null;\n\n const value = draggables.get(identifier);\n\n if (value) {\n // It's possible for the source to unmount during the drag operation\n previousSource = value;\n }\n\n return value ?? previousSource ?? null;\n });\n const target = computed<U | null>(() => {\n const identifier = targetIdentifier.value;\n return identifier != null ? (droppables.get(identifier) ?? null) : null;\n });\n\n const modifiers = signal<Modifier[]>([]);\n\n const dispose = effect(() => {\n const currentModifiers = modifiers.peek();\n\n if (!deepEqual(currentModifiers, manager.modifiers)) {\n currentModifiers.forEach((modifier) => modifier.destroy());\n }\n\n modifiers.value =\n source.value?.modifiers?.map((modifier) => {\n const {plugin, options} = descriptor(modifier);\n return new plugin(manager, options);\n }) ?? manager.modifiers;\n });\n\n const transform = computed(() => {\n const {x, y} = position.delta;\n\n let transform = {x, y};\n const initialShape = shape.initial.value;\n const currentShape = shape.current.peek();\n const operation: Omit<DragOperation<T, U>, 'transform'> = {\n activatorEvent: activatorEvent.peek(),\n canceled: canceled.peek(),\n source: source.peek(),\n target: target.peek(),\n status: {\n current: status.peek(),\n idle: idle.peek(),\n initializing: initializing.peek(),\n initialized: initialized.peek(),\n dragging: dragging.peek(),\n dragended: dragended.peek(),\n dropped: dropped.peek(),\n },\n shape:\n initialShape && currentShape\n ? {initial: initialShape, current: currentShape}\n : null,\n position,\n };\n\n for (const modifier of modifiers.value) {\n transform = modifier.apply({...operation, transform});\n }\n\n return transform;\n });\n\n const operation: DragOperation<T, U> = {\n get activatorEvent() {\n return activatorEvent.value;\n },\n get canceled() {\n return canceled.value;\n },\n get source() {\n return source.value;\n },\n get target() {\n return target.value;\n },\n status: {\n get current() {\n return status.value;\n },\n get idle() {\n return idle.value;\n },\n get initializing() {\n return initializing.value;\n },\n get initialized() {\n return initialized.value;\n },\n get dragging() {\n return dragging.value;\n },\n get dragended() {\n return dragended.value;\n },\n get dropped() {\n return dropped.value;\n },\n },\n get shape(): DragOperation['shape'] {\n const initial = shape.initial.value;\n const current = shape.current.value;\n\n return initial && current ? {initial, current} : null;\n },\n set shape(value: Shape | null) {\n if (value && shape.current.peek()?.equals(value)) {\n return;\n }\n\n const initial = shape.initial.peek();\n\n if (!initial) {\n shape.initial.value = value;\n }\n\n shape.current.value = value;\n },\n get transform() {\n return transform.value;\n },\n position,\n };\n\n const reset = () => {\n batch(() => {\n status.value = Status.Idle;\n sourceIdentifier.value = null;\n targetIdentifier.value = null;\n shape.current.value = null;\n shape.initial.value = null;\n position.reset({x: 0, y: 0});\n modifiers.value = [];\n });\n };\n\n const actions = {\n setDragSource(identifier: UniqueIdentifier) {\n sourceIdentifier.value = identifier;\n },\n setDropTarget(\n identifier: UniqueIdentifier | null | undefined\n ): Promise<boolean> {\n const id = identifier ?? null;\n\n if (targetIdentifier.peek() === id) {\n return Promise.resolve(false);\n }\n\n targetIdentifier.value = id;\n\n const event = defaultPreventable({\n operation: snapshot(operation),\n });\n\n if (status.peek() === Status.Dragging) {\n monitor.dispatch('dragover', event);\n }\n\n return manager.renderer.rendering.then(() => event.defaultPrevented);\n },\n start({\n event: nativeEvent,\n coordinates,\n }: {\n event?: Event;\n coordinates: Coordinates;\n }): boolean {\n const sourceInstance = source.peek();\n\n if (!sourceInstance) {\n throw new Error('Cannot start a drag operation without a drag source');\n }\n\n batch(() => {\n status.value = Status.InitializationPending;\n shape.initial.value = null;\n shape.current.value = null;\n dragended.value = false;\n canceled.value = false;\n activatorEvent.value = nativeEvent ?? null;\n position.reset(coordinates);\n });\n\n const beforeStartEvent = defaultPreventable({\n operation: snapshot(operation),\n });\n\n monitor.dispatch('beforedragstart', beforeStartEvent);\n\n if (beforeStartEvent.defaultPrevented) {\n reset();\n return false;\n }\n\n manager.renderer.rendering.then(() => {\n status.value = Status.Initializing;\n\n requestAnimationFrame(() => {\n status.value = Status.Dragging;\n\n monitor.dispatch('dragstart', {\n nativeEvent,\n operation: snapshot(operation),\n cancelable: false,\n });\n });\n });\n\n return true;\n },\n move({\n by,\n to,\n event: nativeEvent,\n cancelable = true,\n propagate = true,\n }:\n | {\n by: Coordinates;\n to?: undefined;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }\n | {\n by?: undefined;\n to: Coordinates;\n event?: Event;\n cancelable?: boolean;\n propagate?: boolean;\n }) {\n if (!dragging.peek()) {\n return;\n }\n\n const event = defaultPreventable(\n {\n nativeEvent,\n operation: snapshot(operation),\n by,\n to,\n },\n cancelable\n );\n\n if (propagate) {\n monitor.dispatch('dragmove', event);\n }\n\n queueMicrotask(() => {\n if (event.defaultPrevented) {\n return;\n }\n\n const coordinates = to ?? {\n x: position.current.x + by.x,\n y: position.current.y + by.y,\n };\n\n position.update(coordinates);\n });\n },\n stop({\n canceled: eventCanceled = false,\n event: nativeEvent,\n }: {event?: Event; canceled?: boolean} = {}) {\n let promise: Promise<void> | undefined;\n const suspend = () => {\n const output = {\n resume: () => {},\n abort: () => {},\n };\n\n promise = new Promise<void>((resolve, reject) => {\n output.resume = resolve;\n output.abort = reject;\n });\n\n return output;\n };\n const end = () => {\n /* Wait for the renderer to finish rendering before finalizing the drag operation */\n manager.renderer.rendering.then(() => {\n status.value = Status.Dropped;\n\n const dropping = untracked(() => source.value?.status === 'dropping');\n\n if (dropping) {\n const currentSource = source.value;\n\n // Wait until the source has finished dropping before resetting the operation\n const dispose = effect(() => {\n if (currentSource?.status === 'idle') {\n dispose();\n\n // Only reset the drag operation if the source is still the same source that was active when the drag operation\n // was ended, as it's possible for a new drag operation to start while the previous source is still dropping\n if (source.value !== currentSource) return;\n\n reset();\n }\n });\n } else {\n manager.renderer.rendering.then(reset);\n }\n });\n };\n\n batch(() => {\n dragended.value = true;\n canceled.value = eventCanceled;\n });\n\n monitor.dispatch('dragend', {\n nativeEvent,\n operation: snapshot(operation),\n canceled: eventCanceled,\n suspend,\n });\n\n if (promise) {\n promise.then(end).catch(reset);\n } else {\n end();\n }\n },\n };\n\n return {\n operation,\n actions,\n cleanup() {\n if (status.peek() !== Status.Idle) {\n actions.stop({canceled: true});\n }\n\n modifiers.value.forEach((modifier) => modifier.destroy());\n dispose();\n },\n };\n}\n\nfunction snapshot<T extends Record<string, any>>(obj: T): T {\n return {\n ...obj,\n };\n}\n","export interface Renderer {\n get rendering(): Promise<void>;\n}\n\nexport const defaultRenderer: Renderer = {\n get rendering() {\n return Promise.resolve();\n },\n};\n","import type {Draggable, Droppable} from '../entities/index.ts';\nimport {CollisionObserver, CollisionNotifier} from '../collision/index.ts';\nimport type {Plugins, Plugin} from '../plugins/index.ts';\nimport type {Sensor, Sensors} from '../sensors/index.ts';\nimport type {Modifier, Modifiers} from '../modifiers/index.ts';\n\nimport {DragDropRegistry} from './registry.ts';\nimport {\n DragOperationManager,\n type DragOperation,\n type DragActions,\n} from './dragOperation.ts';\nimport {DragDropMonitor} from './events.ts';\nimport {defaultRenderer, type Renderer} from './renderer.ts';\n\nexport type DragDropManagerInput<T extends DragDropManager<any, any>> = {\n plugins?: Plugins<T>;\n sensors?: Sensors<T>;\n modifiers?: Modifiers<T>;\n renderer?: Renderer;\n};\n\nexport class DragDropManager<T extends Draggable, U extends Droppable> {\n public actions: DragActions<T, U, DragDropManager<T, U>>;\n public collisionObserver: CollisionObserver<T, U>;\n public dragOperation: DragOperation<T, U>;\n public monitor: DragDropMonitor<T, U, DragDropManager<T, U>>;\n public registry: DragDropRegistry<T, U, DragDropManager<T, U>>;\n public renderer: Renderer;\n\n constructor(config?: DragDropManagerInput<any>) {\n type V = DragDropManager<T, U>;\n\n const {\n plugins = [],\n sensors = [],\n modifiers = [],\n renderer = defaultRenderer,\n } = config ?? {};\n const monitor = new DragDropMonitor<T, U, V>(this);\n const registry = new DragDropRegistry<T, U, V>(this);\n\n this.registry = registry;\n this.monitor = monitor;\n this.renderer = renderer;\n\n const {actions, operation, cleanup} = DragOperationManager<T, U, V>(this);\n\n this.actions = actions;\n this.dragOperation = operation;\n this.collisionObserver = new CollisionObserver<T, U, V>(this);\n this.plugins = [CollisionNotifier, ...plugins];\n this.modifiers = modifiers;\n this.sensors = sensors;\n\n const {destroy} = this;\n\n this.destroy = () => {\n cleanup();\n destroy();\n };\n }\n\n get plugins(): Plugin<any>[] {\n return this.registry.plugins.values;\n }\n\n set plugins(plugins: Plugins<any>) {\n this.registry.plugins.values = plugins;\n }\n\n get modifiers(): Modifier<any>[] {\n return this.registry.modifiers.values;\n }\n\n set modifiers(modifiers: Modifiers<any>) {\n this.registry.modifiers.values = modifiers;\n }\n\n get sensors(): Sensor<any>[] {\n return this.registry.sensors.values;\n }\n\n set sensors(sensors: Sensors<any>) {\n this.registry.sensors.values = sensors;\n }\n\n public destroy = () => {\n this.registry.destroy();\n this.collisionObserver.destroy();\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dnd-kit/abstract",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2-beta-20250420020552",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@dnd-kit/geometry": "
|
|
48
|
-
"@dnd-kit/state": "
|
|
47
|
+
"@dnd-kit/geometry": "0.1.2-beta-20250420020552",
|
|
48
|
+
"@dnd-kit/state": "0.1.2-beta-20250420020552",
|
|
49
49
|
"tslib": "^2.6.2"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|