# Det Fælles Designsystem デザインシステム

## Det Fælles Designsystem デザインシステムのインターフェースプレビュー

5つのオリジナルの計画リソースを比較し、並び順を反転して、検索結果がない場合に復帰します。

## Det Fælles Designsystem デザインシステムのデザインリファレンス

実際のDKFDS 11.3.0 Borger.dkテーマ、間隔マップ、タイポグラフィマップ、フォーカス変数を掲載しています。表示されている名前はSassソースの参照名です。

### Borger.dkのテーマとフォーカス

| 名前 / ルール | 値 / 設定 | 用途 |
| --- | --- | --- |
| $borger-primary | #44831E | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $borger-primary-dark | #3C5C22 | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $borger-primary-darker | #233614 | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $header-portal-background-color | #f1f1f1 | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $theme-focus-width | 3px | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $theme-focus-offset | 1px | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $theme-focus-style | solid | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $typography-text-max-width | 66ch | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
| $typography-font-family | IBM Plex Sans, system-ui, system, sans-serif | 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。 |
### 間隔マップのキー

| 名前 / ルール | 値 / 設定 | 用途 |
| --- | --- | --- |
| 0 | 0px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 1 | 2px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 2 | 4px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 3 | 8px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 305 | 12px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 4 | 16px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 405 | 20px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 5 | 24px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 505 | 28px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 6 | 32px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 7 | 40px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
| 8 | 48px | 公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。 |
### フォントサイズマップ

| 名前 / ルール | 値 / 設定 | 用途 |
| --- | --- | --- |
| 2xs | 1.2rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| xs | 1.4rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| sm | 1.6rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| md | 1.8rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| lg | 2.0rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| xl | 2.1rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| 2xl | 2.2rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| 3xl | 2.4rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| 4xl | 2.8rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| 5xl | 3.2rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| 6xl | 4.0rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
| 7xl | 4.8rem | 公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。 |
## Det Fælles Designsystem デザインシステム完全ガイド

実際のインターフェースで、このデザインシステムを選び、適用し、レビューするための実践ガイドです。

詳しいガイダンス、実装の出発点、ソースへのリンクをまとめています。

## Det Fælles Designsystem デザインシステム：DKFDSのテーマと実装範囲

### Borger.dkかVirkかを意図的に選ぶ

> Det Fælles Designsystemでは、Borger.dkとVirkそれぞれのスタイルシートが提供されています。この例ではdkfds 11.3.0を固定し、Borger.dkのスタイルシートを使用することで、特徴的な緑のプライマリーコントロールとIBM Plex Sansのテキストを適用します。ボタンの色を1つだけ変えて、テーマ全体を切り替えたことにはしません。別のテーマを使う場合は、実装上の選択として意図的に読み込んでください。

### オリジナルの並べ替え機能をライブラリの機能として扱わない

公開されているテーブルのガイドでは、テーブルのマークアップとスタイルが提供されていますが、並べ替えと検索の動作は明示的にアプリケーション側に委ねられています。プレビューには、その両方を実装したオリジナルの機能が含まれています。この違いは重要です。DKFDS JavaScriptをインポートしただけでは、任意のテーブルが検索・並べ替え可能なデータビューになるわけではありません。

## Det Fælles Designsystem デザインシステム：Sassの値と基本のリズム

### ソースマップはソースマップとして読む

このリファレンスでは、架空の--token名ではなく、実際のSass値を記録しています。間隔マップは8pxを基準とし、305は12px、405は20pxを表します。開発者は、これらの数値をそのままピクセル値として扱うのではなく、ライブラリのヘルパーまたは対応するユーティリティの規約に従う必要があります。パラメーター表でマッピングを確認できます。

### ルートフォントの規約を守る

既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%に設定されています。そのため、通常のブラウザー設定では、ソースのフォントサイズマップに標準の小サイズ／本文サイズとして1.6remが含まれます。ルートサイズが異なる環境でrem値をそのまま使用すると、結果が大きく変わることがあります。この例では実際のスタイルシートを読み込み、文字組みと間隔の整合性を保っています。

## Det Fælles Designsystem デザインシステム：セマンティックなテーブル構造

### キャプションと明確な列の役割を設ける

リソース比較テーブルにはキャプション、列見出し、通常のデータセルがあります。ユーザーが属性ごとに比較できるよう、タイトル、形式、所要時間（分）、目的をそれぞれ別の列に配置します。閲覧時間はサンプルとして設定した推定値であり、トラフィックやパフォーマンスの統計値ではありません。キャプションでそのことを明確にしつつ、テーブルの構造は変えません。

