{"version":3,"file":"app.cjs","names":["DATA_ATTRIBUTE","FORM","IS_BTN_SUBMIT_RZL_PROGRESS","IS_METHOD_POST_FORM","IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION","DATA_ATTRIBUTE","SETTING_CONFIGS_PROGRESS_BAR","validationPropsPgBar","RzlProgress","isSameHostName","isAnchorOfCurrentUrl","isHashAnchor","toAbsoluteURL","DATA_RZL_PROGRESS","defaultOptionsProgressBar","RzlProgress","WithSuspense"],"sources":["../../src/progress-bar/utils/attributes.ts","../../src/progress-bar/utils/anchor.ts","../../src/progress-bar/components/index.tsx","../../src/progress-bar/hooks/index.ts","../../src/progress-bar/app.ts"],"sourcesContent":["import { DATA_ATTRIBUTE } from \"../constants\";\n\nconst { FORM, CHILD_BUTTON_SUBMIT, IS_BTN_SUBMIT_RZL_PROGRESS } =\n  DATA_ATTRIBUTE;\nconst { IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION, IS_METHOD_POST_FORM } =\n  FORM;\n\n/** Utils for `progress-bar`.\n *\n * @internal\n */\nexport const setNestedAttribute = (\n  node: ChildNode | Element,\n  type: \"delete\" | \"add\",\n  attr: { qualifiedName: string; value: string }\n) => {\n  if (\n    node.childNodes.length &&\n    node instanceof Element &&\n    node.children.length\n  ) {\n    node.childNodes.forEach((child) => {\n      if (child.nodeName === \"#text\") return;\n      if (node instanceof Element) {\n        if (type === \"add\") {\n          node.setAttribute(CHILD_BUTTON_SUBMIT, \"true\");\n        } else {\n          node.removeAttribute(CHILD_BUTTON_SUBMIT);\n        }\n      }\n\n      setNestedAttribute(child, type, attr);\n    });\n  } else {\n    if (node instanceof Element) {\n      if (type === \"add\") {\n        node.setAttribute(CHILD_BUTTON_SUBMIT, \"true\");\n      } else {\n        node.removeAttribute(CHILD_BUTTON_SUBMIT);\n      }\n    }\n  }\n};\n\n/** Utils for `progress-bar`.\n *\n * @internal\n */\nexport const setAttributeChildSubmitBtn = (\n  docs: Document,\n  type: \"delete\" | \"add\" = \"add\"\n) => {\n  docs?.querySelectorAll(\"button\")?.forEach((doc) => {\n    if (\n      doc.type === \"submit\" &&\n      IS_BTN_SUBMIT_RZL_PROGRESS(doc) &&\n      (IS_METHOD_POST_FORM(doc.form) ||\n        IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION(doc.form))\n    )\n      doc.childNodes.forEach((e) => {\n        setNestedAttribute(e, type, {\n          value: \"true\",\n          qualifiedName: CHILD_BUTTON_SUBMIT\n        });\n      });\n  });\n};\n","import { isString } from \"@rzl-zone/utils-js/predicates\";\nimport { DATA_ATTRIBUTE } from \"../constants\";\n\n/** @internal */\nfunction parsePath(path: string) {\n  if (!isString(path)) path = \"\";\n\n  const hashIndex = path.indexOf(\"#\");\n  const queryIndex = path.indexOf(\"?\");\n  const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n\n  if (hasQuery || hashIndex > -1) {\n    return {\n      pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n      query: hasQuery\n        ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n        : \"\",\n      hash: hashIndex > -1 ? path.slice(hashIndex) : \"\"\n    };\n  }\n\n  return { pathname: path, query: \"\", hash: \"\" };\n}\n\n/** @internal */\nfunction addPathPrefix(path: string, prefix?: string) {\n  if (!path.startsWith(\"/\") || !prefix) {\n    return path;\n  }\n\n  const { pathname, query, hash } = parsePath(path);\n  return `${prefix}${pathname}${query}${hash}`;\n}\n\n/** @internal */\nexport function getAnchorProperty<\n  T extends HTMLAnchorElement | SVGAElement,\n  K extends keyof T,\n  P extends T[K]\n>(a: T, key: K): P extends SVGAnimatedString ? string : P {\n  if (typeof key === \"string\" && key === DATA_ATTRIBUTE.PREVENT_RZL_PROGRESS) {\n    const dataKey = key.substring(5) as keyof DOMStringMap;\n    return a.dataset[dataKey] as P extends SVGAnimatedString ? string : P;\n  }\n\n  const prop = a[key];\n\n  if (prop instanceof SVGAnimatedString) {\n    const value = prop.baseVal;\n\n    if (key === \"href\")\n      return addPathPrefix(\n        value,\n        location.origin\n      ) as P extends SVGAnimatedString ? string : P;\n\n    return value as P extends SVGAnimatedString ? string : P;\n  }\n\n  return prop as P extends SVGAnimatedString ? string : P;\n}\n\n/** * Find the closest anchor to trigger\n *\n * @param element {HTMLElement | null}\n * @returns element {Element}\n *\n * @internal\n */\nexport function findClosestAnchor(\n  element: HTMLElement | null\n): HTMLAnchorElement | null {\n  while (element && element.tagName.toLowerCase() !== \"a\") {\n    element = element.parentElement;\n  }\n  return element as HTMLAnchorElement;\n}\n","\"use client\";\n\nimport {\n  type EffectCallback,\n  memo,\n  useCallback,\n  useEffect,\n  useRef\n} from \"react\";\nimport { usePathname, useSearchParams } from \"next/navigation\";\n\nimport { delay as delaying } from \"@rzl-zone/utils-js/promises\";\nimport { isBoolean, isString } from \"@rzl-zone/utils-js/predicates\";\nimport {\n  disableUserInteraction,\n  enableUserInteraction\n} from \"@rzl-zone/utils-js/events\";\n\nimport {\n  DATA_ATTRIBUTE,\n  DATA_RZL_PROGRESS,\n  SETTING_CONFIGS_PROGRESS_BAR\n} from \"../constants\";\nimport { RzlProgress } from \"../utils/rzlProgress\";\nimport { validationPropsPgBar } from \"../utils/validation\";\nimport { useCssTopLoader } from \"../hooks/useCssTopLoader\";\n\nimport type { RzlNextProgressBarProps } from \"../types\";\nimport {\n  isAnchorOfCurrentUrl,\n  isHashAnchor,\n  isSameHostName,\n  toAbsoluteURL\n} from \"../utils/pathURL\";\nimport { setAttributeChildSubmitBtn } from \"../utils/attributes\";\nimport { findClosestAnchor } from \"../utils/anchor\";\n\nconst {\n  FORM,\n  BUTTON_SUBMIT,\n  IS_BTN_SUBMIT_RZL_PROGRESS,\n  IS_PREVENT_RZL_PROGRESS,\n  IS_VALID_BTN_SUBMIT_RZL_PROGRESS\n} = DATA_ATTRIBUTE;\nconst { MAXIMUM_COUNT_LIMIT_INTERVAL } = SETTING_CONFIGS_PROGRESS_BAR;\nconst { IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION, IS_METHOD_POST_FORM } =\n  FORM;\n\n/** ------------------------------------------------------------------\n * * ***Don't use import from here, because need Suspense (App Router).***\n * ------------------------------------------------------------------\n * **If you forcing to use from this components, you need wrapping with Suspense.**\n *\n * ⚠️ **Deprecated:**\n *    - Use `import { RzlNextAppProgressBar } from \"@rzl-zone/next-kit/progress-bar/app\";` instead, because include `WithSuspense` in there.\n */\nconst InitNextAppProgressBar = memo((props: RzlNextProgressBarProps) => {\n  const {\n    id,\n    name,\n    nonce,\n    style,\n    colorSpinner,\n    classNameIfLoading,\n    spinnerSpeed,\n    spinnerSize,\n    spinnerEase,\n    color,\n    height,\n    zIndex,\n    showAtBottom,\n    startPosition,\n    delay,\n    stopDelay,\n    showForHashAnchor,\n    options\n  } = validationPropsPgBar(props);\n\n  const timer = useRef<NodeJS.Timeout | number>(0);\n  const searchCounting = useRef<number>(1);\n\n  const pathname = usePathname();\n  const searchParams = useSearchParams();\n\n  useCssTopLoader({\n    id,\n    name,\n    nonce,\n    style,\n    color,\n    height,\n    colorSpinner,\n    spinnerEase,\n    zIndex,\n    spinnerSize,\n    spinnerSpeed,\n    showAtBottom\n  });\n\n  const startProgress = useCallback(\n    (\n      /**\n       * @default true\n       */\n      withDelay = true\n    ) => {\n      if (!isBoolean(withDelay)) withDelay = true;\n      if (RzlProgress.isStarted() || RzlProgress.isRendered()) return;\n\n      RzlProgress.configure(options);\n\n      if (timer.current) clearTimeout(timer.current);\n      timer.current = setTimeout(\n        () => {\n          if (startPosition > 0) RzlProgress.set(startPosition);\n\n          RzlProgress.start();\n          disableUserInteraction(classNameIfLoading);\n        },\n        withDelay ? delay : 1\n      );\n    },\n    [options]\n  );\n\n  const stopProgress = useCallback(\n    (\n      /**\n       * @default true\n       */\n      withDelay = true,\n      /**\n       * @default false\n       */\n      force?: boolean\n    ) => {\n      if (!isBoolean(withDelay)) withDelay = true;\n      if (!isBoolean(force)) force = false;\n\n      if (timer.current) clearTimeout(timer.current);\n\n      timer.current = setTimeout(\n        () => {\n          enableUserInteraction(classNameIfLoading);\n\n          if (!(RzlProgress.isStarted() || RzlProgress.isRendered())) return;\n\n          RzlProgress.done(force);\n        },\n        withDelay ? stopDelay : 1\n      );\n\n      RzlProgress.configure(options);\n    },\n    [options]\n  );\n\n  //todo: DEPRECATED - unused anymore\n  // const showingInitial = useCallback(async () => {\n  //   if (showProgressOnInitial?.enabled) {\n  //     await startProgress();\n  //     await delaying(showProgressOnInitial.delay);\n  //     await stopProgress();\n  //   }\n  // }, []);\n\n  const setAttrChildSubmitBtn = useCallback(\n    (docs: Document, type: \"delete\" | \"add\" = \"add\") => {\n      return setAttributeChildSubmitBtn(docs, type);\n    },\n    []\n  );\n\n  useEffect(() => {\n    stopProgress();\n  }, [pathname, searchParams]);\n\n  useEffect(() => {\n    const actionsIdTimeInterval: NodeJS.Timeout | undefined = setInterval(\n      () => {\n        if (searchCounting.current < MAXIMUM_COUNT_LIMIT_INTERVAL) {\n          if (document.querySelectorAll(`[${BUTTON_SUBMIT}]`).length) {\n            document\n              .querySelectorAll(`[${BUTTON_SUBMIT}]`)\n              ?.forEach((button) => {\n                if (IS_VALID_BTN_SUBMIT_RZL_PROGRESS(button)) {\n                  const isBtnSubmitFormValid =\n                    button.form &&\n                    (IS_METHOD_POST_FORM(button.form) ||\n                      IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION(button.form));\n\n                  if (isBtnSubmitFormValid) {\n                    setAttrChildSubmitBtn(document);\n\n                    searchCounting.current = MAXIMUM_COUNT_LIMIT_INTERVAL;\n\n                    return clearInterval(actionsIdTimeInterval);\n                  } else {\n                    return (searchCounting.current =\n                      searchCounting.current + 1);\n                  }\n                }\n              });\n          } else {\n            return (searchCounting.current = searchCounting.current + 1);\n          }\n        } else {\n          searchCounting.current = MAXIMUM_COUNT_LIMIT_INTERVAL;\n          return clearInterval(actionsIdTimeInterval);\n        }\n      },\n      50\n    );\n\n    return () => {\n      if (actionsIdTimeInterval) {\n        clearInterval(actionsIdTimeInterval);\n      }\n\n      searchCounting.current = 1;\n    };\n  }, [pathname, searchParams]);\n\n  //todo: DEPRECATED - unused anymore\n  /** * ref for start initial loader only */\n  // useEffect(() => {\n  //   showingInitial();\n  // }, []);\n\n  /** * ClickHandler To Trigger RzlProgress\n   *\n   * @param event {MouseEvent}\n   * @returns {void}\n   */\n  const handleClick = useCallback(async (event: MouseEvent) => {\n    try {\n      const target = event.target as HTMLElement;\n      const anchor = findClosestAnchor(target);\n      const newUrl = anchor?.href;\n\n      let preventProgress =\n        IS_PREVENT_RZL_PROGRESS(target) || IS_PREVENT_RZL_PROGRESS(anchor);\n\n      let isButtonSubmitForm = IS_BTN_SUBMIT_RZL_PROGRESS(target);\n\n      //todo: DEPRECATED - unused anymore\n      // let isButtonChildSubmitForm = IS_CHILD_BTN_SUBMIT_RZL_PROGRESS(target);\n\n      if (!preventProgress || !isButtonSubmitForm) {\n        let element: HTMLButtonElement | HTMLElement | Element | null = target;\n\n        if (isButtonSubmitForm && IS_VALID_BTN_SUBMIT_RZL_PROGRESS(element)) {\n          const isBtnSubmitForm =\n            IS_METHOD_POST_FORM(element.form) ||\n            IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION(element.form);\n\n          while (element) {\n            if (isBtnSubmitForm) {\n              preventProgress = false;\n              isButtonSubmitForm = true;\n              break;\n            } else {\n              preventProgress = true;\n              isButtonSubmitForm = false;\n\n              element = element.parentElement as unknown as HTMLButtonElement;\n            }\n          }\n        } else {\n          if (element.hasAttribute(DATA_ATTRIBUTE.CHILD_BUTTON_SUBMIT)) {\n            while (element && element.tagName.toLowerCase() !== \"a\") {\n              if (IS_BTN_SUBMIT_RZL_PROGRESS(element.parentElement)) {\n                if (\n                  element.parentElement instanceof HTMLButtonElement &&\n                  (IS_METHOD_POST_FORM(element.parentElement.form) ||\n                    IS_AUTO_GENERATE_ERROR_NEXTJS_SERVER_ACTION(\n                      element.parentElement.form\n                    ))\n                ) {\n                  preventProgress = false;\n                  isButtonSubmitForm = true;\n                  // isButtonChildSubmitForm = true;\n                  break;\n                } else {\n                  preventProgress = true;\n                  isButtonSubmitForm = false;\n                  // isButtonChildSubmitForm = false;\n                  break;\n                }\n              }\n              element = element.parentElement;\n            }\n          } else {\n            while (element && element.tagName.toLowerCase() !== \"a\") {\n              if (IS_PREVENT_RZL_PROGRESS(element.parentElement)) {\n                preventProgress = true;\n                break;\n              }\n              element = element.parentElement;\n            }\n          }\n        }\n      }\n\n      if (preventProgress) return;\n\n      //todo: DEPRECATED - unused anymore\n      // if ((isButtonSubmitForm || isButtonChildSubmitForm) && !newUrl) {\n      //   await startProgress();\n      //   await delaying(30000);\n      //   return await stopProgress();\n      // }\n\n      if (newUrl && isString(newUrl)) {\n        const currentUrl = window.location.href;\n        const isExternalLink = anchor.target === \"_blank\";\n\n        // Check for Special Schemes\n        const isSpecialScheme = [\n          \"tel:\",\n          \"mailto:\",\n          \"sms:\",\n          \"blob:\",\n          \"download:\"\n        ].some((scheme) => newUrl.startsWith(scheme));\n\n        const notSameHost = !isSameHostName(window.location.href, anchor.href);\n        if (notSameHost) return;\n\n        const isAnchorOrHashAnchor =\n          isAnchorOfCurrentUrl(currentUrl, newUrl) ||\n          isHashAnchor(window.location.href, anchor.href);\n        if (!showForHashAnchor && isAnchorOrHashAnchor) return;\n\n        if (\n          newUrl === currentUrl ||\n          isExternalLink ||\n          isSpecialScheme ||\n          isAnchorOrHashAnchor ||\n          event.ctrlKey ||\n          event.metaKey ||\n          event.shiftKey ||\n          event.altKey ||\n          !toAbsoluteURL(anchor.href).startsWith(\"http\")\n        ) {\n          startProgress();\n          await delaying(100);\n          stopProgress();\n        } else {\n          startProgress();\n        }\n      }\n    } catch (err) {\n      // Log the error in development only!\n      if (process.env[\"NODE_ENV\"] === \"development\") {\n        console.error(\"ComponentInitRzlNextProgressBar error: \", err);\n      }\n\n      startProgress();\n      stopProgress();\n    } finally {\n      // setAttrChildSubmitBtn(document, \"delete\");\n    }\n  }, []);\n\n  useEffect((): ReturnType<EffectCallback> => {\n    const nProgressClass: NodeListOf<HTMLHtmlElement> =\n      document.querySelectorAll(\"html\");\n\n    const removeRzlProgressClass = (): void => {\n      return nProgressClass.forEach((el: Element) =>\n        el.classList.remove(DATA_RZL_PROGRESS.ON_BUSY)\n      );\n    };\n\n    /** * Complete TopLoader Progress on adding new entry to history stack\n     *\n     * @param {History}\n     * @returns {void}\n     */\n    ((history: History): void => {\n      const pushState = history.pushState;\n      history.pushState = (...args) => {\n        stopProgress();\n        removeRzlProgressClass();\n        setAttrChildSubmitBtn(document);\n        return pushState.apply(history, args);\n      };\n    })(window.history);\n\n    /** * Complete TopLoader Progress on replacing current entry of history\n     * stack\n     * @param {History}\n     * @returns {void}\n     */\n    ((history: History): void => {\n      const replaceState = history.replaceState;\n      history.replaceState = (...args) => {\n        stopProgress();\n        removeRzlProgressClass();\n        setAttrChildSubmitBtn(document);\n        return replaceState.apply(history, args);\n      };\n    })(window.history);\n\n    function handlePageHide() {\n      stopProgress();\n      removeRzlProgressClass();\n    }\n\n    /** * Handle Browser Back and Forth Navigation  */\n    function handleBackAndForth() {\n      stopProgress();\n      setAttrChildSubmitBtn(document);\n    }\n\n    // Add the global click event listener\n    document.addEventListener(\"click\", handleClick);\n    window.addEventListener(\"pagehide\", handlePageHide);\n    window.addEventListener(\"popstate\", handleBackAndForth);\n\n    // Clean up the global click event listener when the component is unmounted\n    return () => {\n      if (timer.current) clearTimeout(timer.current);\n      document.removeEventListener(\"click\", handleClick);\n      window.removeEventListener(\"pagehide\", handlePageHide);\n      window.removeEventListener(\"popstate\", handleBackAndForth);\n    };\n  }, []);\n\n  // No need to return anything since the style is applied directly\n  return null;\n});\n\nInitNextAppProgressBar.displayName = `InitRzlzoneNextAppProgressBar(${\n  InitNextAppProgressBar.displayName ??\n  InitNextAppProgressBar.name ??\n  \"Component\"\n})`;\n\nexport default InitNextAppProgressBar;\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useRouter as useNextRouter } from \"next/navigation\";\n\nimport { delay } from \"@rzl-zone/utils-js/promises\";\nimport { isInteger, isPlainObject } from \"@rzl-zone/utils-js/predicates\";\nimport { assertIsBoolean, assertIsString } from \"@rzl-zone/utils-js/assertions\";\nimport {\n  enableUserInteraction,\n  disableUserInteraction\n} from \"@rzl-zone/utils-js/events\";\n\nimport { RzlProgress } from \"../utils/rzlProgress\";\nimport { defaultOptionsProgressBar } from \"../constants\";\n\nimport type {\n  OptionsUseRouter,\n  AppRouterInstance,\n  NavigateOptionsUseRouter,\n  NavigateFwdOptionsUseRouter\n} from \"../types\";\n\n/** ------------------------------------------------------------------\n * * ***Custom useRouter hook to work with `RzlNextAppProgressBar`, compatible with `App Router` only.***\n * ------------------------------------------------------------------\n */\nexport const useRouter = <\n  CustomRouter extends AppRouterInstance = AppRouterInstance\n>(\n  customRouter?: () => CustomRouter\n): AppRouterInstance => {\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  const router = customRouter ? customRouter() : useNextRouter();\n\n  const startProgress = useCallback(\n    ({\n      disableProgressBar = false,\n      disablePreventAnyAction = false,\n      options = defaultOptionsProgressBar\n    }: NavigateOptionsUseRouter = {}) => {\n      if (!isPlainObject(options)) options = defaultOptionsProgressBar;\n\n      const { startPosition, ...restNpOptions } = options;\n\n      assertIsBoolean(disableProgressBar, {\n        message: ({ currentType, validType }) => {\n          return `Props \\`disableProgressBar\\` expected \\`${validType}\\`, but received: \\`${currentType}\\`.`;\n        }\n      });\n      assertIsBoolean(disablePreventAnyAction, {\n        message: ({ currentType, validType }) => {\n          return `Props \\`disablePreventAnyAction\\` expected \\`${validType}\\`, but received: \\`${currentType}\\`.`;\n        }\n      });\n\n      if (\n        !disableProgressBar &&\n        !RzlProgress.isStarted() &&\n        !RzlProgress.isRendered()\n      ) {\n        RzlProgress.configure(restNpOptions);\n\n        if (startPosition && startPosition > 0) {\n          RzlProgress.set(startPosition);\n        }\n\n        if (!disablePreventAnyAction) {\n          disableUserInteraction();\n        }\n\n        RzlProgress.start();\n      }\n    },\n    [router]\n  );\n\n  const stopProgress = useCallback(() => {\n    enableUserInteraction();\n\n    if (!RzlProgress.isStarted() || !RzlProgress.isRendered()) return;\n\n    RzlProgress.done();\n  }, []);\n\n  const replace = useCallback(\n    (href: string, options?: NavigateOptionsUseRouter) => {\n      assertIsString(href, {\n        message: ({ currentType, validType }) => {\n          return `Props \\`href\\` expected \\`${validType}\\`, but received: \\`${currentType}\\`.`;\n        }\n      });\n\n      if (!isPlainObject(options)) {\n        options = { scroll: true, options: defaultOptionsProgressBar };\n      }\n\n      startProgress(options);\n\n      router.replace(href, { ...options });\n    },\n    [router]\n  );\n\n  const push = useCallback(\n    (href: string, options?: NavigateOptionsUseRouter) => {\n      assertIsString(href, {\n        message: ({ currentType, validType }) => {\n          return `Props \\`href\\` expected \\`${validType}\\`, but received: \\`${currentType}\\`.`;\n        }\n      });\n\n      if (!isPlainObject(options)) {\n        options = { scroll: true, options: defaultOptionsProgressBar };\n      }\n\n      startProgress(options);\n\n      router.push(href, { ...options });\n    },\n    [router]\n  );\n\n  const back = useCallback(\n    (options?: OptionsUseRouter) => {\n      if (!isPlainObject(options)) {\n        options = { options: defaultOptionsProgressBar };\n      }\n\n      startProgress(options);\n\n      router.back();\n    },\n    [router]\n  );\n\n  const refresh = useCallback(\n    (options?: OptionsUseRouter) => {\n      if (!isPlainObject(options)) {\n        options = { options: defaultOptionsProgressBar };\n      }\n\n      startProgress(options);\n\n      router.refresh();\n    },\n    [router]\n  );\n\n  const forward = useCallback(\n    async (options?: NavigateFwdOptionsUseRouter) => {\n      if (!isPlainObject(options)) {\n        options = { options: defaultOptionsProgressBar };\n      }\n\n      let { delayStops = 100 } = options;\n\n      if (!isInteger(delayStops)) delayStops = 100;\n\n      startProgress(options);\n\n      router.forward();\n\n      await delay(delayStops);\n      stopProgress();\n    },\n    [router]\n  );\n\n  return { ...router, push, replace, back, refresh, forward };\n};\n","\"use client\";\n\nimport { WithSuspense } from \"@/hoc\";\nimport InitNextAppProgressBar from \"./components\";\n\n/** ------------------------------------------------------------------\n * * ***Component: `RzlNextAppProgressBar`.***\n * ------------------------------------------------------------------\n * **A lightweight progress bar optimized for the Next.js `App Router`.**\n *\n * This component is compatible **with the App Router only** and is not\n * intended for use inside the Pages Router.\n *\n * Wrapped with `WithSuspense` to ensure full support for Suspense and\n * lazy-loaded UI boundaries also using `React.memo` to prevent unnecessary\n * re-renders and improve performance during client-side navigation events.\n *\n * - **Features**:\n *    - Renders a lightweight progress bar during route transitions.\n *    - Fully configurable via `RzlNextProgressBarProps`.\n *    - Supports optional delays, force-stop, and UI interaction locking.\n *    - Compatible with client-side navigation and Suspense.\n *    - Designed for seamless integration with Next.js App Router.\n *\n * @returns {React.JSX.Element} Returns the `RzlNextAppProgressBar` component.\n *\n * @example\n * * Basic usage:\n * ```tsx\n * import { RzlNextAppProgressBar } from \"@rzl-zone/next-kit/progress-bar/app\";\n *\n * export default function Layout({ children }: React.ReactNode) {\n *   return (\n *     <html>\n *       <body>\n *         <RzlNextAppProgressBar />\n *         {children}\n *       </body>\n *     </html>\n *   );\n * }\n * ```\n */\nexport const RzlNextAppProgressBar = WithSuspense(InitNextAppProgressBar);\nexport { InitNextAppProgressBar };\nexport { useRouter } from \"./hooks\";\n"],"mappings":"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"}
