├── .nvmrc ├── .eslintignore ├── .github └── CONTRIBUTING.md ├── packages ├── docs │ ├── content │ │ └── README.md │ ├── .vuepress │ │ └── config │ │ │ └── config.js │ ├── README.md │ └── package.json ├── aria-widgets │ ├── .prettierignore │ ├── postcss.config.js │ ├── src │ │ ├── utils │ │ │ ├── index.js │ │ │ └── pick.ts │ │ ├── Button │ │ │ ├── index.ts │ │ │ └── Button.ts │ │ ├── Tabbable │ │ │ ├── index.ts │ │ │ └── use-tabbable.ts │ │ ├── Teleport │ │ │ ├── index.ts │ │ │ └── Teleport.ts │ │ ├── Clickable │ │ │ ├── index.ts │ │ │ └── use-clickable.ts │ │ ├── FocusTrap │ │ │ ├── index.ts │ │ │ ├── index.css │ │ │ ├── inert.ts │ │ │ └── FocusTrap.ts │ │ ├── ListBox │ │ │ ├── index.ts │ │ │ ├── index.css │ │ │ ├── ListBoxItem.ts │ │ │ └── useListBox.ts │ │ ├── Dialog │ │ │ ├── index.ts │ │ │ ├── DialogTrigger.ts │ │ │ ├── useDialog.ts │ │ │ └── DialogContent.ts │ │ ├── Popover │ │ │ ├── index.ts │ │ │ ├── PopoverTrigger.ts │ │ │ ├── usePopover.ts │ │ │ └── PopoverContent.ts │ │ ├── Accordion │ │ │ ├── index.ts │ │ │ ├── AccordionContent.ts │ │ │ ├── AccordionHeader.ts │ │ │ └── use-accordion.ts │ │ ├── Disclosure │ │ │ ├── index.ts │ │ │ ├── DisclosureContent.ts │ │ │ ├── use-disclosure.ts │ │ │ └── DisclosureTrigger.ts │ │ ├── Tabs │ │ │ ├── index.ts │ │ │ ├── index.css │ │ │ ├── TabList.ts │ │ │ ├── TabPanel.ts │ │ │ ├── Tab.ts │ │ │ └── use-tabs.ts │ │ ├── VisuallyHidden │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── ToggleButton │ │ │ └── index.ts │ │ ├── SkipToContent │ │ │ └── index.ts │ │ └── types │ │ │ └── index.ts │ ├── .gitignore │ ├── jest.config.js │ ├── .prettierrc │ ├── tsconfig.build.json │ ├── .eslintrc.js │ ├── templates │ │ ├── README.md │ │ ├── childComponent.ts │ │ └── wrapperComponent.ts │ ├── tsdx.config.js │ ├── LICENSE │ ├── README.md │ └── package.json ├── aria-composables │ ├── .prettierignore │ ├── .gitignore │ ├── jest.config.js │ ├── .prettierrc │ ├── src │ │ ├── helpers │ │ │ ├── index.ts │ │ │ ├── __tests__ │ │ │ │ ├── tab-direction.spec.ts │ │ │ │ └── focus-tracker.spec.ts │ │ │ ├── tab-direction.ts │ │ │ └── focus-tracker.ts │ │ ├── utils │ │ │ ├── index.ts │ │ │ ├── apply-focus.ts │ │ │ ├── id.ts │ │ │ ├── inject.ts │ │ │ └── focusable-elements.ts │ │ ├── index.ts │ │ ├── composables │ │ │ ├── reactive-defaults.ts │ │ │ ├── index.ts │ │ │ ├── state.ts │ │ │ ├── focus-observer.ts │ │ │ ├── __tests__ │ │ │ │ ├── reactive-defaults.spec.ts │ │ │ │ ├── id.spec.ts │ │ │ │ ├── focus-observer.spec.ts │ │ │ │ ├── template-refs.spec.ts │ │ │ │ ├── click-outside.spec.ts │ │ │ │ ├── keys.spec.ts │ │ │ │ └── events.spec.ts │ │ │ ├── click-outside.ts │ │ │ ├── template-refs.ts │ │ │ ├── events.ts │ │ │ ├── keys.ts │ │ │ └── arrow-navigation.ts │ │ └── types │ │ │ └── index.ts │ ├── .eslintrc.js │ ├── tsconfig.build.json │ ├── LICENSE │ ├── README.md │ ├── test │ │ └── helpers.ts │ └── package.json ├── examples │ ├── .browserslistrc │ ├── vue.config.js │ ├── cypress.json │ ├── babel.config.js │ ├── public │ │ ├── favicon.ico │ │ └── index.html │ ├── src │ │ ├── assets │ │ │ ├── logo.png │ │ │ └── tailwind.css │ │ ├── shims-vue.d.ts │ │ ├── views │ │ │ ├── Home.vue │ │ │ ├── Disclosures.vue │ │ │ ├── Dialogs.vue │ │ │ ├── FocusTraps.vue │ │ │ ├── Buttons.vue │ │ │ ├── Accordions.vue │ │ │ ├── ListBox.vue │ │ │ ├── Popovers.vue │ │ │ └── Tabs.vue │ │ ├── main.ts │ │ ├── components │ │ │ └── SignupForm.vue │ │ ├── router │ │ │ └── index.ts │ │ └── App.vue │ ├── postcss.config.js │ ├── tailwind.config.js │ ├── tests │ │ └── e2e │ │ │ ├── .eslintrc.js │ │ │ ├── specs │ │ │ └── test.js │ │ │ ├── support │ │ │ ├── index.js │ │ │ └── commands.js │ │ │ └── plugins │ │ │ └── index.js │ ├── .gitignore │ ├── README.md │ ├── .eslintrc.js │ ├── tsconfig.json │ └── package.json └── dev-server │ ├── index.html │ ├── postcss.config.js │ ├── tailwind.config.js │ ├── vite.config.js │ ├── views │ ├── Home.vue │ ├── Disclosures.vue │ ├── Dialogs.vue │ ├── FocusTraps.vue │ ├── Buttons.vue │ ├── Accordions.vue │ ├── ListBox.vue │ ├── Popovers.vue │ └── Tabs.vue │ ├── assets │ └── tailwind.css │ ├── main.ts │ ├── .eslintrc.js │ ├── package.json │ ├── LICENSE │ ├── router │ ├── index.ts │ └── routes.ts │ ├── components │ └── SignupForm.vue │ └── App.vue ├── .prettierrc ├── lerna.json ├── tsconfig.json ├── .gitignore ├── LICENSE ├── package.json ├── config └── typescript │ └── tsconfig.build.json └── README.md /.nvmrc: -------------------------------------------------------------------------------- 1 | v12 2 | v11 3 | v10 -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /packages/*/dist -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | _TBD_ 2 | -------------------------------------------------------------------------------- /packages/docs/content/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/aria-widgets/.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | /types -------------------------------------------------------------------------------- /packages/aria-composables/.prettierignore: -------------------------------------------------------------------------------- 1 | /dist 2 | /types -------------------------------------------------------------------------------- /packages/aria-widgets/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {} 2 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/utils/index.js: -------------------------------------------------------------------------------- 1 | export * from './pick' 2 | -------------------------------------------------------------------------------- /packages/docs/.vuepress/config/config.js: -------------------------------------------------------------------------------- 1 | module.exports = {} 2 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Tabbable/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-tabbable' 2 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Teleport/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Teleport' 2 | -------------------------------------------------------------------------------- /packages/examples/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | dist 5 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Clickable/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-clickable' 2 | -------------------------------------------------------------------------------- /packages/aria-composables/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | dist 5 | -------------------------------------------------------------------------------- /packages/examples/vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | lintOnSave: false, 3 | } 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | } 4 | -------------------------------------------------------------------------------- /packages/examples/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "pluginsFile": "tests/e2e/plugins/index.js" 3 | } 4 | -------------------------------------------------------------------------------- /packages/aria-composables/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | } 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/FocusTrap/index.ts: -------------------------------------------------------------------------------- 1 | import './index.css' 2 | export * from './FocusTrap' 3 | -------------------------------------------------------------------------------- /packages/dev-server/index.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | -------------------------------------------------------------------------------- /packages/examples/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@vue/cli-plugin-babel/preset'], 3 | } 4 | -------------------------------------------------------------------------------- /packages/dev-server/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | }, 5 | } 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "semi": false 6 | } -------------------------------------------------------------------------------- /packages/examples/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinusBorg/varia/HEAD/packages/examples/public/favicon.ico -------------------------------------------------------------------------------- /packages/examples/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinusBorg/varia/HEAD/packages/examples/src/assets/logo.png -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "npmClient": "yarn", 3 | "packages": ["packages/*"], 4 | "version": "0.0.0", 5 | "useWorkspaces": true 6 | } 7 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/ListBox/index.ts: -------------------------------------------------------------------------------- 1 | import './index.css' 2 | export * from './useListBox' 3 | export * from './ListBoxItem' 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "semi": false 6 | } -------------------------------------------------------------------------------- /packages/aria-composables/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "semi": false 6 | } -------------------------------------------------------------------------------- /packages/aria-composables/src/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export { tabDirection } from './tab-direction' 2 | export { focusTracker } from './focus-tracker' 3 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useDialog' 2 | export * from './DialogTrigger' 3 | export * from './DialogContent' 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Popover/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PopoverContent' 2 | export * from './PopoverTrigger' 3 | export * from './usePopover' 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Accordion/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-accordion' 2 | export * from './AccordionHeader' 3 | export * from './AccordionContent' 4 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Disclosure/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-disclosure' 2 | export * from './DisclosureTrigger' 3 | export * from './DisclosureContent' 4 | -------------------------------------------------------------------------------- /packages/examples/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | 'vue-cli-plugin-tailwind/purgecss': {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /packages/dev-server/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: [], 3 | theme: { 4 | extend: {}, 5 | }, 6 | variants: {}, 7 | plugins: [], 8 | } 9 | -------------------------------------------------------------------------------- /packages/examples/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: [], 3 | theme: { 4 | extend: {}, 5 | }, 6 | variants: {}, 7 | plugins: [], 8 | } 9 | -------------------------------------------------------------------------------- /packages/aria-composables/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './id' 2 | export * from './apply-focus' 3 | export * from './focusable-elements' 4 | export * from './inject' 5 | -------------------------------------------------------------------------------- /packages/aria-composables/src/utils/apply-focus.ts: -------------------------------------------------------------------------------- 1 | export function applyFocus(_el: HTMLElement) { 2 | // else, it's an Element 3 | const el = _el 4 | el.focus() 5 | } 6 | -------------------------------------------------------------------------------- /packages/dev-server/vite.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | optimizeDeps: { 3 | include: ['cuid'], 4 | exclude: ['@varia/widgets', '@varia/composables'], 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-tabs' 2 | export * from './TabList' 3 | export * from './Tab' 4 | export * from './TabPanel' 5 | export * from './use-tabs' 6 | -------------------------------------------------------------------------------- /packages/docs/README.md: -------------------------------------------------------------------------------- 1 | # `docs` 2 | 3 | > TODO: description 4 | 5 | ## Usage 6 | 7 | ``` 8 | const docs = require('docs'); 9 | 10 | // TODO: DEMONSTRATE API 11 | ``` 12 | -------------------------------------------------------------------------------- /packages/examples/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import { ComponentOptions } from 'vue' 3 | let component: ComponentOptions 4 | export default component 5 | } 6 | -------------------------------------------------------------------------------- /packages/aria-widgets/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../config/typescript/tsconfig.build.json", 3 | "include": ["./src"], 4 | "compilerOptions": { 5 | "outDir": "dist" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/examples/tests/e2e/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: ['cypress'], 3 | env: { 4 | mocha: true, 5 | 'cypress/globals': true, 6 | }, 7 | rules: { 8 | strict: 'off', 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /packages/dev-server/views/Home.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /packages/examples/src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /packages/dev-server/assets/tailwind.css: -------------------------------------------------------------------------------- 1 | button[disabled], 2 | [role='button'][disabled], 3 | [role='button'][aria-disabled='true'] { 4 | cursor: default; 5 | } 6 | 7 | @tailwind base; 8 | 9 | @tailwind components; 10 | 11 | @tailwind utilities; 12 | -------------------------------------------------------------------------------- /packages/examples/src/assets/tailwind.css: -------------------------------------------------------------------------------- 1 | button[disabled], 2 | [role='button'][disabled], 3 | [role='button'][aria-disabled='true'] { 4 | cursor: default; 5 | } 6 | 7 | @tailwind base; 8 | 9 | @tailwind components; 10 | 11 | @tailwind utilities; 12 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/Tabs/index.css: -------------------------------------------------------------------------------- 1 | [role='tab']:not([aria-disabled='true']) { 2 | cursor: pointer; 3 | } 4 | [role='tablist'] { 5 | outline: none; 6 | } 7 | [role='tablist']:focus [role='tab'][data-varia-focus='true'] { 8 | outline: 2px solid red; 9 | } 10 | -------------------------------------------------------------------------------- /packages/dev-server/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import router from './router/index' 4 | import '@varia/widgets/dist/index.css' 5 | import './assets/tailwind.css' 6 | 7 | createApp(App) 8 | .use(router) 9 | .mount('#app') 10 | -------------------------------------------------------------------------------- /packages/examples/tests/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // https://docs.cypress.io/api/introduction/api.html 2 | 3 | describe('My First Test', () => { 4 | it('Visits the app root url', () => { 5 | cy.visit('/') 6 | cy.contains('h1', 'Welcome to Your Vue.js + TypeScript App') 7 | }) 8 | }) 9 | -------------------------------------------------------------------------------- /packages/dev-server/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'plugin:vue/essential', 5 | '@vue/typescript', 6 | 'prettier/@typescript-eslint', 7 | 'plugin:prettier/recommended', 8 | ], 9 | rules: { 10 | eqeqeq: 'off', 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /packages/aria-composables/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'plugin:vue/essential', 5 | '@vue/typescript', 6 | 'prettier/@typescript-eslint', 7 | 'plugin:prettier/recommended', 8 | ], 9 | rules: { 10 | eqeqeq: 'off', 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /packages/aria-widgets/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'plugin:vue/essential', 5 | '@vue/typescript', 6 | 'prettier/@typescript-eslint', 7 | 'plugin:prettier/recommended', 8 | ], 9 | rules: { 10 | eqeqeq: 'off', 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/ListBox/index.css: -------------------------------------------------------------------------------- 1 | [role='listbox'] [role='option']:not([aria-disabled='true']) { 2 | cursor: pointer; 3 | } 4 | [role='listbox'] { 5 | outline: none; 6 | } 7 | [role='listbox']:focus [role='option'][data-varia-focus='true'] { 8 | outline: 2px solid red; 9 | } 10 | -------------------------------------------------------------------------------- /packages/aria-composables/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../config/typescript/tsconfig.build.json", 3 | "include": ["./src"], 4 | "compilerOptions": { 5 | "baseUrl": "./src", 6 | "rootDir": "./src", 7 | "outDir": "dist", 8 | "declarationDir": "./dist" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/aria-widgets/src/FocusTrap/index.css: -------------------------------------------------------------------------------- 1 | [data-varia-visually-hidden='true'] { 2 | position: absolute !important; 3 | height: 1px; 4 | width: 1px; 5 | overflow: hidden; 6 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ 7 | clip: rect(1px, 1px, 1px, 1px); 8 | white-space: nowrap; /* added line */ 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./config/typescript/tsconfig.build.json", 3 | "compilerOptions": { 4 | "paths": { 5 | "@varia/composables": ["./packages/aria-composables/src"], 6 | "@varia/widgets": ["./packages/aria-widgets/src"] 7 | }, 8 | "baseUrl": ".", 9 | "rootDir": "." 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/examples/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import { install as plugin } from '@varia/widgets' 5 | import '@varia/widgets/dist/index.css' 6 | import './assets/tailwind.css' 7 | createApp(App) 8 | .use(router) 9 | .use(plugin) 10 | .mount('#app') 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | 23 | # custom 24 | /TODO.md 25 | /NOTES.md -------------------------------------------------------------------------------- /packages/aria-widgets/templates/README.md: -------------------------------------------------------------------------------- 1 | # What is this directory for? 2 | 3 | These are templates for the diffent base types of components we have. 4 | 5 | There's no clever generators or anything, just copy&past, and then replace the generic "component" names with the name of the actgual component. 6 | 7 | We could and should consider using something like hygen 8 | -------------------------------------------------------------------------------- /packages/aria-composables/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | 3 | export * from './composables' 4 | 5 | export * from './helpers' 6 | export { 7 | createId, 8 | createCachedIdFn, 9 | applyFocus, 10 | getFocusableElements, 11 | getFirstFocusableChild, 12 | getLastFocusableChild, 13 | TABBABLE_ELS, 14 | isNativeTabbable, 15 | createInjector, 16 | } from './utils' 17 | -------------------------------------------------------------------------------- /packages/aria-composables/src/composables/reactive-defaults.ts: -------------------------------------------------------------------------------- 1 | import { watch, reactive, toRefs, ToRefs, readonly } from 'vue' 2 | 3 | export function useReactiveDefaults
14 |
15 | Your library will be rebuilt if you make edits.
16 |
17 | ### `npm run build` or `yarn build`
18 |
19 | Bundles the package to the `dist` folder.
20 | The package is optimized and bundled with Rollup into multiple formats (CommonJS, UMD, and ES Module).
21 |
22 |
23 |
24 | ### `npm test` or `yarn test`
25 |
26 | Runs the test watcher (Jest) in an interactive mode.
27 | By default, runs tests related to files changed since the last commit.
28 |
--------------------------------------------------------------------------------
/packages/aria-composables/src/composables/events.ts:
--------------------------------------------------------------------------------
1 | import { ref, Ref, watch } from 'vue'
2 | import { MaybeRef, TemplRefType } from '../types'
3 |
4 | export type ElementRefs =
5 | | MaybeRef18 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 19 | tempor incididunt ut labore et dolore magna aliqua. Diam sit amet nisl 20 | suscipit adipiscing bibendum est ultricies. Est lorem ipsum dolor sit. 21 | Nibh sit amet commodo nulla facilisi nullam. Interdum velit euismod in 22 | pellentesque massa. Eget duis at tellus at urna condimentum mattis 23 | pellentesque id. Nascetur ridiculus mus mauris vitae ultricies leo. 24 | Suscipit tellus mauris a diam. Viverra maecenas accumsan lacus vel 25 | facilisis. Volutpat diam ut venenatis tellus in metus. In massa tempor nec 26 | feugiat nisl pretium fusce. Praesent tristique magna sit amet purus 27 | gravida. Fringilla phasellus faucibus scelerisque eleifend donec pretium. 28 | Malesuada pellentesque elit eget gravida cum. Non curabitur gravida arcu 29 | ac tortor dignissim convallis aenean et. Lacus viverra vitae congue eu 30 | consequat ac felis donec. Tristique magna sit amet purus. Scelerisque 31 | purus semper eget duis. 32 |
33 |34 | Mattis vulputate enim nulla aliquet porttitor lacus luctus. Tempor id eu 35 | nisl nunc mi. Vitae proin sagittis nisl rhoncus. Eget aliquet nibh 36 | praesent tristique magna sit amet purus. Et sollicitudin ac orci phasellus 37 | egestas tellus rutrum. Sed vulputate odio ut enim blandit volutpat 38 | maecenas volutpat. Lorem ipsum dolor sit amet consectetur. Amet tellus 39 | cras adipiscing enim eu turpis. Dui faucibus in ornare quam viverra orci 40 | sagittis eu. Tempus urna et pharetra pharetra massa massa ultricies mi 41 | quis. Habitant morbi tristique senectus et netus et. Sit amet nisl 42 | suscipit adipiscing bibendum est ultricies integer. Pharetra pharetra 43 | massa massa ultricies mi quis hendrerit. Tempus urna et pharetra pharetra 44 | massa massa ultricies. Rhoncus aenean vel elit scelerisque mauris. Amet 45 | mattis vulputate enim nulla aliquet porttitor lacus. 46 |
47 |18 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 19 | tempor incididunt ut labore et dolore magna aliqua. Diam sit amet nisl 20 | suscipit adipiscing bibendum est ultricies. Est lorem ipsum dolor sit. 21 | Nibh sit amet commodo nulla facilisi nullam. Interdum velit euismod in 22 | pellentesque massa. Eget duis at tellus at urna condimentum mattis 23 | pellentesque id. Nascetur ridiculus mus mauris vitae ultricies leo. 24 | Suscipit tellus mauris a diam. Viverra maecenas accumsan lacus vel 25 | facilisis. Volutpat diam ut venenatis tellus in metus. In massa tempor nec 26 | feugiat nisl pretium fusce. Praesent tristique magna sit amet purus 27 | gravida. Fringilla phasellus faucibus scelerisque eleifend donec pretium. 28 | Malesuada pellentesque elit eget gravida cum. Non curabitur gravida arcu 29 | ac tortor dignissim convallis aenean et. Lacus viverra vitae congue eu 30 | consequat ac felis donec. Tristique magna sit amet purus. Scelerisque 31 | purus semper eget duis. 32 |
33 |34 | Mattis vulputate enim nulla aliquet porttitor lacus luctus. Tempor id eu 35 | nisl nunc mi. Vitae proin sagittis nisl rhoncus. Eget aliquet nibh 36 | praesent tristique magna sit amet purus. Et sollicitudin ac orci phasellus 37 | egestas tellus rutrum. Sed vulputate odio ut enim blandit volutpat 38 | maecenas volutpat. Lorem ipsum dolor sit amet consectetur. Amet tellus 39 | cras adipiscing enim eu turpis. Dui faucibus in ornare quam viverra orci 40 | sagittis eu. Tempus urna et pharetra pharetra massa massa ultricies mi 41 | quis. Habitant morbi tristique senectus et netus et. Sit amet nisl 42 | suscipit adipiscing bibendum est ultricies integer. Pharetra pharetra 43 | massa massa ultricies mi quis hendrerit. Tempus urna et pharetra pharetra 44 | massa massa ultricies. Rhoncus aenean vel elit scelerisque mauris. Amet 45 | mattis vulputate enim nulla aliquet porttitor lacus. 46 |
47 |