-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make Spinner accessible #2416
base: master
Are you sure you want to change the base?
Make Spinner accessible #2416
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,6 +21,9 @@ export const spinnerRecipe = cva({ | |
borderBlockColor: "background.subtle", | ||
borderInlineStartColor: "background.subtle", | ||
borderInlineEndColor: "stroke.default", | ||
"& [data-name='text']": { | ||
display: "none", | ||
}, | ||
_motionReduce: { | ||
animationDuration: "2s", | ||
}, | ||
|
@@ -56,5 +59,13 @@ export type SpinnerProps = HTMLArkProps<"div"> & JsxStyleProps & SpinnerVariantP | |
const StyledSpinner = styled(ark.div, {}, { baseComponent: true }); | ||
|
||
export const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(({ size, css: cssProp, ...props }, ref) => ( | ||
<StyledSpinner css={css.raw(spinnerRecipe.raw({ size }), cssProp)} {...props} ref={ref} /> | ||
<StyledSpinner | ||
aria-busy="true" | ||
aria-live="polite" | ||
aria-valuetext="Loading" | ||
role="progressbar" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Dette skal nok ikke være en progressbar, men heller en status. Vi har ikke noe progress på spinneren vår. Enten så eksisterer den eller så eksisterer den ikke. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Det er ikke helt presist. Progressbar kan fint brukes for ikke-definerte måledistanser, selv om det er mindre vanlig. Lasting er en status, men det er også en progresjon selv om vi ikke måler og viser den. Her er det gjort med vilje for å kunne støtte aria-valuetext. Men sida jeg også har valgt polite over assertive, så antar jeg at jeg kan bruke aria-label til samme info, og bare flatt sette aria-status. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Forøvrig en sammenligning mellom role="status" (første bilde) og role="progressbar" (andre bildet) når jeg blar igjennom ei side som fortsatt har en spinner: I den første, som har role="status", dukker kun teksten opp fordi jeg har lagt den som en paragraph; aria-label plukka den ikke opp. Nøkkelinfo er hhv nest siste og siste linje, teksten "Venter i spenning". Jeg prøvde også å bytte ut Spinner-komponenten med en vanlig div, i tilfelle det var noe mer ark (mer for å utelukke) aria-hidden fordi jeg ikke vil lese opp bokstaven T. Og den hopper da glatt over det når jeg blar igjennom sida, og oppfatter ingenting. Er åpen for at jeg kanskje gjør noe feil, men det skal litt til å ødelegge speech vieweren, og jeg kan ikke se role="status" klarer å gi en skjermleser det samme som role="progressbar" her. |
||
css={css.raw(spinnerRecipe.raw({ size }), cssProp)} | ||
{...props} | ||
ref={ref} | ||
/> | ||
)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bør vel puttes inn i oversettelser.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nei. Vi støtter ikke oversettelser i primitives, og det synes jeg ikke vi skal heller. Dette burde generelt sett settes der den brukes, for å gi mer nøyaktige oversettelser.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Må innrømme jeg hadde over gjennomsnittet lyst te å legge inn oversettelser her, men sida denne valuetexten KAN være noe forskjellig avhengig av hvor spinneren brukes (trenger ikke være, men kan), ble det hakket mindre viktig.
Denne fungerer derfor kun som en fallbackverdi. Jo flere ting man må huske å sette på komponentene, jo lettere er det for at noe går i glømmeboka. Spesielt attributter som brukes mindre jevnlig er utsatt for å kunne glemmes. For meg er det argument godt nok til å beholde den her, som en fallback. Men den bør definitivt overskrives der komponenten brukes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Denne må vel overstyres alle steder, da hovedspråket på siden er norsk. Da er det like greit å gjøre den required v.h.a typescript.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Da liker jeg faktisk oversettelser bedre, ev. under egen gruppering
composites
eller noe, dersom primitives skal være fri for slikt. Jeg mener det ikke er sannsynlig at den tekstverdien kommer til å ende opp med å være forskjellig på alle steder, og da mener jeg det er tungvint å skulle legge den inn hvert sted komponenten brukes hvis det kan unngås (og heller la den være overstyrbar de steder den må overstyres).Jeg tar den ut og legger den som required for typescript nå (så kan det heller gjøres om senere), men ber om at vi gjør en vurdering av om vi kan håndtere slikt bedre.