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( () => {