本文へ移動
cccskills
無料GitHub で公開日本語紹介

handsontable-a11y

Handsontableの画面変更に合わせて、キーボード操作や読み上げ、配色を設計・検証し、アクセシビリティの問題修正まで進めるスキル。

原文原文の説明を見る

Use whenever a change touches anything a user can see or operate in Handsontable - DOM a plugin, editor, renderer, menu, dialog or bar creates; ARIA roles or attributes; keyboard shortcuts; focus; screen reader announcements; theme colors, sizes or focus rings - and when fixing a finding of the axe scan (`tests/a11y/`, `a11y-findings.json`, the `A11y / axe report` check). Covers the bar (WCAG 2.2 A and AA), the accessibility plan to write before coding, the build rules on top of core's ARIA helpers, focus scopes, shortcut contexts and announcer, how to prove it (keyboard-only Playwright flows, accessible names, the scan and its coverage map), and the loop for fixing a tracked finding.

連携ツールPlaywright
インストール方法を見る

こんなときに便利

  • 操作しやすいメニューやダイアログの追加
  • キーボード操作とフォーカスの確認
  • axeスキャンの指摘を修正したいとき
  • テーマごとのコントラスト検証

日本語での紹介

できること

Handsontableの画面や操作を変更するときに、アクセシビリティの計画から実装、検証、指摘の修正までを支援します。WCAG 2.2のレベルA・AAを基準に、操作部品の名前、キーボード操作、フォーカスの移動先、スクリーンリーダーへの通知を整理します。ARIAという支援技術向けの役割・属性には、既存のヘルパーを使う方針です。

こんなときに便利

メニューやダイアログ、プラグインを追加するときや、テーマの色・サイズを変えるときに向いています。操作の変更はキーボードだけで進めるPlaywrightテストで、配色やサイズの変更は3つのテーマでのaxeスキャンで検証します。検出済みの問題を再現し、修正後に記録を更新する手順も扱います。

使い方の例

  • 「新しいダイアログの名前、キー操作、開閉時のフォーカスを計画して」
  • 「a11y-findings.jsonの指摘を再現し、修正と再検証を進めて」

注意点

Handsontableの内部ヘルパーやテスト構成を前提とします。axeの再実行には指定のビルドが必要です。自動スキャンで確認できるのは基準の一部であり、操作テストも併用します。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

含まれるファイル(3)

  • SKILL.md7.9 KB
  • references/patterns.md6.7 KB
  • references/proving.md4.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Accessibility in every development round

The bar is WCAG 2.2 Level A and AA, the level the published conformance report claims (docs/content/guides/accessibility/accessibility-conformance-report/). The axe scan catches part of it after the fact; this skill makes the rest part of the round. Accessibility is planned with the change, built with core's helpers, proven in tests, and reviewed like any other dimension.

The round

  1. Plan. Before writing code for a UI change, write its accessibility plan into the plan or the PR description (template below). A surface without a plan gets its roles, names and keys invented while coding, which is how the menus ended up with roles their structure contradicts.
  2. Build by the rules below. Pick the pattern from references/patterns.md.
  3. Prove it with the proofs that apply, from references/proving.md: a change to something a user operates (keys, focus, a control, a name, an announcement) ships a keyboard-only Playwright flow with accessible-name and state assertions; a color or size change proves itself with the axe scan in all three themes. A new plugin or editor adds its entry to tests/a11y/coverage.mjs, and the root test:tooling fails until it does.
  4. Review with the accessibility dimension of the handsontable-code-review skill (references/performance-a11y.md), and read the A11y / axe report check on the pushed PR: neutral means a finding needs action.

The accessibility plan

**Accessibility plan**
- Surface: <what appears, where it mounts: grid root, portal, dialog>
- Pattern: <APG pattern, from references/patterns.md> – roles, and their required parents and children
- Names: <the accessible name of every control, and its i18n phrase>
- Keyboard: <the keys, the shortcut context they register in, how a keyboard user enters and leaves>
- Focus: <the focus scope, where focus lands on open, where it returns on close>
- Announcements: <what changes without a focus move, and the message, polite or assertive>
- Theme: <tokens for color and size it touches; contrast and target size in all three themes>
- Proof: <the E2E flow, the scan page in tests/a11y/pages.mjs, the coverage entry>

Write "none" for a line that does not apply, never leave it out: "Announcements: none, every change moves focus" is a decision; a missing line is not.

