import type { FdoDecimal } from '@feedmepos/core/entity';
import type { BindingChange, RecipeBulkEditEntry } from '../helper/bulk-edit-simulation.helper';
import { type FmUnitInputModel } from '@/components/FmUnitInputProps';
export type FilterEntryType = 'ingredient' | 'recipe';
export interface FilterEntryIngredient {
    id: string;
    type: 'ingredient';
    itemId: string;
    amount?: FdoDecimal | null;
    measurementId?: string | null;
}
export interface FilterEntryRecipe {
    id: string;
    type: 'recipe';
    itemId: string;
}
export type FilterEntry = FilterEntryIngredient | FilterEntryRecipe;
export interface FilterRow {
    id: string;
    type: FilterEntryType | null;
    itemId: string | null;
    amountModel: FmUnitInputModel;
}
export declare function makeFilterRow(type?: FilterEntryType | null): FilterRow;
export interface RecipeBulkEditQueryV2 {
    nameSearch?: string;
    filters: FilterEntry[];
}
export declare const useRecipeBulkEditor: import("pinia").StoreDefinition<"recipeBulkEditor", import("pinia")._UnwrapAll<Pick<{
    show: import("vue").Ref<boolean, boolean>;
    currentStep: import("vue").Ref<number, number>;
    query: import("vue").Ref<{
        nameSearch?: string | undefined;
        filters: ({
            id: string;
            type: 'ingredient';
            itemId: string;
            amount?: {
                amount: number;
                precision: number;
            } | null | undefined;
            measurementId?: string | null | undefined;
        } | {
            id: string;
            type: 'recipe';
            itemId: string;
        })[];
    } | null, RecipeBulkEditQueryV2 | {
        nameSearch?: string | undefined;
        filters: ({
            id: string;
            type: 'ingredient';
            itemId: string;
            amount?: {
                amount: number;
                precision: number;
            } | null | undefined;
            measurementId?: string | null | undefined;
        } | {
            id: string;
            type: 'recipe';
            itemId: string;
        })[];
    } | null>;
    excludedRecipeIds: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
    modifications: import("vue").Ref<({
        type: "replace-binding";
        from: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        to: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "remove-binding";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
    } | {
        type: "add-binding";
        binding: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "update-binding-rule";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        rule: Record<string, any> | null;
    } | {
        type: "update-alternatives";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        alternatives: {
            default?: boolean | null | undefined;
            trackingMeasurement?: string | null | undefined;
            priority?: number | null | undefined;
            _id: string;
        }[];
    })[], BindingChange[] | ({
        type: "replace-binding";
        from: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        to: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "remove-binding";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
    } | {
        type: "add-binding";
        binding: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "update-binding-rule";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        rule: Record<string, any> | null;
    } | {
        type: "update-alternatives";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        alternatives: {
            default?: boolean | null | undefined;
            trackingMeasurement?: string | null | undefined;
            priority?: number | null | undefined;
            _id: string;
        }[];
    })[]>;
    entries: import("vue").Ref<Record<string, RecipeBulkEditEntry>, Record<string, RecipeBulkEditEntry>>;
    isSaving: import("vue").Ref<boolean, boolean>;
    applyErrors: import("vue").Ref<Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>, Map<string, string> | (Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>)>;
    nameSearch: import("vue").Ref<string, string>;
    filterRows: import("vue").Ref<{
        id: string;
        type: FilterEntryType | null;
        itemId: string | null;
        amountModel: {
            amount: {
                amount: number;
                precision: number;
            };
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
        };
    }[], FilterRow[] | {
        id: string;
        type: FilterEntryType | null;
        itemId: string | null;
        amountModel: {
            amount: {
                amount: number;
                precision: number;
            };
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
        };
    }[]>;
    matchedRecipes: import("vue").ComputedRef<{
        customAttributes?: Record<string, any> | null | undefined;
        version?: "v2" | null | undefined;
        _id: string;
        name: string;
        contains: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        }[];
    }[]>;
    selectedRecipes: import("vue").ComputedRef<{
        customAttributes?: Record<string, any> | null | undefined;
        version?: "v2" | null | undefined;
        _id: string;
        name: string;
        contains: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        }[];
    }[]>;
    livePreviewEntries: import("vue").ComputedRef<Record<string, RecipeBulkEditEntry>>;
    canGoToStep2: import("vue").ComputedRef<boolean>;
    canGoToStep3: import("vue").ComputedRef<boolean>;
    openDialog: () => void;
    closeDialog: () => void;
    reset: () => void;
    updateQuery: (q: RecipeBulkEditQueryV2) => void;
    removeRecipe: (recipeId: string) => void;
    restoreAllRecipes: () => void;
    addModification: (change: BindingChange) => void;
    updateModification: (index: number, change: BindingChange) => void;
    removeModification: (index: number) => void;
    reorderModification: (from: number, to: number) => void;
    goToStep3: () => void;
    backToStep2: () => void;
    buildPayload: () => FdoInventoryRecipe[];
    confirmAndApply: () => Promise<void>;
}, "entries" | "currentStep" | "show" | "query" | "nameSearch" | "excludedRecipeIds" | "modifications" | "isSaving" | "applyErrors" | "filterRows">>, Pick<{
    show: import("vue").Ref<boolean, boolean>;
    currentStep: import("vue").Ref<number, number>;
    query: import("vue").Ref<{
        nameSearch?: string | undefined;
        filters: ({
            id: string;
            type: 'ingredient';
            itemId: string;
            amount?: {
                amount: number;
                precision: number;
            } | null | undefined;
            measurementId?: string | null | undefined;
        } | {
            id: string;
            type: 'recipe';
            itemId: string;
        })[];
    } | null, RecipeBulkEditQueryV2 | {
        nameSearch?: string | undefined;
        filters: ({
            id: string;
            type: 'ingredient';
            itemId: string;
            amount?: {
                amount: number;
                precision: number;
            } | null | undefined;
            measurementId?: string | null | undefined;
        } | {
            id: string;
            type: 'recipe';
            itemId: string;
        })[];
    } | null>;
    excludedRecipeIds: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
    modifications: import("vue").Ref<({
        type: "replace-binding";
        from: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        to: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "remove-binding";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
    } | {
        type: "add-binding";
        binding: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "update-binding-rule";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        rule: Record<string, any> | null;
    } | {
        type: "update-alternatives";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        alternatives: {
            default?: boolean | null | undefined;
            trackingMeasurement?: string | null | undefined;
            priority?: number | null | undefined;
            _id: string;
        }[];
    })[], BindingChange[] | ({
        type: "replace-binding";
        from: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        to: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "remove-binding";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
    } | {
        type: "add-binding";
        binding: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "update-binding-rule";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        rule: Record<string, any> | null;
    } | {
        type: "update-alternatives";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        alternatives: {
            default?: boolean | null | undefined;
            trackingMeasurement?: string | null | undefined;
            priority?: number | null | undefined;
            _id: string;
        }[];
    })[]>;
    entries: import("vue").Ref<Record<string, RecipeBulkEditEntry>, Record<string, RecipeBulkEditEntry>>;
    isSaving: import("vue").Ref<boolean, boolean>;
    applyErrors: import("vue").Ref<Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>, Map<string, string> | (Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>)>;
    nameSearch: import("vue").Ref<string, string>;
    filterRows: import("vue").Ref<{
        id: string;
        type: FilterEntryType | null;
        itemId: string | null;
        amountModel: {
            amount: {
                amount: number;
                precision: number;
            };
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
        };
    }[], FilterRow[] | {
        id: string;
        type: FilterEntryType | null;
        itemId: string | null;
        amountModel: {
            amount: {
                amount: number;
                precision: number;
            };
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
        };
    }[]>;
    matchedRecipes: import("vue").ComputedRef<{
        customAttributes?: Record<string, any> | null | undefined;
        version?: "v2" | null | undefined;
        _id: string;
        name: string;
        contains: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        }[];
    }[]>;
    selectedRecipes: import("vue").ComputedRef<{
        customAttributes?: Record<string, any> | null | undefined;
        version?: "v2" | null | undefined;
        _id: string;
        name: string;
        contains: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        }[];
    }[]>;
    livePreviewEntries: import("vue").ComputedRef<Record<string, RecipeBulkEditEntry>>;
    canGoToStep2: import("vue").ComputedRef<boolean>;
    canGoToStep3: import("vue").ComputedRef<boolean>;
    openDialog: () => void;
    closeDialog: () => void;
    reset: () => void;
    updateQuery: (q: RecipeBulkEditQueryV2) => void;
    removeRecipe: (recipeId: string) => void;
    restoreAllRecipes: () => void;
    addModification: (change: BindingChange) => void;
    updateModification: (index: number, change: BindingChange) => void;
    removeModification: (index: number) => void;
    reorderModification: (from: number, to: number) => void;
    goToStep3: () => void;
    backToStep2: () => void;
    buildPayload: () => FdoInventoryRecipe[];
    confirmAndApply: () => Promise<void>;
}, "matchedRecipes" | "selectedRecipes" | "livePreviewEntries" | "canGoToStep2" | "canGoToStep3">, Pick<{
    show: import("vue").Ref<boolean, boolean>;
    currentStep: import("vue").Ref<number, number>;
    query: import("vue").Ref<{
        nameSearch?: string | undefined;
        filters: ({
            id: string;
            type: 'ingredient';
            itemId: string;
            amount?: {
                amount: number;
                precision: number;
            } | null | undefined;
            measurementId?: string | null | undefined;
        } | {
            id: string;
            type: 'recipe';
            itemId: string;
        })[];
    } | null, RecipeBulkEditQueryV2 | {
        nameSearch?: string | undefined;
        filters: ({
            id: string;
            type: 'ingredient';
            itemId: string;
            amount?: {
                amount: number;
                precision: number;
            } | null | undefined;
            measurementId?: string | null | undefined;
        } | {
            id: string;
            type: 'recipe';
            itemId: string;
        })[];
    } | null>;
    excludedRecipeIds: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
    modifications: import("vue").Ref<({
        type: "replace-binding";
        from: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        to: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "remove-binding";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
    } | {
        type: "add-binding";
        binding: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "update-binding-rule";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        rule: Record<string, any> | null;
    } | {
        type: "update-alternatives";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        alternatives: {
            default?: boolean | null | undefined;
            trackingMeasurement?: string | null | undefined;
            priority?: number | null | undefined;
            _id: string;
        }[];
    })[], BindingChange[] | ({
        type: "replace-binding";
        from: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        to: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "remove-binding";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
    } | {
        type: "add-binding";
        binding: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        };
    } | {
        type: "update-binding-rule";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        rule: Record<string, any> | null;
    } | {
        type: "update-alternatives";
        target: {
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            id: string;
            amount?: {
                amount: number;
                precision: number;
            } | undefined;
            measurementId?: string | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | undefined;
        };
        alternatives: {
            default?: boolean | null | undefined;
            trackingMeasurement?: string | null | undefined;
            priority?: number | null | undefined;
            _id: string;
        }[];
    })[]>;
    entries: import("vue").Ref<Record<string, RecipeBulkEditEntry>, Record<string, RecipeBulkEditEntry>>;
    isSaving: import("vue").Ref<boolean, boolean>;
    applyErrors: import("vue").Ref<Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>, Map<string, string> | (Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>)>;
    nameSearch: import("vue").Ref<string, string>;
    filterRows: import("vue").Ref<{
        id: string;
        type: FilterEntryType | null;
        itemId: string | null;
        amountModel: {
            amount: {
                amount: number;
                precision: number;
            };
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
        };
    }[], FilterRow[] | {
        id: string;
        type: FilterEntryType | null;
        itemId: string | null;
        amountModel: {
            amount: {
                amount: number;
                precision: number;
            };
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
        };
    }[]>;
    matchedRecipes: import("vue").ComputedRef<{
        customAttributes?: Record<string, any> | null | undefined;
        version?: "v2" | null | undefined;
        _id: string;
        name: string;
        contains: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        }[];
    }[]>;
    selectedRecipes: import("vue").ComputedRef<{
        customAttributes?: Record<string, any> | null | undefined;
        version?: "v2" | null | undefined;
        _id: string;
        name: string;
        contains: {
            measurement?: {
                name: string;
                id: string;
                abbrev: string;
                conversion: {
                    amount: number;
                    precision: number;
                };
            } | null | undefined;
            rules?: Record<string, any> | null | undefined;
            alternatives?: {
                default?: boolean | null | undefined;
                trackingMeasurement?: string | null | undefined;
                priority?: number | null | undefined;
                _id: string;
            }[] | null | undefined;
            type: "RECIPE" | "SKU" | "SKU_GROUP";
            amount: {
                amount: number;
                precision: number;
            };
            id: string;
        }[];
    }[]>;
    livePreviewEntries: import("vue").ComputedRef<Record<string, RecipeBulkEditEntry>>;
    canGoToStep2: import("vue").ComputedRef<boolean>;
    canGoToStep3: import("vue").ComputedRef<boolean>;
    openDialog: () => void;
    closeDialog: () => void;
    reset: () => void;
    updateQuery: (q: RecipeBulkEditQueryV2) => void;
    removeRecipe: (recipeId: string) => void;
    restoreAllRecipes: () => void;
    addModification: (change: BindingChange) => void;
    updateModification: (index: number, change: BindingChange) => void;
    removeModification: (index: number) => void;
    reorderModification: (from: number, to: number) => void;
    goToStep3: () => void;
    backToStep2: () => void;
    buildPayload: () => FdoInventoryRecipe[];
    confirmAndApply: () => Promise<void>;
}, "reset" | "openDialog" | "closeDialog" | "updateQuery" | "removeRecipe" | "restoreAllRecipes" | "addModification" | "updateModification" | "removeModification" | "reorderModification" | "goToStep3" | "backToStep2" | "buildPayload" | "confirmAndApply">>;
