diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5570e00 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +build +node_modules +stats \ No newline at end of file diff --git a/.swcrc b/.swcrc index 8c6e070..24717ba 100644 --- a/.swcrc +++ b/.swcrc @@ -3,7 +3,7 @@ "parser": { "syntax": "typescript", "tsx": false, - "decorators": false, + "decorators": true, "dynamicImport": true }, "transform": null, diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a349f86 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:16-alpine +WORKDIR /app +COPY . . +ENV DEV_HOST=0.0.0.0 +ENV DEV_PORT=3000 +EXPOSE 3000 +RUN npm install +CMD ["npm", "run", "dev"] \ No newline at end of file diff --git a/config/webpack.config.js b/config/webpack.config.js index df49944..ad84b31 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -8,7 +8,6 @@ const VueLoaderPlugin = require('vue-loader/lib/plugin'); const { VuetifyLoaderPlugin } = require('vuetify-loader'); const TerserPlugin = require('terser-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const OptimizeThreePlugin = require('@vxna/optimize-three-webpack-plugin'); const env = require('../etc/env'); // assume already loaded, checked const { pathToClientSrc, @@ -264,7 +263,6 @@ const htmlWebpackOptions = { const plugins = [ new VueLoaderPlugin(), new VuetifyLoaderPlugin(), - new OptimizeThreePlugin(), new webpack.DefinePlugin({ "env": JSON.stringify(clientEnv) }), ]; diff --git a/package-lock.json b/package-lock.json index 657993f..20214b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "ac-pattern-tool", - "version": "1.3.0", + "version": "1.4.0", "license": "WTFPL", "dependencies": { "@juggle/resize-observer": "^3.2.0", @@ -16,9 +16,8 @@ "@types/lodash": "^4.14.178", "@types/lz-string": "^1.3.34", "@types/papaparse": "^5.3.1", - "@types/three": "^0.137.0", + "@types/three": "0.137.0", "@types/uuid": "^8.3.4", - "@vxna/optimize-three-webpack-plugin": "^5.1.3", "@zxing/library": "^0.17.1", "axios": "^0.24.0", "copy-webpack-plugin": "^11.0.0", @@ -42,7 +41,7 @@ "stream": "^0.0.2", "swc-loader": "^0.1.15", "terser-webpack-plugin": "^5.2.5", - "three": "^0.135.0", + "three": "0.137.0", "uuid": "^8.3.2", "vue": "^2.6.14", "vue-advanced-cropper": "^1.9.0", @@ -50,6 +49,7 @@ "vue-i18n": "^8.26.7", "vue-loader": "^15.9.8", "vue-markdown-loader": "^2.5.0", + "vue-property-decorator": "^9.1.2", "vue-router": "^3.5.3", "vue-style-loader": "^4.1.3", "vue-svg-loader": "^0.16.0", @@ -57,6 +57,7 @@ "vuetify": "^2.6.1", "vuetify-loader": "^1.7.3", "vuex": "^3.6.2", + "vuex-class": "^0.3.2", "webpack": "^5.64.4", "webpack-bundle-analyzer": "^4.5.0", "webpack-dev-server": "^4.6.0", @@ -1026,14 +1027,6 @@ "prettier": "^1.18.2 || ^2.0.0" } }, - "node_modules/@vxna/optimize-three-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@vxna/optimize-three-webpack-plugin/-/optimize-three-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-mPTJd5o+fSRb50dF1pSh4+K7iA0gFNyUSn9FdjYzch++axtq4LjlSDc8DYGFziebbpY3NRzvlF7iPRStjLv5fw==", - "engines": { - "node": ">=14" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -6887,9 +6880,9 @@ } }, "node_modules/three": { - "version": "0.135.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.135.0.tgz", - "integrity": "sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ==" + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.137.0.tgz", + "integrity": "sha512-rzSDhia6cU35UCy6y+zEEws6vSgytfHqFMSaBvUcySgzwvDO6vETyswtSNi/+aVqJw8WLMwyT1mlQQ1T/dxxOA==" }, "node_modules/through2": { "version": "4.0.2", @@ -7229,6 +7222,15 @@ "vue": "^2.6.6" } }, + "node_modules/vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "peer": true, + "peerDependencies": { + "vue": "^2.0.0" + } + }, "node_modules/vue-fragment": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/vue-fragment/-/vue-fragment-1.5.2.tgz", @@ -7285,6 +7287,15 @@ "vue-loader": ">=10.0.0" } }, + "node_modules/vue-property-decorator": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz", + "integrity": "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==", + "peerDependencies": { + "vue": "*", + "vue-class-component": "*" + } + }, "node_modules/vue-router": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.3.tgz", @@ -7384,6 +7395,16 @@ "vue": "^2.0.0" } }, + "node_modules/vuex-class": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/vuex-class/-/vuex-class-0.3.2.tgz", + "integrity": "sha512-m0w7/FMsNcwJgunJeM+wcNaHzK2KX1K1rw2WUQf7Q16ndXHo7pflRyOV/E8795JO/7fstyjH3EgqBI4h4n4qXQ==", + "peerDependencies": { + "vue": "^2.5.0", + "vue-class-component": "^6.0.0 || ^7.0.0", + "vuex": "^3.0.0" + } + }, "node_modules/watchpack": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", @@ -8837,11 +8858,6 @@ "vue-template-es2015-compiler": "^1.9.0" } }, - "@vxna/optimize-three-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@vxna/optimize-three-webpack-plugin/-/optimize-three-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-mPTJd5o+fSRb50dF1pSh4+K7iA0gFNyUSn9FdjYzch++axtq4LjlSDc8DYGFziebbpY3NRzvlF7iPRStjLv5fw==" - }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -13272,9 +13288,9 @@ } }, "three": { - "version": "0.135.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.135.0.tgz", - "integrity": "sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ==" + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.137.0.tgz", + "integrity": "sha512-rzSDhia6cU35UCy6y+zEEws6vSgytfHqFMSaBvUcySgzwvDO6vETyswtSNi/+aVqJw8WLMwyT1mlQQ1T/dxxOA==" }, "through2": { "version": "4.0.2", @@ -13547,6 +13563,13 @@ "easy-bem": "^1.0.2" } }, + "vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "peer": true, + "requires": {} + }, "vue-fragment": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/vue-fragment/-/vue-fragment-1.5.2.tgz", @@ -13586,6 +13609,12 @@ "markdown-it": "^8.4.2" } }, + "vue-property-decorator": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz", + "integrity": "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==", + "requires": {} + }, "vue-router": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.3.tgz", @@ -13662,6 +13691,12 @@ "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", "requires": {} }, + "vuex-class": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/vuex-class/-/vuex-class-0.3.2.tgz", + "integrity": "sha512-m0w7/FMsNcwJgunJeM+wcNaHzK2KX1K1rw2WUQf7Q16ndXHo7pflRyOV/E8795JO/7fstyjH3EgqBI4h4n4qXQ==", + "requires": {} + }, "watchpack": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", diff --git a/package.json b/package.json index ee8617d..2939c88 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,8 @@ "@types/lodash": "^4.14.178", "@types/lz-string": "^1.3.34", "@types/papaparse": "^5.3.1", - "@types/three": "^0.137.0", + "@types/three": "0.137.0", "@types/uuid": "^8.3.4", - "@vxna/optimize-three-webpack-plugin": "^5.1.3", "@zxing/library": "^0.17.1", "axios": "^0.24.0", "copy-webpack-plugin": "^11.0.0", @@ -52,7 +51,7 @@ "stream": "^0.0.2", "swc-loader": "^0.1.15", "terser-webpack-plugin": "^5.2.5", - "three": "^0.135.0", + "three": "0.137.0", "uuid": "^8.3.2", "vue": "^2.6.14", "vue-advanced-cropper": "^1.9.0", @@ -60,6 +59,7 @@ "vue-i18n": "^8.26.7", "vue-loader": "^15.9.8", "vue-markdown-loader": "^2.5.0", + "vue-property-decorator": "^9.1.2", "vue-router": "^3.5.3", "vue-style-loader": "^4.1.3", "vue-svg-loader": "^0.16.0", @@ -67,6 +67,7 @@ "vuetify": "^2.6.1", "vuetify-loader": "^1.7.3", "vuex": "^3.6.2", + "vuex-class": "^0.3.2", "webpack": "^5.64.4", "webpack-bundle-analyzer": "^4.5.0", "webpack-dev-server": "^4.6.0", diff --git a/src/App.vue b/src/App.vue index 57a2836..514f747 100644 --- a/src/App.vue +++ b/src/App.vue @@ -10,7 +10,8 @@ - diff --git a/src/components/ACNLQRGenerator.vue b/src/components/ACNLQRGenerator.vue index 2303955..56c9d07 100644 --- a/src/components/ACNLQRGenerator.vue +++ b/src/components/ACNLQRGenerator.vue @@ -2,38 +2,36 @@ - diff --git a/src/components/Banner.vue b/src/components/Banner.vue index 3a84cb9..549ea7c 100644 --- a/src/components/Banner.vue +++ b/src/components/Banner.vue @@ -4,15 +4,15 @@ - diff --git a/src/components/IconGenerator.vue b/src/components/IconGenerator.vue index f1796de..61e34c6 100644 --- a/src/components/IconGenerator.vue +++ b/src/components/IconGenerator.vue @@ -2,118 +2,143 @@ - diff --git a/src/components/MarkdownPage.vue b/src/components/MarkdownPage.vue index adde10d..18022e8 100644 --- a/src/components/MarkdownPage.vue +++ b/src/components/MarkdownPage.vue @@ -6,12 +6,14 @@ - diff --git a/src/components/MarkdownStyled.vue b/src/components/MarkdownStyled.vue index 5a4c096..2df5134 100644 --- a/src/components/MarkdownStyled.vue +++ b/src/components/MarkdownStyled.vue @@ -4,9 +4,11 @@ - diff --git a/src/components/PatternItems/Grid.vue b/src/components/PatternItems/Grid.vue index 3823185..1a8565e 100644 --- a/src/components/PatternItems/Grid.vue +++ b/src/components/PatternItems/Grid.vue @@ -21,7 +21,7 @@ - diff --git a/src/components/PatternItems/GridItem.vue b/src/components/PatternItems/GridItem.vue index 39e48d6..bd0a60e 100644 --- a/src/components/PatternItems/GridItem.vue +++ b/src/components/PatternItems/GridItem.vue @@ -25,43 +25,45 @@ - diff --git a/src/components/PatternItems/GridItemSelector.vue b/src/components/PatternItems/GridItemSelector.vue index dbc1c39..3d98e3e 100644 --- a/src/components/PatternItems/GridItemSelector.vue +++ b/src/components/PatternItems/GridItemSelector.vue @@ -14,25 +14,23 @@ - diff --git a/src/components/PatternItems/MosaicPreview.vue b/src/components/PatternItems/MosaicPreview.vue index 53bb99e..a8af156 100644 --- a/src/components/PatternItems/MosaicPreview.vue +++ b/src/components/PatternItems/MosaicPreview.vue @@ -21,85 +21,91 @@ - diff --git a/src/components/PatternItems/SinglePreview.vue b/src/components/PatternItems/SinglePreview.vue index b451e46..982df05 100644 --- a/src/components/PatternItems/SinglePreview.vue +++ b/src/components/PatternItems/SinglePreview.vue @@ -5,30 +5,30 @@ /> - diff --git a/src/components/PreviewGenerator.vue b/src/components/PreviewGenerator.vue index 9c747cc..a957015 100644 --- a/src/components/PreviewGenerator.vue +++ b/src/components/PreviewGenerator.vue @@ -3,51 +3,49 @@ - diff --git a/src/components/ThreeDRender.vue b/src/components/ThreeDRender.vue index 57dff1c..5c8b455 100644 --- a/src/components/ThreeDRender.vue +++ b/src/components/ThreeDRender.vue @@ -8,7 +8,7 @@ /> - diff --git a/src/components/icons/IconColorBlob.vue b/src/components/icons/IconColorBlob.vue index f0d959f..2207459 100644 --- a/src/components/icons/IconColorBlob.vue +++ b/src/components/icons/IconColorBlob.vue @@ -25,14 +25,16 @@ - diff --git a/src/components/icons/IconRibbonTailLeft.vue b/src/components/icons/IconRibbonTailLeft.vue index ae1ee03..dc7dba7 100644 --- a/src/components/icons/IconRibbonTailLeft.vue +++ b/src/components/icons/IconRibbonTailLeft.vue @@ -19,9 +19,13 @@ - diff --git a/src/components/icons/IconStamp.vue b/src/components/icons/IconStamp.vue index 46847a0..dd7562a 100644 --- a/src/components/icons/IconStamp.vue +++ b/src/components/icons/IconStamp.vue @@ -111,15 +111,15 @@ - diff --git a/src/components/modals/CancelButton.vue b/src/components/modals/CancelButton.vue index 1f7129c..cc4b675 100644 --- a/src/components/modals/CancelButton.vue +++ b/src/components/modals/CancelButton.vue @@ -12,7 +12,8 @@ - diff --git a/src/components/modals/Publish.vue b/src/components/modals/Publish.vue index f765da2..24da2a1 100644 --- a/src/components/modals/Publish.vue +++ b/src/components/modals/Publish.vue @@ -109,7 +109,8 @@ - diff --git a/src/components/positioned/Banner.vue b/src/components/positioned/Banner.vue index 21a3ddb..17043e6 100644 --- a/src/components/positioned/Banner.vue +++ b/src/components/positioned/Banner.vue @@ -7,14 +7,16 @@ - diff --git a/src/components/positioned/NavigationButton.vue b/src/components/positioned/NavigationButton.vue index 29d7810..6f19e94 100644 --- a/src/components/positioned/NavigationButton.vue +++ b/src/components/positioned/NavigationButton.vue @@ -20,22 +20,21 @@ - diff --git a/src/components/positioned/NavigationMenu.vue b/src/components/positioned/NavigationMenu.vue index 4f9c59f..f5c49e1 100644 --- a/src/components/positioned/NavigationMenu.vue +++ b/src/components/positioned/NavigationMenu.vue @@ -111,14 +111,14 @@ - diff --git a/src/components/positioned/PatternContainer.vue b/src/components/positioned/PatternContainer.vue index 2108740..6712caa 100644 --- a/src/components/positioned/PatternContainer.vue +++ b/src/components/positioned/PatternContainer.vue @@ -91,7 +91,8 @@ - diff --git a/src/components/positioned/UtilityBar.vue b/src/components/positioned/UtilityBar.vue index 47ffdc3..f81b420 100644 --- a/src/components/positioned/UtilityBar.vue +++ b/src/components/positioned/UtilityBar.vue @@ -9,7 +9,7 @@ > - diff --git a/src/components/wrapper/FileLoader.vue b/src/components/wrapper/FileLoader.vue index 9a24ad8..05372a5 100644 --- a/src/components/wrapper/FileLoader.vue +++ b/src/components/wrapper/FileLoader.vue @@ -13,46 +13,50 @@ - \ No newline at end of file diff --git a/src/components/wrapper/FileLoaderCollection.vue b/src/components/wrapper/FileLoaderCollection.vue index 502474d..8bfaa3e 100644 --- a/src/components/wrapper/FileLoaderCollection.vue +++ b/src/components/wrapper/FileLoaderCollection.vue @@ -31,9 +31,10 @@ - diff --git a/src/libs/ACNHFormat.js b/src/libs/ACNHFormat.js index 7c8be96..876af75 100644 --- a/src/libs/ACNHFormat.js +++ b/src/libs/ACNHFormat.js @@ -351,6 +351,13 @@ class ACNHFormat{ static bytesForType(t){ return ACNHFormat.texWidthForType(t) > 32 ? 2216 : 680; } + /** + * Converts slider positions to a css 6 digit hex color. + * @param {number} hIn + * @param {number} sIn + * @param {number} vIn + * @returns {string} + */ static slidersToColor(hIn, sIn, vIn){ const s = Sinc*sIn/100.0; const v = (Vstart+Vinc*vIn)/100.0; @@ -379,6 +386,13 @@ class ACNHFormat{ while(hex.length<6) hex = '0'+hex; return `#${hex.toUpperCase()}`; } + /** + * Converts a css 6 digit hex color or numeric rgb values to slider positions. + * @param {string | number} r A css 6 digit hex color or numeric red rgb value. + * @param {number} g Numeric green rgb value. + * @param {number} b Numeric blue rgb value. + * @returns {[number, number, number]} Red, green, blue values. + */ static colorToSliders(r,g,b){ if (typeof r == "string" && r.length == 7 && r.substr(0, 1) == '#'){r = r.substr(1);} if (typeof r == "string" && r.length == 6){ diff --git a/src/libs/DrawingTool.js b/src/libs/DrawingTool.js index 43cb2d1..79a8a26 100644 --- a/src/libs/DrawingTool.js +++ b/src/libs/DrawingTool.js @@ -154,7 +154,7 @@ function toHex(n){return (n<16?"0":"")+n.toString(16);} class DrawingTool{ /** - * @param {string | Uint8Array} data + * @param {string | Uint8Array | DrawingTool} data */ constructor(data = null){ this.renderTargets = []; //TODO: Should this be a map, perhaps? How do maps work in JS? Can we de-duplicate..? @@ -171,13 +171,19 @@ class DrawingTool{ if (data != null){this.load(data);} } } - + ///Clears all data (except render targets and onLoad handlers) to defaults reset(){ this.pattern = new ACNLFormat(); this.pixels_buffer = new ArrayBuffer(4096); this.pixels = new Uint8Array(this.pixels_buffer); + /** + * @type {(x: number, y: number, tool: DrawingTool) => void} + */ this.drawHandler = basicDrawing; + /** + * @type {(x: number, y: number, tool: DrawingTool) => void} + */ this.drawHandlerAlt = basicDrawing; this.currentColor = 0; this.undoHistory = []; @@ -282,13 +288,13 @@ class DrawingTool{ get fullHash(){return this.pattern.fullHash();} /** @type {string} */ get pixelHash(){return this.pattern.pixelHash();} - /** @type {number} */ + /** @type {string} The name of the pattern. */ get title(){return this.pattern.title;} set title(n){this.pattern.title = n;} - /** @type {string} */ + /** @type {[string, number]} Creator name and id. */ get creator(){return this.pattern.creator;} set creator(n){this.pattern.creator = n;} - /** @type {string} */ + /** @type {[string, number]} */ get town(){return this.pattern.town;} set town(n){this.pattern.town = n;} fixIssues(){this.pattern.fixIssues();} @@ -404,6 +410,10 @@ class DrawingTool{ this.onLoad(); } + + /** + * @type {typeof ACNLFormat.typeInfo | typeof ACNHFormat.typeInfo} + */ get allTypes(){ if (this.pattern instanceof ACNHFormat){ return ACNHFormat.typeInfo; @@ -560,7 +570,11 @@ class DrawingTool{ this.render(); } - /// Returns the HTML color of the given palette index + /** + * Gets the css 6 digit hex color of the palette color at the index. + * @param {number} idx 0 - 14 only, #15 is the transparent ref + * @returns {string} + */ getPalette(idx){ if (idx < 0 || idx > 14){return "";}//abort for invalid indexes if (this.pattern instanceof ACNHFormat){ @@ -805,6 +819,12 @@ class DrawingTool{ /// When called with a function as parameter, adds an event handler for pattern loads. /// When called without parameter (or with null), calls all onLoad event handlers in sequence. /// Called automatically whenever pattern changes type, when it is reset, or when an entirely new pattern is loaded + + /** + * Triggers onload handlers when called with a null argument or adds a handler + * when a callback is passed through. + * @param {(drawingTool: DrawingTool) => any | null} f + */ onLoad(f = null){ if (f === null){ for (let i in this.handleOnLoad){ @@ -815,9 +835,12 @@ class DrawingTool{ } } - /// When called with a function as parameter, adds an event handler for color changes. - /// When called without parameter (or with null), calls all onColorChange event handlers in sequence. - /// Called automatically whenever colors in the palette change, or a new pattern is loaded. + /** + * When called with a function as parameter, adds an event handler for color changes. + * When called without parameter (or with null), calls all onColorChange event handlers in sequence. + * Called automatically whenever colors in the palette change, or a new pattern is loaded. + * @param {null | Function} f + */ onColorChange(f = null){ if (f === null){ for (let i in this.handleColorChange){ @@ -828,7 +851,10 @@ class DrawingTool{ } } - // removes a handler + /** + * Removes a handler. + * @param {null | Function} f + */ onColorChangeRemove(f = null) { if ((typeof f) === "function") { const idx = this.handleColorChange.indexOf(f); diff --git a/src/libs/Preview3D.js b/src/libs/Preview3D.js index 6189410..bb97edf 100644 --- a/src/libs/Preview3D.js +++ b/src/libs/Preview3D.js @@ -22,7 +22,7 @@ import { TextureLoader, Vector3, } from "three"; -import { GLTFLoader } from '@three/loaders/GLTFLoader'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'; //Global canvas and renderer let threeCanvas = document.createElement("canvas"); diff --git a/src/libs/component-helpers.ts b/src/libs/component-helpers.ts index 3f6c073..f0dfd2f 100644 --- a/src/libs/component-helpers.ts +++ b/src/libs/component-helpers.ts @@ -1,5 +1,5 @@ -type Option = { +export type Option = { text: string, value: T }; diff --git a/src/pages/About/About.vue b/src/pages/About/About.vue index de2e113..8490ff5 100644 --- a/src/pages/About/About.vue +++ b/src/pages/About/About.vue @@ -23,149 +23,162 @@ - diff --git a/src/pages/About/InfoItem.vue b/src/pages/About/InfoItem.vue index fe7014d..f8385b0 100644 --- a/src/pages/About/InfoItem.vue +++ b/src/pages/About/InfoItem.vue @@ -21,26 +21,33 @@ - diff --git a/src/pages/About/Passport.vue b/src/pages/About/Passport.vue index 958d62d..177686c 100644 --- a/src/pages/About/Passport.vue +++ b/src/pages/About/Passport.vue @@ -73,67 +73,76 @@ - diff --git a/src/pages/Browse/Browse.vue b/src/pages/Browse/Browse.vue index 6d30ce5..e2830d8 100644 --- a/src/pages/Browse/Browse.vue +++ b/src/pages/Browse/Browse.vue @@ -4,14 +4,13 @@ @@ -26,7 +25,7 @@ :items="typeOptsList[i]" outlined hide-details - @keyup.enter.prevent="onSearch" + @input="onSearchDebounced" :menu-props="{ 'content-class': 'browse-tag--menu', }" @@ -42,7 +41,7 @@ :items="styleOptsList[i]" outlined hide-details - @keyup.enter.prevent="onSearch" + @input="onSearchDebounced" :menu-props="{ 'content-class': 'browse-tag--menu', }" @@ -54,7 +53,7 @@ Town - diff --git a/src/pages/Browse/PatternEntry.vue b/src/pages/Browse/PatternEntry.vue index e5a5f6a..253c22b 100644 --- a/src/pages/Browse/PatternEntry.vue +++ b/src/pages/Browse/PatternEntry.vue @@ -24,24 +24,21 @@ - diff --git a/src/pages/Editor/ColorTools/ACNHColorPicker.vue b/src/pages/Editor/ColorTools/ACNHColorPicker.vue index e3afec9..67b6641 100644 --- a/src/pages/Editor/ColorTools/ACNHColorPicker.vue +++ b/src/pages/Editor/ColorTools/ACNHColorPicker.vue @@ -174,7 +174,8 @@ - diff --git a/src/pages/Editor/ColorTools/ACNLColorPicker.vue b/src/pages/Editor/ColorTools/ACNLColorPicker.vue index 7f5d1d2..200aa00 100644 --- a/src/pages/Editor/ColorTools/ACNLColorPicker.vue +++ b/src/pages/Editor/ColorTools/ACNLColorPicker.vue @@ -43,56 +43,58 @@ - diff --git a/src/pages/Editor/ColorTools/ColorTools.vue b/src/pages/Editor/ColorTools/ColorTools.vue index 9ac748e..7e3aad4 100644 --- a/src/pages/Editor/ColorTools/ColorTools.vue +++ b/src/pages/Editor/ColorTools/ColorTools.vue @@ -62,7 +62,8 @@ - diff --git a/src/pages/Editor/ColorTools/Palette.vue b/src/pages/Editor/ColorTools/Palette.vue index bcc5057..1b35705 100644 --- a/src/pages/Editor/ColorTools/Palette.vue +++ b/src/pages/Editor/ColorTools/Palette.vue @@ -44,67 +44,68 @@ - diff --git a/src/pages/Editor/ConvertImage/ConvertImage.vue b/src/pages/Editor/ConvertImage/ConvertImage.vue index e91d895..08a8632 100644 --- a/src/pages/Editor/ConvertImage/ConvertImage.vue +++ b/src/pages/Editor/ConvertImage/ConvertImage.vue @@ -106,7 +106,8 @@ - diff --git a/src/pages/Editor/ConvertImage/Stages/Adjusting.vue b/src/pages/Editor/ConvertImage/Stages/Adjusting.vue index 2d9798f..396cecb 100644 --- a/src/pages/Editor/ConvertImage/Stages/Adjusting.vue +++ b/src/pages/Editor/ConvertImage/Stages/Adjusting.vue @@ -63,9 +63,9 @@ > @@ -79,9 +79,9 @@ > @@ -96,9 +96,9 @@ > @@ -107,10 +107,12 @@ - diff --git a/src/pages/Editor/ConvertImage/Stages/Cropping.vue b/src/pages/Editor/ConvertImage/Stages/Cropping.vue index 38b97c3..0af1f41 100644 --- a/src/pages/Editor/ConvertImage/Stages/Cropping.vue +++ b/src/pages/Editor/ConvertImage/Stages/Cropping.vue @@ -93,7 +93,8 @@ - diff --git a/src/pages/Editor/ConvertImage/Stages/GridStencil.vue b/src/pages/Editor/ConvertImage/Stages/GridStencil.vue index 38c5075..01a6a16 100644 --- a/src/pages/Editor/ConvertImage/Stages/GridStencil.vue +++ b/src/pages/Editor/ConvertImage/Stages/GridStencil.vue @@ -59,6 +59,7 @@ diff --git a/src/pages/Editor/ConvertImage/Stages/Uploading.vue b/src/pages/Editor/ConvertImage/Stages/Uploading.vue index 8309aae..1b78106 100644 --- a/src/pages/Editor/ConvertImage/Stages/Uploading.vue +++ b/src/pages/Editor/ConvertImage/Stages/Uploading.vue @@ -22,7 +22,8 @@ - \ No newline at end of file diff --git a/src/pages/Editor/Editor.vue b/src/pages/Editor/Editor.vue index 7e8e42a..5d9794b 100644 --- a/src/pages/Editor/Editor.vue +++ b/src/pages/Editor/Editor.vue @@ -168,7 +168,7 @@ - diff --git a/src/pages/Editor/ImportMenuItem.vue b/src/pages/Editor/ImportMenuItem.vue index 49db633..1fe2656 100644 --- a/src/pages/Editor/ImportMenuItem.vue +++ b/src/pages/Editor/ImportMenuItem.vue @@ -46,26 +46,34 @@ - diff --git a/src/pages/Editor/PatternSettings.vue b/src/pages/Editor/PatternSettings.vue index b903d4f..198f8d2 100644 --- a/src/pages/Editor/PatternSettings.vue +++ b/src/pages/Editor/PatternSettings.vue @@ -124,7 +124,8 @@ - diff --git a/src/pages/Editor/Preview.vue b/src/pages/Editor/Preview.vue index 2e5f546..a490b24 100644 --- a/src/pages/Editor/Preview.vue +++ b/src/pages/Editor/Preview.vue @@ -71,7 +71,9 @@ - diff --git a/src/pages/Editor/Storage.vue b/src/pages/Editor/Storage.vue index 7305c21..3640ece 100644 --- a/src/pages/Editor/Storage.vue +++ b/src/pages/Editor/Storage.vue @@ -10,14 +10,13 @@ - diff --git a/src/pages/FAQ/FAQ.vue b/src/pages/FAQ/FAQ.vue index dccf350..89068b4 100644 --- a/src/pages/FAQ/FAQ.vue +++ b/src/pages/FAQ/FAQ.vue @@ -5,15 +5,17 @@ - diff --git a/src/pages/Home.vue b/src/pages/Home.vue index d65f99e..7c5f062 100644 --- a/src/pages/Home.vue +++ b/src/pages/Home.vue @@ -98,7 +98,9 @@ - diff --git a/src/pages/Missing.vue b/src/pages/Missing.vue index a8b452f..5c6b6a4 100644 --- a/src/pages/Missing.vue +++ b/src/pages/Missing.vue @@ -3,9 +3,11 @@ - diff --git a/src/pages/Updates/Updates.vue b/src/pages/Updates/Updates.vue index f5bd3f5..4812be3 100644 --- a/src/pages/Updates/Updates.vue +++ b/src/pages/Updates/Updates.vue @@ -5,15 +5,17 @@ - \ No newline at end of file diff --git a/src/pages/moderator/Dashboard.vue b/src/pages/moderator/Dashboard.vue index 740bb37..57eefb3 100644 --- a/src/pages/moderator/Dashboard.vue +++ b/src/pages/moderator/Dashboard.vue @@ -26,8 +26,8 @@
by {{ opt.author }} @@ -148,65 +148,115 @@
- diff --git a/src/pages/moderator/Index.vue b/src/pages/moderator/Index.vue index 48fb3a7..bffa658 100644 --- a/src/pages/moderator/Index.vue +++ b/src/pages/moderator/Index.vue @@ -2,35 +2,49 @@ - diff --git a/src/pages/moderator/Login.vue b/src/pages/moderator/Login.vue index 8c9136d..de77f08 100644 --- a/src/pages/moderator/Login.vue +++ b/src/pages/moderator/Login.vue @@ -46,59 +46,96 @@ - diff --git a/tsconfig.json b/tsconfig.json index 5e7fecd..809eafc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ "target": "ES5", "module": "ESNext", "moduleResolution": "node", + "experimentalDecorators": true, "strict": true, "allowJs": true, "allowSyntheticDefaultImports": true, @@ -24,5 +25,8 @@ "DOM", "ESNext", ] + }, + "vueCompilerOptions": { + "target": 2, } } \ No newline at end of file