declare const PRODUCT_CUSTOM_FIELD_MODEL: "product";
declare const PRODUCT_CUSTOM_FIELD_FORM_ZONES: readonly ["create", "edit", "organize", "attributes"];
declare const PRODUCT_CUSTOM_FIELD_CREATE_FORM_TABS: readonly ["general", "organize"];
declare const PRODUCT_CUSTOM_FIELD_FORM_TABS: readonly ["general", "organize"];
declare const PRODUCT_CUSTOM_FIELD_DISPLAY_ZONES: readonly ["general", "organize", "attributes"];
declare const PRODUCT_CUSTOM_FIELD_LINK_PATHS: readonly ["product.$link"];
declare const PRODUCT_CUSTOM_FIELD_FORM_CONFIG_PATHS: readonly string[];
declare const PRODUCT_CUSTOM_FIELD_FORM_FIELD_PATHS: readonly string[];
declare const PRODUCT_CUSTOM_FIELD_DISPLAY_PATHS: readonly string[];

type ProductFormZone = (typeof PRODUCT_CUSTOM_FIELD_FORM_ZONES)[number];
type ProductFormTab = (typeof PRODUCT_CUSTOM_FIELD_FORM_TABS)[number];
type ProductDisplayZone = (typeof PRODUCT_CUSTOM_FIELD_DISPLAY_ZONES)[number];

declare const CUSTOM_FIELD_MODELS: readonly ["product"];
declare const CUSTOM_FIELD_CONTAINER_ZONES: readonly ["general", "organize", "attributes"];
declare const CUSTOM_FIELD_FORM_ZONES: readonly ["create", "edit", "organize", "attributes"];
declare const CUSTOM_FIELD_FORM_TABS: readonly ["general", "organize"];

type CustomFieldModel = (typeof CUSTOM_FIELD_MODELS)[number];
type CustomFieldFormZone = (typeof CUSTOM_FIELD_FORM_ZONES)[number];
type CustomFieldFormTab = (typeof CUSTOM_FIELD_FORM_TABS)[number];
type CustomFieldContainerZone = (typeof CUSTOM_FIELD_CONTAINER_ZONES)[number];
type CustomFieldZone = CustomFieldFormZone | CustomFieldContainerZone;
type CustomFieldImportType = "display" | "field" | "link" | "config";
interface CustomFieldModelFormMap {
    product: ProductFormZone;
}
interface CustomFieldModelContainerMap {
    product: ProductDisplayZone;
}
type CustomFieldModelFormTabsMap = {
    product: {
        create: ProductFormTab;
        edit: never;
        organize: never;
        attributes: never;
    };
    customer: {
        create: never;
        edit: never;
    };
};
type CustomFieldFormKeys<T extends CustomFieldModel> = CustomFieldModelFormMap[T];

declare function isValidCustomFieldModel(id: any): id is CustomFieldModel;
declare function isValidCustomFieldFormZone(id: any): id is CustomFieldFormZone;
declare function isValidCustomFieldFormTab(id: any): id is CustomFieldFormTab;
declare function isValidCustomFieldDisplayZone(id: any): id is CustomFieldContainerZone;
declare function isValidCustomFieldDisplayPath(id: any): id is string;
declare function isValidCustomFieldFormConfigPath(id: any): id is string;
declare function isValidCustomFieldFormFieldPath(id: any): id is string;
declare function isValidCustomFieldLinkPath(id: any): id is string;

declare const CORE_LAYOUT_IDS: {
    readonly SINGLE_COLUMN: "core:single-column";
    readonly SINGLE_ROW: "core:single-row";
    readonly TWO_COLUMN: "core:two-column";
    readonly SETTINGS_SIDEBAR: "core:settings-sidebar";
};

