From e7b1792fa45dc57c80eb1b3da737be5b41b5c80b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Wed, 26 Feb 2025 16:08:36 -0500
Subject: [PATCH 1/5] Remove the $updated writable

---
 sveltejs/public/build/bundle.js              | Bin 279138 -> 277133 bytes
 sveltejs/public/build/bundle.js.map          | Bin 258613 -> 257797 bytes
 sveltejs/src/InstallListProcessor.js         |   2 --
 sveltejs/src/ProcessInstallListButton.svelte |   4 ----
 sveltejs/src/Project/ActionButton.svelte     |   4 ----
 sveltejs/src/ProjectBrowser.svelte           |  10 ++++------
 6 files changed, 4 insertions(+), 16 deletions(-)

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index cecd5d94d1a117891778ff9a5cfcbc6634c4108f..3a0b98ce82a298228de3f5a5d2d7a37c2345577a 100644
GIT binary patch
delta 1144
zcmaFVBG~&?U_({&<~hxGwHb{!SFNvOWHC3hGMR2SlSyN<%Em;->0YwT+?ywCGG${n
zuriulvtDw#Xb7XqX4aiwMJMx~*PHHpok?}`p7VN)lT9zWOtyR{IK9%GMZ4+Jwo8m#
z*RYscnHWqj+{UQ1{dOJG6D9#80}~5Pg=#JZ1qB68PEOA03!9k4rpvT3acqCv$n=bn
z+1Scxx`Gn3^<<Te!qeZ@F&&tGONp6p`==JBC}tKzD`R7jX$sp5I+(0E7!9Wz>}Hgh
z{#Sxoe*5DIOyL~U`Q|aPPcL1`q_#bMCeucy>6uHIJGL*F!<5g+XtZ5m9+Mk03&;u6
zbC)nL+qQ^_g^9_)e7eC=CW-BGOPHQAGn#B?S;3Ue$Y{E~U?o!p6N{07sUb*l3&@aM
zMkX_}?f2I*g&_>iWn?ikva*=&u$M_}yUQjfe~=y%3nV?PmWEb_MxYSYoZivEEHwT6
z5+;M`_jWKPZQrnqsfBU-y&X)Pj4UQrCT0-7aqnU>U}iEm-)_5?DTkTK+zjHt!v~nM
zS*9;M!6doe{U}p3Govv`TztCp3MS?4cTX@)Vq!8i+g^B@$$=XbG24BwGi_&_Zt2G;
zI6dJeQ`qzqiy8U0^WS2!V4R+1$0RU4e>XE*`^wu)+gILZ{>IE`I(@-?W>aPZE0gIr
z?lXU9G~IsT0ka$vlbOl%kB^u&8BMoKKW3iGIDPkP=Jx4-pD?#FnoVzh%B;g^x_!e_
z=JiZW=0?-y(wU{F*S=upW;Tnpo-V-5B)NUb3ubZV=?6YACor0CSNzD_$jE3uUGXDx
z_jbL{%xgIrO{ahKU=*4D;SaMmlUeMfR}PaKzRFF%|A?7mddxp&zUlw}F>`I7{g+vZ
zg~=#(`UVRY$>}#3S!5I}Vs)U2s5rl<q}WP9Ukl98(pN|>sff0mF3Q9b&1f>ckcq{J
z$<T88QYID~CWF}NjnkP$rhjK*i2}(vGKy?ZV`kaL!ekOV-ElRu#$^2y3e&t9C8s~|
zVHVy#iG$?@BcsXmyJd_@)8}%rlrS4xnSkO*e7iO`3lAfUd90@O^ncteQqx0uSk##;
zVka|hQJsE4lG$MUWgeD#7Dlt_!GbLF7|o{h2(xH|f>J?<B?^@*J^h;mi^lXfLM-x7
z2}ZN&)sieV(*qiq*ryAKu&``DAj~q05u|;iD2v$iVo??mMziS;MOdV#FBWC#<1ETA
zFV@mmur!?RD#oJBW@v0_WM;BGPmJXv6Qjv=2T2xl77Ig5qwO`4EXx_$wDc7Wjm%M$
z#z?cAW}3d^7_$sGJ5P^SW?`M)AjhJx{kI%TJ|m;S^bNBZ#kMypu&6RJ8Cgy@n8hfu
z{eU9N0!Bu|?TN}PVoZ!?+bdLAj2Ib>r>|CHNno_t&ZExaD8OjE-OrrGfpPmh3l@DQ
NM&s@0tXQV70|1w^Za4q{

delta 1945
zcmeDED)6X9a6?tIbaH-Pafw1{K}uptYKnrbLU~bUNn%n?s)m8)=Hlij+KlF#Bi7e3
zGFnXExSCOCGxNp-MkaH^>Dk*E^(JrF%d&a;CLT6Mlg&$Zn251MO_^SImB|XmnJjo-
zipS7UM?nQ9t0>MQIz3y0MQZvRF&5R$+UNBcr>|6H5j27-KqytPRme*%S8z!zN!8HQ
zOHVBc$;?gF&_pPh9C*QpT)opBEEpx5*In4Y?gHb3HH?<q`)ipvnORH>EX}shX<!my
zVl>~rwuz~Ng~im$*m(MapUmRh9om^(IG9bX%%&HJF`I7R)6W#n!DMJK-E#$#_I8IE
zOdFX%`pvf&Y-ak%$ZTj}w*BQCCO3$o(+f5;wM?&C#H=*^fhsfi_9qLNelju{8g9S8
zi0Lmgqs8{S%b2nm87;Sau3)NQVm2|b+%CAD=@TQXxq+31A=v)u4(&{w+i$O7GDfzC
z$;@m!>qe$@u$URh?oW&?rdEbV)4f+PX>RY|%47&K{@@O#U}h!@!|h^wm~xnzEDWaK
zU&JJ_ea?QSY!*<Af_aKZn4*}ca~xrknEquMlk)a$$C)NEF_{@`_d3PozzvI2^az%N
zOQ6Q>_PbY^CXpSv(>MAuN=|RM&J;#=6i;}?D7O8{btVhO=|2?7N@3F#?=VVEk1u3m
zo36WqnYZ2kCewENo6Ikn8O^3^-eoprHncLEo_Lq}JEPfj#T-WI=?PlQ{M(!FF@IrX
zGBld5_<&h>diMinaYnQ4iytu0Wt<*!mzk3*JGBy;AEqzRV3y#_POXej%E?d8p8lYP
zQEdA8PmH|NZ$4r!W;CDf`<PjW)ht#oGi7>WE2I7Py^oo5n3xTX&88n@W|HPB$}cb0
z(pN|>sfad@wVr<QB9r9y+-J<<%+nnnF}E8O6s4AB=9d=7gKV@_(AR?HLZ}|ISZgi?
z1qB7poYWG9?9|HXg$7JoGH~Z8*eWC!r6!i7g7iaOnBc&u$qZ7Oc#ugL!kEnH3})<C
zWHJCVJ}NRrPCkE)b-MjGW{yB4JIzcK)YKG;6Vp=T^YTmLQwvKIb2N}0siT0*Q^4wE
z&FK?U8D*yDK4a#X9yN`TUmWgU9R))$%FE9$(6pYuFoan_91*xEzM1aN$RY}MEXW_z
zBd0O)uw~|HfIPPGGLr~D+)TY(u%Lr6lN4Av<1|L`$x+7yL7d4C?#fPIJ&nm1#F<`b
z!V~~wNKFsuV|D`bKpMadgB&L5=?n51C8xK%WKLkTn4bQcxqEuSE9P&E7TeQbGh1*m
znoVEumD!%reEWm1%nMmKjAM1c(KDTK1*7QndB2#Y7%iu-31gH46*@P5F-J3+PB;0@
zY{X<_Fg@cpvkjAB>~zB~j3U$jTQIXtKk%D5gwb^R#ox>#+cp0%Z)0IJoxYKsNpkw1
zmCU?T>zMtwhcdFfU}Q9%ZpX|rjnQ=ayr0aH+ut#>@GwrdXJuiXeu#xda=HX7i#ns_
zb_Z6Lt1OJ>)5W-0<}sR2x8-KhW;Qgkn4ZPWB0c>t7mGcbU=lK4Ux=l8x`GJ{`}7Mu
zEG*j_cvxmJf^`@0v4~AK;$snEG@t&FjYWET5+6&S2rR+qC_t09k)h@EJHjl=Y)0l5
zrbZUqmH1gMGBKJ?|02j@&T438Y+<rpUx;NnqX436(9%~hGBrif#VW#bnu!OL(qR@%
z4>V&`23139jK<UNU1d_7o+-g111rryRTsAz!pQB4;w&wUjE2)c@H2{S-y^}I%E)AF
zFnyvKqr~)m(kwjN*`-*fFftl#pCip82C6<b%d!|TGMY?(CdZP%Xt~{8p2bms(PVq4
aK8ph*2h0uI4;rwTGclTM|7pZBg&hFt7JY;O

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index a012e1af66e538537ad02c48022de757983f9f89..83ce02a3bcab871b00b48275db36fad2b8e878e9 100644
GIT binary patch
delta 355
zcmdn`gunG3f5R3=F2C)DevH%QwqMI(v|^h6$B~I+x?MhF?e@p{j3JrRU*|A#Zuh&%
z7|S$$c^#v`^oO?@gSSWBVJv3c{`D@SZSZz$L#BM`=?8t7l%_xRVbWo%)=y1L&e*Q%
z%Vg8Ceac0q$>J=Ae%j8{<(Zi!rz<Eivv2o)$@GbdF?+k+8>T>ZHc!VQXJhB-{|+(B
zPv7>L=?9y&b+V&-(Dd(Ln3OoJt*x#79aFNLrYnA95}sc9m8q05b^C{}Oa_dMMcWm>
zGkvP!NGx&ENp*BgozD1|Np!nm5wjUDbGW17^qhL;XKdEio{sKi(`Pp@d$3tshda6(
zPuFQ=KFnbalF)YXnQqm@9K={Ly|;;Z5@X?Zg=Xfe0OnGU!s&A_GixyxZa;CES(lO3
z(=o%veY)ctCaLKYt}$<&u8_pcz1{g5^KW)Wv+efxnA;ecEPbaRzt60`{lk6c9Rk}|
Jeqiol1ORF}fc5|Y

delta 942
zcmZp@$G`Onf5R3=E<dHzih}&25{2aayy6mt(t?!4lGGFhTZQtX%#y^UoKy`1&F!py
zjC17Jp>o@2<uE!jDJm$aKm`<R74lNc6<iWaQZ+R7(o;)9GILWkG^bz7W9(9n$x~1u
zpmck5K4WAirvl9K?dxwaW;4kX&^2u)qxf{K+l;}4jMvy+ew(q9k+6fezr4ff63hYh
zmCkk@1EvCL!R*vZxKC?AzL`GFn@MB(9&aYS>F!)i{H)db*{PM=KX^0Qv@rTlSA54T
zHT_R36W8<)GniPp937qWoUJ__ogJsYzr-Xuz3e`-(Db^!Ol;euE-<BvGn#Hc@SI7M
znWfmp)Oq@TKW3@v{jZsVr!Tm|%rX7EIWz0_;MYu7*rq20GqbQ%I2$`pcR0W-Ki%gO
z(+>@8Cr9Troj^y&Kpl5SM@Jn`M@N4U;i=;a;yODzy6gBmI{Ht)xPn=RHQCX<#A&+M
zXC@_0Z6`<93@0LW%CY%7W;t0pO+UDlS$KNKXQoo7Y^Ux2J~J6GGFENZ|H|~KiZj!x
z#7QUB(J^&;p*FMVcDn**GhTLU>u^VNcmL@VlbEHZPp)M?1+v%Kl306XSUerwOQt8+
zF?)bD>JzUq+|j*i`o=ou!<y;Nj;<BNYLsR5bhK~@n_g4T9K>im{d_(1B*y&hNe#?Z
z0nFtdrPJ?UVAf(Sc6D_0nEv1bv&i%X+RQA|A80X4O?SA+{GGMX+0n&qy1WLn=yU^C
zW)aqGcSpw{2;X5BGw<{R7nwz-KUl=f!JOgZ1CHwLVV9V9b1-W=`%M>cWER=3ahth-
aktxG(`m8(5>f86<VcsRMz2Yr%FCzf4kup30

diff --git a/sveltejs/src/InstallListProcessor.js b/sveltejs/src/InstallListProcessor.js
index 67025be16..3a8cc026c 100644
--- a/sveltejs/src/InstallListProcessor.js
+++ b/sveltejs/src/InstallListProcessor.js
@@ -4,8 +4,6 @@ import { BASE_URL, CURRENT_PATH } from './constants';
 
 const { Drupal } = window;
 
-export const updated = writable(0);
-
 // Store for the install list.
 export const installList = writable([]);
 
diff --git a/sveltejs/src/ProcessInstallListButton.svelte b/sveltejs/src/ProcessInstallListButton.svelte
index 74b85d3ec..c0c756481 100644
--- a/sveltejs/src/ProcessInstallListButton.svelte
+++ b/sveltejs/src/ProcessInstallListButton.svelte
@@ -2,7 +2,6 @@
   import {
     processInstallList,
     installList,
-    updated,
     clearInstallList,
   } from './InstallListProcessor';
   import Loading from './Loading.svelte';
@@ -23,15 +22,12 @@
     loading = true;
     await processInstallList();
     loading = false;
-    $updated = new Date().getTime();
   };
 
   function clearSelection() {
     projectsToDownloadAndActivate = [];
     projectsToActivate = [];
     clearInstallList();
-
-    $updated = new Date().getTime();
   }
   $: {
     // @see css/pb.css
diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index 26c5b4c34..de854f93e 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -10,7 +10,6 @@
     addToInstallList,
     installList,
     removeFromInstallList,
-    updated,
   } from '../InstallListProcessor';
 
   // eslint-disable-next-line import/no-mutable-exports,import/prefer-default-export
@@ -28,12 +27,10 @@
 
   function handleAddToInstallListClick(singleProject) {
     addToInstallList(singleProject);
-    $updated = new Date().getTime();
   }
 
   function handleRemoveFromInstallList(projectId) {
     removeFromInstallList(projectId);
-    $updated = new Date().getTime();
   }
 
   const onClick = async () => {
@@ -48,7 +45,6 @@
       loading = true;
       await processInstallList();
       loading = false;
-      $updated = new Date().getTime();
     }
   };
 </script>
diff --git a/sveltejs/src/ProjectBrowser.svelte b/sveltejs/src/ProjectBrowser.svelte
index d126cd6d1..3a0ccc9d3 100644
--- a/sveltejs/src/ProjectBrowser.svelte
+++ b/sveltejs/src/ProjectBrowser.svelte
@@ -6,7 +6,7 @@
   import Pagination from './Pagination.svelte';
   import Project from './Project/Project.svelte';
   import { numberFormatter } from './util';
-  import { updated, installList } from './InstallListProcessor';
+  import { installList } from './InstallListProcessor';
   import MediaQuery from './MediaQuery.svelte';
   import { FULL_MODULE_PATH, MAX_SELECTIONS } from './constants';
   import QueryManager from './QueryManager';
@@ -247,11 +247,9 @@
         {/if}
       </div>
     </div>
-    {#key $updated}
-      {#each rows as row (row.id)}
-        <Project {toggleView} project={row} />
-      {/each}
-    {/key}
+    {#each rows as row (row.id)}
+      <Project {toggleView} project={row} />
+    {/each}
     <div slot="bottom">
       <Pagination
         page={$page}
-- 
GitLab


From 4c80bc9800fd559bd9fb6d7830ad56f2e025e237 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Wed, 26 Feb 2025 16:19:33 -0500
Subject: [PATCH 2/5] Test cleanup

---
 .../ProjectBrowserInstallerUiTest.php              | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
index f5afc262a..be91ffa28 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
@@ -267,20 +267,20 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase {
 
     $cream_cheese = $this->waitForProject('Cream cheese on a bagel');
     $cream_cheese->pressButton('Select Cream cheese on a bagel');
-    $was_selected = $cream_cheese->waitFor(10, fn ($card) => $card->hasButton('Deselect Cream cheese on a bagel'));
-    $this->assertTrue($was_selected);
+    $this->assertTrue(
+      $cream_cheese->waitFor(10, fn ($card) => $card->hasButton('Deselect Cream cheese on a bagel'))
+    );
 
-    $dancing_queen_button = $page->find('css', '#project-browser .pb-layout__main ul > li:nth-child(3) button');
-    $this->assertFalse($dancing_queen_button?->hasAttribute('disabled'));
+    $dancing_queen = $this->waitForProject('Dancing Queen');
+    $this->assertFalse($dancing_queen->findButton('Select')?->hasAttribute('disabled'));
 
     $this->assertNotEmpty($assert_session->waitForButton('Install selected projects'));
 
     $kangaroo = $this->waitForProject('Kangaroo');
     $kangaroo->pressButton('Select Kangaroo');
-    $was_deselected = $kangaroo->waitFor(10, fn ($card) => $card->hasButton('Deselect Kangaroo'));
-    $this->assertTrue($was_deselected);
+    $this->assertTrue($kangaroo->waitFor(10, fn ($card) => $card->hasButton('Deselect Kangaroo')));
     // Select button gets disabled on reaching maximum limit.
-    $assert_session->elementAttributeExists('css', '#project-browser .pb-layout__main ul > li:nth-child(3) button.pb__action_button', 'disabled');
+    $this->assertTrue($dancing_queen->findButton('Select')?->hasAttribute('disabled'));
 
     $this->assertNotEmpty($assert_session->waitForButton('Install selected projects'));
     $page->pressButton('Install selected projects');
-- 
GitLab


From af17c2909a17d59bdb62db87d420b159693c747f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Wed, 26 Feb 2025 16:21:38 -0500
Subject: [PATCH 3/5] Use reactive syntax to fix this bug

---
 sveltejs/public/build/bundle.js          | Bin 277133 -> 277233 bytes
 sveltejs/public/build/bundle.js.map      | Bin 257797 -> 257798 bytes
 sveltejs/src/Project/ActionButton.svelte |   2 +-
 3 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index 3a0b98ce82a298228de3f5a5d2d7a37c2345577a..11d640cbf800b16e2ecb7d73a83d27904dedebd0 100644
GIT binary patch
delta 153
zcmeDED)8~EKtl`T7ACogjK<UDCo<_X8cp|~$mGIg96R0a0AuL(R}-0*=rI~^??1rw
zON8Guuec;JC&wqVxWuhACue%yRi<y#%da!>Z<o2wG?96F)NMxj$@ebs^B5axDpYeR
zC@3g!a!xP4#uPGLeK)hv^t0EPET${oVbqvDXE!td^qaSs#HaJ$W)h$N;TDs8yV`B0
K?P|A~)8heavpN+3

delta 127
zcmezPRiO8)Ktl`T7ACogj7HPtCo<_X8c+A1$mGIg6g%DS0AuL(R}-0*=z(~Kxy+K=
zR~}$`ATs&-xsd7KuQE-ao_UKYm^C>+uefCT*;`DOjMmdXUSks5KKB~aMCR!_cNk@-
i?P2DhZhM<ae7eF~M)B!Bx0&SIyKXaW@4C&L9uEMK8Zzzx

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index 83ce02a3bcab871b00b48275db36fad2b8e878e9..8c6af1eb7a0246a97181b503757ffc63e95d675e 100644
GIT binary patch
delta 75
zcmZp@$KQ63zhMhw%q=DrtM<fOjN21$F$pi8UR=wZ!s_W5T;RH0td7})iQCiBz06f7
g*U8b*efslSW{v4?*39y(p3d1$Ionejm>1>&02*-`82|tP

delta 87
zcmZp>$KQI7zhMhw%q`aB{Ji3l_PAS&+v9FA2``>rRLh*qYwhXiUFNFe?C9vI<2!v#
sJ+s7gy#{7sc57=-N6#Xc?YC-~O_-)1c*i8l>ginQWVt=Hfq7vb0IfwIUjP6A

diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index de854f93e..39a60cfa1 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -21,7 +21,7 @@
   $: isInInstallList = $installList.some((item) => item.id === project.id);
 
   // If MAX_SELECTIONS is null (no limit), then the install list is never full.
-  const InstallListFull = $installList.length === MAX_SELECTIONS;
+  $: InstallListFull = $installList.length === MAX_SELECTIONS;
 
   let loading = false;
 
-- 
GitLab


From 3d88f9f8fe96808da32304ab24f1f9037a84408c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Wed, 26 Feb 2025 16:22:32 -0500
Subject: [PATCH 4/5] Remove defunct variable from ActionButton

---
 sveltejs/public/build/bundle.js          | Bin 277233 -> 277231 bytes
 sveltejs/public/build/bundle.js.map      | Bin 257798 -> 257725 bytes
 sveltejs/src/Project/ActionButton.svelte |   4 ----
 3 files changed, 4 deletions(-)

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index 11d640cbf800b16e2ecb7d73a83d27904dedebd0..6af82f77ce69a6f9fc2858cf348000869371da8f 100644
GIT binary patch
delta 298
zcmezPRp9+sfrb{wElhp2jE39$YneEiSqu$~Ot#NyVB%+DGO^sgwuz~Xh1JsB%Gh|i
ze>S7ScF%SuD~{>xyBMXm&+TU_=U_CN?zw_Vd%MF7rj1M>&8FK6HZy%<WVG1+at@Ol
z#JuSRo0(ds-&@42G(FFgnS1+_1x&vf8I8B!U&Qp6nbBbT-DOPKjEsicJy$SQfDJJR
z8S;^l)y&As!VqM!()PP+m<+*kU<*DnGMQRzXWht@4i+<ks<$w=GBld*y@E+|d;eA@
zLy*}AcQA!8Ga7Ff+ryO0%xE<I{vsxc?Q`}s<*-bzKF%buUEv5*6f={lB}hVi`j=%)
Y%G<XcXPV5!Xw>d?ifOyoDdyz`0P9R-ng9R*

delta 357
zcmaF=Rp8@Sfrb{wElhp2jHcWBYneEiS&R%!ET$VSU=rTGzJcivBa^A|_O(q+Wh`ul
z28LF~#?$??85OpBv@=<8Fqs){Z|P_1=U_IovY32pgT{8d8BCj)riUzI?wFoa!stDH
zgAOzMbnZ>e>eCObX8OWxXkfJc`5Y!Uh$Y(%7ci}6Vl>}=cM;QHW)>4GL*wZW7BPuz
z|Fn!Lgpt`4YG&aICO;+?BLh=IkgHm-82pvR%*w(L<S?b}x7RQk;&j1}?W`M_QbC46
zyok-PFHDw(+Y`4k#WFLRY~R0wDTJBPe7ndVrd(!5v*~viF-dHnwVx@6h0z?skw3x|
j$vmC)2$SUWPs^B;w{JPlG?|Iftli@j({_(j%*zV^MNxdZ

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index 8c6af1eb7a0246a97181b503757ffc63e95d675e..884c12113d3c1018ac865a155f7cc3f08e8f14f4 100644
GIT binary patch
delta 116
zcmZp>$G`V3f5R5WdAGLjxW)LCar%}!jEe1V?=WtEdxyzzGGp*|`2yxpUgi>a|LJ{6
z%u>@Q)-t;>`ftBc%k0f4?QHI(lkMc_nC+zF>gedG<Lv0@Xl-q6?dfPS-L9TFgtNfS
W&{fCX(b0W+;bUge?HlTu!}0;DnknM|

delta 124
zcmdmcm%r^Ef5R5WdAFu}<uXcbpLdJ#DdY5sd5ogd8}BeG3o0n&<R_+N=A|pxDx@Xm
z6sNY&y~DVD?j0tJ$sCC#PCBWMj;YfH3z$W>f68aJ<YhK=_n#iPhgoX6M=i4(WAOI=
fT4rxXM%U@L>zE}OwWoirV-8`g*zQ%&T$~R8ztAl`

diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index 39a60cfa1..01f7429a5 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -23,8 +23,6 @@
   // If MAX_SELECTIONS is null (no limit), then the install list is never full.
   $: InstallListFull = $installList.length === MAX_SELECTIONS;
 
-  let loading = false;
-
   function handleAddToInstallListClick(singleProject) {
     addToInstallList(singleProject);
   }
@@ -42,9 +40,7 @@
       }
     } else {
       handleAddToInstallListClick(project);
-      loading = true;
       await processInstallList();
-      loading = false;
     }
   };
 </script>
-- 
GitLab


From 97b2574597b7a87da184f89547a42f6f7fe48ec8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Wed, 26 Feb 2025 16:29:53 -0500
Subject: [PATCH 5/5] PHPStan

---
 .../FunctionalJavascript/ProjectBrowserInstallerUiTest.php | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
index be91ffa28..cf5fc99e2 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
@@ -271,8 +271,9 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase {
       $cream_cheese->waitFor(10, fn ($card) => $card->hasButton('Deselect Cream cheese on a bagel'))
     );
 
-    $dancing_queen = $this->waitForProject('Dancing Queen');
-    $this->assertFalse($dancing_queen->findButton('Select')?->hasAttribute('disabled'));
+    $dancing_queen_button = $this->waitForProject('Dancing Queen')
+      ->findButton('Select');
+    $this->assertFalse($dancing_queen_button?->hasAttribute('disabled'));
 
     $this->assertNotEmpty($assert_session->waitForButton('Install selected projects'));
 
@@ -280,7 +281,7 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase {
     $kangaroo->pressButton('Select Kangaroo');
     $this->assertTrue($kangaroo->waitFor(10, fn ($card) => $card->hasButton('Deselect Kangaroo')));
     // Select button gets disabled on reaching maximum limit.
-    $this->assertTrue($dancing_queen->findButton('Select')?->hasAttribute('disabled'));
+    $this->assertTrue($dancing_queen_button->hasAttribute('disabled'));
 
     $this->assertNotEmpty($assert_session->waitForButton('Install selected projects'));
     $page->pressButton('Install selected projects');
-- 
GitLab