├── .babelrc ├── .gitignore ├── LICENSE ├── README.md ├── cypress.json ├── cypress ├── fixtures │ └── example.json ├── plugins │ └── index.js └── support │ ├── commands.js │ └── index.js ├── docs ├── index.md └── webgl │ ├── assets │ ├── index.4c180d81.js │ ├── index.d54f1308.css │ ├── style.css │ └── vendor.4f6f7efc.js │ ├── favicon.ico │ ├── index.html │ └── style.css ├── example ├── .gitignore ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── public │ └── favicon.ico ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ ├── Button │ │ │ └── Button.vue │ │ ├── Slider │ │ │ ├── HSlider.vue │ │ │ ├── RotateSlider.vue │ │ │ └── VSlider.vue │ │ └── Switch │ │ │ └── Switch.vue │ ├── main.ts │ ├── shims-vue.d.ts │ └── webglComponents │ │ ├── draw.frag │ │ ├── metal-button.frag │ │ ├── metal.frag │ │ ├── metal2.frag │ │ └── metal3.frag ├── tailwind.config.js ├── tsconfig.json ├── vite.config.ts └── yarn.lock ├── package.json ├── rollup.config.js ├── scripts └── verifyCommit.js ├── src ├── .DS_Store ├── components │ ├── .DS_Store │ ├── button │ │ ├── Button.cy.ts │ │ ├── Button.tsx │ │ └── index.ts │ ├── slider │ │ ├── Slider.cy.ts │ │ ├── Slider.tsx │ │ ├── SliderButton.tsx │ │ └── index.ts │ └── switch │ │ ├── Switch.cy.ts │ │ ├── Switch.tsx │ │ └── index.ts ├── main.ts └── shims-vue.d.ts ├── tsconfig.json ├── vite.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]], 3 | "plugins": ["@vue/babel-plugin-jsx"] 4 | } 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | .DS_Store 107 | 108 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 花果山前端团队 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # element3-core 2 | this is a headless ui components library based on the vue3 3 | 4 | ## chat 5 | 6 | ![Jietu20210522-132339@2x](https://user-images.githubusercontent.com/1905176/119215549-f7664180-bb00-11eb-9856-5dd1d8695cc3.jpg) 7 | 8 | 9 | ## Features 10 | 11 | - Logic and style separation 12 | - No Style 13 | - Custom Ui Easy 14 | 15 | 16 | ## Installation 17 | 18 | Install element3-core with npm 19 | 20 | ```bash 21 | npm install element3-core 22 | ``` 23 | 24 | ## Demo 25 | 26 | run demo 27 | 28 | > a base webgl ui 29 | 30 | clone the project 31 | 32 | ```bash 33 | git clone https://github.com/hug-sun/element3-core.git 34 | ``` 35 | Go to the example project directory 36 | 37 | ```bash 38 | cd example 39 | ``` 40 | 41 | Install dependencies 42 | ```base 43 | yarn 44 | // or npm install 45 | ``` 46 | 47 | Start the server 48 | 49 | ```base 50 | yarn dev 51 | ``` 52 | 53 | 54 | ## License 55 | 56 | [MIT](https://choosealicense.com/licenses/mit/) 57 | 58 | 59 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "testFiles": "**/*cy.*", 3 | "componentFolder": "src" 4 | } 5 | -------------------------------------------------------------------------------- /cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | const { startDevServer } = require("@cypress/vite-dev-server"); 2 | 3 | module.exports = (on, config) => { 4 | const viteConfig = { 5 | plugins: [], 6 | }; 7 | 8 | viteConfig.esbuild = viteConfig.esbuild || {}; 9 | viteConfig.esbuild.jsxFactory = "h"; 10 | viteConfig.esbuild.jsxFragment = "Fragment"; 11 | viteConfig.logLevel = "error"; 12 | viteConfig.resolve = { 13 | alias: { 14 | vue: "vue/dist/vue.esm-bundler.js", 15 | }, 16 | }; 17 | 18 | on("dev-server:start", (options) => { 19 | return startDevServer({ options, viteConfig }); 20 | }); 21 | return config; 22 | }; 23 | -------------------------------------------------------------------------------- /cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add('login', (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This will overwrite an existing command -- 25 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # element3-core 2 | -------------------------------------------------------------------------------- /docs/webgl/assets/index.4c180d81.js: -------------------------------------------------------------------------------- 1 | import{r as t,w as e,o as n,a as i,h as r,S as a,b as o,c as l,d,e as u,f as s,B as c,g as f,t as h,i as m,j as g,k as p,l as b,m as S}from"./vendor.4f6f7efc.js";var x={name:"webgl-renderer",props:{width:String,height:String,indicesCount:{default:()=>5},indicesStart:{default:()=>0},iTime:{},iWidth:{},iHeight:{}},setup(r){const a=t(null);let o,l;return e((()=>{o&&l&&o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)})),n((()=>{o=a.value.getContext("webgl");var t=o.createShader(o.VERTEX_SHADER);o.shaderSource(t,"attribute vec4 a_Position;\nvoid main(){\n gl_Position=a_Position;\n}\n"),o.compileShader(t);var e=o.createShader(o.FRAGMENT_SHADER);o.shaderSource(e,"precision mediump float;\n\nuniform float iTime;\nuniform float iWidth;\nuniform float iHeight;\n\nvec2 u_CanvasSize=vec2(iWidth,iHeight);\nvec2 center = u_CanvasSize / 2.0;\nfloat len1 = length(center);\nfloat pi = radians(360.0) / 2.0;\n\n\n//渐变\nfloat texture1(float x) {\n float a = x / u_CanvasSize.x;\n float b = radians(360.0) * 5.0 * a;\n return (sin(b) + 1.0) / 2.0;\n}\n\n//水平拉丝\nfloat texture2(vec2 v) {\n vec2 a = vec2(0.0, 1.0);\n float n = dot(v, a);\n return fract(tan(n) * 10000.0);\n}\n\n//杂色\nfloat texture3(vec2 v) {\n vec2 a = vec2(0.1234, 0.5678);\n float n = dot(v, a);\n return fract(tan(n) * 10000.0);\n}\n\n//比例尺\nfloat scaler(float ax, float ay, float bx, float by, float x) {\n float x1 = bx - ax;\n float y1 = by - ay;\n float k = y1 / x1;\n float b = ay - ax * k;\n return k * x + b;\n}\n\n\n\nvoid main(){\n //极坐标系转二维直角坐标系\n vec2 p = gl_FragCoord.xy - center;\n float len2 = length(p);\n float ang = atan(p.y, p.x);\n float x = scaler(-pi, 0.0, pi, u_CanvasSize.x, ang);\n float y = (len2 / len1) * u_CanvasSize.y;\n\n //渐变\n float f1 = texture1(x);\n f1 = 0.65 * f1 + 0.35;\n\n //拉丝\n float f2 = texture2(vec2(int(x), int(y)));\n f2 = clamp(f2, 0.75, 0.8);\n\n //杂色\n float f3 = texture3(gl_FragCoord.xy);\n\n //复合颜色\n float f = (f1 * f2 + f3 * 0.07) * 1.2;\n\n \n //平行光方向\n vec2 lightDir1 = normalize(vec2(0.5, -1));\n vec2 lightDir2 = lightDir1 * -1.0;\n\n //片元和光线的夹角\n float cosAng1 = (dot(normalize(p), lightDir1) + 1.0) / 1.5 + 0.3;\n //cosAng1*=cosAng1/2.0;\n float cosAng2 = (dot(normalize(p), lightDir2) + 1.0) / 4.0 + 0.2;\n float cosAng3 = (dot(normalize(p), lightDir2) + 1.0) / 2.0 + 0.3;\n cosAng3 *= cosAng3;\n float cosAng4 = (dot(normalize(p), lightDir1) + 1.0) / 2.0 + 0.3;\n\n //扩展1\n float expand1=2.0;\n float expand2=4.0;\n float expand3=2.0;\n float expand4=3.0;\n\n //初始半径\n float r = center.y-expand1-expand2-expand3-expand4;\n\n float r1 = r + expand1;\n float r2 = r1 + expand2;\n float r3 = r2 + expand3;\n\n if(len2 < r) {\n gl_FragColor = vec4(vec3(f), 1);\n } else if(len2 >= r && len2 < r1) {\n f *= cosAng1;\n } else if(len2 >= r1 && len2 < r2) {\n f *= cosAng2;\n } else if(len2 >= r2 && len2 < r3) {\n f *= cosAng3;\n }\n\n gl_FragColor = vec4(vec3(f), 1);\n \n}"),o.compileShader(e),l=o.createProgram(),o.attachShader(l,t),o.attachShader(l,e),o.linkProgram(l),o.useProgram(l);var n=o.getAttribLocation(l,"a_PointSize");o.vertexAttrib1f(n,30);var i=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,i);var d=new Float32Array([-1,-1,-1,1,1,1,1,-1,-1,-1]);o.bufferData(o.ARRAY_BUFFER,d,o.STATIC_DRAW);var u=o.getAttribLocation(l,"a_Position");o.vertexAttribPointer(u,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(u),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let s=o.getUniformLocation(l,"iTime");o.uniform1f(s,Number(r.iTime)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let c=o.getUniformLocation(l,"iWidth");o.uniform1f(c,Number(r.iWidth)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let f=o.getUniformLocation(l,"iHeight");o.uniform1f(f,Number(r.iHeight)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)})),i((()=>r.iTime),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iTime");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.iWidth),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iWidth");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.iHeight),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iHeight");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),{canvas:a}},render:function(){return r("canvas",{ref:"canvas",width:this.$props.width,height:this.$props.height})}};const v={components:{E3Switch:a,draw:x},setup(){const e=t(!1);return{buttonWidth:t(100),buttonHeight:t(100),backgroundStyle:{background:"linear-gradient(#333, #666)",width:"70px",height:"44px",borderRadius:"25px",border:"2px solid #333"},enabled:e,buttonStyle:{width:"40px",height:"40px",transform:"translate(0px,0px)",borderRadius:"50%",position:"absolute",boxShadow:"0px 3px 4px #000",transition:"all .2s ease-in"},buttonEnterStyle:{width:"40px",height:"40px",transform:"translate(30px,0px)",borderRadius:"50%",position:"absolute",boxShadow:"0px 3px 4px #000",transition:"all .2s ease-in"}}}};v.render=function(t,e,n,i,r,a){const c=o("draw"),f=o("E3Switch");return l(),d(f,{modelValue:i.enabled,"onUpdate:modelValue":e[1]||(e[1]=t=>i.enabled=t),class:"\n relative \n focus:outline-none\n "},{default:u((()=>[s(c,{width:"100",height:"100",iTime:0,iWidth:i.buttonWidth,iHeight:i.buttonHeight,style:i.enabled?i.buttonEnterStyle:i.buttonStyle},null,8,["iWidth","iHeight","style"]),s("div",{style:i.backgroundStyle},null,4)])),_:1},8,["modelValue"])};const A={components:{E3Button:c,draw:{name:"webgl-renderer",props:{width:String,height:String,indicesCount:{default:()=>5},indicesStart:{default:()=>0},m1:{},m2:{},iWidth:{},iHeight:{},r:{},g:{},b:{}},setup(r){const a=t(null);let o,l;return e((()=>{o&&l&&o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)})),n((()=>{o=a.value.getContext("webgl");var t=o.createShader(o.VERTEX_SHADER);o.shaderSource(t,"attribute vec4 a_Position;\nvoid main(){\n gl_Position=a_Position;\n}\n"),o.compileShader(t);var e=o.createShader(o.FRAGMENT_SHADER);o.shaderSource(e,"precision highp float;\n\n#define OCTAVES 6\n\nuniform float m1;\nuniform float m2;\n\nuniform float iWidth;\nuniform float iHeight;\n\nuniform float r;\nuniform float g;\nuniform float b;\n\nfloat radius=8.0;\n\nvec3 rgb=vec3(r,g,b);\n\nvec2 u_CanvasSize = vec2(iWidth, iHeight);\nvec2 center = u_CanvasSize / 2.0;\nfloat len1 = length(center);\nfloat pi = acos(-1.0);\n\n//渐变\nfloat texture1(float x) {\n float a = x / u_CanvasSize.x;\n float b = radians(360.0) * 0.5 * a+1.0;\n return (sin(b) + 1.0) / 2.0;\n}\n\n//水平拉丝\nfloat texture2(vec2 v) {\n vec2 a = vec2(0.2222, 0.4444);\n float n = dot(v, a);\n return fract(tan(n));\n}\n\n//杂色\nfloat texture3(vec2 v) {\n vec2 a = vec2(0.1234, 0.5678);\n float n = dot(v, a);\n return fract(tan(n) * 10000.0);\n}\n\n\n\n\nvoid main() {\n //极坐标系转二维直角坐标系\n //渐变\n float f1 = texture1(gl_FragCoord.x*cos(1.)-gl_FragCoord.y*sin(1.));\n f1 = 0.65 * f1 + 0.35;\n\n //拉丝\n float f2 = texture2(gl_FragCoord.xy);\n f2 = f2*0.3+0.5;\n\n //杂色\n float f3 = texture3(gl_FragCoord.xy);\n\n //复合颜色\n float f = f1*f2;\n vec3 color=rgb * f;\n color*=1.4;\n gl_FragColor = vec4(color, 1);\n}\n\n"),o.compileShader(e),l=o.createProgram(),o.attachShader(l,t),o.attachShader(l,e),o.linkProgram(l),o.useProgram(l);var n=o.getAttribLocation(l,"a_PointSize");o.vertexAttrib1f(n,30);var i=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,i);var d=new Float32Array([-1,-1,-1,1,1,1,1,-1,-1,-1]);o.bufferData(o.ARRAY_BUFFER,d,o.STATIC_DRAW);var u=o.getAttribLocation(l,"a_Position");o.vertexAttribPointer(u,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(u),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let s=o.getUniformLocation(l,"m1");o.uniform1f(s,Number(r.m1)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let c=o.getUniformLocation(l,"m2");o.uniform1f(c,Number(r.m2)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let f=o.getUniformLocation(l,"iWidth");o.uniform1f(f,Number(r.iWidth)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let h=o.getUniformLocation(l,"iHeight");o.uniform1f(h,Number(r.iHeight)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let m=o.getUniformLocation(l,"r");o.uniform1f(m,Number(r.r)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let g=o.getUniformLocation(l,"g");o.uniform1f(g,Number(r.g)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let p=o.getUniformLocation(l,"b");o.uniform1f(p,Number(r.b)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)})),i((()=>r.m1),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"m1");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.m2),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"m2");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.iWidth),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iWidth");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.iHeight),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iHeight");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.r),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"r");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.g),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"g");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.b),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"b");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),{canvas:a}},render:function(){return r("canvas",{ref:"canvas",width:this.$props.width,height:this.$props.height})}}},props:{label:{type:String,default:""},type:{type:String,default:"normal"}},setup(e){i((()=>e.r),(()=>{console.log("r",e.r)}));const n=t(!1);return{buttonWidth:t(120),buttonHeight:t(60),buttonStyle:{width:"120px",height:"60px",boxShadow:"0px 3px 4px #000",borderRadius:"8px",transform:"translateY(0px)"},buttonEnterStyle:{width:"120px",height:"60px",boxShadow:"0px 1px 4px #000",borderRadius:"8px",transform:"translateY(2px)"},color:f((()=>"primary"==e.type?{r:97/255,g:139/255,b:239/255}:"success"==e.type?{r:152/255,g:195/255,b:121/255}:"danger"==e.type?{r:224/255,g:108/255,b:117/255}:{r:.1,g:.1,b:.1})),m1:t(40),m2:t(20),enter:n}}};A.render=function(t,e,n,i,r,a){const c=o("draw"),f=o("E3Button");return l(),d("div",null,[s(f,{class:"EButton",modelValue:i.enter,"onUpdate:modelValue":e[1]||(e[1]=t=>i.enter=t),style:{position:"relative","border-radius":"8px"}},{default:u((()=>[s("div",{style:[{transform:"translateY("+(i.enter?2:0)+"px)"},{"font-family":"'verdana'","font-size":"24px",position:"absolute",width:"100%","text-align":"center","line-height":"60px",color:"rgba(255,255,255,.8)","text-shadow":"0px -1px 0px rgba(0,0,0,.6)","z-index":"2"}]},h(n.label),5),s(c,{iTime:3.14159/8,m1:i.m1,m2:i.m2,r:i.color.r,g:i.color.g,b:i.color.b,style:i.enter?i.buttonEnterStyle:i.buttonStyle,width:i.buttonWidth,height:i.buttonHeight,iWidth:i.buttonWidth,iHeight:i.buttonHeight},null,8,["iTime","m1","m2","r","g","b","style","width","height","iWidth","iHeight"])])),_:1},8,["modelValue"])])};const y={components:{E3Slider:m,E3SliderButton:g,draw:{name:"webgl-renderer",props:{width:String,height:String,indicesCount:{default:()=>5},indicesStart:{default:()=>0},iTime:{},iWidth:{},iHeight:{}},setup(r){const a=t(null);let o,l;return e((()=>{o&&l&&o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)})),n((()=>{o=a.value.getContext("webgl");var t=o.createShader(o.VERTEX_SHADER);o.shaderSource(t,"attribute vec4 a_Position;\nvoid main(){\n gl_Position=a_Position;\n}\n"),o.compileShader(t);var e=o.createShader(o.FRAGMENT_SHADER);o.shaderSource(e,"precision mediump float;\n\nuniform float iTime;\nuniform float iWidth;\nuniform float iHeight;\n\nhighp float rand(vec2 co)\n{\n /*if(int(co.x) < 50 && int(co.x) > 46 && int(co.y) < 50 && int(co.y) > 46) {\n return 0.0;\n } else {\n return 1.0;\n }*/\n co = vec2(float(int(co.x / 0.5)), float(int(co.y / 0.5)));\n highp float a = 12.9898;\n highp float b = 78.233;\n highp float c = 43758.5453;\n highp float dt= dot(co.xy ,vec2(a,b));\n highp float sn= mod(dt,3.14);\n return fract(sin(sn) * c);\n}\nconst int count = 15;\n\nvec4 blur(vec2 co)\n{\n vec4 color = vec4(0.0, 0.0, 0.0, 0.0);\n float x = co.x - iWidth / 2.;\n float y = co.y - iHeight / 2.;\n\n float theta = atan(co.y - iHeight / 2., co.x - iWidth / 2.);\n float r = sqrt(x * x + y * y);\n \n for(int i = -count; i <= count; i++) {\n float v1 = rand( vec2(cos(theta + float(i) / r) * r, sin(theta + float(i) / r) * r)) / (float(count) * 2.0 - 1.0);\n color = color + vec4(v1, v1, v1, 1.0); \n }\n return color;\n}\n\nvec4 gradient(vec2 co)\n{\n vec4 color = vec4(0.0, 1.0, 1.0, 1.0);\n float x = co.x - iWidth / 2.;\n float y = co.y - iHeight / 2.;\n float theta = atan(co.y - iWidth / 2., co.x - iHeight / 2.);\n theta += iTime;\n float r = sqrt(x * x + y * y);\n color = vec4(vec3(sin(theta * 4.0) + 3.0) / 4.0, 1.0);\n return color;\n}\n\n\n\nvoid main(){\n gl_FragColor = mix(gradient(gl_FragCoord.xy), blur(gl_FragCoord.xy), 0.4) ;\n}"),o.compileShader(e),l=o.createProgram(),o.attachShader(l,t),o.attachShader(l,e),o.linkProgram(l),o.useProgram(l);var n=o.getAttribLocation(l,"a_PointSize");o.vertexAttrib1f(n,30);var i=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,i);var d=new Float32Array([-1,-1,-1,1,1,1,1,-1,-1,-1]);o.bufferData(o.ARRAY_BUFFER,d,o.STATIC_DRAW);var u=o.getAttribLocation(l,"a_Position");o.vertexAttribPointer(u,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(u),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let s=o.getUniformLocation(l,"iTime");o.uniform1f(s,Number(r.iTime)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let c=o.getUniformLocation(l,"iWidth");o.uniform1f(c,Number(r.iWidth)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount);let f=o.getUniformLocation(l,"iHeight");o.uniform1f(f,Number(r.iHeight)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)})),i((()=>r.iTime),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iTime");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.iWidth),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iWidth");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),i((()=>r.iHeight),(t=>{if(!o||!l)return;let e=o.getUniformLocation(l,"iHeight");o.uniform1f(e,Number(t)),o.drawArrays(o.TRIANGLE_STRIP,r.indicesStart,r.indicesCount)}),{immediate:!0}),{canvas:a}},render:function(){return r("canvas",{ref:"canvas",width:this.$props.width,height:this.$props.height})}}},setup(){const e=t(0),n=t(80),i=t(80),r={height:"18px",margin:"0 auto",background:"linear-gradient(#333, #666)",width:"400px",borderRadius:"9px",border:"2px solid #333"},a=t(0);setInterval((()=>{a.value=Date.now()/1e4%(2*Math.PI)}),20);const o=f((()=>({background:"pink",borderRadius:"50%",overflow:"hidden",width:"40px",height:"40px",cursor:"pointer",textAlign:"center",transform:`translate(${e.value/100*400-20}px,-16px)`,boxShadow:"0px 3px 4px #000"})));return{myTime:a,buttonWidth:n,buttonHeight:i,sliderStyle:r,buttonStyle:o,value:e}}};y.render=function(t,e,n,i,r,a){const c=o("draw"),f=o("E3SliderButton"),h=o("E3Slider");return l(),d("div",null,[s(h,{style:i.sliderStyle,modelValue:i.value,"onUpdate:modelValue":e[1]||(e[1]=t=>i.value=t)},{default:u((()=>[s(f,{style:i.buttonStyle},{default:u((()=>[s(c,{iTime:i.myTime,style:{width:"40px",height:"40px"},width:"80",height:"80",iWidth:i.buttonWidth,iHeight:i.buttonHeight},null,8,["iTime","iWidth","iHeight"])])),_:1},8,["style"])])),_:1},8,["style","modelValue"])])};const R={components:{E3Slider:m,E3SliderButton:g,draw:x},setup(){const e=t(100),n=t(100),i=t(0);return{buttonStyle:f((()=>({width:e.value+"px",height:n.value+"px",position:"relative",overflow:"hidden",borderRadius:"50%",boxShadow:"0px 3px 4px #000",transform:"rotate("+Math.ceil(i.value/100*360)+"deg)",overflow:"hidden"}))),buttonWidth:e,buttonHeight:n,value:i}}},T=s("div",{style:{background:"rgba(0,0,0,.3)",top:"180px",left:"95px","border-radius":"50%",width:"10px",height:"10px",position:"absolute","z-index":"2"}},null,-1);R.render=function(t,e,n,i,r,a){const c=o("draw"),f=o("E3SliderButton"),h=o("E3Slider");return l(),d("div",null,[s(h,{modelValue:i.value,"onUpdate:modelValue":e[1]||(e[1]=t=>i.value=t)},{default:u((()=>[s(f,{style:i.buttonStyle},{default:u((()=>[T,s(c,{style:{"border-radius":"50%"},iTime:0,width:i.buttonWidth,height:i.buttonHeight,iWidth:i.buttonWidth,iHeight:i.buttonHeight},null,8,["width","height","iWidth","iHeight"])])),_:1},8,["style"])])),_:1},8,["modelValue"])])};var w=p({name:"App",components:{Switch:v,Button:A,HSlider:y,RotateSlider:R},setup(){const e=t(0),n=t(0),i=t(0);return{colorR:f((()=>e.value/255)),colorG:f((()=>n.value/255)),colorB:f((()=>i.value/255)),slideR:e,slideG:n,slideB:i}}});const _={style:{height:"1000px"}},E=b(" hi element3-core "),I=s("p",null,"switch",-1),L=s("p",null,"button",-1),C={style:{display:"flex","justify-content":"space-evenly"}},N=s("p",null,"slider 水平",-1);w.render=function(t,e,n,i,r,a){const u=o("Switch"),c=o("Button"),f=o("HSlider");return l(),d("div",_,[E,s("div",null,[s("div",null,[I,s(u)]),s("div",null,[L,s("div",C,[s(c,{type:"success",label:"success"}),s(c,{type:"danger",label:"danger"}),s(c,{type:"primary",label:"primary"})])]),s("div",null,[N,s(f)])])])};S(w).mount("#app"); 2 | -------------------------------------------------------------------------------- /docs/webgl/assets/style.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /docs/webgl/assets/vendor.4f6f7efc.js: -------------------------------------------------------------------------------- 1 | function e(e,t){const n=Object.create(null),o=e.split(",");for(let s=0;s!!n[e.toLowerCase()]:e=>!!n[e]}const t=e("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),n=e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function o(e){if(x(e)){const t={};for(let n=0;n{if(e){const n=e.split(r);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function i(e){let t="";if(k(e))t=e;else if(x(e))for(let n=0;nnull==e?"":F(e)?JSON.stringify(e,u,2):String(e),u=(e,t)=>w(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:S(t)?{[`Set(${t.size})`]:[...t.values()]}:!F(t)||x(t)||R(t)?t:String(t),a={},f=[],p=()=>{},d=()=>!1,h=/^on[^a-z]/,m=e=>h.test(e),v=e=>e.startsWith("onUpdate:"),g=Object.assign,_=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},y=Object.prototype.hasOwnProperty,b=(e,t)=>y.call(e,t),x=Array.isArray,w=e=>"[object Map]"===P(e),S=e=>"[object Set]"===P(e),C=e=>"function"==typeof e,k=e=>"string"==typeof e,E=e=>"symbol"==typeof e,F=e=>null!==e&&"object"==typeof e,O=e=>F(e)&&C(e.then)&&C(e.catch),M=Object.prototype.toString,P=e=>M.call(e),R=e=>"[object Object]"===P(e),N=e=>k(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,V=e(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),T=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},j=/-(\w)/g,$=T((e=>e.replace(j,((e,t)=>t?t.toUpperCase():"")))),I=/\B([A-Z])/g,A=T((e=>e.replace(I,"-$1").toLowerCase())),U=T((e=>e.charAt(0).toUpperCase()+e.slice(1))),L=T((e=>e?`on${U(e)}`:"")),B=(e,t)=>e!==t&&(e==e||t==t),z=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},W=e=>{const t=parseFloat(e);return isNaN(t)?e:t},H=new WeakMap,X=[];let Y;const K=Symbol(""),q=Symbol("");function G(e,t=a){(function(e){return e&&!0===e._isEffect})(e)&&(e=e.raw);const n=function(e,t){const n=function(){if(!n.active)return t.scheduler?void 0:e();if(!X.includes(n)){Q(n);try{return te.push(ee),ee=!0,X.push(n),Y=n,e()}finally{X.pop(),oe(),Y=X[X.length-1]}}};return n.id=Z++,n.allowRecurse=!!t.allowRecurse,n._isEffect=!0,n.active=!0,n.raw=e,n.deps=[],n.options=t,n}(e,t);return t.lazy||n(),n}function J(e){e.active&&(Q(e),e.options.onStop&&e.options.onStop(),e.active=!1)}let Z=0;function Q(e){const{deps:t}=e;if(t.length){for(let n=0;n{e&&e.forEach((e=>{(e!==Y||e.allowRecurse)&&i.add(e)}))};if("clear"===t)l.forEach(c);else if("length"===n&&x(e))l.forEach(((e,t)=>{("length"===t||t>=o)&&c(e)}));else switch(void 0!==n&&c(l.get(n)),t){case"add":x(e)?N(n)&&c(l.get("length")):(c(l.get(K)),w(e)&&c(l.get(q)));break;case"delete":x(e)||(c(l.get(K)),w(e)&&c(l.get(q)));break;case"set":w(e)&&c(l.get(K))}i.forEach((e=>{e.options.scheduler?e.options.scheduler(e):e()}))}const le=e("__proto__,__v_isRef,__isVue"),ie=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(E)),ce=de(),ue=de(!1,!0),ae=de(!0),fe=de(!0,!0),pe={};function de(e=!1,t=!1){return function(n,o,s){if("__v_isReactive"===o)return!e;if("__v_isReadonly"===o)return e;if("__v_raw"===o&&s===(e?t?De:ze:t?Be:Le).get(n))return n;const r=x(n);if(!e&&r&&b(pe,o))return Reflect.get(pe,o,s);const l=Reflect.get(n,o,s);if(E(o)?ie.has(o):le(o))return l;if(e||se(n,0,o),t)return l;if(Qe(l)){return!r||!N(o)?l.value:l}return F(l)?e?Xe(l):He(l):l}}["includes","indexOf","lastIndexOf"].forEach((e=>{const t=Array.prototype[e];pe[e]=function(...e){const n=Je(this);for(let t=0,s=this.length;t{const t=Array.prototype[e];pe[e]=function(...e){ne();const n=t.apply(this,e);return oe(),n}}));function he(e=!1){return function(t,n,o,s){let r=t[n];if(!e&&(o=Je(o),r=Je(r),!x(t)&&Qe(r)&&!Qe(o)))return r.value=o,!0;const l=x(t)&&N(n)?Number(n)!0,deleteProperty:(e,t)=>!0},ge=g({},me,{get:ue,set:he(!0)});g({},ve,{get:fe});const _e=e=>F(e)?He(e):e,ye=e=>F(e)?Xe(e):e,be=e=>e,xe=e=>Reflect.getPrototypeOf(e);function we(e,t,n=!1,o=!1){const s=Je(e=e.__v_raw),r=Je(t);t!==r&&!n&&se(s,0,t),!n&&se(s,0,r);const{has:l}=xe(s),i=o?be:n?ye:_e;return l.call(s,t)?i(e.get(t)):l.call(s,r)?i(e.get(r)):void 0}function Se(e,t=!1){const n=this.__v_raw,o=Je(n),s=Je(e);return e!==s&&!t&&se(o,0,e),!t&&se(o,0,s),e===s?n.has(e):n.has(e)||n.has(s)}function Ce(e,t=!1){return e=e.__v_raw,!t&&se(Je(e),0,K),Reflect.get(e,"size",e)}function ke(e){e=Je(e);const t=Je(this);return xe(t).has.call(t,e)||(t.add(e),re(t,"add",e,e)),this}function Ee(e,t){t=Je(t);const n=Je(this),{has:o,get:s}=xe(n);let r=o.call(n,e);r||(e=Je(e),r=o.call(n,e));const l=s.call(n,e);return n.set(e,t),r?B(t,l)&&re(n,"set",e,t):re(n,"add",e,t),this}function Fe(e){const t=Je(this),{has:n,get:o}=xe(t);let s=n.call(t,e);s||(e=Je(e),s=n.call(t,e)),o&&o.call(t,e);const r=t.delete(e);return s&&re(t,"delete",e,void 0),r}function Oe(){const e=Je(this),t=0!==e.size,n=e.clear();return t&&re(e,"clear",void 0,void 0),n}function Me(e,t){return function(n,o){const s=this,r=s.__v_raw,l=Je(r),i=t?be:e?ye:_e;return!e&&se(l,0,K),r.forEach(((e,t)=>n.call(o,i(e),i(t),s)))}}function Pe(e,t,n){return function(...o){const s=this.__v_raw,r=Je(s),l=w(r),i="entries"===e||e===Symbol.iterator&&l,c="keys"===e&&l,u=s[e](...o),a=n?be:t?ye:_e;return!t&&se(r,0,c?q:K),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:i?[a(e[0]),a(e[1])]:a(e),done:t}},[Symbol.iterator](){return this}}}}function Re(e){return function(...t){return"delete"!==e&&this}}const Ne={get(e){return we(this,e)},get size(){return Ce(this)},has:Se,add:ke,set:Ee,delete:Fe,clear:Oe,forEach:Me(!1,!1)},Ve={get(e){return we(this,e,!1,!0)},get size(){return Ce(this)},has:Se,add:ke,set:Ee,delete:Fe,clear:Oe,forEach:Me(!1,!0)},Te={get(e){return we(this,e,!0)},get size(){return Ce(this,!0)},has(e){return Se.call(this,e,!0)},add:Re("add"),set:Re("set"),delete:Re("delete"),clear:Re("clear"),forEach:Me(!0,!1)},je={get(e){return we(this,e,!0,!0)},get size(){return Ce(this,!0)},has(e){return Se.call(this,e,!0)},add:Re("add"),set:Re("set"),delete:Re("delete"),clear:Re("clear"),forEach:Me(!0,!0)};function $e(e,t){const n=t?e?je:Ve:e?Te:Ne;return(t,o,s)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(b(n,o)&&o in t?n:t,o,s)}["keys","values","entries",Symbol.iterator].forEach((e=>{Ne[e]=Pe(e,!1,!1),Te[e]=Pe(e,!0,!1),Ve[e]=Pe(e,!1,!0),je[e]=Pe(e,!0,!0)}));const Ie={get:$e(!1,!1)},Ae={get:$e(!1,!0)},Ue={get:$e(!0,!1)},Le=new WeakMap,Be=new WeakMap,ze=new WeakMap,De=new WeakMap;function We(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>P(e).slice(8,-1))(e))}function He(e){return e&&e.__v_isReadonly?e:Ye(e,!1,me,Ie,Le)}function Xe(e){return Ye(e,!0,ve,Ue,ze)}function Ye(e,t,n,o,s){if(!F(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const r=s.get(e);if(r)return r;const l=We(e);if(0===l)return e;const i=new Proxy(e,2===l?o:n);return s.set(e,i),i}function Ke(e){return qe(e)?Ke(e.__v_raw):!(!e||!e.__v_isReactive)}function qe(e){return!(!e||!e.__v_isReadonly)}function Ge(e){return Ke(e)||qe(e)}function Je(e){return e&&Je(e.__v_raw)||e}const Ze=e=>F(e)?He(e):e;function Qe(e){return Boolean(e&&!0===e.__v_isRef)}function et(e){return function(e,t=!1){if(Qe(e))return e;return new tt(e,t)}(e)}class tt{constructor(e,t=!1){this._rawValue=e,this._shallow=t,this.__v_isRef=!0,this._value=t?e:Ze(e)}get value(){return se(Je(this),0,"value"),this._value}set value(e){B(Je(e),this._rawValue)&&(this._rawValue=e,this._value=this._shallow?e:Ze(e),re(Je(this),"set","value",e))}}function nt(e){return Qe(e)?e.value:e}const ot={get:(e,t,n)=>nt(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const s=e[t];return Qe(s)&&!Qe(n)?(s.value=n,!0):Reflect.set(e,t,n,o)}};function st(e){return Ke(e)?e:new Proxy(e,ot)}class rt{constructor(e,t){this._object=e,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(e){this._object[this._key]=e}}class lt{constructor(e,t,n){this._setter=t,this._dirty=!0,this.__v_isRef=!0,this.effect=G(e,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,re(Je(this),"set","value"))}}),this.__v_isReadonly=n}get value(){const e=Je(this);return e._dirty&&(e._value=this.effect(),e._dirty=!1),se(e,0,"value"),e._value}set value(e){this._setter(e)}}function it(e,t,n,o){let s;try{s=o?e(...o):e()}catch(r){ut(r,t,n)}return s}function ct(e,t,n,o){if(C(e)){const s=it(e,t,n,o);return s&&O(s)&&s.catch((e=>{ut(e,t,n)})),s}const s=[];for(let r=0;r>>1;Mt(pt[e])-1?pt.splice(t,0,e):pt.push(e),kt()}}function kt(){at||ft||(ft=!0,xt=bt.then(Pt))}function Et(e,t,n,o){x(e)?n.push(...e):t&&t.includes(e,e.allowRecurse?o+1:o)||n.push(e),kt()}function Ft(e,t=null){if(ht.length){for(wt=t,mt=[...new Set(ht)],ht.length=0,vt=0;vtMt(e)-Mt(t))),yt=0;yt<_t.length;yt++)_t[yt]();_t=null,yt=0}}const Mt=e=>null==e.id?1/0:e.id;function Pt(e){ft=!1,at=!0,Ft(e),pt.sort(((e,t)=>Mt(e)-Mt(t)));try{for(dt=0;dte.trim())):t&&(s=n.map(W))}let i,c=o[i=L(t)]||o[i=L($(t))];!c&&r&&(c=o[i=L(A(t))]),c&&ct(c,e,6,s);const u=o[i+"Once"];if(u){if(e.emitted){if(e.emitted[i])return}else(e.emitted={})[i]=!0;ct(u,e,6,s)}}function Nt(e,t,n=!1){if(!t.deopt&&void 0!==e.__emits)return e.__emits;const o=e.emits;let s={},r=!1;if(!C(e)){const o=e=>{const n=Nt(e,t,!0);n&&(r=!0,g(s,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return o||r?(x(o)?o.forEach((e=>s[e]=null)):g(s,o),e.__emits=s):e.__emits=null}function Vt(e,t){return!(!e||!m(t))&&(t=t.slice(2).replace(/Once$/,""),b(e,t[0].toLowerCase()+t.slice(1))||b(e,A(t))||b(e,t))}let Tt=0;const jt=e=>Tt+=e;let $t=null,It=null;function At(e){const t=$t;return $t=e,It=e&&e.type.__scopeId||null,t}function Ut(e,t=$t){if(!t)return e;const n=(...n)=>{Tt||Hn(!0);const o=At(t),s=e(...n);return At(o),Tt||Xn(),s};return n._c=!0,n}function Lt(e){const{type:t,vnode:n,proxy:o,withProxy:s,props:r,propsOptions:[l],slots:i,attrs:c,emit:u,render:a,renderCache:f,data:p,setupState:d,ctx:h}=e;let m;const g=At(e);try{let e;if(4&n.shapeFlag){const t=s||o;m=no(a.call(t,t,f,r,d,p,h)),e=c}else{const n=t;0,m=no(n.length>1?n(r,{attrs:c,slots:i,emit:u}):n(r,null)),e=t.props?c:zt(c)}let g=m;if(!1!==t.inheritAttrs&&e){const t=Object.keys(e),{shapeFlag:n}=g;t.length&&(1&n||6&n)&&(l&&t.some(v)&&(e=Dt(e,l)),g=eo(g,e))}n.dirs&&(g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),m=g}catch(_){Dn.length=0,ut(_,e,1),m=Qn(Bn)}return At(g),m}function Bt(e){let t;for(let n=0;n{let t;for(const n in e)("class"===n||"style"===n||m(n))&&((t||(t={}))[n]=e[n]);return t},Dt=(e,t)=>{const n={};for(const o in e)v(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function Wt(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let s=0;s{l=!0;const[n,o]=qt(e,t,!0);g(s,n),o&&r.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!o&&!l)return e.__props=f;if(x(o))for(let i=0;i-1,n[1]=o<0||t-1||b(n,"default"))&&r.push(e)}}}return e.__props=[s,r]}function Gt(e){return"$"!==e[0]}function Jt(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Zt(e,t){return Jt(e)===Jt(t)}function Qt(e,t){return x(t)?t.findIndex((t=>Zt(t,e))):C(t)&&Zt(t,e)?0:-1}function en(e,t,n=wo,o=!1){if(n){const s=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;ne(),So(n);const s=ct(t,n,e,o);return So(null),oe(),s});return o?s.unshift(r):s.push(r),r}}const tn=e=>(t,n=wo)=>!ko&&en(e,t,n),nn=tn("bm"),on=tn("m"),sn=tn("bu"),rn=tn("u"),ln=tn("bum"),cn=tn("um"),un=tn("rtg"),an=tn("rtc");function fn(e,t){return hn(e,null,t)}const pn={};function dn(e,t,n){return hn(e,t,n)}function hn(e,t,{immediate:n,deep:o,flush:s,onTrack:r,onTrigger:l}=a,i=wo){let c,u,f=!1;if(Qe(e)?(c=()=>e.value,f=!!e._shallow):Ke(e)?(c=()=>e,o=!0):c=x(e)?()=>e.map((e=>Qe(e)?e.value:Ke(e)?vn(e):C(e)?it(e,i,2,[i&&i.proxy]):void 0)):C(e)?t?()=>it(e,i,2,[i&&i.proxy]):()=>{if(!i||!i.isUnmounted)return u&&u(),ct(e,i,3,[d])}:p,t&&o){const e=c;c=()=>vn(e())}let d=e=>{u=g.options.onStop=()=>{it(e,i,4)}},h=x(e)?[]:pn;const m=()=>{if(g.active)if(t){const e=g();(o||f||B(e,h))&&(u&&u(),ct(t,i,3,[e,h===pn?void 0:h,d]),h=e)}else g()};let v;m.allowRecurse=!!t,v="sync"===s?m:"post"===s?()=>Rn(m,i&&i.suspense):()=>{!i||i.isMounted?function(e){Et(e,mt,ht,vt)}(m):m()};const g=G(c,{lazy:!0,onTrack:r,onTrigger:l,scheduler:v});return Oo(g,i),t?n?m():h=g():"post"===s?Rn(g,i&&i.suspense):g(),()=>{J(g),i&&_(i.effects,g)}}function mn(e,t,n){const o=this.proxy;return hn(k(e)?()=>o[e]:e.bind(o),t.bind(o),n,this)}function vn(e,t=new Set){if(!F(e)||t.has(e))return e;if(t.add(e),Qe(e))vn(e.value,t);else if(x(e))for(let n=0;n{vn(e,t)}));else for(const n in e)vn(e[n],t);return e}const gn=e=>e.type.__isKeepAlive;function _n(e,t,n=wo){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}e()});if(en(t,o,n),n){let e=n.parent;for(;e&&e.parent;)gn(e.parent.vnode)&&yn(o,t,n,e),e=e.parent}}function yn(e,t,n,o){const s=en(t,e,o,!0);cn((()=>{_(o[t],s)}),n)}const bn=e=>"_"===e[0]||"$stable"===e,xn=e=>x(e)?e.map(no):[no(e)],wn=(e,t,n)=>Ut((e=>xn(t(e))),n),Sn=(e,t)=>{const n=e._ctx;for(const o in e){if(bn(o))continue;const s=e[o];if(C(s))t[o]=wn(0,s,n);else if(null!=s){const e=xn(s);t[o]=()=>e}}},Cn=(e,t)=>{const n=xn(t);e.slots.default=()=>n};function kn(e,t,n,o){const s=e.dirs,r=t&&t.dirs;for(let l=0;l(r.has(e)||(e&&C(e.install)?(r.add(e),e.install(i,...t)):C(e)&&(r.add(e),e(i,...t))),i),mixin:e=>(s.mixins.includes(e)||(s.mixins.push(e),(e.props||e.emits)&&(s.deopt=!0)),i),component:(e,t)=>t?(s.components[e]=t,i):s.components[e],directive:(e,t)=>t?(s.directives[e]=t,i):s.directives[e],mount(r,c,u){if(!l){const a=Qn(n,o);return a.appContext=s,c&&t?t(a,r):e(a,r,u),l=!0,i._container=r,r.__vue_app__=i,a.component.proxy}},unmount(){l&&(e(null,i._container),delete i._container.__vue_app__)},provide:(e,t)=>(s.provides[e]=t,i)};return i}}function Mn(e){return C(e)?{setup:e,name:e.name}:e}const Pn={scheduler:Ct,allowRecurse:!0},Rn=function(e,t){t&&t.pendingBranch?x(e)?t.effects.push(...e):t.effects.push(e):Et(e,_t,gt,yt)},Nn=(e,t,n,o)=>{if(x(e))return void e.forEach(((e,s)=>Nn(e,t&&(x(t)?t[s]:t),n,o)));let s;if(o){if(o.type.__asyncLoader)return;s=4&o.shapeFlag?o.component.exposed||o.component.proxy:o.el}else s=null;const{i:r,r:l}=e,i=t&&t.r,c=r.refs===a?r.refs={}:r.refs,u=r.setupState;if(null!=i&&i!==l&&(k(i)?(c[i]=null,b(u,i)&&(u[i]=null)):Qe(i)&&(i.value=null)),k(l)){const e=()=>{c[l]=s,b(u,l)&&(u[l]=s)};s?(e.id=-1,Rn(e,n)):e()}else if(Qe(l)){const e=()=>{l.value=s};s?(e.id=-1,Rn(e,n)):e()}else C(l)&&it(l,r,12,[s,c])};function Vn(e){return function(e,t){const{insert:n,remove:o,patchProp:s,forcePatchProp:r,createElement:l,createText:i,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:m,setScopeId:v=p,cloneNode:_,insertStaticContent:y}=e,x=(e,t,n,o=null,s=null,r=null,l=!1,i=null,c=!1)=>{e&&!qn(e,t)&&(o=le(e),Z(e,s,r,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:u,ref:a,shapeFlag:f}=t;switch(u){case Ln:w(e,t,n,o);break;case Bn:S(e,t,n,o);break;case zn:null==e&&C(t,n,o,l);break;case Un:I(e,t,n,o,s,r,l,i,c);break;default:1&f?F(e,t,n,o,s,r,l,i,c):6&f?U(e,t,n,o,s,r,l,i,c):(64&f||128&f)&&u.process(e,t,n,o,s,r,l,i,c,ce)}null!=a&&s&&Nn(a,e&&e.ref,r,t)},w=(e,t,o,s)=>{if(null==e)n(t.el=i(t.children),o,s);else{const n=t.el=e.el;t.children!==e.children&&u(n,t.children)}},S=(e,t,o,s)=>{null==e?n(t.el=c(t.children||""),o,s):t.el=e.el},C=(e,t,n,o)=>{[e.el,e.anchor]=y(e.children,t,n,o)},k=({el:e,anchor:t},o,s)=>{let r;for(;e&&e!==t;)r=m(e),n(e,o,s),e=r;n(t,o,s)},E=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=m(e),o(e),e=n;o(t)},F=(e,t,n,o,s,r,l,i,c)=>{l=l||"svg"===t.type,null==e?M(t,n,o,s,r,l,i,c):N(e,t,s,r,l,i,c)},M=(e,t,o,r,i,c,u,a)=>{let f,p;const{type:h,props:m,shapeFlag:v,transition:g,patchFlag:y,dirs:b}=e;if(e.el&&void 0!==_&&-1===y)f=e.el=_(e.el);else{if(f=e.el=l(e.type,c,m&&m.is,m),8&v?d(f,e.children):16&v&&R(e.children,f,null,r,i,c&&"foreignObject"!==h,u,a||!!e.dynamicChildren),b&&kn(e,null,r,"created"),m){for(const t in m)V(t)||s(f,t,null,m[t],c,e.children,r,i,se);(p=m.onVnodeBeforeMount)&&Tn(p,r,e)}P(f,e,e.scopeId,u,r)}b&&kn(e,null,r,"beforeMount");const x=(!i||i&&!i.pendingBranch)&&g&&!g.persisted;x&&g.beforeEnter(f),n(f,t,o),((p=m&&m.onVnodeMounted)||x||b)&&Rn((()=>{p&&Tn(p,r,e),x&&g.enter(f),b&&kn(e,null,r,"mounted")}),i)},P=(e,t,n,o,s)=>{if(n&&v(e,n),o)for(let r=0;r{for(let u=c;u{const u=t.el=e.el;let{patchFlag:f,dynamicChildren:p,dirs:h}=t;f|=16&e.patchFlag;const m=e.props||a,v=t.props||a;let g;if((g=v.onVnodeBeforeUpdate)&&Tn(g,n,t,e),h&&kn(t,e,n,"beforeUpdate"),f>0){if(16&f)j(u,t,m,v,n,o,l);else if(2&f&&m.class!==v.class&&s(u,"class",null,v.class,l),4&f&&s(u,"style",m.style,v.style,l),8&f){const i=t.dynamicProps;for(let t=0;t{g&&Tn(g,n,t,e),h&&kn(t,e,n,"updated")}),o)},T=(e,t,n,o,s,r,l)=>{for(let i=0;i{if(n!==o){for(const u in o){if(V(u))continue;const a=o[u],f=n[u];(a!==f||r&&r(e,u))&&s(e,u,f,a,c,t.children,l,i,se)}if(n!==a)for(const r in n)V(r)||r in o||s(e,r,n[r],null,c,t.children,l,i,se)}},I=(e,t,o,s,r,l,c,u,a)=>{const f=t.el=e?e.el:i(""),p=t.anchor=e?e.anchor:i("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:m}=t;d>0&&(a=!0),m&&(u=u?u.concat(m):m),null==e?(n(f,o,s),n(p,o,s),R(t.children,o,p,r,l,c,u,a)):d>0&&64&d&&h&&e.dynamicChildren?(T(e.dynamicChildren,h,o,r,l,c,u),(null!=t.key||r&&t===r.subTree)&&jn(e,t,!0)):X(e,t,o,p,r,l,c,u,a)},U=(e,t,n,o,s,r,l,i,c)=>{t.slotScopeIds=i,null==e?512&t.shapeFlag?s.ctx.activate(t,n,o,l,c):L(t,n,o,s,r,l,c):B(e,t,c)},L=(e,t,n,o,s,r,l)=>{const i=e.component=function(e,t,n){const o=e.type,s=(t?t.appContext:e.appContext)||bo,r={uid:xo++,vnode:e,type:o,parent:t,appContext:s,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:t?t.provides:Object.create(s.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:qt(o,s),emitsOptions:Nt(o,s),emit:null,emitted:null,propsDefaults:a,ctx:a,data:a,props:a,attrs:a,slots:a,refs:a,setupState:a,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null};return r.ctx={_:r},r.root=t?t.root:r,r.emit=Rt.bind(null,r),r}(e,o,s);if(gn(e)&&(i.ctx.renderer=ce),function(e,t=!1){ko=t;const{props:n,children:o}=e.vnode,s=Co(e);Xt(e,n,s,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=t,D(t,"_",n)):Sn(t,e.slots={})}else e.slots={},t&&Cn(e,t);D(e.slots,Gn,1)})(e,o);const r=s?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,_o);const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?function(e){const t=t=>{e.exposed=st(t)};return{attrs:e.attrs,slots:e.slots,emit:e.emit,expose:t}}(e):null;wo=e,ne();const s=it(o,e,0,[e.props,n]);if(oe(),wo=null,O(s)){if(t)return s.then((t=>{Eo(e,t)})).catch((t=>{ut(t,e,0)}));e.asyncDep=s}else Eo(e,s)}else Fo(e)}(e,t):void 0;ko=!1}(i),i.asyncDep){if(s&&s.registerDep(i,W),!e.el){const e=i.subTree=Qn(Bn);S(null,e,t,n)}}else W(i,e,t,n,s,r,l)},B=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:s,component:r}=e,{props:l,children:i,patchFlag:c}=t,u=r.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!s&&!i||i&&i.$stable)||o!==l&&(o?!l||Wt(o,l,u):!!l);if(1024&c)return!0;if(16&c)return o?Wt(o,l,u):!!l;if(8&c){const e=t.dynamicProps;for(let t=0;tdt&&pt.splice(t,1)}(o.update),o.update()}else t.component=e.component,t.el=e.el,o.vnode=t},W=(e,t,n,o,s,r,l)=>{e.update=G((function(){if(e.isMounted){let t,{next:n,bu:o,u:i,parent:c,vnode:u}=e,a=n;n?(n.el=u.el,H(e,n,l)):n=u,o&&z(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Tn(t,c,n,u);const f=Lt(e),p=e.subTree;e.subTree=f,x(p,f,h(p.el),le(p),e,s,r),n.el=f.el,null===a&&function({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}(e,f.el),i&&Rn(i,s),(t=n.props&&n.props.onVnodeUpdated)&&Rn((()=>{Tn(t,c,n,u)}),s)}else{let l;const{el:i,props:c}=t,{bm:u,m:a,parent:f}=e;u&&z(u),(l=c&&c.onVnodeBeforeMount)&&Tn(l,f,t);const p=e.subTree=Lt(e);if(i&&ae?ae(t.el,p,e,s,null):(x(null,p,n,o,e,s,r),t.el=p.el),a&&Rn(a,s),l=c&&c.onVnodeMounted){const e=t;Rn((()=>{Tn(l,f,e)}),s)}const{a:d}=e;d&&256&t.shapeFlag&&Rn(d,s),e.isMounted=!0,t=n=o=null}}),Pn)},H=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:s,attrs:r,vnode:{patchFlag:l}}=e,i=Je(s),[c]=e.propsOptions;if(!(o||l>0)||16&l){let o;Yt(e,t,s,r);for(const r in i)t&&(b(t,r)||(o=A(r))!==r&&b(t,o))||(c?!n||void 0===n[r]&&void 0===n[o]||(s[r]=Kt(c,t||a,r,void 0,e)):delete s[r]);if(r!==i)for(const e in r)t&&b(t,e)||delete r[e]}else if(8&l){const n=e.vnode.dynamicProps;for(let o=0;o{const{vnode:o,slots:s}=e;let r=!0,l=a;if(32&o.shapeFlag){const e=t._;e?n&&1===e?r=!1:(g(s,t),n||1!==e||delete s._):(r=!t.$stable,Sn(t,s)),l=t}else t&&(Cn(e,t),l={default:1});if(r)for(const i in s)bn(i)||i in l||delete s[i]})(e,t.children,n),ne(),Ft(void 0,e.update),oe()},X=(e,t,n,o,s,r,l,i,c=!1)=>{const u=e&&e.children,a=e?e.shapeFlag:0,f=t.children,{patchFlag:p,shapeFlag:h}=t;if(p>0){if(128&p)return void K(u,f,n,o,s,r,l,i,c);if(256&p)return void Y(u,f,n,o,s,r,l,i,c)}8&h?(16&a&&se(u,s,r),f!==u&&d(n,f)):16&a?16&h?K(u,f,n,o,s,r,l,i,c):se(u,s,r,!0):(8&a&&d(n,""),16&h&&R(f,n,o,s,r,l,i,c))},Y=(e,t,n,o,s,r,l,i,c)=>{t=t||f;const u=(e=e||f).length,a=t.length,p=Math.min(u,a);let d;for(d=0;da?se(e,s,r,!0,!1,p):R(t,n,o,s,r,l,i,c,p)},K=(e,t,n,o,s,r,l,i,c)=>{let u=0;const a=t.length;let p=e.length-1,d=a-1;for(;u<=p&&u<=d;){const o=e[u],a=t[u]=c?oo(t[u]):no(t[u]);if(!qn(o,a))break;x(o,a,n,null,s,r,l,i,c),u++}for(;u<=p&&u<=d;){const o=e[p],u=t[d]=c?oo(t[d]):no(t[d]);if(!qn(o,u))break;x(o,u,n,null,s,r,l,i,c),p--,d--}if(u>p){if(u<=d){const e=d+1,f=ed)for(;u<=p;)Z(e[u],s,r,!0),u++;else{const h=u,m=u,v=new Map;for(u=m;u<=d;u++){const e=t[u]=c?oo(t[u]):no(t[u]);null!=e.key&&v.set(e.key,u)}let g,_=0;const y=d-m+1;let b=!1,w=0;const S=new Array(y);for(u=0;u=y){Z(o,s,r,!0);continue}let a;if(null!=o.key)a=v.get(o.key);else for(g=m;g<=d;g++)if(0===S[g-m]&&qn(o,t[g])){a=g;break}void 0===a?Z(o,s,r,!0):(S[a-m]=u+1,a>=w?w=a:b=!0,x(o,t[a],n,null,s,r,l,i,c),_++)}const C=b?function(e){const t=e.slice(),n=[0];let o,s,r,l,i;const c=e.length;for(o=0;o0&&(t[o]=n[r-1]),n[r]=o)}}r=n.length,l=n[r-1];for(;r-- >0;)n[r]=l,l=t[l];return n}(S):f;for(g=C.length-1,u=y-1;u>=0;u--){const e=m+u,f=t[e],p=e+1{const{el:l,type:i,transition:c,children:u,shapeFlag:a}=e;if(6&a)return void q(e.component.subTree,t,o,s);if(128&a)return void e.suspense.move(t,o,s);if(64&a)return void i.move(e,t,o,ce);if(i===Un){n(l,t,o);for(let e=0;ec.enter(l)),r);else{const{leave:e,delayLeave:s,afterLeave:r}=c,i=()=>n(l,t,o),u=()=>{e(l,(()=>{i(),r&&r()}))};s?s(l,i,u):u()}else n(l,t,o)},Z=(e,t,n,o=!1,s=!1)=>{const{type:r,props:l,ref:i,children:c,dynamicChildren:u,shapeFlag:a,patchFlag:f,dirs:p}=e;if(null!=i&&Nn(i,null,n,null),256&a)return void t.ctx.deactivate(e);const d=1&a&&p;let h;if((h=l&&l.onVnodeBeforeUnmount)&&Tn(h,t,e),6&a)te(e.component,n,o);else{if(128&a)return void e.suspense.unmount(n,o);d&&kn(e,null,t,"beforeUnmount"),64&a?e.type.remove(e,t,n,s,ce,o):u&&(r!==Un||f>0&&64&f)?se(u,t,n,!1,!0):(r===Un&&(128&f||256&f)||!s&&16&a)&&se(c,t,n),o&&Q(e)}((h=l&&l.onVnodeUnmounted)||d)&&Rn((()=>{h&&Tn(h,t,e),d&&kn(e,null,t,"unmounted")}),n)},Q=e=>{const{type:t,el:n,anchor:s,transition:r}=e;if(t===Un)return void ee(n,s);if(t===zn)return void E(e);const l=()=>{o(n),r&&!r.persisted&&r.afterLeave&&r.afterLeave()};if(1&e.shapeFlag&&r&&!r.persisted){const{leave:t,delayLeave:o}=r,s=()=>t(n,l);o?o(e.el,l,s):s()}else l()},ee=(e,t)=>{let n;for(;e!==t;)n=m(e),o(e),e=n;o(t)},te=(e,t,n)=>{const{bum:o,effects:s,update:r,subTree:l,um:i}=e;if(o&&z(o),s)for(let c=0;c{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},se=(e,t,n,o=!1,s=!1,r=0)=>{for(let l=r;l6&e.shapeFlag?le(e.component.subTree):128&e.shapeFlag?e.suspense.next():m(e.anchor||e.el),ie=(e,t,n)=>{null==e?t._vnode&&Z(t._vnode,null,null,!0):x(t._vnode||null,e,t,null,null,null,n),Ot(),t._vnode=e},ce={p:x,um:Z,m:q,r:Q,mt:L,mc:R,pc:X,pbc:T,n:le,o:e};let ue,ae;t&&([ue,ae]=t(ce));return{render:ie,hydrate:ue,createApp:On(ie,ue)}}(e)}function Tn(e,t,n,o=null){ct(e,t,7,[n,o])}function jn(e,t,n=!1){const o=e.children,s=t.children;if(x(o)&&x(s))for(let r=0;rnull!=e?e:null,Zn=({ref:e})=>null!=e?k(e)||Qe(e)||C(e)?{i:$t,r:e}:e:null,Qn=function(e,t=null,n=null,s=0,r=null,l=!1){e&&e!==In||(e=Bn);if(Kn(e)){const o=eo(e,t,!0);return n&&so(o,n),o}c=e,C(c)&&"__vccOpts"in c&&(e=e.__vccOpts);var c;if(t){(Ge(t)||Gn in t)&&(t=g({},t));let{class:e,style:n}=t;e&&!k(e)&&(t.class=i(e)),F(n)&&(Ge(n)&&!x(n)&&(n=g({},n)),t.style=o(n))}const u=k(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:F(e)?4:C(e)?2:0,a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Jn(t),ref:t&&Zn(t),scopeId:It,slotScopeIds:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:u,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null};if(so(a,n),128&u){const{content:e,fallback:t}=function(e){const{shapeFlag:t,children:n}=e;let o,s;return 32&t?(o=Ht(n.default),s=Ht(n.fallback)):(o=Ht(n),s=no(null)),{content:o,fallback:s}}(a);a.ssContent=e,a.ssFallback=t}!l&&Wn&&(s>0||6&u)&&32!==s&&Wn.push(a);return a};function eo(e,t,n=!1){const{props:s,ref:r,patchFlag:l,children:c}=e,u=t?function(...e){const t=g({},e[0]);for(let n=1;n1)return n&&C(t)?t():t}}let io=!0;function co(e,t,n=[],o=[],s=[],r=!1){const{mixins:l,extends:i,data:c,computed:u,methods:f,watch:d,provide:h,inject:m,components:v,directives:_,beforeMount:y,mounted:b,beforeUpdate:w,updated:S,activated:k,deactivated:E,beforeDestroy:O,beforeUnmount:M,destroyed:P,unmounted:R,render:N,renderTracked:V,renderTriggered:T,errorCaptured:j,expose:$}=t,I=e.proxy,A=e.ctx,U=e.appContext.mixins;if(r&&N&&e.render===p&&(e.render=N),r||(io=!1,uo("beforeCreate","bc",t,e,U),io=!0,fo(e,U,n,o,s)),i&&co(e,i,n,o,s,!0),l&&fo(e,l,n,o,s),m)if(x(m))for(let a=0;apo(e,t,I))),c&&po(e,c,I)),u)for(const a in u){const e=u[a],t=Po({get:C(e)?e.bind(I,I):C(e.get)?e.get.bind(I,I):p,set:!C(e)&&C(e.set)?e.set.bind(I):p});Object.defineProperty(A,a,{enumerable:!0,configurable:!0,get:()=>t.value,set:e=>t.value=e})}var L;if(d&&o.push(d),!r&&o.length&&o.forEach((e=>{for(const t in e)ho(e[t],A,I,t)})),h&&s.push(h),!r&&s.length&&s.forEach((e=>{const t=C(e)?e.call(I):e;Reflect.ownKeys(t).forEach((e=>{ro(e,t[e])}))})),r&&(v&&g(e.components||(e.components=g({},e.type.components)),v),_&&g(e.directives||(e.directives=g({},e.type.directives)),_)),r||uo("created","c",t,e,U),y&&nn(y.bind(I)),b&&on(b.bind(I)),w&&sn(w.bind(I)),S&&rn(S.bind(I)),k&&_n(k.bind(I),"a",L),E&&function(e,t){_n(e,"da",t)}(E.bind(I)),j&&((e,t=wo)=>{en("ec",e,t)})(j.bind(I)),V&&an(V.bind(I)),T&&un(T.bind(I)),M&&ln(M.bind(I)),R&&cn(R.bind(I)),x($)&&!r)if($.length){const t=e.exposed||(e.exposed=st({}));$.forEach((e=>{t[e]=function(e,t){return Qe(e[t])?e[t]:new rt(e,t)}(I,e)}))}else e.exposed||(e.exposed=a)}function uo(e,t,n,o,s){for(let r=0;r{let t=e;for(let e=0;en[o];if(k(e)){const n=t[e];C(n)&&dn(s,n)}else if(C(e))dn(s,e.bind(n));else if(F(e))if(x(e))e.forEach((e=>ho(e,t,n,o)));else{const o=C(e.handler)?e.handler.bind(n):t[e.handler];C(o)&&dn(s,o,e)}}function mo(e,t,n){const o=n.appContext.config.optionMergeStrategies,{mixins:s,extends:r}=t;r&&mo(e,r,n),s&&s.forEach((t=>mo(e,t,n)));for(const l in t)o&&b(o,l)?e[l]=o[l](e[l],t[l],n.proxy,l):e[l]=t[l]}const vo=e=>e?Co(e)?e.exposed?e.exposed:e.proxy:vo(e.parent):null,go=g(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>vo(e.parent),$root:e=>vo(e.root),$emit:e=>e.emit,$options:e=>function(e){const t=e.type,{__merged:n,mixins:o,extends:s}=t;if(n)return n;const r=e.appContext.mixins;if(!r.length&&!o&&!s)return t;const l={};return r.forEach((t=>mo(l,t,e))),mo(l,t,e),t.__merged=l}(e),$forceUpdate:e=>()=>Ct(e.update),$nextTick:e=>St.bind(e.proxy),$watch:e=>mn.bind(e)}),_o={get({_:e},t){const{ctx:n,setupState:o,data:s,props:r,accessCache:l,type:i,appContext:c}=e;if("__v_skip"===t)return!0;let u;if("$"!==t[0]){const i=l[t];if(void 0!==i)switch(i){case 0:return o[t];case 1:return s[t];case 3:return n[t];case 2:return r[t]}else{if(o!==a&&b(o,t))return l[t]=0,o[t];if(s!==a&&b(s,t))return l[t]=1,s[t];if((u=e.propsOptions[0])&&b(u,t))return l[t]=2,r[t];if(n!==a&&b(n,t))return l[t]=3,n[t];io&&(l[t]=4)}}const f=go[t];let p,d;return f?("$attrs"===t&&se(e,0,t),f(e)):(p=i.__cssModules)&&(p=p[t])?p:n!==a&&b(n,t)?(l[t]=3,n[t]):(d=c.config.globalProperties,b(d,t)?d[t]:void 0)},set({_:e},t,n){const{data:o,setupState:s,ctx:r}=e;if(s!==a&&b(s,t))s[t]=n;else if(o!==a&&b(o,t))o[t]=n;else if(b(e.props,t))return!1;return("$"!==t[0]||!(t.slice(1)in e))&&(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:s,propsOptions:r}},l){let i;return void 0!==n[l]||e!==a&&b(e,l)||t!==a&&b(t,l)||(i=r[0])&&b(i,l)||b(o,l)||b(go,l)||b(s.config.globalProperties,l)}},yo=g({},_o,{get(e,t){if(t!==Symbol.unscopables)return _o.get(e,t,e)},has:(e,n)=>"_"!==n[0]&&!t(n)}),bo=En();let xo=0;let wo=null;const So=e=>{wo=e};function Co(e){return 4&e.vnode.shapeFlag}let ko=!1;function Eo(e,t,n){C(t)?e.render=t:F(t)&&(e.setupState=st(t)),Fo(e)}function Fo(e,t){const n=e.type;e.render||(e.render=n.render||p,e.render._rc&&(e.withProxy=new Proxy(e.ctx,yo))),wo=e,ne(),co(e,n),oe(),wo=null}function Oo(e,t=wo){t&&(t.effects||(t.effects=[])).push(e)}function Mo(e){return C(e)&&e.displayName||e.name}function Po(e){const t=function(e){let t,n;return C(e)?(t=e,n=p):(t=e.get,n=e.set),new lt(t,n,C(e)||!e.set)}(e);return Oo(t.effect),t}function Ro(e,t,n){const o=arguments.length;return 2===o?F(t)&&!x(t)?Kn(t)?Qn(e,null,[t]):Qn(e,t):Qn(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&Kn(n)&&(n=[n]),Qn(e,t,n))}const No="3.0.11",Vo="http://www.w3.org/2000/svg",To="undefined"!=typeof document?document:null;let jo,$o;const Io={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const s=t?To.createElementNS(Vo,e):To.createElement(e,n?{is:n}:void 0);return"select"===e&&o&&null!=o.multiple&&s.setAttribute("multiple",o.multiple),s},createText:e=>To.createTextNode(e),createComment:e=>To.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>To.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o){const s=o?$o||($o=To.createElementNS(Vo,"svg")):jo||(jo=To.createElement("div"));s.innerHTML=e;const r=s.firstChild;let l=r,i=l;for(;l;)i=l,Io.insert(l,t,n),l=s.firstChild;return[r,i]}};const Ao=/\s*!important$/;function Uo(e,t,n){if(x(n))n.forEach((n=>Uo(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const o=function(e,t){const n=Bo[t];if(n)return n;let o=$(t);if("filter"!==o&&o in e)return Bo[t]=o;o=U(o);for(let s=0;sdocument.createEvent("Event").timeStamp&&(Do=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);Wo=!!(e&&Number(e[1])<=53)}let Ho=0;const Xo=Promise.resolve(),Yo=()=>{Ho=0};function Ko(e,t,n,o,s=null){const r=e._vei||(e._vei={}),l=r[t];if(o&&l)l.value=o;else{const[n,i]=function(e){let t;if(qo.test(e)){let n;for(t={};n=e.match(qo);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[A(e.slice(2)),t]}(t);if(o){!function(e,t,n,o){e.addEventListener(t,n,o)}(e,n,r[t]=function(e,t){const n=e=>{const o=e.timeStamp||Do();(Wo||o>=n.attached-1)&&ct(function(e,t){if(x(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>Ho||(Xo.then(Yo),Ho=Do()))(),n}(o,s),i)}else l&&(!function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,l,i),r[t]=void 0)}}const qo=/(?:Once|Passive|Capture)$/;const Go=/^on[a-z]/;const Jo=g({patchProp:(e,t,o,s,r=!1,l,i,c,u)=>{switch(t){case"class":!function(e,t,n){if(null==t&&(t=""),n)e.setAttribute("class",t);else{const n=e._vtc;n&&(t=(t?[t,...n]:[...n]).join(" ")),e.className=t}}(e,s,r);break;case"style":!function(e,t,n){const o=e.style;if(n)if(k(n)){if(t!==n){const t=o.display;o.cssText=n,"_vod"in e&&(o.display=t)}}else{for(const e in n)Uo(o,e,n[e]);if(t&&!k(t))for(const e in t)null==n[e]&&Uo(o,e,"")}else e.removeAttribute("style")}(e,o,s);break;default:m(t)?v(t)||Ko(e,t,0,s,i):function(e,t,n,o){if(o)return"innerHTML"===t||!!(t in e&&Go.test(t)&&C(n));if("spellcheck"===t||"draggable"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if(Go.test(t)&&k(n))return!1;return t in e}(e,t,s,r)?function(e,t,n,o,s,r,l){if("innerHTML"===t||"textContent"===t)return o&&l(o,s,r),void(e[t]=null==n?"":n);if("value"!==t||"PROGRESS"===e.tagName){if(""===n||null==n){const o=typeof e[t];if(""===n&&"boolean"===o)return void(e[t]=!0);if(null==n&&"string"===o)return e[t]="",void e.removeAttribute(t);if("number"===o)return e[t]=0,void e.removeAttribute(t)}try{e[t]=n}catch(i){}}else{e._value=n;const t=null==n?"":n;e.value!==t&&(e.value=t)}}(e,t,s,l,i,c,u):("true-value"===t?e._trueValue=s:"false-value"===t&&(e._falseValue=s),function(e,t,o,s){if(s&&t.startsWith("xlink:"))null==o?e.removeAttributeNS(zo,t.slice(6,t.length)):e.setAttributeNS(zo,t,o);else{const s=n(t);null==o||s&&!1===o?e.removeAttribute(t):e.setAttribute(t,s?"":o)}}(e,t,s,r))}},forcePatchProp:(e,t)=>"value"===t},Io);let Zo;const Qo=(...e)=>{const t=(Zo||(Zo=Vn(Jo))).createApp(...e),{mount:n}=t;return t.mount=e=>{const o=function(e){if(k(e)){return document.querySelector(e)}return e}(e);if(!o)return;const s=t._component;C(s)||s.render||s.template||(s.template=o.innerHTML),o.innerHTML="";const r=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t};var es=Mn({props:["modelValue"],setup:(e,{emit:t})=>({onClick:()=>{t("update:modelValue",!e.modelValue)}}),render(){var e,t;const n=(null==(t=(e=this.$slots).default)?void 0:t.call(e))||[];return Ro("button",{onClick:this.onClick},n)}}),ts=Mn({props:["modelValue"],setup:(e,{emit:t})=>({onMouseup:()=>{t("update:modelValue",!1)},onMousedown:()=>{t("update:modelValue",!0)}}),render(){var e,t;const n=(null==(t=(e=this.$slots).default)?void 0:t.call(e))||[];return Ro("button",{onMouseup:this.onMouseup,onMousedown:this.onMousedown},n)}}),ns=Mn({setup(){const e=lo("sliderContext");let t=!1;const n=()=>{t=!1,window.removeEventListener("mousemove",i),window.removeEventListener("touchmove",i),window.removeEventListener("mouseup",n),window.removeEventListener("touchend",n)};let o=0,s=0,r=0;const l=n=>{t=!0,"touchstart"===n.type&&(n.clientY=n.touches[0].clientY,n.clientX=n.touches[0].clientX),s=n.clientY,o=n.clientX,r=parseFloat(nt(e.currentPosition))},i=n=>{if(t)if("touchmove"===n.type&&(n.clientY=n.touches[0].clientY,n.clientX=n.touches[0].clientX),e.vertical){let t=(n.clientY-s)/400*100;e.setPosition(t+r)}else{let t=(n.clientX-o)/400*100;e.setPosition(t+r)}};return{onMousedown:e=>{l(e),window.addEventListener("mousemove",i),window.addEventListener("touchmove",i),window.addEventListener("mouseup",n),window.addEventListener("touchend",n)}}},render(){var e,t;const n=(null==(t=(e=this.$slots).default)?void 0:t.call(e))||[];return Ro("div",{onMousedown:this.onMousedown},n)}}),os=Mn({props:{modelValue:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},vertical:{type:Boolean,default:!1}},setup(e,{emit:t}){const n=Po((()=>(e.modelValue-nt(e.min))/(nt(e.max)-nt(e.min))*100+"%"));ro("sliderContext",{vertical:e.vertical,currentPosition:n,setPosition(n){if(null===n||isNaN(n))return;n<0?n=0:n>100&&(n=100);const o=100/((e.max-e.min)/e.step);console.log(e.step);let s=Math.round(n/o)*o*(e.max-e.min)*.01+e.min;s=parseFloat(s.toFixed(1)),t("update:modelValue",s)}})},render(){var e,t;return Ro("div",(null==(t=(e=this.$slots).default)?void 0:t.call(e))||[])}});export{ts as B,es as S,dn as a,$n as b,Hn as c,Yn as d,Ut as e,Qn as f,Po as g,Ro as h,os as i,ns as j,Mn as k,to as l,Qo as m,on as o,et as r,c as t,fn as w}; 2 | -------------------------------------------------------------------------------- /docs/webgl/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hug-sun/element3-core/a37360f10815bb6d30375baf1a3518e9def39bcc/docs/webgl/favicon.ico -------------------------------------------------------------------------------- /docs/webgl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
red
20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/webgl/style.css: -------------------------------------------------------------------------------- 1 | .red { 2 | color: blue; 3 | } 4 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Vue 3 + Typescript + Vite 2 | 3 | This template should help get you started developing with Vue 3 and Typescript in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur). Make sure to enable `vetur.experimental.templateInterpolationService` in settings! 8 | 9 | ### If Using ` 12 | 13 | 14 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "-", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "serve": "vite preview" 8 | }, 9 | "dependencies": { 10 | "element3-core": "0.0.7", 11 | "vue": "^3.0.5" 12 | }, 13 | "devDependencies": { 14 | "@vitejs/plugin-vue": "^1.2.2", 15 | "@vue/compiler-sfc": "^3.0.5", 16 | "autoprefixer": "^10.2.5", 17 | "postcss": "^8.2.15", 18 | "rollup-plugin-element3-webgl": "0.0.5", 19 | "tailwindcss": "^2.1.2", 20 | "typescript": "^4.1.3", 21 | "vite": "^2.3.0", 22 | "vue-tsc": "^0.0.24" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /example/postcss.config.js: -------------------------------------------------------------------------------- 1 | // postcss.config.js 2 | module.exports = { 3 | plugins: { 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /example/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hug-sun/element3-core/a37360f10815bb6d30375baf1a3518e9def39bcc/example/public/favicon.ico -------------------------------------------------------------------------------- /example/src/App.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 71 | 72 | 88 | -------------------------------------------------------------------------------- /example/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hug-sun/element3-core/a37360f10815bb6d30375baf1a3518e9def39bcc/example/src/assets/logo.png -------------------------------------------------------------------------------- /example/src/components/Button/Button.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 124 | 125 | 130 | -------------------------------------------------------------------------------- /example/src/components/Slider/HSlider.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /example/src/components/Slider/RotateSlider.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /example/src/components/Slider/VSlider.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /example/src/components/Switch/Switch.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /example/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | import "tailwindcss/tailwind.css"; 4 | 5 | createApp(App).mount("#app"); 6 | -------------------------------------------------------------------------------- /example/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import { DefineComponent } from 'vue' 3 | const component: DefineComponent<{}, {}, any> 4 | export default component 5 | } 6 | -------------------------------------------------------------------------------- /example/src/webglComponents/draw.frag: -------------------------------------------------------------------------------- 1 | precision mediump float; 2 | uniform vec4 u_FragColor; 3 | const mat2 m = mat2( 0.80, 0.60, -0.60, 0.80 ); 4 | 5 | float noise( in vec2 p ) 6 | { 7 | return sin(p.x)*sin(p.y); 8 | } 9 | 10 | float fbm4( vec2 p ) 11 | { 12 | float f = 0.0; 13 | f += 0.5000*noise( p ); p = m*p*2.02; 14 | f += 0.2500*noise( p ); p = m*p*2.03; 15 | f += 0.1250*noise( p ); p = m*p*2.01; 16 | f += 0.0625*noise( p ); 17 | return f/0.9375; 18 | } 19 | 20 | float fbm6( vec2 p ) 21 | { 22 | float f = 0.0; 23 | f += 0.500000*(0.5+0.5*noise( p )); p = m*p*2.02; 24 | f += 0.250000*(0.5+0.5*noise( p )); p = m*p*2.03; 25 | f += 0.125000*(0.5+0.5*noise( p )); p = m*p*2.01; 26 | f += 0.062500*(0.5+0.5*noise( p )); p = m*p*2.04; 27 | f += 0.031250*(0.5+0.5*noise( p )); p = m*p*2.01; 28 | f += 0.015625*(0.5+0.5*noise( p )); 29 | return f/0.96875; 30 | } 31 | 32 | vec2 fbm4_2( vec2 p ) 33 | { 34 | return vec2(fbm4(p), fbm4(p+vec2(7.8))); 35 | } 36 | 37 | vec2 fbm6_2( vec2 p ) 38 | { 39 | return vec2(fbm6(p+vec2(16.8)), fbm6(p+vec2(11.5))); 40 | } 41 | uniform float iTime; 42 | vec3 iResolution = vec3(100.0, 100.0, 1.0); 43 | float func( vec2 q, out vec4 ron ) 44 | { 45 | q += 0.03*sin( vec2(0.27,0.23)*iTime + length(q)*vec2(4.1,4.3)); 46 | 47 | vec2 o = fbm4_2( 0.9*q ); 48 | 49 | o += 0.04*sin( vec2(0.12,0.14)*iTime + length(o)); 50 | 51 | vec2 n = fbm6_2( 3.0*o ); 52 | 53 | ron = vec4( o, n ); 54 | 55 | float f = 0.5 + 0.5*fbm4( 1.8*q + 6.0*n ); 56 | 57 | return mix( f, f*f*f*3.5, f*abs(n.x) ); 58 | } 59 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 60 | { 61 | vec3 r = vec3(100.0, 100.0, 1.0); 62 | vec2 p = (2.0*fragCoord-r.xy)/r.y; 63 | float e = 2.0/r.y; 64 | 65 | vec4 on = vec4(0.0); 66 | float f = func(p, on); 67 | 68 | vec3 col = vec3(0.0); 69 | col = mix( vec3(0.2,0.1,0.4), vec3(0.3,0.05,0.05), f ); 70 | col = mix( col, vec3(0.9,0.9,0.9), dot(on.zw,on.zw) ); 71 | col = mix( col, vec3(0.4,0.3,0.3), 0.2 + 0.5*on.y*on.y ); 72 | col = mix( col, vec3(0.0,0.2,0.4), 0.5*smoothstep(1.2,1.3,abs(on.z)+abs(on.w)) ); 73 | col = clamp( col*f*2.0, 0.0, 1.0 ); 74 | 75 | #if 0 76 | // gpu derivatives - bad quality, but fast 77 | vec3 nor = normalize( vec3( dFdx(f)*iResolution.x, 6.0, dFdy(f)*iResolution.y ) ); 78 | #else 79 | // manual derivatives - better quality, but slower 80 | vec4 kk; 81 | vec3 nor = normalize( vec3( func(p+vec2(e,0.0),kk)-f, 82 | 2.0*e, 83 | func(p+vec2(0.0,e),kk)-f ) ); 84 | #endif 85 | 86 | vec3 lig = normalize( vec3( 0.9, 0.2, -0.4 ) ); 87 | float dif = clamp( 0.3+0.7*dot( nor, lig ), 0.0, 1.0 ); 88 | vec3 lin = vec3(0.70,0.90,0.95)*(nor.y*0.5+0.5) + vec3(0.15,0.10,0.05)*dif; 89 | col *= 1.2*lin; 90 | col = 1.0 - col; 91 | col = 1.1*col*col; 92 | 93 | fragColor = vec4( col, 1.0 ); 94 | } 95 | 96 | void main(){ 97 | vec4 a = vec4(1.0, 1.0, 1.0, 1.0); 98 | vec4 color = vec4(1.0, 1.0, 1.0, 1.0); 99 | vec4 coord = gl_FragCoord; 100 | mainImage(color, coord.xy); 101 | 102 | gl_FragColor=color; 103 | } -------------------------------------------------------------------------------- /example/src/webglComponents/metal-button.frag: -------------------------------------------------------------------------------- 1 | precision highp float; 2 | 3 | #define OCTAVES 6 4 | 5 | uniform float m1; 6 | uniform float m2; 7 | 8 | uniform float iWidth; 9 | uniform float iHeight; 10 | 11 | uniform float r; 12 | uniform float g; 13 | uniform float b; 14 | 15 | 16 | highp float random(vec2 co) 17 | { 18 | highp float a = 12.9898; 19 | highp float b = 78.233; 20 | highp float c = 43758.5453; 21 | highp float dt= dot(co.xy ,vec2(a,b)); 22 | highp float sn= mod(dt,3.14); 23 | return fract(sin(sn) * c); 24 | } 25 | 26 | float noise (in vec2 st) { 27 | vec2 i = floor(st); 28 | vec2 f = fract(st); 29 | 30 | // Four corners in 2D of a tile 31 | highp float a = random(vec2(i.x, i.y)); 32 | highp float b = random(floor(vec2(i.x + 1., i.y))); 33 | highp float c = random(floor(vec2(i.x, i.y + 1.))); 34 | highp float d = random(floor(vec2(i.x + 1., i.y + 1.))); 35 | 36 | vec2 u = f*f*(3.0-2.0*f); 37 | // u = smoothstep(0.,1.,f); 38 | 39 | // Mix 4 coorners percentages 40 | //return a; 41 | return mix(a, b, u.x) + 42 | (c - a)* u.y * (1.0 - u.x) + 43 | (d - b) * u.x * u.y; 44 | } 45 | 46 | float fbm (in vec2 st) { 47 | // Initial values 48 | float value = 0.0; 49 | float amplitude = .5; 50 | float frequency = 0.; 51 | // 52 | // Loop of octaves 53 | for (int i = 0; i < OCTAVES; i++) { 54 | value += amplitude * noise(st); 55 | st *= 3.; 56 | amplitude *= .7; 57 | } 58 | return value; 59 | } 60 | 61 | vec2 roundToPrec(in vec2 st, float prec) { 62 | return floor(st / prec) * prec; 63 | } 64 | 65 | 66 | const int count = 15; 67 | 68 | vec3 blur(vec2 st, float prec){ 69 | vec4 color = vec4(0, 0, 0, 0); 70 | float theta = atan(1., 2.); 71 | 72 | for(int i = -count; i <= count; i++) { 73 | float v = random(roundToPrec(st + vec2(float(i) * 0.5 , float(i)) * 0.4, 0.4)) ; 74 | color = color + vec4(vec3(v / (float(count) * 2.0 + 1.0)) , 1.0); 75 | } 76 | return color.xyz; 77 | } 78 | 79 | vec3 gradient(vec2 st) { 80 | float d = (st.x * 2. + st.y * 1.0); 81 | //d += iTime; 82 | vec3 color = vec3(r, g, b); 83 | 84 | //color = vec3(.85, .7, .45); 85 | float v = (sin(d / iWidth * 1.)); 86 | return vec3((color + v + 3.) / 4.); 87 | } 88 | 89 | vec4 gradient2(vec2 co) 90 | { 91 | vec4 color = vec4(0.0, 1.0, 1.0, 1.0); 92 | float x = co.x - iWidth / 2.; 93 | float y = co.y - iHeight / 2.; 94 | float theta = atan(co.x - iWidth / 2., co.y - iHeight / 2.); 95 | //theta += iTime; 96 | float r = sqrt(x * x + y * y); 97 | color = vec4(vec3(sin(theta * 4.0) + 3.0) / 4.0, 1.0); 98 | return color; 99 | } 100 | 101 | void main() { 102 | vec2 st = gl_FragCoord.xy/600.0; 103 | 104 | vec3 color1 = vec3(0.0); 105 | color1 += fbm(st*1.0); 106 | 107 | vec3 color2 = blur(gl_FragCoord.xy, 0.1); 108 | 109 | vec3 color3 = gradient(gl_FragCoord.xy).xyz; 110 | 111 | vec3 color = mix(color3, color2, m1 / 100.); 112 | 113 | gl_FragColor = vec4(color.xyz, 1.0); 114 | //gl_FragColor = vec4(0., 0., 0., 1.); 115 | } 116 | 117 | -------------------------------------------------------------------------------- /example/src/webglComponents/metal.frag: -------------------------------------------------------------------------------- 1 | precision highp float; 2 | 3 | #define OCTAVES 6 4 | 5 | uniform float m1; 6 | uniform float m2; 7 | 8 | uniform float iWidth; 9 | uniform float iHeight; 10 | 11 | uniform float r; 12 | uniform float g; 13 | uniform float b; 14 | 15 | float radius=8.0; 16 | 17 | vec3 rgb=vec3(r,g,b); 18 | 19 | vec2 u_CanvasSize = vec2(iWidth, iHeight); 20 | vec2 center = u_CanvasSize / 2.0; 21 | float len1 = length(center); 22 | float pi = acos(-1.0); 23 | 24 | //渐变 25 | float texture1(float x) { 26 | float a = x / u_CanvasSize.x; 27 | float b = radians(360.0) * 0.5 * a+1.0; 28 | return (sin(b) + 1.0) / 2.0; 29 | } 30 | 31 | //水平拉丝 32 | float texture2(vec2 v) { 33 | vec2 a = vec2(0.2222, 0.4444); 34 | float n = dot(v, a); 35 | return fract(tan(n)); 36 | } 37 | 38 | //杂色 39 | float texture3(vec2 v) { 40 | vec2 a = vec2(0.1234, 0.5678); 41 | float n = dot(v, a); 42 | return fract(tan(n) * 10000.0); 43 | } 44 | 45 | 46 | 47 | 48 | void main() { 49 | //极坐标系转二维直角坐标系 50 | //渐变 51 | float f1 = texture1(gl_FragCoord.x*cos(1.)-gl_FragCoord.y*sin(1.)); 52 | f1 = 0.65 * f1 + 0.35; 53 | 54 | //拉丝 55 | float f2 = texture2(gl_FragCoord.xy); 56 | f2 = f2*0.3+0.5; 57 | 58 | //杂色 59 | float f3 = texture3(gl_FragCoord.xy); 60 | 61 | //复合颜色 62 | float f = f1*f2; 63 | vec3 color=rgb * f; 64 | color*=1.4; 65 | gl_FragColor = vec4(color, 1); 66 | } 67 | 68 | -------------------------------------------------------------------------------- /example/src/webglComponents/metal2.frag: -------------------------------------------------------------------------------- 1 | precision mediump float; 2 | 3 | uniform float iTime; 4 | uniform float iWidth; 5 | uniform float iHeight; 6 | 7 | highp float rand(vec2 co) 8 | { 9 | /*if(int(co.x) < 50 && int(co.x) > 46 && int(co.y) < 50 && int(co.y) > 46) { 10 | return 0.0; 11 | } else { 12 | return 1.0; 13 | }*/ 14 | co = vec2(float(int(co.x / 0.5)), float(int(co.y / 0.5))); 15 | highp float a = 12.9898; 16 | highp float b = 78.233; 17 | highp float c = 43758.5453; 18 | highp float dt= dot(co.xy ,vec2(a,b)); 19 | highp float sn= mod(dt,3.14); 20 | return fract(sin(sn) * c); 21 | } 22 | const int count = 15; 23 | 24 | vec4 blur(vec2 co) 25 | { 26 | vec4 color = vec4(0.0, 0.0, 0.0, 0.0); 27 | float x = co.x - iWidth / 2.; 28 | float y = co.y - iHeight / 2.; 29 | 30 | float theta = atan(co.y - iHeight / 2., co.x - iWidth / 2.); 31 | float r = sqrt(x * x + y * y); 32 | 33 | for(int i = -count; i <= count; i++) { 34 | float v1 = rand( vec2(cos(theta + float(i) / r) * r, sin(theta + float(i) / r) * r)) / (float(count) * 2.0 - 1.0); 35 | color = color + vec4(v1, v1, v1, 1.0); 36 | } 37 | return color; 38 | } 39 | 40 | vec4 gradient(vec2 co) 41 | { 42 | vec4 color = vec4(0.0, 1.0, 1.0, 1.0); 43 | float x = co.x - iWidth / 2.; 44 | float y = co.y - iHeight / 2.; 45 | float theta = atan(co.y - iWidth / 2., co.x - iHeight / 2.); 46 | theta += iTime; 47 | float r = sqrt(x * x + y * y); 48 | color = vec4(vec3(sin(theta * 4.0) + 3.0) / 4.0, 1.0); 49 | return color; 50 | } 51 | 52 | 53 | 54 | void main(){ 55 | gl_FragColor = mix(gradient(gl_FragCoord.xy), blur(gl_FragCoord.xy), 0.4) ; 56 | } -------------------------------------------------------------------------------- /example/src/webglComponents/metal3.frag: -------------------------------------------------------------------------------- 1 | precision mediump float; 2 | 3 | uniform float iTime; 4 | uniform float iWidth; 5 | uniform float iHeight; 6 | 7 | vec2 u_CanvasSize=vec2(iWidth,iHeight); 8 | vec2 center = u_CanvasSize / 2.0; 9 | float len1 = length(center); 10 | float pi = radians(360.0) / 2.0; 11 | 12 | 13 | //渐变 14 | float texture1(float x) { 15 | float a = x / u_CanvasSize.x; 16 | float b = radians(360.0) * 5.0 * a; 17 | return (sin(b) + 1.0) / 2.0; 18 | } 19 | 20 | //水平拉丝 21 | float texture2(vec2 v) { 22 | vec2 a = vec2(0.0, 1.0); 23 | float n = dot(v, a); 24 | return fract(tan(n) * 10000.0); 25 | } 26 | 27 | //杂色 28 | float texture3(vec2 v) { 29 | vec2 a = vec2(0.1234, 0.5678); 30 | float n = dot(v, a); 31 | return fract(tan(n) * 10000.0); 32 | } 33 | 34 | //比例尺 35 | float scaler(float ax, float ay, float bx, float by, float x) { 36 | float x1 = bx - ax; 37 | float y1 = by - ay; 38 | float k = y1 / x1; 39 | float b = ay - ax * k; 40 | return k * x + b; 41 | } 42 | 43 | 44 | 45 | void main(){ 46 | //极坐标系转二维直角坐标系 47 | vec2 p = gl_FragCoord.xy - center; 48 | float len2 = length(p); 49 | float ang = atan(p.y, p.x); 50 | float x = scaler(-pi, 0.0, pi, u_CanvasSize.x, ang); 51 | float y = (len2 / len1) * u_CanvasSize.y; 52 | 53 | //渐变 54 | float f1 = texture1(x); 55 | f1 = 0.65 * f1 + 0.35; 56 | 57 | //拉丝 58 | float f2 = texture2(vec2(int(x), int(y))); 59 | f2 = clamp(f2, 0.75, 0.8); 60 | 61 | //杂色 62 | float f3 = texture3(gl_FragCoord.xy); 63 | 64 | //复合颜色 65 | float f = (f1 * f2 + f3 * 0.07) * 1.2; 66 | 67 | 68 | //平行光方向 69 | vec2 lightDir1 = normalize(vec2(0.5, -1)); 70 | vec2 lightDir2 = lightDir1 * -1.0; 71 | 72 | //片元和光线的夹角 73 | float cosAng1 = (dot(normalize(p), lightDir1) + 1.0) / 1.5 + 0.3; 74 | //cosAng1*=cosAng1/2.0; 75 | float cosAng2 = (dot(normalize(p), lightDir2) + 1.0) / 4.0 + 0.2; 76 | float cosAng3 = (dot(normalize(p), lightDir2) + 1.0) / 2.0 + 0.3; 77 | cosAng3 *= cosAng3; 78 | float cosAng4 = (dot(normalize(p), lightDir1) + 1.0) / 2.0 + 0.3; 79 | 80 | //扩展1 81 | float expand1=2.0; 82 | float expand2=4.0; 83 | float expand3=2.0; 84 | float expand4=3.0; 85 | 86 | //初始半径 87 | float r = center.y-expand1-expand2-expand3-expand4; 88 | 89 | float r1 = r + expand1; 90 | float r2 = r1 + expand2; 91 | float r3 = r2 + expand3; 92 | 93 | if(len2 < r) { 94 | gl_FragColor = vec4(vec3(f), 1); 95 | } else if(len2 >= r && len2 < r1) { 96 | f *= cosAng1; 97 | } else if(len2 >= r1 && len2 < r2) { 98 | f *= cosAng2; 99 | } else if(len2 >= r2 && len2 < r3) { 100 | f *= cosAng3; 101 | } 102 | 103 | gl_FragColor = vec4(vec3(f), 1); 104 | 105 | } -------------------------------------------------------------------------------- /example/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: [], 3 | darkMode: false, // or 'media' or 'class' 4 | theme: { 5 | extend: {}, 6 | }, 7 | variants: {}, 8 | plugins: [], 9 | }; 10 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "jsx": "preserve", 8 | "sourceMap": true, 9 | "resolveJsonModule": true, 10 | "esModuleInterop": true, 11 | "lib": ["esnext", "dom"], 12 | "types": ["vite/client"], 13 | "noImplicitAny": false 14 | }, 15 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] 16 | } 17 | -------------------------------------------------------------------------------- /example/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import vue from "@vitejs/plugin-vue"; 3 | import element3Webgl from "rollup-plugin-element3-webgl"; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | base: "/webgl", // TODO 开发环境是 / 生产环境是 /webgl 8 | plugins: [vue(), element3Webgl()], 9 | }); 10 | -------------------------------------------------------------------------------- /example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/helper-validator-identifier@^7.14.0": 6 | version "7.14.0" 7 | resolved "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.0.tgz?cache=0&sync_timestamp=1619727412592&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" 8 | integrity sha1-0mytikfGUoaxXfFUcxml0Lzycog= 9 | 10 | "@babel/parser@^7.12.0", "@babel/parser@^7.13.9": 11 | version "7.14.3" 12 | resolved "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.14.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.14.3.tgz#9b530eecb071fd0c93519df25c5ff9f14759f298" 13 | integrity sha1-m1MO7LBx/QyTUZ3yXF/58UdZ8pg= 14 | 15 | "@babel/types@^7.12.0", "@babel/types@^7.13.0": 16 | version "7.14.2" 17 | resolved "https://registry.nlark.com/@babel/types/download/@babel/types-7.14.2.tgz?cache=0&sync_timestamp=1620839504820&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" 18 | integrity sha1-QgiuADEH74oFfqgzPlbrZNL2osM= 19 | dependencies: 20 | "@babel/helper-validator-identifier" "^7.14.0" 21 | to-fast-properties "^2.0.0" 22 | 23 | "@fullhuman/postcss-purgecss@^3.1.3": 24 | version "3.1.3" 25 | resolved "https://registry.npm.taobao.org/@fullhuman/postcss-purgecss/download/@fullhuman/postcss-purgecss-3.1.3.tgz#47af7b87c9bfb3de4bc94a38f875b928fffdf339" 26 | integrity sha1-R697h8m/s95LyUo4+HW5KP/98zk= 27 | dependencies: 28 | purgecss "^3.1.3" 29 | 30 | "@nodelib/fs.scandir@2.1.4": 31 | version "2.1.4" 32 | resolved "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.4.tgz?cache=0&sync_timestamp=1609074594471&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" 33 | integrity sha1-1LNUml213iaD4MEHGrTxQJBLv2k= 34 | dependencies: 35 | "@nodelib/fs.stat" "2.0.4" 36 | run-parallel "^1.1.9" 37 | 38 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": 39 | version "2.0.4" 40 | resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" 41 | integrity sha1-o/LdYbq0O424+hCKEhz//kxnZlU= 42 | 43 | "@nodelib/fs.walk@^1.2.3": 44 | version "1.2.6" 45 | resolved "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" 46 | integrity sha1-zOk5azCqWv6eN1Zgj1gxrctT0GM= 47 | dependencies: 48 | "@nodelib/fs.scandir" "2.1.4" 49 | fastq "^1.6.0" 50 | 51 | "@vitejs/plugin-vue@^1.2.2": 52 | version "1.2.2" 53 | resolved "https://registry.nlark.com/@vitejs/plugin-vue/download/@vitejs/plugin-vue-1.2.2.tgz#b0038fc11b9099f4cd01fcbf0ee419adda417b52" 54 | integrity sha1-sAOPwRuQmfTNAfy/DuQZrdpBe1I= 55 | 56 | "@vue/compiler-core@3.0.11": 57 | version "3.0.11" 58 | resolved "https://registry.nlark.com/@vue/compiler-core/download/@vue/compiler-core-3.0.11.tgz?cache=0&sync_timestamp=1620856071726&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcompiler-core%2Fdownload%2F%40vue%2Fcompiler-core-3.0.11.tgz#5ef579e46d7b336b8735228758d1c2c505aae69a" 59 | integrity sha1-XvV55G17M2uHNSKHWNHCxQWq5po= 60 | dependencies: 61 | "@babel/parser" "^7.12.0" 62 | "@babel/types" "^7.12.0" 63 | "@vue/shared" "3.0.11" 64 | estree-walker "^2.0.1" 65 | source-map "^0.6.1" 66 | 67 | "@vue/compiler-dom@3.0.11": 68 | version "3.0.11" 69 | resolved "https://registry.nlark.com/@vue/compiler-dom/download/@vue/compiler-dom-3.0.11.tgz#b15fc1c909371fd671746020ba55b5dab4a730ee" 70 | integrity sha1-sV/ByQk3H9ZxdGAgulW12rSnMO4= 71 | dependencies: 72 | "@vue/compiler-core" "3.0.11" 73 | "@vue/shared" "3.0.11" 74 | 75 | "@vue/compiler-sfc@^3.0.5": 76 | version "3.0.11" 77 | resolved "https://registry.nlark.com/@vue/compiler-sfc/download/@vue/compiler-sfc-3.0.11.tgz?cache=0&sync_timestamp=1620856029904&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcompiler-sfc%2Fdownload%2F%40vue%2Fcompiler-sfc-3.0.11.tgz#cd8ca2154b88967b521f5ad3b10f5f8b6b665679" 78 | integrity sha1-zYyiFUuIlntSH1rTsQ9fi2tmVnk= 79 | dependencies: 80 | "@babel/parser" "^7.13.9" 81 | "@babel/types" "^7.13.0" 82 | "@vue/compiler-core" "3.0.11" 83 | "@vue/compiler-dom" "3.0.11" 84 | "@vue/compiler-ssr" "3.0.11" 85 | "@vue/shared" "3.0.11" 86 | consolidate "^0.16.0" 87 | estree-walker "^2.0.1" 88 | hash-sum "^2.0.0" 89 | lru-cache "^5.1.1" 90 | magic-string "^0.25.7" 91 | merge-source-map "^1.1.0" 92 | postcss "^8.1.10" 93 | postcss-modules "^4.0.0" 94 | postcss-selector-parser "^6.0.4" 95 | source-map "^0.6.1" 96 | 97 | "@vue/compiler-ssr@3.0.11": 98 | version "3.0.11" 99 | resolved "https://registry.nlark.com/@vue/compiler-ssr/download/@vue/compiler-ssr-3.0.11.tgz?cache=0&sync_timestamp=1620856071906&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcompiler-ssr%2Fdownload%2F%40vue%2Fcompiler-ssr-3.0.11.tgz#ac5a05fd1257412fa66079c823d8203b6a889a13" 100 | integrity sha1-rFoF/RJXQS+mYHnII9ggO2qImhM= 101 | dependencies: 102 | "@vue/compiler-dom" "3.0.11" 103 | "@vue/shared" "3.0.11" 104 | 105 | "@vue/reactivity@3.0.11": 106 | version "3.0.11" 107 | resolved "https://registry.nlark.com/@vue/reactivity/download/@vue/reactivity-3.0.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Freactivity%2Fdownload%2F%40vue%2Freactivity-3.0.11.tgz#07b588349fd05626b17f3500cbef7d4bdb4dbd0b" 108 | integrity sha1-B7WINJ/QViaxfzUAy+99S9tNvQs= 109 | dependencies: 110 | "@vue/shared" "3.0.11" 111 | 112 | "@vue/runtime-core@3.0.11": 113 | version "3.0.11" 114 | resolved "https://registry.nlark.com/@vue/runtime-core/download/@vue/runtime-core-3.0.11.tgz#c52dfc6acf3215493623552c1c2919080c562e44" 115 | integrity sha1-xS38as8yFUk2I1UsHCkZCAxWLkQ= 116 | dependencies: 117 | "@vue/reactivity" "3.0.11" 118 | "@vue/shared" "3.0.11" 119 | 120 | "@vue/runtime-dom@3.0.11": 121 | version "3.0.11" 122 | resolved "https://registry.nlark.com/@vue/runtime-dom/download/@vue/runtime-dom-3.0.11.tgz?cache=0&sync_timestamp=1620856078760&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fruntime-dom%2Fdownload%2F%40vue%2Fruntime-dom-3.0.11.tgz#7a552df21907942721feb6961c418e222a699337" 123 | integrity sha1-elUt8hkHlCch/raWHEGOIippkzc= 124 | dependencies: 125 | "@vue/runtime-core" "3.0.11" 126 | "@vue/shared" "3.0.11" 127 | csstype "^2.6.8" 128 | 129 | "@vue/shared@3.0.11": 130 | version "3.0.11" 131 | resolved "https://registry.nlark.com/@vue/shared/download/@vue/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77" 132 | integrity sha1-INIt0Np9NYuyHBf5vehigVJkLHc= 133 | 134 | acorn-node@^1.6.1: 135 | version "1.8.2" 136 | resolved "https://registry.npm.taobao.org/acorn-node/download/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" 137 | integrity sha1-EUyV1kU55T3t4j3oudlt98euKvg= 138 | dependencies: 139 | acorn "^7.0.0" 140 | acorn-walk "^7.0.0" 141 | xtend "^4.0.2" 142 | 143 | acorn-walk@^7.0.0: 144 | version "7.2.0" 145 | resolved "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1619259236377&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 146 | integrity sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w= 147 | 148 | acorn@^7.0.0: 149 | version "7.4.1" 150 | resolved "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1620134156200&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 151 | integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= 152 | 153 | ansi-styles@^3.2.1: 154 | version "3.2.1" 155 | resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995625950&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 156 | integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= 157 | dependencies: 158 | color-convert "^1.9.0" 159 | 160 | ansi-styles@^4.1.0: 161 | version "4.3.0" 162 | resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1618995625950&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 163 | integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= 164 | dependencies: 165 | color-convert "^2.0.1" 166 | 167 | anymatch@~3.1.1: 168 | version "3.1.2" 169 | resolved "https://registry.nlark.com/anymatch/download/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 170 | integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= 171 | dependencies: 172 | normalize-path "^3.0.0" 173 | picomatch "^2.0.4" 174 | 175 | at-least-node@^1.0.0: 176 | version "1.0.0" 177 | resolved "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" 178 | integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI= 179 | 180 | autoprefixer@^10.2.5: 181 | version "10.2.5" 182 | resolved "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-10.2.5.tgz?cache=0&sync_timestamp=1614956773875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d" 183 | integrity sha1-CWoDN9vJbAhzUm1/713kQo0FOC0= 184 | dependencies: 185 | browserslist "^4.16.3" 186 | caniuse-lite "^1.0.30001196" 187 | colorette "^1.2.2" 188 | fraction.js "^4.0.13" 189 | normalize-range "^0.1.2" 190 | postcss-value-parser "^4.1.0" 191 | 192 | balanced-match@^1.0.0: 193 | version "1.0.2" 194 | resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 195 | integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= 196 | 197 | big-integer@^1.6.17: 198 | version "1.6.48" 199 | resolved "https://registry.npm.taobao.org/big-integer/download/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" 200 | integrity sha1-j9iL0WMsukocjD49cVnwi7lbS54= 201 | 202 | big.js@^5.2.2: 203 | version "5.2.2" 204 | resolved "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 205 | integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= 206 | 207 | binary-extensions@^2.0.0: 208 | version "2.2.0" 209 | resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299268308&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 210 | integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= 211 | 212 | binary@~0.3.0: 213 | version "0.3.0" 214 | resolved "https://registry.npm.taobao.org/binary/download/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" 215 | integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= 216 | dependencies: 217 | buffers "~0.1.1" 218 | chainsaw "~0.1.0" 219 | 220 | bluebird@^3.7.2: 221 | version "3.7.2" 222 | resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1593529666861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 223 | integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= 224 | 225 | bluebird@~3.4.1: 226 | version "3.4.7" 227 | resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.4.7.tgz?cache=0&sync_timestamp=1593529666861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" 228 | integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= 229 | 230 | brace-expansion@^1.1.7: 231 | version "1.1.11" 232 | resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 233 | integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= 234 | dependencies: 235 | balanced-match "^1.0.0" 236 | concat-map "0.0.1" 237 | 238 | braces@^3.0.1, braces@~3.0.2: 239 | version "3.0.2" 240 | resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 241 | integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= 242 | dependencies: 243 | fill-range "^7.0.1" 244 | 245 | browserslist@^4.16.3: 246 | version "4.16.6" 247 | resolved "https://registry.nlark.com/browserslist/download/browserslist-4.16.6.tgz?cache=0&sync_timestamp=1619789072079&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" 248 | integrity sha1-15ASd6WojlVO0wWxg+ybDAj2b6I= 249 | dependencies: 250 | caniuse-lite "^1.0.30001219" 251 | colorette "^1.2.2" 252 | electron-to-chromium "^1.3.723" 253 | escalade "^3.1.1" 254 | node-releases "^1.1.71" 255 | 256 | buffer-indexof-polyfill@~1.0.0: 257 | version "1.0.2" 258 | resolved "https://registry.npm.taobao.org/buffer-indexof-polyfill/download/buffer-indexof-polyfill-1.0.2.tgz?cache=0&sync_timestamp=1599618932660&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer-indexof-polyfill%2Fdownload%2Fbuffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" 259 | integrity sha1-0nMhNcWZnGSyd/z5savjSYJUcpw= 260 | 261 | buffers@~0.1.1: 262 | version "0.1.1" 263 | resolved "https://registry.npm.taobao.org/buffers/download/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" 264 | integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= 265 | 266 | bytes@^3.0.0: 267 | version "3.1.0" 268 | resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 269 | integrity sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY= 270 | 271 | camelcase-css@^2.0.1: 272 | version "2.0.1" 273 | resolved "https://registry.npm.taobao.org/camelcase-css/download/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" 274 | integrity sha1-7pePaUeRTMMMa0R0G27R338EP9U= 275 | 276 | caniuse-lite@^1.0.30001196, caniuse-lite@^1.0.30001219: 277 | version "1.0.30001228" 278 | resolved "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001228.tgz?cache=0&sync_timestamp=1620658846602&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" 279 | integrity sha1-v9xZQs0zJvpR7gtC++9NqdSSp/o= 280 | 281 | chainsaw@~0.1.0: 282 | version "0.1.0" 283 | resolved "https://registry.npm.taobao.org/chainsaw/download/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" 284 | integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= 285 | dependencies: 286 | traverse ">=0.3.0 <0.4" 287 | 288 | chalk@^2.4.1: 289 | version "2.4.2" 290 | resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995297666&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 291 | integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= 292 | dependencies: 293 | ansi-styles "^3.2.1" 294 | escape-string-regexp "^1.0.5" 295 | supports-color "^5.3.0" 296 | 297 | chalk@^4.1.0: 298 | version "4.1.1" 299 | resolved "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995297666&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 300 | integrity sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0= 301 | dependencies: 302 | ansi-styles "^4.1.0" 303 | supports-color "^7.1.0" 304 | 305 | chokidar@^3.5.1: 306 | version "3.5.1" 307 | resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719499558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 308 | integrity sha1-7pznu+vSt59J8wR5nVRo4x4U5oo= 309 | dependencies: 310 | anymatch "~3.1.1" 311 | braces "~3.0.2" 312 | glob-parent "~5.1.0" 313 | is-binary-path "~2.1.0" 314 | is-glob "~4.0.1" 315 | normalize-path "~3.0.0" 316 | readdirp "~3.5.0" 317 | optionalDependencies: 318 | fsevents "~2.3.1" 319 | 320 | color-convert@^1.9.0, color-convert@^1.9.1: 321 | version "1.9.3" 322 | resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 323 | integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= 324 | dependencies: 325 | color-name "1.1.3" 326 | 327 | color-convert@^2.0.1: 328 | version "2.0.1" 329 | resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 330 | integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= 331 | dependencies: 332 | color-name "~1.1.4" 333 | 334 | color-name@1.1.3: 335 | version "1.1.3" 336 | resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 337 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 338 | 339 | color-name@^1.0.0, color-name@~1.1.4: 340 | version "1.1.4" 341 | resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 342 | integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= 343 | 344 | color-string@^1.5.4: 345 | version "1.5.5" 346 | resolved "https://registry.npm.taobao.org/color-string/download/color-string-1.5.5.tgz?cache=0&sync_timestamp=1614967248053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-string%2Fdownload%2Fcolor-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" 347 | integrity sha1-ZUdKjw50OWJfPSemoZ2J/EUiMBQ= 348 | dependencies: 349 | color-name "^1.0.0" 350 | simple-swizzle "^0.2.2" 351 | 352 | color@^3.1.3: 353 | version "3.1.3" 354 | resolved "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" 355 | integrity sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4= 356 | dependencies: 357 | color-convert "^1.9.1" 358 | color-string "^1.5.4" 359 | 360 | colorette@^1.2.2: 361 | version "1.2.2" 362 | resolved "https://registry.nlark.com/colorette/download/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 363 | integrity sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ= 364 | 365 | commander@^6.0.0: 366 | version "6.2.1" 367 | resolved "https://registry.nlark.com/commander/download/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" 368 | integrity sha1-B5LraC37wyWZm7K4T93duhEKxzw= 369 | 370 | concat-map@0.0.1: 371 | version "0.0.1" 372 | resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 373 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 374 | 375 | consolidate@^0.16.0: 376 | version "0.16.0" 377 | resolved "https://registry.npm.taobao.org/consolidate/download/consolidate-0.16.0.tgz?cache=0&sync_timestamp=1599604996729&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16" 378 | integrity sha1-oRhkdokw8vGUMWYKZZBmaPX73BY= 379 | dependencies: 380 | bluebird "^3.7.2" 381 | 382 | core-util-is@~1.0.0: 383 | version "1.0.2" 384 | resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 385 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 386 | 387 | css-unit-converter@^1.1.1: 388 | version "1.1.2" 389 | resolved "https://registry.npm.taobao.org/css-unit-converter/download/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" 390 | integrity sha1-THf1oZVObb/2BpXsshTjJwQ2qyE= 391 | 392 | cssesc@^3.0.0: 393 | version "3.0.0" 394 | resolved "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 395 | integrity sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= 396 | 397 | csstype@^2.6.8: 398 | version "2.6.17" 399 | resolved "https://registry.nlark.com/csstype/download/csstype-2.6.17.tgz?cache=0&sync_timestamp=1618818427821&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" 400 | integrity sha1-TPMOuH4dGgBdi2UQ+VKSQT9qHA4= 401 | 402 | defined@^1.0.0: 403 | version "1.0.0" 404 | resolved "https://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 405 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 406 | 407 | detective@^5.2.0: 408 | version "5.2.0" 409 | resolved "https://registry.npm.taobao.org/detective/download/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" 410 | integrity sha1-/rKnfoW5BOzepFmtiXzJCpm9Kns= 411 | dependencies: 412 | acorn-node "^1.6.1" 413 | defined "^1.0.0" 414 | minimist "^1.1.1" 415 | 416 | didyoumean@^1.2.1: 417 | version "1.2.1" 418 | resolved "https://registry.npm.taobao.org/didyoumean/download/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" 419 | integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= 420 | 421 | dlv@^1.1.3: 422 | version "1.1.3" 423 | resolved "https://registry.npm.taobao.org/dlv/download/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" 424 | integrity sha1-XBmKihFFNZbnUUlNSYdLx3MvLnk= 425 | 426 | duplexer2@~0.1.4: 427 | version "0.1.4" 428 | resolved "https://registry.npm.taobao.org/duplexer2/download/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 429 | integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= 430 | dependencies: 431 | readable-stream "^2.0.2" 432 | 433 | electron-to-chromium@^1.3.723: 434 | version "1.3.730" 435 | resolved "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.730.tgz?cache=0&sync_timestamp=1621303385576&other_urls=https%3A%2F%2Fregistry.nlark.com%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.730.tgz#6e1fad8f250827f5524672e572f823b34a6417e1" 436 | integrity sha1-bh+tjyUIJ/VSRnLlcvgjs0pkF+E= 437 | 438 | element3-core@0.0.7: 439 | version "0.0.7" 440 | resolved "https://registry.nlark.com/element3-core/download/element3-core-0.0.7.tgz#aef2ffdc71f63c559451a14069669fc76b47063e" 441 | integrity sha1-rvL/3HH2PFWUUaFAaWafx2tHBj4= 442 | 443 | emojis-list@^3.0.0: 444 | version "3.0.0" 445 | resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" 446 | integrity sha1-VXBmIEatKeLpFucariYKvf9Pang= 447 | 448 | esbuild@^0.11.23: 449 | version "0.11.23" 450 | resolved "https://registry.nlark.com/esbuild/download/esbuild-0.11.23.tgz?cache=0&sync_timestamp=1621313450736&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fesbuild%2Fdownload%2Fesbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" 451 | integrity sha1-xCU09jLhZRIGcdZNtniDY0MztLg= 452 | 453 | escalade@^3.1.1: 454 | version "3.1.1" 455 | resolved "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 456 | integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= 457 | 458 | escape-string-regexp@^1.0.5: 459 | version "1.0.5" 460 | resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 461 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 462 | 463 | estree-walker@^2.0.1: 464 | version "2.0.2" 465 | resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 466 | integrity sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw= 467 | 468 | fast-glob@^3.2.5: 469 | version "3.2.5" 470 | resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.5.tgz?cache=0&sync_timestamp=1610876574130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" 471 | integrity sha1-eTmvKmVt55pPGQGQPuityqfLlmE= 472 | dependencies: 473 | "@nodelib/fs.stat" "^2.0.2" 474 | "@nodelib/fs.walk" "^1.2.3" 475 | glob-parent "^5.1.0" 476 | merge2 "^1.3.0" 477 | micromatch "^4.0.2" 478 | picomatch "^2.2.1" 479 | 480 | fastq@^1.6.0: 481 | version "1.11.0" 482 | resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.11.0.tgz?cache=0&sync_timestamp=1614183622904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" 483 | integrity sha1-u5+5VaBxMKkY62PB9RYcwypdCFg= 484 | dependencies: 485 | reusify "^1.0.4" 486 | 487 | fill-range@^7.0.1: 488 | version "7.0.1" 489 | resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 490 | integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= 491 | dependencies: 492 | to-regex-range "^5.0.1" 493 | 494 | fraction.js@^4.0.13: 495 | version "4.1.0" 496 | resolved "https://registry.nlark.com/fraction.js/download/fraction.js-4.1.0.tgz#229ec1cedc8c3c7e5d2d20688ba64f0a43af5830" 497 | integrity sha1-Ip7BztyMPH5dLSBoi6ZPCkOvWDA= 498 | 499 | fs-extra@^9.1.0: 500 | version "9.1.0" 501 | resolved "https://registry.nlark.com/fs-extra/download/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" 502 | integrity sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0= 503 | dependencies: 504 | at-least-node "^1.0.0" 505 | graceful-fs "^4.2.0" 506 | jsonfile "^6.0.1" 507 | universalify "^2.0.0" 508 | 509 | fs.realpath@^1.0.0: 510 | version "1.0.0" 511 | resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 512 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 513 | 514 | fsevents@~2.3.1: 515 | version "2.3.2" 516 | resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612536512306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 517 | integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= 518 | 519 | fstream@^1.0.12: 520 | version "1.0.12" 521 | resolved "https://registry.npm.taobao.org/fstream/download/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" 522 | integrity sha1-Touo7i1Ivk99DeUFRVVI6uWTIEU= 523 | dependencies: 524 | graceful-fs "^4.1.2" 525 | inherits "~2.0.0" 526 | mkdirp ">=0.5 0" 527 | rimraf "2" 528 | 529 | function-bind@^1.1.1: 530 | version "1.1.1" 531 | resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 532 | integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= 533 | 534 | generic-names@^2.0.1: 535 | version "2.0.1" 536 | resolved "https://registry.npm.taobao.org/generic-names/download/generic-names-2.0.1.tgz?cache=0&sync_timestamp=1603542291410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgeneric-names%2Fdownload%2Fgeneric-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" 537 | integrity sha1-+KN46tLMqno08DF7BVVIMq5BuHI= 538 | dependencies: 539 | loader-utils "^1.1.0" 540 | 541 | glob-base@^0.3.0: 542 | version "0.3.0" 543 | resolved "https://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 544 | integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= 545 | dependencies: 546 | glob-parent "^2.0.0" 547 | is-glob "^2.0.0" 548 | 549 | glob-parent@^2.0.0: 550 | version "2.0.0" 551 | resolved "https://registry.nlark.com/glob-parent/download/glob-parent-2.0.0.tgz?cache=0&sync_timestamp=1620073671816&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 552 | integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= 553 | dependencies: 554 | is-glob "^2.0.0" 555 | 556 | glob-parent@^5.1.0, glob-parent@~5.1.0: 557 | version "5.1.2" 558 | resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073671816&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 559 | integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= 560 | dependencies: 561 | is-glob "^4.0.1" 562 | 563 | glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: 564 | version "7.1.7" 565 | resolved "https://registry.nlark.com/glob/download/glob-7.1.7.tgz?cache=0&sync_timestamp=1620337382269&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob%2Fdownload%2Fglob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 566 | integrity sha1-Oxk+kjPwHULQs/eClLvutBj5SpA= 567 | dependencies: 568 | fs.realpath "^1.0.0" 569 | inflight "^1.0.4" 570 | inherits "2" 571 | minimatch "^3.0.4" 572 | once "^1.3.0" 573 | path-is-absolute "^1.0.0" 574 | 575 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: 576 | version "4.2.6" 577 | resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 578 | integrity sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4= 579 | 580 | has-flag@^3.0.0: 581 | version "3.0.0" 582 | resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 583 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 584 | 585 | has-flag@^4.0.0: 586 | version "4.0.0" 587 | resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 588 | integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= 589 | 590 | has@^1.0.3: 591 | version "1.0.3" 592 | resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 593 | integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= 594 | dependencies: 595 | function-bind "^1.1.1" 596 | 597 | hash-sum@^2.0.0: 598 | version "2.0.0" 599 | resolved "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" 600 | integrity sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo= 601 | 602 | html-tags@^3.1.0: 603 | version "3.1.0" 604 | resolved "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" 605 | integrity sha1-e15vfmZen7QfMAB+2eDUHpf7IUA= 606 | 607 | icss-replace-symbols@^1.1.0: 608 | version "1.1.0" 609 | resolved "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" 610 | integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= 611 | 612 | icss-utils@^5.0.0: 613 | version "5.1.0" 614 | resolved "https://registry.npm.taobao.org/icss-utils/download/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" 615 | integrity sha1-xr5oWKvQE9do6YNmrkfiXViHsa4= 616 | 617 | inflight@^1.0.4: 618 | version "1.0.6" 619 | resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 620 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 621 | dependencies: 622 | once "^1.3.0" 623 | wrappy "1" 624 | 625 | inherits@2, inherits@~2.0.0, inherits@~2.0.3: 626 | version "2.0.4" 627 | resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 628 | integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= 629 | 630 | is-arrayish@^0.3.1: 631 | version "0.3.2" 632 | resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 633 | integrity sha1-RXSirlb3qyBolvtDHq7tBm/fjwM= 634 | 635 | is-binary-path@~2.1.0: 636 | version "2.1.0" 637 | resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 638 | integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= 639 | dependencies: 640 | binary-extensions "^2.0.0" 641 | 642 | is-core-module@^2.2.0: 643 | version "2.4.0" 644 | resolved "https://registry.nlark.com/is-core-module/download/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" 645 | integrity sha1-jp/I4VAnsBFBgCbpjw5vTYYwXME= 646 | dependencies: 647 | has "^1.0.3" 648 | 649 | is-dotfile@^1.0.0: 650 | version "1.0.3" 651 | resolved "https://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 652 | integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= 653 | 654 | is-extglob@^1.0.0: 655 | version "1.0.0" 656 | resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 657 | integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= 658 | 659 | is-extglob@^2.1.1: 660 | version "2.1.1" 661 | resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 662 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 663 | 664 | is-glob@^2.0.0: 665 | version "2.0.1" 666 | resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 667 | integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= 668 | dependencies: 669 | is-extglob "^1.0.0" 670 | 671 | is-glob@^4.0.1, is-glob@~4.0.1: 672 | version "4.0.1" 673 | resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 674 | integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= 675 | dependencies: 676 | is-extglob "^2.1.1" 677 | 678 | is-number@^7.0.0: 679 | version "7.0.0" 680 | resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 681 | integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= 682 | 683 | isarray@~1.0.0: 684 | version "1.0.0" 685 | resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 686 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 687 | 688 | json5@^1.0.1: 689 | version "1.0.1" 690 | resolved "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 691 | integrity sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4= 692 | dependencies: 693 | minimist "^1.2.0" 694 | 695 | jsonfile@^6.0.1: 696 | version "6.1.0" 697 | resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.1.0.tgz?cache=0&sync_timestamp=1604161844511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 698 | integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= 699 | dependencies: 700 | universalify "^2.0.0" 701 | optionalDependencies: 702 | graceful-fs "^4.1.6" 703 | 704 | listenercount@~1.0.1: 705 | version "1.0.1" 706 | resolved "https://registry.npm.taobao.org/listenercount/download/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" 707 | integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= 708 | 709 | loader-utils@^1.1.0: 710 | version "1.4.0" 711 | resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" 712 | integrity sha1-xXm140yzSxp07cbB+za/o3HVphM= 713 | dependencies: 714 | big.js "^5.2.2" 715 | emojis-list "^3.0.0" 716 | json5 "^1.0.1" 717 | 718 | lodash.camelcase@^4.3.0: 719 | version "4.3.0" 720 | resolved "https://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 721 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 722 | 723 | lodash.toarray@^4.4.0: 724 | version "4.4.0" 725 | resolved "https://registry.npm.taobao.org/lodash.toarray/download/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" 726 | integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= 727 | 728 | lodash.topath@^4.5.2: 729 | version "4.5.2" 730 | resolved "https://registry.npm.taobao.org/lodash.topath/download/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" 731 | integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= 732 | 733 | lodash@^4.17.21: 734 | version "4.17.21" 735 | resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1613835817439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 736 | integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw= 737 | 738 | lru-cache@^5.1.1: 739 | version "5.1.1" 740 | resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427567713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 741 | integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= 742 | dependencies: 743 | yallist "^3.0.2" 744 | 745 | magic-string@^0.25.7: 746 | version "0.25.7" 747 | resolved "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 748 | integrity sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE= 749 | dependencies: 750 | sourcemap-codec "^1.4.4" 751 | 752 | merge-source-map@^1.1.0: 753 | version "1.1.0" 754 | resolved "https://registry.nlark.com/merge-source-map/download/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 755 | integrity sha1-L93n5gIJOfcJBqaPLXrmheTIxkY= 756 | dependencies: 757 | source-map "^0.6.1" 758 | 759 | merge2@^1.3.0: 760 | version "1.4.1" 761 | resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 762 | integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= 763 | 764 | micromatch@^4.0.2: 765 | version "4.0.4" 766 | resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054740956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 767 | integrity sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k= 768 | dependencies: 769 | braces "^3.0.1" 770 | picomatch "^2.2.3" 771 | 772 | minimatch@^3.0.4: 773 | version "3.0.4" 774 | resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 775 | integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= 776 | dependencies: 777 | brace-expansion "^1.1.7" 778 | 779 | minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: 780 | version "1.2.5" 781 | resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 782 | integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= 783 | 784 | "mkdirp@>=0.5 0": 785 | version "0.5.5" 786 | resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 787 | integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= 788 | dependencies: 789 | minimist "^1.2.5" 790 | 791 | modern-normalize@^1.0.0: 792 | version "1.1.0" 793 | resolved "https://registry.nlark.com/modern-normalize/download/modern-normalize-1.1.0.tgz?cache=0&sync_timestamp=1619951149003&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmodern-normalize%2Fdownload%2Fmodern-normalize-1.1.0.tgz#da8e80140d9221426bd4f725c6e11283d34f90b7" 794 | integrity sha1-2o6AFA2SIUJr1PclxuESg9NPkLc= 795 | 796 | nanoid@^3.1.23: 797 | version "3.1.23" 798 | resolved "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 799 | integrity sha1-90QIbOfCvEfuCoRyV01ceOQYOoE= 800 | 801 | node-emoji@^1.8.1: 802 | version "1.10.0" 803 | resolved "https://registry.npm.taobao.org/node-emoji/download/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" 804 | integrity sha1-iIar0l2ce7YYAqZYUj0fjSqJsto= 805 | dependencies: 806 | lodash.toarray "^4.4.0" 807 | 808 | node-releases@^1.1.71: 809 | version "1.1.72" 810 | resolved "https://registry.nlark.com/node-releases/download/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" 811 | integrity sha1-FIAqtrEDmnmgx9ZithClu9durL4= 812 | 813 | normalize-path@^3.0.0, normalize-path@~3.0.0: 814 | version "3.0.0" 815 | resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 816 | integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= 817 | 818 | normalize-range@^0.1.2: 819 | version "0.1.2" 820 | resolved "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 821 | integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= 822 | 823 | object-assign@^4.1.1: 824 | version "4.1.1" 825 | resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 826 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 827 | 828 | object-hash@^2.1.1: 829 | version "2.1.1" 830 | resolved "https://registry.npm.taobao.org/object-hash/download/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" 831 | integrity sha1-lEfQJ5tPz4DP8yWb9modxzr6vgk= 832 | 833 | once@^1.3.0: 834 | version "1.4.0" 835 | resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 836 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 837 | dependencies: 838 | wrappy "1" 839 | 840 | parse-glob@^3.0.4: 841 | version "3.0.4" 842 | resolved "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 843 | integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= 844 | dependencies: 845 | glob-base "^0.3.0" 846 | is-dotfile "^1.0.0" 847 | is-extglob "^1.0.0" 848 | is-glob "^2.0.0" 849 | 850 | path-is-absolute@^1.0.0: 851 | version "1.0.1" 852 | resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 853 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 854 | 855 | path-parse@^1.0.6: 856 | version "1.0.6" 857 | resolved "https://registry.nlark.com/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 858 | integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= 859 | 860 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 861 | version "2.2.3" 862 | resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.3.tgz?cache=0&sync_timestamp=1618049925917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" 863 | integrity sha1-RlVH81nMwgbTxI5Goby4m/fuYZ0= 864 | 865 | postcss-functions@^3: 866 | version "3.0.0" 867 | resolved "https://registry.npm.taobao.org/postcss-functions/download/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" 868 | integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= 869 | dependencies: 870 | glob "^7.1.2" 871 | object-assign "^4.1.1" 872 | postcss "^6.0.9" 873 | postcss-value-parser "^3.3.0" 874 | 875 | postcss-js@^3.0.3: 876 | version "3.0.3" 877 | resolved "https://registry.npm.taobao.org/postcss-js/download/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33" 878 | integrity sha1-LwvTcKLoWZ1FQ59pcEA7WHOr2jM= 879 | dependencies: 880 | camelcase-css "^2.0.1" 881 | postcss "^8.1.6" 882 | 883 | postcss-modules-extract-imports@^3.0.0: 884 | version "3.0.0" 885 | resolved "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" 886 | integrity sha1-zaHwR8CugMl9vijD52pDuIAldB0= 887 | 888 | postcss-modules-local-by-default@^4.0.0: 889 | version "4.0.0" 890 | resolved "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz?cache=0&sync_timestamp=1602587624722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" 891 | integrity sha1-67tU+uFZjuz99pGgKz/zs5ClpRw= 892 | dependencies: 893 | icss-utils "^5.0.0" 894 | postcss-selector-parser "^6.0.2" 895 | postcss-value-parser "^4.1.0" 896 | 897 | postcss-modules-scope@^3.0.0: 898 | version "3.0.0" 899 | resolved "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz?cache=0&sync_timestamp=1602593128276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" 900 | integrity sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY= 901 | dependencies: 902 | postcss-selector-parser "^6.0.4" 903 | 904 | postcss-modules-values@^4.0.0: 905 | version "4.0.0" 906 | resolved "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" 907 | integrity sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw= 908 | dependencies: 909 | icss-utils "^5.0.0" 910 | 911 | postcss-modules@^4.0.0: 912 | version "4.0.0" 913 | resolved "https://registry.npm.taobao.org/postcss-modules/download/postcss-modules-4.0.0.tgz?cache=0&sync_timestamp=1606641094666&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules%2Fdownload%2Fpostcss-modules-4.0.0.tgz#2bc7f276ab88f3f1b0fadf6cbd7772d43b5f3b9b" 914 | integrity sha1-K8fydquI8/Gw+t9svXdy1DtfO5s= 915 | dependencies: 916 | generic-names "^2.0.1" 917 | icss-replace-symbols "^1.1.0" 918 | lodash.camelcase "^4.3.0" 919 | postcss-modules-extract-imports "^3.0.0" 920 | postcss-modules-local-by-default "^4.0.0" 921 | postcss-modules-scope "^3.0.0" 922 | postcss-modules-values "^4.0.0" 923 | string-hash "^1.1.1" 924 | 925 | postcss-nested@5.0.5: 926 | version "5.0.5" 927 | resolved "https://registry.npm.taobao.org/postcss-nested/download/postcss-nested-5.0.5.tgz?cache=0&sync_timestamp=1614914862199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-nested%2Fdownload%2Fpostcss-nested-5.0.5.tgz#f0a107d33a9fab11d7637205f5321e27223e3603" 928 | integrity sha1-8KEH0zqfqxHXY3IF9TIeJyI+NgM= 929 | dependencies: 930 | postcss-selector-parser "^6.0.4" 931 | 932 | postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: 933 | version "6.0.6" 934 | resolved "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" 935 | integrity sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo= 936 | dependencies: 937 | cssesc "^3.0.0" 938 | util-deprecate "^1.0.2" 939 | 940 | postcss-value-parser@^3.3.0: 941 | version "3.3.1" 942 | resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" 943 | integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= 944 | 945 | postcss-value-parser@^4.1.0: 946 | version "4.1.0" 947 | resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" 948 | integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss= 949 | 950 | postcss@^6.0.9: 951 | version "6.0.23" 952 | resolved "https://registry.nlark.com/postcss/download/postcss-6.0.23.tgz?cache=0&sync_timestamp=1620677860208&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" 953 | integrity sha1-YcgswyisYOZ3ZF+XkFTrmLwOMyQ= 954 | dependencies: 955 | chalk "^2.4.1" 956 | source-map "^0.6.1" 957 | supports-color "^5.4.0" 958 | 959 | postcss@^8.1.10, postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.10, postcss@^8.2.15: 960 | version "8.2.15" 961 | resolved "https://registry.nlark.com/postcss/download/postcss-8.2.15.tgz?cache=0&sync_timestamp=1620677860208&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65" 962 | integrity sha1-nmbM8HKSgX0ib8MVy7+bwUj7ymU= 963 | dependencies: 964 | colorette "^1.2.2" 965 | nanoid "^3.1.23" 966 | source-map "^0.6.1" 967 | 968 | pretty-hrtime@^1.0.3: 969 | version "1.0.3" 970 | resolved "https://registry.npm.taobao.org/pretty-hrtime/download/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" 971 | integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= 972 | 973 | process-nextick-args@~2.0.0: 974 | version "2.0.1" 975 | resolved "https://registry.nlark.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 976 | integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= 977 | 978 | purgecss@^3.1.3: 979 | version "3.1.3" 980 | resolved "https://registry.npm.taobao.org/purgecss/download/purgecss-3.1.3.tgz#26987ec09d12eeadc318e22f6e5a9eb0be094f41" 981 | integrity sha1-Jph+wJ0S7q3DGOIvblqesL4JT0E= 982 | dependencies: 983 | commander "^6.0.0" 984 | glob "^7.0.0" 985 | postcss "^8.2.1" 986 | postcss-selector-parser "^6.0.2" 987 | 988 | queue-microtask@^1.2.2: 989 | version "1.2.3" 990 | resolved "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391583732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 991 | integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= 992 | 993 | quick-lru@^5.1.1: 994 | version "5.1.1" 995 | resolved "https://registry.npm.taobao.org/quick-lru/download/quick-lru-5.1.1.tgz?cache=0&sync_timestamp=1610610616551&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquick-lru%2Fdownload%2Fquick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 996 | integrity sha1-NmST5rPkKjpoheLpnRj4D7eoyTI= 997 | 998 | readable-stream@^2.0.2, readable-stream@~2.3.6: 999 | version "2.3.7" 1000 | resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1001 | integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= 1002 | dependencies: 1003 | core-util-is "~1.0.0" 1004 | inherits "~2.0.3" 1005 | isarray "~1.0.0" 1006 | process-nextick-args "~2.0.0" 1007 | safe-buffer "~5.1.1" 1008 | string_decoder "~1.1.1" 1009 | util-deprecate "~1.0.1" 1010 | 1011 | readdirp@~3.5.0: 1012 | version "3.5.0" 1013 | resolved "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz?cache=0&sync_timestamp=1615717677435&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1014 | integrity sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4= 1015 | dependencies: 1016 | picomatch "^2.2.1" 1017 | 1018 | reduce-css-calc@^2.1.8: 1019 | version "2.1.8" 1020 | resolved "https://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" 1021 | integrity sha1-fvh2GijWFJgNwMmC93LJP3qZ3gM= 1022 | dependencies: 1023 | css-unit-converter "^1.1.1" 1024 | postcss-value-parser "^3.3.0" 1025 | 1026 | resolve@^1.19.0, resolve@^1.20.0: 1027 | version "1.20.0" 1028 | resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 1029 | integrity sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU= 1030 | dependencies: 1031 | is-core-module "^2.2.0" 1032 | path-parse "^1.0.6" 1033 | 1034 | reusify@^1.0.4: 1035 | version "1.0.4" 1036 | resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1037 | integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= 1038 | 1039 | rimraf@2: 1040 | version "2.7.1" 1041 | resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1042 | integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= 1043 | dependencies: 1044 | glob "^7.1.3" 1045 | 1046 | rollup-plugin-element3-webgl@0.0.5: 1047 | version "0.0.5" 1048 | resolved "https://registry.nlark.com/rollup-plugin-element3-webgl/download/rollup-plugin-element3-webgl-0.0.5.tgz#7c4b3ee45a083b7d3ff12e1c46254f8b70419d05" 1049 | integrity sha1-fEs+5FoIO30/8S4cRiVPi3BBnQU= 1050 | 1051 | rollup@^2.38.5: 1052 | version "2.48.0" 1053 | resolved "https://registry.nlark.com/rollup/download/rollup-2.48.0.tgz#fceb01ed771f991f29f7bd2ff7838146e55acb74" 1054 | integrity sha1-/OsB7XcfmR8p970v94OBRuVay3Q= 1055 | optionalDependencies: 1056 | fsevents "~2.3.1" 1057 | 1058 | run-parallel@^1.1.9: 1059 | version "1.2.0" 1060 | resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612926037406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1061 | integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= 1062 | dependencies: 1063 | queue-microtask "^1.2.2" 1064 | 1065 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1066 | version "5.1.2" 1067 | resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1068 | integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= 1069 | 1070 | setimmediate@~1.0.4: 1071 | version "1.0.5" 1072 | resolved "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1073 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 1074 | 1075 | simple-swizzle@^0.2.2: 1076 | version "0.2.2" 1077 | resolved "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 1078 | integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 1079 | dependencies: 1080 | is-arrayish "^0.3.1" 1081 | 1082 | source-map@^0.6.1: 1083 | version "0.6.1" 1084 | resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1085 | integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= 1086 | 1087 | sourcemap-codec@^1.4.4: 1088 | version "1.4.8" 1089 | resolved "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1090 | integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= 1091 | 1092 | string-hash@^1.1.1: 1093 | version "1.1.3" 1094 | resolved "https://registry.npm.taobao.org/string-hash/download/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" 1095 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= 1096 | 1097 | string_decoder@~1.1.1: 1098 | version "1.1.1" 1099 | resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1100 | integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= 1101 | dependencies: 1102 | safe-buffer "~5.1.0" 1103 | 1104 | supports-color@^5.3.0, supports-color@^5.4.0: 1105 | version "5.5.0" 1106 | resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1618560998281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1107 | integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= 1108 | dependencies: 1109 | has-flag "^3.0.0" 1110 | 1111 | supports-color@^7.1.0: 1112 | version "7.2.0" 1113 | resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618560998281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1114 | integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= 1115 | dependencies: 1116 | has-flag "^4.0.0" 1117 | 1118 | tailwindcss@^2.1.2: 1119 | version "2.1.2" 1120 | resolved "https://registry.nlark.com/tailwindcss/download/tailwindcss-2.1.2.tgz#29402bf73a445faedd03df6d3b177e7b52b7c4a1" 1121 | integrity sha1-KUAr9zpEX67dA99tOxd+e1K3xKE= 1122 | dependencies: 1123 | "@fullhuman/postcss-purgecss" "^3.1.3" 1124 | bytes "^3.0.0" 1125 | chalk "^4.1.0" 1126 | chokidar "^3.5.1" 1127 | color "^3.1.3" 1128 | detective "^5.2.0" 1129 | didyoumean "^1.2.1" 1130 | dlv "^1.1.3" 1131 | fast-glob "^3.2.5" 1132 | fs-extra "^9.1.0" 1133 | html-tags "^3.1.0" 1134 | lodash "^4.17.21" 1135 | lodash.topath "^4.5.2" 1136 | modern-normalize "^1.0.0" 1137 | node-emoji "^1.8.1" 1138 | normalize-path "^3.0.0" 1139 | object-hash "^2.1.1" 1140 | parse-glob "^3.0.4" 1141 | postcss-functions "^3" 1142 | postcss-js "^3.0.3" 1143 | postcss-nested "5.0.5" 1144 | postcss-selector-parser "^6.0.4" 1145 | postcss-value-parser "^4.1.0" 1146 | pretty-hrtime "^1.0.3" 1147 | quick-lru "^5.1.1" 1148 | reduce-css-calc "^2.1.8" 1149 | resolve "^1.20.0" 1150 | 1151 | to-fast-properties@^2.0.0: 1152 | version "2.0.0" 1153 | resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1154 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1155 | 1156 | to-regex-range@^5.0.1: 1157 | version "5.0.1" 1158 | resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1159 | integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= 1160 | dependencies: 1161 | is-number "^7.0.0" 1162 | 1163 | "traverse@>=0.3.0 <0.4": 1164 | version "0.3.9" 1165 | resolved "https://registry.npm.taobao.org/traverse/download/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" 1166 | integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= 1167 | 1168 | typescript@^4.1.3: 1169 | version "4.2.4" 1170 | resolved "https://registry.nlark.com/typescript/download/typescript-4.2.4.tgz?cache=0&sync_timestamp=1621322949574&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftypescript%2Fdownload%2Ftypescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" 1171 | integrity sha1-hhC1l0feAo/aiYqK7w4QPxVtCWE= 1172 | 1173 | universalify@^2.0.0: 1174 | version "2.0.0" 1175 | resolved "https://registry.npm.taobao.org/universalify/download/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 1176 | integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= 1177 | 1178 | unzipper@0.10.11: 1179 | version "0.10.11" 1180 | resolved "https://registry.npm.taobao.org/unzipper/download/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" 1181 | integrity sha1-C0mRRGRyy9uS7nQDkJ8mwkGceC4= 1182 | dependencies: 1183 | big-integer "^1.6.17" 1184 | binary "~0.3.0" 1185 | bluebird "~3.4.1" 1186 | buffer-indexof-polyfill "~1.0.0" 1187 | duplexer2 "~0.1.4" 1188 | fstream "^1.0.12" 1189 | graceful-fs "^4.2.2" 1190 | listenercount "~1.0.1" 1191 | readable-stream "~2.3.6" 1192 | setimmediate "~1.0.4" 1193 | 1194 | util-deprecate@^1.0.2, util-deprecate@~1.0.1: 1195 | version "1.0.2" 1196 | resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1197 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1198 | 1199 | vite@^2.3.0: 1200 | version "2.3.3" 1201 | resolved "https://registry.nlark.com/vite/download/vite-2.3.3.tgz?cache=0&sync_timestamp=1621261121898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvite%2Fdownload%2Fvite-2.3.3.tgz#7e88a71abd03985c647789938d784cce0ee3b0fd" 1202 | integrity sha1-foinGr0DmFxkd4mTjXhMzg7jsP0= 1203 | dependencies: 1204 | esbuild "^0.11.23" 1205 | postcss "^8.2.10" 1206 | resolve "^1.19.0" 1207 | rollup "^2.38.5" 1208 | optionalDependencies: 1209 | fsevents "~2.3.1" 1210 | 1211 | vue-tsc@^0.0.24: 1212 | version "0.0.24" 1213 | resolved "https://registry.nlark.com/vue-tsc/download/vue-tsc-0.0.24.tgz#0cd90db679f53ea1694254b8663fdb3d624a0872" 1214 | integrity sha1-DNkNtnn1PqFpQlS4Zj/bPWJKCHI= 1215 | dependencies: 1216 | unzipper "0.10.11" 1217 | 1218 | vue@^3.0.5: 1219 | version "3.0.11" 1220 | resolved "https://registry.nlark.com/vue/download/vue-3.0.11.tgz?cache=0&sync_timestamp=1620855840824&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue%2Fdownload%2Fvue-3.0.11.tgz#c82f9594cbf4dcc869241d4c8dd3e08d9a8f4b5f" 1221 | integrity sha1-yC+VlMv03MhpJB1MjdPgjZqPS18= 1222 | dependencies: 1223 | "@vue/compiler-dom" "3.0.11" 1224 | "@vue/runtime-dom" "3.0.11" 1225 | "@vue/shared" "3.0.11" 1226 | 1227 | wrappy@1: 1228 | version "1.0.2" 1229 | resolved "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1230 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1231 | 1232 | xtend@^4.0.2: 1233 | version "4.0.2" 1234 | resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1235 | integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= 1236 | 1237 | yallist@^3.0.2: 1238 | version "3.1.1" 1239 | resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 1240 | integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= 1241 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "element3-core", 3 | "version": "0.0.8", 4 | "description": "headless ui components library", 5 | "main": "dist/element3-core.esm.js", 6 | "module": "dist/element3-core.esm.js", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1", 9 | "test-ct": "cypress open-ct", 10 | "build": "rollup -c" 11 | }, 12 | "files": [ 13 | "src", 14 | "dist", 15 | "types" 16 | ], 17 | "gitHooks": { 18 | "commit-msg": "node scripts/verifyCommit.js" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "git+https://github.com/hug-sun/element3-core.git" 23 | }, 24 | "keywords": [], 25 | "author": "", 26 | "license": "ISC", 27 | "bugs": { 28 | "url": "https://github.com/hug-sun/element3-core/issues" 29 | }, 30 | "peerDependencies": { 31 | "vue": "^3.0.11" 32 | }, 33 | "homepage": "https://github.com/hug-sun/element3-core#readme", 34 | "devDependencies": { 35 | "@babel/core": "^7.14.3", 36 | "@babel/preset-env": "^7.14.2", 37 | "@cypress/vite-dev-server": "^1.2.7", 38 | "@cypress/vue": "^3.0.1", 39 | "@rollup/plugin-babel": "^5.3.0", 40 | "@rollup/plugin-node-resolve": "^13.0.0", 41 | "@vitejs/plugin-vue": "^1.2.2", 42 | "@vue/babel-plugin-jsx": "^1.0.6", 43 | "@vue/compiler-sfc": "^3.0.11", 44 | "chalk": "^4.1.1", 45 | "cypress": "^7.3.0", 46 | "rollup-plugin-peer-deps-external": "^2.2.4", 47 | "rollup-plugin-typescript2": "^0.30.0", 48 | "rollup-plugin-vue": "^6.0.0", 49 | "typescript": "^4.2.4", 50 | "vite": "^2.3.1", 51 | "vue": "^3.0.11", 52 | "yorkie": "^2.0.0" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import vue from "rollup-plugin-vue"; 2 | import resolve from "@rollup/plugin-node-resolve"; 3 | import peerDepsExternal from "rollup-plugin-peer-deps-external"; 4 | import ts from "rollup-plugin-typescript2"; 5 | import babel from "@rollup/plugin-babel"; 6 | export default { 7 | input: "src/main.ts", 8 | output: { 9 | file: "dist/element3-core.esm.js", 10 | format: "es", 11 | }, 12 | plugins: [ 13 | peerDepsExternal(), 14 | resolve({ 15 | extensions: [".vue", ".jsx", ".js", ".ts", ".tsx"], 16 | }), 17 | vue(), 18 | ts(), 19 | babel({ 20 | exclude: "node_modules/**", 21 | extensions: [".js", ".jsx", ".vue", ".tsx", ".ts"], 22 | babelHelpers: "bundled", 23 | }), 24 | ], 25 | }; 26 | -------------------------------------------------------------------------------- /scripts/verifyCommit.js: -------------------------------------------------------------------------------- 1 | // Invoked on the commit-msg git hook by yorkie. 2 | 3 | const chalk = require("chalk"); 4 | const msgPath = process.env.GIT_PARAMS; 5 | const msg = require("fs").readFileSync(msgPath, "utf-8").trim(); 6 | 7 | const commitRE = 8 | /^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|release)(\(.+\))?: .{1,50}/; 9 | 10 | if (!commitRE.test(msg)) { 11 | console.log(); 12 | console.error( 13 | ` ${chalk.bgRed.white(" ERROR ")} ${chalk.red( 14 | `invalid commit message format.` 15 | )}\n\n` + 16 | chalk.red( 17 | ` Proper commit message format is required for automated changelog generation. Examples:\n\n` 18 | ) + 19 | ` ${chalk.green(`feat(compiler): add 'comments' option`)}\n` + 20 | ` ${chalk.green( 21 | `fix(v-model): handle events on blur (close #28)` 22 | )}\n\n` + 23 | chalk.red(` See .github/commit-convention.md for more details.\n`) 24 | ); 25 | process.exit(1); 26 | } 27 | -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hug-sun/element3-core/a37360f10815bb6d30375baf1a3518e9def39bcc/src/.DS_Store -------------------------------------------------------------------------------- /src/components/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hug-sun/element3-core/a37360f10815bb6d30375baf1a3518e9def39bcc/src/components/.DS_Store -------------------------------------------------------------------------------- /src/components/button/Button.cy.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@cypress/vue"; 2 | import { ref } from "vue"; 3 | import Button from "./Button"; 4 | describe("Button", () => { 5 | it("init", () => { 6 | mount(Button, { 7 | slots: { 8 | default: "click", 9 | }, 10 | }); 11 | }); 12 | 13 | it("enter", () => { 14 | const Comp = { 15 | template: ` 16 |
17 | {{boo}} 18 | 19 |
20 | `, 21 | components: { 22 | Button, 23 | }, 24 | setup() { 25 | const boo = ref(true); 26 | 27 | return { 28 | boo, 29 | }; 30 | }, 31 | }; 32 | 33 | mount(Comp); 34 | 35 | cy.contains("true"); 36 | cy.get("button").click(); 37 | cy.contains("false"); 38 | }); 39 | 40 | it("slots", () => { 41 | const Comp = { 42 | template: ` 43 |
44 | 45 |
46 | `, 47 | components: { 48 | Button, 49 | }, 50 | }; 51 | 52 | mount(Comp); 53 | 54 | cy.contains("hi,element3-core button"); 55 | }); 56 | }); 57 | -------------------------------------------------------------------------------- /src/components/button/Button.tsx: -------------------------------------------------------------------------------- 1 | // 状态: 2 | // v-model: 3 | // - 按下 true 4 | // - 抬起 false 5 | 6 | import { defineComponent, h } from "vue"; 7 | export default defineComponent({ 8 | props: ["modelValue"], 9 | setup(props, { emit }) { 10 | const enter = () => { 11 | emit("update:modelValue", true); 12 | }; 13 | 14 | const putUp = () => { 15 | emit("update:modelValue", false); 16 | }; 17 | const onMouseup = () => { 18 | putUp(); 19 | }; 20 | 21 | const onMousedown = () => { 22 | enter(); 23 | }; 24 | 25 | return { 26 | onMouseup, 27 | onMousedown, 28 | }; 29 | }, 30 | 31 | render() { 32 | const children = this.$slots.default?.() || []; 33 | 34 | // 动态创建标签 35 | const Tag = "button"; 36 | 37 | return ( 38 | 39 | {children} 40 | 41 | ); 42 | }, 43 | }); 44 | -------------------------------------------------------------------------------- /src/components/button/index.ts: -------------------------------------------------------------------------------- 1 | import E3Button from "./Button"; 2 | 3 | export { E3Button }; 4 | -------------------------------------------------------------------------------- /src/components/slider/Slider.cy.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@cypress/vue"; 2 | import { ref, computed } from "vue"; 3 | import SliderButton from "./SliderButton"; 4 | import Slider from "./Slider"; 5 | describe("Slider", () => { 6 | it("init", () => { 7 | const Comp = { 8 | template: ` 9 |
10 | 11 | 12 |
{{value}}
13 |
14 |
15 |
16 | `, 17 | setup() { 18 | const width = 400; 19 | const value = ref(11); 20 | const style = computed(() => { 21 | return { 22 | background: "pink", 23 | borderRadius: "50%", 24 | width: "30px", 25 | height: "30px", 26 | textAlign: "center", 27 | transform: `translateX(${(value.value / 100) * width}px)`, 28 | }; 29 | }); 30 | const barStyle = { 31 | height: "50px", 32 | background: "red", 33 | width: width + "px", 34 | }; 35 | return { 36 | style, 37 | value, 38 | barStyle, 39 | }; 40 | }, 41 | components: { 42 | Slider, 43 | SliderButton, 44 | }, 45 | }; 46 | mount(Comp, {}); 47 | }); 48 | 49 | it("vertical", () => { 50 | const Comp = { 51 | template: ` 52 |
53 | 54 | 55 |
{{value}}
56 |
57 |
58 |
59 | `, 60 | setup() { 61 | const height = 400; 62 | const value = ref(11); 63 | const style = computed(() => { 64 | return { 65 | background: "pink", 66 | borderRadius: "50%", 67 | width: "30px", 68 | height: "30px", 69 | textAlign: "center", 70 | transform: `translateY(${(value.value / 100) * height}px)`, 71 | }; 72 | }); 73 | const barStyle = { 74 | width: "50px", 75 | background: "red", 76 | height: height + "px", 77 | }; 78 | return { 79 | style, 80 | value, 81 | barStyle, 82 | }; 83 | }, 84 | components: { 85 | Slider, 86 | SliderButton, 87 | }, 88 | }; 89 | mount(Comp, {}); 90 | }); 91 | }); 92 | -------------------------------------------------------------------------------- /src/components/slider/Slider.tsx: -------------------------------------------------------------------------------- 1 | import { Ref, unref, defineComponent, h, provide, computed } from "vue"; 2 | 3 | type sliderContext = { 4 | setPosition(position: number): any; 5 | currentPosition: Ref; 6 | vertical: boolean; 7 | }; 8 | 9 | export { sliderContext }; 10 | 11 | export default defineComponent({ 12 | props: { 13 | modelValue: { 14 | type: Number, 15 | default: 0, 16 | }, 17 | min: { 18 | type: Number, 19 | default: 0, 20 | }, 21 | max: { 22 | type: Number, 23 | default: 100, 24 | }, 25 | step: { 26 | type: Number, 27 | default: 1, 28 | }, 29 | vertical: { 30 | type: Boolean, 31 | default: false, 32 | }, 33 | }, 34 | 35 | setup(props, { emit }) { 36 | const currentPosition = computed( 37 | () => 38 | `${ 39 | ((props.modelValue - unref(props.min)) / 40 | (unref(props.max) - unref(props.min))) * 41 | 100 42 | }%` 43 | ); 44 | 45 | const api = { 46 | vertical: props.vertical, 47 | currentPosition, 48 | setPosition(newPosition) { 49 | if (newPosition === null || isNaN(newPosition)) return; 50 | if (newPosition < 0) { 51 | newPosition = 0; 52 | } else if (newPosition > 100) { 53 | newPosition = 100; 54 | } 55 | const lengthPerStep = 100 / ((props.max - props.min) / props.step); 56 | console.log(props.step); 57 | const steps = Math.round(newPosition / lengthPerStep); 58 | let value = 59 | steps * lengthPerStep * (props.max - props.min) * 0.01 + props.min; 60 | value = parseFloat(value.toFixed(1)); 61 | 62 | emit("update:modelValue", value); 63 | }, 64 | }; 65 | 66 | provide("sliderContext", api); 67 | }, 68 | 69 | render() { 70 | const children = this.$slots.default?.() || []; 71 | 72 | return
{children}
; 73 | }, 74 | }); 75 | -------------------------------------------------------------------------------- /src/components/slider/SliderButton.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h, unref, inject } from "vue"; 2 | import { sliderContext } from "./Slider"; 3 | export default defineComponent({ 4 | setup() { 5 | const context = inject("sliderContext"); 6 | 7 | let dragging = false; 8 | const onDragEnd = () => { 9 | dragEnd(); 10 | removeEventListeners(); 11 | }; 12 | 13 | const onMousedown = (e) => { 14 | dragStart(e); 15 | addEventListeners(); 16 | }; 17 | 18 | function removeEventListeners() { 19 | window.removeEventListener("mousemove", onDragging); 20 | window.removeEventListener("touchmove", onDragging); 21 | window.removeEventListener("mouseup", onDragEnd); 22 | window.removeEventListener("touchend", onDragEnd); 23 | } 24 | 25 | function addEventListeners() { 26 | window.addEventListener("mousemove", onDragging); 27 | window.addEventListener("touchmove", onDragging); 28 | window.addEventListener("mouseup", onDragEnd); 29 | window.addEventListener("touchend", onDragEnd); 30 | } 31 | 32 | function dragEnd() { 33 | dragging = false; 34 | } 35 | 36 | let startX = 0; 37 | let startY = 0; 38 | let startPosition = 0; 39 | const dragStart = (e) => { 40 | dragging = true; 41 | 42 | if (e.type === "touchstart") { 43 | e.clientY = e.touches[0].clientY; 44 | e.clientX = e.touches[0].clientX; 45 | } 46 | 47 | startY = e.clientY; 48 | startX = e.clientX; 49 | 50 | startPosition = parseFloat(unref(context.currentPosition)); 51 | }; 52 | 53 | const onDragging = (e) => { 54 | if (!dragging) return; 55 | 56 | if (e.type === "touchmove") { 57 | e.clientY = e.touches[0].clientY; 58 | e.clientX = e.touches[0].clientX; 59 | } 60 | 61 | if (context.vertical) { 62 | // 上下 63 | const currentY = e.clientY; 64 | const sliderHeight = 400; 65 | let diffY = ((currentY - startY) / sliderHeight) * 100; 66 | context.setPosition(diffY + startPosition); 67 | } else { 68 | // 处理 左右 移动 69 | const currentX = e.clientX; 70 | const sliderWidth = 400; 71 | let diffX = ((currentX - startX) / sliderWidth) * 100; 72 | context.setPosition(diffX + startPosition); 73 | } 74 | }; 75 | 76 | return { 77 | onMousedown, 78 | }; 79 | }, 80 | 81 | render() { 82 | const children = this.$slots.default?.() || []; 83 | return
{children}
; 84 | }, 85 | }); 86 | -------------------------------------------------------------------------------- /src/components/slider/index.ts: -------------------------------------------------------------------------------- 1 | import E3SliderButton from "./SliderButton"; 2 | import E3Slider from "./Slider"; 3 | 4 | export { E3Slider, E3SliderButton }; 5 | -------------------------------------------------------------------------------- /src/components/switch/Switch.cy.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@cypress/vue"; 2 | import { ref } from "vue"; 3 | import Switch from "./Switch"; 4 | describe("Switch", () => { 5 | it("init", () => { 6 | mount(Switch, { 7 | slots: { 8 | default: "switch", 9 | }, 10 | }); 11 | }); 12 | 13 | it("toggle", () => { 14 | const Comp = { 15 | template: ` 16 |
17 | {{boo}} 18 | switch 19 |
20 | `, 21 | components: { 22 | Switch, 23 | }, 24 | setup() { 25 | const boo = ref(true); 26 | 27 | return { 28 | boo, 29 | }; 30 | }, 31 | }; 32 | 33 | mount(Comp); 34 | 35 | cy.contains("true"); 36 | cy.get("button").click(); 37 | cy.contains("false"); 38 | }); 39 | 40 | it("slots", () => { 41 | const Comp = { 42 | template: ` 43 |
44 | hi,element3-core switch 45 |
46 | `, 47 | components: { 48 | Switch, 49 | }, 50 | }; 51 | 52 | mount(Comp); 53 | 54 | cy.contains("hi,element3-core switch"); 55 | }); 56 | }); 57 | -------------------------------------------------------------------------------- /src/components/switch/Switch.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from "vue"; 2 | export default defineComponent({ 3 | props: ["modelValue"], 4 | setup(props, { emit }) { 5 | const toggle = () => { 6 | emit("update:modelValue", !props.modelValue); 7 | }; 8 | 9 | const onClick = () => { 10 | toggle(); 11 | }; 12 | 13 | return { 14 | onClick, 15 | }; 16 | }, 17 | 18 | render() { 19 | const children = this.$slots.default?.() || []; 20 | return ; 21 | }, 22 | }); 23 | -------------------------------------------------------------------------------- /src/components/switch/index.ts: -------------------------------------------------------------------------------- 1 | import E3Switch from "./Switch"; 2 | 3 | export { E3Switch }; 4 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | export * from "./components/switch"; 2 | export * from "./components/button"; 3 | export * from "./components/slider"; 4 | -------------------------------------------------------------------------------- /src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import type { DefineComponent } from 'vue' 3 | // eslint-disable-next-line @typescript-eslint/ban-types 4 | const component: DefineComponent<{}, {}, any> 5 | export default component 6 | } 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "jsx": "preserve", 6 | "declaration": false, 7 | "importHelpers": true, 8 | "moduleResolution": "node", 9 | "skipLibCheck": true, 10 | "esModuleInterop": true, 11 | "allowSyntheticDefaultImports": true, 12 | "sourceMap": true, 13 | "baseUrl": ".", 14 | "allowJs": true, 15 | "types": [], 16 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 17 | }, 18 | "include": ["src"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | // for cypress 2 | const vue = require("@vitejs/plugin-vue"); 3 | const { defineConfig } = require("vite"); 4 | 5 | module.exports = defineConfig({ 6 | plugins: [vue()], 7 | }); 8 | --------------------------------------------------------------------------------