nfx-ui 0.12.8 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animations.cjs +1 -1
- package/dist/chunk-BounceLoading-C5XE8DKc.mjs.map +1 -1
- package/dist/chunk-BounceLoading-CwvDT5HF.cjs.map +1 -1
- package/dist/chunk-animations-DOdfS0n5.cjs +3 -0
- package/dist/{chunk-animations-CYs6wRF6.cjs.map → chunk-animations-DOdfS0n5.cjs.map} +1 -1
- package/dist/chunk-animations-Do1xZdGL.mjs.map +1 -1
- package/dist/chunk-i18n-BTmbcksb.cjs +3 -0
- package/dist/{chunk-i18n-rD2zjgzE.cjs.map → chunk-i18n-BTmbcksb.cjs.map} +1 -1
- package/dist/chunk-language-B8sfGadQ.mjs.map +1 -1
- package/dist/chunk-language-Bqmpuf2W.cjs.map +1 -1
- package/dist/chunk-layout-C2uqDEMJ.mjs.map +1 -1
- package/dist/chunk-layout-D728gccQ.cjs.map +1 -1
- package/dist/chunk-preference-BWEpbZgC.mjs.map +1 -1
- package/dist/chunk-preference-Dbugm0iQ.cjs.map +1 -1
- package/dist/chunk-theme-9dcwRKw8.mjs.map +1 -1
- package/dist/chunk-theme-BFvDRCYS.cjs.map +1 -1
- package/dist/components.cjs +2 -2
- package/dist/components.cjs.map +1 -1
- package/dist/components.mjs +640 -594
- package/dist/components.mjs.map +1 -1
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.mjs.map +1 -1
- package/dist/languages.cjs +1 -1
- package/dist/layouts.cjs +1 -1
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.mjs.map +1 -1
- package/dist/pixel-blast.cjs +1 -1
- package/dist/pixel-blast.cjs.map +1 -1
- package/dist/pixel-blast.mjs.map +1 -1
- package/dist/src/designs/components/KeyValueEditor/index.d.ts +16 -3
- package/dist/src/designs/components/KeyValueEditor/index.d.ts.map +1 -1
- package/dist/src/designs/components/ShowFilter/index.d.ts +16 -5
- package/dist/src/designs/components/ShowFilter/index.d.ts.map +1 -1
- package/dist/src/designs/components/Slider/index.d.ts +15 -3
- package/dist/src/designs/components/Slider/index.d.ts.map +1 -1
- package/dist/src/designs/components/Suspense/index.d.ts +6 -6
- package/dist/src/designs/components/Suspense/index.d.ts.map +1 -1
- package/dist/src/designs/components/VirtualList/index.d.ts +3 -3
- package/dist/src/designs/components/VirtualList/index.d.ts.map +1 -1
- package/dist/src/designs/components/VirtualWindowList/index.d.ts +3 -3
- package/dist/src/designs/components/VirtualWindowList/index.d.ts.map +1 -1
- package/dist/stores.cjs.map +1 -1
- package/dist/stores.mjs.map +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.mjs.map +1 -1
- package/package.json +7 -29
- package/dist/chunk-animations-CYs6wRF6.cjs +0 -3
- package/dist/chunk-i18n-rD2zjgzE.cjs +0 -3
package/dist/animations.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
(function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(`.styles-module__loading___bgEAk{justify-content:center;align-items:center;display:inline-flex}.styles-module__loading___bgEAk svg polyline{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.styles-module__loading___bgEAk svg polyline.styles-module__back___XLPvD{fill:none;stroke:var(--color-primary-alpha)}.styles-module__loading___bgEAk svg polyline.styles-module__front___hSxig{fill:none;stroke:var(--color-primary);stroke-dasharray:48 144;stroke-dashoffset:192px;animation:1.4s linear infinite styles-module__dash_682___AQzo6}@keyframes styles-module__dash_682___AQzo6{72.5%{opacity:0}to{stroke-dashoffset:0}}.styles-module__loader___E7OIM{justify-content:center;align-items:center;width:fit-content;height:fit-content;display:flex}.styles-module__truckWrapper___Sk4zX{flex-direction:column;justify-content:flex-end;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow-x:hidden}.styles-module__truckBody___j7w2C{width:65%;height:fit-content;margin-bottom:6px;animation:1s linear infinite styles-module__motion___IiNlW}@keyframes styles-module__motion___IiNlW{0%{transform:translateY(0)}50%{transform:translateY(3px)}to{transform:translateY(0)}}.styles-module__truckTires___4ncTl{justify-content:space-between;align-items:center;width:65%;height:fit-content;padding:0 10px 0 15px;display:flex;position:absolute;bottom:0}.styles-module__tiresvg___IBQcN{width:24px}.styles-module__road___sxx-E{background-color:var(--color-fg-heading);border-radius:var(--radius-button);align-self:flex-end;width:100%;height:1.5px;position:relative;bottom:0}.styles-module__road___sxx-E:before{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:10px solid var(--color-bg);width:20px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-50%}.styles-module__road___sxx-E:after{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:4px solid var(--color-bg);width:10px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-65%}.styles-module__lampPost___okcN5{height:45%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;bottom:0;right:-90%}@keyframes styles-module__roadAnimation___yvrHP{0%{transform:translate(0)}to{transform:translate(-350px)}}.styles-module__loader___pFUzL{justify-content:center;align-items:center;display:inline-flex;position:relative}.styles-module__loader___pFUzL:before{content:"";background:var(--color-primary);opacity:.3;border-radius:50%;width:100%;height:5px;animation:.5s linear infinite styles-module__shadow324___sutUe;position:absolute;top:calc(100% + 12px);left:0}.styles-module__loader___pFUzL:after{content:"";background:var(--color-primary);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__square___GKjhm:after{border-radius:var(--radius-button);animation:.5s linear infinite styles-module__jump7456Square___Z-D9b}.styles-module__circle___bUpSN:after{border-radius:50%;animation:.5s linear infinite styles-module__jump7456Circle___2AfF7}@keyframes styles-module__jump7456Square___Z-D9b{15%{border-bottom-right-radius:3px}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__jump7456Circle___2AfF7{15%{border-bottom-right-radius:50%}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__shadow324___sutUe{0%,to{transform:scale(1)}50%{transform:scaleX(1.2)}}.style-module__waves___oR3u7{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.style-module__waves___oR3u7:before{content:"";background:var(--color-bg);width:.5rem;height:.5rem;transform:translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);will-change:transform;border-radius:50%;position:absolute;top:0;left:0}.style-module__wavesCanvas___zkhTC{width:100%;height:100%;display:block}.style-module__squaresCanvas___22kMc{border:none;width:100%;height:100%;display:block}.style-module__container___HkxIe{background-color:var(--color-bg);width:100%;height:100%;position:relative;overflow:hidden}.style-module__canvas___MR9JX{width:100%;height:100%;display:block}.style-module__outerVignette___i75nw{pointer-events:none;background:radial-gradient(circle,#0000 60%,#000 100%);width:100%;height:100%;position:absolute;top:0;left:0}.style-module__centerVignette___n9uVG{pointer-events:none;background:radial-gradient(circle,#000c 0%,#0000 60%);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__button___RbliA{border-radius:var(--radius-button);cursor:pointer;border:1px solid #0000;outline:none;justify-content:center;align-items:center;gap:.5rem;font-family:inherit;font-weight:500;transition:all .2s;display:inline-flex;position:relative}.styles-module__button___RbliA:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.styles-module__button___RbliA:disabled{cursor:not-allowed;opacity:.6}.styles-module__button___RbliA.styles-module__small___yK0Yp{min-height:2rem;padding:.5rem 1rem;font-size:.8125rem}.styles-module__button___RbliA.styles-module__medium___eBTch{min-height:2.5rem;padding:.75rem 1.5rem;font-size:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl{min-height:3rem;padding:1rem 2rem;font-size:1rem}.styles-module__button___RbliA.styles-module__primary___qsZpA{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__button___RbliA.styles-module__primary___qsZpA:hover:not(:disabled){background:var(--color-primary-light);border-color:var(--color-primary-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__primary___qsZpA:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__secondary___SCpPv{background:var(--color-bg-2);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__button___RbliA.styles-module__secondary___SCpPv:hover:not(:disabled){background:var(--color-bg-3);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__outline___rrlk9{border-color:var(--color-border-4);color:var(--color-fg-text);background:0 0}.styles-module__button___RbliA.styles-module__outline___rrlk9:hover:not(:disabled){background:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__ghost___QMoiH{color:var(--color-fg-text);background:0 0;border-color:#0000}.styles-module__button___RbliA.styles-module__ghost___QMoiH:hover:not(:disabled){background:var(--color-bg-2)}.styles-module__button___RbliA.styles-module__danger___MW-pg{background:var(--color-danger);border-color:var(--color-danger);color:var(--color-danger-fg,#fff)}.styles-module__button___RbliA.styles-module__danger___MW-pg:hover:not(:disabled){background:var(--color-danger-light);border-color:var(--color-danger-light);color:var(--color-danger-fg,#fff);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__danger___MW-pg:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__fullWidth___-dXBR{width:100%}.styles-module__button___RbliA.styles-module__loading___UWw6V{pointer-events:none}.styles-module__spinner___KpJ-L{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:1rem;height:1rem;animation:.6s linear infinite styles-module__spin___ntZKM}@keyframes styles-module__spin___ntZKM{to{transform:rotate(360deg)}}.styles-module__button___RbliA.styles-module__small___yK0Yp .styles-module__spinner___KpJ-L{border-width:1.5px;width:.875rem;height:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl .styles-module__spinner___KpJ-L{border-width:2.5px;width:1.25rem;height:1.25rem}.styles-module__content___oyZRO{align-items:center;display:flex}.styles-module__leftIcon___cDktv,.styles-module__rightIcon___1mpk0{flex-shrink:0;align-items:center;display:flex}.styles-module__leftIcon___cDktv{margin-right:-.25rem}.styles-module__rightIcon___1mpk0{margin-left:-.25rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U{aspect-ratio:1;min-width:2.5rem;min-height:2.5rem;padding:0}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__small___yK0Yp{min-width:2rem;min-height:2rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__large___pIZkl{min-width:3rem;min-height:3rem}.styles-module__iconContainer___bwvE3{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.styles-module__layout___WaGy9{flex-direction:column;justify-content:center;align-items:center;gap:.25rem;width:100%;display:flex}.styles-module__horizontal___lKpGq{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.styles-module__topIcon___bzw6s,.styles-module__bottomIcon___suPfa{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__leftIcon___cDktv,.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__rightIcon___1mpk0{margin:0}.Dropdown-module__dropdown___c9wIp{width:100%;display:inline-block;position:relative}.Dropdown-module__dropdownButton___suNh-{border:1px solid var(--color-separator);border-radius:var(--radius-card);cursor:pointer;text-align:left;background:var(--color-bg-2);width:100%;color:var(--color-fg-text);outline:none;justify-content:space-between;align-items:center;padding:.75rem 2.5rem .75rem 1rem;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5rem;transition:all .2s ease-in-out;display:flex;position:relative}.Dropdown-module__dropdownButton___suNh-:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-bg-1)}.Dropdown-module__dropdownButton___suNh-:focus{border-color:var(--color-primary);background:var(--color-bg-1);box-shadow:0 0 0 2px var(--color-primary-transparent)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__disabled___Rz0pX{cursor:not-allowed;opacity:.6;background:var(--color-bg-3)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__error___F7dDu{border-color:var(--color-danger)}.Dropdown-module__buttonText___D2zxn{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.Dropdown-module__chevronIcon___uyawp{color:var(--color-fg-highlight);flex-shrink:0;transition:transform .15s;position:absolute;right:1rem}.Dropdown-module__chevronIcon___uyawp.Dropdown-module__open___APoXd{transform:rotate(180deg)}.Dropdown-module__dropdownMenu___WJ-QO{background:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-card);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;animation:.15s ease-out Dropdown-module__slideDown___sRCmO;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}@keyframes Dropdown-module__slideDown___sRCmO{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.Dropdown-module__optionsList___Be6RN{margin:0;padding:.5rem 0;list-style:none}.Dropdown-module__option___q-NgT{cursor:pointer;color:var(--color-fg-text);align-items:center;padding:.75rem 1rem;font-size:.875rem;transition:all .15s;display:flex}.Dropdown-module__option___q-NgT:hover{background-color:var(--color-bg-2)}.Dropdown-module__option___q-NgT.Dropdown-module__selected___-OTW-{background-color:var(--color-bg-3);color:var(--color-fg-highlight);font-weight:600}@media (width<=768px){.Dropdown-module__dropdownButton___suNh-{padding:.625rem 2.25rem .625rem .875rem;font-size:.875rem}.Dropdown-module__chevronIcon___uyawp{right:.875rem}.Dropdown-module__option___q-NgT{padding:.625rem .875rem;font-size:.8125rem}}.styles-module__wrapper___COeGm{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___COeGm.styles-module__fullWidth___lVU49{width:100%}.styles-module__label___gfOA7{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___-zOy5{color:var(--color-danger)}.styles-module__inputContainer___wXY53{align-items:center;width:100%;display:flex;position:relative}.styles-module__input___IZDc3{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);outline:none;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__input___IZDc3[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-webkit-strong-password-toggle-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;width:0!important;height:0!important;margin:0!important;padding:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-reveal{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-clear{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__input___IZDc3::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__input___IZDc3.styles-module__small___cuGyE{padding:.5rem .75rem;font-size:.8125rem}.styles-module__input___IZDc3.styles-module__medium___JdDPu{padding:.75rem;font-size:.875rem}.styles-module__input___IZDc3.styles-module__large___fMmiG{padding:1rem;font-size:1rem}.styles-module__input___IZDc3.styles-module__default___-eZTG{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__input___IZDc3.styles-module__filled___EQ5PQ{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3{padding-left:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3{padding-right:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-left:2rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-right:2rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-left:3rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-right:3rem}.styles-module__leftIcon___jEW5H,.styles-module__rightIcon___bA3Eo{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute}.styles-module__leftIcon___jEW5H{left:.75rem}.styles-module__rightIcon___bA3Eo{right:.75rem}.styles-module__rightIcon___bA3Eo.styles-module__rightIconInteractive___ccypw{pointer-events:auto}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__leftIcon___jEW5H{left:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__rightIcon___bA3Eo{right:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__leftIcon___jEW5H{left:1rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__rightIcon___bA3Eo{right:1rem}.styles-module__input___IZDc3.styles-module__error___946qV{border-color:var(--color-danger)}.styles-module__input___IZDc3.styles-module__error___946qV:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__input___IZDc3.styles-module__disabled___sJvLd{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorMessage___5Mn22{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___T2eui{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__container___xeg8O{flex-direction:column;gap:1rem;display:flex}.styles-module__label___qhbKe{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__error___O-7AY{color:var(--color-error);font-size:.875rem}.styles-module__pairs___owGV3{flex-direction:column;gap:.75rem;display:flex}.styles-module__pair___G4WFY{grid-template-columns:1fr 2fr auto;align-items:start;gap:.75rem;display:grid}.styles-module__keyInput___wl1M1,.styles-module__valueInput___HiwJ5{flex:1}.styles-module__removeButton___4-X0b{min-width:auto;color:var(--color-error);padding:.5rem}.styles-module__removeButton___4-X0b:hover{background-color:var(--color-error);color:var(--color-primary-fg)}.styles-module__addButton___QFljt{align-self:flex-start}@media (width<=768px){.styles-module__pair___G4WFY{grid-template-columns:1fr}.styles-module__removeButton___4-X0b{align-self:flex-end}}.styles-module__searchContainer___86TGN{width:100%;max-width:400px;position:relative}.styles-module__searchIcon___ZInry{color:var(--color-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.styles-module__searchInput___SqZXQ{border:1px solid var(--color-border);border-radius:var(--radius-input);width:100%;color:var(--color-fg-text);background:var(--color-bg-2);padding:.75rem 3rem;font-size:1rem;transition:all .2s}.styles-module__searchInput___SqZXQ:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.styles-module__searchInput___SqZXQ::placeholder{color:var(--color-fg-muted)}.styles-module__clearBtn___7jExr{width:1.5rem;height:1.5rem;color:var(--color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.styles-module__clearBtn___7jExr:hover{color:var(--color-fg-text)}@media (width<=768px){.styles-module__searchContainer___86TGN{max-width:100%}}.styles-module__container___nGxdM{flex-direction:column;gap:.75rem;display:flex}.styles-module__toggleContainer___VrsKI{align-items:center;display:flex}.styles-module__toggleButton___IzD6Z{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg-muted);cursor:pointer;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;transition:all .2s;display:flex}.styles-module__toggleButton___IzD6Z:hover{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__optionsContainer___LOzlO{background:var(--color-bg-2);border-radius:var(--radius-card);border:1px solid var(--color-border-4);gap:.5rem;padding:.5rem;display:flex}.styles-module__option___abhnC{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:.375rem;padding:.5rem .875rem;font-size:.875rem;font-weight:500;transition:all .2s;display:flex}.styles-module__option___abhnC:hover{background:var(--color-bg-3);border-color:var(--color-border-3)}.styles-module__option___abhnC.styles-module__active___pqmSi{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__option___abhnC.styles-module__active___pqmSi:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__nbSelect___KjxSc{font-family:inherit;font-size:.9375rem;font-weight:600;line-height:1.5rem;display:inline-block;position:relative}.styles-module__selectButton___AKZe4{border-radius:var(--radius-button);cursor:pointer;text-align:left;width:100%;min-width:8rem;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;appearance:none;border:1px solid;outline:none;justify-content:space-between;align-items:center;padding:.4375rem 2.2rem .4375rem 1.125rem;transition:all .15s ease-in-out;display:flex;position:relative}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:hover:not(:disabled){background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:focus,.styles-module__selectButton___AKZe4.styles-module__primary___HU36a.styles-module__open___9AKMb{background-color:var(--color-primary-light);border-color:var(--color-primary-light);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP{background-color:var(--color-bg);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:hover:not(:disabled){background-color:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:focus,.styles-module__selectButton___AKZe4.styles-module__default___LedYP.styles-module__open___9AKMb{background-color:var(--color-bg-2);border-color:var(--color-primary);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4:disabled{cursor:not-allowed;opacity:.6}.styles-module__buttonText___QSLO1{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.styles-module__chevronIcon___qAHaD{flex-shrink:0;width:1.5rem;height:1.5rem;transition:transform .15s;position:absolute;right:.41rem}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a .styles-module__chevronIcon___qAHaD{color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP .styles-module__chevronIcon___qAHaD{color:var(--color-fg)}.styles-module__chevronIcon___qAHaD.styles-module__open___9AKMb{transform:rotate(180deg)}.styles-module__optionsPanel___NWAp3{background-color:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-button);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;transform-origin:top;visibility:hidden;pointer-events:none;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}.styles-module__optionsPanel___NWAp3.styles-module__open___9AKMb{visibility:visible;pointer-events:auto;animation:.25s ease-out styles-module__expandDown___eD4lh}.styles-module__optionsPanel___NWAp3.styles-module__closed___bez-q{visibility:hidden;pointer-events:none;animation:.25s ease-out styles-module__collapseUp___dt1E7}@keyframes styles-module__expandDown___eD4lh{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes styles-module__collapseUp___dt1E7{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.styles-module__optionsPanel___NWAp3.styles-module__primary___HU36a{border-color:var(--color-primary)}.styles-module__optionsPanel___NWAp3.styles-module__default___LedYP{border-color:var(--color-border-4)}.styles-module__optionsList___AxhVp{margin:0;padding:.5rem 0;list-style:none}.styles-module__option___t1SSw{cursor:pointer;color:var(--color-fg-text);justify-content:space-between;align-items:center;padding:.75rem 1.125rem;transition:all .15s;display:flex}.styles-module__option___t1SSw:hover{background-color:var(--color-bg-2)}.styles-module__option___t1SSw.styles-module__selected___azD4A{background-color:var(--color-primary);color:var(--color-primary-fg);font-weight:700}@media (prefers-color-scheme:dark){.styles-module__optionsPanel___NWAp3{box-shadow:0 .5rem 1rem var(--color-shadow)}}.styles-module__sliderContainer___lgpaD{flex-direction:column;gap:.5rem;display:flex}.styles-module__sliderContainer___lgpaD.styles-module__fullWidth___ZS8W5{width:100%}.styles-module__labelRow___dkVVM{justify-content:space-between;align-items:center;min-height:1.5rem;margin-bottom:.5rem;display:flex}.styles-module__label___bXGZs{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__required___FuyfE{color:var(--color-danger);margin-left:.25rem}.styles-module__sliderWrapper___1Wdti{touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.75rem;width:100%;display:flex}.styles-module__sliderRoot___yzOjR{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-grow:1;align-items:center;width:100%;padding:.75rem 0;display:flex;position:relative}.styles-module__sliderRoot___yzOjR:active{cursor:grabbing}.styles-module__sliderTrackWrapper___N72WQ{flex-grow:1;display:flex;position:relative}.styles-module__sliderTrack___AltcD{border-radius:var(--radius-badge);background-color:var(--color-bg-3);width:100%;height:.375rem;position:relative;overflow:hidden}.styles-module__sliderRange___U3g0-{background-color:var(--color-primary);border-radius:var(--radius-badge);height:100%;position:absolute}.styles-module__valueIndicator___aLf0I{color:var(--color-primary);text-align:center;flex-shrink:0;min-width:2rem;font-size:.875rem;font-weight:600;line-height:1}.styles-module__iconWrapper___wL-b8{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__icon___vHsID{width:20px;height:20px;color:var(--color-fg-muted)}.styles-module__errorMessage___qFgGe{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___tgBGl{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__loadingContainer___OMgwS{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.styles-module__loadingText___KRZqR{color:var(--color-fg-muted);font-size:1rem}.styles-module__errorContainer___qhAg2{text-align:center;min-height:60vh;color:var(--color-fg-text);flex-direction:column;justify-content:center;align-items:center;gap:2rem;padding:3rem 2rem;display:flex}.styles-module__errorIconWrapper___IHZrN{background:linear-gradient(135deg, rgba(var(--color-error-rgb), .1), rgba(var(--color-error-rgb), .05));border:2px solid rgba(var(--color-error-rgb), .2);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;animation:2s ease-in-out infinite styles-module__pulse___Lju-z;display:flex}@keyframes styles-module__pulse___Lju-z{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.styles-module__errorIcon___oGDIP{color:var(--color-error);stroke-width:1.5px}.styles-module__errorContent___F55rQ{flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:600px;display:flex}.styles-module__errorTitle___hC8D-{color:var(--color-fg-heading);letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.2}.styles-module__errorDescription___hZtuP{color:var(--color-fg-muted);max-width:480px;margin:0;font-size:1rem;line-height:1.6}.styles-module__errorDetailsWrapper___-sp8b{width:100%;max-width:600px;margin-top:.5rem}.styles-module__errorDetailsContainer___eywMo{text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-bg-2);width:100%;transition:all .2s;overflow:hidden}.styles-module__errorDetailsContainer___eywMo:hover{border-color:var(--color-border-hover);background:var(--color-bg-3)}.styles-module__errorDetailsSummary___hGEoD{cursor:pointer;color:var(--color-fg-muted);-webkit-user-select:none;user-select:none;padding:.875rem 1.25rem;font-size:.875rem;font-weight:500;list-style:none;transition:color .2s}.styles-module__errorDetailsSummary___hGEoD:hover{color:var(--color-fg-text)}.styles-module__errorDetailsSummary___hGEoD::-webkit-details-marker{display:none}.styles-module__errorDetailsSummary___hGEoD:before{content:"▶";margin-right:.5rem;font-size:.75rem;transition:transform .2s;display:inline-block}.styles-module__errorDetailsContainer___eywMo[open] .styles-module__errorDetailsSummary___hGEoD:before{transform:rotate(90deg)}.styles-module__errorDetails___tzCT-{background:var(--color-bg-3);border-top:1px solid var(--color-border);max-width:100%;color:var(--color-fg-muted);white-space:pre-wrap;word-break:break-word;margin:0;padding:1rem 1.25rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:.8125rem;line-height:1.6;overflow-x:auto}.styles-module__errorActions___gtqYw{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.styles-module__retryButton___TA4jm{border-radius:var(--radius-button);background:var(--color-primary);color:var(--color-primary-fg);cursor:pointer;box-shadow:0 2px 8px var(--color-shadow);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__retryButton___TA4jm:hover{box-shadow:0 4px 16px var(--color-shadow);background:var(--color-primary-light);color:var(--color-primary-fg);transform:translateY(-2px)}.styles-module__retryButton___TA4jm:active{box-shadow:0 2px 8px var(--color-shadow);transform:translateY(0)}.styles-module__retryButtonIcon___vzfp-{font-size:1.125rem;line-height:1;transition:transform .3s;display:inline-block}.styles-module__retryButton___TA4jm:hover .styles-module__retryButtonIcon___vzfp-{transform:rotate(180deg)}.styles-module__clearLocalDataButton___T3B-K{border-radius:var(--radius-button);color:var(--color-fg-muted);border:1px solid var(--color-border-4);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__clearLocalDataButton___T3B-K:hover{color:var(--color-fg-text);border-color:var(--color-border-3);background:var(--color-bg-secondary)}.styles-module__wrapper___jXPV3{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___jXPV3.styles-module__fullWidth___eKyGB{width:100%}.styles-module__label___MyTeo{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___TV-m8{color:var(--color-danger)}.styles-module__inputContainer___VvGBl{align-items:flex-start;width:100%;display:flex;position:relative}.styles-module__textarea___AjX9N{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);resize:vertical;outline:none;min-height:4rem;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__textarea___AjX9N:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__textarea___AjX9N::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__textarea___AjX9N.styles-module__small___zMx0G{min-height:3rem;padding:.5rem .75rem;font-size:.8125rem}.styles-module__textarea___AjX9N.styles-module__medium___tO2Lb{min-height:4rem;padding:.75rem;font-size:.875rem}.styles-module__textarea___AjX9N.styles-module__large___3eU2g{min-height:5rem;padding:1rem;font-size:1rem}.styles-module__textarea___AjX9N.styles-module__default___vsSxX{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__textarea___AjX9N.styles-module__filled___TPQgI{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___VvGBl .styles-module__leftIcon___FHp2R{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;left:.75rem}.styles-module__inputContainer___VvGBl .styles-module__rightIcon___dkyvP{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;right:.75rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__rightIcon___dkyvP{top:.5rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__rightIcon___dkyvP{top:1rem}.styles-module__textarea___AjX9N.styles-module__error___d8gLK{border-color:var(--color-danger)}.styles-module__textarea___AjX9N.styles-module__error___d8gLK:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__textarea___AjX9N.styles-module__disabled___IzbfE{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorText___Nom7x{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___97Def{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__virtualList___pM6rN{contain:strict;width:100%;padding-bottom:300px;position:relative;overflow:auto}.styles-module__emptyContainer___rm938{height:100%;color:var(--color-fg-muted);justify-content:center;align-items:center;display:flex}.styles-module__virtualListInner___HxRzc{width:100%;position:relative}.styles-module__virtualListItems___p19-a{width:100%;position:absolute;top:0;left:0}.styles-module__loadingMore___zAdLM{color:var(--color-fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;margin-top:1rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh span{background-color:var(--color-bg-2);border-radius:var(--radius-button);padding:.5rem 1rem}.styles-module__virtualList___xmj2v{width:100%;padding-bottom:300px;position:relative;overflow:visible}.styles-module__virtualListInner___quD74{width:100%;position:relative}.styles-module__virtualListItems___-Muml{width:100%;position:absolute;top:0;left:0}.styles-module__virtualListRow___h3pzX{width:100%}.styles-module__emptyContainer___LIy8r{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:2rem 0;display:flex}.styles-module__loadingMore___Mzf-p{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:1.5rem 0;display:flex}.styles-module__endOfList___g5G--{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;padding:1.5rem 0;display:flex}.styles-module__sidebar___BMt0j{flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.styles-module__sidebarContent___iAwiw{flex-direction:column;height:100%;min-height:0;padding-top:1rem;display:flex;overflow:hidden}.styles-module__menuWrapper___DKuEv{flex:1;min-height:0;overflow:hidden auto}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar{width:0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-track{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb:hover{background:0 0}.styles-module__sidebar___BMt0j a{margin-left:0}.styles-module__sidebar___BMt0j .ps-sidebar-root{background-color:var(--color-bg-2)!important;border-right:1px solid var(--color-separator)!important;flex-direction:column!important;height:100%!important;min-height:0!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-sidebar-container{background-color:var(--color-bg-2)!important;height:100%!important;min-height:0!important;color:var(--color-fg-text)!important;flex-direction:column!important;flex:1!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-menu-button{border-radius:var(--radius-button)!important;color:var(--color-fg-text)!important;margin:.125rem .5rem!important;padding:.5rem .75rem!important;font-size:.875rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-button:hover{background-color:var(--color-bg-3)!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active{background-color:var(--color-primary)!important;color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active *,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-icon{width:1.25rem!important;height:1.25rem!important;color:var(--color-fg-text)!important;margin-right:.5rem!important}.styles-module__sidebar___BMt0j .ps-submenu-content{background-color:var(--color-bg-3)!important;padding-left:.5rem!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-menu-button{margin:.125rem .25rem!important;padding:.375rem .5rem!important;font-size:.8125rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-label{color:var(--color-fg-text)!important;font-weight:500!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active span,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active div,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:var(--color-primary-fg)!important}.styles-module__logoutContainer___7NwBL{border-top:1px solid var(--color-separator);writing-mode:horizontal-tb;text-orientation:mixed;flex-shrink:0;margin-top:auto;padding:.5rem}.styles-module__logoutButton___rfD6u{border-radius:var(--radius-button);width:100%;color:var(--color-fg-text);cursor:pointer;white-space:nowrap;writing-mode:horizontal-tb;text-orientation:mixed;direction:ltr;background:0 0;border:none;justify-content:flex-start;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;transition:background-color .2s,color .2s;display:flex;overflow:hidden}.styles-module__logoutButton___rfD6u span{opacity:1;max-width:200px;transition:opacity .3s,max-width .3s;display:inline-block;writing-mode:horizontal-tb!important;text-orientation:mixed!important;direction:ltr!important;transform:none!important}.styles-module__logoutButton___rfD6u .styles-module__hiddenText___z183T{opacity:0;width:0;max-width:0;overflow:hidden}.styles-module__logoutButton___rfD6u .styles-module__visibleText___lfsv-{opacity:1;width:auto;max-width:200px}.styles-module__logoutButton___rfD6u:hover{background-color:var(--color-bg-3)}.styles-module__logoutButton___rfD6u:active{transform:scale(.98)}.styles-module__logoutButton___rfD6u svg{color:inherit;flex-shrink:0}.styles-module__footer___g-hY7{background:var(--color-bg-2);width:100%;padding:0 2rem}.styles-module__footerContent___Oen5n{justify-content:space-between;align-items:center;max-width:100%;margin:0 auto;display:flex}.styles-module__copyright___1R2o3{color:var(--color-fg-text);font-size:.875rem}.styles-module__links___dQyvB{gap:1.5rem;display:flex}.styles-module__link___UWfyK{color:var(--color-fg-text);font-size:.875rem;text-decoration:none;transition:color .3s}.styles-module__link___UWfyK:hover{color:var(--color-primary)}@media (width<=768px){.styles-module__footerContent___Oen5n{flex-direction:column;gap:1rem}.styles-module__links___dQyvB{gap:1rem}}.styles-module__header___4Uc8h{width:100%;padding:.5rem 2rem;display:flex}.styles-module__header___4Uc8h>:first-child{flex:1;justify-content:flex-start;align-items:center;display:flex}.styles-module__header___4Uc8h>:last-child{flex:1;justify-content:flex-end;align-items:center;display:flex}.styles-module__layout___ZQKU7{background:var(--color-bg);flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.styles-module__header___XIaFb{z-index:100;background:var(--color-bg);width:100%;box-shadow:0 .125rem .25rem 0 var(--color-shadow);position:fixed;top:0}.styles-module__footer___r8ASO{z-index:100;width:100%;position:fixed;bottom:0}.styles-module__mainWrapper___i4tEI{flex:1;display:flex;position:relative}.styles-module__sidebar___ij-8-{position:fixed;top:0}.styles-module__content___mTgUr{background:var(--color-bg);flex:1;min-height:calc(100vh - 10rem);margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=768px){.styles-module__content___mTgUr{width:100%}.styles-module__sidebar___ij-8-{z-index:999;height:100vh;position:fixed;top:0;left:0}}.styles-module__mainWrapper___AiTAw{flex-direction:row;flex:1;display:flex;position:relative}.styles-module__sidebarContainer___X4yj8{z-index:99;flex-direction:column;display:flex;position:fixed;left:0;overflow:hidden}.styles-module__sidebar___VQTlH{flex-shrink:0;top:0;left:0}.styles-module__content___htJlH{background:var(--color-bg);flex:1;margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=1024px){.styles-module__content___htJlH{padding:1.5rem}}@media (width<=768px){.styles-module__content___htJlH{width:100%}}.styles-module__wavesWrapper___TK7DI{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__wavesWrapper___TK7DI>*{pointer-events:auto}.styles-module__squaresWrapper___P25uF{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__squaresWrapper___P25uF>*{pointer-events:auto}.styles-module__letterGlitchWrapper___KWtWU{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__letterGlitchWrapper___KWtWU>*{pointer-events:auto}.styles-module__pixelBlastWrapper___YptHh{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__pixelBlastWrapper___YptHh>*{pointer-events:auto}.style-module__container___Hh3-c{width:100%;height:100%;position:relative;overflow:hidden}
|
|
2
2
|
/*$vite$:1*/`)),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunk-BounceLoading-CwvDT5HF.cjs"),o=require("./chunk-animations-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunk-BounceLoading-CwvDT5HF.cjs"),o=require("./chunk-animations-DOdfS0n5.cjs");exports.BounceLoading=e.BounceLoading;exports.ECGLoading=e.ECGLoading;exports.LetterGlitchBackground=o.LetterGlitchBackground;exports.SquareBackground=o.SquareBackground;exports.TruckLoading=e.TruckLoading;exports.WaveBackground=o.WaveBackground;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-BounceLoading-C5XE8DKc.mjs","names":[],"sources":["../src/designs/animations/ECGLoading/styles.module.css","../src/designs/animations/ECGLoading/index.tsx","../src/designs/animations/TruckLoading/styles.module.css","../src/designs/animations/TruckLoading/index.tsx","../src/designs/animations/BounceLoading/styles.module.css","../src/designs/animations/BounceLoading/index.tsx"],"sourcesContent":[".loading {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.loading svg polyline {\r\n fill: none;\r\n stroke-width: 3;\r\n stroke-linecap: round;\r\n stroke-linejoin: round;\r\n}\r\n\r\n.loading svg polyline.back {\r\n fill: none;\r\n stroke: var(--color-primary-alpha);\r\n}\r\n\r\n.loading svg polyline.front {\r\n fill: none;\r\n stroke: var(--color-primary);\r\n stroke-dasharray: 48, 144;\r\n stroke-dashoffset: 192;\r\n animation: dash_682 1.4s linear infinite;\r\n}\r\n\r\n@keyframes dash_682 {\r\n 72.5% {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n}","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface ECGLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst ECGLoading = memo(({ size = \"medium\", className }: ECGLoadingProps) => {\n const sizeMap = {\n small: { width: \"48px\", height: \"36px\" },\n medium: { width: \"64px\", height: \"48px\" },\n large: { width: \"96px\", height: \"72px\" },\n };\n\n const { width, height } = sizeMap[size];\n\n return (\n <div className={`${styles.loading} ${className || \"\"}`}>\n <svg width={width} height={height} viewBox=\"0 0 64 48\">\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"back\" className={styles.back} />\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"front\" className={styles.front} />\n </svg>\n </div>\n );\n});\n\nECGLoading.displayName = \"ECGLoading\";\n\nexport default ECGLoading;\n",".loader {\r\n width: fit-content;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.truckWrapper {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n align-items: center;\r\n justify-content: flex-end;\r\n overflow-x: hidden;\r\n}\r\n\r\n/* truck upper body */\r\n.truckBody {\r\n width: 65%;\r\n height: fit-content;\r\n margin-bottom: 6px;\r\n animation: motion 1s linear infinite;\r\n}\r\n\r\n/* truck suspension animation*/\r\n@keyframes motion {\r\n 0% {\r\n transform: translateY(0px);\r\n }\r\n 50% {\r\n transform: translateY(3px);\r\n }\r\n 100% {\r\n transform: translateY(0px);\r\n }\r\n}\r\n\r\n/* truck's tires */\r\n.truckTires {\r\n width: 65%;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0px 10px 0px 15px;\r\n position: absolute;\r\n bottom: 0;\r\n}\r\n\r\n.tiresvg {\r\n width: 24px;\r\n}\r\n\r\n.road {\r\n width: 100%;\r\n height: 1.5px;\r\n background-color: var(--color-fg-heading);\r\n position: relative;\r\n bottom: 0;\r\n align-self: flex-end;\r\n border-radius: var(--radius-button);\r\n}\r\n\r\n.road::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 20px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -50%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 10px solid var(--color-bg);\r\n}\r\n\r\n.road::after {\r\n content: \"\";\r\n position: absolute;\r\n width: 10px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -65%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 4px solid var(--color-bg);\r\n}\r\n\r\n.lampPost {\r\n position: absolute;\r\n bottom: 0;\r\n right: -90%;\r\n height: 45%;\r\n animation: roadAnimation 1.4s linear infinite;\r\n}\r\n\r\n@keyframes roadAnimation {\r\n 0% {\r\n transform: translateX(0px);\r\n }\r\n 100% {\r\n transform: translateX(-350px);\r\n }\r\n}\r\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface TruckLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst TruckLoading = memo(({ size = \"medium\", className }: TruckLoadingProps) => {\n const sizeMap = {\n small: { width: \"150px\", height: \"75px\", svgScale: 0.75 },\n medium: { width: \"200px\", height: \"100px\", svgScale: 1 },\n large: { width: \"300px\", height: \"150px\", svgScale: 1.5 },\n };\n\n const { width, height, svgScale } = sizeMap[size];\n\n return (\n <div className={`${styles.loader} ${className || \"\"}`} style={{ width, height }}>\n <div className={styles.truckWrapper} style={{ transform: `scale(${svgScale})` }}>\n <div className={styles.truckBody}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 198 93\" className={styles.trucksvg}>\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-primary)\"\n d=\"M135 22.5H177.264C178.295 22.5 179.22 23.133 179.594 24.0939L192.33 56.8443C192.442 57.1332 192.5 57.4404 192.5 57.7504V89C192.5 90.3807 191.381 91.5 190 91.5H135C133.619 91.5 132.5 90.3807 132.5 89V25C132.5 23.6193 133.619 22.5 135 22.5Z\"\n />\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-bg-3)\"\n d=\"M146 33.5H181.741C182.779 33.5 183.709 34.1415 184.078 35.112L190.538 52.112C191.16 53.748 189.951 55.5 188.201 55.5H146C144.619 55.5 143.5 54.3807 143.5 53V36C143.5 34.6193 144.619 33.5 146 33.5Z\"\n />\n <path\n strokeWidth=\"2\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-fg-heading)\"\n d=\"M150 65C150 65.39 149.763 65.8656 149.127 66.2893C148.499 66.7083 147.573 67 146.5 67C145.427 67 144.501 66.7083 143.873 66.2893C143.237 65.8656 143 65.39 143 65C143 64.61 143.237 64.1344 143.873 63.7107C144.501 63.2917 145.427 63 146.5 63C147.573 63 148.499 63.2917 149.127 63.7107C149.763 64.1344 150 64.61 150 65Z\"\n />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-warning)\" rx=\"1\" height=\"7\" width=\"5\" y=\"63\" x=\"187\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" rx=\"1\" height=\"11\" width=\"4\" y=\"81\" x=\"193\" />\n <rect strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2.5\" height=\"90\" width=\"121\" y=\"1.5\" x=\"6.5\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2\" height=\"4\" width=\"6\" y=\"84\" x=\"1\" />\n </svg>\n </div>\n <div className={styles.truckTires}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n </div>\n <div className={styles.road} />\n\n <svg\n xmlSpace=\"preserve\"\n viewBox=\"0 0 453.459 453.459\"\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n fill=\"var(--color-fg-heading)\"\n className={styles.lampPost}\n >\n <path\n d=\"M252.882,0c-37.781,0-68.686,29.953-70.245,67.358h-6.917v8.954c-26.109,2.163-45.463,10.011-45.463,19.366h9.993\nc-1.65,5.146-2.507,10.54-2.507,16.017c0,28.956,23.558,52.514,52.514,52.514c28.956,0,52.514-23.558,52.514-52.514\nc0-5.478-0.856-10.872-2.506-16.017h9.992c0-9.354-19.352-17.204-45.463-19.366v-8.954h-6.149C200.189,38.779,223.924,16,252.882,16\nc29.952,0,54.32,24.368,54.32,54.32c0,28.774-11.078,37.009-25.105,47.437c-17.444,12.968-37.216,27.667-37.216,78.884v113.914\nh-0.797c-5.068,0-9.174,4.108-9.174,9.177c0,2.844,1.293,5.383,3.321,7.066c-3.432,27.933-26.851,95.744-8.226,115.459v11.202h45.75\nv-11.202c18.625-19.715-4.794-87.527-8.227-115.459c2.029-1.683,3.322-4.223,3.322-7.066c0-5.068-4.107-9.177-9.176-9.177h-0.795\nV196.641c0-43.174,14.942-54.283,30.762-66.043c14.793-10.997,31.559-23.461,31.559-60.277C323.202,31.545,291.656,0,252.882,0z\nM232.77,111.694c0,23.442-19.071,42.514-42.514,42.514c-23.442,0-42.514-19.072-42.514-42.514c0-5.531,1.078-10.957,3.141-16.017\nh78.747C231.693,100.736,232.77,106.162,232.77,111.694z\"\n />\n </svg>\n </div>\n </div>\n );\n});\n\nTruckLoading.displayName = \"TruckLoading\";\n\nexport default TruckLoading;\n",".loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.loader::before {\n content: \"\";\n width: 100%;\n height: 5px;\n background: var(--color-primary);\n opacity: 0.3;\n position: absolute;\n top: calc(100% + 12px);\n left: 0;\n border-radius: 50%;\n animation: shadow324 0.5s linear infinite;\n}\n\n.loader::after {\n content: \"\";\n width: 100%;\n height: 100%;\n background: var(--color-primary);\n position: absolute;\n top: 0;\n left: 0;\n}\n\n/* 正方形样式 */\n.square::after {\n border-radius: var(--radius-button);\n animation: jump7456Square 0.5s linear infinite;\n}\n\n/* 圆形样式 */\n.circle::after {\n border-radius: 50%;\n animation: jump7456Circle 0.5s linear infinite;\n}\n\n@keyframes jump7456Square {\n 15% {\n border-bottom-right-radius: 3px;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes jump7456Circle {\n 15% {\n border-bottom-right-radius: 50%;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes shadow324 {\n 0%,\n 100% {\n transform: scale(1, 1);\n }\n\n 50% {\n transform: scale(1.2, 1);\n }\n}\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface BounceLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n shape?: \"square\" | \"circle\";\n className?: string;\n}\n\nconst BounceLoading = memo(({ size = \"medium\", shape = \"square\", className }: BounceLoadingProps) => {\n const sizeMap = {\n small: \"32px\",\n medium: \"48px\",\n large: \"64px\",\n };\n\n const loaderSize = sizeMap[size];\n\n return <div className={`${styles.loader} ${styles[shape]} ${className || \"\"}`} style={{ width: loaderSize, height: loaderSize }} />;\n});\n\nBounceLoading.displayName = \"BounceLoading\";\n\nexport default BounceLoading;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunk-BounceLoading-C5XE8DKc.mjs","names":[],"sources":["../src/designs/animations/ECGLoading/styles.module.css","../src/designs/animations/ECGLoading/index.tsx","../src/designs/animations/TruckLoading/styles.module.css","../src/designs/animations/TruckLoading/index.tsx","../src/designs/animations/BounceLoading/styles.module.css","../src/designs/animations/BounceLoading/index.tsx"],"sourcesContent":[".loading {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.loading svg polyline {\r\n fill: none;\r\n stroke-width: 3;\r\n stroke-linecap: round;\r\n stroke-linejoin: round;\r\n}\r\n\r\n.loading svg polyline.back {\r\n fill: none;\r\n stroke: var(--color-primary-alpha);\r\n}\r\n\r\n.loading svg polyline.front {\r\n fill: none;\r\n stroke: var(--color-primary);\r\n stroke-dasharray: 48, 144;\r\n stroke-dashoffset: 192;\r\n animation: dash_682 1.4s linear infinite;\r\n}\r\n\r\n@keyframes dash_682 {\r\n 72.5% {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n}","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface ECGLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst ECGLoading = memo(({ size = \"medium\", className }: ECGLoadingProps) => {\n const sizeMap = {\n small: { width: \"48px\", height: \"36px\" },\n medium: { width: \"64px\", height: \"48px\" },\n large: { width: \"96px\", height: \"72px\" },\n };\n\n const { width, height } = sizeMap[size];\n\n return (\n <div className={`${styles.loading} ${className || \"\"}`}>\n <svg width={width} height={height} viewBox=\"0 0 64 48\">\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"back\" className={styles.back} />\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"front\" className={styles.front} />\n </svg>\n </div>\n );\n});\n\nECGLoading.displayName = \"ECGLoading\";\n\nexport default ECGLoading;\n",".loader {\r\n width: fit-content;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.truckWrapper {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n align-items: center;\r\n justify-content: flex-end;\r\n overflow-x: hidden;\r\n}\r\n\r\n/* truck upper body */\r\n.truckBody {\r\n width: 65%;\r\n height: fit-content;\r\n margin-bottom: 6px;\r\n animation: motion 1s linear infinite;\r\n}\r\n\r\n/* truck suspension animation*/\r\n@keyframes motion {\r\n 0% {\r\n transform: translateY(0px);\r\n }\r\n 50% {\r\n transform: translateY(3px);\r\n }\r\n 100% {\r\n transform: translateY(0px);\r\n }\r\n}\r\n\r\n/* truck's tires */\r\n.truckTires {\r\n width: 65%;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0px 10px 0px 15px;\r\n position: absolute;\r\n bottom: 0;\r\n}\r\n\r\n.tiresvg {\r\n width: 24px;\r\n}\r\n\r\n.road {\r\n width: 100%;\r\n height: 1.5px;\r\n background-color: var(--color-fg-heading);\r\n position: relative;\r\n bottom: 0;\r\n align-self: flex-end;\r\n border-radius: var(--radius-button);\r\n}\r\n\r\n.road::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 20px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -50%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 10px solid var(--color-bg);\r\n}\r\n\r\n.road::after {\r\n content: \"\";\r\n position: absolute;\r\n width: 10px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -65%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 4px solid var(--color-bg);\r\n}\r\n\r\n.lampPost {\r\n position: absolute;\r\n bottom: 0;\r\n right: -90%;\r\n height: 45%;\r\n animation: roadAnimation 1.4s linear infinite;\r\n}\r\n\r\n@keyframes roadAnimation {\r\n 0% {\r\n transform: translateX(0px);\r\n }\r\n 100% {\r\n transform: translateX(-350px);\r\n }\r\n}\r\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface TruckLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst TruckLoading = memo(({ size = \"medium\", className }: TruckLoadingProps) => {\n const sizeMap = {\n small: { width: \"150px\", height: \"75px\", svgScale: 0.75 },\n medium: { width: \"200px\", height: \"100px\", svgScale: 1 },\n large: { width: \"300px\", height: \"150px\", svgScale: 1.5 },\n };\n\n const { width, height, svgScale } = sizeMap[size];\n\n return (\n <div className={`${styles.loader} ${className || \"\"}`} style={{ width, height }}>\n <div className={styles.truckWrapper} style={{ transform: `scale(${svgScale})` }}>\n <div className={styles.truckBody}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 198 93\" className={styles.trucksvg}>\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-primary)\"\n d=\"M135 22.5H177.264C178.295 22.5 179.22 23.133 179.594 24.0939L192.33 56.8443C192.442 57.1332 192.5 57.4404 192.5 57.7504V89C192.5 90.3807 191.381 91.5 190 91.5H135C133.619 91.5 132.5 90.3807 132.5 89V25C132.5 23.6193 133.619 22.5 135 22.5Z\"\n />\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-bg-3)\"\n d=\"M146 33.5H181.741C182.779 33.5 183.709 34.1415 184.078 35.112L190.538 52.112C191.16 53.748 189.951 55.5 188.201 55.5H146C144.619 55.5 143.5 54.3807 143.5 53V36C143.5 34.6193 144.619 33.5 146 33.5Z\"\n />\n <path\n strokeWidth=\"2\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-fg-heading)\"\n d=\"M150 65C150 65.39 149.763 65.8656 149.127 66.2893C148.499 66.7083 147.573 67 146.5 67C145.427 67 144.501 66.7083 143.873 66.2893C143.237 65.8656 143 65.39 143 65C143 64.61 143.237 64.1344 143.873 63.7107C144.501 63.2917 145.427 63 146.5 63C147.573 63 148.499 63.2917 149.127 63.7107C149.763 64.1344 150 64.61 150 65Z\"\n />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-warning)\" rx=\"1\" height=\"7\" width=\"5\" y=\"63\" x=\"187\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" rx=\"1\" height=\"11\" width=\"4\" y=\"81\" x=\"193\" />\n <rect strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2.5\" height=\"90\" width=\"121\" y=\"1.5\" x=\"6.5\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2\" height=\"4\" width=\"6\" y=\"84\" x=\"1\" />\n </svg>\n </div>\n <div className={styles.truckTires}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n </div>\n <div className={styles.road} />\n\n <svg\n xmlSpace=\"preserve\"\n viewBox=\"0 0 453.459 453.459\"\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n fill=\"var(--color-fg-heading)\"\n className={styles.lampPost}\n >\n <path\n d=\"M252.882,0c-37.781,0-68.686,29.953-70.245,67.358h-6.917v8.954c-26.109,2.163-45.463,10.011-45.463,19.366h9.993\nc-1.65,5.146-2.507,10.54-2.507,16.017c0,28.956,23.558,52.514,52.514,52.514c28.956,0,52.514-23.558,52.514-52.514\nc0-5.478-0.856-10.872-2.506-16.017h9.992c0-9.354-19.352-17.204-45.463-19.366v-8.954h-6.149C200.189,38.779,223.924,16,252.882,16\nc29.952,0,54.32,24.368,54.32,54.32c0,28.774-11.078,37.009-25.105,47.437c-17.444,12.968-37.216,27.667-37.216,78.884v113.914\nh-0.797c-5.068,0-9.174,4.108-9.174,9.177c0,2.844,1.293,5.383,3.321,7.066c-3.432,27.933-26.851,95.744-8.226,115.459v11.202h45.75\nv-11.202c18.625-19.715-4.794-87.527-8.227-115.459c2.029-1.683,3.322-4.223,3.322-7.066c0-5.068-4.107-9.177-9.176-9.177h-0.795\nV196.641c0-43.174,14.942-54.283,30.762-66.043c14.793-10.997,31.559-23.461,31.559-60.277C323.202,31.545,291.656,0,252.882,0z\nM232.77,111.694c0,23.442-19.071,42.514-42.514,42.514c-23.442,0-42.514-19.072-42.514-42.514c0-5.531,1.078-10.957,3.141-16.017\nh78.747C231.693,100.736,232.77,106.162,232.77,111.694z\"\n />\n </svg>\n </div>\n </div>\n );\n});\n\nTruckLoading.displayName = \"TruckLoading\";\n\nexport default TruckLoading;\n",".loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.loader::before {\n content: \"\";\n width: 100%;\n height: 5px;\n background: var(--color-primary);\n opacity: 0.3;\n position: absolute;\n top: calc(100% + 12px);\n left: 0;\n border-radius: 50%;\n animation: shadow324 0.5s linear infinite;\n}\n\n.loader::after {\n content: \"\";\n width: 100%;\n height: 100%;\n background: var(--color-primary);\n position: absolute;\n top: 0;\n left: 0;\n}\n\n/* 正方形样式 */\n.square::after {\n border-radius: var(--radius-button);\n animation: jump7456Square 0.5s linear infinite;\n}\n\n/* 圆形样式 */\n.circle::after {\n border-radius: 50%;\n animation: jump7456Circle 0.5s linear infinite;\n}\n\n@keyframes jump7456Square {\n 15% {\n border-bottom-right-radius: 3px;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes jump7456Circle {\n 15% {\n border-bottom-right-radius: 50%;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes shadow324 {\n 0%,\n 100% {\n transform: scale(1, 1);\n }\n\n 50% {\n transform: scale(1.2, 1);\n }\n}\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface BounceLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n shape?: \"square\" | \"circle\";\n className?: string;\n}\n\nconst BounceLoading = memo(({ size = \"medium\", shape = \"square\", className }: BounceLoadingProps) => {\n const sizeMap = {\n small: \"32px\",\n medium: \"48px\",\n large: \"64px\",\n };\n\n const loaderSize = sizeMap[size];\n\n return <div className={`${styles.loader} ${styles[shape]} ${className || \"\"}`} style={{ width: loaderSize, height: loaderSize }} />;\n});\n\nBounceLoading.displayName = \"BounceLoading\";\n\nexport default BounceLoading;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-BounceLoading-CwvDT5HF.cjs","names":[],"sources":["../src/designs/animations/ECGLoading/styles.module.css","../src/designs/animations/ECGLoading/index.tsx","../src/designs/animations/TruckLoading/styles.module.css","../src/designs/animations/TruckLoading/index.tsx","../src/designs/animations/BounceLoading/styles.module.css","../src/designs/animations/BounceLoading/index.tsx"],"sourcesContent":[".loading {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.loading svg polyline {\r\n fill: none;\r\n stroke-width: 3;\r\n stroke-linecap: round;\r\n stroke-linejoin: round;\r\n}\r\n\r\n.loading svg polyline.back {\r\n fill: none;\r\n stroke: var(--color-primary-alpha);\r\n}\r\n\r\n.loading svg polyline.front {\r\n fill: none;\r\n stroke: var(--color-primary);\r\n stroke-dasharray: 48, 144;\r\n stroke-dashoffset: 192;\r\n animation: dash_682 1.4s linear infinite;\r\n}\r\n\r\n@keyframes dash_682 {\r\n 72.5% {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n}","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface ECGLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst ECGLoading = memo(({ size = \"medium\", className }: ECGLoadingProps) => {\n const sizeMap = {\n small: { width: \"48px\", height: \"36px\" },\n medium: { width: \"64px\", height: \"48px\" },\n large: { width: \"96px\", height: \"72px\" },\n };\n\n const { width, height } = sizeMap[size];\n\n return (\n <div className={`${styles.loading} ${className || \"\"}`}>\n <svg width={width} height={height} viewBox=\"0 0 64 48\">\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"back\" className={styles.back} />\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"front\" className={styles.front} />\n </svg>\n </div>\n );\n});\n\nECGLoading.displayName = \"ECGLoading\";\n\nexport default ECGLoading;\n",".loader {\r\n width: fit-content;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.truckWrapper {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n align-items: center;\r\n justify-content: flex-end;\r\n overflow-x: hidden;\r\n}\r\n\r\n/* truck upper body */\r\n.truckBody {\r\n width: 65%;\r\n height: fit-content;\r\n margin-bottom: 6px;\r\n animation: motion 1s linear infinite;\r\n}\r\n\r\n/* truck suspension animation*/\r\n@keyframes motion {\r\n 0% {\r\n transform: translateY(0px);\r\n }\r\n 50% {\r\n transform: translateY(3px);\r\n }\r\n 100% {\r\n transform: translateY(0px);\r\n }\r\n}\r\n\r\n/* truck's tires */\r\n.truckTires {\r\n width: 65%;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0px 10px 0px 15px;\r\n position: absolute;\r\n bottom: 0;\r\n}\r\n\r\n.tiresvg {\r\n width: 24px;\r\n}\r\n\r\n.road {\r\n width: 100%;\r\n height: 1.5px;\r\n background-color: var(--color-fg-heading);\r\n position: relative;\r\n bottom: 0;\r\n align-self: flex-end;\r\n border-radius: var(--radius-button);\r\n}\r\n\r\n.road::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 20px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -50%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 10px solid var(--color-bg);\r\n}\r\n\r\n.road::after {\r\n content: \"\";\r\n position: absolute;\r\n width: 10px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -65%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 4px solid var(--color-bg);\r\n}\r\n\r\n.lampPost {\r\n position: absolute;\r\n bottom: 0;\r\n right: -90%;\r\n height: 45%;\r\n animation: roadAnimation 1.4s linear infinite;\r\n}\r\n\r\n@keyframes roadAnimation {\r\n 0% {\r\n transform: translateX(0px);\r\n }\r\n 100% {\r\n transform: translateX(-350px);\r\n }\r\n}\r\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface TruckLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst TruckLoading = memo(({ size = \"medium\", className }: TruckLoadingProps) => {\n const sizeMap = {\n small: { width: \"150px\", height: \"75px\", svgScale: 0.75 },\n medium: { width: \"200px\", height: \"100px\", svgScale: 1 },\n large: { width: \"300px\", height: \"150px\", svgScale: 1.5 },\n };\n\n const { width, height, svgScale } = sizeMap[size];\n\n return (\n <div className={`${styles.loader} ${className || \"\"}`} style={{ width, height }}>\n <div className={styles.truckWrapper} style={{ transform: `scale(${svgScale})` }}>\n <div className={styles.truckBody}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 198 93\" className={styles.trucksvg}>\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-primary)\"\n d=\"M135 22.5H177.264C178.295 22.5 179.22 23.133 179.594 24.0939L192.33 56.8443C192.442 57.1332 192.5 57.4404 192.5 57.7504V89C192.5 90.3807 191.381 91.5 190 91.5H135C133.619 91.5 132.5 90.3807 132.5 89V25C132.5 23.6193 133.619 22.5 135 22.5Z\"\n />\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-bg-3)\"\n d=\"M146 33.5H181.741C182.779 33.5 183.709 34.1415 184.078 35.112L190.538 52.112C191.16 53.748 189.951 55.5 188.201 55.5H146C144.619 55.5 143.5 54.3807 143.5 53V36C143.5 34.6193 144.619 33.5 146 33.5Z\"\n />\n <path\n strokeWidth=\"2\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-fg-heading)\"\n d=\"M150 65C150 65.39 149.763 65.8656 149.127 66.2893C148.499 66.7083 147.573 67 146.5 67C145.427 67 144.501 66.7083 143.873 66.2893C143.237 65.8656 143 65.39 143 65C143 64.61 143.237 64.1344 143.873 63.7107C144.501 63.2917 145.427 63 146.5 63C147.573 63 148.499 63.2917 149.127 63.7107C149.763 64.1344 150 64.61 150 65Z\"\n />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-warning)\" rx=\"1\" height=\"7\" width=\"5\" y=\"63\" x=\"187\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" rx=\"1\" height=\"11\" width=\"4\" y=\"81\" x=\"193\" />\n <rect strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2.5\" height=\"90\" width=\"121\" y=\"1.5\" x=\"6.5\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2\" height=\"4\" width=\"6\" y=\"84\" x=\"1\" />\n </svg>\n </div>\n <div className={styles.truckTires}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n </div>\n <div className={styles.road} />\n\n <svg\n xmlSpace=\"preserve\"\n viewBox=\"0 0 453.459 453.459\"\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n fill=\"var(--color-fg-heading)\"\n className={styles.lampPost}\n >\n <path\n d=\"M252.882,0c-37.781,0-68.686,29.953-70.245,67.358h-6.917v8.954c-26.109,2.163-45.463,10.011-45.463,19.366h9.993\nc-1.65,5.146-2.507,10.54-2.507,16.017c0,28.956,23.558,52.514,52.514,52.514c28.956,0,52.514-23.558,52.514-52.514\nc0-5.478-0.856-10.872-2.506-16.017h9.992c0-9.354-19.352-17.204-45.463-19.366v-8.954h-6.149C200.189,38.779,223.924,16,252.882,16\nc29.952,0,54.32,24.368,54.32,54.32c0,28.774-11.078,37.009-25.105,47.437c-17.444,12.968-37.216,27.667-37.216,78.884v113.914\nh-0.797c-5.068,0-9.174,4.108-9.174,9.177c0,2.844,1.293,5.383,3.321,7.066c-3.432,27.933-26.851,95.744-8.226,115.459v11.202h45.75\nv-11.202c18.625-19.715-4.794-87.527-8.227-115.459c2.029-1.683,3.322-4.223,3.322-7.066c0-5.068-4.107-9.177-9.176-9.177h-0.795\nV196.641c0-43.174,14.942-54.283,30.762-66.043c14.793-10.997,31.559-23.461,31.559-60.277C323.202,31.545,291.656,0,252.882,0z\nM232.77,111.694c0,23.442-19.071,42.514-42.514,42.514c-23.442,0-42.514-19.072-42.514-42.514c0-5.531,1.078-10.957,3.141-16.017\nh78.747C231.693,100.736,232.77,106.162,232.77,111.694z\"\n />\n </svg>\n </div>\n </div>\n );\n});\n\nTruckLoading.displayName = \"TruckLoading\";\n\nexport default TruckLoading;\n",".loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.loader::before {\n content: \"\";\n width: 100%;\n height: 5px;\n background: var(--color-primary);\n opacity: 0.3;\n position: absolute;\n top: calc(100% + 12px);\n left: 0;\n border-radius: 50%;\n animation: shadow324 0.5s linear infinite;\n}\n\n.loader::after {\n content: \"\";\n width: 100%;\n height: 100%;\n background: var(--color-primary);\n position: absolute;\n top: 0;\n left: 0;\n}\n\n/* 正方形样式 */\n.square::after {\n border-radius: var(--radius-button);\n animation: jump7456Square 0.5s linear infinite;\n}\n\n/* 圆形样式 */\n.circle::after {\n border-radius: 50%;\n animation: jump7456Circle 0.5s linear infinite;\n}\n\n@keyframes jump7456Square {\n 15% {\n border-bottom-right-radius: 3px;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes jump7456Circle {\n 15% {\n border-bottom-right-radius: 50%;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes shadow324 {\n 0%,\n 100% {\n transform: scale(1, 1);\n }\n\n 50% {\n transform: scale(1.2, 1);\n }\n}\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface BounceLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n shape?: \"square\" | \"circle\";\n className?: string;\n}\n\nconst BounceLoading = memo(({ size = \"medium\", shape = \"square\", className }: BounceLoadingProps) => {\n const sizeMap = {\n small: \"32px\",\n medium: \"48px\",\n large: \"64px\",\n };\n\n const loaderSize = sizeMap[size];\n\n return <div className={`${styles.loader} ${styles[shape]} ${className || \"\"}`} style={{ width: loaderSize, height: loaderSize }} />;\n});\n\nBounceLoading.displayName = \"BounceLoading\";\n\nexport default BounceLoading;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunk-BounceLoading-CwvDT5HF.cjs","names":[],"sources":["../src/designs/animations/ECGLoading/styles.module.css","../src/designs/animations/ECGLoading/index.tsx","../src/designs/animations/TruckLoading/styles.module.css","../src/designs/animations/TruckLoading/index.tsx","../src/designs/animations/BounceLoading/styles.module.css","../src/designs/animations/BounceLoading/index.tsx"],"sourcesContent":[".loading {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.loading svg polyline {\r\n fill: none;\r\n stroke-width: 3;\r\n stroke-linecap: round;\r\n stroke-linejoin: round;\r\n}\r\n\r\n.loading svg polyline.back {\r\n fill: none;\r\n stroke: var(--color-primary-alpha);\r\n}\r\n\r\n.loading svg polyline.front {\r\n fill: none;\r\n stroke: var(--color-primary);\r\n stroke-dasharray: 48, 144;\r\n stroke-dashoffset: 192;\r\n animation: dash_682 1.4s linear infinite;\r\n}\r\n\r\n@keyframes dash_682 {\r\n 72.5% {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n stroke-dashoffset: 0;\r\n }\r\n}","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface ECGLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst ECGLoading = memo(({ size = \"medium\", className }: ECGLoadingProps) => {\n const sizeMap = {\n small: { width: \"48px\", height: \"36px\" },\n medium: { width: \"64px\", height: \"48px\" },\n large: { width: \"96px\", height: \"72px\" },\n };\n\n const { width, height } = sizeMap[size];\n\n return (\n <div className={`${styles.loading} ${className || \"\"}`}>\n <svg width={width} height={height} viewBox=\"0 0 64 48\">\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"back\" className={styles.back} />\n <polyline points=\"0.157 23.954, 14 23.954, 21.843 48, 43 0, 50 24, 64 24\" id=\"front\" className={styles.front} />\n </svg>\n </div>\n );\n});\n\nECGLoading.displayName = \"ECGLoading\";\n\nexport default ECGLoading;\n",".loader {\r\n width: fit-content;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.truckWrapper {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n align-items: center;\r\n justify-content: flex-end;\r\n overflow-x: hidden;\r\n}\r\n\r\n/* truck upper body */\r\n.truckBody {\r\n width: 65%;\r\n height: fit-content;\r\n margin-bottom: 6px;\r\n animation: motion 1s linear infinite;\r\n}\r\n\r\n/* truck suspension animation*/\r\n@keyframes motion {\r\n 0% {\r\n transform: translateY(0px);\r\n }\r\n 50% {\r\n transform: translateY(3px);\r\n }\r\n 100% {\r\n transform: translateY(0px);\r\n }\r\n}\r\n\r\n/* truck's tires */\r\n.truckTires {\r\n width: 65%;\r\n height: fit-content;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0px 10px 0px 15px;\r\n position: absolute;\r\n bottom: 0;\r\n}\r\n\r\n.tiresvg {\r\n width: 24px;\r\n}\r\n\r\n.road {\r\n width: 100%;\r\n height: 1.5px;\r\n background-color: var(--color-fg-heading);\r\n position: relative;\r\n bottom: 0;\r\n align-self: flex-end;\r\n border-radius: var(--radius-button);\r\n}\r\n\r\n.road::before {\r\n content: \"\";\r\n position: absolute;\r\n width: 20px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -50%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 10px solid var(--color-bg);\r\n}\r\n\r\n.road::after {\r\n content: \"\";\r\n position: absolute;\r\n width: 10px;\r\n height: 100%;\r\n background-color: var(--color-fg-heading);\r\n right: -65%;\r\n border-radius: var(--radius-button);\r\n animation: roadAnimation 1.4s linear infinite;\r\n border-left: 4px solid var(--color-bg);\r\n}\r\n\r\n.lampPost {\r\n position: absolute;\r\n bottom: 0;\r\n right: -90%;\r\n height: 45%;\r\n animation: roadAnimation 1.4s linear infinite;\r\n}\r\n\r\n@keyframes roadAnimation {\r\n 0% {\r\n transform: translateX(0px);\r\n }\r\n 100% {\r\n transform: translateX(-350px);\r\n }\r\n}\r\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface TruckLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n}\n\nconst TruckLoading = memo(({ size = \"medium\", className }: TruckLoadingProps) => {\n const sizeMap = {\n small: { width: \"150px\", height: \"75px\", svgScale: 0.75 },\n medium: { width: \"200px\", height: \"100px\", svgScale: 1 },\n large: { width: \"300px\", height: \"150px\", svgScale: 1.5 },\n };\n\n const { width, height, svgScale } = sizeMap[size];\n\n return (\n <div className={`${styles.loader} ${className || \"\"}`} style={{ width, height }}>\n <div className={styles.truckWrapper} style={{ transform: `scale(${svgScale})` }}>\n <div className={styles.truckBody}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 198 93\" className={styles.trucksvg}>\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-primary)\"\n d=\"M135 22.5H177.264C178.295 22.5 179.22 23.133 179.594 24.0939L192.33 56.8443C192.442 57.1332 192.5 57.4404 192.5 57.7504V89C192.5 90.3807 191.381 91.5 190 91.5H135C133.619 91.5 132.5 90.3807 132.5 89V25C132.5 23.6193 133.619 22.5 135 22.5Z\"\n />\n <path\n strokeWidth=\"3\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-bg-3)\"\n d=\"M146 33.5H181.741C182.779 33.5 183.709 34.1415 184.078 35.112L190.538 52.112C191.16 53.748 189.951 55.5 188.201 55.5H146C144.619 55.5 143.5 54.3807 143.5 53V36C143.5 34.6193 144.619 33.5 146 33.5Z\"\n />\n <path\n strokeWidth=\"2\"\n stroke=\"var(--color-fg-heading)\"\n fill=\"var(--color-fg-heading)\"\n d=\"M150 65C150 65.39 149.763 65.8656 149.127 66.2893C148.499 66.7083 147.573 67 146.5 67C145.427 67 144.501 66.7083 143.873 66.2893C143.237 65.8656 143 65.39 143 65C143 64.61 143.237 64.1344 143.873 63.7107C144.501 63.2917 145.427 63 146.5 63C147.573 63 148.499 63.2917 149.127 63.7107C149.763 64.1344 150 64.61 150 65Z\"\n />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-warning)\" rx=\"1\" height=\"7\" width=\"5\" y=\"63\" x=\"187\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" rx=\"1\" height=\"11\" width=\"4\" y=\"81\" x=\"193\" />\n <rect strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2.5\" height=\"90\" width=\"121\" y=\"1.5\" x=\"6.5\" />\n <rect strokeWidth=\"2\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-bg-2)\" rx=\"2\" height=\"4\" width=\"6\" y=\"84\" x=\"1\" />\n </svg>\n </div>\n <div className={styles.truckTires}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 30 30\" className={styles.tiresvg}>\n <circle strokeWidth=\"3\" stroke=\"var(--color-fg-heading)\" fill=\"var(--color-fg-heading)\" r=\"13.5\" cy=\"15\" cx=\"15\" />\n <circle fill=\"var(--color-bg-2)\" r=\"7\" cy=\"15\" cx=\"15\" />\n </svg>\n </div>\n <div className={styles.road} />\n\n <svg\n xmlSpace=\"preserve\"\n viewBox=\"0 0 453.459 453.459\"\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n fill=\"var(--color-fg-heading)\"\n className={styles.lampPost}\n >\n <path\n d=\"M252.882,0c-37.781,0-68.686,29.953-70.245,67.358h-6.917v8.954c-26.109,2.163-45.463,10.011-45.463,19.366h9.993\nc-1.65,5.146-2.507,10.54-2.507,16.017c0,28.956,23.558,52.514,52.514,52.514c28.956,0,52.514-23.558,52.514-52.514\nc0-5.478-0.856-10.872-2.506-16.017h9.992c0-9.354-19.352-17.204-45.463-19.366v-8.954h-6.149C200.189,38.779,223.924,16,252.882,16\nc29.952,0,54.32,24.368,54.32,54.32c0,28.774-11.078,37.009-25.105,47.437c-17.444,12.968-37.216,27.667-37.216,78.884v113.914\nh-0.797c-5.068,0-9.174,4.108-9.174,9.177c0,2.844,1.293,5.383,3.321,7.066c-3.432,27.933-26.851,95.744-8.226,115.459v11.202h45.75\nv-11.202c18.625-19.715-4.794-87.527-8.227-115.459c2.029-1.683,3.322-4.223,3.322-7.066c0-5.068-4.107-9.177-9.176-9.177h-0.795\nV196.641c0-43.174,14.942-54.283,30.762-66.043c14.793-10.997,31.559-23.461,31.559-60.277C323.202,31.545,291.656,0,252.882,0z\nM232.77,111.694c0,23.442-19.071,42.514-42.514,42.514c-23.442,0-42.514-19.072-42.514-42.514c0-5.531,1.078-10.957,3.141-16.017\nh78.747C231.693,100.736,232.77,106.162,232.77,111.694z\"\n />\n </svg>\n </div>\n </div>\n );\n});\n\nTruckLoading.displayName = \"TruckLoading\";\n\nexport default TruckLoading;\n",".loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.loader::before {\n content: \"\";\n width: 100%;\n height: 5px;\n background: var(--color-primary);\n opacity: 0.3;\n position: absolute;\n top: calc(100% + 12px);\n left: 0;\n border-radius: 50%;\n animation: shadow324 0.5s linear infinite;\n}\n\n.loader::after {\n content: \"\";\n width: 100%;\n height: 100%;\n background: var(--color-primary);\n position: absolute;\n top: 0;\n left: 0;\n}\n\n/* 正方形样式 */\n.square::after {\n border-radius: var(--radius-button);\n animation: jump7456Square 0.5s linear infinite;\n}\n\n/* 圆形样式 */\n.circle::after {\n border-radius: 50%;\n animation: jump7456Circle 0.5s linear infinite;\n}\n\n@keyframes jump7456Square {\n 15% {\n border-bottom-right-radius: 3px;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes jump7456Circle {\n 15% {\n border-bottom-right-radius: 50%;\n }\n\n 25% {\n transform: translateY(9px) rotate(22.5deg);\n }\n\n 50% {\n transform: translateY(18px) scale(1, 0.9) rotate(45deg);\n border-bottom-right-radius: 40px;\n }\n\n 75% {\n transform: translateY(9px) rotate(67.5deg);\n }\n\n 100% {\n transform: translateY(0) rotate(90deg);\n }\n}\n\n@keyframes shadow324 {\n 0%,\n 100% {\n transform: scale(1, 1);\n }\n\n 50% {\n transform: scale(1.2, 1);\n }\n}\n","import { memo } from \"react\";\n\nimport styles from \"./styles.module.css\";\n\ninterface BounceLoadingProps {\n size?: \"small\" | \"medium\" | \"large\";\n shape?: \"square\" | \"circle\";\n className?: string;\n}\n\nconst BounceLoading = memo(({ size = \"medium\", shape = \"square\", className }: BounceLoadingProps) => {\n const sizeMap = {\n small: \"32px\",\n medium: \"48px\",\n large: \"64px\",\n };\n\n const loaderSize = sizeMap[size];\n\n return <div className={`${styles.loader} ${styles[shape]} ${className || \"\"}`} style={{ width: loaderSize, height: loaderSize }} />;\n});\n\nBounceLoading.displayName = \"BounceLoading\";\n\nexport default BounceLoading;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const at=require("./chunk-chunk-BFrxaqQT.cjs"),q=require("./chunk-useTheme-DgleVMMh.cjs");let o=require("react");o=at.__toESM(o,1);let V=require("react/jsx-runtime");var ut="style-module__waves___oR3u7",it="style-module__wavesCanvas___zkhTC",rt={waves:ut,wavesCanvas:it},P=class{x;y;z;constructor(e,r,c){this.x=e,this.y=r,this.z=c}dot2(e,r){return this.x*e+this.y*r}},lt=class{grad3;p;perm;gradP;constructor(e=0){this.grad3=[new P(1,1,0),new P(-1,1,0),new P(1,-1,0),new P(-1,-1,0),new P(1,0,1),new P(-1,0,1),new P(1,0,-1),new P(-1,0,-1),new P(0,1,1),new P(0,-1,1),new P(0,1,-1),new P(0,-1,-1)],this.p=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],this.perm=new Array(512),this.gradP=new Array(512),this.seed(e)}seed(e){e>0&&e<1&&(e*=65536),e=Math.floor(e),e<256&&(e|=e<<8);for(let r=0;r<256;r++){let c=r&1?this.p[r]^e&255:this.p[r]^e>>8&255;this.perm[r]=this.perm[r+256]=c,this.gradP[r]=this.gradP[r+256]=this.grad3[c%12]}}fade(e){return e*e*e*(e*(e*6-15)+10)}lerp(e,r,c){return(1-c)*e+c*r}perlin2(e,r){let c=Math.floor(e),t=Math.floor(r);e-=c,r-=t,c&=255,t&=255;const d=this.gradP[c+this.perm[t]].dot2(e,r),v=this.gradP[c+this.perm[t+1]].dot2(e,r-1),y=this.gradP[c+1+this.perm[t]].dot2(e-1,r),b=this.gradP[c+1+this.perm[t+1]].dot2(e-1,r-1),w=this.fade(e);return this.lerp(this.lerp(d,y,w),this.lerp(v,b,w),this.fade(r))}},ht=({lineColor:e="black",backgroundColor:r="transparent",waveSpeedX:c=.0125,waveSpeedY:t=.005,waveAmpX:d=32,waveAmpY:v=16,xGap:y=10,yGap:b=32,friction:w=.925,tension:R=.005,maxCursorMove:g=100,style:D={},className:W=""})=>{const f=(0,o.useRef)(null),C=(0,o.useRef)(null),l=(0,o.useRef)(null),_=(0,o.useRef)({width:0,height:0,left:0,top:0}),N=(0,o.useRef)(new lt(Math.random())),Y=(0,o.useRef)([]),j=(0,o.useRef)({x:-10,y:0,lx:0,ly:0,sx:0,sy:0,v:0,vs:0,a:0,set:!1}),L=(0,o.useRef)({lineColor:e,waveSpeedX:c,waveSpeedY:t,waveAmpX:d,waveAmpY:v,friction:w,tension:R,maxCursorMove:g,xGap:y,yGap:b}),T=(0,o.useRef)(null);return(0,o.useEffect)(()=>{L.current={lineColor:e,waveSpeedX:c,waveSpeedY:t,waveAmpX:d,waveAmpY:v,friction:w,tension:R,maxCursorMove:g,xGap:y,yGap:b}},[e,c,t,d,v,w,R,g,y,b]),(0,o.useEffect)(()=>{const p=C.current,k=f.current;if(!p||!k)return;l.current=p.getContext("2d");function B(){if(!k||!p)return;const i=k.getBoundingClientRect();_.current={width:i.width,height:i.height,left:i.left,top:i.top},p.width=i.width,p.height=i.height}function I(){const{width:i,height:s}=_.current;Y.current=[];const u=i+200,M=s+30,{xGap:$,yGap:O}=L.current,J=Math.ceil(u/$),G=Math.ceil(M/O),K=(i-$*J)/2,Q=(s-O*G)/2;for(let H=0;H<=J;H++){const U=[];for(let m=0;m<=G;m++)U.push({x:K+$*H,y:Q+O*m,wave:{x:0,y:0},cursor:{x:0,y:0,vx:0,vy:0}});Y.current.push(U)}}function E(i){const s=Y.current,u=j.current,M=N.current,{waveSpeedX:$,waveSpeedY:O,waveAmpX:J,waveAmpY:G,friction:K,tension:Q,maxCursorMove:H}=L.current;s.forEach(U=>{U.forEach(m=>{const tt=M.perlin2((m.x+i*$)*.002,(m.y+i*O)*.0015)*12;m.wave.x=Math.cos(tt)*J,m.wave.y=Math.sin(tt)*G;const st=m.x-u.sx,ot=m.y-u.sy,z=Math.hypot(st,ot),Z=Math.max(175,u.vs);if(z<Z){const ct=1-z/Z,et=Math.cos(z*.001)*ct;m.cursor.vx+=Math.cos(u.a)*et*Z*u.vs*65e-5,m.cursor.vy+=Math.sin(u.a)*et*Z*u.vs*65e-5}m.cursor.vx+=(0-m.cursor.x)*Q,m.cursor.vy+=(0-m.cursor.y)*Q,m.cursor.vx*=K,m.cursor.vy*=K,m.cursor.x+=m.cursor.vx*2,m.cursor.y+=m.cursor.vy*2,m.cursor.x=Math.min(H,Math.max(-H,m.cursor.x)),m.cursor.y=Math.min(H,Math.max(-H,m.cursor.y))})})}function A(i,s=!0){const u=i.x+i.wave.x+(s?i.cursor.x:0),M=i.y+i.wave.y+(s?i.cursor.y:0);return{x:Math.round(u*10)/10,y:Math.round(M*10)/10}}function F(){const{width:i,height:s}=_.current,u=l.current;u&&(u.clearRect(0,0,i,s),u.beginPath(),u.strokeStyle=L.current.lineColor,Y.current.forEach(M=>{let $=A(M[0],!1);u.moveTo($.x,$.y),M.forEach((O,J)=>{const G=J===M.length-1;$=A(O,!G);const K=A(M[J+1]||M[M.length-1],!G);u.lineTo($.x,$.y),G&&u.moveTo(K.x,K.y)})}),u.stroke())}function X(i){if(!k)return;const s=j.current;s.sx+=(s.x-s.sx)*.1,s.sy+=(s.y-s.sy)*.1;const u=s.x-s.lx,M=s.y-s.ly,$=Math.hypot(u,M);s.v=$,s.vs+=($-s.vs)*.1,s.vs=Math.min(100,s.vs),s.lx=s.x,s.ly=s.y,s.a=Math.atan2(M,u),k.style.setProperty("--x",`${s.sx}px`),k.style.setProperty("--y",`${s.sy}px`),E(i),F(),T.current=requestAnimationFrame(X)}function n(){B(),I()}function h(i){x(i.clientX,i.clientY)}function a(i){const s=i.touches[0];x(s.clientX,s.clientY)}function x(i,s){const u=j.current,M=_.current;u.x=i-M.left,u.y=s-M.top,u.set||(u.sx=u.x,u.sy=u.y,u.lx=u.x,u.ly=u.y,u.set=!0)}return B(),I(),T.current=requestAnimationFrame(X),window.addEventListener("resize",n),window.addEventListener("mousemove",h),window.addEventListener("touchmove",a,{passive:!1}),()=>{window.removeEventListener("resize",n),window.removeEventListener("mousemove",h),window.removeEventListener("touchmove",a),T.current!==null&&cancelAnimationFrame(T.current)}},[]),(0,V.jsx)("div",{ref:f,className:`${rt.waves} ${W}`,style:{position:"absolute",top:0,left:0,margin:0,padding:0,width:"100%",height:"100%",overflow:"hidden",backgroundColor:r,...D},children:(0,V.jsx)("canvas",{ref:C,className:rt.wavesCanvas})})},dt=e=>{const{currentTheme:r}=q.useTheme();return(0,V.jsx)(ht,{lineColor:(0,o.useMemo)(()=>{const c=r.colors.variables.primary||"rgb(220, 38, 38)",t=(y,b,w,R=.4)=>`rgb(${Math.round(y+(255-y)*R)}, ${Math.round(b+(255-b)*R)}, ${Math.round(w+(255-w)*R)})`;if(c.startsWith("#")){const y=c.slice(1);return t(parseInt(y.slice(0,2),16),parseInt(y.slice(2,4),16),parseInt(y.slice(4,6),16))}const d=c.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(d)return t(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10));const v=c.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);return v?t(parseInt(v[1],10),parseInt(v[2],10),parseInt(v[3],10)):c},[r]),backgroundColor:"transparent",waveSpeedX:.05,waveSpeedY:.01,waveAmpX:40,waveAmpY:20,...e})},ft="style-module__squaresCanvas___22kMc",mt={squaresCanvas:ft},vt=({direction:e="right",speed:r=1,borderColor:c="#6B7280",squareSize:t=40,hoverFillColor:d="#111827",className:v="",style:y={}})=>{const{currentTheme:b}=q.useTheme(),w=b.colors.variables.fgHeading,R=(0,o.useRef)(null),g=(0,o.useRef)(null),D=(0,o.useRef)(0),W=(0,o.useRef)(0),f=(0,o.useRef)({x:0,y:0}),C=(0,o.useRef)(null);return(0,o.useEffect)(()=>{const l=R.current;if(!l)return;const _=l.getContext("2d"),N=()=>{l.width=l.offsetWidth,l.height=l.offsetHeight,D.current=Math.ceil(l.width/t)+1,W.current=Math.ceil(l.height/t)+1};window.addEventListener("resize",N),N();const Y=()=>{if(!_)return;_.clearRect(0,0,l.width,l.height);const p=Math.floor(f.current.x/t)*t,k=Math.floor(f.current.y/t)*t;for(let I=p;I<l.width+t;I+=t)for(let E=k;E<l.height+t;E+=t){const A=I-f.current.x%t,F=E-f.current.y%t;C.current&&Math.floor((I-p)/t)===C.current.x&&Math.floor((E-k)/t)===C.current.y&&(_.fillStyle=d,_.fillRect(A,F,t,t)),_.strokeStyle=c,_.strokeRect(A,F,t,t)}const B=_.createRadialGradient(l.width/2,l.height/2,0,l.width/2,l.height/2,Math.sqrt(l.width**2+l.height**2)/2);B.addColorStop(0,"rgba(0, 0, 0, 0)"),B.addColorStop(1,w),_.fillStyle=B,_.fillRect(0,0,l.width,l.height)},j=()=>{const p=Math.max(r,.1);switch(e){case"right":f.current.x=(f.current.x-p+t)%t;break;case"left":f.current.x=(f.current.x+p+t)%t;break;case"up":f.current.y=(f.current.y+p+t)%t;break;case"down":f.current.y=(f.current.y-p+t)%t;break;case"diagonal":f.current.x=(f.current.x-p+t)%t,f.current.y=(f.current.y-p+t)%t;break;default:break}Y(),g.current=requestAnimationFrame(j)},L=p=>{const k=l.getBoundingClientRect(),B=p.clientX-k.left,I=p.clientY-k.top,E=Math.floor(f.current.x/t)*t,A=Math.floor(f.current.y/t)*t,F=Math.floor((B+f.current.x-E)/t),X=Math.floor((I+f.current.y-A)/t);(!C.current||C.current.x!==F||C.current.y!==X)&&(C.current={x:F,y:X})},T=()=>{C.current=null};return l.addEventListener("mousemove",L),l.addEventListener("mouseleave",T),g.current=requestAnimationFrame(j),()=>{window.removeEventListener("resize",N),g.current&&cancelAnimationFrame(g.current),l.removeEventListener("mousemove",L),l.removeEventListener("mouseleave",T)}},[e,r,c,d,t,w]),(0,V.jsx)("canvas",{ref:R,className:`${mt.squaresCanvas} ${v}`,style:y})},gt=e=>{const{currentTheme:r}=q.useTheme();return(0,V.jsx)(vt,{borderColor:(0,o.useMemo)(()=>{const c=r.colors.variables.border5||r.colors.variables.fg||"#6B7280";if(c.startsWith("#"))return c;const t=c.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return t?`#${parseInt(t[1],10).toString(16).padStart(2,"0")}${parseInt(t[2],10).toString(16).padStart(2,"0")}${parseInt(t[3],10).toString(16).padStart(2,"0")}`:c},[r]),hoverFillColor:(0,o.useMemo)(()=>{const c=r.colors.variables.bg3||r.colors.variables.border3||"#F3F4F6",t=(v,y,b,w=.3)=>`rgb(${Math.round(v*(1-w))}, ${Math.round(y*(1-w))}, ${Math.round(b*(1-w))})`;if(c.startsWith("#")){const v=c.slice(1);return t(parseInt(v.slice(0,2),16),parseInt(v.slice(2,4),16),parseInt(v.slice(4,6),16))}const d=c.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return d?t(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)):c},[r]),speed:.5,squareSize:40,direction:"diagonal",...e})},yt="style-module__container___HkxIe",xt="style-module__canvas___MR9JX",wt="style-module__outerVignette___i75nw",Mt="style-module__centerVignette___n9uVG",S={container:yt,canvas:xt,outerVignette:wt,centerVignette:Mt},pt=(0,o.memo)(({glitchColors:e=["#7F1D1D","#16A34A","#2563EB"],glitchSpeed:r=500,centerVignette:c=!1,outerVignette:t=!0,smooth:d=!0,characters:v="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*()-_+=/[]{};:<>.,0123456789",className:y="",style:b={}})=>{const w=(0,o.useRef)(null),R=(0,o.useRef)(null),g=(0,o.useRef)([]),D=(0,o.useRef)({columns:0,rows:0}),W=(0,o.useRef)(null),f=(0,o.useRef)(Date.now()),C=(0,o.useMemo)(()=>Array.from(v),[v]),l=(0,o.useRef)(new Map),_=16,N=10,Y=20,j=(0,o.useCallback)(()=>C[Math.floor(Math.random()*C.length)],[C]),L=(0,o.useCallback)(()=>e[Math.floor(Math.random()*e.length)],[e]),T=(0,o.useCallback)(n=>{if(l.current.has(n))return l.current.get(n);const h=n.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(i,s,u,M)=>s+s+u+u+M+M),a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(h),x=a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null;return l.current.set(n,x),x},[]),p=(n,h,a)=>{const x={r:Math.round(n.r+(h.r-n.r)*a),g:Math.round(n.g+(h.g-n.g)*a),b:Math.round(n.b+(h.b-n.b)*a)};return`rgb(${x.r}, ${x.g}, ${x.b})`},k=(n,h)=>({columns:Math.ceil(n/N),rows:Math.ceil(h/Y)}),B=(n,h)=>{D.current={columns:n,rows:h};const a=n*h;g.current=Array.from({length:a},()=>({char:j(),color:L(),targetColor:L(),colorProgress:1}))},I=()=>{const n=w.current;if(!n)return;const h=n.parentElement;if(!h)return;const a=window.devicePixelRatio||1,x=h.getBoundingClientRect();n.width=x.width*a,n.height=x.height*a,n.style.width=`${x.width}px`,n.style.height=`${x.height}px`,W.current&&W.current.setTransform(a,0,0,a,0,0);const{columns:i,rows:s}=k(x.width,x.height);B(i,s),E()},E=(0,o.useCallback)(()=>{if(!W.current||g.current.length===0)return;const n=W.current,h=w.current;h&&(n.clearRect(0,0,h.width,h.height),n.font=`${_}px monospace`,n.textBaseline="top",n.textAlign="left",g.current.forEach((a,x)=>{const i=x%D.current.columns*N,s=Math.floor(x/D.current.columns)*Y;n.fillStyle=a.color,n.fillText(a.char,i,s)}))},[]),A=(0,o.useCallback)(()=>{if(!g.current||g.current.length===0)return;const n=Math.max(1,Math.floor(g.current.length*.02));for(let h=0;h<n;h++){const a=Math.floor(Math.random()*g.current.length);g.current[a]&&(g.current[a].char=j(),g.current[a].targetColor=L(),d?g.current[a].colorProgress=0:(g.current[a].color=g.current[a].targetColor,g.current[a].colorProgress=1))}},[j,L,d]),F=(0,o.useCallback)(()=>{let n=!1,h=0;g.current.forEach(a=>{if(a.colorProgress<1){h++,a.colorProgress+=.03,a.colorProgress>1&&(a.colorProgress=1);const x=T(a.color),i=T(a.targetColor);x&&i&&(a.color=p(x,i,a.colorProgress),n=!0)}}),n&&h>0&&E()},[T,E]),X=(0,o.useCallback)(()=>{const n=Date.now();n-f.current>=r?(A(),E(),f.current=n):d&&F(),R.current=requestAnimationFrame(X)},[r,d,A,F]);return(0,o.useEffect)(()=>{const n=w.current;if(!n)return;W.current=n.getContext("2d"),I(),X();let h;const a=()=>{clearTimeout(h),h=setTimeout(()=>{R.current&&cancelAnimationFrame(R.current),I(),X()},100)};return window.addEventListener("resize",a),()=>{R.current&&cancelAnimationFrame(R.current),window.removeEventListener("resize",a),clearTimeout(h),l.current.clear()}},[r,d,e,X]),(0,V.jsxs)("div",{className:`${S.container} ${y}`,style:b,children:[(0,V.jsx)("canvas",{ref:w,className:S.canvas}),t&&(0,V.jsx)("div",{className:S.outerVignette}),c&&(0,V.jsx)("div",{className:S.centerVignette})]})}),nt=(0,o.memo)(e=>{const{currentTheme:r}=q.useTheme();return(0,V.jsx)(pt,{glitchColors:(0,o.useMemo)(()=>{const c=r.colors.variables.primary||"#DC2626",t=r.colors.variables.info||"#2563EB",d=r.colors.variables.success||"#16A34A",v=y=>{if(y.startsWith("#"))return y;const b=y.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return b?`#${parseInt(b[1],10).toString(16).padStart(2,"0")}${parseInt(b[2],10).toString(16).padStart(2,"0")}${parseInt(b[3],10).toString(16).padStart(2,"0")}`:y};return[v(c),v(t),v(d)]},[r]),glitchSpeed:300,centerVignette:!0,outerVignette:!1,smooth:!0,...e})});nt.displayName="LetterGlitchBackground";Object.defineProperty(exports,"LetterGlitchBackground",{enumerable:!0,get:function(){return nt}});Object.defineProperty(exports,"SquareBackground",{enumerable:!0,get:function(){return gt}});Object.defineProperty(exports,"WaveBackground",{enumerable:!0,get:function(){return dt}});
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=chunk-animations-DOdfS0n5.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-animations-CYs6wRF6.cjs","names":[],"sources":["../src/designs/animations/Waves/style.module.css","../src/designs/animations/Waves/index.tsx","../src/designs/animations/Squares/style.module.css","../src/designs/animations/Squares/index.tsx","../src/designs/animations/LetterGlitch/style.module.css","../src/designs/animations/LetterGlitch/index.tsx"],"sourcesContent":[".waves {\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.waves::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 0.5rem;\n height: 0.5rem;\n background: var(--color-bg);\n border-radius: 50%;\n transform: translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);\n will-change: transform;\n}\n\n.wavesCanvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport type { CSSProperties } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\nclass Grad {\n x: number;\n y: number;\n z: number;\n constructor(x: number, y: number, z: number) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n dot2(x: number, y: number): number {\n return this.x * x + this.y * y;\n }\n}\n\nclass Noise {\n grad3: Grad[];\n p: number[];\n perm: number[];\n gradP: Grad[];\n\n constructor(seed = 0) {\n this.grad3 = [\n new Grad(1, 1, 0),\n new Grad(-1, 1, 0),\n new Grad(1, -1, 0),\n new Grad(-1, -1, 0),\n new Grad(1, 0, 1),\n new Grad(-1, 0, 1),\n new Grad(1, 0, -1),\n new Grad(-1, 0, -1),\n new Grad(0, 1, 1),\n new Grad(0, -1, 1),\n new Grad(0, 1, -1),\n new Grad(0, -1, -1),\n ];\n this.p = [\n 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234,\n 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139,\n 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80,\n 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202,\n 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221,\n 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210,\n 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150,\n 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180,\n ];\n this.perm = new Array(512);\n this.gradP = new Array(512);\n this.seed(seed);\n }\n seed(seed: number) {\n if (seed > 0 && seed < 1) seed *= 65536;\n seed = Math.floor(seed);\n if (seed < 256) seed |= seed << 8;\n for (let i = 0; i < 256; i++) {\n let v = i & 1 ? this.p[i] ^ (seed & 255) : this.p[i] ^ ((seed >> 8) & 255);\n this.perm[i] = this.perm[i + 256] = v;\n this.gradP[i] = this.gradP[i + 256] = this.grad3[v % 12];\n }\n }\n fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n lerp(a: number, b: number, t: number): number {\n return (1 - t) * a + t * b;\n }\n perlin2(x: number, y: number): number {\n let X = Math.floor(x),\n Y = Math.floor(y);\n x -= X;\n y -= Y;\n X &= 255;\n Y &= 255;\n const n00 = this.gradP[X + this.perm[Y]].dot2(x, y);\n const n01 = this.gradP[X + this.perm[Y + 1]].dot2(x, y - 1);\n const n10 = this.gradP[X + 1 + this.perm[Y]].dot2(x - 1, y);\n const n11 = this.gradP[X + 1 + this.perm[Y + 1]].dot2(x - 1, y - 1);\n const u = this.fade(x);\n return this.lerp(this.lerp(n00, n10, u), this.lerp(n01, n11, u), this.fade(y));\n }\n}\n\ninterface Point {\n x: number;\n y: number;\n wave: { x: number; y: number };\n cursor: { x: number; y: number; vx: number; vy: number };\n}\n\ninterface Mouse {\n x: number;\n y: number;\n lx: number;\n ly: number;\n sx: number;\n sy: number;\n v: number;\n vs: number;\n a: number;\n set: boolean;\n}\n\ninterface Config {\n lineColor: string;\n waveSpeedX: number;\n waveSpeedY: number;\n waveAmpX: number;\n waveAmpY: number;\n friction: number;\n tension: number;\n maxCursorMove: number;\n xGap: number;\n yGap: number;\n}\n\ninterface WavesProps {\n lineColor?: string;\n backgroundColor?: string;\n waveSpeedX?: number;\n waveSpeedY?: number;\n waveAmpX?: number;\n waveAmpY?: number;\n xGap?: number;\n yGap?: number;\n friction?: number;\n tension?: number;\n maxCursorMove?: number;\n style?: CSSProperties;\n className?: string;\n}\n\nconst Waves: React.FC<WavesProps> = ({\n lineColor = \"black\",\n backgroundColor = \"transparent\",\n waveSpeedX = 0.0125,\n waveSpeedY = 0.005,\n waveAmpX = 32,\n waveAmpY = 16,\n xGap = 10,\n yGap = 32,\n friction = 0.925,\n tension = 0.005,\n maxCursorMove = 100,\n style = {},\n className = \"\",\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const ctxRef = useRef<CanvasRenderingContext2D | null>(null);\n const boundingRef = useRef<{\n width: number;\n height: number;\n left: number;\n top: number;\n }>({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n });\n const noiseRef = useRef(new Noise(Math.random()));\n const linesRef = useRef<Point[][]>([]);\n const mouseRef = useRef<Mouse>({\n x: -10,\n y: 0,\n lx: 0,\n ly: 0,\n sx: 0,\n sy: 0,\n v: 0,\n vs: 0,\n a: 0,\n set: false,\n });\n const configRef = useRef<Config>({\n lineColor,\n waveSpeedX,\n waveSpeedY,\n waveAmpX,\n waveAmpY,\n friction,\n tension,\n maxCursorMove,\n xGap,\n yGap,\n });\n const frameIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n configRef.current = {\n lineColor,\n waveSpeedX,\n waveSpeedY,\n waveAmpX,\n waveAmpY,\n friction,\n tension,\n maxCursorMove,\n xGap,\n yGap,\n };\n }, [lineColor, waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, friction, tension, maxCursorMove, xGap, yGap]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n const container = containerRef.current;\n if (!canvas || !container) return;\n ctxRef.current = canvas.getContext(\"2d\");\n\n function setSize() {\n if (!container || !canvas) return;\n const rect = container.getBoundingClientRect();\n boundingRef.current = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top,\n };\n canvas.width = rect.width;\n canvas.height = rect.height;\n }\n\n function setLines() {\n const { width, height } = boundingRef.current;\n linesRef.current = [];\n const oWidth = width + 200,\n oHeight = height + 30;\n const { xGap, yGap } = configRef.current;\n const totalLines = Math.ceil(oWidth / xGap);\n const totalPoints = Math.ceil(oHeight / yGap);\n const xStart = (width - xGap * totalLines) / 2;\n const yStart = (height - yGap * totalPoints) / 2;\n for (let i = 0; i <= totalLines; i++) {\n const pts: Point[] = [];\n for (let j = 0; j <= totalPoints; j++) {\n pts.push({\n x: xStart + xGap * i,\n y: yStart + yGap * j,\n wave: { x: 0, y: 0 },\n cursor: { x: 0, y: 0, vx: 0, vy: 0 },\n });\n }\n linesRef.current.push(pts);\n }\n }\n\n function movePoints(time: number) {\n const lines = linesRef.current;\n const mouse = mouseRef.current;\n const noise = noiseRef.current;\n const { waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, friction, tension, maxCursorMove } = configRef.current;\n lines.forEach((pts) => {\n pts.forEach((p) => {\n const move = noise.perlin2((p.x + time * waveSpeedX) * 0.002, (p.y + time * waveSpeedY) * 0.0015) * 12;\n p.wave.x = Math.cos(move) * waveAmpX;\n p.wave.y = Math.sin(move) * waveAmpY;\n\n const dx = p.x - mouse.sx,\n dy = p.y - mouse.sy;\n const dist = Math.hypot(dx, dy);\n const l = Math.max(175, mouse.vs);\n if (dist < l) {\n const s = 1 - dist / l;\n const f = Math.cos(dist * 0.001) * s;\n p.cursor.vx += Math.cos(mouse.a) * f * l * mouse.vs * 0.00065;\n p.cursor.vy += Math.sin(mouse.a) * f * l * mouse.vs * 0.00065;\n }\n\n p.cursor.vx += (0 - p.cursor.x) * tension;\n p.cursor.vy += (0 - p.cursor.y) * tension;\n p.cursor.vx *= friction;\n p.cursor.vy *= friction;\n p.cursor.x += p.cursor.vx * 2;\n p.cursor.y += p.cursor.vy * 2;\n p.cursor.x = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.x));\n p.cursor.y = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.y));\n });\n });\n }\n\n function moved(point: Point, withCursor = true): { x: number; y: number } {\n const x = point.x + point.wave.x + (withCursor ? point.cursor.x : 0);\n const y = point.y + point.wave.y + (withCursor ? point.cursor.y : 0);\n return { x: Math.round(x * 10) / 10, y: Math.round(y * 10) / 10 };\n }\n\n function drawLines() {\n const { width, height } = boundingRef.current;\n const ctx = ctxRef.current;\n if (!ctx) return;\n ctx.clearRect(0, 0, width, height);\n ctx.beginPath();\n ctx.strokeStyle = configRef.current.lineColor;\n linesRef.current.forEach((points) => {\n let p1 = moved(points[0], false);\n ctx.moveTo(p1.x, p1.y);\n points.forEach((p, idx) => {\n const isLast = idx === points.length - 1;\n p1 = moved(p, !isLast);\n const p2 = moved(points[idx + 1] || points[points.length - 1], !isLast);\n ctx.lineTo(p1.x, p1.y);\n if (isLast) ctx.moveTo(p2.x, p2.y);\n });\n });\n ctx.stroke();\n }\n\n function tick(t: number) {\n if (!container) return;\n const mouse = mouseRef.current;\n mouse.sx += (mouse.x - mouse.sx) * 0.1;\n mouse.sy += (mouse.y - mouse.sy) * 0.1;\n const dx = mouse.x - mouse.lx,\n dy = mouse.y - mouse.ly;\n const d = Math.hypot(dx, dy);\n mouse.v = d;\n mouse.vs += (d - mouse.vs) * 0.1;\n mouse.vs = Math.min(100, mouse.vs);\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.a = Math.atan2(dy, dx);\n container.style.setProperty(\"--x\", `${mouse.sx}px`);\n container.style.setProperty(\"--y\", `${mouse.sy}px`);\n\n movePoints(t);\n drawLines();\n frameIdRef.current = requestAnimationFrame(tick);\n }\n\n function onResize() {\n setSize();\n setLines();\n }\n function onMouseMove(e: MouseEvent) {\n updateMouse(e.clientX, e.clientY);\n }\n function onTouchMove(e: TouchEvent) {\n const touch = e.touches[0];\n updateMouse(touch.clientX, touch.clientY);\n }\n function updateMouse(x: number, y: number) {\n const mouse = mouseRef.current;\n const b = boundingRef.current;\n mouse.x = x - b.left;\n mouse.y = y - b.top;\n if (!mouse.set) {\n mouse.sx = mouse.x;\n mouse.sy = mouse.y;\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.set = true;\n }\n }\n\n setSize();\n setLines();\n frameIdRef.current = requestAnimationFrame(tick);\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"touchmove\", onTouchMove);\n if (frameIdRef.current !== null) {\n cancelAnimationFrame(frameIdRef.current);\n }\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={`${styles.waves} ${className}`}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n backgroundColor,\n ...style,\n }}\n >\n <canvas ref={canvasRef} className={styles.wavesCanvas} />\n </div>\n );\n};\n\nconst WaveBackground: React.FC<Omit<WavesProps, \"lineColor\" | \"backgroundColor\">> = (props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取线条颜色,降低颜色深度(变浅)\n const lineColor = useMemo(() => {\n // 尝试从主题变量中获取主色,如果没有则使用默认值\n const primary = currentTheme.colors.variables.primary || \"rgb(220, 38, 38)\";\n\n // 将颜色变浅的函数:向白色混合\n const lightenColor = (r: number, g: number, b: number, factor: number = 0.4) => {\n // factor: 0 = 原色, 1 = 白色\n const newR = Math.round(r + (255 - r) * factor);\n const newG = Math.round(g + (255 - g) * factor);\n const newB = Math.round(b + (255 - b) * factor);\n return `rgb(${newR}, ${newG}, ${newB})`;\n };\n\n // 如果已经是 hex 格式,转换为 rgb 并变浅\n if (primary.startsWith(\"#\")) {\n const hex = primary.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return lightenColor(r, g, b);\n }\n // 将 rgb() 格式变浅\n const match = primary.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n return lightenColor(r, g, b);\n }\n // 如果已经是 rgba 格式,提取 RGB 并变浅\n const rgbaMatch = primary.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (rgbaMatch) {\n const r = parseInt(rgbaMatch[1], 10);\n const g = parseInt(rgbaMatch[2], 10);\n const b = parseInt(rgbaMatch[3], 10);\n return lightenColor(r, g, b);\n }\n return primary;\n }, [currentTheme]);\n\n return <Waves lineColor={lineColor} backgroundColor=\"transparent\" waveSpeedX={0.05} waveSpeedY={0.01} waveAmpX={40} waveAmpY={20} {...props} />;\n};\n\nexport default WaveBackground;\n",".squaresCanvas {\n width: 100%;\n height: 100%;\n border: none;\n display: block;\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ntype CanvasStrokeStyle = string | CanvasGradient | CanvasPattern;\n\ninterface GridOffset {\n x: number;\n y: number;\n}\n\ninterface SquaresProps {\n direction?: \"diagonal\" | \"up\" | \"right\" | \"down\" | \"left\";\n speed?: number;\n borderColor?: CanvasStrokeStyle;\n squareSize?: number;\n hoverFillColor?: CanvasStrokeStyle;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst Squares: React.FC<SquaresProps> = ({\n direction = \"right\",\n speed = 1,\n borderColor = \"#6B7280\",\n squareSize = 40,\n hoverFillColor = \"#111827\",\n className = \"\",\n style = {},\n}) => {\n const { currentTheme } = useTheme();\n const vignetteEdgeColor = currentTheme.colors.variables.fgHeading;\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const requestRef = useRef<number | null>(null);\n const numSquaresX = useRef<number>(0);\n const numSquaresY = useRef<number>(0);\n const gridOffset = useRef<GridOffset>({ x: 0, y: 0 });\n const hoveredSquareRef = useRef<GridOffset | null>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n\n const resizeCanvas = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n numSquaresX.current = Math.ceil(canvas.width / squareSize) + 1;\n numSquaresY.current = Math.ceil(canvas.height / squareSize) + 1;\n };\n\n window.addEventListener(\"resize\", resizeCanvas);\n resizeCanvas();\n\n const drawGrid = () => {\n if (!ctx) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;\n const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;\n\n for (let x = startX; x < canvas.width + squareSize; x += squareSize) {\n for (let y = startY; y < canvas.height + squareSize; y += squareSize) {\n const squareX = x - (gridOffset.current.x % squareSize);\n const squareY = y - (gridOffset.current.y % squareSize);\n\n if (\n hoveredSquareRef.current &&\n Math.floor((x - startX) / squareSize) === hoveredSquareRef.current.x &&\n Math.floor((y - startY) / squareSize) === hoveredSquareRef.current.y\n ) {\n ctx.fillStyle = hoverFillColor;\n ctx.fillRect(squareX, squareY, squareSize, squareSize);\n }\n\n ctx.strokeStyle = borderColor;\n ctx.strokeRect(squareX, squareY, squareSize, squareSize);\n }\n }\n\n const gradient = ctx.createRadialGradient(\n canvas.width / 2,\n canvas.height / 2,\n 0,\n canvas.width / 2,\n canvas.height / 2,\n Math.sqrt(canvas.width ** 2 + canvas.height ** 2) / 2,\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n gradient.addColorStop(1, vignetteEdgeColor);\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n };\n\n const updateAnimation = () => {\n const effectiveSpeed = Math.max(speed, 0.1);\n switch (direction) {\n case \"right\":\n gridOffset.current.x = (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize;\n break;\n case \"left\":\n gridOffset.current.x = (gridOffset.current.x + effectiveSpeed + squareSize) % squareSize;\n break;\n case \"up\":\n gridOffset.current.y = (gridOffset.current.y + effectiveSpeed + squareSize) % squareSize;\n break;\n case \"down\":\n gridOffset.current.y = (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize;\n break;\n case \"diagonal\":\n gridOffset.current.x = (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize;\n gridOffset.current.y = (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize;\n break;\n default:\n break;\n }\n\n drawGrid();\n requestRef.current = requestAnimationFrame(updateAnimation);\n };\n\n const handleMouseMove = (event: MouseEvent) => {\n const rect = canvas.getBoundingClientRect();\n const mouseX = event.clientX - rect.left;\n const mouseY = event.clientY - rect.top;\n\n const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;\n const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;\n\n const hoveredSquareX = Math.floor((mouseX + gridOffset.current.x - startX) / squareSize);\n const hoveredSquareY = Math.floor((mouseY + gridOffset.current.y - startY) / squareSize);\n\n if (!hoveredSquareRef.current || hoveredSquareRef.current.x !== hoveredSquareX || hoveredSquareRef.current.y !== hoveredSquareY) {\n hoveredSquareRef.current = { x: hoveredSquareX, y: hoveredSquareY };\n }\n };\n\n const handleMouseLeave = () => {\n hoveredSquareRef.current = null;\n };\n\n canvas.addEventListener(\"mousemove\", handleMouseMove);\n canvas.addEventListener(\"mouseleave\", handleMouseLeave);\n requestRef.current = requestAnimationFrame(updateAnimation);\n\n return () => {\n window.removeEventListener(\"resize\", resizeCanvas);\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\n canvas.removeEventListener(\"mousemove\", handleMouseMove);\n canvas.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, [direction, speed, borderColor, hoverFillColor, squareSize, vignetteEdgeColor]);\n\n return <canvas ref={canvasRef} className={`${styles.squaresCanvas} ${className}`} style={style} />;\n};\n\nconst SquareBackground: React.FC<Omit<SquaresProps, \"borderColor\" | \"hoverFillColor\">> = (props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取边框颜色\n const borderColor = useMemo(() => {\n const borderColorValue = currentTheme.colors.variables.border5 || currentTheme.colors.variables.fg || \"#6B7280\";\n if (borderColorValue.startsWith(\"#\")) {\n return borderColorValue;\n }\n const match = borderColorValue.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return borderColorValue;\n }, [currentTheme]);\n\n // 从主题中获取悬停填充颜色\n const hoverFillColor = useMemo(() => {\n const baseColor = currentTheme.colors.variables.bg3 || currentTheme.colors.variables.border3 || \"#F3F4F6\";\n\n const darkenColor = (r: number, g: number, b: number, factor: number = 0.3) => {\n const newR = Math.round(r * (1 - factor));\n const newG = Math.round(g * (1 - factor));\n const newB = Math.round(b * (1 - factor));\n return `rgb(${newR}, ${newG}, ${newB})`;\n };\n\n if (baseColor.startsWith(\"#\")) {\n const hex = baseColor.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return darkenColor(r, g, b);\n }\n const match = baseColor.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n return darkenColor(r, g, b);\n }\n return baseColor;\n }, [currentTheme]);\n\n return <Squares borderColor={borderColor} hoverFillColor={hoverFillColor} speed={0.5} squareSize={40} direction=\"diagonal\" {...props} />;\n};\n\nexport default SquareBackground;\n",".container {\n position: relative;\n width: 100%;\n height: 100%;\n background-color: var(--color-bg);\n overflow: hidden;\n}\n\n.canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.outerVignette {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n background: radial-gradient(circle, rgba(0, 0, 0, 0) 60%, rgba(0, 0, 0, 1) 100%);\n}\n\n.centerVignette {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n background: radial-gradient(circle, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0) 60%);\n}\n","import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ninterface LetterGlitchProps {\n glitchColors?: string[];\n glitchSpeed?: number;\n centerVignette?: boolean;\n outerVignette?: boolean;\n smooth?: boolean;\n characters?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst LetterGlitch = memo(\n ({\n glitchColors = [\"#7F1D1D\", \"#16A34A\", \"#2563EB\"],\n glitchSpeed = 500, // 增加默认速度,减少更新频率\n centerVignette = false,\n outerVignette = true,\n smooth = true,\n characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*()-_+=/[]{};:<>.,0123456789\",\n className = \"\",\n style = {},\n }: LetterGlitchProps) => {\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n const animationRef = useRef<number | null>(null);\n const letters = useRef<\n {\n char: string;\n color: string;\n targetColor: string;\n colorProgress: number;\n }[]\n >([]);\n const grid = useRef({ columns: 0, rows: 0 });\n const context = useRef<CanvasRenderingContext2D | null>(null);\n const lastGlitchTime = useRef(Date.now());\n\n const lettersAndSymbols = useMemo(() => Array.from(characters), [characters]);\n\n // 缓存 hexToRgb 结果\n const rgbCache = useRef<Map<string, { r: number; g: number; b: number } | null>>(new Map());\n\n const fontSize = 16;\n const charWidth = 10;\n const charHeight = 20;\n\n const getRandomChar = useCallback(() => {\n return lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)];\n }, [lettersAndSymbols]);\n\n const getRandomColor = useCallback(() => {\n return glitchColors[Math.floor(Math.random() * glitchColors.length)];\n }, [glitchColors]);\n\n const hexToRgb = useCallback((hex: string) => {\n // 检查缓存\n if (rgbCache.current.has(hex)) {\n return rgbCache.current.get(hex)!;\n }\n\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const normalizedHex = hex.replace(shorthandRegex, (_m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalizedHex);\n const rgb = result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n\n // 缓存结果\n rgbCache.current.set(hex, rgb);\n return rgb;\n }, []);\n\n const interpolateColor = (start: { r: number; g: number; b: number }, end: { r: number; g: number; b: number }, factor: number) => {\n const result = {\n r: Math.round(start.r + (end.r - start.r) * factor),\n g: Math.round(start.g + (end.g - start.g) * factor),\n b: Math.round(start.b + (end.b - start.b) * factor),\n };\n return `rgb(${result.r}, ${result.g}, ${result.b})`;\n };\n\n const calculateGrid = (width: number, height: number) => {\n const columns = Math.ceil(width / charWidth);\n const rows = Math.ceil(height / charHeight);\n return { columns, rows };\n };\n\n const initializeLetters = (columns: number, rows: number) => {\n grid.current = { columns, rows };\n const totalLetters = columns * rows;\n letters.current = Array.from({ length: totalLetters }, () => ({\n char: getRandomChar(),\n color: getRandomColor(),\n targetColor: getRandomColor(),\n colorProgress: 1,\n }));\n };\n\n const resizeCanvas = () => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const parent = canvas.parentElement;\n if (!parent) return;\n\n const dpr = window.devicePixelRatio || 1;\n const rect = parent.getBoundingClientRect();\n\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n if (context.current) {\n context.current.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n\n const { columns, rows } = calculateGrid(rect.width, rect.height);\n initializeLetters(columns, rows);\n drawLetters();\n };\n\n const drawLetters = useCallback(() => {\n if (!context.current || letters.current.length === 0) return;\n const ctx = context.current;\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.font = `${fontSize}px monospace`;\n ctx.textBaseline = \"top\";\n ctx.textAlign = \"left\";\n\n // 批量绘制,减少状态切换\n letters.current.forEach((letter, index) => {\n const x = (index % grid.current.columns) * charWidth;\n const y = Math.floor(index / grid.current.columns) * charHeight;\n ctx.fillStyle = letter.color;\n ctx.fillText(letter.char, x, y);\n });\n }, []);\n\n const updateLetters = useCallback(() => {\n if (!letters.current || letters.current.length === 0) return;\n\n // 减少更新比例,从 5% 降到 2%,降低性能消耗\n const updateCount = Math.max(1, Math.floor(letters.current.length * 0.02));\n\n for (let i = 0; i < updateCount; i++) {\n const index = Math.floor(Math.random() * letters.current.length);\n if (!letters.current[index]) continue;\n\n letters.current[index].char = getRandomChar();\n letters.current[index].targetColor = getRandomColor();\n\n if (!smooth) {\n letters.current[index].color = letters.current[index].targetColor;\n letters.current[index].colorProgress = 1;\n } else {\n letters.current[index].colorProgress = 0;\n }\n }\n }, [getRandomChar, getRandomColor, smooth]);\n\n const handleSmoothTransitions = useCallback(() => {\n let needsRedraw = false;\n let activeCount = 0;\n\n // 只处理正在过渡的字母,减少不必要的计算\n letters.current.forEach((letter) => {\n if (letter.colorProgress < 1) {\n activeCount++;\n letter.colorProgress += 0.03; // 稍微降低过渡速度,减少重绘频率\n if (letter.colorProgress > 1) letter.colorProgress = 1;\n\n const startRgb = hexToRgb(letter.color);\n const endRgb = hexToRgb(letter.targetColor);\n if (startRgb && endRgb) {\n letter.color = interpolateColor(startRgb, endRgb, letter.colorProgress);\n needsRedraw = true;\n }\n }\n });\n\n // 只有在有活动过渡时才重绘\n if (needsRedraw && activeCount > 0) {\n drawLetters();\n }\n }, [hexToRgb, drawLetters]);\n\n const animate = useCallback(() => {\n const now = Date.now();\n const timeSinceLastGlitch = now - lastGlitchTime.current;\n\n // 只在需要更新时才执行\n if (timeSinceLastGlitch >= glitchSpeed) {\n updateLetters();\n drawLetters();\n lastGlitchTime.current = now;\n } else if (smooth) {\n // 只在平滑模式下才检查过渡\n handleSmoothTransitions();\n }\n\n animationRef.current = requestAnimationFrame(animate);\n }, [glitchSpeed, smooth, updateLetters, handleSmoothTransitions]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n context.current = canvas.getContext(\"2d\");\n resizeCanvas();\n animate();\n\n let resizeTimeout: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n clearTimeout(resizeTimeout);\n resizeTimeout = setTimeout(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n resizeCanvas();\n animate();\n }, 100);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n window.removeEventListener(\"resize\", handleResize);\n clearTimeout(resizeTimeout);\n // 清理缓存\n rgbCache.current.clear();\n };\n }, [glitchSpeed, smooth, glitchColors, animate]);\n\n return (\n <div className={`${styles.container} ${className}`} style={style}>\n <canvas ref={canvasRef} className={styles.canvas} />\n {outerVignette && <div className={styles.outerVignette}></div>}\n {centerVignette && <div className={styles.centerVignette}></div>}\n </div>\n );\n },\n);\n\nconst LetterGlitchBackground: React.FC<Omit<LetterGlitchProps, \"glitchColors\">> = memo((props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取故障颜色数组\n const glitchColors = useMemo(() => {\n const primary = currentTheme.colors.variables.primary || \"#DC2626\";\n const info = currentTheme.colors.variables.info || \"#2563EB\";\n const success = currentTheme.colors.variables.success || \"#16A34A\";\n\n const toHex = (color: string): string => {\n if (color.startsWith(\"#\")) {\n return color;\n }\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return color;\n };\n\n return [toHex(primary), toHex(info), toHex(success)];\n }, [currentTheme]);\n\n return (\n <LetterGlitch\n glitchColors={glitchColors}\n glitchSpeed={300} // 增加默认速度,减少更新频率\n centerVignette={true}\n outerVignette={false}\n smooth={true}\n {...props}\n />\n );\n});\n\nLetterGlitchBackground.displayName = \"LetterGlitchBackground\";\n\nexport default LetterGlitchBackground;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunk-animations-DOdfS0n5.cjs","names":[],"sources":["../src/designs/animations/Waves/style.module.css","../src/designs/animations/Waves/index.tsx","../src/designs/animations/Squares/style.module.css","../src/designs/animations/Squares/index.tsx","../src/designs/animations/LetterGlitch/style.module.css","../src/designs/animations/LetterGlitch/index.tsx"],"sourcesContent":[".waves {\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.waves::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 0.5rem;\n height: 0.5rem;\n background: var(--color-bg);\n border-radius: 50%;\n transform: translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);\n will-change: transform;\n}\n\n.wavesCanvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport type { CSSProperties } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\nclass Grad {\n x: number;\n y: number;\n z: number;\n constructor(x: number, y: number, z: number) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n dot2(x: number, y: number): number {\n return this.x * x + this.y * y;\n }\n}\n\nclass Noise {\n grad3: Grad[];\n p: number[];\n perm: number[];\n gradP: Grad[];\n\n constructor(seed = 0) {\n this.grad3 = [\n new Grad(1, 1, 0),\n new Grad(-1, 1, 0),\n new Grad(1, -1, 0),\n new Grad(-1, -1, 0),\n new Grad(1, 0, 1),\n new Grad(-1, 0, 1),\n new Grad(1, 0, -1),\n new Grad(-1, 0, -1),\n new Grad(0, 1, 1),\n new Grad(0, -1, 1),\n new Grad(0, 1, -1),\n new Grad(0, -1, -1),\n ];\n this.p = [\n 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234,\n 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139,\n 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80,\n 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202,\n 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221,\n 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210,\n 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150,\n 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180,\n ];\n this.perm = new Array(512);\n this.gradP = new Array(512);\n this.seed(seed);\n }\n seed(seed: number) {\n if (seed > 0 && seed < 1) seed *= 65536;\n seed = Math.floor(seed);\n if (seed < 256) seed |= seed << 8;\n for (let i = 0; i < 256; i++) {\n let v = i & 1 ? this.p[i] ^ (seed & 255) : this.p[i] ^ ((seed >> 8) & 255);\n this.perm[i] = this.perm[i + 256] = v;\n this.gradP[i] = this.gradP[i + 256] = this.grad3[v % 12];\n }\n }\n fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n lerp(a: number, b: number, t: number): number {\n return (1 - t) * a + t * b;\n }\n perlin2(x: number, y: number): number {\n let X = Math.floor(x),\n Y = Math.floor(y);\n x -= X;\n y -= Y;\n X &= 255;\n Y &= 255;\n const n00 = this.gradP[X + this.perm[Y]].dot2(x, y);\n const n01 = this.gradP[X + this.perm[Y + 1]].dot2(x, y - 1);\n const n10 = this.gradP[X + 1 + this.perm[Y]].dot2(x - 1, y);\n const n11 = this.gradP[X + 1 + this.perm[Y + 1]].dot2(x - 1, y - 1);\n const u = this.fade(x);\n return this.lerp(this.lerp(n00, n10, u), this.lerp(n01, n11, u), this.fade(y));\n }\n}\n\ninterface Point {\n x: number;\n y: number;\n wave: { x: number; y: number };\n cursor: { x: number; y: number; vx: number; vy: number };\n}\n\ninterface Mouse {\n x: number;\n y: number;\n lx: number;\n ly: number;\n sx: number;\n sy: number;\n v: number;\n vs: number;\n a: number;\n set: boolean;\n}\n\ninterface Config {\n lineColor: string;\n waveSpeedX: number;\n waveSpeedY: number;\n waveAmpX: number;\n waveAmpY: number;\n friction: number;\n tension: number;\n maxCursorMove: number;\n xGap: number;\n yGap: number;\n}\n\ninterface WavesProps {\n lineColor?: string;\n backgroundColor?: string;\n waveSpeedX?: number;\n waveSpeedY?: number;\n waveAmpX?: number;\n waveAmpY?: number;\n xGap?: number;\n yGap?: number;\n friction?: number;\n tension?: number;\n maxCursorMove?: number;\n style?: CSSProperties;\n className?: string;\n}\n\nconst Waves: React.FC<WavesProps> = ({\n lineColor = \"black\",\n backgroundColor = \"transparent\",\n waveSpeedX = 0.0125,\n waveSpeedY = 0.005,\n waveAmpX = 32,\n waveAmpY = 16,\n xGap = 10,\n yGap = 32,\n friction = 0.925,\n tension = 0.005,\n maxCursorMove = 100,\n style = {},\n className = \"\",\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const ctxRef = useRef<CanvasRenderingContext2D | null>(null);\n const boundingRef = useRef<{\n width: number;\n height: number;\n left: number;\n top: number;\n }>({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n });\n const noiseRef = useRef(new Noise(Math.random()));\n const linesRef = useRef<Point[][]>([]);\n const mouseRef = useRef<Mouse>({\n x: -10,\n y: 0,\n lx: 0,\n ly: 0,\n sx: 0,\n sy: 0,\n v: 0,\n vs: 0,\n a: 0,\n set: false,\n });\n const configRef = useRef<Config>({\n lineColor,\n waveSpeedX,\n waveSpeedY,\n waveAmpX,\n waveAmpY,\n friction,\n tension,\n maxCursorMove,\n xGap,\n yGap,\n });\n const frameIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n configRef.current = {\n lineColor,\n waveSpeedX,\n waveSpeedY,\n waveAmpX,\n waveAmpY,\n friction,\n tension,\n maxCursorMove,\n xGap,\n yGap,\n };\n }, [lineColor, waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, friction, tension, maxCursorMove, xGap, yGap]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n const container = containerRef.current;\n if (!canvas || !container) return;\n ctxRef.current = canvas.getContext(\"2d\");\n\n function setSize() {\n if (!container || !canvas) return;\n const rect = container.getBoundingClientRect();\n boundingRef.current = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top,\n };\n canvas.width = rect.width;\n canvas.height = rect.height;\n }\n\n function setLines() {\n const { width, height } = boundingRef.current;\n linesRef.current = [];\n const oWidth = width + 200,\n oHeight = height + 30;\n const { xGap, yGap } = configRef.current;\n const totalLines = Math.ceil(oWidth / xGap);\n const totalPoints = Math.ceil(oHeight / yGap);\n const xStart = (width - xGap * totalLines) / 2;\n const yStart = (height - yGap * totalPoints) / 2;\n for (let i = 0; i <= totalLines; i++) {\n const pts: Point[] = [];\n for (let j = 0; j <= totalPoints; j++) {\n pts.push({\n x: xStart + xGap * i,\n y: yStart + yGap * j,\n wave: { x: 0, y: 0 },\n cursor: { x: 0, y: 0, vx: 0, vy: 0 },\n });\n }\n linesRef.current.push(pts);\n }\n }\n\n function movePoints(time: number) {\n const lines = linesRef.current;\n const mouse = mouseRef.current;\n const noise = noiseRef.current;\n const { waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, friction, tension, maxCursorMove } = configRef.current;\n lines.forEach((pts) => {\n pts.forEach((p) => {\n const move = noise.perlin2((p.x + time * waveSpeedX) * 0.002, (p.y + time * waveSpeedY) * 0.0015) * 12;\n p.wave.x = Math.cos(move) * waveAmpX;\n p.wave.y = Math.sin(move) * waveAmpY;\n\n const dx = p.x - mouse.sx,\n dy = p.y - mouse.sy;\n const dist = Math.hypot(dx, dy);\n const l = Math.max(175, mouse.vs);\n if (dist < l) {\n const s = 1 - dist / l;\n const f = Math.cos(dist * 0.001) * s;\n p.cursor.vx += Math.cos(mouse.a) * f * l * mouse.vs * 0.00065;\n p.cursor.vy += Math.sin(mouse.a) * f * l * mouse.vs * 0.00065;\n }\n\n p.cursor.vx += (0 - p.cursor.x) * tension;\n p.cursor.vy += (0 - p.cursor.y) * tension;\n p.cursor.vx *= friction;\n p.cursor.vy *= friction;\n p.cursor.x += p.cursor.vx * 2;\n p.cursor.y += p.cursor.vy * 2;\n p.cursor.x = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.x));\n p.cursor.y = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.y));\n });\n });\n }\n\n function moved(point: Point, withCursor = true): { x: number; y: number } {\n const x = point.x + point.wave.x + (withCursor ? point.cursor.x : 0);\n const y = point.y + point.wave.y + (withCursor ? point.cursor.y : 0);\n return { x: Math.round(x * 10) / 10, y: Math.round(y * 10) / 10 };\n }\n\n function drawLines() {\n const { width, height } = boundingRef.current;\n const ctx = ctxRef.current;\n if (!ctx) return;\n ctx.clearRect(0, 0, width, height);\n ctx.beginPath();\n ctx.strokeStyle = configRef.current.lineColor;\n linesRef.current.forEach((points) => {\n let p1 = moved(points[0], false);\n ctx.moveTo(p1.x, p1.y);\n points.forEach((p, idx) => {\n const isLast = idx === points.length - 1;\n p1 = moved(p, !isLast);\n const p2 = moved(points[idx + 1] || points[points.length - 1], !isLast);\n ctx.lineTo(p1.x, p1.y);\n if (isLast) ctx.moveTo(p2.x, p2.y);\n });\n });\n ctx.stroke();\n }\n\n function tick(t: number) {\n if (!container) return;\n const mouse = mouseRef.current;\n mouse.sx += (mouse.x - mouse.sx) * 0.1;\n mouse.sy += (mouse.y - mouse.sy) * 0.1;\n const dx = mouse.x - mouse.lx,\n dy = mouse.y - mouse.ly;\n const d = Math.hypot(dx, dy);\n mouse.v = d;\n mouse.vs += (d - mouse.vs) * 0.1;\n mouse.vs = Math.min(100, mouse.vs);\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.a = Math.atan2(dy, dx);\n container.style.setProperty(\"--x\", `${mouse.sx}px`);\n container.style.setProperty(\"--y\", `${mouse.sy}px`);\n\n movePoints(t);\n drawLines();\n frameIdRef.current = requestAnimationFrame(tick);\n }\n\n function onResize() {\n setSize();\n setLines();\n }\n function onMouseMove(e: MouseEvent) {\n updateMouse(e.clientX, e.clientY);\n }\n function onTouchMove(e: TouchEvent) {\n const touch = e.touches[0];\n updateMouse(touch.clientX, touch.clientY);\n }\n function updateMouse(x: number, y: number) {\n const mouse = mouseRef.current;\n const b = boundingRef.current;\n mouse.x = x - b.left;\n mouse.y = y - b.top;\n if (!mouse.set) {\n mouse.sx = mouse.x;\n mouse.sy = mouse.y;\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.set = true;\n }\n }\n\n setSize();\n setLines();\n frameIdRef.current = requestAnimationFrame(tick);\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"touchmove\", onTouchMove);\n if (frameIdRef.current !== null) {\n cancelAnimationFrame(frameIdRef.current);\n }\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={`${styles.waves} ${className}`}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n backgroundColor,\n ...style,\n }}\n >\n <canvas ref={canvasRef} className={styles.wavesCanvas} />\n </div>\n );\n};\n\nconst WaveBackground: React.FC<Omit<WavesProps, \"lineColor\" | \"backgroundColor\">> = (props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取线条颜色,降低颜色深度(变浅)\n const lineColor = useMemo(() => {\n // 尝试从主题变量中获取主色,如果没有则使用默认值\n const primary = currentTheme.colors.variables.primary || \"rgb(220, 38, 38)\";\n\n // 将颜色变浅的函数:向白色混合\n const lightenColor = (r: number, g: number, b: number, factor: number = 0.4) => {\n // factor: 0 = 原色, 1 = 白色\n const newR = Math.round(r + (255 - r) * factor);\n const newG = Math.round(g + (255 - g) * factor);\n const newB = Math.round(b + (255 - b) * factor);\n return `rgb(${newR}, ${newG}, ${newB})`;\n };\n\n // 如果已经是 hex 格式,转换为 rgb 并变浅\n if (primary.startsWith(\"#\")) {\n const hex = primary.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return lightenColor(r, g, b);\n }\n // 将 rgb() 格式变浅\n const match = primary.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n return lightenColor(r, g, b);\n }\n // 如果已经是 rgba 格式,提取 RGB 并变浅\n const rgbaMatch = primary.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (rgbaMatch) {\n const r = parseInt(rgbaMatch[1], 10);\n const g = parseInt(rgbaMatch[2], 10);\n const b = parseInt(rgbaMatch[3], 10);\n return lightenColor(r, g, b);\n }\n return primary;\n }, [currentTheme]);\n\n return <Waves lineColor={lineColor} backgroundColor=\"transparent\" waveSpeedX={0.05} waveSpeedY={0.01} waveAmpX={40} waveAmpY={20} {...props} />;\n};\n\nexport default WaveBackground;\n",".squaresCanvas {\n width: 100%;\n height: 100%;\n border: none;\n display: block;\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ntype CanvasStrokeStyle = string | CanvasGradient | CanvasPattern;\n\ninterface GridOffset {\n x: number;\n y: number;\n}\n\ninterface SquaresProps {\n direction?: \"diagonal\" | \"up\" | \"right\" | \"down\" | \"left\";\n speed?: number;\n borderColor?: CanvasStrokeStyle;\n squareSize?: number;\n hoverFillColor?: CanvasStrokeStyle;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst Squares: React.FC<SquaresProps> = ({\n direction = \"right\",\n speed = 1,\n borderColor = \"#6B7280\",\n squareSize = 40,\n hoverFillColor = \"#111827\",\n className = \"\",\n style = {},\n}) => {\n const { currentTheme } = useTheme();\n const vignetteEdgeColor = currentTheme.colors.variables.fgHeading;\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const requestRef = useRef<number | null>(null);\n const numSquaresX = useRef<number>(0);\n const numSquaresY = useRef<number>(0);\n const gridOffset = useRef<GridOffset>({ x: 0, y: 0 });\n const hoveredSquareRef = useRef<GridOffset | null>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n\n const resizeCanvas = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n numSquaresX.current = Math.ceil(canvas.width / squareSize) + 1;\n numSquaresY.current = Math.ceil(canvas.height / squareSize) + 1;\n };\n\n window.addEventListener(\"resize\", resizeCanvas);\n resizeCanvas();\n\n const drawGrid = () => {\n if (!ctx) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;\n const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;\n\n for (let x = startX; x < canvas.width + squareSize; x += squareSize) {\n for (let y = startY; y < canvas.height + squareSize; y += squareSize) {\n const squareX = x - (gridOffset.current.x % squareSize);\n const squareY = y - (gridOffset.current.y % squareSize);\n\n if (\n hoveredSquareRef.current &&\n Math.floor((x - startX) / squareSize) === hoveredSquareRef.current.x &&\n Math.floor((y - startY) / squareSize) === hoveredSquareRef.current.y\n ) {\n ctx.fillStyle = hoverFillColor;\n ctx.fillRect(squareX, squareY, squareSize, squareSize);\n }\n\n ctx.strokeStyle = borderColor;\n ctx.strokeRect(squareX, squareY, squareSize, squareSize);\n }\n }\n\n const gradient = ctx.createRadialGradient(\n canvas.width / 2,\n canvas.height / 2,\n 0,\n canvas.width / 2,\n canvas.height / 2,\n Math.sqrt(canvas.width ** 2 + canvas.height ** 2) / 2,\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n gradient.addColorStop(1, vignetteEdgeColor);\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n };\n\n const updateAnimation = () => {\n const effectiveSpeed = Math.max(speed, 0.1);\n switch (direction) {\n case \"right\":\n gridOffset.current.x = (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize;\n break;\n case \"left\":\n gridOffset.current.x = (gridOffset.current.x + effectiveSpeed + squareSize) % squareSize;\n break;\n case \"up\":\n gridOffset.current.y = (gridOffset.current.y + effectiveSpeed + squareSize) % squareSize;\n break;\n case \"down\":\n gridOffset.current.y = (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize;\n break;\n case \"diagonal\":\n gridOffset.current.x = (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize;\n gridOffset.current.y = (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize;\n break;\n default:\n break;\n }\n\n drawGrid();\n requestRef.current = requestAnimationFrame(updateAnimation);\n };\n\n const handleMouseMove = (event: MouseEvent) => {\n const rect = canvas.getBoundingClientRect();\n const mouseX = event.clientX - rect.left;\n const mouseY = event.clientY - rect.top;\n\n const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;\n const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;\n\n const hoveredSquareX = Math.floor((mouseX + gridOffset.current.x - startX) / squareSize);\n const hoveredSquareY = Math.floor((mouseY + gridOffset.current.y - startY) / squareSize);\n\n if (!hoveredSquareRef.current || hoveredSquareRef.current.x !== hoveredSquareX || hoveredSquareRef.current.y !== hoveredSquareY) {\n hoveredSquareRef.current = { x: hoveredSquareX, y: hoveredSquareY };\n }\n };\n\n const handleMouseLeave = () => {\n hoveredSquareRef.current = null;\n };\n\n canvas.addEventListener(\"mousemove\", handleMouseMove);\n canvas.addEventListener(\"mouseleave\", handleMouseLeave);\n requestRef.current = requestAnimationFrame(updateAnimation);\n\n return () => {\n window.removeEventListener(\"resize\", resizeCanvas);\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\n canvas.removeEventListener(\"mousemove\", handleMouseMove);\n canvas.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, [direction, speed, borderColor, hoverFillColor, squareSize, vignetteEdgeColor]);\n\n return <canvas ref={canvasRef} className={`${styles.squaresCanvas} ${className}`} style={style} />;\n};\n\nconst SquareBackground: React.FC<Omit<SquaresProps, \"borderColor\" | \"hoverFillColor\">> = (props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取边框颜色\n const borderColor = useMemo(() => {\n const borderColorValue = currentTheme.colors.variables.border5 || currentTheme.colors.variables.fg || \"#6B7280\";\n if (borderColorValue.startsWith(\"#\")) {\n return borderColorValue;\n }\n const match = borderColorValue.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return borderColorValue;\n }, [currentTheme]);\n\n // 从主题中获取悬停填充颜色\n const hoverFillColor = useMemo(() => {\n const baseColor = currentTheme.colors.variables.bg3 || currentTheme.colors.variables.border3 || \"#F3F4F6\";\n\n const darkenColor = (r: number, g: number, b: number, factor: number = 0.3) => {\n const newR = Math.round(r * (1 - factor));\n const newG = Math.round(g * (1 - factor));\n const newB = Math.round(b * (1 - factor));\n return `rgb(${newR}, ${newG}, ${newB})`;\n };\n\n if (baseColor.startsWith(\"#\")) {\n const hex = baseColor.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return darkenColor(r, g, b);\n }\n const match = baseColor.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n return darkenColor(r, g, b);\n }\n return baseColor;\n }, [currentTheme]);\n\n return <Squares borderColor={borderColor} hoverFillColor={hoverFillColor} speed={0.5} squareSize={40} direction=\"diagonal\" {...props} />;\n};\n\nexport default SquareBackground;\n",".container {\n position: relative;\n width: 100%;\n height: 100%;\n background-color: var(--color-bg);\n overflow: hidden;\n}\n\n.canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.outerVignette {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n background: radial-gradient(circle, rgba(0, 0, 0, 0) 60%, rgba(0, 0, 0, 1) 100%);\n}\n\n.centerVignette {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n background: radial-gradient(circle, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0) 60%);\n}\n","import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ninterface LetterGlitchProps {\n glitchColors?: string[];\n glitchSpeed?: number;\n centerVignette?: boolean;\n outerVignette?: boolean;\n smooth?: boolean;\n characters?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst LetterGlitch = memo(\n ({\n glitchColors = [\"#7F1D1D\", \"#16A34A\", \"#2563EB\"],\n glitchSpeed = 500, // 增加默认速度,减少更新频率\n centerVignette = false,\n outerVignette = true,\n smooth = true,\n characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*()-_+=/[]{};:<>.,0123456789\",\n className = \"\",\n style = {},\n }: LetterGlitchProps) => {\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n const animationRef = useRef<number | null>(null);\n const letters = useRef<\n {\n char: string;\n color: string;\n targetColor: string;\n colorProgress: number;\n }[]\n >([]);\n const grid = useRef({ columns: 0, rows: 0 });\n const context = useRef<CanvasRenderingContext2D | null>(null);\n const lastGlitchTime = useRef(Date.now());\n\n const lettersAndSymbols = useMemo(() => Array.from(characters), [characters]);\n\n // 缓存 hexToRgb 结果\n const rgbCache = useRef<Map<string, { r: number; g: number; b: number } | null>>(new Map());\n\n const fontSize = 16;\n const charWidth = 10;\n const charHeight = 20;\n\n const getRandomChar = useCallback(() => {\n return lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)];\n }, [lettersAndSymbols]);\n\n const getRandomColor = useCallback(() => {\n return glitchColors[Math.floor(Math.random() * glitchColors.length)];\n }, [glitchColors]);\n\n const hexToRgb = useCallback((hex: string) => {\n // 检查缓存\n if (rgbCache.current.has(hex)) {\n return rgbCache.current.get(hex)!;\n }\n\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const normalizedHex = hex.replace(shorthandRegex, (_m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalizedHex);\n const rgb = result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n\n // 缓存结果\n rgbCache.current.set(hex, rgb);\n return rgb;\n }, []);\n\n const interpolateColor = (start: { r: number; g: number; b: number }, end: { r: number; g: number; b: number }, factor: number) => {\n const result = {\n r: Math.round(start.r + (end.r - start.r) * factor),\n g: Math.round(start.g + (end.g - start.g) * factor),\n b: Math.round(start.b + (end.b - start.b) * factor),\n };\n return `rgb(${result.r}, ${result.g}, ${result.b})`;\n };\n\n const calculateGrid = (width: number, height: number) => {\n const columns = Math.ceil(width / charWidth);\n const rows = Math.ceil(height / charHeight);\n return { columns, rows };\n };\n\n const initializeLetters = (columns: number, rows: number) => {\n grid.current = { columns, rows };\n const totalLetters = columns * rows;\n letters.current = Array.from({ length: totalLetters }, () => ({\n char: getRandomChar(),\n color: getRandomColor(),\n targetColor: getRandomColor(),\n colorProgress: 1,\n }));\n };\n\n const resizeCanvas = () => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const parent = canvas.parentElement;\n if (!parent) return;\n\n const dpr = window.devicePixelRatio || 1;\n const rect = parent.getBoundingClientRect();\n\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n if (context.current) {\n context.current.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n\n const { columns, rows } = calculateGrid(rect.width, rect.height);\n initializeLetters(columns, rows);\n drawLetters();\n };\n\n const drawLetters = useCallback(() => {\n if (!context.current || letters.current.length === 0) return;\n const ctx = context.current;\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.font = `${fontSize}px monospace`;\n ctx.textBaseline = \"top\";\n ctx.textAlign = \"left\";\n\n // 批量绘制,减少状态切换\n letters.current.forEach((letter, index) => {\n const x = (index % grid.current.columns) * charWidth;\n const y = Math.floor(index / grid.current.columns) * charHeight;\n ctx.fillStyle = letter.color;\n ctx.fillText(letter.char, x, y);\n });\n }, []);\n\n const updateLetters = useCallback(() => {\n if (!letters.current || letters.current.length === 0) return;\n\n // 减少更新比例,从 5% 降到 2%,降低性能消耗\n const updateCount = Math.max(1, Math.floor(letters.current.length * 0.02));\n\n for (let i = 0; i < updateCount; i++) {\n const index = Math.floor(Math.random() * letters.current.length);\n if (!letters.current[index]) continue;\n\n letters.current[index].char = getRandomChar();\n letters.current[index].targetColor = getRandomColor();\n\n if (!smooth) {\n letters.current[index].color = letters.current[index].targetColor;\n letters.current[index].colorProgress = 1;\n } else {\n letters.current[index].colorProgress = 0;\n }\n }\n }, [getRandomChar, getRandomColor, smooth]);\n\n const handleSmoothTransitions = useCallback(() => {\n let needsRedraw = false;\n let activeCount = 0;\n\n // 只处理正在过渡的字母,减少不必要的计算\n letters.current.forEach((letter) => {\n if (letter.colorProgress < 1) {\n activeCount++;\n letter.colorProgress += 0.03; // 稍微降低过渡速度,减少重绘频率\n if (letter.colorProgress > 1) letter.colorProgress = 1;\n\n const startRgb = hexToRgb(letter.color);\n const endRgb = hexToRgb(letter.targetColor);\n if (startRgb && endRgb) {\n letter.color = interpolateColor(startRgb, endRgb, letter.colorProgress);\n needsRedraw = true;\n }\n }\n });\n\n // 只有在有活动过渡时才重绘\n if (needsRedraw && activeCount > 0) {\n drawLetters();\n }\n }, [hexToRgb, drawLetters]);\n\n const animate = useCallback(() => {\n const now = Date.now();\n const timeSinceLastGlitch = now - lastGlitchTime.current;\n\n // 只在需要更新时才执行\n if (timeSinceLastGlitch >= glitchSpeed) {\n updateLetters();\n drawLetters();\n lastGlitchTime.current = now;\n } else if (smooth) {\n // 只在平滑模式下才检查过渡\n handleSmoothTransitions();\n }\n\n animationRef.current = requestAnimationFrame(animate);\n }, [glitchSpeed, smooth, updateLetters, handleSmoothTransitions]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n context.current = canvas.getContext(\"2d\");\n resizeCanvas();\n animate();\n\n let resizeTimeout: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n clearTimeout(resizeTimeout);\n resizeTimeout = setTimeout(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n resizeCanvas();\n animate();\n }, 100);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n window.removeEventListener(\"resize\", handleResize);\n clearTimeout(resizeTimeout);\n // 清理缓存\n rgbCache.current.clear();\n };\n }, [glitchSpeed, smooth, glitchColors, animate]);\n\n return (\n <div className={`${styles.container} ${className}`} style={style}>\n <canvas ref={canvasRef} className={styles.canvas} />\n {outerVignette && <div className={styles.outerVignette}></div>}\n {centerVignette && <div className={styles.centerVignette}></div>}\n </div>\n );\n },\n);\n\nconst LetterGlitchBackground: React.FC<Omit<LetterGlitchProps, \"glitchColors\">> = memo((props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取故障颜色数组\n const glitchColors = useMemo(() => {\n const primary = currentTheme.colors.variables.primary || \"#DC2626\";\n const info = currentTheme.colors.variables.info || \"#2563EB\";\n const success = currentTheme.colors.variables.success || \"#16A34A\";\n\n const toHex = (color: string): string => {\n if (color.startsWith(\"#\")) {\n return color;\n }\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return color;\n };\n\n return [toHex(primary), toHex(info), toHex(success)];\n }, [currentTheme]);\n\n return (\n <LetterGlitch\n glitchColors={glitchColors}\n glitchSpeed={300} // 增加默认速度,减少更新频率\n centerVignette={true}\n outerVignette={false}\n smooth={true}\n {...props}\n />\n );\n});\n\nLetterGlitchBackground.displayName = \"LetterGlitchBackground\";\n\nexport default LetterGlitchBackground;\n"],"mappings":"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"}
|