@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.js CHANGED
@@ -95,7 +95,8 @@ var config = new Config({
95
95
  useDialogForErrorModal: false
96
96
  },
97
97
  prefetch: {
98
- cacheFor: 3e4
98
+ cacheFor: 3e4,
99
+ hoverDelay: 75
99
100
  }
100
101
  });
101
102
 
@@ -403,27 +404,33 @@ var Scroll = class {
403
404
  var qs = __toESM(require("qs"), 1);
404
405
 
405
406
  // src/files.ts
407
+ var isFile = (value) => typeof File !== "undefined" && value instanceof File || value instanceof Blob || typeof FileList !== "undefined" && value instanceof FileList && value.length > 0;
406
408
  function hasFiles(data) {
407
- 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));
409
+ 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));
408
410
  }
409
411
 
410
412
  // src/formData.ts
411
413
  var isFormData = (value) => value instanceof FormData;
412
- function objectToFormData(source, form = new FormData(), parentKey = null) {
414
+ function objectToFormData(source, form = new FormData(), parentKey = null, queryStringArrayFormat = "brackets") {
413
415
  source = source || {};
414
416
  for (const key in source) {
415
417
  if (Object.prototype.hasOwnProperty.call(source, key)) {
416
- append(form, composeKey(parentKey, key), source[key]);
418
+ append(form, composeKey(parentKey, key, "indices"), source[key], queryStringArrayFormat);
417
419
  }
418
420
  }
419
421
  return form;
420
422
  }
421
- function composeKey(parent, key) {
422
- return parent ? parent + "[" + key + "]" : key;
423
+ function composeKey(parent, key, format) {
424
+ if (!parent) {
425
+ return key;
426
+ }
427
+ return format === "brackets" ? `${parent}[]` : `${parent}[${key}]`;
423
428
  }
424
- function append(form, key, value) {
429
+ function append(form, key, value, format) {
425
430
  if (Array.isArray(value)) {
426
- return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]));
431
+ return Array.from(value.keys()).forEach(
432
+ (index) => append(form, composeKey(key, index.toString(), format), value[index], format)
433
+ );
427
434
  } else if (value instanceof Date) {
428
435
  return form.append(key, value.toISOString());
429
436
  } else if (value instanceof File) {
@@ -439,7 +446,7 @@ function append(form, key, value) {
439
446
  } else if (value === null || value === void 0) {
440
447
  return form.append(key, "");
441
448
  }
442
- objectToFormData(value, form, key);
449
+ objectToFormData(value, form, key, format);
443
450
  }
444
451
 
445
452
  // src/url.ts
@@ -449,7 +456,7 @@ function hrefToUrl(href) {
449
456
  var transformUrlAndData = (href, data, method, forceFormData, queryStringArrayFormat) => {
450
457
  let url = typeof href === "string" ? hrefToUrl(href) : href;
451
458
  if ((hasFiles(data) || forceFormData) && !isFormData(data)) {
452
- data = objectToFormData(data);
459
+ data = objectToFormData(data, new FormData(), null, queryStringArrayFormat);
453
460
  }
454
461
  if (isFormData(data)) {
455
462
  return [url, data];
@@ -708,7 +715,7 @@ var History = class {
708
715
  }
709
716
  restore(key) {
710
717
  if (!isServer) {
711
- return this.current[this.rememberedState] ? this.current[this.rememberedState]?.[key] : this.initialState?.[this.rememberedState]?.[key];
718
+ return this.current[this.rememberedState]?.[key] !== void 0 ? this.current[this.rememberedState]?.[key] : this.initialState?.[this.rememberedState]?.[key];
712
719
  }
713
720
  }
714
721
  pushState(page2, cb = null) {
@@ -1356,6 +1363,8 @@ var PrefetchedRequests = class {
1356
1363
  "showProgress",
1357
1364
  "replace",
1358
1365
  "prefetch",
1366
+ "preserveScroll",
1367
+ "preserveState",
1359
1368
  "onBefore",
1360
1369
  "onBeforeUpdate",
1361
1370
  "onStart",
@@ -2402,6 +2411,9 @@ var Router = class {
2402
2411
 
2403
2412
  // src/domUtils.ts
2404
2413
  var elementInViewport = (el) => {
2414
+ if (el.offsetParent === null) {
2415
+ return false;
2416
+ }
2405
2417
  const rect = el.getBoundingClientRect();
2406
2418
  const verticallyVisible = rect.top < window.innerHeight && rect.bottom >= 0;
2407
2419
  const horizontallyVisible = rect.left < window.innerWidth && rect.right >= 0;
@@ -2453,7 +2465,10 @@ var getScrollableParent = (element) => {
2453
2465
  }
2454
2466
  return null;
2455
2467
  };
2456
- var getElementsInViewportFromCollection = (referenceElement, elements) => {
2468
+ var getElementsInViewportFromCollection = (elements, referenceElement) => {
2469
+ if (!referenceElement) {
2470
+ return elements.filter((element) => elementInViewport(element));
2471
+ }
2457
2472
  const referenceIndex = elements.indexOf(referenceElement);
2458
2473
  const upwardElements = [];
2459
2474
  const downwardElements = [];
@@ -2475,6 +2490,15 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2475
2490
  }
2476
2491
  return [...upwardElements.reverse(), ...downwardElements];
2477
2492
  };
2493
+ var requestAnimationFrame = (cb, times = 1) => {
2494
+ window.requestAnimationFrame(() => {
2495
+ if (times > 1) {
2496
+ requestAnimationFrame(cb, times - 1);
2497
+ } else {
2498
+ cb();
2499
+ }
2500
+ });
2501
+ };
2478
2502
 
2479
2503
  // src/formObject.ts
2480
2504
  var import_lodash_es6 = require("lodash-es");
@@ -2503,6 +2527,41 @@ function parseKey(key) {
2503
2527
  }
2504
2528
  return path;
2505
2529
  }
2530
+ function setNestedObject(obj, path, value) {
2531
+ let current = obj;
2532
+ for (let i = 0; i < path.length - 1; i++) {
2533
+ if (!(path[i] in current)) {
2534
+ current[path[i]] = {};
2535
+ }
2536
+ current = current[path[i]];
2537
+ }
2538
+ current[path[path.length - 1]] = value;
2539
+ }
2540
+ function objectHasSequentialNumericKeys(value) {
2541
+ const keys = Object.keys(value);
2542
+ const numericKeys = keys.filter((k) => /^\d+$/.test(k)).map(Number).sort((a, b) => a - b);
2543
+ return keys.length === numericKeys.length && numericKeys.length > 0 && numericKeys[0] === 0 && numericKeys.every((n, i) => n === i);
2544
+ }
2545
+ function convertSequentialObjectsToArrays(value) {
2546
+ if (Array.isArray(value)) {
2547
+ return value.map(convertSequentialObjectsToArrays);
2548
+ }
2549
+ if (typeof value !== "object" || value === null || isFile(value)) {
2550
+ return value;
2551
+ }
2552
+ if (objectHasSequentialNumericKeys(value)) {
2553
+ const result2 = [];
2554
+ for (let i = 0; i < Object.keys(value).length; i++) {
2555
+ result2[i] = convertSequentialObjectsToArrays(value[i]);
2556
+ }
2557
+ return result2;
2558
+ }
2559
+ const result = {};
2560
+ for (const key in value) {
2561
+ result[key] = convertSequentialObjectsToArrays(value[key]);
2562
+ }
2563
+ return result;
2564
+ }
2506
2565
  function formDataToObject(source) {
2507
2566
  const form = {};
2508
2567
  for (const [key, value] of source.entries()) {
@@ -2515,14 +2574,17 @@ function formDataToObject(source) {
2515
2574
  const existing = (0, import_lodash_es6.get)(form, arrayPath);
2516
2575
  if (Array.isArray(existing)) {
2517
2576
  existing.push(value);
2577
+ } else if (existing && typeof existing === "object" && !isFile(existing)) {
2578
+ const numericKeys = Object.keys(existing).filter((k) => /^\d+$/.test(k)).map(Number).sort((a, b) => a - b);
2579
+ (0, import_lodash_es6.set)(form, arrayPath, numericKeys.length > 0 ? [...numericKeys.map((k) => existing[k]), value] : [value]);
2518
2580
  } else {
2519
2581
  (0, import_lodash_es6.set)(form, arrayPath, [value]);
2520
2582
  }
2521
2583
  continue;
2522
2584
  }
2523
- (0, import_lodash_es6.set)(form, path, value);
2585
+ setNestedObject(form, path.map(String), value);
2524
2586
  }
2525
- return form;
2587
+ return convertSequentialObjectsToArrays(form);
2526
2588
  }
2527
2589
 
2528
2590
  // src/head.ts
@@ -2997,7 +3059,7 @@ var useInfiniteScrollQueryString = (options) => {
2997
3059
  }
2998
3060
  const pageMap = /* @__PURE__ */ new Map();
2999
3061
  const elements = [...itemsElement.children];
3000
- getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
3062
+ getElementsInViewportFromCollection(elements, itemElement).forEach((element) => {
3001
3063
  const page2 = getPageFromElement(element) ?? "1";
3002
3064
  if (pageMap.has(page2)) {
3003
3065
  pageMap.set(page2, pageMap.get(page2) + 1);
@@ -3027,10 +3089,7 @@ var useInfiniteScrollPreservation = (options) => {
3027
3089
  const scrollableContainer = options.getScrollableParent();
3028
3090
  const itemsElement = options.getItemsElement();
3029
3091
  currentScrollTop = scrollableContainer?.scrollTop || window.scrollY;
3030
- const visibleElements = getElementsInViewportFromCollection(
3031
- itemsElement.firstElementChild,
3032
- [...itemsElement.children]
3033
- );
3092
+ const visibleElements = getElementsInViewportFromCollection([...itemsElement.children]);
3034
3093
  if (visibleElements.length > 0) {
3035
3094
  referenceElement = visibleElements[0];
3036
3095
  const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 };
@@ -3067,7 +3126,7 @@ var useInfiniteScrollPreservation = (options) => {
3067
3126
  }
3068
3127
  restored = true;
3069
3128
  };
3070
- restore();
3129
+ window.requestAnimationFrame(restore);
3071
3130
  };
3072
3131
  return {
3073
3132
  captureScrollPosition,
@@ -3097,18 +3156,18 @@ function useInfiniteScroll(options) {
3097
3156
  onBeforeUpdate: elementManager.processManuallyAddedElements,
3098
3157
  // After successful request, tag new server content
3099
3158
  onCompletePreviousRequest: (loadedPage) => {
3100
- setTimeout(() => {
3159
+ options.onCompletePreviousRequest();
3160
+ requestAnimationFrame(() => {
3101
3161
  elementManager.processServerLoadedElements(loadedPage);
3102
- options.onCompletePreviousRequest();
3103
- window.queueMicrotask(elementManager.refreshTriggers);
3104
- });
3162
+ elementManager.refreshTriggers();
3163
+ }, 2);
3105
3164
  },
3106
3165
  onCompleteNextRequest: (loadedPage) => {
3107
- setTimeout(() => {
3166
+ options.onCompleteNextRequest();
3167
+ requestAnimationFrame(() => {
3108
3168
  elementManager.processServerLoadedElements(loadedPage);
3109
- options.onCompleteNextRequest();
3110
- window.queueMicrotask(elementManager.refreshTriggers);
3111
- });
3169
+ elementManager.refreshTriggers();
3170
+ }, 2);
3112
3171
  }
3113
3172
  });
3114
3173
  const addScrollPreservationCallbacks = (reloadOptions) => {