Web コンポーネントのレシピ
Web コンポーネントは view.component として登録され、通常は shadow root 内でレンダリングされます。妥当な範囲で最小の構成を選んでください。
バリアント A: コンテンツのみ
チャート、ダイアグラム、レンダラー、ビジュアライゼーションは、コントロールを一切レンダリングせず、共有 Tailwind ユーティリティを記述しない場合、PrimeVue と Tailwind を省略できます。
それでも次は必須です。
- 妥当なカスタム要素タグを公開すること。
- レンダリングされるコンテンツのアクセシビリティを保つこと。
- サポートされる Wippy の設定と CSS 配信を使うこと。
- プロジェクト私有のファサードクラスを避けること。
- Wippy モジュールリポジトリの正典の Make ターゲットでビルドすること。
後からボタン、入力、フォーム、メニュー、その他 PrimeVue 相当のコントロールを追加した時点で、この免除は終了します。
バリアント B: コントロールを含む
コントロールを持つコンポーネントは、Wippy の PrimeVue プラグインを通じて PrimeVue をインストールし、必要な CSS 配信キーを設定しなければなりません。次のエントリは、現在パッケージがサポートする Vue の書き方です。
import { defineComponent, h } from 'vue'
import Button from 'primevue/button'
import { PrimeVuePlugin } from '@wippy-fe/theme/primevue-plugin'
import {
WippyVueElement,
define,
type WippyElementConfig,
} from '@wippy-fe/webcomponent-vue'
import pkg from '../package.json'
const Root = defineComponent({
name: 'ExampleControlsRoot',
setup() {
return () => h(Button, { label: 'Save' })
},
})
class ExampleControlsElement extends WippyVueElement {
static get wippyConfig(): WippyElementConfig {
return {
propsSchema: pkg.wippy.props,
hostCssKeys: ['themeConfigUrl', 'primeVueCssUrl', 'iframeCssUrl'],
}
}
static get vueConfig() {
return {
rootComponent: Root,
plugins: [PrimeVuePlugin],
}
}
}
export async function webComponent() {
return ExampleControlsElement
}
define(import.meta.url, ExampleControlsElement)
パッケージのメタデータは、同じカスタム要素を示していなければなりません。
{
"name": "@example/controls",
"version": "0.1.0",
"type": "module",
"specification": "wippy-component-1.0",
"wippy": {
"type": "component",
"tagName": "example-controls",
"props": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}
}
コンポーネントのビルドでは、厳格な Wippy コンポーネントプラグインと、ピン留めされた対象ホストの完全なインポートマップスナップショットを使用します。
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { wippyComponentPlugin } from '@wippy-fe/vite-plugin'
import hostImportMap from './wippy-import-map.json'
export default defineConfig({
plugins: [vue(), wippyComponentPlugin({ required: true })],
build: {
lib: {
entry: 'src/element.ts',
formats: ['es'],
fileName: 'index',
},
rollupOptions: {
external: Object.keys(hostImportMap.imports),
},
},
})
このコンポーネントが Tailwind ユーティリティを記述する場合は、共有の Wippy Tailwind プリセットを使用してください。PrimeVue 自体は、モジュールが Tailwind ユーティリティを発明することを要求しません。
shadow root のルール
- 公開された CSS 変数は shadow root へ継承されます。
- セレクターのルールは、ホストがそれらをルートへ配信した場合にのみ効きます。
- 共有の PrimeVue テーマ CSS はサポートされる依存関係です。
- 任意のファサードクラスは可搬な API ではありません。
- オーバーレイの配置は実際のランタイムで検証しなければなりません。汎用的な配置レシピを押し付けないでください。
メタデータとビルド
選択したスキーマが要求するとおり、props と events をパッケージのメタデータとレジストリエントリの両方に記載してください。モジュールリポジトリの Make ターゲットを呼び出します。そのレシピは次を使用します。
npm run build -- --outDir <target> --emptyOutDir
この裏側のコマンドを直接実行しないでください。Windows では make.bat を呼び出します。make.bat は make.ps1 へ委譲します。
テーマの記述、Tailwind 契約、ビルドと依存関係の契約 を参照してください。