import { InjectionKey } from 'vue';
import { MaybeRef } from '../types/reactivity';
export declare const workspaceFeatureFlags: readonly ["access:deploymentScheduleFlowRunInfraOverrides"];
export type WorkspaceFeatureFlag = typeof workspaceFeatureFlags[number];
export declare const workspacePermissions: readonly ["create:artifact", "create:automation", "create:block", "create:concurrency_limit", "create:deployment", "create:flow_run", "create:flow", "create:log", "create:notification_policy", "create:saved_search", "create:task_run", "create:variable", "create:work_queue", "create:work_pool", "create:workspace_bot_access", "create:workspace_user_access", "delete:artifact", "delete:automation", "delete:block", "delete:concurrency_limit", "delete:deployment", "delete:flow_run", "delete:flow", "delete:notification_policy", "delete:saved_search", "delete:task_run", "delete:work_queue", "delete:work_pool", "delete:worker", "delete:workspace_bot_access", "delete:workspace_user_access", "delete:variable", "read:artifact", "read:automation", "read:block", "read:concurrency_limit", "read:deployment", "read:flow_run", "read:flow", "read:log", "read:notification_policy", "read:saved_search", "read:task_run", "read:variable", "read:work_queue", "read:work_pool", "read:worker", "read:workspace_bot_access", "read:workspace_settings", "read:workspace_user_access", "run:deployment", "update:automation", "update:block", "update:concurrency_limit", "update:deployment", "update:flow_run", "update:flow", "update:notification_policy", "update:task_run", "update:variable", "update:work_queue", "update:work_pool", "update:workspace_bot_access", "update:workspace_settings", "update:workspace_user_access", "update:workspace"];
export type WorkspacePermission = typeof workspacePermissions[number];
export type PermissionValue = boolean | undefined;
export type PermissionVerb<T extends string> = T extends `${infer Action}:${string}` ? Action : never;
export type Can<T extends string> = {
    [K in PermissionVerb<T>]: Extract<T, `${K}:${string}`> extends `${string}:${infer Key}` ? Record<Key, PermissionValue> : never;
};
export type PermissionCheck<T> = (permission: T) => PermissionValue;
export declare function createCan<T extends string>(permissions: MaybeRef<Readonly<T[]>>): Can<T>;
export declare const canKey: InjectionKey<Can<WorkspacePermission | WorkspaceFeatureFlag>>;
