├── src ├── styles │ └── index.scss ├── index.js └── components │ └── Roulette.vue ├── docs ├── CNAME ├── og-image.jpg ├── roulette.png ├── assets │ ├── favicon.adef23e4.ico │ ├── index.019fedf3.css │ └── index.58c620c4.js ├── 404.html └── index.html ├── public ├── CNAME ├── og-image.jpg ├── roulette.png └── 404.html ├── .eslintignore ├── favicon.ico ├── postcss.config.js ├── tests └── index.test.js ├── pages ├── main.js ├── views │ ├── Docs.vue │ ├── Examples.vue │ ├── Home.vue │ └── Custom.vue ├── router.js ├── App.vue ├── data │ ├── homeData.js │ └── examplesData.js └── components │ ├── Footer.vue │ ├── ItemsManager.vue │ ├── Navbar.vue │ ├── Example.vue │ └── WheelManager.vue ├── .editorconfig ├── .npmignore ├── .gitignore ├── vite.config.js ├── babel.config.js ├── jest.config.js ├── .eslintrc.js ├── LICENSE ├── package.json ├── index.html ├── README.md ├── rollup.config.js └── dist ├── vue3-roulette.min.js └── vue3-roulette.esm.js /src/styles/index.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | roulette.nitocode.com -------------------------------------------------------------------------------- /public/CNAME: -------------------------------------------------------------------------------- 1 | roulette.nitocode.com -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | /dist 3 | /node_modules 4 | /docs 5 | /tests 6 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitocode/vue3-roulette/HEAD/favicon.ico -------------------------------------------------------------------------------- /docs/og-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitocode/vue3-roulette/HEAD/docs/og-image.jpg -------------------------------------------------------------------------------- /docs/roulette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitocode/vue3-roulette/HEAD/docs/roulette.png -------------------------------------------------------------------------------- /public/og-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitocode/vue3-roulette/HEAD/public/og-image.jpg -------------------------------------------------------------------------------- /public/roulette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitocode/vue3-roulette/HEAD/public/roulette.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {}, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import Roulette from './components/Roulette.vue' 2 | export { 3 | Roulette, 4 | } 5 | -------------------------------------------------------------------------------- /docs/assets/favicon.adef23e4.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nitocode/vue3-roulette/HEAD/docs/assets/favicon.adef23e4.ico -------------------------------------------------------------------------------- /tests/index.test.js: -------------------------------------------------------------------------------- 1 | describe('Test', () => { 2 | test('you don\'t say', () => { 3 | expect(true).toBe(true) 4 | }) 5 | }) 6 | -------------------------------------------------------------------------------- /pages/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import { router } from "./router"; 3 | import App from "./App.vue"; 4 | 5 | const app = createApp(App).use(router); 6 | 7 | app.mount("#app"); -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | end_of_line = lf 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true 7 | max_line_length = 100 8 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .editorconfig 2 | .eslintignore 3 | .eslintrc.js 4 | .gitlab-ci.yml 5 | babel.config.js 6 | coverage 7 | jest.config.js 8 | postcss.config.js 9 | sample 10 | src 11 | tests 12 | rollup.config.js 13 | vue.config.js 14 | sample 15 | index.html 16 | vite.config.js -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | coverage 4 | dist 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | /* eslint import/no-extraneous-dependencies: "off" */ 2 | import { defineConfig } from "vite"; 3 | import vue from "@vitejs/plugin-vue"; 4 | import mdPlugin from "vite-plugin-markdown"; 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [vue(), mdPlugin({mode: "vue"})], 9 | build: { 10 | outDir: './docs' 11 | } 12 | }); -------------------------------------------------------------------------------- /pages/views/Docs.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /pages/router.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from "vue-router"; 2 | import Home from "./views/Home.vue" 3 | import Docs from "./views/Docs.vue" 4 | import Examples from "./views/Examples.vue" 5 | import Custom from "./views/Custom.vue" 6 | 7 | export const router = createRouter({ 8 | history: createWebHistory(), 9 | routes: [ 10 | { path: '/', component: Home }, 11 | { path: '/docs', component: Docs }, 12 | { path: '/examples', component: Examples }, 13 | { path: '/custom', component: Custom }, 14 | ], 15 | }) 16 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | // Build presets are used when building the component library with Rollup 2 | const buildPresets = [ 3 | [ 4 | '@babel/preset-env', 5 | {} 6 | ] 7 | ] 8 | 9 | // Dev presets are used when running a local development server 10 | const devPresets = ['@vue/cli-plugin-babel/preset'] 11 | 12 | // Test presets are used when running unit-tests 13 | const testPresets = [ 14 | [ 15 | 'env', 16 | { 17 | targets: { 18 | node: 'current' 19 | } 20 | } 21 | ] 22 | ] 23 | 24 | module.exports = { 25 | presets: process.env.NODE_ENV === 'production' 26 | ? buildPresets : process.env.NODE_ENV === 'development' 27 | ? devPresets : testPresets 28 | } 29 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | collectCoverage: true, 3 | collectCoverageFrom: [ 4 | '/src/**/*.{js,vue}', 5 | '!/src/index.js', 6 | '!/pages/**/*' 7 | ], 8 | moduleFileExtensions: [ 'js', 'json', 'vue' ], 9 | transform: { 10 | '.*\\.(vue)$': 'vue-jest', 11 | '.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', 12 | '^.+\\.js$': 'babel-jest' 13 | }, 14 | moduleNameMapper: { 15 | '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/tests/mocks/file-mock.js' 16 | }, 17 | transformIgnorePatterns: [], 18 | snapshotSerializers: [ 19 | 'jest-serializer-vue' 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | 4 | extends: ['eslint:recommended', 'plugin:vue/recommended'], 5 | 6 | env: { 7 | node: true, 8 | }, 9 | 10 | parserOptions: { 11 | parser: 'babel-eslint', 12 | }, 13 | 14 | overrides: [ 15 | { 16 | files: 'tests/**/*', 17 | rules: { 18 | // Disable no-undefined rule for Jest tests because `describe()`, `test()` 19 | // are methods available under the global NodeJS namespace. 20 | 'no-undef': 'off', 21 | }, 22 | }, 23 | ], 24 | 25 | rules: { 26 | // allow paren-less arrow functions 27 | 'arrow-parens': 0, 28 | // allow async-await 29 | 'generator-star-spacing': 0, 30 | // allow debugger during development 31 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, 32 | 33 | 'vue/no-v-html': 'off', 34 | }, 35 | }; 36 | -------------------------------------------------------------------------------- /pages/App.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 34 | 35 | 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Ludovic Nitoumbi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /pages/data/homeData.js: -------------------------------------------------------------------------------- 1 | export default { 2 | items: [ 3 | { id: 1, name: "Banana", htmlContent: "Banana", textColor: "", background: "" }, 4 | { id: 2, name: "Apple", htmlContent: "Apple", textColor: "", background: "" }, 5 | { id: 3, name: "Orange", htmlContent: "Orange", textColor: "", background: "" }, 6 | { id: 4, name: "Cherry", htmlContent: "Cherry", textColor: "", background: "" }, 7 | { id: 5, name: "Strawberry", htmlContent: "Strawberry", textColor: "", background: "" }, 8 | { id: 6, name: "Grape", htmlContent: "Grape", textColor: "", background: "" }, 9 | ], 10 | firstItemIndex: { value: 0 }, 11 | wheelSettings: { 12 | centeredIndicator: true, 13 | indicatorPosition: "top", 14 | size: 300, 15 | displayShadow: true, 16 | duration: 5, 17 | resultVariation: 70, 18 | easing: "bounce", 19 | counterClockwise: true, 20 | horizontalContent: false, 21 | displayBorder: true, 22 | displayIndicator: true, 23 | baseDisplay: true, 24 | baseSize: 100, 25 | baseDisplayShadow: true, 26 | baseDisplayIndicator: true, 27 | baseBackground: "#EEAA33", 28 | baseHtmlContent: "Touch
Me!
", 29 | } 30 | } -------------------------------------------------------------------------------- /pages/views/Examples.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 49 | 50 | -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Vue3 Roulette 13 | 22 | 23 | 24 | 39 | 40 | -------------------------------------------------------------------------------- /public/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Vue3 Roulette 13 | 22 | 23 | 24 | 39 | 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue3-roulette", 3 | "version": "0.3.3", 4 | "main": "dist/vue3-roulette.js", 5 | "browser": "dist/vue3-roulette.esm.js", 6 | "module": "dist/vue3-roulette.esm.js", 7 | "unpkg": "dist/vue3-roulette.min.js", 8 | "scripts": { 9 | "serve": "vite", 10 | "prebuild": "rimraf ./dist", 11 | "build": "cross-env NODE_ENV=production rollup --config rollup.config.js", 12 | "buildpages": "vite build", 13 | "test": "cross-env NODE_ENV=test jest" 14 | }, 15 | "devDependencies": { 16 | "@babel/core": "^7.15.5", 17 | "@babel/preset-env": "^7.15.6", 18 | "@rollup/plugin-babel": "^5.3.0", 19 | "@rollup/plugin-buble": "^0.21.3", 20 | "@rollup/plugin-commonjs": "^20.0.0", 21 | "@rollup/plugin-node-resolve": "^13.0.4", 22 | "@rollup/plugin-replace": "^3.0.0", 23 | "@types/jest": "^26.0.22", 24 | "@vitejs/plugin-vue": "^1.3.0", 25 | "@vue/cli-plugin-babel": "^4.5.4", 26 | "@vue/cli-plugin-eslint": "^4.5.4", 27 | "@vue/cli-service": "^4.5.4", 28 | "@vue/compiler-sfc": "^3.1.5", 29 | "@vue/eslint-config-standard": "^4.0.0", 30 | "@vue/test-utils": "^1.0.4", 31 | "babel-core": "^6.26.3", 32 | "babel-eslint": "^10.0.3", 33 | "babel-jest": "^25.5.1", 34 | "babel-preset-env": "^1.7.0", 35 | "cross-env": "^7.0.3", 36 | "eslint": "^6.8.0", 37 | "eslint-plugin-vue": "^5.2.3", 38 | "jest": "^25.5.4", 39 | "jest-serializer-vue": "^2.0.2", 40 | "jest-transform-stub": "^2.0.0", 41 | "postcss": "^8.3.6", 42 | "rimraf": "^3.0.2", 43 | "rollup": "^2.55.1", 44 | "rollup-plugin-postcss": "^4.0.0", 45 | "rollup-plugin-svg": "^2.0.0", 46 | "rollup-plugin-terser": "^7.0.2", 47 | "rollup-plugin-vue": "^6.0.0", 48 | "sass": "^1.37.2", 49 | "sass-loader": "^8.0.0", 50 | "vite": "^2.4.4", 51 | "vite-plugin-markdown": "^2.0.2", 52 | "vue": "^3.2.11", 53 | "vue-jest": "^5.0.0-alpha.10", 54 | "vue-router": "^4.0.12" 55 | }, 56 | "peerDependencies": { 57 | "vue": "^3.2.11" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Vue3 Roulette 20 | 29 | 30 | 31 |
32 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Vue3 Roulette 20 | 29 | 30 | 31 | 32 | 33 | 34 |
35 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /pages/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 51 | 52 | -------------------------------------------------------------------------------- /docs/assets/index.019fedf3.css: -------------------------------------------------------------------------------- 1 | @import"https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.0.0/github-markdown-light.min.css";.item{display:flex;flex-direction:row;justify-content:center;align-items:center}.wheel-container[data-v-313a8203],.wheel-base[data-v-313a8203],.wheel-base-container[data-v-313a8203],.wheel-base-indicator[data-v-313a8203]{transition:transform 1s ease-in-out}.wheel-container[data-v-313a8203]{position:relative;display:inline-block;overflow:hidden;border-radius:50%;cursor:pointer}.wheel-container-indicator[data-v-313a8203]:before{content:"";position:absolute;z-index:4;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid black;transform:translate(-50%)}.wheel-container.indicator-top[data-v-313a8203]{transform:rotate(0)}.wheel-container.indicator-right[data-v-313a8203]{transform:rotate(90deg)}.wheel-container.indicator-right .wheel-base[data-v-313a8203]{transform:rotate(-90deg)}.wheel-container.indicator-bottom[data-v-313a8203]{transform:rotate(180deg)}.wheel-container.indicator-bottom .wheel-base[data-v-313a8203]{transform:rotate(-180deg)}.wheel-container.indicator-left[data-v-313a8203]{transform:rotate(270deg)}.wheel-container.indicator-left .wheel-base[data-v-313a8203]{transform:rotate(-270deg)}.wheel-container-border[data-v-313a8203]{border:8px solid black}.wheel-container-shadow[data-v-313a8203]{box-shadow:5px 5px 15px -5px #000}.wheel-base-container[data-v-313a8203]{position:absolute;z-index:2;top:50%;left:50%;border-radius:50%;border:5px solid black;transform:translate(-50%,-50%)}.wheel-base-container-shadow[data-v-313a8203]{box-shadow:5px 5px 15px -5px #000}.wheel-base-container .wheel-base[data-v-313a8203]{position:absolute;z-index:2;display:flex;justify-content:center;align-items:center;overflow:hidden;width:100%;height:100%;border-radius:50%}.wheel-base-container .wheel-base-indicator[data-v-313a8203]{position:absolute;z-index:1;width:100%;height:100%}.wheel-base-container .wheel-base-indicator[data-v-313a8203]:before{content:"";position:absolute;z-index:1;top:-20px;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-bottom:20px solid black;transform:translate(-50%)}.wheel[data-v-313a8203]{background:white;border-radius:50%;margin:auto;overflow:hidden}.wheel.easing-ease[data-v-313a8203]{transition:transform cubic-bezier(.65,0,.35,1)}.wheel.easing-bounce[data-v-313a8203]{transition:transform cubic-bezier(.49,.02,.52,1.12)}.wheel-border[data-v-313a8203]:after{content:"";width:100%;height:100%;position:absolute;left:0;top:0;z-index:3;border-radius:50%;background-image:linear-gradient(to left,black 33%,rgba(255,255,255,0) 0%);background-position:bottom;background-size:3px 1px;-webkit-mask:radial-gradient(transparent 65%,#000 66%);mask:radial-gradient(transparent 65%,#000 66%)}.wheel-item[data-v-313a8203]{overflow:hidden;position:absolute;top:0;right:0;width:50%;height:50%;transform-origin:0% 100%;border:1px solid black}.wheel-item[data-v-313a8203]:nth-child(odd){background-color:#87ceeb}.wheel-item[data-v-313a8203]:nth-child(even){background-color:pink}.wheel .content[data-v-313a8203]{position:absolute;left:-100%;width:200%;height:200%;text-align:center;transform:skewY(30deg) rotate(0);padding-top:20px}.wheel .content.horizontal-content[data-v-313a8203]{left:initial;right:100%;width:50%;height:250%;text-align:right}.wheel .content.horizontal-content span[data-v-313a8203]{display:block;transform:rotate(270deg)}.wheel-anim{transition:transform 4s cubic-bezier(.58,-.26,.24,1.11);transform:rotate(-1800deg) scale(1.25)}.wheel-anim-started{transform:rotate(0) scale(1)}[data-v-65fe6d42] img{display:none}@media screen and (max-width: 450px){[data-v-2a21abdc] .big-wheel .relative{transform:scale(.7)}}.drawer-toggle:checked~.drawer-content{z-index:100}.drawer-toggle:checked~.drawer-side{z-index:101}.fade-enter-active,.fade-leave-active{transition:opacity .5s ease}.fade-enter-from,.fade-leave-to{opacity:0} 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue3 Roulette 2 | 3 | > A customizable and flexible fortune wheel for vue3 4 | 5 | ## Demo 6 | 7 | https://roulette.nitocode.com/ 8 | 9 | See also: [codesandbox template](https://codesandbox.io/s/vue3-roulette-c8tml) 10 | 11 | ## Installation 12 | 13 | ### Using npm 14 | 15 | `npm i --save vue3-roulette` 16 | 17 | ## Usage 18 | 19 | #### main.js 20 | ```js 21 | import { createApp } from 'vue' 22 | import App from './App.vue' 23 | import { Roulette } from 'vue3-roulette' 24 | 25 | createApp(App).component("roulette", Roulette).mount('#app') 26 | ``` 27 | 28 | #### vuejs html template 29 | ```html 30 | 31 | ``` 32 | 33 | #### vuejs script 34 | 35 | Using the [sfc syntax](https://v3.vuejs.org/api/sfc-script-setup.html) 36 | ```html 37 | 51 | ``` 52 | 53 | ## Events API 54 | 55 | `wheel-start` and `wheel-end` which provide the item selected 56 | 57 | ```html 58 | 63 | ``` 64 | 65 | ## Methods API 66 | 67 | Composition API 68 | ```javascript 69 | wheel.value.launchWheel(); 70 | wheel.value.reset(); 71 | ``` 72 | Option API 73 | ```javascript 74 | this.$refs.wheel.launchWheel(); 75 | this.$refs.wheel.reset(); 76 | ``` 77 | 78 | ## Props API (Wheel) 79 | 80 | | Props | Type | Required | Default | Options | Details | 81 | |------------|------------|----------|------------|----------------|--| 82 | | items | Object | yes | - | | 4 items minimum | 83 | | first-item-index | Object | no | { value: 0 } | | 84 | | wheel-result-index | Object | no | { value: null } | from 0 to items length | 85 | | centered-indicator | Boolean | no | false | | 86 | | indicator-position | String | no | "top" | "top" \| "right" \| "bottom" \| "left" | 87 | | size | Number | no | 300 | | size unit: pixel | 88 | | display-shadow | Boolean | no | false | | 89 | | duration | Number | no | 4 | | duration unit: seconds | | 90 | | result-variation | Number | no | 0 | number between 0 and 100 | varies the result angle to fake wheel smoothness | 91 | | easing | String | no | "ease" | "ease" \| "bounce" | wheel animation | 92 | | counter-clockwise | Boolean | no | false | | rotation direction 93 | | horizontal-content | Boolean | no | false | | text item orientation 94 | | display-border | Boolean | no | false | | 95 | | display-indicator | Boolean | no | false | | 96 | 97 | ## Props API (Wheel base) 98 | 99 | | Props | Type | Required | Default | Options | Details | 100 | |------------|------------|----------|------------|----------------|--| 101 | | base-display | Boolean | no | false | | | 102 | | base-size | Number | no | 100 | | size unit: pixel | 103 | | base-display-shadow | Boolean | no | false | | | 104 | | base-display-indicator | Boolean | no | false | | | 105 | | base-background | String | no | "" | rgb(100,0,0) \| red \| #FF0000 | | 106 | 107 | 108 | ## Slots 109 | 110 | You can use your own html for the wheel base 111 | 112 | ```html 113 | 114 | 117 | 118 | ``` 119 | 120 | ## Contribution 121 | 122 | ### Project setup 123 | 124 | ```bash 125 | npm install 126 | ``` 127 | 128 | ### Compiles and hot-reloads for development 129 | 130 | ```bash 131 | npm run serve 132 | ``` 133 | -------------------------------------------------------------------------------- /pages/components/ItemsManager.vue: -------------------------------------------------------------------------------- 1 |