Web Component
同じコンポーネントを、Vue の defineCustomElement でラップしたネイティブのカスタム要素としても提供しています(Vue 3 のみ)。Vue のカスタム要素の動作については、Vue のドキュメントの Vue と Web コンポーネント を参照してください。
エントリポイントは 2 つあります。
自動で登録する
vue-codemirror6/wc-auto を import すると <code-mirror> が登録されます。
任意のタグ名で登録する
vue-codemirror6/wc を import し、使いたいタグ名を register() に渡します。
default export を使って自分で登録することもできます。
同じコンストラクタは、1 つのカスタム要素レジストリに一度しか登録できません。登録するタグ名は 1 つにし、同じページで vue-codemirror6/wc と vue-codemirror6/wc-auto を併用しないでください。2 つ目のタグ名を登録しようとすると NotSupportedError になります。
vue-codemirror6/wc は HTMLElementTagNameMap に何も追加しません。タグの型は自分で宣言してください。
CDN(jsDelivr)から使う
どちらのエントリポイントも、jsDelivr の ESM ファイルを import map で読み込めば、バンドラーなしで使えます(バージョン 1.8.0 以降)。
@codemirror/state などの @codemirror/* が 2 つ読み込まれると CodeMirror が動かなくなり、Vue が 2 つ読み込まれると要素が動かなくなります。上の例のように各パッケージを 1 つの URL に対応させてください。jsDelivr の /+esm の URL は使わないでください。パッケージごとに依存のバージョンが別々に固定されるため、重複が起きやすくなります。
- 最後の 2 行は
@codemirror/lang-javascript用です。使う言語パッケージと、その@lezer/*パーサーも同じように追加してください。 - 任意のタグ名を使う場合は、代わりに
"vue-codemirror6/wc": "https://cdn.jsdelivr.net/npm/vue-codemirror6@1/dist/wc.es.js"を登録してregister()を呼んでください。 *.umd.js(vue-codemirror6/umd、vue-codemirror6/wc/umd、vue-codemirror6/wc-auto/umd)は CommonJS / AMD ローダー向けで、通常の<script>タグでは読み込めません。
補足
- Vue のテンプレート内で使う場合は、
compilerOptions.isCustomElement(例:tag => tag === 'code-mirror')でカスタム要素として扱うよう設定してください。 - エディタは open な Shadow Root の中に描画されます。
- 以下の例では
<code-mirror>を使っています。vue-codemirror6/wcを使う場合は、登録したタグ名に読み替えてください。
props の指定
- プリミティブな props(
string、boolean、number)は、属性と DOM プロパティのどちらでも指定できます。 - オブジェクト・配列・関数の props(
lang、linter、extensions、theme、keymapなど)は、DOM プロパティでのみ指定できます。
最初の描画に反映させるには、要素を DOM に追加する前にプロパティを設定してください。
イベント
Vue の emit はネイティブの CustomEvent として発火します。emit の引数は配列として event.detail に入ります。
インスタンス API
インスタンス API は要素から直接使えます。