!67 feat: 新增 数字翻牌 和 倒计时(翻牌效果) 组件

Merge pull request !67 from dodu/dev-countdown
This commit is contained in:
奔跑的面条 2022-10-03 08:40:10 +00:00 committed by Gitee
commit e81d7e8b20
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
17 changed files with 1017 additions and 222 deletions

View File

@ -26,7 +26,7 @@
"html2canvas": "^1.4.1",
"keymaster": "^1.6.2",
"monaco-editor": "^0.33.0",
"naive-ui": "2.30.3",
"naive-ui": "2.33.3",
"pinia": "^2.0.13",
"screenfull": "^6.0.1",
"vue": "^3.2.31",

View File

@ -38,7 +38,7 @@ specifiers:
lodash: ~4.17.21
mockjs: ^1.1.0
monaco-editor: ^0.33.0
naive-ui: 2.30.3
naive-ui: 2.33.3
pinia: ^2.0.13
plop: ^3.0.5
prettier: ^2.6.2
@ -77,7 +77,7 @@ dependencies:
html2canvas: 1.4.1
keymaster: 1.6.2
monaco-editor: 0.33.0
naive-ui: 2.30.3_vue@3.2.37
naive-ui: registry.npmmirror.com/naive-ui/2.33.3_vue@3.2.37
pinia: 2.0.14_ub5l46u3nefphax5x2tezui4oq
screenfull: 6.0.1
vue: 3.2.37
@ -458,7 +458,7 @@ packages:
engines: {node: '>=v14'}
dependencies:
'@commitlint/types': 17.0.0
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
dev: true
/@commitlint/execute-rule/17.0.0:
@ -500,11 +500,11 @@ packages:
'@commitlint/execute-rule': 17.0.0
'@commitlint/resolve-extends': 17.0.0
'@commitlint/types': 17.0.0
'@types/node': 17.0.43
'@types/node': registry.npmmirror.com/@types/node/17.0.43
chalk: 4.1.2
cosmiconfig: 7.0.1
cosmiconfig-typescript-loader: 2.0.1_sg2ukyc6p547g74ru6fclbyzsu
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
resolve-from: 5.0.0
typescript: 4.7.3
transitivePeerDependencies:
@ -543,7 +543,7 @@ packages:
'@commitlint/config-validator': 17.0.0
'@commitlint/types': 17.0.0
import-fresh: 3.3.0
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
resolve-from: 5.0.0
resolve-global: 1.0.0
dev: true
@ -585,22 +585,6 @@ packages:
'@jridgewell/trace-mapping': 0.3.9
dev: true
/@css-render/plugin-bem/0.15.10_css-render@0.15.10:
resolution: {integrity: sha512-V7b08sM2PWJlXI7BJiVIa0Sg30H3u/jHay4AclNXfF2yRFwwb4ZJjggsMfzwj3WSihAdNf2WTqvOU5qsOD80Dg==}
peerDependencies:
css-render: ~0.15.10
dependencies:
css-render: 0.15.10
dev: false
/@css-render/vue3-ssr/0.15.10_vue@3.2.37:
resolution: {integrity: sha512-keGKnkB2nyVGoA8GezMKNsmvTGXEzgLOGGlgshwOTSEzd1dsROyZ2m/khJ9jV5zbzDM4rWeAWbWF0zwHemsJcw==}
peerDependencies:
vue: ^3.0.11
dependencies:
vue: 3.2.37
dev: false
/@emmetio/abbreviation/2.2.3:
resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==}
dependencies:
@ -617,10 +601,6 @@ packages:
resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==}
dev: true
/@emotion/hash/0.8.0:
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
dev: false
/@eslint/eslintrc/1.3.0:
resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -754,10 +734,6 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.13
dev: true
/@juggle/resize-observer/3.3.1:
resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==}
dev: false
/@nodelib/fs.scandir/2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@ -863,13 +839,6 @@ packages:
rxjs: 7.5.5
dev: true
/@types/jest/27.5.2:
resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==}
dependencies:
jest-matcher-utils: 27.5.1
pretty-format: 27.5.1
dev: false
/@types/json-schema/7.0.11:
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
dev: true
@ -886,15 +855,9 @@ packages:
resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
dependencies:
'@types/fined': 1.1.3
'@types/node': 16.11.40
'@types/node': registry.npmmirror.com/@types/node/17.0.43
dev: true
/@types/lodash-es/4.17.6:
resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==}
dependencies:
'@types/lodash': 4.14.185
dev: false
/@types/lodash/4.14.185:
resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==}
dev: false
@ -911,9 +874,6 @@ packages:
resolution: {integrity: sha512-7bOWglXUO6f21NG3YDI7hIpeMX3M59GG+DzZuzX2EkFKYUnRoxq3EOg4R0KNv2hxryY9M3UUqG5akwwsifrukw==}
dev: true
/@types/node/17.0.43:
resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==}
/@types/normalize-package-data/2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
dev: true
@ -925,13 +885,13 @@ packages:
/@types/resolve/1.17.1:
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
dependencies:
'@types/node': 17.0.43
'@types/node': registry.npmmirror.com/@types/node/17.0.43
dev: true
/@types/through/0.0.30:
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
dependencies:
'@types/node': 17.0.43
'@types/node': registry.npmmirror.com/@types/node/17.0.43
dev: true
/@typescript-eslint/eslint-plugin/5.28.0_evi7yu7wunhzwb24olrfvzynny:
@ -1223,7 +1183,7 @@ packages:
dependencies:
'@vue/runtime-core': 3.2.37
'@vue/shared': 3.2.37
csstype: 2.6.20
csstype: registry.npmmirror.com/csstype/2.6.20
/@vue/server-renderer/3.2.37_vue@3.2.37:
resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
@ -1332,6 +1292,7 @@ packages:
/ansi-regex/5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
dev: true
/ansi-regex/6.0.1:
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
@ -1350,11 +1311,7 @@ packages:
engines: {node: '>=8'}
dependencies:
color-convert: 2.0.1
/ansi-styles/5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
dev: false
dev: true
/anymatch/3.1.2:
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
@ -1425,10 +1382,6 @@ packages:
resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
dev: true
/async-validator/4.1.1:
resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==}
dev: false
/asynckit/0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: false
@ -1603,6 +1556,7 @@ packages:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
dev: true
/chalk/5.0.1:
resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
@ -1802,7 +1756,7 @@ packages:
engines: {node: '>=10'}
dependencies:
compare-func: 2.0.0
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
q: 1.5.1
dev: true
@ -1813,7 +1767,7 @@ packages:
dependencies:
JSONStream: 1.3.5
is-text-path: 1.0.1
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
meow: 8.1.2
split2: 3.2.2
through2: 4.0.2
@ -1832,7 +1786,7 @@ packages:
'@types/node': '*'
typescript: '>=3'
dependencies:
'@types/node': 17.0.43
'@types/node': registry.npmmirror.com/@types/node/17.0.43
cosmiconfig: 7.0.1
ts-node: 10.8.1_sg2ukyc6p547g74ru6fclbyzsu
typescript: 4.7.3
@ -1875,45 +1829,17 @@ packages:
utrie: 1.0.2
dev: false
/css-render/0.15.10:
resolution: {integrity: sha512-6j5acvm81sXTHJiF47FNNICtDpF74YoWk1xEK3qQvdqgW6vc+OXrPqflL6m8f5GE6XuFYrbACNEd17kraCSBAQ==}
dependencies:
'@emotion/hash': 0.8.0
'@types/node': 17.0.43
csstype: 3.0.11
dev: false
/cssesc/3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
dev: true
/csstype/2.6.20:
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
/csstype/3.0.11:
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
dev: false
/dargs/7.0.0:
resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
engines: {node: '>=8'}
dev: true
/date-fns-tz/1.3.4_date-fns@2.28.0:
resolution: {integrity: sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==}
peerDependencies:
date-fns: '>=2.0.0'
dependencies:
date-fns: 2.28.0
dev: false
/date-fns/2.28.0:
resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==}
engines: {node: '>=0.11'}
dev: false
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@ -2012,11 +1938,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/diff-sequences/27.5.1:
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dev: false
/diff/4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
@ -2476,10 +2397,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/evtd/0.2.3:
resolution: {integrity: sha512-tmiT1YUVqFjTY+BSBOAskL83xNx41iUfpvKP6Gcd/xMHjg3mnER98jXGXJyKnxCG19uPc6EhZiUC+MUyvoqCtw==}
dev: false
/execa/5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@ -2748,7 +2665,7 @@ packages:
hasBin: true
dependencies:
dargs: 7.0.0
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
meow: 8.1.2
split2: 3.2.2
through2: 4.0.2
@ -2875,6 +2792,7 @@ packages:
/has-flag/4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
dev: true
/has-property-descriptors/1.0.0:
resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
@ -3031,7 +2949,7 @@ packages:
cli-width: 3.0.0
external-editor: 3.1.0
figures: 3.2.0
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
mute-stream: 0.0.8
ora: 5.4.1
run-async: 2.4.1
@ -3291,31 +3209,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/jest-diff/27.5.1:
resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
chalk: 4.1.2
diff-sequences: 27.5.1
jest-get-type: 27.5.1
pretty-format: 27.5.1
dev: false
/jest-get-type/27.5.1:
resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dev: false
/jest-matcher-utils/27.5.1:
resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
chalk: 4.1.2
jest-diff: 27.5.1
jest-get-type: 27.5.1
pretty-format: 27.5.1
dev: false
/js-stringify/1.0.2:
resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
dev: true
@ -3452,10 +3345,6 @@ packages:
p-locate: 5.0.0
dev: true
/lodash-es/4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
/lodash.get/4.4.2:
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
dev: true
@ -3466,6 +3355,7 @@ packages:
/lodash/4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: true
/log-symbols/4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
@ -3634,31 +3524,6 @@ packages:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
dev: true
/naive-ui/2.30.3_vue@3.2.37:
resolution: {integrity: sha512-s6iphodOfLklhgAGtzhzoE0oPi6eY72UufUDRySBbfV+r+64vw9omYUOqk3Z1M/t/Mh8KwqW6z+ex8bYftFKPA==}
peerDependencies:
vue: ^3.0.0
dependencies:
'@css-render/plugin-bem': 0.15.10_css-render@0.15.10
'@css-render/vue3-ssr': 0.15.10_vue@3.2.37
'@types/lodash': 4.14.185
'@types/lodash-es': 4.17.6
async-validator: 4.1.1
css-render: 0.15.10
date-fns: 2.28.0
date-fns-tz: 1.3.4_date-fns@2.28.0
evtd: 0.2.3
highlight.js: 11.5.1
lodash: 4.17.21
lodash-es: 4.17.21
seemly: 0.3.4
treemate: 0.3.11
vdirs: 0.1.8_vue@3.2.37
vooks: 0.2.12_vue@3.2.37
vue: 3.2.37
vueuc: 0.4.44_vue@3.2.37
dev: false
/nanoid/3.3.4:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -4100,15 +3965,6 @@ packages:
hasBin: true
dev: true
/pretty-format/27.5.1:
resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
ansi-regex: 5.0.1
ansi-styles: 5.2.0
react-is: 17.0.2
dev: false
/promise/7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
dependencies:
@ -4225,10 +4081,6 @@ packages:
engines: {node: '>=8'}
dev: true
/react-is/17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
dev: false
/read-pkg-up/7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
engines: {node: '>=8'}
@ -4444,12 +4296,6 @@ packages:
engines: {node: ^14.13.1 || >=16.0.0}
dev: false
/seemly/0.3.4:
resolution: {integrity: sha512-/crL+UfbtYd6NdLdnf58xaABfeSRt5uKE4N1SFQAW7nIznOrJQchAaslJHxV8/iAfV0LWInrmxJBFdDb0c2/sw==}
dependencies:
'@types/jest': 27.5.2
dev: false
/semver/5.7.1:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
hasBin: true
@ -4650,6 +4496,7 @@ packages:
engines: {node: '>=8'}
dependencies:
has-flag: 4.0.0
dev: true
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
@ -4713,10 +4560,6 @@ packages:
resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
dev: true
/treemate/0.3.11:
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
dev: false
/trim-newlines/3.0.1:
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
engines: {node: '>=8'}
@ -4741,7 +4584,7 @@ packages:
'@tsconfig/node12': 1.0.10
'@tsconfig/node14': 1.0.2
'@tsconfig/node16': 1.0.3
'@types/node': 17.0.43
'@types/node': registry.npmmirror.com/@types/node/17.0.43
acorn: 8.7.1
acorn-walk: 8.2.0
arg: 4.1.3
@ -4908,15 +4751,6 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
/vdirs/0.1.8_vue@3.2.37:
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
peerDependencies:
vue: ^3.0.11
dependencies:
evtd: 0.2.3
vue: 3.2.37
dev: false
/vite-plugin-compression/0.5.1_vite@2.9.9:
resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
peerDependencies:
@ -5001,15 +4835,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/vooks/0.2.12_vue@3.2.37:
resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
peerDependencies:
vue: ^3.0.0
dependencies:
evtd: 0.2.3
vue: 3.2.37
dev: false
/vscode-css-languageservice/5.4.2:
resolution: {integrity: sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==}
dependencies:
@ -5183,7 +5008,7 @@ packages:
eslint-visitor-keys: 3.3.0
espree: 9.3.2
esquery: 1.4.0
lodash: 4.17.21
lodash: registry.npmmirror.com/lodash/4.17.21
semver: 7.3.7
transitivePeerDependencies:
- supports-color
@ -5266,21 +5091,6 @@ packages:
vue: 3.2.37
dev: false
/vueuc/0.4.44_vue@3.2.37:
resolution: {integrity: sha512-2sLWo1Ow3DRKTDvGVlaWlf0KL+LOqeO6zlvb6nUxWxqj4VjUpg7sMtH+xtvBK+oOXH4goGt1RyLMaBVgPFpqHw==}
peerDependencies:
vue: ^3.0.11
dependencies:
'@css-render/vue3-ssr': 0.15.10_vue@3.2.37
'@juggle/resize-observer': 3.3.1
css-render: 0.15.10
evtd: 0.2.3
seemly: 0.3.4
vdirs: 0.1.8_vue@3.2.37
vooks: 0.2.12_vue@3.2.37
vue: 3.2.37
dev: false
/wcwidth/1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
dependencies:
@ -5396,6 +5206,104 @@ packages:
dependencies:
tslib: 2.3.0
registry.npmmirror.com/@css-render/plugin-bem/0.15.10_css-render@0.15.10:
resolution: {integrity: sha512-V7b08sM2PWJlXI7BJiVIa0Sg30H3u/jHay4AclNXfF2yRFwwb4ZJjggsMfzwj3WSihAdNf2WTqvOU5qsOD80Dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.10.tgz}
id: registry.npmmirror.com/@css-render/plugin-bem/0.15.10
name: '@css-render/plugin-bem'
version: 0.15.10
peerDependencies:
css-render: ~0.15.10
dependencies:
css-render: registry.npmmirror.com/css-render/0.15.10
dev: false
registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37:
resolution: {integrity: sha512-keGKnkB2nyVGoA8GezMKNsmvTGXEzgLOGGlgshwOTSEzd1dsROyZ2m/khJ9jV5zbzDM4rWeAWbWF0zwHemsJcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.10.tgz}
id: registry.npmmirror.com/@css-render/vue3-ssr/0.15.10
name: '@css-render/vue3-ssr'
version: 0.15.10
peerDependencies:
vue: ^3.0.11
dependencies:
vue: 3.2.37
dev: false
registry.npmmirror.com/@emotion/hash/0.8.0:
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz}
name: '@emotion/hash'
version: 0.8.0
dev: false
registry.npmmirror.com/@juggle/resize-observer/3.3.1:
resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz}
name: '@juggle/resize-observer'
version: 3.3.1
dev: false
registry.npmmirror.com/@types/lodash-es/4.17.6:
resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz}
name: '@types/lodash-es'
version: 4.17.6
dependencies:
'@types/lodash': registry.npmmirror.com/@types/lodash/4.14.185
dev: false
registry.npmmirror.com/@types/lodash/4.14.185:
resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.185.tgz}
name: '@types/lodash'
version: 4.14.185
dev: false
registry.npmmirror.com/@types/node/17.0.43:
resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.43.tgz}
name: '@types/node'
version: 17.0.43
registry.npmmirror.com/async-validator/4.1.1:
resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.1.1.tgz}
name: async-validator
version: 4.1.1
dev: false
registry.npmmirror.com/css-render/0.15.10:
resolution: {integrity: sha512-6j5acvm81sXTHJiF47FNNICtDpF74YoWk1xEK3qQvdqgW6vc+OXrPqflL6m8f5GE6XuFYrbACNEd17kraCSBAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-render/-/css-render-0.15.10.tgz}
name: css-render
version: 0.15.10
dependencies:
'@emotion/hash': registry.npmmirror.com/@emotion/hash/0.8.0
'@types/node': registry.npmmirror.com/@types/node/17.0.43
csstype: registry.npmmirror.com/csstype/3.0.11
dev: false
registry.npmmirror.com/csstype/2.6.20:
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz}
name: csstype
version: 2.6.20
registry.npmmirror.com/csstype/3.0.11:
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz}
name: csstype
version: 3.0.11
dev: false
registry.npmmirror.com/date-fns-tz/1.3.4_date-fns@2.28.0:
resolution: {integrity: sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-1.3.4.tgz}
id: registry.npmmirror.com/date-fns-tz/1.3.4
name: date-fns-tz
version: 1.3.4
peerDependencies:
date-fns: '>=2.0.0'
dependencies:
date-fns: registry.npmmirror.com/date-fns/2.28.0
dev: false
registry.npmmirror.com/date-fns/2.28.0:
resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-2.28.0.tgz}
name: date-fns
version: 2.28.0
engines: {node: '>=0.11'}
dev: false
registry.npmmirror.com/echarts-wordcloud/2.0.0_echarts@5.3.3:
resolution: {integrity: sha512-K7l6pTklqdW7ZWzT/1CS0KhBSINr/cd7c5N1fVMzZMwLQHEwT7x+nivK7g5hkVh7WNcAv4Dn6/ZS5zMKRozC1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts-wordcloud/-/echarts-wordcloud-2.0.0.tgz}
id: registry.npmmirror.com/echarts-wordcloud/2.0.0
@ -5627,6 +5535,12 @@ packages:
dev: true
optional: true
registry.npmmirror.com/evtd/0.2.4:
resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz}
name: evtd
version: 0.2.4
dev: false
registry.npmmirror.com/fsevents/2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
name: fsevents
@ -5645,6 +5559,64 @@ packages:
dev: true
optional: true
registry.npmmirror.com/highlight.js/11.5.1:
resolution: {integrity: sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-11.5.1.tgz}
name: highlight.js
version: 11.5.1
engines: {node: '>=12.0.0'}
dev: false
registry.npmmirror.com/lodash-es/4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz}
name: lodash-es
version: 4.17.21
dev: false
registry.npmmirror.com/lodash/4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
name: lodash
version: 4.17.21
registry.npmmirror.com/naive-ui/2.33.3_vue@3.2.37:
resolution: {integrity: sha512-yz2aKdghMVadtvCSBXyjU2bAuGmwLEUcbzmXdUhSdtcbI6mT+mT8vRy43FnbJangPQ87v080q453vtnydNcnhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/naive-ui/-/naive-ui-2.33.3.tgz}
id: registry.npmmirror.com/naive-ui/2.33.3
name: naive-ui
version: 2.33.3
peerDependencies:
vue: ^3.0.0
dependencies:
'@css-render/plugin-bem': registry.npmmirror.com/@css-render/plugin-bem/0.15.10_css-render@0.15.10
'@css-render/vue3-ssr': registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37
'@types/lodash': registry.npmmirror.com/@types/lodash/4.14.185
'@types/lodash-es': registry.npmmirror.com/@types/lodash-es/4.17.6
async-validator: registry.npmmirror.com/async-validator/4.1.1
css-render: registry.npmmirror.com/css-render/0.15.10
date-fns: registry.npmmirror.com/date-fns/2.28.0
date-fns-tz: registry.npmmirror.com/date-fns-tz/1.3.4_date-fns@2.28.0
evtd: registry.npmmirror.com/evtd/0.2.4
highlight.js: registry.npmmirror.com/highlight.js/11.5.1
lodash: registry.npmmirror.com/lodash/4.17.21
lodash-es: registry.npmmirror.com/lodash-es/4.17.21
seemly: registry.npmmirror.com/seemly/0.3.6
treemate: registry.npmmirror.com/treemate/0.3.11
vdirs: registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37
vooks: registry.npmmirror.com/vooks/0.2.12_vue@3.2.37
vue: 3.2.37
vueuc: registry.npmmirror.com/vueuc/0.4.49_vue@3.2.37
dev: false
registry.npmmirror.com/seemly/0.3.6:
resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/seemly/-/seemly-0.3.6.tgz}
name: seemly
version: 0.3.6
dev: false
registry.npmmirror.com/treemate/0.3.11:
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz}
name: treemate
version: 0.3.11
dev: false
registry.npmmirror.com/uglify-js/3.16.0:
resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.0.tgz}
name: uglify-js
@ -5654,3 +5626,45 @@ packages:
requiresBuild: true
dev: true
optional: true
registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37:
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz}
id: registry.npmmirror.com/vdirs/0.1.8
name: vdirs
version: 0.1.8
peerDependencies:
vue: ^3.0.11
dependencies:
evtd: registry.npmmirror.com/evtd/0.2.4
vue: 3.2.37
dev: false
registry.npmmirror.com/vooks/0.2.12_vue@3.2.37:
resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz}
id: registry.npmmirror.com/vooks/0.2.12
name: vooks
version: 0.2.12
peerDependencies:
vue: ^3.0.0
dependencies:
evtd: registry.npmmirror.com/evtd/0.2.4
vue: 3.2.37
dev: false
registry.npmmirror.com/vueuc/0.4.49_vue@3.2.37:
resolution: {integrity: sha512-WarAC44a/Yx78CxkAgROYLq+LkAeCGA/6wHidVoFmHLbzyF3SiP2nzRNGD/8zJeJInXv18EnWK6A//eGgMMq8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vueuc/-/vueuc-0.4.49.tgz}
id: registry.npmmirror.com/vueuc/0.4.49
name: vueuc
version: 0.4.49
peerDependencies:
vue: ^3.0.11
dependencies:
'@css-render/vue3-ssr': registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37
'@juggle/resize-observer': registry.npmmirror.com/@juggle/resize-observer/3.3.1
css-render: registry.npmmirror.com/css-render/0.15.10
evtd: registry.npmmirror.com/evtd/0.2.4
seemly: registry.npmmirror.com/seemly/0.3.6
vdirs: registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37
vooks: registry.npmmirror.com/vooks/0.2.12_vue@3.2.37
vue: 3.2.37
dev: false

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,4 @@
import Flipper from './index.vue'
type FlipType = 'up' | 'down'
export { Flipper, FlipType }

View File

@ -0,0 +1,224 @@
<template>
<div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
<div class="digital front" :data-front="frontTextFromData"></div>
<div class="digital back" :data-back="backTextFromData"></div>
</div>
</template>
<script lang="ts">
export default {
name: 'Flipper'
}
</script>
<script lang="ts" setup>
import { ref, PropType, watch } from 'vue'
import { FlipType } from '.'
const props = defineProps({
flipType: {
type: String as PropType<FlipType>,
default: () => {
return 'down'
}
},
count: {
type: [Number, String],
default: 0
},
duration: {
type: Number,
default: 600
},
width: {
type: Number,
default: 60
},
height: {
type: Number,
default: 100
},
radius: {
type: Number,
default: 10
},
frontColor: {
type: String,
default: '#ffffff'
},
backColor: {
type: String,
default: '#000000'
}
})
const isFlipping = ref(false)
const frontTextFromData = ref(props.count || 0)
const backTextFromData = ref(props.count || 0)
//
const flip = (front: string | number, back: string | number) => {
//
if (isFlipping.value) return
//
backTextFromData.value = back
frontTextFromData.value = front
// true
isFlipping.value = true
//
setTimeout(() => {
isFlipping.value = false // false
frontTextFromData.value = back
}, props.duration)
}
watch(
() => props.count,
(newVal, oldVal) => {
flip(oldVal as string | number, newVal as string | number)
},
{
immediate: true
}
)
</script>
<style lang="scss" scoped>
$frontColor: v-bind('props.frontColor');
$backColor: v-bind('props.backColor');
$radius: v-bind('`${props.radius}px`');
$width: v-bind('`${props.width}px`');
$height: v-bind('`${props.height}px`');
$perspective: v-bind('`${props.height * 2}px`');
$speed: v-bind('`${props.duration / 1000}s`');
$shadowColor: #000000;
$lineColor: #4a9ef8;
// #region
@keyframes frontFlipDown {
0% {
transform: perspective($perspective) rotateX(0deg);
}
100% {
transform: perspective($perspective) rotateX(-180deg);
}
}
@keyframes backFlipDown {
0% {
transform: perspective($perspective) rotateX(180deg);
}
100% {
transform: perspective($perspective) rotateX(0deg);
}
}
@keyframes frontFlipUp {
0% {
transform: perspective($perspective) rotateX(0deg);
}
100% {
transform: perspective($perspective) rotateX(180deg);
}
}
@keyframes backFlipUp {
0% {
transform: perspective($perspective) rotateX(-180deg);
}
100% {
transform: perspective($perspective) rotateX(0deg);
}
}
// #endregion
.M-Flipper {
display: inline-block;
position: relative;
width: $width;
height: $height;
line-height: $height;
border: solid 1px $backColor;
border-radius: $radius;
background: $frontColor;
font-size: $width;
color: $frontColor;
box-shadow: 0 0 6px rgba($color: $shadowColor, $alpha: 0.5); //
text-align: center;
// font-family: 'Helvetica Neue';
.digital:before,
.digital:after {
content: '';
position: absolute;
left: 0;
right: 0;
background: $backColor;
overflow: hidden;
box-sizing: border-box;
}
.digital.front:before,
.digital.front:after {
content: attr(data-front) !important;
}
.digital.back:before,
.digital.back:after {
content: attr(data-back) !important;
}
.digital:before {
top: 0;
bottom: 50%;
border-radius: $radius $radius 0 0;
border-bottom: solid 1px rgba($color: $lineColor, $alpha: 0.3); // 线
}
.digital:after {
top: 50%;
bottom: 0;
border-radius: 0 0 $radius $radius;
line-height: 0;
}
/*向下翻*/
&.down .front:before {
z-index: 3;
}
&.down .back:after {
z-index: 2;
transform-origin: 50% 0%;
transform: perspective($perspective) rotateX(180deg);
}
&.down .front:after,
&.down .back:before {
z-index: 1;
}
&.down.go .front:before {
transform-origin: 50% 100%;
animation: frontFlipDown $speed ease-in-out both;
box-shadow: 0 -2px 6px rgba($color: $lineColor, $alpha: 0.3);
backface-visibility: hidden;
}
&.down.go .back:after {
animation: backFlipDown $speed ease-in-out both;
}
/*向上翻*/
&.up .front:after {
z-index: 3;
}
&.up .back:before {
z-index: 2;
transform-origin: 50% 100%;
transform: perspective($perspective) rotateX(-180deg);
}
&.up .front:before,
&.up .back:after {
z-index: 1;
}
&.up.go .front:after {
transform-origin: 50% 0;
animation: frontFlipUp $speed ease-in-out both;
box-shadow: 0 2px 6px rgba($color: $lineColor, $alpha: 0.3);
backface-visibility: hidden;
}
&.up.go .back:before {
animation: backFlipUp $speed ease-in-out both;
}
}
</style>

View File

@ -0,0 +1,47 @@
import { PublicConfigClass } from '@/packages/public'
import { CreateComponentType } from '@/packages/index.d'
import { CountDownConfig } from './index'
import cloneDeep from 'lodash/cloneDeep'
import { chartInitConfig } from '@/settings/designSetting'
import { FlipType } from '@/components/Flipper'
type STYLE = '时分秒' | '冒号'
export interface OptionType {
dataset: number
useEndDate: boolean
endDate: number
style: STYLE
showDay: boolean
flipperBgColor: string
flipperTextColor: string
flipperWidth: number
flipperHeight: number
flipperRadius: number
flipperGap: number
flipperType: FlipType
flipperSpeed: number
}
export const option: OptionType = {
dataset: 10 * 60, // 10分钟
useEndDate: false,
endDate: new Date().getTime(), // 当前时间
style: '时分秒',
showDay: false,
flipperBgColor: '#16293E',
flipperTextColor: '#4A9EF8FF',
flipperWidth: 30,
flipperHeight: 50,
flipperRadius: 5,
flipperGap: 10,
flipperType: 'down',
flipperSpeed: 450
}
export default class Config extends PublicConfigClass implements CreateComponentType {
public key = CountDownConfig.key
public attr = { ...chartInitConfig, w: 500, h: 100, zIndex: -1 }
public chartConfig = cloneDeep(CountDownConfig)
public option = cloneDeep(option)
}

View File

@ -0,0 +1,98 @@
<template>
<collapse-item name="倒计时" expanded>
<setting-item-box name="内容" alone>
<setting-item name="计时(秒)">
<n-input-number
v-model:value="optionData.dataset"
size="small"
:min="0"
:disabled="optionData.useEndDate"
></n-input-number>
</setting-item>
<setting-item name="结束日期">
<n-date-picker v-model:value="optionData.endDate" type="datetime" :disabled="!optionData.useEndDate" />
</setting-item>
<setting-item>
<n-checkbox v-model:checked="optionData.useEndDate" size="small">使用固定结束日期</n-checkbox>
</setting-item>
</setting-item-box>
<setting-item-box name="样式">
<setting-item name="风格">
<n-select
v-model:value="optionData.style"
size="small"
:options="[
{ label: '时分秒', value: '时分秒' },
{ label: '冒号', value: '冒号' }
]"
></n-select>
</setting-item>
<setting-item>
<n-checkbox v-model:checked="optionData.showDay" size="small">显示天</n-checkbox>
</setting-item>
</setting-item-box>
</collapse-item>
<collapse-item name="翻牌" expanded>
<setting-item-box name="样式">
<setting-item name="宽度">
<n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="高度">
<n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="间隔">
<n-input-number v-model:value="optionData.flipperGap" size="small" :min="0"></n-input-number>
</setting-item>
<setting-item name="圆角">
<n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
</setting-item>
<setting-item name="背景色">
<n-color-picker
size="small"
:show-alpha="false"
:modes="['hex']"
v-model:value="optionData.flipperBgColor"
></n-color-picker>
</setting-item>
<setting-item name="字体色">
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
</setting-item>
</setting-item-box>
<setting-item-box name="行为">
<setting-item name="动画">
<n-select
v-model:value="optionData.flipperType"
size="small"
:options="[
{ label: '下翻', value: 'down' },
{ label: '上翻', value: 'up' }
]"
></n-select>
</setting-item>
<setting-item name="翻牌速度(毫秒)">
<n-input-number
v-model:value="optionData.flipperSpeed"
size="small"
:min="100"
:max="900"
:step="100"
></n-input-number>
</setting-item>
</setting-item-box>
</collapse-item>
</template>
<script setup lang="ts">
import { PropType } from 'vue'
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import { OptionType } from './config'
defineProps({
optionData: {
type: Object as PropType<OptionType>,
required: true
}
})
</script>

