ProviderPicker
import ApiTable from "../../../components/docs/ApiTable.astro"; Provider and model selection compound component. ```tsx import { ProviderPicker } from "@arlopass/react-ui"; ``` --- ### Parts | Name | Element | Purpose | | ------------------------------- | ------- | ---------------------------------------------------------------------------------- | | `ProviderPicker.Root` | div | Manages provider/model selection state. Reads from useProviders when uncontrolled. | | `ProviderPicker.ProviderSelect` | select | Dropdown for choosing an AI provider. | | `ProviderPicker.ModelSelect` | select | Dropdown for choosing a model from the selected provider. | | `ProviderPicker.SubmitButton` | button | Confirms the selected provider/model pair. | --- ### Uncontrolled usage Inside a `<ArlopassProvider>`, `ProviderPicker.Root` automatically reads from `useProviders`. No props needed. ```tsx title="ProviderPicker" import { ArlopassProvider } from "@arlopass/react"; import { ProviderPicker } from "@arlopass/react-ui"; function Picker() { return ( <ArlopassProvider> <ProviderPicker.Root> <ProviderPicker.ProviderSelect /> <ProviderPicker.ModelSelect /> <ProviderPicker.SubmitButton>Connect</ProviderPicker.SubmitButton> </ProviderPicker.Root> </ArlopassProvider> ); } ``` --- ### Controlled usage Pass props to take full control over the provider list and selection callbacks. ```tsx title="Controlled" import { useProviders } from "@arlopass/react"; import { ProviderPicker } from "@arlopass/react-ui"; function ControlledPicker() { const { providers, selectedProvider, selectProvider, isLoading, error } = useProviders(); return ( <ProviderPicker.Root providers={providers} selectedProvider={selectedProvider} isLoading={isLoading} error={error} onProviderChange={(id) => console.log("provider:", id)} onModelChange={(id) => console.log("model:", id)} onSelect={(providerId, modelId) => selectProvider({ providerId, modelId }) } > <ProviderPicker.ProviderSelect /> <ProviderPicker.ModelSelect /> <ProviderPicker.SubmitButton>Select</ProviderPicker.SubmitButton> </ProviderPicker.Root> ); } ``` ### ProviderPicker.Root — controlled props <ApiTable props={[ { name: "providers", type: "readonly ProviderDescriptor[]", description: "List of available providers and their models.", }, { name: "selectedProvider", type: "{ providerId: string; modelId: string } | null", description: "Currently selected provider/model pair.", }, { name: "isLoading", type: "boolean", description: "True while fetching providers or selecting.", }, { name: "error", type: "ArlopassSDKError | null", description: "Error from the last provider operation.", }, { name: "onProviderChange", type: "(providerId: string) => void", description: "Called when the user selects a different provider.", }, { name: "onModelChange", type: "(modelId: string) => void", description: "Called when the user selects a different model.", }, { name: "onSelect", type: "(providerId: string, modelId: string) => void", description: "Called when the user confirms the selection.", }, ]} /> --- ### Data attributes <ApiTable props={[ { name: "data-state", type: '"ready" | "loading" | "error"', default: '"ready"', description: "Set on ProviderPicker.Root. Reflects the current loading/error state.", }, ]} />Provider and model selection compound component.
import { ProviderPicker } from "@arlopass/react-ui";
Parts
| Name | Element | Purpose |
|---|---|---|
ProviderPicker.Root | div | Manages provider/model selection state. Reads from useProviders when uncontrolled. |
ProviderPicker.ProviderSelect | select | Dropdown for choosing an AI provider. |
ProviderPicker.ModelSelect | select | Dropdown for choosing a model from the selected provider. |
ProviderPicker.SubmitButton | button | Confirms the selected provider/model pair. |
Uncontrolled usage
Inside a <ArlopassProvider>, ProviderPicker.Root automatically reads from useProviders. No props needed.
import { ArlopassProvider } from "@arlopass/react";
import { ProviderPicker } from "@arlopass/react-ui";
function Picker() {
return (
<ArlopassProvider>
<ProviderPicker.Root>
<ProviderPicker.ProviderSelect />
<ProviderPicker.ModelSelect />
<ProviderPicker.SubmitButton>Connect</ProviderPicker.SubmitButton>
</ProviderPicker.Root>
</ArlopassProvider>
);
}
Controlled usage
Pass props to take full control over the provider list and selection callbacks.
import { useProviders } from "@arlopass/react";
import { ProviderPicker } from "@arlopass/react-ui";
function ControlledPicker() {
const { providers, selectedProvider, selectProvider, isLoading, error } =
useProviders();
return (
<ProviderPicker.Root
providers={providers}
selectedProvider={selectedProvider}
isLoading={isLoading}
error={error}
onProviderChange={(id) => console.log("provider:", id)}
onModelChange={(id) => console.log("model:", id)}
onSelect={(providerId, modelId) =>
selectProvider({ providerId, modelId })
}
>
<ProviderPicker.ProviderSelect />
<ProviderPicker.ModelSelect />
<ProviderPicker.SubmitButton>Select</ProviderPicker.SubmitButton>
</ProviderPicker.Root>
);
}
ProviderPicker.Root — controlled props
| Prop | Type | Default | Description |
|---|---|---|---|
providers | readonly ProviderDescriptor[] | — | List of available providers and their models. |
selectedProvider | { providerId: string; modelId: string } | null | — | Currently selected provider/model pair. |
isLoading | boolean | — | True while fetching providers or selecting. |
error | ArlopassSDKError | null | — | Error from the last provider operation. |
onProviderChange | (providerId: string) => void | — | Called when the user selects a different provider. |
onModelChange | (modelId: string) => void | — | Called when the user selects a different model. |
onSelect | (providerId: string, modelId: string) => void | — | Called when the user confirms the selection. |
Data attributes
| Prop | Type | Default | Description |
|---|---|---|---|
data-state | "ready" | "loading" | "error" | "ready" | Set on ProviderPicker.Root. Reflects the current loading/error state. |