type LayoutSection = {
    id: string;
    ordering: "list" | "grid" | "horizontal-stretched" | "horizontal-list";
};
/**
 * Registry mapping each known layout id to the union of valid section names
 * for that layout. `LayoutComposer`'s `sections` prop is keyed by this union,
 * so adding an entry here gives strict required-key typing and autocomplete
 * to consumers of the layout.
 *
 * ## Augmenting from a plugin
 * ```ts
 * // my-plugin/index.d.ts
 * import "@medusajs/admin-shared"
 *
 * declare module "@medusajs/admin-shared" {
 *   interface LayoutSectionRegistry {
 *     "my-plugin:three-column": "main" | "left" | "right"
 *     "my-plugin:hero": "hero" | "body"
 *   }
 * }
 * ```
 *
 * The registered ids and section names must match what the plugin actually
 * registers at runtime via `defineLayoutConfig` — TypeScript can only enforce
 * the keys/names against the registry, not against the live layout definition.
 */
interface LayoutSectionRegistry {
    [CORE_LAYOUT_IDS.SINGLE_COLUMN]: "main";
    [CORE_LAYOUT_IDS.SINGLE_ROW]: "main";
    [CORE_LAYOUT_IDS.TWO_COLUMN]: "main" | "side";
    [CORE_LAYOUT_IDS.SETTINGS_SIDEBAR]: "general" | "developer" | "myAccount" | "extensions";
}
type Layouts = keyof LayoutSectionRegistry;
/**
 * Resolves a layout id to its valid section-name union
 */
type SectionNameFor<TLayoutId extends Layouts> = LayoutSectionRegistry[TLayoutId];

declare const NESTED_ROUTE_POSITIONS: readonly ["/orders", "/products", "/inventory", "/customers", "/promotions", "/price-lists"];

type NestedRoutePosition = (typeof NESTED_ROUTE_POSITIONS)[number];

/**
 * All valid injection zones in the admin panel. An injection zone is a specific place
 * in the admin panel where a plugin can inject custom widgets.
 */
