mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-11 02:46:16 -08:00
A Sources row opened only on a pointer click: the row div was not focusable and had no key handler, so a keyboard user could Tab to its actions but never open the playlist. Following app-content-card, the row's title and meta block becomes the keyboard activation element: role="button", tabindex="0", named by the source title, aria-current on the active source, aria-disabled while busy. Enter and Space open the source (Space prevents the page scroll). The drag handle, health indicator and actions stay its siblings, so no control is nested inside a role="button" and their keys never bubble into it. A click anywhere on the row still opens it via the row. The row draws the ring with the shared focus-ring mixin, inset, because the list's scroller would cut a ring drawn outside the full-width row. playlist-shared-ui now declares its ui-styles stylesheet dependency. Tests: unit spec for Enter/Space, bubbling from an action button, busy and selected states; Electron E2E tabs to a source row, checks the ring and opens it with Enter (fails on the previous component). Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
726 B
JSON
23 lines
726 B
JSON
{
|
|
"name": "playlist-shared-ui",
|
|
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
|
"sourceRoot": "libs/playlist/shared/ui/src",
|
|
"prefix": "lib",
|
|
"projectType": "library",
|
|
"tags": ["scope:playlist", "domain:m3u", "type:ui"],
|
|
"implicitDependencies": ["ui-styles"],
|
|
"targets": {
|
|
"test": {
|
|
"executor": "@nx/jest:jest",
|
|
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
|
|
"options": {
|
|
"jestConfig": "libs/playlist/shared/ui/jest.config.ts",
|
|
"tsConfig": "libs/playlist/shared/ui/tsconfig.spec.json"
|
|
}
|
|
},
|
|
"lint": {
|
|
"executor": "@nx/eslint:lint"
|
|
}
|
|
}
|
|
}
|