Spaces:
Sleeping
Sleeping
interface FeatureAPI { | |
title: string | |
description: string | |
pattern: string | |
} | |
const getPromptFromFeatures = (feats: FeatureAPI[]) => | |
feats.map(({ title, description, pattern }) => `## "${title}": ${description}.\nExample: \`${pattern}\``).join("\n") | |
export const attributes: FeatureAPI[] = [ | |
{ | |
title: "x-data", | |
description: "Declare a new Alpine component and its data for a block of HTML", | |
pattern: | |
`<div x-data="{ open: false }"> | |
... | |
</div>` | |
}, | |
{ | |
title: "x-bind", | |
description: "Dynamically set HTML attributes on an element", | |
pattern: | |
`<div x-bind:class="! open ? 'hidden' : ''"> | |
... | |
</div>` | |
}, | |
{ | |
title: "x-on", | |
description: "Listen for browser events on an element", | |
pattern: | |
`<button x-on:click="open = ! open"> | |
Toggle | |
</button>` | |
}, | |
{ | |
title: "x-text", | |
description: "Set the text content of an element", | |
pattern: | |
`<div> | |
Copyright © | |
<span x-text="new Date().getFullYear()"></span> | |
</div>` | |
}, | |
{ | |
title: "x-html", | |
description: "Set the inner HTML of an element", | |
pattern: | |
`<div x-html="(await axios.get('/some/html/partial')).data"> | |
... | |
</div>` | |
}, | |
{ | |
title: "x-model", | |
description: "Synchronize a piece of data with an input element", | |
pattern: | |
`<div x-data="{ search: '' }"> | |
<input type="text" x-model="search"> | |
Searching for: <span x-text="search"></span> | |
</div>` | |
}, | |
{ | |
title: "x-show", | |
description: "Toggle the visibility of an element", | |
pattern: | |
`<div x-show="open"> | |
... | |
</div>` | |
}, | |
{ | |
title: "x-transition", | |
description: "Transition an element in and out using CSS transitions", | |
pattern: | |
`<div x-show="open" x-transition> | |
... | |
</div>` | |
}, | |
{ | |
title: "x-for", | |
description: "Repeat a block of HTML based on a data set", | |
pattern: | |
`<template x-for="post in posts"> | |
<h2 x-text="post.title"></h2> | |
</template>` | |
}, | |
{ | |
title: "x-if", | |
description: "Conditionally add/remove a block of HTML from the page entirely", | |
pattern: | |
`<template x-if="open"> | |
<div>...</div> | |
</template>` | |
}, | |
{ | |
title: "x-init", | |
description: "Run code when an element is initialized by Alpine", | |
pattern: | |
`<div x-init="date = new Date()"></div>` | |
}, | |
{ | |
title: "x-effect", | |
description: "Execute a script each time one of its dependencies change", | |
pattern: | |
`<div x-effect="console.log('Count is '+count)"></div>` | |
}, | |
{ | |
title: "x-ref", | |
description: "Reference elements directly by their specified keys using the $refs magic property", | |
pattern: | |
`<input type="text" x-ref="content"> | |
<button x-on:click="navigator.clipboard.writeText($refs.content.value)"> | |
Copy | |
</button>` | |
}, | |
{ | |
title: "x-cloak", | |
description: "Hide a block of HTML until after Alpine is finished initializing its contents", | |
pattern: | |
`<div x-cloak> | |
... | |
</div>` | |
}, | |
{ | |
title: "x-ignore", | |
description: "Prevent a block of HTML from being initialized by Alpine", | |
pattern: | |
`<div x-ignore> | |
... | |
</div>` | |
}, | |
] | |
export const attributesPrompt = getPromptFromFeatures(attributes) | |
export const properties: FeatureAPI[] = [ | |
{ | |
title: "$store", | |
description: "Access a global store registered using Alpine.store(...)", | |
pattern: `<h1 x-text="$store.site.title"></h1>` | |
}, | |
{ | |
title: "$el", | |
description: "Reference the current DOM element", | |
pattern:`<div x-init="new Pikaday($el)"></div>` | |
}, | |
{ | |
title: "$dispatch", | |
description: "Dispatch a custom browser event from the current element", | |
pattern: | |
`<div x-on:notify="..."> | |
<button x-on:click="$dispatch('notify')">...</button> | |
</div>` | |
}, | |
{ | |
title: "$watch", | |
description: "Watch a piece of data and run the provided callback anytime it changes", | |
pattern: | |
`<div x-init="$watch('count', value => { | |
console.log('count is ' + value) | |
})">...</div>` | |
}, | |
{ | |
title: "$refs", | |
description: "Reference an element by key (specified using x-ref)", | |
pattern: | |
`<div x-init="$refs.button.remove()"> | |
<button x-ref="button">Remove Me</button> | |
</div>` | |
}, | |
{ | |
title: "$nextTick", | |
description: "Wait until the next \"tick\" (browser paint) to run a bit of code", | |
pattern: | |
`<div | |
x-text="count" | |
x-text="$nextTick(() => {" | |
console.log('count is ' + $el.textContent) | |
}) | |
>...</div>` | |
}, | |
] | |
export const propertiesPrompt = getPromptFromFeatures(properties) | |
export const methods: FeatureAPI[] = [ | |
{ | |
title: "Alpine.data", | |
description: "Reuse a data object and reference it using x-data", | |
pattern: | |
`<div x-data="dropdown"> | |
... | |
</div>` | |
}, | |
{ | |
title: "Alpine.store", | |
description: "Declare a piece of global, reactive, data that can be accessed from anywhere using $store", | |
pattern: | |
`<button @click="$store.notifications.notify('...')"> | |
Notify | |
</button> | |
... | |
Alpine.store('notifications', { | |
items: [], | |
notify(message) { | |
this.items.push(message) | |
} | |
})` | |
}, | |
] | |
export const methodsPrompt = getPromptFromFeatures(methods) | |
export const alpine = "# Alpine.js docs\n"+ attributesPrompt // + propertiesPrompt + methodsPrompt |