0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2025-01-06 22:10:10 -05:00
astro/.changeset/tall-eyes-vanish.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

52 lines
1.2 KiB
Markdown
Raw Normal View History

---
'astro': minor
---
Integrations can add new `client:` directives through the `astro:config:setup` hook's `addClientDirective()` API. To enable this API, the user needs to set `experimental.customClientDirectives` to `true` in their config.
```js
import { defineConfig } from 'astro/config';
import onClickDirective from 'astro-click-directive';
export default defineConfig({
integrations: [onClickDirective()],
experimental: {
customClientDirectives: true
}
});
```
```js
export default function onClickDirective() {
return {
hooks: {
'astro:config:setup': ({ addClientDirective }) => {
addClientDirective({
name: 'click',
entrypoint: 'astro-click-directive/click.js'
});
},
}
}
}
```
```astro
<Counter client:click />
```
The client directive file (e.g. `astro-click-directive/click.js`) should export a function of type `ClientDirective`:
```ts
import type { ClientDirective } from 'astro'
const clickDirective: ClientDirective = (load, opts, el) => {
window.addEventListener('click', async () => {
const hydrate = await load()
await hydrate()
}, { once: true })
}
export default clickDirective
```