View File

@ -0,0 +1,14 @@
import image from '@/assets/images/chart/decorates/countdown.png'
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
export const CountDownConfig: ConfigType = {
key: 'CountDown',
chartKey: 'VCountDown',
conKey: 'VCCountDown',
title: '倒计时',
category: ChatCategoryEnum.MORE,
categoryName: ChatCategoryEnumName.MORE,
package: PackagesCategoryEnum.DECORATES,
image
}

View File

@ -0,0 +1,184 @@
<template>
<div>
<n-countdown
ref="countdownRef"
:duration="totalDuration"
:render="renderCountdown"
:active="countdownActive"
v-show="false"
/>
<n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
<template v-if="showDay">
<flipper
:count="item"
:width="flipperWidth"
:height="flipperHeight"
:front-color="flipperTextColor"
:back-color="flipperBgColor"
:radius="flipperRadius"
:flip-type="flipperType"
:duration="flipperSpeed"
v-for="(item, index) in daysFlipperData"
:key="index"
class="go-d-block"
/>
<div v-if="style === '时分秒'"></div>
<div v-else>:</div>
</template>
<flipper
:count="item"
:width="flipperWidth"
:height="flipperHeight"
:front-color="flipperTextColor"
:back-color="flipperBgColor"
:radius="flipperRadius"
:flip-type="flipperType"
:duration="flipperSpeed"
v-for="(item, index) in hoursFlipperData"
:key="index"
class="go-d-block"
/>
<div v-if="style === '时分秒'"></div>
<div v-else>:</div>
<flipper
:count="item"
:width="flipperWidth"
:height="flipperHeight"
:front-color="flipperTextColor"
:back-color="flipperBgColor"
:radius="flipperRadius"
:flip-type="flipperType"
:duration="flipperSpeed"
v-for="(item, index) in minutesFlipperData"
:key="index"
class="go-d-block"
/>
<div v-if="style === '时分秒'"></div>
<div v-else>:</div>
<flipper
:count="item"
:width="flipperWidth"
:height="flipperHeight"
:front-color="flipperTextColor"
:back-color="flipperBgColor"
:radius="flipperRadius"
:flip-type="flipperType"
:duration="flipperSpeed"
v-for="(item, index) in secondsFlipperData"
:key="index"
class="go-d-block"
/>
<div v-if="style === '时分秒'"></div>
</n-space>
</div>
</template>
<script setup lang="ts">
import { PropType, toRefs, watch, ref, onMounted } from 'vue'
import { CreateComponentType } from '@/packages/index.d'
import { Flipper } from '@/components/Flipper'
import { OptionType } from './config'
import { CountdownInst, CountdownProps } from 'naive-ui/es/countdown/src/Countdown'
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,
required: true
}
})
const { w, h } = toRefs(props.chartConfig.attr)
const {
dataset,
useEndDate,
endDate,
style,
showDay,
flipperBgColor,
flipperTextColor,
flipperWidth,
flipperHeight,
flipperRadius,
flipperGap,
flipperType,
flipperSpeed
} = toRefs(props.chartConfig.option as OptionType)
const countdownRef = ref<CountdownInst | null>()
const countdownActive = ref(false)
const totalDuration = ref(dataset.value * 1000)
const daysFlipperData = ref<string[] | number[]>([])
const hoursFlipperData = ref<string[] | number[]>([])
const minutesFlipperData = ref<string[] | number[]>([])
const secondsFlipperData = ref<string[] | number[]>([])
const getFlipperData = (val: string | number) => {
const len = Math.max(val.toString().length, 2)
return val
.toString()
.padStart(len, '0') // |
.split('') //
}
const updateDatasetHandler = (hours: number, minutes: number, seconds: number) => {
const days = Math.floor(hours / 24)
daysFlipperData.value = getFlipperData(days)
hoursFlipperData.value = getFlipperData(showDay.value ? hours % 24 : hours)
minutesFlipperData.value = getFlipperData(minutes)
secondsFlipperData.value = getFlipperData(seconds)
}
const renderCountdown: CountdownProps['render'] = ({ hours, minutes, seconds }) => {
updateDatasetHandler(hours, minutes, seconds)
}
const updateTotalDuration = () => {
countdownActive.value = false
totalDuration.value = useEndDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
countdownRef.value?.reset && countdownRef.value?.reset()
countdownActive.value = true
}
watch(
() => props.chartConfig.option.dataset,
() => {
updateTotalDuration()
},
{
immediate: true
}
)
watch(
() => props.chartConfig.option.endDate,
() => {
updateTotalDuration()
},
{
immediate: true
}
)
watch(
() => props.chartConfig.option.useEndDate,
() => {
updateTotalDuration()
},
{
immediate: true
}
)
onMounted(() => {
updateTotalDuration()
})
</script>
<style lang="scss" scoped>
@include go('decorates-more-countdown') {
width: v-bind('`${w}px`');
height: v-bind('`${h}px`');
font-size: v-bind('`${flipperWidth}px`');
line-height: v-bind('`${flipperHeight}px`');
color: v-bind('flipperTextColor');
user-select: none;
}
</style>

