import { PropertyMeta } from "./property-meta";
import { ManyToManyInfo } from "../relations/many-to-many-info";
import { type CrudAction } from "../../../fd-toolbox/enums/enums";
import { WithIndexer } from "../../../fd-toolbox-core/types/with-indexer";
import { ResourceDescription } from "./resource-description/resource-description";
import { ResourceMetaDisplay } from "./resource-meta-display";
import { ResourceMetaAuth } from "./resource-meta-auth";
import { ResourceMetaSingleton } from "./resource-meta-singleton";
import { ODataOrderBy } from "../../../fd-toolbox/odata/odataorderby";
export interface ResourceMetas {
    [k: string]: ResourceMeta;
}
/**
 * Information about resource, its metadata. Used by Ui components to create dynamic components for resources.
 */
export interface ResourceMeta {
    /**
     * Unique identifier for the resource meta (Uuid). Is set by @{@link resourceMetaId} decorator on the resource
     * class.
     */
    id: string;
    /**
     * Resource name that is automatically generated from the name of the class
     * where the resource was declared.
     */
    resourceName: string;
    /**
     * Icon code for the resource. Is set by @{@link icon} decorator on the resource
     * class. This property uses icon codes from {@link https:/www.radix-ui.com/icons Radix Icons}
     * but without spaces in camelCase.
     */
    icon?: string;
    /**
     * Object containing metadata about resource properties. Keys in this object correspond to
     * property names of the resource, and values are {@link PropertyMeta} objects with metadata about each property.
     */
    properties: WithIndexer<PropertyMeta>;
    /** Configures how a resource is described/displayed in the Ui */
    description: ResourceDescription;
    /**
     * Defines which Crud operations are supported for this resource.
     * Can be restricted using the @{@link getOnlyResource} decorator (limits to view operations only)
     * or the @{@link createOnlyResource} decorator (limits to create operations only)
     */
    supportedCrudActions: CrudAction[];
    /** Defines access rules for the resource */
    auth: ResourceMetaAuth;
    /** Contains configuration for many-to-many relationship resources */
    manyToManyInfo?: ManyToManyInfo;
    /** Defines sorting configuration for resource properties */
    orderBys: ODataOrderBy[];
    /**
     * Indicates whether a custom permission checker is applied to this resource.
     * This can be set using the @{@link permissionCheckerFor} decorator.
     */
    customPermissionChecker: boolean;
    /**
     * Indicates whether the resource is stored in the database.
     * This can be set to false using the @{@link transientResource} decorator which is applied to the resource class.
     */
    isPersistent: boolean;
    /** Defines whether the resource is a singleton */
    singleton?: ResourceMetaSingleton;
    /** Determines how to display the resource name in different Ui contexts */
    display: ResourceMetaDisplay;
}
/** @internal */
export declare function createResourceMeta(): {
    id: string;
    resourceName: string;
    icon: any;
    properties: {};
    description: ResourceDescription;
    display: {
        displayName: string;
    };
    supportedCrudActions: any[];
    manyToManyInfo: any;
    customPermissionChecker: false;
    orderBys: any[];
    isPersistent: true;
    auth: import("./auth-resource-meta").AuthResourceMeta;
    singleton: {
        userSingleton: false;
        workspaceSingleton: false;
        systemSingleton: false;
    };
};
