Skip to content

Vue

TypeScript Configuration

Add the Web Component types to your TypeScript configuration:

tsconfig.json
{
"compilerOptions": {
"types": [
// Required: Enables JSX type support for Vue
// Or a single component: "@staticview/ui/types/vue/[component-name]"
"@staticview/ui/types/vue",
// Optional: Adds native DOM types (e.g. `querySelector`, `document`)
// Or a single component: "@staticview/ui/types/dom/[component-name]"
"@staticview/ui/types/dom",
// Optional: Exposes component types globally (no imports needed)
// Or a single component: "@staticview/ui/types/global/[component-name]"
"@staticview/ui/types/global",
],
},
}

This provides TypeScript support for the web components in your Vue application.

Importing Web Components

Web components are registered globally in the browser. Import them once in your application's entry point:

app.tsx
import "@staticview/ui/[component-name]";

Important: Do not import web components in multiple files. Import them only once at application startup.

Setting Properties

Use the v-bind.[propertyName].prop or :[propertyName].prop syntax to set JavaScript properties:

<component-name v-bind.opened.prop="isOpen" :disabled.prop="isDisabled"></component-name>

Setting Attributes

Use regular JSX syntax for HTML attributes:

<component-name label="Title"></component-name>

Boolean Attributes

A boolean attribute is on whenever it is present, whatever its value: close-button="false" turns the close button on. Vue stringifies an attribute value that is not null or undefined, so :close-button="hasCloseButton" renders close-button="false". Bind the JavaScript property instead:

<component-name :closeButton.prop="hasCloseButton"></component-name>

Otherwise pass "" to turn it on and undefined to turn it off:

<component-name :close-button="hasCloseButton ? '' : undefined"></component-name>

Handling Events

Use v-on.[eventName] or @[eventName] syntax to listen for custom events:

<component-name v-on:clicked="handleClick" @opened="handleExpand"></component-name>

Using Slots

Use children to render the content of the web component:

<component-name>
<span slot="title">Title</span>
<span>Content</span>
</component-name>