/// <reference path="../../index.d.ts" />
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { Layout } from "../interfaces.js";
import type { DragDetail } from "../../controllers/useSortable.js";

/**
 * @deprecated Use the `calcite-block-group` component instead.
 * @slot  - A slot for adding sortable items.
 */
export abstract class SortableList extends LitElement {
  /** When provided, the method will be called to determine whether the element can move from the list. */
  accessor canPull: (detail: DragDetail) => boolean;
  /** When provided, the method will be called to determine whether the element can be added from another list. */
  accessor canPut: (detail: DragDetail) => boolean;
  /**
   * When `true`, disabled prevents interaction. This state shows items with lower opacity/grayed.
   *
   * @default false
   */
  accessor disabled: boolean;
  /** Specifies which items inside the element should be draggable. */
  accessor dragSelector: string | undefined;
  /**
   * Specifies the list's group.
   *
   * To drag elements from one list into another, both lists must have the same group value.
   */
  accessor group: string | undefined;
  /**
   * Specifies the selector for the handle elements.
   *
   * @default "calcite-handle"
   */
  accessor handleSelector: string;
  /**
   * Indicates the horizontal or vertical orientation of the component.
   *
   * @default "vertical"
   */
  accessor layout: Extract<"horizontal" | "vertical" | "grid", Layout>;
  /**
   * When `true`, content is waiting to be loaded. This state shows a busy indicator.
   *
   * @default false
   */
  accessor loading: boolean;
  /** Fires when the order of the list changes. */
  readonly calciteListOrderChange: import("@arcgis/lumina").TargetedEvent<this, void>;
  readonly "@eventTypes": {
    calciteListOrderChange: SortableList["calciteListOrderChange"]["detail"];
  };
}