react-dnd-accessible-backend
Version:
An add-on backend for react-dnd that provides support for keyboards and screenreaders by default.
56 lines • 2.05 kB
JavaScript
import { getDefaultAnnouncementMessages } from "./util/AnnouncementMessages";
// It's a little annoying to have to statically require this. We _could_ make
// it fully external and require consumers to provide it always, but ensuring
// that an announcer exists implicitly feels more appropriate. Most consumers
// likely won't override this, or will be overriding with the same library
// anyway.
import * as LiveAnnouncer from "@react-aria/live-announcer";
export default class DragAnnouncer {
announcer;
externalAnnouncer;
getMessages;
constructor({ getAnnouncementMessages, announcer } = {}) {
this.getMessages = getAnnouncementMessages ?? getDefaultAnnouncementMessages;
this.externalAnnouncer = false;
if (announcer != null) {
this.announcer = announcer;
this.externalAnnouncer = true;
}
else {
this.announcer = {
announce: LiveAnnouncer.announce,
clearAnnouncements: LiveAnnouncer.clearAnnouncer,
destroy: LiveAnnouncer.destroyAnnouncer,
};
}
}
announce(message, assertiveness, timeout) {
this.announcer.announce(message, assertiveness, timeout);
}
announceDrag(node, id) {
if (node == null)
return;
this.announce(this.getMessages().pickedUpItem(id, node));
}
announceHover(node, id) {
if (node == null)
return;
this.announce(this.getMessages().hoveredTarget(id, node));
}
announceDrop(node, id) {
this.announce(this.getMessages().droppedItem(id, node));
}
announceCancel(node, id) {
this.announce(this.getMessages().canceledDrag(id, node));
}
clear() {
this.announcer.clearAnnouncements();
}
destroy() {
// don't destroy an external announcer, since it is likely used outside of drag-and-drop
if (!this.externalAnnouncer) {
this.announcer.destroy?.();
}
}
}
//# sourceMappingURL=DragAnnouncer.js.map