@inertiajs/core 2.2.15 → 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
@@ -404,27 +404,33 @@ var Scroll = class {
404
404
  var qs = __toESM(require("qs"), 1);
405
405
 
406
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;
407
408
  function hasFiles(data) {
408
- 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));
409
410
  }
410
411
 
411
412
  // src/formData.ts
412
413
  var isFormData = (value) => value instanceof FormData;
413
- function objectToFormData(source, form = new FormData(), parentKey = null) {
414
+ function objectToFormData(source, form = new FormData(), parentKey = null, queryStringArrayFormat = "brackets") {
414
415
  source = source || {};
415
416
  for (const key in source) {
416
417
  if (Object.prototype.hasOwnProperty.call(source, key)) {
417
- append(form, composeKey(parentKey, key), source[key]);
418
+ append(form, composeKey(parentKey, key, "indices"), source[key], queryStringArrayFormat);
418
419
  }
419
420
  }
420
421
  return form;
421
422
  }
422
- function composeKey(parent, key) {
423
- 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}]`;
424
428
  }
425
- function append(form, key, value) {
429
+ function append(form, key, value, format) {
426
430
  if (Array.isArray(value)) {
427
- 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
+ );
428
434
  } else if (value instanceof Date) {
429
435
  return form.append(key, value.toISOString());
430
436
  } else if (value instanceof File) {
@@ -440,7 +446,7 @@ function append(form, key, value) {
440
446
  } else if (value === null || value === void 0) {
441
447
  return form.append(key, "");
442
448
  }
443
- objectToFormData(value, form, key);
449
+ objectToFormData(value, form, key, format);
444
450
  }
445
451
 
446
452
  // src/url.ts
@@ -450,7 +456,7 @@ function hrefToUrl(href) {
450
456
  var transformUrlAndData = (href, data, method, forceFormData, queryStringArrayFormat) => {
451
457
  let url = typeof href === "string" ? hrefToUrl(href) : href;
452
458
  if ((hasFiles(data) || forceFormData) && !isFormData(data)) {
453
- data = objectToFormData(data);
459
+ data = objectToFormData(data, new FormData(), null, queryStringArrayFormat);
454
460
  }
455
461
  if (isFormData(data)) {
456
462
  return [url, data];
@@ -709,7 +715,7 @@ var History = class {
709
715
  }
710
716
  restore(key) {
711
717
  if (!isServer) {
712
- 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];
713
719
  }
714
720
  }
715
721
  pushState(page2, cb = null) {
@@ -1357,6 +1363,8 @@ var PrefetchedRequests = class {
1357
1363
  "showProgress",
1358
1364
  "replace",
1359
1365
  "prefetch",
1366
+ "preserveScroll",
1367
+ "preserveState",
1360
1368
  "onBefore",
1361
1369
  "onBeforeUpdate",
1362
1370
  "onStart",
@@ -2403,6 +2411,9 @@ var Router = class {
2403
2411
 
2404
2412
  // src/domUtils.ts
2405
2413
  var elementInViewport = (el) => {
2414
+ if (el.offsetParent === null) {
2415
+ return false;
2416
+ }
2406
2417
  const rect = el.getBoundingClientRect();
2407
2418
  const verticallyVisible = rect.top < window.innerHeight && rect.bottom >= 0;
2408
2419
  const horizontallyVisible = rect.left < window.innerWidth && rect.right >= 0;
@@ -2454,7 +2465,10 @@ var getScrollableParent = (element) => {
2454
2465
  }
2455
2466
  return null;
2456
2467
  };
2457
- var getElementsInViewportFromCollection = (referenceElement, elements) => {
2468
+ var getElementsInViewportFromCollection = (elements, referenceElement) => {
2469
+ if (!referenceElement) {
2470
+ return elements.filter((element) => elementInViewport(element));
2471
+ }
2458
2472
  const referenceIndex = elements.indexOf(referenceElement);
2459
2473
  const upwardElements = [];
2460
2474
  const downwardElements = [];
@@ -2476,6 +2490,15 @@ var getElementsInViewportFromCollection = (referenceElement, elements) => {
2476
2490
  }
2477
2491
  return [...upwardElements.reverse(), ...downwardElements];
2478
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
+ };
2479
2502
 
2480
2503
  // src/formObject.ts
2481
2504
  var import_lodash_es6 = require("lodash-es");
@@ -2504,6 +2527,41 @@ function parseKey(key) {
2504
2527
  }
2505
2528
  return path;
2506
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
+ }
2507
2565
  function formDataToObject(source) {
2508
2566
  const form = {};
2509
2567
  for (const [key, value] of source.entries()) {
@@ -2516,14 +2574,17 @@ function formDataToObject(source) {
2516
2574
  const existing = (0, import_lodash_es6.get)(form, arrayPath);
2517
2575
  if (Array.isArray(existing)) {
2518
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]);
2519
2580
  } else {
2520
2581
  (0, import_lodash_es6.set)(form, arrayPath, [value]);
2521
2582
  }
2522
2583
  continue;
2523
2584
  }
2524
- (0, import_lodash_es6.set)(form, path, value);
2585
+ setNestedObject(form, path.map(String), value);
2525
2586
  }
2526
- return form;
2587
+ return convertSequentialObjectsToArrays(form);
2527
2588
  }
2528
2589
 
2529
2590
  // src/head.ts
@@ -2998,7 +3059,7 @@ var useInfiniteScrollQueryString = (options) => {
2998
3059
  }
2999
3060
  const pageMap = /* @__PURE__ */ new Map();
3000
3061
  const elements = [...itemsElement.children];
3001
- getElementsInViewportFromCollection(itemElement, elements).forEach((element) => {
3062
+ getElementsInViewportFromCollection(elements, itemElement).forEach((element) => {
3002
3063
  const page2 = getPageFromElement(element) ?? "1";
3003
3064
  if (pageMap.has(page2)) {
3004
3065
  pageMap.set(page2, pageMap.get(page2) + 1);
@@ -3028,10 +3089,7 @@ var useInfiniteScrollPreservation = (options) => {
3028
3089
  const scrollableContainer = options.getScrollableParent();
3029
3090
  const itemsElement = options.getItemsElement();
3030
3091
  currentScrollTop = scrollableContainer?.scrollTop || window.scrollY;
3031
- const visibleElements = getElementsInViewportFromCollection(
3032
- itemsElement.firstElementChild,
3033
- [...itemsElement.children]
3034
- );
3092
+ const visibleElements = getElementsInViewportFromCollection([...itemsElement.children]);
3035
3093
  if (visibleElements.length > 0) {
3036
3094
  referenceElement = visibleElements[0];
3037
3095
  const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 };
@@ -3068,7 +3126,7 @@ var useInfiniteScrollPreservation = (options) => {
3068
3126
  }
3069
3127
  restored = true;
3070
3128
  };
3071
- restore();
3129
+ window.requestAnimationFrame(restore);
3072
3130
  };
3073
3131
  return {
3074
3132
  captureScrollPosition,
@@ -3098,18 +3156,18 @@ function useInfiniteScroll(options) {
3098
3156
  onBeforeUpdate: elementManager.processManuallyAddedElements,
3099
3157
  // After successful request, tag new server content
3100
3158
  onCompletePreviousRequest: (loadedPage) => {
3101
- setTimeout(() => {
3159
+ options.onCompletePreviousRequest();
3160
+ requestAnimationFrame(() => {
3102
3161
  elementManager.processServerLoadedElements(loadedPage);
3103
- options.onCompletePreviousRequest();
3104
- window.queueMicrotask(elementManager.refreshTriggers);
3105
- });
3162
+ elementManager.refreshTriggers();
3163
+ }, 2);
3106
3164
  },
3107
3165
  onCompleteNextRequest: (loadedPage) => {
3108
- setTimeout(() => {
3166
+ options.onCompleteNextRequest();
3167
+ requestAnimationFrame(() => {
3109
3168
  elementManager.processServerLoadedElements(loadedPage);
3110
- options.onCompleteNextRequest();
3111
- window.queueMicrotask(elementManager.refreshTriggers);
3112
- });
3169
+ elementManager.refreshTriggers();
3170
+ }, 2);
3113
3171
  }
3114
3172
  });
3115
3173
  const addScrollPreservationCallbacks = (reloadOptions) => {