- 有用なキャプションと列見出しを用意してください。

- アプリケーションのモデルでは、数値データを数値として保持してください。

- 画面幅が狭いときは、フォーカス可能なスクロール領域にラベルを付けます。

### モバイルではテーブル内をスクロール

並び替え可能なテーブルは、フォーカス可能なレスポンシブスクロール領域に配置されています。最小幅を確保して列の読みやすさを保ちながら、ページ全体はビューポート内に収まります。この例では、画面幅が狭いときにテーブルを無関係なカード形式へ変更しません。その場合は、別のナビゲーションと並び替え操作の仕様が必要になるためです。キーボード利用者はスクロール領域にフォーカスできます。

## Det Fælles Designsystem デザインシステムの並び替え状態と数値比較

### 有効な並び順は1つだけにする

タイトル列は昇順で並び替えられます。同じ見出しを有効にすると降順に切り替わり、分数列を選ぶと昇順で並び替えられます。aria-sort が設定されるのは現在の見出しだけです。また、各ボタンの非表示の説明には次の操作が示されます。表示される矢印は同じ状態を示すもので、独立した装飾ではありません。

### 数値は数値として比較する

分数は数値データなので、減算によって並び替えます。タイトルには localeCompare を使用します。数値文字列をアルファベット順で並べ替えると、値が大きくなるにつれて誤解を招く順序になります。元の行オブジェクトをデータの基準とし、行の内容はマークアップとして解釈せず、textContent を使って表示します。

## Det Fælles Designsystem デザインシステムの検索送信と結果なしからの復帰

### 送信時に検索語を適用する

フォームを送信すると、Enter キーによる送信も含め、表示されているすべての属性を対象に検索します。入力しただけでは、閲覧中のテーブルは置き換わりません。ステータスには、表示件数と現在の並び順が示され、検索語は入力欄に残ります。この例では、送信して検索する方式を採用しています。

### 並び順を保ったまま検索語をリセットする

検索結果がない場合は、元に戻すためのメッセージを表示します。リセットするとすべての行が復元され、選択中の並び替え列と方向を保ったまま、検索欄にフォーカスが移ります。このように、検索と並び替えは別々の状態として管理します。5行すべてのデータがすでにローカルにあるため、見せかけの読み込み状態は設けていません。

## Det Fælles Designsystem デザインシステム 完全な動作を備えた統合

### パスを維持して配布アセットを読み込む

11.3.0 パッケージのエクスポートマップで公開されているのは JavaScript エントリーであり、任意の CSS ディープインポートではありません。セットアップでは配布ファイルを public/dkfds にコピーし、index.html からスタイルシートを読み込むことで、相対パスで指定されたフォントや画像をそのまま利用できるようにします。提供された main.js と denmark.css は、そのシェルと同じ場所に保存してください。ローカルプレビューには同じアセットを埋め込み、確実に確認できるようにしています。

1. dkfds 11.3.0 をインストールし、配布ファイルを public/dkfds にコピーします。

2. 提供された HTML シェルを使って Borger.dk のスタイルシートを読み込みます。

3. 完全なエントリーと CSS を保存し、ローカルアプリを実行します。

4. 数値の並び替え、送信検索、リセット、モバイルでのテーブル内スクロールを確認します。

### 比較の一連の操作を確認する

分数列を昇順と降順の両方で並び替え、一致する項目がない検索を送信してからリセットします。「Template」を検索し、現在の並び順を保ったままテンプレートの2行だけが残ることを確認してください。スマートフォン幅では、ページ全体にはみ出しが生じず、テーブル内をスクロールできることを確認します。また、バンドルされたすべてのアセットが読み込まれ、ブラウザーエラーがないことも確認します。

## Det Fælles Designsystem デザインシステムのコンポーネント例

### main.js — 比較機能の完全な動作

元データ全件、数値・テキストの並び替え、送信による絞り込み、リセットを実装しています。

