feat(game): 更新游戏规则并优化充值提现界面

- 在 api.type.ts 中为支付渠道、存款配置和取款字段添加新的接口属性
- 替换桌面端规则模态框中的纯文本内容为支持 Markdown 格式的组件
- 重构桌面端充值组件的 UI 结构,使用自定义按钮替代原生选择器
- 为取款组件添加最低最高金额验证及支付方式选择功能
- 更新英文本地化文件中的游戏规则内容,提供详细的玩法指南
This commit is contained in:
JiaJun
2026-07-09 16:43:52 +08:00
parent 1535cb243b
commit 69cd9a7521
18 changed files with 3071 additions and 1056 deletions

View File

@@ -51,6 +51,8 @@
"react-dom": "19.2.5",
"react-hook-form": "^7.75.0",
"react-i18next": "^17.0.3",
"react-markdown": "^10.1.0",
"remark-gfm": "^4.0.1",
"shadcn": "^4.7.0",
"tailwind-merge": "^3.5.0",
"tw-animate-css": "^1.4.0",

1982
pnpm-lock.yaml generated
View File

@@ -10,10 +10,10 @@ importers:
dependencies:
'@fontsource-variable/geist':
specifier: ^5.2.8
version: 5.2.8
version: 5.2.9
'@hookform/resolvers':
specifier: ^5.2.2
version: 5.2.2(react-hook-form@7.75.0(react@19.2.5))
version: 5.4.0(react-hook-form@7.75.0(react@19.2.5))
'@tanstack/react-query':
specifier: ^5.99.0
version: 5.99.0(react@19.2.5)
@@ -64,7 +64,7 @@ importers:
version: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
radix-ui:
specifier: ^1.4.3
version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
version: 1.6.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react:
specifier: 19.2.5
version: 19.2.5
@@ -77,6 +77,12 @@ importers:
react-i18next:
specifier: ^17.0.3
version: 17.0.3(i18next@26.0.5(typescript@6.0.2))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)
react-markdown:
specifier: ^10.1.0
version: 10.1.0(@types/react@19.2.14)(react@19.2.5)
remark-gfm:
specifier: ^4.0.1
version: 4.0.1
shadcn:
specifier: ^4.7.0
version: 4.7.0(@types/node@24.12.2)(typescript@6.0.2)
@@ -626,8 +632,8 @@ packages:
'@floating-ui/utils@0.2.11':
resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
'@fontsource-variable/geist@5.2.8':
resolution: {integrity: sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==}
'@fontsource-variable/geist@5.2.9':
resolution: {integrity: sha512-TP+QSBG3wxKGPE33CbMy/L0Nu3qvJ6Fy81Yc4LnQ95xH+i+cfEp8fyU8/kfV14YwszxIFPhnoMTbjL71waVpyQ==}
'@hono/node-server@1.19.14':
resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==}
@@ -635,8 +641,8 @@ packages:
peerDependencies:
hono: ^4
'@hookform/resolvers@5.2.2':
resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==}
'@hookform/resolvers@5.4.0':
resolution: {integrity: sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==}
peerDependencies:
react-hook-form: ^7.55.0
@@ -903,14 +909,14 @@ packages:
'@oxc-project/types@0.124.0':
resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==}
'@radix-ui/number@1.1.1':
resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
'@radix-ui/number@1.1.2':
resolution: {integrity: sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==}
'@radix-ui/primitive@1.1.3':
resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
'@radix-ui/primitive@1.1.5':
resolution: {integrity: sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==}
'@radix-ui/react-accessible-icon@1.1.7':
resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==}
'@radix-ui/react-accessible-icon@1.1.11':
resolution: {integrity: sha512-HQDOFTKwSnmUij6l54wYJJtxTAnxI71+YJLOrjm2ladFB8HAV5Jt7hwaZPhWTGBkYoW4+ZAOfNZrLDh/qvxSYA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -922,8 +928,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-accordion@1.2.12':
resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
'@radix-ui/react-accordion@1.2.16':
resolution: {integrity: sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -935,8 +941,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-alert-dialog@1.1.15':
resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==}
'@radix-ui/react-alert-dialog@1.1.19':
resolution: {integrity: sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -948,8 +954,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-arrow@1.1.7':
resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
'@radix-ui/react-arrow@1.1.11':
resolution: {integrity: sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -961,8 +967,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-aspect-ratio@1.1.7':
resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==}
'@radix-ui/react-aspect-ratio@1.1.11':
resolution: {integrity: sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -974,8 +980,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-avatar@1.1.10':
resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==}
'@radix-ui/react-avatar@1.2.2':
resolution: {integrity: sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -987,8 +993,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-checkbox@1.3.3':
resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==}
'@radix-ui/react-checkbox@1.3.7':
resolution: {integrity: sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1000,8 +1006,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-collapsible@1.1.12':
resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
'@radix-ui/react-collapsible@1.1.16':
resolution: {integrity: sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1013,8 +1019,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-collection@1.1.7':
resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
'@radix-ui/react-collection@1.1.12':
resolution: {integrity: sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1026,8 +1032,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-compose-refs@1.1.2':
resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
'@radix-ui/react-compose-refs@1.1.3':
resolution: {integrity: sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1035,8 +1041,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-context-menu@2.2.16':
resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==}
'@radix-ui/react-context-menu@2.3.3':
resolution: {integrity: sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1048,8 +1054,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-context@1.1.2':
resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
'@radix-ui/react-context@1.2.0':
resolution: {integrity: sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1057,8 +1063,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-dialog@1.1.15':
resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
'@radix-ui/react-dialog@1.1.19':
resolution: {integrity: sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1070,8 +1076,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-direction@1.1.1':
resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
'@radix-ui/react-direction@1.1.2':
resolution: {integrity: sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1079,8 +1085,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-dismissable-layer@1.1.11':
resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
'@radix-ui/react-dismissable-layer@1.1.15':
resolution: {integrity: sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1092,8 +1098,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-dropdown-menu@2.1.16':
resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
'@radix-ui/react-dropdown-menu@2.1.20':
resolution: {integrity: sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1105,8 +1111,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-focus-guards@1.1.3':
resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
'@radix-ui/react-focus-guards@1.1.4':
resolution: {integrity: sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1114,8 +1120,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-focus-scope@1.1.7':
resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
'@radix-ui/react-focus-scope@1.1.12':
resolution: {integrity: sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1127,8 +1133,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-form@0.1.8':
resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==}
'@radix-ui/react-form@0.1.12':
resolution: {integrity: sha512-JTX94E4LDL91rzLg7X0mHPdxr0A8JEdVwZEmeOwZJSMDHCGW5DFtSlTSJozUyUs807IQmnvbfzKZFVCK5DmkqQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1140,8 +1146,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-hover-card@1.1.15':
resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==}
'@radix-ui/react-hover-card@1.1.19':
resolution: {integrity: sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1153,8 +1159,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-id@1.1.1':
resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
'@radix-ui/react-id@1.1.2':
resolution: {integrity: sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1162,8 +1168,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-label@2.1.7':
resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==}
'@radix-ui/react-label@2.1.11':
resolution: {integrity: sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1175,8 +1181,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-menu@2.1.16':
resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
'@radix-ui/react-menu@2.1.20':
resolution: {integrity: sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1188,8 +1194,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-menubar@1.1.16':
resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==}
'@radix-ui/react-menubar@1.1.20':
resolution: {integrity: sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1201,8 +1207,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-navigation-menu@1.2.14':
resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
'@radix-ui/react-navigation-menu@1.2.18':
resolution: {integrity: sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1214,8 +1220,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-one-time-password-field@0.1.8':
resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==}
'@radix-ui/react-one-time-password-field@0.1.12':
resolution: {integrity: sha512-nQLu5OAcORDQp1EHAv6k3mJGV1hjMTw2NTGVAsGE1g/mWeNqAd1R5jyaAs3U+A8ZD/W8XNPY2yKT0ZdQnqo3NA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1227,8 +1233,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-password-toggle-field@0.1.3':
resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==}
'@radix-ui/react-password-toggle-field@0.1.7':
resolution: {integrity: sha512-gB1Mr8vzdv1XzDjrtJTXmL0JORRs1B4g7ngUs0F+H2VvMOwXTZMTmLCl0wZZ3m7ylX8TssI7NCvgiSHmLuTm/A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1240,8 +1246,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-popover@1.1.15':
resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
'@radix-ui/react-popover@1.1.19':
resolution: {integrity: sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1253,8 +1259,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-popper@1.2.8':
resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
'@radix-ui/react-popper@1.3.3':
resolution: {integrity: sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1266,8 +1272,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-portal@1.1.9':
resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
'@radix-ui/react-portal@1.1.13':
resolution: {integrity: sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1279,8 +1285,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-presence@1.1.5':
resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
'@radix-ui/react-presence@1.1.7':
resolution: {integrity: sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1292,8 +1298,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-primitive@2.1.3':
resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
'@radix-ui/react-primitive@2.1.7':
resolution: {integrity: sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1305,8 +1311,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-progress@1.1.7':
resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==}
'@radix-ui/react-progress@1.1.12':
resolution: {integrity: sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1318,8 +1324,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-radio-group@1.3.8':
resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==}
'@radix-ui/react-radio-group@1.4.3':
resolution: {integrity: sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1331,8 +1337,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-roving-focus@1.1.11':
resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
'@radix-ui/react-roving-focus@1.1.15':
resolution: {integrity: sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1344,8 +1350,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-scroll-area@1.2.10':
resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
'@radix-ui/react-scroll-area@1.2.14':
resolution: {integrity: sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1357,8 +1363,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-select@2.2.6':
resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
'@radix-ui/react-select@2.3.3':
resolution: {integrity: sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1370,8 +1376,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-separator@1.1.7':
resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==}
'@radix-ui/react-separator@1.1.11':
resolution: {integrity: sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1383,8 +1389,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-slider@1.3.6':
resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==}
'@radix-ui/react-slider@1.4.3':
resolution: {integrity: sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1396,8 +1402,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-slot@1.2.3':
resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
'@radix-ui/react-slot@1.3.0':
resolution: {integrity: sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1405,8 +1411,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-switch@1.2.6':
resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==}
'@radix-ui/react-switch@1.3.3':
resolution: {integrity: sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1418,8 +1424,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-tabs@1.1.13':
resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
'@radix-ui/react-tabs@1.1.17':
resolution: {integrity: sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1431,8 +1437,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-toast@1.2.15':
resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==}
'@radix-ui/react-toast@1.2.19':
resolution: {integrity: sha512-SxfVZfVOibWKWdkf0Xx1awW2d09fQu4V4PXDY1j5hi4MVf7MWdJZqTBJMa1KWtOr1S6GGtCk02nniZ0Iia+dHw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1444,8 +1450,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-toggle-group@1.1.11':
resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==}
'@radix-ui/react-toggle-group@1.1.15':
resolution: {integrity: sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1457,8 +1463,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-toggle@1.1.10':
resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==}
'@radix-ui/react-toggle@1.1.14':
resolution: {integrity: sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1470,8 +1476,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-toolbar@1.1.11':
resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==}
'@radix-ui/react-toolbar@1.1.15':
resolution: {integrity: sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1483,8 +1489,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-tooltip@1.2.8':
resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
'@radix-ui/react-tooltip@1.2.12':
resolution: {integrity: sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1496,8 +1502,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/react-use-callback-ref@1.1.1':
resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
'@radix-ui/react-use-callback-ref@1.1.2':
resolution: {integrity: sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1505,8 +1511,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-controllable-state@1.2.2':
resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
'@radix-ui/react-use-controllable-state@1.2.3':
resolution: {integrity: sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1514,8 +1520,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-effect-event@0.0.2':
resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
'@radix-ui/react-use-effect-event@0.0.3':
resolution: {integrity: sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1523,8 +1529,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-escape-keydown@1.1.1':
resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
'@radix-ui/react-use-escape-keydown@1.1.3':
resolution: {integrity: sha512-3wEkMiPHXha/2VadZ68rYBcmYnPINVGl4Y3gtcM7fKRjANk0OscK+cdqBgUWdozb7YJxsh0vefM7vgAMHXOjqg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1532,8 +1538,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-is-hydrated@0.1.0':
resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==}
'@radix-ui/react-use-is-hydrated@0.1.1':
resolution: {integrity: sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1541,8 +1547,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-layout-effect@1.1.1':
resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
'@radix-ui/react-use-layout-effect@1.1.2':
resolution: {integrity: sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1550,8 +1556,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-previous@1.1.1':
resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
'@radix-ui/react-use-previous@1.1.2':
resolution: {integrity: sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1559,8 +1565,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-rect@1.1.1':
resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
'@radix-ui/react-use-rect@1.1.2':
resolution: {integrity: sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1568,8 +1574,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-use-size@1.1.1':
resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
'@radix-ui/react-use-size@1.1.2':
resolution: {integrity: sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -1577,8 +1583,8 @@ packages:
'@types/react':
optional: true
'@radix-ui/react-visually-hidden@1.2.3':
resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
'@radix-ui/react-visually-hidden@1.2.7':
resolution: {integrity: sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1590,8 +1596,8 @@ packages:
'@types/react-dom':
optional: true
'@radix-ui/rect@1.1.1':
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
'@radix-ui/rect@1.1.2':
resolution: {integrity: sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==}
'@rolldown/binding-android-arm64@1.0.0-rc.15':
resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==}
@@ -1932,9 +1938,27 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
'@types/debug@4.1.13':
resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
'@types/estree@1.0.9':
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
'@types/md5@2.3.6':
resolution: {integrity: sha512-WD69gNXtRBnpknfZcb4TRQ0XJQbUPZcai/Qdhmka3sxUR3Et8NrXoeAoknG/LghYHTf4ve795rInVYHBTQdNVA==}
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/node@24.12.2':
resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==}
@@ -1952,9 +1976,18 @@ packages:
'@types/statuses@2.0.6':
resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@types/validate-npm-package-name@4.0.2':
resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==}
'@ungap/structured-clone@1.3.2':
resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==}
'@vitejs/plugin-react@6.0.1':
resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -2052,6 +2085,9 @@ packages:
babel-plugin-react-compiler@1.0.0:
resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==}
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -2124,6 +2160,9 @@ packages:
caniuse-lite@1.0.30001788:
resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
@@ -2136,6 +2175,18 @@ packages:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
character-reference-invalid@2.0.1:
resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
@@ -2204,6 +2255,9 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
@@ -2321,6 +2375,9 @@ packages:
supports-color:
optional: true
decode-named-character-reference@1.3.0:
resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
dedent@0.7.0:
resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
@@ -2355,6 +2412,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
detect-file@1.0.0:
resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
engines: {node: '>=0.10.0'}
@@ -2370,6 +2431,9 @@ packages:
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
diff@8.0.4:
resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
engines: {node: '>=0.3.1'}
@@ -2467,11 +2531,18 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
estree-util-is-identifier-name@3.0.0:
resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
@@ -2713,6 +2784,12 @@ packages:
resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
engines: {node: '>= 0.4'}
hast-util-to-jsx-runtime@2.3.6:
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
headers-polyfill@5.0.1:
resolution: {integrity: sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==}
@@ -2727,6 +2804,9 @@ packages:
html-parse-stringify@3.0.1:
resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
html-url-attributes@3.0.1:
resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
http-errors@2.0.1:
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'}
@@ -2792,6 +2872,9 @@ packages:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
inquirer@8.2.5:
resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
engines: {node: '>=12.0.0'}
@@ -2804,6 +2887,12 @@ packages:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
@@ -2814,6 +2903,9 @@ packages:
is-buffer@1.1.6:
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
is-docker@3.0.0:
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2835,6 +2927,9 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
is-in-ssh@1.0.0:
resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
engines: {node: '>=20'}
@@ -3090,6 +3185,9 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
longest@2.0.1:
resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
engines: {node: '>=0.10.0'}
@@ -3108,6 +3206,9 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -3115,6 +3216,51 @@ packages:
md5@2.3.0:
resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
mdast-util-from-markdown@2.0.3:
resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
mdast-util-gfm-footnote@2.1.0:
resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
mdast-util-gfm-table@2.0.0:
resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
mdast-util-gfm@3.1.0:
resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
mdast-util-mdx-expression@2.0.1:
resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
mdast-util-mdx-jsx@3.2.0:
resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
mdast-util-mdxjs-esm@2.0.1:
resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
mdast-util-to-hast@13.2.1:
resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
mdast-util-to-markdown@2.0.0:
resolution: {integrity: sha512-Ov3aWCYpb31/SkHNRlREvSZsF9ETBW/rXw4PooawZO8qy2MviDq4TI6kxX6zFmGa/zUX36STKIC/IpASQk596w==}
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
media-typer@1.1.0:
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
engines: {node: '>= 0.8'}
@@ -3137,6 +3283,90 @@ packages:
merge@2.1.1:
resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==}
micromark-core-commonmark@2.0.0:
resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
micromark-extension-gfm-autolink-literal@2.1.0:
resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
micromark-extension-gfm-footnote@2.1.0:
resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
micromark-extension-gfm-table@2.1.1:
resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
micromark-extension-gfm-task-list-item@2.1.0:
resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
micromark-factory-destination@2.0.0:
resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
micromark-factory-label@2.0.0:
resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
micromark-factory-space@2.0.0:
resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
micromark-factory-title@2.0.0:
resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
micromark-factory-whitespace@2.0.0:
resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
micromark-util-character@2.0.0:
resolution: {integrity: sha512-DtHHqgTRz32ylwiGSZwoK+BTx4gaq//ig71g20pwBwRLxo3CfInyD+NyTrriLOhPz5WQOfAOSLLbKOaaGXWz9Q==}
micromark-util-chunked@2.0.0:
resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
micromark-util-classify-character@2.0.0:
resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
micromark-util-combine-extensions@2.0.0:
resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
micromark-util-decode-numeric-character-reference@2.0.0:
resolution: {integrity: sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==}
micromark-util-decode-string@2.0.1:
resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
micromark-util-encode@2.0.0:
resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
micromark-util-html-tag-name@2.0.0:
resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
micromark-util-normalize-identifier@2.0.0:
resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
micromark-util-resolve-all@2.0.0:
resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
micromark-util-sanitize-uri@2.0.0:
resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
micromark-util-subtokenize@2.0.0:
resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
micromark-util-symbol@2.0.0:
resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
micromark-util-types@2.0.0:
resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
micromark@4.0.0:
resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -3293,6 +3523,9 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -3373,6 +3606,9 @@ packages:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
property-information@7.2.0:
resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -3384,8 +3620,8 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
radix-ui@1.4.3:
resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==}
radix-ui@1.6.2:
resolution: {integrity: sha512-OwYUjzMwiInCUxgAWpPsavXC3Kh4iyi/49uU1/qZTG3RQDlvegyk1GOMiGvSkjua1RDb3JD3fo3eroL9FV4GQw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -3432,6 +3668,12 @@ packages:
typescript:
optional: true
react-markdown@10.1.0:
resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
peerDependencies:
'@types/react': '>=18'
react: '>=18'
react-remove-scroll-bar@2.3.8:
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
engines: {node: '>=10'}
@@ -3478,6 +3720,18 @@ packages:
resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
engines: {node: '>= 4'}
remark-gfm@4.0.1:
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
remark-rehype@11.1.2:
resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -3642,6 +3896,9 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
statuses@2.0.2:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
@@ -3672,6 +3929,9 @@ packages:
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
stringify-object@5.0.0:
resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==}
engines: {node: '>=14.16'}
@@ -3704,6 +3964,12 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
style-to-js@1.0.0:
resolution: {integrity: sha512-OiaJVLD+ybcul+6oAdwTOKLFewvYapPLG4H3JiYBYUS0yoi29Ag1IiqprbVARaxiAXvkk+4B8aNcG7lyEDKebg==}
style-to-object@0.3.0:
resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==}
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@@ -3763,6 +4029,12 @@ packages:
resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==}
engines: {node: '>=16'}
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
ts-morph@26.0.0:
resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==}
@@ -3805,6 +4077,24 @@ packages:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
unified@11.0.0:
resolution: {integrity: sha512-65zgPyv0vyXnJpw4fbGmoXjP0/6cBmnnesl4lSPGU2tYuzLWtuicRBFcaV6kgzitGrBHj6pgXYomMw1VQe/cQg==}
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
unist-util-visit-parents@6.0.2:
resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
unist-util-visit@5.1.0:
resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
@@ -3862,6 +4152,12 @@ packages:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
vfile-message@4.0.3:
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
vite@8.0.8:
resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -4009,6 +4305,9 @@ packages:
use-sync-external-store:
optional: true
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
snapshots:
'@babel/code-frame@7.29.0':
@@ -4484,13 +4783,13 @@ snapshots:
'@floating-ui/utils@0.2.11': {}
'@fontsource-variable/geist@5.2.8': {}
'@fontsource-variable/geist@5.2.9': {}
'@hono/node-server@1.19.14(hono@4.12.18)':
dependencies:
hono: 4.12.18
'@hookform/resolvers@5.2.2(react-hook-form@7.75.0(react@19.2.5))':
'@hookform/resolvers@5.4.0(react-hook-form@7.75.0(react@19.2.5))':
dependencies:
'@standard-schema/utils': 0.3.0
react-hook-form: 7.75.0(react@19.2.5)
@@ -4708,165 +5007,163 @@ snapshots:
'@oxc-project/types@0.124.0': {}
'@radix-ui/number@1.1.1': {}
'@radix-ui/number@1.1.2': {}
'@radix-ui/primitive@1.1.3': {}
'@radix-ui/primitive@1.1.5': {}
'@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-accessible-icon@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-accordion@1.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collapsible': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-alert-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-arrow@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-aspect-ratio@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-avatar@1.2.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-checkbox@1.3.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-collapsible@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-collection@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-compose-refs@1.1.3(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-context-menu@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-context@1.2.0(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-dialog@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
aria-hidden: 1.2.6
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
@@ -4875,122 +5172,122 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-direction@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-dismissable-layer@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-dropdown-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-focus-guards@1.1.4(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-focus-scope@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-form@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-label': 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-hover-card@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-id@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-label@2.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-menu@2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
aria-hidden: 1.2.6
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
@@ -4999,97 +5296,97 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-menubar@1.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-navigation-menu@1.2.18(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-one-time-password-field@0.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/number': 1.1.2
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-password-toggle-field@0.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-popover@1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
aria-hidden: 1.2.6
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
@@ -5098,136 +5395,138 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-popper@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/rect': 1.1.1
'@radix-ui/react-arrow': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-rect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/rect': 1.1.2
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-portal@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-presence@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-primitive@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-progress@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-radio-group@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-roving-focus@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-scroll-area@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/number': 1.1.2
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-select@2.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/number': 1.1.2
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
aria-hidden: 1.2.6
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
@@ -5236,224 +5535,223 @@ snapshots:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-separator@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-slider@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/number': 1.1.2
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-slot@1.3.0(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-switch@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-previous': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-tabs@1.1.17(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-toast@1.2.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-toggle-group@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle': 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-toggle@1.1.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-toolbar@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-separator': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle-group': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-tooltip@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-id': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-callback-ref@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-controllable-state@1.2.3(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-effect-event@0.0.3(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-escape-keydown@1.1.3(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
use-sync-external-store: 1.6.0(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-is-hydrated@0.1.1(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-layout-effect@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-previous@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/rect': 1.1.1
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.5)':
'@radix-ui/react-use-rect@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/rect': 1.1.2
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
'@radix-ui/react-use-size@1.1.2(@types/react@19.2.14)(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
react: 19.2.5
optionalDependencies:
'@types/react': 19.2.14
'@radix-ui/react-visually-hidden@1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
dependencies:
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
'@types/react': 19.2.14
'@types/react-dom': 19.2.3(@types/react@19.2.14)
'@radix-ui/rect@1.1.1': {}
'@radix-ui/rect@1.1.2': {}
'@rolldown/binding-android-arm64@1.0.0-rc.15':
optional: true
@@ -5737,8 +6035,28 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
'@types/debug@4.1.13':
dependencies:
'@types/ms': 2.1.0
'@types/estree-jsx@1.0.5':
dependencies:
'@types/estree': 1.0.9
'@types/estree@1.0.9': {}
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
'@types/md5@2.3.6': {}
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
'@types/ms@2.1.0': {}
'@types/node@24.12.2':
dependencies:
undici-types: 7.16.0
@@ -5757,8 +6075,14 @@ snapshots:
'@types/statuses@2.0.6': {}
'@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
'@types/validate-npm-package-name@4.0.2': {}
'@ungap/structured-clone@1.3.2': {}
'@vitejs/plugin-react@6.0.1(@rolldown/plugin-babel@0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.15)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(babel-plugin-react-compiler@1.0.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.7
@@ -5843,6 +6167,8 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
bail@2.0.2: {}
balanced-match@1.0.2: {}
balanced-match@4.0.4: {}
@@ -5921,6 +6247,8 @@ snapshots:
caniuse-lite@1.0.30001788: {}
ccount@2.0.1: {}
chalk@2.4.2:
dependencies:
ansi-styles: 3.2.1
@@ -5934,6 +6262,14 @@ snapshots:
chalk@5.6.2: {}
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
character-entities@2.0.2: {}
character-reference-invalid@2.0.1: {}
chardet@0.7.0: {}
charenc@0.0.2: {}
@@ -5999,6 +6335,8 @@ snapshots:
colorette@2.0.20: {}
comma-separated-tokens@2.0.3: {}
commander@11.1.0: {}
commander@14.0.3: {}
@@ -6114,6 +6452,10 @@ snapshots:
dependencies:
ms: 2.1.3
decode-named-character-reference@1.3.0:
dependencies:
character-entities: 2.0.2
dedent@0.7.0: {}
dedent@1.7.2: {}
@@ -6135,6 +6477,8 @@ snapshots:
depd@2.0.0: {}
dequal@2.0.3: {}
detect-file@1.0.0: {}
detect-indent@6.1.0: {}
@@ -6143,6 +6487,10 @@ snapshots:
detect-node-es@1.1.0: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
diff@8.0.4: {}
dot-prop@5.3.0:
@@ -6246,8 +6594,12 @@ snapshots:
escape-string-regexp@1.0.5: {}
escape-string-regexp@5.0.0: {}
esprima@4.0.1: {}
estree-util-is-identifier-name@3.0.0: {}
etag@1.8.1: {}
eventemitter3@5.0.4: {}
@@ -6538,6 +6890,30 @@ snapshots:
dependencies:
function-bind: 1.1.2
hast-util-to-jsx-runtime@2.3.6:
dependencies:
'@types/estree': 1.0.9
'@types/hast': 3.0.4
'@types/unist': 3.0.3
comma-separated-tokens: 2.0.3
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
hast-util-whitespace: 3.0.0
mdast-util-mdx-expression: 2.0.1
mdast-util-mdx-jsx: 3.2.0
mdast-util-mdxjs-esm: 2.0.1
property-information: 7.2.0
space-separated-tokens: 2.0.2
style-to-js: 1.0.0
unist-util-position: 5.0.0
vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
headers-polyfill@5.0.1:
dependencies:
'@types/set-cookie-parser': 2.4.10
@@ -6553,6 +6929,8 @@ snapshots:
dependencies:
void-elements: 3.1.0
html-url-attributes@3.0.1: {}
http-errors@2.0.1:
dependencies:
depd: 2.0.0
@@ -6610,6 +6988,8 @@ snapshots:
ini@4.1.1: {}
inline-style-parser@0.1.1: {}
inquirer@8.2.5:
dependencies:
ansi-escapes: 4.3.2
@@ -6632,6 +7012,13 @@ snapshots:
ipaddr.js@1.9.1: {}
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
dependencies:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
is-arrayish@0.2.1: {}
is-binary-path@2.1.0:
@@ -6640,6 +7027,8 @@ snapshots:
is-buffer@1.1.6: {}
is-decimal@2.0.1: {}
is-docker@3.0.0: {}
is-extglob@2.1.1: {}
@@ -6654,6 +7043,8 @@ snapshots:
dependencies:
is-extglob: 2.1.1
is-hexadecimal@2.0.1: {}
is-in-ssh@1.0.0: {}
is-inside-container@1.0.0:
@@ -6837,6 +7228,8 @@ snapshots:
strip-ansi: 7.2.0
wrap-ansi: 9.0.2
longest-streak@3.1.0: {}
longest@2.0.1: {}
lottie-web@5.13.0: {}
@@ -6853,6 +7246,8 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
markdown-table@3.0.4: {}
math-intrinsics@1.1.0: {}
md5@2.3.0:
@@ -6861,6 +7256,158 @@ snapshots:
crypt: 0.0.2
is-buffer: 1.1.6
mdast-util-find-and-replace@3.0.2:
dependencies:
'@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
mdast-util-from-markdown@2.0.3:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
decode-named-character-reference: 1.3.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.0
micromark-util-decode-numeric-character-reference: 2.0.0
micromark-util-decode-string: 2.0.1
micromark-util-normalize-identifier: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
'@types/mdast': 4.0.4
ccount: 2.0.1
devlop: 1.1.0
mdast-util-find-and-replace: 3.0.2
micromark-util-character: 2.0.0
mdast-util-gfm-footnote@2.1.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
micromark-util-normalize-identifier: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.4
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-task-list-item@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.1.0:
dependencies:
mdast-util-from-markdown: 2.0.3
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 2.0.0
mdast-util-to-markdown: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-mdx-expression@2.0.1:
dependencies:
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-mdx-jsx@3.2.0:
dependencies:
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
ccount: 2.0.1
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
parse-entities: 4.0.2
stringify-entities: 4.0.4
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
mdast-util-mdxjs-esm@2.0.1:
dependencies:
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
unist-util-is: 6.0.1
mdast-util-to-hast@13.2.1:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@ungap/structured-clone': 1.3.2
devlop: 1.1.0
micromark-util-sanitize-uri: 2.0.0
trim-lines: 3.0.1
unist-util-position: 5.0.0
unist-util-visit: 5.1.0
vfile: 6.0.3
mdast-util-to-markdown@2.0.0:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
longest-streak: 3.1.0
mdast-util-phrasing: 4.1.0
mdast-util-to-string: 4.0.0
micromark-util-decode-string: 2.0.1
unist-util-visit: 5.1.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
media-typer@1.1.0: {}
meow@13.2.0: {}
@@ -6873,6 +7420,197 @@ snapshots:
merge@2.1.1: {}
micromark-core-commonmark@2.0.0:
dependencies:
decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-factory-destination: 2.0.0
micromark-factory-label: 2.0.0
micromark-factory-space: 2.0.0
micromark-factory-title: 2.0.0
micromark-factory-whitespace: 2.0.0
micromark-util-character: 2.0.0
micromark-util-chunked: 2.0.0
micromark-util-classify-character: 2.0.0
micromark-util-html-tag-name: 2.0.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-subtokenize: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.0.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
micromark-core-commonmark: 2.0.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
micromark-util-classify-character: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.0
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-destination@2.0.0:
dependencies:
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-label@2.0.0:
dependencies:
devlop: 1.1.0
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-space@2.0.0:
dependencies:
micromark-util-character: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-title@2.0.0:
dependencies:
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-whitespace@2.0.0:
dependencies:
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-character@2.0.0:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-chunked@2.0.0:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-classify-character@2.0.0:
dependencies:
micromark-util-character: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-combine-extensions@2.0.0:
dependencies:
micromark-util-chunked: 2.0.0
micromark-util-types: 2.0.0
micromark-util-decode-numeric-character-reference@2.0.0:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.3.0
micromark-util-character: 2.0.0
micromark-util-decode-numeric-character-reference: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-encode@2.0.0: {}
micromark-util-html-tag-name@2.0.0: {}
micromark-util-normalize-identifier@2.0.0:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-resolve-all@2.0.0:
dependencies:
micromark-util-types: 2.0.0
micromark-util-sanitize-uri@2.0.0:
dependencies:
micromark-util-character: 2.0.0
micromark-util-encode: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-subtokenize@2.0.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-symbol@2.0.0: {}
micromark-util-types@2.0.0: {}
micromark@4.0.0:
dependencies:
'@types/debug': 4.1.13
debug: 4.4.3
decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.0.0
micromark-util-chunked: 2.0.0
micromark-util-combine-extensions: 2.0.0
micromark-util-decode-numeric-character-reference: 2.0.0
micromark-util-encode: 2.0.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-subtokenize: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
transitivePeerDependencies:
- supports-color
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -7033,6 +7771,16 @@ snapshots:
dependencies:
callsites: 3.1.0
parse-entities@4.0.2:
dependencies:
'@types/unist': 2.0.11
character-entities-legacy: 3.0.0
character-reference-invalid: 2.0.1
decode-named-character-reference: 1.3.0
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.29.0
@@ -7092,6 +7840,8 @@ snapshots:
kleur: 3.0.3
sisteransi: 1.0.5
property-information@7.2.0: {}
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
@@ -7103,63 +7853,63 @@ snapshots:
queue-microtask@1.2.3: {}
radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
radix-ui@1.6.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/primitive': 1.1.5
'@radix-ui/react-accessible-icon': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-accordion': 1.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-alert-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-arrow': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-aspect-ratio': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-avatar': 1.2.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-checkbox': 1.3.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-collapsible': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-collection': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-compose-refs': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context': 1.2.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-context-menu': 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-dialog': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-direction': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-dismissable-layer': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-dropdown-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-focus-guards': 1.1.4(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-focus-scope': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-form': 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-hover-card': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-label': 2.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-menu': 2.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-menubar': 1.1.20(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-navigation-menu': 1.2.18(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-one-time-password-field': 0.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-password-toggle-field': 0.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-popover': 1.1.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-popper': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-portal': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-presence': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-primitive': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-progress': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-radio-group': 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-roving-focus': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-scroll-area': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-select': 2.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-separator': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slider': 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-slot': 1.3.0(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-switch': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-tabs': 1.1.17(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toast': 1.2.19(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle': 1.1.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toggle-group': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-toolbar': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-tooltip': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
'@radix-ui/react-use-callback-ref': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-controllable-state': 1.2.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-effect-event': 0.0.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-escape-keydown': 1.1.3(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-is-hydrated': 0.1.1(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-layout-effect': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-use-size': 1.1.2(@types/react@19.2.14)(react@19.2.5)
'@radix-ui/react-visually-hidden': 1.2.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
optionalDependencies:
@@ -7195,6 +7945,24 @@ snapshots:
react-dom: 19.2.5(react@19.2.5)
typescript: 6.0.2
react-markdown@10.1.0(@types/react@19.2.14)(react@19.2.5):
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/react': 19.2.14
devlop: 1.1.0
hast-util-to-jsx-runtime: 2.3.6
html-url-attributes: 3.0.1
mdast-util-to-hast: 13.2.1
react: 19.2.5
remark-parse: 11.0.0
remark-rehype: 11.1.2
unified: 11.0.0
unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5):
dependencies:
react: 19.2.5
@@ -7242,6 +8010,40 @@ snapshots:
tiny-invariant: 1.3.3
tslib: 2.8.1
remark-gfm@4.0.1:
dependencies:
'@types/mdast': 4.0.4
mdast-util-gfm: 3.1.0
micromark-extension-gfm: 3.0.0
remark-parse: 11.0.0
remark-stringify: 11.0.0
unified: 11.0.0
transitivePeerDependencies:
- supports-color
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.3
micromark-util-types: 2.0.0
unified: 11.0.0
transitivePeerDependencies:
- supports-color
remark-rehype@11.1.2:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
mdast-util-to-hast: 13.2.1
unified: 11.0.0
vfile: 6.0.3
remark-stringify@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-to-markdown: 2.0.0
unified: 11.0.0
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
@@ -7489,6 +8291,8 @@ snapshots:
source-map@0.6.1: {}
space-separated-tokens@2.0.2: {}
statuses@2.0.2: {}
stdin-discarder@0.2.2: {}
@@ -7518,6 +8322,11 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
stringify-object@5.0.0:
dependencies:
get-own-enumerable-keys: 1.0.0
@@ -7542,6 +8351,14 @@ snapshots:
strip-json-comments@3.1.1: {}
style-to-js@1.0.0:
dependencies:
style-to-object: 0.3.0
style-to-object@0.3.0:
dependencies:
inline-style-parser: 0.1.1
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
@@ -7589,6 +8406,10 @@ snapshots:
dependencies:
tldts: 7.0.30
trim-lines@3.0.1: {}
trough@2.2.0: {}
ts-morph@26.0.0:
dependencies:
'@ts-morph/common': 0.27.0
@@ -7629,6 +8450,39 @@ snapshots:
unicorn-magic@0.3.0: {}
unified@11.0.0:
dependencies:
'@types/unist': 3.0.3
'@ungap/structured-clone': 1.3.2
bail: 2.0.2
devlop: 1.1.0
is-plain-obj: 4.1.0
trough: 2.2.0
vfile: 6.0.3
unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
unist-util-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
unist-util-visit@5.1.0:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
universalify@2.0.1: {}
unpipe@1.0.0: {}
@@ -7673,6 +8527,16 @@ snapshots:
vary@1.1.2: {}
vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
vfile@6.0.3:
dependencies:
'@types/unist': 3.0.3
vfile-message: 4.0.3
vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3):
dependencies:
lightningcss: 1.32.0
@@ -7768,3 +8632,5 @@ snapshots:
'@types/react': 19.2.14
react: 19.2.5
use-sync-external-store: 1.6.0(react@19.2.5)
zwitch@2.0.4: {}

View File

@@ -59,6 +59,26 @@ function toFiniteNumber(value: string | number | null | undefined) {
return Number.isFinite(numericValue) ? numericValue : 0
}
const FINANCE_ASSET_BASE_URL = 'https://zihua-api.h55555game.top'
function normalizeFinanceAssetUrl(value: string | null | undefined) {
const assetPath = value?.trim()
if (!assetPath) {
return ''
}
if (/^https?:\/\//i.test(assetPath)) {
return assetPath
}
if (assetPath.startsWith('/')) {
return `${FINANCE_ASSET_BASE_URL}${assetPath}`
}
return assetPath
}
function normalizeCurrency(dto: FinanceCurrencyConfigDto) {
return {
code: dto.code,
@@ -80,10 +100,19 @@ function normalizeRate(dto: FinanceRateConfigDto) {
function normalizePayChannel(dto: FinancePayChannelDto) {
return {
banks: (dto.banks ?? []).map(normalizeWithdrawBank),
code: dto.code,
currencyCodes: Array.isArray(dto.currency_codes) ? dto.currency_codes : [],
depositBanks: (dto.deposit_banks ?? []).map(normalizeWithdrawBank),
feeNote: dto.fee_note ?? '',
methods: (dto.methods ?? []).map(normalizeDepositMethod),
minBank: dto.min_bank ?? '',
minEwallet: dto.min_ewallet ?? '',
name: dto.name,
processingNote: dto.processing_note ?? '',
rateHint: dto.rate_hint ?? '',
rateMode: dto.rate_mode ?? '',
reviewThresholdCoin: dto.review_threshold_coin ?? '0',
sort: Number.isFinite(dto.sort) ? dto.sort : 0,
status: typeof dto.status === 'number' ? dto.status : 1,
tierIds: Array.isArray(dto.tier_ids) ? dto.tier_ids : [],
@@ -99,6 +128,8 @@ function normalizeWithdrawBank(dto: FinanceWithdrawBankDto, index: number) {
currencyCode: dto.currency_code ?? null,
gatewayCode: dto.gateway_code ?? null,
label,
logo: normalizeFinanceAssetUrl(dto.logo),
paymentTypes: Array.isArray(dto.payment_types) ? dto.payment_types : [],
sort:
typeof dto.sort === 'number' && Number.isFinite(dto.sort)
? dto.sort
@@ -112,6 +143,8 @@ function normalizeDepositMethod(dto: FinanceDepositMethodDto) {
code: dto.code,
currencyCode: dto.currency_code,
gatewayCode: dto.gateway_code,
maximumAmount: dto.maximum_amount ?? '',
minimumAmount: dto.minimum_amount ?? '',
name: dto.name,
requiresBank: dto.requires_bank,
requiresBankAccount: dto.requires_bank_account,
@@ -122,6 +155,7 @@ function normalizeDepositMethod(dto: FinanceDepositMethodDto) {
function normalizeDepositFields(dto: FinanceDepositFieldsDto | undefined = {}) {
return {
channelCodeParam: dto.channel_code_param ?? 'channel_code',
depositBankAccountParam:
dto.deposit_bank_account_param ?? 'deposit_bank_account',
depositBankParam: dto.deposit_bank_param ?? 'deposit_bank',
@@ -146,20 +180,24 @@ function normalizeDepositConfig(
return {
banks: (dto?.banks ?? []).map(normalizeWithdrawBank),
dadapayPendingExpireSeconds: dto?.dadapay_pending_expire_seconds ?? 0,
defaultChannelCode: dto?.default_channel_code ?? '',
defaultChannelByCurrency: dto?.default_channel_by_currency ?? {},
fields: normalizeDepositFields(dto?.fields),
methods: (dto?.methods ?? []).map(normalizeDepositMethod),
payChannels: payChannels.map(normalizePayChannel),
pendingExpireSeconds: dto?.pending_expire_seconds ?? 0,
}
}
function normalizeWithdrawFields(dto: FinanceWithdrawConfigDto['fields'] = {}) {
return {
paymentTypeParam: dto.payment_type_param ?? 'payment_type',
receiveTypeBankOnly: dto.receive_type_bank_only ?? true,
requireBankBranch: dto.require_bank_branch ?? false,
requireBankCode: dto.require_bank_code ?? true,
requireChannelCode: dto.require_channel_code ?? true,
requirePaymentType: dto.require_payment_type ?? false,
requireReceiveAccount: dto.require_receive_account ?? true,
requireReceiverEmail: dto.require_receiver_email ?? true,
requireReceiverMobile: dto.require_receiver_mobile ?? true,
@@ -172,6 +210,7 @@ function normalizeWithdrawConfig(dto: FinanceWithdrawConfigDto) {
banks: (dto.banks ?? []).map(normalizeWithdrawBank),
feeNote: dto.fee_note,
fields: normalizeWithdrawFields(dto.fields),
methods: (dto.methods ?? []).map(normalizeDepositMethod),
minBank: dto.min_bank,
minEwallet: dto.min_ewallet,
payChannels: (dto.pay_channels ?? []).map(normalizePayChannel),

View File

@@ -0,0 +1,177 @@
import ReactMarkdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
import { cn } from '@/lib/utils'
interface RulesMarkdownContentProps {
className?: string
content: string
compact?: boolean
}
function RulesMarkdownContent({
className,
compact = false,
content,
}: RulesMarkdownContentProps) {
return (
<div className={className}>
<ReactMarkdown
remarkPlugins={[remarkGfm]}
components={{
h1: ({ children }) => (
<h1
className={cn(
'font-bold leading-tight text-[#F4FFFF]',
compact
? 'mb-design-8 text-design-15'
: 'mb-design-14 text-design-24',
)}
>
{children}
</h1>
),
h2: ({ children }) => (
<h2
className={cn(
'font-bold leading-tight text-[#E7FFFF]',
compact
? 'mb-design-6 mt-design-12 text-design-14'
: 'mb-design-10 mt-design-18 text-design-22',
)}
>
{children}
</h2>
),
h3: ({ children }) => (
<h3
className={cn(
'font-bold leading-tight text-[#8FE7EF]',
compact
? 'mb-design-5 mt-design-10 text-design-13'
: 'mb-design-8 mt-design-16 text-design-20',
)}
>
{children}
</h3>
),
h4: ({ children }) => (
<h4
className={cn(
'font-semibold leading-tight text-[#FFF2B8]',
compact
? 'mb-design-4 mt-design-9 text-design-12'
: 'mb-design-7 mt-design-14 text-design-18',
)}
>
{children}
</h4>
),
p: ({ children }) => (
<p
className={cn(
'text-[#B9E7EA]',
compact
? 'mb-design-7 leading-[1.66]'
: 'mb-design-11 leading-[1.76]',
)}
>
{children}
</p>
),
strong: ({ children }) => (
<strong className="font-bold text-[#FFF2B8]">{children}</strong>
),
ul: ({ children }) => (
<ul
className={cn(
'list-disc text-[#B9E7EA]',
compact
? 'mb-design-8 space-y-design-4 pl-design-15'
: 'mb-design-12 space-y-design-6 pl-design-22',
)}
>
{children}
</ul>
),
ol: ({ children }) => (
<ol
className={cn(
'list-decimal text-[#B9E7EA]',
compact
? 'mb-design-8 space-y-design-4 pl-design-15'
: 'mb-design-12 space-y-design-6 pl-design-22',
)}
>
{children}
</ol>
),
li: ({ children }) => (
<li className={compact ? 'leading-[1.62]' : 'leading-[1.72]'}>
{children}
</li>
),
code: ({ children }) => (
<code className="rounded-[calc(var(--design-unit)*4)] border border-[rgba(255,226,41,0.18)] bg-[rgba(255,226,41,0.08)] px-design-5 py-[1px] font-mono text-[#FFF2B8]">
{children}
</code>
),
pre: ({ children }) => (
<pre
className={cn(
'overflow-x-auto rounded-[calc(var(--design-unit)*8)] border border-[rgba(126,234,244,0.16)] bg-[rgba(2,15,26,0.72)] font-mono text-[#D8FCFF]',
compact
? 'mb-design-9 px-design-9 py-design-7 text-design-10'
: 'mb-design-13 px-design-14 py-design-10 text-design-15',
)}
>
{children}
</pre>
),
table: ({ children }) => (
<div className="mb-design-12 overflow-x-auto rounded-[calc(var(--design-unit)*8)] border border-[rgba(126,234,244,0.16)]">
<table className="w-full min-w-max border-collapse bg-[rgba(2,15,26,0.58)]">
{children}
</table>
</div>
),
thead: ({ children }) => (
<thead className="bg-[rgba(126,234,244,0.12)] text-[#E9FFFF]">
{children}
</thead>
),
th: ({ children }) => (
<th
className={cn(
'border border-[rgba(126,234,244,0.13)] text-center font-semibold',
compact
? 'px-design-7 py-design-6'
: 'px-design-12 py-design-9',
)}
>
{children}
</th>
),
td: ({ children }) => (
<td
className={cn(
'border border-[rgba(126,234,244,0.1)] text-center text-[#C8F4F7]',
compact
? 'px-design-7 py-design-6'
: 'px-design-12 py-design-9',
)}
>
{children}
</td>
),
hr: () => (
<hr className="my-design-12 border-0 border-t border-[rgba(126,234,244,0.16)]" />
),
}}
>
{content}
</ReactMarkdown>
</div>
)
}
export default RulesMarkdownContent

View File

@@ -288,9 +288,11 @@ export const DEFAULT_WITHDRAW_CONFIG: DepositWithdrawConfig = {
defaultDepositChannelCode: '',
deposit: {
banks: [],
dadapayPendingExpireSeconds: 0,
defaultChannelCode: '',
defaultChannelByCurrency: {},
fields: {
channelCodeParam: 'channel_code',
depositBankAccountParam: 'deposit_bank_account',
depositBankParam: 'deposit_bank',
depositFromAddressParam: 'deposit_from_address',
@@ -302,6 +304,7 @@ export const DEFAULT_WITHDRAW_CONFIG: DepositWithdrawConfig = {
},
methods: [],
payChannels: [],
pendingExpireSeconds: 0,
},
payChannels: [],
platformCoinLabel: '钻石',
@@ -316,10 +319,12 @@ export const DEFAULT_WITHDRAW_CONFIG: DepositWithdrawConfig = {
banks: [],
feeNote: 'RM10 - RM99.99 之间的交易将收取最低RM 1的提现手续费',
fields: {
paymentTypeParam: 'payment_type',
receiveTypeBankOnly: true,
requireBankBranch: false,
requireBankCode: true,
requireChannelCode: true,
requirePaymentType: false,
requireReceiveAccount: true,
requireReceiverEmail: true,
requireReceiverMobile: true,
@@ -327,6 +332,7 @@ export const DEFAULT_WITHDRAW_CONFIG: DepositWithdrawConfig = {
},
minBank: '10',
minEwallet: '10',
methods: [],
payChannels: [],
processingNote: '30s即可到账',
rateHint: '汇率为参考价格,实际以提现时为准。',

View File

@@ -1,20 +1,17 @@
import { useMutation } from '@tanstack/react-query'
import { CircleDollarSign, CreditCard, Landmark } from 'lucide-react'
import { useRef } from 'react'
import { type ComponentType, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import { createDeposit } from '@/api'
import { DataLoadingIndicator } from '@/components/ui/data-loading-indicator'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
import { useTopupVm } from '@/hooks/use-topup-vm'
import { notify } from '@/lib/notify'
import { cn } from '@/lib/utils'
import type { DepositCreateRequestDto, DepositTierItem } from '@/type'
import type {
DepositCreateRequestDto,
DepositTierItem,
FinanceWithdrawBank,
} from '@/type'
const PANEL_CLASS =
'rounded-md border border-[rgba(126,234,244,0.22)] bg-[linear-gradient(180deg,rgba(4,18,29,0.98),rgba(1,8,16,0.99))] shadow-[inset_0_1px_0_rgba(255,255,255,0.06),0_0_calc(var(--design-unit)*16)_rgba(44,210,230,0.1)]'
@@ -25,9 +22,6 @@ const FILTER_BAR_CLASS =
const FIELD_LABEL_CLASS =
'mb-design-5 flex items-center gap-design-5 text-design-11 font-semibold uppercase tracking-[0.08em] text-[#8FE7EF]'
const SELECT_TRIGGER_CLASS =
'h-design-42 w-full rounded-[calc(var(--design-unit)*6)] border-[rgba(126,234,244,0.18)] bg-[rgba(2,15,26,0.78)] px-design-10 text-design-12 font-semibold text-[#E9FEFF] shadow-none hover:border-[rgba(170,247,255,0.48)] focus-visible:border-[#7CE3E8] focus-visible:ring-[#7CE3E8]/25 data-placeholder:text-[#6FAAB2]'
function formatNumber(value: number) {
return new Intl.NumberFormat('en-US').format(value)
}
@@ -44,6 +38,115 @@ function getMethodIcon(gatewayCode: string) {
return CircleDollarSign
}
function OptionSection({
children,
className,
icon: Icon,
label,
}: {
children: React.ReactNode
className?: string
icon: ComponentType<{ className?: string }>
label: string
}) {
return (
<div className={cn('min-w-0', className)}>
<div className={FIELD_LABEL_CLASS}>
<Icon className="h-design-12 w-design-12" />
<span>{label}</span>
</div>
{children}
</div>
)
}
function ChoiceButton({
active,
disabled,
icon: Icon,
label,
onClick,
}: {
active: boolean
disabled?: boolean
icon?: ComponentType<{ className?: string }>
label: string
onClick: () => void
}) {
return (
<button
type="button"
aria-pressed={active}
disabled={disabled}
onClick={onClick}
className={cn(
'flex h-design-38 min-w-0 cursor-pointer items-center justify-center gap-design-6 rounded-[calc(var(--design-unit)*6)] border px-design-8 text-design-12 font-semibold transition-[border-color,background-color,box-shadow,color,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/45',
active
? 'border-[#FFE229]/55 bg-[linear-gradient(180deg,rgba(98,75,21,0.85),rgba(51,39,15,0.94))] text-[#FFF4B6] shadow-[0_0_calc(var(--design-unit)*12)_rgba(255,226,41,0.1),inset_0_0_calc(var(--design-unit)*10)_rgba(255,226,41,0.08)]'
: 'border-[rgba(126,234,244,0.18)] bg-[rgba(2,15,26,0.78)] text-[#D7FBFF] hover:border-[rgba(170,247,255,0.48)] hover:bg-[rgba(8,36,50,0.88)]',
disabled &&
'cursor-not-allowed opacity-45 hover:border-[rgba(126,234,244,0.18)] hover:bg-[rgba(2,15,26,0.78)]',
)}
>
{Icon ? <Icon className="h-design-13 w-design-13 shrink-0" /> : null}
<span className="min-w-0 truncate">{label}</span>
</button>
)
}
function EmptyChoice({ label }: { label: string }) {
return (
<div className="flex h-design-38 items-center justify-center rounded-[calc(var(--design-unit)*6)] border border-[rgba(126,234,244,0.12)] bg-[rgba(2,15,26,0.48)] px-design-8 text-design-12 font-semibold text-[#6FAAB2]">
{label}
</div>
)
}
function BankLogo({ bank }: { bank: FinanceWithdrawBank }) {
if (bank.logo.trim()) {
return (
<img
src={bank.logo}
alt={bank.label}
className="h-design-22 w-design-22 rounded-[calc(var(--design-unit)*4)] object-contain"
/>
)
}
return <Landmark className="h-design-18 w-design-18 text-[#8DE4EA]" />
}
function BankButton({
active,
bank,
onClick,
}: {
active: boolean
bank: FinanceWithdrawBank
onClick: () => void
}) {
return (
<button
type="button"
aria-pressed={active}
onClick={onClick}
className={cn(
'flex h-design-42 min-w-0 cursor-pointer items-center gap-design-7 rounded-[calc(var(--design-unit)*6)] border px-design-8 text-left transition-[border-color,background-color,box-shadow,color,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/45',
active
? 'border-[#FFE229]/55 bg-[linear-gradient(180deg,rgba(98,75,21,0.85),rgba(51,39,15,0.94))] text-[#FFF4B6] shadow-[0_0_calc(var(--design-unit)*12)_rgba(255,226,41,0.1),inset_0_0_calc(var(--design-unit)*10)_rgba(255,226,41,0.08)]'
: 'border-[rgba(126,234,244,0.18)] bg-[rgba(2,15,26,0.78)] text-[#D7FBFF] hover:border-[rgba(170,247,255,0.48)] hover:bg-[rgba(8,36,50,0.88)]',
)}
>
<span className="flex h-design-28 w-design-28 shrink-0 items-center justify-center rounded-[calc(var(--design-unit)*5)] border border-[rgba(121,219,229,0.2)] bg-[rgba(10,39,52,0.72)]">
<BankLogo bank={bank} />
</span>
<span className="min-w-0 truncate text-design-12 font-semibold">
{bank.label}
</span>
</button>
)
}
function DesktopTopup() {
const { t } = useTranslation()
const vm = useTopupVm()
@@ -130,168 +233,122 @@ function DesktopTopup() {
</div>
) : (
<div className="flex h-full min-h-0 flex-col gap-design-10">
<div className={FILTER_BAR_CLASS}>
<div className="grid grid-cols-[1.15fr_0.78fr_1fr_1.15fr] gap-design-8">
<div className="min-w-0">
<label
htmlFor="desktop-topup-channel"
className={FIELD_LABEL_CLASS}
<div
className={cn(FILTER_BAR_CLASS, 'min-h-0 flex-1 overflow-hidden')}
>
<div className="grid h-full min-h-0 grid-cols-[minmax(0,0.9fr)_minmax(0,1.45fr)] gap-design-10">
<div className="flex min-h-0 flex-col gap-design-9 overflow-y-auto pr-design-1">
<OptionSection
icon={CreditCard}
label={t('gameDesktop.topup.flow.channelTitle')}
>
<CreditCard className="h-design-12 w-design-12" />
<span>{t('gameDesktop.topup.flow.channelTitle')}</span>
</label>
<Select
value={vm.selectedPayChannelCode || undefined}
onValueChange={vm.setSelectedPayChannelCode}
disabled={vm.payChannels.length === 0}
>
<SelectTrigger
id="desktop-topup-channel"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t('gameDesktop.topup.flow.channelTitle')}
/>
</SelectTrigger>
<SelectContent className="max-h-design-240">
{vm.payChannels.map((channel) => (
<SelectItem
key={channel.code}
value={channel.code}
className="py-design-7 text-design-12"
>
{channel.name}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
<div className="min-w-0">
<label
htmlFor="desktop-topup-currency"
className={FIELD_LABEL_CLASS}
>
<CircleDollarSign className="h-design-12 w-design-12" />
<span>{t('gameDesktop.topup.flow.currencyTitle')}</span>
</label>
<Select
value={vm.selectedCurrencyCode || undefined}
onValueChange={vm.setSelectedCurrencyCode}
disabled={
!vm.selectedPayChannel ||
vm.selectedPayChannel.currencyCodes.length === 0
}
>
<SelectTrigger
id="desktop-topup-currency"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t('gameDesktop.topup.flow.currencyTitle')}
/>
</SelectTrigger>
<SelectContent>
{vm.selectedPayChannel?.currencyCodes.map(
(currencyCode) => (
<SelectItem
key={currencyCode}
value={currencyCode}
className="py-design-7 text-design-12"
>
{currencyCode}
</SelectItem>
),
<div className="grid grid-cols-2 gap-design-6">
{vm.payChannels.length === 0 ? (
<EmptyChoice
label={t('gameDesktop.topup.flow.channelTitle')}
/>
) : (
vm.payChannels.map((channel) => (
<ChoiceButton
key={channel.code}
active={channel.code === vm.selectedPayChannelCode}
label={channel.name}
onClick={() =>
vm.setSelectedPayChannelCode(channel.code)
}
/>
))
)}
</SelectContent>
</Select>
</div>
</div>
</OptionSection>
<div className="min-w-0">
<label
htmlFor="desktop-topup-method"
className={FIELD_LABEL_CLASS}
<OptionSection
icon={CircleDollarSign}
label={t('gameDesktop.topup.flow.currencyTitle')}
>
<CreditCard className="h-design-12 w-design-12" />
<span>{t('gameDesktop.topup.flow.methodTitle')}</span>
</label>
<Select
value={vm.selectedPaymentMethodCode || undefined}
onValueChange={vm.setSelectedPaymentMethodCode}
disabled={vm.methods.length === 0}
>
<SelectTrigger
id="desktop-topup-method"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t('gameDesktop.topup.flow.methodTitle')}
/>
</SelectTrigger>
<SelectContent>
{vm.methods.map((method) => {
const MethodIcon = getMethodIcon(method.gatewayCode)
return (
<SelectItem
key={method.code}
value={method.code}
className="py-design-7 text-design-12"
>
<span className="flex items-center gap-design-6">
<MethodIcon className="h-design-12 w-design-12" />
<span>{getPaymentMethodLabel(method)}</span>
</span>
</SelectItem>
<div className="grid grid-cols-3 gap-design-6">
{vm.selectedPayChannel?.currencyCodes.length ? (
vm.selectedPayChannel.currencyCodes.map(
(currencyCode) => (
<ChoiceButton
key={currencyCode}
active={currencyCode === vm.selectedCurrencyCode}
label={currencyCode}
onClick={() =>
vm.setSelectedCurrencyCode(currencyCode)
}
/>
),
)
})}
</SelectContent>
</Select>
) : (
<EmptyChoice
label={t('gameDesktop.topup.flow.currencyTitle')}
/>
)}
</div>
</OptionSection>
<OptionSection
icon={CreditCard}
label={t('gameDesktop.topup.flow.methodTitle')}
>
<div className="grid grid-cols-2 gap-design-6">
{vm.methods.length === 0 ? (
<EmptyChoice
label={t('gameDesktop.topup.flow.methodTitle')}
/>
) : (
vm.methods.map((method) => {
const MethodIcon = getMethodIcon(method.gatewayCode)
return (
<ChoiceButton
key={method.code}
active={
method.code === vm.selectedPaymentMethodCode
}
icon={MethodIcon}
label={getPaymentMethodLabel(method)}
onClick={() =>
vm.setSelectedPaymentMethodCode(method.code)
}
/>
)
})
)}
</div>
</OptionSection>
</div>
<div className="min-w-0">
<label
htmlFor="desktop-topup-bank"
className={FIELD_LABEL_CLASS}
>
<Landmark className="h-design-12 w-design-12" />
<span>{t('gameDesktop.topup.flow.bankTitle')}</span>
</label>
<Select
value={vm.selectedBankCode || undefined}
onValueChange={vm.setSelectedBankCode}
disabled={vm.banks.length === 0}
>
<SelectTrigger
id="desktop-topup-bank"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t(
vm.banks.length === 0
? 'gameDesktop.topup.flow.noBank'
: 'gameDesktop.topup.flow.bankPlaceholder',
)}
/>
</SelectTrigger>
<SelectContent className="max-h-design-240">
{vm.banks.map((bank) => (
<SelectItem
key={bank.code}
value={bank.code}
className="py-design-7 text-design-12"
>
{bank.label}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
<OptionSection
className="flex min-h-0 flex-col overflow-hidden"
icon={Landmark}
label={t('gameDesktop.topup.flow.bankTitle')}
>
<div className="min-h-0 flex-1 overflow-y-auto pr-design-1">
<div className="grid grid-cols-3 gap-design-6">
{vm.banks.length === 0 ? (
<EmptyChoice
label={t('gameDesktop.topup.flow.noBank')}
/>
) : (
vm.banks.map((bank) => (
<BankButton
key={bank.code}
active={bank.code === vm.selectedBankCode}
bank={bank}
onClick={() => vm.setSelectedBankCode(bank.code)}
/>
))
)}
</div>
</div>
</OptionSection>
</div>
</div>
<div className="flex min-h-0 flex-1 flex-col rounded-[calc(var(--design-unit)*8)] border border-[rgba(126,234,244,0.13)] bg-[rgba(2,13,23,0.42)] p-design-10">
<div className="mb-design-8 flex shrink-0 items-center justify-between gap-design-10">
<div className="flex max-h-[calc(var(--design-unit)*150)] shrink-0 flex-col rounded-[calc(var(--design-unit)*8)] border border-[rgba(126,234,244,0.13)] bg-[rgba(2,13,23,0.42)] p-design-8">
<div className="mb-design-6 flex shrink-0 items-center justify-between gap-design-10">
<div className="min-w-0">
<div className="text-design-15 font-semibold text-[#E8FDFF]">
{t('gameDesktop.topup.tier.title')}
@@ -309,11 +366,11 @@ function DesktopTopup() {
</div>
{vm.filteredTiers.length === 0 ? (
<div className="flex min-h-0 flex-1 items-center justify-center rounded-[calc(var(--design-unit)*7)] border border-[rgba(103,227,239,0.16)] bg-[rgba(6,24,35,0.44)] text-design-16 text-[#8FDDE6]">
<div className="flex h-design-88 items-center justify-center rounded-[calc(var(--design-unit)*7)] border border-[rgba(103,227,239,0.16)] bg-[rgba(6,24,35,0.44)] text-design-14 text-[#8FDDE6]">
{t('gameDesktop.topup.tier.empty')}
</div>
) : (
<div className="grid min-h-0 min-w-0 grid-cols-4 content-start gap-design-8 overflow-y-auto pr-design-1">
<div className="flex min-w-0 gap-design-7 overflow-x-auto pb-design-1">
{vm.filteredTiers.map((tier) => (
<button
key={tier.id}
@@ -322,32 +379,32 @@ function DesktopTopup() {
void handleCreateDeposit(tier)
}}
className={cn(
'group relative min-h-design-126 cursor-pointer overflow-hidden rounded-[calc(var(--design-unit)*7)] border border-[rgba(126,234,244,0.16)] bg-[linear-gradient(180deg,rgba(8,36,50,0.88),rgba(3,18,29,0.96))] px-design-10 py-design-10 text-left transition-[border-color,background-color,box-shadow,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/50',
'group relative h-design-82 w-design-168 shrink-0 cursor-pointer overflow-hidden rounded-[calc(var(--design-unit)*7)] border border-[rgba(126,234,244,0.16)] bg-[linear-gradient(180deg,rgba(8,36,50,0.88),rgba(3,18,29,0.96))] px-design-8 py-design-7 text-left transition-[border-color,background-color,box-shadow,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/50',
createDepositMutation.isPending
? 'cursor-wait opacity-80'
: 'hover:border-[rgba(255,226,41,0.5)] hover:bg-[linear-gradient(180deg,rgba(12,46,61,0.94),rgba(4,22,34,0.98))] hover:shadow-[0_0_calc(var(--design-unit)*14)_rgba(255,226,41,0.08)] active:brightness-90',
)}
>
<div className="flex items-start justify-between gap-design-8">
<div className="flex items-start justify-between gap-design-6">
<div className="min-w-0">
<div className="truncate text-design-11 uppercase tracking-[0.05em] text-[#65B2BA]">
<div className="truncate text-design-10 uppercase tracking-[0.05em] text-[#65B2BA]">
{tier.title}
</div>
<div className="pt-design-7 text-design-24 font-semibold leading-none text-[#FFE229]">
<div className="pt-design-5 text-design-20 font-semibold leading-none text-[#FFE229]">
{formatNumber(tier.amount)}
</div>
</div>
<div className="shrink-0 rounded-full border border-[rgba(121,219,229,0.24)] bg-[rgba(10,39,52,0.72)] px-design-6 py-[2px] text-design-10 leading-none text-[#7CDDE7]">
<div className="shrink-0 rounded-full border border-[rgba(121,219,229,0.24)] bg-[rgba(10,39,52,0.72)] px-design-5 py-[2px] text-design-9 leading-none text-[#7CDDE7]">
{tier.currency ?? 'FIAT'}
</div>
</div>
<div className="mt-design-9 rounded-[calc(var(--design-unit)*5)] bg-[rgba(255,226,41,0.06)] px-design-7 py-design-6">
<div className="mt-design-5 rounded-[calc(var(--design-unit)*5)] bg-[rgba(255,226,41,0.06)] px-design-6 py-design-4">
<div className="flex items-center justify-between gap-design-6">
<span className="text-design-10 text-[#74B8C0]">
<span className="text-design-9 text-[#74B8C0]">
{t('gameDesktop.topup.tier.bonus')}
</span>
<span className="text-design-12 font-semibold text-[#FFF1C9]">
<span className="text-design-10 font-semibold text-[#FFF1C9]">
{formatNumber(tier.bonusAmount)}
</span>
</div>

View File

@@ -330,9 +330,12 @@ function DesktopWithdraw() {
if (
vm.amountRequiredError ||
vm.amountExceedsBalance ||
vm.amountBelowPaymentMinimum ||
vm.amountAbovePaymentMaximum ||
vm.holderNameError ||
vm.bankAccountError ||
vm.paymentChannelCodeError ||
vm.paymentTypeError ||
vm.bankCodeError ||
vm.receiverEmailError ||
vm.receiverPhoneError
@@ -345,6 +348,7 @@ function DesktopWithdraw() {
bank_code: vm.bankCode,
channel_code: vm.paymentChannelCode,
idempotency_key: String(Date.now()),
payment_type: vm.paymentType,
receive_account: vm.bankAccount.trim(),
receiver_email: vm.receiverEmail.trim(),
receiver_mobile: vm.receiverPhone.trim(),
@@ -393,6 +397,20 @@ function DesktopWithdraw() {
{t('gameDesktop.withdraw.errors.amountExceedsBalance')}
</div>
) : null}
{hasSubmitted && vm.amountBelowPaymentMinimum ? (
<div className="pl-design-2 text-design-13 text-[#F44F4F]">
{t('gameDesktop.withdraw.errors.amountBelowPaymentMinimum', {
amount: vm.paymentMinimumAmountLabel,
})}
</div>
) : null}
{hasSubmitted && vm.amountAbovePaymentMaximum ? (
<div className="pl-design-2 text-design-13 text-[#F44F4F]">
{t('gameDesktop.withdraw.errors.amountAbovePaymentMaximum', {
amount: vm.paymentMaximumAmountLabel,
})}
</div>
) : null}
</WithdrawField>
<div className="flex items-start gap-design-14">
@@ -412,32 +430,6 @@ function DesktopWithdraw() {
</div>
</div>
<WithdrawField
label={t('gameDesktop.withdraw.fields.currencyType')}
alignStart={false}
>
<Select
value={vm.currencyCode}
onValueChange={vm.setCurrencyCode}
>
<SelectTrigger
className="h-design-42 w-full rounded-[calc(var(--design-unit)*5)] border-[rgba(103,227,239,0.3)] bg-[linear-gradient(180deg,rgba(12,61,72,0.82),rgba(6,28,39,0.9))] px-design-14 text-left !text-design-16 text-[#A5EDF4] shadow-[inset_0_0_calc(var(--design-unit)*12)_rgba(94,237,255,0.08)] data-[size=default]:h-design-42 data-[placeholder]:text-[rgba(109,170,176,0.55)] [&_svg]:h-design-18 [&_svg]:w-design-18 [&_svg]:text-[#79DFEA]"
aria-label={t('gameDesktop.withdraw.currencySelection')}
>
<SelectValue
placeholder={t('gameDesktop.withdraw.selectCurrency')}
/>
</SelectTrigger>
<SelectContent>
{vm.config.currencies.map((option: FinanceCurrencyConfig) => (
<SelectItem key={option.code} value={option.code}>
{option.label}
</SelectItem>
))}
</SelectContent>
</Select>
</WithdrawField>
<WithdrawField
label={t('gameDesktop.withdraw.fields.paymentChannel')}
>
@@ -467,6 +459,76 @@ function DesktopWithdraw() {
</div>
</WithdrawField>
<WithdrawField
label={t('gameDesktop.withdraw.fields.paymentType')}
alignStart={false}
>
<div className="flex w-full flex-col gap-design-5">
<Select
value={vm.paymentType || undefined}
onValueChange={vm.setPaymentType}
disabled={vm.availablePaymentMethods.length === 0}
>
<SelectTrigger
className={cn(
'h-design-42 w-full rounded-[calc(var(--design-unit)*5)] bg-[linear-gradient(180deg,rgba(12,61,72,0.82),rgba(6,28,39,0.9))] px-design-14 text-left !text-design-16 text-[#A5EDF4] shadow-[inset_0_0_calc(var(--design-unit)*12)_rgba(94,237,255,0.08)] data-[size=default]:h-design-42 data-[placeholder]:text-[rgba(109,170,176,0.55)] [&_svg]:h-design-18 [&_svg]:w-design-18 [&_svg]:text-[#79DFEA]',
hasSubmitted && vm.paymentTypeError
? 'border-[#B93F44]'
: 'border-[rgba(103,227,239,0.3)]',
)}
aria-label={t('gameDesktop.withdraw.fields.paymentType')}
>
<SelectValue
placeholder={t(
'gameDesktop.withdraw.placeholders.paymentType',
)}
/>
</SelectTrigger>
<SelectContent>
{vm.availablePaymentMethods.map((method) => (
<SelectItem key={method.code} value={method.code}>
{method.name}
</SelectItem>
))}
</SelectContent>
</Select>
{hasSubmitted && vm.paymentTypeError ? (
<div className="pl-design-2 text-design-13 text-[#F44F4F]">
{t('gameDesktop.withdraw.errors.paymentTypeRequired')}
</div>
) : null}
</div>
</WithdrawField>
<WithdrawField
label={t('gameDesktop.withdraw.fields.currencyType')}
alignStart={false}
>
<Select
value={vm.currencyCode || undefined}
onValueChange={vm.setCurrencyCode}
disabled={vm.availableCurrencies.length === 0}
>
<SelectTrigger
className="h-design-42 w-full rounded-[calc(var(--design-unit)*5)] border-[rgba(103,227,239,0.3)] bg-[linear-gradient(180deg,rgba(12,61,72,0.82),rgba(6,28,39,0.9))] px-design-14 text-left !text-design-16 text-[#A5EDF4] shadow-[inset_0_0_calc(var(--design-unit)*12)_rgba(94,237,255,0.08)] data-[size=default]:h-design-42 data-[placeholder]:text-[rgba(109,170,176,0.55)] [&_svg]:h-design-18 [&_svg]:w-design-18 [&_svg]:text-[#79DFEA]"
aria-label={t('gameDesktop.withdraw.currencySelection')}
>
<SelectValue
placeholder={t('gameDesktop.withdraw.selectCurrency')}
/>
</SelectTrigger>
<SelectContent>
{vm.availableCurrencies.map(
(option: FinanceCurrencyConfig) => (
<SelectItem key={option.code} value={option.code}>
{option.label}
</SelectItem>
),
)}
</SelectContent>
</Select>
</WithdrawField>
<WithdrawField
label={t('gameDesktop.withdraw.fields.bankCode')}
alignStart={false}

View File

@@ -1,20 +1,17 @@
import { useMutation } from '@tanstack/react-query'
import { CircleDollarSign, CreditCard, Landmark } from 'lucide-react'
import { useRef } from 'react'
import { type ComponentType, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import { createDeposit } from '@/api'
import { DataLoadingIndicator } from '@/components/ui/data-loading-indicator'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
import { useTopupVm } from '@/hooks/use-topup-vm'
import { notify } from '@/lib/notify'
import { cn } from '@/lib/utils'
import type { DepositCreateRequestDto, DepositTierItem } from '@/type'
import type {
DepositCreateRequestDto,
DepositTierItem,
FinanceWithdrawBank,
} from '@/type'
const PANEL_CLASS =
'rounded-md border border-[rgba(126,234,244,0.22)] bg-[linear-gradient(180deg,rgba(4,18,29,0.98),rgba(1,8,16,0.99))] shadow-[inset_0_1px_0_rgba(255,255,255,0.06),0_0_calc(var(--design-unit)*12)_rgba(44,210,230,0.08)]'
@@ -23,10 +20,7 @@ const FILTER_BAR_CLASS =
'rounded-[calc(var(--design-unit)*7)] border border-[rgba(126,234,244,0.16)] bg-[linear-gradient(180deg,rgba(9,35,48,0.82),rgba(5,20,32,0.9))] p-design-7 shadow-[inset_0_1px_0_rgba(255,255,255,0.05)]'
const FIELD_LABEL_CLASS =
'mb-design-3 flex items-center gap-design-4 text-design-9 font-semibold uppercase tracking-[0.07em] text-[#8FE7EF]'
const SELECT_TRIGGER_CLASS =
'h-design-34 w-full rounded-[calc(var(--design-unit)*5)] border-[rgba(126,234,244,0.18)] bg-[rgba(2,15,26,0.78)] px-design-8 text-design-10 font-semibold text-[#E9FEFF] shadow-none focus-visible:border-[#7CE3E8] focus-visible:ring-[#7CE3E8]/25 data-placeholder:text-[#6FAAB2]'
'mb-design-4 flex items-center gap-design-4 text-design-10 font-semibold uppercase tracking-[0.06em] text-[#8FE7EF]'
function formatNumber(value: number) {
return new Intl.NumberFormat('en-US').format(value)
@@ -44,6 +38,115 @@ function getMethodIcon(gatewayCode: string) {
return CircleDollarSign
}
function OptionSection({
children,
className,
icon: Icon,
label,
}: {
children: React.ReactNode
className?: string
icon: ComponentType<{ className?: string }>
label: string
}) {
return (
<div className={cn('min-w-0', className)}>
<div className={FIELD_LABEL_CLASS}>
<Icon className="h-design-10 w-design-10" />
<span>{label}</span>
</div>
{children}
</div>
)
}
function ChoiceButton({
active,
disabled,
icon: Icon,
label,
onClick,
}: {
active: boolean
disabled?: boolean
icon?: ComponentType<{ className?: string }>
label: string
onClick: () => void
}) {
return (
<button
type="button"
aria-pressed={active}
disabled={disabled}
onClick={onClick}
className={cn(
'flex h-design-36 w-full min-w-0 cursor-pointer items-center justify-center gap-design-4 rounded-[calc(var(--design-unit)*5)] border px-design-6 py-design-4 [font-size:calc(var(--design-unit)*9)] font-semibold leading-tight transition-[border-color,background-color,box-shadow,color,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/45',
active
? 'border-[#FFE229]/60 bg-[linear-gradient(180deg,rgba(98,75,21,0.88),rgba(51,39,15,0.96))] text-[#FFF4B6] shadow-[0_0_calc(var(--design-unit)*10)_rgba(255,226,41,0.12),inset_0_0_calc(var(--design-unit)*8)_rgba(255,226,41,0.08)]'
: 'border-[rgba(126,234,244,0.18)] bg-[rgba(2,15,26,0.78)] text-[#D7FBFF] hover:border-[rgba(170,247,255,0.48)] hover:bg-[rgba(8,36,50,0.88)]',
disabled &&
'cursor-not-allowed opacity-45 hover:border-[rgba(126,234,244,0.18)] hover:bg-[rgba(2,15,26,0.78)]',
)}
>
{Icon ? <Icon className="h-design-11 w-design-11 shrink-0" /> : null}
<span className="min-w-0 truncate">{label}</span>
</button>
)
}
function EmptyChoice({ label }: { label: string }) {
return (
<div className="flex h-design-36 w-full min-w-0 items-center justify-center rounded-[calc(var(--design-unit)*5)] border border-[rgba(126,234,244,0.12)] bg-[rgba(2,15,26,0.48)] px-design-6 py-design-4 text-center [font-size:calc(var(--design-unit)*9)] font-semibold leading-tight text-[#6FAAB2]">
{label}
</div>
)
}
function BankLogo({ bank }: { bank: FinanceWithdrawBank }) {
if (bank.logo.trim()) {
return (
<img
src={bank.logo}
alt={bank.label}
className="h-design-22 w-design-22 rounded-[calc(var(--design-unit)*4)] object-contain"
/>
)
}
return <Landmark className="h-design-16 w-design-16 text-[#8DE4EA]" />
}
function BankButton({
active,
bank,
onClick,
}: {
active: boolean
bank: FinanceWithdrawBank
onClick: () => void
}) {
return (
<button
type="button"
aria-pressed={active}
onClick={onClick}
className={cn(
'flex min-h-design-54 w-full min-w-0 cursor-pointer items-center gap-design-6 rounded-[calc(var(--design-unit)*6)] border px-design-7 py-design-6 text-left transition-[border-color,background-color,box-shadow,color,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/45',
active
? 'border-[#FFE229]/60 bg-[linear-gradient(180deg,rgba(98,75,21,0.88),rgba(51,39,15,0.96))] text-[#FFF4B6] shadow-[0_0_calc(var(--design-unit)*10)_rgba(255,226,41,0.12),inset_0_0_calc(var(--design-unit)*8)_rgba(255,226,41,0.08)]'
: 'border-[rgba(126,234,244,0.18)] bg-[rgba(2,15,26,0.78)] text-[#D7FBFF] hover:border-[rgba(170,247,255,0.48)] hover:bg-[rgba(8,36,50,0.88)]',
)}
>
<span className="flex h-design-30 w-design-30 shrink-0 items-center justify-center rounded-[calc(var(--design-unit)*5)] border border-[rgba(121,219,229,0.2)] bg-[rgba(10,39,52,0.72)]">
<BankLogo bank={bank} />
</span>
<span className="min-w-0 truncate text-design-11 font-semibold leading-tight">
{bank.label}
</span>
</button>
)
}
function MobileTopup() {
const { t } = useTranslation()
const vm = useTopupVm()
@@ -112,11 +215,11 @@ function MobileTopup() {
}
return (
<div className="flex h-full min-h-0 w-full px-design-8 pb-design-8 text-[#D9FFFF]">
<div className="flex h-full min-h-0 w-full px-design-6 pb-design-6 text-[#D9FFFF]">
<div
className={cn(
PANEL_CLASS,
'flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden p-design-8',
'flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden p-design-6',
)}
>
{vm.isLoading ? (
@@ -129,169 +232,119 @@ function MobileTopup() {
{t('gameDesktop.topup.tier.failed')}
</div>
) : (
<div className="flex h-full min-h-0 flex-col gap-design-7">
<div className={FILTER_BAR_CLASS}>
<div className="grid grid-cols-2 gap-design-6">
<div className="col-span-2 min-w-0">
<label
htmlFor="mobile-topup-channel"
className={FIELD_LABEL_CLASS}
>
<CreditCard className="h-design-10 w-design-10" />
<span>{t('gameDesktop.topup.flow.channelTitle')}</span>
</label>
<Select
value={vm.selectedPayChannelCode || undefined}
onValueChange={vm.setSelectedPayChannelCode}
disabled={vm.payChannels.length === 0}
>
<SelectTrigger
id="mobile-topup-channel"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t('gameDesktop.topup.flow.channelTitle')}
<div className="flex h-full min-h-0 flex-col gap-design-6">
<div
className={cn(
FILTER_BAR_CLASS,
'min-h-0 flex-1 overflow-y-auto overscroll-contain',
)}
>
<div className="flex flex-col gap-design-7">
<OptionSection
icon={CreditCard}
label={t('gameDesktop.topup.flow.channelTitle')}
>
<div className="grid grid-cols-2 gap-design-6">
{vm.payChannels.length === 0 ? (
<EmptyChoice
label={t('gameDesktop.topup.flow.channelTitle')}
/>
</SelectTrigger>
<SelectContent className="max-h-design-200">
{vm.payChannels.map((channel) => (
<SelectItem
) : (
vm.payChannels.map((channel) => (
<ChoiceButton
key={channel.code}
value={channel.code}
className="py-design-6 text-design-10"
>
{channel.name}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
active={channel.code === vm.selectedPayChannelCode}
label={channel.name}
onClick={() =>
vm.setSelectedPayChannelCode(channel.code)
}
/>
))
)}
</div>
</OptionSection>
<div className="min-w-0">
<label
htmlFor="mobile-topup-currency"
className={FIELD_LABEL_CLASS}
>
<CircleDollarSign className="h-design-10 w-design-10" />
<span>{t('gameDesktop.topup.flow.currencyTitle')}</span>
</label>
<Select
value={vm.selectedCurrencyCode || undefined}
onValueChange={vm.setSelectedCurrencyCode}
disabled={
!vm.selectedPayChannel ||
vm.selectedPayChannel.currencyCodes.length === 0
}
>
<SelectTrigger
id="mobile-topup-currency"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t('gameDesktop.topup.flow.currencyTitle')}
/>
</SelectTrigger>
<SelectContent>
{vm.selectedPayChannel?.currencyCodes.map(
<OptionSection
icon={CircleDollarSign}
label={t('gameDesktop.topup.flow.currencyTitle')}
>
<div className="grid grid-cols-3 gap-design-6">
{vm.selectedPayChannel?.currencyCodes.length ? (
vm.selectedPayChannel.currencyCodes.map(
(currencyCode) => (
<SelectItem
<ChoiceButton
key={currencyCode}
value={currencyCode}
className="py-design-6 text-design-10"
>
{currencyCode}
</SelectItem>
active={currencyCode === vm.selectedCurrencyCode}
label={currencyCode}
onClick={() =>
vm.setSelectedCurrencyCode(currencyCode)
}
/>
),
)}
</SelectContent>
</Select>
</div>
<div className="min-w-0">
<label
htmlFor="mobile-topup-method"
className={FIELD_LABEL_CLASS}
>
<CreditCard className="h-design-10 w-design-10" />
<span>{t('gameDesktop.topup.flow.methodTitle')}</span>
</label>
<Select
value={vm.selectedPaymentMethodCode || undefined}
onValueChange={vm.setSelectedPaymentMethodCode}
disabled={vm.methods.length === 0}
>
<SelectTrigger
id="mobile-topup-method"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t('gameDesktop.topup.flow.methodTitle')}
)
) : (
<EmptyChoice
label={t('gameDesktop.topup.flow.currencyTitle')}
/>
</SelectTrigger>
<SelectContent>
{vm.methods.map((method) => {
)}
</div>
</OptionSection>
<OptionSection
icon={CreditCard}
label={t('gameDesktop.topup.flow.methodTitle')}
>
<div className="grid grid-cols-2 gap-design-6">
{vm.methods.length === 0 ? (
<EmptyChoice
label={t('gameDesktop.topup.flow.methodTitle')}
/>
) : (
vm.methods.map((method) => {
const MethodIcon = getMethodIcon(method.gatewayCode)
return (
<SelectItem
<ChoiceButton
key={method.code}
value={method.code}
className="py-design-6 text-design-10"
>
<span className="flex items-center gap-design-5">
<MethodIcon className="h-design-10 w-design-10" />
<span>{getPaymentMethodLabel(method)}</span>
</span>
</SelectItem>
active={
method.code === vm.selectedPaymentMethodCode
}
icon={MethodIcon}
label={getPaymentMethodLabel(method)}
onClick={() =>
vm.setSelectedPaymentMethodCode(method.code)
}
/>
)
})}
</SelectContent>
</Select>
</div>
})
)}
</div>
</OptionSection>
<div className="col-span-2 min-w-0">
<label
htmlFor="mobile-topup-bank"
className={FIELD_LABEL_CLASS}
>
<Landmark className="h-design-10 w-design-10" />
<span>{t('gameDesktop.topup.flow.bankTitle')}</span>
</label>
<Select
value={vm.selectedBankCode || undefined}
onValueChange={vm.setSelectedBankCode}
disabled={vm.banks.length === 0}
>
<SelectTrigger
id="mobile-topup-bank"
className={SELECT_TRIGGER_CLASS}
>
<SelectValue
placeholder={t(
vm.banks.length === 0
? 'gameDesktop.topup.flow.noBank'
: 'gameDesktop.topup.flow.bankPlaceholder',
)}
/>
</SelectTrigger>
<SelectContent className="max-h-design-200">
{vm.banks.map((bank) => (
<SelectItem
<OptionSection
icon={Landmark}
label={t('gameDesktop.topup.flow.bankTitle')}
>
<div className="grid grid-cols-2 gap-design-6">
{vm.banks.length === 0 ? (
<EmptyChoice label={t('gameDesktop.topup.flow.noBank')} />
) : (
vm.banks.map((bank) => (
<BankButton
key={bank.code}
value={bank.code}
className="py-design-6 text-design-10"
>
{bank.label}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
active={bank.code === vm.selectedBankCode}
bank={bank}
onClick={() => vm.setSelectedBankCode(bank.code)}
/>
))
)}
</div>
</OptionSection>
</div>
</div>
<div className="flex min-h-0 flex-1 flex-col rounded-[calc(var(--design-unit)*7)] border border-[rgba(126,234,244,0.13)] bg-[rgba(2,13,23,0.42)] p-design-7">
<div className="mb-design-6 flex shrink-0 items-center justify-between gap-design-6">
<div className="flex max-h-design-128 shrink-0 flex-col rounded-[calc(var(--design-unit)*7)] border border-[rgba(126,234,244,0.13)] bg-[rgba(2,13,23,0.42)] p-design-6">
<div className="mb-design-4 flex shrink-0 items-center justify-between gap-design-6">
<div className="min-w-0">
<div className="text-design-12 font-semibold text-[#E8FDFF]">
{t('gameDesktop.topup.tier.title')}
@@ -309,11 +362,11 @@ function MobileTopup() {
</div>
{vm.filteredTiers.length === 0 ? (
<div className="flex min-h-0 flex-1 items-center justify-center rounded-[calc(var(--design-unit)*6)] border border-[rgba(103,227,239,0.16)] bg-[rgba(6,24,35,0.44)] px-design-12 text-center text-design-14 text-[#8FDDE6]">
<div className="flex h-design-64 items-center justify-center rounded-[calc(var(--design-unit)*6)] border border-[rgba(103,227,239,0.16)] bg-[rgba(6,24,35,0.44)] px-design-12 text-center text-design-12 text-[#8FDDE6]">
{t('gameDesktop.topup.tier.empty')}
</div>
) : (
<div className="grid min-h-0 min-w-0 grid-cols-2 content-start gap-design-7 overflow-y-auto pr-design-1">
<div className="flex min-w-0 gap-design-5 overflow-x-auto pb-design-1">
{vm.filteredTiers.map((tier) => (
<button
key={tier.id}
@@ -322,28 +375,28 @@ function MobileTopup() {
void handleCreateDeposit(tier)
}}
className={cn(
'relative min-h-design-118 cursor-pointer overflow-hidden rounded-[calc(var(--design-unit)*6)] border border-[rgba(126,234,244,0.16)] bg-[linear-gradient(180deg,rgba(8,36,50,0.88),rgba(3,18,29,0.96))] px-design-8 py-design-8 text-left transition-[border-color,background-color,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/50',
'relative h-design-76 w-design-136 shrink-0 cursor-pointer overflow-hidden rounded-[calc(var(--design-unit)*6)] border border-[rgba(126,234,244,0.16)] bg-[linear-gradient(180deg,rgba(8,36,50,0.88),rgba(3,18,29,0.96))] px-design-7 py-design-6 text-left transition-[border-color,background-color,filter] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#7CE3E8]/50',
createDepositMutation.isPending
? 'cursor-wait opacity-80'
: 'hover:border-[rgba(255,226,41,0.5)] active:brightness-90',
)}
>
<div className="flex items-start justify-between gap-design-6">
<div className="flex items-start justify-between gap-design-5">
<div className="min-w-0">
<div className="truncate text-design-10 uppercase tracking-[0.04em] text-[#65B2BA]">
<div className="truncate text-design-8 uppercase tracking-[0.04em] text-[#65B2BA]">
{tier.title}
</div>
<div className="pt-design-6 text-design-20 font-semibold leading-none text-[#FFE229]">
<div className="pt-design-4 text-design-17 font-semibold leading-none text-[#FFE229]">
{formatNumber(tier.amount)}
</div>
</div>
<div className="shrink-0 rounded-full border border-[rgba(121,219,229,0.24)] bg-[rgba(10,39,52,0.72)] px-design-5 py-[2px] text-design-8 leading-none text-[#7CDDE7]">
<div className="shrink-0 rounded-full border border-[rgba(121,219,229,0.24)] bg-[rgba(10,39,52,0.72)] px-design-4 py-[2px] text-design-7 leading-none text-[#7CDDE7]">
{tier.currency ?? 'FIAT'}
</div>
</div>
<div className="mt-design-7 rounded-[calc(var(--design-unit)*5)] bg-[rgba(255,226,41,0.06)] px-design-6 py-design-5">
<div className="flex items-center justify-between gap-design-5 text-design-9">
<div className="mt-design-4 rounded-[calc(var(--design-unit)*5)] bg-[rgba(255,226,41,0.06)] px-design-5 py-design-3">
<div className="flex items-center justify-between gap-design-4 text-design-8">
<span className="text-[#74B8C0]">
{t('gameDesktop.topup.tier.bonus')}
</span>

View File

@@ -320,9 +320,12 @@ function MobileWithdraw() {
if (
vm.amountRequiredError ||
vm.amountExceedsBalance ||
vm.amountBelowPaymentMinimum ||
vm.amountAbovePaymentMaximum ||
vm.holderNameError ||
vm.bankAccountError ||
vm.paymentChannelCodeError ||
vm.paymentTypeError ||
vm.bankCodeError ||
vm.receiverEmailError ||
vm.receiverPhoneError
@@ -335,6 +338,7 @@ function MobileWithdraw() {
bank_code: vm.bankCode,
channel_code: vm.paymentChannelCode,
idempotency_key: String(Date.now()),
payment_type: vm.paymentType,
receive_account: vm.bankAccount.trim(),
receiver_email: vm.receiverEmail.trim(),
receiver_mobile: vm.receiverPhone.trim(),
@@ -383,6 +387,20 @@ function MobileWithdraw() {
{t('gameDesktop.withdraw.errors.amountExceedsBalance')}
</div>
) : null}
{hasSubmitted && vm.amountBelowPaymentMinimum ? (
<div className="pl-design-2 text-design-10 text-[#F44F4F]">
{t('gameDesktop.withdraw.errors.amountBelowPaymentMinimum', {
amount: vm.paymentMinimumAmountLabel,
})}
</div>
) : null}
{hasSubmitted && vm.amountAbovePaymentMaximum ? (
<div className="pl-design-2 text-design-10 text-[#F44F4F]">
{t('gameDesktop.withdraw.errors.amountAbovePaymentMaximum', {
amount: vm.paymentMaximumAmountLabel,
})}
</div>
) : null}
</WithdrawField>
<div className="grid min-w-0 grid-cols-3 gap-design-5">
@@ -399,31 +417,6 @@ function MobileWithdraw() {
))}
</div>
<WithdrawField
label={t('gameDesktop.withdraw.fields.currencyType')}
>
<Select
value={vm.currencyCode}
onValueChange={vm.setCurrencyCode}
>
<SelectTrigger
className="h-design-30 w-full rounded-[calc(var(--design-unit)*5)] border-[rgba(103,227,239,0.3)] bg-[linear-gradient(180deg,rgba(12,61,72,0.82),rgba(6,28,39,0.9))] px-design-8 text-left !text-design-12 text-[#A5EDF4] shadow-[inset_0_0_calc(var(--design-unit)*10)_rgba(94,237,255,0.08)] data-[size=default]:h-design-30 data-[placeholder]:text-[rgba(109,170,176,0.55)] [&_svg]:h-design-14 [&_svg]:w-design-14 [&_svg]:text-[#79DFEA]"
aria-label={t('gameDesktop.withdraw.currencySelection')}
>
<SelectValue
placeholder={t('gameDesktop.withdraw.selectCurrency')}
/>
</SelectTrigger>
<SelectContent>
{vm.config.currencies.map((option: FinanceCurrencyConfig) => (
<SelectItem key={option.code} value={option.code}>
{option.label}
</SelectItem>
))}
</SelectContent>
</Select>
</WithdrawField>
<WithdrawField
label={t('gameDesktop.withdraw.fields.paymentChannel')}
>
@@ -453,6 +446,72 @@ function MobileWithdraw() {
</div>
</WithdrawField>
<WithdrawField label={t('gameDesktop.withdraw.fields.paymentType')}>
<div className="flex w-full flex-col gap-design-3">
<Select
value={vm.paymentType || undefined}
onValueChange={vm.setPaymentType}
disabled={vm.availablePaymentMethods.length === 0}
>
<SelectTrigger
className={cn(
'h-design-30 w-full rounded-[calc(var(--design-unit)*5)] bg-[linear-gradient(180deg,rgba(12,61,72,0.82),rgba(6,28,39,0.9))] px-design-8 text-left !text-design-12 text-[#A5EDF4] shadow-[inset_0_0_calc(var(--design-unit)*10)_rgba(94,237,255,0.08)] data-[size=default]:h-design-30 data-[placeholder]:text-[rgba(109,170,176,0.55)] [&_svg]:h-design-14 [&_svg]:w-design-14 [&_svg]:text-[#79DFEA]',
hasSubmitted && vm.paymentTypeError
? 'border-[#B93F44]'
: 'border-[rgba(103,227,239,0.3)]',
)}
aria-label={t('gameDesktop.withdraw.fields.paymentType')}
>
<SelectValue
placeholder={t(
'gameDesktop.withdraw.placeholders.paymentType',
)}
/>
</SelectTrigger>
<SelectContent>
{vm.availablePaymentMethods.map((method) => (
<SelectItem key={method.code} value={method.code}>
{method.name}
</SelectItem>
))}
</SelectContent>
</Select>
{hasSubmitted && vm.paymentTypeError ? (
<div className="pl-design-2 text-design-10 text-[#F44F4F]">
{t('gameDesktop.withdraw.errors.paymentTypeRequired')}
</div>
) : null}
</div>
</WithdrawField>
<WithdrawField
label={t('gameDesktop.withdraw.fields.currencyType')}
>
<Select
value={vm.currencyCode || undefined}
onValueChange={vm.setCurrencyCode}
disabled={vm.availableCurrencies.length === 0}
>
<SelectTrigger
className="h-design-30 w-full rounded-[calc(var(--design-unit)*5)] border-[rgba(103,227,239,0.3)] bg-[linear-gradient(180deg,rgba(12,61,72,0.82),rgba(6,28,39,0.9))] px-design-8 text-left !text-design-12 text-[#A5EDF4] shadow-[inset_0_0_calc(var(--design-unit)*10)_rgba(94,237,255,0.08)] data-[size=default]:h-design-30 data-[placeholder]:text-[rgba(109,170,176,0.55)] [&_svg]:h-design-14 [&_svg]:w-design-14 [&_svg]:text-[#79DFEA]"
aria-label={t('gameDesktop.withdraw.currencySelection')}
>
<SelectValue
placeholder={t('gameDesktop.withdraw.selectCurrency')}
/>
</SelectTrigger>
<SelectContent>
{vm.availableCurrencies.map(
(option: FinanceCurrencyConfig) => (
<SelectItem key={option.code} value={option.code}>
{option.label}
</SelectItem>
),
)}
</SelectContent>
</Select>
</WithdrawField>
<WithdrawField label={t('gameDesktop.withdraw.fields.bankCode')}>
<div className="flex w-full flex-col gap-design-3">
<Select

View File

@@ -26,6 +26,20 @@ function getChannelCurrencyCodes(channel: FinancePayChannel | null) {
return channel?.currencyCodes ?? []
}
function toOptionalNumber(value: string) {
if (value.trim().length === 0) {
return null
}
const numericValue = Number(value)
return Number.isFinite(numericValue) ? numericValue : null
}
function getTierPaymentAmount(tier: DepositTierItem) {
return tier.payAmount > 0 ? tier.payAmount : tier.amount
}
export function useTopupVm() {
const depositWithdrawConfigQuery = useDepositWithdrawConfig()
const tierListQuery = useDepositTierList()
@@ -74,9 +88,16 @@ export function useTopupVm() {
const banks = useMemo(
() =>
(selectedPayChannel?.depositBanks ?? []).filter(
(bank) => bank.currencyCode === selectedCurrencyCode,
(bank) =>
bank.currencyCode === selectedCurrencyCode &&
Boolean(selectedPaymentMethod?.gatewayCode) &&
bank.paymentTypes.includes(selectedPaymentMethod.gatewayCode),
),
[selectedCurrencyCode, selectedPayChannel?.depositBanks],
[
selectedCurrencyCode,
selectedPayChannel?.depositBanks,
selectedPaymentMethod?.gatewayCode,
],
)
const [selectedBankCode, setSelectedBankCode] = useState(
() => banks[0]?.code ?? '',
@@ -86,20 +107,41 @@ export function useTopupVm() {
banks.find((bank) => bank.code === selectedBankCode) ?? banks[0] ?? null,
[banks, selectedBankCode],
)
const selectedPaymentMinimumAmount = selectedPaymentMethod
? toOptionalNumber(selectedPaymentMethod.minimumAmount)
: null
const selectedPaymentMaximumAmount = selectedPaymentMethod
? toOptionalNumber(selectedPaymentMethod.maximumAmount)
: null
const tiers = tierListQuery.data ?? []
const filteredTiers = useMemo(
() =>
tiers.filter((tier) => {
const tierChannelCode = getTierChannelCode(tier)
const tierPaymentAmount = getTierPaymentAmount(tier)
const matchesChannel =
selectedPayChannel === null ||
tierChannelCode === selectedPayChannel.code
const matchesCurrency =
!selectedCurrencyCode || tier.currency === selectedCurrencyCode
const matchesMinimum =
selectedPaymentMinimumAmount === null ||
tierPaymentAmount >= selectedPaymentMinimumAmount
const matchesMaximum =
selectedPaymentMaximumAmount === null ||
tierPaymentAmount <= selectedPaymentMaximumAmount
return matchesChannel && matchesCurrency
return (
matchesChannel && matchesCurrency && matchesMinimum && matchesMaximum
)
}),
[selectedCurrencyCode, selectedPayChannel, tiers],
[
selectedCurrencyCode,
selectedPayChannel,
selectedPaymentMaximumAmount,
selectedPaymentMinimumAmount,
tiers,
],
)
useEffect(() => {

View File

@@ -1,7 +1,6 @@
import { useCallback, useEffect, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
import {
DEFAULT_CURRENCY_CODE,
DEFAULT_WITHDRAW_CONFIG,
QUICK_FIAT_AMOUNTS,
WITHDRAW_EMAIL_PATTERN,
@@ -41,15 +40,34 @@ function getCurrencyExchangeRate(
return configuredRate && configuredRate > 0 ? configuredRate : fallbackRate
}
function getActiveCurrencyCode(
currencies: DepositWithdrawConfig['currencies'],
selectedCurrencyCode: string,
function toOptionalNumber(value: string) {
if (value.trim().length === 0) {
return null
}
const numericValue = Number(value)
return Number.isFinite(numericValue) ? numericValue : null
}
function getChannelCurrencies(
config: DepositWithdrawConfig,
channel: DepositWithdrawConfig['withdraw']['payChannels'][number] | null,
) {
return (
currencies.find((item) => item.code === selectedCurrencyCode) ??
currencies[0] ??
DEFAULT_WITHDRAW_CONFIG.currencies[0]
if (!channel || channel.currencyCodes.length === 0) {
return []
}
const currencyMap = new Map(
config.currencies.map((currency) => [currency.code, currency]),
)
return channel.currencyCodes
.map((currencyCode) => currencyMap.get(currencyCode))
.filter(
(currency): currency is DepositWithdrawConfig['currencies'][number] =>
Boolean(currency),
)
}
function getNormalizedConfig(
@@ -105,53 +123,73 @@ export function useWithdrawVm() {
const [amount, setAmountState] = useState(0)
const [hasInitializedAmount, setHasInitializedAmount] = useState(false)
const [currencyCode, setCurrencyCode] = useState(
config.currencies[0]?.code ?? DEFAULT_CURRENCY_CODE,
)
const [currencyCode, setCurrencyCode] = useState('')
const [paymentChannelCode, setPaymentChannelCode] = useState('')
const [paymentType, setPaymentType] = useState('')
const [bankCode, setBankCode] = useState('')
const [holderName, setHolderName] = useState('')
const [bankAccount, setBankAccount] = useState('')
const [receiverEmail, setReceiverEmail] = useState('')
const [receiverPhone, setReceiverPhone] = useState('')
const selectedCurrency = getActiveCurrencyCode(
config.currencies,
currencyCode,
)
const selectedRate = selectedCurrency.withdrawCoinsPerFiatValue || 1
const selectedExchangeRate = getCurrencyExchangeRate(
config,
selectedCurrency.code,
selectedRate,
)
const sortedPayChannels = useMemo(
() =>
[
...(config.withdraw.payChannels.length > 0
? config.withdraw.payChannels
: config.payChannels),
]
[...config.withdraw.payChannels]
.filter((channel) => channel.status === 1)
.sort((left, right) => left.sort - right.sort),
[config.payChannels, config.withdraw.payChannels],
)
const sortedBanks = useMemo(
() =>
[...config.withdraw.banks]
.filter(
(bank) =>
bank.status === 1 &&
(!bank.currencyCode || bank.currencyCode === selectedCurrency.code),
)
.sort((left, right) => left.sort - right.sort),
[config.withdraw.banks, selectedCurrency.code],
[config.withdraw.payChannels],
)
const availableBalance = Number(currentUser?.coin ?? 0)
const maxWithdrawAmount = Math.max(0, Math.floor(availableBalance))
const selectedPaymentChannel =
sortedPayChannels.find((channel) => channel.code === paymentChannelCode) ??
null
const availablePaymentMethods = useMemo(
() => selectedPaymentChannel?.methods ?? [],
[selectedPaymentChannel],
)
const selectedPaymentMethod =
availablePaymentMethods.find((method) => method.code === paymentType) ??
null
const availableCurrencies = useMemo(
() => getChannelCurrencies(config, selectedPaymentChannel),
[config, selectedPaymentChannel],
)
const selectedCurrency =
availableCurrencies.find((item) => item.code === currencyCode) ?? null
const selectedCurrencyCode = selectedCurrency?.code ?? ''
const selectedRate = selectedCurrency?.withdrawCoinsPerFiatValue ?? 0
const selectedExchangeRate = selectedCurrency
? getCurrencyExchangeRate(config, selectedCurrency.code, selectedRate || 1)
: 0
const convertedFiatAmount =
selectedExchangeRate > 0 ? amount * selectedExchangeRate : 0
const selectedPaymentMinimumAmount = selectedPaymentMethod
? toOptionalNumber(selectedPaymentMethod.minimumAmount)
: null
const selectedPaymentMaximumAmount = selectedPaymentMethod
? toOptionalNumber(selectedPaymentMethod.maximumAmount)
: null
const amountBelowPaymentMinimum =
amount > 0 &&
selectedPaymentMinimumAmount !== null &&
convertedFiatAmount < selectedPaymentMinimumAmount
const amountAbovePaymentMaximum =
amount > 0 &&
selectedPaymentMaximumAmount !== null &&
convertedFiatAmount > selectedPaymentMaximumAmount
const sortedBanks = useMemo(
() =>
[...config.withdraw.banks]
.filter(
(bank) =>
bank.status === 1 &&
selectedCurrencyCode.length > 0 &&
(!bank.currencyCode || bank.currencyCode === selectedCurrencyCode),
)
.sort((left, right) => left.sort - right.sort),
[config.withdraw.banks, selectedCurrencyCode],
)
const setAmount = useCallback(
(nextAmount: number) => {
setAmountState(
@@ -161,20 +199,6 @@ export function useWithdrawVm() {
[maxWithdrawAmount],
)
useEffect(() => {
if (
selectedCurrency &&
selectedCurrency.code !== currencyCode &&
config.currencies.some((item) => item.code === currencyCode)
) {
return
}
if (selectedCurrency && selectedCurrency.code !== currencyCode) {
setCurrencyCode(selectedCurrency.code)
}
}, [config.currencies, currencyCode, selectedCurrency])
useEffect(() => {
const firstAvailablePayChannel = sortedPayChannels[0]
@@ -195,6 +219,42 @@ export function useWithdrawVm() {
}
}, [paymentChannelCode, sortedPayChannels])
useEffect(() => {
if (availablePaymentMethods.length === 0) {
if (paymentType) {
setPaymentType('')
}
return
}
const hasSelectedAvailablePaymentMethod = availablePaymentMethods.some(
(method) => method.code === paymentType,
)
if (!hasSelectedAvailablePaymentMethod) {
setPaymentType(availablePaymentMethods[0].code)
}
}, [availablePaymentMethods, paymentType])
useEffect(() => {
if (availableCurrencies.length === 0) {
if (currencyCode) {
setCurrencyCode('')
}
return
}
const hasSelectedAvailableCurrency = availableCurrencies.some(
(currency) => currency.code === currencyCode,
)
if (!hasSelectedAvailableCurrency) {
setCurrencyCode(availableCurrencies[0].code)
}
}, [availableCurrencies, currencyCode])
useEffect(() => {
if (sortedBanks.length === 0) {
if (bankCode) {
@@ -229,6 +289,10 @@ export function useWithdrawVm() {
}, [amount, maxWithdrawAmount, setAmount])
const quickAmounts = useMemo(() => {
if (!selectedCurrency || selectedExchangeRate <= 0) {
return []
}
return QUICK_FIAT_AMOUNTS.map((fiatAmount) => ({
diamonds: Math.min(
maxWithdrawAmount,
@@ -237,26 +301,33 @@ export function useWithdrawVm() {
id: `quick-${selectedCurrency.code}-${fiatAmount}`,
preview: `${selectedCurrency.code} ${formatNumber(locale, fiatAmount)}`,
}))
}, [locale, maxWithdrawAmount, selectedCurrency.code, selectedExchangeRate])
}, [locale, maxWithdrawAmount, selectedCurrency, selectedExchangeRate])
const resetForm = useCallback(() => {
const nextCurrencyCode = config.currencies[0]?.code ?? DEFAULT_CURRENCY_CODE
const nextCurrency = getActiveCurrencyCode(
config.currencies,
nextCurrencyCode,
)
const nextExchangeRate = getCurrencyExchangeRate(
config,
nextCurrency.code,
nextCurrency.withdrawCoinsPerFiatValue || 1,
)
const nextPaymentChannelCode = sortedPayChannels[0]?.code ?? ''
const nextPaymentChannel =
sortedPayChannels.find(
(channel) => channel.code === nextPaymentChannelCode,
) ?? null
const nextCurrency =
getChannelCurrencies(config, nextPaymentChannel)[0] ?? null
const nextExchangeRate = nextCurrency
? getCurrencyExchangeRate(
config,
nextCurrency.code,
nextCurrency.withdrawCoinsPerFiatValue || 1,
)
: 0
setAmountState(
getInitialWithdrawAmount(nextExchangeRate, maxWithdrawAmount),
nextExchangeRate > 0
? getInitialWithdrawAmount(nextExchangeRate, maxWithdrawAmount)
: 0,
)
setHasInitializedAmount(true)
setCurrencyCode(nextCurrencyCode)
setPaymentChannelCode(sortedPayChannels[0]?.code ?? '')
setCurrencyCode(nextCurrency?.code ?? '')
setPaymentChannelCode(nextPaymentChannelCode)
setPaymentType(nextPaymentChannel?.methods[0]?.code ?? '')
setBankCode('')
setHolderName('')
setBankAccount('')
@@ -264,37 +335,41 @@ export function useWithdrawVm() {
setReceiverPhone('')
}, [config, maxWithdrawAmount, sortedPayChannels])
const selectedCurrencyPreview = useMemo(
() => ({
currencyCode: selectedCurrency.code,
currencyLabel: selectedCurrency.label,
const selectedCurrencyPreview = useMemo(() => {
const previewCurrencyCode = selectedCurrency?.code ?? '--'
return {
currencyCode: selectedCurrency?.code ?? '',
currencyLabel: selectedCurrency?.label ?? '',
exchangeRateLabel: t('gameDesktop.withdraw.preview.exchangeRate', {
currency: selectedCurrency.code,
currency: previewCurrencyCode,
}),
exchangeRateValue: `1:${formatNumber(locale, selectedExchangeRate)}`,
exchangeRateValue:
selectedCurrency && selectedExchangeRate > 0
? `1:${formatNumber(locale, selectedExchangeRate)}`
: '--',
convertibleLabel: t('gameDesktop.withdraw.preview.convertible', {
currency: selectedCurrency.code,
currency: previewCurrencyCode,
}),
convertibleValue: `${formatNumber(
locale,
selectedExchangeRate > 0 ? amount * selectedExchangeRate : 0,
)} ${selectedCurrency.code}`,
}),
[
amount,
locale,
selectedCurrency.code,
selectedCurrency.label,
selectedExchangeRate,
t,
],
)
convertibleValue:
selectedCurrency && selectedExchangeRate > 0
? `${formatNumber(
locale,
amount * selectedExchangeRate,
)} ${selectedCurrency.code}`
: '--',
}
}, [amount, locale, selectedCurrency, selectedExchangeRate, t])
return {
amount,
amountAbovePaymentMaximum,
amountBelowPaymentMinimum,
amountExceedsBalance: amount > maxWithdrawAmount,
amountRequiredError: amount <= 0,
availableBalance,
availableCurrencies,
availablePaymentMethods,
bankAccount,
bankAccountError: bankAccount.trim().length === 0,
bankCode,
@@ -308,6 +383,20 @@ export function useWithdrawVm() {
maxWithdrawAmount,
paymentChannelCode,
paymentChannelCodeError: paymentChannelCode.trim().length === 0,
paymentMaximumAmountLabel:
selectedPaymentMaximumAmount !== null && selectedCurrency
? `${formatNumber(locale, selectedPaymentMaximumAmount)} ${
selectedCurrency.code
}`
: '',
paymentMinimumAmountLabel:
selectedPaymentMinimumAmount !== null && selectedCurrency
? `${formatNumber(locale, selectedPaymentMinimumAmount)} ${
selectedCurrency.code
}`
: '',
paymentType,
paymentTypeError: paymentType.trim().length === 0,
quickAmounts,
receiverEmail,
receiverEmailError: !isValidEmail(receiverEmail),
@@ -316,6 +405,7 @@ export function useWithdrawVm() {
selectedCurrency,
selectedCurrencyPreview,
selectedPaymentChannel,
selectedPaymentMethod,
selectedRate,
resetForm,
setAmount,
@@ -324,6 +414,7 @@ export function useWithdrawVm() {
setCurrencyCode,
setHolderName,
setPaymentChannelCode,
setPaymentType,
setReceiverEmail,
setReceiverPhone,
sortedBanks,

View File

@@ -214,8 +214,134 @@ export default {
},
rules: {
title: 'Game Rules',
content:
'1. Basic Gameplay\n1) After each round starts, players may select one or more numbers on the board to place bets.\n2) After betting closes, the system enters the draw phase and settles rewards based on the round result.\n3) Different chip levels correspond to different bet amounts, subject to the current table limits and configuration.\n\n2. Betting Notes\n1) Bets can only be submitted during the betting phase.\n2) Before confirming, please verify your selected numbers, chip amount, and total bet.\n3) If your balance is insufficient, the round is no longer valid, or betting has closed, the request will be rejected.\n\n3. Draw and Settlement\n1) The final displayed draw result is the valid outcome.\n2) Hit rules, odds, payouts, and streak performance are settled in real time according to the current room configuration.\n3) In case of network fluctuation, please refer to the re-synced official data.\n\n4. Additional Notes\n1) Please manage your play time responsibly.\n2) Any abnormal behavior intended to interfere with the system, exploit rewards, or bypass risk control is strictly prohibited.\n3) The platform reserves the right to review orders, payouts, and account status in exceptional situations.',
content: [
'## 36 Zihua · Gameplay Guide',
'',
'### 1. Game Introduction',
'',
'**36 Zihua** is a fast-paced number guessing game with **one round every 30 seconds**. Each round, the system draws **one winning number** from **36 symbols** (Rat, Ox, Tiger… Azure Dragon, White Tiger, Vermilion Bird, Black Tortoise, and more). During the betting window, players pick numbers and place bets. Guess correctly to win prizes. Win consecutive rounds to increase your rewards — **10 wins in a row** can earn you the **Million Jackpot**.',
'',
'---',
'',
'### 2. How to Play',
'',
'Each round lasts about **30 seconds**:',
'',
'**Step 1 — Betting window (020 seconds)**',
'Pick numbers on the 36-grid (up to **5 numbers** by default), choose a chip amount (e.g. 💎1, 5, 10, 25, 50, 100), then confirm your bet. Your balance is deducted and the bet is placed.',
'',
'**Step 2 — Lock (at 20 seconds)**',
'No more bets are accepted. Any bet placed after lock is invalid.',
'',
'**Step 3 — Draw & settlement (2030 seconds)**',
'The winning number is announced and prizes are paid according to the reward rules.',
'',
'**Step 4 — Next round**',
'After settlement, the next round begins automatically.',
'',
'---',
'',
'### 3. Winning Rules',
'',
'- Only **one** winning number is drawn each round (from 1 to 36).',
'- You win if **your selected numbers include the winning number**.',
'- If you dont match, you receive no prize for that round.',
'',
'**Hit stake (amount on the winning number):**',
'- When every selected number has the same stake:',
' **Hit stake = total bet amount ÷ number of selected numbers**',
'- Example: 5 numbers, total bet 💎50 → 💎10 per number. If the winning number is among your picks, 💎10 is used for prize calculation.',
'',
'---',
'',
'### 4. Reward Types',
'',
'Streak rewards come in **two types**. Each tier uses **one type only** — they are **not combined**:',
'',
'#### Type A — Coefficient Reward',
'',
'Prize is calculated using an odds multiplier:',
'',
'```',
'Prize = hit stake × odds factor',
'```',
'',
'#### Type B — Fixed Reward',
'',
'You receive a **fixed amount** set in the configuration.',
'**It does not depend on your bet size and does not use an odds multiplier.**',
'',
'```',
'Prize = fixed amount',
'```',
'',
'**Comparison (Tier 10 example):**',
'',
'| Reward Type | Hit Stake | Prize |',
'|:---:|:---:|:---:|',
'| Coefficient (1:330) | 💎50 | 💎50 × 330 = **16,500** |',
'| Fixed reward | Any | **1,000,000** (configured value) |',
'',
'---',
'',
'### 5. Win Streak Rules',
'',
'When you **win consecutive rounds**, rewards increase by streak tier. By default, **coefficient rewards** apply with escalating odds:',
'',
'| Streak | Odds | Factor |',
'|:---:|:---:|:---:|',
'| 1st win | 1:33 | 33 |',
'| 2 in a row | 1:66 | 66 |',
'| 3 in a row | 1:99 | 99 |',
'| 4 in a row | 1:132 | 132 |',
'| 5 in a row | 1:165 | 165 |',
'| 6 in a row | 1:198 | 198 |',
'| 7 in a row | 1:231 | 231 |',
'| 8 in a row | 1:264 | 264 |',
'| 9 in a row | 1:297 | 297 |',
'| 10 in a row | 1:330 | 330 |',
'',
'**Streak rules:**',
'',
'- Rewards are based on your **streak at the time you place the bet**: if you already have N consecutive wins, a win this round pays at tier **(N+1)**.',
'- **Any losing round** resets your streak to zero — you start again from tier 1.',
'- **Skipping a round** (no bet placed) during an active streak also **resets your streak to zero**.',
'',
'**Examples (coefficient reward):**',
'',
'| Scenario | Hit Stake | Streak Tier | Odds | Prize |',
'|:---:|:---:|:---:|:---:|:---:|',
'| First win | 💎10 | 1st | 1:33 | **330** |',
'| 3-win streak | 💎50 | 3rd | 1:99 | **4,950** |',
'| 10-win streak | 💎50 | 10th | 1:330 | **16,500** |',
'',
'---',
'',
'### 6. Million Jackpot',
'',
'When a player **bets and wins 10 consecutive rounds**, and each bet during the streak is **at least 💎50**, the Million Jackpot is triggered.',
'',
'**Requirements:**',
'',
'1. **10 consecutive rounds** with a bet placed and won in each;',
'2. **Every round** in the streak must have a stake of **at least 💎50**;',
'3. If any round in the streak is below 💎50, you only receive the regular streak reward — **the Million Jackpot does not apply**.',
'',
'**How it is paid (depends on backend configuration):**',
'',
'- **Fixed reward**: If tier 10 is set as a fixed amount, 10 consecutive wins pay **💎1,000,000** directly.',
'- **Coefficient reward**: If tier 10 uses coefficient odds, you first receive the regular prize at **1:330**, plus any additional jackpot per campaign rules.',
'',
'**Example — fixed reward at tier 10 (💎1,000,000), hit stake 💎50 each round:**',
'',
'- 10 wins in a row → **💎1,000,000**',
'- Streak resets to **zero** after the jackpot is awarded',
'',
'**Example — coefficient reward at tier 10 (1:330), hit stake 💎50:**',
'',
'- Tier 10 regular prize: 💎50 × 330 = **💎16,500**',
'- If a separate Jackpot campaign applies, an additional million-prize may be added on top',
].join('\n'),
confirm: 'Understood',
},
procedures: {
@@ -647,6 +773,7 @@ export default {
diamondAmount: 'Withdrawal Diamond Amount',
currencyType: TEXT_CURRENCY_TYPE,
paymentChannel: TEXT_PAYMENT_CHANNEL,
paymentType: 'Payment Type',
bankCode: 'Bank Code',
cardHolderName: 'Card Holder Name',
bankAccountNumber: 'Bank Account Number',
@@ -655,6 +782,7 @@ export default {
},
placeholders: {
bankCode: 'Select bank code',
paymentType: 'Select payment type',
cardHolderName: 'Enter card holder name',
bankAccountNumber: 'Enter bank account number',
receiverEmail: 'Enter receiver email',
@@ -664,12 +792,17 @@ export default {
amountRequired: 'Please enter the withdrawal diamond amount.',
amountBelowMinimum:
'The withdrawal amount cannot be lower than the minimum amount ({{currency}} {{amount}} / {{diamonds}} diamonds).',
amountBelowPaymentMinimum:
'The withdrawal amount cannot be lower than this payment type minimum ({{amount}}).',
amountAbovePaymentMaximum:
'The withdrawal amount cannot exceed this payment type maximum ({{amount}}).',
bankCodeRequired: 'Please select a bank code.',
bankCodeUnavailable: 'No bank code is currently available.',
cardHolderNameRequired: 'Please enter the card holder name.',
bankAccountRequired: 'Please enter the bank account number.',
paymentChannelRequired: 'Please select a payment channel.',
paymentChannelUnavailable: 'No payment channel is currently available.',
paymentTypeRequired: 'Please select a payment type.',
receiverEmailInvalid: 'Please enter a valid email address.',
receiverPhoneInvalid: 'Please enter a valid phone number.',
amountExceedsBalance:

View File

@@ -213,8 +213,134 @@ export default {
},
rules: {
title: 'Aturan Permainan',
content:
'1. Gameplay Dasar\n1) Setelah setiap ronde dimulai, pemain dapat memilih satu atau beberapa angka di papan untuk memasang taruhan.\n2) Setelah taruhan ditutup, sistem masuk ke fase undian dan menyelesaikan hadiah berdasarkan hasil ronde.\n3) Level chip yang berbeda mewakili jumlah taruhan yang berbeda, mengikuti batas meja dan konfigurasi saat ini.\n\n2. Catatan Taruhan\n1) Taruhan hanya bisa dikirim saat fase taruhan berlangsung.\n2) Sebelum konfirmasi, periksa kembali angka yang dipilih, nominal chip, dan total taruhan.\n3) Jika saldo tidak cukup, ronde tidak lagi valid, atau taruhan sudah ditutup, permintaan akan ditolak.\n\n3. Undian dan Penyelesaian\n1) Hasil undian akhir yang ditampilkan sistem adalah hasil yang berlaku.\n2) Aturan kena, odds, pembayaran, dan performa streak diselesaikan secara real time sesuai konfigurasi room saat ini.\n3) Jika terjadi gangguan jaringan, silakan mengacu pada data resmi setelah sinkronisasi ulang.\n\n4. Catatan Tambahan\n1) Mohon atur waktu bermain secara bertanggung jawab.\n2) Segala tindakan tidak wajar untuk mengganggu sistem, mengeksploitasi hadiah, atau menghindari kontrol risiko dilarang keras.\n3) Platform berhak meninjau pesanan, pembayaran, dan status akun dalam kondisi khusus.',
content: [
'## 36 Zihua · Panduan Permainan',
'',
'### 1. Pengenalan Permainan',
'',
'**36 Zihua** adalah permainan tebak angka berkecepatan tinggi dengan **satu putaran setiap 30 detik**. Setiap putaran, sistem mengeluarkan **satu nomor pemenang** dari **36 simbol** (Tikus, Kerbau, Harimau… Naga Biru, Harimau Putih, Burung Merah, Kura-kura Hitam, dan lainnya). Selama periode taruhan, pemain memilih nomor dan memasang taruhan. Tebak dengan benar untuk memenangkan hadiah. Menang berturut-turut dapat meningkatkan hadiah Anda — **10 kemenangan berturut-turut** dapat memberikan **Jackpot Satu Juta**.',
'',
'---',
'',
'### 2. Cara Bermain',
'',
'Setiap putaran berlangsung sekitar **30 detik**:',
'',
'**Langkah 1 — Periode taruhan (020 detik)**',
'Pilih nomor pada grid 36 kotak (default maksimum **5 nomor**), pilih nilai chip (mis. 💎1, 5, 10, 25, 50, 100), lalu konfirmasi taruhan. Saldo Anda akan dipotong dan taruhan dikonfirmasi.',
'',
'**Langkah 2 — Penutupan (pada detik ke-20)**',
'Tidak ada taruhan baru yang diterima. Taruhan yang dipasang setelah penutupan tidak berlaku.',
'',
'**Langkah 3 — Pengundian & penyelesaian (2030 detik)**',
'Nomor pemenang diumumkan dan hadiah dibayarkan sesuai aturan hadiah.',
'',
'**Langkah 4 — Putaran berikutnya**',
'Setelah penyelesaian, putaran berikutnya dimulai secara otomatis.',
'',
'---',
'',
'### 3. Aturan Kemenangan',
'',
'- Hanya **satu** nomor pemenang yang dikeluarkan setiap putaran (dari 1 hingga 36).',
'- Anda menang jika **nomor yang dipilih mencakup nomor pemenang**.',
'- Jika tidak kena, tidak ada hadiah untuk putaran tersebut.',
'',
'**Jumlah taruhan pada nomor kena:**',
'- Jika setiap nomor dipilih dengan jumlah taruhan yang sama:',
' **Jumlah taruhan pada nomor kena = total taruhan ÷ jumlah nomor yang dipilih**',
'- Contoh: 5 nomor, total taruhan 💎50 → 💎10 per nomor. Jika nomor pemenang termasuk dalam pilihan Anda, 💎10 digunakan untuk perhitungan hadiah.',
'',
'---',
'',
'### 4. Jenis Hadiah',
'',
'Hadiah kemenangan berturut-turut terdiri dari **dua jenis**. Setiap tingkat hanya menggunakan **satu jenis** — **tidak digabungkan**:',
'',
'#### Jenis A — Hadiah Koefisien',
'',
'Hadiah dihitung menggunakan pengali odds:',
'',
'```',
'Hadiah = jumlah taruhan pada nomor kena × koefisien odds',
'```',
'',
'#### Jenis B — Hadiah Tetap',
'',
'Anda menerima **jumlah tetap** yang ditetapkan dalam konfigurasi.',
'**Tidak bergantung pada jumlah taruhan dan tidak menggunakan koefisien odds.**',
'',
'```',
'Hadiah = jumlah tetap',
'```',
'',
'**Perbandingan (contoh Tingkat 10):**',
'',
'| Jenis Hadiah | Jumlah Taruhan pada Nomor Kena | Hadiah |',
'|:---:|:---:|:---:|',
'| Koefisien (1:330) | 💎50 | 💎50 × 330 = **16.500** |',
'| Hadiah tetap | Berapa pun | **1.000.000** (nilai konfigurasi) |',
'',
'---',
'',
'### 5. Aturan Kemenangan Berturut-turut',
'',
'Saat Anda **menang berturut-turut**, hadiah meningkat sesuai tingkat kemenangan. Secara default, **hadiah koefisien** digunakan dengan odds yang meningkat:',
'',
'| Kemenangan Berturut-turut | Odds | Koefisien |',
'|:---:|:---:|:---:|',
'| Kemenangan ke-1 | 1:33 | 33 |',
'| 2 berturut-turut | 1:66 | 66 |',
'| 3 berturut-turut | 1:99 | 99 |',
'| 4 berturut-turut | 1:132 | 132 |',
'| 5 berturut-turut | 1:165 | 165 |',
'| 6 berturut-turut | 1:198 | 198 |',
'| 7 berturut-turut | 1:231 | 231 |',
'| 8 berturut-turut | 1:264 | 264 |',
'| 9 berturut-turut | 1:297 | 297 |',
'| 10 berturut-turut | 1:330 | 330 |',
'',
'**Aturan kemenangan berturut-turut:**',
'',
'- Hadiah dihitung berdasarkan **status kemenangan berturut-turut saat Anda memasang taruhan**: jika Anda sudah memiliki N kemenangan berturut-turut, kemenangan putaran ini dibayar pada tingkat **(N+1)**.',
'- **Putaran tanpa kemenangan** akan mengatur ulang kemenangan berturut-turut ke nol — Anda mulai lagi dari tingkat 1.',
'- **Melewatkan putaran** (tidak memasang taruhan) selama kemenangan berturut-turut aktif juga akan **mengatur ulang kemenangan berturut-turut ke nol**.',
'',
'**Contoh (hadiah koefisien):**',
'',
'| Skenario | Jumlah Taruhan pada Nomor Kena | Tingkat | Odds | Hadiah |',
'|:---:|:---:|:---:|:---:|:---:|',
'| Kemenangan pertama | 💎10 | Ke-1 | 1:33 | **330** |',
'| 3 kemenangan berturut-turut | 💎50 | Ke-3 | 1:99 | **4.950** |',
'| 10 kemenangan berturut-turut | 💎50 | Ke-10 | 1:330 | **16.500** |',
'',
'---',
'',
'### 6. Jackpot Satu Juta',
'',
'Saat pemain **bertaruh dan menang 10 putaran berturut-turut**, dan setiap taruhan selama kemenangan berturut-turut **minimal 💎50**, Jackpot Satu Juta akan dipicu.',
'',
'**Syarat:**',
'',
'1. **10 putaran berturut-turut** dengan taruhan dipasang dan dimenangkan di setiap putaran;',
'2. **Setiap putaran** dalam kemenangan berturut-turut harus memiliki taruhan **minimal 💎50**;',
'3. Jika ada putaran dalam kemenangan berturut-turut di bawah 💎50, Anda hanya menerima hadiah kemenangan berturut-turut biasa — **Jackpot Satu Juta tidak berlaku**.',
'',
'**Cara pembayaran (tergantung konfigurasi backend):**',
'',
'- **Hadiah tetap**: Jika tingkat 10 ditetapkan sebagai jumlah tetap, 10 kemenangan berturut-turut membayar **💎1.000.000** secara langsung.',
'- **Hadiah koefisien**: Jika tingkat 10 menggunakan odds koefisien, Anda menerima hadiah reguler pada **1:330** terlebih dahulu, ditambah jackpot tambahan sesuai aturan kampanye.',
'',
'**Contoh — hadiah tetap pada tingkat 10 (💎1.000.000), jumlah taruhan pada nomor kena 💎50 setiap putaran:**',
'',
'- 10 kemenangan berturut-turut → **💎1.000.000**',
'- Kemenangan berturut-turut diatur ulang ke **nol** setelah jackpot diberikan',
'',
'**Contoh — hadiah koefisien pada tingkat 10 (1:330), jumlah taruhan pada nomor kena 💎50:**',
'',
'- Hadiah reguler tingkat 10: 💎50 × 330 = **💎16.500**',
'- Jika kampanye Jackpot terpisah berlaku, hadiah satu juta tambahan dapat ditambahkan di atasnya',
].join('\n'),
confirm: 'Saya Mengerti',
},
procedures: {
@@ -648,6 +774,7 @@ export default {
diamondAmount: 'Jumlah Berlian Penarikan',
currencyType: TEXT_CURRENCY_TYPE,
paymentChannel: TEXT_PAYMENT_CHANNEL,
paymentType: 'Jenis Pembayaran',
bankCode: 'Kode Bank',
cardHolderName: 'Nama Pemilik Rekening',
bankAccountNumber: 'Nomor Rekening Bank',
@@ -656,6 +783,7 @@ export default {
},
placeholders: {
bankCode: 'Pilih kode bank',
paymentType: 'Pilih jenis pembayaran',
cardHolderName: 'Masukkan nama pemilik rekening',
bankAccountNumber: 'Masukkan nomor rekening bank',
receiverEmail: 'Masukkan email penerima',
@@ -665,6 +793,10 @@ export default {
amountRequired: 'Silakan masukkan jumlah diamond penarikan.',
amountBelowMinimum:
'Jumlah penarikan tidak boleh lebih kecil dari minimum ({{currency}} {{amount}} / {{diamonds}} diamond).',
amountBelowPaymentMinimum:
'Jumlah penarikan tidak boleh lebih kecil dari minimum jenis pembayaran ini ({{amount}}).',
amountAbovePaymentMaximum:
'Jumlah penarikan tidak boleh melebihi maksimum jenis pembayaran ini ({{amount}}).',
bankCodeRequired: 'Silakan pilih kode bank.',
bankCodeUnavailable: 'Saat ini tidak ada kode bank yang tersedia.',
cardHolderNameRequired: 'Silakan masukkan nama pemilik rekening.',
@@ -672,6 +804,7 @@ export default {
paymentChannelRequired: 'Silakan pilih saluran pembayaran.',
paymentChannelUnavailable:
'Saat ini tidak ada saluran pembayaran yang tersedia.',
paymentTypeRequired: 'Silakan pilih jenis pembayaran.',
receiverEmailInvalid: 'Silakan masukkan alamat email yang valid.',
receiverPhoneInvalid: 'Silakan masukkan nomor telepon yang valid.',
amountExceedsBalance:

View File

@@ -216,8 +216,134 @@ export default {
},
rules: {
title: 'Peraturan Permainan',
content:
'1. Permainan Asas\n1) Selepas setiap pusingan bermula, pemain boleh memilih satu atau beberapa nombor pada papan untuk membuat taruhan.\n2) Selepas taruhan ditutup, sistem memasuki fasa cabutan dan menyelesaikan ganjaran berdasarkan keputusan pusingan.\n3) Tahap cip yang berbeza mewakili jumlah taruhan yang berbeza, tertakluk kepada had meja dan konfigurasi semasa.\n\n2. Nota Taruhan\n1) Taruhan hanya boleh dihantar semasa fasa taruhan.\n2) Sebelum mengesahkan, sila semak nombor yang dipilih, jumlah cip, dan jumlah taruhan keseluruhan.\n3) Jika baki tidak mencukupi, pusingan tidak lagi sah, atau taruhan telah ditutup, permintaan akan ditolak.\n\n3. Cabutan dan Penyelesaian\n1) Keputusan cabutan akhir yang dipaparkan sistem ialah keputusan yang sah.\n2) Peraturan kena, odds, bayaran, dan prestasi streak diselesaikan secara masa nyata mengikut konfigurasi bilik semasa.\n3) Jika berlaku gangguan rangkaian, sila rujuk data rasmi selepas penyegerakan semula.\n\n4. Nota Tambahan\n1) Sila urus masa permainan anda dengan bertanggungjawab.\n2) Sebarang tingkah laku tidak normal untuk mengganggu sistem, mengeksploitasi ganjaran, atau memintas kawalan risiko adalah dilarang sama sekali.\n3) Platform berhak menyemak pesanan, bayaran, dan status akaun dalam keadaan khas.',
content: [
'## 36 Zihua · Panduan Permainan',
'',
'### 1. Pengenalan Permainan',
'',
'**36 Zihua** ialah permainan teka nombor berkelajuan tinggi dengan **satu pusingan setiap 30 saat**. Setiap pusingan, sistem akan mengeluarkan **satu nombor kemenangan** daripada **36 simbol** (Tikus, Lembu, Harimau… Naga Biru, Harimau Putih, Burung Merah, Kura-kura Hitam, dan lain-lain). Dalam tempoh pertaruhan, pemain memilih nombor dan membuat pertaruhan. Teka dengan betul untuk memenangi hadiah. Menang berturut-turut boleh meningkatkan ganjaran anda — **10 kemenangan berturut-turut** boleh membawa anda **Jackpot Sejuta**.',
'',
'---',
'',
'### 2. Cara Bermain',
'',
'Setiap pusingan mengambil masa kira-kira **30 saat**:',
'',
'**Langkah 1 — Tempoh pertaruhan (020 saat)**',
'Pilih nombor pada grid 36 petak (lalai maksimum **5 nombor**), pilih nilai cip (cth. 💎1, 5, 10, 25, 50, 100), kemudian sahkan pertaruhan. Baki anda akan ditolak dan pertaruhan disahkan.',
'',
'**Langkah 2 — Penutupan (pada saat ke-20)**',
'Tiada pertaruhan baharu diterima. Sebarang pertaruhan selepas penutupan adalah tidak sah.',
'',
'**Langkah 3 — Cabutan & penyelesaian (2030 saat)**',
'Nombor kemenangan diumumkan dan hadiah dibayar mengikut peraturan ganjaran.',
'',
'**Langkah 4 — Pusingan seterusnya**',
'Selepas penyelesaian, pusingan seterusnya bermula secara automatik.',
'',
'---',
'',
'### 3. Peraturan Kemenangan',
'',
'- Hanya **satu** nombor kemenangan dikeluarkan setiap pusingan (daripada 1 hingga 36).',
'- Anda menang jika **nombor yang dipilih termasuk nombor kemenangan**.',
'- Jika tidak kena, tiada hadiah untuk pusingan tersebut.',
'',
'**Jumlah pertaruhan pada nombor kena:**',
'- Apabila setiap nombor dipilih dengan jumlah pertaruhan yang sama:',
' **Jumlah pertaruhan pada nombor kena = jumlah pertaruhan ÷ bilangan nombor dipilih**',
'- Contoh: 5 nombor, jumlah pertaruhan 💎50 → 💎10 setiap nombor. Jika nombor kemenangan termasuk dalam pilihan anda, 💎10 digunakan untuk pengiraan hadiah.',
'',
'---',
'',
'### 4. Jenis Ganjaran',
'',
'Ganjaran kemenangan berturut-turut terdiri daripada **dua jenis**. Setiap peringkat hanya menggunakan **satu jenis** — **tidak digabungkan**:',
'',
'#### Jenis A — Ganjaran Pekali',
'',
'Hadiah dikira menggunakan pekali odds:',
'',
'```',
'Hadiah = jumlah pertaruhan pada nombor kena × pekali odds',
'```',
'',
'#### Jenis B — Ganjaran Tetap',
'',
'Anda menerima **jumlah tetap** yang ditetapkan dalam konfigurasi.',
'**Tidak bergantung pada jumlah pertaruhan dan tidak menggunakan pekali odds.**',
'',
'```',
'Hadiah = jumlah tetap',
'```',
'',
'**Perbandingan (contoh Peringkat 10):**',
'',
'| Jenis Ganjaran | Jumlah Pertaruhan pada Nombor Kena | Hadiah |',
'|:---:|:---:|:---:|',
'| Pekali (1:330) | 💎50 | 💎50 × 330 = **16,500** |',
'| Ganjaran tetap | Sebarang | **1,000,000** (nilai konfigurasi) |',
'',
'---',
'',
'### 5. Peraturan Kemenangan Berturut-turut',
'',
'Apabila anda **menang berturut-turut**, ganjaran meningkat mengikut peringkat kemenangan. Secara lalai, **ganjaran pekali** digunakan dengan odds yang meningkat:',
'',
'| Kemenangan Berturut-turut | Odds | Pekali |',
'|:---:|:---:|:---:|',
'| Kemenangan ke-1 | 1:33 | 33 |',
'| 2 berturut-turut | 1:66 | 66 |',
'| 3 berturut-turut | 1:99 | 99 |',
'| 4 berturut-turut | 1:132 | 132 |',
'| 5 berturut-turut | 1:165 | 165 |',
'| 6 berturut-turut | 1:198 | 198 |',
'| 7 berturut-turut | 1:231 | 231 |',
'| 8 berturut-turut | 1:264 | 264 |',
'| 9 berturut-turut | 1:297 | 297 |',
'| 10 berturut-turut | 1:330 | 330 |',
'',
'**Peraturan kemenangan berturut-turut:**',
'',
'- Ganjaran dikira berdasarkan **status kemenangan berturut-turut semasa anda membuat pertaruhan**: jika anda sudah mempunyai N kemenangan berturut-turut, kemenangan pusingan ini dibayar pada peringkat **(N+1)**.',
'- **Sebarang pusingan tanpa kemenangan** akan menetapkan semula kemenangan berturut-turut kepada sifar — anda bermula semula dari peringkat 1.',
'- **Melangkau pusingan** (tiada pertaruhan dibuat) semasa kemenangan berturut-turut aktif juga akan **menetapkan semula kemenangan berturut-turut kepada sifar**.',
'',
'**Contoh (ganjaran pekali):**',
'',
'| Senario | Jumlah Pertaruhan pada Nombor Kena | Peringkat | Odds | Hadiah |',
'|:---:|:---:|:---:|:---:|:---:|',
'| Kemenangan pertama | 💎10 | Ke-1 | 1:33 | **330** |',
'| 3 kemenangan berturut-turut | 💎50 | Ke-3 | 1:99 | **4,950** |',
'| 10 kemenangan berturut-turut | 💎50 | Ke-10 | 1:330 | **16,500** |',
'',
'---',
'',
'### 6. Jackpot Sejuta',
'',
'Apabila pemain **bertaruh dan menang 10 pusingan berturut-turut**, dan setiap pertaruhan semasa kemenangan berturut-turut adalah **sekurang-kurangnya 💎50**, Jackpot Sejuta akan dicetuskan.',
'',
'**Syarat:**',
'',
'1. **10 pusingan berturut-turut** dengan pertaruhan dibuat dan dimenangi dalam setiap pusingan;',
'2. **Setiap pusingan** dalam kemenangan berturut-turut mesti mempunyai pertaruhan **sekurang-kurangnya 💎50**;',
'3. Jika mana-mana pusingan dalam kemenangan berturut-turut kurang daripada 💎50, anda hanya menerima ganjaran kemenangan berturut-turut biasa — **Jackpot Sejuta tidak terpakai**.',
'',
'**Cara pembayaran (bergantung pada konfigurasi backend):**',
'',
'- **Ganjaran tetap**: Jika peringkat 10 ditetapkan sebagai jumlah tetap, 10 kemenangan berturut-turut membayar **💎1,000,000** secara langsung.',
'- **Ganjaran pekali**: Jika peringkat 10 menggunakan odds pekali, anda menerima hadiah biasa pada **1:330** terlebih dahulu, ditambah jackpot tambahan mengikut peraturan kempen.',
'',
'**Contoh — ganjaran tetap pada peringkat 10 (💎1,000,000), jumlah pertaruhan pada nombor kena 💎50 setiap pusingan:**',
'',
'- 10 kemenangan berturut-turut → **💎1,000,000**',
'- Kemenangan berturut-turut ditetapkan semula kepada **sifar** selepas jackpot diberikan',
'',
'**Contoh — ganjaran pekali pada peringkat 10 (1:330), jumlah pertaruhan pada nombor kena 💎50:**',
'',
'- Hadiah biasa peringkat 10: 💎50 × 330 = **💎16,500**',
'- Jika kempen Jackpot berasingan terpakai, hadiah sejuta tambahan mungkin ditambah di atasnya',
].join('\n'),
confirm: 'Saya Faham',
},
procedures: {
@@ -652,6 +778,7 @@ export default {
diamondAmount: 'Jumlah Berlian Pengeluaran',
currencyType: TEXT_CURRENCY_TYPE,
paymentChannel: TEXT_PAYMENT_CHANNEL,
paymentType: 'Jenis Pembayaran',
bankCode: 'Kod Bank',
cardHolderName: 'Nama Pemegang Kad',
bankAccountNumber: 'Nombor Akaun Bank',
@@ -660,6 +787,7 @@ export default {
},
placeholders: {
bankCode: 'Pilih kod bank',
paymentType: 'Pilih jenis pembayaran',
cardHolderName: 'Masukkan nama pemegang kad',
bankAccountNumber: 'Masukkan nombor akaun bank',
receiverEmail: 'Masukkan e-mel penerima',
@@ -669,6 +797,10 @@ export default {
amountRequired: 'Sila masukkan jumlah berlian pengeluaran.',
amountBelowMinimum:
'Jumlah pengeluaran tidak boleh kurang daripada minimum ({{currency}} {{amount}} / {{diamonds}} berlian).',
amountBelowPaymentMinimum:
'Jumlah pengeluaran tidak boleh kurang daripada minimum jenis pembayaran ini ({{amount}}).',
amountAbovePaymentMaximum:
'Jumlah pengeluaran tidak boleh melebihi maksimum jenis pembayaran ini ({{amount}}).',
bankCodeRequired: 'Sila pilih kod bank.',
bankCodeUnavailable: 'Tiada kod bank tersedia buat masa ini.',
cardHolderNameRequired: 'Sila masukkan nama pemegang kad.',
@@ -676,6 +808,7 @@ export default {
paymentChannelRequired: 'Sila pilih saluran pembayaran.',
paymentChannelUnavailable:
'Tiada saluran pembayaran tersedia buat masa ini.',
paymentTypeRequired: 'Sila pilih jenis pembayaran.',
receiverEmailInvalid: 'Sila masukkan alamat e-mel yang sah.',
receiverPhoneInvalid: 'Sila masukkan nombor telefon yang sah.',
amountExceedsBalance:

View File

@@ -210,8 +210,119 @@ export default {
},
rules: {
title: '玩法规则',
content:
'一、基础玩法\n1. 每一局开始后,玩家可以在盘面上选择一个或多个号码进行下注。\n2. 系统会在封盘后进入开奖阶段,并根据当期结果结算对应奖金。\n3. 不同下注档位对应不同下注金额,实际以当前系统配置和桌限为准。\n\n二、下注说明\n1. 只有在“下注中”阶段可以提交下注。\n2. 每次提交前,请确认已选号码、下注金额和总下注额。\n3. 若余额不足、期号失效或已封盘,系统将拒绝该次下注请求。\n\n三、开奖与结算\n1. 开奖结果以系统最终展示为准。\n2. 命中规则、赔率、派彩与连中表现按当前房间配置实时结算。\n3. 如遇网络波动,请以重新同步后的官方数据为准。\n\n四、其他说明\n1. 请合理安排游戏时间,理性参与。\n2. 严禁使用任何异常手段干扰系统、刷取奖励或规避风控。\n3. 平台保留在异常情况下对订单、派奖和账户状态进行复核的权利。',
content: [
'## 36 字花 · 玩法指南',
'',
'### 一、游戏介绍',
'',
'「36字花」是一款 **30 秒一期** 的高频数字竞猜游戏。系统每期从 **36 个字号**(鼠、牛、虎……青龙、白虎、朱雀、玄武等)中开出 **1 个中奖号码**。玩家在下注期内选号押注,猜中即可获得奖金;连续猜中可提升奖励,**连中 10 场** 还可获得 **百万大奖**。',
'',
'### 二、玩法说明',
'',
'每期约 **30 秒**,流程如下:',
'',
'**1. 下注期020 秒)**',
'在 36 宫格中选择号码(默认最多 **5 个**),选择筹码面额(如 💎1、5、10、25、50、100点击确认下注系统扣款后注单生效。',
'',
'**2. 封盘20 秒)**',
'停止接受新注单,之后下注无效。',
'',
'**3. 开奖结算2030 秒)**',
'公布本期中奖号码,系统按规则结算派彩。',
'',
'**4. 下一期**',
'结算完成后自动进入下一期,循环进行。',
'',
'### 三、中奖说明',
'',
'- 每期只开出 **1 个** 中奖号码136 中之一)。',
'- 玩家押注的号码中,**包含开奖号码即算中奖**。',
'- 未押中则本期无奖金。',
'',
'**压中号码面额** 计算方式:',
'- 同一期内各号押注相同时:',
' **压中号码面额 = 本笔压注总额 ÷ 所选号码个数**',
'- 示例:选 5 个号、总押 💎50 → 每个号面额 💎10若开奖号在其中按 💎10 参与奖金计算。',
'',
'### 四、奖励说明',
'',
'连胜奖励分为 **两种类型**,每档 **二选一**,不会同时享受:',
'',
'#### 1. 系数奖励',
'',
'按赔率系数计算:',
'',
'`中奖金额 = 压中号码面额 × 赔率系数`',
'',
'#### 2. 固定奖励',
'',
'直接发放配置的 **固定金额****与押注面额无关,也不使用赔率系数**。',
'',
'`中奖金额 = 固定金额`',
'',
'**示例对比**(第 10 档):',
'',
'| 奖励类型 | 押中面额 | 中奖金额 |',
'|:---:|:---:|:---:|',
'| 系数奖励1:330 | 💎50 | 💎50 × 330 = **16,500** |',
'| 固定奖励 | 任意 | **1,000,000**(配置值) |',
'',
'### 五、连胜说明',
'',
'玩家 **连续中奖** 时,奖励按连胜场次递增。默认采用 **系数奖励**,赔率累加如下:',
'',
'| 连胜场次 | 赔率 | 系数 |',
'|:---:|:---:|:---:|',
'| 第 1 场中奖 | 1:33 | 33 |',
'| 连中 2 场 | 1:66 | 66 |',
'| 连中 3 场 | 1:99 | 99 |',
'| 连中 4 场 | 1:132 | 132 |',
'| 连中 5 场 | 1:165 | 165 |',
'| 连中 6 场 | 1:198 | 198 |',
'| 连中 7 场 | 1:231 | 231 |',
'| 连中 8 场 | 1:264 | 264 |',
'| 连中 9 场 | 1:297 | 297 |',
'| 连中 10 场 | 1:330 | 330 |',
'',
'**连胜规则:**',
'',
'- 赔率按 **下注时的连胜状态** 计算:下注时已是 N 连胜,本期中奖则按第 **(N+1)** 场奖励结算。',
'- **任意一期未中奖** → 连胜清零,从第 1 场重新计算。',
'- **连胜期间跳局未下注** → 连胜也会清零。',
'',
'**计算示例**(系数奖励):',
'',
'| 场景 | 压中面额 | 连胜场次 | 赔率 | 中奖金额 |',
'|:---:|:---:|:---:|:---:|:---:|',
'| 首次中奖 | 💎10 | 第 1 场 | 1:33 | **330** |',
'| 三连胜 | 💎50 | 第 3 场 | 1:99 | **4,950** |',
'| 十连胜 | 💎50 | 第 10 场 | 1:330 | **16,500** |',
'',
'### 六、百万大奖',
'',
'当玩家 **连续 10 期均有下注且全部中奖**,且连胜期间 **每期押注不低于 💎50**,即可触发百万大奖。',
'',
'**触发条件:**',
'',
'1. 连续 **10 期** 均有下注且全部中奖;',
'2. 连胜期间 **每一期押注面额均不低于 💎50**',
'3. 若连胜中有任意一期低于 💎50仅享受常规连胜奖励**不触发百万大奖**。',
'',
'**派发方式(视后台配置):**',
'',
'- **固定奖励**:第 10 档设为固定金额时,连中 10 场直接获得 **💎1,000,000**。',
'- **系数奖励**:第 10 档为系数奖励时,先按 **1:330** 发放常规奖金,再按活动规则叠加额外大奖。',
'',
'**示例**(第 10 档为固定奖励 💎1,000,000每局压中面额 💎50',
'',
'- 连中 10 场 → 获得 **💎1,000,000**',
'- 触发后连胜 **归零**,下一期从第 1 场重新计算',
'',
'**示例**(第 10 档为系数奖励 1:330每局压中面额 💎50',
'',
'- 第 10 场常规奖金💎50 × 330 = **💎16,500**',
'- 若另有 Jackpot 活动叠加,可额外获得百万奖金',
].join('\n'),
confirm: '我知道了',
},
procedures: {
@@ -628,6 +739,7 @@ export default {
diamondAmount: '提现钻石数量',
currencyType: TEXT_CURRENCY_TYPE,
paymentChannel: TEXT_PAYMENT_CHANNEL,
paymentType: '支付方式',
bankCode: '银行代码',
cardHolderName: '持卡人姓名',
bankAccountNumber: '银行账号',
@@ -636,6 +748,7 @@ export default {
},
placeholders: {
bankCode: '请选择银行代码',
paymentType: '请选择支付方式',
cardHolderName: '请输入持卡人姓名',
bankAccountNumber: '请输入银行账号',
receiverEmail: '请输入收款人邮箱',
@@ -645,12 +758,17 @@ export default {
amountRequired: '请输入提现钻石数量',
amountBelowMinimum:
'提现金额不能低于最低提现金额({{currency}} {{amount}} / {{diamonds}} 钻石)',
amountBelowPaymentMinimum:
'提现金额不能低于当前支付方式最低限额({{amount}}',
amountAbovePaymentMaximum:
'提现金额不能高于当前支付方式最高限额({{amount}}',
bankCodeRequired: '请选择银行代码',
bankCodeUnavailable: '当前暂无可用银行代码',
cardHolderNameRequired: '请输入持卡人姓名',
bankAccountRequired: '请输入银行账号',
paymentChannelRequired: '请选择支付渠道',
paymentChannelUnavailable: '当前暂无可用支付渠道',
paymentTypeRequired: '请选择支付方式',
receiverEmailInvalid: '请输入正确的邮箱',
receiverPhoneInvalid: '请输入正确的手机号',
amountExceedsBalance: '提现金额不能大于当前拥有的金额',

View File

@@ -1,6 +1,7 @@
import { useTranslation } from 'react-i18next'
import lengthBlueBtn from '@/assets/system/length-blue-btn.webp'
import { CenterModal } from '@/components/center-modal.tsx'
import RulesMarkdownContent from '@/components/rules-markdown-content.tsx'
import { SmartBackground } from '@/components/smart-background.tsx'
import { useModalStore } from '@/store'
@@ -27,8 +28,8 @@ function DesktopRulesModal() {
className={'w-design-1040 h-design-720'}
>
<div className="flex h-full flex-col gap-design-24 px-design-28 pb-design-30 pt-design-10">
<div className="flex-1 overflow-y-auto rounded-[12px] bg-black/35 p-design-20 text-design-18 leading-[1.8] text-[#B9E7EA] whitespace-pre-line">
{t('game.modals.rules.content')}
<div className="flex-1 overflow-y-auto rounded-[12px] bg-black/35 p-design-20 text-design-18 text-[#B9E7EA]">
<RulesMarkdownContent content={t('game.modals.rules.content')} />
</div>
<div className="flex justify-center">

View File

@@ -1,6 +1,7 @@
import { useTranslation } from 'react-i18next'
import lengthBlueBtn from '@/assets/system/length-blue-btn.webp'
import { MobileCenterModal } from '@/components/mobile-center-modal.tsx'
import RulesMarkdownContent from '@/components/rules-markdown-content.tsx'
import { SmartBackground } from '@/components/smart-background.tsx'
import { useModalStore } from '@/store'
@@ -27,8 +28,11 @@ function MobileRulesModal() {
className="!h-design-320"
>
<div className="flex h-full min-h-0 flex-col gap-design-12 px-design-14 pb-design-16 pt-design-4">
<div className="min-h-0 flex-1 overflow-y-auto rounded-[calc(var(--design-unit)*10)] bg-black/35 px-design-14 py-design-12 text-design-12 leading-[1.62] text-[#B9E7EA] whitespace-pre-line">
{t('game.modals.rules.content')}
<div className="min-h-0 flex-1 overflow-y-auto rounded-[calc(var(--design-unit)*10)] bg-black/35 px-design-14 py-design-12 text-design-12 text-[#B9E7EA]">
<RulesMarkdownContent
compact
content={t('game.modals.rules.content')}
/>
</div>
<div className="flex shrink-0 justify-center">

View File

@@ -25,10 +25,19 @@ export interface FinanceRateConfigDto {
}
export interface FinancePayChannelDto {
banks?: FinanceWithdrawBankDto[]
code: string
currency_codes?: string[]
deposit_banks?: FinanceWithdrawBankDto[]
fee_note?: string
methods?: FinanceDepositMethodDto[]
min_bank?: string
min_ewallet?: string
name: string
processing_note?: string
rate_hint?: string
rate_mode?: FinanceWithdrawConfigDto['rate_mode']
review_threshold_coin?: string
sort: number
status?: number
tier_ids?: number[]
@@ -40,7 +49,9 @@ export interface FinanceWithdrawBankDto {
gateway_code?: string
id?: string
label?: string
logo?: string
name?: string
payment_types?: string[]
sort?: number
status?: number
}
@@ -49,6 +60,8 @@ export interface FinanceDepositMethodDto {
code: string
currency_code: string
gateway_code: string
maximum_amount?: string
minimum_amount?: string
name: string
requires_bank: boolean
requires_bank_account: boolean
@@ -57,6 +70,7 @@ export interface FinanceDepositMethodDto {
}
export interface FinanceDepositFieldsDto {
channel_code_param?: string
deposit_bank_account_param?: string
deposit_bank_param?: string
deposit_from_address_param?: string
@@ -69,18 +83,22 @@ export interface FinanceDepositFieldsDto {
export interface FinanceDepositConfigDto {
banks?: FinanceWithdrawBankDto[]
dadapay_pending_expire_seconds?: number
default_channel_by_currency?: Record<string, string>
default_channel_code?: string
fields?: FinanceDepositFieldsDto
methods?: FinanceDepositMethodDto[]
pay_channels?: FinancePayChannelDto[]
pending_expire_seconds?: number
}
export interface FinanceWithdrawFieldsDto {
payment_type_param?: string
receive_type_bank_only?: boolean
require_bank_branch?: boolean
require_bank_code?: boolean
require_channel_code?: boolean
require_payment_type?: boolean
require_receive_account?: boolean
require_receiver_email?: boolean
require_receiver_mobile?: boolean
@@ -91,6 +109,7 @@ export interface FinanceWithdrawConfigDto {
banks: FinanceWithdrawBankDto[]
fee_note: string
fields?: FinanceWithdrawFieldsDto
methods?: FinanceDepositMethodDto[]
min_bank: string
min_ewallet: string
pay_channels?: FinancePayChannelDto[]
@@ -147,10 +166,19 @@ export interface FinanceRateConfig {
}
export interface FinancePayChannel {
banks: FinanceWithdrawBank[]
code: string
currencyCodes: string[]
depositBanks: FinanceWithdrawBank[]
feeNote: string
methods: FinanceDepositMethod[]
minBank: string
minEwallet: string
name: string
processingNote: string
rateHint: string
rateMode: FinanceWithdrawConfigDto['rate_mode'] | ''
reviewThresholdCoin: string
sort: number
status: number
tierIds: number[]
@@ -161,6 +189,8 @@ export interface FinanceWithdrawBank {
currencyCode: string | null
gatewayCode: string | null
label: string
logo: string
paymentTypes: string[]
sort: number
status: number
}
@@ -169,6 +199,8 @@ export interface FinanceDepositMethod {
code: string
currencyCode: string
gatewayCode: string
maximumAmount: string
minimumAmount: string
name: string
requiresBank: boolean
requiresBankAccount: boolean
@@ -177,6 +209,7 @@ export interface FinanceDepositMethod {
}
export interface FinanceDepositFields {
channelCodeParam: string
depositBankAccountParam: string
depositBankParam: string
depositFromAddressParam: string
@@ -189,18 +222,22 @@ export interface FinanceDepositFields {
export interface FinanceDepositConfig {
banks: FinanceWithdrawBank[]
dadapayPendingExpireSeconds: number
defaultChannelCode: string
defaultChannelByCurrency: Record<string, string>
fields: FinanceDepositFields
methods: FinanceDepositMethod[]
payChannels: FinancePayChannel[]
pendingExpireSeconds: number
}
export interface FinanceWithdrawFields {
paymentTypeParam: string
receiveTypeBankOnly: boolean
requireBankBranch: boolean
requireBankCode: boolean
requireChannelCode: boolean
requirePaymentType: boolean
requireReceiveAccount: boolean
requireReceiverEmail: boolean
requireReceiverMobile: boolean
@@ -211,6 +248,7 @@ export interface FinanceWithdrawConfig {
banks: FinanceWithdrawBank[]
feeNote: string
fields: FinanceWithdrawFields
methods: FinanceDepositMethod[]
minBank: string
minEwallet: string
payChannels: FinancePayChannel[]
@@ -360,6 +398,7 @@ export interface WithdrawCreateRequestDto {
bank_code: string
channel_code: string
idempotency_key: string
payment_type: string
receive_account: string
receiver_email: string
receiver_mobile: string