// // Copyright 2025 DXOS.org // import { useRxValue } from '@effect-rx/rx-react'; import { invariant } from '@dxos/invariant'; import { usePluginManager } from './PluginManagerProvider'; import { type InterfaceDef } from '../core'; /** * Hook to request capabilities from the plugin context. * @returns An array of capabilities. */ export const useCapabilities = (interfaceDef: InterfaceDef) => { const manager = usePluginManager(); return useRxValue(manager.context.capabilities(interfaceDef)); }; /** * Hook to request a capability from the plugin context. * @returns The capability. * @throws If no capability is found. */ export const useCapability = (interfaceDef: InterfaceDef) => { const capabilities = useCapabilities(interfaceDef); invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`); return capabilities[0]; };