├── typings
└── index.d.ts
├── .npmignore
├── .jsbeautifyrc
├── .babelrc
├── typings.json
├── .travis.yml
├── test
└── unit
│ ├── specs
│ ├── VueTouchKeyboard.spec.js
│ └── index.spec.js
│ ├── index.js
│ ├── style.scss
│ ├── karma.conf.js
│ └── webpack.test.config.js
├── .gitignore
├── dev
├── main.js
├── index.html
└── app.vue
├── src
├── index.js
├── icons
│ └── backspace.svg
├── layouts.js
└── keyboard.vue
├── .gitattributes
├── .eslintrc.js
├── LICENSE
├── webpack.dev.config.js
├── webpack.build.config.js
├── dist
├── vue-touch-keyboard.css
└── vue-touch-keyboard.js
├── package.json
├── CHANGELOG.md
└── README.md
/typings/index.d.ts:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | build
2 | docs
3 | bower.json
4 |
--------------------------------------------------------------------------------
/.jsbeautifyrc:
--------------------------------------------------------------------------------
1 | {
2 | "html": {
3 | "indent_char": "\t",
4 | "indent_size": 1
5 | }
6 | }
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "stage-0"],
3 | "plugins": ["transform-runtime"],
4 | "comments": false
5 | }
--------------------------------------------------------------------------------
/typings.json:
--------------------------------------------------------------------------------
1 | {
2 | "globalDevDependencies": {
3 | "vue": "registry:dt/vue#1.0.21+20160929090511"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | cache:
3 | directories:
4 | - node_modules
5 | node_js:
6 | - "6"
7 | - "5"
8 | - "4"
9 | after_success:
10 | - npm run coverall
11 |
--------------------------------------------------------------------------------
/test/unit/specs/VueTouchKeyboard.spec.js:
--------------------------------------------------------------------------------
1 | /*
2 | import { expect } from "chai";
3 |
4 | import Vue from "vue";
5 | import VueTouchKeyboard from "src/index";
6 |
7 | Vue.use(VueTouchKeyboard);
8 | */
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | coverage/
4 | docs/_book/
5 | npm-debug.log
6 | selenium-debug.log
7 | test/unit/coverage
8 | test/e2e/reports
9 | stats.json
10 | typings/
11 | typings.json
--------------------------------------------------------------------------------
/dev/main.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 |
3 | (function() {
4 |
5 | let App = require("./App.vue");
6 |
7 | let app = new Vue({
8 | el: "app",
9 | components: {
10 | App
11 | }
12 | });
13 | })();
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | let component = require("./keyboard.vue");
2 |
3 | module.exports = {
4 | component,
5 | layouts: require("./layouts"),
6 |
7 | install(Vue) {
8 | Vue.component("VueTouchKeyboard", component);
9 | }
10 | };
--------------------------------------------------------------------------------
/dev/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | vue-touch-keyboard development environment
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/icons/backspace.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/unit/specs/index.spec.js:
--------------------------------------------------------------------------------
1 | import { expect } from "chai";
2 |
3 | import VueTouchKeyboard from "src/index";
4 |
5 | describe("module", () => {
6 |
7 | it("module properties", () => {
8 |
9 | expect(VueTouchKeyboard).to.be.exist;
10 | expect(VueTouchKeyboard).to.have.property("component");
11 | expect(VueTouchKeyboard).to.have.property("layouts");
12 | expect(VueTouchKeyboard.install).to.be.a("function");
13 |
14 | });
15 |
16 | });
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/test/unit/index.js:
--------------------------------------------------------------------------------
1 | // require all test files (files that ends with .spec.js)
2 | var testsContext = require.context("./specs", true, /\.spec$/);
3 | testsContext.keys().forEach(testsContext);
4 |
5 |
6 | // require all src files except main.js for coverage.
7 | // you can also change this to match only the subset of files that
8 | // you want coverage for.
9 | var srcContext = require.context("src", true, /\.(js|vue)$/);
10 | srcContext.keys().forEach(srcContext);
11 |
12 | require("./style.scss");
--------------------------------------------------------------------------------
/test/unit/style.scss:
--------------------------------------------------------------------------------
1 | html {
2 | background: #CCC;
3 | font-family: Arial, Tahoma;
4 | font-size: 14px;
5 |
6 | }
7 |
8 | * {
9 | box-sizing: border-box;
10 | }
11 |
12 | .test-unit {
13 | min-width: 22%;
14 | display: inline-block;
15 | vertical-align: top;
16 | margin: 10px;
17 | padding: 10px;
18 |
19 | border: 1px solid #888;
20 | border-radius: 8px;
21 |
22 | background: #EEE;
23 |
24 | h2 {
25 | margin: 0;
26 | border-bottom: 1px solid #888;
27 | margin-bottom: 10px;
28 | font-size: 14px;
29 | }
30 |
31 | fieldset {
32 | margin: 0;
33 | padding: 0;
34 | border: 0;
35 | }
36 | }
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | "env": {
4 | "browser": true,
5 | "commonjs": true,
6 | "es6": true,
7 | "jquery": false,
8 | mocha: true
9 | },
10 | "extends": "eslint:recommended",
11 | "parserOptions": {
12 | "sourceType": "module"
13 | },
14 | "plugins": [
15 | "html"
16 | ],
17 | "rules": {
18 | "indent": [
19 | "warn",
20 | "tab"
21 | ],
22 | "quotes": [
23 | "warn",
24 | "double"
25 | ],
26 | "semi": [
27 | "error",
28 | "always"
29 | ],
30 | "no-var": [
31 | "error"
32 | ],
33 | "no-console": [
34 | "off"
35 | ],
36 | "no-unused-vars": [
37 | "warn"
38 | ]
39 | }
40 | };
--------------------------------------------------------------------------------
/test/unit/karma.conf.js:
--------------------------------------------------------------------------------
1 | var wsConfig = require("./webpack.test.config");
2 |
3 | module.exports = function(config) {
4 | var settings = {
5 | // base path that will be used to resolve all patterns (eg. files, exclude)
6 | basePath: "",
7 |
8 | browsers: ["PhantomJS"],
9 |
10 | reporters: ["spec", "coverage"],
11 |
12 | frameworks: ["mocha", "chai", "sinon-chai"],
13 |
14 | files: [
15 | "./index.js"
16 | ],
17 |
18 | exclude: [],
19 |
20 | preprocessors: {
21 | "./index.js": ["webpack", "sourcemap"]
22 | },
23 |
24 | webpack: wsConfig,
25 |
26 | webpackMiddleware: {
27 | noInfo: true
28 | },
29 |
30 | port: 9876,
31 |
32 | colors: true,
33 |
34 | logLevel: config.LOG_INFO,
35 |
36 | autoWatch: false,
37 |
38 | singleRun: true,
39 |
40 | coverageReporter: {
41 | dir: "./coverage",
42 | reporters: [
43 | { type: "lcov", subdir: "." },
44 | { type: "text-summary" }
45 | ]
46 | }
47 | }
48 |
49 | config.set(settings);
50 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Icebob
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 |
--------------------------------------------------------------------------------
/webpack.dev.config.js:
--------------------------------------------------------------------------------
1 | var path = require("path");
2 | var webpack = require("webpack");
3 |
4 | var loaders = [
5 | {
6 | "test": /\.js?$/,
7 | "exclude": /node_modules/,
8 | "loader": "babel"
9 | },
10 | {
11 | "test": /\.css?$/,
12 | "loader": "style!css"
13 | },
14 | {
15 | "test": /\.scss?$/,
16 | "loader": "style!css!sass"
17 | },
18 | {
19 | "test": /\.jade?$/,
20 | "loader": "jade"
21 | },
22 | {
23 | "test": /\.vue?$/,
24 | "loader": "vue"
25 | },
26 | {
27 | test: /\.(woff2?|svg)$/,
28 | loader: "url"
29 | //loader: "url?limit=10000"
30 | },
31 | {
32 | test: /\.(ttf|eot)$/,
33 | loader: "url"
34 | }
35 | ];
36 |
37 | module.exports = {
38 | devtool: "eval-source-map",
39 |
40 | entry: {
41 | app: path.resolve("dev", "main.js")
42 | },
43 |
44 | output: {
45 | path: path.resolve("dev"),
46 | filename: "[name].js",
47 | publicPath: "/"
48 | },
49 |
50 | plugins: [
51 | ],
52 |
53 | module: {
54 | loaders
55 | },
56 |
57 | resolve: {
58 | packageAlias: "browser",
59 | alias: {
60 | "vue$": "vue/dist/vue.common.js"
61 | }
62 | },
63 |
64 | vue: {
65 | autoprefixer: {
66 | browsers: ["last 2 versions"]
67 | }
68 | }
69 | };
70 |
--------------------------------------------------------------------------------
/test/unit/webpack.test.config.js:
--------------------------------------------------------------------------------
1 | var path = require("path");
2 | var webpack = require("webpack");
3 | var sourceDir = path.resolve(__dirname, "../../src");
4 |
5 | module.exports = {
6 | devtool: "eval-source-map",
7 |
8 | module: {
9 | preLoaders: [
10 | {
11 | test: /\.js$/,
12 | loader: "isparta",
13 | include: sourceDir,
14 | exclude: /node_modules/
15 | }
16 | ],
17 |
18 | loaders: [
19 | {
20 | "test": /\.vue$/,
21 | "loader": "vue"
22 | },
23 | {
24 | "test": /\.js$/,
25 | //"include": /test\/unit/,
26 | "exclude": /node_modules/,
27 | "loader": "babel"
28 | },
29 | {
30 | "test": /\.css?$/,
31 | "loader": "style!css"
32 | },
33 | {
34 | "test": /\.scss?$/,
35 | "loader": "style!css!sass"
36 | },
37 | {
38 | "test": /\.jade?$/,
39 | "loader": "jade"
40 | },
41 | {
42 | test: /\.(woff2?|svg)$/,
43 | loader: "url"
44 | //loader: "url?limit=10000"
45 | },
46 | {
47 | test: /\.(ttf|eot)$/,
48 | loader: "url"
49 | }
50 | ],
51 | noParse: [
52 | /node_modules\/sinon\//,
53 | ]
54 | },
55 |
56 | resolve: {
57 | packageAlias: "browser",
58 | alias: {
59 | "src": sourceDir,
60 | "sinon": "sinon/pkg/sinon"
61 | }
62 | },
63 | plugins: [
64 | ],
65 |
66 | vue: {
67 | autoprefixer: {
68 | browsers: ["last 2 versions"]
69 | },
70 | loaders: {
71 | js: "isparta"
72 | }
73 | }
74 |
75 | };
76 |
--------------------------------------------------------------------------------
/webpack.build.config.js:
--------------------------------------------------------------------------------
1 | var webpack = require("webpack");
2 | var version = require("./package.json").version;
3 | var banner = "/**\n" + " * vue-touch-keyboard v" + version + "\n" + " * https://github.com/icebob/vue-touch-keyboard\n" + " * Released under the MIT License.\n" + " */\n";
4 | var ExtractTextPlugin = require("extract-text-webpack-plugin");
5 | var StatsPlugin = require("stats-webpack-plugin");
6 |
7 | var loaders = [
8 | {
9 | "test": /\.js?$/,
10 | "exclude": /node_modules/,
11 | "loader": "babel"
12 | },
13 | {
14 | "test": /\.vue$/,
15 | "loader": "vue"
16 | },
17 | {
18 | test: /\.svg$/,
19 | loader: "url"
20 | }
21 | ];
22 |
23 | module.exports = [
24 | {
25 | entry: "./src/index",
26 | output: {
27 | path: "./dist",
28 | filename: "vue-touch-keyboard.js",
29 | library: "VueTouchKeyboard",
30 | libraryTarget: "umd"
31 | },
32 |
33 | plugins: [
34 | new webpack.DefinePlugin({
35 | "process.env" : {
36 | NODE_ENV : JSON.stringify("production")
37 | }
38 | }),
39 | new webpack.optimize.UglifyJsPlugin({
40 | compress: {
41 | warnings: false
42 | }
43 | }),
44 | new webpack.optimize.DedupePlugin(),
45 | new webpack.BannerPlugin(banner, {
46 | raw: true
47 | }),
48 | new ExtractTextPlugin("vue-touch-keyboard.css", { allChunks: true }),
49 | new StatsPlugin("../stats.json", {
50 | chunkModules: true
51 | //exclude: [/node_modules[\\\/]react/]
52 | })
53 | ],
54 |
55 | module: {
56 | loaders
57 | },
58 |
59 | vue: {
60 | loaders: {
61 | css: ExtractTextPlugin.extract("css"),
62 | postcss: ExtractTextPlugin.extract("css"),
63 | sass: ExtractTextPlugin.extract("css!sass"),
64 | }
65 | },
66 |
67 | resolve: {
68 | packageAlias: "browser",
69 | alias: {
70 | "vue$": "vue/dist/vue.common.js"
71 | }
72 | }
73 | }
74 |
75 | ];
--------------------------------------------------------------------------------
/dist/vue-touch-keyboard.css:
--------------------------------------------------------------------------------
1 | /**
2 | * vue-touch-keyboard v0.2.0
3 | * https://github.com/icebob/vue-touch-keyboard
4 | * Released under the MIT License.
5 | */
6 |
7 | .vue-touch-keyboard .keyboard{width:100%;margin:0}.vue-touch-keyboard .keyboard .line{display:flex;justify-content:space-around}.vue-touch-keyboard .keyboard .line:not(:last-child){margin-bottom:.5em}.vue-touch-keyboard .keyboard .key{flex:40;height:2.2em;line-height:2.2em;overflow:hidden;vertical-align:middle;border:1px solid #ccc;color:#333;background-color:#fff;box-shadow:0 2px 2px rgba(0,0,0,.6);border-radius:.35em;font-size:1.25em;text-align:center;white-space:nowrap;user-select:none;cursor:pointer}.vue-touch-keyboard .keyboard .key:not(:last-child){margin-right:.5em}@media screen and (max-width:650px){.vue-touch-keyboard .keyboard .key:not(:last-child){margin-right:.1em}.vue-touch-keyboard .keyboard .key{font-size:1em;font-weight:600}.vue-touch-keyboard .keyboard .key.control{font-size:1em}}.vue-touch-keyboard .keyboard .key.backspace{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDQ4IDQ4IiB3aWR0aD0iNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTAgMGg0OHY0OGgtNDh6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQ0IDZoLTMwYy0xLjM4IDAtMi40Ny43LTMuMTkgMS43NmwtMTAuODEgMTYuMjMgMTAuODEgMTYuMjNjLjcyIDEuMDYgMS44MSAxLjc4IDMuMTkgMS43OGgzMGMyLjIxIDAgNC0xLjc5IDQtNHYtMjhjMC0yLjIxLTEuNzktNC00LTR6bS02IDI1LjE3bC0yLjgzIDIuODMtNy4xNy03LjE3LTcuMTcgNy4xNy0yLjgzLTIuODMgNy4xNy03LjE3LTcuMTctNy4xNyAyLjgzLTIuODMgNy4xNyA3LjE3IDcuMTctNy4xNyAyLjgzIDIuODMtNy4xNyA3LjE3IDcuMTcgNy4xN3oiIGZpbGw9IndoaXRlIi8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;background-size:35%}.vue-touch-keyboard .keyboard .key.half{flex:20}.vue-touch-keyboard .keyboard .key.control{color:#fff;background-color:#7d7d7d;border-color:#656565}.vue-touch-keyboard .keyboard .key.featured{color:#fff;background-color:#337ab7;border-color:#2e6da4}.vue-touch-keyboard .keyboard .key:hover{color:#333;background-color:#d6d6d6;border-color:#adadad}.vue-touch-keyboard .keyboard .key:active{transform:scale(.98);color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.vue-touch-keyboard .keyboard .key.activated{color:#fff;background-color:#5bc0de;border-color:#46b8da}.vue-touch-keyboard .keyboard .placeholder{flex:20;height:2.2em;line-height:2.2em}.vue-touch-keyboard .keyboard .placeholder:not(:last-child){margin-right:.5em}.vue-touch-keyboard .keyboard:after,.vue-touch-keyboard .keyboard:before{content:"";display:table}.vue-touch-keyboard .keyboard:after{clear:both}
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-touch-keyboard",
3 | "version": "0.2.0",
4 | "description": "Virtual keyboard component for Vue.js",
5 | "homepage": "https://github.com/icebob/vue-touch-keyboard",
6 | "main": "dist/vue-touch-keyboard.js",
7 | "scripts": {
8 | "prebuild": "npm run test",
9 | "build": "webpack --progress --config webpack.build.config.js",
10 | "dev": "webpack-dev-server --config webpack.dev.config.js --inline --hot --content-base dev/",
11 | "lint": "eslint --ext=.js,.vue src test/unit/specs",
12 | "coverall": "cat ./test/unit/coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
13 | "coverage": "npm run test && npm run coverall",
14 | "changelog": "conventional-changelog -i CHANGELOG.md -s",
15 | "docs": "cd docs && gitbook serve",
16 | "unit": "karma start test/unit/karma.conf.js",
17 | "e2e": "node test/e2e/runner.js",
18 | "pretest": "npm run lint",
19 | "test": "npm run unit",
20 | "ci": "karma start test/unit/karma.conf.js --auto-watch --no-single-run --reporters=dots --port=9877"
21 | },
22 | "keywords": [
23 | "vue",
24 | "vuejs",
25 | "form",
26 | "generator",
27 | "schema",
28 | "json"
29 | ],
30 | "repository": {
31 | "type": "git",
32 | "url": "https://github.com/icebob/vue-touch-keyboard.git"
33 | },
34 | "files": [
35 | "dist/vue-touch-keyboard.js",
36 | "dist/vue-touch-keyboard.css",
37 | "src"
38 | ],
39 | "author": "Icebob",
40 | "license": "MIT",
41 | "devDependencies": {
42 | "babel-core": "6.23.1",
43 | "babel-loader": "6.3.2",
44 | "babel-plugin-transform-runtime": "6.23.0",
45 | "babel-preset-es2015": "6.22.0",
46 | "babel-preset-stage-0": "6.22.0",
47 | "chai": "3.5.0",
48 | "conventional-changelog-cli": "1.2.0",
49 | "conventional-github-releaser": "1.1.3",
50 | "coveralls": "2.11.16",
51 | "css-loader": "0.26.2",
52 | "eslint": "3.16.1",
53 | "eslint-friendly-formatter": "2.0.7",
54 | "eslint-loader": "1.6.3",
55 | "eslint-plugin-html": "2.0.1",
56 | "eslint-plugin-vue": "2.0.1",
57 | "extract-text-webpack-plugin": "1.0.1",
58 | "file-loader": "0.10.1",
59 | "git-commit-message-convention": "git://github.com/kazupon/git-commit-message-convention.git#065dfffbe2de5f6f16150aac9d4db7fdf5515e56",
60 | "inject-loader": "2.0.1",
61 | "isparta-loader": "2.0.0",
62 | "jade": "1.11.0",
63 | "jade-loader": "0.8.0",
64 | "karma": "1.3.0",
65 | "karma-chai": "0.1.0",
66 | "karma-chrome-launcher": "1.0.1",
67 | "karma-coverage": "1.1.1",
68 | "karma-coveralls": "1.1.2",
69 | "karma-mocha": "1.2.0",
70 | "karma-phantomjs-launcher": "1.0.2",
71 | "karma-sinon-chai": "1.2.4",
72 | "karma-sourcemap-loader": "0.3.7",
73 | "karma-spec-reporter": "0.0.30",
74 | "karma-webpack": "1.8.0",
75 | "lodash": "4.17.4",
76 | "lolex": "1.6.0",
77 | "mocha": "2.5.3",
78 | "mocha-generators": "1.2.0",
79 | "mocha-loader": "0.7.1",
80 | "node-sass": "3.10.0",
81 | "phantomjs-prebuilt": "2.1.14",
82 | "sass-loader": "3.2.0",
83 | "sinon": "1.17.7",
84 | "sinon-chai": "2.8.0",
85 | "stats-webpack-plugin": "0.4.3",
86 | "style-loader": "0.13.2",
87 | "url-loader": "0.5.8",
88 | "vue": "2.2.1",
89 | "vue-hot-reload-api": "2.0.11",
90 | "vue-html-loader": "1.2.4",
91 | "vue-loader": "11.1.3",
92 | "vue-style-loader": "2.0.3",
93 | "vue-template-compiler": "2.2.1",
94 | "webpack": "1.13.2",
95 | "webpack-dev-middleware": "1.10.1",
96 | "webpack-dev-server": "1.16.1",
97 | "webpack-merge": "0.14.1"
98 | },
99 | "dependencies": {
100 | "babel-runtime": "6.23.0"
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/dev/app.vue:
--------------------------------------------------------------------------------
1 |
2 | div
3 | .content(:class="{ hasKeyboard: visible }")
4 | fieldset
5 | legend Layouts
6 | select#layoutSelector(v-model="layout")
7 | option(v-for="(layout, key) in allLayouts", :value="key") {{ key }}
8 |
9 | fieldset
10 | legend Normal layout
11 | input#text.input(type="text", placeholder="Text input", @focus="show", data-layout="normal")
12 |
13 | fieldset
14 | legend Compact layout
15 | input.input(type="text", placeholder="Text input", @focus="show", data-layout="compact", maxlength="5")
16 |
17 | fieldset
18 | legend Numeric layout
19 | input.input(type="number", placeholder="Number input", number, @focus="show", data-layout="numeric")
20 |
21 | fieldset
22 | legend Password with compact layout
23 | input.input(type="password", placeholder="Password input", @focus="show", data-layout="compact")
24 |
25 | vue-touch-keyboard#keyboard(v-if="visible", :layout="layout", :cancel="hide", :accept="accept", :input="input", :next="next", :options="options")
26 |
27 |
28 |
29 |
103 |
104 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 |
2 | # 0.2.0 (2017-03-02)
3 |
4 | * migrate files to vue2 ([f512f34](https://github.com/icebob/vue-touch-keyboard/commit/f512f34))
5 | * skip typings ([fecca11](https://github.com/icebob/vue-touch-keyboard/commit/fecca11))
6 | * docs: fix npm link ([d4bb635](https://github.com/icebob/vue-touch-keyboard/commit/d4bb635))
7 |
8 |
9 |
10 |
11 | # 0.1.0 (2016-10-28)
12 |
13 | * :package: build ([222e1d9](https://github.com/icebob/vue-touch-keyboard/commit/222e1d9))
14 | * :package: build ([eea3480](https://github.com/icebob/vue-touch-keyboard/commit/eea3480))
15 | * :package: build ([3daae1e](https://github.com/icebob/vue-touch-keyboard/commit/3daae1e))
16 | * :package: build ([75eeca4](https://github.com/icebob/vue-touch-keyboard/commit/75eeca4))
17 | * :package: build ([b76287e](https://github.com/icebob/vue-touch-keyboard/commit/b76287e))
18 | * :package: build ([3fe74c3](https://github.com/icebob/vue-touch-keyboard/commit/3fe74c3))
19 | * :package: build ([3b6f746](https://github.com/icebob/vue-touch-keyboard/commit/3b6f746))
20 | * :package: build ([3e56711](https://github.com/icebob/vue-touch-keyboard/commit/3e56711))
21 | * :package: build ([867731f](https://github.com/icebob/vue-touch-keyboard/commit/867731f))
22 | * add accept event handler ([a5f305b](https://github.com/icebob/vue-touch-keyboard/commit/a5f305b))
23 | * add asserts ([1d39a02](https://github.com/icebob/vue-touch-keyboard/commit/1d39a02))
24 | * base library code ([0f6526a](https://github.com/icebob/vue-touch-keyboard/commit/0f6526a))
25 | * create base code ([e2d2a5b](https://github.com/icebob/vue-touch-keyboard/commit/e2d2a5b))
26 | * fix image markdown ([a33ddb9](https://github.com/icebob/vue-touch-keyboard/commit/a33ddb9))
27 | * fix layout ([f2da48f](https://github.com/icebob/vue-touch-keyboard/commit/f2da48f))
28 | * fix lint errors ([fe572c8](https://github.com/icebob/vue-touch-keyboard/commit/fe572c8))
29 | * Initial commit ([1c8644d](https://github.com/icebob/vue-touch-keyboard/commit/1c8644d))
30 | * linting ([9ec6aec](https://github.com/icebob/vue-touch-keyboard/commit/9ec6aec))
31 | * modify layout & add backspace icon ([2a4c419](https://github.com/icebob/vue-touch-keyboard/commit/2a4c419))
32 | * organize code ([d16d59d](https://github.com/icebob/vue-touch-keyboard/commit/d16d59d))
33 | * removed fix width from style ([91513f1](https://github.com/icebob/vue-touch-keyboard/commit/91513f1))
34 | * rename mini layout to compact ([609cffb](https://github.com/icebob/vue-touch-keyboard/commit/609cffb))
35 | * rename props ([68532d9](https://github.com/icebob/vue-touch-keyboard/commit/68532d9))
36 | * rename vars ([5953216](https://github.com/icebob/vue-touch-keyboard/commit/5953216))
37 | * rewrite layouts ([fa21941](https://github.com/icebob/vue-touch-keyboard/commit/fa21941))
38 | * scrolling to input ([5befa87](https://github.com/icebob/vue-touch-keyboard/commit/5befa87))
39 | * simpler layout ([908ced0](https://github.com/icebob/vue-touch-keyboard/commit/908ced0))
40 | * try to lock focus on input ([f20b5b5](https://github.com/icebob/vue-touch-keyboard/commit/f20b5b5))
41 | * Update README.md ([a0c1280](https://github.com/icebob/vue-touch-keyboard/commit/a0c1280))
42 | * Update README.md ([aab6503](https://github.com/icebob/vue-touch-keyboard/commit/aab6503))
43 | * update screenshot ([af38439](https://github.com/icebob/vue-touch-keyboard/commit/af38439))
44 | * docs: add readme ([9693159](https://github.com/icebob/vue-touch-keyboard/commit/9693159))
45 | * docs: change screenshot ([4704ac5](https://github.com/icebob/vue-touch-keyboard/commit/4704ac5))
46 | * docs: improve readme ([886123f](https://github.com/icebob/vue-touch-keyboard/commit/886123f))
47 | * docs: update badges ([77cd0e9](https://github.com/icebob/vue-touch-keyboard/commit/77cd0e9))
48 | * docs: update readme ([48719b9](https://github.com/icebob/vue-touch-keyboard/commit/48719b9))
49 | * docs: update screenshot url ([5e0d6c4](https://github.com/icebob/vue-touch-keyboard/commit/5e0d6c4))
50 | * fix: Handle maxlength prop ([133d51d](https://github.com/icebob/vue-touch-keyboard/commit/133d51d))
51 | * new: add {next} function. ([cdd2106](https://github.com/icebob/vue-touch-keyboard/commit/cdd2106))
52 | * layout: more similar to real keyboard layout ([964eaeb](https://github.com/icebob/vue-touch-keyboard/commit/964eaeb))
53 | * dev: fix app ([50a4162](https://github.com/icebob/vue-touch-keyboard/commit/50a4162))
54 | * dev: styling dev example ([0cc19f7](https://github.com/icebob/vue-touch-keyboard/commit/0cc19f7))
55 | * dev: update code ([9e3b69e](https://github.com/icebob/vue-touch-keyboard/commit/9e3b69e))
56 | * style: fix placeholder margin ([5f9cbb1](https://github.com/icebob/vue-touch-keyboard/commit/5f9cbb1))
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/src/layouts.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |
3 | "normal": {
4 |
5 | _meta: {
6 | "tab": { key: "\t", text: "Tab", width: 60, classes: "control"},
7 | "shiftl": { keySet: "shifted", text: "Shift", width: 100, classes: "control"},
8 | "shiftr": { keySet: "shifted", text: "Shift", width: 100, classes: "control"},
9 | "caps": { keySet: "capsed", text: "Caps lock", width: 80, classes: "control"},
10 | "space": { key: " ", text: "Space", width: 180},
11 | "enter": { key: "\r\n", text: "Enter", width: 80, classes: "control"},
12 | "backspace": { func: "backspace", classes: "control backspace", width: 65},
13 | "accept": { func: "accept", text: "Close", classes: "control featured"},
14 | "next": { func: "next", text: "Next", classes: "control featured"}
15 | },
16 |
17 | default: [
18 | "` 1 2 3 4 5 6 7 8 9 0 - = {backspace}",
19 | "{tab} q w e r t y u i o p [ ] \\",
20 | "{caps} a s d f g h j k l ; ' {enter}",
21 | "{shiftl} z x c v b n m , . / {shiftr}",
22 | "{next} {space} {accept}"
23 | ],
24 | shifted: [
25 | "~ ! @ # $ % ^ & * ( ) _ + {backspace}",
26 | "{tab} Q W E R T Y U I O P { } |",
27 | "{caps} A S D F G H J K L : \" {enter}",
28 | "{shiftl} Z X C V B N M < > ? {shiftr}",
29 | "{next} {space} {accept}"
30 | ],
31 |
32 | capsed: [
33 | "` 1 2 3 4 5 6 7 8 9 0 - = {backspace}",
34 | "{tab} Q W E R T Y U I O P [ ] \\",
35 | "{caps} A S D F G H J K L ; ' {enter}",
36 | "{shiftl} Z X C V B N M , . / {shiftr}",
37 | "{next} {space} {accept}"
38 | ]
39 | },
40 | per_normal : {
41 | _meta: {
42 | tab: {
43 | key: "\t"
44 | , text: "Tab"
45 | , width: 60
46 | , classes: "control"
47 | }
48 | , caps: {
49 | keySet: "capsed"
50 | , text: "Caps lock"
51 | , width: 80
52 | , classes: "control"
53 | }
54 | , space: {
55 | key: " "
56 | , text: "فاصله"
57 | , width: 180
58 | }
59 | , enter: {
60 | key: "\r\n"
61 | , text: "Enter"
62 | , width: 80
63 | , classes: "control"
64 | }
65 | , backspace: {
66 | func: "backspace"
67 | , classes: "control backspace"
68 | , width: 65
69 | }
70 | , accept: {
71 | func: "accept"
72 | , text: "بستن"
73 | , classes: "control featured"
74 | }
75 | , next: {
76 | func: "next"
77 | , text: "بعدی"
78 | , classes: "control featured"
79 | }
80 | , shiftl: {
81 | keySet: "shifted"
82 | , text: "تغییر"
83 | , width: 100
84 | , classes: "control"
85 | }
86 | },
87 | "default": ["` 1 2 3 4 5 6 7 8 9 0 - = {backspace}", "{tab} ض ص ث ق ف غ ع ه خ ح ج چ", "{caps} ش س ی ب ل ا ت ن م ک گ {enter}", "{shiftl} ؟ ظ ط ز ر ذ د و ، . پ ئ / ", "{next} {space} {accept}"] ,
88 | shifted : ["~ ! @ # $ % ^ & * ( ) _ + {backspace}", "{tab} ض ص ث ق ف غ ع ه خ ح ج چ", "{caps} ش س ی ب ل ا ت ن م ک گ {enter}", "{shiftl} ؟ ظ ط ز ر ذ د و { } [ ] / ", "{next} {space} {accept}"]
89 | },
90 | "compact": {
91 |
92 | _meta: {
93 | "default": { keySet: "default", text: "abc", classes: "control"},
94 | "alpha": { keySet: "default", text: "Abc", classes: "control"},
95 | "shift": { keySet: "shifted", text: "ABC", classes: "control"},
96 | "numbers": { keySet: "numbers", text: "123", classes: "control"},
97 | "space": { key: " ", text: "Space", width: 200},
98 | "backspace": { func: "backspace", classes: "control"},
99 | "accept": { func: "accept", text: "Close", classes: "control featured"},
100 | "next": { func: "next", text: "Next", classes: "featured"},
101 | "zero": { key: "0", width: 130}
102 | },
103 |
104 | default: [
105 | "q w e r t y u i o p",
106 | " a s d f g h j k l ",
107 | "{shift} z x c v b n m {backspace}",
108 | "{numbers} , {space} . {next} {accept}"
109 | ],
110 |
111 | shifted: [
112 | "Q W E R T Y U I O P",
113 | " A S D F G H J K L ",
114 | "{default} Z X C V B N M ",
115 | "{numbers} _ {space} {backspace} {next} {accept}"
116 | ],
117 |
118 | numbers: [
119 | "1 2 3",
120 | "4 5 6",
121 | "7 8 9",
122 | " {alpha} . {zero} {backspace} {next} {accept}"
123 | ]
124 | },
125 |
126 | "numeric": {
127 |
128 | _meta: {
129 | "backspace": { func: "backspace", classes: "control"},
130 | "accept": { func: "accept", text: "Close", classes: "control featured"},
131 | "next": { func: "next", text: "Next", classes: "control featured"},
132 | "zero": { key: "0", width: 130}
133 | },
134 |
135 | default: [
136 | "1 2 3",
137 | "4 5 6",
138 | "7 8 9",
139 | "_ - . {zero} {backspace} {next} {accept}"
140 | ]
141 | }
142 |
143 | };
144 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-touch-keyboard [](https://www.npmjs.com/package/vue-touch-keyboard) 
2 |
3 | Virtual keyboard component for Vue.js v2.x. Designed to Raspberry Pi Touch Display
4 |
5 | [](https://www.codacy.com/app/mereg-norbert/vue-touch-keyboard?utm_source=github.com&utm_medium=referral&utm_content=icebob/vue-touch-keyboard&utm_campaign=Badge_Grade)
6 | [](https://travis-ci.org/icebob/vue-touch-keyboard)
7 | [](https://coveralls.io/github/icebob/vue-touch-keyboard?branch=master)
8 | []()
9 |
10 | [](https://david-dm.org/icebob/vue-touch-keyboard)
11 | [](https://david-dm.org/icebob/vue-touch-keyboard#info=devDependencies)
12 | [](https://www.npmjs.com/package/vue-touch-keyboard)
13 |
14 | ## Demo
15 | [JSFiddle demo](https://jsfiddle.net/icebob/88n7c1L8/)
16 |
17 | []()
18 |
19 | ## Features
20 | - 3 built-in layouts, but you can create custom layouts
21 | - **no external dependencies**
22 | - full responsive
23 | - customizable styles
24 | - ...etc
25 |
26 | ## Installation
27 | ### NPM
28 | You can install it via [NPM](http://npmjs.org/).
29 | ```
30 | $ npm install vue-touch-keyboard
31 | ```
32 | ### Manual
33 | Download zip package and unpack and add the `vue-touch-keyboard.css` and `vue-touch-keyboard.js` file to your project from dist folder.
34 | ```
35 | https://github.com/icebob/vue-touch-keyboard/archive/master.zip
36 | ```
37 |
38 | ## Usage
39 | ```html
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
83 | ```
84 |
85 | ## Properties
86 | Property | Default | Accepted values | Description
87 | ------------- | -------- | --------------- | -----------
88 | `input` | required | `HTMLInputElement` | The target input HTML element
89 | `layout` | required | `String` or `Object` | Layout of keys. If you are using the built-in layouts, you can set as the name of the layout. If you want to use custom layout, you need to set a layout `Object`.
90 | `accept` | `null` | `Function` | Event handler. Fired when the "Accept/Close" button pressed.
91 | `cancel` | `null` | `Function` | Event handler. Fired when the "Cancel" button pressed.
92 | `change` | `null` | `Function` | Event handler. Fired when the input value changed.
93 | `next` | `null` | `Function` | Event handler. Fired when the "Next" button pressed or the length of the value of the input reached the `maxLength` of the `input`
94 | `options` | `{}` | `Object` | Functional options.
95 |
96 | ## Options
97 | Option | Default | Accepted values | Description
98 | ----------- | -------- | --------------- | -----------
99 | `useKbEvents` | `false` | `boolean` | If true, the component will generate a `keypress` event and trigger it. If it returns with `false`, it won't insert the new character.
100 |
101 | ## Built-in layouts
102 | * `normal` - Normal full layout. Similar as real keyboard layouts
103 | * `numeric` - Only for numbers
104 | * `compact` - Compact layout. Similar as mobile phone keyboard layouts
105 |
106 | ## Supported languages
107 | Two languages are currently supported. More might be added soon.
108 |
109 | Here you can see list of languages and their supported layouts.
110 |
111 | Language | Language code | Normal | Numeric | Compact
112 | ----------- |---------| -------- | ---------------| -----------
113 | English | - |✓ | ✓ | ✓
114 | Persian |per | ✓ | × | ×
115 |
116 | How to use? You shoud change `data-layout` , this is the syntax:
117 | `Language code` + `_` + `Name of layout`
118 |
119 | For English `Language code` is not needed just write the `Name of layout` .
120 |
121 | ##### Example
122 | ```
123 | //to use English
124 |
125 |
126 | // to use Persian
127 |
128 |
129 | ```
130 |
131 | ## Development
132 | This command will start a `webpack-dev-server` with content of `dev` folder.
133 | ```bash
134 | npm run dev
135 | ```
136 |
137 | ## Build
138 | This command will build a distributable version in the `dist` directory.
139 | ```bash
140 | npm run build
141 | ```
142 |
143 | ## Test
144 | ```bash
145 | npm test
146 | ```
147 |
148 | ## Contribution
149 | Please send pull requests improving the usage and fixing bugs, improving documentation and providing better examples, or providing some testing, because these things are important.
150 |
151 | ## License
152 | vue-touch-keyboard is available under the [MIT license](https://tldrlegal.com/license/mit-license).
153 |
154 | ## Contact
155 |
156 | Copyright (C) 2017 Icebob
157 |
158 | [](https://github.com/icebob) [](https://twitter.com/Icebobcsi)
159 |
--------------------------------------------------------------------------------
/src/keyboard.vue:
--------------------------------------------------------------------------------
1 |
2 | .vue-touch-keyboard
3 | // input(type="text", v-model="keyboardText", v-if="!input")
4 | .keyboard
5 | .line(v-for="(line, index) in keySet", key="index")
6 | span(v-for="(key, index) in line", key="index", :class="getClassesOfKey(key)", v-text="getCaptionOfKey(key)", @click="clickKey(key)", @mousedown="mousedown", :style="getKeyStyle(key)")
7 |
8 |
9 |
10 |
280 |
281 |
--------------------------------------------------------------------------------
/dist/vue-touch-keyboard.js:
--------------------------------------------------------------------------------
1 | /**
2 | * vue-touch-keyboard v0.2.0
3 | * https://github.com/icebob/vue-touch-keyboard
4 | * Released under the MIT License.
5 | */
6 |
7 | ! function(t, e) {
8 | "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.VueTouchKeyboard = e() : t.VueTouchKeyboard = e()
9 | }(this, function() {
10 | return function(t) {
11 | function e(r) {
12 | if (n[r]) return n[r].exports;
13 | var o = n[r] = {
14 | exports: {},
15 | id: r,
16 | loaded: !1
17 | };
18 | return t[r].call(o.exports, o, o.exports, e), o.loaded = !0, o.exports
19 | }
20 | var n = {};
21 | return e.m = t, e.c = n, e.p = "", e(0)
22 | }([function(t, e, n) {
23 | "use strict";
24 | var r = n(1);
25 | t.exports = {
26 | component: r,
27 | layouts: n(73),
28 | install: function(t) {
29 | t.component("VueTouchKeyboard", r)
30 | }
31 | }
32 | }, function(t, e, n) {
33 | n(2);
34 | var r = n(3)(n(4), n(84), null, null);
35 | t.exports = r.exports
36 | }, function(t, e) {}, function(t, e) {
37 | t.exports = function(t, e, n, r) {
38 | var o, i = t = t || {},
39 | c = typeof t["default"];
40 | "object" !== c && "function" !== c || (o = t, i = t["default"]);
41 | var u = "function" == typeof i ? i.options : i;
42 | if (e && (u.render = e.render, u.staticRenderFns = e.staticRenderFns), n && (u._scopeId = n), r) {
43 | var s = Object.create(u.computed || null);
44 | Object.keys(r).forEach(function(t) {
45 | var e = r[t];
46 | s[t] = function() {
47 | return e
48 | }
49 | }), u.computed = s
50 | }
51 | return {
52 | esModule: o,
53 | exports: i,
54 | options: u
55 | }
56 | }
57 | }, function(t, e, n) {
58 | "use strict";
59 |
60 | function r(t) {
61 | return t && t.__esModule ? t : {
62 | "default": t
63 | }
64 | }
65 | Object.defineProperty(e, "__esModule", {
66 | value: !0
67 | });
68 | var o = n(5),
69 | i = r(o),
70 | c = n(73),
71 | u = r(c),
72 | s = n(74),
73 | f = r(s),
74 | a = n(83),
75 | l = r(a);
76 | e["default"] = {
77 | props: {
78 | input: HTMLInputElement,
79 | layout: [String, Object],
80 | accept: Function,
81 | cancel: Function,
82 | change: Function,
83 | next: Function,
84 | options: {
85 | type: Object,
86 | "default": function() {
87 | return {}
88 | }
89 | }
90 | },
91 | data: function() {
92 | return {
93 | currentKeySet: "default",
94 | inputScrollLeft: 0
95 | }
96 | },
97 | computed: {
98 | keySet: function p() {
99 | var t = this.getLayout();
100 | if (t) {
101 | var p = t[this.currentKeySet];
102 | if (p) {
103 | var e = [],
104 | n = t._meta || {};
105 | return p.forEach(function(t) {
106 | var r = [];
107 | t.split(" ").forEach(function(t) {
108 | if ((0, l["default"])(t)) r.push(t);
109 | else if ((0, f["default"])(t))
110 | if (t.length > 2 && "{" == t[0] && "}" == t[t.length - 1]) {
111 | var e = t.substring(1, t.length - 1);
112 | n[e] ? r.push(n[e]) : console.warn("Missing named key from meta: " + e)
113 | } else "" == t ? r.push({
114 | placeholder: !0
115 | }) : r.push({
116 | key: t,
117 | text: t
118 | })
119 | }), e.push(r)
120 | }), e
121 | }
122 | }
123 | }
124 | },
125 | watch: {
126 | layout: function() {
127 | console.log("Layout changed"), this.currentKeySet = "default"
128 | }
129 | },
130 | methods: {
131 | getLayout: function() {
132 | return (0, f["default"])(this.layout) ? u["default"][this.layout] : this.layout
133 | },
134 | changeKeySet: function(t) {
135 | var e = this.getLayout();
136 | null != e[t] && (this.currentKeySet = t)
137 | },
138 | toggleKeySet: function(t) {
139 | this.currentKeySet = this.currentKeySet == t ? "default" : t
140 | },
141 | getCaptionOfKey: function(t) {
142 | return t.text || t.key || ""
143 | },
144 | getClassesOfKey: function(t) {
145 | if (t.placeholder) return "placeholder";
146 | var e = "key " + (t.func || "") + " " + (t.classes || "");
147 | return t.keySet && this.currentKeySet == t.keySet && (e += " activated"), e
148 | },
149 | getKeyStyle: function(t) {
150 | if (t.width) return {
151 | flex: t.width
152 | }
153 | },
154 | supportsSelection: function() {
155 | return /text|password|search|tel|url/.test(this.input.type)
156 | },
157 | getCaret: function() {
158 | if (this.supportsSelection()) {
159 | var t = {
160 | start: this.input.selectionStart || 0,
161 | end: this.input.selectionEnd || 0
162 | };
163 | return t.end < t.start && (t.end = t.start), t
164 | }
165 | var e = this.input.value;
166 | return {
167 | start: e.length,
168 | end: e.length
169 | }
170 | },
171 | backspace: function(t, e) {
172 | return e = e.substring(0, t.start - 1) + e.substring(t.start), t.start -= 1, t.end = t.start, e
173 | },
174 | insertChar: function(t, e, n) {
175 | return e = e.substr(0, t.start) + n.toString() + e.substr(t.start), t.start += n.length, t.end = t.start, e
176 | },
177 | mousedown: function() {
178 | this.input && (this.inputScrollLeft = this.input.scrollLeft)
179 | },
180 | clickKey: function(t) {
181 | if (this.input) {
182 | var e = this.getCaret(),
183 | n = this.input.value,
184 | r = null;
185 | if ("object" == ("undefined" == typeof t ? "undefined" : (0, i["default"])(t)))
186 | if (t.keySet) this.toggleKeySet(t.keySet);
187 | else if (t.func) switch (t.func) {
188 | case "backspace":
189 | n = this.backspace(e, n);
190 | break;
191 | case "accept":
192 | return void(this.accept && this.accept(n));
193 | case "cancel":
194 | return void(this.cancel && this.cancel());
195 | case "next":
196 | return void(this.next && this.next())
197 | } else r = t.key;
198 | else r = t;
199 | if (r) {
200 | if (this.input.maxLength <= 0 || n.length < this.input.maxLength)
201 | if (this.options.useKbEvents) {
202 | var o = document.createEvent("Event");
203 | o.initEvent("keypress", !0, !0), o.which = o.keyCode = r.charCodeAt(), this.input.dispatchEvent(o) && (n = this.insertChar(e, n, r))
204 | } else n = this.insertChar(e, n, r);
205 | "shifted" == this.currentKeySet && this.changeKeySet("default")
206 | }
207 | this.input.value = n, this.setFocusToInput(e), this.change && this.change(n, r), this.input.maxLength > 0 && n.length >= this.input.maxLength && this.next && this.next()
208 | }
209 | },
210 | setFocusToInput: function(t) {
211 | this.input.focus(), t && this.supportsSelection() && (this.input.selectionStart = t.start, this.input.selectionEnd = t.end)
212 | }
213 | },
214 | mounted: function() {
215 | this.input && this.setFocusToInput()
216 | }
217 | }
218 | }, function(t, e, n) {
219 | "use strict";
220 |
221 | function r(t) {
222 | return t && t.__esModule ? t : {
223 | "default": t
224 | }
225 | }
226 | e.__esModule = !0;
227 | var o = n(6),
228 | i = r(o),
229 | c = n(57),
230 | u = r(c),
231 | s = "function" == typeof u["default"] && "symbol" == typeof i["default"] ? function(t) {
232 | return typeof t
233 | } : function(t) {
234 | return t && "function" == typeof u["default"] && t.constructor === u["default"] && t !== u["default"].prototype ? "symbol" : typeof t
235 | };
236 | e["default"] = "function" == typeof u["default"] && "symbol" === s(i["default"]) ? function(t) {
237 | return "undefined" == typeof t ? "undefined" : s(t)
238 | } : function(t) {
239 | return t && "function" == typeof u["default"] && t.constructor === u["default"] && t !== u["default"].prototype ? "symbol" : "undefined" == typeof t ? "undefined" : s(t)
240 | }
241 | }, function(t, e, n) {
242 | t.exports = {
243 | "default": n(7),
244 | __esModule: !0
245 | }
246 | }, function(t, e, n) {
247 | n(8), n(52), t.exports = n(56).f("iterator")
248 | }, function(t, e, n) {
249 | "use strict";
250 | var r = n(9)(!0);
251 | n(12)(String, "String", function(t) {
252 | this._t = String(t), this._i = 0
253 | }, function() {
254 | var t, e = this._t,
255 | n = this._i;
256 | return n >= e.length ? {
257 | value: void 0,
258 | done: !0
259 | } : (t = r(e, n), this._i += t.length, {
260 | value: t,
261 | done: !1
262 | })
263 | })
264 | }, function(t, e, n) {
265 | var r = n(10),
266 | o = n(11);
267 | t.exports = function(t) {
268 | return function(e, n) {
269 | var i, c, u = String(o(e)),
270 | s = r(n),
271 | f = u.length;
272 | return s < 0 || s >= f ? t ? "" : void 0 : (i = u.charCodeAt(s), i < 55296 || i > 56319 || s + 1 === f || (c = u.charCodeAt(s + 1)) < 56320 || c > 57343 ? t ? u.charAt(s) : i : t ? u.slice(s, s + 2) : (i - 55296 << 10) + (c - 56320) + 65536)
273 | }
274 | }
275 | }, function(t, e) {
276 | var n = Math.ceil,
277 | r = Math.floor;
278 | t.exports = function(t) {
279 | return isNaN(t = +t) ? 0 : (t > 0 ? r : n)(t)
280 | }
281 | }, function(t, e) {
282 | t.exports = function(t) {
283 | if (void 0 == t) throw TypeError("Can't call method on " + t);
284 | return t
285 | }
286 | }, function(t, e, n) {
287 | "use strict";
288 | var r = n(13),
289 | o = n(14),
290 | i = n(29),
291 | c = n(19),
292 | u = n(30),
293 | s = n(31),
294 | f = n(32),
295 | a = n(48),
296 | l = n(50),
297 | p = n(49)("iterator"),
298 | h = !([].keys && "next" in [].keys()),
299 | y = "@@iterator",
300 | d = "keys",
301 | v = "values",
302 | b = function() {
303 | return this
304 | };
305 | t.exports = function(t, e, n, x, g, m, S) {
306 | f(n, e, x);
307 | var O, k, w, j = function(t) {
308 | if (!h && t in C) return C[t];
309 | switch (t) {
310 | case d:
311 | return function() {
312 | return new n(this, t)
313 | };
314 | case v:
315 | return function() {
316 | return new n(this, t)
317 | }
318 | }
319 | return function() {
320 | return new n(this, t)
321 | }
322 | },
323 | _ = e + " Iterator",
324 | E = g == v,
325 | P = !1,
326 | C = t.prototype,
327 | K = C[p] || C[y] || g && C[g],
328 | F = K || j(g),
329 | T = g ? E ? j("entries") : F : void 0,
330 | M = "Array" == e ? C.entries || K : K;
331 | if (M && (w = l(M.call(new t)), w !== Object.prototype && (a(w, _, !0), r || u(w, p) || c(w, p, b))), E && K && K.name !== v && (P = !0, F = function() {
332 | return K.call(this)
333 | }), r && !S || !h && !P && C[p] || c(C, p, F), s[e] = F, s[_] = b, g)
334 | if (O = {
335 | values: E ? F : j(v),
336 | keys: m ? F : j(d),
337 | entries: T
338 | }, S)
339 | for (k in O) k in C || i(C, k, O[k]);
340 | else o(o.P + o.F * (h || P), e, O);
341 | return O
342 | }
343 | }, function(t, e) {
344 | t.exports = !0
345 | }, function(t, e, n) {
346 | var r = n(15),
347 | o = n(16),
348 | i = n(17),
349 | c = n(19),
350 | u = "prototype",
351 | s = function(t, e, n) {
352 | var f, a, l, p = t & s.F,
353 | h = t & s.G,
354 | y = t & s.S,
355 | d = t & s.P,
356 | v = t & s.B,
357 | b = t & s.W,
358 | x = h ? o : o[e] || (o[e] = {}),
359 | g = x[u],
360 | m = h ? r : y ? r[e] : (r[e] || {})[u];
361 | h && (n = e);
362 | for (f in n) a = !p && m && void 0 !== m[f], a && f in x || (l = a ? m[f] : n[f], x[f] = h && "function" != typeof m[f] ? n[f] : v && a ? i(l, r) : b && m[f] == l ? function(t) {
363 | var e = function(e, n, r) {
364 | if (this instanceof t) {
365 | switch (arguments.length) {
366 | case 0:
367 | return new t;
368 | case 1:
369 | return new t(e);
370 | case 2:
371 | return new t(e, n)
372 | }
373 | return new t(e, n, r)
374 | }
375 | return t.apply(this, arguments)
376 | };
377 | return e[u] = t[u], e
378 | }(l) : d && "function" == typeof l ? i(Function.call, l) : l, d && ((x.virtual || (x.virtual = {}))[f] = l, t & s.R && g && !g[f] && c(g, f, l)))
379 | };
380 | s.F = 1, s.G = 2, s.S = 4, s.P = 8, s.B = 16, s.W = 32, s.U = 64, s.R = 128, t.exports = s
381 | }, function(t, e) {
382 | var n = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")();
383 | "number" == typeof __g && (__g = n)
384 | }, function(t, e) {
385 | var n = t.exports = {
386 | version: "2.4.0"
387 | };
388 | "number" == typeof __e && (__e = n)
389 | }, function(t, e, n) {
390 | var r = n(18);
391 | t.exports = function(t, e, n) {
392 | if (r(t), void 0 === e) return t;
393 | switch (n) {
394 | case 1:
395 | return function(n) {
396 | return t.call(e, n)
397 | };
398 | case 2:
399 | return function(n, r) {
400 | return t.call(e, n, r)
401 | };
402 | case 3:
403 | return function(n, r, o) {
404 | return t.call(e, n, r, o)
405 | }
406 | }
407 | return function() {
408 | return t.apply(e, arguments)
409 | }
410 | }
411 | }, function(t, e) {
412 | t.exports = function(t) {
413 | if ("function" != typeof t) throw TypeError(t + " is not a function!");
414 | return t
415 | }
416 | }, function(t, e, n) {
417 | var r = n(20),
418 | o = n(28);
419 | t.exports = n(24) ? function(t, e, n) {
420 | return r.f(t, e, o(1, n))
421 | } : function(t, e, n) {
422 | return t[e] = n, t
423 | }
424 | }, function(t, e, n) {
425 | var r = n(21),
426 | o = n(23),
427 | i = n(27),
428 | c = Object.defineProperty;
429 | e.f = n(24) ? Object.defineProperty : function(t, e, n) {
430 | if (r(t), e = i(e, !0), r(n), o) try {
431 | return c(t, e, n)
432 | } catch (u) {}
433 | if ("get" in n || "set" in n) throw TypeError("Accessors not supported!");
434 | return "value" in n && (t[e] = n.value), t
435 | }
436 | }, function(t, e, n) {
437 | var r = n(22);
438 | t.exports = function(t) {
439 | if (!r(t)) throw TypeError(t + " is not an object!");
440 | return t
441 | }
442 | }, function(t, e) {
443 | t.exports = function(t) {
444 | return "object" == typeof t ? null !== t : "function" == typeof t
445 | }
446 | }, function(t, e, n) {
447 | t.exports = !n(24) && !n(25)(function() {
448 | return 7 != Object.defineProperty(n(26)("div"), "a", {
449 | get: function() {
450 | return 7
451 | }
452 | }).a
453 | })
454 | }, function(t, e, n) {
455 | t.exports = !n(25)(function() {
456 | return 7 != Object.defineProperty({}, "a", {
457 | get: function() {
458 | return 7
459 | }
460 | }).a
461 | })
462 | }, function(t, e) {
463 | t.exports = function(t) {
464 | try {
465 | return !!t()
466 | } catch (e) {
467 | return !0
468 | }
469 | }
470 | }, function(t, e, n) {
471 | var r = n(22),
472 | o = n(15).document,
473 | i = r(o) && r(o.createElement);
474 | t.exports = function(t) {
475 | return i ? o.createElement(t) : {}
476 | }
477 | }, function(t, e, n) {
478 | var r = n(22);
479 | t.exports = function(t, e) {
480 | if (!r(t)) return t;
481 | var n, o;
482 | if (e && "function" == typeof(n = t.toString) && !r(o = n.call(t))) return o;
483 | if ("function" == typeof(n = t.valueOf) && !r(o = n.call(t))) return o;
484 | if (!e && "function" == typeof(n = t.toString) && !r(o = n.call(t))) return o;
485 | throw TypeError("Can't convert object to primitive value")
486 | }
487 | }, function(t, e) {
488 | t.exports = function(t, e) {
489 | return {
490 | enumerable: !(1 & t),
491 | configurable: !(2 & t),
492 | writable: !(4 & t),
493 | value: e
494 | }
495 | }
496 | }, function(t, e, n) {
497 | t.exports = n(19)
498 | }, function(t, e) {
499 | var n = {}.hasOwnProperty;
500 | t.exports = function(t, e) {
501 | return n.call(t, e)
502 | }
503 | }, function(t, e) {
504 | t.exports = {}
505 | }, function(t, e, n) {
506 | "use strict";
507 | var r = n(33),
508 | o = n(28),
509 | i = n(48),
510 | c = {};
511 | n(19)(c, n(49)("iterator"), function() {
512 | return this
513 | }), t.exports = function(t, e, n) {
514 | t.prototype = r(c, {
515 | next: o(1, n)
516 | }), i(t, e + " Iterator")
517 | }
518 | }, function(t, e, n) {
519 | var r = n(21),
520 | o = n(34),
521 | i = n(46),
522 | c = n(43)("IE_PROTO"),
523 | u = function() {},
524 | s = "prototype",
525 | f = function() {
526 | var t, e = n(26)("iframe"),
527 | r = i.length,
528 | o = "<",
529 | c = ">";
530 | for (e.style.display = "none", n(47).appendChild(e), e.src = "javascript:", t = e.contentWindow.document, t.open(), t.write(o + "script" + c + "document.F=Object" + o + "/script" + c), t.close(), f = t.F; r--;) delete f[s][i[r]];
531 | return f()
532 | };
533 | t.exports = Object.create || function(t, e) {
534 | var n;
535 | return null !== t ? (u[s] = r(t), n = new u, u[s] = null, n[c] = t) : n = f(), void 0 === e ? n : o(n, e)
536 | }
537 | }, function(t, e, n) {
538 | var r = n(20),
539 | o = n(21),
540 | i = n(35);
541 | t.exports = n(24) ? Object.defineProperties : function(t, e) {
542 | o(t);
543 | for (var n, c = i(e), u = c.length, s = 0; u > s;) r.f(t, n = c[s++], e[n]);
544 | return t
545 | }
546 | }, function(t, e, n) {
547 | var r = n(36),
548 | o = n(46);
549 | t.exports = Object.keys || function(t) {
550 | return r(t, o)
551 | }
552 | }, function(t, e, n) {
553 | var r = n(30),
554 | o = n(37),
555 | i = n(40)(!1),
556 | c = n(43)("IE_PROTO");
557 | t.exports = function(t, e) {
558 | var n, u = o(t),
559 | s = 0,
560 | f = [];
561 | for (n in u) n != c && r(u, n) && f.push(n);
562 | for (; e.length > s;) r(u, n = e[s++]) && (~i(f, n) || f.push(n));
563 | return f
564 | }
565 | }, function(t, e, n) {
566 | var r = n(38),
567 | o = n(11);
568 | t.exports = function(t) {
569 | return r(o(t))
570 | }
571 | }, function(t, e, n) {
572 | var r = n(39);
573 | t.exports = Object("z").propertyIsEnumerable(0) ? Object : function(t) {
574 | return "String" == r(t) ? t.split("") : Object(t)
575 | }
576 | }, function(t, e) {
577 | var n = {}.toString;
578 | t.exports = function(t) {
579 | return n.call(t).slice(8, -1)
580 | }
581 | }, function(t, e, n) {
582 | var r = n(37),
583 | o = n(41),
584 | i = n(42);
585 | t.exports = function(t) {
586 | return function(e, n, c) {
587 | var u, s = r(e),
588 | f = o(s.length),
589 | a = i(c, f);
590 | if (t && n != n) {
591 | for (; f > a;)
592 | if (u = s[a++], u != u) return !0
593 | } else
594 | for (; f > a; a++)
595 | if ((t || a in s) && s[a] === n) return t || a || 0; return !t && -1
596 | }
597 | }
598 | }, function(t, e, n) {
599 | var r = n(10),
600 | o = Math.min;
601 | t.exports = function(t) {
602 | return t > 0 ? o(r(t), 9007199254740991) : 0
603 | }
604 | }, function(t, e, n) {
605 | var r = n(10),
606 | o = Math.max,
607 | i = Math.min;
608 | t.exports = function(t, e) {
609 | return t = r(t), t < 0 ? o(t + e, 0) : i(t, e)
610 | }
611 | }, function(t, e, n) {
612 | var r = n(44)("keys"),
613 | o = n(45);
614 | t.exports = function(t) {
615 | return r[t] || (r[t] = o(t))
616 | }
617 | }, function(t, e, n) {
618 | var r = n(15),
619 | o = "__core-js_shared__",
620 | i = r[o] || (r[o] = {});
621 | t.exports = function(t) {
622 | return i[t] || (i[t] = {})
623 | }
624 | }, function(t, e) {
625 | var n = 0,
626 | r = Math.random();
627 | t.exports = function(t) {
628 | return "Symbol(".concat(void 0 === t ? "" : t, ")_", (++n + r).toString(36))
629 | }
630 | }, function(t, e) {
631 | t.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")
632 | }, function(t, e, n) {
633 | t.exports = n(15).document && document.documentElement
634 | }, function(t, e, n) {
635 | var r = n(20).f,
636 | o = n(30),
637 | i = n(49)("toStringTag");
638 | t.exports = function(t, e, n) {
639 | t && !o(t = n ? t : t.prototype, i) && r(t, i, {
640 | configurable: !0,
641 | value: e
642 | })
643 | }
644 | }, function(t, e, n) {
645 | var r = n(44)("wks"),
646 | o = n(45),
647 | i = n(15).Symbol,
648 | c = "function" == typeof i,
649 | u = t.exports = function(t) {
650 | return r[t] || (r[t] = c && i[t] || (c ? i : o)("Symbol." + t))
651 | };
652 | u.store = r
653 | }, function(t, e, n) {
654 | var r = n(30),
655 | o = n(51),
656 | i = n(43)("IE_PROTO"),
657 | c = Object.prototype;
658 | t.exports = Object.getPrototypeOf || function(t) {
659 | return t = o(t), r(t, i) ? t[i] : "function" == typeof t.constructor && t instanceof t.constructor ? t.constructor.prototype : t instanceof Object ? c : null
660 | }
661 | }, function(t, e, n) {
662 | var r = n(11);
663 | t.exports = function(t) {
664 | return Object(r(t))
665 | }
666 | }, function(t, e, n) {
667 | n(53);
668 | for (var r = n(15), o = n(19), i = n(31), c = n(49)("toStringTag"), u = ["NodeList", "DOMTokenList", "MediaList", "StyleSheetList", "CSSRuleList"], s = 0; s < 5; s++) {
669 | var f = u[s],
670 | a = r[f],
671 | l = a && a.prototype;
672 | l && !l[c] && o(l, c, f), i[f] = i.Array
673 | }
674 | }, function(t, e, n) {
675 | "use strict";
676 | var r = n(54),
677 | o = n(55),
678 | i = n(31),
679 | c = n(37);
680 | t.exports = n(12)(Array, "Array", function(t, e) {
681 | this._t = c(t), this._i = 0, this._k = e
682 | }, function() {
683 | var t = this._t,
684 | e = this._k,
685 | n = this._i++;
686 | return !t || n >= t.length ? (this._t = void 0, o(1)) : "keys" == e ? o(0, n) : "values" == e ? o(0, t[n]) : o(0, [n, t[n]])
687 | }, "values"), i.Arguments = i.Array, r("keys"), r("values"), r("entries")
688 | }, function(t, e) {
689 | t.exports = function() {}
690 | }, function(t, e) {
691 | t.exports = function(t, e) {
692 | return {
693 | value: e,
694 | done: !!t
695 | }
696 | }
697 | }, function(t, e, n) {
698 | e.f = n(49)
699 | }, function(t, e, n) {
700 | t.exports = {
701 | "default": n(58),
702 | __esModule: !0
703 | }
704 | }, function(t, e, n) {
705 | n(59), n(70), n(71), n(72), t.exports = n(16).Symbol
706 | }, function(t, e, n) {
707 | "use strict";
708 | var r = n(15),
709 | o = n(30),
710 | i = n(24),
711 | c = n(14),
712 | u = n(29),
713 | s = n(60).KEY,
714 | f = n(25),
715 | a = n(44),
716 | l = n(48),
717 | p = n(45),
718 | h = n(49),
719 | y = n(56),
720 | d = n(61),
721 | v = n(62),
722 | b = n(63),
723 | x = n(66),
724 | g = n(21),
725 | m = n(37),
726 | S = n(27),
727 | O = n(28),
728 | k = n(33),
729 | w = n(67),
730 | j = n(69),
731 | _ = n(20),
732 | E = n(35),
733 | P = j.f,
734 | C = _.f,
735 | K = w.f,
736 | F = r.Symbol,
737 | T = r.JSON,
738 | M = T && T.stringify,
739 | A = "prototype",
740 | L = h("_hidden"),
741 | I = h("toPrimitive"),
742 | N = {}.propertyIsEnumerable,
743 | R = a("symbol-registry"),
744 | W = a("symbols"),
745 | z = a("op-symbols"),
746 | D = Object[A],
747 | J = "function" == typeof F,
748 | B = r.QObject,
749 | G = !B || !B[A] || !B[A].findChild,
750 | V = i && f(function() {
751 | return 7 != k(C({}, "a", {
752 | get: function() {
753 | return C(this, "a", {
754 | value: 7
755 | }).a
756 | }
757 | })).a
758 | }) ? function(t, e, n) {
759 | var r = P(D, e);
760 | r && delete D[e], C(t, e, n), r && t !== D && C(D, e, r)
761 | } : C,
762 | U = function(t) {
763 | var e = W[t] = k(F[A]);
764 | return e._k = t, e
765 | },
766 | Y = J && "symbol" == typeof F.iterator ? function(t) {
767 | return "symbol" == typeof t
768 | } : function(t) {
769 | return t instanceof F
770 | },
771 | H = function(t, e, n) {
772 | return t === D && H(z, e, n), g(t), e = S(e, !0), g(n), o(W, e) ? (n.enumerable ? (o(t, L) && t[L][e] && (t[L][e] = !1), n = k(n, {
773 | enumerable: O(0, !1)
774 | })) : (o(t, L) || C(t, L, O(1, {})), t[L][e] = !0), V(t, e, n)) : C(t, e, n)
775 | },
776 | Q = function(t, e) {
777 | g(t);
778 | for (var n, r = b(e = m(e)), o = 0, i = r.length; i > o;) H(t, n = r[o++], e[n]);
779 | return t
780 | },
781 | X = function(t, e) {
782 | return void 0 === e ? k(t) : Q(k(t), e)
783 | },
784 | Z = function(t) {
785 | var e = N.call(this, t = S(t, !0));
786 | return !(this === D && o(W, t) && !o(z, t)) && (!(e || !o(this, t) || !o(W, t) || o(this, L) && this[L][t]) || e)
787 | },
788 | q = function(t, e) {
789 | if (t = m(t), e = S(e, !0), t !== D || !o(W, e) || o(z, e)) {
790 | var n = P(t, e);
791 | return !n || !o(W, e) || o(t, L) && t[L][e] || (n.enumerable = !0), n
792 | }
793 | },
794 | $ = function(t) {
795 | for (var e, n = K(m(t)), r = [], i = 0; n.length > i;) o(W, e = n[i++]) || e == L || e == s || r.push(e);
796 | return r
797 | },
798 | tt = function(t) {
799 | for (var e, n = t === D, r = K(n ? z : m(t)), i = [], c = 0; r.length > c;) !o(W, e = r[c++]) || n && !o(D, e) || i.push(W[e]);
800 | return i
801 | };
802 | J || (F = function() {
803 | if (this instanceof F) throw TypeError("Symbol is not a constructor!");
804 | var t = p(arguments.length > 0 ? arguments[0] : void 0),
805 | e = function(n) {
806 | this === D && e.call(z, n), o(this, L) && o(this[L], t) && (this[L][t] = !1), V(this, t, O(1, n))
807 | };
808 | return i && G && V(D, t, {
809 | configurable: !0,
810 | set: e
811 | }), U(t)
812 | }, u(F[A], "toString", function() {
813 | return this._k
814 | }), j.f = q, _.f = H, n(68).f = w.f = $, n(65).f = Z, n(64).f = tt, i && !n(13) && u(D, "propertyIsEnumerable", Z, !0), y.f = function(t) {
815 | return U(h(t))
816 | }), c(c.G + c.W + c.F * !J, {
817 | Symbol: F
818 | });
819 | for (var et = "hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","), nt = 0; et.length > nt;) h(et[nt++]);
820 | for (var et = E(h.store), nt = 0; et.length > nt;) d(et[nt++]);
821 | c(c.S + c.F * !J, "Symbol", {
822 | "for": function(t) {
823 | return o(R, t += "") ? R[t] : R[t] = F(t)
824 | },
825 | keyFor: function(t) {
826 | if (Y(t)) return v(R, t);
827 | throw TypeError(t + " is not a symbol!")
828 | },
829 | useSetter: function() {
830 | G = !0
831 | },
832 | useSimple: function() {
833 | G = !1
834 | }
835 | }), c(c.S + c.F * !J, "Object", {
836 | create: X,
837 | defineProperty: H,
838 | defineProperties: Q,
839 | getOwnPropertyDescriptor: q,
840 | getOwnPropertyNames: $,
841 | getOwnPropertySymbols: tt
842 | }), T && c(c.S + c.F * (!J || f(function() {
843 | var t = F();
844 | return "[null]" != M([t]) || "{}" != M({
845 | a: t
846 | }) || "{}" != M(Object(t))
847 | })), "JSON", {
848 | stringify: function(t) {
849 | if (void 0 !== t && !Y(t)) {
850 | for (var e, n, r = [t], o = 1; arguments.length > o;) r.push(arguments[o++]);
851 | return e = r[1], "function" == typeof e && (n = e), !n && x(e) || (e = function(t, e) {
852 | if (n && (e = n.call(this, t, e)), !Y(e)) return e
853 | }), r[1] = e, M.apply(T, r)
854 | }
855 | }
856 | }), F[A][I] || n(19)(F[A], I, F[A].valueOf), l(F, "Symbol"), l(Math, "Math", !0), l(r.JSON, "JSON", !0)
857 | }, function(t, e, n) {
858 | var r = n(45)("meta"),
859 | o = n(22),
860 | i = n(30),
861 | c = n(20).f,
862 | u = 0,
863 | s = Object.isExtensible || function() {
864 | return !0
865 | },
866 | f = !n(25)(function() {
867 | return s(Object.preventExtensions({}))
868 | }),
869 | a = function(t) {
870 | c(t, r, {
871 | value: {
872 | i: "O" + ++u,
873 | w: {}
874 | }
875 | })
876 | },
877 | l = function(t, e) {
878 | if (!o(t)) return "symbol" == typeof t ? t : ("string" == typeof t ? "S" : "P") + t;
879 | if (!i(t, r)) {
880 | if (!s(t)) return "F";
881 | if (!e) return "E";
882 | a(t)
883 | }
884 | return t[r].i
885 | },
886 | p = function(t, e) {
887 | if (!i(t, r)) {
888 | if (!s(t)) return !0;
889 | if (!e) return !1;
890 | a(t)
891 | }
892 | return t[r].w
893 | },
894 | h = function(t) {
895 | return f && y.NEED && s(t) && !i(t, r) && a(t), t
896 | },
897 | y = t.exports = {
898 | KEY: r,
899 | NEED: !1,
900 | fastKey: l,
901 | getWeak: p,
902 | onFreeze: h
903 | }
904 | }, function(t, e, n) {
905 | var r = n(15),
906 | o = n(16),
907 | i = n(13),
908 | c = n(56),
909 | u = n(20).f;
910 | t.exports = function(t) {
911 | var e = o.Symbol || (o.Symbol = i ? {} : r.Symbol || {});
912 | "_" == t.charAt(0) || t in e || u(e, t, {
913 | value: c.f(t)
914 | })
915 | }
916 | }, function(t, e, n) {
917 | var r = n(35),
918 | o = n(37);
919 | t.exports = function(t, e) {
920 | for (var n, i = o(t), c = r(i), u = c.length, s = 0; u > s;)
921 | if (i[n = c[s++]] === e) return n
922 | }
923 | }, function(t, e, n) {
924 | var r = n(35),
925 | o = n(64),
926 | i = n(65);
927 | t.exports = function(t) {
928 | var e = r(t),
929 | n = o.f;
930 | if (n)
931 | for (var c, u = n(t), s = i.f, f = 0; u.length > f;) s.call(t, c = u[f++]) && e.push(c);
932 | return e
933 | }
934 | }, function(t, e) {
935 | e.f = Object.getOwnPropertySymbols
936 | }, function(t, e) {
937 | e.f = {}.propertyIsEnumerable
938 | }, function(t, e, n) {
939 | var r = n(39);
940 | t.exports = Array.isArray || function(t) {
941 | return "Array" == r(t)
942 | }
943 | }, function(t, e, n) {
944 | var r = n(37),
945 | o = n(68).f,
946 | i = {}.toString,
947 | c = "object" == typeof window && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [],
948 | u = function(t) {
949 | try {
950 | return o(t)
951 | } catch (e) {
952 | return c.slice()
953 | }
954 | };
955 | t.exports.f = function(t) {
956 | return c && "[object Window]" == i.call(t) ? u(t) : o(r(t))
957 | }
958 | }, function(t, e, n) {
959 | var r = n(36),
960 | o = n(46).concat("length", "prototype");
961 | e.f = Object.getOwnPropertyNames || function(t) {
962 | return r(t, o)
963 | }
964 | }, function(t, e, n) {
965 | var r = n(65),
966 | o = n(28),
967 | i = n(37),
968 | c = n(27),
969 | u = n(30),
970 | s = n(23),
971 | f = Object.getOwnPropertyDescriptor;
972 | e.f = n(24) ? f : function(t, e) {
973 | if (t = i(t), e = c(e, !0), s) try {
974 | return f(t, e)
975 | } catch (n) {}
976 | if (u(t, e)) return o(!r.f.call(t, e), t[e])
977 | }
978 | }, function(t, e) {}, function(t, e, n) {
979 | n(61)("asyncIterator")
980 | }, function(t, e, n) {
981 | n(61)("observable")
982 | }, function(t, e) {
983 | "use strict";
984 | t.exports = {
985 | normal: {
986 | _meta: {
987 | tab: {
988 | key: "\t",
989 | text: "Tab",
990 | width: 60,
991 | classes: "control"
992 | },
993 | shiftl: {
994 | keySet: "shifted",
995 | text: "Shift",
996 | width: 100,
997 | classes: "control"
998 | },
999 | shiftr: {
1000 | keySet: "shifted",
1001 | text: "Shift",
1002 | width: 100,
1003 | classes: "control"
1004 | },
1005 | caps: {
1006 | keySet: "capsed",
1007 | text: "Caps lock",
1008 | width: 80,
1009 | classes: "control"
1010 | },
1011 | space: {
1012 | key: " ",
1013 | text: "Space",
1014 | width: 180
1015 | },
1016 | enter: {
1017 | key: "\r\n",
1018 | text: "Enter",
1019 | width: 80,
1020 | classes: "control"
1021 | },
1022 | backspace: {
1023 | func: "backspace",
1024 | classes: "control backspace",
1025 | width: 65
1026 | },
1027 | accept: {
1028 | func: "accept",
1029 | text: "Close",
1030 | classes: "control featured"
1031 | },
1032 | next: {
1033 | func: "next",
1034 | text: "Next",
1035 | classes: "control featured"
1036 | }
1037 | },
1038 | "default": ["` 1 2 3 4 5 6 7 8 9 0 - = {backspace}", "{tab} q w e r t y u i o p [ ] \\", "{caps} a s d f g h j k l ; ' {enter}", "{shiftl} z x c v b n m , . / {shiftr}", "{next} {space} {accept}"],
1039 | shifted: ["~ ! @ # $ % ^ & * ( ) _ + {backspace}", "{tab} Q W E R T Y U I O P { } |", '{caps} A S D F G H J K L : " {enter}', "{shiftl} Z X C V B N M < > ? {shiftr}", "{next} {space} {accept}"],
1040 | capsed: ["` 1 2 3 4 5 6 7 8 9 0 - = {backspace}", "{tab} Q W E R T Y U I O P [ ] \\", "{caps} A S D F G H J K L ; ' {enter}", "{shiftl} Z X C V B N M , . / {shiftr}", "{next} {space} {accept}"]
1041 | },
1042 | per_normal : {
1043 | _meta: {
1044 | tab: {
1045 | key: "\t"
1046 | , text: "Tab"
1047 | , width: 60
1048 | , classes: "control"
1049 | }
1050 | , caps: {
1051 | keySet: "capsed"
1052 | , text: "Caps lock"
1053 | , width: 80
1054 | , classes: "control"
1055 | }
1056 | , space: {
1057 | key: " "
1058 | , text: "فاصله"
1059 | , width: 180
1060 | }
1061 | , enter: {
1062 | key: "\r\n"
1063 | , text: "Enter"
1064 | , width: 80
1065 | , classes: "control"
1066 | }
1067 | , backspace: {
1068 | func: "backspace"
1069 | , classes: "control backspace"
1070 | , width: 65
1071 | }
1072 | , accept: {
1073 | func: "accept"
1074 | , text: "بستن"
1075 | , classes: "control featured"
1076 | }
1077 | , next: {
1078 | func: "next"
1079 | , text: "بعدی"
1080 | , classes: "control featured"
1081 | },
1082 | shiftl: {
1083 | keySet: "shifted"
1084 | , text: "تغییر"
1085 | , width: 100
1086 | , classes: "control"
1087 | }
1088 | },
1089 | "default": ["` 1 2 3 4 5 6 7 8 9 0 - = {backspace}", "{tab} ض ص ث ق ف غ ع ه خ ح ج چ", "{caps} ش س ی ب ل ا ت ن م ک گ {enter}", "{shiftl} ؟ ظ ط ز ر ذ د و ، . پ ئ / ", "{next} {space} {accept}"] ,
1090 | shifted : ["~ ! @ # $ % ^ & * ( ) _ + {backspace}", "{tab} ض ص ث ق ف غ ع ه خ ح ج چ", "{caps} ش س ی ب ل ا ت ن م ک گ {enter}", "{shiftl} ؟ ظ ط ز ر ذ د و { } [ ] / ", "{next} {space} {accept}"]
1091 | },
1092 | compact: {
1093 | _meta: {
1094 | "default": {
1095 | keySet: "default",
1096 | text: "abc",
1097 | classes: "control"
1098 | },
1099 | alpha: {
1100 | keySet: "default",
1101 | text: "Abc",
1102 | classes: "control"
1103 | },
1104 | shift: {
1105 | keySet: "shifted",
1106 | text: "ABC",
1107 | classes: "control"
1108 | },
1109 | numbers: {
1110 | keySet: "numbers",
1111 | text: "123",
1112 | classes: "control"
1113 | },
1114 | space: {
1115 | key: " ",
1116 | text: "Space",
1117 | width: 200
1118 | },
1119 | backspace: {
1120 | func: "backspace",
1121 | classes: "control"
1122 | },
1123 | accept: {
1124 | func: "accept",
1125 | text: "Close",
1126 | classes: "control featured"
1127 | },
1128 | next: {
1129 | func: "next",
1130 | text: "Next",
1131 | classes: "featured"
1132 | },
1133 | zero: {
1134 | key: "0",
1135 | width: 130
1136 | }
1137 | },
1138 | "default": ["q w e r t y u i o p", " a s d f g h j k l ", "{shift} z x c v b n m {backspace}", "{numbers} , {space} . {next} {accept}"],
1139 | shifted: ["Q W E R T Y U I O P", " A S D F G H J K L ", "{default} Z X C V B N M ", "{numbers} _ {space} {backspace} {next} {accept}"],
1140 | numbers: ["1 2 3", "4 5 6", "7 8 9", " {alpha} . {zero} {backspace} {next} {accept}"]
1141 | },
1142 | numeric: {
1143 | _meta: {
1144 | backspace: {
1145 | func: "backspace",
1146 | classes: "control"
1147 | },
1148 | accept: {
1149 | func: "accept",
1150 | text: "Close",
1151 | classes: "control featured"
1152 | },
1153 | next: {
1154 | func: "next",
1155 | text: "Next",
1156 | classes: "control featured"
1157 | },
1158 | zero: {
1159 | key: "0",
1160 | width: 130
1161 | }
1162 | },
1163 | "default": ["1 2 3", "4 5 6", "7 8 9", "_ - . {zero} {backspace} {next} {accept}"]
1164 | }
1165 | }
1166 | }, function(t, e, n) {
1167 | function r(t) {
1168 | return "string" == typeof t || !i(t) && c(t) && o(t) == u
1169 | }
1170 | var o = n(75),
1171 | i = n(81),
1172 | c = n(82),
1173 | u = "[object String]";
1174 | t.exports = r
1175 | }, function(t, e, n) {
1176 | function r(t) {
1177 | return null == t ? void 0 === t ? s : u : f && f in Object(t) ? i(t) : c(t)
1178 | }
1179 | var o = n(76),
1180 | i = n(79),
1181 | c = n(80),
1182 | u = "[object Null]",
1183 | s = "[object Undefined]",
1184 | f = o ? o.toStringTag : void 0;
1185 | t.exports = r
1186 | }, function(t, e, n) {
1187 | var r = n(77),
1188 | o = r.Symbol;
1189 | t.exports = o
1190 | }, function(t, e, n) {
1191 | var r = n(78),
1192 | o = "object" == typeof self && self && self.Object === Object && self,
1193 | i = r || o || Function("return this")();
1194 | t.exports = i
1195 | }, function(t, e) {
1196 | (function(e) {
1197 | var n = "object" == typeof e && e && e.Object === Object && e;
1198 | t.exports = n
1199 | }).call(e, function() {
1200 | return this
1201 | }())
1202 | }, function(t, e, n) {
1203 | function r(t) {
1204 | var e = c.call(t, s),
1205 | n = t[s];
1206 | try {
1207 | t[s] = void 0;
1208 | var r = !0
1209 | } catch (o) {}
1210 | var i = u.call(t);
1211 | return r && (e ? t[s] = n : delete t[s]), i
1212 | }
1213 | var o = n(76),
1214 | i = Object.prototype,
1215 | c = i.hasOwnProperty,
1216 | u = i.toString,
1217 | s = o ? o.toStringTag : void 0;
1218 | t.exports = r
1219 | }, function(t, e) {
1220 | function n(t) {
1221 | return o.call(t)
1222 | }
1223 | var r = Object.prototype,
1224 | o = r.toString;
1225 | t.exports = n
1226 | }, function(t, e) {
1227 | var n = Array.isArray;
1228 | t.exports = n
1229 | }, function(t, e) {
1230 | function n(t) {
1231 | return null != t && "object" == typeof t
1232 | }
1233 | t.exports = n
1234 | }, function(t, e) {
1235 | function n(t) {
1236 | var e = typeof t;
1237 | return null != t && ("object" == e || "function" == e)
1238 | }
1239 | t.exports = n
1240 | }, function(t, e) {
1241 | t.exports = {
1242 | render: function() {
1243 | var t = this,
1244 | e = t.$createElement,
1245 | n = t._self._c || e;
1246 | return n("div", {
1247 | staticClass: "vue-touch-keyboard"
1248 | }, [n("div", {
1249 | staticClass: "keyboard"
1250 | }, t._l(t.keySet, function(e, r) {
1251 | return n("div", {
1252 | key: "index",
1253 | staticClass: "line"
1254 | }, t._l(e, function(e, r) {
1255 | return n("span", {
1256 | key: "index",
1257 | "class": t.getClassesOfKey(e),
1258 | style: t.getKeyStyle(e),
1259 | domProps: {
1260 | textContent: t._s(t.getCaptionOfKey(e))
1261 | },
1262 | on: {
1263 | click: function(n) {
1264 | t.clickKey(e)
1265 | },
1266 | mousedown: t.mousedown
1267 | }
1268 | })
1269 | }))
1270 | }))])
1271 | },
1272 | staticRenderFns: []
1273 | }
1274 | }])
1275 | });
--------------------------------------------------------------------------------