You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

@inertiajs/react

Package Overview
Dependencies
Maintainers
6
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@inertiajs/react - npm Package Compare versions

Comparing version

to
2.0.15

911

dist/index.esm.js

@@ -1,2 +0,911 @@

import{router as St}from"@inertiajs/core";import{router as Ke,setupProgress as Be}from"@inertiajs/core";import{createElement as Ve}from"react";import{createHeadManager as Oe,router as fe}from"@inertiajs/core";import{createElement as O,useEffect as Me,useMemo as Le,useState as He}from"react";import{createContext as ke}from"react";var le=ke(void 0);le.displayName="InertiaHeadContext";var B=le;import{createContext as we}from"react";var de=we(void 0);de.displayName="InertiaPageContext";var V=de;var ne=!0,me=!1,ge=async()=>{ne=!1};function q({children:r,initialPage:e,initialComponent:i,resolveComponent:s,titleCallback:a,onHeadUpdate:f}){let[d,P]=He({component:i||null,page:e,key:null}),c=Le(()=>Oe(typeof window>"u",a||(l=>l),f||(()=>{})),[]);if(me||(fe.init({initialPage:e,resolveComponent:s,swapComponent:async l=>ge(l)}),me=!0),Me(()=>{ge=async({component:l,page:u,preserveState:o})=>{if(ne){ne=!1;return}P(t=>({component:l,page:u,key:o?t.key:Date.now()}))},fe.on("navigate",()=>c.forceUpdate())},[]),!d.component)return O(B.Provider,{value:c},O(V.Provider,{value:d.page},null));let m=r||(({Component:l,props:u,key:o})=>{let t=O(l,{key:o,...u});return typeof l.layout=="function"?l.layout(t):Array.isArray(l.layout)?l.layout.concat(t).reverse().reduce((g,F)=>O(F,{children:g,...u})):t});return O(B.Provider,{value:c},O(V.Provider,{value:d.page},m({Component:d.component,key:d.key,props:d.page.props})))}q.displayName="Inertia";async function ye({id:r="app",resolve:e,setup:i,title:s,progress:a={},page:f,render:d}){let P=typeof window>"u",c=P?null:document.getElementById(r),m=f||JSON.parse(c.dataset.page),l=t=>Promise.resolve(e(t)).then(g=>g.default||g),u=[],o=await Promise.all([l(m.component),Ke.decryptHistory().catch(()=>{})]).then(([t])=>i({el:c,App:q,props:{initialPage:m,initialComponent:t,resolveComponent:l,titleCallback:s,onHeadUpdate:P?g=>u=g:null}}));if(!P&&a&&Be(a),P){let t=await d(Ve("div",{id:r,"data-page":JSON.stringify(m)},o));return{head:u,body:t}}}import{useEffect as Pe,useMemo as Ne,useState as je}from"react";import{useContext as Ue}from"react";function J(){let r=Ue(V);if(!r)throw new Error("usePage must be used within the Inertia component");return r}var he=r=>(r=new URL(r.href),r.hash="",r),$e=(r,e)=>he(r).href===he(e).href,Fe=({children:r,data:e,fallback:i})=>{if(!e)throw new Error("`<Deferred>` requires a `data` prop to be a string or array of strings");let[s,a]=je(!1),f=J().props,d=Ne(()=>Array.isArray(e)?e:[e],[e]);return Pe(()=>{let P=Se.on("start",c=>{let m=c.detail.visit.only.length>0||c.detail.visit.except.length>0,l=c.detail.visit.only.find(u=>d.includes(u));$e(c.detail.visit.url,window.location)&&(!m||l)&&a(!1)});return()=>{P()}},[]),Pe(()=>{a(d.every(P=>f[P]!==void 0))},[f,d]),s?r:i};Fe.displayName="InertiaDeferred";var We=Fe;import Te,{useContext as _e,useEffect as qe,useMemo as Je}from"react";var ze=function({children:r,title:e}){let i=_e(B),s=Je(()=>i.createProvider(),[i]),a=typeof window>"u";qe(()=>(s.reconnect(),s.update(u(r)),()=>{s.disconnect()}),[s,r,e]);function f(o){return["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(o.type)>-1}function d(o){let t=Object.keys(o.props).reduce((g,F)=>{if(["head-key","children","dangerouslySetInnerHTML"].includes(F))return g;let b=o.props[F];return b===""?g+` ${F}`:g+` ${F}="${b}"`},"");return`<${o.type}${t}>`}function P(o){return typeof o.props.children=="string"?o.props.children:o.props.children.reduce((t,g)=>t+c(g),"")}function c(o){let t=d(o);return o.props.children&&(t+=P(o)),o.props.dangerouslySetInnerHTML&&(t+=o.props.dangerouslySetInnerHTML.__html),f(o)||(t+=`</${o.type}>`),t}function m(o){return Te.cloneElement(o,{inertia:o.props["head-key"]!==void 0?o.props["head-key"]:""})}function l(o){return c(m(o))}function u(o){let t=Te.Children.toArray(o).filter(g=>g).map(g=>l(g));return e&&!t.find(g=>g.startsWith("<title"))&&t.push(`<title inertia>${e}</title>`),t}return a&&s.update(u(r)),null},Qe=ze;import{mergeDataIntoQueryString as Ye,router as se,shouldIntercept as ae}from"@inertiajs/core";import{createElement as Ge,forwardRef as Xe,useEffect as ve,useMemo as be,useRef as Ze,useState as et}from"react";var x=()=>{},Ce=Xe(({children:r,as:e="a",data:i={},href:s,method:a="get",preserveScroll:f=!1,preserveState:d=null,replace:P=!1,only:c=[],except:m=[],headers:l={},queryStringArrayFormat:u="brackets",async:o=!1,onClick:t=x,onCancelToken:g=x,onBefore:F=x,onStart:b=x,onProgress:E=x,onFinish:Y=x,onCancel:j=x,onSuccess:G=x,onError:M=x,prefetch:T=!1,cacheFor:k=0,...R},X)=>{let[$,L]=et(0),H=Ze(null);e=e.toLowerCase(),a=typeof s=="object"?s.method:a.toLowerCase();let[Z,ee]=Ye(a,typeof s=="object"?s.url:s||"",i,u),w=Z;i=ee;let A={data:i,method:a,preserveScroll:f,preserveState:d??a!=="get",replace:P,only:c,except:m,headers:l,async:o},W={...A,onCancelToken:g,onBefore:F,onStart(p){L(y=>y+1),b(p)},onProgress:E,onFinish(p){L(y=>y-1),Y(p)},onCancel:j,onSuccess:G,onError:M},K=()=>{se.prefetch(w,A,{cacheFor:te})},D=be(()=>T===!0?["hover"]:T===!1?[]:Array.isArray(T)?T:[T],Array.isArray(T)?T:[T]),te=be(()=>k!==0?k:D.length===1&&D[0]==="click"?0:3e4,[k,D]);ve(()=>()=>{clearTimeout(H.current)},[]),ve(()=>{D.includes("mount")&&setTimeout(()=>K())},D);let _={onClick:p=>{t(p),ae(p)&&(p.preventDefault(),se.visit(w,W))}},re={onMouseEnter:()=>{H.current=window.setTimeout(()=>{K()},75)},onMouseLeave:()=>{clearTimeout(H.current)},onClick:_.onClick},oe={onMouseDown:p=>{ae(p)&&(p.preventDefault(),K())},onMouseUp:p=>{p.preventDefault(),se.visit(w,W)},onClick:p=>{t(p),ae(p)&&p.preventDefault()}};return a!=="get"&&(e="button"),Ge(e,{...R,...{a:{href:w},button:{type:"button"}}[e]||{},ref:X,...D.includes("hover")?re:D.includes("click")?oe:_,"data-loading":$>0?"":void 0},r)});Ce.displayName="InertiaLink";var tt=Ce;import{router as De}from"@inertiajs/core";import{cloneDeep as z,isEqual as nt}from"es-toolkit";import{get as st,has as at,set as ie}from"es-toolkit/compat";import{useCallback as v,useEffect as it,useLayoutEffect as pt,useMemo as ut,useRef as Q,useState as I}from"react";import{router as Re}from"@inertiajs/core";import{useEffect as rt,useState as ot}from"react";function U(r,e){let[i,s]=ot(()=>{let a=Re.restore(e);return a!==void 0?a:r});return rt(()=>{Re.remember(i,e)},[i,e]),[i,s]}function xe(r,e){let i=Q(null),s=typeof r=="string"?r:null,[a,f]=I((typeof r=="string"?e:r)||{}),d=Q(null),P=Q(null),[c,m]=s?U(a,`${s}:data`):I(a),[l,u]=s?U({},`${s}:errors`):I({}),[o,t]=I(!1),[g,F]=I(!1),[b,E]=I(null),[Y,j]=I(!1),[G,M]=I(!1),T=Q(n=>n),k=ut(()=>!nt(c,a),[c,a]);it(()=>(i.current=!0,()=>{i.current=!1}),[]);let R=v((...n)=>{let p=typeof n[0]=="object",y=p?n[0].method:n[0],C=p?n[0].url:n[1],h=(p?n[1]:n[2])??{},ce={...h,onCancelToken:S=>{if(d.current=S,h.onCancelToken)return h.onCancelToken(S)},onBefore:S=>{if(j(!1),M(!1),clearTimeout(P.current),h.onBefore)return h.onBefore(S)},onStart:S=>{if(F(!0),h.onStart)return h.onStart(S)},onProgress:S=>{if(E(S),h.onProgress)return h.onProgress(S)},onSuccess:S=>{if(i.current&&(F(!1),E(null),u({}),t(!1),j(!0),M(!0),f(z(c)),P.current=setTimeout(()=>{i.current&&M(!1)},2e3)),h.onSuccess)return h.onSuccess(S)},onError:S=>{if(i.current&&(F(!1),E(null),u(S),t(!0)),h.onError)return h.onError(S)},onCancel:()=>{if(i.current&&(F(!1),E(null)),h.onCancel)return h.onCancel()},onFinish:S=>{if(i.current&&(F(!1),E(null)),d.current=null,h.onFinish)return h.onFinish(S)}};y==="delete"?De.delete(C,{...ce,data:T.current(c)}):De[y](C,T.current(c),ce)},[c,u,T]),X=v((n,p)=>{m(typeof n=="string"?y=>ie(z(y),n,p):typeof n=="function"?y=>n(y):n)},[m]),[$,L]=I(!1),H=v((n,p)=>{typeof n>"u"?(f(c),L(!0)):f(y=>typeof n=="string"?ie(z(y),n,p):Object.assign(z(y),n))},[c,f]);pt(()=>{$&&(k&&f(c),L(!1))},[$]);let Z=v((...n)=>{n.length===0?m(a):m(p=>n.filter(y=>at(a,y)).reduce((y,C)=>ie(y,C,st(a,C)),{...p}))},[m,a]),ee=v((n,p)=>{u(y=>{let C={...y,...typeof n=="string"?{[n]:p}:n};return t(Object.keys(C).length>0),C})},[u,t]),w=v((...n)=>{u(p=>{let y=Object.keys(p).reduce((C,h)=>({...C,...n.length>0&&!n.includes(h)?{[h]:p[h]}:{}}),{});return t(Object.keys(y).length>0),y})},[u,t]),A=n=>(p,y)=>{R(n,p,y)},W=v(A("get"),[R]),K=v(A("post"),[R]),D=v(A("put"),[R]),te=v(A("patch"),[R]),_=v(A("delete"),[R]),re=v(()=>{d.current&&d.current.cancel()},[]),oe=v(n=>{T.current=n},[]);return{data:c,setData:X,isDirty:k,errors:l,hasErrors:o,processing:g,progress:b,wasSuccessful:Y,recentlySuccessful:G,transform:oe,setDefaults:H,reset:Z,setError:ee,clearErrors:w,submit:R,get:W,post:K,put:D,patch:te,delete:_,cancel:re}}import{router as ct}from"@inertiajs/core";import{useEffect as lt,useRef as dt}from"react";function Ie(r,e={},i={keepAlive:!1,autoStart:!0}){let s=dt(ct.poll(r,e,{...i,autoStart:!1}));return lt(()=>((i.autoStart??!0)&&s.current.start(),()=>s.current.stop()),[]),{stop:s.current.stop,start:s.current.start}}import{router as N}from"@inertiajs/core";import{useEffect as ft,useState as pe}from"react";function Ae(r={}){let e=typeof window>"u"?null:N.getCached(window.location.pathname,r),i=typeof window>"u"?null:N.getPrefetching(window.location.pathname,r),[s,a]=pe(e?.staleTimestamp||null),[f,d]=pe(i!==null),[P,c]=pe(e!==null);return ft(()=>{let m=N.on("prefetching",u=>{u.detail.visit.url.pathname===window.location.pathname&&d(!0)}),l=N.on("prefetched",u=>{u.detail.visit.url.pathname===window.location.pathname&&(d(!1),c(!0),a(u.detail.fetchedAt))});return()=>{l(),m()}},[]),{lastUpdatedAt:s,isPrefetching:f,isPrefetched:P,flush:()=>N.flush(window.location.pathname,r)}}import{router as mt}from"@inertiajs/core";import{createElement as gt,useCallback as yt,useEffect as Pt,useRef as ue,useState as ht}from"react";var Ee=({children:r,data:e,params:i,buffer:s,as:a,always:f,fallback:d})=>{f=f??!1,a=a??"div",d=d??null;let[P,c]=ht(!1),m=ue(!1),l=ue(!1),u=ue(null),o=yt(()=>{if(e)return{only:Array.isArray(e)?e:[e]};if(!i)throw new Error("You must provide either a `data` or `params` prop.");return i},[i,e]);return Pt(()=>{if(!u.current)return;let t=new IntersectionObserver(g=>{if(!g[0].isIntersecting||(!f&&m.current&&t.disconnect(),l.current))return;m.current=!0,l.current=!0;let F=o();mt.reload({...F,onStart:b=>{l.current=!0,F.onStart?.(b)},onFinish:b=>{c(!0),l.current=!1,F.onFinish?.(b),f||t.disconnect()}})},{rootMargin:`${s||0}px`});return t.observe(u.current),()=>{t.disconnect()}},[u,o,s]),f||!P?gt(a,{props:null,ref:u},P?r:d):P?r:null};Ee.displayName="InertiaWhenVisible";var Ft=Ee;var Se=St;export{We as Deferred,Qe as Head,tt as Link,Ft as WhenVisible,ye as createInertiaApp,Se as router,xe as useForm,J as usePage,Ie as usePoll,Ae as usePrefetch,U as useRemember};
// src/index.ts
import { router as Router } from "@inertiajs/core";
// src/createInertiaApp.ts
import { router as router2, setupProgress } from "@inertiajs/core";
import { createElement as createElement2 } from "react";
// src/App.ts
import { createHeadManager, router } from "@inertiajs/core";
import { createElement, useEffect, useMemo, useState } from "react";
// src/HeadContext.ts
import { createContext } from "react";
var headContext = createContext(void 0);
headContext.displayName = "InertiaHeadContext";
var HeadContext_default = headContext;
// src/PageContext.ts
import { createContext as createContext2 } from "react";
var pageContext = createContext2(void 0);
pageContext.displayName = "InertiaPageContext";
var PageContext_default = pageContext;
// src/App.ts
var currentIsInitialPage = true;
var routerIsInitialized = false;
var swapComponent = async () => {
currentIsInitialPage = false;
};
function App({
children,
initialPage,
initialComponent,
resolveComponent,
titleCallback,
onHeadUpdate
}) {
const [current, setCurrent] = useState({
component: initialComponent || null,
page: initialPage,
key: null
});
const headManager = useMemo(() => {
return createHeadManager(
typeof window === "undefined",
titleCallback || ((title) => title),
onHeadUpdate || (() => {
})
);
}, []);
if (!routerIsInitialized) {
router.init({
initialPage,
resolveComponent,
swapComponent: async (args) => swapComponent(args)
});
routerIsInitialized = true;
}
useEffect(() => {
swapComponent = async ({ component, page, preserveState }) => {
if (currentIsInitialPage) {
currentIsInitialPage = false;
return;
}
setCurrent((current2) => ({
component,
page,
key: preserveState ? current2.key : Date.now()
}));
};
router.on("navigate", () => headManager.forceUpdate());
}, []);
if (!current.component) {
return createElement(
HeadContext_default.Provider,
{ value: headManager },
createElement(PageContext_default.Provider, { value: current.page }, null)
);
}
const renderChildren = children || (({ Component, props, key }) => {
const child = createElement(Component, { key, ...props });
if (typeof Component.layout === "function") {
return Component.layout(child);
}
if (Array.isArray(Component.layout)) {
return Component.layout.concat(child).reverse().reduce((children2, Layout) => createElement(Layout, { children: children2, ...props }));
}
return child;
});
return createElement(
HeadContext_default.Provider,
{ value: headManager },
createElement(
PageContext_default.Provider,
{ value: current.page },
renderChildren({
Component: current.component,
key: current.key,
props: current.page.props
})
)
);
}
App.displayName = "Inertia";
// src/createInertiaApp.ts
async function createInertiaApp({
id = "app",
resolve,
setup,
title,
progress = {},
page,
render
}) {
const isServer = typeof window === "undefined";
const el = isServer ? null : document.getElementById(id);
const initialPage = page || JSON.parse(el.dataset.page);
const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module);
let head = [];
const reactApp = await Promise.all([
resolveComponent(initialPage.component),
router2.decryptHistory().catch(() => {
})
]).then(([initialComponent]) => {
return setup({
// @ts-expect-error
el,
App,
props: {
initialPage,
initialComponent,
resolveComponent,
titleCallback: title,
onHeadUpdate: isServer ? (elements) => head = elements : null
}
});
});
if (!isServer && progress) {
setupProgress(progress);
}
if (isServer) {
const body = await render(
createElement2(
"div",
{
id,
"data-page": JSON.stringify(initialPage)
},
// @ts-expect-error
reactApp
)
);
return { head, body };
}
}
// src/Deferred.ts
import { useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
// src/usePage.ts
import { useContext } from "react";
function usePage() {
const page = useContext(PageContext_default);
if (!page) {
throw new Error("usePage must be used within the Inertia component");
}
return page;
}
// src/Deferred.ts
var urlWithoutHash = (url) => {
url = new URL(url.href);
url.hash = "";
return url;
};
var isSameUrlWithoutHash = (url1, url2) => {
return urlWithoutHash(url1).href === urlWithoutHash(url2).href;
};
var Deferred = ({ children, data, fallback }) => {
if (!data) {
throw new Error("`<Deferred>` requires a `data` prop to be a string or array of strings");
}
const [loaded, setLoaded] = useState2(false);
const pageProps = usePage().props;
const keys = useMemo2(() => Array.isArray(data) ? data : [data], [data]);
useEffect2(() => {
const removeListener = router3.on("start", (e) => {
const isPartialVisit = e.detail.visit.only.length > 0 || e.detail.visit.except.length > 0;
const isReloadingKey = e.detail.visit.only.find((key) => keys.includes(key));
if (isSameUrlWithoutHash(e.detail.visit.url, window.location) && (!isPartialVisit || isReloadingKey)) {
setLoaded(false);
}
});
return () => {
removeListener();
};
}, []);
useEffect2(() => {
setLoaded(keys.every((key) => pageProps[key] !== void 0));
}, [pageProps, keys]);
return loaded ? children : fallback;
};
Deferred.displayName = "InertiaDeferred";
var Deferred_default = Deferred;
// src/Head.ts
import { escape } from "es-toolkit";
import React, { useContext as useContext2, useEffect as useEffect3, useMemo as useMemo3 } from "react";
var Head = function({ children, title }) {
const headManager = useContext2(HeadContext_default);
const provider = useMemo3(() => headManager.createProvider(), [headManager]);
const isServer = typeof window === "undefined";
useEffect3(() => {
provider.reconnect();
provider.update(renderNodes(children));
return () => {
provider.disconnect();
};
}, [provider, children, title]);
function isUnaryTag(node) {
return [
"area",
"base",
"br",
"col",
"embed",
"hr",
"img",
"input",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"
].indexOf(node.type) > -1;
}
function renderTagStart(node) {
const attrs = Object.keys(node.props).reduce((carry, name) => {
if (["head-key", "children", "dangerouslySetInnerHTML"].includes(name)) {
return carry;
}
const value = node.props[name];
if (value === "") {
return carry + ` ${name}`;
} else {
return carry + ` ${name}="${escape(value)}"`;
}
}, "");
return `<${node.type}${attrs}>`;
}
function renderTagChildren(node) {
return typeof node.props.children === "string" ? node.props.children : node.props.children.reduce((html, child) => html + renderTag(child), "");
}
function renderTag(node) {
let html = renderTagStart(node);
if (node.props.children) {
html += renderTagChildren(node);
}
if (node.props.dangerouslySetInnerHTML) {
html += node.props.dangerouslySetInnerHTML.__html;
}
if (!isUnaryTag(node)) {
html += `</${node.type}>`;
}
return html;
}
function ensureNodeHasInertiaProp(node) {
return React.cloneElement(node, {
inertia: node.props["head-key"] !== void 0 ? node.props["head-key"] : ""
});
}
function renderNode(node) {
return renderTag(ensureNodeHasInertiaProp(node));
}
function renderNodes(nodes) {
const computed = React.Children.toArray(nodes).filter((node) => node).map((node) => renderNode(node));
if (title && !computed.find((tag) => tag.startsWith("<title"))) {
computed.push(`<title inertia>${title}</title>`);
}
return computed;
}
if (isServer) {
provider.update(renderNodes(children));
}
return null;
};
var Head_default = Head;
// src/Link.ts
import {
mergeDataIntoQueryString,
router as router4,
shouldIntercept
} from "@inertiajs/core";
import { createElement as createElement3, forwardRef, useEffect as useEffect4, useMemo as useMemo4, useRef, useState as useState3 } from "react";
var noop = () => void 0;
var Link = forwardRef(
({
children,
as = "a",
data = {},
href,
method = "get",
preserveScroll = false,
preserveState = null,
replace = false,
only = [],
except = [],
headers = {},
queryStringArrayFormat = "brackets",
async = false,
onClick = noop,
onCancelToken = noop,
onBefore = noop,
onStart = noop,
onProgress = noop,
onFinish = noop,
onCancel = noop,
onSuccess = noop,
onError = noop,
prefetch = false,
cacheFor = 0,
...props
}, ref) => {
const [inFlightCount, setInFlightCount] = useState3(0);
const hoverTimeout = useRef(null);
const _method = useMemo4(() => {
return typeof href === "object" ? href.method : method.toLowerCase();
}, [href, method]);
const _as = useMemo4(() => {
as = as.toLowerCase();
return _method !== "get" ? "button" : as;
}, [as, _method]);
const mergeDataArray = useMemo4(
() => mergeDataIntoQueryString(
_method,
typeof href === "object" ? href.url : href || "",
data,
queryStringArrayFormat
),
[href, _method, data, queryStringArrayFormat]
);
const url = useMemo4(() => mergeDataArray[0], [mergeDataArray]);
const _data = useMemo4(() => mergeDataArray[1], [mergeDataArray]);
const baseParams = useMemo4(
() => ({
data: _data,
method: _method,
preserveScroll,
preserveState: preserveState ?? _method !== "get",
replace,
only,
except,
headers,
async
}),
[_data, _method, preserveScroll, preserveState, replace, only, except, headers, async]
);
const visitParams = useMemo4(
() => ({
...baseParams,
onCancelToken,
onBefore,
onStart(event) {
setInFlightCount((count) => count + 1);
onStart(event);
},
onProgress,
onFinish(event) {
setInFlightCount((count) => count - 1);
onFinish(event);
},
onCancel,
onSuccess,
onError
}),
[baseParams, onCancelToken, onBefore, onStart, onProgress, onFinish, onCancel, onSuccess, onError]
);
const doPrefetch = () => {
router4.prefetch(url, baseParams, { cacheFor: cacheForValue });
};
const prefetchModes = useMemo4(
() => {
if (prefetch === true) {
return ["hover"];
}
if (prefetch === false) {
return [];
}
if (Array.isArray(prefetch)) {
return prefetch;
}
return [prefetch];
},
Array.isArray(prefetch) ? prefetch : [prefetch]
);
const cacheForValue = useMemo4(() => {
if (cacheFor !== 0) {
return cacheFor;
}
if (prefetchModes.length === 1 && prefetchModes[0] === "click") {
return 0;
}
return 3e4;
}, [cacheFor, prefetchModes]);
useEffect4(() => {
return () => {
clearTimeout(hoverTimeout.current);
};
}, []);
useEffect4(() => {
if (prefetchModes.includes("mount")) {
setTimeout(() => doPrefetch());
}
}, prefetchModes);
const regularEvents = {
onClick: (event) => {
onClick(event);
if (shouldIntercept(event)) {
event.preventDefault();
router4.visit(url, visitParams);
}
}
};
const prefetchHoverEvents = {
onMouseEnter: () => {
hoverTimeout.current = window.setTimeout(() => {
doPrefetch();
}, 75);
},
onMouseLeave: () => {
clearTimeout(hoverTimeout.current);
},
onClick: regularEvents.onClick
};
const prefetchClickEvents = {
onMouseDown: (event) => {
if (shouldIntercept(event)) {
event.preventDefault();
doPrefetch();
}
},
onMouseUp: (event) => {
event.preventDefault();
router4.visit(url, visitParams);
},
onClick: (event) => {
onClick(event);
if (shouldIntercept(event)) {
event.preventDefault();
}
}
};
const elProps = useMemo4(
() => ({
a: { href: url },
button: { type: "button" }
}),
[url]
);
return createElement3(
_as,
{
...props,
...elProps[_as] || {},
ref,
...(() => {
if (prefetchModes.includes("hover")) {
return prefetchHoverEvents;
}
if (prefetchModes.includes("click")) {
return prefetchClickEvents;
}
return regularEvents;
})(),
"data-loading": inFlightCount > 0 ? "" : void 0
},
children
);
}
);
Link.displayName = "InertiaLink";
var Link_default = Link;
// src/useForm.ts
import {
router as router6
} from "@inertiajs/core";
import { cloneDeep, isEqual } from "es-toolkit";
import { get, has, set } from "es-toolkit/compat";
import { useCallback, useEffect as useEffect6, useLayoutEffect, useMemo as useMemo5, useRef as useRef2, useState as useState5 } from "react";
// src/useRemember.ts
import { router as router5 } from "@inertiajs/core";
import { useEffect as useEffect5, useState as useState4 } from "react";
function useRemember(initialState, key) {
const [state, setState] = useState4(() => {
const restored = router5.restore(key);
return restored !== void 0 ? restored : initialState;
});
useEffect5(() => {
router5.remember(state, key);
}, [state, key]);
return [state, setState];
}
// src/useForm.ts
function useForm(rememberKeyOrInitialValues, maybeInitialValues) {
const isMounted = useRef2(null);
const rememberKey = typeof rememberKeyOrInitialValues === "string" ? rememberKeyOrInitialValues : null;
const [defaults, setDefaults] = useState5(
(typeof rememberKeyOrInitialValues === "string" ? maybeInitialValues : rememberKeyOrInitialValues) || {}
);
const cancelToken = useRef2(null);
const recentlySuccessfulTimeoutId = useRef2(null);
const [data, setData] = rememberKey ? useRemember(defaults, `${rememberKey}:data`) : useState5(defaults);
const [errors, setErrors] = rememberKey ? useRemember({}, `${rememberKey}:errors`) : useState5({});
const [hasErrors, setHasErrors] = useState5(false);
const [processing, setProcessing] = useState5(false);
const [progress, setProgress] = useState5(null);
const [wasSuccessful, setWasSuccessful] = useState5(false);
const [recentlySuccessful, setRecentlySuccessful] = useState5(false);
const transform = useRef2((data2) => data2);
const isDirty = useMemo5(() => !isEqual(data, defaults), [data, defaults]);
useEffect6(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
const submit = useCallback(
(...args) => {
const objectPassed = typeof args[0] === "object";
const method = objectPassed ? args[0].method : args[0];
const url = objectPassed ? args[0].url : args[1];
const options = (objectPassed ? args[1] : args[2]) ?? {};
const _options = {
...options,
onCancelToken: (token) => {
cancelToken.current = token;
if (options.onCancelToken) {
return options.onCancelToken(token);
}
},
onBefore: (visit) => {
setWasSuccessful(false);
setRecentlySuccessful(false);
clearTimeout(recentlySuccessfulTimeoutId.current);
if (options.onBefore) {
return options.onBefore(visit);
}
},
onStart: (visit) => {
setProcessing(true);
if (options.onStart) {
return options.onStart(visit);
}
},
onProgress: (event) => {
setProgress(event);
if (options.onProgress) {
return options.onProgress(event);
}
},
onSuccess: (page) => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
setErrors({});
setHasErrors(false);
setWasSuccessful(true);
setRecentlySuccessful(true);
setDefaults(cloneDeep(data));
recentlySuccessfulTimeoutId.current = setTimeout(() => {
if (isMounted.current) {
setRecentlySuccessful(false);
}
}, 2e3);
}
if (options.onSuccess) {
return options.onSuccess(page);
}
},
onError: (errors2) => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
setErrors(errors2);
setHasErrors(true);
}
if (options.onError) {
return options.onError(errors2);
}
},
onCancel: () => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
}
if (options.onCancel) {
return options.onCancel();
}
},
onFinish: (visit) => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
}
cancelToken.current = null;
if (options.onFinish) {
return options.onFinish(visit);
}
}
};
if (method === "delete") {
router6.delete(url, { ..._options, data: transform.current(data) });
} else {
router6[method](url, transform.current(data), _options);
}
},
[data, setErrors, transform]
);
const setDataFunction = useCallback(
(keyOrData, maybeValue) => {
if (typeof keyOrData === "string") {
setData((data2) => set(cloneDeep(data2), keyOrData, maybeValue));
} else if (typeof keyOrData === "function") {
setData((data2) => keyOrData(data2));
} else {
setData(keyOrData);
}
},
[setData]
);
const [dataAsDefaults, setDataAsDefaults] = useState5(false);
const setDefaultsFunction = useCallback(
(fieldOrFields, maybeValue) => {
if (typeof fieldOrFields === "undefined") {
setDefaults(data);
setDataAsDefaults(true);
} else {
setDefaults((defaults2) => {
return typeof fieldOrFields === "string" ? set(cloneDeep(defaults2), fieldOrFields, maybeValue) : Object.assign(cloneDeep(defaults2), fieldOrFields);
});
}
},
[data, setDefaults]
);
useLayoutEffect(() => {
if (!dataAsDefaults) {
return;
}
if (isDirty) {
setDefaults(data);
}
setDataAsDefaults(false);
}, [dataAsDefaults]);
const reset = useCallback(
(...fields) => {
if (fields.length === 0) {
setData(defaults);
} else {
setData(
(data2) => fields.filter((key) => has(defaults, key)).reduce(
(carry, key) => {
return set(carry, key, get(defaults, key));
},
{ ...data2 }
)
);
}
},
[setData, defaults]
);
const setError = useCallback(
(fieldOrFields, maybeValue) => {
setErrors((errors2) => {
const newErrors = {
...errors2,
...typeof fieldOrFields === "string" ? { [fieldOrFields]: maybeValue } : fieldOrFields
};
setHasErrors(Object.keys(newErrors).length > 0);
return newErrors;
});
},
[setErrors, setHasErrors]
);
const clearErrors = useCallback(
(...fields) => {
setErrors((errors2) => {
const newErrors = Object.keys(errors2).reduce(
(carry, field) => ({
...carry,
...fields.length > 0 && !fields.includes(field) ? { [field]: errors2[field] } : {}
}),
{}
);
setHasErrors(Object.keys(newErrors).length > 0);
return newErrors;
});
},
[setErrors, setHasErrors]
);
const resetAndClearErrors = useCallback(
(...fields) => {
reset(...fields);
clearErrors(...fields);
},
[reset, clearErrors]
);
const createSubmitMethod = (method) => (url, options) => {
submit(method, url, options);
};
const getMethod = useCallback(createSubmitMethod("get"), [submit]);
const post = useCallback(createSubmitMethod("post"), [submit]);
const put = useCallback(createSubmitMethod("put"), [submit]);
const patch = useCallback(createSubmitMethod("patch"), [submit]);
const deleteMethod = useCallback(createSubmitMethod("delete"), [submit]);
const cancel = useCallback(() => {
if (cancelToken.current) {
cancelToken.current.cancel();
}
}, []);
const transformFunction = useCallback((callback) => {
transform.current = callback;
}, []);
return {
data,
setData: setDataFunction,
isDirty,
errors,
hasErrors,
processing,
progress,
wasSuccessful,
recentlySuccessful,
transform: transformFunction,
setDefaults: setDefaultsFunction,
reset,
setError,
clearErrors,
resetAndClearErrors,
submit,
get: getMethod,
post,
put,
patch,
delete: deleteMethod,
cancel
};
}
// src/usePoll.ts
import { router as router7 } from "@inertiajs/core";
import { useEffect as useEffect7, useRef as useRef3 } from "react";
function usePoll(interval, requestOptions = {}, options = {
keepAlive: false,
autoStart: true
}) {
const pollRef = useRef3(
router7.poll(interval, requestOptions, {
...options,
autoStart: false
})
);
useEffect7(() => {
if (options.autoStart ?? true) {
pollRef.current.start();
}
return () => pollRef.current.stop();
}, []);
return {
stop: pollRef.current.stop,
start: pollRef.current.start
};
}
// src/usePrefetch.ts
import { router as router8 } from "@inertiajs/core";
import { useEffect as useEffect8, useState as useState6 } from "react";
function usePrefetch(options = {}) {
const cached = typeof window === "undefined" ? null : router8.getCached(window.location.pathname, options);
const inFlight = typeof window === "undefined" ? null : router8.getPrefetching(window.location.pathname, options);
const [lastUpdatedAt, setLastUpdatedAt] = useState6(cached?.staleTimestamp || null);
const [isPrefetching, setIsPrefetching] = useState6(inFlight !== null);
const [isPrefetched, setIsPrefetched] = useState6(cached !== null);
useEffect8(() => {
const onPrefetchingListener = router8.on("prefetching", (e) => {
if (e.detail.visit.url.pathname === window.location.pathname) {
setIsPrefetching(true);
}
});
const onPrefetchedListener = router8.on("prefetched", (e) => {
if (e.detail.visit.url.pathname === window.location.pathname) {
setIsPrefetching(false);
setIsPrefetched(true);
setLastUpdatedAt(e.detail.fetchedAt);
}
});
return () => {
onPrefetchedListener();
onPrefetchingListener();
};
}, []);
return {
lastUpdatedAt,
isPrefetching,
isPrefetched,
flush: () => router8.flush(window.location.pathname, options)
};
}
// src/WhenVisible.ts
import { router as router9 } from "@inertiajs/core";
import { createElement as createElement4, useCallback as useCallback2, useEffect as useEffect9, useRef as useRef4, useState as useState7 } from "react";
var WhenVisible = ({ children, data, params, buffer, as, always, fallback }) => {
always = always ?? false;
as = as ?? "div";
fallback = fallback ?? null;
const [loaded, setLoaded] = useState7(false);
const hasFetched = useRef4(false);
const fetching = useRef4(false);
const ref = useRef4(null);
const getReloadParams = useCallback2(() => {
if (data) {
return {
only: Array.isArray(data) ? data : [data]
};
}
if (!params) {
throw new Error("You must provide either a `data` or `params` prop.");
}
return params;
}, [params, data]);
useEffect9(() => {
if (!ref.current) {
return;
}
const observer = new IntersectionObserver(
(entries) => {
if (!entries[0].isIntersecting) {
return;
}
if (!always && hasFetched.current) {
observer.disconnect();
}
if (fetching.current) {
return;
}
hasFetched.current = true;
fetching.current = true;
const reloadParams = getReloadParams();
router9.reload({
...reloadParams,
onStart: (e) => {
fetching.current = true;
reloadParams.onStart?.(e);
},
onFinish: (e) => {
setLoaded(true);
fetching.current = false;
reloadParams.onFinish?.(e);
if (!always) {
observer.disconnect();
}
}
});
},
{
rootMargin: `${buffer || 0}px`
}
);
observer.observe(ref.current);
return () => {
observer.disconnect();
};
}, [ref, getReloadParams, buffer]);
if (always || !loaded) {
return createElement4(
as,
{
props: null,
ref
},
loaded ? children : fallback
);
}
return loaded ? children : null;
};
WhenVisible.displayName = "InertiaWhenVisible";
var WhenVisible_default = WhenVisible;
// src/index.ts
var router3 = Router;
export {
Deferred_default as Deferred,
Head_default as Head,
Link_default as Link,
WhenVisible_default as WhenVisible,
createInertiaApp,
router3 as router,
useForm,
usePage,
usePoll,
usePrefetch,
useRemember
};
//# sourceMappingURL=index.esm.js.map

