@dnd-kit/dom 0.0.3-beta-20240617124334 → 0.0.3

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 CHANGED
@@ -1230,11 +1230,12 @@ var Draggable = class extends abstract.Draggable {
1230
1230
  effects: () => [
1231
1231
  ...effects2(),
1232
1232
  () => {
1233
+ const { manager: manager2 } = this;
1233
1234
  const sensors = this.sensors?.map(abstract.descriptor) ?? [
1234
- ...manager.sensors
1235
+ ...manager2.sensors
1235
1236
  ];
1236
1237
  const unbindFunctions = sensors.map((entry) => {
1237
- const sensorInstance = entry instanceof abstract.Sensor ? entry : manager.registry.register(entry.plugin);
1238
+ const sensorInstance = entry instanceof abstract.Sensor ? entry : manager2.registry.register(entry.plugin);
1238
1239
  const options = entry instanceof abstract.Sensor ? void 0 : entry.options;
1239
1240
  const unbind = sensorInstance.bind(this, options);
1240
1241
  return unbind;
@@ -1273,8 +1274,8 @@ var Droppable = class extends abstract.Droppable {
1273
1274
  effects: () => [
1274
1275
  ...effects2(),
1275
1276
  () => {
1276
- const { element: element2 } = this;
1277
- const { dragOperation } = manager;
1277
+ const { element: element2, manager: manager2 } = this;
1278
+ const { dragOperation } = manager2;
1278
1279
  if (element2 && dragOperation.status.initialized) {
1279
1280
  const scrollableAncestor = utilities.getFirstScrollableAncestor(element2);
1280
1281
  const doc = utilities.getDocument(element2);
@@ -1316,7 +1317,8 @@ var Droppable = class extends abstract.Droppable {
1316
1317
  }
1317
1318
  },
1318
1319
  () => {
1319
- const { dragOperation } = manager;
1320
+ const { manager: manager2 } = this;
1321
+ const { dragOperation } = manager2;
1320
1322
  const { status } = dragOperation;
1321
1323
  const source = state.untracked(() => dragOperation.source);
1322
1324
  if (status.initialized) {
@@ -1327,7 +1329,8 @@ var Droppable = class extends abstract.Droppable {
1327
1329
  }
1328
1330
  },
1329
1331
  () => {
1330
- if (manager.dragOperation.status.initialized) {
1332
+ const { manager: manager2 } = this;
1333
+ if (manager2.dragOperation.status.initialized) {
1331
1334
  return () => {
1332
1335
  this.shape = void 0;
1333
1336
  };
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["src/core/manager/manager.ts","src/core/plugins/accessibility/Accessibility.ts","src/core/plugins/accessibility/defaults.ts","src/core/plugins/accessibility/utilities.ts","src/core/plugins/accessibility/HiddenText.ts","src/core/plugins/accessibility/LiveRegion.ts","src/core/plugins/cursor/Cursor.ts","src/core/plugins/feedback/Feedback.ts","src/core/plugins/scrolling/Scroller.ts","src/core/plugins/scrolling/ScrollIntent.ts","src/core/plugins/scrolling/ScrollLock.ts","src/core/plugins/scrolling/AutoScroller.ts","src/core/plugins/scrolling/ScrollListener.ts","src/core/plugins/selection/PreventSelection.ts","src/core/sensors/keyboard/KeyboardSensor.ts","src/core/sensors/pointer/PointerSensor.ts","src/core/entities/draggable/draggable.ts","src/core/entities/droppable/droppable.ts"],"names":["manager","Plugin","effect","cleanupEffect","status","shape","element","delta","reactive","ScrollDirection","isKeyboardEvent","Axes","canScroll","CorePlugin","batch","DOMRectangle","event","Sensor","getDocument","Listeners","effects","signal","untracked","scheduler"],"mappings":"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","sourcesContent":["import {\n DragDropManager as AbstractDragDropManager,\n DragDropManagerInput,\n type Plugins,\n type Sensors,\n} from '@dnd-kit/abstract';\n\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {\n Accessibility,\n AutoScroller,\n Cursor,\n Feedback,\n Scroller,\n ScrollListener,\n PreventSelection,\n} from '../plugins/index.ts';\nimport {KeyboardSensor, PointerSensor} from '../sensors/index.ts';\n\nexport interface Input extends DragDropManagerInput<any> {}\n\nexport const defaultPreset: {\n plugins: Plugins<DragDropManager>;\n sensors: Sensors<DragDropManager>;\n} = {\n plugins: [Accessibility, AutoScroller, Cursor, Feedback, PreventSelection],\n sensors: [\n PointerSensor.configure({\n activationConstraints(event, source) {\n const {pointerType, target} = event;\n\n if (\n pointerType === 'mouse' &&\n target instanceof Element &&\n (source.handle === target || source.handle?.contains(target))\n ) {\n return undefined;\n }\n\n return {\n delay: {value: 200, tolerance: 10},\n distance: {value: 5},\n };\n },\n }),\n KeyboardSensor,\n ],\n};\n\nexport class DragDropManager<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> extends AbstractDragDropManager<Draggable, Droppable> {\n constructor(input: Input = {}) {\n const {\n plugins = defaultPreset.plugins,\n sensors = defaultPreset.sensors,\n modifiers = [],\n } = input;\n\n super({\n ...input,\n plugins: [ScrollListener, Scroller, ...plugins],\n sensors,\n modifiers,\n });\n }\n}\n","import {effects} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {\n defaultAnnouncements,\n defaultAttributes,\n defaultAnnouncementIdPrefix,\n defaultDescriptionIdPrefix,\n defaultScreenReaderInstructions,\n} from './defaults.ts';\nimport type {Announcements, ScreenReaderInstructions} from './types.ts';\nimport {generateUniqueId, isFocusable} from './utilities.ts';\nimport {createHiddenText} from './HiddenText.ts';\nimport {createLiveRegion} from './LiveRegion.ts';\n\ninterface Options {\n id?: string;\n idPrefix?: {\n description?: string;\n announcement?: string;\n };\n announcements?: Announcements;\n screenReaderInstructions?: ScreenReaderInstructions;\n}\n\nexport class Accessibility extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager, options?: Options) {\n super(manager);\n\n const {\n id,\n idPrefix: {\n description: descriptionPrefix = defaultDescriptionIdPrefix,\n announcement: announcementPrefix = defaultAnnouncementIdPrefix,\n } = {},\n announcements = defaultAnnouncements,\n screenReaderInstructions = defaultScreenReaderInstructions,\n } = options ?? {};\n\n const descriptionId = id\n ? `${descriptionPrefix}-${id}`\n : generateUniqueId(descriptionPrefix);\n const announcementId = id\n ? `${announcementPrefix}-${id}`\n : generateUniqueId(announcementPrefix);\n\n let hiddenTextElement: HTMLElement | undefined;\n let liveRegionElement: HTMLElement | undefined;\n\n const eventListeners = Object.entries(announcements).map(\n ([eventName, getAnnouncement]) => {\n return this.manager.monitor.addEventListener(\n eventName as keyof Announcements,\n (event: any, manager: DragDropManager) => {\n const announcement = getAnnouncement?.(event, manager);\n\n if (announcement && liveRegionElement) {\n liveRegionElement.innerText = announcement;\n }\n }\n );\n }\n );\n\n const initialize = () => {\n hiddenTextElement = createHiddenText(\n descriptionId,\n screenReaderInstructions.draggable\n );\n liveRegionElement = createLiveRegion(announcementId);\n\n document.body.append(hiddenTextElement, liveRegionElement);\n };\n\n const cleanupEffects = effects(() => {\n for (const draggable of manager.registry.draggables.value) {\n const {element, handle} = draggable;\n const activator = handle ?? element;\n\n if (activator) {\n if (!hiddenTextElement || !liveRegionElement) {\n initialize();\n }\n\n if (!isFocusable(activator) && !activator.hasAttribute('tabindex')) {\n activator.setAttribute('tabindex', '0');\n }\n\n if (\n !activator.hasAttribute('role') &&\n !(activator instanceof HTMLButtonElement)\n ) {\n activator.setAttribute('role', defaultAttributes.role);\n }\n\n if (!activator.hasAttribute('role-description')) {\n activator.setAttribute(\n 'aria-roledescription',\n defaultAttributes.roleDescription\n );\n }\n\n if (!activator.hasAttribute('aria-describedby')) {\n activator.setAttribute('aria-describedby', descriptionId);\n }\n\n activator.setAttribute(\n 'aria-pressed',\n String(draggable.isDragSource)\n );\n\n activator.setAttribute('aria-disabled', String(draggable.disabled));\n }\n }\n\n this.destroy = () => {\n hiddenTextElement?.remove();\n liveRegionElement?.remove();\n eventListeners.forEach((unsubscribe) => unsubscribe());\n cleanupEffects();\n };\n });\n }\n}\n","import type {Announcements, ScreenReaderInstructions} from './types.ts';\n\nexport const defaultAttributes = {\n role: 'button',\n roleDescription: 'draggable',\n tabIndex: 0,\n};\n\nexport const defaultDescriptionIdPrefix = `dnd-kit-description`;\nexport const defaultAnnouncementIdPrefix = `dnd-kit-announcement`;\n\nexport const defaultScreenReaderInstructions: ScreenReaderInstructions = {\n draggable: `To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item in a given direction. Press space again to drop the item in its new position, or press escape to cancel.`,\n};\n\nexport const defaultAnnouncements: Announcements = {\n dragstart({operation: {source}}) {\n if (!source) return;\n\n return `Picked up draggable item ${source.id}.`;\n },\n dragover({operation: {source, target}}) {\n if (!source) return;\n\n if (target) {\n return `Draggable item ${source.id} was moved over droppable target ${target.id}.`;\n }\n\n return `Draggable item ${source.id} is no longer over a droppable target.`;\n },\n dragend({operation: {source, target}, canceled}) {\n if (!source) return;\n\n if (canceled) {\n return `Dragging was cancelled. Draggable item ${source.id} was dropped.`;\n }\n\n if (target) {\n return `Draggable item ${source.id} was dropped over droppable target ${target.id}`;\n }\n\n return `Draggable item ${source.id} was dropped.`;\n },\n};\n","export function isFocusable(element: Element) {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLButtonElement ||\n element instanceof HTMLAreaElement\n );\n}\n\nconst ids: Record<string, number> = {};\n\nexport function generateUniqueId(prefix: string) {\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n\n return `${prefix}-${id}`;\n}\n","export function createHiddenText(id: string, value: string) {\n const element = document.createElement('div');\n\n element.id = id;\n element.style.setProperty('display', 'none');\n element.innerText = value;\n\n return element;\n}\n","export function createLiveRegion(id: string) {\n const element = document.createElement('div');\n\n element.id = id;\n element.setAttribute('role', 'status');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n element.style.setProperty('position', 'fixed');\n element.style.setProperty('width', '1px');\n element.style.setProperty('height', '1px');\n element.style.setProperty('margin', '-1px');\n element.style.setProperty('border', '0');\n element.style.setProperty('padding', '0');\n element.style.setProperty('overflow', 'hidden');\n element.style.setProperty('clip', 'rect(0 0 0 0)');\n element.style.setProperty('clip-path', 'inset(100%)');\n element.style.setProperty('white-space', 'nowrap');\n\n return element;\n}\n","import {Plugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\n\ninterface CursorPluginOptions {\n /**\n * The style of the cursor to be applied to the document body.\n * @default 'grabbing'\n */\n cursor?: string;\n}\n\nexport class Cursor extends Plugin<DragDropManager> {\n constructor(\n public manager: DragDropManager,\n options?: CursorPluginOptions\n ) {\n super(manager, options);\n\n this.destroy = effect(() => {\n const {dragOperation} = this.manager;\n const {cursor = 'grabbing'} = this.options ?? {};\n\n if (dragOperation.status.initialized) {\n const style = document.createElement('style');\n style.innerText = `* { cursor: ${cursor} !important; }`;\n document.head.appendChild(style);\n\n return () => {\n style.remove();\n };\n }\n });\n }\n}\n","import {effect, untracked, type CleanupFunction} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {\n animateTransform,\n createPlaceholder,\n DOMRectangle,\n isKeyboardEvent,\n showPopover,\n getComputedStyles,\n supportsPopover,\n supportsStyle,\n Styles,\n type Transform,\n parseTranslate,\n} from '@dnd-kit/dom/utilities';\nimport {Coordinates} from '@dnd-kit/geometry';\n\nimport {DragDropManager} from '../../manager/index.ts';\n\nconst ATTR_PREFIX = 'data-dnd-';\nconst CSS_PREFIX = '--dnd-';\nconst ATTRIBUTE = `${ATTR_PREFIX}dragging`;\nconst cssRules = `[${ATTRIBUTE}] {position: fixed !important; pointer-events: none !important; touch-action: none !important; z-index: calc(infinity); will-change: transform;top: var(${CSS_PREFIX}top, 0px) !important;left: var(${CSS_PREFIX}left, 0px) !important;width: var(${CSS_PREFIX}width, auto) !important;height: var(${CSS_PREFIX}height, auto) !important;}[${ATTRIBUTE}][style*=\"${CSS_PREFIX}translate\"] {translate: var(${CSS_PREFIX}translate) !important;}[style*=\"${CSS_PREFIX}transition\"] {transition: var(${CSS_PREFIX}transition) !important;}*:where([${ATTRIBUTE}][popover]){overflow:visible;background:var(${CSS_PREFIX}background);border:var(${CSS_PREFIX}border);margin:unset;padding:unset;color:inherit;}[${ATTRIBUTE}]::backdrop {display: none}`;\nconst PLACEHOLDER_ATTRIBUTE = `${ATTR_PREFIX}placeholder`;\nconst IGNORED_ATTRIBUTES = [ATTRIBUTE, PLACEHOLDER_ATTRIBUTE, 'popover'];\nconst IGNORED_STYLES = ['view-transition-name'];\n\nexport class Feedback extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n let style: HTMLStyleElement | undefined;\n let initialCoordinates: Coordinates | undefined;\n let initialTranslate: Coordinates = {x: 0, y: 0};\n let currentTransform: Transform | undefined;\n let transformOrigin: Coordinates | undefined;\n let moved = false;\n\n const styleInjectionCleanup = effect(() => {\n if (!style && manager.dragOperation.status.initialized) {\n style = document.createElement('style');\n style.innerText = cssRules;\n document.head.prepend(style);\n\n return styleInjectionCleanup;\n }\n });\n\n const cleanupEffect = effect(() => {\n const {dragOperation} = manager;\n const {position, source, status} = dragOperation;\n\n if (status.idle) {\n initialCoordinates = undefined;\n currentTransform = undefined;\n transformOrigin = undefined;\n initialTranslate = {x: 0, y: 0};\n return;\n }\n\n if (!source) return;\n\n const {element, feedback} = source;\n\n if (!element || feedback === 'none') return;\n\n const shape = new DOMRectangle(element, true);\n const {width, height, top, left} = shape;\n const styles = new Styles(element);\n const {background, border, transition, translate} =\n getComputedStyles(element);\n const droppable = manager.registry.droppables.get(source.id);\n const clone = feedback === 'clone';\n const placeholder =\n feedback !== 'move'\n ? createPlaceholder(element, clone, {\n [PLACEHOLDER_ATTRIBUTE]: '',\n })\n : null;\n const isKeyboardOperation = untracked(() =>\n isKeyboardEvent(manager.dragOperation.activatorEvent)\n );\n\n if (translate !== 'none') {\n const parsedTranslate = parseTranslate(translate);\n\n if (parsedTranslate) {\n initialTranslate = parsedTranslate;\n }\n }\n\n if (!initialCoordinates) {\n initialCoordinates = {\n x: left,\n y: top,\n };\n }\n\n if (!transformOrigin) {\n const currentPosition = untracked(() => position.current);\n transformOrigin = {\n x: (currentPosition.x - left) / width,\n y: (currentPosition.y - top) / height,\n };\n }\n\n const delta = {\n x: initialCoordinates.x - left,\n y: initialCoordinates.y - top,\n };\n const projected = {\n top: top + delta.y,\n left: left + delta.x,\n };\n\n element.setAttribute(ATTRIBUTE, 'true');\n styles.set(\n {\n width: width,\n height: height,\n top: projected.top,\n left: projected.left,\n background,\n border,\n translate: currentTransform\n ? `${currentTransform.x}px ${currentTransform.y}px 0`\n : '',\n },\n CSS_PREFIX\n );\n\n if (placeholder) element.insertAdjacentElement('afterend', placeholder);\n\n if (supportsPopover(element)) {\n if (!element.hasAttribute('popover')) {\n element.setAttribute('popover', '');\n }\n showPopover(element);\n }\n\n const actual = new DOMRectangle(element, true);\n const offset = {\n top: projected.top - actual.top,\n left: projected.left - actual.left,\n };\n\n if (offset.left > 0.01 || offset.top > 0.01) {\n styles.set(\n {\n top: projected.top + offset.top,\n left: projected.left + offset.left,\n },\n CSS_PREFIX\n );\n } else {\n // Ignore sub-pixel offsets\n offset.left = 0;\n offset.top = 0;\n }\n\n const resizeObserver = new ResizeObserver(() => {\n if (!placeholder) return;\n\n const placeholderShape = new DOMRectangle(placeholder, true);\n const origin = transformOrigin ?? {x: 1, y: 1};\n const dX = (width - placeholderShape.width) * origin.x + delta.x;\n const dY = (height - placeholderShape.height) * origin.y + delta.y;\n\n styles.set(\n {\n width: placeholderShape.width,\n height: placeholderShape.height,\n top: top + dY + offset.top,\n left: left + dX + offset.left,\n },\n CSS_PREFIX\n );\n\n /* Table cells need to have their width set explicitly because the feedback element is position fixed */\n if (\n element instanceof HTMLTableRowElement &&\n placeholder instanceof HTMLTableRowElement\n ) {\n const cells = Array.from(element.cells);\n const placeholderCells = Array.from(placeholder.cells);\n\n for (const [index, cell] of cells.entries()) {\n const placeholderCell = placeholderCells[index];\n\n cell.style.width = `${placeholderCell.offsetWidth}px`;\n }\n }\n\n manager.dragOperation.shape = new DOMRectangle(element);\n });\n\n if (droppable && placeholder) {\n /*\n * If there is a droppable with the same id as the draggable source\n * set the placeholder as the droppable's placeholder, which takes\n * precedence over the dorppable's `element` property when computing\n * its shape.\n */\n droppable.placeholder = placeholder;\n untracked(droppable.refreshShape);\n }\n\n /* Initialize drag operation shape */\n dragOperation.shape = new DOMRectangle(element);\n\n let elementMutationObserver: MutationObserver | undefined;\n let documentMutationObserver: MutationObserver | undefined;\n\n if (placeholder) {\n resizeObserver.observe(placeholder);\n\n elementMutationObserver = new MutationObserver(() => {\n for (const attribute of Array.from(element.attributes)) {\n if (\n attribute.name.startsWith('aria-') ||\n IGNORED_ATTRIBUTES.includes(attribute.name)\n ) {\n continue;\n }\n\n if (attribute.name === 'style') {\n if (supportsStyle(element) && supportsStyle(placeholder)) {\n placeholder.setAttribute('style', clone ? '' : 'opacity: 0;');\n placeholder.style.setProperty('transition', 'none');\n\n for (const key of Object.values(element.style)) {\n if (\n key.startsWith(CSS_PREFIX) ||\n IGNORED_STYLES.includes(key)\n ) {\n continue;\n }\n\n placeholder.style.setProperty(\n key,\n element.style.getPropertyValue(key)\n );\n }\n }\n continue;\n }\n\n placeholder.setAttribute(attribute.name, attribute.value);\n }\n\n if (clone) {\n placeholder.innerHTML = element.innerHTML;\n }\n });\n\n elementMutationObserver.observe(element, {\n attributes: true,\n subtree: true,\n });\n\n documentMutationObserver = new MutationObserver((entries) => {\n for (const entry of entries) {\n if (Array.from(entry.addedNodes).includes(element)) {\n /* Update the position of the placeholder when the source element is moved */\n element.insertAdjacentElement('afterend', placeholder);\n\n /*\n * Any update in DOM order that affects the source element hides the popover\n * so we need to force the source element to be promoted to the top layer again\n */\n showPopover(element);\n return;\n }\n }\n });\n\n /* Observe mutations on the element's owner document body */\n documentMutationObserver.observe(element.ownerDocument.body, {\n childList: true,\n subtree: true,\n });\n }\n\n const cleanupEffect = effect(function updateTransform() {\n const {transform, status} = dragOperation;\n\n if (!transform.x && !transform.y && !moved) {\n return;\n }\n\n if (!moved) {\n moved = true;\n }\n\n if (status.dragging) {\n const translateTransition = isKeyboardOperation\n ? '250ms ease'\n : '0ms linear';\n\n const x = transform.x + initialTranslate.x;\n const y = transform.y + initialTranslate.y;\n\n const shape = new DOMRectangle(element);\n\n styles.set(\n {\n transition: `${transition}, translate ${translateTransition}`,\n translate: `${x}px ${y}px 0`,\n },\n CSS_PREFIX\n );\n\n dragOperation.shape = shape.translate(\n x - (currentTransform?.x ?? 0),\n y - (currentTransform?.y ?? 0)\n );\n\n currentTransform = {\n x,\n y,\n z: 0,\n scaleX: shape.scale.x,\n scaleY: shape.scale.y,\n };\n }\n });\n\n const id = manager.dragOperation.source?.id;\n\n const restoreFocus = () => {\n if (!isKeyboardOperation || id == null) {\n return;\n }\n\n const draggable = manager.registry.draggables.get(id);\n const element = draggable?.handle ?? draggable?.element;\n\n if (element instanceof HTMLElement) {\n element.focus();\n }\n };\n\n let cleanup: CleanupFunction | undefined = () => {\n elementMutationObserver?.disconnect();\n documentMutationObserver?.disconnect();\n resizeObserver.disconnect();\n\n styles.reset();\n\n if (moved && element.isConnected) {\n placeholder?.replaceWith(element);\n }\n\n placeholder?.remove();\n element.removeAttribute(ATTRIBUTE);\n\n if (supportsPopover(element)) {\n element.removeAttribute('popover');\n }\n\n cleanupEffect();\n dropEffectCleanup();\n\n if (droppable) {\n droppable.placeholder = undefined;\n }\n\n moved = false;\n };\n\n const dropEffectCleanup = effect(function dropAnimation() {\n if (dragOperation.status.dropped) {\n const onComplete = cleanup;\n cleanup = undefined;\n\n const transform = currentTransform;\n\n if (!transform) {\n onComplete?.();\n return;\n }\n\n let projectedTransform: Transform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n };\n\n manager.renderer.rendering.then(() => {\n /* Force the source element to be promoted to the top layer before animating it */\n showPopover(element);\n\n const target = placeholder ?? element;\n\n styles.remove(['translate'], CSS_PREFIX);\n\n const shape = new DOMRectangle(target);\n const currentShape = new DOMRectangle(element, true).translate(\n transform.x,\n transform.y\n );\n const delta = {\n x: currentShape.center.x - shape.center.x,\n y: currentShape.center.y - shape.center.y,\n };\n const final = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n z: 0,\n };\n\n animateTransform({\n element,\n keyframes: {\n translate: [\n `${transform.x}px ${transform.y}px ${transform.z ?? 0}`,\n `${final.x}px ${final.y}px ${final.z}`,\n ],\n },\n options: {\n duration: moved ? 250 : 0,\n easing: 'ease',\n },\n onFinish() {\n requestAnimationFrame(restoreFocus);\n onComplete?.();\n },\n });\n });\n }\n });\n\n return () => cleanup?.();\n });\n\n this.destroy = () => {\n styleInjectionCleanup();\n cleanupEffect();\n style?.remove();\n };\n }\n}\n","import {CorePlugin} from '@dnd-kit/abstract';\nimport {computed, deepEqual, reactive} from '@dnd-kit/state';\nimport {\n canScroll,\n detectScrollIntent,\n getScrollableAncestors,\n ScrollDirection,\n scheduler,\n isKeyboardEvent,\n} from '@dnd-kit/dom/utilities';\nimport {Axes, type Coordinates} from '@dnd-kit/geometry';\n\nimport type {DragDropManager} from '../../manager/index.ts';\n\nimport {ScrollIntentTracker} from './ScrollIntent.ts';\n\nexport class Scroller extends CorePlugin<DragDropManager> {\n public getScrollableElements: () => Set<Element> | null;\n\n private scrollIntentTracker: ScrollIntentTracker;\n\n @reactive\n public autoScrolling = false;\n\n constructor(manager: DragDropManager) {\n super(manager);\n\n let previousElementFromPoint: Element | null = null;\n let previousScrollableElements: Set<Element> | null = null;\n const elementFromPoint = computed(() => {\n const {position} = manager.dragOperation;\n\n if (!position) {\n return null;\n }\n\n const {x, y} = position.current;\n const element = document.elementFromPoint(x, y);\n\n if (element) {\n previousElementFromPoint = element;\n }\n\n return document.elementFromPoint(x, y) ?? previousElementFromPoint;\n });\n const scrollableElements = computed(() => {\n const element = elementFromPoint.value;\n\n if (!element || element === document.documentElement) {\n const {target} = manager.dragOperation;\n const targetElement = target?.element;\n\n if (targetElement) {\n const elements = getScrollableAncestors(targetElement, {\n excludeElement: false,\n });\n previousScrollableElements = elements;\n\n return elements;\n }\n }\n\n if (element) {\n const elements = getScrollableAncestors(element, {\n excludeElement: false,\n });\n\n if (\n this.autoScrolling &&\n previousScrollableElements &&\n elements.size < previousScrollableElements?.size\n ) {\n return previousScrollableElements;\n }\n\n previousScrollableElements = elements;\n\n return elements;\n }\n\n previousScrollableElements = null;\n\n return null;\n }, deepEqual);\n\n this.getScrollableElements = () => {\n return scrollableElements.value;\n };\n\n this.scrollIntentTracker = new ScrollIntentTracker(manager);\n\n this.destroy = manager.monitor.addEventListener('dragmove', (event) => {\n if (\n this.disabled ||\n event.defaultPrevented ||\n !isKeyboardEvent(manager.dragOperation.activatorEvent) ||\n !event.by\n ) {\n return;\n }\n\n // Prevent the move event if we can scroll to the new coordinates\n if (this.scroll({by: event.by})) {\n event.preventDefault();\n }\n });\n }\n\n #meta: {element: Element; by: Coordinates} | undefined;\n\n #scroll = () => {\n if (!this.#meta) {\n return;\n }\n\n const {element, by} = this.#meta;\n\n element.scrollBy(by.x, by.y);\n };\n\n public scroll = (options?: {by: Coordinates}): boolean => {\n if (this.disabled) {\n return false;\n }\n\n const elements = this.getScrollableElements();\n\n if (!elements) {\n this.#meta = undefined;\n return false;\n }\n\n const {position} = this.manager.dragOperation;\n const currentPosition = position?.current;\n\n if (currentPosition) {\n const {by} = options ?? {};\n const intent = by\n ? {\n x: getScrollIntent(by.x),\n y: getScrollIntent(by.y),\n }\n : undefined;\n const scrollIntent = intent\n ? undefined\n : this.scrollIntentTracker.current;\n\n if (scrollIntent?.isLocked()) {\n return false;\n }\n\n for (const scrollableElement of elements) {\n const elementCanScroll = canScroll(scrollableElement, by);\n\n if (elementCanScroll.x || elementCanScroll.y) {\n const {speed, direction} = detectScrollIntent(\n scrollableElement,\n currentPosition,\n intent\n );\n\n if (scrollIntent) {\n for (const axis of Axes) {\n if (scrollIntent[axis].isLocked(direction[axis])) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n }\n\n if (direction.x || direction.y) {\n const {x, y} = by ?? direction;\n const scrollLeftBy = x * speed.x;\n const scrollTopBy = y * speed.y;\n\n if (scrollLeftBy || scrollTopBy) {\n const previousScrollBy = this.#meta?.by;\n\n if (this.autoScrolling && previousScrollBy) {\n const scrollIntentMismatch =\n (previousScrollBy.x && !scrollLeftBy) ||\n (previousScrollBy.y && !scrollTopBy);\n\n if (scrollIntentMismatch) continue;\n }\n\n this.#meta = {\n element: scrollableElement,\n by: {\n x: scrollLeftBy,\n y: scrollTopBy,\n },\n };\n\n scheduler.schedule(this.#scroll);\n\n return true;\n }\n }\n }\n }\n }\n\n this.#meta = undefined;\n return false;\n };\n}\n\nfunction getScrollIntent(value: number) {\n if (value > 0) {\n return ScrollDirection.Forward;\n }\n\n if (value < 0) {\n return ScrollDirection.Reverse;\n }\n\n return ScrollDirection.Idle;\n}\n","import {batch, effect, signal, type Signal} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {Axes} from '@dnd-kit/geometry';\nimport type {Coordinates} from '@dnd-kit/geometry';\nimport {ScrollDirection} from '@dnd-kit/dom/utilities';\n\nimport type {DragDropManager} from '../../manager/index.ts';\n\nimport {ScrollLock} from './ScrollLock.ts';\n\nconst DIRECTIONS = [ScrollDirection.Forward, ScrollDirection.Reverse];\n\nclass ScrollIntent {\n public x = new ScrollLock();\n public y = new ScrollLock();\n\n public isLocked(): boolean {\n return this.x.isLocked() && this.y.isLocked();\n }\n}\n\nexport class ScrollIntentTracker extends Plugin<DragDropManager> {\n private signal: Signal<ScrollIntent | null>;\n\n constructor(manager: DragDropManager) {\n super(manager);\n\n const scrollIntent = signal<ScrollIntent>(new ScrollIntent());\n let previousDelta: Coordinates | null = null;\n\n this.signal = scrollIntent;\n\n effect(() => {\n const {status} = manager.dragOperation;\n\n if (!status.initialized) {\n previousDelta = null;\n scrollIntent.value = new ScrollIntent();\n return;\n }\n\n const {delta} = manager.dragOperation.position;\n\n if (previousDelta) {\n const directions = {\n x: getDirection(delta.x, previousDelta.x),\n y: getDirection(delta.y, previousDelta.y),\n };\n\n const intent = scrollIntent.peek();\n\n batch(() => {\n for (const axis of Axes) {\n for (const direction of DIRECTIONS) {\n if (directions[axis] === direction) {\n intent[axis].unlock(direction);\n }\n }\n }\n\n scrollIntent.value = intent;\n });\n }\n\n previousDelta = delta;\n });\n }\n\n get current(): ScrollIntent | null {\n return this.signal.peek();\n }\n}\n\nfunction getDirection(a: number, b: number): ScrollDirection {\n return Math.sign(a - b);\n}\n","import {reactive} from '@dnd-kit/state';\nimport {ScrollDirection as Direction} from '@dnd-kit/dom/utilities';\n\nconst LOCKED = true;\nconst UNLOCKED = false;\n\nexport class ScrollLock {\n @reactive private [Direction.Forward] = LOCKED;\n @reactive private [Direction.Reverse] = LOCKED;\n\n public isLocked(direction?: Direction): boolean {\n if (direction === Direction.Idle) {\n return false;\n }\n\n if (direction == null) {\n return (\n this[Direction.Forward] === LOCKED && this[Direction.Reverse] === LOCKED\n );\n }\n\n return this[direction] === LOCKED;\n }\n\n public unlock(direction: Direction) {\n if (direction === Direction.Idle) {\n return;\n }\n\n this[direction] = UNLOCKED;\n }\n}\n","import {Plugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\nimport type {CleanupFunction} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {Scroller} from './Scroller.ts';\n\ninterface Options {}\n\nconst AUTOSCROLL_INTERVAL = 10;\n\nexport class AutoScroller extends Plugin<DragDropManager> {\n public destroy: CleanupFunction;\n\n constructor(manager: DragDropManager, _options?: Options) {\n super(manager);\n\n const scroller = manager.registry.plugins.get(Scroller);\n\n if (!scroller) {\n throw new Error('AutoScroller plugin depends on Scroller plugin');\n }\n\n this.destroy = effect(() => {\n if (this.disabled) {\n return;\n }\n\n // We consume the position from the drag operation\n // so that this effect is run when the position changes\n const {position: _, status} = manager.dragOperation;\n\n if (status.dragging) {\n const canScroll = scroller.scroll();\n\n if (canScroll) {\n scroller.autoScrolling = true;\n const interval = setInterval(scroller.scroll, AUTOSCROLL_INTERVAL);\n\n return () => {\n clearInterval(interval);\n };\n } else {\n scroller.autoScrolling = false;\n }\n }\n });\n }\n}\n","import {DragOperationStatus, CorePlugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../../manager/index.ts';\n\nconst listenerOptions: AddEventListenerOptions = {\n capture: true,\n passive: true,\n};\n\nexport class ScrollListener extends CorePlugin<DragDropManager> {\n #timeout: NodeJS.Timeout | undefined;\n\n constructor(manager: DragDropManager) {\n super(manager);\n\n const {dragOperation} = this.manager;\n\n this.destroy = effect(() => {\n const enabled = dragOperation.status.dragging;\n\n if (enabled) {\n document.addEventListener('scroll', this.handleScroll, listenerOptions);\n\n return () => {\n document.removeEventListener(\n 'scroll',\n this.handleScroll,\n listenerOptions\n );\n };\n }\n });\n }\n\n private handleScroll = () => {\n if (this.#timeout == null) {\n this.#timeout = setTimeout(() => {\n this.manager.collisionObserver.forceUpdate();\n\n this.#timeout = undefined;\n }, 50);\n }\n };\n}\n","import {Plugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\n\nexport class PreventSelection extends Plugin<DragDropManager> {\n constructor(public manager: DragDropManager) {\n super(manager);\n\n this.destroy = effect(() => {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n const style = document.createElement('style');\n style.innerText = `* { user-select: none !important;, -webkit-user-select: none !important; }`;\n document.head.appendChild(style);\n\n document.addEventListener('selectionchange', removeSelection, {\n capture: true,\n });\n\n return () => {\n document.removeEventListener('selectionchange', removeSelection, {\n capture: true,\n });\n style.remove();\n };\n }\n });\n }\n}\n\nfunction removeSelection() {\n document.getSelection()?.removeAllRanges();\n}\n","import {Sensor} from '@dnd-kit/abstract';\nimport {batch, effect} from '@dnd-kit/state';\nimport type {CleanupFunction} from '@dnd-kit/state';\nimport {\n DOMRectangle,\n getDocument,\n getWindow,\n scrollIntoViewIfNeeded,\n Listeners,\n} from '@dnd-kit/dom/utilities';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Draggable} from '../../entities/index.ts';\nimport {AutoScroller} from '../../plugins/index.ts';\n\nexport type KeyCode = KeyboardEvent['code'];\n\nexport type KeyboardCodes = {\n start: KeyCode[];\n cancel: KeyCode[];\n end: KeyCode[];\n up: KeyCode[];\n down: KeyCode[];\n left: KeyCode[];\n right: KeyCode[];\n};\n\nexport interface KeyboardSensorOptions {\n keyboardCodes?: KeyboardCodes;\n}\n\nconst DEFAULT_KEYBOARD_CODES: KeyboardCodes = {\n start: ['Space', 'Enter'],\n cancel: ['Escape'],\n end: ['Space', 'Enter'],\n up: ['ArrowUp'],\n down: ['ArrowDown'],\n left: ['ArrowLeft'],\n right: ['ArrowRight'],\n};\n\nconst DEFAULT_OFFSET = 10;\n\n/**\n * The KeyboardSensor class is an input sensor that handles Keyboard events.\n */\nexport class KeyboardSensor extends Sensor<\n DragDropManager,\n KeyboardSensorOptions\n> {\n constructor(\n public manager: DragDropManager,\n public options?: KeyboardSensorOptions\n ) {\n super(manager);\n }\n\n #cleanupFunctions: CleanupFunction[] = [];\n\n protected listeners = new Listeners();\n\n public bind(source: Draggable, options = this.options) {\n const unbind = effect(() => {\n const target = source.handle ?? source.element;\n const listener: EventListener = (event: Event) => {\n if (event instanceof KeyboardEvent) {\n this.handleSourceKeyDown(event, source, options);\n }\n };\n\n if (target) {\n target.addEventListener('keydown', listener);\n\n return () => {\n target.removeEventListener('keydown', listener);\n };\n }\n });\n\n return unbind;\n }\n\n protected handleSourceKeyDown = (\n event: KeyboardEvent,\n source: Draggable,\n options: KeyboardSensorOptions | undefined\n ) => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n if (!(event.target instanceof Element)) {\n return;\n }\n\n if (source.disabled || !source.element) {\n return;\n }\n\n const {keyboardCodes = DEFAULT_KEYBOARD_CODES} = options ?? {};\n\n if (!keyboardCodes.start.includes(event.code)) {\n return;\n }\n\n if (!this.manager.dragOperation.status.idle) {\n return;\n }\n\n this.handleStart(event, source, options);\n };\n\n protected handleStart(\n event: KeyboardEvent,\n source: Draggable,\n options: KeyboardSensorOptions | undefined\n ) {\n const {element} = source;\n\n if (!element) {\n throw new Error('Source draggable does not have an associated element');\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n\n scrollIntoViewIfNeeded(element);\n\n const {center} = new DOMRectangle(element);\n\n batch(() => {\n this.manager.actions.setDragSource(source.id);\n this.manager.actions.start({\n event,\n coordinates: {\n x: center.x,\n y: center.y,\n },\n });\n });\n\n this.sideEffects();\n\n const sourceDocument = getDocument(element);\n const sourceWindow = getWindow(sourceDocument);\n\n const listeners = [\n this.listeners.bind(sourceDocument, [\n {\n type: 'keydown',\n listener: (event: KeyboardEvent) =>\n this.handleKeyDown(event, source, options),\n options: {capture: true},\n },\n ]),\n this.listeners.bind(sourceWindow, [\n {type: 'resize', listener: () => this.handleEnd(true)},\n ]),\n ];\n\n this.#cleanupFunctions.push(...listeners);\n }\n\n protected handleKeyDown(\n event: KeyboardEvent,\n _source: Draggable,\n options: KeyboardSensorOptions | undefined\n ) {\n const {keyboardCodes = DEFAULT_KEYBOARD_CODES} = options ?? {};\n\n if (isKeycode(event, [...keyboardCodes.end, ...keyboardCodes.cancel])) {\n event.preventDefault();\n const canceled = isKeycode(event, keyboardCodes.cancel);\n\n this.handleEnd(canceled);\n return;\n }\n\n if (isKeycode(event, keyboardCodes.up)) {\n this.handleMove('up', event);\n } else if (isKeycode(event, keyboardCodes.down)) {\n this.handleMove('down', event);\n }\n\n if (isKeycode(event, keyboardCodes.left)) {\n this.handleMove('left', event);\n } else if (isKeycode(event, keyboardCodes.right)) {\n this.handleMove('right', event);\n }\n }\n\n protected handleEnd(canceled: boolean) {\n this.manager.actions.stop({\n canceled,\n });\n\n this.cleanup();\n }\n\n protected handleMove(\n direction: 'up' | 'down' | 'left' | 'right',\n event: KeyboardEvent\n ) {\n const {shape} = this.manager.dragOperation;\n const factor = event.shiftKey ? 5 : 1;\n let offset = {\n x: 0,\n y: 0,\n };\n\n if (!shape) {\n return;\n }\n\n switch (direction) {\n case 'up':\n offset = {x: 0, y: -DEFAULT_OFFSET * factor};\n break;\n case 'down':\n offset = {x: 0, y: DEFAULT_OFFSET * factor};\n break;\n case 'left':\n offset = {x: -DEFAULT_OFFSET * factor, y: 0};\n break;\n case 'right':\n offset = {x: DEFAULT_OFFSET * factor, y: 0};\n break;\n }\n\n if (offset?.x || offset?.y) {\n event.preventDefault();\n\n this.manager.actions.move({\n by: offset,\n });\n }\n }\n\n private sideEffects() {\n const autoScroller = this.manager.registry.plugins.get(AutoScroller as any);\n\n if (autoScroller?.disabled === false) {\n autoScroller.disable();\n\n this.#cleanupFunctions.push(() => {\n autoScroller.enable();\n });\n }\n }\n\n protected cleanup() {\n this.#cleanupFunctions.forEach((cleanup) => cleanup());\n }\n\n public destroy() {\n this.cleanup();\n // Remove all event listeners\n this.listeners.clear();\n }\n}\n\nfunction isKeycode(event: KeyboardEvent, codes: KeyCode[]) {\n return codes.includes(event.code);\n}\n","import {batch, effect} from '@dnd-kit/state';\nimport type {CleanupFunction} from '@dnd-kit/state';\nimport {Sensor, configurator} from '@dnd-kit/abstract';\nimport {\n exceedsDistance,\n type Distance,\n type Coordinates,\n} from '@dnd-kit/geometry';\nimport {getDocument, Listeners} from '@dnd-kit/dom/utilities';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Draggable} from '../../entities/index.ts';\n\nexport interface DelayConstraint {\n value: number;\n tolerance: Distance;\n}\n\nexport interface DistanceConstraint {\n value: Distance;\n tolerance?: Distance;\n}\n\nexport interface ActivationConstraints {\n distance?: DistanceConstraint;\n delay?: DelayConstraint;\n}\n\nexport interface PointerSensorOptions {\n activationConstraints?:\n | ActivationConstraints\n | ((\n event: PointerEvent,\n source: Draggable\n ) => ActivationConstraints | undefined);\n}\n\n/**\n * The PointerSensor class is an input sensor that handles Pointer events,\n * such as mouse, touch and pen interactions.\n */\nexport class PointerSensor extends Sensor<\n DragDropManager,\n PointerSensorOptions\n> {\n protected listeners = new Listeners();\n\n protected cleanup: Set<CleanupFunction> = new Set();\n\n protected initialCoordinates: Coordinates | undefined;\n\n #clearTimeout: CleanupFunction | undefined;\n\n constructor(\n public manager: DragDropManager,\n public options?: PointerSensorOptions\n ) {\n super(manager);\n }\n\n public bind(source: Draggable, options = this.options) {\n const unbind = effect(() => {\n const target = source.handle ?? source.element;\n const listener: EventListener = (event: Event) => {\n if (event instanceof PointerEvent) {\n this.handlePointerDown(event, source, options);\n }\n };\n\n if (target) {\n patchWindow(target.ownerDocument.defaultView);\n\n target.addEventListener('pointerdown', listener);\n\n return () => {\n target.removeEventListener('pointerdown', listener);\n };\n }\n });\n\n return unbind;\n }\n\n protected handlePointerDown(\n event: PointerEvent,\n source: Draggable,\n options: PointerSensorOptions = {}\n ) {\n if (this.disabled) {\n return;\n }\n\n if (\n !event.isPrimary ||\n event.button !== 0 ||\n !(event.target instanceof Element)\n ) {\n return;\n }\n\n if (source.disabled) {\n return;\n }\n this.initialCoordinates = {\n x: event.clientX,\n y: event.clientY,\n };\n\n const {activationConstraints} = options;\n const constraints =\n typeof activationConstraints === 'function'\n ? activationConstraints(event, source)\n : activationConstraints;\n\n event.stopImmediatePropagation();\n\n if (!constraints?.delay && !constraints?.distance) {\n this.handleStart(source, event);\n } else {\n const {delay} = constraints;\n\n if (delay) {\n const timeout = setTimeout(\n () => this.handleStart(source, event),\n delay.value\n );\n\n this.#clearTimeout = () => {\n clearTimeout(timeout);\n this.#clearTimeout = undefined;\n };\n }\n }\n\n const ownerDocument = getDocument(event.target);\n\n const unbindListeners = this.listeners.bind(ownerDocument, [\n {\n type: 'pointermove',\n listener: (event: PointerEvent) =>\n this.handlePointerMove(event, source, options),\n },\n {\n type: 'pointerup',\n listener: this.handlePointerUp.bind(this),\n },\n {\n // Prevent scrolling on touch devices\n type: 'touchmove',\n listener: preventDefault,\n options: {\n passive: false,\n },\n },\n {\n // Cancel activation if there is a competing Drag and Drop interaction\n type: 'dragstart',\n listener: this.handleCancel.bind(this),\n },\n {\n type: 'keydown',\n listener: this.handleKeyDown.bind(this),\n },\n ]);\n\n const cleanup = () => {\n unbindListeners();\n\n this.#clearTimeout?.();\n this.initialCoordinates = undefined;\n this.cleanup.delete(cleanup);\n };\n\n this.cleanup.add(cleanup);\n }\n\n protected handlePointerMove(\n event: PointerEvent,\n source: Draggable,\n options: PointerSensorOptions\n ) {\n const coordinates = {\n x: event.clientX,\n y: event.clientY,\n };\n\n if (this.manager.dragOperation.status.dragging) {\n event.preventDefault();\n event.stopPropagation();\n\n this.manager.actions.move({to: coordinates});\n return;\n }\n\n if (!this.initialCoordinates) {\n return;\n }\n\n const delta = {\n x: coordinates.x - this.initialCoordinates.x,\n y: coordinates.y - this.initialCoordinates.y,\n };\n const {activationConstraints} = options;\n const constraints =\n typeof activationConstraints === 'function'\n ? activationConstraints(event, source)\n : activationConstraints;\n const {distance, delay} = constraints ?? {};\n\n if (distance) {\n if (\n distance.tolerance != null &&\n exceedsDistance(delta, distance.tolerance)\n ) {\n return this.handleCancel();\n }\n if (exceedsDistance(delta, distance.value)) {\n return this.handleStart(source, event);\n }\n }\n\n if (delay) {\n if (exceedsDistance(delta, delay.tolerance)) {\n return this.handleCancel();\n }\n }\n }\n\n private handlePointerUp(event: PointerEvent) {\n // Prevent the default behaviour of the event\n event.preventDefault();\n event.stopPropagation();\n\n // End the drag and drop operation\n const {status} = this.manager.dragOperation;\n\n if (!status.idle) {\n const canceled = !status.initialized;\n this.manager.actions.stop({canceled});\n }\n\n // Remove the pointer move and up event listeners\n this.cleanup.forEach((cleanup) => cleanup());\n }\n\n protected handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.handleCancel();\n }\n }\n\n protected handleStart(source: Draggable, event: PointerEvent) {\n const {manager, initialCoordinates} = this;\n\n this.#clearTimeout?.();\n\n if (!initialCoordinates || manager.dragOperation.status.initialized) {\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n event.preventDefault();\n\n batch(() => {\n manager.actions.setDragSource(source.id);\n manager.actions.start({coordinates: initialCoordinates, event});\n });\n }\n\n protected handleCancel() {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n this.manager.actions.stop({canceled: true});\n }\n\n // Remove the pointer move and up event listeners\n this.cleanup.forEach((cleanup) => cleanup());\n }\n\n public destroy() {\n // Remove all event listeners\n this.listeners.clear();\n }\n\n static configure = configurator(PointerSensor);\n}\n\nfunction preventDefault(event: Event) {\n event.preventDefault();\n}\n\nfunction noop() {}\n\nconst windows = new WeakSet<Window>();\n\nfunction patchWindow(window: Window | null) {\n if (!window || windows.has(window)) {\n return;\n }\n\n window.addEventListener('touchmove', noop, {\n capture: false,\n passive: false,\n });\n windows.add(window);\n}\n","import {\n Draggable as AbstractDraggable,\n Sensor,\n descriptor,\n} from '@dnd-kit/abstract';\nimport type {\n Data,\n DraggableInput,\n DragDropManager as AbstractDragDropManager,\n Modifiers,\n} from '@dnd-kit/abstract';\nimport {reactive} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Sensors} from '../../sensors/index.ts';\n\nexport type FeedbackType = 'default' | 'move' | 'clone' | 'none';\n\nexport interface Input<T extends Data = Data> extends DraggableInput<T> {\n handle?: Element;\n element?: Element;\n feedback?: FeedbackType;\n sensors?: Sensors;\n modifiers?: Modifiers<DragDropManager>;\n}\n\nexport class Draggable<T extends Data = Data> extends AbstractDraggable<T> {\n @reactive\n public handle: Element | undefined;\n\n @reactive\n public element: Element | undefined;\n\n @reactive\n public feedback: FeedbackType;\n\n constructor(\n {\n element,\n effects = () => [],\n handle,\n feedback = 'default',\n ...input\n }: Input<T>,\n public manager: AbstractDragDropManager<any, any>\n ) {\n super(\n {\n effects: () => [\n ...effects(),\n () => {\n const sensors = this.sensors?.map(descriptor) ?? [\n ...manager.sensors,\n ];\n const unbindFunctions = sensors.map((entry) => {\n const sensorInstance =\n entry instanceof Sensor\n ? entry\n : manager.registry.register(entry.plugin);\n const options =\n entry instanceof Sensor ? undefined : entry.options;\n\n const unbind = sensorInstance.bind(this, options);\n return unbind;\n });\n\n return function cleanup() {\n unbindFunctions.forEach((unbind) => unbind());\n };\n },\n ],\n ...input,\n },\n manager\n );\n\n this.element = element;\n this.handle = handle;\n this.feedback = feedback;\n }\n}\n","import {Droppable as AbstractDroppable} from '@dnd-kit/abstract';\nimport type {\n Data,\n DroppableInput as AbstractDroppableInput,\n DragDropManager as AbstractDragDropManager,\n} from '@dnd-kit/abstract';\nimport {defaultCollisionDetection} from '@dnd-kit/collision';\nimport type {CollisionDetector} from '@dnd-kit/collision';\nimport {Signal, reactive, signal, untracked} from '@dnd-kit/state';\nimport type {Shape} from '@dnd-kit/geometry';\nimport {\n DOMRectangle,\n getDocument,\n scheduler,\n getFirstScrollableAncestor,\n} from '@dnd-kit/dom/utilities';\n\ntype OptionalInput = 'collisionDetector';\n\nexport interface Input<T extends Data = Data>\n extends Omit<AbstractDroppableInput<T>, OptionalInput> {\n collisionDetector?: CollisionDetector;\n element?: Element;\n}\n\nexport class Droppable<T extends Data = Data> extends AbstractDroppable<T> {\n constructor(\n {element, effects = () => [], ...input}: Input<T>,\n public manager: AbstractDragDropManager<any, any>\n ) {\n const {collisionDetector = defaultCollisionDetection} = input;\n\n super(\n {\n ...input,\n collisionDetector,\n effects: () => [\n ...effects(),\n () => {\n const {element} = this;\n const {dragOperation} = manager;\n\n if (element && dragOperation.status.initialized) {\n const scrollableAncestor = getFirstScrollableAncestor(element);\n const doc = getDocument(element);\n const root =\n scrollableAncestor === doc.scrollingElement\n ? doc\n : scrollableAncestor;\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n const [entry] = entries.slice(-1);\n const {width, height} = entry.boundingClientRect;\n\n if (!width && !height) {\n return;\n }\n\n this.visible = entry.isIntersecting;\n },\n {\n root: root ?? doc,\n rootMargin: '40%',\n }\n );\n\n const mutationObserver = new MutationObserver(() =>\n scheduler.schedule(this.refreshShape)\n );\n\n const resizeObserver = new ResizeObserver(() =>\n scheduler.schedule(this.refreshShape)\n );\n\n if (element.parentElement) {\n mutationObserver.observe(element.parentElement, {\n childList: true,\n });\n }\n\n resizeObserver.observe(element);\n intersectionObserver.observe(element);\n\n return () => {\n this.shape = undefined;\n this.visible = undefined;\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n intersectionObserver.disconnect();\n };\n }\n },\n () => {\n const {dragOperation} = manager;\n const {status} = dragOperation;\n const source = untracked(() => dragOperation.source);\n\n if (status.initialized) {\n if (source?.type != null && !this.accepts(source)) {\n return;\n }\n\n scheduler.schedule(this.refreshShape);\n }\n },\n () => {\n if (manager.dragOperation.status.initialized) {\n return () => {\n this.shape = undefined;\n };\n }\n },\n ],\n },\n manager\n );\n\n this.internal = {\n element: signal(element),\n };\n this.refreshShape = this.refreshShape.bind(this);\n\n /*\n * If a droppable target mounts during a drag operation, assume it is visible\n * so that we can update its shape immediately.\n */\n if (manager.dragOperation.status.initialized) {\n this.visible = true;\n }\n }\n\n @reactive\n visible: Boolean | undefined;\n\n @reactive\n public placeholder: Element | undefined;\n\n public set element(value: Element | undefined) {\n this.internal.element.value = value;\n }\n\n public get element() {\n return this.placeholder ?? this.internal?.element.value;\n }\n\n public refreshShape(ignoreTransform?: boolean): Shape | undefined {\n const {element, shape} = this;\n\n if (!element || this.visible === false) {\n this.shape = undefined;\n return undefined;\n }\n\n const updatedShape = new DOMRectangle(element, ignoreTransform);\n\n if (updatedShape && shape?.equals(updatedShape)) {\n return shape;\n }\n\n this.shape = updatedShape;\n\n return updatedShape;\n }\n\n internal: {\n element: Signal<Element | undefined>;\n };\n}\n"]}
1
+ {"version":3,"sources":["src/core/manager/manager.ts","src/core/plugins/accessibility/Accessibility.ts","src/core/plugins/accessibility/defaults.ts","src/core/plugins/accessibility/utilities.ts","src/core/plugins/accessibility/HiddenText.ts","src/core/plugins/accessibility/LiveRegion.ts","src/core/plugins/cursor/Cursor.ts","src/core/plugins/feedback/Feedback.ts","src/core/plugins/scrolling/Scroller.ts","src/core/plugins/scrolling/ScrollIntent.ts","src/core/plugins/scrolling/ScrollLock.ts","src/core/plugins/scrolling/AutoScroller.ts","src/core/plugins/scrolling/ScrollListener.ts","src/core/plugins/selection/PreventSelection.ts","src/core/sensors/keyboard/KeyboardSensor.ts","src/core/sensors/pointer/PointerSensor.ts","src/core/entities/draggable/draggable.ts","src/core/entities/droppable/droppable.ts"],"names":["manager","Plugin","effect","cleanupEffect","status","shape","element","delta","reactive","ScrollDirection","isKeyboardEvent","Axes","canScroll","CorePlugin","batch","DOMRectangle","event","Sensor","getDocument","Listeners","effects","signal","untracked","scheduler"],"mappings":"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","sourcesContent":["import {\n DragDropManager as AbstractDragDropManager,\n DragDropManagerInput,\n type Plugins,\n type Sensors,\n} from '@dnd-kit/abstract';\n\nimport type {Draggable, Droppable} from '../entities/index.ts';\nimport {\n Accessibility,\n AutoScroller,\n Cursor,\n Feedback,\n Scroller,\n ScrollListener,\n PreventSelection,\n} from '../plugins/index.ts';\nimport {KeyboardSensor, PointerSensor} from '../sensors/index.ts';\n\nexport interface Input extends DragDropManagerInput<any> {}\n\nexport const defaultPreset: {\n plugins: Plugins<DragDropManager>;\n sensors: Sensors<DragDropManager>;\n} = {\n plugins: [Accessibility, AutoScroller, Cursor, Feedback, PreventSelection],\n sensors: [\n PointerSensor.configure({\n activationConstraints(event, source) {\n const {pointerType, target} = event;\n\n if (\n pointerType === 'mouse' &&\n target instanceof Element &&\n (source.handle === target || source.handle?.contains(target))\n ) {\n return undefined;\n }\n\n return {\n delay: {value: 200, tolerance: 10},\n distance: {value: 5},\n };\n },\n }),\n KeyboardSensor,\n ],\n};\n\nexport class DragDropManager<\n T extends Draggable = Draggable,\n U extends Droppable = Droppable,\n> extends AbstractDragDropManager<Draggable, Droppable> {\n constructor(input: Input = {}) {\n const {\n plugins = defaultPreset.plugins,\n sensors = defaultPreset.sensors,\n modifiers = [],\n } = input;\n\n super({\n ...input,\n plugins: [ScrollListener, Scroller, ...plugins],\n sensors,\n modifiers,\n });\n }\n}\n","import {effects} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {\n defaultAnnouncements,\n defaultAttributes,\n defaultAnnouncementIdPrefix,\n defaultDescriptionIdPrefix,\n defaultScreenReaderInstructions,\n} from './defaults.ts';\nimport type {Announcements, ScreenReaderInstructions} from './types.ts';\nimport {generateUniqueId, isFocusable} from './utilities.ts';\nimport {createHiddenText} from './HiddenText.ts';\nimport {createLiveRegion} from './LiveRegion.ts';\n\ninterface Options {\n id?: string;\n idPrefix?: {\n description?: string;\n announcement?: string;\n };\n announcements?: Announcements;\n screenReaderInstructions?: ScreenReaderInstructions;\n}\n\nexport class Accessibility extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager, options?: Options) {\n super(manager);\n\n const {\n id,\n idPrefix: {\n description: descriptionPrefix = defaultDescriptionIdPrefix,\n announcement: announcementPrefix = defaultAnnouncementIdPrefix,\n } = {},\n announcements = defaultAnnouncements,\n screenReaderInstructions = defaultScreenReaderInstructions,\n } = options ?? {};\n\n const descriptionId = id\n ? `${descriptionPrefix}-${id}`\n : generateUniqueId(descriptionPrefix);\n const announcementId = id\n ? `${announcementPrefix}-${id}`\n : generateUniqueId(announcementPrefix);\n\n let hiddenTextElement: HTMLElement | undefined;\n let liveRegionElement: HTMLElement | undefined;\n\n const eventListeners = Object.entries(announcements).map(\n ([eventName, getAnnouncement]) => {\n return this.manager.monitor.addEventListener(\n eventName as keyof Announcements,\n (event: any, manager: DragDropManager) => {\n const announcement = getAnnouncement?.(event, manager);\n\n if (announcement && liveRegionElement) {\n liveRegionElement.innerText = announcement;\n }\n }\n );\n }\n );\n\n const initialize = () => {\n hiddenTextElement = createHiddenText(\n descriptionId,\n screenReaderInstructions.draggable\n );\n liveRegionElement = createLiveRegion(announcementId);\n\n document.body.append(hiddenTextElement, liveRegionElement);\n };\n\n const cleanupEffects = effects(() => {\n for (const draggable of manager.registry.draggables.value) {\n const {element, handle} = draggable;\n const activator = handle ?? element;\n\n if (activator) {\n if (!hiddenTextElement || !liveRegionElement) {\n initialize();\n }\n\n if (!isFocusable(activator) && !activator.hasAttribute('tabindex')) {\n activator.setAttribute('tabindex', '0');\n }\n\n if (\n !activator.hasAttribute('role') &&\n !(activator instanceof HTMLButtonElement)\n ) {\n activator.setAttribute('role', defaultAttributes.role);\n }\n\n if (!activator.hasAttribute('role-description')) {\n activator.setAttribute(\n 'aria-roledescription',\n defaultAttributes.roleDescription\n );\n }\n\n if (!activator.hasAttribute('aria-describedby')) {\n activator.setAttribute('aria-describedby', descriptionId);\n }\n\n activator.setAttribute(\n 'aria-pressed',\n String(draggable.isDragSource)\n );\n\n activator.setAttribute('aria-disabled', String(draggable.disabled));\n }\n }\n\n this.destroy = () => {\n hiddenTextElement?.remove();\n liveRegionElement?.remove();\n eventListeners.forEach((unsubscribe) => unsubscribe());\n cleanupEffects();\n };\n });\n }\n}\n","import type {Announcements, ScreenReaderInstructions} from './types.ts';\n\nexport const defaultAttributes = {\n role: 'button',\n roleDescription: 'draggable',\n tabIndex: 0,\n};\n\nexport const defaultDescriptionIdPrefix = `dnd-kit-description`;\nexport const defaultAnnouncementIdPrefix = `dnd-kit-announcement`;\n\nexport const defaultScreenReaderInstructions: ScreenReaderInstructions = {\n draggable: `To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item in a given direction. Press space again to drop the item in its new position, or press escape to cancel.`,\n};\n\nexport const defaultAnnouncements: Announcements = {\n dragstart({operation: {source}}) {\n if (!source) return;\n\n return `Picked up draggable item ${source.id}.`;\n },\n dragover({operation: {source, target}}) {\n if (!source) return;\n\n if (target) {\n return `Draggable item ${source.id} was moved over droppable target ${target.id}.`;\n }\n\n return `Draggable item ${source.id} is no longer over a droppable target.`;\n },\n dragend({operation: {source, target}, canceled}) {\n if (!source) return;\n\n if (canceled) {\n return `Dragging was cancelled. Draggable item ${source.id} was dropped.`;\n }\n\n if (target) {\n return `Draggable item ${source.id} was dropped over droppable target ${target.id}`;\n }\n\n return `Draggable item ${source.id} was dropped.`;\n },\n};\n","export function isFocusable(element: Element) {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLAnchorElement ||\n element instanceof HTMLButtonElement ||\n element instanceof HTMLAreaElement\n );\n}\n\nconst ids: Record<string, number> = {};\n\nexport function generateUniqueId(prefix: string) {\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n\n return `${prefix}-${id}`;\n}\n","export function createHiddenText(id: string, value: string) {\n const element = document.createElement('div');\n\n element.id = id;\n element.style.setProperty('display', 'none');\n element.innerText = value;\n\n return element;\n}\n","export function createLiveRegion(id: string) {\n const element = document.createElement('div');\n\n element.id = id;\n element.setAttribute('role', 'status');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n element.style.setProperty('position', 'fixed');\n element.style.setProperty('width', '1px');\n element.style.setProperty('height', '1px');\n element.style.setProperty('margin', '-1px');\n element.style.setProperty('border', '0');\n element.style.setProperty('padding', '0');\n element.style.setProperty('overflow', 'hidden');\n element.style.setProperty('clip', 'rect(0 0 0 0)');\n element.style.setProperty('clip-path', 'inset(100%)');\n element.style.setProperty('white-space', 'nowrap');\n\n return element;\n}\n","import {Plugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\n\ninterface CursorPluginOptions {\n /**\n * The style of the cursor to be applied to the document body.\n * @default 'grabbing'\n */\n cursor?: string;\n}\n\nexport class Cursor extends Plugin<DragDropManager> {\n constructor(\n public manager: DragDropManager,\n options?: CursorPluginOptions\n ) {\n super(manager, options);\n\n this.destroy = effect(() => {\n const {dragOperation} = this.manager;\n const {cursor = 'grabbing'} = this.options ?? {};\n\n if (dragOperation.status.initialized) {\n const style = document.createElement('style');\n style.innerText = `* { cursor: ${cursor} !important; }`;\n document.head.appendChild(style);\n\n return () => {\n style.remove();\n };\n }\n });\n }\n}\n","import {effect, untracked, type CleanupFunction} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {\n animateTransform,\n createPlaceholder,\n DOMRectangle,\n isKeyboardEvent,\n showPopover,\n getComputedStyles,\n supportsPopover,\n supportsStyle,\n Styles,\n type Transform,\n parseTranslate,\n} from '@dnd-kit/dom/utilities';\nimport {Coordinates} from '@dnd-kit/geometry';\n\nimport {DragDropManager} from '../../manager/index.ts';\n\nconst ATTR_PREFIX = 'data-dnd-';\nconst CSS_PREFIX = '--dnd-';\nconst ATTRIBUTE = `${ATTR_PREFIX}dragging`;\nconst cssRules = `[${ATTRIBUTE}] {position: fixed !important; pointer-events: none !important; touch-action: none !important; z-index: calc(infinity); will-change: transform;top: var(${CSS_PREFIX}top, 0px) !important;left: var(${CSS_PREFIX}left, 0px) !important;width: var(${CSS_PREFIX}width, auto) !important;height: var(${CSS_PREFIX}height, auto) !important;}[${ATTRIBUTE}][style*=\"${CSS_PREFIX}translate\"] {translate: var(${CSS_PREFIX}translate) !important;}[style*=\"${CSS_PREFIX}transition\"] {transition: var(${CSS_PREFIX}transition) !important;}*:where([${ATTRIBUTE}][popover]){overflow:visible;background:var(${CSS_PREFIX}background);border:var(${CSS_PREFIX}border);margin:unset;padding:unset;color:inherit;}[${ATTRIBUTE}]::backdrop {display: none}`;\nconst PLACEHOLDER_ATTRIBUTE = `${ATTR_PREFIX}placeholder`;\nconst IGNORED_ATTRIBUTES = [ATTRIBUTE, PLACEHOLDER_ATTRIBUTE, 'popover'];\nconst IGNORED_STYLES = ['view-transition-name'];\n\nexport class Feedback extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n let style: HTMLStyleElement | undefined;\n let initialCoordinates: Coordinates | undefined;\n let initialTranslate: Coordinates = {x: 0, y: 0};\n let currentTransform: Transform | undefined;\n let transformOrigin: Coordinates | undefined;\n let moved = false;\n\n const styleInjectionCleanup = effect(() => {\n if (!style && manager.dragOperation.status.initialized) {\n style = document.createElement('style');\n style.innerText = cssRules;\n document.head.prepend(style);\n\n return styleInjectionCleanup;\n }\n });\n\n const cleanupEffect = effect(() => {\n const {dragOperation} = manager;\n const {position, source, status} = dragOperation;\n\n if (status.idle) {\n initialCoordinates = undefined;\n currentTransform = undefined;\n transformOrigin = undefined;\n initialTranslate = {x: 0, y: 0};\n return;\n }\n\n if (!source) return;\n\n const {element, feedback} = source;\n\n if (!element || feedback === 'none') return;\n\n const shape = new DOMRectangle(element, true);\n const {width, height, top, left} = shape;\n const styles = new Styles(element);\n const {background, border, transition, translate} =\n getComputedStyles(element);\n const droppable = manager.registry.droppables.get(source.id);\n const clone = feedback === 'clone';\n const placeholder =\n feedback !== 'move'\n ? createPlaceholder(element, clone, {\n [PLACEHOLDER_ATTRIBUTE]: '',\n })\n : null;\n const isKeyboardOperation = untracked(() =>\n isKeyboardEvent(manager.dragOperation.activatorEvent)\n );\n\n if (translate !== 'none') {\n const parsedTranslate = parseTranslate(translate);\n\n if (parsedTranslate) {\n initialTranslate = parsedTranslate;\n }\n }\n\n if (!initialCoordinates) {\n initialCoordinates = {\n x: left,\n y: top,\n };\n }\n\n if (!transformOrigin) {\n const currentPosition = untracked(() => position.current);\n transformOrigin = {\n x: (currentPosition.x - left) / width,\n y: (currentPosition.y - top) / height,\n };\n }\n\n const delta = {\n x: initialCoordinates.x - left,\n y: initialCoordinates.y - top,\n };\n const projected = {\n top: top + delta.y,\n left: left + delta.x,\n };\n\n element.setAttribute(ATTRIBUTE, 'true');\n styles.set(\n {\n width: width,\n height: height,\n top: projected.top,\n left: projected.left,\n background,\n border,\n translate: currentTransform\n ? `${currentTransform.x}px ${currentTransform.y}px 0`\n : '',\n },\n CSS_PREFIX\n );\n\n if (placeholder) element.insertAdjacentElement('afterend', placeholder);\n\n if (supportsPopover(element)) {\n if (!element.hasAttribute('popover')) {\n element.setAttribute('popover', '');\n }\n showPopover(element);\n }\n\n const actual = new DOMRectangle(element, true);\n const offset = {\n top: projected.top - actual.top,\n left: projected.left - actual.left,\n };\n\n if (offset.left > 0.01 || offset.top > 0.01) {\n styles.set(\n {\n top: projected.top + offset.top,\n left: projected.left + offset.left,\n },\n CSS_PREFIX\n );\n } else {\n // Ignore sub-pixel offsets\n offset.left = 0;\n offset.top = 0;\n }\n\n const resizeObserver = new ResizeObserver(() => {\n if (!placeholder) return;\n\n const placeholderShape = new DOMRectangle(placeholder, true);\n const origin = transformOrigin ?? {x: 1, y: 1};\n const dX = (width - placeholderShape.width) * origin.x + delta.x;\n const dY = (height - placeholderShape.height) * origin.y + delta.y;\n\n styles.set(\n {\n width: placeholderShape.width,\n height: placeholderShape.height,\n top: top + dY + offset.top,\n left: left + dX + offset.left,\n },\n CSS_PREFIX\n );\n\n /* Table cells need to have their width set explicitly because the feedback element is position fixed */\n if (\n element instanceof HTMLTableRowElement &&\n placeholder instanceof HTMLTableRowElement\n ) {\n const cells = Array.from(element.cells);\n const placeholderCells = Array.from(placeholder.cells);\n\n for (const [index, cell] of cells.entries()) {\n const placeholderCell = placeholderCells[index];\n\n cell.style.width = `${placeholderCell.offsetWidth}px`;\n }\n }\n\n manager.dragOperation.shape = new DOMRectangle(element);\n });\n\n if (droppable && placeholder) {\n /*\n * If there is a droppable with the same id as the draggable source\n * set the placeholder as the droppable's placeholder, which takes\n * precedence over the dorppable's `element` property when computing\n * its shape.\n */\n droppable.placeholder = placeholder;\n untracked(droppable.refreshShape);\n }\n\n /* Initialize drag operation shape */\n dragOperation.shape = new DOMRectangle(element);\n\n let elementMutationObserver: MutationObserver | undefined;\n let documentMutationObserver: MutationObserver | undefined;\n\n if (placeholder) {\n resizeObserver.observe(placeholder);\n\n elementMutationObserver = new MutationObserver(() => {\n for (const attribute of Array.from(element.attributes)) {\n if (\n attribute.name.startsWith('aria-') ||\n IGNORED_ATTRIBUTES.includes(attribute.name)\n ) {\n continue;\n }\n\n if (attribute.name === 'style') {\n if (supportsStyle(element) && supportsStyle(placeholder)) {\n placeholder.setAttribute('style', clone ? '' : 'opacity: 0;');\n placeholder.style.setProperty('transition', 'none');\n\n for (const key of Object.values(element.style)) {\n if (\n key.startsWith(CSS_PREFIX) ||\n IGNORED_STYLES.includes(key)\n ) {\n continue;\n }\n\n placeholder.style.setProperty(\n key,\n element.style.getPropertyValue(key)\n );\n }\n }\n continue;\n }\n\n placeholder.setAttribute(attribute.name, attribute.value);\n }\n\n if (clone) {\n placeholder.innerHTML = element.innerHTML;\n }\n });\n\n elementMutationObserver.observe(element, {\n attributes: true,\n subtree: true,\n });\n\n documentMutationObserver = new MutationObserver((entries) => {\n for (const entry of entries) {\n if (Array.from(entry.addedNodes).includes(element)) {\n /* Update the position of the placeholder when the source element is moved */\n element.insertAdjacentElement('afterend', placeholder);\n\n /*\n * Any update in DOM order that affects the source element hides the popover\n * so we need to force the source element to be promoted to the top layer again\n */\n showPopover(element);\n return;\n }\n }\n });\n\n /* Observe mutations on the element's owner document body */\n documentMutationObserver.observe(element.ownerDocument.body, {\n childList: true,\n subtree: true,\n });\n }\n\n const cleanupEffect = effect(function updateTransform() {\n const {transform, status} = dragOperation;\n\n if (!transform.x && !transform.y && !moved) {\n return;\n }\n\n if (!moved) {\n moved = true;\n }\n\n if (status.dragging) {\n const translateTransition = isKeyboardOperation\n ? '250ms ease'\n : '0ms linear';\n\n const x = transform.x + initialTranslate.x;\n const y = transform.y + initialTranslate.y;\n\n const shape = new DOMRectangle(element);\n\n styles.set(\n {\n transition: `${transition}, translate ${translateTransition}`,\n translate: `${x}px ${y}px 0`,\n },\n CSS_PREFIX\n );\n\n dragOperation.shape = shape.translate(\n x - (currentTransform?.x ?? 0),\n y - (currentTransform?.y ?? 0)\n );\n\n currentTransform = {\n x,\n y,\n z: 0,\n scaleX: shape.scale.x,\n scaleY: shape.scale.y,\n };\n }\n });\n\n const id = manager.dragOperation.source?.id;\n\n const restoreFocus = () => {\n if (!isKeyboardOperation || id == null) {\n return;\n }\n\n const draggable = manager.registry.draggables.get(id);\n const element = draggable?.handle ?? draggable?.element;\n\n if (element instanceof HTMLElement) {\n element.focus();\n }\n };\n\n let cleanup: CleanupFunction | undefined = () => {\n elementMutationObserver?.disconnect();\n documentMutationObserver?.disconnect();\n resizeObserver.disconnect();\n\n styles.reset();\n\n if (moved && element.isConnected) {\n placeholder?.replaceWith(element);\n }\n\n placeholder?.remove();\n element.removeAttribute(ATTRIBUTE);\n\n if (supportsPopover(element)) {\n element.removeAttribute('popover');\n }\n\n cleanupEffect();\n dropEffectCleanup();\n\n if (droppable) {\n droppable.placeholder = undefined;\n }\n\n moved = false;\n };\n\n const dropEffectCleanup = effect(function dropAnimation() {\n if (dragOperation.status.dropped) {\n const onComplete = cleanup;\n cleanup = undefined;\n\n const transform = currentTransform;\n\n if (!transform) {\n onComplete?.();\n return;\n }\n\n let projectedTransform: Transform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n };\n\n manager.renderer.rendering.then(() => {\n /* Force the source element to be promoted to the top layer before animating it */\n showPopover(element);\n\n const target = placeholder ?? element;\n\n styles.remove(['translate'], CSS_PREFIX);\n\n const shape = new DOMRectangle(target);\n const currentShape = new DOMRectangle(element, true).translate(\n transform.x,\n transform.y\n );\n const delta = {\n x: currentShape.center.x - shape.center.x,\n y: currentShape.center.y - shape.center.y,\n };\n const final = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n z: 0,\n };\n\n animateTransform({\n element,\n keyframes: {\n translate: [\n `${transform.x}px ${transform.y}px ${transform.z ?? 0}`,\n `${final.x}px ${final.y}px ${final.z}`,\n ],\n },\n options: {\n duration: moved ? 250 : 0,\n easing: 'ease',\n },\n onFinish() {\n requestAnimationFrame(restoreFocus);\n onComplete?.();\n },\n });\n });\n }\n });\n\n return () => cleanup?.();\n });\n\n this.destroy = () => {\n styleInjectionCleanup();\n cleanupEffect();\n style?.remove();\n };\n }\n}\n","import {CorePlugin} from '@dnd-kit/abstract';\nimport {computed, deepEqual, reactive} from '@dnd-kit/state';\nimport {\n canScroll,\n detectScrollIntent,\n getScrollableAncestors,\n ScrollDirection,\n scheduler,\n isKeyboardEvent,\n} from '@dnd-kit/dom/utilities';\nimport {Axes, type Coordinates} from '@dnd-kit/geometry';\n\nimport type {DragDropManager} from '../../manager/index.ts';\n\nimport {ScrollIntentTracker} from './ScrollIntent.ts';\n\nexport class Scroller extends CorePlugin<DragDropManager> {\n public getScrollableElements: () => Set<Element> | null;\n\n private scrollIntentTracker: ScrollIntentTracker;\n\n @reactive\n public autoScrolling = false;\n\n constructor(manager: DragDropManager) {\n super(manager);\n\n let previousElementFromPoint: Element | null = null;\n let previousScrollableElements: Set<Element> | null = null;\n const elementFromPoint = computed(() => {\n const {position} = manager.dragOperation;\n\n if (!position) {\n return null;\n }\n\n const {x, y} = position.current;\n const element = document.elementFromPoint(x, y);\n\n if (element) {\n previousElementFromPoint = element;\n }\n\n return document.elementFromPoint(x, y) ?? previousElementFromPoint;\n });\n const scrollableElements = computed(() => {\n const element = elementFromPoint.value;\n\n if (!element || element === document.documentElement) {\n const {target} = manager.dragOperation;\n const targetElement = target?.element;\n\n if (targetElement) {\n const elements = getScrollableAncestors(targetElement, {\n excludeElement: false,\n });\n previousScrollableElements = elements;\n\n return elements;\n }\n }\n\n if (element) {\n const elements = getScrollableAncestors(element, {\n excludeElement: false,\n });\n\n if (\n this.autoScrolling &&\n previousScrollableElements &&\n elements.size < previousScrollableElements?.size\n ) {\n return previousScrollableElements;\n }\n\n previousScrollableElements = elements;\n\n return elements;\n }\n\n previousScrollableElements = null;\n\n return null;\n }, deepEqual);\n\n this.getScrollableElements = () => {\n return scrollableElements.value;\n };\n\n this.scrollIntentTracker = new ScrollIntentTracker(manager);\n\n this.destroy = manager.monitor.addEventListener('dragmove', (event) => {\n if (\n this.disabled ||\n event.defaultPrevented ||\n !isKeyboardEvent(manager.dragOperation.activatorEvent) ||\n !event.by\n ) {\n return;\n }\n\n // Prevent the move event if we can scroll to the new coordinates\n if (this.scroll({by: event.by})) {\n event.preventDefault();\n }\n });\n }\n\n #meta: {element: Element; by: Coordinates} | undefined;\n\n #scroll = () => {\n if (!this.#meta) {\n return;\n }\n\n const {element, by} = this.#meta;\n\n element.scrollBy(by.x, by.y);\n };\n\n public scroll = (options?: {by: Coordinates}): boolean => {\n if (this.disabled) {\n return false;\n }\n\n const elements = this.getScrollableElements();\n\n if (!elements) {\n this.#meta = undefined;\n return false;\n }\n\n const {position} = this.manager.dragOperation;\n const currentPosition = position?.current;\n\n if (currentPosition) {\n const {by} = options ?? {};\n const intent = by\n ? {\n x: getScrollIntent(by.x),\n y: getScrollIntent(by.y),\n }\n : undefined;\n const scrollIntent = intent\n ? undefined\n : this.scrollIntentTracker.current;\n\n if (scrollIntent?.isLocked()) {\n return false;\n }\n\n for (const scrollableElement of elements) {\n const elementCanScroll = canScroll(scrollableElement, by);\n\n if (elementCanScroll.x || elementCanScroll.y) {\n const {speed, direction} = detectScrollIntent(\n scrollableElement,\n currentPosition,\n intent\n );\n\n if (scrollIntent) {\n for (const axis of Axes) {\n if (scrollIntent[axis].isLocked(direction[axis])) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n }\n\n if (direction.x || direction.y) {\n const {x, y} = by ?? direction;\n const scrollLeftBy = x * speed.x;\n const scrollTopBy = y * speed.y;\n\n if (scrollLeftBy || scrollTopBy) {\n const previousScrollBy = this.#meta?.by;\n\n if (this.autoScrolling && previousScrollBy) {\n const scrollIntentMismatch =\n (previousScrollBy.x && !scrollLeftBy) ||\n (previousScrollBy.y && !scrollTopBy);\n\n if (scrollIntentMismatch) continue;\n }\n\n this.#meta = {\n element: scrollableElement,\n by: {\n x: scrollLeftBy,\n y: scrollTopBy,\n },\n };\n\n scheduler.schedule(this.#scroll);\n\n return true;\n }\n }\n }\n }\n }\n\n this.#meta = undefined;\n return false;\n };\n}\n\nfunction getScrollIntent(value: number) {\n if (value > 0) {\n return ScrollDirection.Forward;\n }\n\n if (value < 0) {\n return ScrollDirection.Reverse;\n }\n\n return ScrollDirection.Idle;\n}\n","import {batch, effect, signal, type Signal} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {Axes} from '@dnd-kit/geometry';\nimport type {Coordinates} from '@dnd-kit/geometry';\nimport {ScrollDirection} from '@dnd-kit/dom/utilities';\n\nimport type {DragDropManager} from '../../manager/index.ts';\n\nimport {ScrollLock} from './ScrollLock.ts';\n\nconst DIRECTIONS = [ScrollDirection.Forward, ScrollDirection.Reverse];\n\nclass ScrollIntent {\n public x = new ScrollLock();\n public y = new ScrollLock();\n\n public isLocked(): boolean {\n return this.x.isLocked() && this.y.isLocked();\n }\n}\n\nexport class ScrollIntentTracker extends Plugin<DragDropManager> {\n private signal: Signal<ScrollIntent | null>;\n\n constructor(manager: DragDropManager) {\n super(manager);\n\n const scrollIntent = signal<ScrollIntent>(new ScrollIntent());\n let previousDelta: Coordinates | null = null;\n\n this.signal = scrollIntent;\n\n effect(() => {\n const {status} = manager.dragOperation;\n\n if (!status.initialized) {\n previousDelta = null;\n scrollIntent.value = new ScrollIntent();\n return;\n }\n\n const {delta} = manager.dragOperation.position;\n\n if (previousDelta) {\n const directions = {\n x: getDirection(delta.x, previousDelta.x),\n y: getDirection(delta.y, previousDelta.y),\n };\n\n const intent = scrollIntent.peek();\n\n batch(() => {\n for (const axis of Axes) {\n for (const direction of DIRECTIONS) {\n if (directions[axis] === direction) {\n intent[axis].unlock(direction);\n }\n }\n }\n\n scrollIntent.value = intent;\n });\n }\n\n previousDelta = delta;\n });\n }\n\n get current(): ScrollIntent | null {\n return this.signal.peek();\n }\n}\n\nfunction getDirection(a: number, b: number): ScrollDirection {\n return Math.sign(a - b);\n}\n","import {reactive} from '@dnd-kit/state';\nimport {ScrollDirection as Direction} from '@dnd-kit/dom/utilities';\n\nconst LOCKED = true;\nconst UNLOCKED = false;\n\nexport class ScrollLock {\n @reactive private [Direction.Forward] = LOCKED;\n @reactive private [Direction.Reverse] = LOCKED;\n\n public isLocked(direction?: Direction): boolean {\n if (direction === Direction.Idle) {\n return false;\n }\n\n if (direction == null) {\n return (\n this[Direction.Forward] === LOCKED && this[Direction.Reverse] === LOCKED\n );\n }\n\n return this[direction] === LOCKED;\n }\n\n public unlock(direction: Direction) {\n if (direction === Direction.Idle) {\n return;\n }\n\n this[direction] = UNLOCKED;\n }\n}\n","import {Plugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\nimport type {CleanupFunction} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport {Scroller} from './Scroller.ts';\n\ninterface Options {}\n\nconst AUTOSCROLL_INTERVAL = 10;\n\nexport class AutoScroller extends Plugin<DragDropManager> {\n public destroy: CleanupFunction;\n\n constructor(manager: DragDropManager, _options?: Options) {\n super(manager);\n\n const scroller = manager.registry.plugins.get(Scroller);\n\n if (!scroller) {\n throw new Error('AutoScroller plugin depends on Scroller plugin');\n }\n\n this.destroy = effect(() => {\n if (this.disabled) {\n return;\n }\n\n // We consume the position from the drag operation\n // so that this effect is run when the position changes\n const {position: _, status} = manager.dragOperation;\n\n if (status.dragging) {\n const canScroll = scroller.scroll();\n\n if (canScroll) {\n scroller.autoScrolling = true;\n const interval = setInterval(scroller.scroll, AUTOSCROLL_INTERVAL);\n\n return () => {\n clearInterval(interval);\n };\n } else {\n scroller.autoScrolling = false;\n }\n }\n });\n }\n}\n","import {DragOperationStatus, CorePlugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../../manager/index.ts';\n\nconst listenerOptions: AddEventListenerOptions = {\n capture: true,\n passive: true,\n};\n\nexport class ScrollListener extends CorePlugin<DragDropManager> {\n #timeout: NodeJS.Timeout | undefined;\n\n constructor(manager: DragDropManager) {\n super(manager);\n\n const {dragOperation} = this.manager;\n\n this.destroy = effect(() => {\n const enabled = dragOperation.status.dragging;\n\n if (enabled) {\n document.addEventListener('scroll', this.handleScroll, listenerOptions);\n\n return () => {\n document.removeEventListener(\n 'scroll',\n this.handleScroll,\n listenerOptions\n );\n };\n }\n });\n }\n\n private handleScroll = () => {\n if (this.#timeout == null) {\n this.#timeout = setTimeout(() => {\n this.manager.collisionObserver.forceUpdate();\n\n this.#timeout = undefined;\n }, 50);\n }\n };\n}\n","import {Plugin} from '@dnd-kit/abstract';\nimport {effect} from '@dnd-kit/state';\n\nimport {DragDropManager} from '../../manager/index.ts';\n\nexport class PreventSelection extends Plugin<DragDropManager> {\n constructor(public manager: DragDropManager) {\n super(manager);\n\n this.destroy = effect(() => {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n const style = document.createElement('style');\n style.innerText = `* { user-select: none !important;, -webkit-user-select: none !important; }`;\n document.head.appendChild(style);\n\n document.addEventListener('selectionchange', removeSelection, {\n capture: true,\n });\n\n return () => {\n document.removeEventListener('selectionchange', removeSelection, {\n capture: true,\n });\n style.remove();\n };\n }\n });\n }\n}\n\nfunction removeSelection() {\n document.getSelection()?.removeAllRanges();\n}\n","import {Sensor} from '@dnd-kit/abstract';\nimport {batch, effect} from '@dnd-kit/state';\nimport type {CleanupFunction} from '@dnd-kit/state';\nimport {\n DOMRectangle,\n getDocument,\n getWindow,\n scrollIntoViewIfNeeded,\n Listeners,\n} from '@dnd-kit/dom/utilities';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Draggable} from '../../entities/index.ts';\nimport {AutoScroller} from '../../plugins/index.ts';\n\nexport type KeyCode = KeyboardEvent['code'];\n\nexport type KeyboardCodes = {\n start: KeyCode[];\n cancel: KeyCode[];\n end: KeyCode[];\n up: KeyCode[];\n down: KeyCode[];\n left: KeyCode[];\n right: KeyCode[];\n};\n\nexport interface KeyboardSensorOptions {\n keyboardCodes?: KeyboardCodes;\n}\n\nconst DEFAULT_KEYBOARD_CODES: KeyboardCodes = {\n start: ['Space', 'Enter'],\n cancel: ['Escape'],\n end: ['Space', 'Enter'],\n up: ['ArrowUp'],\n down: ['ArrowDown'],\n left: ['ArrowLeft'],\n right: ['ArrowRight'],\n};\n\nconst DEFAULT_OFFSET = 10;\n\n/**\n * The KeyboardSensor class is an input sensor that handles Keyboard events.\n */\nexport class KeyboardSensor extends Sensor<\n DragDropManager,\n KeyboardSensorOptions\n> {\n constructor(\n public manager: DragDropManager,\n public options?: KeyboardSensorOptions\n ) {\n super(manager);\n }\n\n #cleanupFunctions: CleanupFunction[] = [];\n\n protected listeners = new Listeners();\n\n public bind(source: Draggable, options = this.options) {\n const unbind = effect(() => {\n const target = source.handle ?? source.element;\n const listener: EventListener = (event: Event) => {\n if (event instanceof KeyboardEvent) {\n this.handleSourceKeyDown(event, source, options);\n }\n };\n\n if (target) {\n target.addEventListener('keydown', listener);\n\n return () => {\n target.removeEventListener('keydown', listener);\n };\n }\n });\n\n return unbind;\n }\n\n protected handleSourceKeyDown = (\n event: KeyboardEvent,\n source: Draggable,\n options: KeyboardSensorOptions | undefined\n ) => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n if (!(event.target instanceof Element)) {\n return;\n }\n\n if (source.disabled || !source.element) {\n return;\n }\n\n const {keyboardCodes = DEFAULT_KEYBOARD_CODES} = options ?? {};\n\n if (!keyboardCodes.start.includes(event.code)) {\n return;\n }\n\n if (!this.manager.dragOperation.status.idle) {\n return;\n }\n\n this.handleStart(event, source, options);\n };\n\n protected handleStart(\n event: KeyboardEvent,\n source: Draggable,\n options: KeyboardSensorOptions | undefined\n ) {\n const {element} = source;\n\n if (!element) {\n throw new Error('Source draggable does not have an associated element');\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n\n scrollIntoViewIfNeeded(element);\n\n const {center} = new DOMRectangle(element);\n\n batch(() => {\n this.manager.actions.setDragSource(source.id);\n this.manager.actions.start({\n event,\n coordinates: {\n x: center.x,\n y: center.y,\n },\n });\n });\n\n this.sideEffects();\n\n const sourceDocument = getDocument(element);\n const sourceWindow = getWindow(sourceDocument);\n\n const listeners = [\n this.listeners.bind(sourceDocument, [\n {\n type: 'keydown',\n listener: (event: KeyboardEvent) =>\n this.handleKeyDown(event, source, options),\n options: {capture: true},\n },\n ]),\n this.listeners.bind(sourceWindow, [\n {type: 'resize', listener: () => this.handleEnd(true)},\n ]),\n ];\n\n this.#cleanupFunctions.push(...listeners);\n }\n\n protected handleKeyDown(\n event: KeyboardEvent,\n _source: Draggable,\n options: KeyboardSensorOptions | undefined\n ) {\n const {keyboardCodes = DEFAULT_KEYBOARD_CODES} = options ?? {};\n\n if (isKeycode(event, [...keyboardCodes.end, ...keyboardCodes.cancel])) {\n event.preventDefault();\n const canceled = isKeycode(event, keyboardCodes.cancel);\n\n this.handleEnd(canceled);\n return;\n }\n\n if (isKeycode(event, keyboardCodes.up)) {\n this.handleMove('up', event);\n } else if (isKeycode(event, keyboardCodes.down)) {\n this.handleMove('down', event);\n }\n\n if (isKeycode(event, keyboardCodes.left)) {\n this.handleMove('left', event);\n } else if (isKeycode(event, keyboardCodes.right)) {\n this.handleMove('right', event);\n }\n }\n\n protected handleEnd(canceled: boolean) {\n this.manager.actions.stop({\n canceled,\n });\n\n this.cleanup();\n }\n\n protected handleMove(\n direction: 'up' | 'down' | 'left' | 'right',\n event: KeyboardEvent\n ) {\n const {shape} = this.manager.dragOperation;\n const factor = event.shiftKey ? 5 : 1;\n let offset = {\n x: 0,\n y: 0,\n };\n\n if (!shape) {\n return;\n }\n\n switch (direction) {\n case 'up':\n offset = {x: 0, y: -DEFAULT_OFFSET * factor};\n break;\n case 'down':\n offset = {x: 0, y: DEFAULT_OFFSET * factor};\n break;\n case 'left':\n offset = {x: -DEFAULT_OFFSET * factor, y: 0};\n break;\n case 'right':\n offset = {x: DEFAULT_OFFSET * factor, y: 0};\n break;\n }\n\n if (offset?.x || offset?.y) {\n event.preventDefault();\n\n this.manager.actions.move({\n by: offset,\n });\n }\n }\n\n private sideEffects() {\n const autoScroller = this.manager.registry.plugins.get(AutoScroller as any);\n\n if (autoScroller?.disabled === false) {\n autoScroller.disable();\n\n this.#cleanupFunctions.push(() => {\n autoScroller.enable();\n });\n }\n }\n\n protected cleanup() {\n this.#cleanupFunctions.forEach((cleanup) => cleanup());\n }\n\n public destroy() {\n this.cleanup();\n // Remove all event listeners\n this.listeners.clear();\n }\n}\n\nfunction isKeycode(event: KeyboardEvent, codes: KeyCode[]) {\n return codes.includes(event.code);\n}\n","import {batch, effect} from '@dnd-kit/state';\nimport type {CleanupFunction} from '@dnd-kit/state';\nimport {Sensor, configurator} from '@dnd-kit/abstract';\nimport {\n exceedsDistance,\n type Distance,\n type Coordinates,\n} from '@dnd-kit/geometry';\nimport {getDocument, Listeners} from '@dnd-kit/dom/utilities';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Draggable} from '../../entities/index.ts';\n\nexport interface DelayConstraint {\n value: number;\n tolerance: Distance;\n}\n\nexport interface DistanceConstraint {\n value: Distance;\n tolerance?: Distance;\n}\n\nexport interface ActivationConstraints {\n distance?: DistanceConstraint;\n delay?: DelayConstraint;\n}\n\nexport interface PointerSensorOptions {\n activationConstraints?:\n | ActivationConstraints\n | ((\n event: PointerEvent,\n source: Draggable\n ) => ActivationConstraints | undefined);\n}\n\n/**\n * The PointerSensor class is an input sensor that handles Pointer events,\n * such as mouse, touch and pen interactions.\n */\nexport class PointerSensor extends Sensor<\n DragDropManager,\n PointerSensorOptions\n> {\n protected listeners = new Listeners();\n\n protected cleanup: Set<CleanupFunction> = new Set();\n\n protected initialCoordinates: Coordinates | undefined;\n\n #clearTimeout: CleanupFunction | undefined;\n\n constructor(\n public manager: DragDropManager,\n public options?: PointerSensorOptions\n ) {\n super(manager);\n }\n\n public bind(source: Draggable, options = this.options) {\n const unbind = effect(() => {\n const target = source.handle ?? source.element;\n const listener: EventListener = (event: Event) => {\n if (event instanceof PointerEvent) {\n this.handlePointerDown(event, source, options);\n }\n };\n\n if (target) {\n patchWindow(target.ownerDocument.defaultView);\n\n target.addEventListener('pointerdown', listener);\n\n return () => {\n target.removeEventListener('pointerdown', listener);\n };\n }\n });\n\n return unbind;\n }\n\n protected handlePointerDown(\n event: PointerEvent,\n source: Draggable,\n options: PointerSensorOptions = {}\n ) {\n if (this.disabled) {\n return;\n }\n\n if (\n !event.isPrimary ||\n event.button !== 0 ||\n !(event.target instanceof Element)\n ) {\n return;\n }\n\n if (source.disabled) {\n return;\n }\n this.initialCoordinates = {\n x: event.clientX,\n y: event.clientY,\n };\n\n const {activationConstraints} = options;\n const constraints =\n typeof activationConstraints === 'function'\n ? activationConstraints(event, source)\n : activationConstraints;\n\n event.stopImmediatePropagation();\n\n if (!constraints?.delay && !constraints?.distance) {\n this.handleStart(source, event);\n } else {\n const {delay} = constraints;\n\n if (delay) {\n const timeout = setTimeout(\n () => this.handleStart(source, event),\n delay.value\n );\n\n this.#clearTimeout = () => {\n clearTimeout(timeout);\n this.#clearTimeout = undefined;\n };\n }\n }\n\n const ownerDocument = getDocument(event.target);\n\n const unbindListeners = this.listeners.bind(ownerDocument, [\n {\n type: 'pointermove',\n listener: (event: PointerEvent) =>\n this.handlePointerMove(event, source, options),\n },\n {\n type: 'pointerup',\n listener: this.handlePointerUp.bind(this),\n },\n {\n // Prevent scrolling on touch devices\n type: 'touchmove',\n listener: preventDefault,\n options: {\n passive: false,\n },\n },\n {\n // Cancel activation if there is a competing Drag and Drop interaction\n type: 'dragstart',\n listener: this.handleCancel.bind(this),\n },\n {\n type: 'keydown',\n listener: this.handleKeyDown.bind(this),\n },\n ]);\n\n const cleanup = () => {\n unbindListeners();\n\n this.#clearTimeout?.();\n this.initialCoordinates = undefined;\n this.cleanup.delete(cleanup);\n };\n\n this.cleanup.add(cleanup);\n }\n\n protected handlePointerMove(\n event: PointerEvent,\n source: Draggable,\n options: PointerSensorOptions\n ) {\n const coordinates = {\n x: event.clientX,\n y: event.clientY,\n };\n\n if (this.manager.dragOperation.status.dragging) {\n event.preventDefault();\n event.stopPropagation();\n\n this.manager.actions.move({to: coordinates});\n return;\n }\n\n if (!this.initialCoordinates) {\n return;\n }\n\n const delta = {\n x: coordinates.x - this.initialCoordinates.x,\n y: coordinates.y - this.initialCoordinates.y,\n };\n const {activationConstraints} = options;\n const constraints =\n typeof activationConstraints === 'function'\n ? activationConstraints(event, source)\n : activationConstraints;\n const {distance, delay} = constraints ?? {};\n\n if (distance) {\n if (\n distance.tolerance != null &&\n exceedsDistance(delta, distance.tolerance)\n ) {\n return this.handleCancel();\n }\n if (exceedsDistance(delta, distance.value)) {\n return this.handleStart(source, event);\n }\n }\n\n if (delay) {\n if (exceedsDistance(delta, delay.tolerance)) {\n return this.handleCancel();\n }\n }\n }\n\n private handlePointerUp(event: PointerEvent) {\n // Prevent the default behaviour of the event\n event.preventDefault();\n event.stopPropagation();\n\n // End the drag and drop operation\n const {status} = this.manager.dragOperation;\n\n if (!status.idle) {\n const canceled = !status.initialized;\n this.manager.actions.stop({canceled});\n }\n\n // Remove the pointer move and up event listeners\n this.cleanup.forEach((cleanup) => cleanup());\n }\n\n protected handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.handleCancel();\n }\n }\n\n protected handleStart(source: Draggable, event: PointerEvent) {\n const {manager, initialCoordinates} = this;\n\n this.#clearTimeout?.();\n\n if (!initialCoordinates || manager.dragOperation.status.initialized) {\n return;\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n event.preventDefault();\n\n batch(() => {\n manager.actions.setDragSource(source.id);\n manager.actions.start({coordinates: initialCoordinates, event});\n });\n }\n\n protected handleCancel() {\n const {dragOperation} = this.manager;\n\n if (dragOperation.status.initialized) {\n this.manager.actions.stop({canceled: true});\n }\n\n // Remove the pointer move and up event listeners\n this.cleanup.forEach((cleanup) => cleanup());\n }\n\n public destroy() {\n // Remove all event listeners\n this.listeners.clear();\n }\n\n static configure = configurator(PointerSensor);\n}\n\nfunction preventDefault(event: Event) {\n event.preventDefault();\n}\n\nfunction noop() {}\n\nconst windows = new WeakSet<Window>();\n\nfunction patchWindow(window: Window | null) {\n if (!window || windows.has(window)) {\n return;\n }\n\n window.addEventListener('touchmove', noop, {\n capture: false,\n passive: false,\n });\n windows.add(window);\n}\n","import {\n Draggable as AbstractDraggable,\n Sensor,\n descriptor,\n} from '@dnd-kit/abstract';\nimport type {\n Data,\n DraggableInput,\n DragDropManager as AbstractDragDropManager,\n Modifiers,\n} from '@dnd-kit/abstract';\nimport {reactive} from '@dnd-kit/state';\n\nimport type {DragDropManager} from '../../manager/index.ts';\nimport type {Sensors} from '../../sensors/index.ts';\n\nexport type FeedbackType = 'default' | 'move' | 'clone' | 'none';\n\nexport interface Input<T extends Data = Data> extends DraggableInput<T> {\n handle?: Element;\n element?: Element;\n feedback?: FeedbackType;\n sensors?: Sensors;\n modifiers?: Modifiers<DragDropManager>;\n}\n\nexport class Draggable<T extends Data = Data> extends AbstractDraggable<T> {\n @reactive\n public handle: Element | undefined;\n\n @reactive\n public element: Element | undefined;\n\n @reactive\n public feedback: FeedbackType;\n\n constructor(\n {\n element,\n effects = () => [],\n handle,\n feedback = 'default',\n ...input\n }: Input<T>,\n public manager: AbstractDragDropManager<any, any>\n ) {\n super(\n {\n effects: () => [\n ...effects(),\n () => {\n const {manager} = this;\n const sensors = this.sensors?.map(descriptor) ?? [\n ...manager.sensors,\n ];\n const unbindFunctions = sensors.map((entry) => {\n const sensorInstance =\n entry instanceof Sensor\n ? entry\n : manager.registry.register(entry.plugin);\n const options =\n entry instanceof Sensor ? undefined : entry.options;\n\n const unbind = sensorInstance.bind(this, options);\n return unbind;\n });\n\n return function cleanup() {\n unbindFunctions.forEach((unbind) => unbind());\n };\n },\n ],\n ...input,\n },\n manager\n );\n\n this.element = element;\n this.handle = handle;\n this.feedback = feedback;\n }\n}\n","import {Droppable as AbstractDroppable} from '@dnd-kit/abstract';\nimport type {\n Data,\n DroppableInput as AbstractDroppableInput,\n DragDropManager as AbstractDragDropManager,\n} from '@dnd-kit/abstract';\nimport {defaultCollisionDetection} from '@dnd-kit/collision';\nimport type {CollisionDetector} from '@dnd-kit/collision';\nimport {Signal, reactive, signal, untracked} from '@dnd-kit/state';\nimport type {Shape} from '@dnd-kit/geometry';\nimport {\n DOMRectangle,\n getDocument,\n scheduler,\n getFirstScrollableAncestor,\n} from '@dnd-kit/dom/utilities';\n\ntype OptionalInput = 'collisionDetector';\n\nexport interface Input<T extends Data = Data>\n extends Omit<AbstractDroppableInput<T>, OptionalInput> {\n collisionDetector?: CollisionDetector;\n element?: Element;\n}\n\nexport class Droppable<T extends Data = Data> extends AbstractDroppable<T> {\n constructor(\n {element, effects = () => [], ...input}: Input<T>,\n public manager: AbstractDragDropManager<any, any>\n ) {\n const {collisionDetector = defaultCollisionDetection} = input;\n\n super(\n {\n ...input,\n collisionDetector,\n effects: () => [\n ...effects(),\n () => {\n const {element, manager} = this;\n const {dragOperation} = manager;\n\n if (element && dragOperation.status.initialized) {\n const scrollableAncestor = getFirstScrollableAncestor(element);\n const doc = getDocument(element);\n const root =\n scrollableAncestor === doc.scrollingElement\n ? doc\n : scrollableAncestor;\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n const [entry] = entries.slice(-1);\n const {width, height} = entry.boundingClientRect;\n\n if (!width && !height) {\n return;\n }\n\n this.visible = entry.isIntersecting;\n },\n {\n root: root ?? doc,\n rootMargin: '40%',\n }\n );\n\n const mutationObserver = new MutationObserver(() =>\n scheduler.schedule(this.refreshShape)\n );\n\n const resizeObserver = new ResizeObserver(() =>\n scheduler.schedule(this.refreshShape)\n );\n\n if (element.parentElement) {\n mutationObserver.observe(element.parentElement, {\n childList: true,\n });\n }\n\n resizeObserver.observe(element);\n intersectionObserver.observe(element);\n\n return () => {\n this.shape = undefined;\n this.visible = undefined;\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n intersectionObserver.disconnect();\n };\n }\n },\n () => {\n const {manager} = this;\n const {dragOperation} = manager;\n const {status} = dragOperation;\n const source = untracked(() => dragOperation.source);\n\n if (status.initialized) {\n if (source?.type != null && !this.accepts(source)) {\n return;\n }\n\n scheduler.schedule(this.refreshShape);\n }\n },\n () => {\n const {manager} = this;\n\n if (manager.dragOperation.status.initialized) {\n return () => {\n this.shape = undefined;\n };\n }\n },\n ],\n },\n manager\n );\n\n this.internal = {\n element: signal(element),\n };\n this.refreshShape = this.refreshShape.bind(this);\n\n /*\n * If a droppable target mounts during a drag operation, assume it is visible\n * so that we can update its shape immediately.\n */\n if (manager.dragOperation.status.initialized) {\n this.visible = true;\n }\n }\n\n @reactive\n visible: Boolean | undefined;\n\n @reactive\n public placeholder: Element | undefined;\n\n public set element(value: Element | undefined) {\n this.internal.element.value = value;\n }\n\n public get element() {\n return this.placeholder ?? this.internal?.element.value;\n }\n\n public refreshShape(ignoreTransform?: boolean): Shape | undefined {\n const {element, shape} = this;\n\n if (!element || this.visible === false) {\n this.shape = undefined;\n return undefined;\n }\n\n const updatedShape = new DOMRectangle(element, ignoreTransform);\n\n if (updatedShape && shape?.equals(updatedShape)) {\n return shape;\n }\n\n this.shape = updatedShape;\n\n return updatedShape;\n }\n\n internal: {\n element: Signal<Element | undefined>;\n };\n}\n"]}
package/index.js CHANGED
@@ -1228,11 +1228,12 @@ var Draggable = class extends Draggable$1 {
1228
1228
  effects: () => [
1229
1229
  ...effects2(),
1230
1230
  () => {
1231
+ const { manager: manager2 } = this;
1231
1232
  const sensors = this.sensors?.map(descriptor) ?? [
1232
- ...manager.sensors
1233
+ ...manager2.sensors
1233
1234
  ];
1234
1235
  const unbindFunctions = sensors.map((entry) => {
1235
- const sensorInstance = entry instanceof Sensor ? entry : manager.registry.register(entry.plugin);
1236
+ const sensorInstance = entry instanceof Sensor ? entry : manager2.registry.register(entry.plugin);
1236
1237
  const options = entry instanceof Sensor ? void 0 : entry.options;
1237
1238
  const unbind = sensorInstance.bind(this, options);
1238
1239
  return unbind;
@@ -1271,8 +1272,8 @@ var Droppable = class extends Droppable$1 {
1271
1272
  effects: () => [
1272
1273
  ...effects2(),
1273
1274
  () => {
1274
- const { element: element2 } = this;
1275
- const { dragOperation } = manager;
1275
+ const { element: element2, manager: manager2 } = this;
1276
+ const { dragOperation } = manager2;
1276
1277
  if (element2 && dragOperation.status.initialized) {
1277
1278
  const scrollableAncestor = getFirstScrollableAncestor(element2);
1278
1279
  const doc = getDocument(element2);
@@ -1314,7 +1315,8 @@ var Droppable = class extends Droppable$1 {
1314
1315
  }
1315
1316
  },
1316
1317
  () => {
1317
- const { dragOperation } = manager;
1318
+ const { manager: manager2 } = this;
1319
+ const { dragOperation } = manager2;
1318
1320
  const { status } = dragOperation;
1319
1321
  const source = untracked(() => dragOperation.source);
1320
1322
  if (status.initialized) {
@@ -1325,7 +1327,8 @@ var Droppable = class extends Droppable$1 {
1325
1327
  }
1326
1328
  },
1327
1329
  () => {
1328
- if (manager.dragOperation.status.initialized) {
1330
+ const { manager: manager2 } = this;
1331
+ if (manager2.dragOperation.status.initialized) {
1329
1332
  return () => {
1330
1333
  this.shape = void 0;
1331
1334
  };