{"version":3,"file":"nprogress.store.cjs","names":[],"sources":["../src/nprogress.store.ts"],"sourcesContent":["import { clamp } from '@mantine/hooks';\nimport { createStore, MantineStore, useStore } from '@mantine/store';\n\nfunction getIntervalProgressValue(currentProgress: number) {\n  let next = 0.5;\n\n  if (currentProgress >= 0 && currentProgress <= 20) {\n    next = 10;\n  } else if (currentProgress >= 20 && currentProgress <= 50) {\n    next = 4;\n  } else if (currentProgress >= 50 && currentProgress <= 80) {\n    next = 2;\n  } else if (currentProgress >= 80 && currentProgress <= 99) {\n    next = 1;\n  } else if (currentProgress >= 99 && currentProgress <= 100) {\n    next = 0;\n  }\n\n  return currentProgress + next;\n}\n\nexport interface NprogressState {\n  mounted: boolean;\n  progress: number;\n  interval: number;\n  step: number;\n  stepInterval: number;\n  timeouts: number[];\n}\n\nexport type NprogressStore = MantineStore<NprogressState>;\n\nexport const createNprogressStore = () =>\n  createStore<NprogressState>({\n    mounted: false,\n    progress: 0,\n    interval: 0,\n    step: 1,\n    stepInterval: 100,\n    timeouts: [],\n  });\n\nexport const useNprogress = (store: NprogressStore) => useStore(store);\n\nexport function updateNavigationProgressStateAction(\n  update: (state: NprogressState) => Partial<NprogressState>,\n  store: NprogressStore\n) {\n  const state = store.getState();\n  store.setState({ ...state, ...update(store.getState()) });\n}\n\nexport function decrementNavigationProgressAction(store: NprogressStore) {\n  updateNavigationProgressStateAction(\n    (state) => ({ progress: Math.max(state.progress - state.step, 0) }),\n    store\n  );\n}\n\nexport function setNavigationProgressAction(value: number, store: NprogressStore) {\n  updateNavigationProgressStateAction(\n    () => ({ progress: clamp(value, 0, 100), mounted: true }),\n    store\n  );\n}\n\nexport function cleanupNavigationProgressAction(store: NprogressStore) {\n  updateNavigationProgressStateAction((state) => {\n    window.clearInterval(state.interval);\n    state.timeouts.forEach((timeout) => window.clearTimeout(timeout));\n    return { timeouts: [] };\n  }, store);\n}\n\nexport function completeNavigationProgressAction(store: NprogressStore) {\n  cleanupNavigationProgressAction(store);\n\n  updateNavigationProgressStateAction((state) => {\n    const mountedTimeout = window.setTimeout(() => {\n      updateNavigationProgressStateAction(() => ({ mounted: false }), store);\n    }, 50);\n\n    const resetTimeout = window.setTimeout(() => {\n      updateNavigationProgressStateAction(() => ({ progress: 0 }), store);\n    }, state.stepInterval + 50);\n\n    return { progress: 100, timeouts: [mountedTimeout, resetTimeout] };\n  }, store);\n}\n\nexport function startNavigationProgressAction(store: NprogressStore) {\n  updateNavigationProgressStateAction(\n    (s) => ({ progress: getIntervalProgressValue(s.progress), mounted: true }),\n    store\n  );\n\n  updateNavigationProgressStateAction((state) => {\n    window.clearInterval(state.interval);\n\n    const interval = window.setInterval(() => {\n      updateNavigationProgressStateAction(\n        (s) => ({ progress: getIntervalProgressValue(s.progress), mounted: true }),\n        store\n      );\n    }, state.stepInterval);\n\n    return { interval, mounted: true };\n  }, store);\n}\n\nexport function stopNavigationProgressAction(store: NprogressStore) {\n  updateNavigationProgressStateAction((state) => {\n    window.clearInterval(state.interval);\n    return { interval: -1 };\n  }, store);\n}\n\nexport function resetNavigationProgressAction(store: NprogressStore) {\n  cleanupNavigationProgressAction(store);\n  stopNavigationProgressAction(store);\n  updateNavigationProgressStateAction(() => ({ progress: 0, mounted: false }), store);\n}\n\nexport function incrementNavigationProgressAction(store: NprogressStore) {\n  updateNavigationProgressStateAction((state) => {\n    const nextValue = Math.min(state.progress + state.step, 100);\n    const nextMounted = nextValue !== 100 && nextValue !== 0;\n\n    if (!nextMounted) {\n      const timeout = window.setTimeout(\n        () => resetNavigationProgressAction(store),\n        state.stepInterval + 50\n      );\n\n      return {\n        progress: nextValue,\n        mounted: nextMounted,\n        timeouts: [...state.timeouts, timeout],\n      };\n    }\n\n    return {\n      progress: nextValue,\n      mounted: nextMounted,\n    };\n  }, store);\n}\n\nexport function createNprogress() {\n  const store = createNprogressStore();\n  const actions = {\n    start: () => startNavigationProgressAction(store),\n    stop: () => stopNavigationProgressAction(store),\n    reset: () => resetNavigationProgressAction(store),\n    set: (value: number) => setNavigationProgressAction(value, store),\n    increment: () => incrementNavigationProgressAction(store),\n    decrement: () => decrementNavigationProgressAction(store),\n    complete: () => completeNavigationProgressAction(store),\n    cleanup: () => cleanupNavigationProgressAction(store),\n  };\n\n  return [store, actions] as const;\n}\n\nexport const [nprogressStore, nprogress] = createNprogress();\nexport const {\n  start: startNavigationProgress,\n  stop: stopNavigationProgress,\n  reset: resetNavigationProgress,\n  set: setNavigationProgress,\n  increment: incrementNavigationProgress,\n  decrement: decrementNavigationProgress,\n  complete: completeNavigationProgress,\n  cleanup: cleanupNavigationProgress,\n} = nprogress;\n"],"mappings":"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"}