BEST PRACTICE Vs IMPLE
Best Practice vs Implementation Analysis
- DATA STORAGE
βββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββ β Best Practice β Recommendation β Implementation β Verdict β βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββ€ β Adjacency β Simple but slow β Used. org_chart_people.manager_id references parent. β Appropriate β β List β recursive queries β Tree built at runtime in frontend. β β βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββ€ β Path β Recommended for scale β Not used. No materialized path column. β Not needed β β Enumeration β β β β βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββ€ β Nested Sets β Best for read-heavy β Not used. β Not needed β βββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββ€ β Graph DB β For enterprise scale β Not used. Supabase/Postgres. β Not needed β β (Neo4j) β β β β βββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββ
Assessment: The adjacency list is the right choice here. This app generates static HTML exports from relatively small datasets (templates cap at 50β250 people). Thereβs no need for recursive CTEs or path enumeration β the entire people list is fetched once and the tree is built in-memory in the frontend (OrgDataTable.tsx:54-87) and in the template renderer. The org_chart_relationships table also supports dotted-line/matrix relationships as a separate concern, which is a good design.
- PRESENTATION & LAYOUT
βββββββββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Best Practice β Recommendation β Status β βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Hybrid Layout β β Partially. The top-down-tree template is purely vertical. The β β (horizontal top, β Recommended β horizontal-tree template is purely horizontal (left-to-right). No β β vertical lower) β β single template combines both. β βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Progressive β β Yes. The interactive-collapsible template uses
β
β Disclosure β Essential β with JS-enhanced expand/collapse. The indented-list template also β
β (expand/collapse) β β uses /. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Partially. The interactive-collapsible template has real-time β
β β β search with debounce (200ms), auto-expands ancestor nodes of β
β Search and Center β Recommended β matches, and shows match count via aria-live. However there is no β
β β β βfly toβ or visual centering β it highlights matches with β
β β β tags. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βMeβ View β Recommended β Not implemented. No concept of βcurrent userβ within the generated β
β β β HTML. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Partially. The database supports relationship types (dotted_line, β
β β Use dotted for β advisory, committee, project, mentor), and photo-cards uses dashed β
β Dotted vs Solid Lines β matrix reporting β lines. But the main tree templates only render solid-line direct β
β β β reports β secondary relationships arenβt visually rendered in most β
β β β templates. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Yes. Cards show name, title, department badge. Contact details are β
β Minimal Card Design β Keep cards clean β in expandable (indented-list, interactive-collapsible) β
β (Name, Title, Photo) β β or hidden until hover/focus (compact-cards). Photo cards support β
β β β photos with initial-based avatar fallback. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Not applicable. These are static HTML exports β all data is baked β
β Lazy Loading (fetch β For performance β in at generation time. The interactive-collapsible template uses β
β children on expand) β β progressive disclosure to hide content visually, but all data is β
β β β present in the DOM. β
βββββββββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- WCAG / ACCESSIBILITY
ββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Best Practice β Recommendation β Status β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Nested
/- β Foundation for screen β Yes. Top-down-tree, horizontal-tree, and β
β structure β readers β interactive-collapsible all use nested
/- . β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β role=βtreeβ / β β Yes. Top-down-tree, horizontal-tree, interactive-collapsible β
β role=βtreeitemβ β ARIA tree widget β all use role=βtreeβ on root
and role=βtreeitemβ on - β
β β β elements. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-expanded β Toggle state for β Yes. Set on treeitems with children. The WCAG validator has a β
β β expand/collapse β dedicated rule (aria-expanded-required) checking this. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-controls β Link toggle to β Yes. Interactive-collapsible links summary to children group. β
β β sub-list β Top-down-tree uses aria-owns. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Tab to β Sequential navigation β Yes. All interactive elements are focusable. β
β cards β β β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Arrow β Up/Down siblings, β Yes in interactive-collapsible template (full arrow key β
β keys β Right expand, Left β navigation). Yes in OrgDataTable editor (Up/Down/Home/End). No β
β β collapse β in the static tree templates (theyβre non-interactive HTML). β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: β Expand/collapse nodes β Yes. Interactive-collapsible handles Enter/Space. β
β Enter/Space toggle β β /
also handles this natively. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Focus Visible β High-contrast outline β Yes. All templates include 3px solid outline with 2px offset. β
β β β Global CSS has :focus-visible styles. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-live β Notify screen readers β Yes. Interactive-collapsible announces match count. Editor uses β
β announcements β of changes β aria-live=βpoliteβ for edit confirmations. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Color contrast β₯ β β Validated. The WCAG validator checks inline color contrast. β
β 4.5:1 β WCAG AA β Five color schemes are provided, each designed for sufficient β
β β β contrast. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Text resizing to β Flexible layout β Yes. Templates use rem/em units and responsive CSS with media β
β 200% β β queries at 640px. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β No canvas/SVG for β Keep text in DOM β Yes. All text is standard HTML. Lines are CSS pseudo-elements β
β text β β (::before/::after), not SVG/canvas. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Skip navigation β Required β Yes. Every template includes a skip link. The WCAG validator β
β link β β has a dedicated skip-link rule. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Alternative flat β Fallback for complex β Yes. The indented-list and condensed-text templates serve as β
β view β charts β accessible alternative views alongside the visual tree β
β β β templates. β
ββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- WCAG VALIDATOR COVERAGE
The custom validator checks 14 rules, plus axe-core integration. Two rules are org-chart-specific
(aria-tree-items, aria-expanded-required), which is good. However, the validator does not check:
- Keyboard operability (canβt test without a browser)
- Arrow key navigation functionality
- Dynamic aria-expanded toggling (only checks static HTML)
- Zoom/reflow at 200% (requires rendering)
- Color contrast from CSS stylesheets (only checks inline styles)
These are inherent limitations of static HTML analysis β a real WCAG audit would need browser-based testing
(e.g., Playwright + axe).
Summary
Category: Data Storage
Grade: A
Notes: Adjacency list is the right fit. Relationship types table adds matrix support.
ββββββββββββββββββββββββββββββββββββββββ
Category: Semantic HTML
Grade: A
Notes: Nested lists, ARIA tree roles, proper landmarks throughout.
ββββββββββββββββββββββββββββββββββββββββ
Category: Keyboard Navigation
Grade: A-
Notes: Full arrow-key support in interactive template; static templates rely on native HTML.
ββββββββββββββββββββββββββββββββββββββββ
Category: Progressive Disclosure
Grade: A
Notes:
/ with JS enhancement. Multiple templates offer different levels.
ββββββββββββββββββββββββββββββββββββββββ
Category: Search
Grade: B+
Notes: Present in interactive template with highlighting and ancestor expansion; no βcenter on resultβ or βMeβ
view.
ββββββββββββββββββββββββββββββββββββββββ
Category: Visual Layout
Grade: B
Notes: No true hybrid layout (horizontal top + vertical bottom). Each template is one direction only.
ββββββββββββββββββββββββββββββββββββββββ
Category: Dotted-Line Relationships
Grade: B-
Notes: Database supports them, but most templates donβt render secondary relationships visually.
ββββββββββββββββββββββββββββββββββββββββ
Category: WCAG Validation
Grade: A-
Notes: 14 custom rules + axe-core. Limited by static analysis (canβt test keyboard/zoom).
ββββββββββββββββββββββββββββββββββββββββ
Category: Template Variety
Grade: A
Notes: 8 templates covering tree, list, card, grid, and text views β exactly the βalternative viewsβ WCAG
recommends.
The biggest gaps are the lack of a hybrid layout template and underutilization of the relationship types data in
visual rendering. The strengths are in semantic HTML, ARIA tree implementation, keyboard navigation, and having
multiple accessible alternative views.
. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Partially. The interactive-collapsible template has real-time β
β β β search with debounce (200ms), auto-expands ancestor nodes of β
β Search and Center β Recommended β matches, and shows match count via aria-live. However there is no β
β β β βfly toβ or visual centering β it highlights matches with β
β β β tags. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βMeβ View β Recommended β Not implemented. No concept of βcurrent userβ within the generated β
β β β HTML. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Partially. The database supports relationship types (dotted_line, β
β β Use dotted for β advisory, committee, project, mentor), and photo-cards uses dashed β
β Dotted vs Solid Lines β matrix reporting β lines. But the main tree templates only render solid-line direct β
β β β reports β secondary relationships arenβt visually rendered in most β
β β β templates. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Yes. Cards show name, title, department badge. Contact details are β
β Minimal Card Design β Keep cards clean β in expandable (indented-list, interactive-collapsible) β
β (Name, Title, Photo) β β or hidden until hover/focus (compact-cards). Photo cards support β
β β β photos with initial-based avatar fallback. β
βββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Not applicable. These are static HTML exports β all data is baked β
β Lazy Loading (fetch β For performance β in at generation time. The interactive-collapsible template uses β
β children on expand) β β progressive disclosure to hide content visually, but all data is β
β β β present in the DOM. β
βββββββββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- WCAG / ACCESSIBILITY
ββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Best Practice β Recommendation β Status β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Nested
/- β Foundation for screen β Yes. Top-down-tree, horizontal-tree, and β
β structure β readers β interactive-collapsible all use nested
/- . β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β role=βtreeβ / β β Yes. Top-down-tree, horizontal-tree, interactive-collapsible β
β role=βtreeitemβ β ARIA tree widget β all use role=βtreeβ on root
and role=βtreeitemβ on - β
β β β elements. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-expanded β Toggle state for β Yes. Set on treeitems with children. The WCAG validator has a β
β β expand/collapse β dedicated rule (aria-expanded-required) checking this. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-controls β Link toggle to β Yes. Interactive-collapsible links summary to children group. β
β β sub-list β Top-down-tree uses aria-owns. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Tab to β Sequential navigation β Yes. All interactive elements are focusable. β
β cards β β β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Arrow β Up/Down siblings, β Yes in interactive-collapsible template (full arrow key β
β keys β Right expand, Left β navigation). Yes in OrgDataTable editor (Up/Down/Home/End). No β
β β collapse β in the static tree templates (theyβre non-interactive HTML). β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: β Expand/collapse nodes β Yes. Interactive-collapsible handles Enter/Space. β
β Enter/Space toggle β β /
also handles this natively. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Focus Visible β High-contrast outline β Yes. All templates include 3px solid outline with 2px offset. β
β β β Global CSS has :focus-visible styles. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-live β Notify screen readers β Yes. Interactive-collapsible announces match count. Editor uses β
β announcements β of changes β aria-live=βpoliteβ for edit confirmations. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Color contrast β₯ β β Validated. The WCAG validator checks inline color contrast. β
β 4.5:1 β WCAG AA β Five color schemes are provided, each designed for sufficient β
β β β contrast. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Text resizing to β Flexible layout β Yes. Templates use rem/em units and responsive CSS with media β
β 200% β β queries at 640px. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β No canvas/SVG for β Keep text in DOM β Yes. All text is standard HTML. Lines are CSS pseudo-elements β
β text β β (::before/::after), not SVG/canvas. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Skip navigation β Required β Yes. Every template includes a skip link. The WCAG validator β
β link β β has a dedicated skip-link rule. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Alternative flat β Fallback for complex β Yes. The indented-list and condensed-text templates serve as β
β view β charts β accessible alternative views alongside the visual tree β
β β β templates. β
ββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- WCAG VALIDATOR COVERAGE
The custom validator checks 14 rules, plus axe-core integration. Two rules are org-chart-specific
(aria-tree-items, aria-expanded-required), which is good. However, the validator does not check:
- Keyboard operability (canβt test without a browser)
- Arrow key navigation functionality
- Dynamic aria-expanded toggling (only checks static HTML)
- Zoom/reflow at 200% (requires rendering)
- Color contrast from CSS stylesheets (only checks inline styles)
These are inherent limitations of static HTML analysis β a real WCAG audit would need browser-based testing
(e.g., Playwright + axe).
Summary
Category: Data Storage
Grade: A
Notes: Adjacency list is the right fit. Relationship types table adds matrix support.
ββββββββββββββββββββββββββββββββββββββββ
Category: Semantic HTML
Grade: A
Notes: Nested lists, ARIA tree roles, proper landmarks throughout.
ββββββββββββββββββββββββββββββββββββββββ
Category: Keyboard Navigation
Grade: A-
Notes: Full arrow-key support in interactive template; static templates rely on native HTML.
ββββββββββββββββββββββββββββββββββββββββ
Category: Progressive Disclosure
Grade: A
Notes:
/ with JS enhancement. Multiple templates offer different levels.
ββββββββββββββββββββββββββββββββββββββββ
Category: Search
Grade: B+
Notes: Present in interactive template with highlighting and ancestor expansion; no βcenter on resultβ or βMeβ
view.
ββββββββββββββββββββββββββββββββββββββββ
Category: Visual Layout
Grade: B
Notes: No true hybrid layout (horizontal top + vertical bottom). Each template is one direction only.
ββββββββββββββββββββββββββββββββββββββββ
Category: Dotted-Line Relationships
Grade: B-
Notes: Database supports them, but most templates donβt render secondary relationships visually.
ββββββββββββββββββββββββββββββββββββββββ
Category: WCAG Validation
Grade: A-
Notes: 14 custom rules + axe-core. Limited by static analysis (canβt test keyboard/zoom).
ββββββββββββββββββββββββββββββββββββββββ
Category: Template Variety
Grade: A
Notes: 8 templates covering tree, list, card, grid, and text views β exactly the βalternative viewsβ WCAG
recommends.
The biggest gaps are the lack of a hybrid layout template and underutilization of the relationship types data in
visual rendering. The strengths are in semantic HTML, ARIA tree implementation, keyboard navigation, and having
multiple accessible alternative views.
- WCAG / ACCESSIBILITY
ββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Best Practice β Recommendation β Status β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Nested
- /
- β Foundation for screen β Yes. Top-down-tree, horizontal-tree, and β
β structure β readers β interactive-collapsible all use nested
- /
- . β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β role=βtreeβ / β β Yes. Top-down-tree, horizontal-tree, interactive-collapsible β
β role=βtreeitemβ β ARIA tree widget β all use role=βtreeβ on root
- and role=βtreeitemβ on
- β
β β β elements. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-expanded β Toggle state for β Yes. Set on treeitems with children. The WCAG validator has a β
β β expand/collapse β dedicated rule (aria-expanded-required) checking this. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-controls β Link toggle to β Yes. Interactive-collapsible links summary to children group. β
β β sub-list β Top-down-tree uses aria-owns. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Tab to β Sequential navigation β Yes. All interactive elements are focusable. β
β cards β β β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Arrow β Up/Down siblings, β Yes in interactive-collapsible template (full arrow key β
β keys β Right expand, Left β navigation). Yes in OrgDataTable editor (Up/Down/Home/End). No β
β β collapse β in the static tree templates (theyβre non-interactive HTML). β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: β Expand/collapse nodes β Yes. Interactive-collapsible handles Enter/Space. β
β Enter/Space toggle β β /
also handles this natively. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Focus Visible β High-contrast outline β Yes. All templates include 3px solid outline with 2px offset. β β β β Global CSS has :focus-visible styles. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β aria-live β Notify screen readers β Yes. Interactive-collapsible announces match count. Editor uses β β announcements β of changes β aria-live=βpoliteβ for edit confirmations. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Color contrast β₯ β β Validated. The WCAG validator checks inline color contrast. β β 4.5:1 β WCAG AA β Five color schemes are provided, each designed for sufficient β β β β contrast. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Text resizing to β Flexible layout β Yes. Templates use rem/em units and responsive CSS with media β β 200% β β queries at 640px. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β No canvas/SVG for β Keep text in DOM β Yes. All text is standard HTML. Lines are CSS pseudo-elements β β text β β (::before/::after), not SVG/canvas. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Skip navigation β Required β Yes. Every template includes a skip link. The WCAG validator β β link β β has a dedicated skip-link rule. β ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β Alternative flat β Fallback for complex β Yes. The indented-list and condensed-text templates serve as β β view β charts β accessible alternative views alongside the visual tree β β β β templates. β ββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- WCAG VALIDATOR COVERAGE
The custom validator checks 14 rules, plus axe-core integration. Two rules are org-chart-specific (aria-tree-items, aria-expanded-required), which is good. However, the validator does not check:
- Keyboard operability (canβt test without a browser)
- Arrow key navigation functionality
- Dynamic aria-expanded toggling (only checks static HTML)
- Zoom/reflow at 200% (requires rendering)
- Color contrast from CSS stylesheets (only checks inline styles)
These are inherent limitations of static HTML analysis β a real WCAG audit would need browser-based testing (e.g., Playwright + axe).
Summary
Category: Data Storage Grade: A Notes: Adjacency list is the right fit. Relationship types table adds matrix support. ββββββββββββββββββββββββββββββββββββββββ Category: Semantic HTML Grade: A Notes: Nested lists, ARIA tree roles, proper landmarks throughout. ββββββββββββββββββββββββββββββββββββββββ Category: Keyboard Navigation Grade: A- Notes: Full arrow-key support in interactive template; static templates rely on native HTML. ββββββββββββββββββββββββββββββββββββββββ Category: Progressive Disclosure Grade: A Notes:
/with JS enhancement. Multiple templates offer different levels. ββββββββββββββββββββββββββββββββββββββββ Category: Search Grade: B+ Notes: Present in interactive template with highlighting and ancestor expansion; no βcenter on resultβ or βMeβ view. ββββββββββββββββββββββββββββββββββββββββ Category: Visual Layout Grade: B Notes: No true hybrid layout (horizontal top + vertical bottom). Each template is one direction only. ββββββββββββββββββββββββββββββββββββββββ Category: Dotted-Line Relationships Grade: B- Notes: Database supports them, but most templates donβt render secondary relationships visually. ββββββββββββββββββββββββββββββββββββββββ Category: WCAG Validation Grade: A- Notes: 14 custom rules + axe-core. Limited by static analysis (canβt test keyboard/zoom). ββββββββββββββββββββββββββββββββββββββββ Category: Template Variety Grade: A Notes: 8 templates covering tree, list, card, grid, and text views β exactly the βalternative viewsβ WCAG recommends.
The biggest gaps are the lack of a hybrid layout template and underutilization of the relationship types data in visual rendering. The strengths are in semantic HTML, ARIA tree implementation, keyboard navigation, and having multiple accessible alternative views.
- β
β β β elements. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-expanded β Toggle state for β Yes. Set on treeitems with children. The WCAG validator has a β
β β expand/collapse β dedicated rule (aria-expanded-required) checking this. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β aria-controls β Link toggle to β Yes. Interactive-collapsible links summary to children group. β
β β sub-list β Top-down-tree uses aria-owns. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Tab to β Sequential navigation β Yes. All interactive elements are focusable. β
β cards β β β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: Arrow β Up/Down siblings, β Yes in interactive-collapsible template (full arrow key β
β keys β Right expand, Left β navigation). Yes in OrgDataTable editor (Up/Down/Home/End). No β
β β collapse β in the static tree templates (theyβre non-interactive HTML). β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Keyboard: β Expand/collapse nodes β Yes. Interactive-collapsible handles Enter/Space. β
β Enter/Space toggle β β
- . β
ββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β role=βtreeβ / β β Yes. Top-down-tree, horizontal-tree, interactive-collapsible β
β role=βtreeitemβ β ARIA tree widget β all use role=βtreeβ on root