@@ -1,2 +0,935 @@

var $e=Object.create;var te=Object.defineProperty;var We=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var qe=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var ze=(e,t)=>{for(var r in t)te(e,r,{get:t[r],enumerable:!0})},be=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of _e(t))!Je.call(e,o)&&o!==r&&te(e,o,{get:()=>t[o],enumerable:!(a=We(t,o))||a.enumerable});return e};var Qe=(e,t,r)=>(r=e!=null?$e(qe(e)):{},be(t||!e||!e.__esModule?te(r,"default",{value:e,enumerable:!0}):r,e)),Ye=e=>be(te({},"__esModule",{value:!0}),e);var Ze={};ze(Ze,{Deferred:()=>Me,Head:()=>Le,Link:()=>Ke,WhenVisible:()=>Ne,createInertiaApp:()=>ge,router:()=>ye,useForm:()=>Fe,usePage:()=>Y,usePoll:()=>Se,usePrefetch:()=>Te,useRemember:()=>U});module.exports=Ye(Ze);var je=require("@inertiajs/core");var oe=require("@inertiajs/core"),Ee=require("react");var Q=require("@inertiajs/core"),C=require("react");var Ce=require("react"),Re=(0,Ce.createContext)(void 0);Re.displayName="InertiaHeadContext";var J=Re;var De=require("react"),xe=(0,De.createContext)(void 0);xe.displayName="InertiaPageContext";var z=xe;var me=!0,Ie=!1,Ae=async()=>{me=!1};function re({children:e,initialPage:t,initialComponent:r,resolveComponent:a,titleCallback:o,onHeadUpdate:m}){let[f,h]=(0,C.useState)({component:r||null,page:t,key:null}),l=(0,C.useMemo)(()=>(0,Q.createHeadManager)(typeof window>"u",o||(d=>d),m||(()=>{})),[]);if(Ie||(Q.router.init({initialPage:t,resolveComponent:a,swapComponent:async d=>Ae(d)}),Ie=!0),(0,C.useEffect)(()=>{Ae=async({component:d,page:c,preserveState:s})=>{if(me){me=!1;return}h(n=>({component:d,page:c,key:s?n.key:Date.now()}))},Q.router.on("navigate",()=>l.forceUpdate())},[]),!f.component)return(0,C.createElement)(J.Provider,{value:l},(0,C.createElement)(z.Provider,{value:f.page},null));let g=e||(({Component:d,props:c,key:s})=>{let n=(0,C.createElement)(d,{key:s,...c});return typeof d.layout=="function"?d.layout(n):Array.isArray(d.layout)?d.layout.concat(n).reverse().reduce((y,S)=>(0,C.createElement)(S,{children:y,...c})):n});return(0,C.createElement)(J.Provider,{value:l},(0,C.createElement)(z.Provider,{value:f.page},g({Component:f.component,key:f.key,props:f.page.props})))}re.displayName="Inertia";async function ge({id:e="app",resolve:t,setup:r,title:a,progress:o={},page:m,render:f}){let h=typeof window>"u",l=h?null:document.getElementById(e),g=m||JSON.parse(l.dataset.page),d=n=>Promise.resolve(t(n)).then(y=>y.default||y),c=[],s=await Promise.all([d(g.component),oe.router.decryptHistory().catch(()=>{})]).then(([n])=>r({el:l,App:re,props:{initialPage:g,initialComponent:n,resolveComponent:d,titleCallback:a,onHeadUpdate:h?y=>c=y:null}}));if(!h&&o&&(0,oe.setupProgress)(o),h){let n=await f((0,Ee.createElement)("div",{id:e,"data-page":JSON.stringify(g)},s));return{head:c,body:n}}}var H=require("react");var ke=require("react");function Y(){let e=(0,ke.useContext)(z);if(!e)throw new Error("usePage must be used within the Inertia component");return e}var we=e=>(e=new URL(e.href),e.hash="",e),Ge=(e,t)=>we(e).href===we(t).href,Oe=({children:e,data:t,fallback:r})=>{if(!t)throw new Error("`<Deferred>` requires a `data` prop to be a string or array of strings");let[a,o]=(0,H.useState)(!1),m=Y().props,f=(0,H.useMemo)(()=>Array.isArray(t)?t:[t],[t]);return(0,H.useEffect)(()=>{let h=ye.on("start",l=>{let g=l.detail.visit.only.length>0||l.detail.visit.except.length>0,d=l.detail.visit.only.find(c=>f.includes(c));Ge(l.detail.visit.url,window.location)&&(!g||d)&&o(!1)});return()=>{h()}},[]),(0,H.useEffect)(()=>{o(f.every(h=>m[h]!==void 0))},[m,f]),a?e:r};Oe.displayName="InertiaDeferred";var Me=Oe;var k=Qe(require("react"),1);var Xe=function({children:e,title:t}){let r=(0,k.useContext)(J),a=(0,k.useMemo)(()=>r.createProvider(),[r]),o=typeof window>"u";(0,k.useEffect)(()=>(a.reconnect(),a.update(c(e)),()=>{a.disconnect()}),[a,e,t]);function m(s){return["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(s.type)>-1}function f(s){let n=Object.keys(s.props).reduce((y,S)=>{if(["head-key","children","dangerouslySetInnerHTML"].includes(S))return y;let D=s.props[S];return D===""?y+` ${S}`:y+` ${S}="${D}"`},"");return`<${s.type}${n}>`}function h(s){return typeof s.props.children=="string"?s.props.children:s.props.children.reduce((n,y)=>n+l(y),"")}function l(s){let n=f(s);return s.props.children&&(n+=h(s)),s.props.dangerouslySetInnerHTML&&(n+=s.props.dangerouslySetInnerHTML.__html),m(s)||(n+=`</${s.type}>`),n}function g(s){return k.default.cloneElement(s,{inertia:s.props["head-key"]!==void 0?s.props["head-key"]:""})}function d(s){return l(g(s))}function c(s){let n=k.default.Children.toArray(s).filter(y=>y).map(y=>d(y));return t&&!n.find(y=>y.startsWith("<title"))&&n.push(`<title inertia>${t}</title>`),n}return o&&a.update(c(e)),null},Le=Xe;var I=require("@inertiajs/core"),v=require("react"),w=()=>{},He=(0,v.forwardRef)(({children:e,as:t="a",data:r={},href:a,method:o="get",preserveScroll:m=!1,preserveState:f=null,replace:h=!1,only:l=[],except:g=[],headers:d={},queryStringArrayFormat:c="brackets",async:s=!1,onClick:n=w,onCancelToken:y=w,onBefore:S=w,onStart:D=w,onProgress:L=w,onFinish:ae=w,onCancel:G=w,onSuccess:ie=w,onError:$=w,prefetch:b=!1,cacheFor:B=0,...A},pe)=>{let[X,W]=(0,v.useState)(0),_=(0,v.useRef)(null);t=t.toLowerCase(),o=typeof a=="object"?a.method:o.toLowerCase();let[ue,ce]=(0,I.mergeDataIntoQueryString)(o,typeof a=="object"?a.url:a||"",r,c),V=ue;r=ce;let O={data:r,method:o,preserveScroll:m,preserveState:f??o!=="get",replace:h,only:l,except:g,headers:d,async:s},Z={...O,onCancelToken:y,onBefore:S,onStart(u){W(P=>P+1),D(u)},onProgress:L,onFinish(u){W(P=>P-1),ae(u)},onCancel:G,onSuccess:ie,onError:$},q=()=>{I.router.prefetch(V,O,{cacheFor:le})},E=(0,v.useMemo)(()=>b===!0?["hover"]:b===!1?[]:Array.isArray(b)?b:[b],Array.isArray(b)?b:[b]),le=(0,v.useMemo)(()=>B!==0?B:E.length===1&&E[0]==="click"?0:3e4,[B,E]);(0,v.useEffect)(()=>()=>{clearTimeout(_.current)},[]),(0,v.useEffect)(()=>{E.includes("mount")&&setTimeout(()=>q())},E);let ee={onClick:u=>{n(u),(0,I.shouldIntercept)(u)&&(u.preventDefault(),I.router.visit(V,Z))}},de={onMouseEnter:()=>{_.current=window.setTimeout(()=>{q()},75)},onMouseLeave:()=>{clearTimeout(_.current)},onClick:ee.onClick},fe={onMouseDown:u=>{(0,I.shouldIntercept)(u)&&(u.preventDefault(),q())},onMouseUp:u=>{u.preventDefault(),I.router.visit(V,Z)},onClick:u=>{n(u),(0,I.shouldIntercept)(u)&&u.preventDefault()}};return o!=="get"&&(t="button"),(0,v.createElement)(t,{...A,...{a:{href:V},button:{type:"button"}}[t]||{},ref:pe,...E.includes("hover")?de:E.includes("click")?fe:ee,"data-loading":X>0?"":void 0},e)});He.displayName="InertiaLink";var Ke=He;var he=require("@inertiajs/core"),K=require("es-toolkit"),M=require("es-toolkit/compat"),p=require("react");var Pe=require("@inertiajs/core"),ne=require("react");function U(e,t){let[r,a]=(0,ne.useState)(()=>{let o=Pe.router.restore(t);return o!==void 0?o:e});return(0,ne.useEffect)(()=>{Pe.router.remember(r,t)},[r,t]),[r,a]}function Fe(e,t){let r=(0,p.useRef)(null),a=typeof e=="string"?e:null,[o,m]=(0,p.useState)((typeof e=="string"?t:e)||{}),f=(0,p.useRef)(null),h=(0,p.useRef)(null),[l,g]=a?U(o,`${a}:data`):(0,p.useState)(o),[d,c]=a?U({},`${a}:errors`):(0,p.useState)({}),[s,n]=(0,p.useState)(!1),[y,S]=(0,p.useState)(!1),[D,L]=(0,p.useState)(null),[ae,G]=(0,p.useState)(!1),[ie,$]=(0,p.useState)(!1),b=(0,p.useRef)(i=>i),B=(0,p.useMemo)(()=>!(0,K.isEqual)(l,o),[l,o]);(0,p.useEffect)(()=>(r.current=!0,()=>{r.current=!1}),[]);let A=(0,p.useCallback)((...i)=>{let u=typeof i[0]=="object",P=u?i[0].method:i[0],x=u?i[0].url:i[1],F=(u?i[1]:i[2])??{},ve={...F,onCancelToken:T=>{if(f.current=T,F.onCancelToken)return F.onCancelToken(T)},onBefore:T=>{if(G(!1),$(!1),clearTimeout(h.current),F.onBefore)return F.onBefore(T)},onStart:T=>{if(S(!0),F.onStart)return F.onStart(T)},onProgress:T=>{if(L(T),F.onProgress)return F.onProgress(T)},onSuccess:T=>{if(r.current&&(S(!1),L(null),c({}),n(!1),G(!0),$(!0),m((0,K.cloneDeep)(l)),h.current=setTimeout(()=>{r.current&&$(!1)},2e3)),F.onSuccess)return F.onSuccess(T)},onError:T=>{if(r.current&&(S(!1),L(null),c(T),n(!0)),F.onError)return F.onError(T)},onCancel:()=>{if(r.current&&(S(!1),L(null)),F.onCancel)return F.onCancel()},onFinish:T=>{if(r.current&&(S(!1),L(null)),f.current=null,F.onFinish)return F.onFinish(T)}};P==="delete"?he.router.delete(x,{...ve,data:b.current(l)}):he.router[P](x,b.current(l),ve)},[l,c,b]),pe=(0,p.useCallback)((i,u)=>{g(typeof i=="string"?P=>(0,M.set)((0,K.cloneDeep)(P),i,u):typeof i=="function"?P=>i(P):i)},[g]),[X,W]=(0,p.useState)(!1),_=(0,p.useCallback)((i,u)=>{typeof i>"u"?(m(l),W(!0)):m(P=>typeof i=="string"?(0,M.set)((0,K.cloneDeep)(P),i,u):Object.assign((0,K.cloneDeep)(P),i))},[l,m]);(0,p.useLayoutEffect)(()=>{X&&(B&&m(l),W(!1))},[X]);let ue=(0,p.useCallback)((...i)=>{i.length===0?g(o):g(u=>i.filter(P=>(0,M.has)(o,P)).reduce((P,x)=>(0,M.set)(P,x,(0,M.get)(o,x)),{...u}))},[g,o]),ce=(0,p.useCallback)((i,u)=>{c(P=>{let x={...P,...typeof i=="string"?{[i]:u}:i};return n(Object.keys(x).length>0),x})},[c,n]),V=(0,p.useCallback)((...i)=>{c(u=>{let P=Object.keys(u).reduce((x,F)=>({...x,...i.length>0&&!i.includes(F)?{[F]:u[F]}:{}}),{});return n(Object.keys(P).length>0),P})},[c,n]),O=i=>(u,P)=>{A(i,u,P)},Z=(0,p.useCallback)(O("get"),[A]),q=(0,p.useCallback)(O("post"),[A]),E=(0,p.useCallback)(O("put"),[A]),le=(0,p.useCallback)(O("patch"),[A]),ee=(0,p.useCallback)(O("delete"),[A]),de=(0,p.useCallback)(()=>{f.current&&f.current.cancel()},[]),fe=(0,p.useCallback)(i=>{b.current=i},[]);return{data:l,setData:pe,isDirty:B,errors:d,hasErrors:s,processing:y,progress:D,wasSuccessful:ae,recentlySuccessful:ie,transform:fe,setDefaults:_,reset:ue,setError:ce,clearErrors:V,submit:A,get:Z,post:q,put:E,patch:le,delete:ee,cancel:de}}var Be=require("@inertiajs/core"),se=require("react");function Se(e,t={},r={keepAlive:!1,autoStart:!0}){let a=(0,se.useRef)(Be.router.poll(e,t,{...r,autoStart:!1}));return(0,se.useEffect)(()=>((r.autoStart??!0)&&a.current.start(),()=>a.current.stop()),[]),{stop:a.current.stop,start:a.current.start}}var N=require("@inertiajs/core"),j=require("react");function Te(e={}){let t=typeof window>"u"?null:N.router.getCached(window.location.pathname,e),r=typeof window>"u"?null:N.router.getPrefetching(window.location.pathname,e),[a,o]=(0,j.useState)(t?.staleTimestamp||null),[m,f]=(0,j.useState)(r!==null),[h,l]=(0,j.useState)(t!==null);return(0,j.useEffect)(()=>{let g=N.router.on("prefetching",c=>{c.detail.visit.url.pathname===window.location.pathname&&f(!0)}),d=N.router.on("prefetched",c=>{c.detail.visit.url.pathname===window.location.pathname&&(f(!1),l(!0),o(c.detail.fetchedAt))});return()=>{d(),g()}},[]),{lastUpdatedAt:a,isPrefetching:m,isPrefetched:h,flush:()=>N.router.flush(window.location.pathname,e)}}var Ve=require("@inertiajs/core"),R=require("react"),Ue=({children:e,data:t,params:r,buffer:a,as:o,always:m,fallback:f})=>{m=m??!1,o=o??"div",f=f??null;let[h,l]=(0,R.useState)(!1),g=(0,R.useRef)(!1),d=(0,R.useRef)(!1),c=(0,R.useRef)(null),s=(0,R.useCallback)(()=>{if(t)return{only:Array.isArray(t)?t:[t]};if(!r)throw new Error("You must provide either a `data` or `params` prop.");return r},[r,t]);return(0,R.useEffect)(()=>{if(!c.current)return;let n=new IntersectionObserver(y=>{if(!y[0].isIntersecting||(!m&&g.current&&n.disconnect(),d.current))return;g.current=!0,d.current=!0;let S=s();Ve.router.reload({...S,onStart:D=>{d.current=!0,S.onStart?.(D)},onFinish:D=>{l(!0),d.current=!1,S.onFinish?.(D),m||n.disconnect()}})},{rootMargin:`${a||0}px`});return n.observe(c.current),()=>{n.disconnect()}},[c,s,a]),m||!h?(0,R.createElement)(o,{props:null,ref:c},h?e:f):h?e:null};Ue.displayName="InertiaWhenVisible";var Ne=Ue;var ye=je.router;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
Deferred: () => Deferred_default,
Head: () => Head_default,
Link: () => Link_default,
WhenVisible: () => WhenVisible_default,
createInertiaApp: () => createInertiaApp,
router: () => router3,
useForm: () => useForm,
usePage: () => usePage,
usePoll: () => usePoll,
usePrefetch: () => usePrefetch,
useRemember: () => useRemember
});
module.exports = __toCommonJS(index_exports);
var import_core9 = require("@inertiajs/core");
// src/createInertiaApp.ts
var import_core2 = require("@inertiajs/core");
var import_react4 = require("react");
// src/App.ts
var import_core = require("@inertiajs/core");
var import_react3 = require("react");
// src/HeadContext.ts
var import_react = require("react");
var headContext = (0, import_react.createContext)(void 0);
headContext.displayName = "InertiaHeadContext";
var HeadContext_default = headContext;
// src/PageContext.ts
var import_react2 = require("react");
var pageContext = (0, import_react2.createContext)(void 0);
pageContext.displayName = "InertiaPageContext";
var PageContext_default = pageContext;
// src/App.ts
var currentIsInitialPage = true;
var routerIsInitialized = false;
var swapComponent = async () => {
currentIsInitialPage = false;
};
function App({
children,
initialPage,
initialComponent,
resolveComponent,
titleCallback,
onHeadUpdate
}) {
const [current, setCurrent] = (0, import_react3.useState)({
component: initialComponent || null,
page: initialPage,
key: null
});
const headManager = (0, import_react3.useMemo)(() => {
return (0, import_core.createHeadManager)(
typeof window === "undefined",
titleCallback || ((title) => title),
onHeadUpdate || (() => {
})
);
}, []);
if (!routerIsInitialized) {
import_core.router.init({
initialPage,
resolveComponent,
swapComponent: async (args) => swapComponent(args)
});
routerIsInitialized = true;
}
(0, import_react3.useEffect)(() => {
swapComponent = async ({ component, page, preserveState }) => {
if (currentIsInitialPage) {
currentIsInitialPage = false;
return;
}
setCurrent((current2) => ({
component,
page,
key: preserveState ? current2.key : Date.now()
}));
};
import_core.router.on("navigate", () => headManager.forceUpdate());
}, []);
if (!current.component) {
return (0, import_react3.createElement)(
HeadContext_default.Provider,
{ value: headManager },
(0, import_react3.createElement)(PageContext_default.Provider, { value: current.page }, null)
);
}
const renderChildren = children || (({ Component, props, key }) => {
const child = (0, import_react3.createElement)(Component, { key, ...props });
if (typeof Component.layout === "function") {
return Component.layout(child);
}
if (Array.isArray(Component.layout)) {
return Component.layout.concat(child).reverse().reduce((children2, Layout) => (0, import_react3.createElement)(Layout, { children: children2, ...props }));
}
return child;
});
return (0, import_react3.createElement)(
HeadContext_default.Provider,
{ value: headManager },
(0, import_react3.createElement)(
PageContext_default.Provider,
{ value: current.page },
renderChildren({
Component: current.component,
key: current.key,
props: current.page.props
})
)
);
}
App.displayName = "Inertia";
// src/createInertiaApp.ts
async function createInertiaApp({
id = "app",
resolve,
setup,
title,
progress = {},
page,
render
}) {
const isServer = typeof window === "undefined";
const el = isServer ? null : document.getElementById(id);
const initialPage = page || JSON.parse(el.dataset.page);
const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module2) => module2.default || module2);
let head = [];
const reactApp = await Promise.all([
resolveComponent(initialPage.component),
import_core2.router.decryptHistory().catch(() => {
})
]).then(([initialComponent]) => {
return setup({
// @ts-expect-error
el,
App,
props: {
initialPage,
initialComponent,
resolveComponent,
titleCallback: title,
onHeadUpdate: isServer ? (elements) => head = elements : null
}
});
});
if (!isServer && progress) {
(0, import_core2.setupProgress)(progress);
}
if (isServer) {
const body = await render(
(0, import_react4.createElement)(
"div",
{
id,
"data-page": JSON.stringify(initialPage)
},
// @ts-expect-error
reactApp
)
);
return { head, body };
}
}
// src/Deferred.ts
var import_react6 = require("react");
// src/usePage.ts
var import_react5 = require("react");
function usePage() {
const page = (0, import_react5.useContext)(PageContext_default);
if (!page) {
throw new Error("usePage must be used within the Inertia component");
}
return page;
}
// src/Deferred.ts
var urlWithoutHash = (url) => {
url = new URL(url.href);
url.hash = "";
return url;
};
var isSameUrlWithoutHash = (url1, url2) => {
return urlWithoutHash(url1).href === urlWithoutHash(url2).href;
};
var Deferred = ({ children, data, fallback }) => {
if (!data) {
throw new Error("`<Deferred>` requires a `data` prop to be a string or array of strings");
}
const [loaded, setLoaded] = (0, import_react6.useState)(false);
const pageProps = usePage().props;
const keys = (0, import_react6.useMemo)(() => Array.isArray(data) ? data : [data], [data]);
(0, import_react6.useEffect)(() => {
const removeListener = router3.on("start", (e) => {
const isPartialVisit = e.detail.visit.only.length > 0 || e.detail.visit.except.length > 0;
const isReloadingKey = e.detail.visit.only.find((key) => keys.includes(key));
if (isSameUrlWithoutHash(e.detail.visit.url, window.location) && (!isPartialVisit || isReloadingKey)) {
setLoaded(false);
}
});
return () => {
removeListener();
};
}, []);
(0, import_react6.useEffect)(() => {
setLoaded(keys.every((key) => pageProps[key] !== void 0));
}, [pageProps, keys]);
return loaded ? children : fallback;
};
Deferred.displayName = "InertiaDeferred";
var Deferred_default = Deferred;
// src/Head.ts
var import_es_toolkit = require("es-toolkit");
var import_react7 = __toESM(require("react"), 1);
var Head = function({ children, title }) {
const headManager = (0, import_react7.useContext)(HeadContext_default);
const provider = (0, import_react7.useMemo)(() => headManager.createProvider(), [headManager]);
const isServer = typeof window === "undefined";
(0, import_react7.useEffect)(() => {
provider.reconnect();
provider.update(renderNodes(children));
return () => {
provider.disconnect();
};
}, [provider, children, title]);
function isUnaryTag(node) {
return [
"area",
"base",
"br",
"col",
"embed",
"hr",
"img",
"input",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"
].indexOf(node.type) > -1;
}
function renderTagStart(node) {
const attrs = Object.keys(node.props).reduce((carry, name) => {
if (["head-key", "children", "dangerouslySetInnerHTML"].includes(name)) {
return carry;
}
const value = node.props[name];
if (value === "") {
return carry + ` ${name}`;
} else {
return carry + ` ${name}="${(0, import_es_toolkit.escape)(value)}"`;
}
}, "");
return `<${node.type}${attrs}>`;
}
function renderTagChildren(node) {
return typeof node.props.children === "string" ? node.props.children : node.props.children.reduce((html, child) => html + renderTag(child), "");
}
function renderTag(node) {
let html = renderTagStart(node);
if (node.props.children) {
html += renderTagChildren(node);
}
if (node.props.dangerouslySetInnerHTML) {
html += node.props.dangerouslySetInnerHTML.__html;
}
if (!isUnaryTag(node)) {
html += `</${node.type}>`;
}
return html;
}
function ensureNodeHasInertiaProp(node) {
return import_react7.default.cloneElement(node, {
inertia: node.props["head-key"] !== void 0 ? node.props["head-key"] : ""
});
}
function renderNode(node) {
return renderTag(ensureNodeHasInertiaProp(node));
}
function renderNodes(nodes) {
const computed = import_react7.default.Children.toArray(nodes).filter((node) => node).map((node) => renderNode(node));
if (title && !computed.find((tag) => tag.startsWith("<title"))) {
computed.push(`<title inertia>${title}</title>`);
}
return computed;
}
if (isServer) {
provider.update(renderNodes(children));
}
return null;
};
var Head_default = Head;
// src/Link.ts
var import_core3 = require("@inertiajs/core");
var import_react8 = require("react");
var noop = () => void 0;
var Link = (0, import_react8.forwardRef)(
({
children,
as = "a",
data = {},
href,
method = "get",
preserveScroll = false,
preserveState = null,
replace = false,
only = [],
except = [],
headers = {},
queryStringArrayFormat = "brackets",
async = false,
onClick = noop,
onCancelToken = noop,
onBefore = noop,
onStart = noop,
onProgress = noop,
onFinish = noop,
onCancel = noop,
onSuccess = noop,
onError = noop,
prefetch = false,
cacheFor = 0,
...props
}, ref) => {
const [inFlightCount, setInFlightCount] = (0, import_react8.useState)(0);
const hoverTimeout = (0, import_react8.useRef)(null);
const _method = (0, import_react8.useMemo)(() => {
return typeof href === "object" ? href.method : method.toLowerCase();
}, [href, method]);
const _as = (0, import_react8.useMemo)(() => {
as = as.toLowerCase();
return _method !== "get" ? "button" : as;
}, [as, _method]);
const mergeDataArray = (0, import_react8.useMemo)(
() => (0, import_core3.mergeDataIntoQueryString)(
_method,
typeof href === "object" ? href.url : href || "",
data,
queryStringArrayFormat
),
[href, _method, data, queryStringArrayFormat]
);
const url = (0, import_react8.useMemo)(() => mergeDataArray[0], [mergeDataArray]);
const _data = (0, import_react8.useMemo)(() => mergeDataArray[1], [mergeDataArray]);
const baseParams = (0, import_react8.useMemo)(
() => ({
data: _data,
method: _method,
preserveScroll,
preserveState: preserveState ?? _method !== "get",
replace,
only,
except,
headers,
async
}),
[_data, _method, preserveScroll, preserveState, replace, only, except, headers, async]
);
const visitParams = (0, import_react8.useMemo)(
() => ({
...baseParams,
onCancelToken,
onBefore,
onStart(event) {
setInFlightCount((count) => count + 1);
onStart(event);
},
onProgress,
onFinish(event) {
setInFlightCount((count) => count - 1);
onFinish(event);
},
onCancel,
onSuccess,
onError
}),
[baseParams, onCancelToken, onBefore, onStart, onProgress, onFinish, onCancel, onSuccess, onError]
);
const doPrefetch = () => {
import_core3.router.prefetch(url, baseParams, { cacheFor: cacheForValue });
};
const prefetchModes = (0, import_react8.useMemo)(
() => {
if (prefetch === true) {
return ["hover"];
}
if (prefetch === false) {
return [];
}
if (Array.isArray(prefetch)) {
return prefetch;
}
return [prefetch];
},
Array.isArray(prefetch) ? prefetch : [prefetch]
);
const cacheForValue = (0, import_react8.useMemo)(() => {
if (cacheFor !== 0) {
return cacheFor;
}
if (prefetchModes.length === 1 && prefetchModes[0] === "click") {
return 0;
}
return 3e4;
}, [cacheFor, prefetchModes]);
(0, import_react8.useEffect)(() => {
return () => {
clearTimeout(hoverTimeout.current);
};
}, []);
(0, import_react8.useEffect)(() => {
if (prefetchModes.includes("mount")) {
setTimeout(() => doPrefetch());
}
}, prefetchModes);
const regularEvents = {
onClick: (event) => {
onClick(event);
if ((0, import_core3.shouldIntercept)(event)) {
event.preventDefault();
import_core3.router.visit(url, visitParams);
}
}
};
const prefetchHoverEvents = {
onMouseEnter: () => {
hoverTimeout.current = window.setTimeout(() => {
doPrefetch();
}, 75);
},
onMouseLeave: () => {
clearTimeout(hoverTimeout.current);
},
onClick: regularEvents.onClick
};
const prefetchClickEvents = {
onMouseDown: (event) => {
if ((0, import_core3.shouldIntercept)(event)) {
event.preventDefault();
doPrefetch();
}
},
onMouseUp: (event) => {
event.preventDefault();
import_core3.router.visit(url, visitParams);
},
onClick: (event) => {
onClick(event);
if ((0, import_core3.shouldIntercept)(event)) {
event.preventDefault();
}
}
};
const elProps = (0, import_react8.useMemo)(
() => ({
a: { href: url },
button: { type: "button" }
}),
[url]
);
return (0, import_react8.createElement)(
_as,
{
...props,
...elProps[_as] || {},
ref,
...(() => {
if (prefetchModes.includes("hover")) {
return prefetchHoverEvents;
}
if (prefetchModes.includes("click")) {
return prefetchClickEvents;
}
return regularEvents;
})(),
"data-loading": inFlightCount > 0 ? "" : void 0
},
children
);
}
);
Link.displayName = "InertiaLink";
var Link_default = Link;
// src/useForm.ts
var import_core5 = require("@inertiajs/core");
var import_es_toolkit2 = require("es-toolkit");
var import_compat = require("es-toolkit/compat");
var import_react10 = require("react");
// src/useRemember.ts
var import_core4 = require("@inertiajs/core");
var import_react9 = require("react");
function useRemember(initialState, key) {
const [state, setState] = (0, import_react9.useState)(() => {
const restored = import_core4.router.restore(key);
return restored !== void 0 ? restored : initialState;
});
(0, import_react9.useEffect)(() => {
import_core4.router.remember(state, key);
}, [state, key]);
return [state, setState];
}
// src/useForm.ts
function useForm(rememberKeyOrInitialValues, maybeInitialValues) {
const isMounted = (0, import_react10.useRef)(null);
const rememberKey = typeof rememberKeyOrInitialValues === "string" ? rememberKeyOrInitialValues : null;
const [defaults, setDefaults] = (0, import_react10.useState)(
(typeof rememberKeyOrInitialValues === "string" ? maybeInitialValues : rememberKeyOrInitialValues) || {}
);
const cancelToken = (0, import_react10.useRef)(null);
const recentlySuccessfulTimeoutId = (0, import_react10.useRef)(null);
const [data, setData] = rememberKey ? useRemember(defaults, `${rememberKey}:data`) : (0, import_react10.useState)(defaults);
const [errors, setErrors] = rememberKey ? useRemember({}, `${rememberKey}:errors`) : (0, import_react10.useState)({});
const [hasErrors, setHasErrors] = (0, import_react10.useState)(false);
const [processing, setProcessing] = (0, import_react10.useState)(false);
const [progress, setProgress] = (0, import_react10.useState)(null);
const [wasSuccessful, setWasSuccessful] = (0, import_react10.useState)(false);
const [recentlySuccessful, setRecentlySuccessful] = (0, import_react10.useState)(false);
const transform = (0, import_react10.useRef)((data2) => data2);
const isDirty = (0, import_react10.useMemo)(() => !(0, import_es_toolkit2.isEqual)(data, defaults), [data, defaults]);
(0, import_react10.useEffect)(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
const submit = (0, import_react10.useCallback)(
(...args) => {
const objectPassed = typeof args[0] === "object";
const method = objectPassed ? args[0].method : args[0];
const url = objectPassed ? args[0].url : args[1];
const options = (objectPassed ? args[1] : args[2]) ?? {};
const _options = {
...options,
onCancelToken: (token) => {
cancelToken.current = token;
if (options.onCancelToken) {
return options.onCancelToken(token);
}
},
onBefore: (visit) => {
setWasSuccessful(false);
setRecentlySuccessful(false);
clearTimeout(recentlySuccessfulTimeoutId.current);
if (options.onBefore) {
return options.onBefore(visit);
}
},
onStart: (visit) => {
setProcessing(true);
if (options.onStart) {
return options.onStart(visit);
}
},
onProgress: (event) => {
setProgress(event);
if (options.onProgress) {
return options.onProgress(event);
}
},
onSuccess: (page) => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
setErrors({});
setHasErrors(false);
setWasSuccessful(true);
setRecentlySuccessful(true);
setDefaults((0, import_es_toolkit2.cloneDeep)(data));
recentlySuccessfulTimeoutId.current = setTimeout(() => {
if (isMounted.current) {
setRecentlySuccessful(false);
}
}, 2e3);
}
if (options.onSuccess) {
return options.onSuccess(page);
}
},
onError: (errors2) => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
setErrors(errors2);
setHasErrors(true);
}
if (options.onError) {
return options.onError(errors2);
}
},
onCancel: () => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
}
if (options.onCancel) {
return options.onCancel();
}
},
onFinish: (visit) => {
if (isMounted.current) {
setProcessing(false);
setProgress(null);
}
cancelToken.current = null;
if (options.onFinish) {
return options.onFinish(visit);
}
}
};
if (method === "delete") {
import_core5.router.delete(url, { ..._options, data: transform.current(data) });
} else {
import_core5.router[method](url, transform.current(data), _options);
}
},
[data, setErrors, transform]
);
const setDataFunction = (0, import_react10.useCallback)(
(keyOrData, maybeValue) => {
if (typeof keyOrData === "string") {
setData((data2) => (0, import_compat.set)((0, import_es_toolkit2.cloneDeep)(data2), keyOrData, maybeValue));
} else if (typeof keyOrData === "function") {
setData((data2) => keyOrData(data2));
} else {
setData(keyOrData);
}
},
[setData]
);
const [dataAsDefaults, setDataAsDefaults] = (0, import_react10.useState)(false);
const setDefaultsFunction = (0, import_react10.useCallback)(
(fieldOrFields, maybeValue) => {
if (typeof fieldOrFields === "undefined") {
setDefaults(data);
setDataAsDefaults(true);
} else {
setDefaults((defaults2) => {
return typeof fieldOrFields === "string" ? (0, import_compat.set)((0, import_es_toolkit2.cloneDeep)(defaults2), fieldOrFields, maybeValue) : Object.assign((0, import_es_toolkit2.cloneDeep)(defaults2), fieldOrFields);
});
}
},
[data, setDefaults]
);
(0, import_react10.useLayoutEffect)(() => {
if (!dataAsDefaults) {
return;
}
if (isDirty) {
setDefaults(data);
}
setDataAsDefaults(false);
}, [dataAsDefaults]);
const reset = (0, import_react10.useCallback)(
(...fields) => {
if (fields.length === 0) {
setData(defaults);
} else {
setData(
(data2) => fields.filter((key) => (0, import_compat.has)(defaults, key)).reduce(
(carry, key) => {
return (0, import_compat.set)(carry, key, (0, import_compat.get)(defaults, key));
},
{ ...data2 }
)
);
}
},
[setData, defaults]
);
const setError = (0, import_react10.useCallback)(
(fieldOrFields, maybeValue) => {
setErrors((errors2) => {
const newErrors = {
...errors2,
...typeof fieldOrFields === "string" ? { [fieldOrFields]: maybeValue } : fieldOrFields
};
setHasErrors(Object.keys(newErrors).length > 0);
return newErrors;
});
},
[setErrors, setHasErrors]
);
const clearErrors = (0, import_react10.useCallback)(
(...fields) => {
setErrors((errors2) => {
const newErrors = Object.keys(errors2).reduce(
(carry, field) => ({
...carry,
...fields.length > 0 && !fields.includes(field) ? { [field]: errors2[field] } : {}
}),
{}
);
setHasErrors(Object.keys(newErrors).length > 0);
return newErrors;
});
},
[setErrors, setHasErrors]
);
const resetAndClearErrors = (0, import_react10.useCallback)(
(...fields) => {
reset(...fields);
clearErrors(...fields);
},
[reset, clearErrors]
);
const createSubmitMethod = (method) => (url, options) => {
submit(method, url, options);
};
const getMethod = (0, import_react10.useCallback)(createSubmitMethod("get"), [submit]);
const post = (0, import_react10.useCallback)(createSubmitMethod("post"), [submit]);
const put = (0, import_react10.useCallback)(createSubmitMethod("put"), [submit]);
const patch = (0, import_react10.useCallback)(createSubmitMethod("patch"), [submit]);
const deleteMethod = (0, import_react10.useCallback)(createSubmitMethod("delete"), [submit]);
const cancel = (0, import_react10.useCallback)(() => {
if (cancelToken.current) {
cancelToken.current.cancel();
}
}, []);
const transformFunction = (0, import_react10.useCallback)((callback) => {
transform.current = callback;
}, []);
return {
data,
setData: setDataFunction,
isDirty,
errors,
hasErrors,
processing,
progress,
wasSuccessful,
recentlySuccessful,
transform: transformFunction,
setDefaults: setDefaultsFunction,
reset,
setError,
clearErrors,
resetAndClearErrors,
submit,
get: getMethod,
post,
put,
patch,
delete: deleteMethod,
cancel
};
}
// src/usePoll.ts
var import_core6 = require("@inertiajs/core");
var import_react11 = require("react");
function usePoll(interval, requestOptions = {}, options = {
keepAlive: false,
autoStart: true
}) {
const pollRef = (0, import_react11.useRef)(
import_core6.router.poll(interval, requestOptions, {
...options,
autoStart: false
})
);
(0, import_react11.useEffect)(() => {
if (options.autoStart ?? true) {
pollRef.current.start();
}
return () => pollRef.current.stop();
}, []);
return {
stop: pollRef.current.stop,
start: pollRef.current.start
};
}
// src/usePrefetch.ts
var import_core7 = require("@inertiajs/core");
var import_react12 = require("react");
function usePrefetch(options = {}) {
const cached = typeof window === "undefined" ? null : import_core7.router.getCached(window.location.pathname, options);
const inFlight = typeof window === "undefined" ? null : import_core7.router.getPrefetching(window.location.pathname, options);
const [lastUpdatedAt, setLastUpdatedAt] = (0, import_react12.useState)(cached?.staleTimestamp || null);
const [isPrefetching, setIsPrefetching] = (0, import_react12.useState)(inFlight !== null);
const [isPrefetched, setIsPrefetched] = (0, import_react12.useState)(cached !== null);
(0, import_react12.useEffect)(() => {
const onPrefetchingListener = import_core7.router.on("prefetching", (e) => {
if (e.detail.visit.url.pathname === window.location.pathname) {
setIsPrefetching(true);
}
});
const onPrefetchedListener = import_core7.router.on("prefetched", (e) => {
if (e.detail.visit.url.pathname === window.location.pathname) {
setIsPrefetching(false);
setIsPrefetched(true);
setLastUpdatedAt(e.detail.fetchedAt);
}
});
return () => {
onPrefetchedListener();
onPrefetchingListener();
};
}, []);
return {
lastUpdatedAt,
isPrefetching,
isPrefetched,
flush: () => import_core7.router.flush(window.location.pathname, options)
};
}
// src/WhenVisible.ts
var import_core8 = require("@inertiajs/core");
var import_react13 = require("react");
var WhenVisible = ({ children, data, params, buffer, as, always, fallback }) => {
always = always ?? false;
as = as ?? "div";
fallback = fallback ?? null;
const [loaded, setLoaded] = (0, import_react13.useState)(false);
const hasFetched = (0, import_react13.useRef)(false);
const fetching = (0, import_react13.useRef)(false);
const ref = (0, import_react13.useRef)(null);
const getReloadParams = (0, import_react13.useCallback)(() => {
if (data) {
return {
only: Array.isArray(data) ? data : [data]
};
}
if (!params) {
throw new Error("You must provide either a `data` or `params` prop.");
}
return params;
}, [params, data]);
(0, import_react13.useEffect)(() => {
if (!ref.current) {
return;
}
const observer = new IntersectionObserver(
(entries) => {
if (!entries[0].isIntersecting) {
return;
}
if (!always && hasFetched.current) {
observer.disconnect();
}
if (fetching.current) {
return;
}
hasFetched.current = true;
fetching.current = true;
const reloadParams = getReloadParams();
import_core8.router.reload({
...reloadParams,
onStart: (e) => {
fetching.current = true;
reloadParams.onStart?.(e);
},
onFinish: (e) => {
setLoaded(true);
fetching.current = false;
reloadParams.onFinish?.(e);
if (!always) {
observer.disconnect();
}
}
});
},
{
rootMargin: `${buffer || 0}px`
}
);
observer.observe(ref.current);
return () => {
observer.disconnect();
};
}, [ref, getReloadParams, buffer]);
if (always || !loaded) {
return (0, import_react13.createElement)(
as,
{
props: null,
ref
},
loaded ? children : fallback
);
}
return loaded ? children : null;
};
WhenVisible.displayName = "InertiaWhenVisible";
var WhenVisible_default = WhenVisible;
// src/index.ts
var router3 = import_core9.router;
//# sourceMappingURL=index.js.map

