///
import Ember from 'ember';
import EmberObject from '@ember/object';
/**
* Keeps track of the order of the steps in the step manager, as well as
* the current step.
*
* @class StateMachine
* @private
* @hide
*/
export default abstract class StateMachine extends EmberObject {
/**
* @property {A} stepTransitions
* @private
*/
stepTransitions: Ember.MutableArray;
/**
* @property {string} firstStep
* @private
*/
firstStep: string;
/**
* @property {string} lastStep
* @private
*/
lastStep: string;
/**
* @property {string} currentStep
* @public
*/
currentStep: string;
stepsToRemove: Ember.NativeArray;
stepsToAdd: Ember.NativeArray;
constructor(initialStep: string);
addStep(this: StateMachine, name: string): void;
removeStep(this: StateMachine, name: string): void;
updateFirstCurrentAndLastSteps(this: StateMachine): void;
abstract pickNext(currentStep?: string): string;
abstract pickPrevious(currentStep?: string): string;
activate(name: string): void;
/**
* @property {number} length
* @public
*/
length: number;
}