Skip to content

Svelte コンポーネント API

JapanMapSelectorSvelteコンポーネントのAPIリファレンスです。

インポート

javascript
import { JapanMapSelectorSvelte } from 'japan-map-selector/svelte';

Props

必須Props

プロパティ説明
prefectureDataUrlstring都道府県データのJSONファイルURL
municipalityDataUrlstring市区町村データのJSONファイルURL

オプションProps

プロパティデフォルト説明
widthnumber800地図の幅(ピクセル)
heightnumber600地図の高さ(ピクセル)
themestring | ColorTheme'default'カラーテーマ
selectedPrefectureCodestring-初期選択都道府県コード
selectedMunicipalityCodestring-初期選択市区町村コード
selectablePrefecturesstring[]-選択可能な都道府県コードの配列
disabledPrefectureFillstring'#cccccc'選択不可都道府県の塗りつぶし色
disabledPrefectureStrokestring'#999999'選択不可都道府県の枠線色
simplificationLevel'original' | 'high' | 'medium' | 'low' | 'ultra-low''original'ポリゴンの簡略化レベル
showAttributionbooleantrue出典表示の有無
attributionOptionsAttributionOptions-出典表示のオプション

カラーカスタマイズProps

プロパティ説明
prefectureColorstring都道府県の塗りつぶし色
prefectureHoverColorstring都道府県のホバー色
municipalityColorstring市区町村の塗りつぶし色
municipalityHoverColorstring市区町村のホバー色

イベント

Svelteコンポーネントは以下のカスタムイベントを発火します:

イベント名説明イベント詳細
prefectureSelect都道府県選択時event.detail: Prefecture
municipalitySelect市区町村選択時event.detail: Municipality
initialized初期化完了時なし
themeChangedテーマ変更時event.detail: ColorTheme

メソッド(bind:this経由)

コンポーネントのインスタンスを通じて以下のメソッドにアクセスできます:

svelte
<script>
  let mapComponent;
  
  // 使用例
  function reset() {
    mapComponent?.resetView();
  }
</script>

<JapanMapSelectorSvelte
  bind:this={mapComponent}
  prefectureDataUrl="/data/prefectures.json"
  municipalityDataUrl="/data/municipalities.json"
/>

利用可能なメソッド

メソッド説明パラメータ
resetView()日本全体ビューに戻るなし
selectPrefecture(code)都道府県を選択code: string
selectMunicipality(code)市区町村を選択code: string
setTheme(theme)テーマを変更theme: string | ColorTheme
setDeformMode(mode, gridSize)ディフォルメモードを設定mode: 'none' | 'grid' | 'hexagon', gridSize?: number
getPrefectures()都道府県一覧を取得なし
getSelectedMunicipalities()選択中の都道府県の市区町村一覧を取得なし
getState()現在の状態を取得なし

スロット

このコンポーネントは現在スロットをサポートしていません。

使用例

基本的な使用

svelte
<script>
  import { JapanMapSelectorSvelte } from 'japan-map-selector/svelte';
  
  function handlePrefectureSelect(event) {
    console.log('選択された都道府県:', event.detail.name);
  }
  
  function handleMunicipalitySelect(event) {
    console.log('選択された市区町村:', event.detail.name);
  }
</script>

<JapanMapSelectorSvelte
  width={800}
  height={600}
  theme="colorful"
  prefectureDataUrl="/data/prefectures.json"
  municipalityDataUrl="/data/municipalities.json"
  on:prefectureSelect={handlePrefectureSelect}
  on:municipalitySelect={handleMunicipalitySelect}
/>

リアクティブなプロパティ

svelte
<script>
  import { JapanMapSelectorSvelte } from 'japan-map-selector/svelte';
  
  let currentTheme = 'default';
  let simplificationLevel = 'medium';
  
  $: console.log('テーマが変更されました:', currentTheme);
</script>

<label>
  テーマ:
  <select bind:value={currentTheme}>
    <option value="default">Default</option>
    <option value="dark">Dark</option>
    <option value="colorful">Colorful</option>
  </select>
</label>

<JapanMapSelectorSvelte
  theme={currentTheme}
  simplificationLevel={simplificationLevel}
  prefectureDataUrl="/data/prefectures.json"
  municipalityDataUrl="/data/municipalities.json"
/>

インスタンスメソッドの使用

svelte
<script>
  import { JapanMapSelectorSvelte } from 'japan-map-selector/svelte';
  
  let map;
  let searchQuery = '';
  
  function searchAndSelect() {
    if (!map || !searchQuery) return;
    
    const prefectures = map.getPrefectures();
    const found = prefectures.find(p => 
      p.name.includes(searchQuery)
    );
    
    if (found) {
      map.selectPrefecture(found.code);
    }
  }
  
  function applyDeformation(mode) {
    map?.setDeformMode(mode, mode === 'grid' ? 0.1 : 0.15);
  }
</script>

<div class="controls">
  <input 
    bind:value={searchQuery}
    placeholder="都道府県を検索..."
  />
  <button on:click={searchAndSelect}>検索</button>
  <button on:click={() => map?.resetView()}>リセット</button>
  
  <div class="deform-buttons">
    <button on:click={() => applyDeformation('none')}>通常</button>
    <button on:click={() => applyDeformation('grid')}>グリッド</button>
    <button on:click={() => applyDeformation('hexagon')}>六角形</button>
  </div>
</div>

<JapanMapSelectorSvelte
  bind:this={map}
  prefectureDataUrl="/data/prefectures.json"
  municipalityDataUrl="/data/municipalities.json"
/>

カスタムテーマ

svelte
<script>
  const oceanTheme = {
    name: 'ocean',
    prefectureFill: '#0077be',
    prefectureStroke: '#005a9e',
    prefectureHoverFill: '#0099cc',
    prefectureSelectedFill: '#00bfff',
    municipalityFill: '#87ceeb',
    municipalityStroke: '#4682b4',
    municipalityHoverFill: '#add8e6',
    municipalitySelectedFill: '#b0e0e6',
    backgroundColor: '#f0f8ff',
    strokeWidth: 1.5
  };
</script>

<JapanMapSelectorSvelte
  theme={oceanTheme}
  prefectureDataUrl="/data/prefectures.json"
  municipalityDataUrl="/data/municipalities.json"
/>

SvelteKit での使用

クライアントサイドレンダリング

javascript
// +page.js
export const ssr = false;

条件付きレンダリング

svelte
<script>
  import { browser } from '$app/environment';
  import { onMount } from 'svelte';
  
  let JapanMapSelectorSvelte;
  
  onMount(async () => {
    if (browser) {
      const module = await import('japan-map-selector/svelte');
      JapanMapSelectorSvelte = module.JapanMapSelectorSvelte;
    }
  });
</script>

{#if JapanMapSelectorSvelte}
  <svelte:component
    this={JapanMapSelectorSvelte}
    prefectureDataUrl="/data/prefectures.json"
    municipalityDataUrl="/data/municipalities.json"
  />
{:else}
  <div>地図を読み込み中...</div>
{/if}

MIT License