@@ -1,2 +0,6 @@

import{default as f}from"@inertiajs/core/server";export{f as default};
// src/server.ts
import { default as default2 } from "@inertiajs/core/server";
export {
default2 as default
};
//# sourceMappingURL=server.esm.js.map

@@ -1,2 +0,36 @@

var u=Object.create;var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var s=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var b=(a,e)=>{for(var f in e)d(a,f,{get:e[f],enumerable:!0})},o=(a,e,f,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!x.call(a,t)&&t!==f&&d(a,t,{get:()=>e[t],enumerable:!(l=m(e,t))||l.enumerable});return a};var c=(a,e,f)=>(f=a!=null?u(s(a)):{},o(e||!a||!a.__esModule?d(f,"default",{value:a,enumerable:!0}):f,a)),g=a=>o(d({},"__esModule",{value:!0}),a);var h={};b(h,{default:()=>r.default});module.exports=g(h);var r=c(require("@inertiajs/core/server"),1);
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/server.ts
var server_exports = {};
__export(server_exports, {
default: () => import_server.default
});
module.exports = __toCommonJS(server_exports);
var import_server = __toESM(require("@inertiajs/core/server"), 1);
//# sourceMappingURL=server.js.map

21

package.json
{
"name": "@inertiajs/react",
"version": "2.0.14",
"version": "2.0.15",
"license": "MIT",

@@ -45,12 +45,8 @@ "description": "The React adapter for Inertia.js",

},
"scripts": {
"dev": "./build.js --watch",
"build": "npm run clean && ./build.js && tsc --emitDeclarationOnly",
"clean": "rm -rf types && rm -rf dist",
"prepublishOnly": "npm run build"
},
"devDependencies": {
"@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"@types/react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"axios": "^1.8.2",
"esbuild": "^0.25.0",
"esbuild-node-externals": "^1.6.0",
"react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",

@@ -63,5 +59,10 @@ "typescript": "^4.9.4"

"dependencies": {
"@inertiajs/core": "2.0.14",
"es-toolkit": "^1.33.0"
"es-toolkit": "^1.33.0",
"@inertiajs/core": "2.0.15"
},
"scripts": {
"dev": "./build.js --watch",
"build": "pnpm clean && ./build.js && tsc --emitDeclarationOnly",
"clean": "rm -rf types && rm -rf dist"
}
}
}

