import { Optional, Resource } from "../../common";
import { APIGaugeLabel, APITrait, GaugeColoring, GaugeDirection, GaugeDivision, GaugeLabel, GaugeRangeType, GaugeType, StatisticType, StoreTrait, TraitFeedbackChoice, TraitModelType } from "./interfaces";
export declare class Trait extends Resource {
    name: string;
    slug: string;
    text: string;
    reportId: string;
    feedbackQuestion: string;
    textHeader: string;
    statisticType: StatisticType;
    feedbackChoices: TraitFeedbackChoice[];
    gaugeLabels: GaugeLabel[];
    gaugeType: GaugeType;
    gaugeRangeType: GaugeRangeType | null;
    gaugeColoring: GaugeColoring | null;
    gaugeDirection: GaugeDirection | null;
    gaugeNumOfDivisions: GaugeDivision | null;
    modelType: TraitModelType;
    disclaimer: string;
    showPercentile: boolean;
    constructor(name: string, slug: string, text: string, reportId: string, feedbackQuestion: string, textHeader: string, statisticType: StatisticType, feedbackChoices: TraitFeedbackChoice[], gaugeLabels: GaugeLabel[], gaugeType: GaugeType, gaugeRangeType: GaugeRangeType | null, gaugeColoring: GaugeColoring | null, gaugeDirection: GaugeDirection | null, gaugeNumOfDivisions: GaugeDivision | null, modelType: TraitModelType, disclaimer: string, showPercentile: boolean);
    /**
     * The name of the trait resource on the API server.
     */
    static get resourceName(): string;
    /**
     * The name of the service containing the trait resource.
     */
    static get serviceName(): string;
    private static feedbackChoiceAPIFactory;
    private static feedbackChoiceSerializeAPI;
    static gaugeLabelAPIFactory(data: APIGaugeLabel): GaugeLabel;
    static gaugeLabelSerializeAPI(data: GaugeLabel): APIGaugeLabel;
    /**
     * Convert the trait into a JSON serializable object for the API server.
     */
    serializeAPI(): Optional<APITrait, "id">;
    /**
     * Deserialize the data from the API server.
     *
     * @param data The trait data from the API server.
     */
    deserializeAPI(data: APITrait): void;
    /**
     * Serialize the trait into a format for storing in the Redux store.
     */
    serializeRedux(): StoreTrait;
    /**
     * Create a trait from the API server data.
     *
     * @param data Data from the api server.
     *
     * @returns The trait object.
     */
    static apiFactory(data: APITrait): Trait;
    /**
     * Create a trait from the Redux store data.
     *
     * @param data Data from the api server.
     *
     * @returns The trait object.
     */
    static reduxFactory(data: StoreTrait): Trait;
}
