import { Effect, Equivalence, Option, Schema as S, Stream } from 'effect'; import * as Command from 'foldkit/command'; import { type Attribute, type HtmlBuilder } from 'foldkit/html'; import * as Subscription from 'foldkit/subscription'; import * as Update from 'foldkit/update'; declare const DropTarget: S.Struct<{ readonly containerId: S.String; readonly index: S.Number; }>; /** Schema for the drag-and-drop component's state, tracking its unique ID, orientation, and current drag phase. */ export declare const Model: S.Struct<{ readonly id: S.String; readonly orientation: S.Literals; readonly activationThreshold: S.Number; readonly dragState: S.Union, import("foldkit/schema").CallableTaggedStruct<"Pending", { itemId: S.String; containerId: S.String; index: S.Number; origin: S.Struct<{ readonly screenX: S.Number; readonly screenY: S.Number; }>; }>, import("foldkit/schema").CallableTaggedStruct<"Dragging", { itemId: S.String; sourceContainerId: S.String; sourceIndex: S.Number; origin: S.Struct<{ readonly screenX: S.Number; readonly screenY: S.Number; }>; current: S.Struct<{ readonly clientX: S.Number; readonly clientY: S.Number; }>; maybeDropTarget: S.Option>; }>, import("foldkit/schema").CallableTaggedStruct<"KeyboardDragging", { itemId: S.String; sourceContainerId: S.String; sourceIndex: S.Number; targetContainerId: S.String; targetIndex: S.Number; }>]>; }>; export type Model = typeof Model.Type; /** Union of all messages the drag-and-drop component can produce. */ export declare const Message: import("foldkit/message").MessageUnion<{ readonly PressedDraggable: { readonly itemId: S.String; readonly containerId: S.String; readonly index: S.Number; readonly screenX: S.Number; readonly screenY: S.Number; }; readonly MovedPointer: { readonly screenX: S.Number; readonly screenY: S.Number; readonly clientX: S.Number; readonly clientY: S.Number; readonly maybeDropTarget: S.Option>; }; readonly ReleasedPointer: {}; readonly CancelledDrag: {}; readonly ActivatedKeyboardDrag: { readonly itemId: S.String; readonly containerId: S.String; readonly index: S.Number; }; readonly CompletedResolveKeyboardMove: { readonly targetContainerId: S.String; readonly targetIndex: S.Number; }; readonly ConfirmedKeyboardDrop: {}; readonly PressedArrowKey: { readonly direction: S.Literals; }; readonly AdvancedAutoScrollFrame: {}; readonly CompletedFocusItem: {}; }>; export type Message = typeof Message.Type; /** Union of all out-messages the drag-and-drop component can emit to its parent. */ export declare const OutMessage: import("foldkit/message").MessageUnion<{ readonly Reordered: { readonly itemId: S.String; readonly fromContainerId: S.String; readonly fromIndex: S.Number; readonly toContainerId: S.String; readonly toIndex: S.Number; }; readonly Cancelled: {}; }>; export type OutMessage = typeof OutMessage.Type; export type InitConfig = Readonly<{ id: string; orientation?: 'Horizontal' | 'Vertical'; activationThreshold?: number; }>; /** Creates an initial drag-and-drop model. Starts in the Idle state with Vertical orientation and 5px activation threshold by default. */ export declare const init: (config: InitConfig) => Model; /** Focuses a draggable item by ID after a keyboard move, drop, or cancel. */ export declare const FocusItem: Command.CommandDefinitionWithArgs<"FocusItem", { itemId: S.String; }, Effect.Effect<{ readonly _tag: "CompletedFocusItem"; }, never, never>>; /** Resolves the next keyboard drag position by querying the DOM for adjacent sortable items and containers. */ export declare const ResolveKeyboardMove: Command.CommandDefinitionWithArgs<"ResolveKeyboardMove", { itemId: S.String; currentContainerId: S.String; currentIndex: S.Number; direction: S.Literals; }, Effect.Effect<{ readonly _tag: "CompletedResolveKeyboardMove"; readonly targetContainerId: string; readonly targetIndex: number; }, never, never>>; /** Processes a drag-and-drop Message and returns the next Model, optional * Commands, and an optional OutMessage for the parent. */ export declare const update: (model: Model, message: Message) => Readonly<{ model: { readonly id: string; readonly orientation: "Horizontal" | "Vertical"; readonly activationThreshold: number; readonly dragState: { readonly _tag: "Idle"; } | { readonly _tag: "Pending"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; } | { readonly _tag: "Dragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; readonly current: { readonly clientX: number; readonly clientY: number; }; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "KeyboardDragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly targetContainerId: string; readonly targetIndex: number; }; }; commands?: Update.Commands<{ readonly _tag: "PressedDraggable"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly screenX: number; readonly screenY: number; } | { readonly _tag: "MovedPointer"; readonly screenX: number; readonly screenY: number; readonly clientX: number; readonly clientY: number; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "ReleasedPointer"; } | { readonly _tag: "CancelledDrag"; } | { readonly _tag: "ActivatedKeyboardDrag"; readonly itemId: string; readonly containerId: string; readonly index: number; } | { readonly _tag: "CompletedResolveKeyboardMove"; readonly targetContainerId: string; readonly targetIndex: number; } | { readonly _tag: "ConfirmedKeyboardDrop"; } | { readonly _tag: "PressedArrowKey"; readonly direction: "Up" | "Down" | "Left" | "Right" | "NextContainer" | "PreviousContainer"; } | { readonly _tag: "AdvancedAutoScrollFrame"; } | { readonly _tag: "CompletedFocusItem"; }, never>; outMessage?: { readonly _tag: "Reordered"; readonly itemId: string; readonly fromContainerId: string; readonly fromIndex: number; readonly toContainerId: string; readonly toIndex: number; } | { readonly _tag: "Cancelled"; }; }>; /** Document-level subscriptions for pointer and keyboard events during drag operations. */ export declare const subscriptions: { readonly documentPointer: Subscription.EntryWithoutKeepAlive<{ readonly id: string; readonly orientation: "Horizontal" | "Vertical"; readonly activationThreshold: number; readonly dragState: { readonly _tag: "Idle"; } | { readonly _tag: "Pending"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; } | { readonly _tag: "Dragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; readonly current: { readonly clientX: number; readonly clientY: number; }; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "KeyboardDragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly targetContainerId: string; readonly targetIndex: number; }; }, { readonly _tag: "PressedDraggable"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly screenX: number; readonly screenY: number; } | { readonly _tag: "MovedPointer"; readonly screenX: number; readonly screenY: number; readonly clientX: number; readonly clientY: number; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "ReleasedPointer"; } | { readonly _tag: "CancelledDrag"; } | { readonly _tag: "ActivatedKeyboardDrag"; readonly itemId: string; readonly containerId: string; readonly index: number; } | { readonly _tag: "CompletedResolveKeyboardMove"; readonly targetContainerId: string; readonly targetIndex: number; } | { readonly _tag: "ConfirmedKeyboardDrop"; } | { readonly _tag: "PressedArrowKey"; readonly direction: "Up" | "Down" | "Left" | "Right" | "NextContainer" | "PreviousContainer"; } | { readonly _tag: "AdvancedAutoScrollFrame"; } | { readonly _tag: "CompletedFocusItem"; }, { readonly dragActivity: "Idle" | "Active"; readonly orientation: "Horizontal" | "Vertical"; }, never> & { readonly __subscription: never; }; readonly documentEscape: Subscription.EntryWithoutKeepAlive<{ readonly id: string; readonly orientation: "Horizontal" | "Vertical"; readonly activationThreshold: number; readonly dragState: { readonly _tag: "Idle"; } | { readonly _tag: "Pending"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; } | { readonly _tag: "Dragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; readonly current: { readonly clientX: number; readonly clientY: number; }; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "KeyboardDragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly targetContainerId: string; readonly targetIndex: number; }; }, { readonly _tag: "PressedDraggable"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly screenX: number; readonly screenY: number; } | { readonly _tag: "MovedPointer"; readonly screenX: number; readonly screenY: number; readonly clientX: number; readonly clientY: number; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "ReleasedPointer"; } | { readonly _tag: "CancelledDrag"; } | { readonly _tag: "ActivatedKeyboardDrag"; readonly itemId: string; readonly containerId: string; readonly index: number; } | { readonly _tag: "CompletedResolveKeyboardMove"; readonly targetContainerId: string; readonly targetIndex: number; } | { readonly _tag: "ConfirmedKeyboardDrop"; } | { readonly _tag: "PressedArrowKey"; readonly direction: "Up" | "Down" | "Left" | "Right" | "NextContainer" | "PreviousContainer"; } | { readonly _tag: "AdvancedAutoScrollFrame"; } | { readonly _tag: "CompletedFocusItem"; }, { readonly dragActivity: "Idle" | "Active"; }, never> & { readonly __subscription: never; }; readonly documentKeyboard: Subscription.EntryWithoutKeepAlive<{ readonly id: string; readonly orientation: "Horizontal" | "Vertical"; readonly activationThreshold: number; readonly dragState: { readonly _tag: "Idle"; } | { readonly _tag: "Pending"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; } | { readonly _tag: "Dragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; readonly current: { readonly clientX: number; readonly clientY: number; }; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "KeyboardDragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly targetContainerId: string; readonly targetIndex: number; }; }, { readonly _tag: "PressedDraggable"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly screenX: number; readonly screenY: number; } | { readonly _tag: "MovedPointer"; readonly screenX: number; readonly screenY: number; readonly clientX: number; readonly clientY: number; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "ReleasedPointer"; } | { readonly _tag: "CancelledDrag"; } | { readonly _tag: "ActivatedKeyboardDrag"; readonly itemId: string; readonly containerId: string; readonly index: number; } | { readonly _tag: "CompletedResolveKeyboardMove"; readonly targetContainerId: string; readonly targetIndex: number; } | { readonly _tag: "ConfirmedKeyboardDrop"; } | { readonly _tag: "PressedArrowKey"; readonly direction: "Up" | "Down" | "Left" | "Right" | "NextContainer" | "PreviousContainer"; } | { readonly _tag: "AdvancedAutoScrollFrame"; } | { readonly _tag: "CompletedFocusItem"; }, { readonly dragActivity: "Idle" | "Active"; }, never> & { readonly __subscription: never; }; readonly autoScroll: { readonly dependenciesSchema: S.Schema<{ readonly isDragging: boolean; readonly clientY: number; }> & { readonly fields: S.Struct.Fields; }; readonly modelToDependencies: (model: { readonly id: string; readonly orientation: "Horizontal" | "Vertical"; readonly activationThreshold: number; readonly dragState: { readonly _tag: "Idle"; } | { readonly _tag: "Pending"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; } | { readonly _tag: "Dragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly origin: { readonly screenX: number; readonly screenY: number; }; readonly current: { readonly clientX: number; readonly clientY: number; }; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "KeyboardDragging"; readonly itemId: string; readonly sourceContainerId: string; readonly sourceIndex: number; readonly targetContainerId: string; readonly targetIndex: number; }; }) => { readonly isDragging: boolean; readonly clientY: number; }; readonly keepAliveEquivalence: Equivalence.Equivalence<{ readonly isDragging: boolean; readonly clientY: number; }>; readonly dependenciesToStream: (dependencies: { readonly isDragging: boolean; readonly clientY: number; }, readDependencies: () => { readonly isDragging: boolean; readonly clientY: number; }) => Stream.Stream<{ readonly _tag: "PressedDraggable"; readonly itemId: string; readonly containerId: string; readonly index: number; readonly screenX: number; readonly screenY: number; } | { readonly _tag: "MovedPointer"; readonly screenX: number; readonly screenY: number; readonly clientX: number; readonly clientY: number; readonly maybeDropTarget: Option.Option<{ readonly containerId: string; readonly index: number; }>; } | { readonly _tag: "ReleasedPointer"; } | { readonly _tag: "CancelledDrag"; } | { readonly _tag: "ActivatedKeyboardDrag"; readonly itemId: string; readonly containerId: string; readonly index: number; } | { readonly _tag: "CompletedResolveKeyboardMove"; readonly targetContainerId: string; readonly targetIndex: number; } | { readonly _tag: "ConfirmedKeyboardDrop"; } | { readonly _tag: "PressedArrowKey"; readonly direction: "Up" | "Down" | "Left" | "Right" | "NextContainer" | "PreviousContainer"; } | { readonly _tag: "AdvancedAutoScrollFrame"; } | { readonly _tag: "CompletedFocusItem"; }, never, never>; } & { readonly __subscription: never; }; }; /** Messages the draggable view helper can dispatch. */ export type DraggableMessage = typeof Message.PressedDraggable.Type | typeof Message.ActivatedKeyboardDrag.Type; /** Configuration for creating draggable attributes with `draggable`. */ export type DraggableConfig = Readonly<{ model: Model; toParentMessage: (message: DraggableMessage) => ParentMessage; itemId: string; containerId: string; index: number; }>; /** Returns attributes the parent attaches to a draggable element. Handles pointer-down, keyboard activation, and ARIA. */ export declare const draggable: (config: DraggableConfig, h: HtmlBuilder) => ReadonlyArray>; /** Returns attributes the parent attaches to a droppable container element. * Handler-free, so the bundle is built with `inertHtml` and spreads into * any Message universe's attribute array. */ export declare const droppable: (containerId: string, label?: string) => ReadonlyArray>; /** Returns attributes the parent attaches to a sortable item element. * Typically combined with `draggable`. Handler-free, so the bundle is built * with `inertHtml` and spreads into any Message universe's attribute * array. */ export declare const sortable: (itemId: string) => ReadonlyArray>; /** Returns positioning styles for the ghost element, or None when not dragging with a pointer. */ export declare const ghostStyle: (model: Model) => Option.Option>; /** Returns true when the component is actively dragging (pointer or keyboard). */ export declare const isDragging: ({ dragState: { _tag } }: Model) => boolean; /** Returns the ID of the item currently being dragged or pending, if any. */ export declare const maybeDraggedItemId: (model: Model) => Option.Option; /** Returns the current drop target, if any. Populated during pointer drag (from collision detection) and keyboard drag (from resolved position). */ export declare const maybeDropTarget: (model: Model) => Option.Option; export {}; //# sourceMappingURL=index.d.ts.map