@fluixi/core 1.0.0-alpha.95 → 1.0.0-alpha.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/cdn/core.global.js +2 -2
  2. package/dist/src/cdn/{chunk-IFONZJWJ.mjs → chunk-RKBFEFZP.mjs} +34 -10
  3. package/dist/src/cdn/core.cjs +36 -12
  4. package/dist/src/cdn/core.mjs +4 -4
  5. package/dist/src/cdn/{router-TU5CPI54.mjs → router-V2THK27H.mjs} +3 -3
  6. package/dist/src/index.cjs +31 -7
  7. package/dist/src/index.mjs +31 -7
  8. package/dist/src/lib/client/{chunk-AHNP3IWU.mjs → chunk-KYWKPX6I.mjs} +1 -1
  9. package/dist/src/lib/client/index.cjs +37 -13
  10. package/dist/src/lib/client/index.d.ts.map +1 -1
  11. package/dist/src/lib/client/index.js +4 -1
  12. package/dist/src/lib/client/index.mjs +5 -5
  13. package/dist/src/lib/client/{router-5C6FQJQ4.mjs → router-EHDYEGDF.mjs} +36 -12
  14. package/dist/src/lib/core.cjs +30 -6
  15. package/dist/src/lib/core.mjs +30 -6
  16. package/dist/src/lib/i18n/index.cjs +1 -1
  17. package/dist/src/lib/i18n/index.mjs +1 -1
  18. package/dist/src/lib/index.cjs +1 -1
  19. package/dist/src/lib/index.mjs +1 -1
  20. package/dist/src/lib/isomorphic.cjs +1 -1
  21. package/dist/src/lib/isomorphic.d.ts +5 -0
  22. package/dist/src/lib/isomorphic.d.ts.map +1 -1
  23. package/dist/src/lib/isomorphic.js +1 -1
  24. package/dist/src/lib/isomorphic.mjs +1 -1
  25. package/dist/src/lib/jsx-runtime/index.cjs +1 -1
  26. package/dist/src/lib/jsx-runtime/index.mjs +1 -1
  27. package/dist/src/lib/jsx-runtime/jsx-dev-runtime.cjs +1 -1
  28. package/dist/src/lib/jsx-runtime/jsx-dev-runtime.mjs +1 -1
  29. package/dist/src/lib/plugins/index.cjs +1 -1
  30. package/dist/src/lib/plugins/index.mjs +1 -1
  31. package/dist/src/lib/render/index.cjs +1 -1
  32. package/dist/src/lib/render/index.mjs +1 -1
  33. package/dist/src/lib/render/versions.cjs +1 -1
  34. package/dist/src/lib/render/versions.mjs +1 -1
  35. package/dist/src/lib/router/data.cjs +4 -4
  36. package/dist/src/lib/router/data.d.ts.map +1 -1
  37. package/dist/src/lib/router/data.js +9 -8
  38. package/dist/src/lib/router/data.mjs +4 -4
  39. package/dist/src/lib/router/index.cjs +35 -11
  40. package/dist/src/lib/router/index.d.ts +8 -5
  41. package/dist/src/lib/router/index.d.ts.map +1 -1
  42. package/dist/src/lib/router/index.js +44 -12
  43. package/dist/src/lib/router/index.mjs +35 -11
  44. package/dist/src/lib/server/index.cjs +1 -1
  45. package/dist/src/lib/server/index.mjs +1 -1
  46. package/dist/src/lib/storage/index.cjs +1 -1
  47. package/dist/src/lib/storage/index.mjs +1 -1
  48. package/dist/src/routes.cjs +1 -1
  49. package/dist/src/routes.mjs +1 -1
  50. package/dist/src/utils.cjs +1 -1
  51. package/dist/src/utils.mjs +1 -1
  52. package/dist/src/version.generated.cjs +1 -1
  53. package/dist/src/version.generated.d.ts +1 -1
  54. package/dist/src/version.generated.js +1 -1
  55. package/dist/src/version.generated.mjs +1 -1
  56. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  57. package/package.json +12 -12
