@inertiajs/core 2.2.14 → 2.2.16

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.esm.js CHANGED
@@ -40,7 +40,8 @@ var config = new Config({
40
40
  useDialogForErrorModal: false
41
41
  },
42
42
  prefetch: {
43
- cacheFor: 3e4
43
+ cacheFor: 3e4,
44
+ hoverDelay: 75
44
45
  }
45
46
  });
46
47
 
@@ -348,27 +349,33 @@ var Scroll = class {
348
349
  import * as qs from "qs";
349
350
 
350
351
  // src/files.ts
352
+ var isFile = (value) => typeof File !== "undefined" && value instanceof File || value instanceof Blob || typeof FileList !== "undefined" && value instanceof FileList && value.length > 0;
351
353
  function hasFiles(data) {
352
- return data instanceof File || data instanceof Blob || data instanceof FileList && data.length > 0 || data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value)) || typeof data === "object" && data !== null && Object.values(data).some((value) => hasFiles(value));
354
+ return isFile(data) || data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value)) || typeof data === "object" && data !== null && Object.values(data).some((value) => hasFiles(value));
353
355
  }
354
356
 
355
357
  // src/formData.ts
356
358
  var isFormData = (value) => value instanceof FormData;
357
- function objectToFormData(source, form = new FormData(), parentKey = null) {
359
+ function objectToFormData(source, form = new FormData(), parentKey = null, queryStringArrayFormat = "brackets") {
358
360
  source = source || {};
359
361
  for (const key in source) {
360
362
  if (Object.prototype.hasOwnProperty.call(source, key)) {
361
- append(form, composeKey(parentKey, key), source[key]);
363
+ append(form, composeKey(parentKey, key, "indices"), source[key], queryStringArrayFormat);
362
364
  }
363
365
  }
364
366
  return form;
365
367
  }
366
- function composeKey(parent, key) {
367
- return parent ? parent + "[" + key + "]" : key;
368
+ function composeKey(parent, key, format) {
369
+ if (!parent) {
370
+ return key;
371
+ }
372
+ return format === "brackets" ? `${parent}[]` : `${parent}[${key}]`;
368
373
  }
369
- function append(form, key, value) {
374
+ function append(form, key, value, format) {
370
375
  if (Array.isArray(value)) {
371
- return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]));
376
+ return Array.from(value.keys()).forEach(
377
+ (index) => append(form, composeKey(key, index.toString(), format), value[index], format)
378
+ );
372
379
  } else if (value instanceof Date) {
373
380
  return form.append(key, value.toISOString());
374
381
  } else if (value instanceof File) {
@@ -384,7 +391,7 @@ function append(form, key, value) {
384
391
  } else if (value === null || value === void 0) {
385
392
  return form.append(key, "");
386
393
  }
387
- objectToFormData(value, form, key);
394
+ objectToFormData(value, form, key, format);
388
395
  }
389
396
 
390
397
  // src/url.ts
@@ -394,7 +401,7 @@ function hrefToUrl(href) {
394
401
  var transformUrlAndData = (href, data, method, forceFormData, queryStringArrayFormat) => {
395
402
  let url = typeof href === "string" ? hrefToUrl(href) : href;
396
403
  if ((hasFiles(data) || forceFormData) && !isFormData(data)) {
397
- data = objectToFormData(data);
404
+ data = objectToFormData(data, new FormData(), null, queryStringArrayFormat);
398
405
  }
399
406
  if (isFormData(data)) {
400
407
  return [url, data];
@@ -653,7 +660,7 @@ var History = class {
653
660
  }
654
661
  restore(key) {
655
662
  if (!isServer) {
656
- return this.current[this.rememberedState] ? this.current[this.rememberedState]?.[key] : this.initialState?.[this.rememberedState]?.[key];
663
+ return this.current[this.rememberedState]?.[key] !== void 0 ? this.current[this.rememberedState]?.[key] : this.initialState?.[this.rememberedState]?.[key];
657
664
  }
658
665
  }
659
666
  pushState(page2, cb = null) {
@@ -1301,6 +1308,8 @@ var PrefetchedRequests = class {
1301
1308
  "showProgress",
1302
1309
  "replace",
1303
1310
  "prefetch",
1311
+ "preserveScroll",
1312
+ "preserveState",
1304
1313
  "onBefore",
1305
1314
  "onBeforeUpdate",
1306
1315
  "onStart",
@@ -2347,6 +2356,9 @@ var Router = class {
2347
2356
 
2348
2357
  // src/domUtils.ts
2349
2358
  var elementInViewport = (el) => {
2359
+ if (el.offsetParent === null) {
2360
+ return false;
2361
+ }
2350
2362
  const rect = el.getBoundingClientRect();
2351
2363
  const verticallyVisible = rect.top < window.innerHeight && rect.bottom >= 0;
2352
2364
  const horizontallyVisible = rect.left < window.innerWidth && rect.right >= 0;
@@ -2398,7 +2410,10 @@ var getScrollableParent = (element) => {
2398
2410
  }
2399
2411
  return null;
2400
2412
  };
2401
- var getElementsInViewportFromCollection = (referenceElement, elements) => {
2413
+ var getElementsInViewportFromCollection = (elements, referenceElement) => {
2414
+ if (!referenceElement) {
2415
+ return elements.filter((element) => elementInViewport(element));
2416
+ }
2402
2417
  const referenceIndex = elements.indexOf(referenceElement);
2403
2418
  const upwardElements = [];
2404
2419
  const downwardElements = [];
@@ -2420,6 +2435,15 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2420
2435
  }
2421
2436
  return [...upwardElements.reverse(), ...downwardElements];
2422
2437
  };
2438
+ var requestAnimationFrame = (cb, times = 1) => {
2439
+ window.requestAnimationFrame(() => {
2440
+ if (times > 1) {
2441
+ requestAnimationFrame(cb, times - 1);
2442
+ } else {
2443
+ cb();
2444
+ }
2445
+ });
2446
+ };
2423
2447
 
2424
2448
  // src/formObject.ts
2425
2449
  import { get as get4, set as set4 } from "lodash-es";
@@ -2448,6 +2472,41 @@ function parseKey(key) {
2448
2472
  }
2449
2473
  return path;
2450
2474
  }
2475
+ function setNestedObject(obj, path, value) {
2476
+ let current = obj;
2477
+ for (let i = 0; i < path.length - 1; i++) {
2478
+ if (!(path[i] in current)) {
2479
+ current[path[i]] = {};
2480
+ }
2481
+ current = current[path[i]];
2482
+ }
2483
+ current[path[path.length - 1]] = value;
2484
+ }
2485
+ function objectHasSequentialNumericKeys(value) {
2486
+ const keys = Object.keys(value);
2487
+ const numericKeys = keys.filter((k) => /^\d+$/.test(k)).map(Number).sort((a, b) => a - b);
2488
+ return keys.length === numericKeys.length && numericKeys.length > 0 && numericKeys[0] === 0 && numericKeys.every((n, i) => n === i);
2489
+ }
2490
+ function convertSequentialObjectsToArrays(value) {
2491
+ if (Array.isArray(value)) {
2492
+ return value.map(convertSequentialObjectsToArrays);
2493
+ }
2494
+ if (typeof value !== "object" || value === null || isFile(value)) {
2495
+ return value;
2496
+ }
2497
+ if (objectHasSequentialNumericKeys(value)) {
2498
+ const result2 = [];
2499
+ for (let i = 0; i < Object.keys(value).length; i++) {
2500
+ result2[i] = convertSequentialObjectsToArrays(value[i]);
2501
+ }
2502
+ return result2;
2503
+ }
2504
+ const result = {};
2505
+ for (const key in value) {
2506
+ result[key] = convertSequentialObjectsToArrays(value[key]);
2507
+ }
2508
+ return result;
2509
+ }
2451
2510
  function formDataToObject(source) {
2452
2511
  const form = {};
2453
2512
  for (const [key, value] of source.entries()) {
@@ -2460,14 +2519,17 @@ function formDataToObject(source) {
2460
2519
  const existing = get4(form, arrayPath);
2461
2520
  if (Array.isArray(existing)) {
2462
2521
  existing.push(value);
2522
+ } else if (existing && typeof existing === "object" && !isFile(existing)) {
2523
+ const numericKeys = Object.keys(existing).filter((k) => /^\d+$/.test(k)).map(Number).sort((a, b) => a - b);
2524
+ set4(form, arrayPath, numericKeys.length > 0 ? [...numericKeys.map((k) => existing[k]), value] : [value]);
2463
2525
  } else {
2464
2526
  set4(form, arrayPath, [value]);
2465
2527
  }
2466
2528
  continue;
2467
2529
  }
2468
- set4(form, path, value);
2530
+ setNestedObject(form, path.map(String), value);
2469
2531
  }
2470
- return form;
2532
+ return convertSequentialObjectsToArrays(form);
2471
2533
  }
2472
2534
 
2473
2535
  // src/head.ts
@@ -2942,7 +3004,7 @@ var useInfiniteScrollQueryString = (options) => {
2942
3004
  }
2943
3005
  const pageMap = /* @__PURE__ */ new Map();
2944
3006
  const elements = [...itemsElement.children];
2945
- getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
3007
+ getElementsInViewportFromCollection(elements, itemElement).forEach((element) => {
2946
3008
  const page2 = getPageFromElement(element) ?? "1";
2947
3009
  if (pageMap.has(page2)) {
2948
3010
  pageMap.set(page2, pageMap.get(page2) + 1);
@@ -2972,10 +3034,7 @@ var useInfiniteScrollPreservation = (options) => {
2972
3034
  const scrollableContainer = options.getScrollableParent();
2973
3035
  const itemsElement = options.getItemsElement();
2974
3036
  currentScrollTop = scrollableContainer?.scrollTop || window.scrollY;
2975
- const visibleElements = getElementsInViewportFromCollection(
2976
- itemsElement.firstElementChild,
2977
- [...itemsElement.children]
2978
- );
3037
+ const visibleElements = getElementsInViewportFromCollection([...itemsElement.children]);
2979
3038
  if (visibleElements.length > 0) {
2980
3039
  referenceElement = visibleElements[0];
2981
3040
  const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 };
@@ -3012,7 +3071,7 @@ var useInfiniteScrollPreservation = (options) => {
3012
3071
  }
3013
3072
  restored = true;
3014
3073
  };
3015
- restore();
3074
+ window.requestAnimationFrame(restore);
3016
3075
  };
3017
3076
  return {
3018
3077
  captureScrollPosition,
@@ -3042,18 +3101,18 @@ function useInfiniteScroll(options) {
3042
3101
  onBeforeUpdate: elementManager.processManuallyAddedElements,
3043
3102
  // After successful request, tag new server content
3044
3103
  onCompletePreviousRequest: (loadedPage) => {
3045
- setTimeout(() => {
3104
+ options.onCompletePreviousRequest();
3105
+ requestAnimationFrame(() => {
3046
3106
  elementManager.processServerLoadedElements(loadedPage);
3047
- options.onCompletePreviousRequest();
3048
- window.queueMicrotask(elementManager.refreshTriggers);
3049
- });
3107
+ elementManager.refreshTriggers();
3108
+ }, 2);
3050
3109
  },
3051
3110
  onCompleteNextRequest: (loadedPage) => {
3052
- setTimeout(() => {
3111
+ options.onCompleteNextRequest();
3112
+ requestAnimationFrame(() => {
3053
3113
  elementManager.processServerLoadedElements(loadedPage);
3054
- options.onCompleteNextRequest();
3055
- window.queueMicrotask(elementManager.refreshTriggers);
3056
- });
3114
+ elementManager.refreshTriggers();
3115
+ }, 2);
3057
3116
  }
3058
3117
  });
3059
3118
  const addScrollPreservationCallbacks = (reloadOptions) => {