View File

@ -0,0 +1,39 @@
import { PublicConfigClass } from '@/packages/public'
import { CreateComponentType } from '@/packages/index.d'
import { FlipperNumberConfig } from './index'
import cloneDeep from 'lodash/cloneDeep'
import { chartInitConfig } from '@/settings/designSetting'
import { FlipType } from '@/components/Flipper'
export interface OptionType {
dataset: number | string
flipperLength: number
flipperBgColor: string
flipperTextColor: string
flipperWidth: number
flipperHeight: number
flipperRadius: number
flipperGap: number
flipperType: FlipType
flipperSpeed: number
}
export const option: OptionType = {
dataset: 3234,
flipperLength: 6,
flipperBgColor: '#16293E',
flipperTextColor: '#4A9EF8FF',
flipperWidth: 30,
flipperHeight: 50,
flipperRadius: 5,
flipperGap: 10,
flipperType: 'down',
flipperSpeed: 450
}
export default class Config extends PublicConfigClass implements CreateComponentType {
public key = FlipperNumberConfig.key
public attr = { ...chartInitConfig, w: 300, h: 100, zIndex: -1 }
public chartConfig = cloneDeep(FlipperNumberConfig)
public option = cloneDeep(option)
}

View File

@ -0,0 +1,72 @@
<template>
<collapse-item name="翻牌" :expanded="true">
<setting-item-box name="内容">
<setting-item name="初始值">
<n-input-number v-model:value="optionData.dataset" size="small" :min="0"></n-input-number>
</setting-item>
<setting-item name="翻牌个数">
<n-input-number v-model:value="optionData.flipperLength" size="small" :min="1"></n-input-number>
</setting-item>
</setting-item-box>
<setting-item-box name="样式">
<setting-item name="宽度">
<n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="高度">
<n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
</setting-item>
<setting-item name="间隔">
<n-input-number v-model:value="optionData.flipperGap" size="small" :min="0"></n-input-number>
</setting-item>
<setting-item name="圆角">
<n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
</setting-item>
<setting-item name="背景色">
<n-color-picker
size="small"
:show-alpha="false"
:modes="['hex']"
v-model:value="optionData.flipperBgColor"
></n-color-picker>
</setting-item>
<setting-item name="字体色">
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
</setting-item>
</setting-item-box>
<setting-item-box name="行为">
<setting-item name="动画">
<n-select
v-model:value="optionData.flipperType"
size="small"
:options="[
{ label: '下翻', value: 'down' },
{ label: '上翻', value: 'up' }
]"
></n-select>
</setting-item>
<setting-item name="翻牌速度(毫秒)">
<n-input-number
v-model:value="optionData.flipperSpeed"
size="small"
:min="100"
:max="900"
:step="100"
></n-input-number>
</setting-item>
</setting-item-box>
</collapse-item>
</template>
<script setup lang="ts">
import { PropType } from 'vue'
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import { OptionType } from './config'
defineProps({
optionData: {
type: Object as PropType<OptionType>,
required: true
}
})
</script>

View File

@ -0,0 +1,14 @@
import image from '@/assets/images/chart/decorates/flipper-number.png'
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
export const FlipperNumberConfig: ConfigType = {
key: 'FlipperNumber',
chartKey: 'VFlipperNumber',
conKey: 'VCFlipperNumber',
title: '数字翻牌',
category: ChatCategoryEnum.MORE,
categoryName: ChatCategoryEnumName.MORE,
package: PackagesCategoryEnum.DECORATES,
image
}

View File

@ -0,0 +1,81 @@
<template>
<n-space class="go-decorates-flipper-number" :size="flipperGap" align="center" justify="center">
<flipper
:count="item"
:width="flipperWidth"
:height="flipperHeight"
:front-color="flipperTextColor"
:back-color="flipperBgColor"
:radius="flipperRadius"
:flip-type="flipperType"
:duration="flipperSpeed"
v-for="(item, index) in flipperData"
:key="index"
class="go-d-block"
/>
</n-space>
</template>
<script setup lang="ts">
import { PropType, toRefs, watch, ref } from 'vue'
import { CreateComponentType } from '@/packages/index.d'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { useChartDataFetch } from '@/hooks'
import { Flipper } from '@/components/Flipper'
import { OptionType } from './config'
const props = defineProps({
chartConfig: {
type: Object as PropType<CreateComponentType>,
required: true
}
})
const { w, h } = toRefs(props.chartConfig.attr)
const {
flipperLength,
flipperBgColor,
flipperTextColor,
flipperWidth,
flipperHeight,
flipperRadius,
flipperGap,
flipperType,
flipperSpeed
} = toRefs(props.chartConfig.option as OptionType)
const flipperData = ref<string[] | number[]>([])
const getFlipperData = (val: string | number) => {
return val
.toString()
.padStart(flipperLength.value, '0') // |
.split('') //
.slice(flipperLength.value * -1) //
}
const updateDatasetHandler = (newVal: string | number) => {
flipperData.value = getFlipperData(newVal)
}
watch(
() => props.chartConfig.option,
newVal => {
updateDatasetHandler((newVal as OptionType).dataset)
},
{
immediate: true,
deep: true
}
)
useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number) => {
updateDatasetHandler(newVal)
})
</script>
<style lang="scss" scoped>
@include go('decorates-flipper-number') {
width: v-bind('`${w}px`');
height: v-bind('`${h}px`');
}
</style>