declare const INJECTION_ZONES: readonly ["order.details.before", "order.details.after", "order.details.side.before", "order.details.side.after", "order.list.before", "order.list.after", "order.details", "order.details.side", "order.list", "customer.details.before", "customer.details.after", "customer.details.side.before", "customer.details.side.after", "customer.list.before", "customer.list.after", "customer.details", "customer.details.side", "customer.list", "customer_group.details.before", "customer_group.details.after", "customer_group.list.before", "customer_group.list.after", "customer_group.details", "customer_group.list", "product.details.before", "product.details.after", "product.list.before", "product.list.after", "product.details.side.before", "product.details.side.after", "product.details", "product.list", "product.details.side", "product_variant.details.before", "product_variant.details.after", "product_variant.details.side.before", "product_variant.details.side.after", "product_variant.details", "product_variant.details.side", "product_collection.details.before", "product_collection.details.after", "product_collection.list.before", "product_collection.list.after", "product_collection.details", "product_collection.list", "product_category.details.before", "product_category.details.after", "product_category.details.side.before", "product_category.details.side.after", "product_category.list.before", "product_category.list.after", "product_category.details", "product_category.details.side", "product_category.list", "product_type.details.before", "product_type.details.after", "product_type.list.before", "product_type.list.after", "product_type.details", "product_type.list", "product_option.details.before", "product_option.details.after", "product_option.details.side.before", "product_option.details.side.after", "product_option.list.before", "product_option.list.after", "product_option.details", "product_option.list", "product_option_value.details.before", "product_option_value.details.after", "product_option_value.details", "shipping_option_type.details.before", "shipping_option_type.details.after", "shipping_option_type.list.before", "shipping_option_type.list.after", "shipping_option_type.details", "shipping_option_type.list", "product_tag.details.before", "product_tag.details.after", "product_tag.list.before", "product_tag.list.after", "product_tag.details", "product_tag.list", "price_list.details.before", "price_list.details.after", "price_list.details.side.before", "price_list.details.side.after", "price_list.list.before", "price_list.list.after", "price_list.details", "price_list.details.side", "price_list.list", "promotion.details.before", "promotion.details.after", "promotion.details.side.before", "promotion.details.side.after", "promotion.list.before", "promotion.list.after", "promotion.details", "promotion.details.side", "promotion.list", "user.details.before", "user.details.after", "user.list.before", "user.list.after", "user.details", "user.list", "store.details.before", "store.details.after", "store.details", "profile.details.before", "profile.details.after", "profile.details", "region.details.before", "region.details.after", "region.list.before", "region.list.after", "region.details", "region.list", "shipping_profile.details.before", "shipping_profile.details.after", "shipping_profile.list.before", "shipping_profile.list.after", "shipping_profile.details", "shipping_profile.list", "location.details.before", "location.details.after", "location.details.side.before", "location.details.side.after", "location.list.before", "location.list.after", "location.list.side.before", "location.list.side.after", "location.details", "location.details.side", "location.list", "location.list.side", "login.before", "login.after", "sales_channel.details.before", "sales_channel.details.after", "sales_channel.list.before", "sales_channel.list.after", "sales_channel.details", "sales_channel.list", "reservation.details.before", "reservation.details.after", "reservation.details.side.before", "reservation.details.side.after", "reservation.list.before", "reservation.list.after", "reservation.details", "reservation.details.side", "reservation.list", "api_key.details.before", "api_key.details.after", "api_key.list.before", "api_key.list.after", "api_key.details", "api_key.list", "workflow.details.before", "workflow.details.after", "workflow.list.before", "workflow.list.after", "workflow.details", "workflow.list", "campaign.details.before", "campaign.details.after", "campaign.details.side.before", "campaign.details.side.after", "campaign.list.before", "campaign.list.after", "campaign.details", "campaign.details.side", "campaign.list", "tax.details.before", "tax.details.after", "tax.list.before", "tax.list.after", "tax.details", "tax.list", "return_reason.list.before", "return_reason.list.after", "return_reason.list", "refund_reason.list.before", "refund_reason.list.after", "refund_reason.list", "inventory_item.details.before", "inventory_item.details.after", "inventory_item.details.side.before", "inventory_item.details.side.after", "inventory_item.list.before", "inventory_item.list.after", "inventory_item.details", "inventory_item.details.side", "inventory_item.list", "role.details.before", "role.details.after", "role.list.before", "role.list.after", "role.details", "role.list", "policy.details.before", "policy.details.after", "policy.list.before", "policy.list.after", "policy.details", "policy.list", "draft_order.details.before", "draft_order.details.after", "draft_order.details.side.before", "draft_order.details.side.after", "draft_order.list.before", "draft_order.list.after", "draft_order.details", "draft_order.details.side", "draft_order.list", "store_credit_account.details.before", "store_credit_account.details.after", "store_credit_account.details.side.before", "store_credit_account.details.side.after", "store_credit_account.list.before", "store_credit_account.list.after", "store_credit_account.details", "store_credit_account.details.side", "store_credit_account.list", "gift_card.details.before", "gift_card.details.after", "gift_card.details.side.before", "gift_card.details.side.after", "gift_card.list.before", "gift_card.list.after", "gift_card.list.side.before", "gift_card.list.side.after", "gift_card.details", "gift_card.details.side", "gift_card.list", "gift_card.list.side", "gift_card_product.details.before", "gift_card_product.details.after", "gift_card_product.details.side.before", "gift_card_product.details.side.after", "gift_card_product.list.before", "gift_card_product.list.after", "gift_card_product.details", "gift_card_product.details.side", "gift_card_product.list", "topbar", "property_label.list"];

interface InjectionZoneRegistry extends Record<(typeof INJECTION_ZONES)[number], true> {
}
/**
 * Plugins can register their own injection zones by augmenting
 * the {@link InjectionZoneRegistry} interface through declaration merging.
 * The new keys become available to `defineWidgetConfig` for autocompletion.
 * New injection zones should not use ".before" or ".after" suffixes —
 * those are legacy and ignored by the layout composer, which handles
 * ordering with drag&drop.
 *
 * Define them in index.d.ts in the root of the plugin package
 * and add it to package.json:
 * ```json
 * "files": [
 *   ".medusa/server",
 *   "index.d.ts"
 * ],
 * "exports": {
 *   ".": {
 *     "types": "./index.d.ts"
 *   },
 * ```
 * @example
 * my-plugin/index.d.ts
 * declare module "@medusajs/admin-shared" {
 *   interface InjectionZoneRegistry {
 *     "my-plugin.product-page": true
 *     "my-plugin.product-page.side": true
 *   }
 * }
 */