```
// index.html loads /dkfds/css/dkfds-borgerdk.css from the copied distribution.
import './denmark.css';
const rows=[{name:'Content inventory',type:'Worksheet',minutes:25,note:'Map the purpose and owner of each section.'},{name:'Accessibility review',type:'Checklist',minutes:30,note:'Inspect keyboard use, reading order and clear labels.'},{name:'Research questions',type:'Template',minutes:15,note:'Separate assumptions from questions that need evidence.'},{name:'Decision summary',type:'Template',minutes:10,note:'Record a choice, its reason and what remains uncertain.'},{name:'Prototype walkthrough',type:'Guide',minutes:20,note:'Walk through one realistic task and note friction.'}];let key='name',direction=1,query='';document.getElementById('root').innerHTML=`<main><p class="eyebrow">DET FÆLLES DESIGNSYSTEM / ORIGINAL TABLE STUDY</p><h1>Find a planning resource</h1><p class="lead">Compare five authored resources. Search the full table or sort by title and estimated reading time.</p><form id="search-form"><label class="form-label" for="search">Search sample resources</label><div class="search-controls"><input class="form-input" id="search" type="search"><button class="button button-primary" type="submit">Search</button><button class="button button-secondary" id="reset" type="button">Reset</button></div></form><p id="count" role="status"></p><div class="table--responsive-scroll" tabindex="0" role="region" aria-label="Resource comparison table"><table class="table" id="resource-table"><caption>Original resource comparison; reading times are sample estimates</caption><thead><tr><th scope="col" id="name-head" aria-sort="ascending"><button class="button button-unstyled sort" data-key="name">Resource title <span class="arrow" aria-hidden="true">↑</span><span class="sr-only"> — sort descending</span></button></th><th scope="col">Format</th><th scope="col" id="minutes-head"><button class="button button-unstyled sort" data-key="minutes">Minutes <span class="arrow" aria-hidden="true">↕</span><span class="sr-only"> — sort ascending</span></button></th><th scope="col">Purpose</th></tr></thead><tbody id="rows"></tbody></table></div><section id="empty" hidden><h2>No matching resource</h2><p>Try a shorter word, a format such as Template, or reset the search.</p></section><aside><h2>About this table</h2><p>The Borger.dk theme and table styling are from DKFDS 11.3.0. Search and sorting are complete original JavaScript: the published table component does not implement them for you.</p><ul><li>Search is applied when you submit the form.</li><li>A selected column always has an active sort order.</li><li>On a narrow screen, scroll the table without moving the whole page.</li></ul></aside></main>`;const $=id=>document.getElementById(id);function render(){const list=rows.filter(r=>Object.values(r).join(' ').toLowerCase().includes(query)).sort((a,b)=>direction*(key==='minutes'?a.minutes-b.minutes:a.name.localeCompare(b.name)));$('rows').replaceChildren(...list.map(r=>{const tr=document.createElement('tr');[r.name,r.type,String(r.minutes),r.note].forEach(value=>{const td=document.createElement('td');td.textContent=value;tr.append(td)});return tr}));$('count').textContent=list.length+' of '+rows.length+' resources · sorted by '+(key==='name'?'title':'minutes')+' '+(direction===1?'ascending':'descending');$('empty').hidden=!!list.length;document.querySelectorAll('.sort').forEach(b=>{const active=b.dataset.key===key;active?b.parentElement.setAttribute('aria-sort',direction===1?'ascending':'descending'):b.parentElement.removeAttribute('aria-sort');b.querySelector('.arrow').textContent=active?(direction===1?'↑':'↓'):'↕';b.querySelector('.sr-only').textContent=' — sort '+(active&&direction===1?'descending':'ascending')})}$('search-form').addEventListener('submit',e=>{e.preventDefault();query=$('search').value.trim().toLowerCase();render()});$('reset').addEventListener('click',()=>{$('search').value='';query='';render();$('search').focus()});document.querySelectorAll('.sort').forEach(b=>b.addEventListener('click',()=>{direction=key===b.dataset.key?-direction:1;key=b.dataset.key;render()}));render();
```

コードリファレンス

- 公開されているテーブル統合の責務範囲に従い、並び替えと検索は元のアプリケーションコードで実装しています。

### denmark.css — 元ページの構成

レスポンシブ対応の検索コントロールと、キーボードでフォーカスできるテーブルのスクロール領域。

```
body{margin:0}main{max-width:1160px;padding:32px;margin:auto}.eyebrow{font-size:14px;font-weight:600;letter-spacing:.04em}.lead{max-width:66ch}#search-form{margin:32px 0}.search-controls{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.search-controls input{flex:1;min-width:180px;max-width:480px}#count{font-weight:600}.table--responsive-scroll{position:relative;max-width:100%;overflow:auto}.table{min-width:720px;width:100%}.table caption{text-align:left;font-weight:600;margin-bottom:16px}.table th:nth-child(1){width:25%}.table th:nth-child(2){width:15%}.table th:nth-child(3){width:16%}.arrow{margin-left:8px}.sort{white-space:nowrap}aside,#empty{padding:24px;margin-top:32px;background:#f1f1f1;border-left:4px solid #44831e}aside h2,#empty h2{margin-top:0}aside li{margin:8px 0}[hidden]{display:none!important}@media(max-width:760px){main{padding:20px}.search-controls{gap:12px}.search-controls input{flex-basis:100%;max-width:none}h1{font-size:34px}}

@media(max-width:480px){.search-controls input{min-width:0;width:100%}.search-controls .button{max-width:100%;white-space:normal}h1{overflow-wrap:anywhere}}
```

