diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e4067f88884a9..ef7c4485cd80e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2503,6 +2503,9 @@ importers: '@gravatar-com/hovercards': specifier: 0.15.0 version: 0.15.0 + '@tanstack/react-router': + specifier: '>=1.120.5 <1.121.0' + version: 1.120.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@wordpress/base-styles': specifier: 6.7.0 version: 6.7.0 @@ -2525,8 +2528,8 @@ importers: specifier: 10.31.0 version: 10.31.0(react@18.3.1) '@wordpress/dataviews': - specifier: 9.1.0 - version: 9.1.0(patch_hash=9971bdb899e2fb0a4421ab8b7f0a54a41f03b10ef1b51d72946e94f4279e05c1)(@types/react@18.3.25)(react@18.3.1) + specifier: 10.0.1-next.b8c8708f3.0 + version: 10.0.1-next.b8c8708f3.0(patch_hash=9971bdb899e2fb0a4421ab8b7f0a54a41f03b10ef1b51d72946e94f4279e05c1)(@types/react@18.3.25)(react@18.3.1) '@wordpress/dom-ready': specifier: 4.31.0 version: 4.31.0 @@ -2587,9 +2590,6 @@ importers: react-redux: specifier: 7.2.8 version: 7.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router: - specifier: 7.6.2 - version: 7.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-transition-group: specifier: ^4.4.5 version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -8844,6 +8844,10 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '*' + '@tanstack/history@1.120.17': + resolution: {integrity: sha512-k07LFI4Qo074IIaWzT/XjD0KlkGx2w1V3fnNtclKx0oAl8z4O9kCh6za+FPEIRe98xLgNFEiddDbJeAYGSlPtw==} + engines: {node: '>=12'} + '@tanstack/query-core@5.75.0': resolution: {integrity: sha512-rk8KQuCdhoRkzjRVF3QxLgAfFUyS0k7+GCQjlGEpEGco+qazJ0eMH6aO1DjDjibH7/ik383nnztua3BG+lOnwg==} @@ -8869,6 +8873,26 @@ packages: peerDependencies: react: ^18 || ^19 + '@tanstack/react-router@1.120.20': + resolution: {integrity: sha512-+zNruUE9NsfGm9cHd22Xs7FRtBrBhDZe94pB69BEIjqjrEPZct6f5VhTV9WQ+bDZ6fRz8tUuxNFAgm/3Lm4AIg==} + engines: {node: '>=12'} + peerDependencies: + react: '>=18.0.0 || >=19.0.0' + react-dom: '>=18.0.0 || >=19.0.0' + + '@tanstack/react-store@0.7.7': + resolution: {integrity: sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/router-core@1.120.19': + resolution: {integrity: sha512-5JUVgkxnIM3NxMwzKt0tfz2UopZVxwq6Kl7Rp33zlFJaPjpiRs46VuRjVeAvkpJd6samo1gcH1rWqmnPUmtGcw==} + engines: {node: '>=12'} + + '@tanstack/store@0.7.7': + resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -9577,6 +9601,10 @@ packages: resolution: {integrity: sha512-FNoyQUO1wAf768MX2vMNNk1Il3bi/A7c1s9WKSaufwEZEViXjWeqqb9GO6stWkur4UP9MRcv8IpWoLXi1BePHA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/a11y@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-Mwjf3dTa6kIHdOdNbz97gA6jOUngSG1SfvK+ceweDfFobpog1CnfIEUm029brMoxYqMpAnAFG4Pzw4mIuOo26A==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/annotations@3.31.0': resolution: {integrity: sha512-wwcx0q9HDdDn9YawpNAvuITPkyGr4Ib7ZYberlxuLaWHTVy+SjMbqu9mrUUE0GbdbDtfSSfxSzwDFUQ2kEXt9Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9617,6 +9645,10 @@ packages: resolution: {integrity: sha512-x3LCQ4DuIOg58LyQRZtI6shmNKCk2zuKGwIEMH7h7MMri/Q95ehR6Sub8dKiUL4AHktdlweouJwbHaqrXPkd0Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/base-styles@6.8.1-next.ff1cebbba.0': + resolution: {integrity: sha512-FQOUkGfsezkPpI/mck69q55CxRaf1fHv1fooon+NW9htK94fxXB17JBRMhJecEgaPFZStgB9tXaoRwNYcS6GZg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/blob@4.31.0': resolution: {integrity: sha512-14QzAp4tTFowxMgNjz2refH6ziGTX4TBfpDyTs+/grNzOhRlOlUOSx7u2S7zZekWzp/A6nsGklGr3ACrpkrDXA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9702,6 +9734,13 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@wordpress/components@30.6.1-next.ff1cebbba.0': + resolution: {integrity: sha512-26PPco5fny1luiquBCF2Jw1gO6JqH44co27jHnV/j8WgKqi/cdLljvVfilMB+xW6hhsf8oUke5DGzWW9wuNW4w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + '@wordpress/compose@7.23.0': resolution: {integrity: sha512-lEYneHPPrbQ9ki1yzq/8RsCEKcT3c0+iYi59c+RyPdnXNKWUTg/4QPklgut6Yp/85ZyWr0LMGy0/WoMqGypEAw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9720,6 +9759,12 @@ packages: peerDependencies: react: ^18.0.0 + '@wordpress/compose@7.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-yCAHefEnHE4+rHV0AYnzu85Vc5mx0XGPoUoxPAetZIEgvam3EXPXiA74qRUZwNmjqTIRl3ZTXguyr5qA2qejvQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/core-data@7.31.0': resolution: {integrity: sha512-Rp/LcmTwBL8uITYmj2HRV6GGT1MKvRvaU594fq+CTZa9kNYDUwhnG7xtC9+JbjPSdZ9zLtHVQUdKbwRvpkcibw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9752,6 +9797,18 @@ packages: peerDependencies: react: ^18.0.0 + '@wordpress/data@10.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-dQYGlyOHLWlX/bWO8w2lcmzY50SwAGQX7IVDeK4uPg1toKWh/m0+YAQFLEOXa1buJ+21xjD+18AYfpFYRdnLTQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + + '@wordpress/dataviews@10.0.1-next.b8c8708f3.0': + resolution: {integrity: sha512-RM9cNBzaqn7eVwo1IhjEciLpEgu1dXbUz/nZyxecA4dGNdJYBbuHia5jeZEJHmk2Nh7XDqUSAo+q/afGLFrQPQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/dataviews@9.1.0': resolution: {integrity: sha512-F7l2td904Aoe8rfCULHOO33pVyPj4NfWjb1cSLoXF+5Ic0JXx7L9rsGNr7qx4b4w52TssrZ22XFgfd5jsR0w5w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9766,6 +9823,10 @@ packages: resolution: {integrity: sha512-hWmsDHzzmhbWAwWzBM042eItGor1up9tV0nEvjn1qdERoI/MS3+78d8vF40sMdWnXLNcPTCR+JHjD6kqJVmuXQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/date@5.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-aBUiswS2VXHURnHF+MrkBb9XZz/PdOochva7jgsny5dNOGZvo/ZDMV84gGYILBI85BdW8dMKx42L9u6cyRYDng==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dependency-extraction-webpack-plugin@6.31.0': resolution: {integrity: sha512-5PFebfXy1nCV6qj54CDqMRTfcy5bf9/KPo0VvPATZeqQbhQ9rvbt7v1nkbwYQ/Nf/2meKm3J0zt25M93rpJctQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9776,6 +9837,10 @@ packages: resolution: {integrity: sha512-HfHXUWfe/lyXTvJLWjpMJ90+XzmC2l/9vcp05n2tD+nsxwF5nS0Hjf+38pQtFPBcw3d1bbzMTNahDjtNBLvKTQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/deprecated@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-kIVH70rPkgpz/0Vg+80M+pGyANvRW8IDo/xskag0KQeB2/rEj1/Nd7YvddnJCcCFs0gaIs4mBBFXrxODTC1vTQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dom-ready@4.31.0': resolution: {integrity: sha512-aRM4l5wzkrqAU686s4fz1bb+/7/BOFp+sXB0kx1vkiXl3ocfmHAr3jwEYU+OH/sX6Is3Ntkfh0uZe3EJLsqHTQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9784,6 +9849,10 @@ packages: resolution: {integrity: sha512-Ru+gF3J37wiz33yqVoSmwPmc5afvGyujxyLvkGI0N4Y6EBMUmEJbC6QUbTOVld8RANQ0Bqu1btXMZfFYEY9PIQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dom-ready@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-x6lTCf5JF2TtNP5tocBHPvHKMpGLcA9KAozMWwxqR2cmSGqG2fv+T1Q8+3P32dOlrq8bL8715ghmEFGZItSjow==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dom@4.31.0': resolution: {integrity: sha512-5/RBy9OreQktnBE75cB3R6Lva5c6hUlXvPo1NFfAebLeXX+7swZBmLYZnyf7dZbARRdqSwkundHZoKLcHa+20A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9792,6 +9861,10 @@ packages: resolution: {integrity: sha512-TphAq3bE34R5O0qW2q1SSBGdqfjTtHQSxzjKc0ufvTJf1nVZkJpCOqAP0Bue48AwfFYQSagdD3RgqYjcPPEMYg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/dom@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-Q1tsOBw4srjpSTFX5oAvGqzPWFfk2n2ewLIDVT5r3cAFuk4inZxN7uG+UlbQDgmdVkF5DsbLEodEbYj1iDTG6w==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/e2e-test-utils-playwright@1.31.0': resolution: {integrity: sha512-iOMZfnYxartxmI/9nnCzPH6LbveFxKdtpT040U4ccTYtN33YiUTPap9pDmwmR+Lc6UC9nIzdfQVmgbFly25q1A==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9820,6 +9893,10 @@ packages: resolution: {integrity: sha512-W/Bw6HXzRBJgYYUdoUBUvtjXNWh8dVK8aqFsqpnEJTAiXdU8Ii0wBQ+E49bI/08yGCwsaXrLbQLXqtAiV6leMw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/element@6.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-13VB9QaQB1z6lZ4pWCUEWpGrAziuD2TGh44gUzTKiqGlelOXuf7N3/hb9DA6YsAnFZpvhXhuJh/ThTS5LKKafA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/escape-html@3.31.0': resolution: {integrity: sha512-9g9qd7Q16PWDeYEa2dU+84d1SvjP4LfS7n7AuXkwl5+F7KfL2nZTmDTHWutw9jVjdDAGmjm1VNIj4ydQk9vaLA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9828,6 +9905,10 @@ packages: resolution: {integrity: sha512-pT5wZmg9ob/u8RuSXgfZv8Kfd8zpvtBcCdcFE/UHasjtxJSecxDHFb0uI4eXQrSiTrsthbDZDlK/GIAagmt75Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/escape-html@3.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-VKdHKIoY90uNXQS+87BDhc73USCgtnKHYIsDj066q1lQmrdaJ2PDzWY9EbXL6QXcPoZVLPeUfdmPzN+a0O4X/g==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/eslint-plugin@22.17.0': resolution: {integrity: sha512-2Qu8YxjbpvvSblPpYm0otOWUSILX3DmEcUPLrBTW4dD3VlYDr3O0Wk2pk+fmGMVZxt6bZ5cd4bkV1oCnW/3DyQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9878,6 +9959,10 @@ packages: resolution: {integrity: sha512-aXCLsuOQJiVJDrVKV4MjGYeU2Nv8+pg2KSAzANs7OGXIl714Q968t5qODJiJ6ADsng3FnQ0pATVYBGBTGlW6Gg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/hooks@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-D0s2/QDJ3VHKtEMQ8PyP+QXn3CPkL4vjVnL9yBBP8HvsbU5Pt6eaN6kyy2lYKgVv9KBX2nEy8pgUdzO9jk1Iow==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/html-entities@4.31.0': resolution: {integrity: sha512-5dk9h16jSXDTSdk0HnyXEOgZd7VSsMtr3YCSUQvzIYOFkpW2q1eB10coXHiuz0Z5ArlTuNYSfBd2J02xnG+a8g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9886,6 +9971,10 @@ packages: resolution: {integrity: sha512-IHHxBeMIQR7/+Fq27eWEzOuBi10guTRBNVZUrdk32ZyJL2ISpVYwMiHOwKBH6J/67ayBSon23gUEWBqUE6bC9g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/html-entities@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-chcAjFbAszaGz9lLf/DkGV0+VphCjmFhLAQglgIW2y523QecQ8xGomw4Z/Ag13AxsKM1KdYn+EFU4NsjbVmWgg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/i18n@5.26.0': resolution: {integrity: sha512-YHzaUWlCuN2ynl47qbsdMkTGtP52+E1giDOdWBgUaSexUYjbeFxKFUzRMB0Wuh1psL80+VzvJOH/mU440KAJnA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9901,6 +9990,11 @@ packages: engines: {node: '>=18.12.0', npm: '>=8.19.2'} hasBin: true + '@wordpress/i18n@6.5.1-next.ff1cebbba.0': + resolution: {integrity: sha512-p9Oz5G0USUX6O9FlWZLbitHRumFC/UUkBdpf1YED1/zZ7NcpSm8nRjEW9iJwcz6WKamMpG5kgWTXobqeORbiOQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + hasBin: true + '@wordpress/icons@10.31.0': resolution: {integrity: sha512-Bfwt3SyjqClG6mwY78zhlzVRRW/OIqej09NLOGO0CDtjfrgQqD5HAK8kk2CayQr4hWeKMoFxzPBevMxWumBMPA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9913,6 +10007,12 @@ packages: peerDependencies: react: ^18 + '@wordpress/icons@11.0.1-next.ff1cebbba.0': + resolution: {integrity: sha512-kMjhqfOBgdQmjWyhSqYHGCZRpapQAW1hyn30UI+zhe7I2rJs+5DVePz4iWF43GCGM87X6m2N8GaynneKjcGekg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18 + '@wordpress/interactivity-router@2.32.0': resolution: {integrity: sha512-3hVMD4nIEfBwPoZ2DXBzgCt/+rLnmflxgk8pnFLp3FBL69KwEoN92NuNEOID3HIQu3v1z/DElSbpuLZIyjHeZw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9936,6 +10036,10 @@ packages: resolution: {integrity: sha512-YabJ43zv30CU8kPhTrWQZhlatwO/fBo78/HvEU40CSGCRf+j9XKu9ZUidj3xDKgzLEkDCOKmj0vUY0+NyBbKzA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/is-shallow-equal@5.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-Fdad13pKdWgfn9ukUpg0QzwXV7odoGx1ExQOuBloCkehWhnIf0gpuFpM5PGizEukQqnFhRZywjKmnyhCInExwg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/jest-console@8.31.0': resolution: {integrity: sha512-pkeMoLokwUTsQpDxmzKtLS10JQhVln+TgibuDiygCnEWnR78G6++1l4PPgtRR33qdwyXlWIDZhLdBBGRRA3sOg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -9956,6 +10060,10 @@ packages: resolution: {integrity: sha512-XzSc3uT+viVCdycT2W6/wu+d8NZaS2y0sdHZbPXIJ6hEbyyG7ncG+XDFhXckFggqXuajxkPTEJDwOtrSTxLYqw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/keycodes@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-mdI6i6sza8c+VOAvQG3d+4DUWQqBa4VcPWxhTdVPS67MR+pz36NrxpbwvKSj0iZuJvtksgX/7l0NlYZSwPOipw==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/media-utils@5.31.0': resolution: {integrity: sha512-41O67AO/axvxYbrCp/rgGsYTrSbIWd7b7IC3R7nlSCiSw/UFOqET+pJ7KEu/m2dQTQPCtIoODiVVAD5S7oTKeg==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -10017,14 +10125,28 @@ packages: peerDependencies: react: ^18.0.0 + '@wordpress/primitives@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-JbD39OFMctD1AddSuGgpdlMfNJN0gokJ2t0RS6NjpRdy8ThQmhSQDPQmz0T9F6VPVq/khuGucWmeFoHkCx7OQA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/priority-queue@3.32.0': resolution: {integrity: sha512-LXlkiXxRSv35FBvjfAqn+rHH7KF4mw2wVl57SVzWglZAUdfvrcjrinRlEsqgMZxeAVeLPiutRV1qlkueZl7E8w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/priority-queue@3.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-Jvfq23OTeZRMhex2bMVUpr6bA4TBvt6b6ILSXXFtxM4kX6pr/ubIfYsrl+sQeW9tiU+CUHOg2Rv/ryBTTQTtgA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/private-apis@1.32.0': resolution: {integrity: sha512-xmc+U8tve6QmGKiYTwVutkPkqqJkvB2fvrimjMkw8TGpnzBcmSlCtwIoLwJOBesD6liDdRFtBPpf6PM0jIRcIA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/private-apis@1.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-s00jCMa/5SAW8pYqEUJoMdyUPEBEvszyA2NPiu5tnbcmjC9DdsID8CzvWOVCppIdckmb0foM1F88UH9Dot40Hg==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/react-i18n@4.32.0': resolution: {integrity: sha512-037c2RePQbTtXXQhgopBssOsrVw4dZJe2y5JTp7qh+Yoi6qeO43j0KWlRkXJnqgbsigvddTtWF/kw4VAHMWQHQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -10035,6 +10157,12 @@ packages: peerDependencies: redux: '>=4' + '@wordpress/redux-routine@5.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-MH+gYEnZpzELvxheokuY+BCGJX0ltcJTXUESBMKJXe0ZkNSrbXaRkoBs4S64Yk3PO8LW6wwvs4zWjc2yhDqQEA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + redux: '>=4' + '@wordpress/reusable-blocks@5.32.0': resolution: {integrity: sha512-aMD5dFNu2+orafsfTHuFfQbB6BT4J9a1Y6FTwz+ollr9Q8Ng8qlt79qS2rcGEBHTyxTD2SOxPVU3+DAysl6KnQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -10054,6 +10182,12 @@ packages: peerDependencies: react: ^18.0.0 + '@wordpress/rich-text@7.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-kvQ1jvfkfZDn9RqszykN3RDBLwTfMaCyWTtnHb/Di9RgsFLdofQ8qLONYsdW/bnk/APFnSN9vIb0iSi2MwZiYQ==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + peerDependencies: + react: ^18.0.0 + '@wordpress/router@1.32.0': resolution: {integrity: sha512-nP/YJH7cQbVOODfjTw+dwnBg6dm3GRc6KtI2rx3kAfcd/uFtE6tZs31t90HTKOAwFMsf3k0R8yItX0nes9lE0Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -10098,6 +10232,10 @@ packages: resolution: {integrity: sha512-pEnsf9zvk61ijX28wmJ7HM2Xb2Dbdg80feF0QVFAsngFiS34r9/K1JE+y56OdyYY20ZGPbmbHLpIHX0ghjhpoQ==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/undo-manager@1.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-xvssmMJV8azJK2YM21m82R1tcWNTg798STwHSDXHwKe0XmXAUTMgiphEuFMOzIc0nt1l58ma1jA0W9eOymyg5Q==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/upload-media@0.16.0': resolution: {integrity: sha512-4ug8Ysm/cukAYQTt5MCTpY3yPaM0hB9HWf8SttUYVTfKacTCWbg2bRg5RihojDnB+zZVwmygTvVXmn3jFxSU+Q==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -10120,6 +10258,10 @@ packages: resolution: {integrity: sha512-B7Q6sKzBqSLUdQiW8oL69LFuky/IRrXDbBhPpOJruwV4l6eH6UhTlnY4QZYi1Ke91c/VJZRjUKx1fNWPJx5d9w==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/url@4.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-ie0QpJYEbVChQSaP2RgtORYvOadtEGVWv/DDVb8lPkOs8OjfeC45EH49fKpntoUnbLQDeHZ6L8SrYjLgElvt/A==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/viewport@6.31.0': resolution: {integrity: sha512-lqQCXHQpFTawJjvus3trUYm2tVxWU1lTza1a5HWOtQaKFqKs9lP3Bpv0ViMPNv77m0fldnDNsFRMAVIVUedh5g==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -10130,6 +10272,10 @@ packages: resolution: {integrity: sha512-6dPNKfJAOXijIMi9k/QdS/IQvHXcl5ErNM10y5dIhhLDuGmsZlQER06VrVmQIVAkbsmL49OfrqkqMOQidp61JA==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/warning@3.32.1-next.ff1cebbba.0': + resolution: {integrity: sha512-hL4UhDvTuh/Fy0xaQ/lHJmchsbQF0r325lJc7lV0pvcF8KHrr07hupbsawv7oPKAlBSJ7RHf9PYFfdzJ2isLXA==} + engines: {node: '>=18.12.0', npm: '>=8.19.2'} + '@wordpress/widgets@4.31.0': resolution: {integrity: sha512-bhFyLEl0+2ZSnCUK/+/TO0agyWL5kK3uPIWL1m3i/WFoKgoF2rtZDlEMhQcsKbLSwvMllegu5sJZHWawZnL4Cw==} engines: {node: '>=18.12.0', npm: '>=8.19.2'} @@ -16457,6 +16603,9 @@ packages: resolution: {integrity: sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==} engines: {node: '>=6'} + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -21288,6 +21437,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@tanstack/history@1.120.17': {} + '@tanstack/query-core@5.75.0': {} '@tanstack/query-core@5.90.3': {} @@ -21310,6 +21461,32 @@ snapshots: '@tanstack/query-core': 5.90.3 react: 18.3.1 + '@tanstack/react-router@1.120.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/history': 1.120.17 + '@tanstack/react-store': 0.7.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/router-core': 1.120.19 + jsesc: 3.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + + '@tanstack/react-store@0.7.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/store': 0.7.7 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.6.0(react@18.3.1) + + '@tanstack/router-core@1.120.19': + dependencies: + '@tanstack/history': 1.120.17 + '@tanstack/store': 0.7.7 + tiny-invariant: 1.3.3 + + '@tanstack/store@0.7.7': {} + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 @@ -22239,6 +22416,11 @@ snapshots: '@wordpress/dom-ready': 4.32.0 '@wordpress/i18n': 6.5.0 + '@wordpress/a11y@4.32.1-next.ff1cebbba.0': + dependencies: + '@wordpress/dom-ready': 4.32.1-next.ff1cebbba.0 + '@wordpress/i18n': 6.5.1-next.ff1cebbba.0 + '@wordpress/annotations@3.31.0(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -22291,6 +22473,8 @@ snapshots: '@wordpress/base-styles@6.8.0': {} + '@wordpress/base-styles@6.8.1-next.ff1cebbba.0': {} + '@wordpress/blob@4.31.0': dependencies: '@babel/runtime': 7.28.4 @@ -23238,6 +23422,61 @@ snapshots: - '@types/react' - supports-color + '@wordpress/components@30.6.1-next.ff1cebbba.0(@types/react@18.3.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ariakit/react': 0.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@emotion/cache': 11.14.0 + '@emotion/css': 11.13.5 + '@emotion/react': 11.14.0(@types/react@18.3.25)(react@18.3.1) + '@emotion/serialize': 1.3.3 + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.25)(react@18.3.1))(@types/react@18.3.25)(react@18.3.1) + '@emotion/utils': 1.4.2 + '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/gradient-parser': 1.1.0 + '@types/highlight-words-core': 1.2.1 + '@use-gesture/react': 10.3.1(react@18.3.1) + '@wordpress/a11y': 4.32.1-next.ff1cebbba.0 + '@wordpress/base-styles': 6.8.1-next.ff1cebbba.0 + '@wordpress/compose': 7.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/date': 5.32.1-next.ff1cebbba.0 + '@wordpress/deprecated': 4.32.1-next.ff1cebbba.0 + '@wordpress/dom': 4.32.1-next.ff1cebbba.0 + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + '@wordpress/escape-html': 3.32.1-next.ff1cebbba.0 + '@wordpress/hooks': 4.32.1-next.ff1cebbba.0 + '@wordpress/html-entities': 4.32.1-next.ff1cebbba.0 + '@wordpress/i18n': 6.5.1-next.ff1cebbba.0 + '@wordpress/icons': 11.0.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/is-shallow-equal': 5.32.1-next.ff1cebbba.0 + '@wordpress/keycodes': 4.32.1-next.ff1cebbba.0 + '@wordpress/primitives': 4.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/private-apis': 1.32.1-next.ff1cebbba.0 + '@wordpress/rich-text': 7.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/warning': 3.32.1-next.ff1cebbba.0 + change-case: 4.1.2 + clsx: 2.1.1 + colord: 2.9.3 + date-fns: 3.6.0 + deepmerge: 4.3.1 + fast-deep-equal: 3.1.3 + framer-motion: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + gradient-parser: 1.1.1 + highlight-words-core: 1.2.3 + is-plain-object: 5.0.0 + memize: 2.1.1 + path-to-regexp: 6.3.0 + re-resizable: 6.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-day-picker: 9.11.1(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + remove-accents: 0.5.0 + uuid: 9.0.1 + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react' + - supports-color + '@wordpress/compose@7.23.0(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -23289,6 +23528,22 @@ snapshots: react: 18.3.1 use-memo-one: 1.1.3(react@18.3.1) + '@wordpress/compose@7.32.1-next.ff1cebbba.0(react@18.3.1)': + dependencies: + '@types/mousetrap': 1.6.15 + '@wordpress/deprecated': 4.32.1-next.ff1cebbba.0 + '@wordpress/dom': 4.32.1-next.ff1cebbba.0 + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + '@wordpress/is-shallow-equal': 5.32.1-next.ff1cebbba.0 + '@wordpress/keycodes': 4.32.1-next.ff1cebbba.0 + '@wordpress/priority-queue': 3.32.1-next.ff1cebbba.0 + '@wordpress/undo-manager': 1.32.1-next.ff1cebbba.0 + change-case: 4.1.2 + clipboard: 2.0.11 + mousetrap: 1.6.5 + react: 18.3.1 + use-memo-one: 1.1.3(react@18.3.1) + '@wordpress/core-data@7.31.0(@types/react-dom@18.3.7(@types/react@18.3.25))(@types/react@18.3.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -23539,6 +23794,71 @@ snapshots: rememo: 4.0.2 use-memo-one: 1.1.3(react@18.3.1) + '@wordpress/data@10.32.1-next.ff1cebbba.0(react@18.3.1)': + dependencies: + '@wordpress/compose': 7.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/deprecated': 4.32.1-next.ff1cebbba.0 + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + '@wordpress/is-shallow-equal': 5.32.1-next.ff1cebbba.0 + '@wordpress/priority-queue': 3.32.1-next.ff1cebbba.0 + '@wordpress/private-apis': 1.32.1-next.ff1cebbba.0 + '@wordpress/redux-routine': 5.32.1-next.ff1cebbba.0(redux@5.0.1) + deepmerge: 4.3.1 + equivalent-key-map: 0.2.2 + is-plain-object: 5.0.0 + is-promise: 4.0.0 + react: 18.3.1 + redux: 5.0.1 + rememo: 4.0.2 + use-memo-one: 1.1.3(react@18.3.1) + + '@wordpress/dataviews@10.0.1-next.b8c8708f3.0(patch_hash=9971bdb899e2fb0a4421ab8b7f0a54a41f03b10ef1b51d72946e94f4279e05c1)(@types/react@18.3.25)(react@18.3.1)': + dependencies: + '@ariakit/react': 0.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/base-styles': 6.8.1-next.ff1cebbba.0 + '@wordpress/components': 30.6.1-next.ff1cebbba.0(@types/react@18.3.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/compose': 7.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/data': 10.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + '@wordpress/i18n': 6.5.1-next.ff1cebbba.0 + '@wordpress/icons': 11.0.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/keycodes': 4.32.1-next.ff1cebbba.0 + '@wordpress/primitives': 4.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/private-apis': 1.32.1-next.ff1cebbba.0 + '@wordpress/url': 4.32.1-next.ff1cebbba.0 + '@wordpress/warning': 3.32.1-next.ff1cebbba.0 + clsx: 2.1.1 + react: 18.3.1 + remove-accents: 0.5.0 + optionalDependencies: + '@emotion/cache': 11.14.0 + '@emotion/css': 11.13.5 + '@emotion/react': 11.14.0(@types/react@18.3.25)(react@18.3.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.25)(react@18.3.1))(@types/react@18.3.25)(react@18.3.1) + '@emotion/utils': 1.4.2 + '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@use-gesture/react': 10.3.1(react@18.3.1) + '@wordpress/date': 5.32.1-next.ff1cebbba.0 + '@wordpress/hooks': 4.32.1-next.ff1cebbba.0 + change-case: 4.1.2 + colord: 2.9.3 + date-fns: 4.1.0 + deepmerge: 4.3.1 + fast-deep-equal: 3.1.3 + framer-motion: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + highlight-words-core: 1.2.3 + is-plain-object: 5.0.0 + memize: 2.1.1 + react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-day-picker: 9.11.1(react@18.3.1) + react-dom: 18.3.1(react@18.3.1) + use-memo-one: 1.1.3(react@18.3.1) + uuid: 9.0.1 + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react' + - supports-color + '@wordpress/dataviews@9.1.0(patch_hash=9971bdb899e2fb0a4421ab8b7f0a54a41f03b10ef1b51d72946e94f4279e05c1)(@types/react@18.3.25)(react@18.3.1)': dependencies: '@ariakit/react': 0.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -23649,6 +23969,12 @@ snapshots: moment: 2.30.1 moment-timezone: 0.5.48 + '@wordpress/date@5.32.1-next.ff1cebbba.0': + dependencies: + '@wordpress/deprecated': 4.32.1-next.ff1cebbba.0 + moment: 2.30.1 + moment-timezone: 0.5.48 + '@wordpress/dependency-extraction-webpack-plugin@6.31.0(webpack@5.101.3)': dependencies: json2php: 0.0.7 @@ -23659,6 +23985,10 @@ snapshots: '@babel/runtime': 7.28.4 '@wordpress/hooks': 4.32.0 + '@wordpress/deprecated@4.32.1-next.ff1cebbba.0': + dependencies: + '@wordpress/hooks': 4.32.1-next.ff1cebbba.0 + '@wordpress/dom-ready@4.31.0': dependencies: '@babel/runtime': 7.28.4 @@ -23667,6 +23997,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@wordpress/dom-ready@4.32.1-next.ff1cebbba.0': {} + '@wordpress/dom@4.31.0': dependencies: '@babel/runtime': 7.28.4 @@ -23677,6 +24009,10 @@ snapshots: '@babel/runtime': 7.28.4 '@wordpress/deprecated': 4.32.0 + '@wordpress/dom@4.32.1-next.ff1cebbba.0': + dependencies: + '@wordpress/deprecated': 4.32.1-next.ff1cebbba.0 + '@wordpress/e2e-test-utils-playwright@1.31.0(@playwright/test@1.55.1)': dependencies: '@playwright/test': 1.55.1 @@ -24022,6 +24358,16 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@wordpress/element@6.32.1-next.ff1cebbba.0': + dependencies: + '@types/react': 18.3.25 + '@types/react-dom': 18.3.7(@types/react@18.3.25) + '@wordpress/escape-html': 3.32.1-next.ff1cebbba.0 + change-case: 4.1.2 + is-plain-object: 5.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@wordpress/escape-html@3.31.0': dependencies: '@babel/runtime': 7.28.4 @@ -24030,6 +24376,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@wordpress/escape-html@3.32.1-next.ff1cebbba.0': {} + '@wordpress/eslint-plugin@22.17.0(@babel/core@7.28.4)(eslint-config-prettier@10.1.8(eslint@9.35.0))(eslint-plugin-import@2.32.0)(eslint-plugin-jest@29.0.1(eslint@9.35.0)(jest@30.0.4)(typescript@5.9.2))(eslint-plugin-jsdoc@51.4.1(eslint@9.35.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0))(eslint-plugin-playwright@2.2.2(eslint@9.35.0))(eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.35.0))(eslint@9.35.0)(wp-prettier@3.0.3))(eslint-plugin-react-hooks@5.2.0(eslint@9.35.0))(eslint-plugin-react@7.37.5(eslint@9.35.0))(eslint@9.35.0)(typescript@5.9.2)(wp-prettier@3.0.3)': dependencies: '@babel/core': 7.28.4 @@ -24206,6 +24554,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@wordpress/hooks@4.32.1-next.ff1cebbba.0': {} + '@wordpress/html-entities@4.31.0': dependencies: '@babel/runtime': 7.28.4 @@ -24214,6 +24564,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@wordpress/html-entities@4.32.1-next.ff1cebbba.0': {} + '@wordpress/i18n@5.26.0': dependencies: '@babel/runtime': 7.28.4 @@ -24241,6 +24593,14 @@ snapshots: memize: 2.1.1 tannin: 1.2.0 + '@wordpress/i18n@6.5.1-next.ff1cebbba.0': + dependencies: + '@tannin/sprintf': 1.3.3 + '@wordpress/hooks': 4.32.1-next.ff1cebbba.0 + gettext-parser: 1.4.0 + memize: 2.1.1 + tannin: 1.2.0 + '@wordpress/icons@10.31.0(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -24255,6 +24615,12 @@ snapshots: '@wordpress/primitives': 4.32.0(react@18.3.1) react: 18.3.1 + '@wordpress/icons@11.0.1-next.ff1cebbba.0(react@18.3.1)': + dependencies: + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + '@wordpress/primitives': 4.32.1-next.ff1cebbba.0(react@18.3.1) + react: 18.3.1 + '@wordpress/interactivity-router@2.32.0': dependencies: '@wordpress/a11y': 4.32.0 @@ -24319,6 +24685,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@wordpress/is-shallow-equal@5.32.1-next.ff1cebbba.0': {} + '@wordpress/jest-console@8.31.0(jest@30.0.4)': dependencies: '@babel/runtime': 7.28.4 @@ -24343,6 +24711,10 @@ snapshots: '@babel/runtime': 7.28.4 '@wordpress/i18n': 6.5.0 + '@wordpress/keycodes@4.32.1-next.ff1cebbba.0': + dependencies: + '@wordpress/i18n': 6.5.1-next.ff1cebbba.0 + '@wordpress/media-utils@5.31.0': dependencies: '@babel/runtime': 7.28.4 @@ -24547,15 +24919,27 @@ snapshots: clsx: 2.1.1 react: 18.3.1 + '@wordpress/primitives@4.32.1-next.ff1cebbba.0(react@18.3.1)': + dependencies: + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + clsx: 2.1.1 + react: 18.3.1 + '@wordpress/priority-queue@3.32.0': dependencies: '@babel/runtime': 7.28.4 requestidlecallback: 0.3.0 + '@wordpress/priority-queue@3.32.1-next.ff1cebbba.0': + dependencies: + requestidlecallback: 0.3.0 + '@wordpress/private-apis@1.32.0': dependencies: '@babel/runtime': 7.28.4 + '@wordpress/private-apis@1.32.1-next.ff1cebbba.0': {} + '@wordpress/react-i18n@4.32.0': dependencies: '@babel/runtime': 7.28.4 @@ -24571,6 +24955,13 @@ snapshots: redux: 5.0.1 rungen: 0.3.2 + '@wordpress/redux-routine@5.32.1-next.ff1cebbba.0(redux@5.0.1)': + dependencies: + is-plain-object: 5.0.0 + is-promise: 4.0.0 + redux: 5.0.1 + rungen: 0.3.2 + '@wordpress/reusable-blocks@5.32.0(@types/react-dom@18.3.7(@types/react@18.3.25))(@types/react@18.3.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -24673,6 +25064,20 @@ snapshots: memize: 2.1.1 react: 18.3.1 + '@wordpress/rich-text@7.32.1-next.ff1cebbba.0(react@18.3.1)': + dependencies: + '@wordpress/a11y': 4.32.1-next.ff1cebbba.0 + '@wordpress/compose': 7.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/data': 10.32.1-next.ff1cebbba.0(react@18.3.1) + '@wordpress/deprecated': 4.32.1-next.ff1cebbba.0 + '@wordpress/element': 6.32.1-next.ff1cebbba.0 + '@wordpress/escape-html': 3.32.1-next.ff1cebbba.0 + '@wordpress/i18n': 6.5.1-next.ff1cebbba.0 + '@wordpress/keycodes': 4.32.1-next.ff1cebbba.0 + colord: 2.9.3 + memize: 2.1.1 + react: 18.3.1 + '@wordpress/router@1.32.0(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -24772,6 +25177,10 @@ snapshots: '@babel/runtime': 7.28.4 '@wordpress/is-shallow-equal': 5.32.0 + '@wordpress/undo-manager@1.32.1-next.ff1cebbba.0': + dependencies: + '@wordpress/is-shallow-equal': 5.32.1-next.ff1cebbba.0 + '@wordpress/upload-media@0.16.0(@types/react@18.3.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -24862,6 +25271,10 @@ snapshots: '@babel/runtime': 7.28.4 remove-accents: 0.5.0 + '@wordpress/url@4.32.1-next.ff1cebbba.0': + dependencies: + remove-accents: 0.5.0 + '@wordpress/viewport@6.31.0(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -24872,6 +25285,8 @@ snapshots: '@wordpress/warning@3.32.0': {} + '@wordpress/warning@3.32.1-next.ff1cebbba.0': {} + '@wordpress/widgets@4.31.0(@types/react-dom@18.3.7(@types/react@18.3.25))(@types/react@18.3.25)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -32598,6 +33013,8 @@ snapshots: tiny-lru@7.0.6: {} + tiny-warning@1.0.3: {} + tinyexec@0.3.2: {} tinyglobby@0.2.15: diff --git a/projects/packages/forms/changelog/update-dataviews-to-10-next b/projects/packages/forms/changelog/update-dataviews-to-10-next new file mode 100644 index 0000000000000..daa6cfaf4a671 --- /dev/null +++ b/projects/packages/forms/changelog/update-dataviews-to-10-next @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Forms: Update DataViews to 10.0.1-next diff --git a/projects/packages/forms/changelog/update-tanstack-router-migration b/projects/packages/forms/changelog/update-tanstack-router-migration new file mode 100644 index 0000000000000..fa780cf97ee72 --- /dev/null +++ b/projects/packages/forms/changelog/update-tanstack-router-migration @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Forms: Migrate dashboard routing from React Router to TanStack Router diff --git a/projects/packages/forms/package.json b/projects/packages/forms/package.json index 2f9f09c3782a8..96ebf161ab276 100644 --- a/projects/packages/forms/package.json +++ b/projects/packages/forms/package.json @@ -43,6 +43,7 @@ "@automattic/request-external-access": "1.0.1", "@automattic/ui": "1.0.2", "@gravatar-com/hovercards": "0.15.0", + "@tanstack/react-router": ">=1.120.5 <1.121.0", "@wordpress/base-styles": "6.7.0", "@wordpress/block-editor": "15.4.0", "@wordpress/blocks": "15.4.0", @@ -50,7 +51,7 @@ "@wordpress/compose": "7.31.0", "@wordpress/core-data": "7.31.0", "@wordpress/data": "10.31.0", - "@wordpress/dataviews": "9.1.0", + "@wordpress/dataviews": "10.0.1-next.b8c8708f3.0", "@wordpress/dom-ready": "4.31.0", "@wordpress/editor": "14.31.0", "@wordpress/element": "6.31.0", @@ -71,7 +72,6 @@ "libphonenumber-js": "1.12.23", "lodash": "4.17.21", "react-redux": "7.2.8", - "react-router": "7.6.2", "react-transition-group": "^4.4.5", "redux": "4.2.1", "redux-thunk": "2.3.0", diff --git a/projects/packages/forms/src/dashboard/components/inbox-status-toggle/index.tsx b/projects/packages/forms/src/dashboard/components/inbox-status-toggle/index.tsx index 352cc23a64a41..6e69f1b8109e1 100644 --- a/projects/packages/forms/src/dashboard/components/inbox-status-toggle/index.tsx +++ b/projects/packages/forms/src/dashboard/components/inbox-status-toggle/index.tsx @@ -4,6 +4,7 @@ import jetpackAnalytics from '@automattic/jetpack-analytics'; import { useBreakpointMatch } from '@automattic/jetpack-components'; import { formatNumber } from '@automattic/number-formatters'; +import { useNavigate, useRouterState } from '@tanstack/react-router'; import { // eslint-disable-next-line @wordpress/no-unsafe-wp-apis __experimentalToggleGroupControl as ToggleGroupControl, @@ -12,7 +13,6 @@ import { } from '@wordpress/components'; import { __, _x } from '@wordpress/i18n'; import { useCallback } from 'react'; -import { useSearchParams } from 'react-router'; /** * Internal dependencies */ @@ -40,8 +40,10 @@ type InboxStatusToggleProps = { * @return {JSX.Element} The status toggle component. */ export default function InboxStatusToggle( { onChange }: InboxStatusToggleProps ): JSX.Element { - const [ searchParams, setSearchParams ] = useSearchParams(); - const status = searchParams.get( 'status' ) || 'inbox'; + const navigate = useNavigate(); + const routerState = useRouterState(); + const searchParams = routerState?.location?.search || {}; + const status = searchParams.status || 'inbox'; const [ isSm ] = useBreakpointMatch( 'sm' ); const { totalItemsInbox, totalItemsSpam, totalItemsTrash } = useInboxData(); @@ -63,16 +65,17 @@ export default function InboxStatusToggle( { onChange }: InboxStatusToggleProps previous_status: status, } ); - setSearchParams( prev => { - const params = new URLSearchParams( prev ); - params.set( 'status', newStatus ); - - return params; + navigate( { + // @ts-expect-error - TanStack Router types require strictNullChecks + search: prev => ( { + ...prev, + status: newStatus, + } ), } ); onChange( newStatus ); }, - [ isSm, status, setSearchParams, onChange ] + [ isSm, status, navigate, onChange ] ); return ( diff --git a/projects/packages/forms/src/dashboard/components/layout/index.tsx b/projects/packages/forms/src/dashboard/components/layout/index.tsx index b6925f4657118..87e7745ce14a0 100644 --- a/projects/packages/forms/src/dashboard/components/layout/index.tsx +++ b/projects/packages/forms/src/dashboard/components/layout/index.tsx @@ -3,11 +3,11 @@ */ import jetpackAnalytics from '@automattic/jetpack-analytics'; import { useBreakpointMatch } from '@automattic/jetpack-components'; +import { Outlet, useLocation, useNavigate } from '@tanstack/react-router'; import { TabPanel } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import { useCallback, useEffect, useMemo } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; -import { Outlet, useLocation, useNavigate } from 'react-router'; /** * Internal dependencies */ @@ -94,8 +94,8 @@ const Layout = () => { } navigate( { - pathname: `/${ tabName }`, - search: tabName === 'responses' ? location.search : '', + to: `/${ tabName }`, + search: tabName === 'responses' ? location.search : undefined, } ); }, [ navigate, location.search, isSm, getCurrentTab, hasFeedback ] diff --git a/projects/packages/forms/src/dashboard/hooks/use-inbox-data.ts b/projects/packages/forms/src/dashboard/hooks/use-inbox-data.ts index 2bb029febd4fb..c4e35e210f3f2 100644 --- a/projects/packages/forms/src/dashboard/hooks/use-inbox-data.ts +++ b/projects/packages/forms/src/dashboard/hooks/use-inbox-data.ts @@ -1,12 +1,12 @@ /** * External dependencies */ +import { useRouterState } from '@tanstack/react-router'; import { useEntityRecords, store as coreDataStore } from '@wordpress/core-data'; import { useDispatch, useSelect } from '@wordpress/data'; import { useMemo } from '@wordpress/element'; import { decodeEntities } from '@wordpress/html-entities'; import { isEmpty } from 'lodash'; -import { useSearchParams } from 'react-router'; /** * Internal dependencies */ @@ -73,9 +73,10 @@ interface UseInboxDataReturn { * @return {UseInboxDataReturn} The inbox related data. */ export default function useInboxData(): UseInboxDataReturn { - const [ searchParams ] = useSearchParams(); + const routerState = useRouterState(); + const searchParams = routerState?.location?.search || {}; const { setCurrentQuery, setSelectedResponses } = useDispatch( dashboardStore ); - const urlStatus = searchParams.get( 'status' ); + const urlStatus = searchParams.status; const statusFilter = getStatusFilter( urlStatus ); const { diff --git a/projects/packages/forms/src/dashboard/inbox/dataviews/index.js b/projects/packages/forms/src/dashboard/inbox/dataviews/index.js index b90a564d45ffc..0f4d06fdac072 100644 --- a/projects/packages/forms/src/dashboard/inbox/dataviews/index.js +++ b/projects/packages/forms/src/dashboard/inbox/dataviews/index.js @@ -1,6 +1,7 @@ /** * External dependencies */ +import { useNavigate, useRouterState } from '@tanstack/react-router'; import { ExternalLink, // eslint-disable-next-line @wordpress/no-unsafe-wp-apis @@ -13,7 +14,6 @@ import { useCallback, useMemo, useState } from '@wordpress/element'; import { decodeEntities } from '@wordpress/html-entities'; import { __ } from '@wordpress/i18n'; import { useEffect } from 'react'; -import { useSearchParams } from 'react-router'; /** * Internal dependencies */ @@ -74,10 +74,12 @@ const setupSidebarWidthObserver = () => { */ export default function InboxView() { const [ view, setView ] = useView(); - const [ searchParams, setSearchParams ] = useSearchParams(); + const navigate = useNavigate(); + const routerState = useRouterState(); + const searchParams = routerState?.location?.search || {}; const [ containerWidth, setContainerWidth ] = useState( 0 ); - const dateSettings = getDateSettings(); + const containerRef = useResizeObserver( resizeObserverEntries => { setContainerWidth( resizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize ); @@ -85,7 +87,7 @@ export default function InboxView() { { box: 'border-box' } ); const isMobile = containerWidth <= MOBILE_BREAKPOINT; - const selectedResponses = searchParams.get( 'r' ); + const selectedResponses = searchParams.r; useEffect( () => { return setupSidebarWidthObserver(); @@ -152,17 +154,19 @@ export default function InboxView() { records?.find( record => getItemId( record ) === items[ items.length - 1 ] ) ); } - setSearchParams( previousSearchParams => { - const _searchParams = new URLSearchParams( previousSearchParams ); - if ( items.length ) { - _searchParams.set( 'r', items.join( ',' ) ); - } else { - _searchParams.delete( 'r' ); - } - return _searchParams; + navigate( { + search: prev => { + const updated = { ...prev }; + if ( items.length ) { + updated.r = items.join( ',' ); + } else { + delete updated.r; + } + return updated; + }, } ); }, - [ records, setSearchParams, isMobile ] + [ records, navigate, isMobile ] ); // Because selection is in sync with the URL and data takes some time to load, // We need to carefully (avoid infinite loops by always updating the state) diff --git a/projects/packages/forms/src/dashboard/inbox/dataviews/views.js b/projects/packages/forms/src/dashboard/inbox/dataviews/views.js index c2b4c3f6cef9c..1bb0e549dbcd9 100644 --- a/projects/packages/forms/src/dashboard/inbox/dataviews/views.js +++ b/projects/packages/forms/src/dashboard/inbox/dataviews/views.js @@ -1,9 +1,9 @@ /** * WordPress dependencies */ +import { useNavigate, useRouterState } from '@tanstack/react-router'; import { useEvent } from '@wordpress/compose'; import { useEffect, useState } from '@wordpress/element'; -import { useSearchParams } from 'react-router'; const LAYOUT_TABLE = 'table'; @@ -29,27 +29,34 @@ export const defaultLayouts = { * @return {Array} The [ state, setState ] tuple. */ export function useView() { - const [ searchParams, setSearchParams ] = useSearchParams(); - const urlSearch = searchParams.get( 'search' ); + const navigate = useNavigate(); + const routerState = useRouterState(); + const searchParams = routerState?.location?.search || {}; + const urlSearch = searchParams.search; + const [ view, setView ] = useState( () => ( { ...defaultView, search: urlSearch ?? '', } ) ); + // When view changes, update the URL params if needed. const setViewWithUrlUpdate = useEvent( newView => { setView( newView ); if ( newView.search !== urlSearch ) { - setSearchParams( previousSearchParams => { - const _searchParams = new URLSearchParams( previousSearchParams ); - if ( newView.search ) { - _searchParams.set( 'search', newView.search ); - } else { - _searchParams.delete( 'search' ); - } - return _searchParams; + navigate( { + search: prev => { + const updated = { ...prev }; + if ( newView.search ) { + updated.search = newView.search; + } else { + delete updated.search; + } + return updated; + }, } ); } } ); + // When search URL param changes, update the view's search filter // without affecting any other config. const onUrlSearchChange = useEvent( () => { @@ -64,8 +71,10 @@ export function useView() { }; } ); } ); + useEffect( () => { onUrlSearchChange(); }, [ onUrlSearchChange, urlSearch ] ); + return [ view, setViewWithUrlUpdate ]; } diff --git a/projects/packages/forms/src/dashboard/inbox/index.js b/projects/packages/forms/src/dashboard/inbox/index.js index 8c58d9aaa76ce..77dd5983b0958 100644 --- a/projects/packages/forms/src/dashboard/inbox/index.js +++ b/projects/packages/forms/src/dashboard/inbox/index.js @@ -1,5 +1,5 @@ +import { useNavigate } from '@tanstack/react-router'; import { useEffect } from '@wordpress/element'; -import { useNavigate } from 'react-router'; import useConfigValue from '../../hooks/use-config-value'; import InboxView from './dataviews'; import './style.scss'; diff --git a/projects/packages/forms/src/dashboard/index.tsx b/projects/packages/forms/src/dashboard/index.tsx index 5887fdbe2ce79..7e25a84a4ce9a 100644 --- a/projects/packages/forms/src/dashboard/index.tsx +++ b/projects/packages/forms/src/dashboard/index.tsx @@ -2,9 +2,14 @@ * External dependencies */ import { ThemeProvider } from '@automattic/jetpack-components'; +import { + createRouter, + createHashHistory, + RouterProvider, + createRootRoute, + createRoute, +} from '@tanstack/react-router'; import { createRoot } from '@wordpress/element'; -import { createHashRouter } from 'react-router'; -import { RouterProvider } from 'react-router/dom'; /** * Internal dependencies */ @@ -13,6 +18,7 @@ import Layout from './components/layout'; import Inbox from './inbox'; import Integrations from './integrations'; import DashboardNotices from './notices-list'; +import './store'; // Register the store import './style.scss'; declare global { @@ -21,48 +27,70 @@ declare global { } } +// Export components for use in external apps +export { Layout, Inbox, About, Integrations, DashboardNotices }; + +// Create route tree for TanStack Router +const rootRoute = createRootRoute( { + component: Layout, +} ); + +const indexRoute = createRoute( { + getParentRoute: () => rootRoute, + path: '/', + component: Inbox, +} ); + +const responsesRoute = createRoute( { + getParentRoute: () => rootRoute, + path: '/responses', + component: Inbox, +} ); + +const integrationsRoute = createRoute( { + getParentRoute: () => rootRoute, + path: '/integrations', + component: Integrations, +} ); + +const aboutRoute = createRoute( { + getParentRoute: () => rootRoute, + path: '/about', + component: About, +} ); + +const routeTree = rootRoute.addChildren( [ + indexRoute, + responsesRoute, + integrationsRoute, + aboutRoute, +] ); + let isInitialized = false; /** - * Initialize the Forms dashboard + * Initialize Forms app - can be called externally or by standalone Jetpack + * + * @param {object} options - Configuration options + * @param {HTMLElement} options.container - DOM element to mount into */ -function initFormsDashboard() { +export function initFormsApp( { container } ) { if ( isInitialized ) { return; } - const container = document.getElementById( 'jp-forms-dashboard' ); - if ( ! container ) { return; } isInitialized = true; - const router = createHashRouter( [ - { - path: '/', - element: , - children: [ - { - index: true, - element: , - }, - { - path: 'responses', - element: , - }, - { - path: 'integrations', - element: , - }, - { - path: 'about', - element: , - }, - ], - }, - ] ); + // Create router with hash history + // @ts-expect-error - TanStack Router requires strictNullChecks but we can't enable it yet due to shared package errors + const router = createRouter( { + routeTree, + history: createHashHistory(), + } ); const root = createRoot( container ); @@ -74,5 +102,21 @@ function initFormsDashboard() { ); } -window.jetpackFormsInit = initFormsDashboard; -window.addEventListener( 'load', initFormsDashboard ); +/** + * Initialize the Forms dashboard + */ +function jetpackFormsInit() { + const container = document.getElementById( 'jp-forms-dashboard' ); + + if ( ! container ) { + return; + } + + initFormsApp( { container } ); +} + +// Export for programmatic initialization +window.jetpackFormsInit = jetpackFormsInit; + +// Standalone initialization +window.addEventListener( 'load', jetpackFormsInit ); diff --git a/projects/packages/forms/src/dashboard/integrations/akismet-card.tsx b/projects/packages/forms/src/dashboard/integrations/akismet-card.tsx index 7e4d6b359ca40..924b8cac3d43a 100644 --- a/projects/packages/forms/src/dashboard/integrations/akismet-card.tsx +++ b/projects/packages/forms/src/dashboard/integrations/akismet-card.tsx @@ -2,10 +2,10 @@ * External dependencies */ import { getRedirectUrl } from '@automattic/jetpack-components'; +import { useNavigate } from '@tanstack/react-router'; import { Button, ExternalLink, __experimentalHStack as HStack } from '@wordpress/components'; // eslint-disable-line @wordpress/no-unsafe-wp-apis import { createInterpolateElement, useCallback } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import { useNavigate } from 'react-router'; /** * Internal dependencies */ @@ -51,7 +51,8 @@ const AkismetDashboardCard = ( { }; const handleViewSpamClick = useCallback( () => { - navigate( '/responses?status=spam' ); + // @ts-expect-error - TanStack Router types require strictNullChecks + navigate( { to: '/responses', search: { status: 'spam' } } ); }, [ navigate ] ); return ( diff --git a/projects/packages/forms/src/dashboard/integrations/google-sheets-card.tsx b/projects/packages/forms/src/dashboard/integrations/google-sheets-card.tsx index 866a569f14dc6..0b53a48e8a611 100644 --- a/projects/packages/forms/src/dashboard/integrations/google-sheets-card.tsx +++ b/projects/packages/forms/src/dashboard/integrations/google-sheets-card.tsx @@ -2,11 +2,11 @@ * External dependencies */ import requestExternalAccess from '@automattic/request-external-access'; +import { useNavigate } from '@tanstack/react-router'; import apiFetch from '@wordpress/api-fetch'; import { Button, __experimentalHStack as HStack } from '@wordpress/components'; // eslint-disable-line @wordpress/no-unsafe-wp-apis import { useCallback, useEffect, useState } from '@wordpress/element'; import { __, _x } from '@wordpress/i18n'; -import { useNavigate } from 'react-router'; /** * Internal dependencies */ @@ -55,7 +55,7 @@ const GoogleSheetsDashboardCard = ( { }, [ settingsUrl, refreshStatus ] ); const handleViewResponsesClick = useCallback( () => { - navigate( '/responses' ); + navigate( { to: '/responses' } ); }, [ navigate ] ); const handleDisconnectClick = useCallback( () => {