Ava Wroten
            
            She/Her
          
 
          
          
            On Gitlab @gaiety
            
               Or Github @sharpshark28
            
            Or Github @sharpshark28
          
A project feature saved by A11y
Mouse Drag & Drop
Do we support Touch?
What about A11y?
A11Y
A....11.....Y
Accessibility
Equity
Limited mobility, muscle slowness, tremors, low vision, color blindness, partial hearing loss, etc
Web assistive technologies commonly help with...
👩🏽🔬 👨🏾🎨 👩🏻🔧 👨🏼✈️
I build software for humans
So I did some research...
W3C Pattern Rearrangable Listbox
✔️ Mouse Drag & Drop
✔️ Touch Drag & Drop
✔️ High Ember Observer Ranking
Heres the final result...
index.hbs
            <SortableGroupAccessible
              tabindex="0"
              class="border focus:border-teal-400"
            > Foo </SortableGroupAccessible>
          sortable-group-accessible.hbs
              <div ...attributes>
                {{yield}}
              </div>
            rendered html
              <div tabindex="0" class="border focus:border-teal-400"
              > Foo </div>
            sortable-group-accessible.hbs
            <div
              {{on 'focus' this.handleFocus}}
              {{on 'blur' this.handleBlur}}
              {{key-up this.handleArrowUp key='ArrowUp'}}
              {{key-up this.handleArrowDown key='ArrowDown'}}
          modifiers/key-up.js
            import { modifier } from 'ember-modifier';
            const listener = (evt) => {
              if (!desiredKey || desiredKey === evt.key) handler(evt);
            }
            export default modifier(function keyUp(element, [handler], { key: desiredKey }) {
              element.addEventListener('keyup', listener);
              return () => { element.removeEventListener('keyup', listener); }
            });
          modifiers/key-up-test.js
            test('it can listen for specific key up events', async function(assert) {
              this.keyUp = ({ key }) => {
                assert.step('key up');
                assert.equal(key, 'Enter');
              };
              await render(hbs`
                <div {{key-up this.keyUp}} data-test-id='keyup'></div>`);
              let selector = '[data-test-id=keyup]';
              await triggerKeyEvent(selector, 'keyup', 'Enter');
              assert.verifySteps(['key up']);
            });
          index-test.js
            assert.dom(findAll('[data-test-id=item]')[0]).hasText('Item 1');
            assert.dom(findAll('[data-test-id=item]')[1]).hasText('Item 2');
            await triggerEvent('[data-test-id=group]', 'focus');
            await click('[data-test-id=sort-down]');
            assert.dom(findAll('[data-test-id=item]')[0]).hasText('Item 2');
            assert.dom(findAll('[data-test-id=item]')[1]).hasText('Item 1');
          v2.x.x ember-sortable
Hire someone different than you.
Make A11y a priority at your next design meeting!
Thank you