# Referência de adaptadores e bindings

Registro de treze tecnologias, adapters personalizados, slots, hooks, stores reativos e helpers de IA.

Veja versões, mudanças e requisitos em [Framework 4.0 e CLI 1.2](/pt/docs/guides/releases/).


<span id="un-contrato-común-con-capacidades-por-framework"></span>

<span class="section-anchor" id="section-1"></span>

## Um contrato comum com capacidades por framework

Cada subpath `wu-framework/adapters/<framework>` exporta `register` e utilitários próprios. Importe o adaptador que você realmente usa. `wu-framework/adapters` reúne aliases como `registerReact`, `registerVue` e `createVueUseWuAI`; os objetos `wuReact`, `wuVue` e equivalentes agrupam as mesmas funções, e seus exports default são essa mesma família de utilitários.

Um registro `true` indica que o lifecycle foi definido ou que a montagem standalone terminou. `register()` aguarda essa montagem e rejeita se ela falhar. Em um shell, registre pelo entrypoint da microapp e aguarde `wu.mount`; os lifecycles dos adapters são assíncronos.

As factories de hooks são criadas fora do render e usadas dentro do componente correspondente. Imports de `Card`, `Root` e outros componentes de exemplo representam módulos da sua aplicação, já compilados pelo framework. Cada entrada especifica sua limpeza e contrato no `4.0.0`.

Os hooks de eventos e store resolvem a facade da app montada. Só usam o runtime global fora de uma montagem WU. `getWuInstance()` continua retornando o host, e os helpers de IA continuam usando seu `wu.ai`. Consulte [integrações](/pt/docs/framework/integrations/) e [permissões de composição](/pt/docs/framework/api-core/).

<span class="section-anchor" id="section-2"></span>

## loadAdapter

Carrega e memoriza o módulo de um adaptador pelo nome.

`loadAdapter(name): Promise<AdapterModule>`

- **Parâmetros:** Um dos ADAPTER_NAMES; nomes em minúsculas.
- **Retorno:** Objeto do adapter (`wuReact`, `wuVue` ou equivalente); compartilha a promessa de uma carga em andamento.
- **Erros:** Nome desconhecido ou import malsucedido rejeitam a promessa. Um carregamento malsucedido libera sua promessa para permitir uma nova tentativa.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** O módulo importado permanece no cache do processo.

```js
import { loadAdapter } from 'wu-framework/adapters';
const { register } = await loadAdapter('react');
```

Referência: `src/adapters/index.js`.

<span class="section-anchor" id="section-3"></span>

## ADAPTER_NAMES

Enumera os adaptadores carregáveis a partir do barrel.

`ADAPTER_NAMES: readonly string[]`

- **Parâmetros:** Constante congelada.
- **Retorno:** Lista de nomes.
- **Erros:** Leitura sem efeitos.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Não exige limpeza.

```js
import { ADAPTER_NAMES } from 'wu-framework/adapters';
console.log(ADAPTER_NAMES);
```

Referência: `src/adapters/index.js`.

<span class="section-anchor" id="section-4"></span>

## getWuInstance

Procura WU na janela atual e em parent e top acessíveis.

`getWuInstance(): WuCore | null`

- **Parâmetros:** Exportado por shared e pelos adaptadores.
- **Retorno:** Instância encontrada ou null.
- **Erros:** Captura acessos cross-origin a parent/top; não lança por causa deles.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Não cria inscrições.

```js
import { getWuInstance } from 'wu-framework/adapters/shared';
const wu = getWuInstance();
```

Referência: `src/adapters/shared.js`.

<span class="section-anchor" id="section-5"></span>

## waitForWu

Aguarda uma instância global com eventos ready e sondagem.

`waitForWu(timeout?): Promise<WuCore | null>`

- **Parâmetros:** Tempo em ms, 5000 por padrão.
- **Retorno:** Instância encontrada; um evento ready externo sem instância pode resolver para null.
- **Erros:** Rejeita ao esgotar o timeout; precisa de window.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** O helper remove os listeners e o temporizador ao resolver ou rejeitar.

```js
import { waitForWu } from 'wu-framework/adapters/shared';
const wu = await waitForWu(3000);
if (!wu) throw new Error('No hay runtime disponible');
```

Referência: `src/adapters/shared.js`.

<span class="section-anchor" id="section-6"></span>

## createWuAdapter

Constrói um adaptador personalizado com estado de montagem e props por aplicação.

`createWuAdapter(config): register`

