{"version":3,"file":"index.mjs","sources":["../src/context/FliptProvider.tsx","../src/utils/enums/ActionTypeEnum.ts","../src/errors/UnhandledActionTypeError.ts","../src/utils/hooks/useTaskReducer.ts","../src/utils/hooks/useMounted.ts","../src/utils/errors/isAbortError.ts","../src/utils/hooks/useAbortController.ts","../src/utils/hooks/useLazyTask.ts","../src/utils/hooks/useTask.ts","../src/hooks/useEvaluation.ts","../src/hooks/useBatchEvaluation.ts","../src/hooks/useLazyEvaluation.ts","../src/hooks/useLazyBatchEvaluation.ts","../src/components/Evaluate.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { createFliptSDK, FlipSDKInstance } from '@trybe/flipt-sdk';\nimport { createContext, ReactNode } from 'react';\n\ntype FliptProviderProps = {\n  flipt: FlipSDKInstance;\n  uri: string;\n  children: ReactNode;\n};\n\nexport const FliptContext = createContext<Omit<\n  FliptProviderProps,\n  'children'\n> | null>(null);\n\nfunction FliptProvider({\n  children,\n  uri,\n}: Omit<FliptProviderProps, 'flipt'>): ReactNode {\n  const flipt = useMemo(() => createFliptSDK({ uri }), [uri]);\n\n  const value = useMemo(\n    () => ({\n      flipt,\n      uri,\n    }),\n    [flipt, uri],\n  );\n\n  return (\n    <FliptContext.Provider value={value}>{children}</FliptContext.Provider>\n  );\n}\n\nexport default FliptProvider;\n","/**\n * Enum to reducer action types\n */\nenum ActionTypeEnum {\n  FAILED = 'FAILED',\n  STARTED = 'STARTED',\n  COMPLETED = 'COMPLETED',\n}\n\nexport default ActionTypeEnum;\n","type UnhandledActionTypeErrorConstructor = {\n  action: string;\n  wrapper: unknown;\n};\n\n/** Error thrown on receive a action type not declared by reducer. */\nclass UnhandledActionTypeError extends Error {\n  public action: string;\n\n  constructor({ action, wrapper }: UnhandledActionTypeErrorConstructor) {\n    const message = `Not an action of '${wrapper}' reducer.`;\n\n    super(message);\n\n    this.name = 'UnhandledActionTypeError';\n    this.action = action;\n    this.message = message;\n  }\n}\n\nexport default UnhandledActionTypeError;\n","import { useReducer } from 'react';\nimport type { Reducer } from 'react';\nimport UnhandledActionTypeError from '../../errors/UnhandledActionTypeError';\nimport ActionTypeEnum from '../enums/ActionTypeEnum';\nimport type { State as _State } from '../types/State';\nimport type { Action as _Action } from '../types/Action';\n\ntype State<Result> = _State<Result>;\ntype Action<Result> = _Action<Result>;\n\ntype TaskReducer<Result> = Reducer<State<Result>, Action<Result>>;\n\n/**\n * @typedef {import('react').Reducer<State<Result>, Action<Result>>} Reducer\n * @template Result - Resultado da tarefa.\n */\n\n/**\n * Object with initial state of execution of tasks.\n * @type {State<any>}\n */\nconst INITIAL_STATE = {\n  error: null,\n  result: null,\n  loading: false,\n  runningTasks: 0,\n  wasStartedAtLeastOnce: false,\n};\n\n/**\n * Reducer used to update task execution states.\n */\nfunction reducer<Result>(\n  currentState: State<Result>,\n  action: Action<Result>,\n): State<Result> {\n  const state = { ...currentState };\n\n  switch (action.type) {\n    case ActionTypeEnum.STARTED:\n      state.runningTasks += 1;\n      state.wasStartedAtLeastOnce = true;\n      break;\n    case ActionTypeEnum.FAILED:\n      state.runningTasks -= 1;\n      state.error = action.error;\n      state.result = null;\n      break;\n    case ActionTypeEnum.COMPLETED:\n      state.runningTasks -= 1;\n      state.error = null;\n      state.result = action.result ?? null;\n      break;\n    default:\n      throw new UnhandledActionTypeError({ action, wrapper: 'useTaskLazy' });\n  }\n\n  state.loading = state.runningTasks > 0;\n\n  return state;\n}\n\n/**\n * React.js hook of task reducer. It returns the tuple with the state and the\n * function to dispatch the actions that update the status.\n */\nfunction useTaskReducer<Result>(initialState = {}) {\n  return useReducer(reducer as TaskReducer<Result>, {\n    ...INITIAL_STATE,\n    ...initialState,\n  });\n}\n\nexport default useTaskReducer;\n","import { useCallback, useEffect, useRef } from 'react';\n\n/**\n * React.js hook that returns if the component is mounted\n */\nfunction useMounted(): () => boolean {\n  const mountedRef = useRef(true);\n\n  useEffect(\n    () => () => {\n      mountedRef.current = false;\n    },\n    [],\n  );\n\n  return useCallback(() => mountedRef.current, []);\n}\n\nexport default useMounted;\n","type AbortError = DOMException & { name: 'AbortError' };\n\n/**\n * Verifies if received error is 'AbortError'.\n */\nfunction isAbortError(error: unknown): error is AbortError {\n  return error instanceof DOMException && error.name === 'AbortError';\n}\n\nexport default isAbortError;\n","import { useCallback, useLayoutEffect, useState } from 'react';\nimport useMounted from './useMounted';\n\ntype UseAbortControllerAPI = {\n  abort: () => void;\n  signal: AbortSignal;\n};\n\n/**\n * React.js hook that provides the 'abort' function and the 'signal' object, which must be\n * defined in the init options of the 'fetch' function and other APIs whose\n * operations can be aborted when executing the 'abort' function.\n */\nfunction useAbortController(): UseAbortControllerAPI {\n  const mounted = useMounted();\n\n  const [controller, setController] = useState(\n    () => new window.AbortController(),\n  );\n\n  const abort = useCallback(() => {\n    if (mounted()) {\n      setController(new window.AbortController());\n    }\n  }, [mounted]);\n\n  useLayoutEffect(() => () => controller.abort(), [controller]);\n\n  return {\n    abort,\n    signal: controller.signal,\n  };\n}\n\nexport default useAbortController;\n","import { useCallback } from 'react';\nimport ActionTypeEnum from '../enums/ActionTypeEnum';\nimport useTaskReducer from '../hooks/useTaskReducer';\nimport useMounted from './useMounted';\nimport isAbortError from '../errors/isAbortError';\nimport useAbortController from './useAbortController';\nimport type { State as State } from '../types/State';\n\n/**\n * React.js hook that provides a function to run in a lazy (lazy) way\n * the task and the task's result, loading and error states.\n */\nfunction useLazyTask<T>(task: Task<T>): [() => Promise<void>, State<T>] {\n  const mounted = useMounted();\n  const { signal } = useAbortController();\n  const [state, dispatch] = useTaskReducer<T>();\n\n  const executeTask = useCallback(async () => {\n    dispatch({ type: ActionTypeEnum.STARTED });\n\n    try {\n      const result = await task({\n        signal,\n      });\n\n      if (!mounted()) return;\n\n      dispatch({\n        result,\n        type: ActionTypeEnum.COMPLETED,\n      });\n    } catch (error) {\n      if (!mounted() || isAbortError(error)) return;\n\n      dispatch({\n        error,\n        type: ActionTypeEnum.FAILED,\n      });\n    }\n  }, [task, signal, mounted, dispatch]);\n\n  return [executeTask, state];\n}\n\nexport default useLazyTask;\n","import { useEffect } from 'react';\nimport type { State } from '../types/State';\nimport useLazyTask from './useLazyTask';\n\ntype UseTaskState = {\n  executeTask: () => Promise<void>;\n};\n\n/**\n * React.js hook that immediately executes the task and provides the result states,\n * loading, error and a function to rerun the task.\n */\nfunction useTask<T>(task: Task<T>): State<T> & UseTaskState {\n  const [executeTask, state] = useLazyTask(task);\n\n  useEffect(() => {\n    executeTask();\n  }, [executeTask]);\n\n  return {\n    ...state,\n    executeTask,\n    loading: state.wasStartedAtLeastOnce ? state.loading : true,\n    runningTasks: state.wasStartedAtLeastOnce ? state.runningTasks : 1,\n    wasStartedAtLeastOnce: true,\n  };\n}\n\nexport default useTask;\n","import { FliptContext } from '@/context/FliptProvider';\nimport type EvaluationConfig from '@/types/EvaluationConfig';\nimport useTask from '@/utils/hooks/useTask';\nimport isEqual from 'lodash/isEqual';\nimport { useCallback, useContext, useLayoutEffect, useRef } from 'react';\n\nfunction useEvaluation(\n  flagKey: string,\n  config: EvaluationConfig,\n): { loading: boolean; match: boolean; error: unknown } {\n  const fliptContext = useContext(FliptContext);\n\n  const latestConfig = useRef(config);\n\n  if (!fliptContext) {\n    throw new Error('useEvaluation must be used within a FliptContext');\n  }\n\n  useLayoutEffect(() => {\n    if (!isEqual(latestConfig.current, config)) {\n      latestConfig.current = config;\n    }\n  }, [config]);\n\n  const { loading, result, error } = useTask(\n    useCallback(\n      ({ signal }) =>\n        fliptContext.flipt.evaluate(\n          flagKey,\n          latestConfig.current.entityId,\n          latestConfig.current.context,\n          {\n            requestId: latestConfig.current.requestId,\n            signal,\n          },\n        ),\n      [flagKey, latestConfig.current],\n    ),\n  );\n\n  return { loading, match: result?.match ?? false, error };\n}\n\nexport default useEvaluation;\n","import { FliptContext } from '@/context/FliptProvider';\nimport type EvaluationConfig from '@/types/EvaluationConfig';\nimport type { Request } from '@trybe/flipt-sdk';\nimport useTask from '@/utils/hooks/useTask';\nimport isEqual from 'lodash/isEqual';\nimport { useCallback, useContext, useLayoutEffect, useRef } from 'react';\nimport type { Evaluation } from '@trybe/flipt-sdk';\n\nfunction useBatchEvaluation(\n  requests: Request[],\n  config: Pick<EvaluationConfig, 'requestId'>,\n): {\n  loading: boolean;\n  match: Evaluation<Record<string, string>>[];\n  error: unknown;\n} {\n  const fliptContext = useContext(FliptContext);\n\n  const latestConfig = useRef(config);\n\n  if (!fliptContext) {\n    throw new Error('useEvaluation must be used within a FliptContext');\n  }\n\n  useLayoutEffect(() => {\n    if (!isEqual(latestConfig.current, config)) {\n      latestConfig.current = config;\n    }\n  }, [config]);\n\n  const { loading, result, error } = useTask(\n    useCallback(\n      ({ signal }) =>\n        fliptContext.flipt.batchEvaluate(requests, {\n          requestId: latestConfig.current.requestId,\n          signal,\n        }),\n      [requests, latestConfig.current],\n    ),\n  );\n\n  return { loading, match: result?.responses ?? [], error };\n}\n\nexport default useBatchEvaluation;\n","import { FliptContext } from '@/context/FliptProvider';\nimport type EvaluationConfig from '@/types/EvaluationConfig';\nimport useLazyTask from '@/utils/hooks/useLazyTask';\nimport { useCallback, useContext } from 'react';\n\nfunction useEvaluation(\n  flagKey: string,\n  { entityId, context, requestId }: EvaluationConfig,\n): {\n  evaluate: () => Promise<void>;\n  loading: boolean;\n  match: boolean;\n  error: unknown;\n} {\n  const fliptContext = useContext(FliptContext);\n\n  if (!fliptContext) {\n    throw new Error('useEvaluation must be used within a FliptContext');\n  }\n\n  const [evaluate, { loading, result, error }] = useLazyTask(\n    useCallback(\n      ({ signal }) =>\n        fliptContext.flipt.evaluate(flagKey, entityId, context, {\n          requestId,\n          signal,\n        }),\n      [flagKey, entityId, context, requestId],\n    ),\n  );\n\n  return { evaluate, loading, match: result?.match ?? false, error };\n}\n\nexport default useEvaluation;\n","import { FliptContext } from '@/context/FliptProvider';\nimport type EvaluationConfig from '@/types/EvaluationConfig';\nimport type { Request } from '@trybe/flipt-sdk';\nimport { useCallback, useContext } from 'react';\nimport type Evalutation from '@trybe/flipt-sdk/types/@types/Evaluation';\nimport useLazyTask from '@/utils/hooks/useLazyTask';\n\nfunction useLazyBatchEvaluation(\n  requests: Request[],\n  { requestId }: Pick<EvaluationConfig, 'requestId'>,\n): {\n  evaluate: () => Promise<void>;\n  loading: boolean;\n  match: Evalutation<Record<string, string>>[];\n  error: unknown;\n} {\n  const fliptContext = useContext(FliptContext);\n\n  if (!fliptContext) {\n    throw new Error(\n      'useLazyBatchEvaluation must be used within a FliptContext',\n    );\n  }\n\n  const [evaluate, { loading, result, error }] = useLazyTask(\n    useCallback(\n      ({ signal }) =>\n        fliptContext.flipt.batchEvaluate(requests, { requestId, signal }),\n      [requests],\n    ),\n  );\n\n  return { evaluate, loading, match: result?.responses ?? [], error };\n}\n\nexport default useLazyBatchEvaluation;\n","import type { ReactNode } from 'react';\nimport useEvaluation from '@/hooks/useEvaluation';\nimport type EvaluationConfig from '@/types/EvaluationConfig';\n\ntype EvaluateProps = EvaluationConfig & {\n  flagKey: string;\n  loading: ReactNode;\n  children: ((match: boolean) => ReactNode) | (ReactNode | ReactNode[]);\n};\n\nfunction Evaluate({\n  children,\n  loading: LoadingComponent,\n  flagKey,\n  context,\n  entityId,\n  requestId,\n}: EvaluateProps): ReactNode {\n  const { loading, match, error } = useEvaluation(flagKey, {\n    context,\n    entityId,\n    requestId,\n  });\n\n  if (loading) return LoadingComponent;\n\n  if (typeof children === 'function') {\n    return children(match);\n  }\n\n  if (!match || error) return null;\n\n  return children;\n}\n\nexport default Evaluate;\n"],"names":["ActionTypeEnum","useEvaluation"],"mappings":";;;;;;;;;;AAUO,IAAM,YAAY,GAAG,aAAa,CAG/B,IAAI,CAAC,CAAC;AAEhB,SAAS,aAAa,CAAC,EAGa;QAFlC,QAAQ,cAAA,EACR,GAAG,SAAA;IAEH,IAAM,KAAK,GAAG,OAAO,CAAC,cAAM,OAAA,cAAc,CAAC,EAAE,GAAG,KAAA,EAAE,CAAC,GAAA,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5D,IAAM,KAAK,GAAG,OAAO,CACnB,cAAM,QAAC;QACL,KAAK,OAAA;QACL,GAAG,KAAA;KACJ,IAAC,EACF,CAAC,KAAK,EAAE,GAAG,CAAC,CACb,CAAC;IAEF,QACE,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAAyB,EACvE;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCA;;;AAGA,IAAK,cAIJ;AAJD,WAAK,cAAc;IACjB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IACnB,yCAAuB,CAAA;AACzB,CAAC,EAJI,cAAc,KAAd,cAAc,QAIlB;AAED,uBAAe,cAAc;;ACJ7B;AACA;IAAuC,4CAAK;IAG1C,kCAAY,EAAwD;YAAtD,MAAM,YAAA,EAAE,OAAO,aAAA;QAA7B,iBAQC;QAPC,IAAM,OAAO,GAAG,uBAAqB,OAAO,eAAY,CAAC;QAEzD,QAAA,kBAAM,OAAO,CAAC,SAAC;QAEf,KAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;KACxB;IACH,+BAAC;AAAD,CAZA,CAAuC,KAAK;;ACM5C;;;;AAKA;;;;AAIA,IAAM,aAAa,GAAG;IACpB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,CAAC;IACf,qBAAqB,EAAE,KAAK;CAC7B,CAAC;AAEF;;;AAGA,SAAS,OAAO,CACd,YAA2B,EAC3B,MAAsB;;IAEtB,IAAM,KAAK,gBAAQ,YAAY,CAAE,CAAC;IAElC,QAAQ,MAAM,CAAC,IAAI;QACjB,KAAKA,gBAAc,CAAC,OAAO;YACzB,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACnC,MAAM;QACR,KAAKA,gBAAc,CAAC,MAAM;YACxB,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM;QACR,KAAKA,gBAAc,CAAC,SAAS;YAC3B,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,MAAM,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,IAAI,CAAC;YACrC,MAAM;QACR;YACE,MAAM,IAAI,wBAAwB,CAAC,EAAE,MAAM,QAAA,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;KAC1E;IAED,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;AAIA,SAAS,cAAc,CAAS,YAAiB;IAAjB,6BAAA,EAAA,iBAAiB;IAC/C,OAAO,UAAU,CAAC,OAA8B,wBAC3C,aAAa,GACb,YAAY,EACf,CAAC;AACL;;ACrEA;;;AAGA,SAAS,UAAU;IACjB,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,SAAS,CACP,cAAM,OAAA;QACJ,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;KAC5B,GAAA,EACD,EAAE,CACH,CAAC;IAEF,OAAO,WAAW,CAAC,cAAM,OAAA,UAAU,CAAC,OAAO,GAAA,EAAE,EAAE,CAAC,CAAC;AACnD;;ACdA;;;AAGA,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACtE;;ACCA;;;;;AAKA,SAAS,kBAAkB;IACzB,IAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAEvB,IAAA,KAA8B,QAAQ,CAC1C,cAAM,OAAA,IAAI,MAAM,CAAC,eAAe,EAAE,GAAA,CACnC,EAFM,UAAU,QAAA,EAAE,aAAa,QAE/B,CAAC;IAEF,IAAM,KAAK,GAAG,WAAW,CAAC;QACxB,IAAI,OAAO,EAAE,EAAE;YACb,aAAa,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;SAC7C;KACF,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,eAAe,CAAC,cAAM,OAAA,cAAM,OAAA,UAAU,CAAC,KAAK,EAAE,GAAA,GAAA,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9D,OAAO;QACL,KAAK,OAAA;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC;AACJ;;ACxBA;;;;AAIA,SAAS,WAAW,CAAI,IAAa;IAArC,iBA8BC;IA7BC,IAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IACrB,IAAA,MAAM,GAAK,kBAAkB,EAAE,OAAzB,CAA0B;IAClC,IAAA,KAAoB,cAAc,EAAK,EAAtC,KAAK,QAAA,EAAE,QAAQ,QAAuB,CAAC;IAE9C,IAAM,WAAW,GAAG,WAAW,CAAC;;;;;oBAC9B,QAAQ,CAAC,EAAE,IAAI,EAAEA,gBAAc,CAAC,OAAO,EAAE,CAAC,CAAC;;;;oBAG1B,qBAAM,IAAI,CAAC;4BACxB,MAAM,QAAA;yBACP,CAAC,EAAA;;oBAFI,MAAM,GAAG,SAEb;oBAEF,IAAI,CAAC,OAAO,EAAE;wBAAE,sBAAO;oBAEvB,QAAQ,CAAC;wBACP,MAAM,QAAA;wBACN,IAAI,EAAEA,gBAAc,CAAC,SAAS;qBAC/B,CAAC,CAAC;;;;oBAEH,IAAI,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,OAAK,CAAC;wBAAE,sBAAO;oBAE9C,QAAQ,CAAC;wBACP,KAAK,SAAA;wBACL,IAAI,EAAEA,gBAAc,CAAC,MAAM;qBAC5B,CAAC,CAAC;;;;;SAEN,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC9B;;AClCA;;;;AAIA,SAAS,OAAO,CAAI,IAAa;IACzB,IAAA,KAAuB,WAAW,CAAC,IAAI,CAAC,EAAvC,WAAW,QAAA,EAAE,KAAK,QAAqB,CAAC;IAE/C,SAAS,CAAC;QACR,WAAW,EAAE,CAAC;KACf,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,6BACK,KAAK,KACR,WAAW,aAAA,EACX,OAAO,EAAE,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,EAC3D,YAAY,EAAE,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,EAClE,qBAAqB,EAAE,IAAI,IAC3B;AACJ;;ACpBA,SAASC,eAAa,CACpB,OAAe,EACf,MAAwB;;IAExB,IAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;KACrE;IAED,eAAe,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;YAC1C,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC;SAC/B;KACF,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEP,IAAA,KAA6B,OAAO,CACxC,WAAW,CACT,UAAC,EAAU;YAAR,MAAM,YAAA;QACP,OAAA,YAAY,CAAC,KAAK,CAAC,QAAQ,CACzB,OAAO,EACP,YAAY,CAAC,OAAO,CAAC,QAAQ,EAC7B,YAAY,CAAC,OAAO,CAAC,OAAO,EAC5B;YACE,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS;YACzC,MAAM,QAAA;SACP,CACF;KAAA,EACH,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAChC,CACF,EAdO,OAAO,aAAA,EAAE,MAAM,YAAA,EAAE,KAAK,WAc7B,CAAC;IAEF,OAAO,EAAE,OAAO,SAAA,EAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC;AAC3D;;ACjCA,SAAS,kBAAkB,CACzB,QAAmB,EACnB,MAA2C;;IAM3C,IAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEpC,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;KACrE;IAED,eAAe,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;YAC1C,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC;SAC/B;KACF,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEP,IAAA,KAA6B,OAAO,CACxC,WAAW,CACT,UAAC,EAAU;YAAR,MAAM,YAAA;QACP,OAAA,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;YACzC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS;YACzC,MAAM,QAAA;SACP,CAAC;KAAA,EACJ,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CACjC,CACF,EATO,OAAO,aAAA,EAAE,MAAM,YAAA,EAAE,KAAK,WAS7B,CAAC;IAEF,OAAO,EAAE,OAAO,SAAA,EAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,mCAAI,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC;AAC5D;;ACrCA,SAAS,aAAa,CACpB,OAAe,EACf,EAAkD;;QAAhD,QAAQ,cAAA,EAAE,OAAO,aAAA,EAAE,SAAS,eAAA;IAO9B,IAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;KACrE;IAEK,IAAA,KAAyC,WAAW,CACxD,WAAW,CACT,UAAC,EAAU;YAAR,MAAM,YAAA;QACP,OAAA,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;YACtD,SAAS,WAAA;YACT,MAAM,QAAA;SACP,CAAC;KAAA,EACJ,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CACxC,CACF,EATM,QAAQ,QAAA,EAAE,UAA0B,EAAxB,OAAO,aAAA,EAAE,MAAM,YAAA,EAAE,KAAK,WASxC,CAAC;IAEF,OAAO,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC;AACrE;;ACzBA,SAAS,sBAAsB,CAC7B,QAAmB,EACnB,EAAkD;;QAAhD,SAAS,eAAA;IAOX,IAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;KACH;IAEK,IAAA,KAAyC,WAAW,CACxD,WAAW,CACT,UAAC,EAAU;YAAR,MAAM,YAAA;QACP,OAAA,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,CAAC;KAAA,EACnE,CAAC,QAAQ,CAAC,CACX,CACF,EANM,QAAQ,QAAA,EAAE,UAA0B,EAAxB,OAAO,aAAA,EAAE,MAAM,YAAA,EAAE,KAAK,WAMxC,CAAC;IAEF,OAAO,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,mCAAI,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC;AACtE;;ACvBA,SAAS,QAAQ,CAAC,EAOF;QANd,QAAQ,cAAA,EACC,gBAAgB,aAAA,EACzB,OAAO,aAAA,EACP,OAAO,aAAA,EACP,QAAQ,cAAA,EACR,SAAS,eAAA;IAEH,IAAA,KAA4BA,eAAa,CAAC,OAAO,EAAE;QACvD,OAAO,SAAA;QACP,QAAQ,UAAA;QACR,SAAS,WAAA;KACV,CAAC,EAJM,OAAO,aAAA,EAAE,KAAK,WAAA,EAAE,KAAK,WAI3B,CAAC;IAEH,IAAI,OAAO;QAAE,OAAO,gBAAgB,CAAC;IAErC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;KACxB;IAED,IAAI,CAAC,KAAK,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,QAAQ,CAAC;AAClB;;;;"}