type InjectionZone = keyof InjectionZoneRegistry;

/**
 * Validates that the provided zone is a valid injection zone for a widget.
 */
declare function isValidInjectionZone(zone: any): zone is InjectionZone;

declare const LINK_VIRTUAL_MODULE = "virtual:medusa/links";
declare const FORM_VIRTUAL_MODULE = "virtual:medusa/forms";
declare const DISPLAY_VIRTUAL_MODULE = "virtual:medusa/displays";
declare const ROUTE_VIRTUAL_MODULE = "virtual:medusa/routes";
declare const MENU_ITEM_VIRTUAL_MODULE = "virtual:medusa/menu-items";
declare const WIDGET_VIRTUAL_MODULE = "virtual:medusa/widgets";
declare const I18N_VIRTUAL_MODULE = "virtual:medusa/i18n";
declare const CELL_RENDERER_VIRTUAL_MODULE = "virtual:medusa/cell-renderers";
declare const LAYOUT_VIRTUAL_MODULE = "virtual:medusa/layouts";
declare const VIRTUAL_MODULES: readonly ["virtual:medusa/links", "virtual:medusa/forms", "virtual:medusa/displays", "virtual:medusa/routes", "virtual:medusa/menu-items", "virtual:medusa/widgets", "virtual:medusa/i18n", "virtual:medusa/cell-renderers", "virtual:medusa/layouts"];

declare function deepMerge(target: any, source: any): any;

export { CELL_RENDERER_VIRTUAL_MODULE, CORE_LAYOUT_IDS, type CustomFieldContainerZone, type CustomFieldFormKeys, type CustomFieldFormTab, type CustomFieldFormZone, type CustomFieldImportType, type CustomFieldModel, type CustomFieldModelContainerMap, type CustomFieldModelFormMap, type CustomFieldModelFormTabsMap, type CustomFieldZone, DISPLAY_VIRTUAL_MODULE, FORM_VIRTUAL_MODULE, I18N_VIRTUAL_MODULE, INJECTION_ZONES, type InjectionZone, type InjectionZoneRegistry, LAYOUT_VIRTUAL_MODULE, LINK_VIRTUAL_MODULE, type LayoutSection, type LayoutSectionRegistry, type Layouts, MENU_ITEM_VIRTUAL_MODULE, NESTED_ROUTE_POSITIONS, type NestedRoutePosition, PRODUCT_CUSTOM_FIELD_CREATE_FORM_TABS, PRODUCT_CUSTOM_FIELD_DISPLAY_PATHS, PRODUCT_CUSTOM_FIELD_DISPLAY_ZONES, PRODUCT_CUSTOM_FIELD_FORM_CONFIG_PATHS, PRODUCT_CUSTOM_FIELD_FORM_FIELD_PATHS, PRODUCT_CUSTOM_FIELD_FORM_TABS, PRODUCT_CUSTOM_FIELD_FORM_ZONES, PRODUCT_CUSTOM_FIELD_LINK_PATHS, PRODUCT_CUSTOM_FIELD_MODEL, type ProductDisplayZone, type ProductFormTab, type ProductFormZone, ROUTE_VIRTUAL_MODULE, type SectionNameFor, VIRTUAL_MODULES, WIDGET_VIRTUAL_MODULE, deepMerge, isValidCustomFieldDisplayPath, isValidCustomFieldDisplayZone, isValidCustomFieldFormConfigPath, isValidCustomFieldFormFieldPath, isValidCustomFieldFormTab, isValidCustomFieldFormZone, isValidCustomFieldLinkPath, isValidCustomFieldModel, isValidInjectionZone };
