From 0f5280d85741edd34318d58c8ae12467c35767dd Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sat, 25 Apr 2026 09:07:12 -0400 Subject: [PATCH] fix(web): tighten run files tree navigation Keep the changed-files tree selection aligned to valid file paths, avoid mobile and initial-reset overhead, and lazy-load the tree bundle. Refresh the embedded SPA assets to match. --- apps/fabro-web/app/routes/run-files.tsx | 27 +- .../routes/run-files/file-tree-sidebar.tsx | 132 +- lib/crates/fabro-spa/assets/assets/app.css | 2 +- .../fabro-spa/assets/assets/chunk-02h8850b.js | 1 + .../fabro-spa/assets/assets/chunk-02rvhgyc.js | 1 + .../{chunk-gvj6dvft.js => chunk-05ypm1ww.js} | 2 +- .../{chunk-pd2e0rn2.js => chunk-0b169ehr.js} | 2 +- .../{chunk-wv916p92.js => chunk-0gpjqeyh.js} | 2 +- .../{chunk-045hgb7p.js => chunk-0hd8k8vn.js} | 2 +- .../{chunk-b56n358c.js => chunk-0rtb21hq.js} | 2 +- .../{chunk-sg2f2re0.js => chunk-0rvb0tex.js} | 2 +- .../fabro-spa/assets/assets/chunk-0tw86tyg.js | 1 + .../{chunk-bqgn0hr5.js => chunk-0vmj43jh.js} | 2 +- .../fabro-spa/assets/assets/chunk-0yfb2prj.js | 1 - .../{chunk-k5ct6jwb.js => chunk-0zx0007w.js} | 2 +- .../{chunk-rapg8dhf.js => chunk-12xq903b.js} | 2 +- .../{chunk-vb9tvgf3.js => chunk-13t96y3b.js} | 2 +- .../fabro-spa/assets/assets/chunk-16zpk0g2.js | 1 - .../{chunk-sc5gxp3g.js => chunk-179w0q64.js} | 2 +- .../{chunk-3df4bbzx.js => chunk-1bgncpfa.js} | 2 +- .../{chunk-gx9nfmf2.js => chunk-1ehq66yp.js} | 4 +- .../{chunk-w4qbtvt5.js => chunk-1h8c752f.js} | 2 +- .../{chunk-2jt5b8fv.js => chunk-1wj09pgz.js} | 2 +- .../{chunk-69qjw0pc.js => chunk-1xsm7tdm.js} | 2 +- .../fabro-spa/assets/assets/chunk-20bmj0g7.js | 1 + .../{chunk-15hjyhwz.js => chunk-20gbxe8q.js} | 2 +- .../{chunk-crwzp2n6.js => chunk-21nxw4pa.js} | 2 +- .../{chunk-hf17k1x4.js => chunk-225d7y64.js} | 4 +- .../fabro-spa/assets/assets/chunk-285epja5.js | 1 - .../{chunk-jzpdt1g4.js => chunk-29a1gcd2.js} | 2 +- .../fabro-spa/assets/assets/chunk-2a1yc1ne.js | 1 + .../{chunk-c5wdhshs.js => chunk-2ax8v131.js} | 2 +- .../{chunk-sdjecyp4.js => chunk-2de9a2cj.js} | 2 +- .../{chunk-jvhgxb9f.js => chunk-2efmaphv.js} | 2 +- .../{chunk-1p24jr1f.js => chunk-2ej02xek.js} | 2 +- .../{chunk-f1wke3sr.js => chunk-2nrhn4z7.js} | 2 +- .../{chunk-w0ymza22.js => chunk-2rwzbvck.js} | 2 +- .../fabro-spa/assets/assets/chunk-2wp8j7k1.js | 1 - .../{chunk-d9ssk2wj.js => chunk-2yjtrhth.js} | 2 +- .../{chunk-gbe5x0jc.js => chunk-31mjmkkc.js} | 2 +- .../{chunk-b9h5aqnq.js => chunk-32bv1jd3.js} | 2 +- .../{chunk-wcqfvnw4.js => chunk-3dax3q2e.js} | 2 +- .../{chunk-32ncgp7y.js => chunk-3er661jz.js} | 2 +- .../{chunk-5qr6tms1.js => chunk-3g0jbkk1.js} | 2 +- .../{chunk-xk8c6fck.js => chunk-3ha51mpv.js} | 2 +- .../{chunk-py3jqsns.js => chunk-3jcch8ja.js} | 2 +- .../{chunk-htz4yary.js => chunk-3k9g05sg.js} | 2 +- .../{chunk-1zeg43pq.js => chunk-3ka7nxwy.js} | 2 +- .../fabro-spa/assets/assets/chunk-3keqbh35.js | 1 - .../{chunk-6fdngjzm.js => chunk-3pve0q9p.js} | 2 +- .../{chunk-5tgnttvh.js => chunk-3qp7afsx.js} | 2 +- .../fabro-spa/assets/assets/chunk-3qx0fph1.js | 1 + .../{chunk-chc9h51t.js => chunk-3sb70hv7.js} | 2 +- .../{chunk-8p4k1t87.js => chunk-3tgvwwr8.js} | 2 +- .../{chunk-n0qhp2b0.js => chunk-447z01r8.js} | 2 +- .../{chunk-qtsh2yew.js => chunk-44y8esqm.js} | 2 +- .../{chunk-4ng06c5x.js => chunk-474620y8.js} | 2 +- .../{chunk-91knw186.js => chunk-4bc1rvj7.js} | 2 +- .../{chunk-n6ps66k4.js => chunk-4c7xpq8a.js} | 2 +- .../{chunk-vpp6kc65.js => chunk-4kse7sfn.js} | 2 +- .../{chunk-kmk2dq8x.js => chunk-4m92ammv.js} | 2 +- .../{chunk-4m33ss6n.js => chunk-4nfs63a6.js} | 2 +- .../{chunk-9s5h7bnb.js => chunk-4nr4vn9a.js} | 2 +- .../{chunk-km5w7dec.js => chunk-4vp9r22c.js} | 2 +- .../fabro-spa/assets/assets/chunk-4vxn1k9m.js | 1 + .../{chunk-4d3487jq.js => chunk-4x0tnfw6.js} | 2 +- .../{chunk-45rmnzaa.js => chunk-52wkp87b.js} | 2 +- .../{chunk-k92eb1w0.js => chunk-55j72f95.js} | 2 +- .../{chunk-zm4bx5f8.js => chunk-59hh3731.js} | 2 +- .../{chunk-jtpvvmrp.js => chunk-5c4a681q.js} | 2 +- .../{chunk-qg5ady5e.js => chunk-5mk3jctr.js} | 2 +- .../{chunk-0rmce4kg.js => chunk-5q0vf5kd.js} | 4 +- .../{chunk-1f6npkyf.js => chunk-5qcsew09.js} | 2 +- .../fabro-spa/assets/assets/chunk-5vf5y101.js | 1 - .../fabro-spa/assets/assets/chunk-5w1gpb79.js | 1 + .../{chunk-65xe94t7.js => chunk-5xzad696.js} | 4 +- .../{chunk-43bfa4ha.js => chunk-63jkne9p.js} | 2 +- .../{chunk-qbb4h1yt.js => chunk-66pc6rzh.js} | 2 +- .../{chunk-69yr5nhb.js => chunk-6b6at9tx.js} | 2 +- .../{chunk-a4apmake.js => chunk-6epsd7d6.js} | 2 +- .../{chunk-x6w8ws2y.js => chunk-6fz4y5fw.js} | 2 +- .../{chunk-5re2ted6.js => chunk-6ks17cht.js} | 2 +- .../fabro-spa/assets/assets/chunk-6ks6v1r2.js | 1 - .../{chunk-hxekwkx3.js => chunk-6nrpzzgz.js} | 2 +- .../fabro-spa/assets/assets/chunk-6pf0p5av.js | 1 + .../fabro-spa/assets/assets/chunk-6v1sse0c.js | 1 - .../{chunk-11vzjswv.js => chunk-6v64ydme.js} | 2 +- .../{chunk-cah5fj8w.js => chunk-6w2p1k8b.js} | 2 +- .../{chunk-etxafnd6.js => chunk-6ymngmpb.js} | 2 +- .../fabro-spa/assets/assets/chunk-703sdrk0.js | 1 + .../fabro-spa/assets/assets/chunk-70znzn0j.js | 1 + .../{chunk-pmthkscp.js => chunk-71s03bbh.js} | 2 +- .../{chunk-fg2j5av7.js => chunk-72xm4hh2.js} | 2 +- .../fabro-spa/assets/assets/chunk-73ksjch6.js | 1 - .../{chunk-g0ayf9bf.js => chunk-760gwdac.js} | 2 +- .../fabro-spa/assets/assets/chunk-787agcsn.js | 1 + .../{chunk-qgsasvpy.js => chunk-7fda8yjb.js} | 2 +- .../{chunk-jdh1vpwp.js => chunk-7h745e90.js} | 2 +- .../{chunk-gqj2hkrx.js => chunk-7j5qb14p.js} | 2 +- .../{chunk-287ksxds.js => chunk-7jvnrb0q.js} | 2 +- .../{chunk-s0ywtjf8.js => chunk-7n06vwga.js} | 2 +- .../fabro-spa/assets/assets/chunk-7q2xpwf8.js | 1 + .../{chunk-aax3thf6.js => chunk-7s6w1wwr.js} | 2 +- .../fabro-spa/assets/assets/chunk-7s7fg5te.js | 1 - .../{chunk-gsv84090.js => chunk-7xj0sb3r.js} | 2 +- .../{chunk-m51jpwsm.js => chunk-7zjvj5cs.js} | 2 +- .../{chunk-wzb9zsp9.js => chunk-7zy2rxws.js} | 2 +- .../{chunk-9txrxszv.js => chunk-862e8qmw.js} | 2 +- .../{chunk-prqggcna.js => chunk-88hnf20x.js} | 2 +- .../fabro-spa/assets/assets/chunk-8bhy2mjd.js | 1 + .../{chunk-n1efhztv.js => chunk-8ceh8vkz.js} | 2 +- .../fabro-spa/assets/assets/chunk-8dk9hn4b.js | 1 - .../fabro-spa/assets/assets/chunk-8efg4msa.js | 1 - .../{chunk-cggj88rv.js => chunk-8g1me8d0.js} | 2 +- .../{chunk-4ax6se1w.js => chunk-8hjgfzg4.js} | 2 +- .../fabro-spa/assets/assets/chunk-8kgzk0t8.js | 1 + .../{chunk-h0cd4z7x.js => chunk-8qpxecda.js} | 2 +- .../{chunk-q0vrryxz.js => chunk-8veqp2gt.js} | 2 +- .../{chunk-dpzzapys.js => chunk-8y939j18.js} | 2 +- .../fabro-spa/assets/assets/chunk-8zxstrzs.js | 1 + .../{chunk-vf9apy3h.js => chunk-92cqxsb3.js} | 2 +- .../fabro-spa/assets/assets/chunk-93ve7vvk.js | 1 + .../{chunk-bs0y3jhw.js => chunk-94mpxya9.js} | 2 +- .../{chunk-vz6zae36.js => chunk-972wx742.js} | 2 +- .../{chunk-8k9hqn4r.js => chunk-978ys6k2.js} | 2 +- .../{chunk-3g4dvzch.js => chunk-98ay7s0d.js} | 2 +- .../{chunk-1qncsvxg.js => chunk-98xb1a76.js} | 2 +- .../{chunk-8mhds0wh.js => chunk-9afd5qwc.js} | 2 +- .../{chunk-xvj1jh05.js => chunk-9et7b8ph.js} | 2 +- .../{chunk-kqteaajh.js => chunk-9f97tshq.js} | 2 +- .../{chunk-jd2ey9tz.js => chunk-9gvhdg6s.js} | 2 +- .../{chunk-mshhqkhw.js => chunk-9nqxn300.js} | 4 +- .../fabro-spa/assets/assets/chunk-9skzfrp3.js | 1 + .../{chunk-6wzwk7py.js => chunk-9xgyacax.js} | 2 +- .../{chunk-3nkhee75.js => chunk-9z4h1q70.js} | 2 +- .../{chunk-ck0xaxxw.js => chunk-a137nrap.js} | 2 +- .../{chunk-nwwmkwsa.js => chunk-a2vqe77y.js} | 2 +- .../{chunk-eew9p379.js => chunk-a4mrrp97.js} | 2 +- .../fabro-spa/assets/assets/chunk-ahfp68c3.js | 1 + .../{chunk-ygckhx44.js => chunk-amc3npz0.js} | 2 +- .../{chunk-6x0cp4ft.js => chunk-amk943wr.js} | 4 +- .../{chunk-6k6wch5m.js => chunk-amwhw0yz.js} | 2 +- .../{chunk-gpx5pqfr.js => chunk-apgqhjz7.js} | 2 +- .../{chunk-vte2wzvs.js => chunk-ard61fbz.js} | 2 +- .../{chunk-kndpxdcb.js => chunk-arehsbw6.js} | 2 +- .../fabro-spa/assets/assets/chunk-atem5prh.js | 1 - .../{chunk-6phvn452.js => chunk-avh561dw.js} | 2 +- .../fabro-spa/assets/assets/chunk-b7kwc5zm.js | 1 - .../{chunk-ptd5f8xe.js => chunk-bd9fjd7m.js} | 2 +- .../{chunk-edasyn4n.js => chunk-bk86zsmq.js} | 2 +- .../fabro-spa/assets/assets/chunk-bkq2jsbj.js | 1 - .../{chunk-hx8k8nbg.js => chunk-bm4e6kwj.js} | 2 +- .../{chunk-p90q44rb.js => chunk-bqjspmyk.js} | 2 +- .../{chunk-hbeqab5r.js => chunk-br4gs7tr.js} | 2 +- .../{chunk-k1nff9yy.js => chunk-bs775x23.js} | 2 +- .../{chunk-xpjjvrp8.js => chunk-bvp3ychm.js} | 2 +- .../{chunk-15x7583a.js => chunk-c89cpjb5.js} | 2 +- .../{chunk-7cejwt0f.js => chunk-c8zhk10v.js} | 4 +- .../{chunk-agjvn6ev.js => chunk-cecr3d1n.js} | 2 +- .../fabro-spa/assets/assets/chunk-cgs5jjby.js | 1 + .../{chunk-10cvb41f.js => chunk-ch4xqhf8.js} | 2 +- .../fabro-spa/assets/assets/chunk-cmgy51d4.js | 1 + .../fabro-spa/assets/assets/chunk-cqqmxxt4.js | 1 + .../{chunk-x5g8kw4r.js => chunk-crmnbecm.js} | 4 +- .../{chunk-2z19rpjp.js => chunk-cvp30kfk.js} | 2 +- .../{chunk-ygp59tp4.js => chunk-d0tx1xbd.js} | 2 +- .../{chunk-gkamv7bm.js => chunk-ddm1qqj9.js} | 2 +- .../fabro-spa/assets/assets/chunk-dep0g6mr.js | 24 + .../fabro-spa/assets/assets/chunk-dg97ypfw.js | 1 + .../fabro-spa/assets/assets/chunk-dgqamhb2.js | 1 - .../{chunk-k5cgxv85.js => chunk-dgqnr459.js} | 2 +- .../{chunk-qwhe7qd5.js => chunk-dgtjh101.js} | 2 +- .../fabro-spa/assets/assets/chunk-dgx7fqh1.js | 1 - .../{chunk-y256rdnq.js => chunk-dn3x1k23.js} | 2 +- .../{chunk-2wgb5z8c.js => chunk-dngz6vyc.js} | 2 +- .../fabro-spa/assets/assets/chunk-dqg2dkb2.js | 1 - .../{chunk-v2sv95rn.js => chunk-dqs5pvm1.js} | 2 +- .../{chunk-89wnxtcq.js => chunk-dsrpd535.js} | 2 +- .../{chunk-3c1mwadv.js => chunk-dv3tpw52.js} | 2 +- .../fabro-spa/assets/assets/chunk-dxzyc7gn.js | 1 - .../fabro-spa/assets/assets/chunk-dzpem46v.js | 1 + .../{chunk-t1b8jx8z.js => chunk-e09w5asn.js} | 2 +- .../{chunk-gfryj5x1.js => chunk-e4jwbd8g.js} | 2 +- .../fabro-spa/assets/assets/chunk-e67dmmza.js | 1 - .../fabro-spa/assets/assets/chunk-e8908yvy.js | 1 + .../fabro-spa/assets/assets/chunk-e8gdmrfw.js | 1 - .../{chunk-1jcnxexa.js => chunk-e947n3c9.js} | 2 +- .../{chunk-daz97a62.js => chunk-e9543kc7.js} | 2 +- .../{chunk-r21ejn8c.js => chunk-edpmrkbj.js} | 2 +- .../fabro-spa/assets/assets/chunk-ej0nkavp.js | 1 - .../{chunk-rymbbwyy.js => chunk-ej688wpw.js} | 2 +- .../fabro-spa/assets/assets/chunk-emy5c03d.js | 1 - .../fabro-spa/assets/assets/chunk-en0m3dws.js | 1 + .../{chunk-v61ks9f7.js => chunk-ept66kdn.js} | 2 +- .../{chunk-88ezy3c3.js => chunk-eqzepqq5.js} | 2 +- .../{chunk-r7sbg6nn.js => chunk-etm6ex2v.js} | 2 +- .../{chunk-f1vcb3sq.js => chunk-ew9bs4zr.js} | 2 +- .../fabro-spa/assets/assets/chunk-f0nmmtxx.js | 1 + .../fabro-spa/assets/assets/chunk-f0pwezgd.js | 1 - .../{chunk-rqqksrg2.js => chunk-f8s9qzq7.js} | 2 +- .../{chunk-d6xt8xhc.js => chunk-fgccx1yw.js} | 2 +- .../{chunk-27kzvd2h.js => chunk-fkb9d4kj.js} | 2 +- .../{chunk-byx1xjhw.js => chunk-fncztbes.js} | 2 +- .../{chunk-d9vybj0p.js => chunk-fs42rkd6.js} | 2 +- .../{chunk-7zchmbf1.js => chunk-fyz76kj5.js} | 2 +- .../{chunk-80kezg8f.js => chunk-fzk4emkr.js} | 2 +- .../{chunk-xr2abf5g.js => chunk-g0fbqbvp.js} | 2 +- .../fabro-spa/assets/assets/chunk-g7x00xws.js | 1 - .../{chunk-s094abv0.js => chunk-g876hxms.js} | 2 +- .../fabro-spa/assets/assets/chunk-g933hznk.js | 1 - .../fabro-spa/assets/assets/chunk-gc4hg809.js | 1 - .../{chunk-s059x4yp.js => chunk-gceq6mym.js} | 2 +- .../{chunk-g28k4bff.js => chunk-gd8pwd5x.js} | 2 +- .../{chunk-61ctvdht.js => chunk-ge256ddt.js} | 2 +- .../{chunk-kmey03h3.js => chunk-gf0502ds.js} | 2 +- .../{chunk-5n3atqkz.js => chunk-gf1gr01b.js} | 2 +- .../{chunk-rhfgsbf6.js => chunk-gfqeq5cc.js} | 2 +- .../{chunk-tgq9246b.js => chunk-gmkq1eqa.js} | 2 +- .../{chunk-f07rb91b.js => chunk-gtpt64we.js} | 4 +- .../{chunk-ewmw8y31.js => chunk-gx2p1g4s.js} | 2 +- .../fabro-spa/assets/assets/chunk-h56fc6ab.js | 1 + .../{chunk-rg0x77jr.js => chunk-h5zh6a75.js} | 2 +- .../fabro-spa/assets/assets/chunk-h9mssx7k.js | 1 - .../{chunk-2dksx1h9.js => chunk-haz0qj28.js} | 2 +- .../{chunk-evcwpvcy.js => chunk-hb306ke8.js} | 2 +- .../{chunk-shsecpmc.js => chunk-hemdpn0b.js} | 2 +- .../{chunk-0tbe7wc4.js => chunk-hff6kcwm.js} | 2 +- .../fabro-spa/assets/assets/chunk-hfgr6f88.js | 1 - .../{chunk-5e28t8at.js => chunk-hgaj88x0.js} | 2 +- .../fabro-spa/assets/assets/chunk-hknrdsf4.js | 1 - .../{chunk-6ck6fxa1.js => chunk-hmm6qdtt.js} | 2 +- .../{chunk-r2w3cygs.js => chunk-hrt0rbxr.js} | 2 +- .../{chunk-f1ge7j6e.js => chunk-hrxabzx5.js} | 2 +- .../{chunk-rvvxfm9b.js => chunk-hz1wbzj3.js} | 2 +- .../{chunk-4j8a65qz.js => chunk-j1q2qqsw.js} | 4 +- .../{chunk-v8yqmrae.js => chunk-j4qar1gs.js} | 2 +- .../{chunk-nxg5ae72.js => chunk-j7y7n9zb.js} | 2 +- .../{chunk-qgga0gj9.js => chunk-j985jyzv.js} | 2 +- .../{chunk-w5cvw2ty.js => chunk-jm9syaw5.js} | 2 +- .../{chunk-76211vbg.js => chunk-jrz3xt00.js} | 2 +- .../{chunk-7hgje54d.js => chunk-jtv72k00.js} | 2 +- .../{chunk-q96stch7.js => chunk-jw02nkhj.js} | 2 +- .../{chunk-haqztpwf.js => chunk-k7s6xxff.js} | 2 +- .../fabro-spa/assets/assets/chunk-k9q6dq6r.js | 1 - .../fabro-spa/assets/assets/chunk-kcdc13zg.js | 1 + .../{chunk-vrcxf7jx.js => chunk-kd5j6mdr.js} | 2 +- .../{chunk-bye1f1bb.js => chunk-ke1592hx.js} | 2 +- .../{chunk-8v6fnbbx.js => chunk-ke60725t.js} | 2 +- .../{chunk-dv5tw9vt.js => chunk-kgcmczdj.js} | 2 +- .../{chunk-dmf5ykfc.js => chunk-kgjc33jw.js} | 2 +- .../{chunk-mjtqpjc7.js => chunk-ks29p366.js} | 2 +- .../{chunk-4v5fshv2.js => chunk-ktx0nkhz.js} | 2 +- .../fabro-spa/assets/assets/chunk-kx1024hp.js | 1 - .../{chunk-ptrvw2tv.js => chunk-kyze7g95.js} | 2 +- .../fabro-spa/assets/assets/chunk-m1xgmarr.js | 1 - .../fabro-spa/assets/assets/chunk-m1xkhyk9.js | 1 + .../{chunk-k947xaae.js => chunk-m44wbrq0.js} | 2 +- .../fabro-spa/assets/assets/chunk-m5d6s7m8.js | 1 + .../{chunk-bvpka4mc.js => chunk-m6cr2q5j.js} | 2 +- .../{chunk-pfbk9c4x.js => chunk-m8g0dkjy.js} | 2 +- .../{chunk-gzrr2442.js => chunk-mb5r6cmr.js} | 2 +- .../{chunk-6crx5dxj.js => chunk-mf4hz28k.js} | 2 +- .../{chunk-d0gsnger.js => chunk-mmhqe3rk.js} | 2 +- .../{chunk-1mvhxmh1.js => chunk-mmrbgjmv.js} | 2 +- .../{chunk-y9ww0p2p.js => chunk-mph3dx6h.js} | 2 +- .../{chunk-hamsxj56.js => chunk-mpq83mtn.js} | 2 +- .../{chunk-6yncfqtw.js => chunk-mr7p00hg.js} | 2 +- .../{chunk-c0avz8qy.js => chunk-mxfms5eb.js} | 2 +- .../fabro-spa/assets/assets/chunk-mxvb6h6x.js | 1 + .../{chunk-f82fqbr1.js => chunk-n4c296rc.js} | 2 +- .../{chunk-xp1nfh3m.js => chunk-n6qdy3zc.js} | 2 +- .../fabro-spa/assets/assets/chunk-n711ggb0.js | 1 + .../{chunk-6j26ybdg.js => chunk-n9tc6j4j.js} | 4 +- .../fabro-spa/assets/assets/chunk-n9tspt4g.js | 1 - .../fabro-spa/assets/assets/chunk-n9wky826.js | 1 - .../{chunk-xbf0scec.js => chunk-nbvevmb7.js} | 2 +- .../{chunk-jm91kykx.js => chunk-nj2d633b.js} | 2 +- .../{chunk-sadshphz.js => chunk-nkw6kj41.js} | 2 +- .../{chunk-xj85459k.js => chunk-np3yrz2f.js} | 2 +- .../{chunk-e6233caf.js => chunk-nqf1eexv.js} | 2 +- .../{chunk-tqvyqgea.js => chunk-nrg230pq.js} | 2 +- .../fabro-spa/assets/assets/chunk-nsexs3ds.js | 1 - .../{chunk-537x8phc.js => chunk-nt242hk6.js} | 2 +- .../fabro-spa/assets/assets/chunk-nz38szxw.js | 1 - .../{chunk-g9za56wt.js => chunk-nz9ah4xw.js} | 2 +- .../{chunk-t2049s6y.js => chunk-nzy412y0.js} | 2 +- .../fabro-spa/assets/assets/chunk-nzycyamw.js | 1 + .../{chunk-e1mesqtx.js => chunk-p5wgtq9z.js} | 2 +- .../fabro-spa/assets/assets/chunk-p88116sb.js | 1 - .../{chunk-ce3g5784.js => chunk-p8j9swg9.js} | 2 +- .../{chunk-7f7pbcpm.js => chunk-p902f4na.js} | 2 +- .../{chunk-svjx2h8c.js => chunk-pce8yxd3.js} | 2 +- .../fabro-spa/assets/assets/chunk-pcvh68t6.js | 1 + .../{chunk-dcqvm3tr.js => chunk-peyx30g4.js} | 2 +- .../{chunk-5w2bs93r.js => chunk-pgmr3gwa.js} | 2 +- .../{chunk-jrvrwzff.js => chunk-pnfpy4pt.js} | 2 +- .../fabro-spa/assets/assets/chunk-pnw7vt97.js | 1 + .../{chunk-aan5y8c6.js => chunk-pvcbr9et.js} | 2 +- .../fabro-spa/assets/assets/chunk-q0rkqn8j.js | 1 - .../fabro-spa/assets/assets/chunk-q5r79npn.js | 1 + .../{chunk-n71q97az.js => chunk-qa0y4e4r.js} | 2 +- .../fabro-spa/assets/assets/chunk-qbs2gt7d.js | 1 - .../{chunk-ds06aka8.js => chunk-qd5kg695.js} | 2 +- .../{chunk-hven1z1x.js => chunk-qf15wygb.js} | 2 +- .../{chunk-awx8ywy2.js => chunk-qfbk6hm6.js} | 2 +- .../{chunk-9xkvmexd.js => chunk-qkba8k3y.js} | 2 +- .../{chunk-03tvqqfj.js => chunk-qmn5et67.js} | 2 +- .../{chunk-dh7q8d4g.js => chunk-qtgxqpjk.js} | 2 +- .../fabro-spa/assets/assets/chunk-qx71h099.js | 1 + .../{chunk-02n7dnxd.js => chunk-qxxfm3wk.js} | 2 +- .../{chunk-60wrqr6x.js => chunk-r43a3swm.js} | 2 +- .../{chunk-kv06br00.js => chunk-rb2qd4b7.js} | 2 +- .../{chunk-ab5mzsvd.js => chunk-rd7ysqpk.js} | 2 +- .../{chunk-hbakvvp7.js => chunk-rh6q661w.js} | 2 +- .../{chunk-zphztess.js => chunk-rmsy3sws.js} | 2 +- .../{chunk-14e41pj6.js => chunk-rn4fbjg4.js} | 2 +- .../{chunk-8bmmar76.js => chunk-rnt7tqcb.js} | 2 +- .../fabro-spa/assets/assets/chunk-rqd3733a.js | 1 - .../{chunk-8jx5jky3.js => chunk-rrhaagg0.js} | 2 +- .../{chunk-m6p3eszz.js => chunk-rrm311hw.js} | 2 +- .../{chunk-g344azhy.js => chunk-rwmn1g7e.js} | 2 +- .../{chunk-7hpkw26t.js => chunk-rxp3t9tt.js} | 2 +- .../{chunk-9bqmfa1d.js => chunk-rzzxv5ca.js} | 2 +- .../fabro-spa/assets/assets/chunk-s0g8kyb7.js | 1 + .../{chunk-j87f8g7j.js => chunk-s3v55eyd.js} | 2 +- .../fabro-spa/assets/assets/chunk-s5898525.js | 1 + .../fabro-spa/assets/assets/chunk-s5h99qbc.js | 1 - .../{chunk-czek8d62.js => chunk-s6arnhv4.js} | 2 +- .../{chunk-kn0namya.js => chunk-s9ef86s1.js} | 2 +- .../{chunk-9wcwed5x.js => chunk-sppzpj8z.js} | 2 +- .../{chunk-1s1yewyh.js => chunk-stm85f97.js} | 2 +- .../{chunk-82j79ps2.js => chunk-sy7fa5zb.js} | 2 +- .../{chunk-r31zme8e.js => chunk-sz8v9065.js} | 2 +- .../{chunk-6k0hze8p.js => chunk-t0ygaxtk.js} | 2 +- .../fabro-spa/assets/assets/chunk-t390nfcr.js | 1 - .../{chunk-3th2xfxh.js => chunk-t5tcnf6j.js} | 2 +- .../{chunk-d96yq2am.js => chunk-t7xthjcp.js} | 2 +- .../{chunk-1xpescw2.js => chunk-tcwzycpt.js} | 2 +- .../{chunk-n676sfx8.js => chunk-teyyezd6.js} | 2 +- .../{chunk-q02ym4qn.js => chunk-tjpw3zn0.js} | 2 +- .../{chunk-0p2zrbay.js => chunk-tptp6b7m.js} | 2 +- .../{chunk-jq4kdgcp.js => chunk-tq26evfw.js} | 2 +- .../{chunk-adtfqdr1.js => chunk-tqgvt9mw.js} | 2 +- .../{chunk-6fp6wtbb.js => chunk-ttw39w80.js} | 2 +- .../fabro-spa/assets/assets/chunk-tvgc0vzh.js | 1 - .../{chunk-n2fgqn9j.js => chunk-txd1j6f3.js} | 2 +- .../fabro-spa/assets/assets/chunk-v5dy8twy.js | 1 + .../fabro-spa/assets/assets/chunk-v8qfyxzg.js | 1 - .../{chunk-412z3n24.js => chunk-vbmnk4xd.js} | 2 +- .../{chunk-0chh3hs6.js => chunk-vcv5w8sg.js} | 2 +- .../fabro-spa/assets/assets/chunk-vhbfjdzq.js | 1 - .../{chunk-y6y9wqm8.js => chunk-vnrcdsw1.js} | 2 +- .../{chunk-4833vrwm.js => chunk-vxrqpknz.js} | 4 +- .../{chunk-7kjag9wq.js => chunk-w4be62cd.js} | 2 +- .../fabro-spa/assets/assets/chunk-w8heqrq6.js | 1 + .../{chunk-e2fhx98p.js => chunk-wer312mh.js} | 2 +- .../{chunk-4gmvbn7w.js => chunk-wfmzgkqr.js} | 2 +- .../{chunk-spnrdyp0.js => chunk-wj94wc84.js} | 2 +- .../{chunk-2eccjja6.js => chunk-wktkvmxc.js} | 2 +- .../{chunk-djgasyep.js => chunk-wmfpv3r1.js} | 2 +- .../{chunk-09vtmmqy.js => chunk-wn82vcag.js} | 2 +- .../{chunk-7ht2e477.js => chunk-wqyega9x.js} | 2 +- .../{chunk-xat01n9r.js => chunk-wsthjkb0.js} | 2 +- .../{chunk-rsczfzv5.js => chunk-wtqennfc.js} | 4 +- .../{chunk-40r2sjvv.js => chunk-wtspdjed.js} | 2 +- .../fabro-spa/assets/assets/chunk-wxft0wc1.js | 1 + .../fabro-spa/assets/assets/chunk-x0q7zrg6.js | 1 + .../{chunk-0arhrnh5.js => chunk-x5zd42sv.js} | 2 +- .../{chunk-c9s05vra.js => chunk-xar2wbss.js} | 2 +- .../{chunk-1p13dpvt.js => chunk-xb9p1act.js} | 2 +- .../{chunk-aw5zcr1q.js => chunk-xcjre7pv.js} | 2 +- .../{chunk-s04r8ypd.js => chunk-xg9nsz1a.js} | 2 +- .../{chunk-hb09sgms.js => chunk-xmpbaa7d.js} | 2 +- .../{chunk-3m9zvayn.js => chunk-xsvv7xvt.js} | 2 +- .../fabro-spa/assets/assets/chunk-xw1cz78e.js | 1 + .../{chunk-cd5z80sb.js => chunk-xwzgbj1d.js} | 2 +- .../{chunk-9zdj8a3n.js => chunk-xxyq97vm.js} | 2 +- .../fabro-spa/assets/assets/chunk-y0k5p936.js | 1 - .../{chunk-8058k8ag.js => chunk-y1hk639j.js} | 2 +- .../{chunk-9nt85grf.js => chunk-y42g1fy0.js} | 2 +- .../{chunk-65gfrqdr.js => chunk-y5p4nn9x.js} | 2 +- .../{chunk-n9fk05sf.js => chunk-y5saaq1f.js} | 2 +- .../fabro-spa/assets/assets/chunk-y7k3vxdt.js | 1832 +++++++ .../{chunk-k28qfdjw.js => chunk-y949271p.js} | 2 +- .../{chunk-7n231g6w.js => chunk-yn1k47f9.js} | 2 +- .../{chunk-3zvn8zj0.js => chunk-ysnp9rq3.js} | 2 +- .../{chunk-hbecks9w.js => chunk-yt3yq8zt.js} | 2 +- .../{chunk-q0jezm8e.js => chunk-yv461kgq.js} | 2 +- .../fabro-spa/assets/assets/chunk-ywzm277y.js | 1 + .../{chunk-hcy1mrs5.js => chunk-yxvct4d0.js} | 2 +- .../fabro-spa/assets/assets/chunk-yxzy9qfy.js | 1 + .../{chunk-fmjqk2p8.js => chunk-yzarz4yx.js} | 2 +- .../{chunk-nfec9fvz.js => chunk-yzsxnqm5.js} | 2 +- .../fabro-spa/assets/assets/chunk-yzyztj9j.js | 1 + .../{chunk-9101h887.js => chunk-z1p7fbkb.js} | 2 +- .../fabro-spa/assets/assets/chunk-z2cshebq.js | 1 - .../fabro-spa/assets/assets/chunk-z4a3627r.js | 1 - .../{chunk-wy5z8pdz.js => chunk-z868q2s0.js} | 2 +- .../{chunk-rj97wsxc.js => chunk-z9jws129.js} | 4 +- .../{chunk-284xts88.js => chunk-z9t2k6b1.js} | 2 +- .../{chunk-dpy628c4.js => chunk-zaer0aep.js} | 2 +- .../{chunk-v3j1kc4j.js => chunk-zamhgy69.js} | 2 +- .../fabro-spa/assets/assets/chunk-zjf3xrah.js | 1 + .../fabro-spa/assets/assets/chunk-zk3df5km.js | 1 - .../{chunk-w5k4k58f.js => chunk-zwqnpfq7.js} | 2 +- .../fabro-spa/assets/assets/chunk-zz7qtpqt.js | 1 + .../fabro-spa/assets/assets/entry-5xv7qzx0.js | 4233 ----------------- .../fabro-spa/assets/assets/entry-t8vkx078.js | 2380 +++++++++ lib/crates/fabro-spa/assets/index.html | 706 +-- 409 files changed, 5064 insertions(+), 5002 deletions(-) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-02h8850b.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-02rvhgyc.js rename lib/crates/fabro-spa/assets/assets/{chunk-gvj6dvft.js => chunk-05ypm1ww.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-pd2e0rn2.js => chunk-0b169ehr.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-wv916p92.js => chunk-0gpjqeyh.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-045hgb7p.js => chunk-0hd8k8vn.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-b56n358c.js => chunk-0rtb21hq.js} (95%) rename lib/crates/fabro-spa/assets/assets/{chunk-sg2f2re0.js => chunk-0rvb0tex.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-0tw86tyg.js rename lib/crates/fabro-spa/assets/assets/{chunk-bqgn0hr5.js => chunk-0vmj43jh.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-0yfb2prj.js rename lib/crates/fabro-spa/assets/assets/{chunk-k5ct6jwb.js => chunk-0zx0007w.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-rapg8dhf.js => chunk-12xq903b.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-vb9tvgf3.js => chunk-13t96y3b.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-16zpk0g2.js rename lib/crates/fabro-spa/assets/assets/{chunk-sc5gxp3g.js => chunk-179w0q64.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-3df4bbzx.js => chunk-1bgncpfa.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-gx9nfmf2.js => chunk-1ehq66yp.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-w4qbtvt5.js => chunk-1h8c752f.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-2jt5b8fv.js => chunk-1wj09pgz.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-69qjw0pc.js => chunk-1xsm7tdm.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-20bmj0g7.js rename lib/crates/fabro-spa/assets/assets/{chunk-15hjyhwz.js => chunk-20gbxe8q.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-crwzp2n6.js => chunk-21nxw4pa.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-hf17k1x4.js => chunk-225d7y64.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-285epja5.js rename lib/crates/fabro-spa/assets/assets/{chunk-jzpdt1g4.js => chunk-29a1gcd2.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-2a1yc1ne.js rename lib/crates/fabro-spa/assets/assets/{chunk-c5wdhshs.js => chunk-2ax8v131.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-sdjecyp4.js => chunk-2de9a2cj.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-jvhgxb9f.js => chunk-2efmaphv.js} (88%) rename lib/crates/fabro-spa/assets/assets/{chunk-1p24jr1f.js => chunk-2ej02xek.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-f1wke3sr.js => chunk-2nrhn4z7.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-w0ymza22.js => chunk-2rwzbvck.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-2wp8j7k1.js rename lib/crates/fabro-spa/assets/assets/{chunk-d9ssk2wj.js => chunk-2yjtrhth.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-gbe5x0jc.js => chunk-31mjmkkc.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-b9h5aqnq.js => chunk-32bv1jd3.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-wcqfvnw4.js => chunk-3dax3q2e.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-32ncgp7y.js => chunk-3er661jz.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-5qr6tms1.js => chunk-3g0jbkk1.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-xk8c6fck.js => chunk-3ha51mpv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-py3jqsns.js => chunk-3jcch8ja.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-htz4yary.js => chunk-3k9g05sg.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-1zeg43pq.js => chunk-3ka7nxwy.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-3keqbh35.js rename lib/crates/fabro-spa/assets/assets/{chunk-6fdngjzm.js => chunk-3pve0q9p.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-5tgnttvh.js => chunk-3qp7afsx.js} (97%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-3qx0fph1.js rename lib/crates/fabro-spa/assets/assets/{chunk-chc9h51t.js => chunk-3sb70hv7.js} (93%) rename lib/crates/fabro-spa/assets/assets/{chunk-8p4k1t87.js => chunk-3tgvwwr8.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-n0qhp2b0.js => chunk-447z01r8.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-qtsh2yew.js => chunk-44y8esqm.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-4ng06c5x.js => chunk-474620y8.js} (89%) rename lib/crates/fabro-spa/assets/assets/{chunk-91knw186.js => chunk-4bc1rvj7.js} (91%) rename lib/crates/fabro-spa/assets/assets/{chunk-n6ps66k4.js => chunk-4c7xpq8a.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-vpp6kc65.js => chunk-4kse7sfn.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-kmk2dq8x.js => chunk-4m92ammv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-4m33ss6n.js => chunk-4nfs63a6.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9s5h7bnb.js => chunk-4nr4vn9a.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-km5w7dec.js => chunk-4vp9r22c.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-4vxn1k9m.js rename lib/crates/fabro-spa/assets/assets/{chunk-4d3487jq.js => chunk-4x0tnfw6.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-45rmnzaa.js => chunk-52wkp87b.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-k92eb1w0.js => chunk-55j72f95.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-zm4bx5f8.js => chunk-59hh3731.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-jtpvvmrp.js => chunk-5c4a681q.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-qg5ady5e.js => chunk-5mk3jctr.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-0rmce4kg.js => chunk-5q0vf5kd.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-1f6npkyf.js => chunk-5qcsew09.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-5vf5y101.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-5w1gpb79.js rename lib/crates/fabro-spa/assets/assets/{chunk-65xe94t7.js => chunk-5xzad696.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-43bfa4ha.js => chunk-63jkne9p.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-qbb4h1yt.js => chunk-66pc6rzh.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-69yr5nhb.js => chunk-6b6at9tx.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-a4apmake.js => chunk-6epsd7d6.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-x6w8ws2y.js => chunk-6fz4y5fw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-5re2ted6.js => chunk-6ks17cht.js} (91%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-6ks6v1r2.js rename lib/crates/fabro-spa/assets/assets/{chunk-hxekwkx3.js => chunk-6nrpzzgz.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-6pf0p5av.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-6v1sse0c.js rename lib/crates/fabro-spa/assets/assets/{chunk-11vzjswv.js => chunk-6v64ydme.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-cah5fj8w.js => chunk-6w2p1k8b.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-etxafnd6.js => chunk-6ymngmpb.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-703sdrk0.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-70znzn0j.js rename lib/crates/fabro-spa/assets/assets/{chunk-pmthkscp.js => chunk-71s03bbh.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-fg2j5av7.js => chunk-72xm4hh2.js} (97%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-73ksjch6.js rename lib/crates/fabro-spa/assets/assets/{chunk-g0ayf9bf.js => chunk-760gwdac.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-787agcsn.js rename lib/crates/fabro-spa/assets/assets/{chunk-qgsasvpy.js => chunk-7fda8yjb.js} (96%) rename lib/crates/fabro-spa/assets/assets/{chunk-jdh1vpwp.js => chunk-7h745e90.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-gqj2hkrx.js => chunk-7j5qb14p.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-287ksxds.js => chunk-7jvnrb0q.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-s0ywtjf8.js => chunk-7n06vwga.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-7q2xpwf8.js rename lib/crates/fabro-spa/assets/assets/{chunk-aax3thf6.js => chunk-7s6w1wwr.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-7s7fg5te.js rename lib/crates/fabro-spa/assets/assets/{chunk-gsv84090.js => chunk-7xj0sb3r.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-m51jpwsm.js => chunk-7zjvj5cs.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-wzb9zsp9.js => chunk-7zy2rxws.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9txrxszv.js => chunk-862e8qmw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-prqggcna.js => chunk-88hnf20x.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-8bhy2mjd.js rename lib/crates/fabro-spa/assets/assets/{chunk-n1efhztv.js => chunk-8ceh8vkz.js} (96%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-8dk9hn4b.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-8efg4msa.js rename lib/crates/fabro-spa/assets/assets/{chunk-cggj88rv.js => chunk-8g1me8d0.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-4ax6se1w.js => chunk-8hjgfzg4.js} (92%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-8kgzk0t8.js rename lib/crates/fabro-spa/assets/assets/{chunk-h0cd4z7x.js => chunk-8qpxecda.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-q0vrryxz.js => chunk-8veqp2gt.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-dpzzapys.js => chunk-8y939j18.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-8zxstrzs.js rename lib/crates/fabro-spa/assets/assets/{chunk-vf9apy3h.js => chunk-92cqxsb3.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-93ve7vvk.js rename lib/crates/fabro-spa/assets/assets/{chunk-bs0y3jhw.js => chunk-94mpxya9.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-vz6zae36.js => chunk-972wx742.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-8k9hqn4r.js => chunk-978ys6k2.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-3g4dvzch.js => chunk-98ay7s0d.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-1qncsvxg.js => chunk-98xb1a76.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-8mhds0wh.js => chunk-9afd5qwc.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-xvj1jh05.js => chunk-9et7b8ph.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-kqteaajh.js => chunk-9f97tshq.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-jd2ey9tz.js => chunk-9gvhdg6s.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-mshhqkhw.js => chunk-9nqxn300.js} (97%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-9skzfrp3.js rename lib/crates/fabro-spa/assets/assets/{chunk-6wzwk7py.js => chunk-9xgyacax.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-3nkhee75.js => chunk-9z4h1q70.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-ck0xaxxw.js => chunk-a137nrap.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-nwwmkwsa.js => chunk-a2vqe77y.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-eew9p379.js => chunk-a4mrrp97.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-ahfp68c3.js rename lib/crates/fabro-spa/assets/assets/{chunk-ygckhx44.js => chunk-amc3npz0.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-6x0cp4ft.js => chunk-amk943wr.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-6k6wch5m.js => chunk-amwhw0yz.js} (95%) rename lib/crates/fabro-spa/assets/assets/{chunk-gpx5pqfr.js => chunk-apgqhjz7.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-vte2wzvs.js => chunk-ard61fbz.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-kndpxdcb.js => chunk-arehsbw6.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-atem5prh.js rename lib/crates/fabro-spa/assets/assets/{chunk-6phvn452.js => chunk-avh561dw.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-b7kwc5zm.js rename lib/crates/fabro-spa/assets/assets/{chunk-ptd5f8xe.js => chunk-bd9fjd7m.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-edasyn4n.js => chunk-bk86zsmq.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-bkq2jsbj.js rename lib/crates/fabro-spa/assets/assets/{chunk-hx8k8nbg.js => chunk-bm4e6kwj.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-p90q44rb.js => chunk-bqjspmyk.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-hbeqab5r.js => chunk-br4gs7tr.js} (91%) rename lib/crates/fabro-spa/assets/assets/{chunk-k1nff9yy.js => chunk-bs775x23.js} (96%) rename lib/crates/fabro-spa/assets/assets/{chunk-xpjjvrp8.js => chunk-bvp3ychm.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-15x7583a.js => chunk-c89cpjb5.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-7cejwt0f.js => chunk-c8zhk10v.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-agjvn6ev.js => chunk-cecr3d1n.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-cgs5jjby.js rename lib/crates/fabro-spa/assets/assets/{chunk-10cvb41f.js => chunk-ch4xqhf8.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-cmgy51d4.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-cqqmxxt4.js rename lib/crates/fabro-spa/assets/assets/{chunk-x5g8kw4r.js => chunk-crmnbecm.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-2z19rpjp.js => chunk-cvp30kfk.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-ygp59tp4.js => chunk-d0tx1xbd.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-gkamv7bm.js => chunk-ddm1qqj9.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dep0g6mr.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dg97ypfw.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dgqamhb2.js rename lib/crates/fabro-spa/assets/assets/{chunk-k5cgxv85.js => chunk-dgqnr459.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-qwhe7qd5.js => chunk-dgtjh101.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dgx7fqh1.js rename lib/crates/fabro-spa/assets/assets/{chunk-y256rdnq.js => chunk-dn3x1k23.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-2wgb5z8c.js => chunk-dngz6vyc.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dqg2dkb2.js rename lib/crates/fabro-spa/assets/assets/{chunk-v2sv95rn.js => chunk-dqs5pvm1.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-89wnxtcq.js => chunk-dsrpd535.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-3c1mwadv.js => chunk-dv3tpw52.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dxzyc7gn.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-dzpem46v.js rename lib/crates/fabro-spa/assets/assets/{chunk-t1b8jx8z.js => chunk-e09w5asn.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-gfryj5x1.js => chunk-e4jwbd8g.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-e67dmmza.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-e8908yvy.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-e8gdmrfw.js rename lib/crates/fabro-spa/assets/assets/{chunk-1jcnxexa.js => chunk-e947n3c9.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-daz97a62.js => chunk-e9543kc7.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-r21ejn8c.js => chunk-edpmrkbj.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-ej0nkavp.js rename lib/crates/fabro-spa/assets/assets/{chunk-rymbbwyy.js => chunk-ej688wpw.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-emy5c03d.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-en0m3dws.js rename lib/crates/fabro-spa/assets/assets/{chunk-v61ks9f7.js => chunk-ept66kdn.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-88ezy3c3.js => chunk-eqzepqq5.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-r7sbg6nn.js => chunk-etm6ex2v.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-f1vcb3sq.js => chunk-ew9bs4zr.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-f0nmmtxx.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-f0pwezgd.js rename lib/crates/fabro-spa/assets/assets/{chunk-rqqksrg2.js => chunk-f8s9qzq7.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-d6xt8xhc.js => chunk-fgccx1yw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-27kzvd2h.js => chunk-fkb9d4kj.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-byx1xjhw.js => chunk-fncztbes.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-d9vybj0p.js => chunk-fs42rkd6.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-7zchmbf1.js => chunk-fyz76kj5.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-80kezg8f.js => chunk-fzk4emkr.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-xr2abf5g.js => chunk-g0fbqbvp.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-g7x00xws.js rename lib/crates/fabro-spa/assets/assets/{chunk-s094abv0.js => chunk-g876hxms.js} (97%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-g933hznk.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-gc4hg809.js rename lib/crates/fabro-spa/assets/assets/{chunk-s059x4yp.js => chunk-gceq6mym.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-g28k4bff.js => chunk-gd8pwd5x.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-61ctvdht.js => chunk-ge256ddt.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-kmey03h3.js => chunk-gf0502ds.js} (95%) rename lib/crates/fabro-spa/assets/assets/{chunk-5n3atqkz.js => chunk-gf1gr01b.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-rhfgsbf6.js => chunk-gfqeq5cc.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-tgq9246b.js => chunk-gmkq1eqa.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-f07rb91b.js => chunk-gtpt64we.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-ewmw8y31.js => chunk-gx2p1g4s.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-h56fc6ab.js rename lib/crates/fabro-spa/assets/assets/{chunk-rg0x77jr.js => chunk-h5zh6a75.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-h9mssx7k.js rename lib/crates/fabro-spa/assets/assets/{chunk-2dksx1h9.js => chunk-haz0qj28.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-evcwpvcy.js => chunk-hb306ke8.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-shsecpmc.js => chunk-hemdpn0b.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-0tbe7wc4.js => chunk-hff6kcwm.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-hfgr6f88.js rename lib/crates/fabro-spa/assets/assets/{chunk-5e28t8at.js => chunk-hgaj88x0.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-hknrdsf4.js rename lib/crates/fabro-spa/assets/assets/{chunk-6ck6fxa1.js => chunk-hmm6qdtt.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-r2w3cygs.js => chunk-hrt0rbxr.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-f1ge7j6e.js => chunk-hrxabzx5.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-rvvxfm9b.js => chunk-hz1wbzj3.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-4j8a65qz.js => chunk-j1q2qqsw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-v8yqmrae.js => chunk-j4qar1gs.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-nxg5ae72.js => chunk-j7y7n9zb.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-qgga0gj9.js => chunk-j985jyzv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-w5cvw2ty.js => chunk-jm9syaw5.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-76211vbg.js => chunk-jrz3xt00.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-7hgje54d.js => chunk-jtv72k00.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-q96stch7.js => chunk-jw02nkhj.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-haqztpwf.js => chunk-k7s6xxff.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-k9q6dq6r.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-kcdc13zg.js rename lib/crates/fabro-spa/assets/assets/{chunk-vrcxf7jx.js => chunk-kd5j6mdr.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-bye1f1bb.js => chunk-ke1592hx.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-8v6fnbbx.js => chunk-ke60725t.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-dv5tw9vt.js => chunk-kgcmczdj.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-dmf5ykfc.js => chunk-kgjc33jw.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-mjtqpjc7.js => chunk-ks29p366.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-4v5fshv2.js => chunk-ktx0nkhz.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-kx1024hp.js rename lib/crates/fabro-spa/assets/assets/{chunk-ptrvw2tv.js => chunk-kyze7g95.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-m1xgmarr.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-m1xkhyk9.js rename lib/crates/fabro-spa/assets/assets/{chunk-k947xaae.js => chunk-m44wbrq0.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-m5d6s7m8.js rename lib/crates/fabro-spa/assets/assets/{chunk-bvpka4mc.js => chunk-m6cr2q5j.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-pfbk9c4x.js => chunk-m8g0dkjy.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-gzrr2442.js => chunk-mb5r6cmr.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-6crx5dxj.js => chunk-mf4hz28k.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-d0gsnger.js => chunk-mmhqe3rk.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-1mvhxmh1.js => chunk-mmrbgjmv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-y9ww0p2p.js => chunk-mph3dx6h.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-hamsxj56.js => chunk-mpq83mtn.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-6yncfqtw.js => chunk-mr7p00hg.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-c0avz8qy.js => chunk-mxfms5eb.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-mxvb6h6x.js rename lib/crates/fabro-spa/assets/assets/{chunk-f82fqbr1.js => chunk-n4c296rc.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-xp1nfh3m.js => chunk-n6qdy3zc.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-n711ggb0.js rename lib/crates/fabro-spa/assets/assets/{chunk-6j26ybdg.js => chunk-n9tc6j4j.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-n9tspt4g.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-n9wky826.js rename lib/crates/fabro-spa/assets/assets/{chunk-xbf0scec.js => chunk-nbvevmb7.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-jm91kykx.js => chunk-nj2d633b.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-sadshphz.js => chunk-nkw6kj41.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-xj85459k.js => chunk-np3yrz2f.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-e6233caf.js => chunk-nqf1eexv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-tqvyqgea.js => chunk-nrg230pq.js} (93%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-nsexs3ds.js rename lib/crates/fabro-spa/assets/assets/{chunk-537x8phc.js => chunk-nt242hk6.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-nz38szxw.js rename lib/crates/fabro-spa/assets/assets/{chunk-g9za56wt.js => chunk-nz9ah4xw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-t2049s6y.js => chunk-nzy412y0.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-nzycyamw.js rename lib/crates/fabro-spa/assets/assets/{chunk-e1mesqtx.js => chunk-p5wgtq9z.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-p88116sb.js rename lib/crates/fabro-spa/assets/assets/{chunk-ce3g5784.js => chunk-p8j9swg9.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-7f7pbcpm.js => chunk-p902f4na.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-svjx2h8c.js => chunk-pce8yxd3.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-pcvh68t6.js rename lib/crates/fabro-spa/assets/assets/{chunk-dcqvm3tr.js => chunk-peyx30g4.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-5w2bs93r.js => chunk-pgmr3gwa.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-jrvrwzff.js => chunk-pnfpy4pt.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-pnw7vt97.js rename lib/crates/fabro-spa/assets/assets/{chunk-aan5y8c6.js => chunk-pvcbr9et.js} (98%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-q0rkqn8j.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-q5r79npn.js rename lib/crates/fabro-spa/assets/assets/{chunk-n71q97az.js => chunk-qa0y4e4r.js} (90%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-qbs2gt7d.js rename lib/crates/fabro-spa/assets/assets/{chunk-ds06aka8.js => chunk-qd5kg695.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-hven1z1x.js => chunk-qf15wygb.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-awx8ywy2.js => chunk-qfbk6hm6.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9xkvmexd.js => chunk-qkba8k3y.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-03tvqqfj.js => chunk-qmn5et67.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-dh7q8d4g.js => chunk-qtgxqpjk.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-qx71h099.js rename lib/crates/fabro-spa/assets/assets/{chunk-02n7dnxd.js => chunk-qxxfm3wk.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-60wrqr6x.js => chunk-r43a3swm.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-kv06br00.js => chunk-rb2qd4b7.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-ab5mzsvd.js => chunk-rd7ysqpk.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-hbakvvp7.js => chunk-rh6q661w.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-zphztess.js => chunk-rmsy3sws.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-14e41pj6.js => chunk-rn4fbjg4.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-8bmmar76.js => chunk-rnt7tqcb.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-rqd3733a.js rename lib/crates/fabro-spa/assets/assets/{chunk-8jx5jky3.js => chunk-rrhaagg0.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-m6p3eszz.js => chunk-rrm311hw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-g344azhy.js => chunk-rwmn1g7e.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-7hpkw26t.js => chunk-rxp3t9tt.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9bqmfa1d.js => chunk-rzzxv5ca.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-s0g8kyb7.js rename lib/crates/fabro-spa/assets/assets/{chunk-j87f8g7j.js => chunk-s3v55eyd.js} (97%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-s5898525.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-s5h99qbc.js rename lib/crates/fabro-spa/assets/assets/{chunk-czek8d62.js => chunk-s6arnhv4.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-kn0namya.js => chunk-s9ef86s1.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9wcwed5x.js => chunk-sppzpj8z.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-1s1yewyh.js => chunk-stm85f97.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-82j79ps2.js => chunk-sy7fa5zb.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-r31zme8e.js => chunk-sz8v9065.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-6k0hze8p.js => chunk-t0ygaxtk.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-t390nfcr.js rename lib/crates/fabro-spa/assets/assets/{chunk-3th2xfxh.js => chunk-t5tcnf6j.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-d96yq2am.js => chunk-t7xthjcp.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-1xpescw2.js => chunk-tcwzycpt.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-n676sfx8.js => chunk-teyyezd6.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-q02ym4qn.js => chunk-tjpw3zn0.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-0p2zrbay.js => chunk-tptp6b7m.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-jq4kdgcp.js => chunk-tq26evfw.js} (96%) rename lib/crates/fabro-spa/assets/assets/{chunk-adtfqdr1.js => chunk-tqgvt9mw.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-6fp6wtbb.js => chunk-ttw39w80.js} (95%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-tvgc0vzh.js rename lib/crates/fabro-spa/assets/assets/{chunk-n2fgqn9j.js => chunk-txd1j6f3.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-v5dy8twy.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-v8qfyxzg.js rename lib/crates/fabro-spa/assets/assets/{chunk-412z3n24.js => chunk-vbmnk4xd.js} (96%) rename lib/crates/fabro-spa/assets/assets/{chunk-0chh3hs6.js => chunk-vcv5w8sg.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-vhbfjdzq.js rename lib/crates/fabro-spa/assets/assets/{chunk-y6y9wqm8.js => chunk-vnrcdsw1.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-4833vrwm.js => chunk-vxrqpknz.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-7kjag9wq.js => chunk-w4be62cd.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-w8heqrq6.js rename lib/crates/fabro-spa/assets/assets/{chunk-e2fhx98p.js => chunk-wer312mh.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-4gmvbn7w.js => chunk-wfmzgkqr.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-spnrdyp0.js => chunk-wj94wc84.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-2eccjja6.js => chunk-wktkvmxc.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-djgasyep.js => chunk-wmfpv3r1.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-09vtmmqy.js => chunk-wn82vcag.js} (95%) rename lib/crates/fabro-spa/assets/assets/{chunk-7ht2e477.js => chunk-wqyega9x.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-xat01n9r.js => chunk-wsthjkb0.js} (97%) rename lib/crates/fabro-spa/assets/assets/{chunk-rsczfzv5.js => chunk-wtqennfc.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-40r2sjvv.js => chunk-wtspdjed.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-wxft0wc1.js create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-x0q7zrg6.js rename lib/crates/fabro-spa/assets/assets/{chunk-0arhrnh5.js => chunk-x5zd42sv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-c9s05vra.js => chunk-xar2wbss.js} (94%) rename lib/crates/fabro-spa/assets/assets/{chunk-1p13dpvt.js => chunk-xb9p1act.js} (98%) rename lib/crates/fabro-spa/assets/assets/{chunk-aw5zcr1q.js => chunk-xcjre7pv.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-s04r8ypd.js => chunk-xg9nsz1a.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-hb09sgms.js => chunk-xmpbaa7d.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-3m9zvayn.js => chunk-xsvv7xvt.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-xw1cz78e.js rename lib/crates/fabro-spa/assets/assets/{chunk-cd5z80sb.js => chunk-xwzgbj1d.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9zdj8a3n.js => chunk-xxyq97vm.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-y0k5p936.js rename lib/crates/fabro-spa/assets/assets/{chunk-8058k8ag.js => chunk-y1hk639j.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-9nt85grf.js => chunk-y42g1fy0.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-65gfrqdr.js => chunk-y5p4nn9x.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-n9fk05sf.js => chunk-y5saaq1f.js} (98%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-y7k3vxdt.js rename lib/crates/fabro-spa/assets/assets/{chunk-k28qfdjw.js => chunk-y949271p.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-7n231g6w.js => chunk-yn1k47f9.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-3zvn8zj0.js => chunk-ysnp9rq3.js} (91%) rename lib/crates/fabro-spa/assets/assets/{chunk-hbecks9w.js => chunk-yt3yq8zt.js} (94%) rename lib/crates/fabro-spa/assets/assets/{chunk-q0jezm8e.js => chunk-yv461kgq.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-ywzm277y.js rename lib/crates/fabro-spa/assets/assets/{chunk-hcy1mrs5.js => chunk-yxvct4d0.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-yxzy9qfy.js rename lib/crates/fabro-spa/assets/assets/{chunk-fmjqk2p8.js => chunk-yzarz4yx.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-nfec9fvz.js => chunk-yzsxnqm5.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-yzyztj9j.js rename lib/crates/fabro-spa/assets/assets/{chunk-9101h887.js => chunk-z1p7fbkb.js} (99%) delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-z2cshebq.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-z4a3627r.js rename lib/crates/fabro-spa/assets/assets/{chunk-wy5z8pdz.js => chunk-z868q2s0.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-rj97wsxc.js => chunk-z9jws129.js} (90%) rename lib/crates/fabro-spa/assets/assets/{chunk-284xts88.js => chunk-z9t2k6b1.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-dpy628c4.js => chunk-zaer0aep.js} (99%) rename lib/crates/fabro-spa/assets/assets/{chunk-v3j1kc4j.js => chunk-zamhgy69.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-zjf3xrah.js delete mode 100644 lib/crates/fabro-spa/assets/assets/chunk-zk3df5km.js rename lib/crates/fabro-spa/assets/assets/{chunk-w5k4k58f.js => chunk-zwqnpfq7.js} (99%) create mode 100644 lib/crates/fabro-spa/assets/assets/chunk-zz7qtpqt.js delete mode 100644 lib/crates/fabro-spa/assets/assets/entry-5xv7qzx0.js create mode 100644 lib/crates/fabro-spa/assets/assets/entry-t8vkx078.js diff --git a/apps/fabro-web/app/routes/run-files.tsx b/apps/fabro-web/app/routes/run-files.tsx index d90c7c1f4..c13676101 100644 --- a/apps/fabro-web/app/routes/run-files.tsx +++ b/apps/fabro-web/app/routes/run-files.tsx @@ -1,4 +1,6 @@ import { + lazy, + Suspense, useCallback, useEffect, useRef, @@ -26,7 +28,6 @@ import { RunFilesErrorBoundary, } from "./run-files/states"; import { useFileKeyboardNav } from "./run-files/keyboard"; -import { FileTreeSidebar } from "./run-files/file-tree-sidebar"; import { Toolbar, type DiffStyle } from "./run-files/toolbar"; import { ApiError, extractRequestId } from "../lib/api-client"; import { useRun, useRunFiles } from "../lib/queries"; @@ -34,6 +35,11 @@ import { useRun, useRunFiles } from "../lib/queries"; export { extractRequestId }; const { MultiFileDiff, PatchDiff } = PierreDiffs; +const FileTreeSidebar = lazy(() => + import("./run-files/file-tree-sidebar").then((module) => ({ + default: module.FileTreeSidebar, + })), +); const maybeVirtualizer = (PierreDiffs as Record).Virtualizer; const Virtualizer = typeof maybeVirtualizer === "function" ? maybeVirtualizer as ({ children }: { children: ReactNode }) => ReactElement @@ -49,7 +55,10 @@ const DIFF_STYLE_STORAGE_KEY = "fabro.run-files.diff-style"; export const ErrorBoundary = RunFilesErrorBoundary; function useNarrowViewport(): boolean { - const [narrow, setNarrow] = useState(false); + const [narrow, setNarrow] = useState(() => { + if (typeof window === "undefined") return false; + return window.matchMedia(`(max-width: ${MD_BREAKPOINT_PX - 1}px)`).matches; + }); useEffect(() => { if (typeof window === "undefined") return; const mql = window.matchMedia(`(max-width: ${MD_BREAKPOINT_PX - 1}px)`); @@ -469,11 +478,15 @@ export default function RunFiles() { /> ) : null}
- + {!narrow ? ( + + + + ) : null}
{body}
diff --git a/apps/fabro-web/app/routes/run-files/file-tree-sidebar.tsx b/apps/fabro-web/app/routes/run-files/file-tree-sidebar.tsx index 1ee0c5915..785d472f0 100644 --- a/apps/fabro-web/app/routes/run-files/file-tree-sidebar.tsx +++ b/apps/fabro-web/app/routes/run-files/file-tree-sidebar.tsx @@ -1,9 +1,9 @@ import { useEffect, - useLayoutEffect, useMemo, useRef, type ChangeEvent, + type CSSProperties, } from "react"; import { FileTree, @@ -11,10 +11,17 @@ import { useFileTreeSearch, useFileTreeSelection, } from "@pierre/trees/react"; -import { themeToTreeStyles, type GitStatus, type GitStatusEntry } from "@pierre/trees"; +import { + themeToTreeStyles, + type FileTree as FileTreeModel, + type GitStatus, + type GitStatusEntry, +} from "@pierre/trees"; import pierreDark from "@pierre/theme/pierre-dark"; import type { FileDiff } from "@qltysh/fabro-api-client"; +type TreeThemeStyle = CSSProperties & Record<`--${string}`, string | number>; + const CHANGE_KIND_TO_GIT_STATUS: Record, GitStatus> = { added: "added", modified: "modified", @@ -28,16 +35,38 @@ function filePath(file: FileDiff): string { return file.new_file.name || file.old_file.name; } -function ancestorPaths(paths: readonly string[]): string[] { - const set = new Set(); - for (const p of paths) { - let i = p.indexOf("/"); - while (i !== -1) { - set.add(p.slice(0, i)); - i = p.indexOf("/", i + 1); +function gitStatusFor(file: FileDiff): GitStatus { + return file.change_kind + ? CHANGE_KIND_TO_GIT_STATUS[file.change_kind] ?? "modified" + : "modified"; +} + +function lastSelectedFile( + selected: readonly string[], + changedPaths: ReadonlySet, +): string | null { + for (let index = selected.length - 1; index >= 0; index -= 1) { + const path = selected[index]; + if (path && changedPaths.has(path)) return path; + } + return null; +} + +function syncSelection( + model: FileTreeModel, + selection: readonly string[], + selectedPath: string | null, +) { + for (const path of selection) { + if (path !== selectedPath) { + model.getItem(path)?.deselect(); } } - return [...set]; + if (!selectedPath || (selection.length === 1 && selection[0] === selectedPath)) { + return; + } + const item = model.getItem(selectedPath); + if (item && !item.isSelected()) item.select(); } interface FileTreeSidebarProps { @@ -52,24 +81,32 @@ export function FileTreeSidebar({ onSelect, }: FileTreeSidebarProps) { const paths = useMemo(() => files.map(filePath), [files]); + const changedPaths = useMemo(() => new Set(paths), [paths]); const gitStatus = useMemo( () => files.map((file) => ({ path: filePath(file), - status: file.change_kind - ? CHANGE_KIND_TO_GIT_STATUS[file.change_kind] - : "modified", + status: gitStatusFor(file), })), [files], ); - const initialExpandedPaths = useMemo(() => ancestorPaths(paths), [paths]); + const onSelectRef = useRef(onSelect); + onSelectRef.current = onSelect; + + const selectedPathRef = useRef(selectedPath); + selectedPathRef.current = selectedPath; + + const changedPathsRef = useRef>(changedPaths); + changedPathsRef.current = changedPaths; + + const pendingSelectedPathRef = useRef(null); const { model } = useFileTree({ paths, flattenEmptyDirectories: true, - initialExpandedPaths, + initialExpansion: "open", initialSelectedPaths: selectedPath ? [selectedPath] : undefined, gitStatus, icons: "standard", @@ -77,53 +114,60 @@ export function FileTreeSidebar({ search: true, fileTreeSearchMode: "hide-non-matches", onSelectionChange: (selected) => { - const first = selected[0]; - if (first) onSelect(first); + const selectedFile = lastSelectedFile(selected, changedPathsRef.current); + if (!selectedFile) return; + pendingSelectedPathRef.current = selectedFile; + onSelectRef.current(selectedFile); }, }); - // Keep the long-lived model in sync when the underlying files change - // (e.g. a Refresh fetched a new commit). + const didSyncModelRef = useRef(false); useEffect(() => { + if (!didSyncModelRef.current) { + didSyncModelRef.current = true; + return; + } model.resetPaths(paths); - }, [model, paths]); - - useEffect(() => { model.setGitStatus(gitStatus); - }, [model, gitStatus]); + pendingSelectedPathRef.current = null; + const currentSelectedPath = selectedPathRef.current; + syncSelection( + model, + model.getSelectedPaths(), + currentSelectedPath && changedPathsRef.current.has(currentSelectedPath) + ? currentSelectedPath + : null, + ); + }, [gitStatus, model, paths]); - // Drive selection from the URL hash (back/forward navigation, deep links). const selection = useFileTreeSelection(model); useEffect(() => { - if (!selectedPath) return; - if (selection.length === 1 && selection[0] === selectedPath) return; - const item = model.getItem(selectedPath); - if (item) item.select(); - }, [model, selectedPath, selection]); + const pendingSelectedPath = pendingSelectedPathRef.current; + if (pendingSelectedPath === selectedPath) { + pendingSelectedPathRef.current = null; + } + const nextSelectedPath = pendingSelectedPath ?? selectedPath; + syncSelection( + model, + selection, + nextSelectedPath && changedPaths.has(nextSelectedPath) ? nextSelectedPath : null, + ); + }, [changedPaths, model, selectedPath, selection]); const search = useFileTreeSearch(model); const handleSearchChange = (event: ChangeEvent) => search.setValue(event.target.value); - // `themeToTreeStyles` returns a Record of CSS custom - // properties (--trees-theme-*). React's CSSProperties is closed and - // doesn't accept arbitrary string keys, so apply them imperatively to a - // wrapper element — they cascade into the tree's shadow DOM as expected. - const themeStyles = useMemo(() => themeToTreeStyles(pierreDark), []); - const themeRef = useRef(null); - useLayoutEffect(() => { - const el = themeRef.current; - if (!el) return; - for (const [key, value] of Object.entries(themeStyles)) { - if (key.startsWith("--")) el.style.setProperty(key, value); - } - }, [themeStyles]); + const themeStyles = useMemo( + () => themeToTreeStyles(pierreDark) as TreeThemeStyle, + [], + ); return (