import { FacileDanmaku, FacileOptions } from './facile';
import type { Position, DanmakuType, DanmakuPlugin } from '../types';
export interface FlexibleOptions<T> extends FacileOptions<T> {
  position?: Position;
}
export declare class FlexibleDanmaku<T> extends FacileDanmaku<T> {
  _options: FlexibleOptions<T>;
  position: Position;
  type: DanmakuType;
  constructor(_options: FlexibleOptions<T>);
  /**
   * @internal
   */
  _getSpeed(): number;
  /**
   * @internal
   */
  _setOff(): Promise<void>;
  /**
   * @internal
   */
  _setStartStatus(): void;
  /**
   * @internal
   */
  _updatePosition(p: Partial<Position>): void;
  /**
   * @internal
   */
  _getMovePercent(useInitData?: boolean): number;
  /**
   * @internal
   */
  _getMoveDistance(): number;
  /**
   * @internal
   */
  _format(): void;
  pause(_flag?: Symbol): void;
  resume(_flag?: Symbol): void;
  remove(pluginName: string): void;
  use(
    plugin: DanmakuPlugin<T> | ((danmaku: this) => DanmakuPlugin<T>),
  ): Partial<
    Pick<
      import('hooks-plugin').Plugin<
        {
          hide: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>],
            null,
            void
          >;
          show: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>],
            null,
            void
          >;
          pause: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>],
            null,
            void
          >;
          resume: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>],
            null,
            void
          >;
          beforeMove: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>],
            null,
            void
          >;
          moved: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>],
            null,
            void
          >;
          createNode: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>, HTMLElement],
            null,
            void
          >;
          appendNode: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>, HTMLElement],
            null,
            void
          >;
          removeNode: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>, HTMLElement],
            null,
            void
          >;
          beforeDestroy: import('hooks-plugin').AsyncHook<
            [import('../types').Danmaku<T>, unknown],
            null
          >;
          destroyed: import('hooks-plugin').SyncHook<
            [import('../types').Danmaku<T>, unknown],
            null,
            void
          >;
        },
        Record<string, unknown>
      >,
      'name' | 'version'
    >
  > & {
    hide?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>],
          null,
          void
        >
      | undefined;
    show?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>],
          null,
          void
        >
      | undefined;
    pause?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>],
          null,
          void
        >
      | undefined;
    resume?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>],
          null,
          void
        >
      | undefined;
    beforeMove?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>],
          null,
          void
        >
      | undefined;
    moved?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>],
          null,
          void
        >
      | undefined;
    createNode?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>, HTMLElement],
          null,
          void
        >
      | undefined;
    appendNode?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>, HTMLElement],
          null,
          void
        >
      | undefined;
    removeNode?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>, HTMLElement],
          null,
          void
        >
      | undefined;
    beforeDestroy?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>, unknown],
          null,
          import('hooks-plugin').CallbackReturnType<void>
        >
      | undefined;
    destroyed?:
      | import('hooks-plugin').Callback<
          [import('../types').Danmaku<T>, unknown],
          null,
          void
        >
      | undefined;
  } & {
    name: string;
  };
}