Build rules

  • Native element first. An action is a <button type="button">, a field is an <input> or <textarea> with a name. A role goes only where no native element fits, and never a click handler on a bare <div>.
  • Roles and attributes through src/helpers/a11y.ts. Write them with setAttribute(element, [A11Y_MENU(), A11Y_LABEL(name)]) from src/helpers/dom/element. A missing attribute gets a helper there, not a string literal at the call site.
  • Required structure holds. Every role has the parents and children the ARIA spec requires: a menuitem sits in a menu, an option in a listbox, a row in a grid or rowgroup. When a widget role is drawn with table markup (the menus and lists are Handsontable grids), the table, tbody and tr in between carry role="presentation". One role per interactive element, and no interactive element inside another.
  • States only where the role supports them. aria-selected goes on gridcell, option, row or tab, never on menuitem; a checkable item is menuitemcheckbox with aria-checked.
  • Every control has a name, and the visible text is part of it. A name comes from visible text, a <label>, aria-labelledby or aria-label, and always from an i18n phrase (src/i18n/constants.ts, hot.getTranslatedPhrase()): never hard-coded English (the i18n-translations skill). Decorative icons carry aria-hidden="true".
  • ariaTags: false changes nothing but ARIA. Where a surface writes its ARIA only when hot.getSettings().ariaTags is on (the grid, the menus), a new attribute there follows the same check. No behavior may read an aria-* attribute or depend on one existing.
  • Every pointer action has a keyboard path (2.1.1), and a drag also has a single-pointer alternative that needs no dragging, such as a button, a menu item or an input (2.5.7); a keyboard path alone does not meet 2.5.7. Keys register in a shortcut context (hot.getShortcutManager().getContext('grid'), or the surface's own context, which its focus scope switches on), never as a raw keydown listener. A new shortcut goes into the keyboard shortcuts guide (docs/content/guides/navigation/keyboard-shortcuts/).
  • A surface that takes focus registers a focus scope (hot.getFocusScopeManager().registerScope(id, container, { shortcutsContextName, … }), as dialog and pagination do), puts focus inside on open, returns it to the cell or the opener on close, and unregisters in disablePlugin() and destroy().
  • A change without a focus move is announced through announce() from src/utils/a11yAnnouncer.ts. It defaults to 'assertive', so a status message passes 'polite' explicitly, as nested rows do for a row expanded or collapsed. assertive is for errors only, and one user action makes one announcement. Pagination, the sheets bar and row selection announce assertively today: a known gap, not the model to copy.
  • Colors and sizes come from theme tokens (the handsontable-css-dev skill), and each pair clears its ratio in main, horizon and classic, light and dark: text 4.5:1 (3:1 from 24px, or 18.66px bold), icons, borders and focus rings 3:1 (1.4.11), pointer targets 24 by 24 CSS pixels (2.5.8). A focused element is never fully hidden by a sticky overlay (2.4.11). Keep the forced-colors and prefers-reduced-motion blocks working.

Fixing a finding the scan reports

  1. Read a11y-findings.json (local run: tests/test-results/a11y/; CI: the a11y-axe-results artifact, gh run download <run-id> -n a11y-axe-results -D <dir>). needsAction has what the PR changed; issues[].locations has every place a known issue shows, with the steps per page in pages.
  2. Reproduce on the fixture (url plus steps), fix the cause in the product, and re-scan: npm --prefix tests run test:a11y after build:umd, build:styles.min and build:themes-css.min. Scope a run with -g " <page-id> on <theme>$" (the leading space and the $ keep sheets-bar from also matching data-provider-sheets-bar).
  3. Delete the entries the fix removed from tests/a11y/axe-baseline.json, and the issue with its last entry; lower nodes where only some elements were fixed. The scan names each as improved or stale.
  4. A finding the PR caused is fixed in the PR, never baselined to quiet the check. Only a finding that already existed and a new page exposes gets an entry, under an issue (tests/AGENTS.md, "Baselining a finding, and fixing one").

References

  • references/patterns.md: each Handsontable surface, its ARIA pattern, the helpers and the traps the scan has found.
  • references/proving.md: the Playwright assertions for keyboard, names, states, focus and announcements; the scan, its coverage map and what it cannot see.
  • tests/AGENTS.md, "A11y: the axe scan and its baseline": the scan's rules, the baseline and the reports.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

angular-wrapper-dev

無料概要あり

HandsontableのAngular向けラッパーを開発・修正するために、設定更新や破棄処理、変更検知の負荷を抑える実装、サンプル作成とテストの規約を案内するスキル。

  • Angularの設定反映を修正したいとき
  • 表操作に伴う変更検知の見直し
  • サンプルをStandaloneへ更新したいとき
handsontable/handsontable2.2万2026年10月21日 更新

browserstack-live

無料概要あり

ローカル開発中のページや公開URLをBrowserStackで開き、Android・iOSの実機や指定したデスクトップブラウザで動作確認する準備を支援します。

  • ローカルページのAndroid実機確認
  • iPhoneやiPadのSafariで確認
  • 指定デスクトップブラウザでの確認
handsontable/handsontable2.2万2026年10月21日 更新

changelog-creation

無料概要あり

ソースコードの変更に必要な変更履歴を判断し、利用者に伝わる説明と変更区分を整え、PR番号に対応したJSON形式の履歴ファイルの作成を支援します。

  • 不具合修正の変更履歴作成
  • 新機能や挙動変更の分類
  • 互換性変更と代替方法の説明
handsontable/handsontable2.2万2026年10月21日 更新

code-graph

無料概要あり

コードの呼び出し関係や依存関係を、構築済みのグラフから調べます。複数ファイルにまたがる不具合調査、変更の影響確認、リファクタリングやレビューを支援します。

  • 未知のコードの呼び出し関係を知りたいとき
  • 複数ファイルにまたがる不具合調査
  • 名前変更や削除の影響を調べたいとき
handsontable/handsontable2.2万2026年10月21日 更新

coordinate-systems

無料概要あり

Handsontableの行・列の位置を表す3種類のインデックスを使い分け、並べ替えや非表示、列移動に伴う位置ずれの調査と修正を支援するスキル。

  • 行や列の位置ずれを調べたいとき
  • 元データと表示位置を変換したいとき
  • フィルターと列移動を併用したいとき
handsontable/handsontable2.2万2026年10月21日 更新

creating-docs-examples

無料概要あり

Handsontableのドキュメントに載せるコード例を作成します。TypeScriptを元にJavaScript版を生成し、React・Angular・Vue向けの例も整えます。

  • 機能ガイドにコード例を追加したいとき
  • 複数フレームワーク向けの例の作成
  • TypeScriptからJavaScript例の生成
handsontable/handsontable2.2万2026年10月21日 更新

handsontable のスキルをすべて見る

このスキルの問題を報告する