# `A2UICore.Catalog.Basic`
[🔗](https://github.com/a2ui-elixir/a2ui/blob/v0.1.1/umbrella/apps/a2ui_core/lib/a2ui_core/catalog/basic.ex#L1)

The basic catalog of a protocol version, ready to evaluate.

The catalog document is the vendored published one
(`A2UICore.Schema.Source.catalog/2`); the functions it declares get
their implementations from `A2UICore.Functions.Basic`, plus the
runtime's system functions (`@index` in v1.0).

`declared/1` is the catalog without implementations — the schema an
agent works with. Only that data is cached; `catalog/2` attaches the
implementations on every call, so no closures outlive a code reload.

# `catalog`
*since 0.1.0* 

```elixir
@spec catalog(String.t(), keyword()) :: A2UICore.Catalog.t()
```

The basic catalog for `version` (`"v0.9"`, `"v0.9.1"` or `"v1.0"`),
with its functions implemented.

Options: `:formatter` — an `A2UICore.Formatter` module for the
locale-sensitive functions.

# `declared`
*since 0.1.0* 

```elixir
@spec declared(String.t()) :: A2UICore.Catalog.t()
```

The basic catalog for `version` as published: components and function
schemas, no implementations.

# `implement`
*since 0.1.0* 

```elixir
@spec implement(A2UICore.Catalog.t(), String.t(), keyword()) :: A2UICore.Catalog.t()
```

Attaches the basic functions' implementations and the system functions
of `version` to a catalog that declares them (the basic catalog, or one
derived from it). Functions the catalog does not declare are ignored.

Options: as for `catalog/2`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
