next-safe-action
Version:
Type safe and validated Server Actions in your Next.js project.
1 lines • 16.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/hooks.ts","../src/hooks-utils.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {} from \"react/experimental\";\nimport type {} from \"zod\";\nimport type { InferIn, Schema } from \"./adapters/types\";\nimport { getActionShorthandStatusObject, getActionStatus, useActionCallbacks, useExecuteOnMount } from \"./hooks-utils\";\nimport type {\n\tHookBaseUtils,\n\tHookCallbacks,\n\tHookSafeActionFn,\n\tUseActionHookReturn,\n\tUseOptimisticActionHookReturn,\n} from \"./hooks.types\";\nimport type { SafeActionResult } from \"./index.types\";\n\n// HOOKS\n\n/**\n * Use the action from a Client Component via hook.\n * @param safeActionFn The action function\n * @param utils Optional base utils and callbacks\n *\n * {@link https://next-safe-action.dev/docs/execute-actions/hooks/useaction See docs for more information}\n */\nexport const useAction = <\n\tServerError,\n\tS extends Schema | undefined,\n\tconst BAS extends readonly Schema[],\n\tCVE,\n\tCBAVE,\n\tData,\n>(\n\tsafeActionFn: HookSafeActionFn<ServerError, S, BAS, CVE, CBAVE, Data>,\n\tutils?: HookBaseUtils<S> & HookCallbacks<ServerError, S, BAS, CVE, CBAVE, Data>\n): UseActionHookReturn<ServerError, S, BAS, CVE, CBAVE, Data> => {\n\tconst [isTransitioning, startTransition] = React.useTransition();\n\tconst [result, setResult] = React.useState<SafeActionResult<ServerError, S, BAS, CVE, CBAVE, Data>>({});\n\tconst [clientInput, setClientInput] = React.useState<S extends Schema ? InferIn<S> : void>();\n\tconst [isExecuting, setIsExecuting] = React.useState(false);\n\tconst [isIdle, setIsIdle] = React.useState(true);\n\n\tconst status = getActionStatus<ServerError, S, BAS, CVE, CBAVE, Data>({ isExecuting, result, isIdle });\n\n\tconst execute = React.useCallback(\n\t\t(input: S extends Schema ? InferIn<S> : void) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetIsIdle(false);\n\t\t\t\tsetClientInput(input);\n\t\t\t\tsetIsExecuting(true);\n\t\t\t}, 0);\n\n\t\t\tstartTransition(() => {\n\t\t\t\tsafeActionFn(input as S extends Schema ? InferIn<S> : undefined)\n\t\t\t\t\t.then((res) => setResult(res ?? {}))\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tsetResult({});\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tsetIsExecuting(false);\n\t\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t[safeActionFn]\n\t);\n\n\tconst executeAsync = React.useCallback(\n\t\t(input: S extends Schema ? InferIn<S> : void) => {\n\t\t\tconst fn = new Promise<Awaited<ReturnType<typeof safeActionFn>>>((resolve, reject) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsIdle(false);\n\t\t\t\t\tsetClientInput(input);\n\t\t\t\t\tsetIsExecuting(true);\n\t\t\t\t}, 0);\n\n\t\t\t\tstartTransition(() => {\n\t\t\t\t\tsafeActionFn(input as S extends Schema ? InferIn<S> : undefined)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\tsetResult(res ?? {});\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\tsetResult({});\n\t\t\t\t\t\t\treject(e);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tsetIsExecuting(false);\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn fn;\n\t\t},\n\t\t[safeActionFn]\n\t);\n\n\tconst reset = React.useCallback(() => {\n\t\tsetIsIdle(true);\n\t\tsetClientInput(undefined);\n\t\tsetResult({});\n\t}, []);\n\n\tuseExecuteOnMount({\n\t\texecuteOnMount: utils?.executeOnMount,\n\t\texecuteFn: execute,\n\t});\n\n\tuseActionCallbacks({\n\t\tresult: result ?? {},\n\t\tinput: clientInput as S extends Schema ? InferIn<S> : undefined,\n\t\tstatus,\n\t\tcb: {\n\t\t\tonExecute: utils?.onExecute,\n\t\t\tonSuccess: utils?.onSuccess,\n\t\t\tonError: utils?.onError,\n\t\t\tonSettled: utils?.onSettled,\n\t\t},\n\t});\n\n\treturn {\n\t\texecute,\n\t\texecuteAsync,\n\t\tinput: clientInput as S extends Schema ? InferIn<S> : undefined,\n\t\tresult,\n\t\treset,\n\t\tstatus,\n\t\t...getActionShorthandStatusObject({ status, isTransitioning }),\n\t};\n};\n\n/**\n * Use the action from a Client Component via hook, with optimistic data update.\n * @param safeActionFn The action function\n * @param utils Required `currentData` and `updateFn` and optional base utils and callbacks\n *\n * {@link https://next-safe-action.dev/docs/execute-actions/hooks/useoptimisticaction See docs for more information}\n */\nexport const useOptimisticAction = <\n\tServerError,\n\tS extends Schema | undefined,\n\tconst BAS extends readonly Schema[],\n\tCVE,\n\tCBAVE,\n\tData,\n\tState,\n>(\n\tsafeActionFn: HookSafeActionFn<ServerError, S, BAS, CVE, CBAVE, Data>,\n\tutils: {\n\t\tcurrentState: State;\n\t\tupdateFn: (state: State, input: S extends Schema ? InferIn<S> : undefined) => State;\n\t} & HookBaseUtils<S> &\n\t\tHookCallbacks<ServerError, S, BAS, CVE, CBAVE, Data>\n): UseOptimisticActionHookReturn<ServerError, S, BAS, CVE, CBAVE, Data, State> => {\n\tconst [isTransitioning, startTransition] = React.useTransition();\n\tconst [result, setResult] = React.useState<SafeActionResult<ServerError, S, BAS, CVE, CBAVE, Data>>({});\n\tconst [clientInput, setClientInput] = React.useState<S extends Schema ? InferIn<S> : void>();\n\tconst [isExecuting, setIsExecuting] = React.useState(false);\n\tconst [isIdle, setIsIdle] = React.useState(true);\n\tconst [optimisticState, setOptimisticValue] = React.useOptimistic<State, S extends Schema ? InferIn<S> : undefined>(\n\t\tutils.currentState,\n\t\tutils.updateFn\n\t);\n\n\tconst status = getActionStatus<ServerError, S, BAS, CVE, CBAVE, Data>({ isExecuting, result, isIdle });\n\n\tconst execute = React.useCallback(\n\t\t(input: S extends Schema ? InferIn<S> : void) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetIsIdle(false);\n\t\t\t\tsetClientInput(input);\n\t\t\t\tsetIsExecuting(true);\n\t\t\t}, 0);\n\n\t\t\tstartTransition(() => {\n\t\t\t\tsetOptimisticValue(input as S extends Schema ? InferIn<S> : undefined);\n\t\t\t\tsafeActionFn(input as S extends Schema ? InferIn<S> : undefined)\n\t\t\t\t\t.then((res) => setResult(res ?? {}))\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tsetResult({});\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tsetIsExecuting(false);\n\t\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t[safeActionFn, setOptimisticValue]\n\t);\n\n\tconst executeAsync = React.useCallback(\n\t\t(input: S extends Schema ? InferIn<S> : void) => {\n\t\t\tconst fn = new Promise<Awaited<ReturnType<typeof safeActionFn>>>((resolve, reject) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetIsIdle(false);\n\t\t\t\t\tsetClientInput(input);\n\t\t\t\t\tsetIsExecuting(true);\n\t\t\t\t}, 0);\n\n\t\t\t\tstartTransition(() => {\n\t\t\t\t\tsetOptimisticValue(input as S extends Schema ? InferIn<S> : undefined);\n\t\t\t\t\tsafeActionFn(input as S extends Schema ? InferIn<S> : undefined)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\tsetResult(res ?? {});\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\tsetResult({});\n\t\t\t\t\t\t\treject(e);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tsetIsExecuting(false);\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn fn;\n\t\t},\n\t\t[safeActionFn, setOptimisticValue]\n\t);\n\n\tconst reset = React.useCallback(() => {\n\t\tsetIsIdle(true);\n\t\tsetClientInput(undefined);\n\t\tsetResult({});\n\t}, []);\n\n\tuseExecuteOnMount({\n\t\texecuteOnMount: utils?.executeOnMount,\n\t\texecuteFn: execute,\n\t});\n\n\tuseActionCallbacks({\n\t\tresult: result ?? {},\n\t\tinput: clientInput as S extends Schema ? InferIn<S> : undefined,\n\t\tstatus,\n\t\tcb: {\n\t\t\tonExecute: utils.onExecute,\n\t\t\tonSuccess: utils.onSuccess,\n\t\t\tonError: utils.onError,\n\t\t\tonSettled: utils.onSettled,\n\t\t},\n\t});\n\n\treturn {\n\t\texecute,\n\t\texecuteAsync,\n\t\tinput: clientInput as S extends Schema ? InferIn<S> : undefined,\n\t\tresult,\n\t\toptimisticState,\n\t\treset,\n\t\tstatus,\n\t\t...getActionShorthandStatusObject({ status, isTransitioning }),\n\t};\n};\n\nexport type * from \"./hooks.types\";\n","import * as React from \"react\";\nimport {} from \"react/experimental\";\nimport type {} from \"zod\";\nimport type { InferIn, Schema } from \"./adapters/types\";\nimport type { HookActionStatus, HookBaseUtils, HookCallbacks, HookShorthandStatus } from \"./hooks.types\";\nimport type { SafeActionResult } from \"./index.types\";\n\nexport const getActionStatus = <\n\tServerError,\n\tS extends Schema | undefined,\n\tconst BAS extends readonly Schema[],\n\tCVE,\n\tCBAVE,\n\tData,\n>({\n\tisIdle,\n\tisExecuting,\n\tresult,\n}: {\n\tisIdle: boolean;\n\tisExecuting: boolean;\n\tresult: SafeActionResult<ServerError, S, BAS, CVE, CBAVE, Data>;\n}): HookActionStatus => {\n\tif (isIdle) {\n\t\treturn \"idle\";\n\t} else if (isExecuting) {\n\t\treturn \"executing\";\n\t} else if (\n\t\ttypeof result.validationErrors !== \"undefined\" ||\n\t\ttypeof result.bindArgsValidationErrors !== \"undefined\" ||\n\t\ttypeof result.serverError !== \"undefined\"\n\t) {\n\t\treturn \"hasErrored\";\n\t} else {\n\t\treturn \"hasSucceeded\";\n\t}\n};\n\nexport const getActionShorthandStatusObject = ({\n\tstatus,\n\tisTransitioning,\n}: {\n\tstatus: HookActionStatus;\n\tisTransitioning: boolean;\n}): HookShorthandStatus => {\n\treturn {\n\t\tisIdle: status === \"idle\",\n\t\tisExecuting: status === \"executing\",\n\t\tisTransitioning,\n\t\tisPending: status === \"executing\" || isTransitioning,\n\t\thasSucceeded: status === \"hasSucceeded\",\n\t\thasErrored: status === \"hasErrored\",\n\t};\n};\n\nexport const useExecuteOnMount = <S extends Schema | undefined>(\n\targs: HookBaseUtils<S> & {\n\t\texecuteFn: (input: S extends Schema ? InferIn<S> : void) => void;\n\t}\n) => {\n\tconst mounted = React.useRef(false);\n\n\tReact.useEffect(() => {\n\t\tconst t = setTimeout(() => {\n\t\t\tif (args.executeOnMount && !mounted.current) {\n\t\t\t\targs.executeFn(args.executeOnMount.input as S extends Schema ? InferIn<S> : void);\n\t\t\t\tmounted.current = true;\n\t\t\t}\n\t\t}, args.executeOnMount?.delayMs ?? 0);\n\n\t\treturn () => {\n\t\t\tclearTimeout(t);\n\t\t};\n\t}, [args]);\n};\n\nexport const useActionCallbacks = <\n\tServerError,\n\tS extends Schema | undefined,\n\tconst BAS extends readonly Schema[],\n\tCVE,\n\tCBAVE,\n\tData,\n>({\n\tresult,\n\tinput,\n\tstatus,\n\tcb,\n}: {\n\tresult: SafeActionResult<ServerError, S, BAS, CVE, CBAVE, Data>;\n\tinput: S extends Schema ? InferIn<S> : undefined;\n\tstatus: HookActionStatus;\n\tcb?: HookCallbacks<ServerError, S, BAS, CVE, CBAVE, Data>;\n}) => {\n\tconst onExecuteRef = React.useRef(cb?.onExecute);\n\tconst onSuccessRef = React.useRef(cb?.onSuccess);\n\tconst onErrorRef = React.useRef(cb?.onError);\n\tconst onSettledRef = React.useRef(cb?.onSettled);\n\n\t// Execute the callback when the action status changes.\n\tReact.useEffect(() => {\n\t\tconst onExecute = onExecuteRef.current;\n\t\tconst onSuccess = onSuccessRef.current;\n\t\tconst onError = onErrorRef.current;\n\t\tconst onSettled = onSettledRef.current;\n\n\t\tconst executeCallbacks = async () => {\n\t\t\tswitch (status) {\n\t\t\t\tcase \"executing\":\n\t\t\t\t\tawait Promise.resolve(onExecute?.({ input }));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hasSucceeded\":\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\tPromise.resolve(onSuccess?.({ data: result?.data, input })),\n\t\t\t\t\t\tPromise.resolve(onSettled?.({ result, input })),\n\t\t\t\t\t]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hasErrored\":\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\tPromise.resolve(onError?.({ error: result, input })),\n\t\t\t\t\t\tPromise.resolve(onSettled?.({ result, input })),\n\t\t\t\t\t]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t\texecuteCallbacks().catch(console.error);\n\t}, [status, result, input]);\n};\n"],"mappings":";;;AAEA,YAAYA,YAAW;;;ACFvB,YAAY,WAAW;AAOhB,IAAM,kBAAkB,CAO7B;AAAA,EACD;AAAA,EACA;AAAA,EACA;AACD,MAIwB;AACvB,MAAI,QAAQ;AACX,WAAO;AAAA,EACR,WAAW,aAAa;AACvB,WAAO;AAAA,EACR,WACC,OAAO,OAAO,qBAAqB,eACnC,OAAO,OAAO,6BAA6B,eAC3C,OAAO,OAAO,gBAAgB,aAC7B;AACD,WAAO;AAAA,EACR,OAAO;AACN,WAAO;AAAA,EACR;AACD;AAEO,IAAM,iCAAiC,CAAC;AAAA,EAC9C;AAAA,EACA;AACD,MAG2B;AAC1B,SAAO;AAAA,IACN,QAAQ,WAAW;AAAA,IACnB,aAAa,WAAW;AAAA,IACxB;AAAA,IACA,WAAW,WAAW,eAAe;AAAA,IACrC,cAAc,WAAW;AAAA,IACzB,YAAY,WAAW;AAAA,EACxB;AACD;AAEO,IAAM,oBAAoB,CAChC,SAGI;AACJ,QAAM,UAAgB,aAAO,KAAK;AAElC,EAAM,gBAAU,MAAM;AACrB,UAAM,IAAI,WAAW,MAAM;AAC1B,UAAI,KAAK,kBAAkB,CAAC,QAAQ,SAAS;AAC5C,aAAK,UAAU,KAAK,eAAe,KAA6C;AAChF,gBAAQ,UAAU;AAAA,MACnB;AAAA,IACD,GAAG,KAAK,gBAAgB,WAAW,CAAC;AAEpC,WAAO,MAAM;AACZ,mBAAa,CAAC;AAAA,IACf;AAAA,EACD,GAAG,CAAC,IAAI,CAAC;AACV;AAEO,IAAM,qBAAqB,CAOhC;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAKM;AACL,QAAM,eAAqB,aAAO,IAAI,SAAS;AAC/C,QAAM,eAAqB,aAAO,IAAI,SAAS;AAC/C,QAAM,aAAmB,aAAO,IAAI,OAAO;AAC3C,QAAM,eAAqB,aAAO,IAAI,SAAS;AAG/C,EAAM,gBAAU,MAAM;AACrB,UAAM,YAAY,aAAa;AAC/B,UAAM,YAAY,aAAa;AAC/B,UAAM,UAAU,WAAW;AAC3B,UAAM,YAAY,aAAa;AAE/B,UAAM,mBAAmB,YAAY;AACpC,cAAQ,QAAQ;AAAA,QACf,KAAK;AACJ,gBAAM,QAAQ,QAAQ,YAAY,EAAE,MAAM,CAAC,CAAC;AAC5C;AAAA,QACD,KAAK;AACJ,gBAAM,QAAQ,IAAI;AAAA,YACjB,QAAQ,QAAQ,YAAY,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,CAAC;AAAA,YAC1D,QAAQ,QAAQ,YAAY,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,UAC/C,CAAC;AACD;AAAA,QACD,KAAK;AACJ,gBAAM,QAAQ,IAAI;AAAA,YACjB,QAAQ,QAAQ,UAAU,EAAE,OAAO,QAAQ,MAAM,CAAC,CAAC;AAAA,YACnD,QAAQ,QAAQ,YAAY,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,UAC/C,CAAC;AACD;AAAA,MACF;AAAA,IACD;AAEA,qBAAiB,EAAE,MAAM,QAAQ,KAAK;AAAA,EACvC,GAAG,CAAC,QAAQ,QAAQ,KAAK,CAAC;AAC3B;;;ADvGO,IAAM,YAAY,CAQxB,cACA,UACgE;AAChE,QAAM,CAAC,iBAAiB,eAAe,IAAU,qBAAc;AAC/D,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAkE,CAAC,CAAC;AACtG,QAAM,CAAC,aAAa,cAAc,IAAU,gBAA+C;AAC3F,QAAM,CAAC,aAAa,cAAc,IAAU,gBAAS,KAAK;AAC1D,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,IAAI;AAE/C,QAAM,SAAS,gBAAuD,EAAE,aAAa,QAAQ,OAAO,CAAC;AAErG,QAAM,UAAgB;AAAA,IACrB,CAAC,UAAgD;AAChD,iBAAW,MAAM;AAChB,kBAAU,KAAK;AACf,uBAAe,KAAK;AACpB,uBAAe,IAAI;AAAA,MACpB,GAAG,CAAC;AAEJ,sBAAgB,MAAM;AACrB,qBAAa,KAAkD,EAC7D,KAAK,CAAC,QAAQ,UAAU,OAAO,CAAC,CAAC,CAAC,EAClC,MAAM,CAAC,MAAM;AACb,oBAAU,CAAC,CAAC;AACZ,gBAAM;AAAA,QACP,CAAC,EACA,QAAQ,MAAM;AACd,yBAAe,KAAK;AAAA,QACrB,CAAC;AAAA,MACH,CAAC;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EACd;AAEA,QAAM,eAAqB;AAAA,IAC1B,CAAC,UAAgD;AAChD,YAAM,KAAK,IAAI,QAAkD,CAAC,SAAS,WAAW;AACrF,mBAAW,MAAM;AAChB,oBAAU,KAAK;AACf,yBAAe,KAAK;AACpB,yBAAe,IAAI;AAAA,QACpB,GAAG,CAAC;AAEJ,wBAAgB,MAAM;AACrB,uBAAa,KAAkD,EAC7D,KAAK,CAAC,QAAQ;AACd,sBAAU,OAAO,CAAC,CAAC;AACnB,oBAAQ,GAAG;AAAA,UACZ,CAAC,EACA,MAAM,CAAC,MAAM;AACb,sBAAU,CAAC,CAAC;AACZ,mBAAO,CAAC;AAAA,UACT,CAAC,EACA,QAAQ,MAAM;AACd,2BAAe,KAAK;AAAA,UACrB,CAAC;AAAA,QACH,CAAC;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACR;AAAA,IACA,CAAC,YAAY;AAAA,EACd;AAEA,QAAM,QAAc,mBAAY,MAAM;AACrC,cAAU,IAAI;AACd,mBAAe,MAAS;AACxB,cAAU,CAAC,CAAC;AAAA,EACb,GAAG,CAAC,CAAC;AAEL,oBAAkB;AAAA,IACjB,gBAAgB,OAAO;AAAA,IACvB,WAAW;AAAA,EACZ,CAAC;AAED,qBAAmB;AAAA,IAClB,QAAQ,UAAU,CAAC;AAAA,IACnB,OAAO;AAAA,IACP;AAAA,IACA,IAAI;AAAA,MACH,WAAW,OAAO;AAAA,MAClB,WAAW,OAAO;AAAA,MAClB,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO;AAAA,IACnB;AAAA,EACD,CAAC;AAED,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,+BAA+B,EAAE,QAAQ,gBAAgB,CAAC;AAAA,EAC9D;AACD;AASO,IAAM,sBAAsB,CASlC,cACA,UAKiF;AACjF,QAAM,CAAC,iBAAiB,eAAe,IAAU,qBAAc;AAC/D,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAkE,CAAC,CAAC;AACtG,QAAM,CAAC,aAAa,cAAc,IAAU,gBAA+C;AAC3F,QAAM,CAAC,aAAa,cAAc,IAAU,gBAAS,KAAK;AAC1D,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,IAAI;AAC/C,QAAM,CAAC,iBAAiB,kBAAkB,IAAU;AAAA,IACnD,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAEA,QAAM,SAAS,gBAAuD,EAAE,aAAa,QAAQ,OAAO,CAAC;AAErG,QAAM,UAAgB;AAAA,IACrB,CAAC,UAAgD;AAChD,iBAAW,MAAM;AAChB,kBAAU,KAAK;AACf,uBAAe,KAAK;AACpB,uBAAe,IAAI;AAAA,MACpB,GAAG,CAAC;AAEJ,sBAAgB,MAAM;AACrB,2BAAmB,KAAkD;AACrE,qBAAa,KAAkD,EAC7D,KAAK,CAAC,QAAQ,UAAU,OAAO,CAAC,CAAC,CAAC,EAClC,MAAM,CAAC,MAAM;AACb,oBAAU,CAAC,CAAC;AACZ,gBAAM;AAAA,QACP,CAAC,EACA,QAAQ,MAAM;AACd,yBAAe,KAAK;AAAA,QACrB,CAAC;AAAA,MACH,CAAC;AAAA,IACF;AAAA,IACA,CAAC,cAAc,kBAAkB;AAAA,EAClC;AAEA,QAAM,eAAqB;AAAA,IAC1B,CAAC,UAAgD;AAChD,YAAM,KAAK,IAAI,QAAkD,CAAC,SAAS,WAAW;AACrF,mBAAW,MAAM;AAChB,oBAAU,KAAK;AACf,yBAAe,KAAK;AACpB,yBAAe,IAAI;AAAA,QACpB,GAAG,CAAC;AAEJ,wBAAgB,MAAM;AACrB,6BAAmB,KAAkD;AACrE,uBAAa,KAAkD,EAC7D,KAAK,CAAC,QAAQ;AACd,sBAAU,OAAO,CAAC,CAAC;AACnB,oBAAQ,GAAG;AAAA,UACZ,CAAC,EACA,MAAM,CAAC,MAAM;AACb,sBAAU,CAAC,CAAC;AACZ,mBAAO,CAAC;AAAA,UACT,CAAC,EACA,QAAQ,MAAM;AACd,2BAAe,KAAK;AAAA,UACrB,CAAC;AAAA,QACH,CAAC;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACR;AAAA,IACA,CAAC,cAAc,kBAAkB;AAAA,EAClC;AAEA,QAAM,QAAc,mBAAY,MAAM;AACrC,cAAU,IAAI;AACd,mBAAe,MAAS;AACxB,cAAU,CAAC,CAAC;AAAA,EACb,GAAG,CAAC,CAAC;AAEL,oBAAkB;AAAA,IACjB,gBAAgB,OAAO;AAAA,IACvB,WAAW;AAAA,EACZ,CAAC;AAED,qBAAmB;AAAA,IAClB,QAAQ,UAAU,CAAC;AAAA,IACnB,OAAO;AAAA,IACP;AAAA,IACA,IAAI;AAAA,MACH,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,IAClB;AAAA,EACD,CAAC;AAED,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,+BAA+B,EAAE,QAAQ,gBAAgB,CAAC;AAAA,EAC9D;AACD;","names":["React"]}