コードリファレンス

- 画面幅が狭いときも、スクロール領域内でテーブルの列構成を維持します。

### index.html — 配布ファイルを読み込む完全なシェル

相対パスで指定されたアセットを維持して、公開済みのスタイルシートを読み込みます。

```
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Planning resource comparison</title>
<link rel="stylesheet" href="/dkfds/css/dkfds-borgerdk.css">
</head>
<body><div id="root"></div><script type="module" src="/src/main.js"></script></body>
</html>
```

コードリファレンス

- Vite のルートにある index.html を、このシェルに置き換えます。

## Det Fælles Designsystem デザインシステムのエージェント設定

### 実装の出発点

公式のスタイルシートとフォントをローカルで使用します。並び替えと絞り込みはアプリケーション側で処理するため、この静的なテーブルのスタイルには DKFDS.init の呼び出しは不要です。

```
npm create vite@latest dkfds-table -- --template vanilla
cd dkfds-table
npm install
npm install dkfds@11.3.0
mkdir -p public/dkfds
cp -R node_modules/dkfds/dist/. public/dkfds/
# Replace index.html, src/main.js and src/denmark.css with the supplied examples.
npm run dev
```

### あなたのプロジェクト向けプロンプト

```
実際の 11.3.0 Borger.dk 配布ファイルとフォント環境を使って、DKFDS のリソース比較を構築してください。元の実装に基づき、数値とタイトルの並び替え、有効な aria-sort 見出し1つ、送信検索、件数の表示、並び順を保つリセットをすべて実装してください。テーブルは、キーボードで操作できる専用領域内で水平方向にスクロールできるようにしてください。
```

## Det Fælles Designsystem デザインシステムの参照元と対象範囲

DKFDS 11.3.0 の Borger.dk スタイルとフォントを使った、OpenDesign 独自の比較機能です。並び替え、検索、サンプルデータはすべてアプリケーション側で独自に実装しており、DKFDS に組み込まれたテーブル機能ではありません。

- テーブルのガイド マークアップ、スクロール、並び替え、検索の担当範囲。

- パッケージとテーマ 配布スタイルシートと初期化の境界。

- テーマの調整 ソースレベルのテーマ設定。

- バージョン管理されたソース Sass マップ、テーマ値、アセットのライセンス。

## Det Fælles Designsystem デザインシステムの関連リソース

### デザインシステム .italia

Bootstrap Italia の実際のタイポグラフィ、レスポンシブな Stepper 構成、復元可能なローカルフォーム状態を使って、読みやすいサービス手順を実装します。

### Designsystemet

文字数フィードバックと表示状態の保持機能を備えたタスクブリーフ編集画面を通して、Designsystemetの実際のテーマロール、サイズモード、ネイティブな入力フィールドの動作を確認できます。

### DSFR

フランス国家デザインシステムの具体的なタイポグラフィ、グリッド、アコーディオン API を、制度上の対象範囲と併せて理解します。明確に中立的な学習用サンプルを使い、連動する開閉動作と独立した開閉動作を比較します。


- [実装リファレンス](https://designsystem.dk/komponenter/tables/)
- [ソース](https://github.com/detfaellesdesignsystem/dkfds-components)
- [コードリファレンス](https://designsystem.dk/komponenter/tables/)
- [コードリファレンス](https://designsystem.dk/kom-i-gang/implementering-kode/hent-kodepakken/)
- [テーブルのガイド マークアップ、スクロール、並び替え、検索の担当範囲。](https://designsystem.dk/komponenter/tables/)
- [パッケージとテーマ 配布スタイルシートと初期化の境界。](https://designsystem.dk/kom-i-gang/implementering-kode/hent-kodepakken/)
- [テーマの調整 ソースレベルのテーマ設定。](https://designsystem.dk/kom-i-gang/implementering-kode/justering/)
- [バージョン管理されたソース Sass マップ、テーマ値、アセットのライセンス。](https://github.com/detfaellesdesignsystem/dkfds-components)
