@inertiajs/core 2.2.12 → 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 +109 -24
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +109 -24
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
- package/types/dialog.d.ts +4 -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
|
@@ -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
|
|
@@ -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));
|
|
@@ -1292,7 +1312,8 @@ var PrefetchedRequests = class {
|
|
|
1292
1312
|
"onPrefetched",
|
|
1293
1313
|
"onCancelToken",
|
|
1294
1314
|
"onPrefetching",
|
|
1295
|
-
"async"
|
|
1315
|
+
"async",
|
|
1316
|
+
"viewTransition"
|
|
1296
1317
|
]
|
|
1297
1318
|
);
|
|
1298
1319
|
}
|
|
@@ -1449,7 +1470,7 @@ import { get as get2, isEqual as isEqual2, set as set2 } from "lodash-es";
|
|
|
1449
1470
|
var modal_default = {
|
|
1450
1471
|
modal: null,
|
|
1451
1472
|
listener: null,
|
|
1452
|
-
|
|
1473
|
+
createIframeAndPage(html) {
|
|
1453
1474
|
if (typeof html === "object") {
|
|
1454
1475
|
html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(
|
|
1455
1476
|
html
|
|
@@ -1458,6 +1479,15 @@ var modal_default = {
|
|
|
1458
1479
|
const page2 = document.createElement("html");
|
|
1459
1480
|
page2.innerHTML = html;
|
|
1460
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);
|
|
1461
1491
|
this.modal = document.createElement("div");
|
|
1462
1492
|
this.modal.style.position = "fixed";
|
|
1463
1493
|
this.modal.style.width = "100vw";
|
|
@@ -1467,11 +1497,6 @@ var modal_default = {
|
|
|
1467
1497
|
this.modal.style.backgroundColor = "rgba(0, 0, 0, .6)";
|
|
1468
1498
|
this.modal.style.zIndex = 2e5;
|
|
1469
1499
|
this.modal.addEventListener("click", () => this.hide());
|
|
1470
|
-
const iframe = document.createElement("iframe");
|
|
1471
|
-
iframe.style.backgroundColor = "white";
|
|
1472
|
-
iframe.style.borderRadius = "5px";
|
|
1473
|
-
iframe.style.width = "100%";
|
|
1474
|
-
iframe.style.height = "100%";
|
|
1475
1500
|
this.modal.appendChild(iframe);
|
|
1476
1501
|
document.body.prepend(this.modal);
|
|
1477
1502
|
document.body.style.overflow = "hidden";
|
|
@@ -1497,6 +1522,55 @@ var modal_default = {
|
|
|
1497
1522
|
}
|
|
1498
1523
|
};
|
|
1499
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
|
+
|
|
1500
1574
|
// src/response.ts
|
|
1501
1575
|
var queue2 = new Queue();
|
|
1502
1576
|
var Response = class _Response {
|
|
@@ -1560,7 +1634,7 @@ var Response = class _Response {
|
|
|
1560
1634
|
data: this.getDataFromResponse(this.response.data)
|
|
1561
1635
|
};
|
|
1562
1636
|
if (fireInvalidEvent(response)) {
|
|
1563
|
-
return modal_default.show(response.data);
|
|
1637
|
+
return config.get("future.useDialogForErrorModal") ? dialog_default.show(response.data) : modal_default.show(response.data);
|
|
1564
1638
|
}
|
|
1565
1639
|
}
|
|
1566
1640
|
isInertiaResponse() {
|
|
@@ -1613,7 +1687,8 @@ var Response = class _Response {
|
|
|
1613
1687
|
return page.set(pageResponse, {
|
|
1614
1688
|
replace: this.requestParams.all().replace,
|
|
1615
1689
|
preserveScroll: this.requestParams.all().preserveScroll,
|
|
1616
|
-
preserveState: this.requestParams.all().preserveState
|
|
1690
|
+
preserveState: this.requestParams.all().preserveState,
|
|
1691
|
+
viewTransition: this.requestParams.all().viewTransition
|
|
1617
1692
|
});
|
|
1618
1693
|
}
|
|
1619
1694
|
getDataFromResponse(response) {
|
|
@@ -2050,7 +2125,8 @@ var Router = class {
|
|
|
2050
2125
|
...options,
|
|
2051
2126
|
async: true,
|
|
2052
2127
|
showProgress: false,
|
|
2053
|
-
prefetch: true
|
|
2128
|
+
prefetch: true,
|
|
2129
|
+
viewTransition: false
|
|
2054
2130
|
});
|
|
2055
2131
|
const visitUrl = visit.url.origin + visit.url.pathname + visit.url.search;
|
|
2056
2132
|
const currentUrl = window.location.origin + window.location.pathname + window.location.search;
|
|
@@ -2148,7 +2224,7 @@ var Router = class {
|
|
|
2148
2224
|
clientVisit(params, { replace = false } = {}) {
|
|
2149
2225
|
const current = page.get();
|
|
2150
2226
|
const props = typeof params.props === "function" ? params.props(current.props) : params.props ?? current.props;
|
|
2151
|
-
const { onError, onFinish, onSuccess, ...pageParams } = params;
|
|
2227
|
+
const { viewTransition, onError, onFinish, onSuccess, ...pageParams } = params;
|
|
2152
2228
|
const page2 = {
|
|
2153
2229
|
...current,
|
|
2154
2230
|
...pageParams,
|
|
@@ -2159,7 +2235,8 @@ var Router = class {
|
|
|
2159
2235
|
page.set(page2, {
|
|
2160
2236
|
replace,
|
|
2161
2237
|
preserveScroll,
|
|
2162
|
-
preserveState
|
|
2238
|
+
preserveState,
|
|
2239
|
+
viewTransition
|
|
2163
2240
|
}).then(() => {
|
|
2164
2241
|
const errors = page.get().props.errors || {};
|
|
2165
2242
|
if (Object.keys(errors).length === 0) {
|
|
@@ -2175,7 +2252,8 @@ var Router = class {
|
|
|
2175
2252
|
...options,
|
|
2176
2253
|
async: true,
|
|
2177
2254
|
showProgress: false,
|
|
2178
|
-
prefetch: true
|
|
2255
|
+
prefetch: true,
|
|
2256
|
+
viewTransition: false
|
|
2179
2257
|
}),
|
|
2180
2258
|
...this.getVisitEvents(options)
|
|
2181
2259
|
};
|
|
@@ -2207,6 +2285,7 @@ var Router = class {
|
|
|
2207
2285
|
preserveUrl: false,
|
|
2208
2286
|
prefetch: false,
|
|
2209
2287
|
invalidateCacheTags: [],
|
|
2288
|
+
viewTransition: false,
|
|
2210
2289
|
...options,
|
|
2211
2290
|
...configuredOptions
|
|
2212
2291
|
};
|
|
@@ -2393,6 +2472,9 @@ function formDataToObject(source) {
|
|
|
2393
2472
|
|
|
2394
2473
|
// src/head.ts
|
|
2395
2474
|
var Renderer = {
|
|
2475
|
+
preferredAttribute() {
|
|
2476
|
+
return config.get("future.useDataInertiaHeadAttribute") ? "data-inertia" : "inertia";
|
|
2477
|
+
},
|
|
2396
2478
|
buildDOMElement(tag) {
|
|
2397
2479
|
const template = document.createElement("template");
|
|
2398
2480
|
template.innerHTML = tag;
|
|
@@ -2408,12 +2490,13 @@ var Renderer = {
|
|
|
2408
2490
|
return script;
|
|
2409
2491
|
},
|
|
2410
2492
|
isInertiaManagedElement(element) {
|
|
2411
|
-
return element.nodeType === Node.ELEMENT_NODE && element.getAttribute(
|
|
2493
|
+
return element.nodeType === Node.ELEMENT_NODE && element.getAttribute(this.preferredAttribute()) !== null;
|
|
2412
2494
|
},
|
|
2413
2495
|
findMatchingElementIndex(element, elements) {
|
|
2414
|
-
const
|
|
2496
|
+
const attribute = this.preferredAttribute();
|
|
2497
|
+
const key = element.getAttribute(attribute);
|
|
2415
2498
|
if (key !== null) {
|
|
2416
|
-
return elements.findIndex((element2) => element2.getAttribute(
|
|
2499
|
+
return elements.findIndex((element2) => element2.getAttribute(attribute) === key);
|
|
2417
2500
|
}
|
|
2418
2501
|
return -1;
|
|
2419
2502
|
},
|
|
@@ -2464,8 +2547,9 @@ function createHeadManager(isServer2, titleCallback, onUpdate) {
|
|
|
2464
2547
|
}
|
|
2465
2548
|
function collect() {
|
|
2466
2549
|
const title = titleCallback("");
|
|
2550
|
+
const attribute = Renderer.preferredAttribute();
|
|
2467
2551
|
const defaults = {
|
|
2468
|
-
...title ? { title: `<title
|
|
2552
|
+
...title ? { title: `<title ${attribute}="">${title}</title>` } : {}
|
|
2469
2553
|
};
|
|
2470
2554
|
const elements = Object.values(states).reduce((carry, elements2) => carry.concat(elements2), []).reduce((carry, element) => {
|
|
2471
2555
|
if (element.indexOf("<") === -1) {
|
|
@@ -2476,7 +2560,7 @@ function createHeadManager(isServer2, titleCallback, onUpdate) {
|
|
|
2476
2560
|
carry.title = title2 ? `${title2[1]}${titleCallback(title2[2])}${title2[3]}` : element;
|
|
2477
2561
|
return carry;
|
|
2478
2562
|
}
|
|
2479
|
-
const match = element.match(/ inertia="[^"]+"/);
|
|
2563
|
+
const match = element.match(attribute === "inertia" ? / inertia="[^"]+"/ : / data-inertia="[^"]+"/);
|
|
2480
2564
|
if (match) {
|
|
2481
2565
|
carry[match[0]] = element;
|
|
2482
2566
|
} else {
|
|
@@ -2495,6 +2579,7 @@ function createHeadManager(isServer2, titleCallback, onUpdate) {
|
|
|
2495
2579
|
createProvider: function() {
|
|
2496
2580
|
const id = connect();
|
|
2497
2581
|
return {
|
|
2582
|
+
preferredAttribute: Renderer.preferredAttribute,
|
|
2498
2583
|
reconnect: () => reconnect(id),
|
|
2499
2584
|
update: (elements) => update(id, elements),
|
|
2500
2585
|
disconnect: () => disconnect(id)
|