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

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-RNRJHQFG.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-F3Y4BIVJ.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
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  import {
3
3
  lazy
4
- } from "./chunk-AHNP3IWU.mjs";
4
+ } from "./chunk-RNRJHQFG.mjs";
5
5
 
6
6
  // src/lib/router/index.ts
7
7
  import {
@@ -264,7 +264,8 @@ function getSubmissionsSignal(url) {
264
264
  }
265
265
  function action(fn, name, options = {}) {
266
266
  const actionUrl = name || fn.name || "action";
267
- const submit = async (input) => {
267
+ const submit = async (...args) => {
268
+ const input = args.length > 1 ? args : args[0];
268
269
  const [, setSubmission] = getSubmissionSignal(actionUrl);
269
270
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
270
271
  let entry;
@@ -279,11 +280,10 @@ function action(fn, name, options = {}) {
279
280
  };
280
281
  const retry = () => {
281
282
  drop2();
282
- return submit(input);
283
+ return submit(...args);
283
284
  };
284
285
  entry = {
285
286
  input,
286
- // Approximate type for tracking
287
287
  pending: true,
288
288
  clear,
289
289
  retry
@@ -291,7 +291,7 @@ function action(fn, name, options = {}) {
291
291
  setSubmission(entry);
292
292
  setSubmissions((list) => [...list, entry]);
293
293
  try {
294
- const result = await fn(input);
294
+ const result = await fn(...args);
295
295
  setSubmission({
296
296
  input,
297
297
  result,
@@ -369,19 +369,43 @@ function renderLayer(m, depth, base) {
369
369
  });
370
370
  });
371
371
  };
372
+ let readsLocation;
372
373
  const [resource, { refetch }] = createResource2(() => {
373
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
374
+ const params = untrack(base.params);
375
+ const location = untrack(base.location);
376
+ readsLocation = false;
377
+ const result = loader(
378
+ {
379
+ params: () => params,
380
+ location: () => {
381
+ readsLocation = true;
382
+ return location;
383
+ }
384
+ },
385
+ owner,
386
+ () => cancelled,
387
+ trackDeps
388
+ );
374
389
  return router ? router.trackLoad(result) : result;
375
390
  });
376
- onCleanup(onRevalidate(() => void refetch()));
391
+ onCleanup(
392
+ onRevalidate(() => {
393
+ if (untrack(() => base.matched()[depth]?.route) !== m.route) return;
394
+ void refetch();
395
+ })
396
+ );
377
397
  let loadedFor = untrack(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
398
+ let searchedFor = untrack(() => base.location().search);
378
399
  createEffect(() => {
379
400
  const now = base.matched()[depth];
401
+ const search = base.location().search;
380
402
  if (now?.route !== m.route) return;
381
403
  const params = JSON.stringify(now.params ?? {});
382
- if (params === loadedFor) return;
404
+ const paramsMoved = params !== loadedFor;
405
+ const searchMoved = readsLocation !== false && search !== searchedFor;
383
406
  loadedFor = params;
384
- untrack(() => void refetch());
407
+ searchedFor = search;
408
+ if (paramsMoved || searchMoved) untrack(() => void refetch());
385
409
  });
386
410
  data = () => {
387
411
  const error = resource.error;
@@ -790,7 +814,7 @@ function Link(props) {
790
814
  return a;
791
815
  }
792
816
  var A = Link;
793
- function Form(props) {
817
+ function ActionForm(props) {
794
818
  const action2 = props.action;
795
819
  const cls = props.className ?? props.class;
796
820
  const url = action2.url ?? "";
@@ -830,7 +854,7 @@ async function preloadRoutes(routes, pathname) {
830
854
  }
831
855
  export {
832
856
  A,
833
- Form,
857
+ ActionForm,
834
858
  Link,
835
859
  Outlet,
836
860
  Redirect,
@@ -152,7 +152,7 @@ var import_signal6 = require("@fluixi/reactive/signal");
152
152
  var import_dom = require("@fluixi/dom");
153
153
 
154
154
  // src/version.generated.ts
155
- var VERSION = "1.0.0-alpha.95";
155
+ var VERSION = "1.0.0-alpha.96";
156
156
 
157
157
  // src/lib/render/versions.ts
158
158
  var import_dom2 = require("@fluixi/dom");
@@ -762,7 +762,7 @@ function createIsomorphicStore(key, options) {
762
762
  }
763
763
  return initPromise;
764
764
  };
765
- return { value, fields, set, setField, ensureInit, key };
765
+ return { value, fields, set, setField, ensureInit, key, seeded };
766
766
  }
767
767
 
768
768
  // src/lib/env/index.ts
@@ -1309,19 +1309,43 @@ function renderLayer(m, depth, base) {
1309
1309
  });
1310
1310
  });
1311
1311
  };
1312
+ let readsLocation;
1312
1313
  const [resource2, { refetch }] = (0, import_signal15.createResource)(() => {
1313
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
1314
+ const params = (0, import_signal15.untrack)(base.params);
1315
+ const location = (0, import_signal15.untrack)(base.location);
1316
+ readsLocation = false;
1317
+ const result = loader(
1318
+ {
1319
+ params: () => params,
1320
+ location: () => {
1321
+ readsLocation = true;
1322
+ return location;
1323
+ }
1324
+ },
1325
+ owner,
1326
+ () => cancelled,
1327
+ trackDeps
1328
+ );
1314
1329
  return router ? router.trackLoad(result) : result;
1315
1330
  });
1316
- (0, import_signal15.onCleanup)(onRevalidate(() => void refetch()));
1331
+ (0, import_signal15.onCleanup)(
1332
+ onRevalidate(() => {
1333
+ if ((0, import_signal15.untrack)(() => base.matched()[depth]?.route) !== m.route) return;
1334
+ void refetch();
1335
+ })
1336
+ );
1317
1337
  let loadedFor = (0, import_signal15.untrack)(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
1338
+ let searchedFor = (0, import_signal15.untrack)(() => base.location().search);
1318
1339
  (0, import_signal15.createEffect)(() => {
1319
1340
  const now = base.matched()[depth];
1341
+ const search = base.location().search;
1320
1342
  if (now?.route !== m.route) return;
1321
1343
  const params = JSON.stringify(now.params ?? {});
1322
- if (params === loadedFor) return;
1344
+ const paramsMoved = params !== loadedFor;
1345
+ const searchMoved = readsLocation !== false && search !== searchedFor;
1323
1346
  loadedFor = params;
1324
- (0, import_signal15.untrack)(() => void refetch());
1347
+ searchedFor = search;
1348
+ if (paramsMoved || searchMoved) (0, import_signal15.untrack)(() => void refetch());
1325
1349
  });
1326
1350
  data = () => {
1327
1351
  const error = resource2.error;
@@ -38,7 +38,7 @@ import { createRoot as createRoot2 } from "@fluixi/reactive/signal";
38
38
  import { registerCoreVersion } from "@fluixi/dom";
39
39
 
40
40
  // src/version.generated.ts
41
- var VERSION = "1.0.0-alpha.95";
41
+ var VERSION = "1.0.0-alpha.96";
42
42
 
43
43
  // src/lib/render/versions.ts
44
44
  import { stampVersions, warnOnVersionSkew, versions } from "@fluixi/dom";
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/lib/i18n/index.ts
4
4
  import { createSignal } from "@fluixi/reactive/signal";
@@ -114,7 +114,7 @@ var import_signal6 = require("@fluixi/reactive/signal");
114
114
  var import_dom = require("@fluixi/dom");
115
115
 
116
116
  // src/version.generated.ts
117
- var VERSION = "1.0.0-alpha.95";
117
+ var VERSION = "1.0.0-alpha.96";
118
118
 
119
119
  // src/lib/render/versions.ts
120
120
  var import_dom2 = require("@fluixi/dom");
@@ -44,7 +44,7 @@ import { createRoot as createRoot2 } from "@fluixi/reactive/signal";
44
44
  import { registerCoreVersion } from "@fluixi/dom";
45
45
 
46
46
  // src/version.generated.ts
47
- var VERSION = "1.0.0-alpha.95";
47
+ var VERSION = "1.0.0-alpha.96";
48
48
 
49
49
  // src/lib/render/versions.ts
50
50
  import { stampVersions, warnOnVersionSkew, versions } from "@fluixi/dom";
@@ -86,5 +86,5 @@ function createIsomorphicStore(key, options) {
86
86
  }
87
87
  return initPromise;
88
88
  };
89
- return { value, fields, set, setField, ensureInit, key };
89
+ return { value, fields, set, setField, ensureInit, key, seeded };
90
90
  }
@@ -72,6 +72,11 @@ export interface IsomorphicStore<T extends Record<string, any>> {
72
72
  ensureInit: () => Promise<void>;
73
73
  /** Stable serialization key. */
74
74
  key: string;
75
+ /**
76
+ * Whether the server rendered this value and sent it with the page. Tells "the server
77
+ * said nobody" apart from "no server said anything" (a client-only load).
78
+ */
79
+ readonly seeded: boolean;
75
80
  }
76
81
  export interface IsomorphicStoreOptions<T> {
77
82
  /** Resolve the record on the server for this request (receives the RequestEvent). */
@@ -1 +1 @@
1
- {"version":3,"file":"isomorphic.d.ts","sourceRoot":"","sources":["../../../src/lib/isomorphic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAElF,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAevE,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,yFAAyF;IACzF,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/B,6EAA6E;IAC7E,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;IAChC,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,oFAAoF;IACpF,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC;CACd;AASD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC,CAapB;AAkBD,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC5D,yFAAyF;IACzF,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,qEAAqE;IACrE,MAAM,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAC3C,gCAAgC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACzD;;;;OAIG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,qFAAqF;IACrF,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,EAAE,CAAC,CAAC;IACZ;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,eAAe,CAAC,CAAC,CAAC,CAuDpB"}
1
+ {"version":3,"file":"isomorphic.d.ts","sourceRoot":"","sources":["../../../src/lib/isomorphic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAElF,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAevE,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,yFAAyF;IACzF,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/B,6EAA6E;IAC7E,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;IAChC,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,oFAAoF;IACpF,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC;CACd;AASD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,eAAe,CAAC,CAAC,CAAC,CAapB;AAkBD,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC5D,yFAAyF;IACzF,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB,qEAAqE;IACrE,MAAM,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAC3C,gCAAgC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACzD;;;;OAIG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,qFAAqF;IACrF,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,EAAE,CAAC,CAAC;IACZ;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjE,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,eAAe,CAAC,CAAC,CAAC,CAuDpB"}
@@ -128,5 +128,5 @@ export function createIsomorphicStore(key, options) {
128
128
  }
129
129
  return initPromise;
130
130
  };
131
- return { value, fields, set, setField, ensureInit, key };
131
+ return { value, fields, set, setField, ensureInit, key, seeded };
132
132
  }
@@ -61,7 +61,7 @@ function createIsomorphicStore(key, options) {
61
61
  }
62
62
  return initPromise;
63
63
  };
64
- return { value, fields, set, setField, ensureInit, key };
64
+ return { value, fields, set, setField, ensureInit, key, seeded };
65
65
  }
66
66
  export {
67
67
  createIsomorphicState,
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/lib/jsx-runtime/index.ts
4
4
  export * from "@fluixi/jsx/jsx-runtime";
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/lib/jsx-runtime/jsx-dev-runtime.ts
4
4
  export * from "@fluixi/jsx/jsx-dev-runtime";
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/lib/plugins/vite.ts
4
4
  import { fluixi, createVitePlugin } from "@fluixi/vite-plugin";
@@ -63,7 +63,7 @@ var import_signal6 = require("@fluixi/reactive/signal");
63
63
  var import_dom = require("@fluixi/dom");
64
64
 
65
65
  // src/version.generated.ts
66
- var VERSION = "1.0.0-alpha.95";
66
+ var VERSION = "1.0.0-alpha.96";
67
67
 
68
68
  // src/lib/render/versions.ts
69
69
  var import_dom2 = require("@fluixi/dom");
@@ -6,7 +6,7 @@ import { createRoot as createRoot2 } from "@fluixi/reactive/signal";
6
6
  import { registerCoreVersion } from "@fluixi/dom";
7
7
 
8
8
  // src/version.generated.ts
9
- var VERSION = "1.0.0-alpha.95";
9
+ var VERSION = "1.0.0-alpha.96";
10
10
 
11
11
  // src/lib/render/versions.ts
12
12
  import { stampVersions, warnOnVersionSkew, versions } from "@fluixi/dom";
@@ -28,7 +28,7 @@ module.exports = __toCommonJS(versions_exports);
28
28
  var import_dom = require("@fluixi/dom");
29
29
 
30
30
  // src/version.generated.ts
31
- var VERSION = "1.0.0-alpha.95";
31
+ var VERSION = "1.0.0-alpha.96";
32
32
 
33
33
  // src/lib/render/versions.ts
34
34
  var import_dom2 = require("@fluixi/dom");
@@ -2,7 +2,7 @@
2
2
  import { registerCoreVersion } from "@fluixi/dom";
3
3
 
4
4
  // src/version.generated.ts
5
- var VERSION = "1.0.0-alpha.95";
5
+ var VERSION = "1.0.0-alpha.96";
6
6
 
7
7
  // src/lib/render/versions.ts
8
8
  import { stampVersions, warnOnVersionSkew, versions } from "@fluixi/dom";
@@ -153,7 +153,8 @@ function getSubmissionsSignal(url) {
153
153
  }
154
154
  function action(fn, name, options = {}) {
155
155
  const actionUrl = name || fn.name || "action";
156
- const submit = async (input) => {
156
+ const submit = async (...args) => {
157
+ const input = args.length > 1 ? args : args[0];
157
158
  const [, setSubmission] = getSubmissionSignal(actionUrl);
158
159
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
159
160
  let entry;
@@ -168,11 +169,10 @@ function action(fn, name, options = {}) {
168
169
  };
169
170
  const retry = () => {
170
171
  drop2();
171
- return submit(input);
172
+ return submit(...args);
172
173
  };
173
174
  entry = {
174
175
  input,
175
- // Approximate type for tracking
176
176
  pending: true,
177
177
  clear,
178
178
  retry
@@ -180,7 +180,7 @@ function action(fn, name, options = {}) {
180
180
  setSubmission(entry);
181
181
  setSubmissions((list) => [...list, entry]);
182
182
  try {
183
- const result = await fn(input);
183
+ const result = await fn(...args);
184
184
  setSubmission({
185
185
  input,
186
186
  result,
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/lib/router/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/lib/router/data.ts"],"names":[],"mappings":"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"}
@@ -143,7 +143,10 @@ function getSubmissionsSignal(url) {
143
143
  }
144
144
  export function action(fn, name, options = {}) {
145
145
  const actionUrl = name || fn.name || 'action';
146
- const submit = async (input) => {
146
+ const submit = async (...args) => {
147
+ // What the submission shows as its input: the argument, or all of them when there are
148
+ // several. Every argument reaches `fn` either way.
149
+ const input = (args.length > 1 ? args : args[0]);
147
150
  const [, setSubmission] = getSubmissionSignal(actionUrl);
148
151
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
149
152
  // This call's entry in the list: replaced, never mutated, so readers see each change.
@@ -160,10 +163,10 @@ export function action(fn, name, options = {}) {
160
163
  };
161
164
  const retry = () => {
162
165
  drop();
163
- return submit(input);
166
+ return submit(...args);
164
167
  };
165
168
  entry = {
166
- input: input, // Approximate type for tracking
169
+ input,
167
170
  pending: true,
168
171
  clear,
169
172
  retry,
@@ -171,11 +174,9 @@ export function action(fn, name, options = {}) {
171
174
  setSubmission(entry);
172
175
  setSubmissions((list) => [...list, entry]);
173
176
  try {
174
- // Cast to any to handle potential argument mismatch in generic types
175
- // fn expects tuple Args, input is single value or FormData
176
- const result = await fn(input);
177
+ const result = await fn(...args);
177
178
  setSubmission({
178
- input: input,
179
+ input,
179
180
  result,
180
181
  pending: false,
181
182
  clear,
@@ -190,7 +191,7 @@ export function action(fn, name, options = {}) {
190
191
  }
191
192
  catch (error) {
192
193
  const failed = {
193
- input: input,
194
+ input,
194
195
  error,
195
196
  pending: false,
196
197
  clear,
@@ -126,7 +126,8 @@ function getSubmissionsSignal(url) {
126
126
  }
127
127
  function action(fn, name, options = {}) {
128
128
  const actionUrl = name || fn.name || "action";
129
- const submit = async (input) => {
129
+ const submit = async (...args) => {
130
+ const input = args.length > 1 ? args : args[0];
130
131
  const [, setSubmission] = getSubmissionSignal(actionUrl);
131
132
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
132
133
  let entry;
@@ -141,11 +142,10 @@ function action(fn, name, options = {}) {
141
142
  };
142
143
  const retry = () => {
143
144
  drop2();
144
- return submit(input);
145
+ return submit(...args);
145
146
  };
146
147
  entry = {
147
148
  input,
148
- // Approximate type for tracking
149
149
  pending: true,
150
150
  clear,
151
151
  retry
@@ -153,7 +153,7 @@ function action(fn, name, options = {}) {
153
153
  setSubmission(entry);
154
154
  setSubmissions((list) => [...list, entry]);
155
155
  try {
156
- const result = await fn(input);
156
+ const result = await fn(...args);
157
157
  setSubmission({
158
158
  input,
159
159
  result,
@@ -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.96 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,7 +22,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
22
22
  var index_exports = {};
23
23
  __export(index_exports, {
24
24
  A: () => A,
25
- Form: () => Form,
25
+ ActionForm: () => ActionForm,
26
26
  Link: () => Link,
27
27
  Outlet: () => Outlet,
28
28
  Redirect: () => Redirect,
@@ -290,7 +290,8 @@ function getSubmissionsSignal(url) {
290
290
  }
291
291
  function action(fn, name, options = {}) {
292
292
  const actionUrl = name || fn.name || "action";
293
- const submit = async (input) => {
293
+ const submit = async (...args) => {
294
+ const input = args.length > 1 ? args : args[0];
294
295
  const [, setSubmission] = getSubmissionSignal(actionUrl);
295
296
  const [, setSubmissions] = getSubmissionsSignal(actionUrl);
296
297
  let entry;
@@ -305,11 +306,10 @@ function action(fn, name, options = {}) {
305
306
  };
306
307
  const retry = () => {
307
308
  drop2();
308
- return submit(input);
309
+ return submit(...args);
309
310
  };
310
311
  entry = {
311
312
  input,
312
- // Approximate type for tracking
313
313
  pending: true,
314
314
  clear,
315
315
  retry
@@ -317,7 +317,7 @@ function action(fn, name, options = {}) {
317
317
  setSubmission(entry);
318
318
  setSubmissions((list) => [...list, entry]);
319
319
  try {
320
- const result = await fn(input);
320
+ const result = await fn(...args);
321
321
  setSubmission({
322
322
  input,
323
323
  result,
@@ -436,19 +436,43 @@ function renderLayer(m, depth, base) {
436
436
  });
437
437
  });
438
438
  };
439
+ let readsLocation;
439
440
  const [resource, { refetch }] = (0, import_signal5.createResource)(() => {
440
- const result = loader({ params: base.params, location: base.location }, owner, () => cancelled, trackDeps);
441
+ const params = (0, import_signal5.untrack)(base.params);
442
+ const location = (0, import_signal5.untrack)(base.location);
443
+ readsLocation = false;
444
+ const result = loader(
445
+ {
446
+ params: () => params,
447
+ location: () => {
448
+ readsLocation = true;
449
+ return location;
450
+ }
451
+ },
452
+ owner,
453
+ () => cancelled,
454
+ trackDeps
455
+ );
441
456
  return router ? router.trackLoad(result) : result;
442
457
  });
443
- (0, import_signal5.onCleanup)(onRevalidate(() => void refetch()));
458
+ (0, import_signal5.onCleanup)(
459
+ onRevalidate(() => {
460
+ if ((0, import_signal5.untrack)(() => base.matched()[depth]?.route) !== m.route) return;
461
+ void refetch();
462
+ })
463
+ );
444
464
  let loadedFor = (0, import_signal5.untrack)(() => JSON.stringify(base.matched()[depth]?.params ?? {}));
465
+ let searchedFor = (0, import_signal5.untrack)(() => base.location().search);
445
466
  (0, import_signal5.createEffect)(() => {
446
467
  const now = base.matched()[depth];
468
+ const search = base.location().search;
447
469
  if (now?.route !== m.route) return;
448
470
  const params = JSON.stringify(now.params ?? {});
449
- if (params === loadedFor) return;
471
+ const paramsMoved = params !== loadedFor;
472
+ const searchMoved = readsLocation !== false && search !== searchedFor;
450
473
  loadedFor = params;
451
- (0, import_signal5.untrack)(() => void refetch());
474
+ searchedFor = search;
475
+ if (paramsMoved || searchMoved) (0, import_signal5.untrack)(() => void refetch());
452
476
  });
453
477
  data = () => {
454
478
  const error = resource.error;
@@ -857,7 +881,7 @@ function Link(props) {
857
881
  return a;
858
882
  }
859
883
  var A = Link;
860
- function Form(props) {
884
+ function ActionForm(props) {
861
885
  const action2 = props.action;
862
886
  const cls = props.className ?? props.class;
863
887
  const url = action2.url ?? "";