@inertiajs/core 2.2.11 → 2.2.13
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 +128 -31
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +122 -25
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
- package/types/dialog.d.ts +4 -0
- package/types/history.d.ts +1 -0
- package/types/modal.d.ts +4 -0
- package/types/page.d.ts +5 -3
- package/types/types.d.ts +9 -2
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/router.ts
|
|
2
|
-
import { cloneDeep as
|
|
2
|
+
import { cloneDeep as cloneDeep3, get as get3, set as set3 } from "lodash-es";
|
|
3
3
|
|
|
4
4
|
// src/config.ts
|
|
5
5
|
import { get, has, set } from "lodash-es";
|
|
@@ -35,7 +35,9 @@ var config = new Config({
|
|
|
35
35
|
recentlySuccessfulDuration: 2e3
|
|
36
36
|
},
|
|
37
37
|
future: {
|
|
38
|
-
preserveEqualProps: false
|
|
38
|
+
preserveEqualProps: false,
|
|
39
|
+
useDataInertiaHeadAttribute: false,
|
|
40
|
+
useDialogForErrorModal: false
|
|
39
41
|
},
|
|
40
42
|
prefetch: {
|
|
41
43
|
cacheFor: 3e4
|
|
@@ -93,7 +95,7 @@ var firePrefetchingEvent = (visit) => {
|
|
|
93
95
|
};
|
|
94
96
|
|
|
95
97
|
// src/history.ts
|
|
96
|
-
import { isEqual } from "lodash-es";
|
|
98
|
+
import { cloneDeep, isEqual } from "lodash-es";
|
|
97
99
|
|
|
98
100
|
// src/sessionStorage.ts
|
|
99
101
|
var SessionStorage = class {
|
|
@@ -476,7 +478,8 @@ var CurrentPage = class {
|
|
|
476
478
|
set(page2, {
|
|
477
479
|
replace = false,
|
|
478
480
|
preserveScroll = false,
|
|
479
|
-
preserveState = false
|
|
481
|
+
preserveState = false,
|
|
482
|
+
viewTransition = false
|
|
480
483
|
} = {}) {
|
|
481
484
|
if (Object.keys(page2.deferredProps || {}).length) {
|
|
482
485
|
this.pendingDeferredProps = {
|
|
@@ -503,6 +506,9 @@ var CurrentPage = class {
|
|
|
503
506
|
replace ? history.replaceState(page2, () => resolve(null)) : history.pushState(page2, () => resolve(null));
|
|
504
507
|
}).then(() => {
|
|
505
508
|
const isNewComponent = !this.isTheSame(page2);
|
|
509
|
+
if (!isNewComponent && Object.keys(page2.props.errors || {}).length > 0) {
|
|
510
|
+
viewTransition = false;
|
|
511
|
+
}
|
|
506
512
|
this.page = page2;
|
|
507
513
|
this.cleared = false;
|
|
508
514
|
if (isNewComponent) {
|
|
@@ -512,7 +518,12 @@ var CurrentPage = class {
|
|
|
512
518
|
this.fireEventsFor("firstLoad");
|
|
513
519
|
}
|
|
514
520
|
this.isFirstPageLoad = false;
|
|
515
|
-
return this.swap({
|
|
521
|
+
return this.swap({
|
|
522
|
+
component,
|
|
523
|
+
page: page2,
|
|
524
|
+
preserveState,
|
|
525
|
+
viewTransition
|
|
526
|
+
}).then(() => {
|
|
516
527
|
if (preserveScroll) {
|
|
517
528
|
window.requestAnimationFrame(() => Scroll.restoreScrollRegions(scrollRegions));
|
|
518
529
|
} else {
|
|
@@ -536,7 +547,7 @@ var CurrentPage = class {
|
|
|
536
547
|
this.page = page2;
|
|
537
548
|
this.cleared = false;
|
|
538
549
|
history.setCurrent(page2);
|
|
539
|
-
return this.swap({ component, page: page2, preserveState });
|
|
550
|
+
return this.swap({ component, page: page2, preserveState, viewTransition: false });
|
|
540
551
|
});
|
|
541
552
|
}
|
|
542
553
|
clear() {
|
|
@@ -562,9 +573,18 @@ var CurrentPage = class {
|
|
|
562
573
|
swap({
|
|
563
574
|
component,
|
|
564
575
|
page: page2,
|
|
565
|
-
preserveState
|
|
576
|
+
preserveState,
|
|
577
|
+
viewTransition
|
|
566
578
|
}) {
|
|
567
|
-
|
|
579
|
+
const doSwap = () => this.swapComponent({ component, page: page2, preserveState });
|
|
580
|
+
if (!viewTransition || !document?.startViewTransition) {
|
|
581
|
+
return doSwap();
|
|
582
|
+
}
|
|
583
|
+
const viewTransitionCallback = typeof viewTransition === "boolean" ? () => null : viewTransition;
|
|
584
|
+
return new Promise((resolve) => {
|
|
585
|
+
const transitionResult = document.startViewTransition(() => doSwap().then(resolve));
|
|
586
|
+
viewTransitionCallback(transitionResult);
|
|
587
|
+
});
|
|
568
588
|
}
|
|
569
589
|
resolve(component) {
|
|
570
590
|
return Promise.resolve(this.resolveComponent(component));
|
|
@@ -657,9 +677,21 @@ var History = class {
|
|
|
657
677
|
});
|
|
658
678
|
});
|
|
659
679
|
}
|
|
680
|
+
clonePageProps(page2) {
|
|
681
|
+
try {
|
|
682
|
+
structuredClone(page2.props);
|
|
683
|
+
return page2;
|
|
684
|
+
} catch {
|
|
685
|
+
return {
|
|
686
|
+
...page2,
|
|
687
|
+
props: cloneDeep(page2.props)
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
}
|
|
660
691
|
getPageData(page2) {
|
|
692
|
+
const pageWithClonedProps = this.clonePageProps(page2);
|
|
661
693
|
return new Promise((resolve) => {
|
|
662
|
-
return page2.encryptHistory ? encryptHistory(
|
|
694
|
+
return page2.encryptHistory ? encryptHistory(pageWithClonedProps).then(resolve) : resolve(pageWithClonedProps);
|
|
663
695
|
});
|
|
664
696
|
}
|
|
665
697
|
processQueue() {
|
|
@@ -1038,7 +1070,7 @@ var Polls = class {
|
|
|
1038
1070
|
var polls = new Polls();
|
|
1039
1071
|
|
|
1040
1072
|
// src/prefetched.ts
|
|
1041
|
-
import { cloneDeep } from "lodash-es";
|
|
1073
|
+
import { cloneDeep as cloneDeep2 } from "lodash-es";
|
|
1042
1074
|
|
|
1043
1075
|
// src/objectUtils.ts
|
|
1044
1076
|
var objectsAreEqual = (obj1, obj2, excludeKeys) => {
|
|
@@ -1255,7 +1287,7 @@ var PrefetchedRequests = class {
|
|
|
1255
1287
|
}) || null;
|
|
1256
1288
|
}
|
|
1257
1289
|
withoutPurposePrefetchHeader(params) {
|
|
1258
|
-
const newParams =
|
|
1290
|
+
const newParams = cloneDeep2(params);
|
|
1259
1291
|
if (newParams.headers["Purpose"] === "prefetch") {
|
|
1260
1292
|
delete newParams.headers["Purpose"];
|
|
1261
1293
|
}
|
|
@@ -1280,7 +1312,8 @@ var PrefetchedRequests = class {
|
|
|
1280
1312
|
"onPrefetched",
|
|
1281
1313
|
"onCancelToken",
|
|
1282
1314
|
"onPrefetching",
|
|
1283
|
-
"async"
|
|
1315
|
+
"async",
|
|
1316
|
+
"viewTransition"
|
|
1284
1317
|
]
|
|
1285
1318
|
);
|
|
1286
1319
|
}
|
|
@@ -1437,7 +1470,7 @@ import { get as get2, isEqual as isEqual2, set as set2 } from "lodash-es";
|
|
|
1437
1470
|
var modal_default = {
|
|
1438
1471
|
modal: null,
|
|
1439
1472
|
listener: null,
|
|
1440
|
-
|
|
1473
|
+
createIframeAndPage(html) {
|
|
1441
1474
|
if (typeof html === "object") {
|
|
1442
1475
|
html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(
|
|
1443
1476
|
html
|
|
@@ -1446,6 +1479,15 @@ var modal_default = {
|
|
|
1446
1479
|
const page2 = document.createElement("html");
|
|
1447
1480
|
page2.innerHTML = html;
|
|
1448
1481
|
page2.querySelectorAll("a").forEach((a) => a.setAttribute("target", "_top"));
|
|
1482
|
+
const iframe = document.createElement("iframe");
|
|
1483
|
+
iframe.style.backgroundColor = "white";
|
|
1484
|
+
iframe.style.borderRadius = "5px";
|
|
1485
|
+
iframe.style.width = "100%";
|
|
1486
|
+
iframe.style.height = "100%";
|
|
1487
|
+
return { iframe, page: page2 };
|
|
1488
|
+
},
|
|
1489
|
+
show(html) {
|
|
1490
|
+
const { iframe, page: page2 } = this.createIframeAndPage(html);
|
|
1449
1491
|
this.modal = document.createElement("div");
|
|
1450
1492
|
this.modal.style.position = "fixed";
|
|
1451
1493
|
this.modal.style.width = "100vw";
|
|
@@ -1455,11 +1497,6 @@ var modal_default = {
|
|
|
1455
1497
|
this.modal.style.backgroundColor = "rgba(0, 0, 0, .6)";
|
|
1456
1498
|
this.modal.style.zIndex = 2e5;
|
|
1457
1499
|
this.modal.addEventListener("click", () => this.hide());
|
|
1458
|
-
const iframe = document.createElement("iframe");
|
|
1459
|
-
iframe.style.backgroundColor = "white";
|
|
1460
|
-
iframe.style.borderRadius = "5px";
|
|
1461
|
-
iframe.style.width = "100%";
|
|
1462
|
-
iframe.style.height = "100%";
|
|
1463
1500
|
this.modal.appendChild(iframe);
|
|
1464
1501
|
document.body.prepend(this.modal);
|
|
1465
1502
|
document.body.style.overflow = "hidden";
|
|
@@ -1485,6 +1522,55 @@ var modal_default = {
|
|
|
1485
1522
|
}
|
|
1486
1523
|
};
|
|
1487
1524
|
|
|
1525
|
+
// src/dialog.ts
|
|
1526
|
+
var dialog_default = {
|
|
1527
|
+
show(html) {
|
|
1528
|
+
const { iframe, page: page2 } = modal_default.createIframeAndPage(html);
|
|
1529
|
+
iframe.style.boxSizing = "border-box";
|
|
1530
|
+
iframe.style.display = "block";
|
|
1531
|
+
const dialog = document.createElement("dialog");
|
|
1532
|
+
dialog.id = "inertia-error-dialog";
|
|
1533
|
+
Object.assign(dialog.style, {
|
|
1534
|
+
width: "calc(100vw - 100px)",
|
|
1535
|
+
height: "calc(100vh - 100px)",
|
|
1536
|
+
padding: "0",
|
|
1537
|
+
margin: "auto",
|
|
1538
|
+
border: "none",
|
|
1539
|
+
backgroundColor: "transparent"
|
|
1540
|
+
});
|
|
1541
|
+
const dialogStyleElement = document.createElement("style");
|
|
1542
|
+
dialogStyleElement.textContent = `
|
|
1543
|
+
dialog#inertia-error-dialog::backdrop {
|
|
1544
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
dialog#inertia-error-dialog:focus {
|
|
1548
|
+
outline: none;
|
|
1549
|
+
}
|
|
1550
|
+
`;
|
|
1551
|
+
document.head.appendChild(dialogStyleElement);
|
|
1552
|
+
dialog.addEventListener("click", (event) => {
|
|
1553
|
+
if (event.target === dialog) {
|
|
1554
|
+
dialog.close();
|
|
1555
|
+
}
|
|
1556
|
+
});
|
|
1557
|
+
dialog.addEventListener("close", () => {
|
|
1558
|
+
dialogStyleElement.remove();
|
|
1559
|
+
dialog.remove();
|
|
1560
|
+
});
|
|
1561
|
+
dialog.appendChild(iframe);
|
|
1562
|
+
document.body.prepend(dialog);
|
|
1563
|
+
dialog.showModal();
|
|
1564
|
+
dialog.focus();
|
|
1565
|
+
if (!iframe.contentWindow) {
|
|
1566
|
+
throw new Error("iframe not yet ready.");
|
|
1567
|
+
}
|
|
1568
|
+
iframe.contentWindow.document.open();
|
|
1569
|
+
iframe.contentWindow.document.write(page2.outerHTML);
|
|
1570
|
+
iframe.contentWindow.document.close();
|
|
1571
|
+
}
|
|
1572
|
+
};
|
|
1573
|
+
|
|
1488
1574
|
// src/response.ts
|
|
1489
1575
|
var queue2 = new Queue();
|
|
1490
1576
|
var Response = class _Response {
|
|
@@ -1548,7 +1634,7 @@ var Response = class _Response {
|
|
|
1548
1634
|
data: this.getDataFromResponse(this.response.data)
|
|
1549
1635
|
};
|
|
1550
1636
|
if (fireInvalidEvent(response)) {
|
|
1551
|
-
return modal_default.show(response.data);
|
|
1637
|
+
return config.get("future.useDialogForErrorModal") ? dialog_default.show(response.data) : modal_default.show(response.data);
|
|
1552
1638
|
}
|
|
1553
1639
|
}
|
|
1554
1640
|
isInertiaResponse() {
|
|
@@ -1601,7 +1687,8 @@ var Response = class _Response {
|
|
|
1601
1687
|
return page.set(pageResponse, {
|
|
1602
1688
|
replace: this.requestParams.all().replace,
|
|
1603
1689
|
preserveScroll: this.requestParams.all().preserveScroll,
|
|
1604
|
-
preserveState: this.requestParams.all().preserveState
|
|
1690
|
+
preserveState: this.requestParams.all().preserveState,
|
|
1691
|
+
viewTransition: this.requestParams.all().viewTransition
|
|
1605
1692
|
});
|
|
1606
1693
|
}
|
|
1607
1694
|
getDataFromResponse(response) {
|
|
@@ -2038,7 +2125,8 @@ var Router = class {
|
|
|
2038
2125
|
...options,
|
|
2039
2126
|
async: true,
|
|
2040
2127
|
showProgress: false,
|
|
2041
|
-
prefetch: true
|
|
2128
|
+
prefetch: true,
|
|
2129
|
+
viewTransition: false
|
|
2042
2130
|
});
|
|
2043
2131
|
const visitUrl = visit.url.origin + visit.url.pathname + visit.url.search;
|
|
2044
2132
|
const currentUrl = window.location.origin + window.location.pathname + window.location.search;
|
|
@@ -2099,7 +2187,7 @@ var Router = class {
|
|
|
2099
2187
|
preserveState: true,
|
|
2100
2188
|
props(currentProps) {
|
|
2101
2189
|
const newValue = typeof value === "function" ? value(get3(currentProps, name), currentProps) : value;
|
|
2102
|
-
return set3(
|
|
2190
|
+
return set3(cloneDeep3(currentProps), name, newValue);
|
|
2103
2191
|
},
|
|
2104
2192
|
...options || {}
|
|
2105
2193
|
});
|
|
@@ -2136,7 +2224,7 @@ var Router = class {
|
|
|
2136
2224
|
clientVisit(params, { replace = false } = {}) {
|
|
2137
2225
|
const current = page.get();
|
|
2138
2226
|
const props = typeof params.props === "function" ? params.props(current.props) : params.props ?? current.props;
|
|
2139
|
-
const { onError, onFinish, onSuccess, ...pageParams } = params;
|
|
2227
|
+
const { viewTransition, onError, onFinish, onSuccess, ...pageParams } = params;
|
|
2140
2228
|
const page2 = {
|
|
2141
2229
|
...current,
|
|
2142
2230
|
...pageParams,
|
|
@@ -2147,7 +2235,8 @@ var Router = class {
|
|
|
2147
2235
|
page.set(page2, {
|
|
2148
2236
|
replace,
|
|
2149
2237
|
preserveScroll,
|
|
2150
|
-
preserveState
|
|
2238
|
+
preserveState,
|
|
2239
|
+
viewTransition
|
|
2151
2240
|
}).then(() => {
|
|
2152
2241
|
const errors = page.get().props.errors || {};
|
|
2153
2242
|
if (Object.keys(errors).length === 0) {
|
|
@@ -2163,7 +2252,8 @@ var Router = class {
|
|
|
2163
2252
|
...options,
|
|
2164
2253
|
async: true,
|
|
2165
2254
|
showProgress: false,
|
|
2166
|
-
prefetch: true
|
|
2255
|
+
prefetch: true,
|
|
2256
|
+
viewTransition: false
|
|
2167
2257
|
}),
|
|
2168
2258
|
...this.getVisitEvents(options)
|
|
2169
2259
|
};
|
|
@@ -2175,7 +2265,7 @@ var Router = class {
|
|
|
2175
2265
|
options.method = options.method ?? urlMethodPair.method;
|
|
2176
2266
|
}
|
|
2177
2267
|
const defaultVisitOptionsCallback = config.get("visitOptions");
|
|
2178
|
-
const configuredOptions = defaultVisitOptionsCallback ? defaultVisitOptionsCallback(href.toString(),
|
|
2268
|
+
const configuredOptions = defaultVisitOptionsCallback ? defaultVisitOptionsCallback(href.toString(), cloneDeep3(options)) || {} : {};
|
|
2179
2269
|
const mergedOptions = {
|
|
2180
2270
|
method: "get",
|
|
2181
2271
|
data: {},
|
|
@@ -2195,6 +2285,7 @@ var Router = class {
|
|
|
2195
2285
|
preserveUrl: false,
|
|
2196
2286
|
prefetch: false,
|
|
2197
2287
|
invalidateCacheTags: [],
|
|
2288
|
+
viewTransition: false,
|
|
2198
2289
|
...options,
|
|
2199
2290
|
...configuredOptions
|
|
2200
2291
|
};
|
|
@@ -2381,6 +2472,9 @@ function formDataToObject(source) {
|
|
|
2381
2472
|
|
|
2382
2473
|
// src/head.ts
|
|
2383
2474
|
var Renderer = {
|
|
2475
|
+
preferredAttribute() {
|
|
2476
|
+
return config.get("future.useDataInertiaHeadAttribute") ? "data-inertia" : "inertia";
|
|
2477
|
+
},
|
|
2384
2478
|
buildDOMElement(tag) {
|
|
2385
2479
|
const template = document.createElement("template");
|
|
2386
2480
|
template.innerHTML = tag;
|
|
@@ -2396,12 +2490,13 @@ var Renderer = {
|
|
|
2396
2490
|
return script;
|
|
2397
2491
|
},
|
|
2398
2492
|
isInertiaManagedElement(element) {
|
|
2399
|
-
return element.nodeType === Node.ELEMENT_NODE && element.getAttribute(
|
|
2493
|
+
return element.nodeType === Node.ELEMENT_NODE && element.getAttribute(this.preferredAttribute()) !== null;
|
|
2400
2494
|
},
|
|
2401
2495
|
findMatchingElementIndex(element, elements) {
|
|
2402
|
-
const
|
|
2496
|
+
const attribute = this.preferredAttribute();
|
|
2497
|
+
const key = element.getAttribute(attribute);
|
|
2403
2498
|
if (key !== null) {
|
|
2404
|
-
return elements.findIndex((element2) => element2.getAttribute(
|
|
2499
|
+
return elements.findIndex((element2) => element2.getAttribute(attribute) === key);
|
|
2405
2500
|
}
|
|
2406
2501
|
return -1;
|
|
2407
2502
|
},
|
|
@@ -2452,8 +2547,9 @@ function createHeadManager(isServer2, titleCallback, onUpdate) {
|
|
|
2452
2547
|
}
|
|
2453
2548
|
function collect() {
|
|
2454
2549
|
const title = titleCallback("");
|
|
2550
|
+
const attribute = Renderer.preferredAttribute();
|
|
2455
2551
|
const defaults = {
|
|
2456
|
-
...title ? { title: `<title
|
|
2552
|
+
...title ? { title: `<title ${attribute}="">${title}</title>` } : {}
|
|
2457
2553
|
};
|
|
2458
2554
|
const elements = Object.values(states).reduce((carry, elements2) => carry.concat(elements2), []).reduce((carry, element) => {
|
|
2459
2555
|
if (element.indexOf("<") === -1) {
|
|
@@ -2464,7 +2560,7 @@ function createHeadManager(isServer2, titleCallback, onUpdate) {
|
|
|
2464
2560
|
carry.title = title2 ? `${title2[1]}${titleCallback(title2[2])}${title2[3]}` : element;
|
|
2465
2561
|
return carry;
|
|
2466
2562
|
}
|
|
2467
|
-
const match = element.match(/ inertia="[^"]+"/);
|
|
2563
|
+
const match = element.match(attribute === "inertia" ? / inertia="[^"]+"/ : / data-inertia="[^"]+"/);
|
|
2468
2564
|
if (match) {
|
|
2469
2565
|
carry[match[0]] = element;
|
|
2470
2566
|
} else {
|
|
@@ -2483,6 +2579,7 @@ function createHeadManager(isServer2, titleCallback, onUpdate) {
|
|
|
2483
2579
|
createProvider: function() {
|
|
2484
2580
|
const id = connect();
|
|
2485
2581
|
return {
|
|
2582
|
+
preferredAttribute: Renderer.preferredAttribute,
|
|
2486
2583
|
reconnect: () => reconnect(id),
|
|
2487
2584
|
update: (elements) => update(id, elements),
|
|
2488
2585
|
disconnect: () => disconnect(id)
|