View File

@ -1,12 +1,12 @@
import image from '@/assets/images/chart/decorates/number.png'
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
export const NumberConfig: ConfigType = {
key: 'Number',
chartKey: 'VNumber',
conKey: 'VCNumber',
title: '数字翻牌',
title: '数字计数',
category: ChatCategoryEnum.MORE,
categoryName: ChatCategoryEnumName.MORE,
package: PackagesCategoryEnum.DECORATES,

View File

@ -1,5 +1,7 @@
import { NumberConfig } from './Number/index'
import { TimeCommonConfig } from './TimeCommon/index'
import { ClockConfig } from './Clock/index'
import { CountDownConfig } from './CountDown/index'
import { FlipperNumberConfig } from './FlipperNumber'
export default [TimeCommonConfig, NumberConfig, ClockConfig]
export default [NumberConfig, FlipperNumberConfig, TimeCommonConfig, CountDownConfig, ClockConfig]

View File

@ -1,4 +1,4 @@
import type { App } from 'vue';
import type { App } from 'vue'
import {
create,
NA,
@ -8,6 +8,7 @@ import {
NH3,
NH4,
NCode,
NCountdown,
NText,
NTime,
NEllipsis,
@ -98,7 +99,7 @@ import {
NWatermark,
NEmpty,
NCollapseTransition
} from 'naive-ui';
} from 'naive-ui'
const naive = create({
components: [
@ -109,6 +110,7 @@ const naive = create({
NH3,
NH4,
NCode,
NCountdown,
NText,
NTime,
NEllipsis,
@ -199,9 +201,9 @@ const naive = create({
NWatermark,
NEmpty,
NCollapseTransition
],
});
]
})
export function setupNaive(app: App<Element>) {
app.use(naive);
app.use(naive)
}