Commit 6c14d4e7 authored by haiyoucuv's avatar haiyoucuv

init

parent feb25ffe
......@@ -47,6 +47,9 @@ importers:
duiba-utils:
specifier: ^2.0.2
version: 2.0.2
emittery:
specifier: ^1.1.0
version: 1.1.0
gsap:
specifier: ^3.12.7
version: 3.12.7
......@@ -966,37 +969,37 @@ packages:
engines: {node: '>= 8'}
'@pixi/colord@2.9.6':
resolution: {integrity: sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==, tarball: http://npm.dui88.com:80/@pixi%2fcolord/-/colord-2.9.6.tgz}
resolution: {integrity: sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==}
'@protobufjs/aspromise@1.1.2':
resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=, tarball: http://npm.dui88.com:80/@protobufjs%2faspromise/-/aspromise-1.1.2.tgz}
resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=}
'@protobufjs/base64@1.1.2':
resolution: {integrity: sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=, tarball: http://npm.dui88.com:80/@protobufjs%2fbase64/-/base64-1.1.2.tgz}
resolution: {integrity: sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU=}
'@protobufjs/codegen@2.0.4':
resolution: {integrity: sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs=, tarball: http://npm.dui88.com:80/@protobufjs%2fcodegen/-/codegen-2.0.4.tgz}
resolution: {integrity: sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs=}
'@protobufjs/eventemitter@1.1.0':
resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=, tarball: http://npm.dui88.com:80/@protobufjs%2feventemitter/-/eventemitter-1.1.0.tgz}
resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=}
'@protobufjs/fetch@1.1.0':
resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=, tarball: http://npm.dui88.com:80/@protobufjs%2ffetch/-/fetch-1.1.0.tgz}
resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=}
'@protobufjs/float@1.0.2':
resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=, tarball: http://npm.dui88.com:80/@protobufjs%2ffloat/-/float-1.0.2.tgz}
resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=}
'@protobufjs/inquire@1.1.0':
resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=, tarball: http://npm.dui88.com:80/@protobufjs%2finquire/-/inquire-1.1.0.tgz}
resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=}
'@protobufjs/path@1.1.2':
resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=, tarball: http://npm.dui88.com:80/@protobufjs%2fpath/-/path-1.1.2.tgz}
resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=}
'@protobufjs/pool@1.1.0':
resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=, tarball: http://npm.dui88.com:80/@protobufjs%2fpool/-/pool-1.1.0.tgz}
resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=}
'@protobufjs/utf8@1.1.0':
resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=, tarball: http://npm.dui88.com:80/@protobufjs%2futf8/-/utf8-1.1.0.tgz}
resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=}
'@rollup/rollup-android-arm-eabi@4.40.1':
resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==, tarball: http://npm.dui88.com:80/@rollup%2frollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz}
......@@ -1221,10 +1224,10 @@ packages:
resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==}
'@types/css-font-loading-module@0.0.12':
resolution: {integrity: sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==, tarball: http://npm.dui88.com:80/@types%2fcss-font-loading-module/-/css-font-loading-module-0.0.12.tgz}
resolution: {integrity: sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==}
'@types/earcut@2.1.4':
resolution: {integrity: sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==, tarball: http://npm.dui88.com:80/@types%2fearcut/-/earcut-2.1.4.tgz}
resolution: {integrity: sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==}
'@types/eslint-scope@3.7.7':
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, tarball: http://npm.dui88.com:80/@types%2feslint-scope/-/eslint-scope-3.7.7.tgz}
......@@ -1236,7 +1239,7 @@ packages:
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/estree@1.0.7':
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==, tarball: http://npm.dui88.com:80/@types%2festree/-/estree-1.0.7.tgz}
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
'@types/howler@2.2.12':
resolution: {integrity: sha512-hy769UICzOSdK0Kn1FBk4gN+lswcj1EKRkmiDtMkUGvFfYJzgaDXmVXkSShS2m89ERAatGIPnTUlp2HhfkVo5g==}
......@@ -1376,10 +1379,10 @@ packages:
resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==, tarball: http://npm.dui88.com:80/@webassemblyjs%2fwast-printer/-/wast-printer-1.14.1.tgz}
'@webgpu/types@0.1.54':
resolution: {integrity: sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg==, tarball: http://npm.dui88.com:80/@webgpu%2ftypes/-/types-0.1.54.tgz}
resolution: {integrity: sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg==}
'@xmldom/xmldom@0.8.10':
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==, tarball: http://npm.dui88.com:80/@xmldom%2fxmldom/-/xmldom-0.8.10.tgz}
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==}
engines: {node: '>=10.0.0'}
'@xtuc/ieee754@1.2.0':
......@@ -1444,7 +1447,7 @@ packages:
resolution: {integrity: sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=}
asynckit@0.4.0:
resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=, tarball: http://npm.dui88.com:80/asynckit/-/asynckit-0.4.0.tgz}
resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=}
autoprefixer@10.4.20:
resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
......@@ -1454,7 +1457,7 @@ packages:
postcss: ^8.1.0
axios@1.9.0:
resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==, tarball: http://npm.dui88.com:80/axios/-/axios-1.9.0.tgz}
resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
babel-plugin-polyfill-corejs2@0.4.12:
resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==}
......@@ -1519,11 +1522,11 @@ packages:
esbuild: '>=0.17'
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, tarball: http://npm.dui88.com:80/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz}
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bound@1.0.3:
resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==, tarball: http://npm.dui88.com:80/call-bound/-/call-bound-1.0.3.tgz}
resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
engines: {node: '>= 0.4'}
callsites@3.1.0:
......@@ -1566,7 +1569,7 @@ packages:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
combined-stream@1.0.8:
resolution: {integrity: sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=, tarball: http://npm.dui88.com:80/combined-stream/-/combined-stream-1.0.8.tgz}
resolution: {integrity: sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=}
engines: {node: '>= 0.8'}
commander@13.1.0:
......@@ -1595,7 +1598,7 @@ packages:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
copy-anything@2.0.6:
resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, tarball: http://npm.dui88.com:80/copy-anything/-/copy-anything-2.0.6.tgz}
resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
copy-to@2.0.1:
resolution: {integrity: sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=}
......@@ -1698,7 +1701,7 @@ packages:
engines: {node: '>= 0.10.0'}
delayed-stream@1.0.0:
resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=, tarball: http://npm.dui88.com:80/delayed-stream/-/delayed-stream-1.0.0.tgz}
resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=}
engines: {node: '>=0.4.0'}
destroy@1.2.0:
......@@ -1735,11 +1738,11 @@ packages:
resolution: {integrity: sha512-xik6sEQfyiUBYhJZV96AYzy6/p7bYZAzHUBCPfHOFe6iHHUIibvBW2bA/NgSpvRdQ3+Sb5oWtOoLPGPH5+dtzQ==}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, tarball: http://npm.dui88.com:80/dunder-proto/-/dunder-proto-1.0.1.tgz}
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
earcut@2.2.4:
resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==, tarball: http://npm.dui88.com:80/earcut/-/earcut-2.2.4.tgz}
resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
ee-first@1.1.1:
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
......@@ -1747,6 +1750,10 @@ packages:
electron-to-chromium@1.5.102:
resolution: {integrity: sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==}
emittery@1.1.0:
resolution: {integrity: sha512-rsX7ktqARv/6UQDgMaLfIqUWAEzzbCQiVh7V9rhDXp6c37yoJcks12NVD+XPkgl4AEavmNhVfrhGoqYwIsMYYA==}
engines: {node: '>=14.16'}
encodeurl@1.0.2:
resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
engines: {node: '>= 0.8'}
......@@ -1771,26 +1778,26 @@ packages:
hasBin: true
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, tarball: http://npm.dui88.com:80/es-define-property/-/es-define-property-1.0.1.tgz}
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, tarball: http://npm.dui88.com:80/es-errors/-/es-errors-1.3.0.tgz}
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
es-module-lexer@1.6.0:
resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==, tarball: http://npm.dui88.com:80/es-module-lexer/-/es-module-lexer-1.6.0.tgz}
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, tarball: http://npm.dui88.com:80/es-object-atoms/-/es-object-atoms-1.1.1.tgz}
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
es-set-tostringtag@2.1.0:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, tarball: http://npm.dui88.com:80/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz}
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
esbuild@0.25.3:
resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==, tarball: http://npm.dui88.com:80/esbuild/-/esbuild-0.25.3.tgz}
resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==}
engines: {node: '>=18'}
hasBin: true
......@@ -1867,7 +1874,7 @@ packages:
engines: {node: '>=0.10.0'}
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, tarball: http://npm.dui88.com:80/eventemitter3/-/eventemitter3-5.0.1.tgz}
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
events@3.3.0:
resolution: {integrity: sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=, tarball: http://npm.dui88.com:80/events/-/events-3.3.0.tgz}
......@@ -1897,7 +1904,7 @@ packages:
resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
fdir@6.4.4:
resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==, tarball: http://npm.dui88.com:80/fdir/-/fdir-6.4.4.tgz}
resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
......@@ -1928,7 +1935,7 @@ packages:
resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
follow-redirects@1.15.9:
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==, tarball: http://npm.dui88.com:80/follow-redirects/-/follow-redirects-1.15.9.tgz}
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
......@@ -1937,7 +1944,7 @@ packages:
optional: true
form-data@4.0.2:
resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==, tarball: http://npm.dui88.com:80/form-data/-/form-data-4.0.2.tgz}
resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
engines: {node: '>= 6'}
formstream@1.5.1:
......@@ -1959,18 +1966,18 @@ packages:
engines: {node: '>=6.9.0'}
get-intrinsic@1.2.7:
resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==, tarball: http://npm.dui88.com:80/get-intrinsic/-/get-intrinsic-1.2.7.tgz}
resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, tarball: http://npm.dui88.com:80/get-proto/-/get-proto-1.0.1.tgz}
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
get-ready@1.0.0:
resolution: {integrity: sha1-+RgX8emt7P6hOlYq38jeiDqzR4I=}
gifuct-js@2.1.2:
resolution: {integrity: sha512-rI2asw77u0mGgwhV3qA+OEgYqaDn5UNqgs+Bx0FGwSpuqfYn+Ir6RQY5ENNQ8SbIiG/m5gVa7CD5RriO4f4Lsg==, tarball: http://npm.dui88.com:80/gifuct-js/-/gifuct-js-2.1.2.tgz}
resolution: {integrity: sha512-rI2asw77u0mGgwhV3qA+OEgYqaDn5UNqgs+Bx0FGwSpuqfYn+Ir6RQY5ENNQ8SbIiG/m5gVa7CD5RriO4f4Lsg==}
glob-parent@5.1.2:
resolution: {integrity: sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=}
......@@ -1996,7 +2003,7 @@ packages:
engines: {node: '>=18'}
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, tarball: http://npm.dui88.com:80/gopd/-/gopd-1.2.0.tgz}
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
graceful-fs@4.2.11:
......@@ -2013,11 +2020,11 @@ packages:
engines: {node: '>=8'}
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, tarball: http://npm.dui88.com:80/has-symbols/-/has-symbols-1.1.0.tgz}
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, tarball: http://npm.dui88.com:80/has-tostringtag/-/has-tostringtag-1.0.2.tgz}
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
hasown@2.0.2:
......@@ -2088,7 +2095,7 @@ packages:
resolution: {integrity: sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ==}
is-what@3.14.1:
resolution: {integrity: sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=, tarball: http://npm.dui88.com:80/is-what/-/is-what-3.14.1.tgz}
resolution: {integrity: sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=}
isarray@1.0.0:
resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
......@@ -2097,7 +2104,7 @@ packages:
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
ismobilejs@1.1.1:
resolution: {integrity: sha1-xWygro5Sskyg8iul7zIVot27qg4=, tarball: http://npm.dui88.com:80/ismobilejs/-/ismobilejs-1.1.1.tgz}
resolution: {integrity: sha1-xWygro5Sskyg8iul7zIVot27qg4=}
isstream@0.1.2:
resolution: {integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=}
......@@ -2114,7 +2121,7 @@ packages:
resolution: {integrity: sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=}
js-binary-schema-parser@2.0.3:
resolution: {integrity: sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==, tarball: http://npm.dui88.com:80/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz}
resolution: {integrity: sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==}
js-tokens@4.0.0:
resolution: {integrity: sha1-GSA/tZmR35jjoocFDUZHzerzJJk=}
......@@ -2170,7 +2177,7 @@ packages:
webpack: ^5.0.0
less@4.3.0:
resolution: {integrity: sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==, tarball: http://npm.dui88.com:80/less/-/less-4.3.0.tgz}
resolution: {integrity: sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==}
engines: {node: '>=14'}
hasBin: true
......@@ -2278,7 +2285,7 @@ packages:
resolution: {integrity: sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=}
long@5.3.1:
resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==, tarball: http://npm.dui88.com:80/long/-/long-5.3.1.tgz}
resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==}
loose-envify@1.4.0:
resolution: {integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=}
......@@ -2295,7 +2302,7 @@ packages:
engines: {node: '>=6'}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, tarball: http://npm.dui88.com:80/math-intrinsics/-/math-intrinsics-1.1.0.tgz}
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
mdn-data@2.0.28:
......@@ -2323,11 +2330,11 @@ packages:
engines: {node: '>=8.6'}
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, tarball: http://npm.dui88.com:80/mime-db/-/mime-db-1.52.0.tgz}
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, tarball: http://npm.dui88.com:80/mime-types/-/mime-types-2.1.35.tgz}
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
mime@1.6.0:
......@@ -2355,7 +2362,7 @@ packages:
hasBin: true
mobx-react-lite@4.1.0:
resolution: {integrity: sha512-QEP10dpHHBeQNv1pks3WnHRCem2Zp636lq54M2nKO2Sarr13pL4u6diQXf65yzXUn0mkk18SyIDCm9UOJYTi1w==, tarball: http://npm.dui88.com:80/mobx-react-lite/-/mobx-react-lite-4.1.0.tgz}
resolution: {integrity: sha512-QEP10dpHHBeQNv1pks3WnHRCem2Zp636lq54M2nKO2Sarr13pL4u6diQXf65yzXUn0mkk18SyIDCm9UOJYTi1w==}
peerDependencies:
mobx: ^6.9.0
react: ^16.8.0 || ^17 || ^18 || ^19
......@@ -2368,7 +2375,7 @@ packages:
optional: true
mobx-react@9.2.0:
resolution: {integrity: sha512-dkGWCx+S0/1mfiuFfHRH8D9cplmwhxOV5CkXMp38u6rQGG2Pv3FWYztS0M7ncR6TyPRQKaTG/pnitInoYE9Vrw==, tarball: http://npm.dui88.com:80/mobx-react/-/mobx-react-9.2.0.tgz}
resolution: {integrity: sha512-dkGWCx+S0/1mfiuFfHRH8D9cplmwhxOV5CkXMp38u6rQGG2Pv3FWYztS0M7ncR6TyPRQKaTG/pnitInoYE9Vrw==}
peerDependencies:
mobx: ^6.9.0
react: ^16.8.0 || ^17 || ^18 || ^19
......@@ -2381,7 +2388,7 @@ packages:
optional: true
mobx@6.13.7:
resolution: {integrity: sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==, tarball: http://npm.dui88.com:80/mobx/-/mobx-6.13.7.tgz}
resolution: {integrity: sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==}
mockjs@1.1.0:
resolution: {integrity: sha1-5qDDeOkZBtuv8gkRzAJzs8fXWwY=}
......@@ -2400,7 +2407,7 @@ packages:
resolution: {integrity: sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=}
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==, tarball: http://npm.dui88.com:80/nanoid/-/nanoid-3.3.8.tgz}
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
......@@ -2438,7 +2445,7 @@ packages:
engines: {node: '>=0.10.0'}
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, tarball: http://npm.dui88.com:80/object-inspect/-/object-inspect-1.13.4.tgz}
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
on-finished@2.3.0:
......@@ -2478,11 +2485,11 @@ packages:
engines: {node: '>=6'}
parse-node-version@1.0.1:
resolution: {integrity: sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=, tarball: http://npm.dui88.com:80/parse-node-version/-/parse-node-version-1.0.1.tgz}
resolution: {integrity: sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=}
engines: {node: '>= 0.10'}
parse-svg-path@0.1.2:
resolution: {integrity: sha1-en7A0esG+lMlx9PgCbhZoJtdSes=, tarball: http://npm.dui88.com:80/parse-svg-path/-/parse-svg-path-0.1.2.tgz}
resolution: {integrity: sha1-en7A0esG+lMlx9PgCbhZoJtdSes=}
parseurl@1.3.3:
resolution: {integrity: sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=}
......@@ -2513,15 +2520,15 @@ packages:
engines: {node: '>=8.6'}
picomatch@4.0.2:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==, tarball: http://npm.dui88.com:80/picomatch/-/picomatch-4.0.2.tgz}
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
pify@4.0.1:
resolution: {integrity: sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=, tarball: http://npm.dui88.com:80/pify/-/pify-4.0.1.tgz}
resolution: {integrity: sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=}
engines: {node: '>=6'}
pixi.js@8.9.1:
resolution: {integrity: sha512-2vF5Yu9WC/83ly2tCGkjb+ZGnrr+vlKtZezmD0AmJEQoYZO5nL94806l+PVcJBKW6qrF0YHtbh0ubb6CB7/8Rg==, tarball: http://npm.dui88.com:80/pixi.js/-/pixi.js-8.9.1.tgz}
resolution: {integrity: sha512-2vF5Yu9WC/83ly2tCGkjb+ZGnrr+vlKtZezmD0AmJEQoYZO5nL94806l+PVcJBKW6qrF0YHtbh0ubb6CB7/8Rg==}
platform@1.3.6:
resolution: {integrity: sha1-SLTOmDFksgnC1FoQetsx9HOm56c=}
......@@ -2705,7 +2712,7 @@ packages:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==, tarball: http://npm.dui88.com:80/postcss/-/postcss-8.5.3.tgz}
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
......@@ -2720,14 +2727,14 @@ packages:
engines: {node: '>=0.4.0'}
protobufjs@7.5.0:
resolution: {integrity: sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==, tarball: http://npm.dui88.com:80/protobufjs/-/protobufjs-7.5.0.tgz}
resolution: {integrity: sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==}
engines: {node: '>=12.0.0'}
proxy-from-env@1.1.0:
resolution: {integrity: sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=, tarball: http://npm.dui88.com:80/proxy-from-env/-/proxy-from-env-1.1.0.tgz}
resolution: {integrity: sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=}
prr@1.0.1:
resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=, tarball: http://npm.dui88.com:80/prr/-/prr-1.0.1.tgz}
resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=}
pump@3.0.2:
resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
......@@ -2737,7 +2744,7 @@ packages:
engines: {node: '>=6'}
qs@6.14.0:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==, tarball: http://npm.dui88.com:80/qs/-/qs-6.14.0.tgz}
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
queue-microtask@1.2.3:
......@@ -2808,7 +2815,7 @@ packages:
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rollup@4.40.1:
resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==, tarball: http://npm.dui88.com:80/rollup/-/rollup-4.40.1.tgz}
resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
......@@ -2859,19 +2866,19 @@ packages:
engines: {node: '>=8'}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, tarball: http://npm.dui88.com:80/side-channel-list/-/side-channel-list-1.0.0.tgz}
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, tarball: http://npm.dui88.com:80/side-channel-map/-/side-channel-map-1.0.1.tgz}
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, tarball: http://npm.dui88.com:80/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz}
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, tarball: http://npm.dui88.com:80/side-channel/-/side-channel-1.1.0.tgz}
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
source-map-js@1.2.1:
......@@ -2882,7 +2889,7 @@ packages:
resolution: {integrity: sha1-BP58f54e0tZiIzwoyys1ufY/bk8=}
source-map@0.6.1:
resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=}
resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=, tarball: http://npm.dui88.com:80/source-map/-/source-map-0.6.1.tgz}
engines: {node: '>=0.10.0'}
spark-utils@1.1.10:
......@@ -2936,10 +2943,10 @@ packages:
resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==}
tailwindcss@4.0.6:
resolution: {integrity: sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==, tarball: http://npm.dui88.com:80/tailwindcss/-/tailwindcss-4.0.6.tgz}
resolution: {integrity: sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==}
tailwindcss@4.1.4:
resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==, tarball: http://npm.dui88.com:80/tailwindcss/-/tailwindcss-4.1.4.tgz}
resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==}
tapable@2.2.1:
resolution: {integrity: sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=}
......@@ -2977,7 +2984,7 @@ packages:
resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=}
tinyglobby@0.2.13:
resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==, tarball: http://npm.dui88.com:80/tinyglobby/-/tinyglobby-0.2.13.tgz}
resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
engines: {node: '>=12.0.0'}
to-arraybuffer@1.0.1:
......@@ -2994,7 +3001,7 @@ packages:
typescript: '>=4.8.4'
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, tarball: http://npm.dui88.com:80/tslib/-/tslib-2.8.1.tgz}
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
type-check@0.4.0:
resolution: {integrity: sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=}
......@@ -3058,7 +3065,7 @@ packages:
optional: true
use-sync-external-store@1.4.0:
resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==, tarball: http://npm.dui88.com:80/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz}
resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
......@@ -3082,7 +3089,7 @@ packages:
vite: '>=4.0.0'
vite@6.3.3:
resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==, tarball: http://npm.dui88.com:80/vite/-/vite-6.3.3.tgz}
resolution: {integrity: sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
......@@ -4235,11 +4242,11 @@ snapshots:
'@types/eslint-scope@3.7.7':
dependencies:
'@types/eslint': 9.6.1
'@types/estree': 1.0.6
'@types/estree': 1.0.7
'@types/eslint@9.6.1':
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.7
'@types/json-schema': 7.0.15
'@types/estree@1.0.6': {}
......@@ -4864,6 +4871,8 @@ snapshots:
electron-to-chromium@1.5.102: {}
emittery@1.1.0: {}
encodeurl@1.0.2: {}
end-of-stream@1.4.4:
......@@ -6176,7 +6185,7 @@ snapshots:
webpack@5.98.0(esbuild@0.25.3):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.6
'@types/estree': 1.0.7
'@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
......
......@@ -15,7 +15,7 @@ export class PageCtrl extends Component<{}, PageCtrlState> {
};
static changePage: (Component: ComponentType<any>, props?: any) => void = null;
static backPage: (Component?: ComponentType<any>) => void = null;
static backPage: () => void = null;
componentDidMount() {
PageCtrl.changePage = this.changePage;
......
import {AnimatedSprite, Assets, Container, Sprite, Text} from "pixi.js";
import {globalMsg} from "@/pages/GamePage/event/MessageManager.ts";
import {GameEvent} from "@/pages/GamePage/GameEvent.ts";
import {ECard, ECardType} from "@/common.ts";
export type TCardInfo = {
cardName: ECard;
type: ECardType;
}
export class Card extends Container {
private _type: ECardType = ECardType.A;
set type(type: ECardType) {
this._type = type;
}
get type(): ECardType {
return this._type;
}
private _cardName: ECard = ECard.CARD_0;
set cardName(cardName: ECard) {
this._cardName = cardName;
}
get cardName(): ECard {
return this._cardName;
}
sp: Sprite = null;
selectImg: Sprite = null;
effect: AnimatedSprite = null;
private _select: boolean = false;
set select(select: boolean) {
this._select = select;
this.selectImg.visible = select;
this.effect.visible = select;
if (select) {
this.effect.gotoAndPlay(0);
}
}
get select(): boolean {
return this._select;
}
constructor(cardInfo: TCardInfo) {
super();
this.cardName = cardInfo.cardName;
this.type = cardInfo.type;
this.sp = new Sprite(Assets.get(`card/${this.cardName}${this.type}.png`));
this.addChild(this.sp);
this.selectImg = new Sprite(Assets.get("选中.png"));
this.selectImg.visible = false;
this.selectImg.position.set(-13, -18);
this.addChild(this.selectImg);
const textures = new Array(20).fill(1).map((_, i) => {
return Assets.get(`选中效果/选中效果_${i}.png`);
});
this.effect = new AnimatedSprite(textures);
this.addChild(this.effect);
this.effect.loop = false;
this.effect.animationSpeed = 0.5;
this.effect.gotoAndPlay(0);
this.effect.position.set(-46, -56);
this.effect.stop();
// const debugTxt = this.addChild(new Text({
// text: cardInfo.cardName,
// }));
// debugTxt.position.set(35, 50);
// debugTxt.eventMode = "none";
this.effect.eventMode = "none";
this.selectImg.eventMode = "none";
this.sp.on("touchstart", this.onTouchStart, this);
}
onTouchStart = () => {
globalMsg.emit(GameEvent.ClickCard, this);
}
}
@import "../../../res.less";
.CompositePanel {
width: 750px;
height: 1624px;
position: absolute;
left: 0;
top: 0;
background: rgba(0, 0, 0, 0.7);
.CompositeBg {
position: absolute;
left: 0;
top: 260px;
width: 750px;
height: 966px;
}
.CompositePanel_title {
font-size: 60px;
color: rgb(255, 255, 255);
text-align: center;
position: absolute;
left: 0;
top: 483.38px;
width: 750px;
font-weight: bold;
}
.card {
position: absolute;
width: 199px;
height: 269px;
pointer-events: none;
}
.card1 {
left: 162px;
top: 577px;
}
.card2 {
left: 391px;
top: 577px;
}
.CompositeEffect {
position: absolute;
left: 0;
top: 53px;
width: 750px;
height: 1318px;
}
.posterDiv {
position: absolute;
left: 0;
top: 0;
width: 750px;
height: 1624px;
.poster {
position: absolute;
left: 75px;
top: 213px;
width: 598px;
height: 1037px;
}
.posterSvga {
position: absolute;
left: 75px;
top: 213px;
width: 598px;
height: 1037px;
}
.posterBtn {
position: absolute;
left: 230px;
top: 1275px;
width: 300px;
height: 77px;
.webpBg("PosterPanel/收起海报.png");
}
}
}
import React, {HTMLAttributes} from "react";
import {observer} from "mobx-react";
import "./CompositePanel.less";
import {gsap} from "gsap";
import {SvgaPlayer} from "@grace/svgaplayer";
import bgSvga from "@/assets/svga/3输出宝箱动效.svga"
import effectSvga from "@/assets/svga/4打开光效.svga"
import posterSvga from "@/assets/svga/5输出刮卡.svga"
import {Button} from "@grace/ui";
import {globalMsg} from "@/pages/GamePage/event/MessageManager.ts";
import {GameEvent} from "@/pages/GamePage/GameEvent.ts";
import {ECard, ECardType} from "@/common.ts";
import musicStore from "@/store/musicStore.ts";
import collectPoster from "@/assets/music/收起海报.mp3";
export interface ICompositePanelProps extends HTMLAttributes<HTMLDivElement> {
count: number,
cardName: ECard,
}
@observer
class CompositePanel extends React.Component<ICompositePanelProps> {
state = {
showEffect: false,
showPoster: false,
}
componentDidMount() {
gsap.timeline({defaults: {ease: "sine.inOut"}})
.set(".card1", {x: -100 * remScale})
.to(".card1", {x: 0, scale: 1.1, duration: 0.666})
.to(".card1", {scale: 1, duration: 0.333})
.to(".card1", {x: 18 * remScale, duration: 0.333})
.to(".card1", {x: 0, duration: 0.333})
.to(".card1", {x: 18 * remScale, duration: 0.133})
gsap.timeline({defaults: {ease: "sine.inOut"}})
.set(".card2", {x: 100 * remScale})
.to(".card2", {x: 0, scale: 1.1, duration: 0.666})
.to(".card2", {scale: 1, duration: 0.333})
.to(".card2", {x: -18 * remScale, duration: 0.333})
.to(".card2", {x: 0, duration: 0.333})
.to(".card2", {x: -18 * remScale, duration: 0.133})
.call(() => {
this.setState({showEffect: true});
gsap.timeline({defaults: {ease: "sine.inOut"}})
.delay(0.5)
.to(".posterDiv", {scale: 1, duration: 0.333})
});
}
onEnd = () => {
}
clickPosterBtn = () => {
gsap.timeline({defaults: {ease: "sine.inOut"}})
.to(".CompositePanel", {background: "rgba(0,0,0,0)", duration: 0.233})
musicStore.playSound(collectPoster);
gsap.timeline({defaults: {ease: "sine.inOut"}})
.to(".CompositePanel", {
x: -180 * remScale, y: 520 * remScale,
scale: 0.1, duration: 0.5
})
.call(() => {
globalMsg.emit(GameEvent.PosterClose);
})
}
render() {
const {count, cardName} = this.props;
const {showEffect} = this.state;
const card1Src = new URL(`../../../assets/Game/card/${cardName}${ECardType.A}.png`, import.meta.url).href;
const card2Src = new URL(`../../../assets/Game/card/${cardName}${ECardType.B}.png`, import.meta.url).href;
const posterSrc = new URL(`../../../assets/poster/${cardName}.png`, import.meta.url).href;
return <div className="CompositePanel">
<SvgaPlayer className="CompositeBg" src={bgSvga}/>
<div className="CompositePanel_title">{count}</div>
<img src={card1Src} className="card card1"/>
<img src={card2Src} className="card card2"/>
{showEffect && <SvgaPlayer
className="CompositeEffect"
src={effectSvga}
loop={1}
onEnd={this.onEnd}
/>}
<div className="posterDiv" style={{
transform: "scale(0)"
}}>
<img className="poster" src={posterSrc}/>
<SvgaPlayer
className="posterSvga"
src={posterSvga}
loop={1}
/>
<Button className="posterBtn md11" onClick={this.clickPosterBtn}/>
</div>
</div>;
}
}
export default CompositePanel;
......@@ -26,55 +26,6 @@
height: 1624px;
}
.posterBtn {
position: absolute;
left: 18px;
top: 1285px;
width: 346px;
height: 120px;
.webpBg("GamePage/我的海报.png");
}
.dealCardBtn {
position: absolute;
left: 388px;
top: 1285px;
width: 347px;
height: 120px;
.webpBg("GamePage/发牌.png");
}
.backBtn {
position: absolute;
left: 0;
top: 270px;
width: 112px;
height: 60px;
.webpBg("GamePage/返回.png");
transform-origin: center left !important;
}
.progressTitle {
position: absolute;
left: 48px;
top: 366px;
width: 157px;
height: 55px;
.webpBg("GamePage/bt.png");
}
.progressTxt {
font-size: 38px;
color: rgb(237, 74, 14);
line-height: 2.514;
text-align: left;
position: absolute;
left: 212px;
top: 350px;
font-weight: bold;
}
.musicBtn {
position: absolute;
left: 678px;
......@@ -83,23 +34,4 @@
height: 46px;
}
.progressBar {
position: absolute;
left: 41px;
top: 425px;
width: 664px;
height: 43px;
.webpBg("GamePage/bar.png");
.progressFill {
position: absolute;
left: 10px;
top: 7px;
width: 648px;
height: 27px;
border-radius: 27px;
.webpBg("GamePage/fill.png");
background-size: 648px 27px;
}
}
}
......@@ -7,56 +7,23 @@ import {AnimatedSprite, Application, Assets, Sprite, Ticker} from "pixi.js";
import {Ease, Tween} from "./tween";
import bgImg from "../../assets/GamePage/bg.jpg";
import {Card, TCardInfo} from "@/pages/GamePage/Card.ts";
import {shuffle, waitTime} from "@/utils/utils.ts";
import {globalMsg} from "@/pages/GamePage/event/MessageManager.ts";
import {GameEvent} from "@/pages/GamePage/GameEvent.ts";
import CompositePanel from "@/pages/GamePage/CompositePanel/CompositePanel.tsx";
import {initBundle} from "@/pages/GamePage/Helper.ts";
import store from "@/store/store.ts";
import {PAGE_MAP} from "@/utils/constants.ts";
import gameStore from "@/store/gameStore.ts";
import {ECard, ECardType} from "@/common.ts";
import MusicBtn from "@/core/components/MusicBtn/MusicBtn.tsx";
import musicStore from "@/store/musicStore.ts";
const cardSlot = [
{x: 68, y: 587,},
{x: 275, y: 587,},
{x: 483, y: 587,},
{x: 68, y: 872,},
{x: 275, y: 872,},
{x: 483, y: 872,},
]
export interface IGamePageState {
compositeCard: ECard,
completeCount: number,
}
import chooseAudio from "@/assets/music/选择.mp3";
import { PageCtrl } from "@/core/ctrls/PageCtrl.tsx";
@observer
class GamePage extends React.Component {
state: IGamePageState = {
compositeCard: null,
completeCount: 0,
}
gameCanvas: HTMLCanvasElement = null;
app: Application = null;
cardData = [
null, null, null,
null, null, null
];
cardPool: TCardInfo[] = null;
chooseCard: Card[] = [];
async componentDidMount() {
await initBundle();
......@@ -66,86 +33,9 @@ class GamePage extends React.Component {
}
initEvent() {
globalMsg.on(GameEvent.ClickCard, this.onClickCard, this);
globalMsg.on(GameEvent.PosterClose, this.onPosterClose, this);
}
async onClickCard(event: GameEvent, card: Card) {
if (this.chooseCard.length >= 2) return;
if (card.select) {
this.chooseCard.splice(this.chooseCard.indexOf(card), 1);
card.select = false;
return;
}
musicStore.playSound(chooseAudio);
this.chooseCard.push(card);
card.select = true;
if (this.chooseCard.length === 2) {
await waitTime(1000);
const [card1, card2] = this.chooseCard;
if (card1.cardName === card2.cardName) {
card1.removeFromParent();
card2.removeFromParent();
this.cardData[this.cardData.indexOf(card1)] = null;
this.cardData[this.cardData.indexOf(card2)] = null;
this.setState({
compositeCard: card1.cardName,
completeCount: this.state.completeCount + 1
});
gameStore.poster(card1.cardName);
} else {
Toast.show("选错啦");
card1.select = false;
card2.select = false;
}
this.chooseCard.length = 0;
}
}
onPosterClose = () => {
this.setState({compositeCard: null,});
this.dealCard();
this.check();
}
check = () => {
const death = this.checkDeath();
const win = this.checkWin();
if (death || win) {
gameStore.submit(win, this.state.completeCount);
}
}
checkDeath() {
const cardMap = {};
for (let i = 0; i < this.cardData.length; i++) {
const card = this.cardData[i];
if (!card) continue;
if (cardMap[card.cardName]) {
return false;
} else {
cardMap[card.cardName] = true;
}
}
return true;
}
checkWin() {
const haveCard = this.cardData.filter(Boolean);
return !haveCard.length && !this.chooseCard.length;
}
componentWillUnmount() {
globalMsg.off(GameEvent.ClickCard, this.onClickCard, this);
globalMsg.off(GameEvent.PosterClose, this.onPosterClose, this);
this.app?.destroy();
window["__app"] = null;
}
......@@ -187,115 +77,22 @@ class GamePage extends React.Component {
Tween.flush();
};
initCardPool = () => {
const cardArr = Object.values(ECard);
shuffle(cardArr);
const pre = cardArr.splice(0, 2);
const poolHead: TCardInfo[] = [];
pre.forEach((card) => {
poolHead.push(
{cardName: card, type: ECardType.A,},
{cardName: card, type: ECardType.B,}
);
})
const poolTail = [];
cardArr.forEach((card) => {
poolTail.push(
{cardName: card, type: ECardType.A,},
{cardName: card, type: ECardType.B,}
);
})
this.cardPool = [
...shuffle(poolHead),
...shuffle(poolTail),
];
}
dealCard() {
if (!this.cardPool) this.initCardPool();
if (!this.cardPool.length) return;
let dealCount = 0;
this.cardData.forEach((card, index) => {
if (!card) {
const cardInfo = this.cardPool.shift();
card = new Card(cardInfo);
this.app.stage.addChild(card);
this.cardData[index] = card;
Tween.get(card)
.set({x: 500, y: 1300, scale: 0.1})
.wait(66 * dealCount++)
.to({
x: cardSlot[index].x,
y: cardSlot[index].y,
scale: 1,
}, 666, Ease.quadInOut);
}
});
}
/**
* 点击海报
*/
clickPoster = () => {
Toast.show("游戏结束后可在“活动首页”进行查看");
}
/**
* 点击发牌
*/
clickDealCard = () => {
if (this.cardPool && !this.cardPool.length) {
return Toast.show("全部卡牌已发完~");
}
const haveCard = this.cardData.filter(Boolean);
if (haveCard.length >= 6) {
return Toast.show("当前无空余卡槽位置~");
}
this.dealCard();
}
/**
* 点击返回
*/
clickBack = () => {
PageCtrl.changePage(PAGE_MAP.HOME_PAGE);
PageCtrl.backPage();
}
render() {
const {compositeCard, completeCount} = this.state;
return <div className="GamePage">
<div className="gameBg"/>
<canvas
className="gameCanvas"
ref={(el) => this.gameCanvas = el}
/>
<div className="progressTitle"/>
<div className="progressTxt">({completeCount}/8)</div>
<div className="progressBar">
<div className="progressFill"
style={{
width: `${completeCount / 8 * 648 / 100}rem`
}}
/>
</div>
<MusicBtn className="musicBtn md10"/>
<Button className="posterBtn md9" onClick={this.clickPoster}/>
<Button className="dealCardBtn md8" onClick={this.clickDealCard}/>
<Button className="backBtn md7" onClick={this.clickBack}/>
{compositeCard && <CompositePanel count={completeCount} cardName={compositeCard}/>}
<MusicBtn className="musicBtn"/>
<Button className="backBtn" onClick={this.clickBack}/>
</div>;
}
}
......
import {ListenerFunc} from "./EventMessage";
import {MessageEventData} from "./MessageManager";
/* 事件对象基类,继承该类将拥有发送和接送事件的能力 */
export class EventDispatcher {
protected _msg: MessageEventData | null = null;
/**
* 注册全局事件
* @param event 事件名
* @param listener 处理事件的侦听器函数
* @param object 侦听函数绑定的作用域对象
*/
on(event: string, listener: ListenerFunc, object: any) {
if (this._msg == null) {
this._msg = new MessageEventData();
}
this._msg.on(event, listener, object);
}
/**
* 移除全局事件
* @param event 事件名
*/
off(event: string) {
if (this._msg) {
this._msg.off(event);
}
}
/**
* 触发全局事件
* @param event 事件名
* @param args 事件参数
*/
dispatchEvent(event: string, ...args: any) {
if (this._msg == null) {
this._msg = new MessageEventData();
}
this._msg.dispatchEvent(event, ...args);
}
/**
* 销毁事件对象
*/
destroy() {
if (this._msg) {
this._msg.clear();
}
this._msg = null;
}
}
/**
* 全局事件监听方法
* @param event 事件名
* @param args 事件参数
*/
export type ListenerFunc = (event: string, ...args: any) => void
/** 框架内部全局事件 */
export enum EventMessage {
/** 游戏从后台进入事件 */
GAME_SHOW = "GAME_ENTER",
/** 游戏切到后台事件 */
GAME_HIDE = "GAME_EXIT",
/** 游戏画笔尺寸变化事件 */
GAME_RESIZE = "GAME_RESIZE",
/** 游戏全屏事件 */
GAME_FULL_SCREEN = "GAME_FULL_SCREEN",
/** 游戏旋转屏幕事件 */
GAME_ORIENTATION = "GAME_ORIENTATION"
}
import {ListenerFunc} from "./EventMessage";
class EventData {
public event!: string;
public listener!: ListenerFunc;
public object: any;
}
/** 批量注册、移除全局事件对象 */
export class MessageEventData {
private events: Map<string, Array<EventData>> = new Map();
/**
* 注册全局事件
* @param event 事件名
* @param listener 处理事件的侦听器函数
* @param object 侦听函数绑定的作用域对象
*/
on(event: string, listener: ListenerFunc, object: object) {
let eds = this.events.get(event);
if (eds == null) {
eds = [];
this.events.set(event, eds);
}
let ed: EventData = new EventData();
ed.event = event;
ed.listener = listener;
ed.object = object;
eds.push(ed);
globalMsg.on(event, listener, object);
}
/**
* 移除全局事件
* @param event 事件名
*/
off(event: string) {
let eds = this.events.get(event);
if (!eds) return;
for (let eb of eds) {
globalMsg.off(event, eb.listener, eb.object);
}
this.events.delete(event);
}
/**
* 触发全局事件
* @param event 事件名
* @param args 事件参数
*/
dispatchEvent(event: string, ...args: any) {
globalMsg.dispatchEvent(event, ...args);
}
/** 清除所有的全局事件监听 */
clear() {
const keys = Array.from(this.events.keys());
for (let event of keys) {
this.off(event)
}
}
}
/**
* 全局消息管理
* @help https://gitee.com/dgflash/oops-framework/wikis/pages?sort_id=12037894&doc_id=2873565
* @example
// 注册持续监听的全局事件
export class RoleViewComp extends Component{
onLoad(){
// 监听全局事件
oops.message.on(GameEvent.GameServerConnected, this.onHandler, this);
}
protected onDestroy() {
// 对象释放时取消注册的全局事件
oops.message.off(GameEvent.GameServerConnected, this.onHandler, this);
}
private onHandler(event: string, args: any) {
switch (event) {
case GameEvent.GameServerConnected:
console.log("处理游戏服务器连接成功后的逻辑");
break;
}
}
}
// 注册只触发一次的全局事件
export class RoleViewComp extends Component{
onLoad(){
// 监听一次事件,事件响应后,该监听自动移除
oops.message.once(GameEvent.GameServerConnected, this.onHandler, this);
}
private onHandler(event: string, args: any) {
switch (event) {
case GameEvent.GameServerConnected:
console.log("处理游戏服务器连接成功后的逻辑");
break;
}
}
}
*/
export class MessageManager {
private events: Map<string, Array<EventData>> = new Map();
/**
* 注册全局事件
* @param event 事件名
* @param listener 处理事件的侦听器函数
* @param object 侦听函数绑定的作用域对象
*/
on(event: string, listener: ListenerFunc, object: object) {
if (!event || !listener) {
console.warn(`注册【${event}】事件的侦听器函数为空`);
return;
}
let eds = this.events.get(event);
if (eds == null) {
eds = [];
this.events.set(event, eds);
}
let length = eds.length;
for (let i = 0; i < length; i++) {
let bin = eds[i];
if (bin.listener == listener && bin.object == object) {
console.warn(`名为【${event}】的事件重复注册侦听器`);
}
}
let data: EventData = new EventData();
data.event = event;
data.listener = listener;
data.object = object;
eds.push(data);
}
/**
* 监听一次事件,事件响应后,该监听自动移除
* @param event 事件名
* @param listener 事件触发回调方法
* @param object 侦听函数绑定的作用域对象
*/
once(event: string, listener: ListenerFunc, object: object) {
let _listener: any = ($event: string, ...$args: any) => {
this.off(event, _listener, object);
_listener = null;
listener.call(object, $event, $args);
}
this.on(event, _listener, object);
}
/**
* 移除全局事件
* @param event 事件名
* @param listener 处理事件的侦听器函数
* @param object 侦听函数绑定的作用域对象
*/
off(event: string, listener: Function, object: object) {
let eds = this.events.get(event);
if (!eds) {
console.log(`名为【${event}】的事件不存在`);
return;
}
let length = eds.length;
for (let i = 0; i < length; i++) {
let bin: EventData = eds[i];
if (bin.listener == listener && bin.object == object) {
eds.splice(i, 1);
break;
}
}
if (eds.length == 0) {
this.events.delete(event);
}
}
/**
* 触发全局事件
* @param event 事件名
* @param args 事件参数
*/
_dispatchEvent(event: string, ...args: any) {
let list = this.events.get(event);
if (list != null) {
let eds: Array<EventData> = list.concat();
let length = eds.length;
for (let i = 0; i < length; i++) {
let eventBin = eds[i];
eventBin.listener.call(eventBin.object, event, ...args);
}
}
}
dispatchEvent(event: string, ...args: any) {
this._dispatchEvent(event, ...args);
}
emit(event: string, ...args: any) {
this._dispatchEvent(event, ...args);
}
}
export const globalMsg = new MessageManager();
......@@ -47,18 +47,6 @@ class HomePage extends React.Component<any, any> {
ModalCtrl.showModal(RulePanel);
}
clickPoster = () => {
if(!store.judgeActTime(true, false)) return;
PageCtrl.changePage(PAGE_MAP.POSTER_PAGE);
}
clickDraw = () => {
if(!store.judgeActTime()) return;
store.changePage(PAGE_MAP.DRAW_PAGE);
}
render() {
const {remainTimes} = store.indexData
......@@ -77,11 +65,9 @@ class HomePage extends React.Component<any, any> {
<div className="cardBg"/>
<SvgaPlayer className="homeSvga" src={homeSvga}/>
<Button className="poster md4" onClick={this.clickPoster}/>
<div className="numBg">
剩余次数:{remainTimes}
</div>
<Button className="draw_icon" onClick={this.clickDraw}/>
<Button className="starGame md5" onClick={this.startGame}/>
</div>;
......
......@@ -4,6 +4,8 @@ import { PAGE_MAP } from "@/utils/constants.ts";
import store from "../../store/store";
import { preload } from "@/core/preload.ts";
import "./LoadingDemo.less";
import { PageCtrl } from "@/core/ctrls/PageCtrl.tsx";
import HomePage from "@/pages/HomePage/HomePage.tsx";
@observer
class LoadingDemo extends React.Component {
......@@ -41,7 +43,7 @@ class LoadingDemo extends React.Component {
jump = () => {
setTimeout(() => {
store.changePage(PAGE_MAP.HOME_PAGE); // 跳转页面
PageCtrl.changePage(HomePage); // 跳转页面
}, 100);
};
......
......@@ -6,6 +6,7 @@ import store from "@/store/store.ts";
import {PAGE_MAP} from "@/utils/constants.ts";
import {dateFormatter} from "@/utils/utils.ts";
import API from "@/api";
import { PageCtrl } from "@/core/ctrls/PageCtrl.tsx";
@observer
class MyPrize extends React.Component<any, any> {
......@@ -29,7 +30,7 @@ class MyPrize extends React.Component<any, any> {
}
clickBack = () => {
store.changePage(this.props?.from || PAGE_MAP.HOME_PAGE);
PageCtrl.backPage();
}
clickItem = (item) => {
......
......@@ -7,15 +7,6 @@
left: 0;
top: 0;
.FailEffect {
position: absolute;
left: 0;
top: 244px;
width: 750px;
height: 1032px;
.webpBg("common/氛围.png");
}
.FailBg {
position: absolute;
left: 93px;
......
......@@ -24,7 +24,6 @@ class FailPanel extends React.Component {
render() {
return <div className="FailPanel">
<div className="FailEffect"/>
<div className="FailBg"/>
<Button className="cancel md12" onClick={this.clickCancel}/>
......
@import "../../res.less";
.PosterPanel {
width: 750px;
height: 1624px;
position: absolute;
left: 0;
top: 0;
.popupCenterShow();
.poster {
position: absolute;
left: 75px;
top: 213px;
width: 598px;
height: 1037px;
}
.posterBtn {
position: absolute;
left: 230px;
top: 1275px;
width: 300px;
height: 77px;
.webpBg("PosterPanel/收起海报.png");
}
}
import React from "react";
import { observer } from "mobx-react";
import "./PosterPanel.less";
import { Button } from "@grace/ui";
import { ECard } from "@/common.ts";
import { ModalCtrl } from "@/core/ctrls/ModalCtrl.tsx";
export interface IPrizePanelProps {
cardName: ECard,
}
@observer
class PosterPanel extends React.Component<IPrizePanelProps> {
componentDidMount() {
}
clickPosterBtn = () => {
ModalCtrl.closeModal();
};
render() {
const { cardName } = this.props;
const posterSrc = new URL(`../../assets/poster/${cardName}.png`, import.meta.url).href;
return <div className="PosterPanel modal_center">
<img className="poster" src={posterSrc}/>
<Button className="posterBtn" onClick={this.clickPosterBtn}/>
</div>;
}
}
export default PosterPanel;
......@@ -7,15 +7,6 @@
left: 0;
top: 0;
.PrizeEffect {
position: absolute;
left: 0;
top: 244px;
width: 750px;
height: 1032px;
.webpBg("common/氛围.png");
}
.PrizeBg {
position: absolute;
left: 93px;
......
......@@ -35,7 +35,6 @@ class PrizePanel extends React.Component<IPrizePanelProps> {
const { prizeVO } = this.props;
return <div className="PrizePanel">
<div className="PrizeEffect"/>
<div className="PrizeBg"/>
<img className="prizeImg" src={prizeVO.prizeImg}/>
<div className="prizeName">{prizeVO?.prizeName}</div>
......
......@@ -7,15 +7,6 @@
left: 0;
top: 0;
.effect {
position: absolute;
left: 0;
top: 244px;
width: 750px;
height: 1032px;
.webpBg("common/氛围.png");
}
.ruleBg {
position: absolute;
left: 93px;
......
......@@ -18,7 +18,6 @@ class RulePanel extends React.Component {
render() {
return <div className="RulePanel modal_center">
<div className="effect"/>
<div className="ruleBg"/>
<div className="content" dangerouslySetInnerHTML={{
__html: store.ruleInfo,
......
......@@ -5,6 +5,8 @@ import {Toast} from "@grace/ui";
import {AESEncrypt} from "@/utils/Crypto.ts";
import {PAGE_MAP} from "@/utils/constants.ts";
import {ECard, getPosterId} from "@/common.ts";
import { PageCtrl } from "@/core/ctrls/PageCtrl.tsx";
import HomePage from "@/pages/HomePage/HomePage.tsx";
class GameStore {
......@@ -53,7 +55,7 @@ class GameStore {
const {success, data} = await API.submit(params);
if (!success) {
store.changePage(PAGE_MAP.HOME_PAGE);
PageCtrl.changePage(HomePage);
return;
}
......
import { makeAutoObservable, } from 'mobx';
import API from '../api/index';
import { PAGE_MAP } from "../utils/constants";
import { GetCurrSkinId, getCustomShareId } from "../utils/utils";
import { Toast } from "@grace/ui";
import { IWxShareInfo } from "@/built-in/share/weixin/weixin.ts";
const skinId = GetCurrSkinId() || getCustomShareId();
class Store {
constructor() {
......@@ -30,24 +25,6 @@ class Store {
},
};
/** 当前页面 */
curPage = {
// TODO 举例子,自定义页面,因为mng更新原因原数字id会对应一个新的字符串id
"5055": "sharePage",
Did1NDA0NDc: "sharePage",
myPrize: "myPrize", // TODO 举例子 新宿台奖品页
index: PAGE_MAP.HOME_PAGE,
}[skinId] || PAGE_MAP.HOME_PAGE;
pageData = {};
/** 场景切换 */
changePage(page: PAGE_MAP, data = {}) {
this.pageData = data;
this.curPage = page;
}
ruleInfo = '';
/** 获取活动规则 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment