diff --git a/build/webpack.dist.locale.config.js b/build/webpack.dist.locale.config.js index 8314e431..f3ed8214 100644 --- a/build/webpack.dist.locale.config.js +++ b/build/webpack.dist.locale.config.js @@ -1,6 +1,8 @@ const path = require('path'); const webpack = require('webpack'); const entry = require('./locale'); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); + process.env.NODE_ENV = 'production'; module.exports = { @@ -40,7 +42,7 @@ module.exports = { NODE_ENV: '"production"' } }), - new webpack.optimize.UglifyJsPlugin({ + new UglifyJsPlugin({ parallel: true, sourceMap: true, }) diff --git a/build/webpack.dist.prod.config.js b/build/webpack.dist.prod.config.js index a46315aa..a821976a 100644 --- a/build/webpack.dist.prod.config.js +++ b/build/webpack.dist.prod.config.js @@ -3,6 +3,7 @@ const webpack = require('webpack'); const merge = require('webpack-merge'); const webpackBaseConfig = require('./webpack.base.config.js'); const CompressionPlugin = require('compression-webpack-plugin'); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); process.env.NODE_ENV = 'production'; @@ -32,7 +33,7 @@ module.exports = merge(webpackBaseConfig, { new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"' }), - new webpack.optimize.UglifyJsPlugin({ + new UglifyJsPlugin({ parallel: true, sourceMap: true, }), diff --git a/package-lock.json b/package-lock.json index c2b31e93..491ab449 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13387,6 +13387,30 @@ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", "dev": true }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -13405,14 +13429,54 @@ "dev": true }, "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-as/50351uuJGiQbhVvE510SCqM/YOWghCzIFJeEOu5oVE0QOZ3/vu2QcnVvu0Lz+vNd0rKsiCFAlbcw0i/YH2w==", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.4.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "ajv": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", + "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.2.1", + "ajv-keywords": "3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "ultron": { @@ -13850,6 +13914,11 @@ "dev": true, "optional": true }, + "v-click-outside-x": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v-click-outside-x/-/v-click-outside-x-2.4.0.tgz", + "integrity": "sha512-xAouyFRaMDD074px+J3PoxhU5nGQsIj8yxXRYyFd0/PRhY1ob3F55L9mGsd35KzXkQteajEhap6SClaMB0MENg==" + }, "v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", @@ -14807,6 +14876,17 @@ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", "dev": true }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + } + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -15446,6 +15526,15 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", diff --git a/package.json b/package.json index d0e0065d..eae3011c 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "js-calendar": "^1.2.3", "lodash.throttle": "^4.1.1", "popper.js": "^1.14.1", - "tinycolor2": "^1.4.1" + "tinycolor2": "^1.4.1", + "v-click-outside-x": "^2.4.0" }, "peerDependencies": { "vue": "^2.5.2" @@ -99,6 +100,7 @@ "sinon": "^4.4.2", "sinon-chai": "^3.0.0", "style-loader": "^0.20.2", + "uglifyjs-webpack-plugin": "^1.2.3", "url-loader": "^1.0.1", "vue": "^2.5.16", "vue-hot-reload-api": "^2.3.0", diff --git a/src/components/select/functional-options.vue b/src/components/select/functional-options.vue new file mode 100644 index 00000000..a3197096 --- /dev/null +++ b/src/components/select/functional-options.vue @@ -0,0 +1,29 @@ + + diff --git a/src/components/select/option.vue b/src/components/select/option.vue index 0733bb80..a8b60886 100644 --- a/src/components/select/option.vue +++ b/src/components/select/option.vue @@ -1,5 +1,10 @@ - {{ showLabel }} + {{ showLabel }} diff --git a/src/components/select/select-head.vue b/src/components/select/select-head.vue new file mode 100644 index 00000000..f617ca5b --- /dev/null +++ b/src/components/select/select-head.vue @@ -0,0 +1,196 @@ + + + + {{ item.label }} + + + {{ singleDisplayValue }} + + + + + + diff --git a/src/components/select/select.vue b/src/components/select/select.vue index 7a8ea3fd..dbe2fa8f 100644 --- a/src/components/select/select.vue +++ b/src/components/select/select.vue @@ -1,38 +1,48 @@ + v-click-outside.capture="onClickOutside" + > + + :class="selectionCls" + :tabindex="selectTabindex" + + @blur="toggleHeaderFocus" + @focus="toggleHeaderFocus" + + @click="toggleMenu" + @keydown.esc="handleKeydown" + @keydown.enter="handleKeydown" + @keydown.up="handleKeydown" + @keydown.down="handleKeydown" + @keydown.tab="handleKeydown" + @keydown.delete="handleKeydown" + + + @mouseenter="hasMouseHoverHead = true" + @mouseleave="hasMouseHoverHead = false" + + > - - - {{ item.label }} - - - {{ localePlaceholder }} - {{ selectedSingle }} - + - - + :remote="remote" + :input-element-id="elementId" + :initial-label="initialLabel" + :placeholder="placeholder" + :query-prop="query" + + @on-query-change="onQueryChange" + @on-input-focus="isFocused = true" + @on-input-blur="isFocused = false" + /> @@ -42,9 +52,17 @@ :placement="placement" ref="dropdown" :data-transfer="transfer" - v-transfer-dom> - {{ localeNotFoundText }} - + v-transfer-dom + > + {{ localeNotFoundText }} + + + {{ localeLoadingText }} @@ -53,20 +71,61 @@