import { t as IamClient } from "../../client-0N6XNM6z.js"; //#region src/client/vue/index.d.ts /** Vue injection key for the access control state. */ declare const IAM_ACCESS_INJECTION_KEY: unique symbol; /** Minimal Vue ref type. */ interface VueRef { value: T; } /** Minimal Vue virtual node type. */ interface VNode { [key: string]: unknown; } /** Minimal Vue API surface for dependency injection. */ interface VueLike { ref(value: T): VueRef; computed(getter: () => T): Readonly>; inject(key: symbol | string): T | undefined; provide(key: symbol | string, value: unknown): void; defineComponent(options: Record): unknown; h(type: unknown, props?: Record | null, children?: unknown): VNode; } /** Minimal Vue application instance type. */ interface VueApp { provide(key: symbol | string, value: unknown): void; config: { globalProperties: Record; }; } /** * Builds the Vue 3 access control surface (composable, plugin, components). * * Pass Vue's reactive utilities to avoid a hard dependency on the framework. * * @template TAction - Constrains valid action strings. * @template TResource - Constrains valid resource strings. * @template TScope - Constrains valid scope strings. * @param vue - Provides the host Vue module so we never bundle our own copy. * @returns `{ createAccessState, provideAccess, useAccess, createAccessPlugin, Can, Cannot, IAM_ACCESS_INJECTION_KEY }`. * @example * ```ts * import { ref, computed, inject, provide, defineComponent, h } from 'vue' * import { createIamVueAccess } from 'duck-iam/client/vue' * * export const { useAccess, createAccessPlugin } = createIamVueAccess({ * ref, computed, inject, provide, defineComponent, h, * }) * ``` */ declare function createIamVueAccess(vue: VueLike): { createAccessState: (initialPermissions: IamClient.PermissionMap) => { permissions: VueRef>; can: (action: TAction, resource: TResource, resourceId?: string, scope?: TScope) => boolean; cannot: (action: TAction, resource: TResource, resourceId?: string, scope?: TScope) => boolean; update: (newPerms: IamClient.PermissionMap) => void; }; provideAccess: (permissions: IamClient.PermissionMap) => { permissions: VueRef>; can: (action: TAction, resource: TResource, resourceId?: string, scope?: TScope) => boolean; cannot: (action: TAction, resource: TResource, resourceId?: string, scope?: TScope) => boolean; update: (newPerms: IamClient.PermissionMap) => void; }; useAccess: () => ReturnType<(initialPermissions: IamClient.PermissionMap) => { permissions: VueRef>; can: (action: TAction, resource: TResource, resourceId?: string, scope?: TScope) => boolean; cannot: (action: TAction, resource: TResource, resourceId?: string, scope?: TScope) => boolean; update: (newPerms: IamClient.PermissionMap) => void; }>; createAccessPlugin: (permissions: IamClient.PermissionMap) => { install(app: VueApp): void; }; Can: unknown; Cannot: unknown; IAM_ACCESS_INJECTION_KEY: symbol; }; //#endregion export { IAM_ACCESS_INJECTION_KEY, createIamVueAccess }; //# sourceMappingURL=index.d.ts.map