/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { type EmbeddedData, type ModelData, DataElement, RelationalCSVData, type Database, type RelationalCSVDataTable, DataElementReference, ExternalFormatData, ModelStoreData, ModelEmbeddedData, type RelationElement, RelationElementsData } from '@finos/legend-graph';
import type { EditorStore } from '../../../EditorStore.js';
export declare const createEmbeddedData: (type: string, editorStore: EditorStore) => EmbeddedData;
export declare abstract class EmbeddedDataState {
    editorStore: EditorStore;
    embeddedData: EmbeddedData;
    constructor(editorStore: EditorStore, embeddedData: EmbeddedData);
    abstract label(): string;
}
export declare class ExternalFormatDataState extends EmbeddedDataState {
    embeddedData: ExternalFormatData;
    canEditContentType: boolean;
    constructor(editorStore: EditorStore, embeddedData: ExternalFormatData);
    label(): string;
    setCanEditoContentType(val: boolean): void;
    get supportsFormatting(): boolean;
    format(): void;
}
export declare abstract class ModelDataState {
    readonly uuid: string;
    readonly modelStoreDataState: ModelStoreDataState;
    modelData: ModelData;
    constructor(modelData: ModelData, modelStoreDataState: ModelStoreDataState);
}
export declare class ModelEmbeddedDataState extends ModelDataState {
    modelData: ModelEmbeddedData;
    embeddedDataState: EmbeddedDataState;
    constructor(modelData: ModelEmbeddedData, modelStoreDataState: ModelStoreDataState);
}
export declare class UnsupportedModelDataState extends ModelDataState {
}
export declare class ModelStoreDataState extends EmbeddedDataState {
    embeddedData: ModelStoreData;
    modelDataStates: ModelDataState[];
    hideClass: boolean;
    constructor(editorStore: EditorStore, embeddedData: ModelStoreData, hideClass?: boolean);
    label(): string;
    buildStates(): ModelDataState[];
}
export declare class RelationElementState {
    relationElement: RelationElement;
    supportsColumnEditing: boolean;
    constructor(relationElement: RelationElement, options?: {
        supportsColumnEditing?: boolean;
    });
    addColumn(name: string): void;
    removeColumn(index: number): void;
    updateColumn(index: number, name: string): void;
    addRow(): void;
    removeRow(index: number): void;
    updateRow(rowIndex: number, columnIndex: number, value: string): void;
    getDisplayValue(rowIndex: number, columnIndex: number): string;
    clearAllData(): void;
    exportJSON(): string;
    exportSQL(): string;
    exportCSV(): string;
    importCSV(csvContent: string): void;
}
export interface RelationElementAccessorOption {
    label: string;
    value: string;
    columns: string[];
}
export declare class RelationElementsDataState extends EmbeddedDataState {
    embeddedData: RelationElementsData;
    showImportCSVModal: boolean;
    showNewRelationElementModal: boolean;
    activeRelationElement: RelationElementState | undefined;
    relationElementStates: RelationElementState[];
    accessorOptions: RelationElementAccessorOption[] | undefined;
    accessorTypeLabel: string | undefined;
    refreshAccessorOptions: (() => Promise<void>) | undefined;
    constructor(editorStore: EditorStore, embeddedData: RelationElementsData);
    label(): string;
    setActiveRelationElement(val: RelationElementState | undefined): void;
    addRelationElement(relationElement: RelationElement): void;
    deleteRelationElement(relationElementState: RelationElementState): void;
    setShowImportCSVModal(show: boolean): void;
    setShowNewRelationElementModal(show: boolean): void;
    setAccessorOptions(options: RelationElementAccessorOption[] | undefined, typeLabel: string | undefined): void;
    setRefreshAccessorOptions(fn: (() => Promise<void>) | undefined): void;
    get availableAccessorOptions(): RelationElementAccessorOption[];
}
export declare class RelationalCSVDataTableState {
    readonly editorStore: EditorStore;
    table: RelationalCSVDataTable;
    constructor(table: RelationalCSVDataTable, editorStore: EditorStore);
    updateTableValues(val: string): void;
}
export declare class RelationalCSVDataState extends EmbeddedDataState {
    embeddedData: RelationalCSVData;
    selectedTable: RelationalCSVDataTableState | undefined;
    showImportCSVModal: boolean;
    database: Database | undefined;
    showTableIdentifierModal: boolean;
    tableToEdit: RelationalCSVDataTable | undefined;
    constructor(editorStore: EditorStore, embeddedData: RelationalCSVData);
    setShowImportCsvModal(val: boolean): void;
    setDatabase(val: Database | undefined): void;
    openIdentifierModal(renameTable?: RelationalCSVDataTable | undefined): void;
    closeCSVModal(): void;
    closeModal(): void;
    importCSV(val: string): void;
    resetSelectedTable(): void;
    deleteTable(val: RelationalCSVDataTable): void;
    changeSelectedTable(val: RelationalCSVDataTable): void;
    label(): string;
}
export interface EmbeddedDataStateOption {
    hideSource?: boolean;
}
export declare class UnsupportedDataState extends EmbeddedDataState {
    label(): string;
}
export declare class DataElementReferenceState extends EmbeddedDataState {
    embeddedData: DataElementReference;
    embeddedDataValueState: EmbeddedDataState;
    options?: EmbeddedDataStateOption | undefined;
    constructor(editorStore: EditorStore, embeddedData: DataElementReference, options?: EmbeddedDataStateOption);
    label(): string;
    setDataElement(dataElement: DataElement): void;
    buildValueState(options?: EmbeddedDataStateOption): EmbeddedDataState;
}
export declare function buildEmbeddedDataEditorState(_embeddedData: EmbeddedData, editorStore: EditorStore, options?: EmbeddedDataStateOption): EmbeddedDataState;
//# sourceMappingURL=EmbeddedDataState.d.ts.map