@inertiajs/react 3.0.0-beta.5 → 3.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -409,7 +409,7 @@ import {
|
|
|
409
409
|
UseFormUtils as UseFormUtils2
|
|
410
410
|
} from "@inertiajs/core";
|
|
411
411
|
import { cloneDeep as cloneDeep2 } from "es-toolkit";
|
|
412
|
-
import { useCallback as useCallback2, useRef as useRef3, useState as useState5 } from "react";
|
|
412
|
+
import { useCallback as useCallback2, useMemo as useMemo3, useRef as useRef3, useState as useState5 } from "react";
|
|
413
413
|
|
|
414
414
|
// src/react.ts
|
|
415
415
|
import { useEffect as useEffect3, useLayoutEffect } from "react";
|
|
@@ -428,7 +428,7 @@ import {
|
|
|
428
428
|
resolveName,
|
|
429
429
|
toSimpleValidationErrors
|
|
430
430
|
} from "laravel-precognition";
|
|
431
|
-
import { useCallback, useEffect as useEffect4,
|
|
431
|
+
import { useCallback, useEffect as useEffect4, useRef as useRef2, useState as useState3 } from "react";
|
|
432
432
|
function useFormState(options) {
|
|
433
433
|
const { data: dataOption, useDataState, useErrorsState } = options;
|
|
434
434
|
const isDataFunction = typeof dataOption === "function";
|
|
@@ -439,8 +439,8 @@ function useFormState(options) {
|
|
|
439
439
|
const [defaults, setDefaultsState] = useState3(cloneDeep(initialData));
|
|
440
440
|
const [data, setData] = useDataState ? useDataState() : useState3(cloneDeep(initialData));
|
|
441
441
|
const [errors, setErrors] = useErrorsState ? useErrorsState() : useState3({});
|
|
442
|
-
const [processing,
|
|
443
|
-
const [progress2,
|
|
442
|
+
const [processing, setProcessing] = useState3(false);
|
|
443
|
+
const [progress2, setProgress] = useState3(null);
|
|
444
444
|
const [wasSuccessful, setWasSuccessful] = useState3(false);
|
|
445
445
|
const [recentlySuccessful, setRecentlySuccessful] = useState3(false);
|
|
446
446
|
const recentlySuccessfulTimeoutId = useRef2(void 0);
|
|
@@ -462,38 +462,6 @@ function useFormState(options) {
|
|
|
462
462
|
isMounted.current = false;
|
|
463
463
|
};
|
|
464
464
|
}, []);
|
|
465
|
-
const snapshotRef = useRef2({
|
|
466
|
-
data,
|
|
467
|
-
defaults,
|
|
468
|
-
errors,
|
|
469
|
-
processing,
|
|
470
|
-
progress: progress2,
|
|
471
|
-
wasSuccessful,
|
|
472
|
-
recentlySuccessful,
|
|
473
|
-
validating,
|
|
474
|
-
touchedFields,
|
|
475
|
-
validFields
|
|
476
|
-
});
|
|
477
|
-
snapshotRef.current = {
|
|
478
|
-
data,
|
|
479
|
-
defaults,
|
|
480
|
-
errors,
|
|
481
|
-
processing,
|
|
482
|
-
progress: progress2,
|
|
483
|
-
wasSuccessful,
|
|
484
|
-
recentlySuccessful,
|
|
485
|
-
validating,
|
|
486
|
-
touchedFields,
|
|
487
|
-
validFields
|
|
488
|
-
};
|
|
489
|
-
const setProcessing = useCallback((value) => {
|
|
490
|
-
_setProcessing(value);
|
|
491
|
-
snapshotRef.current.processing = value;
|
|
492
|
-
}, []);
|
|
493
|
-
const setProgress = useCallback((value) => {
|
|
494
|
-
_setProgress(value);
|
|
495
|
-
snapshotRef.current.progress = value;
|
|
496
|
-
}, []);
|
|
497
465
|
const setDataFunction = useCallback(
|
|
498
466
|
(keyOrData, maybeValue) => {
|
|
499
467
|
if (typeof keyOrData === "string") {
|
|
@@ -565,7 +533,6 @@ function useFormState(options) {
|
|
|
565
533
|
...errors2,
|
|
566
534
|
...typeof fieldOrFields === "string" ? { [fieldOrFields]: maybeValue } : fieldOrFields
|
|
567
535
|
};
|
|
568
|
-
snapshotRef.current.errors = newErrors;
|
|
569
536
|
validatorRef.current?.setErrors(newErrors);
|
|
570
537
|
return newErrors;
|
|
571
538
|
});
|
|
@@ -582,7 +549,6 @@ function useFormState(options) {
|
|
|
582
549
|
}),
|
|
583
550
|
{}
|
|
584
551
|
);
|
|
585
|
-
snapshotRef.current.errors = newErrors;
|
|
586
552
|
if (validatorRef.current) {
|
|
587
553
|
if (fields.length === 0) {
|
|
588
554
|
validatorRef.current.setErrors({});
|
|
@@ -602,29 +568,21 @@ function useFormState(options) {
|
|
|
602
568
|
},
|
|
603
569
|
[reset, clearErrors]
|
|
604
570
|
);
|
|
605
|
-
const setWasSuccessfulWithSnapshot = useCallback((value) => {
|
|
606
|
-
setWasSuccessful(value);
|
|
607
|
-
snapshotRef.current.wasSuccessful = value;
|
|
608
|
-
}, []);
|
|
609
|
-
const setRecentlySuccessfulWithSnapshot = useCallback((value) => {
|
|
610
|
-
setRecentlySuccessful(value);
|
|
611
|
-
snapshotRef.current.recentlySuccessful = value;
|
|
612
|
-
}, []);
|
|
613
571
|
const markAsSuccessful = useCallback(() => {
|
|
614
572
|
clearErrors();
|
|
615
|
-
|
|
616
|
-
|
|
573
|
+
setWasSuccessful(true);
|
|
574
|
+
setRecentlySuccessful(true);
|
|
617
575
|
recentlySuccessfulTimeoutId.current = window.setTimeout(() => {
|
|
618
576
|
if (isMounted.current) {
|
|
619
|
-
|
|
577
|
+
setRecentlySuccessful(false);
|
|
620
578
|
}
|
|
621
579
|
}, config.get("form.recentlySuccessfulDuration"));
|
|
622
|
-
}, [clearErrors,
|
|
580
|
+
}, [clearErrors, setWasSuccessful, setRecentlySuccessful]);
|
|
623
581
|
const resetBeforeSubmit = useCallback(() => {
|
|
624
|
-
|
|
625
|
-
|
|
582
|
+
setWasSuccessful(false);
|
|
583
|
+
setRecentlySuccessful(false);
|
|
626
584
|
clearTimeout(recentlySuccessfulTimeoutId.current);
|
|
627
|
-
}, [
|
|
585
|
+
}, [setWasSuccessful, setRecentlySuccessful]);
|
|
628
586
|
const finishProcessing = useCallback(() => {
|
|
629
587
|
setProcessing(false);
|
|
630
588
|
setProgress(null);
|
|
@@ -645,35 +603,15 @@ function useFormState(options) {
|
|
|
645
603
|
(field) => typeof field === "string" ? touchedFields.includes(field) : touchedFields.length > 0,
|
|
646
604
|
[touchedFields]
|
|
647
605
|
);
|
|
648
|
-
const form =
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
return snapshotRef.current.errors;
|
|
658
|
-
},
|
|
659
|
-
get hasErrors() {
|
|
660
|
-
return Object.keys(snapshotRef.current.errors).length > 0;
|
|
661
|
-
},
|
|
662
|
-
get processing() {
|
|
663
|
-
return snapshotRef.current.processing;
|
|
664
|
-
},
|
|
665
|
-
get progress() {
|
|
666
|
-
return snapshotRef.current.progress;
|
|
667
|
-
},
|
|
668
|
-
get wasSuccessful() {
|
|
669
|
-
return snapshotRef.current.wasSuccessful;
|
|
670
|
-
},
|
|
671
|
-
get recentlySuccessful() {
|
|
672
|
-
return snapshotRef.current.recentlySuccessful;
|
|
673
|
-
}
|
|
674
|
-
};
|
|
675
|
-
}, []);
|
|
676
|
-
Object.assign(form, {
|
|
606
|
+
const form = {
|
|
607
|
+
data,
|
|
608
|
+
isDirty: !isEqual(data, defaults),
|
|
609
|
+
errors,
|
|
610
|
+
hasErrors: Object.keys(errors).length > 0,
|
|
611
|
+
processing,
|
|
612
|
+
progress: progress2,
|
|
613
|
+
wasSuccessful,
|
|
614
|
+
recentlySuccessful,
|
|
677
615
|
setData: setDataFunction,
|
|
678
616
|
transform: transformFunction,
|
|
679
617
|
setDefaults: setDefaultsFunction,
|
|
@@ -681,7 +619,7 @@ function useFormState(options) {
|
|
|
681
619
|
setError,
|
|
682
620
|
clearErrors,
|
|
683
621
|
resetAndClearErrors
|
|
684
|
-
}
|
|
622
|
+
};
|
|
685
623
|
const validate = (field, config3) => {
|
|
686
624
|
if (typeof field === "object" && !("target" in field)) {
|
|
687
625
|
config3 = field;
|
|
@@ -718,14 +656,11 @@ function useFormState(options) {
|
|
|
718
656
|
}).on("errorsChanged", () => {
|
|
719
657
|
const validationErrors = withAllErrorsEnabled() ? validator.errors() : toSimpleValidationErrors(validator.errors());
|
|
720
658
|
setErrors(validationErrors);
|
|
721
|
-
snapshotRef.current.errors = validationErrors;
|
|
722
659
|
setValidFields(validator.valid());
|
|
723
660
|
});
|
|
724
661
|
}
|
|
725
662
|
const precognitiveForm = Object.assign(form, {
|
|
726
|
-
|
|
727
|
-
return snapshotRef.current.validating;
|
|
728
|
-
},
|
|
663
|
+
validating,
|
|
729
664
|
validator: () => validatorRef.current,
|
|
730
665
|
valid,
|
|
731
666
|
invalid,
|
|
@@ -816,6 +751,7 @@ function useForm(...args) {
|
|
|
816
751
|
setDefaultsState,
|
|
817
752
|
transformRef,
|
|
818
753
|
precognitionEndpointRef,
|
|
754
|
+
dataRef,
|
|
819
755
|
isMounted,
|
|
820
756
|
setProcessing,
|
|
821
757
|
setProgress,
|
|
@@ -906,30 +842,33 @@ function useForm(...args) {
|
|
|
906
842
|
};
|
|
907
843
|
_options.optimistic = _options.optimistic ?? pendingOptimisticRef.current ?? void 0;
|
|
908
844
|
pendingOptimisticRef.current = null;
|
|
909
|
-
const transformedData = transformRef.current(
|
|
845
|
+
const transformedData = transformRef.current(dataRef.current);
|
|
910
846
|
if (method === "delete") {
|
|
911
847
|
router5.delete(url, { ..._options, data: transformedData });
|
|
912
848
|
} else {
|
|
913
849
|
router5[method](url, transformedData, _options);
|
|
914
850
|
}
|
|
915
851
|
},
|
|
916
|
-
[
|
|
852
|
+
[clearErrors, setError, transformRef]
|
|
917
853
|
);
|
|
918
854
|
const cancel = useCallback2(() => {
|
|
919
855
|
if (cancelToken.current) {
|
|
920
856
|
cancelToken.current.cancel();
|
|
921
857
|
}
|
|
922
858
|
}, []);
|
|
923
|
-
const
|
|
924
|
-
|
|
925
|
-
|
|
859
|
+
const submitMethods = useMemo3(
|
|
860
|
+
() => ({
|
|
861
|
+
get: (url, options = {}) => submit("get", url, options),
|
|
862
|
+
post: (url, options = {}) => submit("post", url, options),
|
|
863
|
+
put: (url, options = {}) => submit("put", url, options),
|
|
864
|
+
patch: (url, options = {}) => submit("patch", url, options),
|
|
865
|
+
delete: (url, options = {}) => submit("delete", url, options)
|
|
866
|
+
}),
|
|
867
|
+
[submit]
|
|
868
|
+
);
|
|
926
869
|
Object.assign(baseForm, {
|
|
927
870
|
submit,
|
|
928
|
-
|
|
929
|
-
post: createSubmitMethod("post"),
|
|
930
|
-
put: createSubmitMethod("put"),
|
|
931
|
-
patch: createSubmitMethod("patch"),
|
|
932
|
-
delete: createSubmitMethod("delete"),
|
|
871
|
+
...submitMethods,
|
|
933
872
|
cancel,
|
|
934
873
|
dontRemember: (...keys) => {
|
|
935
874
|
excludeKeysRef.current = keys;
|
|
@@ -1800,7 +1739,7 @@ import {
|
|
|
1800
1739
|
} from "@inertiajs/core";
|
|
1801
1740
|
import { cloneDeep as cloneDeep3 } from "es-toolkit";
|
|
1802
1741
|
import { toSimpleValidationErrors as toSimpleValidationErrors2 } from "laravel-precognition";
|
|
1803
|
-
import { useCallback as useCallback4, useRef as useRef7, useState as useState9 } from "react";
|
|
1742
|
+
import { useCallback as useCallback4, useMemo as useMemo8, useRef as useRef7, useState as useState9 } from "react";
|
|
1804
1743
|
function useHttp(...args) {
|
|
1805
1744
|
const { rememberKey, data, precognitionEndpoint } = UseFormUtils4.parseUseFormArguments(...args);
|
|
1806
1745
|
const initialDefaults = typeof data === "function" ? cloneDeep3(data()) : cloneDeep3(data);
|
|
@@ -1950,9 +1889,6 @@ function useHttp(...args) {
|
|
|
1950
1889
|
abortController.current.abort();
|
|
1951
1890
|
}
|
|
1952
1891
|
}, []);
|
|
1953
|
-
const createSubmitMethod = (method) => async (url, options = {}) => {
|
|
1954
|
-
return submit(method, url, options);
|
|
1955
|
-
};
|
|
1956
1892
|
const submitWithArgs = useCallback4(
|
|
1957
1893
|
(...args2) => {
|
|
1958
1894
|
const parsed = UseFormUtils4.parseSubmitArguments(args2, precognitionEndpointRef.current);
|
|
@@ -1960,14 +1896,20 @@ function useHttp(...args) {
|
|
|
1960
1896
|
},
|
|
1961
1897
|
[submit]
|
|
1962
1898
|
);
|
|
1899
|
+
const submitMethods = useMemo8(
|
|
1900
|
+
() => ({
|
|
1901
|
+
get: async (url, options = {}) => submit("get", url, options),
|
|
1902
|
+
post: async (url, options = {}) => submit("post", url, options),
|
|
1903
|
+
put: async (url, options = {}) => submit("put", url, options),
|
|
1904
|
+
patch: async (url, options = {}) => submit("patch", url, options),
|
|
1905
|
+
delete: async (url, options = {}) => submit("delete", url, options)
|
|
1906
|
+
}),
|
|
1907
|
+
[submit]
|
|
1908
|
+
);
|
|
1963
1909
|
Object.assign(baseForm, {
|
|
1964
1910
|
response,
|
|
1965
1911
|
submit: submitWithArgs,
|
|
1966
|
-
|
|
1967
|
-
post: createSubmitMethod("post"),
|
|
1968
|
-
put: createSubmitMethod("put"),
|
|
1969
|
-
patch: createSubmitMethod("patch"),
|
|
1970
|
-
delete: createSubmitMethod("delete"),
|
|
1912
|
+
...submitMethods,
|
|
1971
1913
|
cancel,
|
|
1972
1914
|
dontRemember: (...keys) => {
|
|
1973
1915
|
excludeKeysRef.current = keys;
|
|
@@ -2054,13 +1996,13 @@ function usePrefetch(options = {}) {
|
|
|
2054
1996
|
// src/WhenVisible.ts
|
|
2055
1997
|
import { router as router9 } from "@inertiajs/core";
|
|
2056
1998
|
import { get as get3 } from "es-toolkit/compat";
|
|
2057
|
-
import { createElement as createElement6, useCallback as useCallback5, useEffect as useEffect12, useMemo as
|
|
1999
|
+
import { createElement as createElement6, useCallback as useCallback5, useEffect as useEffect12, useMemo as useMemo9, useRef as useRef9, useState as useState11 } from "react";
|
|
2058
2000
|
var WhenVisible = ({ children, data, params, buffer, as, always, fallback }) => {
|
|
2059
2001
|
always = always ?? false;
|
|
2060
2002
|
as = as ?? "div";
|
|
2061
2003
|
fallback = fallback ?? null;
|
|
2062
2004
|
const pageProps = usePage().props;
|
|
2063
|
-
const keys =
|
|
2005
|
+
const keys = useMemo9(() => data ? Array.isArray(data) ? data : [data] : [], [data]);
|
|
2064
2006
|
const [loaded, setLoaded] = useState11(() => keys.length > 0 && keys.every((key) => get3(pageProps, key) !== void 0));
|
|
2065
2007
|
const [isFetching, setIsFetching] = useState11(false);
|
|
2066
2008
|
const fetching = useRef9(false);
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/App.ts", "../src/HeadContext.ts", "../src/layoutProps.ts", "../src/PageContext.ts", "../src/createInertiaApp.ts", "../src/Deferred.ts", "../src/usePage.ts", "../src/Form.ts", "../src/useForm.ts", "../src/react.ts", "../src/useFormState.ts", "../src/useRemember.ts", "../src/Head.ts", "../src/InfiniteScroll.ts", "../src/Link.ts", "../src/useHttp.ts", "../src/usePoll.ts", "../src/usePrefetch.ts", "../src/WhenVisible.ts"],
|
|
4
|
-
"sourcesContent": ["import { config as coreConfig } from '@inertiajs/core'\nimport type { ReactInertiaAppConfig } from './types'\n\nexport { http, progress, router } from '@inertiajs/core'\nexport { default as App } from './App'\nexport { default as createInertiaApp } from './createInertiaApp'\nexport { default as Deferred } from './Deferred'\nexport { default as Form, useFormContext } from './Form'\nexport { default as Head } from './Head'\nexport { default as InfiniteScroll } from './InfiniteScroll'\nexport { resetLayoutProps, setLayoutProps, setLayoutPropsFor } from './layoutProps'\nexport { InertiaLinkProps, default as Link } from './Link'\nexport { LayoutCallback, ReactComponent as ResolvedComponent } from './types'\nexport {\n InertiaForm,\n InertiaFormProps,\n InertiaPrecognitiveFormProps,\n SetDataAction,\n SetDataByKeyValuePair,\n SetDataByMethod,\n SetDataByObject,\n default as useForm,\n} from './useForm'\nexport { default as useHttp } from './useHttp'\nexport { default as usePage } from './usePage'\nexport { default as usePoll } from './usePoll'\nexport { default as usePrefetch } from './usePrefetch'\nexport { default as useRemember } from './useRemember'\nexport { default as WhenVisible } from './WhenVisible'\n\nexport const config = coreConfig.extend<ReactInertiaAppConfig>()\n", "import {\n createHeadManager,\n HeadManagerOnUpdateCallback,\n HeadManagerTitleCallback,\n normalizeLayouts,\n Page,\n PageHandler,\n PageProps,\n router,\n} from '@inertiajs/core'\nimport {\n createElement,\n FunctionComponent,\n isValidElement,\n ReactNode,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n} from 'react'\nimport { flushSync } from 'react-dom'\nimport HeadContext from './HeadContext'\nimport { resetLayoutProps, store } from './layoutProps'\nimport PageContext from './PageContext'\nimport { LayoutFunction, ReactComponent, ReactPageHandlerArgs } from './types'\n\nfunction isComponent(value: unknown): value is ReactComponent {\n if (!value) {\n return false\n }\n\n if (typeof value === 'object' && '$$typeof' in value) {\n return true\n }\n\n if (typeof value === 'function') {\n const fn = value as Function & { displayName?: string; prototype?: { isReactComponent?: boolean } }\n return fn.prototype?.isReactComponent === true || fn.name !== '' || fn.displayName !== undefined\n }\n\n return false\n}\n\nfunction isRenderFunction(value: unknown): boolean {\n if (typeof value !== 'function') {\n return false\n }\n\n const fn = value as Function\n return fn.length === 1 && typeof fn.prototype === 'undefined'\n}\n\nlet currentIsInitialPage = true\nlet routerIsInitialized = false\nlet swapComponent: PageHandler<ReactComponent> = async () => {\n // Dummy function so we can init the router outside of the useEffect hook. This is\n // needed so `router.reload()` works right away (on mount) in any of the user's\n // components. We swap in the real function in the useEffect hook below.\n currentIsInitialPage = false\n}\n\ntype CurrentPage = {\n component: ReactComponent | null\n page: Page\n key: number | null\n}\n\nexport interface InertiaAppProps<SharedProps extends PageProps = PageProps> {\n children?: (options: { Component: ReactComponent; props: PageProps; key: number | null }) => ReactNode\n initialPage: Page<SharedProps>\n initialComponent?: ReactComponent\n resolveComponent?: (name: string, page?: Page) => ReactComponent | Promise<ReactComponent>\n titleCallback?: HeadManagerTitleCallback\n onHeadUpdate?: HeadManagerOnUpdateCallback\n defaultLayout?: (name: string, page: Page) => unknown\n}\n\nexport type InertiaApp = FunctionComponent<InertiaAppProps>\n\nconst emptySnapshot = {\n shared: {} as Record<string, unknown>,\n named: {} as Record<string, Record<string, unknown>>,\n}\n\nexport default function App<SharedProps extends PageProps = PageProps>({\n children,\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback,\n onHeadUpdate,\n defaultLayout,\n}: InertiaAppProps<SharedProps>) {\n const [current, setCurrent] = useState<CurrentPage>({\n component: initialComponent || null,\n page: { ...initialPage, flash: initialPage.flash ?? {} },\n key: null,\n })\n\n const headManager = useMemo(() => {\n return createHeadManager(\n typeof window === 'undefined',\n titleCallback || ((title) => title),\n onHeadUpdate || (() => {}),\n )\n }, [])\n\n const dynamicLayoutProps = useSyncExternalStore(store.subscribe, store.get, () => emptySnapshot)\n\n if (!routerIsInitialized) {\n router.init<ReactComponent>({\n initialPage,\n resolveComponent: resolveComponent!,\n swapComponent: async (args) => swapComponent(args),\n onFlash: (flash) => {\n setCurrent((current) => ({\n ...current,\n page: { ...current.page, flash },\n }))\n },\n })\n\n routerIsInitialized = true\n }\n\n useEffect(() => {\n swapComponent = async ({ component, page, preserveState }: ReactPageHandlerArgs) => {\n if (currentIsInitialPage) {\n // We block setting the current page on the initial page to\n // prevent the initial page from being re-rendered again.\n currentIsInitialPage = false\n return\n }\n\n if (!preserveState) {\n resetLayoutProps()\n }\n\n flushSync(() =>\n setCurrent((current) => ({\n component,\n page,\n key: preserveState ? current.key : Date.now(),\n })),\n )\n }\n\n router.on('navigate', () => headManager.forceUpdate())\n }, [])\n\n if (!current.component) {\n return createElement(\n HeadContext.Provider,\n { value: headManager },\n createElement(PageContext.Provider, { value: current.page }, null),\n )\n }\n\n const renderChildren =\n children ||\n (({ Component, props, key }) => {\n const child = createElement(Component, { key, ...props })\n\n if (Component.layout && isRenderFunction(Component.layout)) {\n const result = (Component.layout as Function)(props)\n\n if (isValidElement(result)) {\n return (Component.layout as LayoutFunction)(child)\n }\n\n const layouts = normalizeLayouts(result, isComponent)\n\n if (layouts.length > 0) {\n return layouts.reduceRight((childNode, layout) => {\n return createElement(\n layout.component,\n {\n ...props,\n ...layout.props,\n ...dynamicLayoutProps.shared,\n ...(layout.name ? dynamicLayoutProps.named[layout.name] || {} : {}),\n },\n childNode,\n )\n }, child)\n }\n\n return child\n }\n\n const effectiveLayout = Component.layout ?? defaultLayout?.(current.page.component, current.page)\n const layouts = normalizeLayouts(effectiveLayout, isComponent, Component.layout ? isRenderFunction : undefined)\n\n if (layouts.length > 0) {\n return layouts.reduceRight((childNode, layout) => {\n return createElement(\n layout.component,\n {\n ...props,\n ...layout.props,\n ...dynamicLayoutProps.shared,\n ...(layout.name ? dynamicLayoutProps.named[layout.name] || {} : {}),\n },\n childNode,\n )\n }, child)\n }\n\n return child\n })\n\n return createElement(\n HeadContext.Provider,\n { value: headManager },\n createElement(\n PageContext.Provider,\n { value: current.page },\n renderChildren({\n Component: current.component,\n key: current.key,\n props: current.page.props,\n }),\n ),\n )\n}\n\nApp.displayName = 'Inertia'\n", "import { HeadManager } from '@inertiajs/core'\nimport { createContext } from 'react'\n\nconst headContext = createContext<HeadManager | null>(null)\nheadContext.displayName = 'InertiaHeadContext'\n\nexport default headContext\n", "import { createLayoutPropsStore, type LayoutProps, type NamedLayoutProps } from '@inertiajs/core'\n\nexport const store = createLayoutPropsStore()\n\nexport function setLayoutProps(props: Partial<LayoutProps>): void {\n store.set(props)\n}\n\nexport function setLayoutPropsFor<K extends keyof NamedLayoutProps>(\n name: K,\n props: Partial<NamedLayoutProps[K]>,\n): void {\n store.setFor(name, props)\n}\n\nexport function resetLayoutProps(): void {\n store.reset()\n}\n", "import { Page } from '@inertiajs/core'\nimport { createContext } from 'react'\n\nconst pageContext = createContext<Page | null>(null)\npageContext.displayName = 'InertiaPageContext'\n\nexport default pageContext\n", "import {\n buildSSRBody,\n CreateInertiaAppOptions,\n CreateInertiaAppOptionsForCSR,\n CreateInertiaAppOptionsForSSR,\n getInitialPageFromDOM,\n http as httpModule,\n InertiaAppSSRResponse,\n Page,\n PageProps,\n router,\n setupProgress,\n SharedPageProps,\n} from '@inertiajs/core'\nimport { createElement, ReactElement, StrictMode } from 'react'\nimport { createRoot, hydrateRoot } from 'react-dom/client'\nimport { renderToString } from 'react-dom/server'\nimport App, { InertiaAppProps, type InertiaApp } from './App'\nimport { config } from './index'\nimport { ReactComponent, ReactInertiaAppConfig } from './types'\n\nexport type SetupOptions<ElementType, SharedProps extends PageProps> = {\n el: ElementType\n App: InertiaApp\n props: InertiaAppProps<SharedProps>\n}\n\ntype ComponentResolver = (\n name: string,\n page?: Page<SharedPageProps>,\n) => ReactComponent | Promise<ReactComponent> | { default: ReactComponent }\n\ntype InertiaAppOptionsForCSR<SharedProps extends PageProps> = CreateInertiaAppOptionsForCSR<\n SharedProps,\n ComponentResolver,\n SetupOptions<HTMLElement, SharedProps>,\n void,\n ReactInertiaAppConfig\n> & {\n strictMode?: undefined\n withApp?: (app: ReactElement, options: { ssr: boolean }) => ReactElement\n}\n\ntype InertiaAppOptionsForSSR<SharedProps extends PageProps> = CreateInertiaAppOptionsForSSR<\n SharedProps,\n ComponentResolver,\n SetupOptions<null, SharedProps>,\n ReactElement,\n ReactInertiaAppConfig\n> & {\n render: typeof renderToString\n strictMode?: undefined\n withApp?: (app: ReactElement, options: { ssr: boolean }) => ReactElement\n}\n\ntype InertiaAppOptionsAuto<SharedProps extends PageProps> = CreateInertiaAppOptions<\n ComponentResolver,\n SetupOptions<HTMLElement | null, SharedProps>,\n ReactElement | void,\n ReactInertiaAppConfig\n> & {\n page?: Page<SharedProps>\n render?: undefined\n strictMode?: boolean\n withApp?: (app: ReactElement, options: { ssr: boolean }) => ReactElement\n}\n\ntype RenderToString = (element: ReactElement) => string\n\ntype RenderFunction<SharedProps extends PageProps> = (\n page: Page<SharedProps>,\n renderToString: RenderToString,\n) => Promise<InertiaAppSSRResponse>\n\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n options: InertiaAppOptionsForCSR<SharedProps>,\n): Promise<void>\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n options: InertiaAppOptionsForSSR<SharedProps>,\n): Promise<InertiaAppSSRResponse>\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n options?: InertiaAppOptionsAuto<SharedProps>,\n): Promise<void | RenderFunction<SharedProps>>\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n {\n id = 'app',\n resolve,\n setup,\n title,\n progress = {},\n page,\n render,\n defaults = {},\n http,\n layout,\n strictMode = false,\n withApp,\n }:\n | InertiaAppOptionsForCSR<SharedProps>\n | InertiaAppOptionsForSSR<SharedProps>\n | InertiaAppOptionsAuto<SharedProps> = {} as InertiaAppOptionsAuto<SharedProps>,\n): Promise<InertiaAppSSRResponse | RenderFunction<SharedProps> | void> {\n config.replace(defaults)\n\n if (http) {\n httpModule.setClient(http)\n }\n\n const isServer = typeof window === 'undefined'\n\n const wrapWithStrictMode = (element: ReactElement): ReactElement => {\n return strictMode ? createElement(StrictMode, null, element) : element\n }\n\n const resolveComponent = (name: string, page?: Page) =>\n Promise.resolve(resolve!(name, page)).then((module) => {\n return ((module as { default?: ReactComponent }).default || module) as ReactComponent\n })\n\n // SSR render function factory - when on server without page/render, return a render function\n // This is used by the Vite plugin's SSR transform\n if (isServer && !page && !render) {\n return async (page: Page<SharedProps>, renderToString: RenderToString) => {\n let head: string[] = []\n\n const initialComponent = await resolveComponent(page.component, page)\n\n const props: InertiaAppProps<SharedProps> = {\n initialPage: page,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: (elements: string[]) => (head = elements),\n defaultLayout: layout,\n }\n\n let reactApp: ReactElement\n\n if (setup) {\n reactApp = (setup as (options: SetupOptions<null, SharedProps>) => ReactElement)({\n el: null,\n App,\n props,\n })\n } else {\n reactApp = wrapWithStrictMode(createElement(App, props))\n\n if (withApp) {\n reactApp = withApp(reactApp, { ssr: true })\n }\n }\n\n const html = renderToString(reactApp)\n const body = buildSSRBody(id, page, html)\n\n return { head, body }\n }\n }\n\n const initialPage = page || getInitialPageFromDOM<Page<SharedProps>>(id)!\n\n let head: string[] = []\n\n const reactApp = await Promise.all([\n resolveComponent(initialPage.component, initialPage),\n router.decryptHistory().catch(() => {}),\n ]).then(([initialComponent]) => {\n const props: InertiaAppProps<SharedProps> = {\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: isServer ? (elements: string[]) => (head = elements) : undefined,\n defaultLayout: layout,\n }\n\n if (isServer) {\n return (setup as (options: SetupOptions<null, SharedProps>) => ReactElement)({\n el: null,\n App,\n props,\n })\n }\n\n const el = document.getElementById(id)!\n\n if (setup) {\n return (setup as (options: SetupOptions<HTMLElement, SharedProps>) => void)({\n el,\n App,\n props,\n })\n }\n\n let appElement = wrapWithStrictMode(createElement(App, props))\n\n if (withApp) {\n appElement = withApp(appElement, { ssr: false })\n }\n\n if (el.hasAttribute('data-server-rendered')) {\n hydrateRoot(el, appElement)\n } else {\n createRoot(el).render(appElement)\n }\n })\n\n if (!isServer && progress) {\n setupProgress(progress)\n }\n\n if (isServer && render && reactApp) {\n const html = render(reactApp)\n const body = buildSSRBody(id, initialPage, html)\n\n return { head, body }\n }\n}\n", "import { isSameUrlWithoutQueryOrHash } from '@inertiajs/core'\nimport { get } from 'es-toolkit/compat'\nimport { ReactNode, useEffect, useMemo, useRef, useState } from 'react'\nimport { router } from '.'\nimport usePage from './usePage'\n\nconst keysAreBeingReloaded = (only: string[], except: string[], keys: string[]): boolean => {\n if (only.length === 0 && except.length === 0) {\n return true\n }\n\n if (only.length > 0) {\n return keys.some((key) => only.includes(key))\n }\n\n return keys.some((key) => !except.includes(key))\n}\n\ninterface DeferredSlotProps {\n reloading: boolean\n}\n\ninterface DeferredProps {\n children: ReactNode | ((props: DeferredSlotProps) => ReactNode)\n fallback: ReactNode | (() => ReactNode)\n data: string | string[]\n}\n\nconst Deferred = ({ children, data, fallback }: DeferredProps) => {\n if (!data) {\n throw new Error('`<Deferred>` requires a `data` prop to be a string or array of strings')\n }\n\n const [loaded, setLoaded] = useState(false)\n const [reloading, setReloading] = useState(false)\n const activeReloads = useRef(new Set<object>())\n const pageProps = usePage().props\n const keys = useMemo(() => (Array.isArray(data) ? data : [data]), [data])\n\n useEffect(() => {\n const removeStartListener = router.on('start', (e) => {\n const visit = e.detail.visit\n\n if (\n visit.preserveState === true &&\n isSameUrlWithoutQueryOrHash(visit.url, window.location) &&\n keysAreBeingReloaded(visit.only, visit.except, keys)\n ) {\n activeReloads.current.add(visit)\n setReloading(true)\n }\n })\n\n const removeFinishListener = router.on('finish', (e) => {\n const visit = e.detail.visit\n\n if (activeReloads.current.has(visit)) {\n activeReloads.current.delete(visit)\n setReloading(activeReloads.current.size > 0)\n }\n })\n\n return () => {\n removeStartListener()\n removeFinishListener()\n activeReloads.current.clear()\n }\n }, [keys])\n\n useEffect(() => {\n setLoaded(keys.every((key) => get(pageProps, key) !== undefined))\n }, [pageProps, keys])\n\n const propsAreDefined = useMemo(() => keys.every((key) => get(pageProps, key) !== undefined), [keys, pageProps])\n\n if (loaded && propsAreDefined) {\n if (typeof children === 'function') {\n return children({ reloading })\n }\n\n return children\n }\n\n return typeof fallback === 'function' ? fallback() : fallback\n}\n\nDeferred.displayName = 'InertiaDeferred'\n\nexport default Deferred\n", "import { Page, PageProps, SharedPageProps } from '@inertiajs/core'\nimport { use } from 'react'\nimport PageContext from './PageContext'\n\nexport default function usePage<TPageProps extends PageProps = PageProps>(): Page<TPageProps & SharedPageProps> {\n const page = use(PageContext)\n\n if (!page) {\n throw new Error('usePage must be used within the Inertia component')\n }\n\n return page as Page<TPageProps & SharedPageProps>\n}\n", "import {\n config,\n FormComponentProps,\n FormComponentRef,\n FormComponentResetSymbol,\n FormComponentSlotProps,\n FormDataConvertible,\n formDataToObject,\n isUrlMethodPair,\n mergeDataIntoQueryString,\n Method,\n resetFormFields,\n resolveUrlMethodPairComponent,\n UseFormUtils,\n VisitOptions,\n} from '@inertiajs/core'\nimport { isEqual } from 'es-toolkit'\nimport { NamedInputEvent, ValidationConfig } from 'laravel-precognition'\nimport React, {\n createContext,\n createElement,\n FormEvent,\n forwardRef,\n ReactNode,\n use,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport useForm from './useForm'\n\n// Polyfill for startTransition to support React 16.9+\nconst deferStateUpdate = (callback: () => void) => {\n typeof React.startTransition === 'function' ? React.startTransition(callback) : setTimeout(callback, 0)\n}\n\ntype FormProps<TForm extends object = Record<string, any>> = FormComponentProps &\n Omit<React.FormHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> &\n Omit<React.AllHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> & {\n children: ReactNode | ((props: FormComponentSlotProps<TForm>) => ReactNode)\n }\n\ntype FormSubmitOptions = Omit<VisitOptions, 'data' | 'onPrefetched' | 'onPrefetching'>\ntype FormSubmitter = HTMLElement | null\n\nconst noop = () => undefined\n\nconst FormContext = createContext<FormComponentRef | undefined>(undefined)\n\nconst Form = forwardRef<FormComponentRef, FormProps>(\n (\n {\n action = '',\n method = 'get',\n headers = {},\n queryStringArrayFormat = 'brackets',\n errorBag = null,\n showProgress = true,\n transform = (data) => data,\n optimistic,\n options = {},\n onStart = noop,\n onProgress = noop,\n onFinish = noop,\n onBefore = noop,\n onCancel = noop,\n onSuccess = noop,\n onError = noop,\n onCancelToken = noop,\n onSubmitComplete = noop,\n disableWhileProcessing = false,\n resetOnError = false,\n resetOnSuccess = false,\n setDefaultsOnSuccess = false,\n invalidateCacheTags = [],\n validateFiles = false,\n validationTimeout = 1500,\n withAllErrors = null,\n component = null,\n instant = false,\n children,\n ...props\n },\n ref,\n ) => {\n const getTransformedData = (): Record<string, FormDataConvertible> => {\n const [_url, data] = getUrlAndData()\n return transform(data)\n }\n\n const form = useForm<Record<string, any>>({})\n .withPrecognition(\n () => resolvedMethod,\n () => getUrlAndData()[0],\n )\n .setValidationTimeout(validationTimeout)\n\n if (validateFiles) {\n form.validateFiles()\n }\n\n if (withAllErrors ?? config.get('form.withAllErrors')) {\n form.withAllErrors()\n }\n\n form.transform(getTransformedData)\n\n const formElement = useRef<HTMLFormElement>(undefined)\n\n const resolvedMethod = useMemo(() => {\n return isUrlMethodPair(action) ? action.method : (method.toLowerCase() as Method)\n }, [action, method])\n\n const resolvedComponent = useMemo(() => {\n if (component) {\n return component\n }\n\n if (instant && isUrlMethodPair(action)) {\n return resolveUrlMethodPairComponent(action)\n }\n\n return null\n }, [component, instant, action])\n\n const [isDirty, setIsDirty] = useState(false)\n const defaultData = useRef<FormData>(new FormData())\n\n const getFormData = (submitter?: FormSubmitter): FormData => new FormData(formElement.current, submitter)\n\n // Convert the FormData to an object because we can't compare two FormData\n // instances directly (which is needed for isDirty), mergeDataIntoQueryString()\n // expects an object, and submitting a FormData instance directly causes problems with nested objects.\n const getData = (submitter?: FormSubmitter): Record<string, FormDataConvertible> =>\n formDataToObject(getFormData(submitter))\n\n const getUrlAndData = (submitter?: FormSubmitter): [string, Record<string, FormDataConvertible>] => {\n return mergeDataIntoQueryString(\n resolvedMethod,\n isUrlMethodPair(action) ? action.url : action,\n getData(submitter),\n queryStringArrayFormat,\n )\n }\n\n const updateDirtyState = (event: Event) => {\n if (event.type === 'reset' && (event as CustomEvent).detail?.[FormComponentResetSymbol]) {\n // When the form is reset programmatically, prevent native reset behavior\n event.preventDefault()\n }\n\n deferStateUpdate(() =>\n setIsDirty(event.type === 'reset' ? false : !isEqual(getData(), formDataToObject(defaultData.current))),\n )\n }\n\n const clearErrors = (...names: string[]) => {\n form.clearErrors(...names)\n\n return form\n }\n\n useEffect(() => {\n defaultData.current = getFormData()\n\n form.setDefaults(getData())\n\n const formEvents: Array<keyof HTMLElementEventMap> = ['input', 'change', 'reset']\n\n formEvents.forEach((e) => formElement.current!.addEventListener(e, updateDirtyState))\n\n return () => {\n formEvents.forEach((e) => formElement.current?.removeEventListener(e, updateDirtyState))\n }\n }, [])\n\n useEffect(() => {\n form.setValidationTimeout(validationTimeout)\n }, [validationTimeout])\n\n useEffect(() => {\n if (validateFiles) {\n form.validateFiles()\n } else {\n form.withoutFileValidation()\n }\n }, [validateFiles])\n\n const reset = (...fields: string[]) => {\n if (formElement.current) {\n resetFormFields(formElement.current, defaultData.current, fields)\n }\n\n form.reset(...fields)\n }\n\n const resetAndClearErrors = (...fields: string[]) => {\n clearErrors(...fields)\n reset(...fields)\n }\n\n const maybeReset = (resetOption: boolean | string[]) => {\n if (!resetOption) {\n return\n }\n\n if (resetOption === true) {\n reset()\n } else if (resetOption.length > 0) {\n reset(...resetOption)\n }\n }\n\n const submit = (submitter?: FormSubmitter) => {\n const [url, data] = getUrlAndData(submitter)\n const formTarget = (submitter as HTMLButtonElement | HTMLInputElement | null)?.getAttribute('formtarget')\n\n if (formTarget === '_blank' && resolvedMethod === 'get') {\n window.open(url, '_blank')\n return\n }\n\n const submitOptions: FormSubmitOptions = {\n headers,\n queryStringArrayFormat,\n errorBag,\n showProgress,\n invalidateCacheTags,\n component: resolvedComponent,\n optimistic: optimistic ? (pageProps) => optimistic(pageProps, data) : undefined,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess: (...args) => {\n onSuccess(...args)\n onSubmitComplete({\n reset,\n defaults,\n })\n maybeReset(resetOnSuccess)\n\n if (setDefaultsOnSuccess === true) {\n defaults()\n }\n },\n onError(...args) {\n onError(...args)\n maybeReset(resetOnError)\n },\n ...options,\n }\n\n // We need transform because we can't override the default data with different keys (by design)\n form.transform(() => transform(data))\n form.submit(resolvedMethod, url, submitOptions)\n\n // Reset the transformer back so the submitter is not used for future submissions\n form.transform(getTransformedData)\n }\n\n const defaults = () => {\n defaultData.current = getFormData()\n setIsDirty(false)\n }\n\n const exposed: FormComponentSlotProps = {\n errors: form.errors,\n hasErrors: form.hasErrors,\n processing: form.processing,\n progress: form.progress,\n wasSuccessful: form.wasSuccessful,\n recentlySuccessful: form.recentlySuccessful,\n isDirty,\n clearErrors,\n resetAndClearErrors,\n setError: form.setError,\n reset,\n submit,\n defaults,\n getData,\n getFormData,\n\n // Precognition\n validator: () => form.validator(),\n validating: form.validating,\n valid: form.valid,\n invalid: form.invalid,\n validate: (field?: string | NamedInputEvent | ValidationConfig, config?: ValidationConfig) =>\n form.validate(...UseFormUtils.mergeHeadersForValidation(field, config, headers)),\n touch: form.touch,\n touched: form.touched,\n }\n\n useImperativeHandle(ref, () => exposed, [form, isDirty, submit])\n\n const formNode = createElement(\n 'form',\n {\n ...props,\n ref: formElement,\n action: isUrlMethodPair(action) ? action.url : action,\n method: resolvedMethod,\n onSubmit: (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n submit((event.nativeEvent as SubmitEvent).submitter)\n },\n inert: disableWhileProcessing && form.processing,\n },\n typeof children === 'function' ? children(exposed) : children,\n )\n\n return createElement(FormContext.Provider, { value: exposed }, formNode)\n },\n)\n\nForm.displayName = 'InertiaForm'\n\nexport function useFormContext<TForm extends object = Record<string, any>>(): FormComponentRef<TForm> | undefined {\n return use(FormContext) as FormComponentRef<TForm> | undefined\n}\n\nexport default Form as {\n <TForm extends object = Record<string, any>>(\n props: FormProps<TForm> & React.RefAttributes<FormComponentRef<TForm>>,\n ): React.ReactElement\n displayName: string\n}\n", "import {\n CancelToken,\n ErrorValue,\n FormDataErrors,\n FormDataKeys,\n FormDataType,\n FormDataValues,\n Method,\n OptimisticCallback,\n Progress,\n RequestPayload,\n router,\n UrlMethodPair,\n UseFormArguments,\n UseFormSubmitArguments,\n UseFormSubmitOptions,\n UseFormTransformCallback,\n UseFormUtils,\n UseFormWithPrecognitionArguments,\n VisitOptions,\n} from '@inertiajs/core'\nimport { cloneDeep } from 'es-toolkit'\nimport type { NamedInputEvent, PrecognitionPath, ValidationConfig, Validator } from 'laravel-precognition'\nimport { useCallback, useRef, useState } from 'react'\nimport { useIsomorphicLayoutEffect } from './react'\nimport useFormState, { SetDataAction, SetDataByKeyValuePair, SetDataByMethod, SetDataByObject } from './useFormState'\nimport useRemember from './useRemember'\n\n// Re-export types that were moved to useFormState\nexport { SetDataAction, SetDataByKeyValuePair, SetDataByMethod, SetDataByObject }\n\ntype PrecognitionValidationConfig<TKeys> = ValidationConfig & {\n only?: TKeys[] | Iterable<TKeys> | ArrayLike<TKeys>\n}\n\nexport interface InertiaFormProps<TForm extends Record<string, any>> {\n data: TForm\n isDirty: boolean\n errors: FormDataErrors<TForm>\n hasErrors: boolean\n processing: boolean\n progress: Progress | null\n wasSuccessful: boolean\n recentlySuccessful: boolean\n setData: SetDataAction<TForm>\n transform: (callback: UseFormTransformCallback<TForm>) => void\n setDefaults: {\n (): void\n <T extends FormDataKeys<TForm>>(field: T, value: FormDataValues<TForm, T>): void\n (fields: Partial<TForm>): void\n }\n reset: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n clearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n resetAndClearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n setError: {\n <K extends FormDataKeys<TForm>>(field: K, value: ErrorValue): void\n (errors: FormDataErrors<TForm>): void\n }\n submit: (...args: UseFormSubmitArguments) => void\n get: (url: string, options?: UseFormSubmitOptions) => void\n post: (url: string, options?: UseFormSubmitOptions) => void\n put: (url: string, options?: UseFormSubmitOptions) => void\n patch: (url: string, options?: UseFormSubmitOptions) => void\n delete: (url: string, options?: UseFormSubmitOptions) => void\n cancel: () => void\n dontRemember: <K extends FormDataKeys<TForm>>(...fields: K[]) => InertiaFormProps<TForm>\n optimistic: <TProps>(callback: OptimisticCallback<TProps>) => InertiaFormProps<TForm>\n withPrecognition: (...args: UseFormWithPrecognitionArguments) => InertiaPrecognitiveFormProps<TForm>\n}\n\nexport interface InertiaFormValidationProps<TForm extends Record<string, any>> {\n invalid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n setValidationTimeout: (duration: number) => InertiaPrecognitiveFormProps<TForm>\n touch: <K extends FormDataKeys<TForm>>(\n field: K | NamedInputEvent | Array<K>,\n ...fields: K[]\n ) => InertiaPrecognitiveFormProps<TForm>\n touched: <K extends FormDataKeys<TForm>>(field?: K) => boolean\n valid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n validate: <K extends FormDataKeys<TForm> | PrecognitionPath<TForm>>(\n field?: K | NamedInputEvent | PrecognitionValidationConfig<K>,\n config?: PrecognitionValidationConfig<K>,\n ) => InertiaPrecognitiveFormProps<TForm>\n validateFiles: () => InertiaPrecognitiveFormProps<TForm>\n validating: boolean\n validator: () => Validator\n withAllErrors: () => InertiaPrecognitiveFormProps<TForm>\n withoutFileValidation: () => InertiaPrecognitiveFormProps<TForm>\n // Backward compatibility for easy migration from the original Precognition libraries\n setErrors: (errors: FormDataErrors<TForm>) => InertiaPrecognitiveFormProps<TForm>\n forgetError: <K extends FormDataKeys<TForm> | NamedInputEvent>(field: K) => InertiaPrecognitiveFormProps<TForm>\n}\n\nexport type InertiaForm<TForm extends Record<string, any>> = InertiaFormProps<TForm>\nexport type InertiaPrecognitiveFormProps<TForm extends Record<string, any>> = InertiaFormProps<TForm> &\n InertiaFormValidationProps<TForm>\n\nexport default function useForm<TForm extends FormDataType<TForm>>(\n method: Method | (() => Method),\n url: string | (() => string),\n data: TForm | (() => TForm),\n): InertiaPrecognitiveFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(\n urlMethodPair: UrlMethodPair | (() => UrlMethodPair),\n data: TForm | (() => TForm),\n): InertiaPrecognitiveFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(\n rememberKey: string,\n data: TForm | (() => TForm),\n): InertiaFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(data: TForm | (() => TForm)): InertiaFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(): InertiaFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(\n ...args: UseFormArguments<TForm>\n): InertiaFormProps<TForm> | InertiaPrecognitiveFormProps<TForm> {\n const { rememberKey, data, precognitionEndpoint } = UseFormUtils.parseUseFormArguments<TForm>(...args)\n\n // Resolve initial data for remember functionality hooks\n const initialDefaults = typeof data === 'function' ? cloneDeep(data()) : cloneDeep(data)\n\n const cancelToken = useRef<CancelToken | null>(null)\n const excludeKeysRef = useRef<FormDataKeys<TForm>[]>([])\n const pendingOptimisticRef = useRef<OptimisticCallback | null>(null)\n\n // For remember functionality, we need custom state hooks\n const useDataState = rememberKey\n ? () => useRemember<TForm>(initialDefaults, `${rememberKey}:data`, excludeKeysRef)\n : undefined\n\n const useErrorsState = rememberKey\n ? () => useRemember<FormDataErrors<TForm>>({} as FormDataErrors<TForm>, `${rememberKey}:errors`)\n : undefined\n\n const {\n form: baseForm,\n setDefaultsState,\n transformRef,\n precognitionEndpointRef,\n isMounted,\n setProcessing,\n setProgress,\n markAsSuccessful,\n clearErrors,\n setError,\n defaultsCalledInOnSuccessRef,\n resetBeforeSubmit,\n finishProcessing,\n } = useFormState<TForm>({\n data,\n precognitionEndpoint,\n useDataState,\n useErrorsState,\n })\n\n // Handle dataAsDefaults pattern for setDefaults synchronization\n // When setDefaults() is called without args immediately after setData(),\n // dataRef.current may be stale. This layout effect ensures the current\n // data state is used as defaults.\n const [dataAsDefaults, setDataAsDefaults] = useState(false)\n\n const originalSetDefaults = baseForm.setDefaults\n baseForm.setDefaults = useCallback(\n (fieldOrFields?: FormDataKeys<TForm> | Partial<TForm>, maybeValue?: unknown) => {\n if (typeof fieldOrFields === 'undefined') {\n setDataAsDefaults(true)\n }\n\n return originalSetDefaults(fieldOrFields as any, maybeValue as any)\n },\n [originalSetDefaults],\n ) as typeof baseForm.setDefaults\n\n useIsomorphicLayoutEffect(() => {\n if (!dataAsDefaults) {\n return\n }\n\n if (baseForm.isDirty) {\n setDefaultsState(baseForm.data)\n }\n\n setDataAsDefaults(false)\n }, [dataAsDefaults])\n\n const submit = useCallback(\n (...args: UseFormSubmitArguments) => {\n const { method, url, options } = UseFormUtils.parseSubmitArguments(args, precognitionEndpointRef.current)\n\n defaultsCalledInOnSuccessRef.current = false\n\n const _options: VisitOptions = {\n ...options,\n onCancelToken: (token) => {\n cancelToken.current = token\n\n return options.onCancelToken?.(token)\n },\n onBefore: (visit) => {\n resetBeforeSubmit()\n\n return options.onBefore?.(visit)\n },\n onStart: (visit) => {\n setProcessing(true)\n\n return options.onStart?.(visit)\n },\n onProgress: (event) => {\n setProgress(event || null)\n\n return options.onProgress?.(event)\n },\n onSuccess: async (page) => {\n if (isMounted.current) {\n markAsSuccessful()\n }\n\n const onSuccess = options.onSuccess ? await options.onSuccess(page) : null\n\n if (isMounted.current && !defaultsCalledInOnSuccessRef.current) {\n baseForm.setData((data: TForm) => {\n setDefaultsState(cloneDeep(data))\n return data\n })\n }\n\n return onSuccess\n },\n onError: (errors) => {\n if (isMounted.current) {\n clearErrors()\n setError(errors as FormDataErrors<TForm>)\n }\n\n return options.onError?.(errors)\n },\n onCancel: () => {\n return options.onCancel?.()\n },\n onFinish: (visit) => {\n if (isMounted.current) {\n finishProcessing()\n }\n\n cancelToken.current = null\n\n return options.onFinish?.(visit)\n },\n }\n\n _options.optimistic = _options.optimistic ?? pendingOptimisticRef.current ?? undefined\n pendingOptimisticRef.current = null\n\n const transformedData = transformRef.current(baseForm.data) as RequestPayload\n\n if (method === 'delete') {\n router.delete(url, { ..._options, data: transformedData })\n } else {\n router[method](url, transformedData, _options)\n }\n },\n [baseForm.data, clearErrors, setError, transformRef],\n )\n\n const cancel = useCallback(() => {\n if (cancelToken.current) {\n cancelToken.current.cancel()\n }\n }, [])\n\n const createSubmitMethod =\n (method: Method) =>\n (url: string, options: VisitOptions = {}) => {\n submit(method, url, options)\n }\n\n // Add useForm-specific methods to the form object (mutate in place like Svelte)\n Object.assign(baseForm, {\n submit,\n get: createSubmitMethod('get'),\n post: createSubmitMethod('post'),\n put: createSubmitMethod('put'),\n patch: createSubmitMethod('patch'),\n delete: createSubmitMethod('delete'),\n cancel,\n dontRemember: <K extends FormDataKeys<TForm>>(...keys: K[]) => {\n excludeKeysRef.current = keys\n return form\n },\n\n optimistic: <TProps>(callback: OptimisticCallback<TProps>) => {\n pendingOptimisticRef.current = callback as OptimisticCallback\n return form\n },\n })\n\n // Cast to the full form type (baseForm now has submit methods)\n const form = baseForm as unknown as InertiaFormProps<TForm>\n\n // Wrap withPrecognition to return the correct type with submit methods\n const originalWithPrecognition = baseForm.withPrecognition\n form.withPrecognition = (...args: UseFormWithPrecognitionArguments): InertiaPrecognitiveFormProps<TForm> => {\n originalWithPrecognition(...args)\n return form as InertiaPrecognitiveFormProps<TForm>\n }\n\n return precognitionEndpointRef.current ? (form as InertiaPrecognitiveFormProps<TForm>) : form\n}\n", "import { DependencyList, EffectCallback, useEffect, useLayoutEffect } from 'react'\n\n// Inspired by react-redux, this hook uses useLayoutEffect in the browser, and useEffect\n// when using SSR. Currently, useLayoutEffect doesn't work when rendered on the server.\nexport function useIsomorphicLayoutEffect(effect: EffectCallback, deps?: DependencyList): void {\n typeof window === 'undefined' ? useEffect(effect, deps) : useLayoutEffect(effect, deps)\n}\n", "import {\n Errors,\n ErrorValue,\n FormDataErrors,\n FormDataKeys,\n FormDataValues,\n Progress,\n UrlMethodPair,\n UseFormTransformCallback,\n UseFormUtils,\n UseFormWithPrecognitionArguments,\n} from '@inertiajs/core'\nimport { cloneDeep, isEqual } from 'es-toolkit'\nimport { get, has, set } from 'es-toolkit/compat'\nimport {\n createValidator,\n NamedInputEvent,\n resolveName,\n toSimpleValidationErrors,\n ValidationConfig,\n Validator,\n} from 'laravel-precognition'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { config } from '.'\n\nexport type SetDataByObject<TForm> = (data: Partial<TForm>) => void\nexport type SetDataByMethod<TForm> = (data: (previousData: TForm) => TForm) => void\nexport type SetDataByKeyValuePair<TForm> = <K extends FormDataKeys<TForm>>(\n key: K,\n value: FormDataValues<TForm, K>,\n) => void\nexport type SetDataAction<TForm extends Record<any, any>> = SetDataByObject<TForm> &\n SetDataByMethod<TForm> &\n SetDataByKeyValuePair<TForm>\n\ntype PrecognitionValidationConfig<TKeys> = ValidationConfig & {\n only?: TKeys[] | Iterable<TKeys> | ArrayLike<TKeys>\n}\n\nexport interface FormStateProps<TForm extends object> {\n data: TForm\n isDirty: boolean\n errors: FormDataErrors<TForm>\n hasErrors: boolean\n processing: boolean\n progress: Progress | null\n wasSuccessful: boolean\n recentlySuccessful: boolean\n setData: SetDataAction<TForm>\n transform: (callback: UseFormTransformCallback<TForm>) => void\n setDefaults: {\n (): void\n <T extends FormDataKeys<TForm>>(field: T, value: FormDataValues<TForm, T>): void\n (fields: Partial<TForm>): void\n }\n reset: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n clearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n resetAndClearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n setError: {\n <K extends FormDataKeys<TForm>>(field: K, value: ErrorValue): void\n (errors: FormDataErrors<TForm>): void\n }\n withPrecognition: (...args: UseFormWithPrecognitionArguments) => FormStateWithPrecognition<TForm>\n}\n\nexport interface FormStateValidationProps<TForm extends object> {\n invalid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n setValidationTimeout: (duration: number) => FormStateWithPrecognition<TForm>\n touch: <K extends FormDataKeys<TForm>>(\n field: K | NamedInputEvent | Array<K>,\n ...fields: K[]\n ) => FormStateWithPrecognition<TForm>\n touched: <K extends FormDataKeys<TForm>>(field?: K) => boolean\n valid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n validate: <K extends FormDataKeys<TForm>>(\n field?: K | NamedInputEvent | PrecognitionValidationConfig<K>,\n config?: PrecognitionValidationConfig<K>,\n ) => FormStateWithPrecognition<TForm>\n validateFiles: () => FormStateWithPrecognition<TForm>\n validating: boolean\n validator: () => Validator\n withAllErrors: () => FormStateWithPrecognition<TForm>\n withoutFileValidation: () => FormStateWithPrecognition<TForm>\n setErrors: (errors: FormDataErrors<TForm>) => FormStateWithPrecognition<TForm>\n forgetError: <K extends FormDataKeys<TForm> | NamedInputEvent>(field: K) => FormStateWithPrecognition<TForm>\n}\n\nexport type FormState<TForm extends object> = FormStateProps<TForm>\nexport type FormStateWithPrecognition<TForm extends object> = FormStateProps<TForm> & FormStateValidationProps<TForm>\n\nexport interface UseFormStateOptions<TForm extends object> {\n data: TForm | (() => TForm)\n precognitionEndpoint?: (() => UrlMethodPair) | null\n useDataState?: () => [TForm, React.Dispatch<React.SetStateAction<TForm>>]\n useErrorsState?: () => [FormDataErrors<TForm>, React.Dispatch<React.SetStateAction<FormDataErrors<TForm>>>]\n}\n\nexport interface UseFormStateReturn<TForm extends object> {\n form: FormState<TForm>\n setDefaultsState: React.Dispatch<React.SetStateAction<TForm>>\n transformRef: React.MutableRefObject<UseFormTransformCallback<TForm>>\n precognitionEndpointRef: React.MutableRefObject<(() => UrlMethodPair) | null>\n dataRef: React.MutableRefObject<TForm>\n isMounted: React.MutableRefObject<boolean>\n setProcessing: (value: boolean) => void\n setProgress: (value: Progress | null) => void\n markAsSuccessful: () => void\n clearErrors: (...fields: string[]) => void\n setError: (fieldOrFields: FormDataKeys<TForm> | FormDataErrors<TForm>, maybeValue?: ErrorValue) => void\n defaultsCalledInOnSuccessRef: React.MutableRefObject<boolean>\n resetBeforeSubmit: () => void\n finishProcessing: () => void\n withAllErrors: { enabled: () => boolean; enable: () => void }\n}\n\nexport default function useFormState<TForm extends object>(\n options: UseFormStateOptions<TForm>,\n): UseFormStateReturn<TForm> {\n const { data: dataOption, useDataState, useErrorsState } = options\n\n const isDataFunction = typeof dataOption === 'function'\n const resolveData = () => (isDataFunction ? (dataOption as () => TForm)() : dataOption)\n\n const initialData = cloneDeep(resolveData())\n\n const isMounted = useRef(false)\n const precognitionEndpointRef = useRef(options.precognitionEndpoint ?? null)\n\n const [defaults, setDefaultsState] = useState(cloneDeep(initialData))\n\n const [data, setData] = useDataState ? useDataState() : useState(cloneDeep(initialData))\n const [errors, setErrors] = useErrorsState ? useErrorsState() : useState({} as FormDataErrors<TForm>)\n const [processing, _setProcessing] = useState(false)\n const [progress, _setProgress] = useState<Progress | null>(null)\n const [wasSuccessful, setWasSuccessful] = useState(false)\n const [recentlySuccessful, setRecentlySuccessful] = useState(false)\n\n const recentlySuccessfulTimeoutId = useRef<number>(undefined)\n const transformRef = useRef<UseFormTransformCallback<TForm>>((data) => data)\n const defaultsCalledInOnSuccessRef = useRef(false)\n\n const validatorRef = useRef<Validator | null>(null)\n const [validating, setValidating] = useState(false)\n const [touchedFields, setTouchedFields] = useState<string[]>([])\n const [validFields, setValidFields] = useState<string[]>([])\n const withAllErrorsRef = useRef<boolean | null>(null)\n const withAllErrorsEnabled = () => withAllErrorsRef.current ?? config.get('form.withAllErrors')\n\n const dataRef = useRef(data)\n\n useEffect(() => {\n dataRef.current = data\n })\n\n useEffect(() => {\n isMounted.current = true\n return () => {\n isMounted.current = false\n }\n }, [])\n\n // Snapshot ref keeps state values accessible to the stable form object's getters.\n // Reassigned each render so getters always return the latest React state.\n const snapshotRef = useRef({\n data,\n defaults,\n errors,\n processing,\n progress,\n wasSuccessful,\n recentlySuccessful,\n validating,\n touchedFields,\n validFields,\n })\n\n snapshotRef.current = {\n data,\n defaults,\n errors,\n processing,\n progress,\n wasSuccessful,\n recentlySuccessful,\n validating,\n touchedFields,\n validFields,\n }\n\n const setProcessing = useCallback((value: boolean) => {\n _setProcessing(value)\n snapshotRef.current.processing = value\n }, [])\n\n const setProgress = useCallback((value: Progress | null) => {\n _setProgress(value)\n snapshotRef.current.progress = value\n }, [])\n\n const setDataFunction = useCallback(\n (keyOrData: FormDataKeys<TForm> | Function | Partial<TForm>, maybeValue?: any) => {\n if (typeof keyOrData === 'string') {\n setData((data) => set(cloneDeep(data), keyOrData, maybeValue))\n } else if (typeof keyOrData === 'function') {\n setData((data) => keyOrData(data))\n } else {\n setData(keyOrData as TForm)\n }\n },\n [setData],\n )\n\n const setDefaultsFunction = useCallback(\n (fieldOrFields?: FormDataKeys<TForm> | Partial<TForm>, maybeValue?: unknown) => {\n if (isDataFunction) {\n throw new Error('You cannot call `defaults()` when using a function to define your form data.')\n }\n\n defaultsCalledInOnSuccessRef.current = true\n\n let newDefaults = {} as TForm\n\n if (typeof fieldOrFields === 'undefined') {\n newDefaults = { ...dataRef.current }\n setDefaultsState(dataRef.current)\n } else {\n setDefaultsState((defaults) => {\n newDefaults =\n typeof fieldOrFields === 'string'\n ? set(cloneDeep(defaults), fieldOrFields, maybeValue)\n : Object.assign(cloneDeep(defaults), fieldOrFields)\n\n return newDefaults as TForm\n })\n }\n\n validatorRef.current?.defaults(newDefaults as Record<string, unknown>)\n },\n [setDefaultsState],\n )\n\n const reset = useCallback(\n (...fields: string[]) => {\n const resolvedData = isDataFunction ? cloneDeep(resolveData()) : defaults\n const clonedData = cloneDeep(resolvedData)\n\n if (fields.length === 0) {\n if (isDataFunction) {\n setDefaultsState(clonedData)\n }\n setData(clonedData)\n } else {\n if (isDataFunction) {\n setDefaultsState((currentDefaults) => {\n const newDefaults = cloneDeep(currentDefaults)\n ;(fields as Array<FormDataKeys<TForm>>)\n .filter((key) => has(clonedData, key))\n .forEach((key) => {\n set(newDefaults, key, get(clonedData, key))\n })\n return newDefaults\n })\n }\n\n setData((data) =>\n (fields as Array<FormDataKeys<TForm>>)\n .filter((key) => has(clonedData, key))\n .reduce(\n (carry, key) => {\n return set(carry, key, get(clonedData, key))\n },\n { ...data } as TForm,\n ),\n )\n }\n\n validatorRef.current?.reset(...fields)\n },\n [setData, defaults],\n )\n\n const setError = useCallback(\n (fieldOrFields: FormDataKeys<TForm> | FormDataErrors<TForm>, maybeValue?: ErrorValue) => {\n setErrors((errors) => {\n const newErrors = {\n ...errors,\n ...(typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields),\n }\n\n snapshotRef.current.errors = newErrors as FormDataErrors<TForm>\n validatorRef.current?.setErrors(newErrors)\n\n return newErrors\n })\n },\n [setErrors],\n )\n\n const clearErrors = useCallback(\n (...fields: string[]) => {\n setErrors((errors) => {\n const newErrors = Object.keys(errors).reduce(\n (carry, field) => ({\n ...carry,\n ...(fields.length > 0 && !fields.includes(field) ? { [field]: (errors as Errors)[field] } : {}),\n }),\n {},\n )\n\n snapshotRef.current.errors = newErrors as FormDataErrors<TForm>\n\n if (validatorRef.current) {\n if (fields.length === 0) {\n validatorRef.current.setErrors({})\n } else {\n fields.forEach(validatorRef.current.forgetError)\n }\n }\n\n return newErrors as FormDataErrors<TForm>\n })\n },\n [setErrors],\n )\n\n const resetAndClearErrors = useCallback(\n (...fields: string[]) => {\n reset(...fields)\n clearErrors(...fields)\n },\n [reset, clearErrors],\n )\n\n const setWasSuccessfulWithSnapshot = useCallback((value: boolean) => {\n setWasSuccessful(value)\n snapshotRef.current.wasSuccessful = value\n }, [])\n\n const setRecentlySuccessfulWithSnapshot = useCallback((value: boolean) => {\n setRecentlySuccessful(value)\n snapshotRef.current.recentlySuccessful = value\n }, [])\n\n const markAsSuccessful = useCallback(() => {\n clearErrors()\n setWasSuccessfulWithSnapshot(true)\n setRecentlySuccessfulWithSnapshot(true)\n\n recentlySuccessfulTimeoutId.current = window.setTimeout(() => {\n if (isMounted.current) {\n setRecentlySuccessfulWithSnapshot(false)\n }\n }, config.get('form.recentlySuccessfulDuration'))\n }, [clearErrors, setWasSuccessfulWithSnapshot, setRecentlySuccessfulWithSnapshot])\n\n const resetBeforeSubmit = useCallback(() => {\n setWasSuccessfulWithSnapshot(false)\n setRecentlySuccessfulWithSnapshot(false)\n clearTimeout(recentlySuccessfulTimeoutId.current)\n }, [setWasSuccessfulWithSnapshot, setRecentlySuccessfulWithSnapshot])\n\n const finishProcessing = useCallback(() => {\n setProcessing(false)\n setProgress(null)\n }, [setProcessing, setProgress])\n\n const transformFunction = useCallback((callback: UseFormTransformCallback<TForm>) => {\n transformRef.current = callback\n }, [])\n\n const tap = <T>(value: T, callback: (value: T) => unknown): T => {\n callback(value)\n return value\n }\n\n const valid = useCallback(\n <K extends FormDataKeys<TForm>>(field: K) => validFields.includes(field as string),\n [validFields],\n )\n\n const invalid = useCallback(<K extends FormDataKeys<TForm>>(field: K) => field in errors, [errors])\n\n const touched = useCallback(\n <K extends FormDataKeys<TForm>>(field?: K) =>\n typeof field === 'string' ? touchedFields.includes(field as string) : touchedFields.length > 0,\n [touchedFields],\n )\n\n // Stable form object created once. Getters read from snapshotRef so they\n // always return the latest React state without requiring a new object identity.\n const form = useMemo(() => {\n return {\n get data() {\n return snapshotRef.current.data\n },\n get isDirty() {\n return !isEqual(snapshotRef.current.data, snapshotRef.current.defaults)\n },\n get errors() {\n return snapshotRef.current.errors\n },\n get hasErrors() {\n return Object.keys(snapshotRef.current.errors).length > 0\n },\n get processing() {\n return snapshotRef.current.processing\n },\n get progress() {\n return snapshotRef.current.progress\n },\n get wasSuccessful() {\n return snapshotRef.current.wasSuccessful\n },\n get recentlySuccessful() {\n return snapshotRef.current.recentlySuccessful\n },\n } as FormState<TForm>\n }, [])\n\n // Assign methods onto the stable object each render. Methods may have changing\n // deps (e.g. reset depends on defaults) so we reassign them, but the object\n // identity stays the same.\n Object.assign(form, {\n setData: setDataFunction,\n transform: transformFunction,\n setDefaults: setDefaultsFunction,\n reset,\n setError,\n clearErrors,\n resetAndClearErrors,\n })\n\n const validate = (field?: string | NamedInputEvent | ValidationConfig, config?: ValidationConfig) => {\n if (typeof field === 'object' && !('target' in field)) {\n config = field\n field = undefined\n }\n\n if (field === undefined) {\n validatorRef.current!.validate(config)\n } else {\n const fieldName = resolveName(field)\n const transformedData = transformRef.current(dataRef.current) as Record<string, unknown>\n validatorRef.current!.validate(fieldName, get(transformedData, fieldName), config)\n }\n\n return form\n }\n\n const withPrecognition = (...args: UseFormWithPrecognitionArguments): FormStateWithPrecognition<TForm> => {\n precognitionEndpointRef.current = UseFormUtils.createWayfinderCallback(...args)\n\n if (!validatorRef.current) {\n const validator = createValidator(\n (client) => {\n const { method, url } = precognitionEndpointRef.current!()\n const currentData = dataRef.current\n const transformedData = transformRef.current(currentData) as Record<string, unknown>\n return client[method](url, transformedData)\n },\n cloneDeep(defaults as Record<string, unknown>),\n )\n\n validatorRef.current = validator\n\n validator\n .on('validatingChanged', () => {\n setValidating(validator.validating())\n })\n .on('validatedChanged', () => {\n setValidFields(validator.valid())\n })\n .on('touchedChanged', () => {\n setTouchedFields(validator.touched())\n })\n .on('errorsChanged', () => {\n const validationErrors = withAllErrorsEnabled()\n ? validator.errors()\n : toSimpleValidationErrors(validator.errors())\n\n setErrors(validationErrors as FormDataErrors<TForm>)\n snapshotRef.current.errors = validationErrors as FormDataErrors<TForm>\n setValidFields(validator.valid())\n })\n }\n\n const precognitiveForm = Object.assign(form, {\n get validating() {\n return snapshotRef.current.validating\n },\n validator: () => validatorRef.current!,\n valid,\n invalid,\n touched,\n withoutFileValidation: () => tap(precognitiveForm, () => validatorRef.current?.withoutFileValidation()),\n touch: (\n field: FormDataKeys<TForm> | NamedInputEvent | Array<FormDataKeys<TForm>>,\n ...fields: FormDataKeys<TForm>[]\n ) => {\n if (Array.isArray(field)) {\n validatorRef.current?.touch(field)\n } else if (typeof field === 'string') {\n validatorRef.current?.touch([field, ...fields])\n } else {\n validatorRef.current?.touch(field)\n }\n\n return precognitiveForm\n },\n withAllErrors: () => tap(precognitiveForm, () => (withAllErrorsRef.current = true)),\n setValidationTimeout: (duration: number) =>\n tap(precognitiveForm, () => validatorRef.current?.setTimeout(duration)),\n validateFiles: () => tap(precognitiveForm, () => validatorRef.current?.validateFiles()),\n validate,\n setErrors: (errors: FormDataErrors<TForm>) => tap(precognitiveForm, () => form.setError(errors)),\n forgetError: (field: FormDataKeys<TForm> | NamedInputEvent) =>\n tap(precognitiveForm, () =>\n form.clearErrors(resolveName(field as string | NamedInputEvent) as FormDataKeys<TForm>),\n ),\n }) as FormStateWithPrecognition<TForm>\n\n return precognitiveForm\n }\n\n form.withPrecognition = withPrecognition\n\n if (precognitionEndpointRef.current) {\n form.withPrecognition(precognitionEndpointRef.current)\n }\n\n return {\n form,\n setDefaultsState,\n transformRef,\n precognitionEndpointRef,\n dataRef,\n isMounted,\n setProcessing,\n setProgress,\n markAsSuccessful,\n clearErrors,\n setError,\n defaultsCalledInOnSuccessRef,\n resetBeforeSubmit,\n finishProcessing,\n withAllErrors: {\n enabled: withAllErrorsEnabled,\n enable: () => {\n withAllErrorsRef.current = true\n },\n },\n }\n}\n", "import { router } from '@inertiajs/core'\nimport { Dispatch, MutableRefObject, SetStateAction, useEffect, useState } from 'react'\n\nexport default function useRemember<State>(\n initialState: State,\n key?: string,\n excludeKeysRef?: MutableRefObject<string[]>,\n): [State, Dispatch<SetStateAction<State>>] {\n const [state, setState] = useState(() => {\n const restored = router.restore(key) as State\n\n return restored !== undefined ? restored : initialState\n })\n\n useEffect(() => {\n const keys = excludeKeysRef?.current\n if (keys && keys.length > 0 && typeof state === 'object' && state !== null) {\n const filtered = { ...state } as Record<string, unknown>\n keys.forEach((k) => delete filtered[k])\n router.remember(filtered, key)\n } else {\n router.remember(state, key)\n }\n }, [state, key])\n\n return [state, setState]\n}\n", "import { escape } from 'es-toolkit/compat'\nimport React, { FunctionComponent, ReactElement, ReactNode, use, useEffect, useMemo } from 'react'\nimport HeadContext from './HeadContext'\n\ntype InertiaHeadProps = {\n title?: string\n children?: ReactNode\n}\n\ntype InertiaHead = FunctionComponent<InertiaHeadProps>\n\nconst Head: InertiaHead = function ({ children, title }) {\n const headManager = use(HeadContext)\n const provider = useMemo(() => headManager!.createProvider(), [headManager])\n const isServer = typeof window === 'undefined'\n\n useEffect(() => {\n provider.reconnect()\n provider.update(renderNodes(children))\n return () => {\n provider.disconnect()\n }\n }, [provider, children, title])\n\n function isUnaryTag(node: ReactElement<any>) {\n return (\n typeof node.type === 'string' &&\n [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n ].indexOf(node.type) > -1\n )\n }\n\n function renderTagStart(node: ReactElement<any>): string {\n const attrs = Object.keys(node.props).reduce((carry, name) => {\n if (['head-key', 'children', 'dangerouslySetInnerHTML'].includes(name)) {\n return carry\n }\n\n const value = String(node.props[name])\n\n if (value === '') {\n return carry + ` ${name}`\n }\n\n return carry + ` ${name}=\"${escape(value)}\"`\n }, '')\n\n return `<${String(node.type)}${attrs}>`\n }\n\n function renderTagChildren(node: ReactElement<any>): string {\n const { children } = node.props\n\n if (typeof children === 'string') {\n return children\n }\n\n if (Array.isArray(children)) {\n return children.reduce((html, child) => html + renderTag(child), '')\n }\n\n return ''\n }\n\n function renderTag(node: ReactElement<any>): string {\n let html = renderTagStart(node)\n\n if (node.props.children) {\n html += renderTagChildren(node)\n }\n\n if (node.props.dangerouslySetInnerHTML) {\n html += node.props.dangerouslySetInnerHTML.__html\n }\n\n if (!isUnaryTag(node)) {\n html += `</${String(node.type)}>`\n }\n\n return html\n }\n\n function ensureNodeHasInertiaProp(node: ReactElement<any>) {\n return React.cloneElement(node, {\n 'data-inertia': node.props['head-key'] !== undefined ? node.props['head-key'] : '',\n })\n }\n\n function renderNode(node: ReactElement<any>) {\n return renderTag(ensureNodeHasInertiaProp(node))\n }\n\n function renderNodes(nodes: ReactNode) {\n const elements = React.Children.toArray(nodes)\n .filter((node) => node)\n .map((node) => renderNode(node as ReactElement<any>))\n\n if (title && !elements.find((tag) => tag.startsWith('<title'))) {\n elements.push(`<title data-inertia=\"\">${title}</title>`)\n }\n\n return elements\n }\n\n if (isServer) {\n provider.update(renderNodes(children))\n }\n\n return null\n}\nexport default Head\n", "import {\n getScrollableParent,\n InfiniteScrollActionSlotProps,\n InfiniteScrollComponentBaseProps,\n InfiniteScrollRef,\n InfiniteScrollSlotProps,\n ReloadOptions,\n useInfiniteScroll,\n UseInfiniteScrollProps,\n} from '@inertiajs/core'\nimport React, {\n createElement,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport usePage from './usePage'\n\nconst resolveHTMLElement = (\n value: string | React.RefObject<HTMLElement | null> | null,\n fallback: HTMLElement | null,\n): HTMLElement | null => {\n if (!value) {\n return fallback\n }\n\n // React ref object { current: HTMLElement | null }\n if (value && typeof value === 'object' && 'current' in value) {\n return value.current\n }\n\n // CSS Selector string\n if (typeof value === 'string') {\n return document.querySelector(value) as HTMLElement | null\n }\n\n return fallback\n}\n\n// Helper function to render slot content\nconst renderSlot = (\n slotContent: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode) | undefined,\n slotProps: InfiniteScrollActionSlotProps,\n fallback: React.ReactNode = null,\n): React.ReactNode => {\n if (!slotContent) {\n return fallback\n }\n\n return typeof slotContent === 'function' ? slotContent(slotProps) : slotContent\n}\n\ninterface ComponentProps\n extends\n InfiniteScrollComponentBaseProps,\n Omit<React.HTMLAttributes<HTMLElement>, keyof InfiniteScrollComponentBaseProps | 'children'> {\n children?: React.ReactNode | ((props: InfiniteScrollSlotProps) => React.ReactNode)\n\n // Element references for custom trigger detection (when you want different trigger elements)\n startElement?: string | React.RefObject<HTMLElement | null>\n endElement?: string | React.RefObject<HTMLElement | null>\n itemsElement?: string | React.RefObject<HTMLElement | null>\n\n // Render slots for UI components (when you want custom loading/action components)\n previous?: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode)\n next?: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode)\n loading?: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode)\n\n // Request options\n params?: ReloadOptions\n\n onlyNext?: boolean\n onlyPrevious?: boolean\n}\n\nconst InfiniteScroll = forwardRef<InfiniteScrollRef, ComponentProps>(\n (\n {\n data,\n buffer = 0,\n as = 'div',\n manual = false,\n manualAfter = 0,\n preserveUrl = false,\n reverse = false,\n autoScroll,\n children,\n startElement,\n endElement,\n itemsElement,\n previous,\n next,\n loading,\n params = {},\n onlyNext = false,\n onlyPrevious = false,\n ...props\n },\n ref,\n ) => {\n const [startElementFromRef, setStartElementFromRef] = useState<HTMLElement | null>(null)\n const startElementRef = useCallback((node: HTMLElement | null) => setStartElementFromRef(node), [])\n\n const [endElementFromRef, setEndElementFromRef] = useState<HTMLElement | null>(null)\n const endElementRef = useCallback((node: HTMLElement | null) => setEndElementFromRef(node), [])\n\n const [itemsElementFromRef, setItemsElementFromRef] = useState<HTMLElement | null>(null)\n const itemsElementRef = useCallback((node: HTMLElement | null) => setItemsElementFromRef(node), [])\n\n const scrollProp = usePage().scrollProps?.[data]\n\n const [loadingPrevious, setLoadingPrevious] = useState(false)\n const [loadingNext, setLoadingNext] = useState(false)\n const [requestCount, setRequestCount] = useState(0)\n const [hasPreviousPage, setHasPreviousPage] = useState(!!scrollProp?.previousPage)\n const [hasNextPage, setHasNextPage] = useState(!!scrollProp?.nextPage)\n\n const [resolvedStartElement, setResolvedStartElement] = useState<HTMLElement | null>(null)\n const [resolvedEndElement, setResolvedEndElement] = useState<HTMLElement | null>(null)\n const [resolvedItemsElement, setResolvedItemsElement] = useState<HTMLElement | null>(null)\n\n // Update elements when refs or props change\n useEffect(() => {\n const element = startElement ? resolveHTMLElement(startElement, startElementFromRef) : startElementFromRef\n setResolvedStartElement(element)\n }, [startElement, startElementFromRef])\n\n useEffect(() => {\n const element = endElement ? resolveHTMLElement(endElement, endElementFromRef) : endElementFromRef\n setResolvedEndElement(element)\n }, [endElement, endElementFromRef])\n\n useEffect(() => {\n const element = itemsElement ? resolveHTMLElement(itemsElement, itemsElementFromRef) : itemsElementFromRef\n setResolvedItemsElement(element)\n }, [itemsElement, itemsElementFromRef])\n\n const scrollableParent = useMemo(() => getScrollableParent(resolvedItemsElement), [resolvedItemsElement])\n\n const callbackPropsRef = useRef({\n buffer,\n onlyNext,\n onlyPrevious,\n reverse,\n preserveUrl,\n params,\n })\n\n callbackPropsRef.current = {\n buffer,\n onlyNext,\n onlyPrevious,\n reverse,\n preserveUrl,\n params,\n }\n\n const [infiniteScroll, setInfiniteScroll] = useState<UseInfiniteScrollProps | null>(null)\n\n const dataManager = useMemo(() => infiniteScroll?.dataManager, [infiniteScroll])\n const elementManager = useMemo(() => infiniteScroll?.elementManager, [infiniteScroll])\n\n const scrollToBottom = useCallback(() => {\n if (scrollableParent) {\n scrollableParent.scrollTo({\n top: scrollableParent.scrollHeight,\n behavior: 'instant',\n })\n } else {\n window.scrollTo({\n top: document.body.scrollHeight,\n behavior: 'instant',\n })\n }\n }, [scrollableParent])\n\n // Main setup effect - only recreate when structural dependencies change\n useEffect(() => {\n if (!resolvedItemsElement) {\n return\n }\n\n function syncStateFromDataManager() {\n setRequestCount(infiniteScrollInstance.dataManager.getRequestCount())\n setHasPreviousPage(infiniteScrollInstance.dataManager.hasPrevious())\n setHasNextPage(infiniteScrollInstance.dataManager.hasNext())\n }\n\n const infiniteScrollInstance = useInfiniteScroll({\n // Data\n getPropName: () => data,\n inReverseMode: () => callbackPropsRef.current.reverse,\n shouldFetchNext: () => !callbackPropsRef.current.onlyPrevious,\n shouldFetchPrevious: () => !callbackPropsRef.current.onlyNext,\n shouldPreserveUrl: () => callbackPropsRef.current.preserveUrl,\n getReloadOptions: () => callbackPropsRef.current.params,\n\n // Elements\n getTriggerMargin: () => callbackPropsRef.current.buffer,\n getStartElement: () => resolvedStartElement!,\n getEndElement: () => resolvedEndElement!,\n getItemsElement: () => resolvedItemsElement,\n getScrollableParent: () => scrollableParent,\n\n // Callbacks\n onBeforePreviousRequest: () => setLoadingPrevious(true),\n onBeforeNextRequest: () => setLoadingNext(true),\n onCompletePreviousRequest: () => {\n setLoadingPrevious(false)\n syncStateFromDataManager()\n },\n onCompleteNextRequest: () => {\n setLoadingNext(false)\n syncStateFromDataManager()\n },\n onDataReset: syncStateFromDataManager,\n })\n\n setInfiniteScroll(infiniteScrollInstance)\n const { dataManager, elementManager } = infiniteScrollInstance\n syncStateFromDataManager()\n\n elementManager.setupObservers()\n elementManager.processServerLoadedElements(dataManager.getLastLoadedPage())\n\n if (autoLoad) {\n elementManager.enableTriggers()\n }\n\n return () => {\n infiniteScrollInstance.flush()\n setInfiniteScroll(null)\n }\n }, [data, resolvedItemsElement, resolvedStartElement, resolvedEndElement, scrollableParent])\n\n const manualMode = useMemo(\n () => manual || (manualAfter > 0 && requestCount >= manualAfter),\n [manual, manualAfter, requestCount],\n )\n const autoLoad = useMemo(() => !manualMode, [manualMode])\n\n useEffect(() => {\n autoLoad ? elementManager?.enableTriggers() : elementManager?.disableTriggers()\n }, [autoLoad, onlyNext, onlyPrevious, resolvedStartElement, resolvedEndElement])\n\n useEffect(() => {\n // autoScroll defaults to reverse value if not explicitly set\n const shouldAutoScroll = autoScroll !== undefined ? autoScroll : reverse\n\n if (shouldAutoScroll) {\n scrollToBottom()\n }\n }, [scrollableParent])\n\n useImperativeHandle(\n ref,\n () => ({\n fetchNext: dataManager?.fetchNext || (() => {}),\n fetchPrevious: dataManager?.fetchPrevious || (() => {}),\n hasPrevious: dataManager?.hasPrevious || (() => false),\n hasNext: dataManager?.hasNext || (() => false),\n }),\n [dataManager],\n )\n\n const headerAutoMode = autoLoad && !onlyNext\n const footerAutoMode = autoLoad && !onlyPrevious\n\n const sharedExposed: Pick<\n InfiniteScrollActionSlotProps,\n 'loadingPrevious' | 'loadingNext' | 'hasPrevious' | 'hasNext'\n > = {\n loadingPrevious,\n loadingNext,\n hasPrevious: hasPreviousPage,\n hasNext: hasNextPage,\n }\n\n const exposedPrevious: InfiniteScrollActionSlotProps = {\n loading: loadingPrevious,\n fetch: dataManager?.fetchPrevious ?? (() => {}),\n autoMode: headerAutoMode,\n manualMode: !headerAutoMode,\n hasMore: hasPreviousPage,\n ...sharedExposed,\n }\n\n const exposedNext: InfiniteScrollActionSlotProps = {\n loading: loadingNext,\n fetch: dataManager?.fetchNext ?? (() => {}),\n autoMode: footerAutoMode,\n manualMode: !footerAutoMode,\n hasMore: hasNextPage,\n ...sharedExposed,\n }\n\n const exposedSlot: InfiniteScrollSlotProps = {\n loading: loadingPrevious || loadingNext,\n loadingPrevious,\n loadingNext,\n }\n\n const renderElements = []\n\n // Only render previous trigger if not using custom element selector/ref\n if (!startElement) {\n renderElements.push(\n createElement(\n 'div',\n { ref: startElementRef },\n // Render previous slot or fallback to loading indicator\n renderSlot(previous, exposedPrevious, loadingPrevious ? renderSlot(loading, exposedPrevious) : null),\n ),\n )\n }\n\n renderElements.push(\n createElement(\n as,\n { ...props, ref: itemsElementRef },\n typeof children === 'function' ? children(exposedSlot) : children,\n ),\n )\n\n // Only render next trigger if not using custom element selector/ref\n if (!endElement) {\n renderElements.push(\n createElement(\n 'div',\n { ref: endElementRef },\n // Render next slot or fallback to loading indicator\n renderSlot(next, exposedNext, loadingNext ? renderSlot(loading, exposedNext) : null),\n ),\n )\n }\n\n return createElement(React.Fragment, {}, ...(reverse ? [...renderElements].reverse() : renderElements))\n },\n)\n\nInfiniteScroll.displayName = 'InertiaInfiniteScroll'\n\nexport default InfiniteScroll\n", "import {\n ActiveVisit,\n isUrlMethodPair,\n LinkComponentBaseProps,\n LinkPrefetchOption,\n mergeDataIntoQueryString,\n Method,\n PendingVisit,\n resolveUrlMethodPairComponent,\n router,\n shouldIntercept,\n shouldNavigate,\n VisitOptions,\n} from '@inertiajs/core'\nimport { createElement, ElementType, forwardRef, useEffect, useMemo, useRef, useState } from 'react'\nimport { config } from '.'\n\nconst noop = () => undefined\n\ninterface BaseInertiaLinkProps extends LinkComponentBaseProps {\n as?: ElementType\n onClick?: (event: React.MouseEvent) => void\n}\n\nexport type InertiaLinkProps = BaseInertiaLinkProps &\n Omit<React.HTMLAttributes<HTMLElement>, keyof BaseInertiaLinkProps> &\n Omit<React.AllHTMLAttributes<HTMLElement>, keyof BaseInertiaLinkProps>\n\nconst Link = forwardRef<unknown, InertiaLinkProps>(\n (\n {\n children,\n as = 'a',\n data = {},\n href = '',\n method = 'get',\n preserveScroll = false,\n preserveState = null,\n preserveUrl = false,\n replace = false,\n only = [],\n except = [],\n headers = {},\n queryStringArrayFormat = 'brackets',\n async = false,\n onClick = noop,\n onCancelToken = noop,\n onBefore = noop,\n onStart = noop,\n onProgress = noop,\n onFinish = noop,\n onCancel = noop,\n onSuccess = noop,\n onError = noop,\n onPrefetching = noop,\n onPrefetched = noop,\n prefetch = false,\n cacheFor = 0,\n cacheTags = [],\n viewTransition = false,\n component = null,\n instant = false,\n pageProps = null,\n ...props\n },\n ref,\n ) => {\n const [inFlightCount, setInFlightCount] = useState(0)\n const hoverTimeout = useRef<number>(undefined)\n\n const _method = useMemo(() => {\n return isUrlMethodPair(href) ? href.method : (method.toLowerCase() as Method)\n }, [href, method])\n\n const resolvedComponent = useMemo(() => {\n if (component) {\n return component\n }\n\n if (instant && isUrlMethodPair(href)) {\n return resolveUrlMethodPairComponent(href)\n }\n\n return null\n }, [component, instant, href])\n\n const _as = useMemo(() => {\n if (typeof as !== 'string' || as.toLowerCase() !== 'a') {\n // Custom component or element\n return as\n }\n\n return _method !== 'get' ? 'button' : as.toLowerCase()\n }, [as, _method])\n\n const mergeDataArray = useMemo(\n () => mergeDataIntoQueryString(_method, isUrlMethodPair(href) ? href.url : href, data, queryStringArrayFormat),\n [href, _method, data, queryStringArrayFormat],\n )\n\n const url = useMemo(() => mergeDataArray[0], [mergeDataArray])\n const _data = useMemo(() => mergeDataArray[1], [mergeDataArray])\n\n const baseParams = useMemo<VisitOptions>(\n () => ({\n data: _data,\n method: _method,\n preserveScroll,\n preserveState: preserveState ?? _method !== 'get',\n preserveUrl,\n replace,\n only,\n except,\n headers,\n async,\n component: resolvedComponent,\n pageProps,\n }),\n [\n _data,\n _method,\n preserveScroll,\n preserveState,\n preserveUrl,\n replace,\n only,\n except,\n headers,\n async,\n resolvedComponent,\n pageProps,\n ],\n )\n\n const visitParams = useMemo<VisitOptions>(\n () => ({\n ...baseParams,\n viewTransition,\n onCancelToken,\n onBefore,\n onStart(visit: PendingVisit) {\n setInFlightCount((count) => count + 1)\n onStart(visit)\n },\n onProgress,\n onFinish(visit: ActiveVisit) {\n setInFlightCount((count) => count - 1)\n onFinish(visit)\n },\n onCancel,\n onSuccess,\n onError,\n }),\n [\n baseParams,\n viewTransition,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n ],\n )\n\n const prefetchModes: LinkPrefetchOption[] = useMemo(\n () => {\n if (prefetch === true) {\n return ['hover']\n }\n\n if (prefetch === false) {\n return []\n }\n\n if (Array.isArray(prefetch)) {\n return prefetch\n }\n\n return [prefetch]\n },\n Array.isArray(prefetch) ? prefetch : [prefetch],\n )\n\n const cacheForValue = useMemo(() => {\n if (cacheFor !== 0) {\n // If they've provided a value, respect it\n return cacheFor\n }\n\n if (prefetchModes.length === 1 && prefetchModes[0] === 'click') {\n // If they've only provided a prefetch mode of 'click',\n // we should only prefetch for the next request but not keep it around\n return 0\n }\n\n // Otherwise, default to 30 seconds\n return config.get('prefetch.cacheFor')\n }, [cacheFor, prefetchModes])\n\n const doPrefetch = useMemo(() => {\n return () => {\n router.prefetch(\n url,\n {\n ...baseParams,\n onPrefetching,\n onPrefetched,\n },\n { cacheFor: cacheForValue, cacheTags },\n )\n }\n }, [url, baseParams, onPrefetching, onPrefetched, cacheForValue, cacheTags])\n\n useEffect(() => {\n return () => {\n clearTimeout(hoverTimeout.current)\n }\n }, [])\n\n useEffect(() => {\n if (prefetchModes.includes('mount')) {\n setTimeout(() => doPrefetch())\n }\n }, prefetchModes)\n\n const regularEvents = {\n onClick: (event: React.MouseEvent) => {\n onClick(event)\n\n if (shouldIntercept(event)) {\n event.preventDefault()\n\n router.visit(url, visitParams)\n }\n },\n }\n\n const prefetchHoverEvents = {\n onMouseEnter: () => {\n hoverTimeout.current = window.setTimeout(() => {\n doPrefetch()\n }, config.get('prefetch.hoverDelay'))\n },\n onMouseLeave: () => {\n clearTimeout(hoverTimeout.current)\n },\n onClick: regularEvents.onClick,\n }\n\n const prefetchClickEvents = {\n onMouseDown: (event: React.MouseEvent) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n doPrefetch()\n }\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (shouldNavigate(event)) {\n event.preventDefault()\n doPrefetch()\n }\n },\n onMouseUp: (event: React.MouseEvent) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n router.visit(url, visitParams)\n }\n },\n onKeyUp: (event: React.KeyboardEvent) => {\n if (shouldNavigate(event)) {\n event.preventDefault()\n router.visit(url, visitParams)\n }\n },\n onClick: (event: React.MouseEvent) => {\n onClick(event)\n\n if (shouldIntercept(event)) {\n // Let the mouseup/keyup event handle the visit\n event.preventDefault()\n }\n },\n }\n\n const elProps = useMemo(() => {\n if (_as === 'button') {\n return { type: 'button' }\n }\n\n if (_as === 'a' || typeof _as !== 'string') {\n return { href: url }\n }\n\n return {}\n }, [_as, url])\n\n return createElement(\n _as,\n {\n ...props,\n ...elProps,\n ref,\n ...(() => {\n if (prefetchModes.includes('hover')) {\n return prefetchHoverEvents\n }\n\n if (prefetchModes.includes('click')) {\n return prefetchClickEvents\n }\n\n return regularEvents\n })(),\n 'data-loading': inFlightCount > 0 ? '' : undefined,\n },\n children,\n )\n },\n)\nLink.displayName = 'InertiaLink'\n\nexport default Link\n", "import {\n CancelToken,\n Errors,\n ErrorValue,\n FormDataConvertible,\n FormDataErrors,\n FormDataKeys,\n FormDataType,\n FormDataValues,\n hasFiles,\n http,\n HttpCancelledError,\n HttpProgressEvent,\n HttpResponseError,\n mergeDataIntoQueryString,\n Method,\n objectToFormData,\n Progress,\n UrlMethodPair,\n UseFormArguments,\n UseFormTransformCallback,\n UseFormUtils,\n UseFormWithPrecognitionArguments,\n UseHttpSubmitArguments,\n UseHttpSubmitOptions,\n} from '@inertiajs/core'\nimport { cloneDeep } from 'es-toolkit'\nimport { NamedInputEvent, toSimpleValidationErrors, ValidationConfig, Validator } from 'laravel-precognition'\nimport { useCallback, useRef, useState } from 'react'\nimport useFormState, { SetDataAction } from './useFormState'\nimport useRemember from './useRemember'\n\ntype PrecognitionValidationConfig<TKeys> = ValidationConfig & {\n only?: TKeys[] | Iterable<TKeys> | ArrayLike<TKeys>\n}\n\nexport interface UseHttpProps<TForm extends object, TResponse = unknown> {\n data: TForm\n isDirty: boolean\n errors: FormDataErrors<TForm>\n hasErrors: boolean\n processing: boolean\n progress: Progress | null\n wasSuccessful: boolean\n recentlySuccessful: boolean\n response: TResponse | null\n setData: SetDataAction<TForm>\n transform: (callback: UseFormTransformCallback<TForm>) => void\n setDefaults: {\n (): void\n <T extends FormDataKeys<TForm>>(field: T, value: FormDataValues<TForm, T>): void\n (fields: Partial<TForm>): void\n }\n reset: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n clearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n resetAndClearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n setError: {\n <K extends FormDataKeys<TForm>>(field: K, value: ErrorValue): void\n (errors: FormDataErrors<TForm>): void\n }\n submit: (...args: UseHttpSubmitArguments<TResponse, TForm>) => Promise<TResponse>\n get: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n post: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n put: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n patch: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n delete: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n cancel: () => void\n dontRemember: <K extends FormDataKeys<TForm>>(...fields: K[]) => UseHttpProps<TForm, TResponse>\n optimistic: (callback: (currentData: TForm) => Partial<TForm>) => UseHttpProps<TForm, TResponse>\n withAllErrors: () => UseHttpProps<TForm, TResponse>\n withPrecognition: (...args: UseFormWithPrecognitionArguments) => UseHttpPrecognitiveProps<TForm, TResponse>\n}\n\nexport interface UseHttpValidationProps<TForm extends object, TResponse = unknown> {\n invalid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n setValidationTimeout: (duration: number) => UseHttpPrecognitiveProps<TForm, TResponse>\n touch: <K extends FormDataKeys<TForm>>(\n field: K | NamedInputEvent | Array<K>,\n ...fields: K[]\n ) => UseHttpPrecognitiveProps<TForm, TResponse>\n touched: <K extends FormDataKeys<TForm>>(field?: K) => boolean\n valid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n validate: <K extends FormDataKeys<TForm>>(\n field?: K | NamedInputEvent | PrecognitionValidationConfig<K>,\n config?: PrecognitionValidationConfig<K>,\n ) => UseHttpPrecognitiveProps<TForm, TResponse>\n validateFiles: () => UseHttpPrecognitiveProps<TForm, TResponse>\n validating: boolean\n validator: () => Validator\n withAllErrors: () => UseHttpPrecognitiveProps<TForm, TResponse>\n withoutFileValidation: () => UseHttpPrecognitiveProps<TForm, TResponse>\n setErrors: (errors: FormDataErrors<TForm>) => UseHttpPrecognitiveProps<TForm, TResponse>\n forgetError: <K extends FormDataKeys<TForm> | NamedInputEvent>(field: K) => UseHttpPrecognitiveProps<TForm, TResponse>\n}\n\nexport type UseHttp<TForm extends object, TResponse = unknown> = UseHttpProps<TForm, TResponse>\nexport type UseHttpPrecognitiveProps<TForm extends object, TResponse = unknown> = UseHttpProps<TForm, TResponse> &\n UseHttpValidationProps<TForm, TResponse>\n\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n method: Method | (() => Method),\n url: string | (() => string),\n data: TForm | (() => TForm),\n): UseHttpPrecognitiveProps<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n urlMethodPair: UrlMethodPair | (() => UrlMethodPair),\n data: TForm | (() => TForm),\n): UseHttpPrecognitiveProps<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n rememberKey: string,\n data: TForm | (() => TForm),\n): UseHttp<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n data: TForm | (() => TForm),\n): UseHttp<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(): UseHttp<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n ...args: UseFormArguments<TForm>\n): UseHttp<TForm, TResponse> | UseHttpPrecognitiveProps<TForm, TResponse> {\n const { rememberKey, data, precognitionEndpoint } = UseFormUtils.parseUseFormArguments<TForm>(...args)\n\n // Resolve initial data for remember functionality hooks\n const initialDefaults = typeof data === 'function' ? cloneDeep(data()) : cloneDeep(data)\n\n const abortController = useRef<AbortController | null>(null)\n const excludeKeysRef = useRef<FormDataKeys<TForm>[]>([])\n const pendingOptimisticRef = useRef<((currentData: TForm) => Partial<TForm>) | null>(null)\n const [response, setResponse] = useState<TResponse | null>(null)\n\n // For remember functionality, we need custom state hooks\n const useDataState = rememberKey\n ? () => useRemember<TForm>(initialDefaults, `${rememberKey}:data`, excludeKeysRef)\n : undefined\n\n const useErrorsState = rememberKey\n ? () => useRemember<FormDataErrors<TForm>>({} as FormDataErrors<TForm>, `${rememberKey}:errors`)\n : undefined\n\n const {\n form: baseForm,\n setDefaultsState,\n transformRef,\n dataRef,\n precognitionEndpointRef,\n isMounted,\n setProcessing,\n setProgress,\n markAsSuccessful,\n clearErrors,\n setError,\n defaultsCalledInOnSuccessRef,\n resetBeforeSubmit,\n finishProcessing,\n withAllErrors,\n } = useFormState<TForm>({\n data,\n precognitionEndpoint,\n useDataState,\n useErrorsState,\n })\n\n const submit = useCallback(\n async (method: Method, url: string, options: UseHttpSubmitOptions<TResponse, TForm>): Promise<TResponse> => {\n const onBefore = options.onBefore?.()\n\n if (onBefore === false) {\n return Promise.reject(new Error('Request cancelled by onBefore'))\n }\n\n defaultsCalledInOnSuccessRef.current = false\n\n if (isMounted.current) {\n resetBeforeSubmit()\n }\n\n abortController.current = new AbortController()\n\n const cancelToken: CancelToken = {\n cancel: () => abortController.current?.abort(),\n }\n\n options.onCancelToken?.(cancelToken)\n\n options.optimistic = options.optimistic ?? pendingOptimisticRef.current ?? undefined\n pendingOptimisticRef.current = null\n\n let snapshot: TForm | undefined\n\n if (options.optimistic) {\n snapshot = cloneDeep(dataRef.current)\n const optimisticData = options.optimistic(cloneDeep(snapshot))\n\n baseForm.setData((current: TForm) => ({ ...current, ...optimisticData }))\n }\n\n if (isMounted.current) {\n setProcessing(true)\n }\n\n options.onStart?.()\n\n const transformedData = transformRef.current(dataRef.current)\n const useFormData = hasFiles(transformedData as Record<string, FormDataConvertible>)\n\n let requestUrl = url\n let requestData: FormData | string | undefined\n let contentType: string | undefined\n\n if (method === 'get') {\n const [urlWithParams] = mergeDataIntoQueryString(\n method,\n url,\n transformedData as Record<string, FormDataConvertible>,\n )\n requestUrl = urlWithParams\n } else {\n if (useFormData) {\n requestData = objectToFormData(transformedData as Record<string, FormDataConvertible>)\n } else {\n requestData = JSON.stringify(transformedData)\n contentType = 'application/json'\n }\n }\n\n try {\n const httpResponse = await http.getClient().request({\n method,\n url: requestUrl,\n data: requestData,\n headers: {\n Accept: 'application/json',\n ...(contentType ? { 'Content-Type': contentType } : {}),\n ...options.headers,\n },\n signal: abortController.current.signal,\n onUploadProgress: (event: HttpProgressEvent) => {\n if (isMounted.current) {\n setProgress(event)\n }\n\n options.onProgress?.(event)\n },\n })\n\n const responseData = (httpResponse.data ? JSON.parse(httpResponse.data) : null) as TResponse\n\n if (httpResponse.status >= 200 && httpResponse.status < 300) {\n if (isMounted.current) {\n markAsSuccessful()\n setResponse(responseData)\n }\n\n options.onSuccess?.(responseData)\n\n if (isMounted.current && !defaultsCalledInOnSuccessRef.current) {\n baseForm.setData((data: TForm) => {\n setDefaultsState(cloneDeep(data))\n return data\n })\n }\n\n return responseData\n }\n\n throw new HttpResponseError(`Request failed with status ${httpResponse.status}`, httpResponse)\n } catch (error: unknown) {\n if (snapshot && isMounted.current) {\n baseForm.setData(snapshot)\n }\n\n if (error instanceof HttpResponseError) {\n if (error.response.status === 422) {\n const responseData = JSON.parse(error.response.data)\n const validationErrors = responseData.errors || {}\n const processedErrors = (\n withAllErrors.enabled() ? validationErrors : toSimpleValidationErrors(validationErrors)\n ) as FormDataErrors<TForm>\n\n if (isMounted.current) {\n clearErrors()\n setError(processedErrors)\n }\n\n options.onError?.(processedErrors as Errors)\n }\n\n throw error\n }\n\n if (error instanceof HttpCancelledError || (error instanceof Error && error.name === 'AbortError')) {\n options.onCancel?.()\n throw new HttpCancelledError('Request was cancelled', url)\n }\n\n throw error\n } finally {\n if (isMounted.current) {\n finishProcessing()\n }\n\n abortController.current = null\n options.onFinish?.()\n }\n },\n [clearErrors, setError],\n )\n\n const cancel = useCallback(() => {\n if (abortController.current) {\n abortController.current.abort()\n }\n }, [])\n\n const createSubmitMethod =\n (method: Method) =>\n async (url: string, options: UseHttpSubmitOptions<TResponse, TForm> = {}): Promise<TResponse> => {\n return submit(method, url, options)\n }\n\n const submitWithArgs = useCallback(\n (...args: UseHttpSubmitArguments<TResponse, TForm>): Promise<TResponse> => {\n const parsed = UseFormUtils.parseSubmitArguments(args as any, precognitionEndpointRef.current)\n\n return submit(parsed.method, parsed.url, parsed.options as UseHttpSubmitOptions<TResponse, TForm>)\n },\n [submit],\n )\n\n // Add useHttp-specific methods to the form object (mutate in place like Svelte)\n Object.assign(baseForm, {\n response,\n submit: submitWithArgs,\n get: createSubmitMethod('get'),\n post: createSubmitMethod('post'),\n put: createSubmitMethod('put'),\n patch: createSubmitMethod('patch'),\n delete: createSubmitMethod('delete'),\n cancel,\n dontRemember: <K extends FormDataKeys<TForm>>(...keys: K[]) => {\n excludeKeysRef.current = keys\n return form\n },\n\n optimistic: (callback: (currentData: TForm) => Partial<TForm>) => {\n pendingOptimisticRef.current = callback\n return form\n },\n\n withAllErrors: () => {\n withAllErrors.enable()\n return form\n },\n })\n\n // Cast to the full form type (baseForm now has HTTP methods)\n const form = baseForm as unknown as UseHttpProps<TForm, TResponse>\n\n // Wrap withPrecognition to return the correct type with HTTP methods\n const originalWithPrecognition = baseForm.withPrecognition\n form.withPrecognition = (...args: UseFormWithPrecognitionArguments): UseHttpPrecognitiveProps<TForm, TResponse> => {\n originalWithPrecognition(...args)\n return form as UseHttpPrecognitiveProps<TForm, TResponse>\n }\n\n return precognitionEndpointRef.current ? (form as UseHttpPrecognitiveProps<TForm, TResponse>) : form\n}\n", "import { PollOptions, ReloadOptions, router } from '@inertiajs/core'\nimport { useEffect, useRef } from 'react'\n\nexport default function usePoll(\n interval: number,\n requestOptions: ReloadOptions = {},\n options: PollOptions = {\n keepAlive: false,\n autoStart: true,\n },\n) {\n const pollRef = useRef(\n router.poll(interval, requestOptions, {\n ...options,\n autoStart: false,\n }),\n )\n\n useEffect(() => {\n if (options.autoStart ?? true) {\n pollRef.current.start()\n }\n\n return () => pollRef.current.stop()\n }, [])\n\n return {\n stop: pollRef.current.stop,\n start: pollRef.current.start,\n }\n}\n", "import { router, VisitOptions } from '@inertiajs/core'\nimport { useEffect, useState } from 'react'\n\nexport default function usePrefetch(options: VisitOptions = {}): {\n lastUpdatedAt: number | null\n isPrefetching: boolean\n isPrefetched: boolean\n flush: () => void\n} {\n const cached = typeof window === 'undefined' ? null : router.getCached(window.location.pathname, options)\n const inFlight = typeof window === 'undefined' ? null : router.getPrefetching(window.location.pathname, options)\n\n const [lastUpdatedAt, setLastUpdatedAt] = useState<number | null>(cached?.staleTimestamp || null)\n const [isPrefetching, setIsPrefetching] = useState(inFlight !== null)\n const [isPrefetched, setIsPrefetched] = useState(cached !== null)\n\n useEffect(() => {\n const onPrefetchingListener = router.on('prefetching', (e) => {\n if (e.detail.visit.url.pathname === window.location.pathname) {\n setIsPrefetching(true)\n }\n })\n\n const onPrefetchedListener = router.on('prefetched', (e) => {\n if (e.detail.visit.url.pathname === window.location.pathname) {\n setIsPrefetching(false)\n setIsPrefetched(true)\n setLastUpdatedAt(e.detail.fetchedAt)\n }\n })\n\n return () => {\n onPrefetchedListener()\n onPrefetchingListener()\n }\n }, [])\n\n return {\n lastUpdatedAt,\n isPrefetching,\n isPrefetched,\n flush: () => router.flush(window.location.pathname, options),\n }\n}\n", "import { ReloadOptions, router } from '@inertiajs/core'\nimport { get } from 'es-toolkit/compat'\nimport { createElement, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport usePage from './usePage'\n\ninterface WhenVisibleSlotProps {\n fetching: boolean\n}\n\ninterface WhenVisibleProps {\n children: ReactNode | ((props: WhenVisibleSlotProps) => ReactNode)\n fallback: ReactNode | (() => ReactNode)\n data?: string | string[]\n params?: ReloadOptions\n buffer?: number\n as?: string\n always?: boolean\n}\n\nconst WhenVisible = ({ children, data, params, buffer, as, always, fallback }: WhenVisibleProps) => {\n always = always ?? false\n as = as ?? 'div'\n fallback = fallback ?? null\n\n const pageProps = usePage().props\n const keys = useMemo(() => (data ? (Array.isArray(data) ? data : [data]) : []), [data])\n\n const [loaded, setLoaded] = useState(() => keys.length > 0 && keys.every((key) => get(pageProps, key) !== undefined))\n const [isFetching, setIsFetching] = useState(false)\n const fetching = useRef<boolean>(false)\n const ref = useRef<HTMLDivElement>(null)\n const observer = useRef<IntersectionObserver | null>(null)\n const getReloadParamsRef = useRef<() => Partial<ReloadOptions>>(() => ({}))\n\n useEffect(() => {\n if (keys.length > 0) {\n setLoaded(keys.every((key) => get(pageProps, key) !== undefined))\n }\n }, [pageProps, keys])\n\n const getReloadParams = useCallback<() => Partial<ReloadOptions>>(() => {\n const reloadParams: Partial<ReloadOptions> = { preserveErrors: true, ...params }\n\n if (data) {\n reloadParams.only = (Array.isArray(data) ? data : [data]) as string[]\n }\n\n return reloadParams\n }, [params, data])\n\n getReloadParamsRef.current = getReloadParams\n\n const registerObserver = () => {\n observer.current?.disconnect()\n\n observer.current = new IntersectionObserver(\n (entries) => {\n if (!entries[0].isIntersecting) {\n return\n }\n\n if (fetching.current) {\n return\n }\n\n if (!always && loaded) {\n return\n }\n\n fetching.current = true\n setIsFetching(true)\n\n const reloadParams = getReloadParamsRef.current()\n\n router.reload({\n ...reloadParams,\n onStart: (e) => {\n fetching.current = true\n setIsFetching(true)\n reloadParams.onStart?.(e)\n },\n onFinish: (e) => {\n setLoaded(true)\n fetching.current = false\n setIsFetching(false)\n reloadParams.onFinish?.(e)\n\n if (!always) {\n observer.current?.disconnect()\n }\n },\n })\n },\n {\n rootMargin: `${buffer || 0}px`,\n },\n )\n\n observer.current.observe(ref.current!)\n }\n\n useEffect(() => {\n if (!ref.current) {\n return\n }\n\n if (loaded && !always) {\n return\n }\n\n registerObserver()\n\n return () => {\n observer.current?.disconnect()\n }\n }, [always, loaded, buffer])\n\n const resolveChildren = () => (typeof children === 'function' ? children({ fetching: isFetching }) : children)\n const resolveFallback = () => (typeof fallback === 'function' ? fallback() : fallback)\n\n if (always || !loaded) {\n return createElement(\n as,\n {\n props: null,\n ref,\n },\n loaded ? resolveChildren() : resolveFallback(),\n )\n }\n\n return loaded ? resolveChildren() : null\n}\n\nWhenVisible.displayName = 'InertiaWhenVisible'\n\nexport default WhenVisible\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["http", "router", "createContext", "current", "layouts", "router", "createElement", "progress", "http", "createElement", "page", "head", "reactApp", "router", "useEffect", "useMemo", "useState", "useState", "useMemo", "useEffect", "router", "config", "UseFormUtils", "isEqual", "createContext", "createElement", "use", "useEffect", "useMemo", "useRef", "useState", "router", "UseFormUtils", "cloneDeep", "useCallback", "useRef", "useState", "useEffect", "get", "useEffect", "
|
|
4
|
+
"sourcesContent": ["import { config as coreConfig } from '@inertiajs/core'\nimport type { ReactInertiaAppConfig } from './types'\n\nexport { http, progress, router } from '@inertiajs/core'\nexport { default as App } from './App'\nexport { default as createInertiaApp } from './createInertiaApp'\nexport { default as Deferred } from './Deferred'\nexport { default as Form, useFormContext } from './Form'\nexport { default as Head } from './Head'\nexport { default as InfiniteScroll } from './InfiniteScroll'\nexport { resetLayoutProps, setLayoutProps, setLayoutPropsFor } from './layoutProps'\nexport { InertiaLinkProps, default as Link } from './Link'\nexport { LayoutCallback, ReactComponent as ResolvedComponent } from './types'\nexport {\n InertiaForm,\n InertiaFormProps,\n InertiaPrecognitiveFormProps,\n SetDataAction,\n SetDataByKeyValuePair,\n SetDataByMethod,\n SetDataByObject,\n default as useForm,\n} from './useForm'\nexport { default as useHttp } from './useHttp'\nexport { default as usePage } from './usePage'\nexport { default as usePoll } from './usePoll'\nexport { default as usePrefetch } from './usePrefetch'\nexport { default as useRemember } from './useRemember'\nexport { default as WhenVisible } from './WhenVisible'\n\nexport const config = coreConfig.extend<ReactInertiaAppConfig>()\n", "import {\n createHeadManager,\n HeadManagerOnUpdateCallback,\n HeadManagerTitleCallback,\n normalizeLayouts,\n Page,\n PageHandler,\n PageProps,\n router,\n} from '@inertiajs/core'\nimport {\n createElement,\n FunctionComponent,\n isValidElement,\n ReactNode,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n} from 'react'\nimport { flushSync } from 'react-dom'\nimport HeadContext from './HeadContext'\nimport { resetLayoutProps, store } from './layoutProps'\nimport PageContext from './PageContext'\nimport { LayoutFunction, ReactComponent, ReactPageHandlerArgs } from './types'\n\nfunction isComponent(value: unknown): value is ReactComponent {\n if (!value) {\n return false\n }\n\n if (typeof value === 'object' && '$$typeof' in value) {\n return true\n }\n\n if (typeof value === 'function') {\n const fn = value as Function & { displayName?: string; prototype?: { isReactComponent?: boolean } }\n return fn.prototype?.isReactComponent === true || fn.name !== '' || fn.displayName !== undefined\n }\n\n return false\n}\n\nfunction isRenderFunction(value: unknown): boolean {\n if (typeof value !== 'function') {\n return false\n }\n\n const fn = value as Function\n return fn.length === 1 && typeof fn.prototype === 'undefined'\n}\n\nlet currentIsInitialPage = true\nlet routerIsInitialized = false\nlet swapComponent: PageHandler<ReactComponent> = async () => {\n // Dummy function so we can init the router outside of the useEffect hook. This is\n // needed so `router.reload()` works right away (on mount) in any of the user's\n // components. We swap in the real function in the useEffect hook below.\n currentIsInitialPage = false\n}\n\ntype CurrentPage = {\n component: ReactComponent | null\n page: Page\n key: number | null\n}\n\nexport interface InertiaAppProps<SharedProps extends PageProps = PageProps> {\n children?: (options: { Component: ReactComponent; props: PageProps; key: number | null }) => ReactNode\n initialPage: Page<SharedProps>\n initialComponent?: ReactComponent\n resolveComponent?: (name: string, page?: Page) => ReactComponent | Promise<ReactComponent>\n titleCallback?: HeadManagerTitleCallback\n onHeadUpdate?: HeadManagerOnUpdateCallback\n defaultLayout?: (name: string, page: Page) => unknown\n}\n\nexport type InertiaApp = FunctionComponent<InertiaAppProps>\n\nconst emptySnapshot = {\n shared: {} as Record<string, unknown>,\n named: {} as Record<string, Record<string, unknown>>,\n}\n\nexport default function App<SharedProps extends PageProps = PageProps>({\n children,\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback,\n onHeadUpdate,\n defaultLayout,\n}: InertiaAppProps<SharedProps>) {\n const [current, setCurrent] = useState<CurrentPage>({\n component: initialComponent || null,\n page: { ...initialPage, flash: initialPage.flash ?? {} },\n key: null,\n })\n\n const headManager = useMemo(() => {\n return createHeadManager(\n typeof window === 'undefined',\n titleCallback || ((title) => title),\n onHeadUpdate || (() => {}),\n )\n }, [])\n\n const dynamicLayoutProps = useSyncExternalStore(store.subscribe, store.get, () => emptySnapshot)\n\n if (!routerIsInitialized) {\n router.init<ReactComponent>({\n initialPage,\n resolveComponent: resolveComponent!,\n swapComponent: async (args) => swapComponent(args),\n onFlash: (flash) => {\n setCurrent((current) => ({\n ...current,\n page: { ...current.page, flash },\n }))\n },\n })\n\n routerIsInitialized = true\n }\n\n useEffect(() => {\n swapComponent = async ({ component, page, preserveState }: ReactPageHandlerArgs) => {\n if (currentIsInitialPage) {\n // We block setting the current page on the initial page to\n // prevent the initial page from being re-rendered again.\n currentIsInitialPage = false\n return\n }\n\n if (!preserveState) {\n resetLayoutProps()\n }\n\n flushSync(() =>\n setCurrent((current) => ({\n component,\n page,\n key: preserveState ? current.key : Date.now(),\n })),\n )\n }\n\n router.on('navigate', () => headManager.forceUpdate())\n }, [])\n\n if (!current.component) {\n return createElement(\n HeadContext.Provider,\n { value: headManager },\n createElement(PageContext.Provider, { value: current.page }, null),\n )\n }\n\n const renderChildren =\n children ||\n (({ Component, props, key }) => {\n const child = createElement(Component, { key, ...props })\n\n if (Component.layout && isRenderFunction(Component.layout)) {\n const result = (Component.layout as Function)(props)\n\n if (isValidElement(result)) {\n return (Component.layout as LayoutFunction)(child)\n }\n\n const layouts = normalizeLayouts(result, isComponent)\n\n if (layouts.length > 0) {\n return layouts.reduceRight((childNode, layout) => {\n return createElement(\n layout.component,\n {\n ...props,\n ...layout.props,\n ...dynamicLayoutProps.shared,\n ...(layout.name ? dynamicLayoutProps.named[layout.name] || {} : {}),\n },\n childNode,\n )\n }, child)\n }\n\n return child\n }\n\n const effectiveLayout = Component.layout ?? defaultLayout?.(current.page.component, current.page)\n const layouts = normalizeLayouts(effectiveLayout, isComponent, Component.layout ? isRenderFunction : undefined)\n\n if (layouts.length > 0) {\n return layouts.reduceRight((childNode, layout) => {\n return createElement(\n layout.component,\n {\n ...props,\n ...layout.props,\n ...dynamicLayoutProps.shared,\n ...(layout.name ? dynamicLayoutProps.named[layout.name] || {} : {}),\n },\n childNode,\n )\n }, child)\n }\n\n return child\n })\n\n return createElement(\n HeadContext.Provider,\n { value: headManager },\n createElement(\n PageContext.Provider,\n { value: current.page },\n renderChildren({\n Component: current.component,\n key: current.key,\n props: current.page.props,\n }),\n ),\n )\n}\n\nApp.displayName = 'Inertia'\n", "import { HeadManager } from '@inertiajs/core'\nimport { createContext } from 'react'\n\nconst headContext = createContext<HeadManager | null>(null)\nheadContext.displayName = 'InertiaHeadContext'\n\nexport default headContext\n", "import { createLayoutPropsStore, type LayoutProps, type NamedLayoutProps } from '@inertiajs/core'\n\nexport const store = createLayoutPropsStore()\n\nexport function setLayoutProps(props: Partial<LayoutProps>): void {\n store.set(props)\n}\n\nexport function setLayoutPropsFor<K extends keyof NamedLayoutProps>(\n name: K,\n props: Partial<NamedLayoutProps[K]>,\n): void {\n store.setFor(name, props)\n}\n\nexport function resetLayoutProps(): void {\n store.reset()\n}\n", "import { Page } from '@inertiajs/core'\nimport { createContext } from 'react'\n\nconst pageContext = createContext<Page | null>(null)\npageContext.displayName = 'InertiaPageContext'\n\nexport default pageContext\n", "import {\n buildSSRBody,\n CreateInertiaAppOptions,\n CreateInertiaAppOptionsForCSR,\n CreateInertiaAppOptionsForSSR,\n getInitialPageFromDOM,\n http as httpModule,\n InertiaAppSSRResponse,\n Page,\n PageProps,\n router,\n setupProgress,\n SharedPageProps,\n} from '@inertiajs/core'\nimport { createElement, ReactElement, StrictMode } from 'react'\nimport { createRoot, hydrateRoot } from 'react-dom/client'\nimport { renderToString } from 'react-dom/server'\nimport App, { InertiaAppProps, type InertiaApp } from './App'\nimport { config } from './index'\nimport { ReactComponent, ReactInertiaAppConfig } from './types'\n\nexport type SetupOptions<ElementType, SharedProps extends PageProps> = {\n el: ElementType\n App: InertiaApp\n props: InertiaAppProps<SharedProps>\n}\n\ntype ComponentResolver = (\n name: string,\n page?: Page<SharedPageProps>,\n) => ReactComponent | Promise<ReactComponent> | { default: ReactComponent }\n\ntype InertiaAppOptionsForCSR<SharedProps extends PageProps> = CreateInertiaAppOptionsForCSR<\n SharedProps,\n ComponentResolver,\n SetupOptions<HTMLElement, SharedProps>,\n void,\n ReactInertiaAppConfig\n> & {\n strictMode?: undefined\n withApp?: (app: ReactElement, options: { ssr: boolean }) => ReactElement\n}\n\ntype InertiaAppOptionsForSSR<SharedProps extends PageProps> = CreateInertiaAppOptionsForSSR<\n SharedProps,\n ComponentResolver,\n SetupOptions<null, SharedProps>,\n ReactElement,\n ReactInertiaAppConfig\n> & {\n render: typeof renderToString\n strictMode?: undefined\n withApp?: (app: ReactElement, options: { ssr: boolean }) => ReactElement\n}\n\ntype InertiaAppOptionsAuto<SharedProps extends PageProps> = CreateInertiaAppOptions<\n ComponentResolver,\n SetupOptions<HTMLElement | null, SharedProps>,\n ReactElement | void,\n ReactInertiaAppConfig\n> & {\n page?: Page<SharedProps>\n render?: undefined\n strictMode?: boolean\n withApp?: (app: ReactElement, options: { ssr: boolean }) => ReactElement\n}\n\ntype RenderToString = (element: ReactElement) => string\n\ntype RenderFunction<SharedProps extends PageProps> = (\n page: Page<SharedProps>,\n renderToString: RenderToString,\n) => Promise<InertiaAppSSRResponse>\n\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n options: InertiaAppOptionsForCSR<SharedProps>,\n): Promise<void>\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n options: InertiaAppOptionsForSSR<SharedProps>,\n): Promise<InertiaAppSSRResponse>\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n options?: InertiaAppOptionsAuto<SharedProps>,\n): Promise<void | RenderFunction<SharedProps>>\nexport default async function createInertiaApp<SharedProps extends PageProps = PageProps & SharedPageProps>(\n {\n id = 'app',\n resolve,\n setup,\n title,\n progress = {},\n page,\n render,\n defaults = {},\n http,\n layout,\n strictMode = false,\n withApp,\n }:\n | InertiaAppOptionsForCSR<SharedProps>\n | InertiaAppOptionsForSSR<SharedProps>\n | InertiaAppOptionsAuto<SharedProps> = {} as InertiaAppOptionsAuto<SharedProps>,\n): Promise<InertiaAppSSRResponse | RenderFunction<SharedProps> | void> {\n config.replace(defaults)\n\n if (http) {\n httpModule.setClient(http)\n }\n\n const isServer = typeof window === 'undefined'\n\n const wrapWithStrictMode = (element: ReactElement): ReactElement => {\n return strictMode ? createElement(StrictMode, null, element) : element\n }\n\n const resolveComponent = (name: string, page?: Page) =>\n Promise.resolve(resolve!(name, page)).then((module) => {\n return ((module as { default?: ReactComponent }).default || module) as ReactComponent\n })\n\n // SSR render function factory - when on server without page/render, return a render function\n // This is used by the Vite plugin's SSR transform\n if (isServer && !page && !render) {\n return async (page: Page<SharedProps>, renderToString: RenderToString) => {\n let head: string[] = []\n\n const initialComponent = await resolveComponent(page.component, page)\n\n const props: InertiaAppProps<SharedProps> = {\n initialPage: page,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: (elements: string[]) => (head = elements),\n defaultLayout: layout,\n }\n\n let reactApp: ReactElement\n\n if (setup) {\n reactApp = (setup as (options: SetupOptions<null, SharedProps>) => ReactElement)({\n el: null,\n App,\n props,\n })\n } else {\n reactApp = wrapWithStrictMode(createElement(App, props))\n\n if (withApp) {\n reactApp = withApp(reactApp, { ssr: true })\n }\n }\n\n const html = renderToString(reactApp)\n const body = buildSSRBody(id, page, html)\n\n return { head, body }\n }\n }\n\n const initialPage = page || getInitialPageFromDOM<Page<SharedProps>>(id)!\n\n let head: string[] = []\n\n const reactApp = await Promise.all([\n resolveComponent(initialPage.component, initialPage),\n router.decryptHistory().catch(() => {}),\n ]).then(([initialComponent]) => {\n const props: InertiaAppProps<SharedProps> = {\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: isServer ? (elements: string[]) => (head = elements) : undefined,\n defaultLayout: layout,\n }\n\n if (isServer) {\n return (setup as (options: SetupOptions<null, SharedProps>) => ReactElement)({\n el: null,\n App,\n props,\n })\n }\n\n const el = document.getElementById(id)!\n\n if (setup) {\n return (setup as (options: SetupOptions<HTMLElement, SharedProps>) => void)({\n el,\n App,\n props,\n })\n }\n\n let appElement = wrapWithStrictMode(createElement(App, props))\n\n if (withApp) {\n appElement = withApp(appElement, { ssr: false })\n }\n\n if (el.hasAttribute('data-server-rendered')) {\n hydrateRoot(el, appElement)\n } else {\n createRoot(el).render(appElement)\n }\n })\n\n if (!isServer && progress) {\n setupProgress(progress)\n }\n\n if (isServer && render && reactApp) {\n const html = render(reactApp)\n const body = buildSSRBody(id, initialPage, html)\n\n return { head, body }\n }\n}\n", "import { isSameUrlWithoutQueryOrHash } from '@inertiajs/core'\nimport { get } from 'es-toolkit/compat'\nimport { ReactNode, useEffect, useMemo, useRef, useState } from 'react'\nimport { router } from '.'\nimport usePage from './usePage'\n\nconst keysAreBeingReloaded = (only: string[], except: string[], keys: string[]): boolean => {\n if (only.length === 0 && except.length === 0) {\n return true\n }\n\n if (only.length > 0) {\n return keys.some((key) => only.includes(key))\n }\n\n return keys.some((key) => !except.includes(key))\n}\n\ninterface DeferredSlotProps {\n reloading: boolean\n}\n\ninterface DeferredProps {\n children: ReactNode | ((props: DeferredSlotProps) => ReactNode)\n fallback: ReactNode | (() => ReactNode)\n data: string | string[]\n}\n\nconst Deferred = ({ children, data, fallback }: DeferredProps) => {\n if (!data) {\n throw new Error('`<Deferred>` requires a `data` prop to be a string or array of strings')\n }\n\n const [loaded, setLoaded] = useState(false)\n const [reloading, setReloading] = useState(false)\n const activeReloads = useRef(new Set<object>())\n const pageProps = usePage().props\n const keys = useMemo(() => (Array.isArray(data) ? data : [data]), [data])\n\n useEffect(() => {\n const removeStartListener = router.on('start', (e) => {\n const visit = e.detail.visit\n\n if (\n visit.preserveState === true &&\n isSameUrlWithoutQueryOrHash(visit.url, window.location) &&\n keysAreBeingReloaded(visit.only, visit.except, keys)\n ) {\n activeReloads.current.add(visit)\n setReloading(true)\n }\n })\n\n const removeFinishListener = router.on('finish', (e) => {\n const visit = e.detail.visit\n\n if (activeReloads.current.has(visit)) {\n activeReloads.current.delete(visit)\n setReloading(activeReloads.current.size > 0)\n }\n })\n\n return () => {\n removeStartListener()\n removeFinishListener()\n activeReloads.current.clear()\n }\n }, [keys])\n\n useEffect(() => {\n setLoaded(keys.every((key) => get(pageProps, key) !== undefined))\n }, [pageProps, keys])\n\n const propsAreDefined = useMemo(() => keys.every((key) => get(pageProps, key) !== undefined), [keys, pageProps])\n\n if (loaded && propsAreDefined) {\n if (typeof children === 'function') {\n return children({ reloading })\n }\n\n return children\n }\n\n return typeof fallback === 'function' ? fallback() : fallback\n}\n\nDeferred.displayName = 'InertiaDeferred'\n\nexport default Deferred\n", "import { Page, PageProps, SharedPageProps } from '@inertiajs/core'\nimport { use } from 'react'\nimport PageContext from './PageContext'\n\nexport default function usePage<TPageProps extends PageProps = PageProps>(): Page<TPageProps & SharedPageProps> {\n const page = use(PageContext)\n\n if (!page) {\n throw new Error('usePage must be used within the Inertia component')\n }\n\n return page as Page<TPageProps & SharedPageProps>\n}\n", "import {\n config,\n FormComponentProps,\n FormComponentRef,\n FormComponentResetSymbol,\n FormComponentSlotProps,\n FormDataConvertible,\n formDataToObject,\n isUrlMethodPair,\n mergeDataIntoQueryString,\n Method,\n resetFormFields,\n resolveUrlMethodPairComponent,\n UseFormUtils,\n VisitOptions,\n} from '@inertiajs/core'\nimport { isEqual } from 'es-toolkit'\nimport { NamedInputEvent, ValidationConfig } from 'laravel-precognition'\nimport React, {\n createContext,\n createElement,\n FormEvent,\n forwardRef,\n ReactNode,\n use,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport useForm from './useForm'\n\n// Polyfill for startTransition to support React 16.9+\nconst deferStateUpdate = (callback: () => void) => {\n typeof React.startTransition === 'function' ? React.startTransition(callback) : setTimeout(callback, 0)\n}\n\ntype FormProps<TForm extends object = Record<string, any>> = FormComponentProps<TForm> &\n Omit<React.FormHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> &\n Omit<React.AllHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> & {\n children: ReactNode | ((props: FormComponentSlotProps<TForm>) => ReactNode)\n }\n\ntype FormSubmitOptions = Omit<VisitOptions, 'data' | 'onPrefetched' | 'onPrefetching'>\ntype FormSubmitter = HTMLElement | null\n\nconst noop = () => undefined\n\nconst FormContext = createContext<FormComponentRef | undefined>(undefined)\n\nconst Form = forwardRef<FormComponentRef, FormProps>(\n (\n {\n action = '',\n method = 'get',\n headers = {},\n queryStringArrayFormat = 'brackets',\n errorBag = null,\n showProgress = true,\n transform = (data) => data,\n optimistic,\n options = {},\n onStart = noop,\n onProgress = noop,\n onFinish = noop,\n onBefore = noop,\n onCancel = noop,\n onSuccess = noop,\n onError = noop,\n onCancelToken = noop,\n onSubmitComplete = noop,\n disableWhileProcessing = false,\n resetOnError = false,\n resetOnSuccess = false,\n setDefaultsOnSuccess = false,\n invalidateCacheTags = [],\n validateFiles = false,\n validationTimeout = 1500,\n withAllErrors = null,\n component = null,\n instant = false,\n children,\n ...props\n },\n ref,\n ) => {\n const getTransformedData = (): Record<string, FormDataConvertible> => {\n const [_url, data] = getUrlAndData()\n return transform(data)\n }\n\n const form = useForm<Record<string, any>>({})\n .withPrecognition(\n () => resolvedMethod,\n () => getUrlAndData()[0],\n )\n .setValidationTimeout(validationTimeout)\n\n if (validateFiles) {\n form.validateFiles()\n }\n\n if (withAllErrors ?? config.get('form.withAllErrors')) {\n form.withAllErrors()\n }\n\n form.transform(getTransformedData)\n\n const formElement = useRef<HTMLFormElement>(undefined)\n\n const resolvedMethod = useMemo(() => {\n return isUrlMethodPair(action) ? action.method : (method.toLowerCase() as Method)\n }, [action, method])\n\n const resolvedComponent = useMemo(() => {\n if (component) {\n return component\n }\n\n if (instant && isUrlMethodPair(action)) {\n return resolveUrlMethodPairComponent(action)\n }\n\n return null\n }, [component, instant, action])\n\n const [isDirty, setIsDirty] = useState(false)\n const defaultData = useRef<FormData>(new FormData())\n\n const getFormData = (submitter?: FormSubmitter): FormData => new FormData(formElement.current, submitter)\n\n // Convert the FormData to an object because we can't compare two FormData\n // instances directly (which is needed for isDirty), mergeDataIntoQueryString()\n // expects an object, and submitting a FormData instance directly causes problems with nested objects.\n const getData = (submitter?: FormSubmitter): Record<string, FormDataConvertible> =>\n formDataToObject(getFormData(submitter))\n\n const getUrlAndData = (submitter?: FormSubmitter): [string, Record<string, FormDataConvertible>] => {\n return mergeDataIntoQueryString(\n resolvedMethod,\n isUrlMethodPair(action) ? action.url : action,\n getData(submitter),\n queryStringArrayFormat,\n )\n }\n\n const updateDirtyState = (event: Event) => {\n if (event.type === 'reset' && (event as CustomEvent).detail?.[FormComponentResetSymbol]) {\n // When the form is reset programmatically, prevent native reset behavior\n event.preventDefault()\n }\n\n deferStateUpdate(() =>\n setIsDirty(event.type === 'reset' ? false : !isEqual(getData(), formDataToObject(defaultData.current))),\n )\n }\n\n const clearErrors = (...names: string[]) => {\n form.clearErrors(...names)\n\n return form\n }\n\n useEffect(() => {\n defaultData.current = getFormData()\n\n form.setDefaults(getData())\n\n const formEvents: Array<keyof HTMLElementEventMap> = ['input', 'change', 'reset']\n\n formEvents.forEach((e) => formElement.current!.addEventListener(e, updateDirtyState))\n\n return () => {\n formEvents.forEach((e) => formElement.current?.removeEventListener(e, updateDirtyState))\n }\n }, [])\n\n useEffect(() => {\n form.setValidationTimeout(validationTimeout)\n }, [validationTimeout])\n\n useEffect(() => {\n if (validateFiles) {\n form.validateFiles()\n } else {\n form.withoutFileValidation()\n }\n }, [validateFiles])\n\n const reset = (...fields: string[]) => {\n if (formElement.current) {\n resetFormFields(formElement.current, defaultData.current, fields)\n }\n\n form.reset(...fields)\n }\n\n const resetAndClearErrors = (...fields: string[]) => {\n clearErrors(...fields)\n reset(...fields)\n }\n\n const maybeReset = (resetOption: boolean | string[]) => {\n if (!resetOption) {\n return\n }\n\n if (resetOption === true) {\n reset()\n } else if (resetOption.length > 0) {\n reset(...resetOption)\n }\n }\n\n const submit = (submitter?: FormSubmitter) => {\n const [url, data] = getUrlAndData(submitter)\n const formTarget = (submitter as HTMLButtonElement | HTMLInputElement | null)?.getAttribute('formtarget')\n\n if (formTarget === '_blank' && resolvedMethod === 'get') {\n window.open(url, '_blank')\n return\n }\n\n const submitOptions: FormSubmitOptions = {\n headers,\n queryStringArrayFormat,\n errorBag,\n showProgress,\n invalidateCacheTags,\n component: resolvedComponent,\n optimistic: optimistic ? (pageProps) => optimistic(pageProps, data) : undefined,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess: (...args) => {\n onSuccess(...args)\n onSubmitComplete({\n reset,\n defaults,\n })\n maybeReset(resetOnSuccess)\n\n if (setDefaultsOnSuccess === true) {\n defaults()\n }\n },\n onError(...args) {\n onError(...args)\n maybeReset(resetOnError)\n },\n ...options,\n }\n\n // We need transform because we can't override the default data with different keys (by design)\n form.transform(() => transform(data))\n form.submit(resolvedMethod, url, submitOptions)\n\n // Reset the transformer back so the submitter is not used for future submissions\n form.transform(getTransformedData)\n }\n\n const defaults = () => {\n defaultData.current = getFormData()\n setIsDirty(false)\n }\n\n const exposed: FormComponentSlotProps = {\n errors: form.errors,\n hasErrors: form.hasErrors,\n processing: form.processing,\n progress: form.progress,\n wasSuccessful: form.wasSuccessful,\n recentlySuccessful: form.recentlySuccessful,\n isDirty,\n clearErrors,\n resetAndClearErrors,\n setError: form.setError,\n reset,\n submit,\n defaults,\n getData,\n getFormData,\n\n // Precognition\n validator: () => form.validator(),\n validating: form.validating,\n valid: form.valid,\n invalid: form.invalid,\n validate: (field?: string | NamedInputEvent | ValidationConfig, config?: ValidationConfig) =>\n form.validate(...UseFormUtils.mergeHeadersForValidation(field, config, headers)),\n touch: form.touch,\n touched: form.touched,\n }\n\n useImperativeHandle(ref, () => exposed, [form, isDirty, submit])\n\n const formNode = createElement(\n 'form',\n {\n ...props,\n ref: formElement,\n action: isUrlMethodPair(action) ? action.url : action,\n method: resolvedMethod,\n onSubmit: (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n submit((event.nativeEvent as SubmitEvent).submitter)\n },\n inert: disableWhileProcessing && form.processing,\n },\n typeof children === 'function' ? children(exposed) : children,\n )\n\n return createElement(FormContext.Provider, { value: exposed }, formNode)\n },\n)\n\nForm.displayName = 'InertiaForm'\n\nexport function useFormContext<TForm extends object = Record<string, any>>(): FormComponentRef<TForm> | undefined {\n return use(FormContext) as FormComponentRef<TForm> | undefined\n}\n\nexport default Form as {\n <TForm extends object = Record<string, any>>(\n props: FormProps<TForm> & React.RefAttributes<FormComponentRef<TForm>>,\n ): React.ReactElement\n displayName: string\n}\n", "import {\n CancelToken,\n ErrorValue,\n FormDataErrors,\n FormDataKeys,\n FormDataType,\n FormDataValues,\n Method,\n OptimisticCallback,\n Progress,\n RequestPayload,\n router,\n UrlMethodPair,\n UseFormArguments,\n UseFormSubmitArguments,\n UseFormSubmitOptions,\n UseFormTransformCallback,\n UseFormUtils,\n UseFormWithPrecognitionArguments,\n VisitOptions,\n} from '@inertiajs/core'\nimport { cloneDeep } from 'es-toolkit'\nimport type { NamedInputEvent, PrecognitionPath, ValidationConfig, Validator } from 'laravel-precognition'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { useIsomorphicLayoutEffect } from './react'\nimport useFormState, { SetDataAction, SetDataByKeyValuePair, SetDataByMethod, SetDataByObject } from './useFormState'\nimport useRemember from './useRemember'\n\n// Re-export types that were moved to useFormState\nexport { SetDataAction, SetDataByKeyValuePair, SetDataByMethod, SetDataByObject }\n\ntype PrecognitionValidationConfig<TKeys> = ValidationConfig & {\n only?: TKeys[] | Iterable<TKeys> | ArrayLike<TKeys>\n}\n\nexport interface InertiaFormProps<TForm extends Record<string, any>> {\n data: TForm\n isDirty: boolean\n errors: FormDataErrors<TForm>\n hasErrors: boolean\n processing: boolean\n progress: Progress | null\n wasSuccessful: boolean\n recentlySuccessful: boolean\n setData: SetDataAction<TForm>\n transform: (callback: UseFormTransformCallback<TForm>) => void\n setDefaults: {\n (): void\n <T extends FormDataKeys<TForm>>(field: T, value: FormDataValues<TForm, T>): void\n (fields: Partial<TForm>): void\n }\n reset: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n clearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n resetAndClearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n setError: {\n <K extends FormDataKeys<TForm>>(field: K, value: ErrorValue): void\n (errors: FormDataErrors<TForm>): void\n }\n submit: (...args: UseFormSubmitArguments) => void\n get: (url: string, options?: UseFormSubmitOptions) => void\n post: (url: string, options?: UseFormSubmitOptions) => void\n put: (url: string, options?: UseFormSubmitOptions) => void\n patch: (url: string, options?: UseFormSubmitOptions) => void\n delete: (url: string, options?: UseFormSubmitOptions) => void\n cancel: () => void\n dontRemember: <K extends FormDataKeys<TForm>>(...fields: K[]) => InertiaFormProps<TForm>\n optimistic: <TProps>(callback: OptimisticCallback<TProps>) => InertiaFormProps<TForm>\n withPrecognition: (...args: UseFormWithPrecognitionArguments) => InertiaPrecognitiveFormProps<TForm>\n}\n\nexport interface InertiaFormValidationProps<TForm extends Record<string, any>> {\n invalid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n setValidationTimeout: (duration: number) => InertiaPrecognitiveFormProps<TForm>\n touch: <K extends FormDataKeys<TForm>>(\n field: K | NamedInputEvent | Array<K>,\n ...fields: K[]\n ) => InertiaPrecognitiveFormProps<TForm>\n touched: <K extends FormDataKeys<TForm>>(field?: K) => boolean\n valid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n validate: <K extends FormDataKeys<TForm> | PrecognitionPath<TForm>>(\n field?: K | NamedInputEvent | PrecognitionValidationConfig<K>,\n config?: PrecognitionValidationConfig<K>,\n ) => InertiaPrecognitiveFormProps<TForm>\n validateFiles: () => InertiaPrecognitiveFormProps<TForm>\n validating: boolean\n validator: () => Validator\n withAllErrors: () => InertiaPrecognitiveFormProps<TForm>\n withoutFileValidation: () => InertiaPrecognitiveFormProps<TForm>\n // Backward compatibility for easy migration from the original Precognition libraries\n setErrors: (errors: FormDataErrors<TForm>) => InertiaPrecognitiveFormProps<TForm>\n forgetError: <K extends FormDataKeys<TForm> | NamedInputEvent>(field: K) => InertiaPrecognitiveFormProps<TForm>\n}\n\nexport type InertiaForm<TForm extends Record<string, any>> = InertiaFormProps<TForm>\nexport type InertiaPrecognitiveFormProps<TForm extends Record<string, any>> = InertiaFormProps<TForm> &\n InertiaFormValidationProps<TForm>\n\nexport default function useForm<TForm extends FormDataType<TForm>>(\n method: Method | (() => Method),\n url: string | (() => string),\n data: TForm | (() => TForm),\n): InertiaPrecognitiveFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(\n urlMethodPair: UrlMethodPair | (() => UrlMethodPair),\n data: TForm | (() => TForm),\n): InertiaPrecognitiveFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(\n rememberKey: string,\n data: TForm | (() => TForm),\n): InertiaFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(data: TForm | (() => TForm)): InertiaFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(): InertiaFormProps<TForm>\nexport default function useForm<TForm extends FormDataType<TForm>>(\n ...args: UseFormArguments<TForm>\n): InertiaFormProps<TForm> | InertiaPrecognitiveFormProps<TForm> {\n const { rememberKey, data, precognitionEndpoint } = UseFormUtils.parseUseFormArguments<TForm>(...args)\n\n // Resolve initial data for remember functionality hooks\n const initialDefaults = typeof data === 'function' ? cloneDeep(data()) : cloneDeep(data)\n\n const cancelToken = useRef<CancelToken | null>(null)\n const excludeKeysRef = useRef<FormDataKeys<TForm>[]>([])\n const pendingOptimisticRef = useRef<OptimisticCallback | null>(null)\n\n // For remember functionality, we need custom state hooks\n const useDataState = rememberKey\n ? () => useRemember<TForm>(initialDefaults, `${rememberKey}:data`, excludeKeysRef)\n : undefined\n\n const useErrorsState = rememberKey\n ? () => useRemember<FormDataErrors<TForm>>({} as FormDataErrors<TForm>, `${rememberKey}:errors`)\n : undefined\n\n const {\n form: baseForm,\n setDefaultsState,\n transformRef,\n precognitionEndpointRef,\n dataRef,\n isMounted,\n setProcessing,\n setProgress,\n markAsSuccessful,\n clearErrors,\n setError,\n defaultsCalledInOnSuccessRef,\n resetBeforeSubmit,\n finishProcessing,\n } = useFormState<TForm>({\n data,\n precognitionEndpoint,\n useDataState,\n useErrorsState,\n })\n\n // Handle dataAsDefaults pattern for setDefaults synchronization\n // When setDefaults() is called without args immediately after setData(),\n // dataRef.current may be stale. This layout effect ensures the current\n // data state is used as defaults.\n const [dataAsDefaults, setDataAsDefaults] = useState(false)\n\n const originalSetDefaults = baseForm.setDefaults\n baseForm.setDefaults = useCallback(\n (fieldOrFields?: FormDataKeys<TForm> | Partial<TForm>, maybeValue?: unknown) => {\n if (typeof fieldOrFields === 'undefined') {\n setDataAsDefaults(true)\n }\n\n return originalSetDefaults(fieldOrFields as any, maybeValue as any)\n },\n [originalSetDefaults],\n ) as typeof baseForm.setDefaults\n\n useIsomorphicLayoutEffect(() => {\n if (!dataAsDefaults) {\n return\n }\n\n if (baseForm.isDirty) {\n setDefaultsState(baseForm.data)\n }\n\n setDataAsDefaults(false)\n }, [dataAsDefaults])\n\n const submit = useCallback(\n (...args: UseFormSubmitArguments) => {\n const { method, url, options } = UseFormUtils.parseSubmitArguments(args, precognitionEndpointRef.current)\n\n defaultsCalledInOnSuccessRef.current = false\n\n const _options: VisitOptions = {\n ...options,\n onCancelToken: (token) => {\n cancelToken.current = token\n\n return options.onCancelToken?.(token)\n },\n onBefore: (visit) => {\n resetBeforeSubmit()\n\n return options.onBefore?.(visit)\n },\n onStart: (visit) => {\n setProcessing(true)\n\n return options.onStart?.(visit)\n },\n onProgress: (event) => {\n setProgress(event || null)\n\n return options.onProgress?.(event)\n },\n onSuccess: async (page) => {\n if (isMounted.current) {\n markAsSuccessful()\n }\n\n const onSuccess = options.onSuccess ? await options.onSuccess(page) : null\n\n if (isMounted.current && !defaultsCalledInOnSuccessRef.current) {\n baseForm.setData((data: TForm) => {\n setDefaultsState(cloneDeep(data))\n return data\n })\n }\n\n return onSuccess\n },\n onError: (errors) => {\n if (isMounted.current) {\n clearErrors()\n setError(errors as FormDataErrors<TForm>)\n }\n\n return options.onError?.(errors)\n },\n onCancel: () => {\n return options.onCancel?.()\n },\n onFinish: (visit) => {\n if (isMounted.current) {\n finishProcessing()\n }\n\n cancelToken.current = null\n\n return options.onFinish?.(visit)\n },\n }\n\n _options.optimistic = _options.optimistic ?? pendingOptimisticRef.current ?? undefined\n pendingOptimisticRef.current = null\n\n const transformedData = transformRef.current(dataRef.current) as RequestPayload\n\n if (method === 'delete') {\n router.delete(url, { ..._options, data: transformedData })\n } else {\n router[method](url, transformedData, _options)\n }\n },\n [clearErrors, setError, transformRef],\n )\n\n const cancel = useCallback(() => {\n if (cancelToken.current) {\n cancelToken.current.cancel()\n }\n }, [])\n\n const submitMethods = useMemo(\n () => ({\n get: (url: string, options: VisitOptions = {}) => submit('get', url, options),\n post: (url: string, options: VisitOptions = {}) => submit('post', url, options),\n put: (url: string, options: VisitOptions = {}) => submit('put', url, options),\n patch: (url: string, options: VisitOptions = {}) => submit('patch', url, options),\n delete: (url: string, options: VisitOptions = {}) => submit('delete', url, options),\n }),\n [submit],\n )\n\n // Add useForm-specific methods to the form object\n Object.assign(baseForm, {\n submit,\n ...submitMethods,\n cancel,\n dontRemember: <K extends FormDataKeys<TForm>>(...keys: K[]) => {\n excludeKeysRef.current = keys\n return form\n },\n\n optimistic: <TProps>(callback: OptimisticCallback<TProps>) => {\n pendingOptimisticRef.current = callback as OptimisticCallback\n return form\n },\n })\n\n // Cast to the full form type (baseForm now has submit methods)\n const form = baseForm as unknown as InertiaFormProps<TForm>\n\n // Wrap withPrecognition to return the correct type with submit methods\n const originalWithPrecognition = baseForm.withPrecognition\n form.withPrecognition = (...args: UseFormWithPrecognitionArguments): InertiaPrecognitiveFormProps<TForm> => {\n originalWithPrecognition(...args)\n return form as InertiaPrecognitiveFormProps<TForm>\n }\n\n return precognitionEndpointRef.current ? (form as InertiaPrecognitiveFormProps<TForm>) : form\n}\n", "import { DependencyList, EffectCallback, useEffect, useLayoutEffect } from 'react'\n\n// Inspired by react-redux, this hook uses useLayoutEffect in the browser, and useEffect\n// when using SSR. Currently, useLayoutEffect doesn't work when rendered on the server.\nexport function useIsomorphicLayoutEffect(effect: EffectCallback, deps?: DependencyList): void {\n typeof window === 'undefined' ? useEffect(effect, deps) : useLayoutEffect(effect, deps)\n}\n", "import {\n Errors,\n ErrorValue,\n FormDataErrors,\n FormDataKeys,\n FormDataValues,\n Progress,\n UrlMethodPair,\n UseFormTransformCallback,\n UseFormUtils,\n UseFormWithPrecognitionArguments,\n} from '@inertiajs/core'\nimport { cloneDeep, isEqual } from 'es-toolkit'\nimport { get, has, set } from 'es-toolkit/compat'\nimport {\n createValidator,\n NamedInputEvent,\n resolveName,\n toSimpleValidationErrors,\n ValidationConfig,\n Validator,\n} from 'laravel-precognition'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { config } from '.'\n\nexport type SetDataByObject<TForm> = (data: Partial<TForm>) => void\nexport type SetDataByMethod<TForm> = (data: (previousData: TForm) => TForm) => void\nexport type SetDataByKeyValuePair<TForm> = <K extends FormDataKeys<TForm>>(\n key: K,\n value: FormDataValues<TForm, K>,\n) => void\nexport type SetDataAction<TForm extends Record<any, any>> = SetDataByObject<TForm> &\n SetDataByMethod<TForm> &\n SetDataByKeyValuePair<TForm>\n\ntype PrecognitionValidationConfig<TKeys> = ValidationConfig & {\n only?: TKeys[] | Iterable<TKeys> | ArrayLike<TKeys>\n}\n\nexport interface FormStateProps<TForm extends object> {\n data: TForm\n isDirty: boolean\n errors: FormDataErrors<TForm>\n hasErrors: boolean\n processing: boolean\n progress: Progress | null\n wasSuccessful: boolean\n recentlySuccessful: boolean\n setData: SetDataAction<TForm>\n transform: (callback: UseFormTransformCallback<TForm>) => void\n setDefaults: {\n (): void\n <T extends FormDataKeys<TForm>>(field: T, value: FormDataValues<TForm, T>): void\n (fields: Partial<TForm>): void\n }\n reset: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n clearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n resetAndClearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n setError: {\n <K extends FormDataKeys<TForm>>(field: K, value: ErrorValue): void\n (errors: FormDataErrors<TForm>): void\n }\n withPrecognition: (...args: UseFormWithPrecognitionArguments) => FormStateWithPrecognition<TForm>\n}\n\nexport interface FormStateValidationProps<TForm extends object> {\n invalid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n setValidationTimeout: (duration: number) => FormStateWithPrecognition<TForm>\n touch: <K extends FormDataKeys<TForm>>(\n field: K | NamedInputEvent | Array<K>,\n ...fields: K[]\n ) => FormStateWithPrecognition<TForm>\n touched: <K extends FormDataKeys<TForm>>(field?: K) => boolean\n valid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n validate: <K extends FormDataKeys<TForm>>(\n field?: K | NamedInputEvent | PrecognitionValidationConfig<K>,\n config?: PrecognitionValidationConfig<K>,\n ) => FormStateWithPrecognition<TForm>\n validateFiles: () => FormStateWithPrecognition<TForm>\n validating: boolean\n validator: () => Validator\n withAllErrors: () => FormStateWithPrecognition<TForm>\n withoutFileValidation: () => FormStateWithPrecognition<TForm>\n setErrors: (errors: FormDataErrors<TForm>) => FormStateWithPrecognition<TForm>\n forgetError: <K extends FormDataKeys<TForm> | NamedInputEvent>(field: K) => FormStateWithPrecognition<TForm>\n}\n\nexport type FormState<TForm extends object> = FormStateProps<TForm>\nexport type FormStateWithPrecognition<TForm extends object> = FormStateProps<TForm> & FormStateValidationProps<TForm>\n\nexport interface UseFormStateOptions<TForm extends object> {\n data: TForm | (() => TForm)\n precognitionEndpoint?: (() => UrlMethodPair) | null\n useDataState?: () => [TForm, React.Dispatch<React.SetStateAction<TForm>>]\n useErrorsState?: () => [FormDataErrors<TForm>, React.Dispatch<React.SetStateAction<FormDataErrors<TForm>>>]\n}\n\nexport interface UseFormStateReturn<TForm extends object> {\n form: FormState<TForm>\n setDefaultsState: React.Dispatch<React.SetStateAction<TForm>>\n transformRef: React.MutableRefObject<UseFormTransformCallback<TForm>>\n precognitionEndpointRef: React.MutableRefObject<(() => UrlMethodPair) | null>\n dataRef: React.MutableRefObject<TForm>\n isMounted: React.MutableRefObject<boolean>\n setProcessing: React.Dispatch<React.SetStateAction<boolean>>\n setProgress: React.Dispatch<React.SetStateAction<Progress | null>>\n markAsSuccessful: () => void\n clearErrors: (...fields: string[]) => void\n setError: (fieldOrFields: FormDataKeys<TForm> | FormDataErrors<TForm>, maybeValue?: ErrorValue) => void\n defaultsCalledInOnSuccessRef: React.MutableRefObject<boolean>\n resetBeforeSubmit: () => void\n finishProcessing: () => void\n withAllErrors: { enabled: () => boolean; enable: () => void }\n}\n\nexport default function useFormState<TForm extends object>(\n options: UseFormStateOptions<TForm>,\n): UseFormStateReturn<TForm> {\n const { data: dataOption, useDataState, useErrorsState } = options\n\n const isDataFunction = typeof dataOption === 'function'\n const resolveData = () => (isDataFunction ? (dataOption as () => TForm)() : dataOption)\n\n const initialData = cloneDeep(resolveData())\n\n const isMounted = useRef(false)\n const precognitionEndpointRef = useRef(options.precognitionEndpoint ?? null)\n\n const [defaults, setDefaultsState] = useState(cloneDeep(initialData))\n\n const [data, setData] = useDataState ? useDataState() : useState(cloneDeep(initialData))\n const [errors, setErrors] = useErrorsState ? useErrorsState() : useState({} as FormDataErrors<TForm>)\n const [processing, setProcessing] = useState(false)\n const [progress, setProgress] = useState<Progress | null>(null)\n const [wasSuccessful, setWasSuccessful] = useState(false)\n const [recentlySuccessful, setRecentlySuccessful] = useState(false)\n\n const recentlySuccessfulTimeoutId = useRef<number>(undefined)\n const transformRef = useRef<UseFormTransformCallback<TForm>>((data) => data)\n const defaultsCalledInOnSuccessRef = useRef(false)\n\n const validatorRef = useRef<Validator | null>(null)\n const [validating, setValidating] = useState(false)\n const [touchedFields, setTouchedFields] = useState<string[]>([])\n const [validFields, setValidFields] = useState<string[]>([])\n const withAllErrorsRef = useRef<boolean | null>(null)\n const withAllErrorsEnabled = () => withAllErrorsRef.current ?? config.get('form.withAllErrors')\n\n const dataRef = useRef(data)\n\n useEffect(() => {\n dataRef.current = data\n })\n\n useEffect(() => {\n isMounted.current = true\n return () => {\n isMounted.current = false\n }\n }, [])\n\n const setDataFunction = useCallback(\n (keyOrData: FormDataKeys<TForm> | Function | Partial<TForm>, maybeValue?: any) => {\n if (typeof keyOrData === 'string') {\n setData((data) => set(cloneDeep(data), keyOrData, maybeValue))\n } else if (typeof keyOrData === 'function') {\n setData((data) => keyOrData(data))\n } else {\n setData(keyOrData as TForm)\n }\n },\n [setData],\n )\n\n const setDefaultsFunction = useCallback(\n (fieldOrFields?: FormDataKeys<TForm> | Partial<TForm>, maybeValue?: unknown) => {\n if (isDataFunction) {\n throw new Error('You cannot call `defaults()` when using a function to define your form data.')\n }\n\n defaultsCalledInOnSuccessRef.current = true\n\n let newDefaults = {} as TForm\n\n if (typeof fieldOrFields === 'undefined') {\n newDefaults = { ...dataRef.current }\n setDefaultsState(dataRef.current)\n } else {\n setDefaultsState((defaults) => {\n newDefaults =\n typeof fieldOrFields === 'string'\n ? set(cloneDeep(defaults), fieldOrFields, maybeValue)\n : Object.assign(cloneDeep(defaults), fieldOrFields)\n\n return newDefaults as TForm\n })\n }\n\n validatorRef.current?.defaults(newDefaults as Record<string, unknown>)\n },\n [setDefaultsState],\n )\n\n const reset = useCallback(\n (...fields: string[]) => {\n const resolvedData = isDataFunction ? cloneDeep(resolveData()) : defaults\n const clonedData = cloneDeep(resolvedData)\n\n if (fields.length === 0) {\n if (isDataFunction) {\n setDefaultsState(clonedData)\n }\n setData(clonedData)\n } else {\n if (isDataFunction) {\n setDefaultsState((currentDefaults) => {\n const newDefaults = cloneDeep(currentDefaults)\n ;(fields as Array<FormDataKeys<TForm>>)\n .filter((key) => has(clonedData, key))\n .forEach((key) => {\n set(newDefaults, key, get(clonedData, key))\n })\n return newDefaults\n })\n }\n\n setData((data) =>\n (fields as Array<FormDataKeys<TForm>>)\n .filter((key) => has(clonedData, key))\n .reduce(\n (carry, key) => {\n return set(carry, key, get(clonedData, key))\n },\n { ...data } as TForm,\n ),\n )\n }\n\n validatorRef.current?.reset(...fields)\n },\n [setData, defaults],\n )\n\n const setError = useCallback(\n (fieldOrFields: FormDataKeys<TForm> | FormDataErrors<TForm>, maybeValue?: ErrorValue) => {\n setErrors((errors) => {\n const newErrors = {\n ...errors,\n ...(typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields),\n }\n\n validatorRef.current?.setErrors(newErrors)\n\n return newErrors\n })\n },\n [setErrors],\n )\n\n const clearErrors = useCallback(\n (...fields: string[]) => {\n setErrors((errors) => {\n const newErrors = Object.keys(errors).reduce(\n (carry, field) => ({\n ...carry,\n ...(fields.length > 0 && !fields.includes(field) ? { [field]: (errors as Errors)[field] } : {}),\n }),\n {},\n )\n\n if (validatorRef.current) {\n if (fields.length === 0) {\n validatorRef.current.setErrors({})\n } else {\n fields.forEach(validatorRef.current.forgetError)\n }\n }\n\n return newErrors as FormDataErrors<TForm>\n })\n },\n [setErrors],\n )\n\n const resetAndClearErrors = useCallback(\n (...fields: string[]) => {\n reset(...fields)\n clearErrors(...fields)\n },\n [reset, clearErrors],\n )\n\n const markAsSuccessful = useCallback(() => {\n clearErrors()\n setWasSuccessful(true)\n setRecentlySuccessful(true)\n\n recentlySuccessfulTimeoutId.current = window.setTimeout(() => {\n if (isMounted.current) {\n setRecentlySuccessful(false)\n }\n }, config.get('form.recentlySuccessfulDuration'))\n }, [clearErrors, setWasSuccessful, setRecentlySuccessful])\n\n const resetBeforeSubmit = useCallback(() => {\n setWasSuccessful(false)\n setRecentlySuccessful(false)\n clearTimeout(recentlySuccessfulTimeoutId.current)\n }, [setWasSuccessful, setRecentlySuccessful])\n\n const finishProcessing = useCallback(() => {\n setProcessing(false)\n setProgress(null)\n }, [setProcessing, setProgress])\n\n const transformFunction = useCallback((callback: UseFormTransformCallback<TForm>) => {\n transformRef.current = callback\n }, [])\n\n const tap = <T>(value: T, callback: (value: T) => unknown): T => {\n callback(value)\n return value\n }\n\n const valid = useCallback(\n <K extends FormDataKeys<TForm>>(field: K) => validFields.includes(field as string),\n [validFields],\n )\n\n const invalid = useCallback(<K extends FormDataKeys<TForm>>(field: K) => field in errors, [errors])\n\n const touched = useCallback(\n <K extends FormDataKeys<TForm>>(field?: K) =>\n typeof field === 'string' ? touchedFields.includes(field as string) : touchedFields.length > 0,\n [touchedFields],\n )\n\n const form = {\n data,\n isDirty: !isEqual(data, defaults),\n errors,\n hasErrors: Object.keys(errors).length > 0,\n processing,\n progress,\n wasSuccessful,\n recentlySuccessful,\n setData: setDataFunction,\n transform: transformFunction,\n setDefaults: setDefaultsFunction,\n reset,\n setError,\n clearErrors,\n resetAndClearErrors,\n } as FormState<TForm>\n\n const validate = (field?: string | NamedInputEvent | ValidationConfig, config?: ValidationConfig) => {\n if (typeof field === 'object' && !('target' in field)) {\n config = field\n field = undefined\n }\n\n if (field === undefined) {\n validatorRef.current!.validate(config)\n } else {\n const fieldName = resolveName(field)\n const transformedData = transformRef.current(dataRef.current) as Record<string, unknown>\n validatorRef.current!.validate(fieldName, get(transformedData, fieldName), config)\n }\n\n return form\n }\n\n const withPrecognition = (...args: UseFormWithPrecognitionArguments): FormStateWithPrecognition<TForm> => {\n precognitionEndpointRef.current = UseFormUtils.createWayfinderCallback(...args)\n\n if (!validatorRef.current) {\n const validator = createValidator(\n (client) => {\n const { method, url } = precognitionEndpointRef.current!()\n const currentData = dataRef.current\n const transformedData = transformRef.current(currentData) as Record<string, unknown>\n return client[method](url, transformedData)\n },\n cloneDeep(defaults as Record<string, unknown>),\n )\n\n validatorRef.current = validator\n\n validator\n .on('validatingChanged', () => {\n setValidating(validator.validating())\n })\n .on('validatedChanged', () => {\n setValidFields(validator.valid())\n })\n .on('touchedChanged', () => {\n setTouchedFields(validator.touched())\n })\n .on('errorsChanged', () => {\n const validationErrors = withAllErrorsEnabled()\n ? validator.errors()\n : toSimpleValidationErrors(validator.errors())\n\n setErrors(validationErrors as FormDataErrors<TForm>)\n setValidFields(validator.valid())\n })\n }\n\n const precognitiveForm = Object.assign(form, {\n validating,\n validator: () => validatorRef.current!,\n valid,\n invalid,\n touched,\n withoutFileValidation: () => tap(precognitiveForm, () => validatorRef.current?.withoutFileValidation()),\n touch: (\n field: FormDataKeys<TForm> | NamedInputEvent | Array<FormDataKeys<TForm>>,\n ...fields: FormDataKeys<TForm>[]\n ) => {\n if (Array.isArray(field)) {\n validatorRef.current?.touch(field)\n } else if (typeof field === 'string') {\n validatorRef.current?.touch([field, ...fields])\n } else {\n validatorRef.current?.touch(field)\n }\n\n return precognitiveForm\n },\n withAllErrors: () => tap(precognitiveForm, () => (withAllErrorsRef.current = true)),\n setValidationTimeout: (duration: number) =>\n tap(precognitiveForm, () => validatorRef.current?.setTimeout(duration)),\n validateFiles: () => tap(precognitiveForm, () => validatorRef.current?.validateFiles()),\n validate,\n setErrors: (errors: FormDataErrors<TForm>) => tap(precognitiveForm, () => form.setError(errors)),\n forgetError: (field: FormDataKeys<TForm> | NamedInputEvent) =>\n tap(precognitiveForm, () =>\n form.clearErrors(resolveName(field as string | NamedInputEvent) as FormDataKeys<TForm>),\n ),\n }) as FormStateWithPrecognition<TForm>\n\n return precognitiveForm\n }\n\n form.withPrecognition = withPrecognition\n\n if (precognitionEndpointRef.current) {\n form.withPrecognition(precognitionEndpointRef.current)\n }\n\n return {\n form,\n setDefaultsState,\n transformRef,\n precognitionEndpointRef,\n dataRef,\n isMounted,\n setProcessing,\n setProgress,\n markAsSuccessful,\n clearErrors,\n setError,\n defaultsCalledInOnSuccessRef,\n resetBeforeSubmit,\n finishProcessing,\n withAllErrors: {\n enabled: withAllErrorsEnabled,\n enable: () => {\n withAllErrorsRef.current = true\n },\n },\n }\n}\n", "import { router } from '@inertiajs/core'\nimport { Dispatch, MutableRefObject, SetStateAction, useEffect, useState } from 'react'\n\nexport default function useRemember<State>(\n initialState: State,\n key?: string,\n excludeKeysRef?: MutableRefObject<string[]>,\n): [State, Dispatch<SetStateAction<State>>] {\n const [state, setState] = useState(() => {\n const restored = router.restore(key) as State\n\n return restored !== undefined ? restored : initialState\n })\n\n useEffect(() => {\n const keys = excludeKeysRef?.current\n if (keys && keys.length > 0 && typeof state === 'object' && state !== null) {\n const filtered = { ...state } as Record<string, unknown>\n keys.forEach((k) => delete filtered[k])\n router.remember(filtered, key)\n } else {\n router.remember(state, key)\n }\n }, [state, key])\n\n return [state, setState]\n}\n", "import { escape } from 'es-toolkit/compat'\nimport React, { FunctionComponent, ReactElement, ReactNode, use, useEffect, useMemo } from 'react'\nimport HeadContext from './HeadContext'\n\ntype InertiaHeadProps = {\n title?: string\n children?: ReactNode\n}\n\ntype InertiaHead = FunctionComponent<InertiaHeadProps>\n\nconst Head: InertiaHead = function ({ children, title }) {\n const headManager = use(HeadContext)\n const provider = useMemo(() => headManager!.createProvider(), [headManager])\n const isServer = typeof window === 'undefined'\n\n useEffect(() => {\n provider.reconnect()\n provider.update(renderNodes(children))\n return () => {\n provider.disconnect()\n }\n }, [provider, children, title])\n\n function isUnaryTag(node: ReactElement<any>) {\n return (\n typeof node.type === 'string' &&\n [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n ].indexOf(node.type) > -1\n )\n }\n\n function renderTagStart(node: ReactElement<any>): string {\n const attrs = Object.keys(node.props).reduce((carry, name) => {\n if (['head-key', 'children', 'dangerouslySetInnerHTML'].includes(name)) {\n return carry\n }\n\n const value = String(node.props[name])\n\n if (value === '') {\n return carry + ` ${name}`\n }\n\n return carry + ` ${name}=\"${escape(value)}\"`\n }, '')\n\n return `<${String(node.type)}${attrs}>`\n }\n\n function renderTagChildren(node: ReactElement<any>): string {\n const { children } = node.props\n\n if (typeof children === 'string') {\n return children\n }\n\n if (Array.isArray(children)) {\n return children.reduce((html, child) => html + renderTag(child), '')\n }\n\n return ''\n }\n\n function renderTag(node: ReactElement<any>): string {\n let html = renderTagStart(node)\n\n if (node.props.children) {\n html += renderTagChildren(node)\n }\n\n if (node.props.dangerouslySetInnerHTML) {\n html += node.props.dangerouslySetInnerHTML.__html\n }\n\n if (!isUnaryTag(node)) {\n html += `</${String(node.type)}>`\n }\n\n return html\n }\n\n function ensureNodeHasInertiaProp(node: ReactElement<any>) {\n return React.cloneElement(node, {\n 'data-inertia': node.props['head-key'] !== undefined ? node.props['head-key'] : '',\n })\n }\n\n function renderNode(node: ReactElement<any>) {\n return renderTag(ensureNodeHasInertiaProp(node))\n }\n\n function renderNodes(nodes: ReactNode) {\n const elements = React.Children.toArray(nodes)\n .filter((node) => node)\n .map((node) => renderNode(node as ReactElement<any>))\n\n if (title && !elements.find((tag) => tag.startsWith('<title'))) {\n elements.push(`<title data-inertia=\"\">${title}</title>`)\n }\n\n return elements\n }\n\n if (isServer) {\n provider.update(renderNodes(children))\n }\n\n return null\n}\nexport default Head\n", "import {\n getScrollableParent,\n InfiniteScrollActionSlotProps,\n InfiniteScrollComponentBaseProps,\n InfiniteScrollRef,\n InfiniteScrollSlotProps,\n ReloadOptions,\n useInfiniteScroll,\n UseInfiniteScrollProps,\n} from '@inertiajs/core'\nimport React, {\n createElement,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport usePage from './usePage'\n\nconst resolveHTMLElement = (\n value: string | React.RefObject<HTMLElement | null> | null,\n fallback: HTMLElement | null,\n): HTMLElement | null => {\n if (!value) {\n return fallback\n }\n\n // React ref object { current: HTMLElement | null }\n if (value && typeof value === 'object' && 'current' in value) {\n return value.current\n }\n\n // CSS Selector string\n if (typeof value === 'string') {\n return document.querySelector(value) as HTMLElement | null\n }\n\n return fallback\n}\n\n// Helper function to render slot content\nconst renderSlot = (\n slotContent: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode) | undefined,\n slotProps: InfiniteScrollActionSlotProps,\n fallback: React.ReactNode = null,\n): React.ReactNode => {\n if (!slotContent) {\n return fallback\n }\n\n return typeof slotContent === 'function' ? slotContent(slotProps) : slotContent\n}\n\ninterface ComponentProps\n extends\n InfiniteScrollComponentBaseProps,\n Omit<React.HTMLAttributes<HTMLElement>, keyof InfiniteScrollComponentBaseProps | 'children'> {\n children?: React.ReactNode | ((props: InfiniteScrollSlotProps) => React.ReactNode)\n\n // Element references for custom trigger detection (when you want different trigger elements)\n startElement?: string | React.RefObject<HTMLElement | null>\n endElement?: string | React.RefObject<HTMLElement | null>\n itemsElement?: string | React.RefObject<HTMLElement | null>\n\n // Render slots for UI components (when you want custom loading/action components)\n previous?: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode)\n next?: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode)\n loading?: React.ReactNode | ((props: InfiniteScrollActionSlotProps) => React.ReactNode)\n\n // Request options\n params?: ReloadOptions\n\n onlyNext?: boolean\n onlyPrevious?: boolean\n}\n\nconst InfiniteScroll = forwardRef<InfiniteScrollRef, ComponentProps>(\n (\n {\n data,\n buffer = 0,\n as = 'div',\n manual = false,\n manualAfter = 0,\n preserveUrl = false,\n reverse = false,\n autoScroll,\n children,\n startElement,\n endElement,\n itemsElement,\n previous,\n next,\n loading,\n params = {},\n onlyNext = false,\n onlyPrevious = false,\n ...props\n },\n ref,\n ) => {\n const [startElementFromRef, setStartElementFromRef] = useState<HTMLElement | null>(null)\n const startElementRef = useCallback((node: HTMLElement | null) => setStartElementFromRef(node), [])\n\n const [endElementFromRef, setEndElementFromRef] = useState<HTMLElement | null>(null)\n const endElementRef = useCallback((node: HTMLElement | null) => setEndElementFromRef(node), [])\n\n const [itemsElementFromRef, setItemsElementFromRef] = useState<HTMLElement | null>(null)\n const itemsElementRef = useCallback((node: HTMLElement | null) => setItemsElementFromRef(node), [])\n\n const scrollProp = usePage().scrollProps?.[data]\n\n const [loadingPrevious, setLoadingPrevious] = useState(false)\n const [loadingNext, setLoadingNext] = useState(false)\n const [requestCount, setRequestCount] = useState(0)\n const [hasPreviousPage, setHasPreviousPage] = useState(!!scrollProp?.previousPage)\n const [hasNextPage, setHasNextPage] = useState(!!scrollProp?.nextPage)\n\n const [resolvedStartElement, setResolvedStartElement] = useState<HTMLElement | null>(null)\n const [resolvedEndElement, setResolvedEndElement] = useState<HTMLElement | null>(null)\n const [resolvedItemsElement, setResolvedItemsElement] = useState<HTMLElement | null>(null)\n\n // Update elements when refs or props change\n useEffect(() => {\n const element = startElement ? resolveHTMLElement(startElement, startElementFromRef) : startElementFromRef\n setResolvedStartElement(element)\n }, [startElement, startElementFromRef])\n\n useEffect(() => {\n const element = endElement ? resolveHTMLElement(endElement, endElementFromRef) : endElementFromRef\n setResolvedEndElement(element)\n }, [endElement, endElementFromRef])\n\n useEffect(() => {\n const element = itemsElement ? resolveHTMLElement(itemsElement, itemsElementFromRef) : itemsElementFromRef\n setResolvedItemsElement(element)\n }, [itemsElement, itemsElementFromRef])\n\n const scrollableParent = useMemo(() => getScrollableParent(resolvedItemsElement), [resolvedItemsElement])\n\n const callbackPropsRef = useRef({\n buffer,\n onlyNext,\n onlyPrevious,\n reverse,\n preserveUrl,\n params,\n })\n\n callbackPropsRef.current = {\n buffer,\n onlyNext,\n onlyPrevious,\n reverse,\n preserveUrl,\n params,\n }\n\n const [infiniteScroll, setInfiniteScroll] = useState<UseInfiniteScrollProps | null>(null)\n\n const dataManager = useMemo(() => infiniteScroll?.dataManager, [infiniteScroll])\n const elementManager = useMemo(() => infiniteScroll?.elementManager, [infiniteScroll])\n\n const scrollToBottom = useCallback(() => {\n if (scrollableParent) {\n scrollableParent.scrollTo({\n top: scrollableParent.scrollHeight,\n behavior: 'instant',\n })\n } else {\n window.scrollTo({\n top: document.body.scrollHeight,\n behavior: 'instant',\n })\n }\n }, [scrollableParent])\n\n // Main setup effect - only recreate when structural dependencies change\n useEffect(() => {\n if (!resolvedItemsElement) {\n return\n }\n\n function syncStateFromDataManager() {\n setRequestCount(infiniteScrollInstance.dataManager.getRequestCount())\n setHasPreviousPage(infiniteScrollInstance.dataManager.hasPrevious())\n setHasNextPage(infiniteScrollInstance.dataManager.hasNext())\n }\n\n const infiniteScrollInstance = useInfiniteScroll({\n // Data\n getPropName: () => data,\n inReverseMode: () => callbackPropsRef.current.reverse,\n shouldFetchNext: () => !callbackPropsRef.current.onlyPrevious,\n shouldFetchPrevious: () => !callbackPropsRef.current.onlyNext,\n shouldPreserveUrl: () => callbackPropsRef.current.preserveUrl,\n getReloadOptions: () => callbackPropsRef.current.params,\n\n // Elements\n getTriggerMargin: () => callbackPropsRef.current.buffer,\n getStartElement: () => resolvedStartElement!,\n getEndElement: () => resolvedEndElement!,\n getItemsElement: () => resolvedItemsElement,\n getScrollableParent: () => scrollableParent,\n\n // Callbacks\n onBeforePreviousRequest: () => setLoadingPrevious(true),\n onBeforeNextRequest: () => setLoadingNext(true),\n onCompletePreviousRequest: () => {\n setLoadingPrevious(false)\n syncStateFromDataManager()\n },\n onCompleteNextRequest: () => {\n setLoadingNext(false)\n syncStateFromDataManager()\n },\n onDataReset: syncStateFromDataManager,\n })\n\n setInfiniteScroll(infiniteScrollInstance)\n const { dataManager, elementManager } = infiniteScrollInstance\n syncStateFromDataManager()\n\n elementManager.setupObservers()\n elementManager.processServerLoadedElements(dataManager.getLastLoadedPage())\n\n if (autoLoad) {\n elementManager.enableTriggers()\n }\n\n return () => {\n infiniteScrollInstance.flush()\n setInfiniteScroll(null)\n }\n }, [data, resolvedItemsElement, resolvedStartElement, resolvedEndElement, scrollableParent])\n\n const manualMode = useMemo(\n () => manual || (manualAfter > 0 && requestCount >= manualAfter),\n [manual, manualAfter, requestCount],\n )\n const autoLoad = useMemo(() => !manualMode, [manualMode])\n\n useEffect(() => {\n autoLoad ? elementManager?.enableTriggers() : elementManager?.disableTriggers()\n }, [autoLoad, onlyNext, onlyPrevious, resolvedStartElement, resolvedEndElement])\n\n useEffect(() => {\n // autoScroll defaults to reverse value if not explicitly set\n const shouldAutoScroll = autoScroll !== undefined ? autoScroll : reverse\n\n if (shouldAutoScroll) {\n scrollToBottom()\n }\n }, [scrollableParent])\n\n useImperativeHandle(\n ref,\n () => ({\n fetchNext: dataManager?.fetchNext || (() => {}),\n fetchPrevious: dataManager?.fetchPrevious || (() => {}),\n hasPrevious: dataManager?.hasPrevious || (() => false),\n hasNext: dataManager?.hasNext || (() => false),\n }),\n [dataManager],\n )\n\n const headerAutoMode = autoLoad && !onlyNext\n const footerAutoMode = autoLoad && !onlyPrevious\n\n const sharedExposed: Pick<\n InfiniteScrollActionSlotProps,\n 'loadingPrevious' | 'loadingNext' | 'hasPrevious' | 'hasNext'\n > = {\n loadingPrevious,\n loadingNext,\n hasPrevious: hasPreviousPage,\n hasNext: hasNextPage,\n }\n\n const exposedPrevious: InfiniteScrollActionSlotProps = {\n loading: loadingPrevious,\n fetch: dataManager?.fetchPrevious ?? (() => {}),\n autoMode: headerAutoMode,\n manualMode: !headerAutoMode,\n hasMore: hasPreviousPage,\n ...sharedExposed,\n }\n\n const exposedNext: InfiniteScrollActionSlotProps = {\n loading: loadingNext,\n fetch: dataManager?.fetchNext ?? (() => {}),\n autoMode: footerAutoMode,\n manualMode: !footerAutoMode,\n hasMore: hasNextPage,\n ...sharedExposed,\n }\n\n const exposedSlot: InfiniteScrollSlotProps = {\n loading: loadingPrevious || loadingNext,\n loadingPrevious,\n loadingNext,\n }\n\n const renderElements = []\n\n // Only render previous trigger if not using custom element selector/ref\n if (!startElement) {\n renderElements.push(\n createElement(\n 'div',\n { ref: startElementRef },\n // Render previous slot or fallback to loading indicator\n renderSlot(previous, exposedPrevious, loadingPrevious ? renderSlot(loading, exposedPrevious) : null),\n ),\n )\n }\n\n renderElements.push(\n createElement(\n as,\n { ...props, ref: itemsElementRef },\n typeof children === 'function' ? children(exposedSlot) : children,\n ),\n )\n\n // Only render next trigger if not using custom element selector/ref\n if (!endElement) {\n renderElements.push(\n createElement(\n 'div',\n { ref: endElementRef },\n // Render next slot or fallback to loading indicator\n renderSlot(next, exposedNext, loadingNext ? renderSlot(loading, exposedNext) : null),\n ),\n )\n }\n\n return createElement(React.Fragment, {}, ...(reverse ? [...renderElements].reverse() : renderElements))\n },\n)\n\nInfiniteScroll.displayName = 'InertiaInfiniteScroll'\n\nexport default InfiniteScroll\n", "import {\n ActiveVisit,\n isUrlMethodPair,\n LinkComponentBaseProps,\n LinkPrefetchOption,\n mergeDataIntoQueryString,\n Method,\n PendingVisit,\n resolveUrlMethodPairComponent,\n router,\n shouldIntercept,\n shouldNavigate,\n VisitOptions,\n} from '@inertiajs/core'\nimport { createElement, ElementType, forwardRef, useEffect, useMemo, useRef, useState } from 'react'\nimport { config } from '.'\n\nconst noop = () => undefined\n\ninterface BaseInertiaLinkProps extends LinkComponentBaseProps {\n as?: ElementType\n onClick?: (event: React.MouseEvent) => void\n}\n\nexport type InertiaLinkProps = BaseInertiaLinkProps &\n Omit<React.HTMLAttributes<HTMLElement>, keyof BaseInertiaLinkProps> &\n Omit<React.AllHTMLAttributes<HTMLElement>, keyof BaseInertiaLinkProps>\n\nconst Link = forwardRef<unknown, InertiaLinkProps>(\n (\n {\n children,\n as = 'a',\n data = {},\n href = '',\n method = 'get',\n preserveScroll = false,\n preserveState = null,\n preserveUrl = false,\n replace = false,\n only = [],\n except = [],\n headers = {},\n queryStringArrayFormat = 'brackets',\n async = false,\n onClick = noop,\n onCancelToken = noop,\n onBefore = noop,\n onStart = noop,\n onProgress = noop,\n onFinish = noop,\n onCancel = noop,\n onSuccess = noop,\n onError = noop,\n onPrefetching = noop,\n onPrefetched = noop,\n prefetch = false,\n cacheFor = 0,\n cacheTags = [],\n viewTransition = false,\n component = null,\n instant = false,\n pageProps = null,\n ...props\n },\n ref,\n ) => {\n const [inFlightCount, setInFlightCount] = useState(0)\n const hoverTimeout = useRef<number>(undefined)\n\n const _method = useMemo(() => {\n return isUrlMethodPair(href) ? href.method : (method.toLowerCase() as Method)\n }, [href, method])\n\n const resolvedComponent = useMemo(() => {\n if (component) {\n return component\n }\n\n if (instant && isUrlMethodPair(href)) {\n return resolveUrlMethodPairComponent(href)\n }\n\n return null\n }, [component, instant, href])\n\n const _as = useMemo(() => {\n if (typeof as !== 'string' || as.toLowerCase() !== 'a') {\n // Custom component or element\n return as\n }\n\n return _method !== 'get' ? 'button' : as.toLowerCase()\n }, [as, _method])\n\n const mergeDataArray = useMemo(\n () => mergeDataIntoQueryString(_method, isUrlMethodPair(href) ? href.url : href, data, queryStringArrayFormat),\n [href, _method, data, queryStringArrayFormat],\n )\n\n const url = useMemo(() => mergeDataArray[0], [mergeDataArray])\n const _data = useMemo(() => mergeDataArray[1], [mergeDataArray])\n\n const baseParams = useMemo<VisitOptions>(\n () => ({\n data: _data,\n method: _method,\n preserveScroll,\n preserveState: preserveState ?? _method !== 'get',\n preserveUrl,\n replace,\n only,\n except,\n headers,\n async,\n component: resolvedComponent,\n pageProps,\n }),\n [\n _data,\n _method,\n preserveScroll,\n preserveState,\n preserveUrl,\n replace,\n only,\n except,\n headers,\n async,\n resolvedComponent,\n pageProps,\n ],\n )\n\n const visitParams = useMemo<VisitOptions>(\n () => ({\n ...baseParams,\n viewTransition,\n onCancelToken,\n onBefore,\n onStart(visit: PendingVisit) {\n setInFlightCount((count) => count + 1)\n onStart(visit)\n },\n onProgress,\n onFinish(visit: ActiveVisit) {\n setInFlightCount((count) => count - 1)\n onFinish(visit)\n },\n onCancel,\n onSuccess,\n onError,\n }),\n [\n baseParams,\n viewTransition,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n ],\n )\n\n const prefetchModes: LinkPrefetchOption[] = useMemo(\n () => {\n if (prefetch === true) {\n return ['hover']\n }\n\n if (prefetch === false) {\n return []\n }\n\n if (Array.isArray(prefetch)) {\n return prefetch\n }\n\n return [prefetch]\n },\n Array.isArray(prefetch) ? prefetch : [prefetch],\n )\n\n const cacheForValue = useMemo(() => {\n if (cacheFor !== 0) {\n // If they've provided a value, respect it\n return cacheFor\n }\n\n if (prefetchModes.length === 1 && prefetchModes[0] === 'click') {\n // If they've only provided a prefetch mode of 'click',\n // we should only prefetch for the next request but not keep it around\n return 0\n }\n\n // Otherwise, default to 30 seconds\n return config.get('prefetch.cacheFor')\n }, [cacheFor, prefetchModes])\n\n const doPrefetch = useMemo(() => {\n return () => {\n router.prefetch(\n url,\n {\n ...baseParams,\n onPrefetching,\n onPrefetched,\n },\n { cacheFor: cacheForValue, cacheTags },\n )\n }\n }, [url, baseParams, onPrefetching, onPrefetched, cacheForValue, cacheTags])\n\n useEffect(() => {\n return () => {\n clearTimeout(hoverTimeout.current)\n }\n }, [])\n\n useEffect(() => {\n if (prefetchModes.includes('mount')) {\n setTimeout(() => doPrefetch())\n }\n }, prefetchModes)\n\n const regularEvents = {\n onClick: (event: React.MouseEvent) => {\n onClick(event)\n\n if (shouldIntercept(event)) {\n event.preventDefault()\n\n router.visit(url, visitParams)\n }\n },\n }\n\n const prefetchHoverEvents = {\n onMouseEnter: () => {\n hoverTimeout.current = window.setTimeout(() => {\n doPrefetch()\n }, config.get('prefetch.hoverDelay'))\n },\n onMouseLeave: () => {\n clearTimeout(hoverTimeout.current)\n },\n onClick: regularEvents.onClick,\n }\n\n const prefetchClickEvents = {\n onMouseDown: (event: React.MouseEvent) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n doPrefetch()\n }\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (shouldNavigate(event)) {\n event.preventDefault()\n doPrefetch()\n }\n },\n onMouseUp: (event: React.MouseEvent) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n router.visit(url, visitParams)\n }\n },\n onKeyUp: (event: React.KeyboardEvent) => {\n if (shouldNavigate(event)) {\n event.preventDefault()\n router.visit(url, visitParams)\n }\n },\n onClick: (event: React.MouseEvent) => {\n onClick(event)\n\n if (shouldIntercept(event)) {\n // Let the mouseup/keyup event handle the visit\n event.preventDefault()\n }\n },\n }\n\n const elProps = useMemo(() => {\n if (_as === 'button') {\n return { type: 'button' }\n }\n\n if (_as === 'a' || typeof _as !== 'string') {\n return { href: url }\n }\n\n return {}\n }, [_as, url])\n\n return createElement(\n _as,\n {\n ...props,\n ...elProps,\n ref,\n ...(() => {\n if (prefetchModes.includes('hover')) {\n return prefetchHoverEvents\n }\n\n if (prefetchModes.includes('click')) {\n return prefetchClickEvents\n }\n\n return regularEvents\n })(),\n 'data-loading': inFlightCount > 0 ? '' : undefined,\n },\n children,\n )\n },\n)\nLink.displayName = 'InertiaLink'\n\nexport default Link\n", "import {\n CancelToken,\n Errors,\n ErrorValue,\n FormDataConvertible,\n FormDataErrors,\n FormDataKeys,\n FormDataType,\n FormDataValues,\n hasFiles,\n http,\n HttpCancelledError,\n HttpProgressEvent,\n HttpResponseError,\n mergeDataIntoQueryString,\n Method,\n objectToFormData,\n Progress,\n UrlMethodPair,\n UseFormArguments,\n UseFormTransformCallback,\n UseFormUtils,\n UseFormWithPrecognitionArguments,\n UseHttpSubmitArguments,\n UseHttpSubmitOptions,\n} from '@inertiajs/core'\nimport { cloneDeep } from 'es-toolkit'\nimport { NamedInputEvent, toSimpleValidationErrors, ValidationConfig, Validator } from 'laravel-precognition'\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport useFormState, { SetDataAction } from './useFormState'\nimport useRemember from './useRemember'\n\ntype PrecognitionValidationConfig<TKeys> = ValidationConfig & {\n only?: TKeys[] | Iterable<TKeys> | ArrayLike<TKeys>\n}\n\nexport interface UseHttpProps<TForm extends object, TResponse = unknown> {\n data: TForm\n isDirty: boolean\n errors: FormDataErrors<TForm>\n hasErrors: boolean\n processing: boolean\n progress: Progress | null\n wasSuccessful: boolean\n recentlySuccessful: boolean\n response: TResponse | null\n setData: SetDataAction<TForm>\n transform: (callback: UseFormTransformCallback<TForm>) => void\n setDefaults: {\n (): void\n <T extends FormDataKeys<TForm>>(field: T, value: FormDataValues<TForm, T>): void\n (fields: Partial<TForm>): void\n }\n reset: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n clearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n resetAndClearErrors: <K extends FormDataKeys<TForm>>(...fields: K[]) => void\n setError: {\n <K extends FormDataKeys<TForm>>(field: K, value: ErrorValue): void\n (errors: FormDataErrors<TForm>): void\n }\n submit: (...args: UseHttpSubmitArguments<TResponse, TForm>) => Promise<TResponse>\n get: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n post: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n put: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n patch: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n delete: (url: string, options?: UseHttpSubmitOptions<TResponse, TForm>) => Promise<TResponse>\n cancel: () => void\n dontRemember: <K extends FormDataKeys<TForm>>(...fields: K[]) => UseHttpProps<TForm, TResponse>\n optimistic: (callback: (currentData: TForm) => Partial<TForm>) => UseHttpProps<TForm, TResponse>\n withAllErrors: () => UseHttpProps<TForm, TResponse>\n withPrecognition: (...args: UseFormWithPrecognitionArguments) => UseHttpPrecognitiveProps<TForm, TResponse>\n}\n\nexport interface UseHttpValidationProps<TForm extends object, TResponse = unknown> {\n invalid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n setValidationTimeout: (duration: number) => UseHttpPrecognitiveProps<TForm, TResponse>\n touch: <K extends FormDataKeys<TForm>>(\n field: K | NamedInputEvent | Array<K>,\n ...fields: K[]\n ) => UseHttpPrecognitiveProps<TForm, TResponse>\n touched: <K extends FormDataKeys<TForm>>(field?: K) => boolean\n valid: <K extends FormDataKeys<TForm>>(field: K) => boolean\n validate: <K extends FormDataKeys<TForm>>(\n field?: K | NamedInputEvent | PrecognitionValidationConfig<K>,\n config?: PrecognitionValidationConfig<K>,\n ) => UseHttpPrecognitiveProps<TForm, TResponse>\n validateFiles: () => UseHttpPrecognitiveProps<TForm, TResponse>\n validating: boolean\n validator: () => Validator\n withAllErrors: () => UseHttpPrecognitiveProps<TForm, TResponse>\n withoutFileValidation: () => UseHttpPrecognitiveProps<TForm, TResponse>\n setErrors: (errors: FormDataErrors<TForm>) => UseHttpPrecognitiveProps<TForm, TResponse>\n forgetError: <K extends FormDataKeys<TForm> | NamedInputEvent>(field: K) => UseHttpPrecognitiveProps<TForm, TResponse>\n}\n\nexport type UseHttp<TForm extends object, TResponse = unknown> = UseHttpProps<TForm, TResponse>\nexport type UseHttpPrecognitiveProps<TForm extends object, TResponse = unknown> = UseHttpProps<TForm, TResponse> &\n UseHttpValidationProps<TForm, TResponse>\n\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n method: Method | (() => Method),\n url: string | (() => string),\n data: TForm | (() => TForm),\n): UseHttpPrecognitiveProps<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n urlMethodPair: UrlMethodPair | (() => UrlMethodPair),\n data: TForm | (() => TForm),\n): UseHttpPrecognitiveProps<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n rememberKey: string,\n data: TForm | (() => TForm),\n): UseHttp<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n data: TForm | (() => TForm),\n): UseHttp<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(): UseHttp<TForm, TResponse>\nexport default function useHttp<TForm extends FormDataType<TForm>, TResponse = unknown>(\n ...args: UseFormArguments<TForm>\n): UseHttp<TForm, TResponse> | UseHttpPrecognitiveProps<TForm, TResponse> {\n const { rememberKey, data, precognitionEndpoint } = UseFormUtils.parseUseFormArguments<TForm>(...args)\n\n // Resolve initial data for remember functionality hooks\n const initialDefaults = typeof data === 'function' ? cloneDeep(data()) : cloneDeep(data)\n\n const abortController = useRef<AbortController | null>(null)\n const excludeKeysRef = useRef<FormDataKeys<TForm>[]>([])\n const pendingOptimisticRef = useRef<((currentData: TForm) => Partial<TForm>) | null>(null)\n const [response, setResponse] = useState<TResponse | null>(null)\n\n // For remember functionality, we need custom state hooks\n const useDataState = rememberKey\n ? () => useRemember<TForm>(initialDefaults, `${rememberKey}:data`, excludeKeysRef)\n : undefined\n\n const useErrorsState = rememberKey\n ? () => useRemember<FormDataErrors<TForm>>({} as FormDataErrors<TForm>, `${rememberKey}:errors`)\n : undefined\n\n const {\n form: baseForm,\n setDefaultsState,\n transformRef,\n dataRef,\n precognitionEndpointRef,\n isMounted,\n setProcessing,\n setProgress,\n markAsSuccessful,\n clearErrors,\n setError,\n defaultsCalledInOnSuccessRef,\n resetBeforeSubmit,\n finishProcessing,\n withAllErrors,\n } = useFormState<TForm>({\n data,\n precognitionEndpoint,\n useDataState,\n useErrorsState,\n })\n\n const submit = useCallback(\n async (method: Method, url: string, options: UseHttpSubmitOptions<TResponse, TForm>): Promise<TResponse> => {\n const onBefore = options.onBefore?.()\n\n if (onBefore === false) {\n return Promise.reject(new Error('Request cancelled by onBefore'))\n }\n\n defaultsCalledInOnSuccessRef.current = false\n\n if (isMounted.current) {\n resetBeforeSubmit()\n }\n\n abortController.current = new AbortController()\n\n const cancelToken: CancelToken = {\n cancel: () => abortController.current?.abort(),\n }\n\n options.onCancelToken?.(cancelToken)\n\n options.optimistic = options.optimistic ?? pendingOptimisticRef.current ?? undefined\n pendingOptimisticRef.current = null\n\n let snapshot: TForm | undefined\n\n if (options.optimistic) {\n snapshot = cloneDeep(dataRef.current)\n const optimisticData = options.optimistic(cloneDeep(snapshot))\n\n baseForm.setData((current: TForm) => ({ ...current, ...optimisticData }))\n }\n\n if (isMounted.current) {\n setProcessing(true)\n }\n\n options.onStart?.()\n\n const transformedData = transformRef.current(dataRef.current)\n const useFormData = hasFiles(transformedData as Record<string, FormDataConvertible>)\n\n let requestUrl = url\n let requestData: FormData | string | undefined\n let contentType: string | undefined\n\n if (method === 'get') {\n const [urlWithParams] = mergeDataIntoQueryString(\n method,\n url,\n transformedData as Record<string, FormDataConvertible>,\n )\n requestUrl = urlWithParams\n } else {\n if (useFormData) {\n requestData = objectToFormData(transformedData as Record<string, FormDataConvertible>)\n } else {\n requestData = JSON.stringify(transformedData)\n contentType = 'application/json'\n }\n }\n\n try {\n const httpResponse = await http.getClient().request({\n method,\n url: requestUrl,\n data: requestData,\n headers: {\n Accept: 'application/json',\n ...(contentType ? { 'Content-Type': contentType } : {}),\n ...options.headers,\n },\n signal: abortController.current.signal,\n onUploadProgress: (event: HttpProgressEvent) => {\n if (isMounted.current) {\n setProgress(event)\n }\n\n options.onProgress?.(event)\n },\n })\n\n const responseData = (httpResponse.data ? JSON.parse(httpResponse.data) : null) as TResponse\n\n if (httpResponse.status >= 200 && httpResponse.status < 300) {\n if (isMounted.current) {\n markAsSuccessful()\n setResponse(responseData)\n }\n\n options.onSuccess?.(responseData)\n\n if (isMounted.current && !defaultsCalledInOnSuccessRef.current) {\n baseForm.setData((data: TForm) => {\n setDefaultsState(cloneDeep(data))\n return data\n })\n }\n\n return responseData\n }\n\n throw new HttpResponseError(`Request failed with status ${httpResponse.status}`, httpResponse)\n } catch (error: unknown) {\n if (snapshot && isMounted.current) {\n baseForm.setData(snapshot)\n }\n\n if (error instanceof HttpResponseError) {\n if (error.response.status === 422) {\n const responseData = JSON.parse(error.response.data)\n const validationErrors = responseData.errors || {}\n const processedErrors = (\n withAllErrors.enabled() ? validationErrors : toSimpleValidationErrors(validationErrors)\n ) as FormDataErrors<TForm>\n\n if (isMounted.current) {\n clearErrors()\n setError(processedErrors)\n }\n\n options.onError?.(processedErrors as Errors)\n }\n\n throw error\n }\n\n if (error instanceof HttpCancelledError || (error instanceof Error && error.name === 'AbortError')) {\n options.onCancel?.()\n throw new HttpCancelledError('Request was cancelled', url)\n }\n\n throw error\n } finally {\n if (isMounted.current) {\n finishProcessing()\n }\n\n abortController.current = null\n options.onFinish?.()\n }\n },\n [clearErrors, setError],\n )\n\n const cancel = useCallback(() => {\n if (abortController.current) {\n abortController.current.abort()\n }\n }, [])\n\n const submitWithArgs = useCallback(\n (...args: UseHttpSubmitArguments<TResponse, TForm>): Promise<TResponse> => {\n const parsed = UseFormUtils.parseSubmitArguments(args as any, precognitionEndpointRef.current)\n\n return submit(parsed.method, parsed.url, parsed.options as UseHttpSubmitOptions<TResponse, TForm>)\n },\n [submit],\n )\n\n const submitMethods = useMemo(\n () => ({\n get: async (url: string, options: UseHttpSubmitOptions<TResponse, TForm> = {}): Promise<TResponse> =>\n submit('get', url, options),\n post: async (url: string, options: UseHttpSubmitOptions<TResponse, TForm> = {}): Promise<TResponse> =>\n submit('post', url, options),\n put: async (url: string, options: UseHttpSubmitOptions<TResponse, TForm> = {}): Promise<TResponse> =>\n submit('put', url, options),\n patch: async (url: string, options: UseHttpSubmitOptions<TResponse, TForm> = {}): Promise<TResponse> =>\n submit('patch', url, options),\n delete: async (url: string, options: UseHttpSubmitOptions<TResponse, TForm> = {}): Promise<TResponse> =>\n submit('delete', url, options),\n }),\n [submit],\n )\n\n // Add useHttp-specific methods to the form object\n Object.assign(baseForm, {\n response,\n submit: submitWithArgs,\n ...submitMethods,\n cancel,\n dontRemember: <K extends FormDataKeys<TForm>>(...keys: K[]) => {\n excludeKeysRef.current = keys\n return form\n },\n\n optimistic: (callback: (currentData: TForm) => Partial<TForm>) => {\n pendingOptimisticRef.current = callback\n return form\n },\n\n withAllErrors: () => {\n withAllErrors.enable()\n return form\n },\n })\n\n // Cast to the full form type (baseForm now has HTTP methods)\n const form = baseForm as unknown as UseHttpProps<TForm, TResponse>\n\n // Wrap withPrecognition to return the correct type with HTTP methods\n const originalWithPrecognition = baseForm.withPrecognition\n form.withPrecognition = (...args: UseFormWithPrecognitionArguments): UseHttpPrecognitiveProps<TForm, TResponse> => {\n originalWithPrecognition(...args)\n return form as UseHttpPrecognitiveProps<TForm, TResponse>\n }\n\n return precognitionEndpointRef.current ? (form as UseHttpPrecognitiveProps<TForm, TResponse>) : form\n}\n", "import { PollOptions, ReloadOptions, router } from '@inertiajs/core'\nimport { useEffect, useRef } from 'react'\n\nexport default function usePoll(\n interval: number,\n requestOptions: ReloadOptions = {},\n options: PollOptions = {\n keepAlive: false,\n autoStart: true,\n },\n) {\n const pollRef = useRef(\n router.poll(interval, requestOptions, {\n ...options,\n autoStart: false,\n }),\n )\n\n useEffect(() => {\n if (options.autoStart ?? true) {\n pollRef.current.start()\n }\n\n return () => pollRef.current.stop()\n }, [])\n\n return {\n stop: pollRef.current.stop,\n start: pollRef.current.start,\n }\n}\n", "import { router, VisitOptions } from '@inertiajs/core'\nimport { useEffect, useState } from 'react'\n\nexport default function usePrefetch(options: VisitOptions = {}): {\n lastUpdatedAt: number | null\n isPrefetching: boolean\n isPrefetched: boolean\n flush: () => void\n} {\n const cached = typeof window === 'undefined' ? null : router.getCached(window.location.pathname, options)\n const inFlight = typeof window === 'undefined' ? null : router.getPrefetching(window.location.pathname, options)\n\n const [lastUpdatedAt, setLastUpdatedAt] = useState<number | null>(cached?.staleTimestamp || null)\n const [isPrefetching, setIsPrefetching] = useState(inFlight !== null)\n const [isPrefetched, setIsPrefetched] = useState(cached !== null)\n\n useEffect(() => {\n const onPrefetchingListener = router.on('prefetching', (e) => {\n if (e.detail.visit.url.pathname === window.location.pathname) {\n setIsPrefetching(true)\n }\n })\n\n const onPrefetchedListener = router.on('prefetched', (e) => {\n if (e.detail.visit.url.pathname === window.location.pathname) {\n setIsPrefetching(false)\n setIsPrefetched(true)\n setLastUpdatedAt(e.detail.fetchedAt)\n }\n })\n\n return () => {\n onPrefetchedListener()\n onPrefetchingListener()\n }\n }, [])\n\n return {\n lastUpdatedAt,\n isPrefetching,\n isPrefetched,\n flush: () => router.flush(window.location.pathname, options),\n }\n}\n", "import { ReloadOptions, router } from '@inertiajs/core'\nimport { get } from 'es-toolkit/compat'\nimport { createElement, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport usePage from './usePage'\n\ninterface WhenVisibleSlotProps {\n fetching: boolean\n}\n\ninterface WhenVisibleProps {\n children: ReactNode | ((props: WhenVisibleSlotProps) => ReactNode)\n fallback: ReactNode | (() => ReactNode)\n data?: string | string[]\n params?: ReloadOptions\n buffer?: number\n as?: string\n always?: boolean\n}\n\nconst WhenVisible = ({ children, data, params, buffer, as, always, fallback }: WhenVisibleProps) => {\n always = always ?? false\n as = as ?? 'div'\n fallback = fallback ?? null\n\n const pageProps = usePage().props\n const keys = useMemo(() => (data ? (Array.isArray(data) ? data : [data]) : []), [data])\n\n const [loaded, setLoaded] = useState(() => keys.length > 0 && keys.every((key) => get(pageProps, key) !== undefined))\n const [isFetching, setIsFetching] = useState(false)\n const fetching = useRef<boolean>(false)\n const ref = useRef<HTMLDivElement>(null)\n const observer = useRef<IntersectionObserver | null>(null)\n const getReloadParamsRef = useRef<() => Partial<ReloadOptions>>(() => ({}))\n\n useEffect(() => {\n if (keys.length > 0) {\n setLoaded(keys.every((key) => get(pageProps, key) !== undefined))\n }\n }, [pageProps, keys])\n\n const getReloadParams = useCallback<() => Partial<ReloadOptions>>(() => {\n const reloadParams: Partial<ReloadOptions> = { preserveErrors: true, ...params }\n\n if (data) {\n reloadParams.only = (Array.isArray(data) ? data : [data]) as string[]\n }\n\n return reloadParams\n }, [params, data])\n\n getReloadParamsRef.current = getReloadParams\n\n const registerObserver = () => {\n observer.current?.disconnect()\n\n observer.current = new IntersectionObserver(\n (entries) => {\n if (!entries[0].isIntersecting) {\n return\n }\n\n if (fetching.current) {\n return\n }\n\n if (!always && loaded) {\n return\n }\n\n fetching.current = true\n setIsFetching(true)\n\n const reloadParams = getReloadParamsRef.current()\n\n router.reload({\n ...reloadParams,\n onStart: (e) => {\n fetching.current = true\n setIsFetching(true)\n reloadParams.onStart?.(e)\n },\n onFinish: (e) => {\n setLoaded(true)\n fetching.current = false\n setIsFetching(false)\n reloadParams.onFinish?.(e)\n\n if (!always) {\n observer.current?.disconnect()\n }\n },\n })\n },\n {\n rootMargin: `${buffer || 0}px`,\n },\n )\n\n observer.current.observe(ref.current!)\n }\n\n useEffect(() => {\n if (!ref.current) {\n return\n }\n\n if (loaded && !always) {\n return\n }\n\n registerObserver()\n\n return () => {\n observer.current?.disconnect()\n }\n }, [always, loaded, buffer])\n\n const resolveChildren = () => (typeof children === 'function' ? children({ fetching: isFetching }) : children)\n const resolveFallback = () => (typeof fallback === 'function' ? fallback() : fallback)\n\n if (always || !loaded) {\n return createElement(\n as,\n {\n props: null,\n ref,\n },\n loaded ? resolveChildren() : resolveFallback(),\n )\n }\n\n return loaded ? resolveChildren() : null\n}\n\nWhenVisible.displayName = 'InertiaWhenVisible'\n\nexport default WhenVisible\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,UAAU,kBAAkB;AAGrC,SAAS,QAAAA,OAAM,UAAU,UAAAC,eAAc;;;ACHvC;AAAA,EACE;AAAA,EAGA;AAAA,EAIA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;;;ACnB1B,SAAS,qBAAqB;AAE9B,IAAM,cAAc,cAAkC,IAAI;AAC1D,YAAY,cAAc;AAE1B,IAAO,sBAAQ;;;ACNf,SAAS,8BAAuE;AAEzE,IAAM,QAAQ,uBAAuB;AAErC,SAAS,eAAe,OAAmC;AAChE,QAAM,IAAI,KAAK;AACjB;AAEO,SAAS,kBACd,MACA,OACM;AACN,QAAM,OAAO,MAAM,KAAK;AAC1B;AAEO,SAAS,mBAAyB;AACvC,QAAM,MAAM;AACd;;;AChBA,SAAS,iBAAAC,sBAAqB;AAE9B,IAAM,cAAcA,eAA2B,IAAI;AACnD,YAAY,cAAc;AAE1B,IAAO,sBAAQ;;;AHoBf,SAAS,YAAY,OAAyC;AAC5D,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,YAAY,cAAc,OAAO;AACpD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,UAAU,YAAY;AAC/B,UAAM,KAAK;AACX,WAAO,GAAG,WAAW,qBAAqB,QAAQ,GAAG,SAAS,MAAM,GAAG,gBAAgB;AAAA,EACzF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAyB;AACjD,MAAI,OAAO,UAAU,YAAY;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,KAAK;AACX,SAAO,GAAG,WAAW,KAAK,OAAO,GAAG,cAAc;AACpD;AAEA,IAAI,uBAAuB;AAC3B,IAAI,sBAAsB;AAC1B,IAAI,gBAA6C,YAAY;AAI3D,yBAAuB;AACzB;AAoBA,IAAM,gBAAgB;AAAA,EACpB,QAAQ,CAAC;AAAA,EACT,OAAO,CAAC;AACV;AAEe,SAAR,IAAgE;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM,CAAC,SAAS,UAAU,IAAI,SAAsB;AAAA,IAClD,WAAW,oBAAoB;AAAA,IAC/B,MAAM,EAAE,GAAG,aAAa,OAAO,YAAY,SAAS,CAAC,EAAE;AAAA,IACvD,KAAK;AAAA,EACP,CAAC;AAED,QAAM,cAAc,QAAQ,MAAM;AAChC,WAAO;AAAA,MACL,OAAO,WAAW;AAAA,MAClB,kBAAkB,CAAC,UAAU;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MAAC;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAqB,qBAAqB,MAAM,WAAW,MAAM,KAAK,MAAM,aAAa;AAE/F,MAAI,CAAC,qBAAqB;AACxB,WAAO,KAAqB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,eAAe,OAAO,SAAS,cAAc,IAAI;AAAA,MACjD,SAAS,CAAC,UAAU;AAClB,mBAAW,CAACC,cAAa;AAAA,UACvB,GAAGA;AAAA,UACH,MAAM,EAAE,GAAGA,SAAQ,MAAM,MAAM;AAAA,QACjC,EAAE;AAAA,MACJ;AAAA,IACF,CAAC;AAED,0BAAsB;AAAA,EACxB;AAEA,YAAU,MAAM;AACd,oBAAgB,OAAO,EAAE,WAAW,MAAM,cAAc,MAA4B;AAClF,UAAI,sBAAsB;AAGxB,+BAAuB;AACvB;AAAA,MACF;AAEA,UAAI,CAAC,eAAe;AAClB,yBAAiB;AAAA,MACnB;AAEA;AAAA,QAAU,MACR,WAAW,CAACA,cAAa;AAAA,UACvB;AAAA,UACA;AAAA,UACA,KAAK,gBAAgBA,SAAQ,MAAM,KAAK,IAAI;AAAA,QAC9C,EAAE;AAAA,MACJ;AAAA,IACF;AAEA,WAAO,GAAG,YAAY,MAAM,YAAY,YAAY,CAAC;AAAA,EACvD,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,QAAQ,WAAW;AACtB,WAAO;AAAA,MACL,oBAAY;AAAA,MACZ,EAAE,OAAO,YAAY;AAAA,MACrB,cAAc,oBAAY,UAAU,EAAE,OAAO,QAAQ,KAAK,GAAG,IAAI;AAAA,IACnE;AAAA,EACF;AAEA,QAAM,iBACJ,aACC,CAAC,EAAE,WAAW,OAAO,IAAI,MAAM;AAC9B,UAAM,QAAQ,cAAc,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;AAExD,QAAI,UAAU,UAAU,iBAAiB,UAAU,MAAM,GAAG;AAC1D,YAAM,SAAU,UAAU,OAAoB,KAAK;AAEnD,UAAI,eAAe,MAAM,GAAG;AAC1B,eAAQ,UAAU,OAA0B,KAAK;AAAA,MACnD;AAEA,YAAMC,WAAU,iBAAiB,QAAQ,WAAW;AAEpD,UAAIA,SAAQ,SAAS,GAAG;AACtB,eAAOA,SAAQ,YAAY,CAAC,WAAW,WAAW;AAChD,iBAAO;AAAA,YACL,OAAO;AAAA,YACP;AAAA,cACE,GAAG;AAAA,cACH,GAAG,OAAO;AAAA,cACV,GAAG,mBAAmB;AAAA,cACtB,GAAI,OAAO,OAAO,mBAAmB,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;AAAA,YACnE;AAAA,YACA;AAAA,UACF;AAAA,QACF,GAAG,KAAK;AAAA,MACV;AAEA,aAAO;AAAA,IACT;AAEA,UAAM,kBAAkB,UAAU,UAAU,gBAAgB,QAAQ,KAAK,WAAW,QAAQ,IAAI;AAChG,UAAM,UAAU,iBAAiB,iBAAiB,aAAa,UAAU,SAAS,mBAAmB,MAAS;AAE9G,QAAI,QAAQ,SAAS,GAAG;AACtB,aAAO,QAAQ,YAAY,CAAC,WAAW,WAAW;AAChD,eAAO;AAAA,UACL,OAAO;AAAA,UACP;AAAA,YACE,GAAG;AAAA,YACH,GAAG,OAAO;AAAA,YACV,GAAG,mBAAmB;AAAA,YACtB,GAAI,OAAO,OAAO,mBAAmB,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;AAAA,UACnE;AAAA,UACA;AAAA,QACF;AAAA,MACF,GAAG,KAAK;AAAA,IACV;AAEA,WAAO;AAAA,EACT;AAEF,SAAO;AAAA,IACL,oBAAY;AAAA,IACZ,EAAE,OAAO,YAAY;AAAA,IACrB;AAAA,MACE,oBAAY;AAAA,MACZ,EAAE,OAAO,QAAQ,KAAK;AAAA,MACtB,eAAe;AAAA,QACb,WAAW,QAAQ;AAAA,QACnB,KAAK,QAAQ;AAAA,QACb,OAAO,QAAQ,KAAK;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAI,cAAc;;;AIlOlB;AAAA,EACE;AAAA,EAIA;AAAA,EACA,QAAQ;AAAA,EAIR,UAAAC;AAAA,EACA;AAAA,OAEK;AACP,SAAS,iBAAAC,gBAA6B,kBAAkB;AACxD,SAAS,YAAY,mBAAmB;AAoExC,eAAO,iBACL;AAAA,EACE,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAAC,YAAW,CAAC;AAAA,EACZ;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAAC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,IAGyC,CAAC,GAC2B;AACrE,SAAO,QAAQ,QAAQ;AAEvB,MAAIA,OAAM;AACR,eAAW,UAAUA,KAAI;AAAA,EAC3B;AAEA,QAAM,WAAW,OAAO,WAAW;AAEnC,QAAM,qBAAqB,CAAC,YAAwC;AAClE,WAAO,aAAaC,eAAc,YAAY,MAAM,OAAO,IAAI;AAAA,EACjE;AAEA,QAAM,mBAAmB,CAAC,MAAcC,UACtC,QAAQ,QAAQ,QAAS,MAAMA,KAAI,CAAC,EAAE,KAAK,CAAC,WAAW;AACrD,WAAS,OAAwC,WAAW;AAAA,EAC9D,CAAC;AAIH,MAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ;AAChC,WAAO,OAAOA,OAAyB,mBAAmC;AACxE,UAAIC,QAAiB,CAAC;AAEtB,YAAM,mBAAmB,MAAM,iBAAiBD,MAAK,WAAWA,KAAI;AAEpE,YAAM,QAAsC;AAAA,QAC1C,aAAaA;AAAA,QACb;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,cAAc,CAAC,aAAwBC,QAAO;AAAA,QAC9C,eAAe;AAAA,MACjB;AAEA,UAAIC;AAEJ,UAAI,OAAO;AACT,QAAAA,YAAY,MAAqE;AAAA,UAC/E,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,QAAAA,YAAW,mBAAmBH,eAAc,KAAK,KAAK,CAAC;AAEvD,YAAI,SAAS;AACX,UAAAG,YAAW,QAAQA,WAAU,EAAE,KAAK,KAAK,CAAC;AAAA,QAC5C;AAAA,MACF;AAEA,YAAM,OAAO,eAAeA,SAAQ;AACpC,YAAM,OAAO,aAAa,IAAIF,OAAM,IAAI;AAExC,aAAO,EAAE,MAAAC,OAAM,KAAK;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,cAAc,QAAQ,sBAAyC,EAAE;AAEvE,MAAI,OAAiB,CAAC;AAEtB,QAAM,WAAW,MAAM,QAAQ,IAAI;AAAA,IACjC,iBAAiB,YAAY,WAAW,WAAW;AAAA,IACnDE,QAAO,eAAe,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACxC,CAAC,EAAE,KAAK,CAAC,CAAC,gBAAgB,MAAM;AAC9B,UAAM,QAAsC;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,cAAc,WAAW,CAAC,aAAwB,OAAO,WAAY;AAAA,MACrE,eAAe;AAAA,IACjB;AAEA,QAAI,UAAU;AACZ,aAAQ,MAAqE;AAAA,QAC3E,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,KAAK,SAAS,eAAe,EAAE;AAErC,QAAI,OAAO;AACT,aAAQ,MAAoE;AAAA,QAC1E;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,aAAa,mBAAmBJ,eAAc,KAAK,KAAK,CAAC;AAE7D,QAAI,SAAS;AACX,mBAAa,QAAQ,YAAY,EAAE,KAAK,MAAM,CAAC;AAAA,IACjD;AAEA,QAAI,GAAG,aAAa,sBAAsB,GAAG;AAC3C,kBAAY,IAAI,UAAU;AAAA,IAC5B,OAAO;AACL,iBAAW,EAAE,EAAE,OAAO,UAAU;AAAA,IAClC;AAAA,EACF,CAAC;AAED,MAAI,CAAC,YAAYF,WAAU;AACzB,kBAAcA,SAAQ;AAAA,EACxB;AAEA,MAAI,YAAY,UAAU,UAAU;AAClC,UAAM,OAAO,OAAO,QAAQ;AAC5B,UAAM,OAAO,aAAa,IAAI,aAAa,IAAI;AAE/C,WAAO,EAAE,MAAM,KAAK;AAAA,EACtB;AACF;;;ACzNA,SAAS,mCAAmC;AAC5C,SAAS,WAAW;AACpB,SAAoB,aAAAO,YAAW,WAAAC,UAAS,QAAQ,YAAAC,iBAAgB;;;ACDhE,SAAS,WAAW;AAGL,SAAR,UAAyG;AAC9G,QAAM,OAAO,IAAI,mBAAW;AAE5B,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,SAAO;AACT;;;ADNA,IAAM,uBAAuB,CAAC,MAAgB,QAAkB,SAA4B;AAC1F,MAAI,KAAK,WAAW,KAAK,OAAO,WAAW,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,KAAK,KAAK,CAAC,QAAQ,KAAK,SAAS,GAAG,CAAC;AAAA,EAC9C;AAEA,SAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,OAAO,SAAS,GAAG,CAAC;AACjD;AAYA,IAAM,WAAW,CAAC,EAAE,UAAU,MAAM,SAAS,MAAqB;AAChE,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AAEA,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAS,KAAK;AAC1C,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,KAAK;AAChD,QAAM,gBAAgB,OAAO,oBAAI,IAAY,CAAC;AAC9C,QAAM,YAAY,QAAQ,EAAE;AAC5B,QAAM,OAAOC,SAAQ,MAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAI,CAAC,IAAI,CAAC;AAExE,EAAAC,WAAU,MAAM;AACd,UAAM,sBAAsBC,QAAO,GAAG,SAAS,CAAC,MAAM;AACpD,YAAM,QAAQ,EAAE,OAAO;AAEvB,UACE,MAAM,kBAAkB,QACxB,4BAA4B,MAAM,KAAK,OAAO,QAAQ,KACtD,qBAAqB,MAAM,MAAM,MAAM,QAAQ,IAAI,GACnD;AACA,sBAAc,QAAQ,IAAI,KAAK;AAC/B,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,uBAAuBA,QAAO,GAAG,UAAU,CAAC,MAAM;AACtD,YAAM,QAAQ,EAAE,OAAO;AAEvB,UAAI,cAAc,QAAQ,IAAI,KAAK,GAAG;AACpC,sBAAc,QAAQ,OAAO,KAAK;AAClC,qBAAa,cAAc,QAAQ,OAAO,CAAC;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,0BAAoB;AACpB,2BAAqB;AACrB,oBAAc,QAAQ,MAAM;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,EAAAD,WAAU,MAAM;AACd,cAAU,KAAK,MAAM,CAAC,QAAQ,IAAI,WAAW,GAAG,MAAM,MAAS,CAAC;AAAA,EAClE,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,QAAM,kBAAkBD,SAAQ,MAAM,KAAK,MAAM,CAAC,QAAQ,IAAI,WAAW,GAAG,MAAM,MAAS,GAAG,CAAC,MAAM,SAAS,CAAC;AAE/G,MAAI,UAAU,iBAAiB;AAC7B,QAAI,OAAO,aAAa,YAAY;AAClC,aAAO,SAAS,EAAE,UAAU,CAAC;AAAA,IAC/B;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,aAAa,aAAa,SAAS,IAAI;AACvD;AAEA,SAAS,cAAc;AAEvB,IAAO,mBAAQ;;;AExFf;AAAA,EACE,UAAAG;AAAA,EAGA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,OAEK;AACP,SAAS,WAAAC,gBAAe;AAExB,OAAO;AAAA,EACL,iBAAAC;AAAA,EACA,iBAAAC;AAAA,EAEA;AAAA,EAEA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;AC9BP;AAAA,EAWE,UAAAC;AAAA,EAMA,gBAAAC;AAAA,OAGK;AACP,SAAS,aAAAC,kBAAiB;AAE1B,SAAS,eAAAC,cAAa,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;;;ACvBvD,SAAyC,aAAAC,YAAW,uBAAuB;AAIpE,SAAS,0BAA0B,QAAwB,MAA6B;AAC7F,SAAO,WAAW,cAAcA,WAAU,QAAQ,IAAI,IAAI,gBAAgB,QAAQ,IAAI;AACxF;;;ACNA;AAAA,EASE;AAAA,OAEK;AACP,SAAS,WAAW,eAAe;AACnC,SAAS,OAAAC,MAAK,KAAK,WAAW;AAC9B;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,aAAa,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AA6F1C,SAAR,aACL,SAC2B;AAC3B,QAAM,EAAE,MAAM,YAAY,cAAc,eAAe,IAAI;AAE3D,QAAM,iBAAiB,OAAO,eAAe;AAC7C,QAAM,cAAc,MAAO,iBAAkB,WAA2B,IAAI;AAE5E,QAAM,cAAc,UAAU,YAAY,CAAC;AAE3C,QAAM,YAAYC,QAAO,KAAK;AAC9B,QAAM,0BAA0BA,QAAO,QAAQ,wBAAwB,IAAI;AAE3E,QAAM,CAAC,UAAU,gBAAgB,IAAIC,UAAS,UAAU,WAAW,CAAC;AAEpE,QAAM,CAAC,MAAM,OAAO,IAAI,eAAe,aAAa,IAAIA,UAAS,UAAU,WAAW,CAAC;AACvF,QAAM,CAAC,QAAQ,SAAS,IAAI,iBAAiB,eAAe,IAAIA,UAAS,CAAC,CAA0B;AACpG,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAClD,QAAM,CAACC,WAAU,WAAW,IAAID,UAA0B,IAAI;AAC9D,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,QAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAAS,KAAK;AAElE,QAAM,8BAA8BD,QAAe,MAAS;AAC5D,QAAM,eAAeA,QAAwC,CAACG,UAASA,KAAI;AAC3E,QAAM,+BAA+BH,QAAO,KAAK;AAEjD,QAAM,eAAeA,QAAyB,IAAI;AAClD,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAClD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAmB,CAAC,CAAC;AAC/D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAmB,CAAC,CAAC;AAC3D,QAAM,mBAAmBD,QAAuB,IAAI;AACpD,QAAM,uBAAuB,MAAM,iBAAiB,WAAW,OAAO,IAAI,oBAAoB;AAE9F,QAAM,UAAUA,QAAO,IAAI;AAE3B,EAAAI,WAAU,MAAM;AACd,YAAQ,UAAU;AAAA,EACpB,CAAC;AAED,EAAAA,WAAU,MAAM;AACd,cAAU,UAAU;AACpB,WAAO,MAAM;AACX,gBAAU,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB;AAAA,IACtB,CAAC,WAA4D,eAAqB;AAChF,UAAI,OAAO,cAAc,UAAU;AACjC,gBAAQ,CAACD,UAAS,IAAI,UAAUA,KAAI,GAAG,WAAW,UAAU,CAAC;AAAA,MAC/D,WAAW,OAAO,cAAc,YAAY;AAC1C,gBAAQ,CAACA,UAAS,UAAUA,KAAI,CAAC;AAAA,MACnC,OAAO;AACL,gBAAQ,SAAkB;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,sBAAsB;AAAA,IAC1B,CAAC,eAAsD,eAAyB;AAC9E,UAAI,gBAAgB;AAClB,cAAM,IAAI,MAAM,8EAA8E;AAAA,MAChG;AAEA,mCAA6B,UAAU;AAEvC,UAAI,cAAc,CAAC;AAEnB,UAAI,OAAO,kBAAkB,aAAa;AACxC,sBAAc,EAAE,GAAG,QAAQ,QAAQ;AACnC,yBAAiB,QAAQ,OAAO;AAAA,MAClC,OAAO;AACL,yBAAiB,CAACE,cAAa;AAC7B,wBACE,OAAO,kBAAkB,WACrB,IAAI,UAAUA,SAAQ,GAAG,eAAe,UAAU,IAClD,OAAO,OAAO,UAAUA,SAAQ,GAAG,aAAa;AAEtD,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,mBAAa,SAAS,SAAS,WAAsC;AAAA,IACvE;AAAA,IACA,CAAC,gBAAgB;AAAA,EACnB;AAEA,QAAM,QAAQ;AAAA,IACZ,IAAI,WAAqB;AACvB,YAAM,eAAe,iBAAiB,UAAU,YAAY,CAAC,IAAI;AACjE,YAAM,aAAa,UAAU,YAAY;AAEzC,UAAI,OAAO,WAAW,GAAG;AACvB,YAAI,gBAAgB;AAClB,2BAAiB,UAAU;AAAA,QAC7B;AACA,gBAAQ,UAAU;AAAA,MACpB,OAAO;AACL,YAAI,gBAAgB;AAClB,2BAAiB,CAAC,oBAAoB;AACpC,kBAAM,cAAc,UAAU,eAAe;AAC5C,YAAC,OACC,OAAO,CAAC,QAAQ,IAAI,YAAY,GAAG,CAAC,EACpC,QAAQ,CAAC,QAAQ;AAChB,kBAAI,aAAa,KAAKC,KAAI,YAAY,GAAG,CAAC;AAAA,YAC5C,CAAC;AACH,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAEA;AAAA,UAAQ,CAACH,UACN,OACE,OAAO,CAAC,QAAQ,IAAI,YAAY,GAAG,CAAC,EACpC;AAAA,YACC,CAAC,OAAO,QAAQ;AACd,qBAAO,IAAI,OAAO,KAAKG,KAAI,YAAY,GAAG,CAAC;AAAA,YAC7C;AAAA,YACA,EAAE,GAAGH,MAAK;AAAA,UACZ;AAAA,QACJ;AAAA,MACF;AAEA,mBAAa,SAAS,MAAM,GAAG,MAAM;AAAA,IACvC;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,EACpB;AAEA,QAAM,WAAW;AAAA,IACf,CAAC,eAA4D,eAA4B;AACvF,gBAAU,CAACI,YAAW;AACpB,cAAM,YAAY;AAAA,UAChB,GAAGA;AAAA,UACH,GAAI,OAAO,kBAAkB,WAAW,EAAE,CAAC,aAAa,GAAG,WAAW,IAAI;AAAA,QAC5E;AAEA,qBAAa,SAAS,UAAU,SAAS;AAEzC,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,cAAc;AAAA,IAClB,IAAI,WAAqB;AACvB,gBAAU,CAACA,YAAW;AACpB,cAAM,YAAY,OAAO,KAAKA,OAAM,EAAE;AAAA,UACpC,CAAC,OAAO,WAAW;AAAA,YACjB,GAAG;AAAA,YACH,GAAI,OAAO,SAAS,KAAK,CAAC,OAAO,SAAS,KAAK,IAAI,EAAE,CAAC,KAAK,GAAIA,QAAkB,KAAK,EAAE,IAAI,CAAC;AAAA,UAC/F;AAAA,UACA,CAAC;AAAA,QACH;AAEA,YAAI,aAAa,SAAS;AACxB,cAAI,OAAO,WAAW,GAAG;AACvB,yBAAa,QAAQ,UAAU,CAAC,CAAC;AAAA,UACnC,OAAO;AACL,mBAAO,QAAQ,aAAa,QAAQ,WAAW;AAAA,UACjD;AAAA,QACF;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,sBAAsB;AAAA,IAC1B,IAAI,WAAqB;AACvB,YAAM,GAAG,MAAM;AACf,kBAAY,GAAG,MAAM;AAAA,IACvB;AAAA,IACA,CAAC,OAAO,WAAW;AAAA,EACrB;AAEA,QAAM,mBAAmB,YAAY,MAAM;AACzC,gBAAY;AACZ,qBAAiB,IAAI;AACrB,0BAAsB,IAAI;AAE1B,gCAA4B,UAAU,OAAO,WAAW,MAAM;AAC5D,UAAI,UAAU,SAAS;AACrB,8BAAsB,KAAK;AAAA,MAC7B;AAAA,IACF,GAAG,OAAO,IAAI,iCAAiC,CAAC;AAAA,EAClD,GAAG,CAAC,aAAa,kBAAkB,qBAAqB,CAAC;AAEzD,QAAM,oBAAoB,YAAY,MAAM;AAC1C,qBAAiB,KAAK;AACtB,0BAAsB,KAAK;AAC3B,iBAAa,4BAA4B,OAAO;AAAA,EAClD,GAAG,CAAC,kBAAkB,qBAAqB,CAAC;AAE5C,QAAM,mBAAmB,YAAY,MAAM;AACzC,kBAAc,KAAK;AACnB,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,eAAe,WAAW,CAAC;AAE/B,QAAM,oBAAoB,YAAY,CAAC,aAA8C;AACnF,iBAAa,UAAU;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,QAAM,MAAM,CAAI,OAAU,aAAuC;AAC/D,aAAS,KAAK;AACd,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ;AAAA,IACZ,CAAgC,UAAa,YAAY,SAAS,KAAe;AAAA,IACjF,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,UAAU,YAAY,CAAgC,UAAa,SAAS,QAAQ,CAAC,MAAM,CAAC;AAElG,QAAM,UAAU;AAAA,IACd,CAAgC,UAC9B,OAAO,UAAU,WAAW,cAAc,SAAS,KAAe,IAAI,cAAc,SAAS;AAAA,IAC/F,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,OAAO;AAAA,IACX;AAAA,IACA,SAAS,CAAC,QAAQ,MAAM,QAAQ;AAAA,IAChC;AAAA,IACA,WAAW,OAAO,KAAK,MAAM,EAAE,SAAS;AAAA,IACxC;AAAA,IACA,UAAAL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,WAAW,CAAC,OAAqDM,YAA8B;AACnG,QAAI,OAAO,UAAU,YAAY,EAAE,YAAY,QAAQ;AACrD,MAAAA,UAAS;AACT,cAAQ;AAAA,IACV;AAEA,QAAI,UAAU,QAAW;AACvB,mBAAa,QAAS,SAASA,OAAM;AAAA,IACvC,OAAO;AACL,YAAM,YAAY,YAAY,KAAK;AACnC,YAAM,kBAAkB,aAAa,QAAQ,QAAQ,OAAO;AAC5D,mBAAa,QAAS,SAAS,WAAWF,KAAI,iBAAiB,SAAS,GAAGE,OAAM;AAAA,IACnF;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,IAAI,SAA6E;AACxG,4BAAwB,UAAU,aAAa,wBAAwB,GAAG,IAAI;AAE9E,QAAI,CAAC,aAAa,SAAS;AACzB,YAAM,YAAY;AAAA,QAChB,CAAC,WAAW;AACV,gBAAM,EAAE,QAAQ,IAAI,IAAI,wBAAwB,QAAS;AACzD,gBAAM,cAAc,QAAQ;AAC5B,gBAAM,kBAAkB,aAAa,QAAQ,WAAW;AACxD,iBAAO,OAAO,MAAM,EAAE,KAAK,eAAe;AAAA,QAC5C;AAAA,QACA,UAAU,QAAmC;AAAA,MAC/C;AAEA,mBAAa,UAAU;AAEvB,gBACG,GAAG,qBAAqB,MAAM;AAC7B,sBAAc,UAAU,WAAW,CAAC;AAAA,MACtC,CAAC,EACA,GAAG,oBAAoB,MAAM;AAC5B,uBAAe,UAAU,MAAM,CAAC;AAAA,MAClC,CAAC,EACA,GAAG,kBAAkB,MAAM;AAC1B,yBAAiB,UAAU,QAAQ,CAAC;AAAA,MACtC,CAAC,EACA,GAAG,iBAAiB,MAAM;AACzB,cAAM,mBAAmB,qBAAqB,IAC1C,UAAU,OAAO,IACjB,yBAAyB,UAAU,OAAO,CAAC;AAE/C,kBAAU,gBAAyC;AACnD,uBAAe,UAAU,MAAM,CAAC;AAAA,MAClC,CAAC;AAAA,IACL;AAEA,UAAM,mBAAmB,OAAO,OAAO,MAAM;AAAA,MAC3C;AAAA,MACA,WAAW,MAAM,aAAa;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB,MAAM,IAAI,kBAAkB,MAAM,aAAa,SAAS,sBAAsB,CAAC;AAAA,MACtG,OAAO,CACL,UACG,WACA;AACH,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,uBAAa,SAAS,MAAM,KAAK;AAAA,QACnC,WAAW,OAAO,UAAU,UAAU;AACpC,uBAAa,SAAS,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;AAAA,QAChD,OAAO;AACL,uBAAa,SAAS,MAAM,KAAK;AAAA,QACnC;AAEA,eAAO;AAAA,MACT;AAAA,MACA,eAAe,MAAM,IAAI,kBAAkB,MAAO,iBAAiB,UAAU,IAAK;AAAA,MAClF,sBAAsB,CAAC,aACrB,IAAI,kBAAkB,MAAM,aAAa,SAAS,WAAW,QAAQ,CAAC;AAAA,MACxE,eAAe,MAAM,IAAI,kBAAkB,MAAM,aAAa,SAAS,cAAc,CAAC;AAAA,MACtF;AAAA,MACA,WAAW,CAACD,YAAkC,IAAI,kBAAkB,MAAM,KAAK,SAASA,OAAM,CAAC;AAAA,MAC/F,aAAa,CAAC,UACZ;AAAA,QAAI;AAAA,QAAkB,MACpB,KAAK,YAAY,YAAY,KAAiC,CAAwB;AAAA,MACxF;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,EACT;AAEA,OAAK,mBAAmB;AAExB,MAAI,wBAAwB,SAAS;AACnC,SAAK,iBAAiB,wBAAwB,OAAO;AAAA,EACvD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,QAAQ,MAAM;AACZ,yBAAiB,UAAU;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;;;ACxdA,SAAS,UAAAE,eAAc;AACvB,SAAqD,aAAAC,YAAW,YAAAC,iBAAgB;AAEjE,SAAR,YACL,cACA,KACA,gBAC0C;AAC1C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,MAAM;AACvC,UAAM,WAAWF,QAAO,QAAQ,GAAG;AAEnC,WAAO,aAAa,SAAY,WAAW;AAAA,EAC7C,CAAC;AAED,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,gBAAgB;AAC7B,QAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,UAAU,YAAY,UAAU,MAAM;AAC1E,YAAM,WAAW,EAAE,GAAG,MAAM;AAC5B,WAAK,QAAQ,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACtC,MAAAD,QAAO,SAAS,UAAU,GAAG;AAAA,IAC/B,OAAO;AACL,MAAAA,QAAO,SAAS,OAAO,GAAG;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,OAAO,GAAG,CAAC;AAEf,SAAO,CAAC,OAAO,QAAQ;AACzB;;;AHsFe,SAAR,WACF,MAC4D;AAC/D,QAAM,EAAE,aAAa,MAAM,qBAAqB,IAAIG,cAAa,sBAA6B,GAAG,IAAI;AAGrG,QAAM,kBAAkB,OAAO,SAAS,aAAaC,WAAU,KAAK,CAAC,IAAIA,WAAU,IAAI;AAEvF,QAAM,cAAcC,QAA2B,IAAI;AACnD,QAAM,iBAAiBA,QAA8B,CAAC,CAAC;AACvD,QAAM,uBAAuBA,QAAkC,IAAI;AAGnE,QAAM,eAAe,cACjB,MAAM,YAAmB,iBAAiB,GAAG,WAAW,SAAS,cAAc,IAC/E;AAEJ,QAAM,iBAAiB,cACnB,MAAM,YAAmC,CAAC,GAA4B,GAAG,WAAW,SAAS,IAC7F;AAEJ,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAoB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAMD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC,UAAS,KAAK;AAE1D,QAAM,sBAAsB,SAAS;AACrC,WAAS,cAAcC;AAAA,IACrB,CAAC,eAAsD,eAAyB;AAC9E,UAAI,OAAO,kBAAkB,aAAa;AACxC,0BAAkB,IAAI;AAAA,MACxB;AAEA,aAAO,oBAAoB,eAAsB,UAAiB;AAAA,IACpE;AAAA,IACA,CAAC,mBAAmB;AAAA,EACtB;AAEA,4BAA0B,MAAM;AAC9B,QAAI,CAAC,gBAAgB;AACnB;AAAA,IACF;AAEA,QAAI,SAAS,SAAS;AACpB,uBAAiB,SAAS,IAAI;AAAA,IAChC;AAEA,sBAAkB,KAAK;AAAA,EACzB,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,SAASA;AAAA,IACb,IAAIC,UAAiC;AACnC,YAAM,EAAE,QAAQ,KAAK,QAAQ,IAAIL,cAAa,qBAAqBK,OAAM,wBAAwB,OAAO;AAExG,mCAA6B,UAAU;AAEvC,YAAM,WAAyB;AAAA,QAC7B,GAAG;AAAA,QACH,eAAe,CAAC,UAAU;AACxB,sBAAY,UAAU;AAEtB,iBAAO,QAAQ,gBAAgB,KAAK;AAAA,QACtC;AAAA,QACA,UAAU,CAAC,UAAU;AACnB,4BAAkB;AAElB,iBAAO,QAAQ,WAAW,KAAK;AAAA,QACjC;AAAA,QACA,SAAS,CAAC,UAAU;AAClB,wBAAc,IAAI;AAElB,iBAAO,QAAQ,UAAU,KAAK;AAAA,QAChC;AAAA,QACA,YAAY,CAAC,UAAU;AACrB,sBAAY,SAAS,IAAI;AAEzB,iBAAO,QAAQ,aAAa,KAAK;AAAA,QACnC;AAAA,QACA,WAAW,OAAO,SAAS;AACzB,cAAI,UAAU,SAAS;AACrB,6BAAiB;AAAA,UACnB;AAEA,gBAAM,YAAY,QAAQ,YAAY,MAAM,QAAQ,UAAU,IAAI,IAAI;AAEtE,cAAI,UAAU,WAAW,CAAC,6BAA6B,SAAS;AAC9D,qBAAS,QAAQ,CAACC,UAAgB;AAChC,+BAAiBL,WAAUK,KAAI,CAAC;AAChC,qBAAOA;AAAA,YACT,CAAC;AAAA,UACH;AAEA,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,CAAC,WAAW;AACnB,cAAI,UAAU,SAAS;AACrB,wBAAY;AACZ,qBAAS,MAA+B;AAAA,UAC1C;AAEA,iBAAO,QAAQ,UAAU,MAAM;AAAA,QACjC;AAAA,QACA,UAAU,MAAM;AACd,iBAAO,QAAQ,WAAW;AAAA,QAC5B;AAAA,QACA,UAAU,CAAC,UAAU;AACnB,cAAI,UAAU,SAAS;AACrB,6BAAiB;AAAA,UACnB;AAEA,sBAAY,UAAU;AAEtB,iBAAO,QAAQ,WAAW,KAAK;AAAA,QACjC;AAAA,MACF;AAEA,eAAS,aAAa,SAAS,cAAc,qBAAqB,WAAW;AAC7E,2BAAqB,UAAU;AAE/B,YAAM,kBAAkB,aAAa,QAAQ,QAAQ,OAAO;AAE5D,UAAI,WAAW,UAAU;AACvB,QAAAC,QAAO,OAAO,KAAK,EAAE,GAAG,UAAU,MAAM,gBAAgB,CAAC;AAAA,MAC3D,OAAO;AACL,QAAAA,QAAO,MAAM,EAAE,KAAK,iBAAiB,QAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,CAAC,aAAa,UAAU,YAAY;AAAA,EACtC;AAEA,QAAM,SAASH,aAAY,MAAM;AAC/B,QAAI,YAAY,SAAS;AACvB,kBAAY,QAAQ,OAAO;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgBI;AAAA,IACpB,OAAO;AAAA,MACL,KAAK,CAAC,KAAa,UAAwB,CAAC,MAAM,OAAO,OAAO,KAAK,OAAO;AAAA,MAC5E,MAAM,CAAC,KAAa,UAAwB,CAAC,MAAM,OAAO,QAAQ,KAAK,OAAO;AAAA,MAC9E,KAAK,CAAC,KAAa,UAAwB,CAAC,MAAM,OAAO,OAAO,KAAK,OAAO;AAAA,MAC5E,OAAO,CAAC,KAAa,UAAwB,CAAC,MAAM,OAAO,SAAS,KAAK,OAAO;AAAA,MAChF,QAAQ,CAAC,KAAa,UAAwB,CAAC,MAAM,OAAO,UAAU,KAAK,OAAO;AAAA,IACpF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAGA,SAAO,OAAO,UAAU;AAAA,IACtB;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA,cAAc,IAAmC,SAAc;AAC7D,qBAAe,UAAU;AACzB,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,CAAS,aAAyC;AAC5D,2BAAqB,UAAU;AAC/B,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAGD,QAAM,OAAO;AAGb,QAAM,2BAA2B,SAAS;AAC1C,OAAK,mBAAmB,IAAIH,UAAgF;AAC1G,6BAAyB,GAAGA,KAAI;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,wBAAwB,UAAW,OAA+C;AAC3F;;;ADnRA,IAAM,mBAAmB,CAAC,aAAyB;AACjD,SAAO,MAAM,oBAAoB,aAAa,MAAM,gBAAgB,QAAQ,IAAI,WAAW,UAAU,CAAC;AACxG;AAWA,IAAM,OAAO,MAAM;AAEnB,IAAM,cAAcI,eAA4C,MAAS;AAEzE,IAAM,OAAO;AAAA,EACX,CACE;AAAA,IACE,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU,CAAC;AAAA,IACX,yBAAyB;AAAA,IACzB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,YAAY,CAAC,SAAS;AAAA,IACtB;AAAA,IACA,UAAU,CAAC;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,sBAAsB,CAAC;AAAA,IACvB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,qBAAqB,MAA2C;AACpE,YAAM,CAAC,MAAM,IAAI,IAAI,cAAc;AACnC,aAAO,UAAU,IAAI;AAAA,IACvB;AAEA,UAAM,OAAO,QAA6B,CAAC,CAAC,EACzC;AAAA,MACC,MAAM;AAAA,MACN,MAAM,cAAc,EAAE,CAAC;AAAA,IACzB,EACC,qBAAqB,iBAAiB;AAEzC,QAAI,eAAe;AACjB,WAAK,cAAc;AAAA,IACrB;AAEA,QAAI,iBAAiBC,QAAO,IAAI,oBAAoB,GAAG;AACrD,WAAK,cAAc;AAAA,IACrB;AAEA,SAAK,UAAU,kBAAkB;AAEjC,UAAM,cAAcC,QAAwB,MAAS;AAErD,UAAM,iBAAiBC,SAAQ,MAAM;AACnC,aAAO,gBAAgB,MAAM,IAAI,OAAO,SAAU,OAAO,YAAY;AAAA,IACvE,GAAG,CAAC,QAAQ,MAAM,CAAC;AAEnB,UAAM,oBAAoBA,SAAQ,MAAM;AACtC,UAAI,WAAW;AACb,eAAO;AAAA,MACT;AAEA,UAAI,WAAW,gBAAgB,MAAM,GAAG;AACtC,eAAO,8BAA8B,MAAM;AAAA,MAC7C;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,WAAW,SAAS,MAAM,CAAC;AAE/B,UAAM,CAAC,SAAS,UAAU,IAAIC,UAAS,KAAK;AAC5C,UAAM,cAAcF,QAAiB,IAAI,SAAS,CAAC;AAEnD,UAAM,cAAc,CAAC,cAAwC,IAAI,SAAS,YAAY,SAAS,SAAS;AAKxG,UAAM,UAAU,CAAC,cACf,iBAAiB,YAAY,SAAS,CAAC;AAEzC,UAAM,gBAAgB,CAAC,cAA6E;AAClG,aAAO;AAAA,QACL;AAAA,QACA,gBAAgB,MAAM,IAAI,OAAO,MAAM;AAAA,QACvC,QAAQ,SAAS;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,mBAAmB,CAAC,UAAiB;AACzC,UAAI,MAAM,SAAS,WAAY,MAAsB,SAAS,wBAAwB,GAAG;AAEvF,cAAM,eAAe;AAAA,MACvB;AAEA;AAAA,QAAiB,MACf,WAAW,MAAM,SAAS,UAAU,QAAQ,CAACG,SAAQ,QAAQ,GAAG,iBAAiB,YAAY,OAAO,CAAC,CAAC;AAAA,MACxG;AAAA,IACF;AAEA,UAAM,cAAc,IAAI,UAAoB;AAC1C,WAAK,YAAY,GAAG,KAAK;AAEzB,aAAO;AAAA,IACT;AAEA,IAAAC,WAAU,MAAM;AACd,kBAAY,UAAU,YAAY;AAElC,WAAK,YAAY,QAAQ,CAAC;AAE1B,YAAM,aAA+C,CAAC,SAAS,UAAU,OAAO;AAEhF,iBAAW,QAAQ,CAAC,MAAM,YAAY,QAAS,iBAAiB,GAAG,gBAAgB,CAAC;AAEpF,aAAO,MAAM;AACX,mBAAW,QAAQ,CAAC,MAAM,YAAY,SAAS,oBAAoB,GAAG,gBAAgB,CAAC;AAAA,MACzF;AAAA,IACF,GAAG,CAAC,CAAC;AAEL,IAAAA,WAAU,MAAM;AACd,WAAK,qBAAqB,iBAAiB;AAAA,IAC7C,GAAG,CAAC,iBAAiB,CAAC;AAEtB,IAAAA,WAAU,MAAM;AACd,UAAI,eAAe;AACjB,aAAK,cAAc;AAAA,MACrB,OAAO;AACL,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF,GAAG,CAAC,aAAa,CAAC;AAElB,UAAM,QAAQ,IAAI,WAAqB;AACrC,UAAI,YAAY,SAAS;AACvB,wBAAgB,YAAY,SAAS,YAAY,SAAS,MAAM;AAAA,MAClE;AAEA,WAAK,MAAM,GAAG,MAAM;AAAA,IACtB;AAEA,UAAM,sBAAsB,IAAI,WAAqB;AACnD,kBAAY,GAAG,MAAM;AACrB,YAAM,GAAG,MAAM;AAAA,IACjB;AAEA,UAAM,aAAa,CAAC,gBAAoC;AACtD,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,UAAI,gBAAgB,MAAM;AACxB,cAAM;AAAA,MACR,WAAW,YAAY,SAAS,GAAG;AACjC,cAAM,GAAG,WAAW;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,SAAS,CAAC,cAA8B;AAC5C,YAAM,CAAC,KAAK,IAAI,IAAI,cAAc,SAAS;AAC3C,YAAM,aAAc,WAA2D,aAAa,YAAY;AAExG,UAAI,eAAe,YAAY,mBAAmB,OAAO;AACvD,eAAO,KAAK,KAAK,QAAQ;AACzB;AAAA,MACF;AAEA,YAAM,gBAAmC;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,YAAY,aAAa,CAAC,cAAc,WAAW,WAAW,IAAI,IAAI;AAAA,QACtE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,IAAI,SAAS;AACtB,oBAAU,GAAG,IAAI;AACjB,2BAAiB;AAAA,YACf;AAAA,YACA;AAAA,UACF,CAAC;AACD,qBAAW,cAAc;AAEzB,cAAI,yBAAyB,MAAM;AACjC,qBAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,WAAW,MAAM;AACf,kBAAQ,GAAG,IAAI;AACf,qBAAW,YAAY;AAAA,QACzB;AAAA,QACA,GAAG;AAAA,MACL;AAGA,WAAK,UAAU,MAAM,UAAU,IAAI,CAAC;AACpC,WAAK,OAAO,gBAAgB,KAAK,aAAa;AAG9C,WAAK,UAAU,kBAAkB;AAAA,IACnC;AAEA,UAAM,WAAW,MAAM;AACrB,kBAAY,UAAU,YAAY;AAClC,iBAAW,KAAK;AAAA,IAClB;AAEA,UAAM,UAAkC;AAAA,MACtC,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,oBAAoB,KAAK;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,KAAK;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA,WAAW,MAAM,KAAK,UAAU;AAAA,MAChC,YAAY,KAAK;AAAA,MACjB,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd,UAAU,CAAC,OAAqDL,YAC9D,KAAK,SAAS,GAAGM,cAAa,0BAA0B,OAAON,SAAQ,OAAO,CAAC;AAAA,MACjF,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB;AAEA,wBAAoB,KAAK,MAAM,SAAS,CAAC,MAAM,SAAS,MAAM,CAAC;AAE/D,UAAM,WAAWO;AAAA,MACf;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,KAAK;AAAA,QACL,QAAQ,gBAAgB,MAAM,IAAI,OAAO,MAAM;AAAA,QAC/C,QAAQ;AAAA,QACR,UAAU,CAAC,UAAsC;AAC/C,gBAAM,eAAe;AACrB,iBAAQ,MAAM,YAA4B,SAAS;AAAA,QACrD;AAAA,QACA,OAAO,0BAA0B,KAAK;AAAA,MACxC;AAAA,MACA,OAAO,aAAa,aAAa,SAAS,OAAO,IAAI;AAAA,IACvD;AAEA,WAAOA,eAAc,YAAY,UAAU,EAAE,OAAO,QAAQ,GAAG,QAAQ;AAAA,EACzE;AACF;AAEA,KAAK,cAAc;AAEZ,SAAS,iBAAkG;AAChH,SAAOC,KAAI,WAAW;AACxB;AAEA,IAAO,eAAQ;;;AKtUf,SAAS,cAAc;AACvB,OAAOC,UAAqD,OAAAC,MAAK,aAAAC,YAAW,WAAAC,gBAAe;AAU3F,IAAM,OAAoB,SAAU,EAAE,UAAU,MAAM,GAAG;AACvD,QAAM,cAAcC,KAAI,mBAAW;AACnC,QAAM,WAAWC,SAAQ,MAAM,YAAa,eAAe,GAAG,CAAC,WAAW,CAAC;AAC3E,QAAM,WAAW,OAAO,WAAW;AAEnC,EAAAC,WAAU,MAAM;AACd,aAAS,UAAU;AACnB,aAAS,OAAO,YAAY,QAAQ,CAAC;AACrC,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,KAAK,CAAC;AAE9B,WAAS,WAAW,MAAyB;AAC3C,WACE,OAAO,KAAK,SAAS,YACrB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,QAAQ,KAAK,IAAI,IAAI;AAAA,EAE3B;AAEA,WAAS,eAAe,MAAiC;AACvD,UAAM,QAAQ,OAAO,KAAK,KAAK,KAAK,EAAE,OAAO,CAAC,OAAO,SAAS;AAC5D,UAAI,CAAC,YAAY,YAAY,yBAAyB,EAAE,SAAS,IAAI,GAAG;AACtE,eAAO;AAAA,MACT;AAEA,YAAM,QAAQ,OAAO,KAAK,MAAM,IAAI,CAAC;AAErC,UAAI,UAAU,IAAI;AAChB,eAAO,QAAQ,IAAI,IAAI;AAAA,MACzB;AAEA,aAAO,QAAQ,IAAI,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,IAC3C,GAAG,EAAE;AAEL,WAAO,IAAI,OAAO,KAAK,IAAI,CAAC,GAAG,KAAK;AAAA,EACtC;AAEA,WAAS,kBAAkB,MAAiC;AAC1D,UAAM,EAAE,UAAAC,UAAS,IAAI,KAAK;AAE1B,QAAI,OAAOA,cAAa,UAAU;AAChC,aAAOA;AAAA,IACT;AAEA,QAAI,MAAM,QAAQA,SAAQ,GAAG;AAC3B,aAAOA,UAAS,OAAO,CAAC,MAAM,UAAU,OAAO,UAAU,KAAK,GAAG,EAAE;AAAA,IACrE;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,UAAU,MAAiC;AAClD,QAAI,OAAO,eAAe,IAAI;AAE9B,QAAI,KAAK,MAAM,UAAU;AACvB,cAAQ,kBAAkB,IAAI;AAAA,IAChC;AAEA,QAAI,KAAK,MAAM,yBAAyB;AACtC,cAAQ,KAAK,MAAM,wBAAwB;AAAA,IAC7C;AAEA,QAAI,CAAC,WAAW,IAAI,GAAG;AACrB,cAAQ,KAAK,OAAO,KAAK,IAAI,CAAC;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,yBAAyB,MAAyB;AACzD,WAAOC,OAAM,aAAa,MAAM;AAAA,MAC9B,gBAAgB,KAAK,MAAM,UAAU,MAAM,SAAY,KAAK,MAAM,UAAU,IAAI;AAAA,IAClF,CAAC;AAAA,EACH;AAEA,WAAS,WAAW,MAAyB;AAC3C,WAAO,UAAU,yBAAyB,IAAI,CAAC;AAAA,EACjD;AAEA,WAAS,YAAY,OAAkB;AACrC,UAAM,WAAWA,OAAM,SAAS,QAAQ,KAAK,EAC1C,OAAO,CAAC,SAAS,IAAI,EACrB,IAAI,CAAC,SAAS,WAAW,IAAyB,CAAC;AAEtD,QAAI,SAAS,CAAC,SAAS,KAAK,CAAC,QAAQ,IAAI,WAAW,QAAQ,CAAC,GAAG;AAC9D,eAAS,KAAK,0BAA0B,KAAK,UAAU;AAAA,IACzD;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,UAAU;AACZ,aAAS,OAAO,YAAY,QAAQ,CAAC;AAAA,EACvC;AAEA,SAAO;AACT;AACA,IAAO,eAAQ;;;AC7Hf;AAAA,EACE;AAAA,EAMA;AAAA,OAEK;AACP,OAAOC;AAAA,EACL,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AAGP,IAAM,qBAAqB,CACzB,OACA,aACuB;AACvB,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAGA,MAAI,SAAS,OAAO,UAAU,YAAY,aAAa,OAAO;AAC5D,WAAO,MAAM;AAAA,EACf;AAGA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,SAAS,cAAc,KAAK;AAAA,EACrC;AAEA,SAAO;AACT;AAGA,IAAM,aAAa,CACjB,aACA,WACA,WAA4B,SACR;AACpB,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,gBAAgB,aAAa,YAAY,SAAS,IAAI;AACtE;AAyBA,IAAM,iBAAiBC;AAAA,EACrB,CACE;AAAA,IACE;AAAA,IACA,SAAS;AAAA,IACT,KAAK;AAAA,IACL,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,IACV,WAAW;AAAA,IACX,eAAe;AAAA,IACf,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,CAAC,qBAAqB,sBAAsB,IAAIC,UAA6B,IAAI;AACvF,UAAM,kBAAkBC,aAAY,CAAC,SAA6B,uBAAuB,IAAI,GAAG,CAAC,CAAC;AAElG,UAAM,CAAC,mBAAmB,oBAAoB,IAAID,UAA6B,IAAI;AACnF,UAAM,gBAAgBC,aAAY,CAAC,SAA6B,qBAAqB,IAAI,GAAG,CAAC,CAAC;AAE9F,UAAM,CAAC,qBAAqB,sBAAsB,IAAID,UAA6B,IAAI;AACvF,UAAM,kBAAkBC,aAAY,CAAC,SAA6B,uBAAuB,IAAI,GAAG,CAAC,CAAC;AAElG,UAAM,aAAa,QAAQ,EAAE,cAAc,IAAI;AAE/C,UAAM,CAAC,iBAAiB,kBAAkB,IAAID,UAAS,KAAK;AAC5D,UAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,UAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,CAAC;AAClD,UAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAS,CAAC,CAAC,YAAY,YAAY;AACjF,UAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,CAAC,CAAC,YAAY,QAAQ;AAErE,UAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAA6B,IAAI;AACzF,UAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAA6B,IAAI;AACrF,UAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAA6B,IAAI;AAGzF,IAAAE,WAAU,MAAM;AACd,YAAM,UAAU,eAAe,mBAAmB,cAAc,mBAAmB,IAAI;AACvF,8BAAwB,OAAO;AAAA,IACjC,GAAG,CAAC,cAAc,mBAAmB,CAAC;AAEtC,IAAAA,WAAU,MAAM;AACd,YAAM,UAAU,aAAa,mBAAmB,YAAY,iBAAiB,IAAI;AACjF,4BAAsB,OAAO;AAAA,IAC/B,GAAG,CAAC,YAAY,iBAAiB,CAAC;AAElC,IAAAA,WAAU,MAAM;AACd,YAAM,UAAU,eAAe,mBAAmB,cAAc,mBAAmB,IAAI;AACvF,8BAAwB,OAAO;AAAA,IACjC,GAAG,CAAC,cAAc,mBAAmB,CAAC;AAEtC,UAAM,mBAAmBC,SAAQ,MAAM,oBAAoB,oBAAoB,GAAG,CAAC,oBAAoB,CAAC;AAExG,UAAM,mBAAmBC,QAAO;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,qBAAiB,UAAU;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,CAAC,gBAAgB,iBAAiB,IAAIJ,UAAwC,IAAI;AAExF,UAAM,cAAcG,SAAQ,MAAM,gBAAgB,aAAa,CAAC,cAAc,CAAC;AAC/E,UAAM,iBAAiBA,SAAQ,MAAM,gBAAgB,gBAAgB,CAAC,cAAc,CAAC;AAErF,UAAM,iBAAiBF,aAAY,MAAM;AACvC,UAAI,kBAAkB;AACpB,yBAAiB,SAAS;AAAA,UACxB,KAAK,iBAAiB;AAAA,UACtB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH,OAAO;AACL,eAAO,SAAS;AAAA,UACd,KAAK,SAAS,KAAK;AAAA,UACnB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,GAAG,CAAC,gBAAgB,CAAC;AAGrB,IAAAC,WAAU,MAAM;AACd,UAAI,CAAC,sBAAsB;AACzB;AAAA,MACF;AAEA,eAAS,2BAA2B;AAClC,wBAAgB,uBAAuB,YAAY,gBAAgB,CAAC;AACpE,2BAAmB,uBAAuB,YAAY,YAAY,CAAC;AACnE,uBAAe,uBAAuB,YAAY,QAAQ,CAAC;AAAA,MAC7D;AAEA,YAAM,yBAAyB,kBAAkB;AAAA;AAAA,QAE/C,aAAa,MAAM;AAAA,QACnB,eAAe,MAAM,iBAAiB,QAAQ;AAAA,QAC9C,iBAAiB,MAAM,CAAC,iBAAiB,QAAQ;AAAA,QACjD,qBAAqB,MAAM,CAAC,iBAAiB,QAAQ;AAAA,QACrD,mBAAmB,MAAM,iBAAiB,QAAQ;AAAA,QAClD,kBAAkB,MAAM,iBAAiB,QAAQ;AAAA;AAAA,QAGjD,kBAAkB,MAAM,iBAAiB,QAAQ;AAAA,QACjD,iBAAiB,MAAM;AAAA,QACvB,eAAe,MAAM;AAAA,QACrB,iBAAiB,MAAM;AAAA,QACvB,qBAAqB,MAAM;AAAA;AAAA,QAG3B,yBAAyB,MAAM,mBAAmB,IAAI;AAAA,QACtD,qBAAqB,MAAM,eAAe,IAAI;AAAA,QAC9C,2BAA2B,MAAM;AAC/B,6BAAmB,KAAK;AACxB,mCAAyB;AAAA,QAC3B;AAAA,QACA,uBAAuB,MAAM;AAC3B,yBAAe,KAAK;AACpB,mCAAyB;AAAA,QAC3B;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AAED,wBAAkB,sBAAsB;AACxC,YAAM,EAAE,aAAAG,cAAa,gBAAAC,gBAAe,IAAI;AACxC,+BAAyB;AAEzB,MAAAA,gBAAe,eAAe;AAC9B,MAAAA,gBAAe,4BAA4BD,aAAY,kBAAkB,CAAC;AAE1E,UAAI,UAAU;AACZ,QAAAC,gBAAe,eAAe;AAAA,MAChC;AAEA,aAAO,MAAM;AACX,+BAAuB,MAAM;AAC7B,0BAAkB,IAAI;AAAA,MACxB;AAAA,IACF,GAAG,CAAC,MAAM,sBAAsB,sBAAsB,oBAAoB,gBAAgB,CAAC;AAE3F,UAAM,aAAaH;AAAA,MACjB,MAAM,UAAW,cAAc,KAAK,gBAAgB;AAAA,MACpD,CAAC,QAAQ,aAAa,YAAY;AAAA,IACpC;AACA,UAAM,WAAWA,SAAQ,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;AAExD,IAAAD,WAAU,MAAM;AACd,iBAAW,gBAAgB,eAAe,IAAI,gBAAgB,gBAAgB;AAAA,IAChF,GAAG,CAAC,UAAU,UAAU,cAAc,sBAAsB,kBAAkB,CAAC;AAE/E,IAAAA,WAAU,MAAM;AAEd,YAAM,mBAAmB,eAAe,SAAY,aAAa;AAEjE,UAAI,kBAAkB;AACpB,uBAAe;AAAA,MACjB;AAAA,IACF,GAAG,CAAC,gBAAgB,CAAC;AAErB,IAAAK;AAAA,MACE;AAAA,MACA,OAAO;AAAA,QACL,WAAW,aAAa,cAAc,MAAM;AAAA,QAAC;AAAA,QAC7C,eAAe,aAAa,kBAAkB,MAAM;AAAA,QAAC;AAAA,QACrD,aAAa,aAAa,gBAAgB,MAAM;AAAA,QAChD,SAAS,aAAa,YAAY,MAAM;AAAA,MAC1C;AAAA,MACA,CAAC,WAAW;AAAA,IACd;AAEA,UAAM,iBAAiB,YAAY,CAAC;AACpC,UAAM,iBAAiB,YAAY,CAAC;AAEpC,UAAM,gBAGF;AAAA,MACF;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAEA,UAAM,kBAAiD;AAAA,MACrD,SAAS;AAAA,MACT,OAAO,aAAa,kBAAkB,MAAM;AAAA,MAAC;AAAA,MAC7C,UAAU;AAAA,MACV,YAAY,CAAC;AAAA,MACb,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAEA,UAAM,cAA6C;AAAA,MACjD,SAAS;AAAA,MACT,OAAO,aAAa,cAAc,MAAM;AAAA,MAAC;AAAA,MACzC,UAAU;AAAA,MACV,YAAY,CAAC;AAAA,MACb,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAEA,UAAM,cAAuC;AAAA,MAC3C,SAAS,mBAAmB;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AAEA,UAAM,iBAAiB,CAAC;AAGxB,QAAI,CAAC,cAAc;AACjB,qBAAe;AAAA,QACbC;AAAA,UACE;AAAA,UACA,EAAE,KAAK,gBAAgB;AAAA;AAAA,UAEvB,WAAW,UAAU,iBAAiB,kBAAkB,WAAW,SAAS,eAAe,IAAI,IAAI;AAAA,QACrG;AAAA,MACF;AAAA,IACF;AAEA,mBAAe;AAAA,MACbA;AAAA,QACE;AAAA,QACA,EAAE,GAAG,OAAO,KAAK,gBAAgB;AAAA,QACjC,OAAO,aAAa,aAAa,SAAS,WAAW,IAAI;AAAA,MAC3D;AAAA,IACF;AAGA,QAAI,CAAC,YAAY;AACf,qBAAe;AAAA,QACbA;AAAA,UACE;AAAA,UACA,EAAE,KAAK,cAAc;AAAA;AAAA,UAErB,WAAW,MAAM,aAAa,cAAc,WAAW,SAAS,WAAW,IAAI,IAAI;AAAA,QACrF;AAAA,MACF;AAAA,IACF;AAEA,WAAOA,eAAcC,OAAM,UAAU,CAAC,GAAG,GAAI,UAAU,CAAC,GAAG,cAAc,EAAE,QAAQ,IAAI,cAAe;AAAA,EACxG;AACF;AAEA,eAAe,cAAc;AAE7B,IAAO,yBAAQ;;;AC1Vf;AAAA,EAEE,mBAAAC;AAAA,EAGA,4BAAAC;AAAA,EAGA,iCAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,iBAAAC,gBAA4B,cAAAC,aAAY,aAAAC,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAG7F,IAAMC,QAAO,MAAM;AAWnB,IAAM,OAAOC;AAAA,EACX,CACE;AAAA,IACE;AAAA,IACA,KAAK;AAAA,IACL,OAAO,CAAC;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,UAAU,CAAC;AAAA,IACX,yBAAyB;AAAA,IACzB,QAAQ;AAAA,IACR,UAAUD;AAAA,IACV,gBAAgBA;AAAA,IAChB,WAAWA;AAAA,IACX,UAAUA;AAAA,IACV,aAAaA;AAAA,IACb,WAAWA;AAAA,IACX,WAAWA;AAAA,IACX,YAAYA;AAAA,IACZ,UAAUA;AAAA,IACV,gBAAgBA;AAAA,IAChB,eAAeA;AAAA,IACf,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY,CAAC;AAAA,IACb,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,CAAC,eAAe,gBAAgB,IAAIE,UAAS,CAAC;AACpD,UAAM,eAAeC,QAAe,MAAS;AAE7C,UAAM,UAAUC,SAAQ,MAAM;AAC5B,aAAOC,iBAAgB,IAAI,IAAI,KAAK,SAAU,OAAO,YAAY;AAAA,IACnE,GAAG,CAAC,MAAM,MAAM,CAAC;AAEjB,UAAM,oBAAoBD,SAAQ,MAAM;AACtC,UAAI,WAAW;AACb,eAAO;AAAA,MACT;AAEA,UAAI,WAAWC,iBAAgB,IAAI,GAAG;AACpC,eAAOC,+BAA8B,IAAI;AAAA,MAC3C;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,WAAW,SAAS,IAAI,CAAC;AAE7B,UAAM,MAAMF,SAAQ,MAAM;AACxB,UAAI,OAAO,OAAO,YAAY,GAAG,YAAY,MAAM,KAAK;AAEtD,eAAO;AAAA,MACT;AAEA,aAAO,YAAY,QAAQ,WAAW,GAAG,YAAY;AAAA,IACvD,GAAG,CAAC,IAAI,OAAO,CAAC;AAEhB,UAAM,iBAAiBA;AAAA,MACrB,MAAMG,0BAAyB,SAASF,iBAAgB,IAAI,IAAI,KAAK,MAAM,MAAM,MAAM,sBAAsB;AAAA,MAC7G,CAAC,MAAM,SAAS,MAAM,sBAAsB;AAAA,IAC9C;AAEA,UAAM,MAAMD,SAAQ,MAAM,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC;AAC7D,UAAM,QAAQA,SAAQ,MAAM,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC;AAE/D,UAAM,aAAaA;AAAA,MACjB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR;AAAA,QACA,eAAe,iBAAiB,YAAY;AAAA,QAC5C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAcA;AAAA,MAClB,OAAO;AAAA,QACL,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,OAAqB;AAC3B,2BAAiB,CAAC,UAAU,QAAQ,CAAC;AACrC,kBAAQ,KAAK;AAAA,QACf;AAAA,QACA;AAAA,QACA,SAAS,OAAoB;AAC3B,2BAAiB,CAAC,UAAU,QAAQ,CAAC;AACrC,mBAAS,KAAK;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,gBAAsCA;AAAA,MAC1C,MAAM;AACJ,YAAI,aAAa,MAAM;AACrB,iBAAO,CAAC,OAAO;AAAA,QACjB;AAEA,YAAI,aAAa,OAAO;AACtB,iBAAO,CAAC;AAAA,QACV;AAEA,YAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,iBAAO;AAAA,QACT;AAEA,eAAO,CAAC,QAAQ;AAAA,MAClB;AAAA,MACA,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAAA,IAChD;AAEA,UAAM,gBAAgBA,SAAQ,MAAM;AAClC,UAAI,aAAa,GAAG;AAElB,eAAO;AAAA,MACT;AAEA,UAAI,cAAc,WAAW,KAAK,cAAc,CAAC,MAAM,SAAS;AAG9D,eAAO;AAAA,MACT;AAGA,aAAO,OAAO,IAAI,mBAAmB;AAAA,IACvC,GAAG,CAAC,UAAU,aAAa,CAAC;AAE5B,UAAM,aAAaA,SAAQ,MAAM;AAC/B,aAAO,MAAM;AACX,QAAAI,QAAO;AAAA,UACL;AAAA,UACA;AAAA,YACE,GAAG;AAAA,YACH;AAAA,YACA;AAAA,UACF;AAAA,UACA,EAAE,UAAU,eAAe,UAAU;AAAA,QACvC;AAAA,MACF;AAAA,IACF,GAAG,CAAC,KAAK,YAAY,eAAe,cAAc,eAAe,SAAS,CAAC;AAE3E,IAAAC,WAAU,MAAM;AACd,aAAO,MAAM;AACX,qBAAa,aAAa,OAAO;AAAA,MACnC;AAAA,IACF,GAAG,CAAC,CAAC;AAEL,IAAAA,WAAU,MAAM;AACd,UAAI,cAAc,SAAS,OAAO,GAAG;AACnC,mBAAW,MAAM,WAAW,CAAC;AAAA,MAC/B;AAAA,IACF,GAAG,aAAa;AAEhB,UAAM,gBAAgB;AAAA,MACpB,SAAS,CAAC,UAA4B;AACpC,gBAAQ,KAAK;AAEb,YAAI,gBAAgB,KAAK,GAAG;AAC1B,gBAAM,eAAe;AAErB,UAAAD,QAAO,MAAM,KAAK,WAAW;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,sBAAsB;AAAA,MAC1B,cAAc,MAAM;AAClB,qBAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,qBAAW;AAAA,QACb,GAAG,OAAO,IAAI,qBAAqB,CAAC;AAAA,MACtC;AAAA,MACA,cAAc,MAAM;AAClB,qBAAa,aAAa,OAAO;AAAA,MACnC;AAAA,MACA,SAAS,cAAc;AAAA,IACzB;AAEA,UAAM,sBAAsB;AAAA,MAC1B,aAAa,CAAC,UAA4B;AACxC,YAAI,gBAAgB,KAAK,GAAG;AAC1B,gBAAM,eAAe;AACrB,qBAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,WAAW,CAAC,UAA+B;AACzC,YAAI,eAAe,KAAK,GAAG;AACzB,gBAAM,eAAe;AACrB,qBAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,WAAW,CAAC,UAA4B;AACtC,YAAI,gBAAgB,KAAK,GAAG;AAC1B,gBAAM,eAAe;AACrB,UAAAA,QAAO,MAAM,KAAK,WAAW;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,SAAS,CAAC,UAA+B;AACvC,YAAI,eAAe,KAAK,GAAG;AACzB,gBAAM,eAAe;AACrB,UAAAA,QAAO,MAAM,KAAK,WAAW;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,SAAS,CAAC,UAA4B;AACpC,gBAAQ,KAAK;AAEb,YAAI,gBAAgB,KAAK,GAAG;AAE1B,gBAAM,eAAe;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAUJ,SAAQ,MAAM;AAC5B,UAAI,QAAQ,UAAU;AACpB,eAAO,EAAE,MAAM,SAAS;AAAA,MAC1B;AAEA,UAAI,QAAQ,OAAO,OAAO,QAAQ,UAAU;AAC1C,eAAO,EAAE,MAAM,IAAI;AAAA,MACrB;AAEA,aAAO,CAAC;AAAA,IACV,GAAG,CAAC,KAAK,GAAG,CAAC;AAEb,WAAOM;AAAA,MACL;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,GAAG;AAAA,QACH;AAAA,QACA,IAAI,MAAM;AACR,cAAI,cAAc,SAAS,OAAO,GAAG;AACnC,mBAAO;AAAA,UACT;AAEA,cAAI,cAAc,SAAS,OAAO,GAAG;AACnC,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,QACT,GAAG;AAAA,QACH,gBAAgB,gBAAgB,IAAI,KAAK;AAAA,MAC3C;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AACA,KAAK,cAAc;AAEnB,IAAO,eAAQ;;;ACpUf;AAAA,EASE;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA,4BAAAC;AAAA,EAEA;AAAA,EAKA,gBAAAC;AAAA,OAIK;AACP,SAAS,aAAAC,kBAAiB;AAC1B,SAA0B,4BAAAC,iCAA6D;AACvF,SAAS,eAAAC,cAAa,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAwFxC,SAAR,WACF,MACqE;AACxE,QAAM,EAAE,aAAa,MAAM,qBAAqB,IAAIC,cAAa,sBAA6B,GAAG,IAAI;AAGrG,QAAM,kBAAkB,OAAO,SAAS,aAAaC,WAAU,KAAK,CAAC,IAAIA,WAAU,IAAI;AAEvF,QAAM,kBAAkBC,QAA+B,IAAI;AAC3D,QAAM,iBAAiBA,QAA8B,CAAC,CAAC;AACvD,QAAM,uBAAuBA,QAAwD,IAAI;AACzF,QAAM,CAAC,UAAU,WAAW,IAAIC,UAA2B,IAAI;AAG/D,QAAM,eAAe,cACjB,MAAM,YAAmB,iBAAiB,GAAG,WAAW,SAAS,cAAc,IAC/E;AAEJ,QAAM,iBAAiB,cACnB,MAAM,YAAmC,CAAC,GAA4B,GAAG,WAAW,SAAS,IAC7F;AAEJ,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAoB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,SAASC;AAAA,IACb,OAAO,QAAgB,KAAa,YAAwE;AAC1G,YAAM,WAAW,QAAQ,WAAW;AAEpC,UAAI,aAAa,OAAO;AACtB,eAAO,QAAQ,OAAO,IAAI,MAAM,+BAA+B,CAAC;AAAA,MAClE;AAEA,mCAA6B,UAAU;AAEvC,UAAI,UAAU,SAAS;AACrB,0BAAkB;AAAA,MACpB;AAEA,sBAAgB,UAAU,IAAI,gBAAgB;AAE9C,YAAM,cAA2B;AAAA,QAC/B,QAAQ,MAAM,gBAAgB,SAAS,MAAM;AAAA,MAC/C;AAEA,cAAQ,gBAAgB,WAAW;AAEnC,cAAQ,aAAa,QAAQ,cAAc,qBAAqB,WAAW;AAC3E,2BAAqB,UAAU;AAE/B,UAAI;AAEJ,UAAI,QAAQ,YAAY;AACtB,mBAAWH,WAAU,QAAQ,OAAO;AACpC,cAAM,iBAAiB,QAAQ,WAAWA,WAAU,QAAQ,CAAC;AAE7D,iBAAS,QAAQ,CAAC,aAAoB,EAAE,GAAG,SAAS,GAAG,eAAe,EAAE;AAAA,MAC1E;AAEA,UAAI,UAAU,SAAS;AACrB,sBAAc,IAAI;AAAA,MACpB;AAEA,cAAQ,UAAU;AAElB,YAAM,kBAAkB,aAAa,QAAQ,QAAQ,OAAO;AAC5D,YAAM,cAAc,SAAS,eAAsD;AAEnF,UAAI,aAAa;AACjB,UAAI;AACJ,UAAI;AAEJ,UAAI,WAAW,OAAO;AACpB,cAAM,CAAC,aAAa,IAAII;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,qBAAa;AAAA,MACf,OAAO;AACL,YAAI,aAAa;AACf,wBAAc,iBAAiB,eAAsD;AAAA,QACvF,OAAO;AACL,wBAAc,KAAK,UAAU,eAAe;AAC5C,wBAAc;AAAA,QAChB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,eAAe,MAAM,KAAK,UAAU,EAAE,QAAQ;AAAA,UAClD;AAAA,UACA,KAAK;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,GAAI,cAAc,EAAE,gBAAgB,YAAY,IAAI,CAAC;AAAA,YACrD,GAAG,QAAQ;AAAA,UACb;AAAA,UACA,QAAQ,gBAAgB,QAAQ;AAAA,UAChC,kBAAkB,CAAC,UAA6B;AAC9C,gBAAI,UAAU,SAAS;AACrB,0BAAY,KAAK;AAAA,YACnB;AAEA,oBAAQ,aAAa,KAAK;AAAA,UAC5B;AAAA,QACF,CAAC;AAED,cAAM,eAAgB,aAAa,OAAO,KAAK,MAAM,aAAa,IAAI,IAAI;AAE1E,YAAI,aAAa,UAAU,OAAO,aAAa,SAAS,KAAK;AAC3D,cAAI,UAAU,SAAS;AACrB,6BAAiB;AACjB,wBAAY,YAAY;AAAA,UAC1B;AAEA,kBAAQ,YAAY,YAAY;AAEhC,cAAI,UAAU,WAAW,CAAC,6BAA6B,SAAS;AAC9D,qBAAS,QAAQ,CAACC,UAAgB;AAChC,+BAAiBL,WAAUK,KAAI,CAAC;AAChC,qBAAOA;AAAA,YACT,CAAC;AAAA,UACH;AAEA,iBAAO;AAAA,QACT;AAEA,cAAM,IAAI,kBAAkB,8BAA8B,aAAa,MAAM,IAAI,YAAY;AAAA,MAC/F,SAAS,OAAgB;AACvB,YAAI,YAAY,UAAU,SAAS;AACjC,mBAAS,QAAQ,QAAQ;AAAA,QAC3B;AAEA,YAAI,iBAAiB,mBAAmB;AACtC,cAAI,MAAM,SAAS,WAAW,KAAK;AACjC,kBAAM,eAAe,KAAK,MAAM,MAAM,SAAS,IAAI;AACnD,kBAAM,mBAAmB,aAAa,UAAU,CAAC;AACjD,kBAAM,kBACJ,cAAc,QAAQ,IAAI,mBAAmBC,0BAAyB,gBAAgB;AAGxF,gBAAI,UAAU,SAAS;AACrB,0BAAY;AACZ,uBAAS,eAAe;AAAA,YAC1B;AAEA,oBAAQ,UAAU,eAAyB;AAAA,UAC7C;AAEA,gBAAM;AAAA,QACR;AAEA,YAAI,iBAAiB,sBAAuB,iBAAiB,SAAS,MAAM,SAAS,cAAe;AAClG,kBAAQ,WAAW;AACnB,gBAAM,IAAI,mBAAmB,yBAAyB,GAAG;AAAA,QAC3D;AAEA,cAAM;AAAA,MACR,UAAE;AACA,YAAI,UAAU,SAAS;AACrB,2BAAiB;AAAA,QACnB;AAEA,wBAAgB,UAAU;AAC1B,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,aAAa,QAAQ;AAAA,EACxB;AAEA,QAAM,SAASH,aAAY,MAAM;AAC/B,QAAI,gBAAgB,SAAS;AAC3B,sBAAgB,QAAQ,MAAM;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAiBA;AAAA,IACrB,IAAII,UAAuE;AACzE,YAAM,SAASR,cAAa,qBAAqBQ,OAAa,wBAAwB,OAAO;AAE7F,aAAO,OAAO,OAAO,QAAQ,OAAO,KAAK,OAAO,OAAiD;AAAA,IACnG;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,gBAAgBC;AAAA,IACpB,OAAO;AAAA,MACL,KAAK,OAAO,KAAa,UAAkD,CAAC,MAC1E,OAAO,OAAO,KAAK,OAAO;AAAA,MAC5B,MAAM,OAAO,KAAa,UAAkD,CAAC,MAC3E,OAAO,QAAQ,KAAK,OAAO;AAAA,MAC7B,KAAK,OAAO,KAAa,UAAkD,CAAC,MAC1E,OAAO,OAAO,KAAK,OAAO;AAAA,MAC5B,OAAO,OAAO,KAAa,UAAkD,CAAC,MAC5E,OAAO,SAAS,KAAK,OAAO;AAAA,MAC9B,QAAQ,OAAO,KAAa,UAAkD,CAAC,MAC7E,OAAO,UAAU,KAAK,OAAO;AAAA,IACjC;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAGA,SAAO,OAAO,UAAU;AAAA,IACtB;AAAA,IACA,QAAQ;AAAA,IACR,GAAG;AAAA,IACH;AAAA,IACA,cAAc,IAAmC,SAAc;AAC7D,qBAAe,UAAU;AACzB,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,CAAC,aAAqD;AAChE,2BAAqB,UAAU;AAC/B,aAAO;AAAA,IACT;AAAA,IAEA,eAAe,MAAM;AACnB,oBAAc,OAAO;AACrB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAGD,QAAM,OAAO;AAGb,QAAM,2BAA2B,SAAS;AAC1C,OAAK,mBAAmB,IAAID,UAAuF;AACjH,6BAAyB,GAAGA,KAAI;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,wBAAwB,UAAW,OAAsD;AAClG;;;ACnXA,SAAqC,UAAAE,eAAc;AACnD,SAAS,aAAAC,aAAW,UAAAC,eAAc;AAEnB,SAAR,QACL,UACA,iBAAgC,CAAC,GACjC,UAAuB;AAAA,EACrB,WAAW;AAAA,EACX,WAAW;AACb,GACA;AACA,QAAM,UAAUA;AAAA,IACdF,QAAO,KAAK,UAAU,gBAAgB;AAAA,MACpC,GAAG;AAAA,MACH,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AAEA,EAAAC,YAAU,MAAM;AACd,QAAI,QAAQ,aAAa,MAAM;AAC7B,cAAQ,QAAQ,MAAM;AAAA,IACxB;AAEA,WAAO,MAAM,QAAQ,QAAQ,KAAK;AAAA,EACpC,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL,MAAM,QAAQ,QAAQ;AAAA,IACtB,OAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;;;AC9BA,SAAS,UAAAE,eAA4B;AACrC,SAAS,aAAAC,aAAW,YAAAC,kBAAgB;AAErB,SAAR,YAA6B,UAAwB,CAAC,GAK3D;AACA,QAAM,SAAS,OAAO,WAAW,cAAc,OAAOF,QAAO,UAAU,OAAO,SAAS,UAAU,OAAO;AACxG,QAAM,WAAW,OAAO,WAAW,cAAc,OAAOA,QAAO,eAAe,OAAO,SAAS,UAAU,OAAO;AAE/G,QAAM,CAAC,eAAe,gBAAgB,IAAIE,WAAwB,QAAQ,kBAAkB,IAAI;AAChG,QAAM,CAAC,eAAe,gBAAgB,IAAIA,WAAS,aAAa,IAAI;AACpE,QAAM,CAAC,cAAc,eAAe,IAAIA,WAAS,WAAW,IAAI;AAEhE,EAAAD,YAAU,MAAM;AACd,UAAM,wBAAwBD,QAAO,GAAG,eAAe,CAAC,MAAM;AAC5D,UAAI,EAAE,OAAO,MAAM,IAAI,aAAa,OAAO,SAAS,UAAU;AAC5D,yBAAiB,IAAI;AAAA,MACvB;AAAA,IACF,CAAC;AAED,UAAM,uBAAuBA,QAAO,GAAG,cAAc,CAAC,MAAM;AAC1D,UAAI,EAAE,OAAO,MAAM,IAAI,aAAa,OAAO,SAAS,UAAU;AAC5D,yBAAiB,KAAK;AACtB,wBAAgB,IAAI;AACpB,yBAAiB,EAAE,OAAO,SAAS;AAAA,MACrC;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,2BAAqB;AACrB,4BAAsB;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAMA,QAAO,MAAM,OAAO,SAAS,UAAU,OAAO;AAAA,EAC7D;AACF;;;AC3CA,SAAwB,UAAAG,eAAc;AACtC,SAAS,OAAAC,YAAW;AACpB,SAAS,iBAAAC,gBAA0B,eAAAC,cAAa,aAAAC,aAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,kBAAgB;AAiB5F,IAAM,cAAc,CAAC,EAAE,UAAU,MAAM,QAAQ,QAAQ,IAAI,QAAQ,SAAS,MAAwB;AAClG,WAAS,UAAU;AACnB,OAAK,MAAM;AACX,aAAW,YAAY;AAEvB,QAAM,YAAY,QAAQ,EAAE;AAC5B,QAAM,OAAOC,SAAQ,MAAO,OAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,IAAK,CAAC,GAAI,CAAC,IAAI,CAAC;AAEtF,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAS,MAAM,KAAK,SAAS,KAAK,KAAK,MAAM,CAAC,QAAQC,KAAI,WAAW,GAAG,MAAM,MAAS,CAAC;AACpH,QAAM,CAAC,YAAY,aAAa,IAAID,WAAS,KAAK;AAClD,QAAM,WAAWE,QAAgB,KAAK;AACtC,QAAM,MAAMA,QAAuB,IAAI;AACvC,QAAM,WAAWA,QAAoC,IAAI;AACzD,QAAM,qBAAqBA,QAAqC,OAAO,CAAC,EAAE;AAE1E,EAAAC,YAAU,MAAM;AACd,QAAI,KAAK,SAAS,GAAG;AACnB,gBAAU,KAAK,MAAM,CAAC,QAAQF,KAAI,WAAW,GAAG,MAAM,MAAS,CAAC;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,QAAM,kBAAkBG,aAA0C,MAAM;AACtE,UAAM,eAAuC,EAAE,gBAAgB,MAAM,GAAG,OAAO;AAE/E,QAAI,MAAM;AACR,mBAAa,OAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAAA,IACzD;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,IAAI,CAAC;AAEjB,qBAAmB,UAAU;AAE7B,QAAM,mBAAmB,MAAM;AAC7B,aAAS,SAAS,WAAW;AAE7B,aAAS,UAAU,IAAI;AAAA,MACrB,CAAC,YAAY;AACX,YAAI,CAAC,QAAQ,CAAC,EAAE,gBAAgB;AAC9B;AAAA,QACF;AAEA,YAAI,SAAS,SAAS;AACpB;AAAA,QACF;AAEA,YAAI,CAAC,UAAU,QAAQ;AACrB;AAAA,QACF;AAEA,iBAAS,UAAU;AACnB,sBAAc,IAAI;AAElB,cAAM,eAAe,mBAAmB,QAAQ;AAEhD,QAAAC,QAAO,OAAO;AAAA,UACZ,GAAG;AAAA,UACH,SAAS,CAAC,MAAM;AACd,qBAAS,UAAU;AACnB,0BAAc,IAAI;AAClB,yBAAa,UAAU,CAAC;AAAA,UAC1B;AAAA,UACA,UAAU,CAAC,MAAM;AACf,sBAAU,IAAI;AACd,qBAAS,UAAU;AACnB,0BAAc,KAAK;AACnB,yBAAa,WAAW,CAAC;AAEzB,gBAAI,CAAC,QAAQ;AACX,uBAAS,SAAS,WAAW;AAAA,YAC/B;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,YAAY,GAAG,UAAU,CAAC;AAAA,MAC5B;AAAA,IACF;AAEA,aAAS,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EACvC;AAEA,EAAAF,YAAU,MAAM;AACd,QAAI,CAAC,IAAI,SAAS;AAChB;AAAA,IACF;AAEA,QAAI,UAAU,CAAC,QAAQ;AACrB;AAAA,IACF;AAEA,qBAAiB;AAEjB,WAAO,MAAM;AACX,eAAS,SAAS,WAAW;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,MAAM,CAAC;AAE3B,QAAM,kBAAkB,MAAO,OAAO,aAAa,aAAa,SAAS,EAAE,UAAU,WAAW,CAAC,IAAI;AACrG,QAAM,kBAAkB,MAAO,OAAO,aAAa,aAAa,SAAS,IAAI;AAE7E,MAAI,UAAU,CAAC,QAAQ;AACrB,WAAOG;AAAA,MACL;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MACA,SAAS,gBAAgB,IAAI,gBAAgB;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO,SAAS,gBAAgB,IAAI;AACtC;AAEA,YAAY,cAAc;AAE1B,IAAO,sBAAQ;;;AnB1GR,IAAM,SAAS,WAAW,OAA8B;",
|
|
6
|
+
"names": ["http", "router", "createContext", "current", "layouts", "router", "createElement", "progress", "http", "createElement", "page", "head", "reactApp", "router", "useEffect", "useMemo", "useState", "useState", "useMemo", "useEffect", "router", "config", "UseFormUtils", "isEqual", "createContext", "createElement", "use", "useEffect", "useMemo", "useRef", "useState", "router", "UseFormUtils", "cloneDeep", "useCallback", "useMemo", "useRef", "useState", "useEffect", "get", "useEffect", "useRef", "useState", "useRef", "useState", "progress", "data", "useEffect", "defaults", "get", "errors", "config", "router", "useEffect", "useState", "UseFormUtils", "cloneDeep", "useRef", "useState", "useCallback", "args", "data", "router", "useMemo", "createContext", "config", "useRef", "useMemo", "useState", "isEqual", "useEffect", "UseFormUtils", "createElement", "use", "React", "use", "useEffect", "useMemo", "use", "useMemo", "useEffect", "children", "React", "React", "createElement", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "forwardRef", "useState", "useCallback", "useEffect", "useMemo", "useRef", "dataManager", "elementManager", "useImperativeHandle", "createElement", "React", "isUrlMethodPair", "mergeDataIntoQueryString", "resolveUrlMethodPairComponent", "router", "createElement", "forwardRef", "useEffect", "useMemo", "useRef", "useState", "noop", "forwardRef", "useState", "useRef", "useMemo", "isUrlMethodPair", "resolveUrlMethodPairComponent", "mergeDataIntoQueryString", "router", "useEffect", "createElement", "mergeDataIntoQueryString", "UseFormUtils", "cloneDeep", "toSimpleValidationErrors", "useCallback", "useMemo", "useRef", "useState", "UseFormUtils", "cloneDeep", "useRef", "useState", "useCallback", "mergeDataIntoQueryString", "data", "toSimpleValidationErrors", "args", "useMemo", "router", "useEffect", "useRef", "router", "useEffect", "useState", "router", "get", "createElement", "useCallback", "useEffect", "useMemo", "useRef", "useState", "useMemo", "useState", "get", "useRef", "useEffect", "useCallback", "router", "createElement"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inertiajs/react",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "The React adapter for Inertia.js",
|
|
6
6
|
"contributors": [
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"es-toolkit": "^1.33.0",
|
|
61
61
|
"laravel-precognition": "2.0.0-beta.5",
|
|
62
|
-
"@inertiajs/core": "3.0.0-beta.
|
|
62
|
+
"@inertiajs/core": "3.0.0-beta.6"
|
|
63
63
|
},
|
|
64
64
|
"scripts": {
|
|
65
65
|
"build": "pnpm clean && ./build.js && tsc",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: inertia-react-development
|
|
3
|
-
description: "Develops Inertia.js v3 React client-side applications. Activates when creating React pages, forms, or navigation; using <Link>, <Form>, useForm, useHttp,
|
|
3
|
+
description: "Develops Inertia.js v3 React client-side applications. Activates when creating React pages, forms, or navigation; using <Link>, <Form>, useForm, useHttp, setLayoutProps, or router; working with deferred props, prefetching, optimistic updates, instant visits, or polling; or when user mentions React with Inertia, React pages, React forms, or React navigation."
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: laravel
|
|
@@ -358,14 +358,7 @@ import { Link } from '@inertiajs/react'
|
|
|
358
358
|
Share dynamic data between pages and persistent layouts:
|
|
359
359
|
|
|
360
360
|
@boostsnippet("Layout Props in Layout", "react")
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
export default function Layout({ children }) {
|
|
364
|
-
const { title, showSidebar } = useLayoutProps({
|
|
365
|
-
title: 'My App',
|
|
366
|
-
showSidebar: true,
|
|
367
|
-
})
|
|
368
|
-
|
|
361
|
+
export default function Layout({ title = 'My App', showSidebar = true, children }) {
|
|
369
362
|
return (
|
|
370
363
|
<>
|
|
371
364
|
<header>{title}</header>
|
|
@@ -417,30 +410,54 @@ export default function UsersIndex({ users }) {
|
|
|
417
410
|
|
|
418
411
|
### Polling
|
|
419
412
|
|
|
420
|
-
|
|
413
|
+
Use the `usePoll` hook to automatically refresh data at intervals. It handles cleanup on unmount and throttles polling when the tab is inactive.
|
|
421
414
|
|
|
422
|
-
@boostsnippet("Polling
|
|
423
|
-
import {
|
|
424
|
-
import { useEffect } from 'react'
|
|
415
|
+
@boostsnippet("Basic Polling", "react")
|
|
416
|
+
import { usePoll } from '@inertiajs/react'
|
|
425
417
|
|
|
426
418
|
export default function Dashboard({ stats }) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
419
|
+
usePoll(5000)
|
|
420
|
+
|
|
421
|
+
return (
|
|
422
|
+
<div>
|
|
423
|
+
<h1>Dashboard</h1>
|
|
424
|
+
<div>Active Users: {stats.activeUsers}</div>
|
|
425
|
+
</div>
|
|
426
|
+
)
|
|
427
|
+
}
|
|
428
|
+
@endboostsnippet
|
|
429
|
+
|
|
430
|
+
@boostsnippet("Polling With Request Options and Manual Control", "react")
|
|
431
|
+
import { usePoll } from '@inertiajs/react'
|
|
431
432
|
|
|
432
|
-
|
|
433
|
-
},
|
|
433
|
+
export default function Dashboard({ stats }) {
|
|
434
|
+
const { start, stop } = usePoll(5000, {
|
|
435
|
+
only: ['stats'],
|
|
436
|
+
onStart() {
|
|
437
|
+
console.log('Polling request started')
|
|
438
|
+
},
|
|
439
|
+
onFinish() {
|
|
440
|
+
console.log('Polling request finished')
|
|
441
|
+
},
|
|
442
|
+
}, {
|
|
443
|
+
autoStart: false,
|
|
444
|
+
keepAlive: true,
|
|
445
|
+
})
|
|
434
446
|
|
|
435
447
|
return (
|
|
436
448
|
<div>
|
|
437
449
|
<h1>Dashboard</h1>
|
|
438
450
|
<div>Active Users: {stats.activeUsers}</div>
|
|
451
|
+
<button onClick={start}>Start Polling</button>
|
|
452
|
+
<button onClick={stop}>Stop Polling</button>
|
|
439
453
|
</div>
|
|
440
454
|
)
|
|
441
455
|
}
|
|
442
456
|
@endboostsnippet
|
|
443
457
|
|
|
458
|
+
- `autoStart` (default `true`) - set to `false` to start polling manually via the returned `start()` function
|
|
459
|
+
- `keepAlive` (default `false`) - set to `true` to prevent throttling when the browser tab is inactive
|
|
460
|
+
|
|
444
461
|
### WhenVisible
|
|
445
462
|
|
|
446
463
|
Lazy-load a prop when an element scrolls into view. Useful for deferring expensive data that sits below the fold:
|
|
@@ -467,6 +484,26 @@ export default function Dashboard({ stats }) {
|
|
|
467
484
|
}
|
|
468
485
|
@endboostsnippet
|
|
469
486
|
|
|
487
|
+
### InfiniteScroll
|
|
488
|
+
|
|
489
|
+
Automatically load additional pages of paginated data as users scroll:
|
|
490
|
+
|
|
491
|
+
@boostsnippet("InfiniteScroll Example", "react")
|
|
492
|
+
import { InfiniteScroll } from '@inertiajs/react'
|
|
493
|
+
|
|
494
|
+
export default function Users({ users }) {
|
|
495
|
+
return (
|
|
496
|
+
<InfiniteScroll data="users">
|
|
497
|
+
{users.data.map(user => (
|
|
498
|
+
<div key={user.id}>{user.name}</div>
|
|
499
|
+
))}
|
|
500
|
+
</InfiniteScroll>
|
|
501
|
+
)
|
|
502
|
+
}
|
|
503
|
+
@endboostsnippet
|
|
504
|
+
|
|
505
|
+
The server must use `Inertia::scroll()` to configure the paginated data. Use the `search-docs` tool with a query of `infinite scroll` for detailed guidance on buffers, manual loading, reverse mode, and custom trigger elements.
|
|
506
|
+
|
|
470
507
|
## Server-Side Patterns
|
|
471
508
|
|
|
472
509
|
Server-side patterns (Inertia::render, props, middleware) are covered in inertia-laravel guidelines.
|
package/types/Form.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FormComponentProps, FormComponentRef, FormComponentSlotProps } from '@inertiajs/core';
|
|
2
2
|
import React, { ReactNode } from 'react';
|
|
3
|
-
type FormProps<TForm extends object = Record<string, any>> = FormComponentProps & Omit<React.FormHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> & Omit<React.AllHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> & {
|
|
3
|
+
type FormProps<TForm extends object = Record<string, any>> = FormComponentProps<TForm> & Omit<React.FormHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> & Omit<React.AllHTMLAttributes<HTMLFormElement>, keyof FormComponentProps | 'children'> & {
|
|
4
4
|
children: ReactNode | ((props: FormComponentSlotProps<TForm>) => ReactNode);
|
|
5
5
|
};
|
|
6
6
|
export declare function useFormContext<TForm extends object = Record<string, any>>(): FormComponentRef<TForm> | undefined;
|
package/types/useFormState.d.ts
CHANGED
|
@@ -62,8 +62,8 @@ export interface UseFormStateReturn<TForm extends object> {
|
|
|
62
62
|
precognitionEndpointRef: React.MutableRefObject<(() => UrlMethodPair) | null>;
|
|
63
63
|
dataRef: React.MutableRefObject<TForm>;
|
|
64
64
|
isMounted: React.MutableRefObject<boolean>;
|
|
65
|
-
setProcessing:
|
|
66
|
-
setProgress:
|
|
65
|
+
setProcessing: React.Dispatch<React.SetStateAction<boolean>>;
|
|
66
|
+
setProgress: React.Dispatch<React.SetStateAction<Progress | null>>;
|
|
67
67
|
markAsSuccessful: () => void;
|
|
68
68
|
clearErrors: (...fields: string[]) => void;
|
|
69
69
|
setError: (fieldOrFields: FormDataKeys<TForm> | FormDataErrors<TForm>, maybeValue?: ErrorValue) => void;
|