Installation
Copy
npm install artifactuse
Setup
Initialize Artifactuse withsetArtifactuseContext in your layout:
Copy
<!-- +layout.svelte -->
<script>
import { setArtifactuseContext } from 'artifactuse/svelte'
import 'artifactuse/styles'
setArtifactuseContext({
theme: 'dark',
// branding: true, // Set to false to hide "Powered by Artifactuse" (requires license)
})
</script>
<slot />
Syntax Highlighting (Optional)
For code syntax highlighting, add Prism.js:Copy
npm install prismjs
Copy
<!-- +layout.svelte -->
<script>
import Prism from 'prismjs'
import 'prismjs/components/prism-javascript'
import 'prismjs/components/prism-typescript'
import 'prismjs/components/prism-python'
import 'prismjs/themes/prism-tomorrow.css' // or any theme
import { setArtifactuseContext } from 'artifactuse/svelte'
import 'artifactuse/styles'
setArtifactuseContext({ theme: 'dark' })
</script>
<slot />
Components
ArtifactuseAgentMessage
Render AI messages with artifact detection
ArtifactusePanel
Side panel for previews and code
ArtifactusePanelToggle
Toggle button with badge
Quick Reference
Copy
<script>
import {
ArtifactuseAgentMessage,
ArtifactusePanel,
ArtifactusePanelToggle
} from 'artifactuse/svelte'
</script>
<ArtifactuseAgentMessage
content={message.content}
messageId={message.id}
typing={isStreaming}
on:formSubmit={handleFormSubmit}
on:socialCopy={handleSocialCopy}
on:mediaOpen={handleMediaOpen}
/>
<ArtifactusePanel
on:aiRequest={handleAIRequest}
on:save={handleSave}
on:export={handleExport}
/>
<ArtifactusePanelToggle />
Context
getArtifactuseContext
Access Artifactuse state and methods:Copy
<script>
import { getArtifactuseContext } from 'artifactuse/svelte'
const {
// Stores (reactive)
state,
activeArtifact,
artifactCount,
hasArtifacts,
// Methods
processMessage,
openArtifact,
closePanel,
togglePanel,
toggleFullscreen,
setViewMode, // 'preview' | 'code' | 'split'
getPanelUrl,
getTheme,
setTheme,
// Events
on,
off,
} = getArtifactuseContext()
</script>
<button on:click={togglePanel}>
Artifacts ({$artifactCount})
</button>
Events
Copy
<script>
import { getArtifactuseContext } from 'artifactuse/svelte'
import { onMount } from 'svelte'
const { on } = getArtifactuseContext()
onMount(() => {
on('ai:request', async ({ prompt, context }) => {
const response = await yourAI.chat(prompt)
})
on('form:submit', ({ formId, values }) => {
console.log('Form submitted:', values)
})
on('social:copy', ({ platform, text }) => {
console.log('Copied:', platform, text)
})
on('media:open', ({ type, src }) => {
console.log('Media opened:', type, src)
})
})
</script>
Full Example
Copy
<!-- +page.svelte -->
<script>
import {
ArtifactuseAgentMessage,
ArtifactusePanel,
ArtifactusePanelToggle,
getArtifactuseContext
} from 'artifactuse/svelte'
import { onMount } from 'svelte'
// Optional: Prism.js for syntax highlighting
import Prism from 'prismjs'
import 'prismjs/components/prism-javascript'
import 'prismjs/themes/prism-tomorrow.css'
let messages = []
const { on } = getArtifactuseContext()
onMount(() => {
on('form:submit', ({ formId, values }) => {
sendMessage(`Form submitted: ${JSON.stringify(values)}`)
})
})
function handleFormSubmit(event) {
console.log('Form:', event.detail)
}
function handleSocialCopy(event) {
console.log('Copied:', event.detail)
}
function handleMediaOpen(event) {
console.log('Media opened:', event.detail)
}
async function handleAIRequest(event) {
const { prompt, context } = event.detail
const response = await yourAI.chat(prompt)
}
</script>
<div class="app-container">
<div class="chat">
{#each messages as msg (msg.id)}
<ArtifactuseAgentMessage
content={msg.content}
messageId={msg.id}
typing={msg.isStreaming}
on:formSubmit={handleFormSubmit}
on:socialCopy={handleSocialCopy}
on:mediaOpen={handleMediaOpen}
/>
{/each}
<ArtifactusePanelToggle />
</div>
<ArtifactusePanel on:aiRequest={handleAIRequest} />
</div>
<style>
.app-container {
display: flex;
height: 100%;
overflow: hidden;
}
.chat {
flex: 1;
padding: 20px;
min-width: 0;
overflow-y: auto;
}
</style>