@@ -303,7 +303,8 @@ function getSubmissionsSignal(url) {
303
303
  }
304
304
  function action(fn, name, options = {}) {
305
305
  const actionUrl = name || fn.name || "action";
306
- const submit = async (input) => {
306
+ const submit = async (...args) => {
307
+ const input = args.length > 1 ? args : args[0];
307
308
  const [, setSubmission] = getSubmissionSignal(actionUrl);
308
309
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
309
310
  let entry;
@@ -318,11 +319,10 @@ function action(fn, name, options = {}) {
318
319
  };
319
320
  const retry = () => {
320
321
  drop2();
321
- return submit(input);
322
+ return submit(...args);
322
323
  };
323
324
  entry = {
324
325
  input,
325
- // Approximate type for tracking
326
326
  pending: true,
327
327
  clear,
328
328
  retry
@@ -330,7 +330,7 @@ function action(fn, name, options = {}) {
330
330
  setSubmission(entry);
331
331
  setSubmissions((list) => [...list, entry]);
332
332
  try {
333
- const result = await fn(input);
333
+ const result = await fn(...args);
334
334
  setSubmission({
335
335
  input,
336
336
  result,
@@ -458,19 +458,43 @@ function renderLayer(m, depth, base) {
458
458
  });
459
459
  });
460
460
  };
461
+ let readsLocation;
461
462
  const [resource, { refetch }] = createResource3(() => {
462
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
463
+ const params = untrack2(base.params);
464
+ const location = untrack2(base.location);
465
+ readsLocation = false;
466
+ const result = loader(
467
+ {
468
+ params: () => params,
469
+ location: () => {
470
+ readsLocation = true;
471
+ return location;
472
+ }
473
+ },
474
+ owner,
475
+ () => cancelled,
476
+ trackDeps
477
+ );
463
478
  return router ? router.trackLoad(result) : result;
464
479
  });
465
- onCleanup(onRevalidate(() => void refetch()));
480
+ onCleanup(
481
+ onRevalidate(() => {
482
+ if (untrack2(() => base.matched()[depth]?.route) !== m.route) return;
483
+ void refetch();
484
+ })
485
+ );
466
486
  let loadedFor = untrack2(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
487
+ let searchedFor = untrack2(() => base.location().search);
467
488
  createEffect(() => {
468
489
  const now = base.matched()[depth];
490
+ const search = base.location().search;
469
491
  if (now?.route !== m.route) return;
470
492
  const params = JSON.stringify(now.params ?? {});
471
- if (params === loadedFor) return;
493
+ const paramsMoved = params !== loadedFor;
494
+ const searchMoved = readsLocation !== false && search !== searchedFor;
472
495
  loadedFor = params;
473
- untrack2(() => void refetch());
496
+ searchedFor = search;
497
+ if (paramsMoved || searchMoved) untrack2(() => void refetch());
474
498
  });
475
499
  data = () => {
476
500
  const error = resource.error;
@@ -879,7 +903,7 @@ function Link(props) {
879
903
  return a;
880
904
  }
881
905
  var A = Link;
882
- function Form(props) {
906
+ function ActionForm(props) {
883
907
  const action2 = props.action;
884
908
  const cls = props.className ?? props.class;
885
909
  const url = action2.url ?? "";
@@ -953,7 +977,7 @@ export {
953
977
  useRouteData,
954
978
  Link,
955
979
  A,
956
- Form,
980
+ ActionForm,
957
981
  preloadRoutes,
958
982
  createMemoryHistory,
959
983
  createBrowserHistory2 as createBrowserHistory,
@@ -317,7 +317,8 @@ function getSubmissionsSignal(url) {
317
317
  }
318
318
  function action(fn, name, options = {}) {
319
319
  const actionUrl = name || fn.name || "action";
320
- const submit = async (input) => {
320
+ const submit = async (...args) => {
321
+ const input = args.length > 1 ? args : args[0];
321
322
  const [, setSubmission] = getSubmissionSignal(actionUrl);
322
323
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
323
324
  let entry;
@@ -332,11 +333,10 @@ function action(fn, name, options = {}) {
332
333
  };
333
334
  const retry = () => {
334
335
  drop2();
335
- return submit(input);
336
+ return submit(...args);
336
337
  };
337
338
  entry = {
338
339
  input,
339
- // Approximate type for tracking
340
340
  pending: true,
341
341
  clear,
342
342
  retry
@@ -344,7 +344,7 @@ function action(fn, name, options = {}) {
344
344
  setSubmission(entry);
345
345
  setSubmissions((list) => [...list, entry]);
346
346
  try {
347
- const result = await fn(input);
347
+ const result = await fn(...args);
348
348
  setSubmission({
349
349
  input,
350
350
  result,
@@ -418,7 +418,7 @@ var init_data = __esm({
418
418
  var router_exports = {};
419
419
  __export(router_exports, {
420
420
  A: () => A,
421
- Form: () => Form,
421
+ ActionForm: () => ActionForm,
422
422
  Link: () => Link,
423
423
  Outlet: () => Outlet,
424
424
  Redirect: () => Redirect,
@@ -476,19 +476,43 @@ function renderLayer(m, depth, base) {
476
476
  });
477
477
  });
478
478
  };
479
+ let readsLocation;
479
480
  const [resource, { refetch }] = (0, import_signal14.createResource)(() => {
480
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
481
+ const params = (0, import_signal14.untrack)(base.params);
482
+ const location = (0, import_signal14.untrack)(base.location);
483
+ readsLocation = false;
484
+ const result = loader(
485
+ {
486
+ params: () => params,
487
+ location: () => {
488
+ readsLocation = true;
489
+ return location;
490
+ }
491
+ },
492
+ owner,
493
+ () => cancelled,
494
+ trackDeps
495
+ );
481
496
  return router ? router.trackLoad(result) : result;
482
497
  });
483
- (0, import_signal14.onCleanup)(onRevalidate(() => void refetch()));
498
+ (0, import_signal14.onCleanup)(
499
+ onRevalidate(() => {
500
+ if ((0, import_signal14.untrack)(() => base.matched()[depth]?.route) !== m.route) return;
501
+ void refetch();
502
+ })
503
+ );
484
504
  let loadedFor = (0, import_signal14.untrack)(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
505
+ let searchedFor = (0, import_signal14.untrack)(() => base.location().search);
485
506
  (0, import_signal14.createEffect)(() => {
486
507
  const now = base.matched()[depth];
508
+ const search = base.location().search;
487
509
  if (now?.route !== m.route) return;
488
510
  const params = JSON.stringify(now.params ?? {});
489
- if (params === loadedFor) return;
511
+ const paramsMoved = params !== loadedFor;
512
+ const searchMoved = readsLocation !== false && search !== searchedFor;
490
513
  loadedFor = params;
491
- (0, import_signal14.untrack)(() => void refetch());
514
+ searchedFor = search;
515
+ if (paramsMoved || searchMoved) (0, import_signal14.untrack)(() => void refetch());
492
516
  });
493
517
  data = () => {
494
518
  const error = resource.error;
@@ -876,7 +900,7 @@ function Link(props) {
876
900
  if (linkChildren != null) (0, import_dom16.insert)(a, linkChildren);
877
901
  return a;
878
902
  }
879
- function Form(props) {
903
+ function ActionForm(props) {
880
904
  const action2 = props.action;
881
905
  const cls = props.className ?? props.class;
882
906
  const url = action2.url ?? "";
@@ -1072,7 +1096,7 @@ var import_signal6 = require("@fluixi/reactive/signal");
1072
1096
  var import_dom = require("@fluixi/dom");
1073
1097
 
1074
1098
  // src/version.generated.ts
1075
- var VERSION = "1.0.0-alpha.95";
1099
+ var VERSION = "1.0.0-alpha.97";
1076
1100
 
1077
1101
  // src/lib/render/versions.ts
1078
1102
  var import_dom2 = require("@fluixi/dom");
@@ -1528,7 +1552,7 @@ async function startClient(App, options = {}) {
1528
1552
  }
1529
1553
  deserializeHydrationData();
1530
1554
  setHydrating(true);
1531
- (0, import_dom17.hydrate)(rootOf(App), container);
1555
+ (0, import_dom17.hydrate)(() => rootOf(App), container);
1532
1556
  replayEvents();
1533
1557
  } finally {
1534
1558
  (0, import_dom17.endAppHydration)();
@@ -20,7 +20,7 @@ import {
20
20
  useParams,
21
21
  useRouter,
22
22
  useSearchParams
23
- } from "./chunk-IFONZJWJ.mjs";
23
+ } from "./chunk-RKBFEFZP.mjs";
24
24
 
25
25
  // src/lib/index.ts
26
26
  import {
@@ -54,7 +54,7 @@ import { createRoot as createRoot2 } from "@fluixi/reactive/signal";
54
54
  import { registerCoreVersion } from "@fluixi/dom";
55
55
 
56
56
  // src/version.generated.ts
57
- var VERSION = "1.0.0-alpha.95";
57
+ var VERSION = "1.0.0-alpha.97";
58
58
 
59
59
  // src/lib/render/versions.ts
60
60
  import { stampVersions, warnOnVersionSkew, versions } from "@fluixi/dom";
@@ -574,12 +574,12 @@ async function startClient(App, options = {}) {
574
574
  beginAppHydration();
575
575
  try {
576
576
  if (options.routes && options.routes.length) {
577
- const { preloadRoutes } = await import("./router-TU5CPI54.mjs");
577
+ const { preloadRoutes } = await import("./router-V2THK27H.mjs");
578
578
  await preloadRoutes(options.routes, window.location.pathname);
579
579
  }
580
580
  deserializeHydrationData();
581
581
  setHydrating(true);
582
- domHydrate(rootOf(App), container);
582
+ domHydrate(() => rootOf(App), container);
583
583
  replayEvents();
584
584
  } finally {
585
585
  endAppHydration();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  A,
3
- Form,
3
+ ActionForm,
4
4
  Link,
5
5
  Outlet,
6
6
  Redirect,
@@ -34,10 +34,10 @@ import {
34
34
  useSearchParams,
35
35
  useSubmission,
36
36
  useSubmissions
37
- } from "./chunk-IFONZJWJ.mjs";
37
+ } from "./chunk-RKBFEFZP.mjs";
38
38
  export {
39
39
  A,
40
- Form,
40
+ ActionForm,
41
41
  Link,
42
42
  Outlet,
43
43
  Redirect,
@@ -1,4 +1,4 @@
1
- /*! @fluixi/core v1.0.0-alpha.95 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/core v1.0.0-alpha.97 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -143,7 +143,7 @@ __export(index_exports, {
143
143
  module.exports = __toCommonJS(index_exports);
144
144
 
145
145
  // src/version.generated.ts
146
- var VERSION = "1.0.0-alpha.95";
146
+ var VERSION = "1.0.0-alpha.97";
147
147
 
148
148
  // src/lib/core.ts
149
149
  var import_signal18 = require("@fluixi/reactive/signal");
@@ -763,7 +763,7 @@ function createIsomorphicStore(key, options) {
763
763
  }
764
764
  return initPromise;
765
765
  };
766
- return { value, fields, set, setField, ensureInit, key };
766
+ return { value, fields, set, setField, ensureInit, key, seeded };
767
767
  }
768
768
 
769
769
  // src/lib/env/index.ts
@@ -1310,19 +1310,43 @@ function renderLayer(m, depth, base) {
1310
1310
  });
1311
1311
  });
1312
1312
  };
1313
+ let readsLocation;
1313
1314
  const [resource2, { refetch }] = (0, import_signal15.createResource)(() => {
1314
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
1315
+ const params = (0, import_signal15.untrack)(base.params);
1316
+ const location = (0, import_signal15.untrack)(base.location);
1317
+ readsLocation = false;
1318
+ const result = loader(
1319
+ {
1320
+ params: () => params,
1321
+ location: () => {
1322
+ readsLocation = true;
1323
+ return location;
1324
+ }
1325
+ },
1326
+ owner,
1327
+ () => cancelled,
1328
+ trackDeps
1329
+ );
1315
1330
  return router ? router.trackLoad(result) : result;
1316
1331
  });
1317
- (0, import_signal15.onCleanup)(onRevalidate(() => void refetch()));
1332
+ (0, import_signal15.onCleanup)(
1333
+ onRevalidate(() => {
1334
+ if ((0, import_signal15.untrack)(() => base.matched()[depth]?.route) !== m.route) return;
1335
+ void refetch();
1336
+ })
1337
+ );
1318
1338
  let loadedFor = (0, import_signal15.untrack)(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
1339
+ let searchedFor = (0, import_signal15.untrack)(() => base.location().search);
1319
1340
  (0, import_signal15.createEffect)(() => {
1320
1341
  const now = base.matched()[depth];
1342
+ const search = base.location().search;
1321
1343
  if (now?.route !== m.route) return;
1322
1344
  const params = JSON.stringify(now.params ?? {});
1323
- if (params === loadedFor) return;
1345
+ const paramsMoved = params !== loadedFor;
1346
+ const searchMoved = readsLocation !== false && search !== searchedFor;
1324
1347
  loadedFor = params;
1325
- (0, import_signal15.untrack)(() => void refetch());
1348
+ searchedFor = search;
1349
+ if (paramsMoved || searchMoved) (0, import_signal15.untrack)(() => void refetch());
1326
1350
  });
1327
1351
  data = () => {
1328
1352
  const error = resource2.error;
@@ -1,7 +1,7 @@
1
- /*! @fluixi/core v1.0.0-alpha.95 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/core v1.0.0-alpha.97 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/version.generated.ts
4
- var VERSION = "1.0.0-alpha.95";
4
+ var VERSION = "1.0.0-alpha.97";
5
5
 
6
6
  // src/lib/core.ts
7
7
  import {
@@ -690,7 +690,7 @@ function createIsomorphicStore(key, options) {
690
690
  }
691
691
  return initPromise;
692
692
  };
693
- return { value, fields, set, setField, ensureInit, key };
693
+ return { value, fields, set, setField, ensureInit, key, seeded };
694
694
  }
695
695
 
696
696
  // src/lib/env/index.ts
@@ -1271,19 +1271,43 @@ function renderLayer(m, depth, base) {
1271
1271
  });
1272
1272
  });
1273
1273
  };
1274
+ let readsLocation;
1274
1275
  const [resource2, { refetch }] = createResource5(() => {
1275
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
1276
+ const params = untrack4(base.params);
1277
+ const location = untrack4(base.location);
1278
+ readsLocation = false;
1279
+ const result = loader(
1280
+ {
1281
+ params: () => params,
1282
+ location: () => {
1283
+ readsLocation = true;
1284
+ return location;
1285
+ }
1286
+ },
1287
+ owner,
1288
+ () => cancelled,
1289
+ trackDeps
1290
+ );
1276
1291
  return router ? router.trackLoad(result) : result;
1277
1292
  });
1278
- onCleanup4(onRevalidate(() => void refetch()));
1293
+ onCleanup4(
1294
+ onRevalidate(() => {
1295
+ if (untrack4(() => base.matched()[depth]?.route) !== m.route) return;
1296
+ void refetch();
1297
+ })
1298
+ );
1279
1299
  let loadedFor = untrack4(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
1300
+ let searchedFor = untrack4(() => base.location().search);
1280
1301
  createEffect4(() => {
1281
1302
  const now = base.matched()[depth];
1303
+ const search = base.location().search;
1282
1304
  if (now?.route !== m.route) return;
1283
1305
  const params = JSON.stringify(now.params ?? {});
1284
- if (params === loadedFor) return;
1306
+ const paramsMoved = params !== loadedFor;
1307
+ const searchMoved = readsLocation !== false && search !== searchedFor;
1285
1308
  loadedFor = params;
1286
- untrack4(() => void refetch());
1309
+ searchedFor = search;
1310
+ if (paramsMoved || searchMoved) untrack4(() => void refetch());
1287
1311
  });
1288
1312
  data = () => {
1289
1313
  const error = resource2.error;
@@ -1,4 +1,4 @@
1
- /*! @fluixi/core v1.0.0-alpha.95 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/core v1.0.0-alpha.97 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/lib/render/lazy.ts
4
4
  import { createComponent } from "@fluixi/dom";
@@ -1,4 +1,4 @@
1
- /*! @fluixi/core v1.0.0-alpha.95 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/core v1.0.0-alpha.97 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -287,7 +287,8 @@ function getSubmissionsSignal(url) {
287
287
  }
288
288
  function action(fn, name, options = {}) {
289
289
  const actionUrl = name || fn.name || "action";
290
- const submit = async (input) => {
290
+ const submit = async (...args) => {
291
+ const input = args.length > 1 ? args : args[0];
291
292
  const [, setSubmission] = getSubmissionSignal(actionUrl);
292
293
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
293
294
  let entry;
@@ -302,11 +303,10 @@ function action(fn, name, options = {}) {
302
303
  };
303
304
  const retry = () => {
304
305
  drop2();
305
- return submit(input);
306
+ return submit(...args);
306
307
  };
307
308
  entry = {
308
309
  input,
309
- // Approximate type for tracking
310
310
  pending: true,
311
311
  clear,
312
312
  retry
@@ -314,7 +314,7 @@ function action(fn, name, options = {}) {
314
314
  setSubmission(entry);
315
315
  setSubmissions((list) => [...list, entry]);
316
316
  try {
317
- const result = await fn(input);
317
+ const result = await fn(...args);
318
318
  setSubmission({
319
319
  input,
320
320
  result,
@@ -388,7 +388,7 @@ var init_data = __esm({
388
388
  var router_exports = {};
389
389
  __export(router_exports, {
390
390
  A: () => A,
391
- Form: () => Form,
391
+ ActionForm: () => ActionForm,
392
392
  Link: () => Link,
393
393
  Outlet: () => Outlet,
394
394
  Redirect: () => Redirect,
@@ -446,19 +446,43 @@ function renderLayer(m, depth, base) {
446
446
  });
447
447
  });
448
448
  };
449
+ let readsLocation;
449
450
  const [resource, { refetch }] = (0, import_signal10.createResource)(() => {
450
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
451
+ const params = (0, import_signal10.untrack)(base.params);
452
+ const location = (0, import_signal10.untrack)(base.location);
453
+ readsLocation = false;
454
+ const result = loader(
455
+ {
456
+ params: () => params,
457
+ location: () => {
458
+ readsLocation = true;
459
+ return location;
460
+ }
461
+ },
462
+ owner,
463
+ () => cancelled,
464
+ trackDeps
465
+ );
451
466
  return router ? router.trackLoad(result) : result;
452
467
  });
453
- (0, import_signal10.onCleanup)(onRevalidate(() => void refetch()));
468
+ (0, import_signal10.onCleanup)(
469
+ onRevalidate(() => {
470
+ if ((0, import_signal10.untrack)(() => base.matched()[depth]?.route) !== m.route) return;
471
+ void refetch();
472
+ })
473
+ );
454
474
  let loadedFor = (0, import_signal10.untrack)(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
475
+ let searchedFor = (0, import_signal10.untrack)(() => base.location().search);
455
476
  (0, import_signal10.createEffect)(() => {
456
477
  const now = base.matched()[depth];
478
+ const search = base.location().search;
457
479
  if (now?.route !== m.route) return;
458
480
  const params = JSON.stringify(now.params ?? {});
459
- if (params === loadedFor) return;
481
+ const paramsMoved = params !== loadedFor;
482
+ const searchMoved = readsLocation !== false && search !== searchedFor;
460
483
  loadedFor = params;
461
- (0, import_signal10.untrack)(() => void refetch());
484
+ searchedFor = search;
485
+ if (paramsMoved || searchMoved) (0, import_signal10.untrack)(() => void refetch());
462
486
  });
463
487
  data = () => {
464
488
  const error = resource.error;
@@ -846,7 +870,7 @@ function Link(props) {
846
870
  if (linkChildren != null) (0, import_dom12.insert)(a, linkChildren);
847
871
  return a;
848
872
  }
849
- function Form(props) {
873
+ function ActionForm(props) {
850
874
  const action2 = props.action;
851
875
  const cls = props.className ?? props.class;
852
876
  const url = action2.url ?? "";
@@ -943,7 +967,7 @@ var import_dom13 = require("@fluixi/dom");
943
967
  var import_dom = require("@fluixi/dom");
944
968
 
945
969
  // src/version.generated.ts
946
- var VERSION = "1.0.0-alpha.95";
970
+ var VERSION = "1.0.0-alpha.97";
947
971
 
948
972
  // src/lib/render/versions.ts
949
973
  var import_dom2 = require("@fluixi/dom");
@@ -1149,7 +1173,7 @@ async function startClient(App, options = {}) {
1149
1173
  }
1150
1174
  deserializeHydrationData();
1151
1175
  setHydrating(true);
1152
- (0, import_dom13.hydrate)(rootOf(App), container);
1176
+ (0, import_dom13.hydrate)(() => rootOf(App), container);
1153
1177
  replayEvents();
1154
1178
  } finally {
1155
1179
  (0, import_dom13.endAppHydration)();
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/client/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,uBAAuB,CAAC;AAgB/B;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,QAOlE;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAoBD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,EACzB,OAAO,GAAE,kBAAuB,iBA8EjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/client/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,uBAAuB,CAAC;AAgB/B;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,QAOlE;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAoBD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,GAAG,EACzB,OAAO,GAAE,kBAAuB,iBAiFjC"}
@@ -114,7 +114,10 @@ export async function startClient(App, options = {}) {
114
114
  // component. Called directly, the root is the one component the runtime never hears
115
115
  // about: nothing holds its return value, so no node is made and a graph of the
116
116
  // application starts at whatever the root happened to render.
117
- domHydrate(rootOf(App), container);
117
+ // Built inside hydrate, not as its argument: a memo runs when it is made, and made out
118
+ // here the root would render before hydration is on, without the key scope the server
119
+ // opened for it. Every key below would then be one level off and nothing adopted by key.
120
+ domHydrate(() => rootOf(App), container);
118
121
  // Handlers are now wired (delegated $$listeners attach during the hydration
119
122
  // render): replay any events the user fired before hydration.
120
123
  replayEvents();
@@ -1,5 +1,5 @@
1
- /*! @fluixi/core v1.0.0-alpha.95 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
- import "./chunk-AHNP3IWU.mjs";
1
+ /*! @fluixi/core v1.0.0-alpha.97 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
+ import "./chunk-KYWKPX6I.mjs";
3
3
 
4
4
  // src/lib/client/index.ts
5
5
  import {
@@ -15,7 +15,7 @@ import {
15
15
  import { registerCoreVersion } from "@fluixi/dom";
16
16
 
17
17
  // src/version.generated.ts
18
- var VERSION = "1.0.0-alpha.95";
18
+ var VERSION = "1.0.0-alpha.97";
19
19
 
20
20
  // src/lib/render/versions.ts
21
21
  import { stampVersions, warnOnVersionSkew, versions } from "@fluixi/dom";
@@ -246,12 +246,12 @@ async function startClient(App, options = {}) {
246
246
  beginAppHydration();
247
247
  try {
248
248
  if (options.routes && options.routes.length) {
249
- const { preloadRoutes } = await import("./router-5C6FQJQ4.mjs");
249
+ const { preloadRoutes } = await import("./router-EHDYEGDF.mjs");
250
250
  await preloadRoutes(options.routes, window.location.pathname);
251
251
  }
252
252
  deserializeHydrationData();
253
253
  setHydrating(true);
254
- domHydrate(rootOf(App), container);
254
+ domHydrate(() => rootOf(App), container);
255
255
  replayEvents();
256
256
  } finally {
257
257
  endAppHydration();