
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
vue-a11y-dialog
Advanced tools
This is a Vue.js wrapper component for a11y-dialog@7.3.0
(Demo on CodeSandbox).
This library supports both Vue 3 and Vue 2. However, active maintenance is focused on Vue 3. If you still need to support Vue 2, you can stay on version 0.5.2
.
Vue 3
npm install vue-a11y-dialog
Vue 2
npm install vue-a11y-dialog@0.5.2
In your main.js
application file, install the component:
import { createApp } from 'vue'
import A11yDialog from 'vue-a11y-dialog'
import App from './App.vue'
createApp(App).use(A11yDialog).mount('#app')
Then use it as follows:
<template>
<div id="app">
<!-- ... -->
<button type="button" @click="openDialog">
Open dialog
</button>
<a11y-dialog
id="app-dialog"
@dialog-ref="assignDialogRef"
>
<template v-slot:title>
<span>Your dialog title</span>
</template>
<div>
<p>Your content</p>
</div>
</a11y-dialog>
</div>
</template>
export default {
name: 'YourComponent',
data: () => ({
dialog: null
}),
methods: {
openDialog() {
if (this.dialog) {
this.dialog.show()
}
},
assignDialogRef(dialog) {
this.dialog = dialog
}
}
}
It's important to assign the direct reference to the dialog instance via @dialog-ref
, otherwise there is no way to call its methods.
Alternatively, you can also import the component directly into your file without installing it first:
import { A11yDialog } from 'vue-a11y-dialog'
export default {
name: 'YourComponent',
components: {
'a11y-dialog': A11yDialog
},
methods: {
// ...
}
}
It's possible to use multiple dialogs in the same component, just make sure to assign the different dialog
instances separately.
In your <template>
:
<template>
<div id="app">
<!-- First dialog -->
<a11y-dialog
id="first-dialog"
@dialog-ref="dialog => assignDialogRef('first', dialog)"
>
<template v-slot:title>
<span>First dialog title</span>
</template>
<div>
<p>Your content</p>
</div>
</a11y-dialog>
<!-- Second dialog -->
<a11y-dialog
id="second-dialog"
@dialog-ref="dialog => assignDialogRef('second', dialog)"
>
<template v-slot:title>
<span>Second dialog title</span>
</template>
<div>
<p>Your content</p>
</div>
</a11y-dialog>
</div>
</template>
In your <script>
:
import { A11yDialog } from 'vue-a11y-dialog';
export default {
name: 'YourComponent',
data: () => ({
dialogs: {}
}),
methods: {
assignDialogRef(type, dialog) {
this.dialogs[type] = dialog
}
}
}
All
a11y-dialog
instance methods are available, for further documentation see here.
id
id
String
true
id
attribute added to the dialog element, internally used by a11y-dialog to manipulate the dialog.<a11y-dialog id="main-dialog">
<!-- ... -->
</a11y-dialog>
dialog-root
dialog-root
String
— CSS Selector string.false
'body'
<a11y-dialog dialog-root="#dialog-root">
<!-- ... -->
</a11y-dialog>
class-names
class-names
Object
false
{}
base
, overlay
, document
, title
, closeButton
. See a11y-dialog docs for reference.<a11y-dialog :class-names="{ base: 'base-class', overlay: 'overlay-class' }">
<!-- ... -->
</a11y-dialog>
title-id
title-id
String
false
id + '-title'
.id
attribute of the dialog’s title element, used by assistive technologies to provide context and meaning to the dialog window.<a11y-dialog title-id="main-title">
<!-- ... -->
</a11y-dialog>
close-button-label
close-button-label
String
false
'Close this dialog window'
aria-label
attribute of the close button, used by assistive technologies to provide extra meaning to the usual cross-mark.<a11y-dialog close-button-label="Close dialog">
<!-- ... -->
</a11y-dialog>
role
role
String
false
dialog
role
attribute of the dialog element, either dialog
(default) or alertdialog
to make it a modal (preventing closing on click outside of ESC key).<a11y-dialog role="alertdialog">
<!-- ... -->
</a11y-dialog>
dialog-ref
a11y-dialog
instance or undefined
.a11y-dialog
instance once the component has been initialised. When it gets destroyed
, the event returns undefined
. This is needed to call instance methods of the dialog, e.g. this.dialog.show()
.<a11y-dialog @dialog-ref="assignDialogRef">
<!-- ... -->
</a11y-dialog>
export default {
// ...
methods: {
assignDialogRef(dialog) {
this.dialog = dialog
}
}
}
title
title
<a11y-dialog>
<template v-slot:title>
<span>Your dialog title</span>
</template>
<!-- ... -->
</a11y-dialog>
closeButtonContent
closeButtonContent
\u00D7
(×)<a11y-dialog>
<template v-slot:closeButtonContent>
<span>Close dialog</span>
</template>
<!-- ... -->
</a11y-dialog>
closeButtonPosition
closeButtonPosition
first
first
, last
, or none
<a11y-dialog close-button-position="last">
<template v-slot:closeButtonContent>
<span>Close dialog</span>
</template>
<!-- ... -->
</a11y-dialog>
This is a client-only component; a11y-dialog
won't render anything on the server and wait for your bundle to be executed on the client.
[1.1.2] 2022-04-02
alertdialog
to be conditionally applied #39 (Thanks to @roblevintennis)FAQs
Vue.js component wrapping for a11y-dialog
We found that vue-a11y-dialog demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.