1.0.9 • Published 3 years ago
vuezik v1.0.9
Vuezik - Real (SFC) Single-File Components for Vue3
Vuezik
is pronounced like music but with "Vue-"
instead of "Mu-"
Information
dist/bundle.js | 39.75 KiB / gzip: 12.70 KiB
Install
npm install vuezik
Uses
$style
(Global-Variable) | @Emotion-CSS
Key | Value |
---|---|
css | css |
inject | injectGlobal |
keyframes | keyframes |
app | xtyle |
$device
(Global-Variable)
Key | Value |
---|---|
width | Device's width |
height | Device's height |
type | Device's size abbreviation (xs, sm, md, lg, xl ) (default: xs ) |
is | Device's size function to be used with v-if example below |
Directives
Name | Description |
---|---|
v-ripple | Ripple effect from Material Design Styling |
v-resize | Detects resize changes of the browser's window |
v-click-outside | Detects click outside element |
v-swipe | Detects swipe (left, right, up, down ) |
v-wheel | Detects swipe (up, down ) |
<template>
<div
v-ripple
v-wheel="log"
v-swipe="log"
v-resize="log"
v-click-outside="log"
>
{{ $device }}
</div>
<button v-ripple="{ color: red, center: true, class: 'some-class' }">
Click Me
</button>
</template>
<script>
export default {
methods: {
log(data) {
console.log(data);
},
},
};
</script>
Component
Name | Description |
---|---|
x-element | Customizable <html-element> |
<x-element resize class="only-once-per-project-use-resize">
My App Container
<br />
{{ $device }}
<br />
<div v-if='$device.is("xs", "sm")'>Show Content Only On Devices(XS, SM)</div>
</x-element>
Props
Name | Description | Default | Type |
---|---|---|---|
css | @emotion/css Object-Style Based | {} | Object |
tag | <html> element type for example button | div | String |
v-model | Requires hover | false | Boolean |
hover | Track mouse hover | false | Boolean |
resize | Update $device variables. Use once's per project | false | Boolean |
active | Element is active ? | false | Boolean |
CSS (Prop)
Name | Default | Type | Emotion |
---|---|---|---|
base | {} | Object | Main CSS-Class (Object-Style) |
hoverAndFocus | false | Boolean | turn hover into Hover-and-Focus |
hover | {} | Object | &:hover or &:hover,&:focus |
focus | {} | Object | &:focus |
active | {} | Object | Active CSS-Class (Object-Style) |
children | {} | Object | Children CSS-Class(es) (Object-Style) |
CSS (Only) Main
active
active
only works on the Main (Object-Style)
CSS Active & Children
base
hover
focus
active & children
only have 3 props
Demo
<script>
export default {
computed: {
css() {
return {
base: {},
hover: {},
hoverAndFocus: true,
active: {
base: {},
hover: {},
focus: {},
},
children: {
"children-class": {
base: {},
hover: {},
focus: {},
},
},
};
},
},
};
</script>
Example
Template
<template>
<x-element
tag="div"
@click="active = active"
:active="active"
hover
v-model="hover"
:css="css"
>
<div>
Hello World <br />
{{ active }} | {{ hover }}
<div class="children-class">Hola Mundo</div>
</div>
</x-element>
</template>
Script
<script>
export default {
data() {
return {
active: true,
hover: false,
};
},
methods: {
log(text) {
console.log(text);
},
},
computed: {
css() {
return {
// Merge with Hover-And-Focus
hoverAndFocus: true,
// Base (Object)
base: {
// Base (Object-Style)
color: "black",
backgroundColor: "red",
fontSize: "60px",
textAlign: "center",
},
// Hover-And-Focus (Object-Style)
hover: {
color: "red",
backgroundColor: "black",
},
// Active (Object)
active: {
// Active (Object-Style)
base: {
color: "blue",
backgroundColor: "orange",
fontSize: "20px",
},
// Active-Hover (Object-Style)
hover: {
color: "white",
backgroundColor: "purple",
},
},
// Children (Objects)
children: {
"children-class": {
base: {
color: "orange",
backgroundColor: "darkorchid",
},
hover: {
color: "red",
backgroundColor: "darkorchid",
},
focus: {
color: "white",
backgroundColor: "darkorchid",
},
},
},
};
},
},
};
</script>
Vue-Sync (Prop)
Use kebab-case
for the sync
declaration and as the attribute <div v-model:kebab-case="value" />
Then, use camelCase
for the actual value
inside the component.
Component
Create A Component
Script Code
export default {
sync: ["count", "camel-case"],
};
Template Code
<div>{{ count }} | {{ camelCase }}</div>
Usage
Example Usage of The Component with
v-model
Script Code
export default {
data() {
return {
count: 1,
camelCase: "kebab-case",
};
},
};
Template Code
<my-component v-model:count="count" v-model:camel-case="camelCase" />