- **Parâmetros:** mount e unmount obrigatórios; name, ensure, update, hydrate, defineTimeout opcionais. A função resultante recebe appName, Component, options.
- **Retorno:** Função assíncrona de registro que retorna boolean.
- **Erros:** Lança se mount/unmount estiverem ausentes; ensure:false produz false.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { createWuAdapter } from 'wu-framework/adapters/shared';
const register = createWuAdapter({
  mount(container, { Component, props }) { return Component(container, props); },
  unmount(_container, { instance }) { instance?.dispose?.(); },
});
await register('plain', (container) => {
  container.textContent = 'Hola';
  return { dispose() { container.replaceChildren(); } };
}, { standalone: false });
```

Não inclui uma política própria de permissões. O container e o ciclo de vida vêm do WU.

Referência: `src/adapters/shared.js`.

<span class="section-anchor" id="section-7"></span>

## react.register

Registra uma aplicação React por meio dos callbacks que o WU entende.

`register(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** strictMode true, props, onMount/onUnmount, standalone true, standaloneContainer #root, runtime:{React,ReactDOM} opcional.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/react';
import React from 'react';
import * as ReactDOM from 'react-dom/client';
await register('card', Card, { runtime: { React, ReactDOM }, props: { count: 1 }, standalone: false });
```

React deve usar createRoot; para hidratação, precisa de hydrateRoot na mesma instância.

Referência: `src/adapters/react/index.js`.

<span class="section-anchor" id="section-8"></span>

## vue.register

Registra uma aplicação Vue por meio dos callbacks que o WU entende.

`register(appName, RootComponent, options?): Promise<boolean>`

- **Parâmetros:** props, setup(app), onMount/onUnmount, standalone true, standaloneContainer #app.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/vue';
await register('card', Card, { props: { count: 1 }, standalone: false });
```

Vue atualiza as props da instância filha montada ou hidratada por um wrapper reativo, preservando keep-alive.

Referência: `src/adapters/vue/index.js`.

<span class="section-anchor" id="section-9"></span>

## angular.register

Registra uma aplicação Angular por meio dos callbacks que o WU entende.

`register(appName, AppModule, options?): Promise<boolean>`

- **Parâmetros:** platformFactory, providers, rootSelector app-root, standalone e callbacks.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/angular';
await register('card', AppModule, { rootSelector: 'card-root', standalone: false });
```

Para componentes standalone, use registerStandalone. Esse registro cria e destrói a plataforma e o módulo Angular.

Referência: `src/adapters/angular/index.js`.

<span class="section-anchor" id="section-10"></span>

## svelte.register

Registra uma aplicação Svelte por meio dos callbacks que o WU entende.

`register(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** props, context Map, intro false, standalone true, standaloneContainer #app e callbacks.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/svelte';
await register('card', Card, { props: { count: 1 }, standalone: false });
```

Esse registro usa o construtor, $set e $destroy do modelo Svelte 4. Use registerSvelte5 para a API moderna.

Referência: `src/adapters/svelte/index.js`.

<span class="section-anchor" id="section-11"></span>

## preact.register

Registra uma aplicação Preact por meio dos callbacks que o WU entende.

`register(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** props, callbacks, standalone true e standaloneContainer #app.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/preact';
await register('card', Card, { props: { count: 1 }, standalone: false });
```

Acrescenta wuAppName e wuInstance às props; update renderiza novamente com as props mescladas.

Referência: `src/adapters/preact/index.js`.

<span class="section-anchor" id="section-12"></span>

## solid.register

Registra uma aplicação Solid por meio dos callbacks que o WU entende.

`register(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** props, callbacks, standalone true e standaloneContainer #root.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/solid';
await register('card', Card, { props: { count: 1 }, standalone: false });
```

O registro exige solid-js/web. Não pressupõe o mesmo contrato update/hydrate de React.

Referência: `src/adapters/solid/index.js`.

<span class="section-anchor" id="section-13"></span>

## lit.register

Registra uma aplicação Lit por meio dos callbacks que o WU entende.

`register(appName, ElementClass, options?): Promise<boolean>`

- **Parâmetros:** tagName, properties, callbacks, standalone true e standaloneContainer #root.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/lit';
await register('card', CardElement, { tagName: 'demo-card', properties: { count: 1 }, standalone: false });
```

O custom element permanece em customElements após a desmontagem: o registro global não pode ser desfeito.

Referência: `src/adapters/lit/index.js`.

<span class="section-anchor" id="section-14"></span>

## vanilla.register

Registra uma aplicação vanilla por meio dos callbacks que o WU entende.

`register(appName, config, options?): Promise<boolean>`

- **Parâmetros:** config.render obrigatório, init/destroy/state opcionais; options do adaptador compartilhado.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/vanilla';
await register('card', {
  state: { count: 1 },
  render(container, state) { container.textContent = String(state.count); },
}, { standalone: false });
```

Seu render controla o conteúdo do contêiner e seu destroy libera os recursos externos.

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-15"></span>

## alpine.register

Registra uma aplicação Alpine por meio dos callbacks que o WU entende.

`register(appName, appConfig, options?): Promise<boolean>`

- **Parâmetros:** template e data(); runtime Alpine e dataName podem estar em config ou options; standalone/callbacks.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/alpine';
await register('card', {
  template: '<section x-data="__WU_ALPINE_DATA__"><b x-text="count"></b></section>',
  data: () => ({ count: 1 }),
}, { runtime: Alpine, standalone: false });
```

Sem runtime Alpine, insere HTML e avisa; um registro true não certifica que os atributos Alpine funcionem.

Referência: `src/adapters/alpine/index.js`.

<span class="section-anchor" id="section-16"></span>

## qwik.register

Registra uma aplicação Qwik por meio dos callbacks que o WU entende.

`register(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** props e runtime; o runtime pode ser Qwik 1 ou Qwik 2. Não aceita `base`, `createProps`, `loadQwikLoader` nem opções standalone.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/qwik';
await register('card', Card, { props: { count: 1 } });
```

O adapter prefere `@qwik.dev/core`, depois `@builder.io/qwik`; carrega o qwikloader correspondente à versão do runtime. A prop `wu` usa `noSerialize` e contém a facade da app.

Referência: `src/adapters/qwik/index.js`.

<span class="section-anchor" id="section-17"></span>

## stencil.register

Registra uma aplicação Stencil por meio dos callbacks que o WU entende.

`register(appName, tagName, options?): Promise<boolean>`

- **Parâmetros:** props para valores JavaScript, attributes para strings, callbacks e standalone.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/stencil';
await register('card', 'demo-card', { props: { count: 1 }, attributes: { label: 'Resumen' }, standalone: false });
```

Registre previamente os custom elements do bundle Stencil; este helper cria a tag, mas não carrega sua definição.

Referência: `src/adapters/stencil/index.js`.

<span class="section-anchor" id="section-18"></span>

## htmx.register

Registra uma aplicação HTMX por meio dos callbacks que o WU entende.

`register(appName, config, options?): Promise<boolean>`

- **Parâmetros:** template obrigatório; baseUrl, setup(container,htmx); runtime e opções standalone/callbacks.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/htmx';
await register('card', {
  template: '<button hx-get="/fragment">Actualizar</button>',
  baseUrl: '/api',
}, { runtime: htmx, standalone: false });
```

Reescreve caminhos hx-* que começam com /, concatenando baseUrl. Sem htmx, insere HTML sem ativar solicitações. setup pode retornar cleanup.

Referência: `src/adapters/htmx/index.js`.

<span class="section-anchor" id="section-19"></span>

## stimulus.register

Registra uma aplicação Stimulus por meio dos callbacks que o WU entende.

`register(appName, config, options?): Promise<boolean>`

- **Parâmetros:** template e mapa controllers não vazio; callbacks e standalone.
- **Retorno:** true se define o lifecycle ou realiza o fallback standalone; false quando não consegue concluir o registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { register } from 'wu-framework/adapters/stimulus';
await register('card', {
  template: '<section data-controller="counter"></section>',
  controllers: { counter: CounterController },
}, { standalone: false });
```

Cria uma Application de Stimulus para a subárvore e a interrompe ao desmontar.

Referência: `src/adapters/stimulus/index.js`.

<span class="section-anchor" id="section-20"></span>

## angular.registerStandalone

Monta um componente standalone de Angular com um host dentro do contêiner do WU.

`registerStandalone(appName, RootComponent, options?): Promise<boolean>`

- **Parâmetros:** appConfig, createApplication, createComponent, provideZoneChangeDetection, callbacks e standalone.
- **Retorno:** Boolean de registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { registerStandalone } from 'wu-framework/adapters/angular';
import { createApplication } from '@angular/platform-browser';
import { createComponent } from '@angular/core';
await registerStandalone('card', Card, { createApplication, createComponent, standalone: false });
```

As props iniciais e `wu.update()` são aplicadas aos inputs da instância Angular.

Referência: `src/adapters/angular/index.js`.

<span class="section-anchor" id="section-21"></span>

## angular.registerElement

Expõe um componente Angular por meio de Angular Elements.

`registerElement(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** elementTag, appConfig, callbacks, standalone e standaloneContainer.
- **Retorno:** Boolean de registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { registerElement } from 'wu-framework/adapters/angular';
await registerElement('card', Card, { elementTag: 'angular-card', standalone: false });
```

Exige @angular/elements. Remover o elemento não cancela o registro de seu construtor global.

Referência: `src/adapters/angular/index.js`.

<span class="section-anchor" id="section-22"></span>

## svelte.registerSvelte5

Usa mount/unmount de Svelte 5, com fallback para a API anterior de componentes.

`registerSvelte5(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** props, onMount, onUnmount e opções standalone. Não aceita `createProps`.
- **Retorno:** Boolean de registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { registerSvelte5 } from 'wu-framework/adapters/svelte';
await registerSvelte5('card', Card, { props: { count: 1 }, standalone: false });
```

`registerSvelte5` registra mount/unmount e não oferece um slot `update`. Use um store compartilhado para dados vivos; não espere que `wu.update()` altere as props do componente registrado por essa função.

Referência: `src/adapters/svelte/index.js`.

<span class="section-anchor" id="section-23"></span>

## preact.registerCompat

Renderiza com preact/compat e recorre ao adaptador Preact quando não consegue importá-lo.

`registerCompat(appName, Component, options?): Promise<boolean>`

- **Parâmetros:** props, callbacks e standalone.
- **Retorno:** Boolean de registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { registerCompat } from 'wu-framework/adapters/preact';
await registerCompat('card', Card, { standalone: false });
```

O caminho compat registra mount/unmount; não equivale ao canal update de register normal.

Referência: `src/adapters/preact/index.js`.

<span class="section-anchor" id="section-24"></span>

## lit.registerWebComponent

Reutiliza o registro Lit para uma classe HTMLElement sem dependência de Lit.

`registerWebComponent(appName, ElementClass, options?): Promise<boolean>`

- **Parâmetros:** Classe custom element e as mesmas options de register Lit.
- **Retorno:** Boolean de registro.
- **Erros:** Um registro pode retornar false se o WU ou o framework não estiverem disponíveis; também captura erros do renderer durante mount.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Desmonte por meio de wu.unmount(appName) para executar o cleanup do framework; guarde e cancele suas próprias inscrições.

```js
import { registerWebComponent } from 'wu-framework/adapters/lit';
class Card extends HTMLElement { connectedCallback() { this.textContent = 'Hola'; } }
await registerWebComponent('card', Card, { tagName: 'plain-card', standalone: false });
```

Referência: `src/adapters/lit/index.js`.

<span class="section-anchor" id="section-25"></span>

## react.createUseWuEvents

Cria um hook de eventos vinculado ao ciclo de vida do componente.

`createUseWuEvents(React): () => EventsHelper`

- **Parâmetros:** Namespace React com os hooks exigidos. O helper retorna emit, on e once.
- **Retorno:** Hook que retorna funções de publicação e inscrição.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** As inscrições criadas com on são removidas ao desmontar; guarde também o disposer de once se ele puder ficar pendente.

```js
import React from 'react';
import { createUseWuEvents } from 'wu-framework/adapters/react';
const useWuEvents = createUseWuEvents(React);
function View() {
  const events = useWuEvents();
  return null;
}
```

Referência: `src/adapters/react/index.js`.

<span class="section-anchor" id="section-26"></span>

## react.createUseWuStore

Cria um hook que reflete um caminho do store no estado do componente.

`createUseWuStore(React): (namespace?) => StoreHelper`

- **Parâmetros:** Namespace de hooks; o hook aceita um prefixo de estado, vazio para a raiz.
- **Retorno:** Objeto {state,setState,getState}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import React from 'react';
import { createUseWuStore } from 'wu-framework/adapters/react';
const useWuStore = createUseWuStore(React);
function View() {
  const { state, setState } = useWuStore('cart');
  return null;
}
```

Referência: `src/adapters/react/index.js`.

<span class="section-anchor" id="section-27"></span>

## react.createWuSlot

Cria um componente que hospeda uma app WU por nome e URL.

`createWuSlot(React): WuSlotComponent`

- **Parâmetros:** Nome do framework e hooks; props name, url, appName, fallback e callbacks.
- **Retorno:** Componente para renderizar um slot.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import React from 'react';
import { createWuSlot } from 'wu-framework/adapters/react';
const WuSlot = createWuSlot(React);
const element = React.createElement(WuSlot, { name: 'card', url: '/apps/card' });
```

Referência: `src/adapters/react/index.js`.

<span class="section-anchor" id="section-28"></span>

## preact.createUseWuEvents

Cria um hook de eventos vinculado ao ciclo de vida do componente.

`createUseWuEvents(hooks): () => EventsHelper`

- **Parâmetros:** Namespace hooks com os hooks exigidos. O helper retorna emit, on e once.
- **Retorno:** Hook que retorna funções de publicação e inscrição.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** As inscrições criadas com on são removidas ao desmontar; guarde também o disposer de once se ele puder ficar pendente.

```js
import * as hooks from 'preact/hooks';
import { createUseWuEvents } from 'wu-framework/adapters/preact';
const useWuEvents = createUseWuEvents(hooks);
function View() {
  const events = useWuEvents();
  return null;
}
```

Referência: `src/adapters/preact/index.js`.

<span class="section-anchor" id="section-29"></span>

## preact.createUseWuStore

Cria um hook que reflete um caminho do store no estado do componente.

`createUseWuStore(hooks): (namespace?) => StoreHelper`

- **Parâmetros:** Namespace de hooks; o hook aceita um prefixo de estado, vazio para a raiz.
- **Retorno:** Objeto {state,setState,getState}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import * as hooks from 'preact/hooks';
import { createUseWuStore } from 'wu-framework/adapters/preact';
const useWuStore = createUseWuStore(hooks);
function View() {
  const { state, setState } = useWuStore('cart');
  return null;
}
```

Referência: `src/adapters/preact/index.js`.

<span class="section-anchor" id="section-30"></span>

## preact.createWuSlot

Cria um componente que hospeda uma app WU por nome e URL.

`createWuSlot(h, hooks?): WuSlotComponent`

- **Parâmetros:** Função h de Preact e objeto de hooks useState/useEffect/useRef. Sem hooks, retorna uma versão básica com menos comportamento.
- **Retorno:** Componente para renderizar um slot.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { h } from 'preact';
import * as hooks from 'preact/hooks';
import { createWuSlot } from 'wu-framework/adapters/preact';
const WuSlot = createWuSlot(h, hooks);
```

Referência: `src/adapters/preact/index.js`.

<span class="section-anchor" id="section-31"></span>

## vue.useWuEvents

Fornece utilitários de eventos e uma limpeza explícita.

`useWuEvents(): EventsHelper`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {emit,on,once,off,cleanup}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Chame cleanup a partir de onUnmounted e guarde os canceladores de once quando necessário.

```js
import { useWuEvents } from 'wu-framework/adapters/vue';
import { onUnmounted } from 'vue';
const events = useWuEvents();
events.on('cart:changed', console.log);
onUnmounted(events.cleanup);
```

Referência: `src/adapters/vue/index.js`.

<span class="section-anchor" id="section-32"></span>

## vue.useWuStore

Reflete um caminho do store em um ref de Vue quando o adaptador tem o runtime disponível.

`useWuStore(namespace?): StoreHelper`

- **Parâmetros:** Namespace opcional.
- **Retorno:** {state,setState,getState,cleanup}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Chame cleanup ao desmontar.

```js
import * as Vue from 'vue';
import { useWuStore, wuVuePlugin } from 'wu-framework/adapters/vue';
app.use(wuVuePlugin, { Vue });
const cart = useWuStore('cart');
Vue.onUnmounted(cart.cleanup);
```

O runtime Vue deve estar configurado; não interpreta padrões namespace.* como observação de descendentes arbitrários.

Referência: `src/adapters/vue/index.js`.

<span class="section-anchor" id="section-33"></span>

## vue.wuVuePlugin

Instala WuSlot, utilitários globais e a instância de Vue usada pelo adaptador.

`app.use(wuVuePlugin, options?): app`

- **Parâmetros:** options.Vue permite passar o namespace Vue do host.
- **Retorno:** O resultado de app.use de Vue.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** O host desmonta a aplicação Vue; limpe os listeners próprios de seus componentes.

```js
import * as Vue from 'vue';
import { wuVuePlugin } from 'wu-framework/adapters/vue';
const app = Vue.createApp(Root);
app.use(wuVuePlugin, { Vue });
```

Referência: `src/adapters/vue/index.js`.

<span class="section-anchor" id="section-34"></span>

## vue.WuSlot

Expõe o componente Vue que monta uma aplicação WU.

`WuSlot: Vue component options`

- **Parâmetros:** Props name, url, appName e fallbackText; runtime Vue disponível.
- **Retorno:** Objeto de definição de componente.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { WuSlot } from 'wu-framework/adapters/vue';
const components = { WuSlot };
```

WuSlot opera no ciclo de vida de Vue; não representa o WuApp do subpath Next.

Referência: `src/adapters/vue/index.js`.

<span class="section-anchor" id="section-35"></span>

## svelte.createWuStore

Cria um store compatível com subscribe de Svelte conectado ao WU.

`createWuStore(namespace?): SvelteStore`

- **Parâmetros:** Prefixo do caminho; vazio observa a raiz.
- **Retorno:** {subscribe,set,get,update}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Ao cancelar o último subscriber, a inscrição WU é removida; uma nova inscrição volta a conectá-la.

```js
import { createWuStore } from 'wu-framework/adapters/svelte';
const cart = createWuStore('cart');
const stop = cart.subscribe(value => console.log(value));
stop();
```

Referência: `src/adapters/svelte/index.js`.

<span class="section-anchor" id="section-36"></span>

## svelte.createWuEventStore

Expõe o último evento como um store que aceita inscrições.

`createWuEventStore(eventPattern): EventStore`

- **Parâmetros:** Padrão reconhecido pelo barramento de eventos.
- **Retorno:** {subscribe,emit}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Cancelar o último subscriber desconecta o listener WU.

```js
import { createWuEventStore } from 'wu-framework/adapters/svelte';
const changes = createWuEventStore('cart:changed');
const stop = changes.subscribe(console.log);
stop();
```

Referência: `src/adapters/svelte/index.js`.

<span class="section-anchor" id="section-37"></span>

## svelte.useWuEvents

Fornece emit/on/once/off com limpeza manual para componentes Svelte.

`useWuEvents(): EventsHelper`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {emit,on,once,off,cleanup}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Invoque cleanup a partir de onDestroy; a função não registra esse lifecycle por você.

```js
import { onDestroy } from 'svelte';
import { useWuEvents } from 'wu-framework/adapters/svelte';
const events = useWuEvents();
onDestroy(events.cleanup);
```

Referência: `src/adapters/svelte/index.js`.

<span class="section-anchor" id="section-38"></span>

## svelte.createWuSlotConfig

Retorna um template e uma configuração para construir um slot Svelte.

`createWuSlotConfig(): SlotConfig`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {props,template,createInstance}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { createWuSlotConfig } from 'wu-framework/adapters/svelte';
const config = createWuSlotConfig();
console.log(config.props, config.template);
```

É uma configuração com texto-fonte de componente; não é um componente compilado nem uma função que renderiza sozinha.

Referência: `src/adapters/svelte/index.js`.

<span class="section-anchor" id="section-39"></span>

## solid.createWuStore

Conecta um caminho do WU a um signal de Solid.

`createWuStore(namespace?): [accessor, setter]`

- **Parâmetros:** Namespace; deve ser executado em um owner de Solid com runtime disponível.
- **Retorno:** Tupla de accessor de estado e função setWuState(path,value).
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Registra o unsubscribe no onCleanup do owner Solid.

```js
import { createWuStore } from 'wu-framework/adapters/solid';
function View() {
  const [cart, setCart] = createWuStore('cart');
  setCart('count', 1);
  return null;
}
```

Referência: `src/adapters/solid/index.js`.

<span class="section-anchor" id="section-40"></span>

## solid.createWuEvent

Reflete o último evento em um signal.

`createWuEvent(pattern): accessor`

- **Parâmetros:** Padrão do barramento.
- **Retorno:** Accessor que retorna o evento ou null inicialmente.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Registra unsubscribe por meio de onCleanup.

```js
import { createWuEvent } from 'wu-framework/adapters/solid';
function View() {
  const latest = createWuEvent('cart:changed');
  return null;
}
```

Referência: `src/adapters/solid/index.js`.

<span class="section-anchor" id="section-41"></span>

## solid.useWuEvents

Fornece utilitários de eventos dentro de um owner Solid.

`useWuEvents(): EventsHelper`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {emit,on,once,off}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { useWuEvents } from 'wu-framework/adapters/solid';
function View() { const events = useWuEvents(); return null; }
```

Referência: `src/adapters/solid/index.js`.

<span class="section-anchor" id="section-42"></span>

## solid.createWuContext

Cria um contexto de Solid para compartilhar a instância WU.

`createWuContext(): { WuProvider, useWu, WuContext }`

- **Parâmetros:** Sem argumentos; precisa do runtime Solid disponível.
- **Retorno:** Provider, hook e contexto.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** O contexto não abre transporte nem recursos persistentes.

```js
import { createWuContext } from 'wu-framework/adapters/solid';
const { WuProvider, useWu } = createWuContext();
```

Referência: `src/adapters/solid/index.js`.

<span class="section-anchor" id="section-43"></span>

## solid.createWuSlot

Cria o componente de slot de Solid.

`createWuSlot(): WuSlotComponent`

- **Parâmetros:** Sem argumentos; o componente recebe name, url, appName, fallback e callbacks.
- **Retorno:** Função de componente.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { createWuSlot } from 'wu-framework/adapters/solid';
const WuSlot = createWuSlot();
```

Referência: `src/adapters/solid/index.js`.

<span class="section-anchor" id="section-44"></span>

## angular.createWuService

Fornece funções de eventos e estado para um serviço Angular.

`createWuService(): WuService`

- **Parâmetros:** Sem argumentos.
- **Retorno:** emit,on,once,off,getState,setState,onStateChange,destroy e getter wu.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Chame destroy a partir de ngOnDestroy; as inscrições de once devem ser canceladas se continuarem pendentes.

```js
import { createWuService } from 'wu-framework/adapters/angular';
const service = createWuService();
service.on('cart:changed', console.log);
service.destroy();
```

`getState` converte valores falsy em null. Para preservar `false`, `0` ou uma string vazia dentro da app, use `inject(WuAppScope).wu.store.get(path)` em um contexto DI. `service.wu` retorna o host e não deve ser usado para contornar grants.

Referência: `src/adapters/angular/index.js`.

<span class="section-anchor" id="section-45"></span>

## angular.createWuSlotComponent

Retorna metadados e métodos base para implementar um slot Angular.

`createWuSlotComponent(): ComponentConfig`

- **Parâmetros:** Sem argumentos.
- **Retorno:** Objeto selector, template, styles e methods.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { createWuSlotComponent } from 'wu-framework/adapters/angular';
const config = createWuSlotComponent();
console.log(config.selector, config.methods);
```

Não retorna uma classe já decorada por @Component. Você deve integrar os metadados, ViewChild e métodos em uma classe Angular.

Referência: `src/adapters/angular/index.js`.

<span class="section-anchor" id="section-46"></span>

## angular.getWuSlotModuleConfig

Descreve os nomes do módulo que hospeda um slot Angular.

`getWuSlotModuleConfig(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {imports,declarations,exports} com nomes string.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { getWuSlotModuleConfig } from 'wu-framework/adapters/angular';
console.log(getWuSlotModuleConfig());
```

São nomes descritivos; não são referências de classes para passar diretamente a @NgModule.

Referência: `src/adapters/angular/index.js`.

<span class="section-anchor" id="section-47"></span>

## lit.createWuSlotElement

Cria uma classe Lit que hospeda um slot WU.

`createWuSlotElement(LitElement, html, css?): ElementClass`

- **Parâmetros:** Primitivas da mesma instância Lit do host.
- **Retorno:** Classe de custom element para registrar.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { LitElement, html, css } from 'lit';
import { createWuSlotElement } from 'wu-framework/adapters/lit';
customElements.define('demo-wu-slot', createWuSlotElement(LitElement, html, css));
```

O core monta por seletor de documento; verifique a estratégia DOM do slot e a versão antes de hospedá-lo dentro de outro shadow root.

Referência: `src/adapters/lit/index.js`.

<span class="section-anchor" id="section-48"></span>

## lit.WuMixin

Acrescenta wuEmit/wuOn/wuOnce e acesso ao store a uma classe de elemento.

`WuMixin(Base): subclass`

- **Parâmetros:** Classe base HTMLElement ou LitElement.
- **Retorno:** Subclasse com métodos WU e cleanup em disconnectedCallback.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Chame super.disconnectedCallback ao sobrescrevê-lo para executar a limpeza do mixin.

```js
import { LitElement } from 'lit';
import { WuMixin } from 'wu-framework/adapters/lit';
class Card extends WuMixin(LitElement) {
  connectedCallback() { super.connectedCallback(); this.wuOn('cart:changed', console.log); }
}
```

Referência: `src/adapters/lit/index.js`.

<span class="section-anchor" id="section-49"></span>

## lit.wuProperty

Conecta uma propriedade do elemento a um caminho do store.

`wuProperty(storePath): legacy property decorator`

- **Parâmetros:** Caminho string; decorador legacy aplicado ao prototype e ao nome da propriedade.
- **Retorno:** Função decoradora que instala getter/setter e hooks de conexão.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { wuProperty } from 'wu-framework/adapters/lit';
wuProperty('cart.count')(Card.prototype, 'count');
```

Não é um decorador Stage 3 genérico. O setter grava no WU, e a inscrição sincroniza o valor local.

Referência: `src/adapters/lit/index.js`.

<span class="section-anchor" id="section-50"></span>

## lit.createSimpleElement

Constrói um custom element com template, estilos e callbacks.

`createSimpleElement(config): ElementClass`

- **Parâmetros:** name opcional, template string ou função, styles e shadow true por padrão.
- **Retorno:** Classe HTMLElement; name pode registrar o custom element.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { createSimpleElement } from 'wu-framework/adapters/lit';
const Card = createSimpleElement({ template: () => '<p>Hola</p>', styles: ':host{display:block}' });
customElements.define('simple-card', Card);
```

Template é inserido como HTML sem sanitização; controle seu conteúdo.

Referência: `src/adapters/lit/index.js`.

<span class="section-anchor" id="section-51"></span>

## vanilla.registerClass

Monta uma classe de aplicação com um contêiner próprio.

`registerClass(appName, AppClass, options?): Promise<boolean>`

- **Parâmetros:** constructorArgs, callbacks e standalone.
- **Retorno:** Boolean de registro.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { registerClass } from 'wu-framework/adapters/vanilla';
class Card { constructor(container) { this.container = container; } render() { this.container.textContent = 'Hola'; } destroy() {} }
await registerClass('card', Card, { standalone: false });
```

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-52"></span>

## vanilla.registerTemplate

Registra um template HTML com dados, estilos e scripts opcionais.

`registerTemplate(appName, template, options?): Promise<boolean>`

- **Parâmetros:** template string; data, scripts, styles, callbacks e standalone.
- **Retorno:** Boolean de registro.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { registerTemplate } from 'wu-framework/adapters/vanilla';
await registerTemplate('card', '<h2>Resumen</h2>', { styles: ['h2{margin:0}'], standalone: false });
```

Os scripts são código do host, e o HTML não é sanitizado. Não use conteúdo não confiável como template.

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-53"></span>

## vanilla.createComponent

Cria um componente com estado local e renderização por template.

`createComponent(config): VanillaComponent`

- **Parâmetros:** state, template(state), actions, onInit e onDestroy.
- **Retorno:** {state,init,render,destroy,setState,getState}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Libera as inscrições ao desmontar o componente proprietário.

```js
import { createComponent, register } from 'wu-framework/adapters/vanilla';
const component = createComponent({ state: { count: 1 }, template: state => `<b>${Number(state.count)}</b>` });
await register('card', component, { standalone: false });
```

setState mescla o estado local e renderiza o HTML novamente; não substitui wu.store.

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-54"></span>

## vanilla.useWuEvents

Agrupa publicação e inscrições sem depender de um framework UI.

`useWuEvents(scope?): EventsHelper`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {emit,on,once,off,cleanup}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Chame cleanup ao desmontar e guarde o cancelador de once se ele ficar pendente.

```js
import { useWuEvents } from 'wu-framework/adapters/vanilla';
const events = useWuEvents();
events.on('cart:changed', console.log);
events.cleanup();
```

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-55"></span>

## vanilla.useWuStore

Adiciona prefixos aos caminhos de leitura, gravação e escuta do store.

`useWuStore(namespace?, scope?): StoreHelper`

- **Parâmetros:** Namespace opcional.
- **Retorno:** {get,set,onChange}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Cada onChange retorna seu próprio unsubscribe; o helper não os acumula.

```js
import { useWuStore } from 'wu-framework/adapters/vanilla';
const cart = useWuStore('cart');
cart.set('count', 1);
const stop = cart.onChange('count', console.log);
stop();
```

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-56"></span>

## vanilla.createWuSlot

Insere um contêiner e solicita a montagem de uma app WU nele.

`createWuSlot(target, props): SlotHandle`

- **Parâmetros:** target elemento; props name,url,fallbackText,onLoad,onError.
- **Retorno:** {container,destroy}.
- **Erros:** Precisa do runtime do framework e de uma instância WU acessível; controle a disponibilidade antes de executar operações.
- **Permissões:** Hooks de eventos/store usam a facade da app; registro e slots usam o host. Solicite os recursos no manifest e conceda-os no shell.
- **Limpeza:** Chame destroy ao remover o host.

```js
import { createWuSlot } from 'wu-framework/adapters/vanilla';
const slot = createWuSlot(document.querySelector('#host'), { name: 'card', url: '/apps/card' });
slot.destroy();
```

A montagem é assíncrona internamente; o handle não é uma promessa de app montada.

Referência: `src/adapters/vanilla/index.js`.

<span class="section-anchor" id="section-57"></span>

## react.createUseWuAI

Conecta a interface React a uma conversa de IA.

`createUseWuAI(React): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Hook useWuAI(options) com messages,isStreaming,error,send,sendSync,abort,clear.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { createUseWuAI } from 'wu-framework/adapters/react';
import React from 'react';
const useWuAI = createUseWuAI(React);
```

Crie o hook uma única vez fora do componente; use-o dentro do render. send usa streaming, e sendSync solicita uma resposta completa.

Referência: `src/adapters/react/index.js`.

<span class="section-anchor" id="section-58"></span>

## preact.createUseWuAI

Conecta a interface Preact a uma conversa de IA.

`createUseWuAI(hooks): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Hook useWuAI(options) com estado de mensagens e funções send/clear.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { createUseWuAI } from 'wu-framework/adapters/preact';
import * as hooks from 'preact/hooks';
const useWuAI = createUseWuAI(hooks);
```

Use hooks da mesma instância Preact que renderiza o componente.

Referência: `src/adapters/preact/ai.js`.

<span class="section-anchor" id="section-59"></span>

## vue.createUseWuAI

Conecta a interface Vue a uma conversa de IA.

`createUseWuAI(Vue): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Composable com refs messages,isStreaming,error e send/clear.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { createUseWuAI } from 'wu-framework/adapters/vue';
import * as Vue from 'vue';
const useWuAI = createUseWuAI(Vue);
const chat = useWuAI({ namespace: 'help' });
```

Esta variante usa refs Vue.

Referência: `src/adapters/vue/ai.js`.

<span class="section-anchor" id="section-60"></span>

## vue.useWuAI

Conecta a interface Vue a uma conversa de IA.

`useWuAI(options?): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Helper simples com messages,isStreaming,error,send,clear.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { useWuAI } from 'wu-framework/adapters/vue';
const chat = useWuAI({ namespace: 'help' });
```

Esta variante não cria refs. As propriedades copiadas inicialmente não constituem uma visualização reativa completa do estado interno; prefira createUseWuAI(Vue) em componentes.

Referência: `src/adapters/vue/ai.js`.

<span class="section-anchor" id="section-61"></span>

## svelte.createWuAIStore

Conecta a interface Svelte a uma conversa de IA.

`createWuAIStore(options?): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Store {subscribe,send,clear} cujo valor contém messages,isStreaming,error.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { createWuAIStore } from 'wu-framework/adapters/svelte';
const chat = createWuAIStore({ namespace: 'help' });
const stop = chat.subscribe(console.log);
stop();
```

Cancelar subscribe remove esse observador local; não aborta automaticamente a conversa do provedor.

Referência: `src/adapters/svelte/ai.js`.

<span class="section-anchor" id="section-62"></span>

## angular.createWuAIService

Conecta a interface Angular a uma conversa de IA.

`createWuAIService(options?): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Serviço com getters messages,isStreaming,error e métodos send/clear.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { createWuAIService } from 'wu-framework/adapters/angular';
const chat = createWuAIService({ namespace: 'help' });
```

Não é uma classe decorada Injectable nem um Observable RxJS. Integre suas mudanças ao mecanismo de detecção do host.

Referência: `src/adapters/angular/ai.js`.

<span class="section-anchor" id="section-63"></span>

## solid.createUseWuAI

Conecta a interface Solid a uma conversa de IA.

`createUseWuAI(): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** Factory de helper com accessors messages,isStreaming,error e send/clear.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { createUseWuAI } from 'wu-framework/adapters/solid';
const useWuAI = createUseWuAI();
const chat = useWuAI({ namespace: 'help' });
```

Os accessors leem um objeto comum: a implementação não cria signals Solid. Não presuma invalidação reativa automática.

Referência: `src/adapters/solid/ai.js`.

<span class="section-anchor" id="section-64"></span>

## vanilla.useWuAI

Conecta a interface vanilla a uma conversa de IA.

`useWuAI(options?): helper`

- **Parâmetros:** Runtime solicitado pela factory; o helper aceita um namespace opcional, com default como padrão.
- **Retorno:** {send,clear,getMessages,getError,isStreaming}.
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { useWuAI } from 'wu-framework/adapters/vanilla';
const chat = useWuAI({ namespace: 'help' });
console.log(chat.getMessages());
```

clear esvazia seu histórico local e a conversa associada; atualize a UI após await send.

Referência: `src/adapters/vanilla/ai.js`.

<span class="section-anchor" id="section-65"></span>

## lit.WuAIMixin

Conecta a interface Lit a uma conversa de IA.

`WuAIMixin(Base): helper`

- **Parâmetros:** Classe base do elemento.
- **Retorno:** Subclasse com wuAI,wuAISend(text,options),wuAISetNamespace(ns).
- **Erros:** Verifique a disponibilidade de WU AI; o helper mantém um campo de erro ou retorna null se não estiver disponível.
- **Permissões:** Usa ai.send do runtime global; as ações solicitadas pelo provedor mantêm a política IA configurada pelo host.
- **Limpeza:** Não destrói o coordenador IA global. Aborte explicitamente o namespace do componente quando precisar cancelar solicitações pendentes.

```js
import { WuAIMixin } from 'wu-framework/adapters/lit';
class Card extends WuAIMixin(HTMLElement) {
  connectedCallback() { this.wuAISetNamespace('card'); }
}
```

Não mantém mensagens reativas nem acrescenta um AbortController automaticamente.

Referência: `src/adapters/lit/ai.js`.

<span class="section-anchor" id="section-66"></span>

## qwik.adoptQwikStyles

Copia estilos Qwik para adoptedStyleSheets do root correspondente.

`adoptQwikStyles(container): () => void`

- **Parâmetros:** Container com estilos; precisa de CSSStyleSheet.replaceSync e adoptedStyleSheets.
- **Retorno:** Função de limpeza das folhas e do observador.
- **Erros:** Sem suporte a constructable stylesheets, retorna um cleanup vazio.
- **Permissões:** Opera sobre os estilos do contêiner fornecido.
- **Limpeza:** Chame a função retornada antes de destruir o contêiner.

```js
import { adoptQwikStyles } from 'wu-framework/adapters/qwik';
const release = adoptQwikStyles(container);
release();
```

Referência: `src/adapters/qwik/index.js`.

<span class="section-anchor" id="section-67"></span>

## qwik.ensureQwikLoader

Carrega e deduplica a inicialização do loader Qwik do documento.

`ensureQwikLoader(load?): Promise<boolean>`

- **Parâmetros:** função `load` opcional; por padrão importa `@builder.io/qwik/qwikloader.js`. O registro Qwik passa o loader correspondente ao seu runtime.
- **Retorno:** true para o primeiro carregamento, false se já estava inicializado.
- **Erros:** Rejeita se o módulo loader não puder ser importado. A recuperação de uma promessa malsucedida depende da versão.
- **Permissões:** O loader é código global do host.
- **Limpeza:** Não oferece uma API pública para desfazer a execução do loader.

```js
import { ensureQwikLoader } from 'wu-framework/adapters/qwik';
await ensureQwikLoader();
```

Referência: `src/adapters/qwik/index.js`.

<span class="section-anchor" id="section-68"></span>

## shared.snapshot

Cria uma cópia superficial para ajudar os bindings reativos a detectar mudanças.

`snapshot(value): unknown`

- **Parâmetros:** Array, objeto ou primitivo.
- **Retorno:** Novo array, objeto superficial ou o primitivo original.
- **Erros:** Propaga getters ou erros de propriedades ao copiar um objeto.
- **Permissões:** Não acessa o store por conta própria.
- **Limpeza:** Sem recursos persistentes.

```js
import { snapshot } from 'wu-framework/adapters/shared';
const next = snapshot(wu.store.get('cart'));
```

Não é uma clonagem profunda nem uma validação de dados.

Referência: `src/adapters/shared.js`.

<span id="migrar-hooks-y-stores-a-40"></span>

<span class="section-anchor" id="section-69"></span>

## Migrar hooks e stores para 4.0

Uma emissão sem grant retorna `false`. Inscrever-se sem permissão lança `WU_EVENT_SUBSCRIBE_DENIED`; ler, observar ou escrever no store sem permissão lança `WU_CAPABILITY_DENIED`. O unmount libera listeners da facade. Depois, helpers de eventos avisam e não operam; chamadas de store lançam `WU_APP_SCOPE_REVOKED`.

```js
// App manifest: wu.permissions. Shell registration: grants.
const permissions = ['store.read:cart.count', 'store.write:cart.count', 'events.emit:cart:changed'];
await wu.init({ apps: [{
  name: 'cart', url: '/apps/cart/',
  manifest: { entry: 'assets/cart.js', wu: { permissions } },
  grants: permissions,
}] });
```

Setters de React/Preact/Vue e Solid escrevem no path observado com um valor ou updater: `setState(value)` e `setState(prev => next)`. A forma `setState(path, value)` escreve em um subpath. Sem namespace, use dois argumentos. No Svelte, `set(value)` substitui o valor observado e `update(fn)` aplica o updater conforme o contrato do store.

```jsx
const useWuStore = createUseWuStore(React);
function Counter() {
  const { state, setState } = useWuStore('cart.count');
  return <button onClick={() => setState(value => (value ?? 0) + 1)}>{state ?? 0}</button>;
}
```

Para helpers fora do contexto de um componente, conserve a facade: Vanilla aceita `useWuEvents(scope)` e `useWuStore(namespace, scope)`. `resolveWu(element)` encontra a facade pelo DOM em Lit, Alpine, htmx, Stimulus, Stencil e Qwik; um nó removido mantém seu scope revogado. Angular oferece `WuAppScope` por DI. Props e injections de compatibilidade chamados `wuInstance`, e helpers IA, continuam expondo o host.

Slots passam o elemento contêiner para WU: funcionam dentro de Shadow DOM e com nomes como `cart.v2`. Angular suporta montagem zoneless; só ativa detecção por Zone.js quando Zone.js está carregado. htmx 2 e 4 compartilham `htmx.process()`, mas o código de `setup` deve usar os eventos da sua versão. `baseUrl` cobre `hx-action`, `hx-query` e variantes `data-hx-`, e preserva URLs `//`.

Qwik não oferece montagem standalone: `register` retorna `false` se WU não aparecer em 3 segundos ou se Qwik não puder ser importado. Não registra um slot `update`. A adaptação de listeners do documento para Shadow DOM permanece ativa após desmontar.

<span class="section-anchor" id="section-70"></span>

## shared.resolveWu

`resolveWu(target?): WuAppFacade | WuCore | null`

Aceita um nó DOM, um contexto `{ wu }` ou uma facade. Resolve o scope do target ou do lifecycle síncrono ativo; só fora de ambos recorre ao host global. Conserve-o antes de um `await` se depois trabalhar fora do contexto de render. É exportado por `wu-framework/adapters/shared` e pelos adapters Lit, Vanilla, Alpine, htmx, Stimulus, Stencil e Qwik.