chore: add roles to edges
This commit is contained in:
@@ -136,28 +136,28 @@ export function EdgeWrapper<EdgeType extends Edge = Edge>({
|
|||||||
|
|
||||||
const onEdgeDoubleClick = onDoubleClick
|
const onEdgeDoubleClick = onDoubleClick
|
||||||
? (event: React.MouseEvent) => {
|
? (event: React.MouseEvent) => {
|
||||||
onDoubleClick(event, { ...edge });
|
onDoubleClick(event, { ...edge });
|
||||||
}
|
}
|
||||||
: undefined;
|
: undefined;
|
||||||
const onEdgeContextMenu = onContextMenu
|
const onEdgeContextMenu = onContextMenu
|
||||||
? (event: React.MouseEvent) => {
|
? (event: React.MouseEvent) => {
|
||||||
onContextMenu(event, { ...edge });
|
onContextMenu(event, { ...edge });
|
||||||
}
|
}
|
||||||
: undefined;
|
: undefined;
|
||||||
const onEdgeMouseEnter = onMouseEnter
|
const onEdgeMouseEnter = onMouseEnter
|
||||||
? (event: React.MouseEvent) => {
|
? (event: React.MouseEvent) => {
|
||||||
onMouseEnter(event, { ...edge });
|
onMouseEnter(event, { ...edge });
|
||||||
}
|
}
|
||||||
: undefined;
|
: undefined;
|
||||||
const onEdgeMouseMove = onMouseMove
|
const onEdgeMouseMove = onMouseMove
|
||||||
? (event: React.MouseEvent) => {
|
? (event: React.MouseEvent) => {
|
||||||
onMouseMove(event, { ...edge });
|
onMouseMove(event, { ...edge });
|
||||||
}
|
}
|
||||||
: undefined;
|
: undefined;
|
||||||
const onEdgeMouseLeave = onMouseLeave
|
const onEdgeMouseLeave = onMouseLeave
|
||||||
? (event: React.MouseEvent) => {
|
? (event: React.MouseEvent) => {
|
||||||
onMouseLeave(event, { ...edge });
|
onMouseLeave(event, { ...edge });
|
||||||
}
|
}
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
const onKeyDown = (event: KeyboardEvent) => {
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
@@ -198,7 +198,8 @@ export function EdgeWrapper<EdgeType extends Edge = Edge>({
|
|||||||
onMouseLeave={onEdgeMouseLeave}
|
onMouseLeave={onEdgeMouseLeave}
|
||||||
onKeyDown={isFocusable ? onKeyDown : undefined}
|
onKeyDown={isFocusable ? onKeyDown : undefined}
|
||||||
tabIndex={isFocusable ? 0 : undefined}
|
tabIndex={isFocusable ? 0 : undefined}
|
||||||
role={isFocusable ? 'button' : 'img'}
|
role={edge.ariaRole === null ? undefined : edge.ariaRole || (isFocusable ? 'group' : 'img')}
|
||||||
|
aria-roledescription={edge.ariaRoleDescription || 'edge'}
|
||||||
data-id={id}
|
data-id={id}
|
||||||
data-testid={`rf__edge-${id}`}
|
data-testid={`rf__edge-${id}`}
|
||||||
aria-label={
|
aria-label={
|
||||||
|
|||||||
@@ -36,8 +36,6 @@
|
|||||||
style:width={toPxString(width)}
|
style:width={toPxString(width)}
|
||||||
style:height={toPxString(height)}
|
style:height={toPxString(height)}
|
||||||
style:z-index={z}
|
style:z-index={z}
|
||||||
role="group"
|
|
||||||
aria-roledescription="edge label"
|
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
onclick={() => {
|
onclick={() => {
|
||||||
if (selectEdgeOnClick && id) store.handleEdgeSelection(id);
|
if (selectEdgeOnClick && id) store.handleEdgeSelection(id);
|
||||||
|
|||||||
@@ -137,7 +137,8 @@
|
|||||||
? ariaLabel
|
? ariaLabel
|
||||||
: `Edge from ${source} to ${target}`}
|
: `Edge from ${source} to ${target}`}
|
||||||
aria-describedby={focusable ? `${ARIA_EDGE_DESC_KEY}-${store.flowId}` : undefined}
|
aria-describedby={focusable ? `${ARIA_EDGE_DESC_KEY}-${store.flowId}` : undefined}
|
||||||
role={focusable ? 'button' : 'img'}
|
role={edge.ariaRole === null ? undefined : edge.ariaRole || (focusable ? 'group' : 'img')}
|
||||||
|
aria-roledescription={edge.ariaRoleDescription || 'edge'}
|
||||||
onkeydown={focusable ? onkeydown : undefined}
|
onkeydown={focusable ? onkeydown : undefined}
|
||||||
tabindex={focusable ? 0 : undefined}
|
tabindex={focusable ? 0 : undefined}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Position } from './utils';
|
import { Position, AriaRole } from './utils';
|
||||||
|
|
||||||
export type EdgeBase<
|
export type EdgeBase<
|
||||||
EdgeData extends Record<string, unknown> = Record<string, unknown>,
|
EdgeData extends Record<string, unknown> = Record<string, unknown>,
|
||||||
@@ -40,6 +40,17 @@ export type EdgeBase<
|
|||||||
* This property sets the width of that invisible path.
|
* This property sets the width of that invisible path.
|
||||||
*/
|
*/
|
||||||
interactionWidth?: number;
|
interactionWidth?: number;
|
||||||
|
/**
|
||||||
|
* The ARIA role attribute for the edge, used for accessibility.
|
||||||
|
* @default "group"
|
||||||
|
*/
|
||||||
|
|
||||||
|
ariaRole?: AriaRole;
|
||||||
|
/**
|
||||||
|
* A description of the edge's, used for accessibility.
|
||||||
|
* @default "node"
|
||||||
|
*/
|
||||||
|
ariaRoleDescription?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SmoothStepPathOptions = {
|
export type SmoothStepPathOptions = {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import type { XYPosition, Position, CoordinateExtent, Handle } from '.';
|
import type { XYPosition, Position, CoordinateExtent, Handle } from '.';
|
||||||
import { Optional } from '../utils/types';
|
import { Optional } from '../utils/types';
|
||||||
|
import { AriaRole } from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Framework independent node data structure.
|
* Framework independent node data structure.
|
||||||
@@ -191,4 +192,3 @@ export type Align = 'center' | 'start' | 'end';
|
|||||||
|
|
||||||
export type NodeLookup<NodeType extends InternalNodeBase = InternalNodeBase> = Map<string, NodeType>;
|
export type NodeLookup<NodeType extends InternalNodeBase = InternalNodeBase> = Map<string, NodeType>;
|
||||||
export type ParentLookup<NodeType extends InternalNodeBase = InternalNodeBase> = Map<string, Map<string, NodeType>>;
|
export type ParentLookup<NodeType extends InternalNodeBase = InternalNodeBase> = Map<string, Map<string, NodeType>>;
|
||||||
export type AriaRole = 'button' | 'group' | 'listitem' | 'application' | 'region' | 'none' | null;
|
|
||||||
|
|||||||
@@ -56,3 +56,8 @@ export type Transform = [number, number, number];
|
|||||||
* to represent an unbounded extent.
|
* to represent an unbounded extent.
|
||||||
*/
|
*/
|
||||||
export type CoordinateExtent = [[number, number], [number, number]];
|
export type CoordinateExtent = [[number, number], [number, number]];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `AriaRole` type is used to define the role of an element in the accessibility tree.
|
||||||
|
*/
|
||||||
|
export type AriaRole = 'button' | 'group' | 'listitem' | 'application' | 'region' | 'none' | null;
|
||||||
|
|||||||
Reference in New Issue
Block a user