@@ -0,1 +1,2 @@

/// <reference types="react" />
declare function App({ children, initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate, }: {

@@ -2,0 +3,0 @@ children: any;

@@ -0,2 +1,3 @@

/// <reference types="react" />
declare const headContext: import("react").Context<any>;
export default headContext;

@@ -1,2 +0,3 @@

import { FormDataConvertible, LinkPrefetchOption, Method, PendingVisit, PreserveStateOption, Progress } from '@inertiajs/core';
/// <reference types="react" />
import { CacheForOption, FormDataConvertible, LinkPrefetchOption, Method, PendingVisit, PreserveStateOption, Progress } from '@inertiajs/core';
interface BaseInertiaLinkProps {

@@ -27,3 +28,3 @@ as?: string;

async?: boolean;
cacheFor?: number | string;
cacheFor?: CacheForOption | CacheForOption[];
prefetch?: boolean | LinkPrefetchOption | LinkPrefetchOption[];

@@ -30,0 +31,0 @@ }

@@ -0,2 +1,3 @@

/// <reference types="react" />
declare const pageContext: import("react").Context<any>;
export default pageContext;

@@ -24,2 +24,3 @@ import { FormDataConvertible, FormDataKeys, FormDataValues, Method, Progress, VisitOptions } from '@inertiajs/core';

clearErrors: (...fields: FormDataKeys<TForm>[]) => void;
resetAndClearErrors: (...fields: FormDataKeys<TForm>[]) => void;
setError(field: FormDataKeys<TForm>, value: string): void;

@@ -26,0 +27,0 @@ setError(errors: Record<FormDataKeys<TForm>, string>): void;

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet