Vue 3 アダプタ

@love-rox/tcy-vue

Vue 3 向けの `<Tcy>` コンポーネント。React 版と同じオプション・同じ挙動で、Vue アプリにそのまま組み込めます。

v0.3.0MITvue 3.x

インストール

@love-rox/tcy-core は依存として自動的に引き込まれるので、別途インストールする必要はありません。

bun

bun add @love-rox/tcy-vue

pnpm

pnpm add @love-rox/tcy-vue

npm

npm i @love-rox/tcy-vue

yarn

yarn add @love-rox/tcy-vue

使い方

<script setup> でインポートして、縦組みの親要素の中で <Tcy> 子要素として使います。slot 内の文字列のみを書き換え、要素ノードはそのまま再帰的に処理します。

Vue 3vue
<script setup lang="ts">
import { Tcy } from "@love-rox/tcy-vue";
</script>

<template>
  <p style="writing-mode: vertical-rl">
    <Tcy>第1章 2026年4月、Webの縦書きは進化した。</Tcy>
  </p>
</template>

オプション

React 版とまったく同じオプションを受け付けます。共通オプションは rehype / Astro とも完全に揃っています。

共通オプション

オプション既定値説明
target'alphanumeric' | 'alpha' | 'digit' | 'ascii' | RegExp'alphanumeric'縦中横対象として扱う文字種。alphanumeric[0-9A-Za-z]ascii は印字可能な ASCII 全般。任意の RegExp も指定可能。
combinebooleantrue連続した対象文字を1つのスパンにまとめるか。false にすると1文字ずつ別々のスパンで包みます。
includestring | string[]undefinedtarget に含まれなくても対象として扱う追加の文字。
excludestring | string[]undefined対象から外したい文字。include より優先されます。
maxLengthnumberundefined縦中横セグメントの最大文字数。これを超える長さの英数字 run はプレーンテキストに戻ります。たとえば maxLength: 2 にすると 2026 のような4桁年は寝かせ、119 の短い run のみを縦中横にできます。
excludeWordsstring[]undefined縦中横にしたくない語を完全一致で指定(部分一致ではなくセグメント値全体のマッチ)。URL API のような固有の略号や、特定の年号だけを横倒しのまま残したいときに便利。

コンポーネント専用プロパティ

オプション既定値説明
classNamestring'tcy'生成される span に付与するクラス名。
askeyof JSX.IntrinsicElements'span'ラップに使用するタグ名。

挙動の注記

  • <em>12</em>34 のように要素境界をまたぐ文字列は連結されず、別々のスパンになります。
  • 全角英数字(A〜Z / 0〜9)は既定で対象外。縦組みでも既に正立して表示されるためです。
  • SSR-safe。Nuxt 3 などでサーバーレンダリングしてもクライアントで同じ DOM を生成します。
  • slot に渡された VNode を再帰的に走査し、テキストノードだけをラップ対象とします。

他のアダプタ

React を使っているなら同じ API の React 版があります。Markdown / Astro パイプラインなら Vue を持ち込まずに rehype / Astro 版が使えます。