@inertiajs/react 2.3.10 → 2.3.12

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.
package/dist/index.js CHANGED
@@ -235,12 +235,21 @@ async function createInertiaApp({
235
235
  }
236
236
 
237
237
  // src/Deferred.ts
238
- var import_react6 = require("react");
238
+ var import_react8 = require("react");
239
239
 
240
240
  // src/usePage.ts
241
+ var import_react6 = __toESM(require("react"), 1);
242
+
243
+ // src/react.ts
241
244
  var import_react5 = __toESM(require("react"), 1);
245
+ function useIsomorphicLayoutEffect(effect, deps) {
246
+ typeof window === "undefined" ? (0, import_react5.useEffect)(effect, deps) : (0, import_react5.useLayoutEffect)(effect, deps);
247
+ }
248
+ var isReact19 = typeof import_react5.default.use === "function";
249
+
250
+ // src/usePage.ts
242
251
  function usePage() {
243
- const page = typeof import_react5.default.use === "function" ? import_react5.default.use(PageContext_default) : import_react5.default.useContext(PageContext_default);
252
+ const page = isReact19 ? import_react6.default.use(PageContext_default) : import_react6.default.useContext(PageContext_default);
244
253
  if (!page) {
245
254
  throw new Error("usePage must be used within the Inertia component");
246
255
  }
@@ -260,10 +269,10 @@ var Deferred = ({ children, data, fallback }) => {
260
269
  if (!data) {
261
270
  throw new Error("`<Deferred>` requires a `data` prop to be a string or array of strings");
262
271
  }
263
- const [loaded, setLoaded] = (0, import_react6.useState)(false);
272
+ const [loaded, setLoaded] = (0, import_react8.useState)(false);
264
273
  const pageProps = usePage().props;
265
- const keys = (0, import_react6.useMemo)(() => Array.isArray(data) ? data : [data], [data]);
266
- (0, import_react6.useEffect)(() => {
274
+ const keys = (0, import_react8.useMemo)(() => Array.isArray(data) ? data : [data], [data]);
275
+ (0, import_react8.useEffect)(() => {
267
276
  const removeListener = router3.on("start", (e) => {
268
277
  const isPartialVisit = e.detail.visit.only.length > 0 || e.detail.visit.except.length > 0;
269
278
  const isReloadingKey = e.detail.visit.only.find((key) => keys.includes(key));
@@ -275,10 +284,11 @@ var Deferred = ({ children, data, fallback }) => {
275
284
  removeListener();
276
285
  };
277
286
  }, []);
278
- (0, import_react6.useEffect)(() => {
287
+ (0, import_react8.useEffect)(() => {
279
288
  setLoaded(keys.every((key) => pageProps[key] !== void 0));
280
289
  }, [pageProps, keys]);
281
- if (loaded) {
290
+ const propsAreDefined = (0, import_react8.useMemo)(() => keys.every((key) => pageProps[key] !== void 0), [keys, pageProps]);
291
+ if (loaded && propsAreDefined) {
282
292
  return typeof children === "function" ? children() : children;
283
293
  }
284
294
  return typeof fallback === "function" ? fallback() : fallback;
@@ -289,29 +299,23 @@ var Deferred_default = Deferred;
289
299
  // src/Form.ts
290
300
  var import_core5 = require("@inertiajs/core");
291
301
  var import_lodash_es2 = require("lodash-es");
292
- var import_react11 = __toESM(require("react"), 1);
302
+ var import_react12 = __toESM(require("react"), 1);
293
303
 
294
304
  // src/useForm.ts
295
305
  var import_core4 = require("@inertiajs/core");
296
306
  var import_laravel_precognition = require("laravel-precognition");
297
307
  var import_lodash_es = require("lodash-es");
298
- var import_react9 = require("react");
299
-
300
- // src/react.ts
301
- var import_react7 = require("react");
302
- function useIsomorphicLayoutEffect(effect, deps) {
303
- typeof window === "undefined" ? (0, import_react7.useEffect)(effect, deps) : (0, import_react7.useLayoutEffect)(effect, deps);
304
- }
308
+ var import_react10 = require("react");
305
309
 
306
310
  // src/useRemember.ts
307
311
  var import_core3 = require("@inertiajs/core");
308
- var import_react8 = require("react");
312
+ var import_react9 = require("react");
309
313
  function useRemember(initialState, key, excludeKeysRef) {
310
- const [state, setState] = (0, import_react8.useState)(() => {
314
+ const [state, setState] = (0, import_react9.useState)(() => {
311
315
  const restored = import_core3.router.restore(key);
312
316
  return restored !== void 0 ? restored : initialState;
313
317
  });
314
- (0, import_react8.useEffect)(() => {
318
+ (0, import_react9.useEffect)(() => {
315
319
  const keys = excludeKeysRef?.current;
316
320
  if (keys && keys.length > 0 && typeof state === "object" && state !== null) {
317
321
  const filtered = { ...state };
@@ -326,38 +330,38 @@ function useRemember(initialState, key, excludeKeysRef) {
326
330
 
327
331
  // src/useForm.ts
328
332
  function useForm(...args) {
329
- const isMounted = (0, import_react9.useRef)(false);
333
+ const isMounted = (0, import_react10.useRef)(false);
330
334
  const parsedArgs = import_core4.UseFormUtils.parseUseFormArguments(...args);
331
335
  const { rememberKey, data: initialData } = parsedArgs;
332
- const precognitionEndpoint = (0, import_react9.useRef)(parsedArgs.precognitionEndpoint);
333
- const [defaults, setDefaults] = (0, import_react9.useState)(
336
+ const precognitionEndpoint = (0, import_react10.useRef)(parsedArgs.precognitionEndpoint);
337
+ const [defaults, setDefaults] = (0, import_react10.useState)(
334
338
  typeof initialData === "function" ? (0, import_lodash_es.cloneDeep)(initialData()) : (0, import_lodash_es.cloneDeep)(initialData)
335
339
  );
336
- const cancelToken = (0, import_react9.useRef)(null);
337
- const recentlySuccessfulTimeoutId = (0, import_react9.useRef)(void 0);
338
- const excludeKeysRef = (0, import_react9.useRef)([]);
339
- const [data, setData] = rememberKey ? useRemember(defaults, `${rememberKey}:data`, excludeKeysRef) : (0, import_react9.useState)(defaults);
340
- const [errors, setErrors] = rememberKey ? useRemember({}, `${rememberKey}:errors`) : (0, import_react9.useState)({});
341
- const [hasErrors, setHasErrors] = (0, import_react9.useState)(false);
342
- const [processing, setProcessing] = (0, import_react9.useState)(false);
343
- const [progress2, setProgress] = (0, import_react9.useState)(null);
344
- const [wasSuccessful, setWasSuccessful] = (0, import_react9.useState)(false);
345
- const [recentlySuccessful, setRecentlySuccessful] = (0, import_react9.useState)(false);
346
- const transform = (0, import_react9.useRef)((data2) => data2);
347
- const isDirty = (0, import_react9.useMemo)(() => !(0, import_lodash_es.isEqual)(data, defaults), [data, defaults]);
348
- const validatorRef = (0, import_react9.useRef)(null);
349
- const [validating, setValidating] = (0, import_react9.useState)(false);
350
- const [touchedFields, setTouchedFields] = (0, import_react9.useState)([]);
351
- const [validFields, setValidFields] = (0, import_react9.useState)([]);
352
- const withAllErrors = (0, import_react9.useRef)(false);
353
- (0, import_react9.useEffect)(() => {
340
+ const cancelToken = (0, import_react10.useRef)(null);
341
+ const recentlySuccessfulTimeoutId = (0, import_react10.useRef)(void 0);
342
+ const excludeKeysRef = (0, import_react10.useRef)([]);
343
+ const [data, setData] = rememberKey ? useRemember(defaults, `${rememberKey}:data`, excludeKeysRef) : (0, import_react10.useState)(defaults);
344
+ const [errors, setErrors] = rememberKey ? useRemember({}, `${rememberKey}:errors`) : (0, import_react10.useState)({});
345
+ const [hasErrors, setHasErrors] = (0, import_react10.useState)(false);
346
+ const [processing, setProcessing] = (0, import_react10.useState)(false);
347
+ const [progress2, setProgress] = (0, import_react10.useState)(null);
348
+ const [wasSuccessful, setWasSuccessful] = (0, import_react10.useState)(false);
349
+ const [recentlySuccessful, setRecentlySuccessful] = (0, import_react10.useState)(false);
350
+ const transform = (0, import_react10.useRef)((data2) => data2);
351
+ const isDirty = (0, import_react10.useMemo)(() => !(0, import_lodash_es.isEqual)(data, defaults), [data, defaults]);
352
+ const validatorRef = (0, import_react10.useRef)(null);
353
+ const [validating, setValidating] = (0, import_react10.useState)(false);
354
+ const [touchedFields, setTouchedFields] = (0, import_react10.useState)([]);
355
+ const [validFields, setValidFields] = (0, import_react10.useState)([]);
356
+ const withAllErrors = (0, import_react10.useRef)(false);
357
+ (0, import_react10.useEffect)(() => {
354
358
  isMounted.current = true;
355
359
  return () => {
356
360
  isMounted.current = false;
357
361
  };
358
362
  }, []);
359
- const setDefaultsCalledInOnSuccess = (0, import_react9.useRef)(false);
360
- const submit = (0, import_react9.useCallback)(
363
+ const setDefaultsCalledInOnSuccess = (0, import_react10.useRef)(false);
364
+ const submit = (0, import_react10.useCallback)(
361
365
  (...args2) => {
362
366
  const { method, url, options } = import_core4.UseFormUtils.parseSubmitArguments(args2, precognitionEndpoint.current);
363
367
  setDefaultsCalledInOnSuccess.current = false;
@@ -416,7 +420,9 @@ function useForm(...args) {
416
420
  if (isMounted.current) {
417
421
  setProcessing(false);
418
422
  setProgress(null);
419
- setError(errors2);
423
+ setErrors(errors2);
424
+ setHasErrors(Object.keys(errors2).length > 0);
425
+ validatorRef.current?.setErrors(errors2);
420
426
  }
421
427
  if (options.onError) {
422
428
  return options.onError(errors2);
@@ -451,7 +457,7 @@ function useForm(...args) {
451
457
  },
452
458
  [data, setErrors, transform]
453
459
  );
454
- const setDataFunction = (0, import_react9.useCallback)(
460
+ const setDataFunction = (0, import_react10.useCallback)(
455
461
  (keyOrData, maybeValue) => {
456
462
  if (typeof keyOrData === "string") {
457
463
  setData((data2) => (0, import_lodash_es.set)((0, import_lodash_es.cloneDeep)(data2), keyOrData, maybeValue));
@@ -463,12 +469,12 @@ function useForm(...args) {
463
469
  },
464
470
  [setData]
465
471
  );
466
- const [dataAsDefaults, setDataAsDefaults] = (0, import_react9.useState)(false);
467
- const dataRef = (0, import_react9.useRef)(data);
468
- (0, import_react9.useEffect)(() => {
472
+ const [dataAsDefaults, setDataAsDefaults] = (0, import_react10.useState)(false);
473
+ const dataRef = (0, import_react10.useRef)(data);
474
+ (0, import_react10.useEffect)(() => {
469
475
  dataRef.current = data;
470
476
  });
471
- const setDefaultsFunction = (0, import_react9.useCallback)(
477
+ const setDefaultsFunction = (0, import_react10.useCallback)(
472
478
  (fieldOrFields, maybeValue) => {
473
479
  setDefaultsCalledInOnSuccess.current = true;
474
480
  let newDefaults = {};
@@ -495,7 +501,7 @@ function useForm(...args) {
495
501
  }
496
502
  setDataAsDefaults(false);
497
503
  }, [dataAsDefaults]);
498
- const reset = (0, import_react9.useCallback)(
504
+ const reset = (0, import_react10.useCallback)(
499
505
  (...fields) => {
500
506
  if (fields.length === 0) {
501
507
  setData(defaults);
@@ -513,7 +519,7 @@ function useForm(...args) {
513
519
  },
514
520
  [setData, defaults]
515
521
  );
516
- const setError = (0, import_react9.useCallback)(
522
+ const setError = (0, import_react10.useCallback)(
517
523
  (fieldOrFields, maybeValue) => {
518
524
  setErrors((errors2) => {
519
525
  const newErrors = {
@@ -527,7 +533,7 @@ function useForm(...args) {
527
533
  },
528
534
  [setErrors, setHasErrors]
529
535
  );
530
- const clearErrors = (0, import_react9.useCallback)(
536
+ const clearErrors = (0, import_react10.useCallback)(
531
537
  (...fields) => {
532
538
  setErrors((errors2) => {
533
539
  const newErrors = Object.keys(errors2).reduce(
@@ -550,7 +556,7 @@ function useForm(...args) {
550
556
  },
551
557
  [setErrors, setHasErrors]
552
558
  );
553
- const resetAndClearErrors = (0, import_react9.useCallback)(
559
+ const resetAndClearErrors = (0, import_react10.useCallback)(
554
560
  (...fields) => {
555
561
  reset(...fields);
556
562
  clearErrors(...fields);
@@ -560,17 +566,17 @@ function useForm(...args) {
560
566
  const createSubmitMethod = (method) => (url, options = {}) => {
561
567
  submit(method, url, options);
562
568
  };
563
- const getMethod = (0, import_react9.useCallback)(createSubmitMethod("get"), [submit]);
564
- const post = (0, import_react9.useCallback)(createSubmitMethod("post"), [submit]);
565
- const put = (0, import_react9.useCallback)(createSubmitMethod("put"), [submit]);
566
- const patch = (0, import_react9.useCallback)(createSubmitMethod("patch"), [submit]);
567
- const deleteMethod = (0, import_react9.useCallback)(createSubmitMethod("delete"), [submit]);
568
- const cancel = (0, import_react9.useCallback)(() => {
569
+ const getMethod = (0, import_react10.useCallback)(createSubmitMethod("get"), [submit]);
570
+ const post = (0, import_react10.useCallback)(createSubmitMethod("post"), [submit]);
571
+ const put = (0, import_react10.useCallback)(createSubmitMethod("put"), [submit]);
572
+ const patch = (0, import_react10.useCallback)(createSubmitMethod("patch"), [submit]);
573
+ const deleteMethod = (0, import_react10.useCallback)(createSubmitMethod("delete"), [submit]);
574
+ const cancel = (0, import_react10.useCallback)(() => {
569
575
  if (cancelToken.current) {
570
576
  cancelToken.current.cancel();
571
577
  }
572
578
  }, []);
573
- const transformFunction = (0, import_react9.useCallback)((callback) => {
579
+ const transformFunction = (0, import_react10.useCallback)((callback) => {
574
580
  transform.current = callback;
575
581
  }, []);
576
582
  const form = {
@@ -605,12 +611,12 @@ function useForm(...args) {
605
611
  callback(value);
606
612
  return value;
607
613
  };
608
- const valid = (0, import_react9.useCallback)(
614
+ const valid = (0, import_react10.useCallback)(
609
615
  (field) => validFields.includes(field),
610
616
  [validFields]
611
617
  );
612
- const invalid = (0, import_react9.useCallback)((field) => field in errors, [errors]);
613
- const touched = (0, import_react9.useCallback)(
618
+ const invalid = (0, import_react10.useCallback)((field) => field in errors, [errors]);
619
+ const touched = (0, import_react10.useCallback)(
614
620
  (field) => typeof field === "string" ? touchedFields.includes(field) : touchedFields.length > 0,
615
621
  [touchedFields]
616
622
  );
@@ -687,11 +693,11 @@ function useForm(...args) {
687
693
 
688
694
  // src/Form.ts
689
695
  var deferStateUpdate = (callback) => {
690
- typeof import_react11.default.startTransition === "function" ? import_react11.default.startTransition(callback) : setTimeout(callback, 0);
696
+ typeof import_react12.default.startTransition === "function" ? import_react12.default.startTransition(callback) : setTimeout(callback, 0);
691
697
  };
692
698
  var noop = () => void 0;
693
- var FormContext = (0, import_react11.createContext)(void 0);
694
- var Form = (0, import_react11.forwardRef)(
699
+ var FormContext = (0, import_react12.createContext)(void 0);
700
+ var Form = (0, import_react12.forwardRef)(
695
701
  ({
696
702
  action = "",
697
703
  method = "get",
@@ -736,12 +742,12 @@ var Form = (0, import_react11.forwardRef)(
736
742
  form.withAllErrors();
737
743
  }
738
744
  form.transform(getTransformedData);
739
- const formElement = (0, import_react11.useRef)(void 0);
740
- const resolvedMethod = (0, import_react11.useMemo)(() => {
745
+ const formElement = (0, import_react12.useRef)(void 0);
746
+ const resolvedMethod = (0, import_react12.useMemo)(() => {
741
747
  return (0, import_core5.isUrlMethodPair)(action) ? action.method : method.toLowerCase();
742
748
  }, [action, method]);
743
- const [isDirty, setIsDirty] = (0, import_react11.useState)(false);
744
- const defaultData = (0, import_react11.useRef)(new FormData());
749
+ const [isDirty, setIsDirty] = (0, import_react12.useState)(false);
750
+ const defaultData = (0, import_react12.useRef)(new FormData());
745
751
  const getFormData = (submitter) => new FormData(formElement.current, submitter);
746
752
  const getData = (submitter) => (0, import_core5.formDataToObject)(getFormData(submitter));
747
753
  const getUrlAndData = (submitter) => {
@@ -764,7 +770,7 @@ var Form = (0, import_react11.forwardRef)(
764
770
  form.clearErrors(...names);
765
771
  return form;
766
772
  };
767
- (0, import_react11.useEffect)(() => {
773
+ (0, import_react12.useEffect)(() => {
768
774
  defaultData.current = getFormData();
769
775
  form.setDefaults(getData());
770
776
  const formEvents = ["input", "change", "reset"];
@@ -773,10 +779,10 @@ var Form = (0, import_react11.forwardRef)(
773
779
  formEvents.forEach((e) => formElement.current?.removeEventListener(e, updateDirtyState));
774
780
  };
775
781
  }, []);
776
- (0, import_react11.useEffect)(() => {
782
+ (0, import_react12.useEffect)(() => {
777
783
  form.setValidationTimeout(validationTimeout);
778
784
  }, [validationTimeout]);
779
- (0, import_react11.useEffect)(() => {
785
+ (0, import_react12.useEffect)(() => {
780
786
  if (validateFiles) {
781
787
  form.validateFiles();
782
788
  } else {
@@ -805,6 +811,11 @@ var Form = (0, import_react11.forwardRef)(
805
811
  };
806
812
  const submit = (submitter) => {
807
813
  const [url, data] = getUrlAndData(submitter);
814
+ const formTarget = submitter?.getAttribute("formtarget");
815
+ if (formTarget === "_blank" && resolvedMethod === "get") {
816
+ window.open(url, "_blank");
817
+ return;
818
+ }
808
819
  const submitOptions = {
809
820
  headers,
810
821
  queryStringArrayFormat,
@@ -867,8 +878,8 @@ var Form = (0, import_react11.forwardRef)(
867
878
  touch: form.touch,
868
879
  touched: form.touched
869
880
  };
870
- (0, import_react11.useImperativeHandle)(ref, () => exposed, [form, isDirty, submit]);
871
- const formNode = (0, import_react11.createElement)(
881
+ (0, import_react12.useImperativeHandle)(ref, () => exposed, [form, isDirty, submit]);
882
+ const formNode = (0, import_react12.createElement)(
872
883
  "form",
873
884
  {
874
885
  ...props,
@@ -879,31 +890,30 @@ var Form = (0, import_react11.forwardRef)(
879
890
  event.preventDefault();
880
891
  submit(event.nativeEvent.submitter);
881
892
  },
882
- // Only React 19 supports passing a boolean to the `inert` attribute.
883
- // To support earlier versions as well, we use the string 'true'.
884
- // Unfortunately, React 19 treats an empty string as `false`.
893
+ // React 19 supports passing a boolean to the `inert` attribute, but shows
894
+ // a warning when receiving a string. Earlier versions require the string 'true'.
885
895
  // See: https://github.com/inertiajs/inertia/pull/2536
886
- inert: disableWhileProcessing && form.processing && "true"
896
+ inert: disableWhileProcessing && form.processing && (isReact19 ? true : "true")
887
897
  },
888
898
  typeof children === "function" ? children(exposed) : children
889
899
  );
890
- return (0, import_react11.createElement)(FormContext.Provider, { value: exposed }, formNode);
900
+ return (0, import_react12.createElement)(FormContext.Provider, { value: exposed }, formNode);
891
901
  }
892
902
  );
893
903
  Form.displayName = "InertiaForm";
894
904
  function useFormContext() {
895
- return (0, import_react11.useContext)(FormContext);
905
+ return (0, import_react12.useContext)(FormContext);
896
906
  }
897
907
  var Form_default = Form;
898
908
 
899
909
  // src/Head.ts
900
910
  var import_lodash_es3 = require("lodash-es");
901
- var import_react12 = __toESM(require("react"), 1);
911
+ var import_react14 = __toESM(require("react"), 1);
902
912
  var Head = function({ children, title }) {
903
- const headManager = (0, import_react12.useContext)(HeadContext_default);
904
- const provider = (0, import_react12.useMemo)(() => headManager.createProvider(), [headManager]);
913
+ const headManager = (0, import_react14.useContext)(HeadContext_default);
914
+ const provider = (0, import_react14.useMemo)(() => headManager.createProvider(), [headManager]);
905
915
  const isServer = typeof window === "undefined";
906
- (0, import_react12.useEffect)(() => {
916
+ (0, import_react14.useEffect)(() => {
907
917
  provider.reconnect();
908
918
  provider.update(renderNodes(children));
909
919
  return () => {
@@ -966,7 +976,7 @@ var Head = function({ children, title }) {
966
976
  return html;
967
977
  }
968
978
  function ensureNodeHasInertiaProp(node) {
969
- return import_react12.default.cloneElement(node, {
979
+ return import_react14.default.cloneElement(node, {
970
980
  [provider.preferredAttribute()]: node.props["head-key"] !== void 0 ? node.props["head-key"] : ""
971
981
  });
972
982
  }
@@ -974,7 +984,7 @@ var Head = function({ children, title }) {
974
984
  return renderTag(ensureNodeHasInertiaProp(node));
975
985
  }
976
986
  function renderNodes(nodes) {
977
- const elements = import_react12.default.Children.toArray(nodes).filter((node) => node).map((node) => renderNode(node));
987
+ const elements = import_react14.default.Children.toArray(nodes).filter((node) => node).map((node) => renderNode(node));
978
988
  if (title && !elements.find((tag) => tag.startsWith("<title"))) {
979
989
  elements.push(`<title ${provider.preferredAttribute()}>${title}</title>`);
980
990
  }
@@ -989,7 +999,7 @@ var Head_default = Head;
989
999
 
990
1000
  // src/InfiniteScroll.ts
991
1001
  var import_core6 = require("@inertiajs/core");
992
- var import_react13 = __toESM(require("react"), 1);
1002
+ var import_react15 = __toESM(require("react"), 1);
993
1003
  var resolveHTMLElement = (value, fallback) => {
994
1004
  if (!value) {
995
1005
  return fallback;
@@ -1008,7 +1018,7 @@ var renderSlot = (slotContent, slotProps, fallback = null) => {
1008
1018
  }
1009
1019
  return typeof slotContent === "function" ? slotContent(slotProps) : slotContent;
1010
1020
  };
1011
- var InfiniteScroll = (0, import_react13.forwardRef)(
1021
+ var InfiniteScroll = (0, import_react15.forwardRef)(
1012
1022
  ({
1013
1023
  data,
1014
1024
  buffer = 0,
@@ -1029,34 +1039,34 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1029
1039
  onlyPrevious = false,
1030
1040
  ...props
1031
1041
  }, ref) => {
1032
- const [startElementFromRef, setStartElementFromRef] = (0, import_react13.useState)(null);
1033
- const startElementRef = (0, import_react13.useCallback)((node) => setStartElementFromRef(node), []);
1034
- const [endElementFromRef, setEndElementFromRef] = (0, import_react13.useState)(null);
1035
- const endElementRef = (0, import_react13.useCallback)((node) => setEndElementFromRef(node), []);
1036
- const [itemsElementFromRef, setItemsElementFromRef] = (0, import_react13.useState)(null);
1037
- const itemsElementRef = (0, import_react13.useCallback)((node) => setItemsElementFromRef(node), []);
1038
- const [loadingPrevious, setLoadingPrevious] = (0, import_react13.useState)(false);
1039
- const [loadingNext, setLoadingNext] = (0, import_react13.useState)(false);
1040
- const [requestCount, setRequestCount] = (0, import_react13.useState)(0);
1041
- const [hasPreviousPage, setHasPreviousPage] = (0, import_react13.useState)(false);
1042
- const [hasNextPage, setHasNextPage] = (0, import_react13.useState)(false);
1043
- const [resolvedStartElement, setResolvedStartElement] = (0, import_react13.useState)(null);
1044
- const [resolvedEndElement, setResolvedEndElement] = (0, import_react13.useState)(null);
1045
- const [resolvedItemsElement, setResolvedItemsElement] = (0, import_react13.useState)(null);
1046
- (0, import_react13.useEffect)(() => {
1042
+ const [startElementFromRef, setStartElementFromRef] = (0, import_react15.useState)(null);
1043
+ const startElementRef = (0, import_react15.useCallback)((node) => setStartElementFromRef(node), []);
1044
+ const [endElementFromRef, setEndElementFromRef] = (0, import_react15.useState)(null);
1045
+ const endElementRef = (0, import_react15.useCallback)((node) => setEndElementFromRef(node), []);
1046
+ const [itemsElementFromRef, setItemsElementFromRef] = (0, import_react15.useState)(null);
1047
+ const itemsElementRef = (0, import_react15.useCallback)((node) => setItemsElementFromRef(node), []);
1048
+ const [loadingPrevious, setLoadingPrevious] = (0, import_react15.useState)(false);
1049
+ const [loadingNext, setLoadingNext] = (0, import_react15.useState)(false);
1050
+ const [requestCount, setRequestCount] = (0, import_react15.useState)(0);
1051
+ const [hasPreviousPage, setHasPreviousPage] = (0, import_react15.useState)(false);
1052
+ const [hasNextPage, setHasNextPage] = (0, import_react15.useState)(false);
1053
+ const [resolvedStartElement, setResolvedStartElement] = (0, import_react15.useState)(null);
1054
+ const [resolvedEndElement, setResolvedEndElement] = (0, import_react15.useState)(null);
1055
+ const [resolvedItemsElement, setResolvedItemsElement] = (0, import_react15.useState)(null);
1056
+ (0, import_react15.useEffect)(() => {
1047
1057
  const element = startElement ? resolveHTMLElement(startElement, startElementFromRef) : startElementFromRef;
1048
1058
  setResolvedStartElement(element);
1049
1059
  }, [startElement, startElementFromRef]);
1050
- (0, import_react13.useEffect)(() => {
1060
+ (0, import_react15.useEffect)(() => {
1051
1061
  const element = endElement ? resolveHTMLElement(endElement, endElementFromRef) : endElementFromRef;
1052
1062
  setResolvedEndElement(element);
1053
1063
  }, [endElement, endElementFromRef]);
1054
- (0, import_react13.useEffect)(() => {
1064
+ (0, import_react15.useEffect)(() => {
1055
1065
  const element = itemsElement ? resolveHTMLElement(itemsElement, itemsElementFromRef) : itemsElementFromRef;
1056
1066
  setResolvedItemsElement(element);
1057
1067
  }, [itemsElement, itemsElementFromRef]);
1058
- const scrollableParent = (0, import_react13.useMemo)(() => (0, import_core6.getScrollableParent)(resolvedItemsElement), [resolvedItemsElement]);
1059
- const callbackPropsRef = (0, import_react13.useRef)({
1068
+ const scrollableParent = (0, import_react15.useMemo)(() => (0, import_core6.getScrollableParent)(resolvedItemsElement), [resolvedItemsElement]);
1069
+ const callbackPropsRef = (0, import_react15.useRef)({
1060
1070
  buffer,
1061
1071
  onlyNext,
1062
1072
  onlyPrevious,
@@ -1070,10 +1080,10 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1070
1080
  reverse,
1071
1081
  preserveUrl
1072
1082
  };
1073
- const [infiniteScroll, setInfiniteScroll] = (0, import_react13.useState)(null);
1074
- const dataManager = (0, import_react13.useMemo)(() => infiniteScroll?.dataManager, [infiniteScroll]);
1075
- const elementManager = (0, import_react13.useMemo)(() => infiniteScroll?.elementManager, [infiniteScroll]);
1076
- const scrollToBottom = (0, import_react13.useCallback)(() => {
1083
+ const [infiniteScroll, setInfiniteScroll] = (0, import_react15.useState)(null);
1084
+ const dataManager = (0, import_react15.useMemo)(() => infiniteScroll?.dataManager, [infiniteScroll]);
1085
+ const elementManager = (0, import_react15.useMemo)(() => infiniteScroll?.elementManager, [infiniteScroll]);
1086
+ const scrollToBottom = (0, import_react15.useCallback)(() => {
1077
1087
  if (scrollableParent) {
1078
1088
  scrollableParent.scrollTo({
1079
1089
  top: scrollableParent.scrollHeight,
@@ -1086,7 +1096,7 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1086
1096
  });
1087
1097
  }
1088
1098
  }, [scrollableParent]);
1089
- (0, import_react13.useEffect)(() => {
1099
+ (0, import_react15.useEffect)(() => {
1090
1100
  if (!resolvedItemsElement) {
1091
1101
  return;
1092
1102
  }
@@ -1134,21 +1144,21 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1134
1144
  setInfiniteScroll(null);
1135
1145
  };
1136
1146
  }, [data, resolvedItemsElement, resolvedStartElement, resolvedEndElement, scrollableParent]);
1137
- const manualMode = (0, import_react13.useMemo)(
1147
+ const manualMode = (0, import_react15.useMemo)(
1138
1148
  () => manual || manualAfter > 0 && requestCount >= manualAfter,
1139
1149
  [manual, manualAfter, requestCount]
1140
1150
  );
1141
- const autoLoad = (0, import_react13.useMemo)(() => !manualMode, [manualMode]);
1142
- (0, import_react13.useEffect)(() => {
1151
+ const autoLoad = (0, import_react15.useMemo)(() => !manualMode, [manualMode]);
1152
+ (0, import_react15.useEffect)(() => {
1143
1153
  autoLoad ? elementManager?.enableTriggers() : elementManager?.disableTriggers();
1144
1154
  }, [autoLoad, onlyNext, onlyPrevious, resolvedStartElement, resolvedEndElement]);
1145
- (0, import_react13.useEffect)(() => {
1155
+ (0, import_react15.useEffect)(() => {
1146
1156
  const shouldAutoScroll = autoScroll !== void 0 ? autoScroll : reverse;
1147
1157
  if (shouldAutoScroll) {
1148
1158
  scrollToBottom();
1149
1159
  }
1150
1160
  }, [scrollableParent]);
1151
- (0, import_react13.useImperativeHandle)(
1161
+ (0, import_react15.useImperativeHandle)(
1152
1162
  ref,
1153
1163
  () => ({
1154
1164
  fetchNext: dataManager?.fetchNext || (() => {
@@ -1194,7 +1204,7 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1194
1204
  const renderElements = [];
1195
1205
  if (!startElement) {
1196
1206
  renderElements.push(
1197
- (0, import_react13.createElement)(
1207
+ (0, import_react15.createElement)(
1198
1208
  "div",
1199
1209
  { ref: startElementRef },
1200
1210
  // Render previous slot or fallback to loading indicator
@@ -1203,7 +1213,7 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1203
1213
  );
1204
1214
  }
1205
1215
  renderElements.push(
1206
- (0, import_react13.createElement)(
1216
+ (0, import_react15.createElement)(
1207
1217
  as,
1208
1218
  { ...props, ref: itemsElementRef },
1209
1219
  typeof children === "function" ? children(exposedSlot) : children
@@ -1211,7 +1221,7 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1211
1221
  );
1212
1222
  if (!endElement) {
1213
1223
  renderElements.push(
1214
- (0, import_react13.createElement)(
1224
+ (0, import_react15.createElement)(
1215
1225
  "div",
1216
1226
  { ref: endElementRef },
1217
1227
  // Render next slot or fallback to loading indicator
@@ -1219,7 +1229,7 @@ var InfiniteScroll = (0, import_react13.forwardRef)(
1219
1229
  )
1220
1230
  );
1221
1231
  }
1222
- return (0, import_react13.createElement)(import_react13.default.Fragment, {}, ...reverse ? [...renderElements].reverse() : renderElements);
1232
+ return (0, import_react15.createElement)(import_react15.default.Fragment, {}, ...reverse ? [...renderElements].reverse() : renderElements);
1223
1233
  }
1224
1234
  );
1225
1235
  InfiniteScroll.displayName = "InertiaInfiniteScroll";
@@ -1227,9 +1237,9 @@ var InfiniteScroll_default = InfiniteScroll;
1227
1237
 
1228
1238
  // src/Link.ts
1229
1239
  var import_core7 = require("@inertiajs/core");
1230
- var import_react14 = require("react");
1240
+ var import_react16 = require("react");
1231
1241
  var noop2 = () => void 0;
1232
- var Link = (0, import_react14.forwardRef)(
1242
+ var Link = (0, import_react16.forwardRef)(
1233
1243
  ({
1234
1244
  children,
1235
1245
  as = "a",
@@ -1262,24 +1272,24 @@ var Link = (0, import_react14.forwardRef)(
1262
1272
  viewTransition = false,
1263
1273
  ...props
1264
1274
  }, ref) => {
1265
- const [inFlightCount, setInFlightCount] = (0, import_react14.useState)(0);
1266
- const hoverTimeout = (0, import_react14.useRef)(void 0);
1267
- const _method = (0, import_react14.useMemo)(() => {
1275
+ const [inFlightCount, setInFlightCount] = (0, import_react16.useState)(0);
1276
+ const hoverTimeout = (0, import_react16.useRef)(void 0);
1277
+ const _method = (0, import_react16.useMemo)(() => {
1268
1278
  return (0, import_core7.isUrlMethodPair)(href) ? href.method : method.toLowerCase();
1269
1279
  }, [href, method]);
1270
- const _as = (0, import_react14.useMemo)(() => {
1280
+ const _as = (0, import_react16.useMemo)(() => {
1271
1281
  if (typeof as !== "string" || as.toLowerCase() !== "a") {
1272
1282
  return as;
1273
1283
  }
1274
1284
  return _method !== "get" ? "button" : as.toLowerCase();
1275
1285
  }, [as, _method]);
1276
- const mergeDataArray = (0, import_react14.useMemo)(
1286
+ const mergeDataArray = (0, import_react16.useMemo)(
1277
1287
  () => (0, import_core7.mergeDataIntoQueryString)(_method, (0, import_core7.isUrlMethodPair)(href) ? href.url : href, data, queryStringArrayFormat),
1278
1288
  [href, _method, data, queryStringArrayFormat]
1279
1289
  );
1280
- const url = (0, import_react14.useMemo)(() => mergeDataArray[0], [mergeDataArray]);
1281
- const _data = (0, import_react14.useMemo)(() => mergeDataArray[1], [mergeDataArray]);
1282
- const baseParams = (0, import_react14.useMemo)(
1290
+ const url = (0, import_react16.useMemo)(() => mergeDataArray[0], [mergeDataArray]);
1291
+ const _data = (0, import_react16.useMemo)(() => mergeDataArray[1], [mergeDataArray]);
1292
+ const baseParams = (0, import_react16.useMemo)(
1283
1293
  () => ({
1284
1294
  data: _data,
1285
1295
  method: _method,
@@ -1294,7 +1304,7 @@ var Link = (0, import_react14.forwardRef)(
1294
1304
  }),
1295
1305
  [_data, _method, preserveScroll, preserveState, preserveUrl, replace, only, except, headers, async]
1296
1306
  );
1297
- const visitParams = (0, import_react14.useMemo)(
1307
+ const visitParams = (0, import_react16.useMemo)(
1298
1308
  () => ({
1299
1309
  ...baseParams,
1300
1310
  viewTransition,
@@ -1326,7 +1336,7 @@ var Link = (0, import_react14.forwardRef)(
1326
1336
  onError
1327
1337
  ]
1328
1338
  );
1329
- const prefetchModes = (0, import_react14.useMemo)(
1339
+ const prefetchModes = (0, import_react16.useMemo)(
1330
1340
  () => {
1331
1341
  if (prefetch === true) {
1332
1342
  return ["hover"];
@@ -1341,7 +1351,7 @@ var Link = (0, import_react14.forwardRef)(
1341
1351
  },
1342
1352
  Array.isArray(prefetch) ? prefetch : [prefetch]
1343
1353
  );
1344
- const cacheForValue = (0, import_react14.useMemo)(() => {
1354
+ const cacheForValue = (0, import_react16.useMemo)(() => {
1345
1355
  if (cacheFor !== 0) {
1346
1356
  return cacheFor;
1347
1357
  }
@@ -1350,7 +1360,7 @@ var Link = (0, import_react14.forwardRef)(
1350
1360
  }
1351
1361
  return config.get("prefetch.cacheFor");
1352
1362
  }, [cacheFor, prefetchModes]);
1353
- const doPrefetch = (0, import_react14.useMemo)(() => {
1363
+ const doPrefetch = (0, import_react16.useMemo)(() => {
1354
1364
  return () => {
1355
1365
  import_core7.router.prefetch(
1356
1366
  url,
@@ -1363,12 +1373,12 @@ var Link = (0, import_react14.forwardRef)(
1363
1373
  );
1364
1374
  };
1365
1375
  }, [url, baseParams, onPrefetching, onPrefetched, cacheForValue, cacheTags]);
1366
- (0, import_react14.useEffect)(() => {
1376
+ (0, import_react16.useEffect)(() => {
1367
1377
  return () => {
1368
1378
  clearTimeout(hoverTimeout.current);
1369
1379
  };
1370
1380
  }, []);
1371
- (0, import_react14.useEffect)(() => {
1381
+ (0, import_react16.useEffect)(() => {
1372
1382
  if (prefetchModes.includes("mount")) {
1373
1383
  setTimeout(() => doPrefetch());
1374
1384
  }
@@ -1425,7 +1435,7 @@ var Link = (0, import_react14.forwardRef)(
1425
1435
  }
1426
1436
  }
1427
1437
  };
1428
- const elProps = (0, import_react14.useMemo)(() => {
1438
+ const elProps = (0, import_react16.useMemo)(() => {
1429
1439
  if (_as === "button") {
1430
1440
  return { type: "button" };
1431
1441
  }
@@ -1434,7 +1444,7 @@ var Link = (0, import_react14.forwardRef)(
1434
1444
  }
1435
1445
  return {};
1436
1446
  }, [_as, url]);
1437
- return (0, import_react14.createElement)(
1447
+ return (0, import_react16.createElement)(
1438
1448
  _as,
1439
1449
  {
1440
1450
  ...props,
@@ -1460,18 +1470,18 @@ var Link_default = Link;
1460
1470
 
1461
1471
  // src/usePoll.ts
1462
1472
  var import_core8 = require("@inertiajs/core");
1463
- var import_react15 = require("react");
1473
+ var import_react17 = require("react");
1464
1474
  function usePoll(interval, requestOptions = {}, options = {
1465
1475
  keepAlive: false,
1466
1476
  autoStart: true
1467
1477
  }) {
1468
- const pollRef = (0, import_react15.useRef)(
1478
+ const pollRef = (0, import_react17.useRef)(
1469
1479
  import_core8.router.poll(interval, requestOptions, {
1470
1480
  ...options,
1471
1481
  autoStart: false
1472
1482
  })
1473
1483
  );
1474
- (0, import_react15.useEffect)(() => {
1484
+ (0, import_react17.useEffect)(() => {
1475
1485
  if (options.autoStart ?? true) {
1476
1486
  pollRef.current.start();
1477
1487
  }
@@ -1485,14 +1495,14 @@ function usePoll(interval, requestOptions = {}, options = {
1485
1495
 
1486
1496
  // src/usePrefetch.ts
1487
1497
  var import_core9 = require("@inertiajs/core");
1488
- var import_react16 = require("react");
1498
+ var import_react18 = require("react");
1489
1499
  function usePrefetch(options = {}) {
1490
1500
  const cached = typeof window === "undefined" ? null : import_core9.router.getCached(window.location.pathname, options);
1491
1501
  const inFlight = typeof window === "undefined" ? null : import_core9.router.getPrefetching(window.location.pathname, options);
1492
- const [lastUpdatedAt, setLastUpdatedAt] = (0, import_react16.useState)(cached?.staleTimestamp || null);
1493
- const [isPrefetching, setIsPrefetching] = (0, import_react16.useState)(inFlight !== null);
1494
- const [isPrefetched, setIsPrefetched] = (0, import_react16.useState)(cached !== null);
1495
- (0, import_react16.useEffect)(() => {
1502
+ const [lastUpdatedAt, setLastUpdatedAt] = (0, import_react18.useState)(cached?.staleTimestamp || null);
1503
+ const [isPrefetching, setIsPrefetching] = (0, import_react18.useState)(inFlight !== null);
1504
+ const [isPrefetched, setIsPrefetched] = (0, import_react18.useState)(cached !== null);
1505
+ (0, import_react18.useEffect)(() => {
1496
1506
  const onPrefetchingListener = import_core9.router.on("prefetching", (e) => {
1497
1507
  if (e.detail.visit.url.pathname === window.location.pathname) {
1498
1508
  setIsPrefetching(true);
@@ -1520,25 +1530,25 @@ function usePrefetch(options = {}) {
1520
1530
 
1521
1531
  // src/WhenVisible.ts
1522
1532
  var import_core10 = require("@inertiajs/core");
1523
- var import_react17 = require("react");
1533
+ var import_react19 = require("react");
1524
1534
  var WhenVisible = ({ children, data, params, buffer, as, always, fallback }) => {
1525
1535
  always = always ?? false;
1526
1536
  as = as ?? "div";
1527
1537
  fallback = fallback ?? null;
1528
1538
  const pageProps = usePage().props;
1529
- const keys = (0, import_react17.useMemo)(() => data ? Array.isArray(data) ? data : [data] : [], [data]);
1530
- const [loaded, setLoaded] = (0, import_react17.useState)(() => keys.length > 0 && keys.every((key) => pageProps[key] !== void 0));
1531
- const [isFetching, setIsFetching] = (0, import_react17.useState)(false);
1532
- const fetching = (0, import_react17.useRef)(false);
1533
- const ref = (0, import_react17.useRef)(null);
1534
- const observer = (0, import_react17.useRef)(null);
1535
- const getReloadParamsRef = (0, import_react17.useRef)(() => ({}));
1536
- (0, import_react17.useEffect)(() => {
1539
+ const keys = (0, import_react19.useMemo)(() => data ? Array.isArray(data) ? data : [data] : [], [data]);
1540
+ const [loaded, setLoaded] = (0, import_react19.useState)(() => keys.length > 0 && keys.every((key) => pageProps[key] !== void 0));
1541
+ const [isFetching, setIsFetching] = (0, import_react19.useState)(false);
1542
+ const fetching = (0, import_react19.useRef)(false);
1543
+ const ref = (0, import_react19.useRef)(null);
1544
+ const observer = (0, import_react19.useRef)(null);
1545
+ const getReloadParamsRef = (0, import_react19.useRef)(() => ({}));
1546
+ (0, import_react19.useEffect)(() => {
1537
1547
  if (keys.length > 0) {
1538
1548
  setLoaded(keys.every((key) => pageProps[key] !== void 0));
1539
1549
  }
1540
1550
  }, [pageProps, keys]);
1541
- const getReloadParams = (0, import_react17.useCallback)(() => {
1551
+ const getReloadParams = (0, import_react19.useCallback)(() => {
1542
1552
  const reloadParams = { ...params };
1543
1553
  if (data) {
1544
1554
  reloadParams.only = Array.isArray(data) ? data : [data];
@@ -1586,7 +1596,7 @@ var WhenVisible = ({ children, data, params, buffer, as, always, fallback }) =>
1586
1596
  );
1587
1597
  observer.current.observe(ref.current);
1588
1598
  };
1589
- (0, import_react17.useEffect)(() => {
1599
+ (0, import_react19.useEffect)(() => {
1590
1600
  if (!ref.current) {
1591
1601
  return;
1592
1602
  }
@@ -1601,7 +1611,7 @@ var WhenVisible = ({ children, data, params, buffer, as, always, fallback }) =>
1601
1611
  const resolveChildren = () => typeof children === "function" ? children({ fetching: isFetching }) : children;
1602
1612
  const resolveFallback = () => typeof fallback === "function" ? fallback() : fallback;
1603
1613
  if (always || !loaded) {
1604
- return (0, import_react17.createElement)(
1614
+ return (0, import_react19.createElement)(
1605
1615
  as,
1606
1616
  {
1607
1617
  props: null,