Expose ripple as a directive
parent
c23d1431c7
commit
2dda15957a
|
@ -0,0 +1 @@
|
||||||
|
export * from './components/ripple/Ripple';
|
|
@ -0,0 +1,2 @@
|
||||||
|
'use strict';
|
||||||
|
module.exports = require('./components/ripple/Ripple.js');
|
|
@ -236,6 +236,7 @@
|
||||||
<router-link to="/inplace">Inplace</router-link>
|
<router-link to="/inplace">Inplace</router-link>
|
||||||
<router-link to="/progressbar">ProgressBar</router-link>
|
<router-link to="/progressbar">ProgressBar</router-link>
|
||||||
<router-link to="/progressspinner">ProgressSpinner</router-link>
|
<router-link to="/progressspinner">ProgressSpinner</router-link>
|
||||||
|
<router-link to="/ripple">Ripple</router-link>
|
||||||
<router-link to="/terminal">Terminal</router-link>
|
<router-link to="/terminal">Terminal</router-link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
@import '../../components/inputtext/InputText.css';
|
@import '../../components/inputtext/InputText.css';
|
||||||
@import '../../components/password/Password.css';
|
@import '../../components/password/Password.css';
|
||||||
@import '../../components/radiobutton/RadioButton.css';
|
@import '../../components/radiobutton/RadioButton.css';
|
||||||
|
@import '../../components/ripple/Ripple.css';
|
||||||
@import '../../components/tooltip/Tooltip.css';
|
@import '../../components/tooltip/Tooltip.css';
|
|
@ -152,26 +152,3 @@ button {
|
||||||
width: 1px;
|
width: 1px;
|
||||||
word-wrap: normal !important;
|
word-wrap: normal !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.p-ink {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
background: rgba(255, 255, 255, 0.5);
|
|
||||||
border-radius: 100%;
|
|
||||||
transform: scale(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-ink-active {
|
|
||||||
animation: ripple 0.4s linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-ripple-disabled .p-ink {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes ripple {
|
|
||||||
100% {
|
|
||||||
opacity: 0;
|
|
||||||
transform: scale(2.5);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
.p-ripple {
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-ink {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(255, 255, 255, 0.5);
|
||||||
|
border-radius: 100%;
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-ink-active {
|
||||||
|
animation: ripple 0.4s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-ripple-disabled .p-ink {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes ripple {
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
transform: scale(2.5);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
import Directive from 'vue';
|
||||||
|
|
||||||
|
export declare interface Ripple extends Directive {}
|
|
@ -52,6 +52,7 @@ import ProgressSpinner from './components/progressspinner/ProgressSpinner';
|
||||||
import Rating from './components/rating/Rating';
|
import Rating from './components/rating/Rating';
|
||||||
import RadioButton from './components/radiobutton/RadioButton';
|
import RadioButton from './components/radiobutton/RadioButton';
|
||||||
import Row from './components/row/Row';
|
import Row from './components/row/Row';
|
||||||
|
import Ripple from './components/ripple/Ripple';
|
||||||
import ScrollPanel from './components/scrollpanel/ScrollPanel';
|
import ScrollPanel from './components/scrollpanel/ScrollPanel';
|
||||||
import SelectButton from './components/selectbutton/SelectButton';
|
import SelectButton from './components/selectbutton/SelectButton';
|
||||||
import Slider from './components/slider/Slider';
|
import Slider from './components/slider/Slider';
|
||||||
|
@ -90,6 +91,7 @@ import Vuelidate from 'vuelidate';
|
||||||
Vue.use(Vuelidate);
|
Vue.use(Vuelidate);
|
||||||
Vue.use(ToastService);
|
Vue.use(ToastService);
|
||||||
Vue.directive('tooltip', Tooltip);
|
Vue.directive('tooltip', Tooltip);
|
||||||
|
Vue.directive('ripple', Ripple);
|
||||||
|
|
||||||
Vue.prototype.$appState = Vue.observable({inputStyle: 'outlined', darkTheme: false});
|
Vue.prototype.$appState = Vue.observable({inputStyle: 'outlined', darkTheme: false});
|
||||||
Vue.prototype.$primevue = Vue.observable({ripple: true});
|
Vue.prototype.$primevue = Vue.observable({ripple: true});
|
||||||
|
|
|
@ -290,6 +290,11 @@ export default new Router({
|
||||||
path: '/dialog',
|
path: '/dialog',
|
||||||
name: 'dialog',
|
name: 'dialog',
|
||||||
component: () => import('./views/dialog/DialogDemo.vue')
|
component: () => import('./views/dialog/DialogDemo.vue')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/display',
|
||||||
|
name: 'display',
|
||||||
|
component: () => import('./views/display/DisplayDemo.vue')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/dropdown',
|
path: '/dropdown',
|
||||||
|
@ -366,6 +371,16 @@ export default new Router({
|
||||||
name: 'listbox',
|
name: 'listbox',
|
||||||
component: () => import('./views/listbox/ListboxDemo.vue')
|
component: () => import('./views/listbox/ListboxDemo.vue')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/flexbox',
|
||||||
|
name: 'flexbox',
|
||||||
|
component: () => import('./views/flexbox/FlexBoxDemo.vue')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/floatlabel',
|
||||||
|
name: 'floatlabel',
|
||||||
|
component: () => import('./views/floatlabel/FloatLabelDemo.vue')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/megamenu',
|
path: '/megamenu',
|
||||||
name: 'megamenu',
|
name: 'megamenu',
|
||||||
|
@ -456,6 +471,11 @@ export default new Router({
|
||||||
name: 'rating',
|
name: 'rating',
|
||||||
component: () => import('./views/rating/RatingDemo.vue')
|
component: () => import('./views/rating/RatingDemo.vue')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/ripple',
|
||||||
|
name: 'ripple',
|
||||||
|
component: () => import('./views/ripple/RippleDemo.vue')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/scrollpanel',
|
path: '/scrollpanel',
|
||||||
name: 'scrollpanel',
|
name: 'scrollpanel',
|
||||||
|
@ -481,26 +501,6 @@ export default new Router({
|
||||||
name: 'spacing',
|
name: 'spacing',
|
||||||
component: () => import('./views/spacing/SpacingDemo.vue')
|
component: () => import('./views/spacing/SpacingDemo.vue')
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/display',
|
|
||||||
name: 'display',
|
|
||||||
component: () => import('./views/display/DisplayDemo.vue')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/flexbox',
|
|
||||||
name: 'flexbox',
|
|
||||||
component: () => import('./views/flexbox/FlexBoxDemo.vue')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/floatlabel',
|
|
||||||
name: 'floatlabel',
|
|
||||||
component: () => import('./views/floatlabel/FloatLabelDemo.vue')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/text',
|
|
||||||
name: 'text',
|
|
||||||
component: () => import('./views/text/TextDemo.vue')
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/splitbutton',
|
path: '/splitbutton',
|
||||||
name: 'splitbutton',
|
name: 'splitbutton',
|
||||||
|
@ -525,11 +525,6 @@ export default new Router({
|
||||||
path: '/steps/confirmation',
|
path: '/steps/confirmation',
|
||||||
component: () => import('./views/steps/ConfirmationDemo.vue')
|
component: () => import('./views/steps/ConfirmationDemo.vue')
|
||||||
}]
|
}]
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/textarea',
|
|
||||||
name: 'textarea',
|
|
||||||
component: () => import('./views/textarea/TextareaDemo.vue')
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/tabmenu',
|
path: '/tabmenu',
|
||||||
|
@ -560,6 +555,16 @@ export default new Router({
|
||||||
name: 'tabview',
|
name: 'tabview',
|
||||||
component: () => import('./views/tabview/TabViewDemo.vue')
|
component: () => import('./views/tabview/TabViewDemo.vue')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/text',
|
||||||
|
name: 'text',
|
||||||
|
component: () => import('./views/text/TextDemo.vue')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/textarea',
|
||||||
|
name: 'textarea',
|
||||||
|
component: () => import('./views/textarea/TextareaDemo.vue')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/terminal',
|
path: '/terminal',
|
||||||
name: 'terminal',
|
name: 'terminal',
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="content-section introduction">
|
||||||
|
<div class="feature-intro">
|
||||||
|
<h1>Ripple</h1>
|
||||||
|
<p>Ripple directive adds ripple effect to the host element.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content-section implementation">
|
||||||
|
<div class="card-container p-d-flex">
|
||||||
|
<div class="card primary-box p-ripple" v-ripple>Default</div>
|
||||||
|
<div class="card styled-box-green p-ripple" v-ripple>Green</div>
|
||||||
|
<div class="card styled-box-orange p-ripple" v-ripple>Orange</div>
|
||||||
|
<div class="card styled-box-purple p-ripple" v-ripple>Purple</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<RippleDoc />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import RippleDoc from './RippleDoc';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
'RippleDoc': RippleDoc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
/deep/ .card-container {
|
||||||
|
.card {
|
||||||
|
width: 75px;
|
||||||
|
height: 75px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-right: 1rem;
|
||||||
|
user-select: none;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
&.primary-box {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
padding: 0;
|
||||||
|
color: var(--primary-color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.styled-box-green {
|
||||||
|
.p-ink {
|
||||||
|
background: rgba(#4baf50, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.styled-box-orange {
|
||||||
|
.p-ink {
|
||||||
|
background: rgba(#ffc106, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.styled-box-purple {
|
||||||
|
.p-ink {
|
||||||
|
background: rgba(#9c27b0, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,146 @@
|
||||||
|
<template>
|
||||||
|
<div class="content-section documentation">
|
||||||
|
<TabView>
|
||||||
|
<TabPanel header="Documentation">
|
||||||
|
<h5>Getting Started</h5>
|
||||||
|
<p>Ripple is an optional animation for the supported components such as buttons. It is disabled by default and needs to be enabled at
|
||||||
|
your app's entry file (e.g. main.js) using the <i>$primevue</i> instance variable.
|
||||||
|
</p>
|
||||||
|
<CodeHighlight class="language-javascript">
|
||||||
|
Vue.prototype.$primevue = {ripple: true};
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<p><span class="p-text-bold">Note</span>: That would be it to enable ripple on PrimeVue components, next section describes how to use it with your own components and standard elements.</p>
|
||||||
|
|
||||||
|
<h5>Directive</h5>
|
||||||
|
<p>Ripple is directive that needs to be imported and configured with a name of your choice. Global configuration is done with the <i>Vue.directive</i> function.</p>
|
||||||
|
<CodeHighlight lang="js">
|
||||||
|
import Ripple from 'primevue/ripple';
|
||||||
|
|
||||||
|
Vue.directive('ripple', Ripple);
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<p>Ripple can also be configured locally using the directives property of your component.</p>
|
||||||
|
<CodeHighlight lang="js">
|
||||||
|
directives: {
|
||||||
|
'ripple': Ripple
|
||||||
|
}
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<p>Once the ripple is configured, add <i>.p-ripple</i> class to the target and attach the directive with the v- prefix.</p>
|
||||||
|
<CodeHighlight>
|
||||||
|
<template v-pre>
|
||||||
|
<div class="p-ripple" v-ripple></div>
|
||||||
|
</template>
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<h5>Styling</h5>
|
||||||
|
<p>Default styling of the animation adds a shade of white. This can easily be customized using css that changes the color of <i>.p-ink</i> element.</p>
|
||||||
|
<CodeHighlight>
|
||||||
|
<template v-pre>
|
||||||
|
<div class="p-ripple purple" v-ripple></div>
|
||||||
|
</template>
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<CodeHighlight lang="css">
|
||||||
|
.p-ripple.purple .p-ink {
|
||||||
|
background: rgba(256,39,176,.3);
|
||||||
|
}
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
|
||||||
|
<h5>Styling</h5>
|
||||||
|
<div class="doc-tablewrapper">
|
||||||
|
<table class="doc-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Element</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>p-ripple</td>
|
||||||
|
<td>Host element.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>p-ink</td>
|
||||||
|
<td>Ripple element.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>p-ink-active</td>
|
||||||
|
<td>Ripple element during animating.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h5>Dependencies</h5>
|
||||||
|
<p>None.</p>
|
||||||
|
</TabPanel>
|
||||||
|
|
||||||
|
<TabPanel header="Source">
|
||||||
|
<a href="https://github.com/primefaces/primevue/tree/master/src/views/ripple" class="btn-viewsource" target="_blank" rel="noopener noreferrer">
|
||||||
|
<span>View on GitHub</span>
|
||||||
|
</a>
|
||||||
|
<CodeHighlight>
|
||||||
|
<template v-pre>
|
||||||
|
<div class="card-container p-d-flex">
|
||||||
|
<div class="card primary-box p-ripple" v-ripple>Default</div>
|
||||||
|
<div class="card styled-box-green p-ripple" v-ripple>Green</div>
|
||||||
|
<div class="card styled-box-orange p-ripple" v-ripple>Orange</div>
|
||||||
|
<div class="card styled-box-purple p-ripple" v-ripple>Purple</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<CodeHighlight lang="javascript">
|
||||||
|
export default {}
|
||||||
|
</CodeHighlight>
|
||||||
|
|
||||||
|
<CodeHighlight lang="css">
|
||||||
|
/deep/ .card-container {
|
||||||
|
.card {
|
||||||
|
width: 75px;
|
||||||
|
height: 75px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-right: 1rem;
|
||||||
|
user-select: none;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
&.primary-box {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
padding: 0;
|
||||||
|
color: var(--primary-color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.styled-box-green {
|
||||||
|
.p-ink {
|
||||||
|
background: rgba(#4baf50, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.styled-box-orange {
|
||||||
|
.p-ink {
|
||||||
|
background: rgba(#ffc106, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.styled-box-purple {
|
||||||
|
.p-ink {
|
||||||
|
background: rgba(#9c27b0, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</CodeHighlight>
|
||||||
|
</TabPanel>
|
||||||
|
</TabView>
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -13,7 +13,7 @@ Vue.directive('tooltip', Tooltip);
|
||||||
<p>Tooltip can also be configured locally using the directives property of your component.</p>
|
<p>Tooltip can also be configured locally using the directives property of your component.</p>
|
||||||
<CodeHighlight lang="js">
|
<CodeHighlight lang="js">
|
||||||
directives: {
|
directives: {
|
||||||
tooltip: Tooltip
|
'tooltip': Tooltip
|
||||||
}
|
}
|
||||||
</CodeHighlight>
|
</CodeHighlight>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue