├── .eslintignore ├── .eslintrc.json ├── .github ├── FUNDING.yml ├── dependabot.yml ├── problemMatchers │ ├── eslint.json │ └── tsc.json └── workflows │ ├── build-deploy.yml │ └── continuous-integration.yml ├── .gitignore ├── .prettierrc.json ├── .vscode └── settings.json ├── .yarn ├── plugins │ └── @yarnpkg │ │ ├── plugin-interactive-tools.cjs │ │ └── plugin-typescript.cjs └── releases │ └── yarn-3.2.4.cjs ├── .yarnrc.yml ├── CHANGELOG.md ├── JSR.md ├── LICENSE ├── README.md ├── deno.d.ts ├── deno.json ├── deno.lock ├── package.json ├── src ├── app.ts ├── hooks │ └── useTopLoader.tsx ├── index.tsx └── pages.tsx ├── tsconfig.json ├── tsup.config.ts └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | dist/ -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["@typescript-eslint"], 3 | "extends": [ 4 | "eslint:recommended", 5 | "plugin:@typescript-eslint/eslint-recommended", 6 | "plugin:@typescript-eslint/recommended" 7 | ], 8 | "rules": { 9 | "quotes": ["error", "single"], 10 | "semi": ["error", "always"], 11 | "eol-last": ["error", "always"], 12 | "comma-dangle": [ 13 | "error", 14 | { 15 | "arrays": "always-multiline", 16 | "objects": "always-multiline", 17 | "imports": "always-multiline", 18 | "exports": "always-multiline", 19 | "functions": "never" 20 | } 21 | ], 22 | "arrow-parens": ["error", "always"], 23 | "no-trailing-spaces": ["error", { "skipBlankLines": true }], 24 | "prefer-const": "warn", 25 | "accessor-pairs": "off", 26 | "no-async-promise-executor": "off", 27 | "no-unused-vars": "off", 28 | "node/no-missing-require": "off", 29 | "no-console": "warn" 30 | } 31 | } -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding platforms 2 | 3 | github: thesgj 4 | thanks_dev: thesgj 5 | buy_me_a_coffee: thesgj 6 | open_collective: nextjs-toploader 7 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Example configuration file that: 2 | # - Ignores lodash dependency 3 | # - Disables version-updates 4 | 5 | version: 2 6 | updates: 7 | - package-ecosystem: "npm" 8 | directory: "/" 9 | schedule: 10 | interval: "daily" 11 | ignore: 12 | - dependency-name: "lodash" 13 | # For Lodash, ignore all updates 14 | # Disable version updates for npm dependencies 15 | open-pull-requests-limit: 0 16 | -------------------------------------------------------------------------------- /.github/problemMatchers/eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "eslint-stylish", 5 | "pattern": [ 6 | { 7 | "regexp": "^([^\\s].*)$", 8 | "file": 1 9 | }, 10 | { 11 | "regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$", 12 | "line": 1, 13 | "column": 2, 14 | "severity": 3, 15 | "message": 4, 16 | "code": 5, 17 | "loop": true 18 | } 19 | ] 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /.github/problemMatchers/tsc.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "tsc", 5 | "pattern": [ 6 | { 7 | "regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$", 8 | "file": 1, 9 | "location": 2, 10 | "severity": 3, 11 | "code": 4, 12 | "message": 5 13 | } 14 | ] 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /.github/workflows/build-deploy.yml: -------------------------------------------------------------------------------- 1 | name: Publish nextjs-toploader to npmjs & jsr.io 2 | on: 3 | release: 4 | types: [published] 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | permissions: 10 | contents: write 11 | id-token: write 12 | 13 | steps: 14 | - name: Checkout Repository 15 | uses: actions/checkout@v4 16 | 17 | - name: Find yarn cache location 18 | id: yarn-cache 19 | run: echo "::set-output name=dir::$(yarn cache dir)" 20 | 21 | - name: JS package cache 22 | uses: actions/cache@v4 23 | with: 24 | path: $(( steps.yarn-cache.outputs.dir )) 25 | key: $(( runner.os ))-yarn-$(( hashFiles('**/yarn.lock') )) 26 | restore-keys: | 27 | $(( runner.os ))-yarn- 28 | 29 | - name: Install Dependencies 30 | run: yarn install 31 | 32 | - name: Compile the Library 33 | run: yarn build-lib 34 | # Setup .npmrc file to publish to npm 35 | - name: Setup the node 36 | uses: actions/setup-node@v4 37 | with: 38 | node-version: '20.11.1' 39 | registry-url: 'https://registry.npmjs.org' 40 | - name: Publish nextjs-toploader on npm 41 | run: npm publish --access public --provenance 42 | continue-on-error: true 43 | env: 44 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 45 | -------------------------------------------------------------------------------- /.github/workflows/continuous-integration.yml: -------------------------------------------------------------------------------- 1 | name: Continuous Integration 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | 9 | jobs: 10 | Linting: 11 | name: Linting 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout Project 15 | uses: actions/checkout@v4 16 | - name: Add problem matcher 17 | run: echo "::add-matcher::.github/problemMatchers/eslint.json" 18 | 19 | - uses: actions/checkout@v4 20 | 21 | - name: Find yarn cache location 22 | id: yarn-cache 23 | run: echo "::set-output name=dir::$(yarn cache dir)" 24 | 25 | - name: JS package cache 26 | uses: actions/cache@v4 27 | with: 28 | path: $(( steps.yarn-cache.outputs.dir )) 29 | key: $(( runner.os ))-yarn-$(( hashFiles('**/yarn.lock') )) 30 | restore-keys: | 31 | $(( runner.os ))-yarn- 32 | 33 | - name: Install Dependencies 34 | run: yarn install 35 | 36 | - name: Run ESLint 37 | run: yarn lint --fix=false 38 | 39 | Building: 40 | name: Compile source code 41 | runs-on: ubuntu-latest 42 | steps: 43 | - name: Checkout Project 44 | uses: actions/checkout@v4 45 | - name: Add problem matcher 46 | run: echo "::add-matcher::.github/problemMatchers/tsc.json" 47 | 48 | - uses: actions/checkout@v4 49 | 50 | - name: Find yarn cache location 51 | id: yarn-cache 52 | run: echo "::set-output name=dir::$(yarn cache dir)" 53 | 54 | - name: JS package cache 55 | uses: actions/cache@v4 56 | with: 57 | path: $(( steps.yarn-cache.outputs.dir )) 58 | key: $(( runner.os ))-yarn-$(( hashFiles('**/yarn.lock') )) 59 | restore-keys: | 60 | $(( runner.os ))-yarn- 61 | 62 | - name: Install Dependencies 63 | run: yarn install 64 | 65 | - name: Typecheck And Build Code 66 | run: yarn typecheck && yarn build-lib 67 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### NextJS ### 2 | # dependencies 3 | /node_modules 4 | /.pnp 5 | .pnp.js 6 | 7 | # testing 8 | /coverage 9 | 10 | # next.js 11 | /.next/ 12 | /out/ 13 | 14 | # production 15 | /build 16 | /dist 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | 38 | ### react ### 39 | .DS_* 40 | *.log 41 | logs 42 | **/*.backup.* 43 | **/*.back.* 44 | 45 | node_modules 46 | bower_components 47 | 48 | *.sublime* 49 | 50 | psd 51 | thumb 52 | sketch 53 | 54 | # yarn v2 55 | .yarn/cache 56 | .yarn/unplugged 57 | .yarn/build-state.yml 58 | .yarn/install-state.gz 59 | .pnp.* 60 | 61 | # Optional eslint cache 62 | .eslintcache 63 | 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "singleQuote": true, 4 | "quoteProps": "as-needed", 5 | "endOfLine": "lf" 6 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "editor.formatOnSave": true 4 | } 5 | -------------------------------------------------------------------------------- /.yarn/plugins/@yarnpkg/plugin-typescript.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | //prettier-ignore 3 | module.exports = { 4 | name: "@yarnpkg/plugin-typescript", 5 | factory: function (require) { 6 | var plugin=(()=>{var Ft=Object.create,H=Object.defineProperty,Bt=Object.defineProperties,Kt=Object.getOwnPropertyDescriptor,zt=Object.getOwnPropertyDescriptors,Gt=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,$t=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty,De=Object.prototype.propertyIsEnumerable;var Re=(e,t,r)=>t in e?H(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,u=(e,t)=>{for(var r in t||(t={}))ne.call(t,r)&&Re(e,r,t[r]);if(Q)for(var r of Q(t))De.call(t,r)&&Re(e,r,t[r]);return e},g=(e,t)=>Bt(e,zt(t)),Lt=e=>H(e,"__esModule",{value:!0});var R=(e,t)=>{var r={};for(var s in e)ne.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(e!=null&&Q)for(var s of Q(e))t.indexOf(s)<0&&De.call(e,s)&&(r[s]=e[s]);return r};var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Vt=(e,t)=>{for(var r in t)H(e,r,{get:t[r],enumerable:!0})},Qt=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Gt(t))!ne.call(e,s)&&s!=="default"&&H(e,s,{get:()=>t[s],enumerable:!(r=Kt(t,s))||r.enumerable});return e},C=e=>Qt(Lt(H(e!=null?Ft($t(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var xe=I(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});function _(e){let t=[...e.caches],r=t.shift();return r===void 0?ve():{get(s,n,a={miss:()=>Promise.resolve()}){return r.get(s,n,a).catch(()=>_({caches:t}).get(s,n,a))},set(s,n){return r.set(s,n).catch(()=>_({caches:t}).set(s,n))},delete(s){return r.delete(s).catch(()=>_({caches:t}).delete(s))},clear(){return r.clear().catch(()=>_({caches:t}).clear())}}}function ve(){return{get(e,t,r={miss:()=>Promise.resolve()}){return t().then(n=>Promise.all([n,r.miss(n)])).then(([n])=>n)},set(e,t){return Promise.resolve(t)},delete(e){return Promise.resolve()},clear(){return Promise.resolve()}}}J.createFallbackableCache=_;J.createNullCache=ve});var Ee=I(($s,qe)=>{qe.exports=xe()});var Te=I(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});function Jt(e={serializable:!0}){let t={};return{get(r,s,n={miss:()=>Promise.resolve()}){let a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);let o=s(),d=n&&n.miss||(()=>Promise.resolve());return o.then(y=>d(y)).then(()=>o)},set(r,s){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(s):s,Promise.resolve(s)},delete(r){return delete t[JSON.stringify(r)],Promise.resolve()},clear(){return t={},Promise.resolve()}}}ae.createInMemoryCache=Jt});var we=I((Vs,Me)=>{Me.exports=Te()});var Ce=I(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});function Xt(e,t,r){let s={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers(){return e===oe.WithinHeaders?s:{}},queryParameters(){return e===oe.WithinQueryParameters?s:{}}}}function Yt(e){let t=0,r=()=>(t++,new Promise(s=>{setTimeout(()=>{s(e(r))},Math.min(100*t,1e3))}));return e(r)}function ke(e,t=(r,s)=>Promise.resolve()){return Object.assign(e,{wait(r){return ke(e.then(s=>Promise.all([t(s,r),s])).then(s=>s[1]))}})}function Zt(e){let t=e.length-1;for(t;t>0;t--){let r=Math.floor(Math.random()*(t+1)),s=e[t];e[t]=e[r],e[r]=s}return e}function er(e,t){return Object.keys(t!==void 0?t:{}).forEach(r=>{e[r]=t[r](e)}),e}function tr(e,...t){let r=0;return e.replace(/%s/g,()=>encodeURIComponent(t[r++]))}var rr="4.2.0",sr=e=>()=>e.transporter.requester.destroy(),oe={WithinQueryParameters:0,WithinHeaders:1};M.AuthMode=oe;M.addMethods=er;M.createAuth=Xt;M.createRetryablePromise=Yt;M.createWaitablePromise=ke;M.destroy=sr;M.encode=tr;M.shuffle=Zt;M.version=rr});var F=I((Js,Ue)=>{Ue.exports=Ce()});var Ne=I(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});var nr={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};ie.MethodEnum=nr});var B=I((Ys,We)=>{We.exports=Ne()});var Ze=I(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});var He=B();function ce(e,t){let r=e||{},s=r.data||{};return Object.keys(r).forEach(n=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(n)===-1&&(s[n]=r[n])}),{data:Object.entries(s).length>0?s:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var X={Read:1,Write:2,Any:3},U={Up:1,Down:2,Timeouted:3},_e=2*60*1e3;function ue(e,t=U.Up){return g(u({},e),{status:t,lastUpdate:Date.now()})}function Fe(e){return e.status===U.Up||Date.now()-e.lastUpdate>_e}function Be(e){return e.status===U.Timeouted&&Date.now()-e.lastUpdate<=_e}function le(e){return{protocol:e.protocol||"https",url:e.url,accept:e.accept||X.Any}}function ar(e,t){return Promise.all(t.map(r=>e.get(r,()=>Promise.resolve(ue(r))))).then(r=>{let s=r.filter(d=>Fe(d)),n=r.filter(d=>Be(d)),a=[...s,...n],o=a.length>0?a.map(d=>le(d)):t;return{getTimeout(d,y){return(n.length===0&&d===0?1:n.length+3+d)*y},statelessHosts:o}})}var or=({isTimedOut:e,status:t})=>!e&&~~t==0,ir=e=>{let t=e.status;return e.isTimedOut||or(e)||~~(t/100)!=2&&~~(t/100)!=4},cr=({status:e})=>~~(e/100)==2,ur=(e,t)=>ir(e)?t.onRetry(e):cr(e)?t.onSucess(e):t.onFail(e);function Qe(e,t,r,s){let n=[],a=$e(r,s),o=Le(e,s),d=r.method,y=r.method!==He.MethodEnum.Get?{}:u(u({},r.data),s.data),b=u(u(u({"x-algolia-agent":e.userAgent.value},e.queryParameters),y),s.queryParameters),f=0,p=(h,S)=>{let O=h.pop();if(O===void 0)throw Ve(de(n));let P={data:a,headers:o,method:d,url:Ge(O,r.path,b),connectTimeout:S(f,e.timeouts.connect),responseTimeout:S(f,s.timeout)},x=j=>{let T={request:P,response:j,host:O,triesLeft:h.length};return n.push(T),T},v={onSucess:j=>Ke(j),onRetry(j){let T=x(j);return j.isTimedOut&&f++,Promise.all([e.logger.info("Retryable failure",pe(T)),e.hostsCache.set(O,ue(O,j.isTimedOut?U.Timeouted:U.Down))]).then(()=>p(h,S))},onFail(j){throw x(j),ze(j,de(n))}};return e.requester.send(P).then(j=>ur(j,v))};return ar(e.hostsCache,t).then(h=>p([...h.statelessHosts].reverse(),h.getTimeout))}function lr(e){let{hostsCache:t,logger:r,requester:s,requestsCache:n,responsesCache:a,timeouts:o,userAgent:d,hosts:y,queryParameters:b,headers:f}=e,p={hostsCache:t,logger:r,requester:s,requestsCache:n,responsesCache:a,timeouts:o,userAgent:d,headers:f,queryParameters:b,hosts:y.map(h=>le(h)),read(h,S){let O=ce(S,p.timeouts.read),P=()=>Qe(p,p.hosts.filter(j=>(j.accept&X.Read)!=0),h,O);if((O.cacheable!==void 0?O.cacheable:h.cacheable)!==!0)return P();let v={request:h,mappedRequestOptions:O,transporter:{queryParameters:p.queryParameters,headers:p.headers}};return p.responsesCache.get(v,()=>p.requestsCache.get(v,()=>p.requestsCache.set(v,P()).then(j=>Promise.all([p.requestsCache.delete(v),j]),j=>Promise.all([p.requestsCache.delete(v),Promise.reject(j)])).then(([j,T])=>T)),{miss:j=>p.responsesCache.set(v,j)})},write(h,S){return Qe(p,p.hosts.filter(O=>(O.accept&X.Write)!=0),h,ce(S,p.timeouts.write))}};return p}function dr(e){let t={value:`Algolia for JavaScript (${e})`,add(r){let s=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return t.value.indexOf(s)===-1&&(t.value=`${t.value}${s}`),t}};return t}function Ke(e){try{return JSON.parse(e.content)}catch(t){throw Je(t.message,e)}}function ze({content:e,status:t},r){let s=e;try{s=JSON.parse(e).message}catch(n){}return Xe(s,t,r)}function pr(e,...t){let r=0;return e.replace(/%s/g,()=>encodeURIComponent(t[r++]))}function Ge(e,t,r){let s=Ye(r),n=`${e.protocol}://${e.url}/${t.charAt(0)==="/"?t.substr(1):t}`;return s.length&&(n+=`?${s}`),n}function Ye(e){let t=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(e).map(r=>pr("%s=%s",r,t(e[r])?JSON.stringify(e[r]):e[r])).join("&")}function $e(e,t){if(e.method===He.MethodEnum.Get||e.data===void 0&&t.data===void 0)return;let r=Array.isArray(e.data)?e.data:u(u({},e.data),t.data);return JSON.stringify(r)}function Le(e,t){let r=u(u({},e.headers),t.headers),s={};return Object.keys(r).forEach(n=>{let a=r[n];s[n.toLowerCase()]=a}),s}function de(e){return e.map(t=>pe(t))}function pe(e){let t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return g(u({},e),{request:g(u({},e.request),{headers:u(u({},e.request.headers),t)})})}function Xe(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}function Je(e,t){return{name:"DeserializationError",message:e,response:t}}function Ve(e){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:e}}A.CallEnum=X;A.HostStatusEnum=U;A.createApiError=Xe;A.createDeserializationError=Je;A.createMappedRequestOptions=ce;A.createRetryError=Ve;A.createStatefulHost=ue;A.createStatelessHost=le;A.createTransporter=lr;A.createUserAgent=dr;A.deserializeFailure=ze;A.deserializeSuccess=Ke;A.isStatefulHostTimeouted=Be;A.isStatefulHostUp=Fe;A.serializeData=$e;A.serializeHeaders=Le;A.serializeQueryParameters=Ye;A.serializeUrl=Ge;A.stackFrameWithoutCredentials=pe;A.stackTraceWithoutCredentials=de});var K=I((en,et)=>{et.exports=Ze()});var tt=I(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});var N=F(),mr=K(),z=B(),hr=e=>{let t=e.region||"us",r=N.createAuth(N.AuthMode.WithinHeaders,e.appId,e.apiKey),s=mr.createTransporter(g(u({hosts:[{url:`analytics.${t}.algolia.com`}]},e),{headers:u(g(u({},r.headers()),{"content-type":"application/json"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)})),n=e.appId;return N.addMethods({appId:n,transporter:s},e.methods)},yr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Post,path:"2/abtests",data:t},r),gr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Delete,path:N.encode("2/abtests/%s",t)},r),fr=e=>(t,r)=>e.transporter.read({method:z.MethodEnum.Get,path:N.encode("2/abtests/%s",t)},r),br=e=>t=>e.transporter.read({method:z.MethodEnum.Get,path:"2/abtests"},t),Pr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Post,path:N.encode("2/abtests/%s/stop",t)},r);w.addABTest=yr;w.createAnalyticsClient=hr;w.deleteABTest=gr;w.getABTest=fr;w.getABTests=br;w.stopABTest=Pr});var st=I((rn,rt)=>{rt.exports=tt()});var at=I(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});var me=F(),jr=K(),nt=B(),Or=e=>{let t=e.region||"us",r=me.createAuth(me.AuthMode.WithinHeaders,e.appId,e.apiKey),s=jr.createTransporter(g(u({hosts:[{url:`recommendation.${t}.algolia.com`}]},e),{headers:u(g(u({},r.headers()),{"content-type":"application/json"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)}));return me.addMethods({appId:e.appId,transporter:s},e.methods)},Ir=e=>t=>e.transporter.read({method:nt.MethodEnum.Get,path:"1/strategies/personalization"},t),Ar=e=>(t,r)=>e.transporter.write({method:nt.MethodEnum.Post,path:"1/strategies/personalization",data:t},r);G.createRecommendationClient=Or;G.getPersonalizationStrategy=Ir;G.setPersonalizationStrategy=Ar});var it=I((nn,ot)=>{ot.exports=at()});var jt=I(i=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0});var l=F(),q=K(),m=B(),Sr=require("crypto");function Y(e){let t=r=>e.request(r).then(s=>{if(e.batch!==void 0&&e.batch(s.hits),!e.shouldStop(s))return s.cursor?t({cursor:s.cursor}):t({page:(r.page||0)+1})});return t({})}var Dr=e=>{let t=e.appId,r=l.createAuth(e.authMode!==void 0?e.authMode:l.AuthMode.WithinHeaders,t,e.apiKey),s=q.createTransporter(g(u({hosts:[{url:`${t}-dsn.algolia.net`,accept:q.CallEnum.Read},{url:`${t}.algolia.net`,accept:q.CallEnum.Write}].concat(l.shuffle([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}]))},e),{headers:u(g(u({},r.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)})),n={transporter:s,appId:t,addAlgoliaAgent(a,o){s.userAgent.add({segment:a,version:o})},clearCache(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(()=>{})}};return l.addMethods(n,e.methods)};function ct(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function ut(){return{name:"ObjectNotFoundError",message:"Object not found."}}function lt(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Rr=e=>(t,r)=>{let d=r||{},{queryParameters:s}=d,n=R(d,["queryParameters"]),a=u({acl:t},s!==void 0?{queryParameters:s}:{}),o=(y,b)=>l.createRetryablePromise(f=>$(e)(y.key,b).catch(p=>{if(p.status!==404)throw p;return f()}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:"1/keys",data:a},n),o)},vr=e=>(t,r,s)=>{let n=q.createMappedRequestOptions(s);return n.queryParameters["X-Algolia-User-ID"]=t,e.transporter.write({method:m.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},n)},xr=e=>(t,r,s)=>e.transporter.write({method:m.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:t,cluster:r}},s),Z=e=>(t,r,s)=>{let n=(a,o)=>L(e)(t,{methods:{waitTask:D}}).waitTask(a.taskID,o);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",t),data:{operation:"copy",destination:r}},s),n)},qr=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Rules]})),Er=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Settings]})),Tr=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Synonyms]})),Mr=e=>(t,r)=>{let s=(n,a)=>l.createRetryablePromise(o=>$(e)(t,a).then(o).catch(d=>{if(d.status!==404)throw d}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/keys/%s",t)},r),s)},wr=()=>(e,t)=>{let r=q.serializeQueryParameters(t),s=Sr.createHmac("sha256",e).update(r).digest("hex");return Buffer.from(s+r).toString("base64")},$=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/keys/%s",t)},r),kr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/logs"},t),Cr=()=>e=>{let t=Buffer.from(e,"base64").toString("ascii"),r=/validUntil=(\d+)/,s=t.match(r);if(s===null)throw lt();return parseInt(s[1],10)-Math.round(new Date().getTime()/1e3)},Ur=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping/top"},t),Nr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/clusters/mapping/%s",t)},r),Wr=e=>t=>{let n=t||{},{retrieveMappings:r}=n,s=R(n,["retrieveMappings"]);return r===!0&&(s.getClusters=!0),e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping/pending"},s)},L=e=>(t,r={})=>{let s={transporter:e.transporter,appId:e.appId,indexName:t};return l.addMethods(s,r.methods)},Hr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/keys"},t),_r=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters"},t),Fr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/indexes"},t),Br=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping"},t),Kr=e=>(t,r,s)=>{let n=(a,o)=>L(e)(t,{methods:{waitTask:D}}).waitTask(a.taskID,o);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",t),data:{operation:"move",destination:r}},s),n)},zr=e=>(t,r)=>{let s=(n,a)=>Promise.all(Object.keys(n.taskID).map(o=>L(e)(o,{methods:{waitTask:D}}).waitTask(n.taskID[o],a)));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:t}},r),s)},Gr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},r),$r=e=>(t,r)=>{let s=t.map(n=>g(u({},n),{params:q.serializeQueryParameters(n.params||{})}));return e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:s},cacheable:!0},r)},Lr=e=>(t,r)=>Promise.all(t.map(s=>{let d=s.params,{facetName:n,facetQuery:a}=d,o=R(d,["facetName","facetQuery"]);return L(e)(s.indexName,{methods:{searchForFacetValues:dt}}).searchForFacetValues(n,a,u(u({},r),o))})),Vr=e=>(t,r)=>{let s=q.createMappedRequestOptions(r);return s.queryParameters["X-Algolia-User-ID"]=t,e.transporter.write({method:m.MethodEnum.Delete,path:"1/clusters/mapping"},s)},Qr=e=>(t,r)=>{let s=(n,a)=>l.createRetryablePromise(o=>$(e)(t,a).catch(d=>{if(d.status!==404)throw d;return o()}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/keys/%s/restore",t)},r),s)},Jr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:t}},r),Xr=e=>(t,r)=>{let s=Object.assign({},r),f=r||{},{queryParameters:n}=f,a=R(f,["queryParameters"]),o=n?{queryParameters:n}:{},d=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],y=p=>Object.keys(s).filter(h=>d.indexOf(h)!==-1).every(h=>p[h]===s[h]),b=(p,h)=>l.createRetryablePromise(S=>$(e)(t,h).then(O=>y(O)?Promise.resolve():S()));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Put,path:l.encode("1/keys/%s",t),data:o},a),b)},pt=e=>(t,r)=>{let s=(n,a)=>D(e)(n.taskID,a);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/batch",e.indexName),data:{requests:t}},r),s)},Yr=e=>t=>Y(g(u({},t),{shouldStop:r=>r.cursor===void 0,request:r=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/browse",e.indexName),data:r},t)})),Zr=e=>t=>{let r=u({hitsPerPage:1e3},t);return Y(g(u({},r),{shouldStop:s=>s.hits.lengthg(u({},n),{hits:n.hits.map(a=>(delete a._highlightResult,a))}))}}))},es=e=>t=>{let r=u({hitsPerPage:1e3},t);return Y(g(u({},r),{shouldStop:s=>s.hits.lengthg(u({},n),{hits:n.hits.map(a=>(delete a._highlightResult,a))}))}}))},te=e=>(t,r,s)=>{let y=s||{},{batchSize:n}=y,a=R(y,["batchSize"]),o={taskIDs:[],objectIDs:[]},d=(b=0)=>{let f=[],p;for(p=b;p({action:r,body:h})),a).then(h=>(o.objectIDs=o.objectIDs.concat(h.objectIDs),o.taskIDs.push(h.taskID),p++,d(p)))};return l.createWaitablePromise(d(),(b,f)=>Promise.all(b.taskIDs.map(p=>D(e)(p,f))))},ts=e=>t=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/clear",e.indexName)},t),(r,s)=>D(e)(r.taskID,s)),rs=e=>t=>{let a=t||{},{forwardToReplicas:r}=a,s=R(a,["forwardToReplicas"]),n=q.createMappedRequestOptions(s);return r&&(n.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/clear",e.indexName)},n),(o,d)=>D(e)(o.taskID,d))},ss=e=>t=>{let a=t||{},{forwardToReplicas:r}=a,s=R(a,["forwardToReplicas"]),n=q.createMappedRequestOptions(s);return r&&(n.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/clear",e.indexName)},n),(o,d)=>D(e)(o.taskID,d))},ns=e=>(t,r)=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/deleteByQuery",e.indexName),data:t},r),(s,n)=>D(e)(s.taskID,n)),as=e=>t=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s",e.indexName)},t),(r,s)=>D(e)(r.taskID,s)),os=e=>(t,r)=>l.createWaitablePromise(yt(e)([t],r).then(s=>({taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),yt=e=>(t,r)=>{let s=t.map(n=>({objectID:n}));return te(e)(s,k.DeleteObject,r)},is=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s/rules/%s",e.indexName,t)},a),(d,y)=>D(e)(d.taskID,y))},cs=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s/synonyms/%s",e.indexName,t)},a),(d,y)=>D(e)(d.taskID,y))},us=e=>t=>gt(e)(t).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),ls=e=>(t,r)=>{let y=r||{},{query:s,paginate:n}=y,a=R(y,["query","paginate"]),o=0,d=()=>ft(e)(s||"",g(u({},a),{page:o})).then(b=>{for(let[f,p]of Object.entries(b.hits))if(t(p))return{object:p,position:parseInt(f,10),page:o};if(o++,n===!1||o>=b.nbPages)throw ut();return d()});return d()},ds=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/%s",e.indexName,t)},r),ps=()=>(e,t)=>{for(let[r,s]of Object.entries(e.hits))if(s.objectID===t)return parseInt(r,10);return-1},ms=e=>(t,r)=>{let o=r||{},{attributesToRetrieve:s}=o,n=R(o,["attributesToRetrieve"]),a=t.map(d=>u({indexName:e.indexName,objectID:d},s?{attributesToRetrieve:s}:{}));return e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:a}},n)},hs=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/rules/%s",e.indexName,t)},r),gt=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/settings",e.indexName),data:{getVersion:2}},t),ys=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/synonyms/%s",e.indexName,t)},r),bt=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/task/%s",e.indexName,t.toString())},r),gs=e=>(t,r)=>l.createWaitablePromise(Pt(e)([t],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),Pt=e=>(t,r)=>{let o=r||{},{createIfNotExists:s}=o,n=R(o,["createIfNotExists"]),a=s?k.PartialUpdateObject:k.PartialUpdateObjectNoCreate;return te(e)(t,a,n)},fs=e=>(t,r)=>{let O=r||{},{safe:s,autoGenerateObjectIDIfNotExist:n,batchSize:a}=O,o=R(O,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),d=(P,x,v,j)=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",P),data:{operation:v,destination:x}},j),(T,V)=>D(e)(T.taskID,V)),y=Math.random().toString(36).substring(7),b=`${e.indexName}_tmp_${y}`,f=he({appId:e.appId,transporter:e.transporter,indexName:b}),p=[],h=d(e.indexName,b,"copy",g(u({},o),{scope:["settings","synonyms","rules"]}));p.push(h);let S=(s?h.wait(o):h).then(()=>{let P=f(t,g(u({},o),{autoGenerateObjectIDIfNotExist:n,batchSize:a}));return p.push(P),s?P.wait(o):P}).then(()=>{let P=d(b,e.indexName,"move",o);return p.push(P),s?P.wait(o):P}).then(()=>Promise.all(p)).then(([P,x,v])=>({objectIDs:x.objectIDs,taskIDs:[P.taskID,...x.taskIDs,v.taskID]}));return l.createWaitablePromise(S,(P,x)=>Promise.all(p.map(v=>v.wait(x))))},bs=e=>(t,r)=>ye(e)(t,g(u({},r),{clearExistingRules:!0})),Ps=e=>(t,r)=>ge(e)(t,g(u({},r),{replaceExistingSynonyms:!0})),js=e=>(t,r)=>l.createWaitablePromise(he(e)([t],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),he=e=>(t,r)=>{let o=r||{},{autoGenerateObjectIDIfNotExist:s}=o,n=R(o,["autoGenerateObjectIDIfNotExist"]),a=s?k.AddObject:k.UpdateObject;if(a===k.UpdateObject){for(let d of t)if(d.objectID===void 0)return l.createWaitablePromise(Promise.reject(ct()))}return te(e)(t,a,n)},Os=e=>(t,r)=>ye(e)([t],r),ye=e=>(t,r)=>{let d=r||{},{forwardToReplicas:s,clearExistingRules:n}=d,a=R(d,["forwardToReplicas","clearExistingRules"]),o=q.createMappedRequestOptions(a);return s&&(o.queryParameters.forwardToReplicas=1),n&&(o.queryParameters.clearExistingRules=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/batch",e.indexName),data:t},o),(y,b)=>D(e)(y.taskID,b))},Is=e=>(t,r)=>ge(e)([t],r),ge=e=>(t,r)=>{let d=r||{},{forwardToReplicas:s,replaceExistingSynonyms:n}=d,a=R(d,["forwardToReplicas","replaceExistingSynonyms"]),o=q.createMappedRequestOptions(a);return s&&(o.queryParameters.forwardToReplicas=1),n&&(o.queryParameters.replaceExistingSynonyms=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/batch",e.indexName),data:t},o),(y,b)=>D(e)(y.taskID,b))},ft=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),dt=e=>(t,r,s)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},s),mt=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/search",e.indexName),data:{query:t}},r),ht=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/search",e.indexName),data:{query:t}},r),As=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Put,path:l.encode("1/indexes/%s/settings",e.indexName),data:t},a),(d,y)=>D(e)(d.taskID,y))},D=e=>(t,r)=>l.createRetryablePromise(s=>bt(e)(t,r).then(n=>n.status!=="published"?s():void 0)),Ss={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},k={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},ee={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Ds={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},Rs={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};i.ApiKeyACLEnum=Ss;i.BatchActionEnum=k;i.ScopeEnum=ee;i.StrategyEnum=Ds;i.SynonymEnum=Rs;i.addApiKey=Rr;i.assignUserID=vr;i.assignUserIDs=xr;i.batch=pt;i.browseObjects=Yr;i.browseRules=Zr;i.browseSynonyms=es;i.chunkedBatch=te;i.clearObjects=ts;i.clearRules=rs;i.clearSynonyms=ss;i.copyIndex=Z;i.copyRules=qr;i.copySettings=Er;i.copySynonyms=Tr;i.createBrowsablePromise=Y;i.createMissingObjectIDError=ct;i.createObjectNotFoundError=ut;i.createSearchClient=Dr;i.createValidUntilNotFoundError=lt;i.deleteApiKey=Mr;i.deleteBy=ns;i.deleteIndex=as;i.deleteObject=os;i.deleteObjects=yt;i.deleteRule=is;i.deleteSynonym=cs;i.exists=us;i.findObject=ls;i.generateSecuredApiKey=wr;i.getApiKey=$;i.getLogs=kr;i.getObject=ds;i.getObjectPosition=ps;i.getObjects=ms;i.getRule=hs;i.getSecuredApiKeyRemainingValidity=Cr;i.getSettings=gt;i.getSynonym=ys;i.getTask=bt;i.getTopUserIDs=Ur;i.getUserID=Nr;i.hasPendingMappings=Wr;i.initIndex=L;i.listApiKeys=Hr;i.listClusters=_r;i.listIndices=Fr;i.listUserIDs=Br;i.moveIndex=Kr;i.multipleBatch=zr;i.multipleGetObjects=Gr;i.multipleQueries=$r;i.multipleSearchForFacetValues=Lr;i.partialUpdateObject=gs;i.partialUpdateObjects=Pt;i.removeUserID=Vr;i.replaceAllObjects=fs;i.replaceAllRules=bs;i.replaceAllSynonyms=Ps;i.restoreApiKey=Qr;i.saveObject=js;i.saveObjects=he;i.saveRule=Os;i.saveRules=ye;i.saveSynonym=Is;i.saveSynonyms=ge;i.search=ft;i.searchForFacetValues=dt;i.searchRules=mt;i.searchSynonyms=ht;i.searchUserIDs=Jr;i.setSettings=As;i.updateApiKey=Xr;i.waitTask=D});var It=I((on,Ot)=>{Ot.exports=jt()});var At=I(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});function vs(){return{debug(e,t){return Promise.resolve()},info(e,t){return Promise.resolve()},error(e,t){return Promise.resolve()}}}var xs={Debug:1,Info:2,Error:3};re.LogLevelEnum=xs;re.createNullLogger=vs});var Dt=I((un,St)=>{St.exports=At()});var xt=I(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});var Rt=require("http"),vt=require("https"),qs=require("url");function Es(){let e={keepAlive:!0},t=new Rt.Agent(e),r=new vt.Agent(e);return{send(s){return new Promise(n=>{let a=qs.parse(s.url),o=a.query===null?a.pathname:`${a.pathname}?${a.query}`,d=u({agent:a.protocol==="https:"?r:t,hostname:a.hostname,path:o,method:s.method,headers:s.headers},a.port!==void 0?{port:a.port||""}:{}),y=(a.protocol==="https:"?vt:Rt).request(d,h=>{let S="";h.on("data",O=>S+=O),h.on("end",()=>{clearTimeout(f),clearTimeout(p),n({status:h.statusCode||0,content:S,isTimedOut:!1})})}),b=(h,S)=>setTimeout(()=>{y.abort(),n({status:0,content:S,isTimedOut:!0})},h*1e3),f=b(s.connectTimeout,"Connection timeout"),p;y.on("error",h=>{clearTimeout(f),clearTimeout(p),n({status:0,content:h.message,isTimedOut:!1})}),y.once("response",()=>{clearTimeout(f),p=b(s.responseTimeout,"Socket timeout")}),s.data!==void 0&&y.write(s.data),y.end()})},destroy(){return t.destroy(),r.destroy(),Promise.resolve()}}}fe.createNodeHttpRequester=Es});var Et=I((dn,qt)=>{qt.exports=xt()});var kt=I((pn,Tt)=>{"use strict";var Mt=Ee(),Ts=we(),W=st(),be=F(),Pe=it(),c=It(),Ms=Dt(),ws=Et(),ks=K();function wt(e,t,r){let s={appId:e,apiKey:t,timeouts:{connect:2,read:5,write:30},requester:ws.createNodeHttpRequester(),logger:Ms.createNullLogger(),responsesCache:Mt.createNullCache(),requestsCache:Mt.createNullCache(),hostsCache:Ts.createInMemoryCache(),userAgent:ks.createUserAgent(be.version).add({segment:"Node.js",version:process.versions.node})};return c.createSearchClient(g(u(u({},s),r),{methods:{search:c.multipleQueries,searchForFacetValues:c.multipleSearchForFacetValues,multipleBatch:c.multipleBatch,multipleGetObjects:c.multipleGetObjects,multipleQueries:c.multipleQueries,copyIndex:c.copyIndex,copySettings:c.copySettings,copyRules:c.copyRules,copySynonyms:c.copySynonyms,moveIndex:c.moveIndex,listIndices:c.listIndices,getLogs:c.getLogs,listClusters:c.listClusters,multipleSearchForFacetValues:c.multipleSearchForFacetValues,getApiKey:c.getApiKey,addApiKey:c.addApiKey,listApiKeys:c.listApiKeys,updateApiKey:c.updateApiKey,deleteApiKey:c.deleteApiKey,restoreApiKey:c.restoreApiKey,assignUserID:c.assignUserID,assignUserIDs:c.assignUserIDs,getUserID:c.getUserID,searchUserIDs:c.searchUserIDs,listUserIDs:c.listUserIDs,getTopUserIDs:c.getTopUserIDs,removeUserID:c.removeUserID,hasPendingMappings:c.hasPendingMappings,generateSecuredApiKey:c.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:c.getSecuredApiKeyRemainingValidity,destroy:be.destroy,initIndex:n=>a=>c.initIndex(n)(a,{methods:{batch:c.batch,delete:c.deleteIndex,getObject:c.getObject,getObjects:c.getObjects,saveObject:c.saveObject,saveObjects:c.saveObjects,search:c.search,searchForFacetValues:c.searchForFacetValues,waitTask:c.waitTask,setSettings:c.setSettings,getSettings:c.getSettings,partialUpdateObject:c.partialUpdateObject,partialUpdateObjects:c.partialUpdateObjects,deleteObject:c.deleteObject,deleteObjects:c.deleteObjects,deleteBy:c.deleteBy,clearObjects:c.clearObjects,browseObjects:c.browseObjects,getObjectPosition:c.getObjectPosition,findObject:c.findObject,exists:c.exists,saveSynonym:c.saveSynonym,saveSynonyms:c.saveSynonyms,getSynonym:c.getSynonym,searchSynonyms:c.searchSynonyms,browseSynonyms:c.browseSynonyms,deleteSynonym:c.deleteSynonym,clearSynonyms:c.clearSynonyms,replaceAllObjects:c.replaceAllObjects,replaceAllSynonyms:c.replaceAllSynonyms,searchRules:c.searchRules,getRule:c.getRule,deleteRule:c.deleteRule,saveRule:c.saveRule,saveRules:c.saveRules,replaceAllRules:c.replaceAllRules,browseRules:c.browseRules,clearRules:c.clearRules}}),initAnalytics:()=>n=>W.createAnalyticsClient(g(u(u({},s),n),{methods:{addABTest:W.addABTest,getABTest:W.getABTest,getABTests:W.getABTests,stopABTest:W.stopABTest,deleteABTest:W.deleteABTest}})),initRecommendation:()=>n=>Pe.createRecommendationClient(g(u(u({},s),n),{methods:{getPersonalizationStrategy:Pe.getPersonalizationStrategy,setPersonalizationStrategy:Pe.setPersonalizationStrategy}}))}}))}wt.version=be.version;Tt.exports=wt});var Ut=I((mn,je)=>{var Ct=kt();je.exports=Ct;je.exports.default=Ct});var Ws={};Vt(Ws,{default:()=>Ks});var Oe=C(require("@yarnpkg/core")),E=C(require("@yarnpkg/core")),Ie=C(require("@yarnpkg/plugin-essentials")),Ht=C(require("semver"));var se=C(require("@yarnpkg/core")),Nt=C(Ut()),Cs="e8e1bd300d860104bb8c58453ffa1eb4",Us="OFCNCOG2CU",Wt=async(e,t)=>{var a;let r=se.structUtils.stringifyIdent(e),n=Ns(t).initIndex("npm-search");try{return((a=(await n.getObject(r,{attributesToRetrieve:["types"]})).types)==null?void 0:a.ts)==="definitely-typed"}catch(o){return!1}},Ns=e=>(0,Nt.default)(Us,Cs,{requester:{async send(r){try{let s=await se.httpUtils.request(r.url,r.data||null,{configuration:e,headers:r.headers});return{content:s.body,isTimedOut:!1,status:s.statusCode}}catch(s){return{content:s.response.body,isTimedOut:!1,status:s.response.statusCode}}}}});var _t=e=>e.scope?`${e.scope}__${e.name}`:`${e.name}`,Hs=async(e,t,r,s)=>{if(r.scope==="types")return;let{project:n}=e,{configuration:a}=n,o=a.makeResolver(),d={project:n,resolver:o,report:new E.ThrowReport};if(!await Wt(r,a))return;let b=_t(r),f=E.structUtils.parseRange(r.range).selector;if(!E.semverUtils.validRange(f)){let P=await o.getCandidates(r,new Map,d);f=E.structUtils.parseRange(P[0].reference).selector}let p=Ht.default.coerce(f);if(p===null)return;let h=`${Ie.suggestUtils.Modifier.CARET}${p.major}`,S=E.structUtils.makeDescriptor(E.structUtils.makeIdent("types",b),h),O=E.miscUtils.mapAndFind(n.workspaces,P=>{var T,V;let x=(T=P.manifest.dependencies.get(r.identHash))==null?void 0:T.descriptorHash,v=(V=P.manifest.devDependencies.get(r.identHash))==null?void 0:V.descriptorHash;if(x!==r.descriptorHash&&v!==r.descriptorHash)return E.miscUtils.mapAndFind.skip;let j=[];for(let Ae of Oe.Manifest.allDependencies){let Se=P.manifest[Ae].get(S.identHash);typeof Se!="undefined"&&j.push([Ae,Se])}return j.length===0?E.miscUtils.mapAndFind.skip:j});if(typeof O!="undefined")for(let[P,x]of O)e.manifest[P].set(x.identHash,x);else{try{if((await o.getCandidates(S,new Map,d)).length===0)return}catch{return}e.manifest[Ie.suggestUtils.Target.DEVELOPMENT].set(S.identHash,S)}},_s=async(e,t,r)=>{if(r.scope==="types")return;let s=_t(r),n=E.structUtils.makeIdent("types",s);for(let a of Oe.Manifest.allDependencies)typeof e.manifest[a].get(n.identHash)!="undefined"&&e.manifest[a].delete(n.identHash)},Fs=(e,t)=>{t.publishConfig&&t.publishConfig.typings&&(t.typings=t.publishConfig.typings),t.publishConfig&&t.publishConfig.types&&(t.types=t.publishConfig.types)},Bs={hooks:{afterWorkspaceDependencyAddition:Hs,afterWorkspaceDependencyRemoval:_s,beforeWorkspacePacking:Fs}},Ks=Bs;return Ws;})(); 7 | return plugin; 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | enableGlobalCache: true 2 | nodeLinker: node-modules 3 | 4 | plugins: 5 | - path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs 6 | spec: '@yarnpkg/plugin-typescript' 7 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs 8 | spec: '@yarnpkg/plugin-interactive-tools' 9 | 10 | yarnPath: .yarn/releases/yarn-3.2.4.cjs 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelogs 2 | 3 | ## v1.0.0 4 | 5 | ### Added 6 | 7 | - Added next.js version 13.2.3 in package.json `peerDependancies` 8 | - Initialized and added propTypes in NextTopLoader, Support for Next.js v13.2.3 9 | 10 | ## v1.0.1 11 | 12 | ### Updated 13 | 14 | - Fixed misspelled Component name in README, added more instructions for the Component for the usage with `layout.js` in `app` folder structure 15 | 16 | ## v1.1.1 17 | 18 | ### Added 19 | 20 | - Used `React.memo` for better performance 21 | 22 | ### Fixed 23 | 24 | - Fix spelling for `NextTopLoadersProps` to `NextTopLoaderProps` 25 | 26 | ### Updated 27 | 28 | - Removed unwanted `devDependancies` to reduce the package size 29 | 30 | ## v1.2.1 31 | 32 | ### Added 33 | 34 | - Added `nprogress` and `@types/nprogress` packages for the `dependencies` 35 | 36 | ### Fixed 37 | 38 | - Fix the `newUrl` returning as `undefined` value for few anchor tags , added support to prevent loader from being stuck for anchor navigation for hash urls 39 | 40 | ### Updated 41 | 42 | - Refactor the code in `useEffect` hook, removed the `next/script` 43 | 44 | ## v1.2.2 45 | 46 | ### Fixed 47 | 48 | - Fix the Loader gets triggered on navigation to link in another tab 49 | 50 | ## v1.3.2 51 | 52 | ### Added 53 | 54 | - Added support for client side navigations 55 | 56 | ## v1.4.2 57 | 58 | ### Added 59 | 60 | - Added shadow config prop 61 | 62 | ### Fixed 63 | 64 | - Fixed spelling for increment. And updated the README. 65 | 66 | ## v1.5.3 67 | 68 | ### Added 69 | 70 | - Added template option 71 | - Added the provision to configure z index via props 72 | 73 | ### Fixed 74 | 75 | - Fixed loader infinity when press control click 76 | - Fixed Unexpected symbol "?" on Safari 12.1 by adding es6 as target 77 | - Fixed the loader when href is empty 78 | - Fixed the loader for new URL starts with "blob:" 79 | 80 | ## v1.6.3 81 | 82 | ### Added 83 | 84 | - Added a feature to show the TopLoader at bottom. 85 | 86 | ## v1.6.4 87 | 88 | ### Fixed 89 | 90 | - Fixed the spinner top and bottom margin 91 | 92 | ## v1.6.5 93 | 94 | ### Fixed 95 | 96 | - Fixed the loader when using CMD + Click in macOS 97 | 98 | ## v1.6.6 99 | 100 | ### Fixed 101 | 102 | - Fixed the TopLoader to work with special schemes such as mailto, sms, tel, etc 103 | - Fixed the TopLoader for "#" hash anchor 104 | 105 | ## v1.6.9 106 | 107 | ### Fixed 108 | 109 | - Resolve progress bar when navigating back from external page 110 | - Fixed the TopLoader for anchor url having other domain name 111 | - Moved histry.pushState function outside the MouseEvent, it was triggering for every mouse click 112 | - Fixed TopLoader getting stuck on popstate events 113 | - Fixed the use of rest params and passing its type as any 114 | - Fixed for all Special Schemes, TopLoader will not run on special schemes now onwards 115 | - Fixed for shift key and alt key 116 | 117 | ### Updated 118 | 119 | - Added Type declarations for few functions 120 | - Refactor the whole code to make it more readable 121 | - Updated to add support for the JSR Package Manager 122 | - Updated to version 1.6.9 to avoid version gap for JSR 123 | 124 | ## v1.6.10 125 | 126 | ### Fixed 127 | 128 | - Fix npm-publish.yml for gh actions to publish with provenance 129 | 130 | ## v1.6.11 131 | 132 | ### Fixed 133 | 134 | - Fix to add use client in jsr usage with nextjs 135 | - Update README about support for React 136 | 137 | ## v1.6.12 138 | 139 | ### Fixed 140 | 141 | - Fixed indefinite animation when replacing current route 142 | - Moved @types/nprogress into devDependencies 143 | 144 | ## v2.6.12 145 | 146 | ### Added (major changes) 147 | 148 | - Added PagesTopLoader Component to make useRouter hook supported in pages router 149 | 150 | - Added custom useRouter hook to trigger TopLoader for app router 151 | 152 | ### Updated 153 | 154 | - Updated README.md Documentation made it more readable. 155 | 156 | ## v3.6.12 157 | 158 | ### Added (major changes) 159 | 160 | - Added new import for PagesTopLoader 161 | 162 | - Added new import for custom useRouter hook 163 | 164 | ### Updated 165 | 166 | - Fixing for react js 167 | - Updated README.md Documentation made it more readable. 168 | 169 | ## v3.6.13 170 | 171 | ### Fixed 172 | 173 | - Fixed imports, PagesTopLoader imported incorrectly like nextjs-toploader/dist/pages and useEffect like nextjs-toploader/dist/app 174 | 175 | ## v3.6.14 176 | 177 | ### Fixed 178 | 179 | - Fixed typo in template value and shadow value in prop type table in README 180 | 181 | ## v3.6.15 182 | 183 | ### Updated 184 | 185 | - Updated copyright year in LICENSE 186 | 187 | ### Fixed 188 | 189 | - Fixed typo in template value in prop type table in README 190 | 191 | ## v3.7.15 192 | 193 | ### Added 194 | 195 | - Added option to control showing of top loader for hash anchors 196 | 197 | ### Updated 198 | 199 | - Updated README.md Documentation for `showForHashAnchor` 200 | 201 | ## v3.8.15 202 | 203 | ### Added 204 | 205 | - Added useTopLoader hook for managing NextTopLoader 206 | 207 | ### Fixed 208 | 209 | - Fixed target being customizable 210 | 211 | ## v3.8.16 212 | 213 | ### Fixed 214 | 215 | - Fixed target being customizable 216 | - Fixed Toploader not crawling by reverting the pr #109 that is "fix bug: target is customizable" 217 | -------------------------------------------------------------------------------- /JSR.md: -------------------------------------------------------------------------------- 1 | # Next Js TopLoader 2 | 3 | - A Next.js Top Loading Bar component made using nprogress, works with Next.js 14 and React. 4 | 5 | [![NPM](https://img.shields.io/badge/NPM-%23CB3837.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@thesgj/nextjs-toploader) 6 | [![NPM Downloads](https://img.shields.io/npm/dm/@thesgj/nextjs-toploader?&style=flat-square)](https://www.npmjs.com/package/@thesgj/nextjs-toploader) 7 | [![JSR](https://jsr.io/badges/@thesgj/@thesgj/nextjs-toploader)](https://jsr.io/badges/@thesgj/@thesgj/nextjs-toploader) 8 | 9 | For using npm package manager instead see: (https://www.npmjs.com/package/@thesgj/nextjs-toploader) 10 | 11 | ## Install 12 | 13 | using jsr with npm: 14 | 15 | ```bash 16 | npx jsr add @thesgj/@thesgj/nextjs-toploader 17 | ``` 18 | 19 | using jsr with yarn: 20 | 21 | ```bash 22 | yarn dlx jsr add @thesgj/@thesgj/nextjs-toploader 23 | ``` 24 | 25 | using deno: 26 | 27 | ```bash 28 | deno add @thesgj/@thesgj/nextjs-toploader 29 | ``` 30 | 31 | ## Usage 32 | 33 | import using: 34 | 35 | ```js 36 | import NextTopLoader from '@thesgj/nextjs-toploader'; 37 | ``` 38 | 39 | ### Usage with `app/layout.js` for `app` folder structure 40 | 41 | For rendering add `` to your `return()` inside the `` of `RootLayout()`: 42 | 43 | ```js 44 | import NextTopLoader from '@thesgj/nextjs-toploader'; 45 | 46 | export default function RootLayout({ children }) { 47 | return ( 48 | 49 | 50 | 51 | {children} 52 | 53 | 54 | ); 55 | } 56 | ``` 57 | 58 | ### Usage with `pages/_app.js` for `pages` folder structure 59 | 60 | For rendering add `` to your `return()` in `MyApp()` (Recommended): 61 | 62 | ```js 63 | import { PagesTopLoader } from '@thesgj/nextjs-toploader/pages'; 64 | 65 | export default function MyApp({ Component, pageProps }) { 66 | return ( 67 | <> 68 | 69 | ; 70 | 71 | ); 72 | } 73 | ``` 74 | 75 | You can also use `` in `pages` router, but it's recommended to use `` for `useRouter` hook support from `@thesgj/nextjs-toploader` version 2.6.12 onwards 76 | 77 | ## Compatibility with `useRouter` hook 78 | 79 | ### `useRouter` hook usage with `app/layout.js` for `app` folder structure 80 | 81 | For triggering TopLoader when using `useRouter` hook (app router): 82 | 83 | ```js 84 | // Import the useRouter hook from @thesgj/nextjs-toploader to trigger the TopLoader 85 | 86 | import { useRouter } from '@thesgj/nextjs-toploader/app'; 87 | ``` 88 | 89 | Then simply use it in your code for example: 90 | 91 | ```js 92 | const router = useRouter(); 93 | router.push('/some-page'); 94 | ``` 95 | 96 | ### `useRouter` hook usage with `pages/_app.js` for `pages` folder structure 97 | 98 | For triggering TopLoader when using `useRouter` add `` to your `return()` in `MyApp()` : 99 | 100 | ```js 101 | import { PagesTopLoader } from '@thesgj/nextjs-toploader/pages'; 102 | 103 | export default function MyApp({ Component, pageProps }) { 104 | return ( 105 | <> 106 | 107 | ; 108 | 109 | ); 110 | } 111 | ``` 112 | 113 | --- 114 | 115 | ### Usage with React, Vite React or any other React Based Framework 116 | 117 | For rendering add `` to your `return()` inside the component in `App()` in your App.js: 118 | 119 | ```js 120 | import NextTopLoader from '@thesgj/nextjs-toploader'; 121 | const App = () => { 122 | return ( 123 |
124 | 125 | 126 | {/* Your Routes Here */} 127 | 128 |
129 | ); 130 | }; 131 | 132 | export default App; 133 | ``` 134 | 135 | ### Default Configuration 136 | 137 | If no props are passed to ``, below is the default configuration applied. 138 | 139 | ```jsx 140 | 155 | ``` 156 | 157 | - `color`: to change the default color of TopLoader. 158 | - `initialPosition`: to change initial position for the TopLoader in percentage, : `0.08 = 8%`. 159 | - `crawlSpeed`: increment delay speed in `ms`. 160 | - `speed`: animation speed for the TopLoader in `ms` 161 | - `easing`: animation settings using easing (a CSS easing string). 162 | - `height`: height of TopLoader in `px`. 163 | - `crawl`: auto incrementing behavior for the TopLoader. 164 | - `showSpinner`: to show spinner or not. 165 | - `shadow`: a smooth shadow for the TopLoader. (set to `false` to disable it) 166 | - `template`: to include custom HTML attributes for the TopLoader. 167 | - `zIndex`: defines zIndex for the TopLoader. 168 | - `showAtBottom`: To show the TopLoader at bottom. (increase height for the TopLoader to ensure it's visibility at the mobile devices) 169 | 170 | #### `NextTopLoaderProps` (props passed to the TopLoader) 171 | 172 | | **Name** | **Type** | **Default Value** | 173 | | ----------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | 174 | | `color` | `string` | `"#29d"` | 175 | | `initialPosition` | `number` | `0.08` | 176 | | `crawlSpeed` | `number` | `200` | 177 | | `height` | `number` | `3` | 178 | | `crawl` | `boolean` | `true` | 179 | | `showSpinner` | `boolean` | `true` | 180 | | `easing` | `string` | `"ease"` | 181 | | `speed` | `number` | `200` | 182 | | `shadow` | `string \| false` | `"0 0 10px ${color}, 0 0 5px ${color}"` | 183 | | `template` | `string` | `"
"` | 184 | | `zIndex` | `number` | `1600` | 185 | | `showAtBottom` | `boolean` | `false` | 186 | 187 | ## Contributors 188 | 189 | ### Code Contributors 190 | 191 | This project was made possible thanks to the contributions of its code contributors. 192 | 193 | 194 | 195 | ### Financial Contributors 196 | 197 | We extend a huge thanks to our financial contributor for helping us sustain this community 198 | 199 | 200 | Sentry 201 | 202 | 203 | 204 | --- 205 | 206 | Support this project with your organization. Your logo will show up here with a link to your website. You can Support this project on Open Collective or Equivalent Method from the below 207 | 208 | UPI ID: thesgj@upi (International UPI ID) 209 | 210 | [![Sponsor me on GitHub](https://img.shields.io/badge/Sponsor%20me%20on-GitHub-brightgreen)](https://github.com/sponsors/TheSGJ) 211 | 212 | [!["Buy Me A Coffee"](https://img.shields.io/badge/Buy_Me_A_Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/thesgj) 213 | 214 | [![OpenCollective](https://opencollective.com/webpack/donate/button.png?color=blue)](https://opencollective.com/@thesgj/nextjs-toploader) 215 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Shri Ganesh Jha 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NextJS TopLoader Next Js TopLoader 2 | 3 | - A Next.js Top Loading Bar component made using nprogress, works with Next.js 14 and React. 4 | 5 | [![NPM](https://img.shields.io/badge/NPM-%23CB3837.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/nextjs-toploader) 6 | [![NPM Downloads](https://img.shields.io/npm/dm/nextjs-toploader?&style=flat-square)](https://www.npmjs.com/package/nextjs-toploader) 7 | 8 | ## Install 9 | 10 | using npm: 11 | 12 | ```bash 13 | npm install nextjs-toploader 14 | ``` 15 | 16 | using yarn: 17 | 18 | ```bash 19 | yarn add nextjs-toploader 20 | ``` 21 | 22 | ## Usage 23 | 24 | import using: 25 | 26 | ```js 27 | import NextTopLoader from 'nextjs-toploader'; 28 | ``` 29 | 30 | ### Usage with `app/layout.js` for `app` folder structure 31 | 32 | For rendering add `` to your `return()` inside the `` of `RootLayout()`: 33 | 34 | ```js 35 | import NextTopLoader from 'nextjs-toploader'; 36 | 37 | export default function RootLayout({ children }) { 38 | return ( 39 | 40 | 41 | 42 | {children} 43 | 44 | 45 | ); 46 | } 47 | ``` 48 | 49 | ### Usage with `pages/_app.js` for `pages` folder structure 50 | 51 | For rendering add `` to your `return()` in `MyApp()` (Recommended): 52 | 53 | ```js 54 | import { PagesTopLoader } from 'nextjs-toploader/pages'; 55 | 56 | export default function MyApp({ Component, pageProps }) { 57 | return ( 58 | <> 59 | 60 | ; 61 | 62 | ); 63 | } 64 | ``` 65 | 66 | You can also use `` in `pages` router, but it's recommended to use `` for `useRouter` hook support from `nextjs-toploader` version 2.6.12 onwards 67 | 68 | ## Compatibility with `useRouter` hook 69 | 70 | ### `useRouter` hook usage with `app/layout.js` for `app` folder structure 71 | 72 | For triggering TopLoader when using `useRouter` hook (app router): 73 | 74 | ```js 75 | // Import the useRouter hook from nextjs-toploader to trigger the TopLoader 76 | 77 | import { useRouter } from 'nextjs-toploader/app'; 78 | ``` 79 | 80 | Then simply use it in your code for example: 81 | 82 | ```js 83 | const router = useRouter(); 84 | router.push('/some-page'); 85 | ``` 86 | 87 | ### `useRouter` hook usage with `pages/_app.js` for `pages` folder structure 88 | 89 | For triggering TopLoader when using `useRouter` add `` to your `return()` in `MyApp()` : 90 | 91 | ```js 92 | import { PagesTopLoader } from 'nextjs-toploader/pages'; 93 | 94 | export default function MyApp({ Component, pageProps }) { 95 | return ( 96 | <> 97 | 98 | ; 99 | 100 | ); 101 | } 102 | ``` 103 | 104 | --- 105 | 106 | ## useTopLoader Hook 107 | 108 | A custom hook for handling progress indicators using NextTopLoader. 109 | 110 | ## Methods 111 | 112 | | Name | Description | 113 | | ----------------- | ------------------------------------------------------------------------------------------------------------------ | 114 | | start | Starts the progress bar | 115 | | done | Completes the progress bar. Can be forced to complete immediately with an optional force parameter | 116 | | remove | Removes the progress bar element from the DOM | 117 | | setProgress | Manually sets the progress value (between 0.0 and 1.0) | 118 | | inc | Increments the progress bar by a specified amount. If no amount is specified, it makes a small automatic increment | 119 | | trickle | Adds small random increments to the progress bar | 120 | | isStarted | Checks if the progress bar has been started | 121 | | isRendered | Checks if the progress bar is rendered in the DOM | 122 | | getPositioningCSS | Returns the positioning CSS property of the progress bar | 123 | 124 | ## Example Usage 125 | 126 | ```js 127 | 'use client'; 128 | 129 | import React from 'react'; 130 | import { useTopLoader } from 'nextjs-toploader'; 131 | 132 | const Component = () => { 133 | const loader = useTopLoader(); 134 | return ( 135 |
136 | 139 | 142 |
143 | ); 144 | }; 145 | 146 | export default Component; 147 | ``` 148 | 149 | --- 150 | 151 | ### Usage with React, Vite React or any other React Based Framework 152 | 153 | For rendering add `` to your `return()` inside the component in `App()` in your App.js: 154 | 155 | ```js 156 | import NextTopLoader from 'nextjs-toploader'; 157 | const App = () => { 158 | return ( 159 |
160 | 161 | 162 | {/* Your Routes Here */} 163 | 164 |
165 | ); 166 | }; 167 | 168 | export default App; 169 | ``` 170 | 171 | ### Default Configuration 172 | 173 | If no props are passed to ``, below is the default configuration applied. 174 | 175 | ```jsx 176 | 191 | ``` 192 | 193 | - `color`: to change the default color of TopLoader. 194 | - `initialPosition`: to change initial position for the TopLoader in percentage, : `0.08 = 8%`. 195 | - `crawlSpeed`: increment delay speed in `ms`. 196 | - `speed`: animation speed for the TopLoader in `ms` 197 | - `easing`: animation settings using easing (a CSS easing string). 198 | - `height`: height of TopLoader in `px`. 199 | - `crawl`: auto incrementing behavior for the TopLoader. 200 | - `showSpinner`: to show spinner or not. 201 | - `shadow`: a smooth shadow for the TopLoader. (set it to `false` to disable it) 202 | - `template`: to include custom HTML attributes for the TopLoader. 203 | - `zIndex`: defines zIndex for the TopLoader. 204 | - `showAtBottom`: To show the TopLoader at bottom. (increase height for the TopLoader to ensure it's visibility at the mobile devices) 205 | - `showForHashAnchor`: To show for "#" url or not. (set it to `false` to disable it) 206 | 207 | #### `NextTopLoaderProps` (props passed to the TopLoader) 208 | 209 | | **Name** | **Type** | **Default Value** | 210 | | ------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------- | 211 | | `color` | `string` | `"#2299DD"` | 212 | | `initialPosition` | `number` | `0.08` | 213 | | `crawlSpeed` | `number` | `200` | 214 | | `height` | `number` | `3` | 215 | | `crawl` | `boolean` | `true` | 216 | | `showSpinner` | `boolean` | `true` | 217 | | `easing` | `string` | `"ease"` | 218 | | `speed` | `number` | `200` | 219 | | `shadow` | `string \| false` | `"0 0 10px #2299DD,0 0 5px #2299DD"` | 220 | | `template` | `string` | `"
"` | 221 | | `zIndex` | `number` | `1600` | 222 | | `showAtBottom` | `boolean` | `false` | 223 | | `showForHashAnchor` | `boolean` | `true` | 224 | 225 | ## Contributors 226 | 227 | ### Code Contributors 228 | 229 | This project was made possible thanks to the contributions of its code contributors. 230 | 231 | 232 | 233 | ### Financial Contribution 234 | 235 | --- 236 | 237 | UPI ID: thesgj@upi (International UPI ID) 238 | 239 | [![Sponsor me on GitHub](https://img.shields.io/badge/Sponsor%20me%20on-GitHub-brightgreen)](https://github.com/sponsors/TheSGJ) 240 | 241 | [!["Buy Me A Coffee"](https://img.shields.io/badge/Buy_Me_A_Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/thesgj) 242 | 243 | [![OpenCollective](https://opencollective.com/webpack/donate/button.png?color=blue)](https://opencollective.com/nextjs-toploader) 244 | -------------------------------------------------------------------------------- /deno.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | declare namespace JSX { 3 | interface Element { 4 | // deno-lint-ignore no-explicit-any 5 | [elemName: string]: any; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /deno.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@thesgj/nextjs-toploader", 3 | "version": "3.8.16", 4 | "exports": "./src/index.tsx", 5 | "compilerOptions": { 6 | "jsx": "react-jsx", 7 | "jsxImportSource": "npm:preact", 8 | "types": ["./src/index.d.ts", "./deno.d.ts"] 9 | }, 10 | "lib": ["dom", "dom.iterable", "esnext"], 11 | "imports": { "preact": "npm:preact@^10.19.7" } 12 | } 13 | -------------------------------------------------------------------------------- /deno.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "packages": { 4 | "specifiers": { 5 | "npm:@types/node@^18.14.6": "npm:@types/node@18.19.24", 6 | "npm:@types/nprogress@0.2.2": "npm:@types/nprogress@0.2.2", 7 | "npm:@types/nprogress@^0.2.2": "npm:@types/nprogress@0.2.3", 8 | "npm:@types/react-dom@18": "npm:@types/react-dom@18.2.22", 9 | "npm:@types/react@18": "npm:@types/react@18.2.66", 10 | "npm:@typescript-eslint/eslint-plugin@^5.54.0": "npm:@typescript-eslint/eslint-plugin@5.62.0_@typescript-eslint+parser@5.62.0__eslint@8.57.0__typescript@4.9.5_eslint@8.57.0_typescript@4.9.5", 11 | "npm:@typescript-eslint/parser@^5.54.0": "npm:@typescript-eslint/parser@5.62.0_eslint@8.57.0_typescript@4.9.5", 12 | "npm:eslint@^8.35.0": "npm:eslint@8.57.0", 13 | "npm:next@^13.2.3": "npm:next@13.5.6_react@18.2.0_react-dom@18.2.0__react@18.2.0", 14 | "npm:nprogress@^0.2.0": "npm:nprogress@0.2.0", 15 | "npm:preact": "npm:preact@10.19.6", 16 | "npm:preact-render-to-string": "npm:preact-render-to-string@6.4.0_preact@10.19.6", 17 | "npm:prettier@^2.8.4": "npm:prettier@2.8.8", 18 | "npm:prop-types@^15.8.1": "npm:prop-types@15.8.1", 19 | "npm:react": "npm:react@18.2.0", 20 | "npm:react-dom@18": "npm:react-dom@18.2.0_react@18.2.0", 21 | "npm:react-dom@^18.2.0": "npm:react-dom@18.2.0_react@18.2.0", 22 | "npm:react@18": "npm:react@18.2.0", 23 | "npm:react@^18.2.0": "npm:react@18.2.0", 24 | "npm:tsup@^6.6.3": "npm:tsup@6.7.0_typescript@4.9.5_esbuild@0.17.19", 25 | "npm:typescript@^4.9.5": "npm:typescript@4.9.5" 26 | }, 27 | "npm": { 28 | "@aashutoshrathi/word-wrap@1.2.6": { 29 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 30 | "dependencies": {} 31 | }, 32 | "@esbuild/android-arm64@0.17.19": { 33 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 34 | "dependencies": {} 35 | }, 36 | "@esbuild/android-arm@0.17.19": { 37 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 38 | "dependencies": {} 39 | }, 40 | "@esbuild/android-x64@0.17.19": { 41 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 42 | "dependencies": {} 43 | }, 44 | "@esbuild/darwin-arm64@0.17.19": { 45 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 46 | "dependencies": {} 47 | }, 48 | "@esbuild/darwin-x64@0.17.19": { 49 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 50 | "dependencies": {} 51 | }, 52 | "@esbuild/freebsd-arm64@0.17.19": { 53 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 54 | "dependencies": {} 55 | }, 56 | "@esbuild/freebsd-x64@0.17.19": { 57 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 58 | "dependencies": {} 59 | }, 60 | "@esbuild/linux-arm64@0.17.19": { 61 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 62 | "dependencies": {} 63 | }, 64 | "@esbuild/linux-arm@0.17.19": { 65 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 66 | "dependencies": {} 67 | }, 68 | "@esbuild/linux-ia32@0.17.19": { 69 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 70 | "dependencies": {} 71 | }, 72 | "@esbuild/linux-loong64@0.17.19": { 73 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 74 | "dependencies": {} 75 | }, 76 | "@esbuild/linux-mips64el@0.17.19": { 77 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 78 | "dependencies": {} 79 | }, 80 | "@esbuild/linux-ppc64@0.17.19": { 81 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 82 | "dependencies": {} 83 | }, 84 | "@esbuild/linux-riscv64@0.17.19": { 85 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 86 | "dependencies": {} 87 | }, 88 | "@esbuild/linux-s390x@0.17.19": { 89 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 90 | "dependencies": {} 91 | }, 92 | "@esbuild/linux-x64@0.17.19": { 93 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 94 | "dependencies": {} 95 | }, 96 | "@esbuild/netbsd-x64@0.17.19": { 97 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 98 | "dependencies": {} 99 | }, 100 | "@esbuild/openbsd-x64@0.17.19": { 101 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 102 | "dependencies": {} 103 | }, 104 | "@esbuild/sunos-x64@0.17.19": { 105 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 106 | "dependencies": {} 107 | }, 108 | "@esbuild/win32-arm64@0.17.19": { 109 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 110 | "dependencies": {} 111 | }, 112 | "@esbuild/win32-ia32@0.17.19": { 113 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 114 | "dependencies": {} 115 | }, 116 | "@esbuild/win32-x64@0.17.19": { 117 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 118 | "dependencies": {} 119 | }, 120 | "@eslint-community/eslint-utils@4.4.0_eslint@8.57.0": { 121 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 122 | "dependencies": { 123 | "eslint": "eslint@8.57.0", 124 | "eslint-visitor-keys": "eslint-visitor-keys@3.4.3" 125 | } 126 | }, 127 | "@eslint-community/regexpp@4.10.0": { 128 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 129 | "dependencies": {} 130 | }, 131 | "@eslint/eslintrc@2.1.4": { 132 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 133 | "dependencies": { 134 | "ajv": "ajv@6.12.6", 135 | "debug": "debug@4.3.4", 136 | "espree": "espree@9.6.1_acorn@8.11.3", 137 | "globals": "globals@13.24.0", 138 | "ignore": "ignore@5.3.1", 139 | "import-fresh": "import-fresh@3.3.0", 140 | "js-yaml": "js-yaml@4.1.0", 141 | "minimatch": "minimatch@3.1.2", 142 | "strip-json-comments": "strip-json-comments@3.1.1" 143 | } 144 | }, 145 | "@eslint/js@8.57.0": { 146 | "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", 147 | "dependencies": {} 148 | }, 149 | "@humanwhocodes/config-array@0.11.14": { 150 | "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 151 | "dependencies": { 152 | "@humanwhocodes/object-schema": "@humanwhocodes/object-schema@2.0.2", 153 | "debug": "debug@4.3.4", 154 | "minimatch": "minimatch@3.1.2" 155 | } 156 | }, 157 | "@humanwhocodes/module-importer@1.0.1": { 158 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 159 | "dependencies": {} 160 | }, 161 | "@humanwhocodes/object-schema@2.0.2": { 162 | "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 163 | "dependencies": {} 164 | }, 165 | "@isaacs/cliui@8.0.2": { 166 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 167 | "dependencies": { 168 | "string-width": "string-width@5.1.2", 169 | "string-width-cjs": "string-width@4.2.3", 170 | "strip-ansi": "strip-ansi@7.1.0", 171 | "strip-ansi-cjs": "strip-ansi@6.0.1", 172 | "wrap-ansi": "wrap-ansi@8.1.0", 173 | "wrap-ansi-cjs": "wrap-ansi@7.0.0" 174 | } 175 | }, 176 | "@jridgewell/gen-mapping@0.3.5": { 177 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 178 | "dependencies": { 179 | "@jridgewell/set-array": "@jridgewell/set-array@1.2.1", 180 | "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.4.15", 181 | "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" 182 | } 183 | }, 184 | "@jridgewell/resolve-uri@3.1.2": { 185 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 186 | "dependencies": {} 187 | }, 188 | "@jridgewell/set-array@1.2.1": { 189 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 190 | "dependencies": {} 191 | }, 192 | "@jridgewell/sourcemap-codec@1.4.15": { 193 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 194 | "dependencies": {} 195 | }, 196 | "@jridgewell/trace-mapping@0.3.25": { 197 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 198 | "dependencies": { 199 | "@jridgewell/resolve-uri": "@jridgewell/resolve-uri@3.1.2", 200 | "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.4.15" 201 | } 202 | }, 203 | "@next/env@13.5.6": { 204 | "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==", 205 | "dependencies": {} 206 | }, 207 | "@next/swc-darwin-arm64@13.5.6": { 208 | "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", 209 | "dependencies": {} 210 | }, 211 | "@next/swc-darwin-x64@13.5.6": { 212 | "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", 213 | "dependencies": {} 214 | }, 215 | "@next/swc-linux-arm64-gnu@13.5.6": { 216 | "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", 217 | "dependencies": {} 218 | }, 219 | "@next/swc-linux-arm64-musl@13.5.6": { 220 | "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", 221 | "dependencies": {} 222 | }, 223 | "@next/swc-linux-x64-gnu@13.5.6": { 224 | "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", 225 | "dependencies": {} 226 | }, 227 | "@next/swc-linux-x64-musl@13.5.6": { 228 | "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", 229 | "dependencies": {} 230 | }, 231 | "@next/swc-win32-arm64-msvc@13.5.6": { 232 | "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", 233 | "dependencies": {} 234 | }, 235 | "@next/swc-win32-ia32-msvc@13.5.6": { 236 | "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", 237 | "dependencies": {} 238 | }, 239 | "@next/swc-win32-x64-msvc@13.5.6": { 240 | "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", 241 | "dependencies": {} 242 | }, 243 | "@nodelib/fs.scandir@2.1.5": { 244 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 245 | "dependencies": { 246 | "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", 247 | "run-parallel": "run-parallel@1.2.0" 248 | } 249 | }, 250 | "@nodelib/fs.stat@2.0.5": { 251 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 252 | "dependencies": {} 253 | }, 254 | "@nodelib/fs.walk@1.2.8": { 255 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 256 | "dependencies": { 257 | "@nodelib/fs.scandir": "@nodelib/fs.scandir@2.1.5", 258 | "fastq": "fastq@1.17.1" 259 | } 260 | }, 261 | "@pkgjs/parseargs@0.11.0": { 262 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 263 | "dependencies": {} 264 | }, 265 | "@swc/helpers@0.5.2": { 266 | "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", 267 | "dependencies": { 268 | "tslib": "tslib@2.6.2" 269 | } 270 | }, 271 | "@types/json-schema@7.0.15": { 272 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 273 | "dependencies": {} 274 | }, 275 | "@types/node@18.19.24": { 276 | "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", 277 | "dependencies": { 278 | "undici-types": "undici-types@5.26.5" 279 | } 280 | }, 281 | "@types/nprogress@0.2.2": { 282 | "integrity": "sha512-2wLrSJXLztGmr7wXwM0hA/wuIOY9DznVdd+ZFofHOiXcj9JnVt+2ZeLRJ7v5ZVlmheSkUOSg3Q3O4Ce7yji79A==", 283 | "dependencies": {} 284 | }, 285 | "@types/nprogress@0.2.3": { 286 | "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==", 287 | "dependencies": {} 288 | }, 289 | "@types/prop-types@15.7.11": { 290 | "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", 291 | "dependencies": {} 292 | }, 293 | "@types/react-dom@18.2.22": { 294 | "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", 295 | "dependencies": { 296 | "@types/react": "@types/react@18.2.66" 297 | } 298 | }, 299 | "@types/react@18.2.66": { 300 | "integrity": "sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==", 301 | "dependencies": { 302 | "@types/prop-types": "@types/prop-types@15.7.11", 303 | "@types/scheduler": "@types/scheduler@0.16.8", 304 | "csstype": "csstype@3.1.3" 305 | } 306 | }, 307 | "@types/scheduler@0.16.8": { 308 | "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", 309 | "dependencies": {} 310 | }, 311 | "@types/semver@7.5.8": { 312 | "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", 313 | "dependencies": {} 314 | }, 315 | "@typescript-eslint/eslint-plugin@5.62.0_@typescript-eslint+parser@5.62.0__eslint@8.57.0__typescript@4.9.5_eslint@8.57.0_typescript@4.9.5": { 316 | "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", 317 | "dependencies": { 318 | "@eslint-community/regexpp": "@eslint-community/regexpp@4.10.0", 319 | "@typescript-eslint/parser": "@typescript-eslint/parser@5.62.0_eslint@8.57.0_typescript@4.9.5", 320 | "@typescript-eslint/scope-manager": "@typescript-eslint/scope-manager@5.62.0", 321 | "@typescript-eslint/type-utils": "@typescript-eslint/type-utils@5.62.0_eslint@8.57.0_typescript@4.9.5", 322 | "@typescript-eslint/utils": "@typescript-eslint/utils@5.62.0_eslint@8.57.0_typescript@4.9.5", 323 | "debug": "debug@4.3.4", 324 | "eslint": "eslint@8.57.0", 325 | "graphemer": "graphemer@1.4.0", 326 | "ignore": "ignore@5.3.1", 327 | "natural-compare-lite": "natural-compare-lite@1.4.0", 328 | "semver": "semver@7.6.0", 329 | "tsutils": "tsutils@3.21.0_typescript@4.9.5" 330 | } 331 | }, 332 | "@typescript-eslint/parser@5.62.0_eslint@8.57.0_typescript@4.9.5": { 333 | "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", 334 | "dependencies": { 335 | "@typescript-eslint/scope-manager": "@typescript-eslint/scope-manager@5.62.0", 336 | "@typescript-eslint/types": "@typescript-eslint/types@5.62.0", 337 | "@typescript-eslint/typescript-estree": "@typescript-eslint/typescript-estree@5.62.0_typescript@4.9.5", 338 | "debug": "debug@4.3.4", 339 | "eslint": "eslint@8.57.0" 340 | } 341 | }, 342 | "@typescript-eslint/scope-manager@5.62.0": { 343 | "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", 344 | "dependencies": { 345 | "@typescript-eslint/types": "@typescript-eslint/types@5.62.0", 346 | "@typescript-eslint/visitor-keys": "@typescript-eslint/visitor-keys@5.62.0" 347 | } 348 | }, 349 | "@typescript-eslint/type-utils@5.62.0_eslint@8.57.0_typescript@4.9.5": { 350 | "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", 351 | "dependencies": { 352 | "@typescript-eslint/typescript-estree": "@typescript-eslint/typescript-estree@5.62.0_typescript@4.9.5", 353 | "@typescript-eslint/utils": "@typescript-eslint/utils@5.62.0_eslint@8.57.0_typescript@4.9.5", 354 | "debug": "debug@4.3.4", 355 | "eslint": "eslint@8.57.0", 356 | "tsutils": "tsutils@3.21.0_typescript@4.9.5" 357 | } 358 | }, 359 | "@typescript-eslint/types@5.62.0": { 360 | "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", 361 | "dependencies": {} 362 | }, 363 | "@typescript-eslint/typescript-estree@5.62.0_typescript@4.9.5": { 364 | "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", 365 | "dependencies": { 366 | "@typescript-eslint/types": "@typescript-eslint/types@5.62.0", 367 | "@typescript-eslint/visitor-keys": "@typescript-eslint/visitor-keys@5.62.0", 368 | "debug": "debug@4.3.4", 369 | "globby": "globby@11.1.0", 370 | "is-glob": "is-glob@4.0.3", 371 | "semver": "semver@7.6.0", 372 | "tsutils": "tsutils@3.21.0_typescript@4.9.5" 373 | } 374 | }, 375 | "@typescript-eslint/utils@5.62.0_eslint@8.57.0_typescript@4.9.5": { 376 | "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", 377 | "dependencies": { 378 | "@eslint-community/eslint-utils": "@eslint-community/eslint-utils@4.4.0_eslint@8.57.0", 379 | "@types/json-schema": "@types/json-schema@7.0.15", 380 | "@types/semver": "@types/semver@7.5.8", 381 | "@typescript-eslint/scope-manager": "@typescript-eslint/scope-manager@5.62.0", 382 | "@typescript-eslint/types": "@typescript-eslint/types@5.62.0", 383 | "@typescript-eslint/typescript-estree": "@typescript-eslint/typescript-estree@5.62.0_typescript@4.9.5", 384 | "eslint": "eslint@8.57.0", 385 | "eslint-scope": "eslint-scope@5.1.1", 386 | "semver": "semver@7.6.0" 387 | } 388 | }, 389 | "@typescript-eslint/visitor-keys@5.62.0": { 390 | "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", 391 | "dependencies": { 392 | "@typescript-eslint/types": "@typescript-eslint/types@5.62.0", 393 | "eslint-visitor-keys": "eslint-visitor-keys@3.4.3" 394 | } 395 | }, 396 | "@ungap/structured-clone@1.2.0": { 397 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 398 | "dependencies": {} 399 | }, 400 | "acorn-jsx@5.3.2_acorn@8.11.3": { 401 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 402 | "dependencies": { 403 | "acorn": "acorn@8.11.3" 404 | } 405 | }, 406 | "acorn@8.11.3": { 407 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 408 | "dependencies": {} 409 | }, 410 | "ajv@6.12.6": { 411 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 412 | "dependencies": { 413 | "fast-deep-equal": "fast-deep-equal@3.1.3", 414 | "fast-json-stable-stringify": "fast-json-stable-stringify@2.1.0", 415 | "json-schema-traverse": "json-schema-traverse@0.4.1", 416 | "uri-js": "uri-js@4.4.1" 417 | } 418 | }, 419 | "ansi-regex@5.0.1": { 420 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 421 | "dependencies": {} 422 | }, 423 | "ansi-regex@6.0.1": { 424 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 425 | "dependencies": {} 426 | }, 427 | "ansi-styles@4.3.0": { 428 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 429 | "dependencies": { 430 | "color-convert": "color-convert@2.0.1" 431 | } 432 | }, 433 | "ansi-styles@6.2.1": { 434 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 435 | "dependencies": {} 436 | }, 437 | "any-promise@1.3.0": { 438 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 439 | "dependencies": {} 440 | }, 441 | "anymatch@3.1.3": { 442 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 443 | "dependencies": { 444 | "normalize-path": "normalize-path@3.0.0", 445 | "picomatch": "picomatch@2.3.1" 446 | } 447 | }, 448 | "argparse@2.0.1": { 449 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 450 | "dependencies": {} 451 | }, 452 | "array-union@2.1.0": { 453 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 454 | "dependencies": {} 455 | }, 456 | "balanced-match@1.0.2": { 457 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 458 | "dependencies": {} 459 | }, 460 | "binary-extensions@2.3.0": { 461 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 462 | "dependencies": {} 463 | }, 464 | "brace-expansion@1.1.11": { 465 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 466 | "dependencies": { 467 | "balanced-match": "balanced-match@1.0.2", 468 | "concat-map": "concat-map@0.0.1" 469 | } 470 | }, 471 | "brace-expansion@2.0.1": { 472 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 473 | "dependencies": { 474 | "balanced-match": "balanced-match@1.0.2" 475 | } 476 | }, 477 | "braces@3.0.2": { 478 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 479 | "dependencies": { 480 | "fill-range": "fill-range@7.0.1" 481 | } 482 | }, 483 | "bundle-require@4.0.2_esbuild@0.17.19": { 484 | "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==", 485 | "dependencies": { 486 | "esbuild": "esbuild@0.17.19", 487 | "load-tsconfig": "load-tsconfig@0.2.5" 488 | } 489 | }, 490 | "busboy@1.6.0": { 491 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 492 | "dependencies": { 493 | "streamsearch": "streamsearch@1.1.0" 494 | } 495 | }, 496 | "cac@6.7.14": { 497 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 498 | "dependencies": {} 499 | }, 500 | "callsites@3.1.0": { 501 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 502 | "dependencies": {} 503 | }, 504 | "caniuse-lite@1.0.30001597": { 505 | "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", 506 | "dependencies": {} 507 | }, 508 | "chalk@4.1.2": { 509 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 510 | "dependencies": { 511 | "ansi-styles": "ansi-styles@4.3.0", 512 | "supports-color": "supports-color@7.2.0" 513 | } 514 | }, 515 | "chokidar@3.6.0": { 516 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 517 | "dependencies": { 518 | "anymatch": "anymatch@3.1.3", 519 | "braces": "braces@3.0.2", 520 | "fsevents": "fsevents@2.3.3", 521 | "glob-parent": "glob-parent@5.1.2", 522 | "is-binary-path": "is-binary-path@2.1.0", 523 | "is-glob": "is-glob@4.0.3", 524 | "normalize-path": "normalize-path@3.0.0", 525 | "readdirp": "readdirp@3.6.0" 526 | } 527 | }, 528 | "client-only@0.0.1": { 529 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", 530 | "dependencies": {} 531 | }, 532 | "color-convert@2.0.1": { 533 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 534 | "dependencies": { 535 | "color-name": "color-name@1.1.4" 536 | } 537 | }, 538 | "color-name@1.1.4": { 539 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 540 | "dependencies": {} 541 | }, 542 | "commander@4.1.1": { 543 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 544 | "dependencies": {} 545 | }, 546 | "concat-map@0.0.1": { 547 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 548 | "dependencies": {} 549 | }, 550 | "cross-spawn@7.0.3": { 551 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 552 | "dependencies": { 553 | "path-key": "path-key@3.1.1", 554 | "shebang-command": "shebang-command@2.0.0", 555 | "which": "which@2.0.2" 556 | } 557 | }, 558 | "csstype@3.1.3": { 559 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 560 | "dependencies": {} 561 | }, 562 | "debug@4.3.4": { 563 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 564 | "dependencies": { 565 | "ms": "ms@2.1.2" 566 | } 567 | }, 568 | "deep-is@0.1.4": { 569 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 570 | "dependencies": {} 571 | }, 572 | "dir-glob@3.0.1": { 573 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 574 | "dependencies": { 575 | "path-type": "path-type@4.0.0" 576 | } 577 | }, 578 | "doctrine@3.0.0": { 579 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 580 | "dependencies": { 581 | "esutils": "esutils@2.0.3" 582 | } 583 | }, 584 | "eastasianwidth@0.2.0": { 585 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 586 | "dependencies": {} 587 | }, 588 | "emoji-regex@8.0.0": { 589 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 590 | "dependencies": {} 591 | }, 592 | "emoji-regex@9.2.2": { 593 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 594 | "dependencies": {} 595 | }, 596 | "esbuild@0.17.19": { 597 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 598 | "dependencies": { 599 | "@esbuild/android-arm": "@esbuild/android-arm@0.17.19", 600 | "@esbuild/android-arm64": "@esbuild/android-arm64@0.17.19", 601 | "@esbuild/android-x64": "@esbuild/android-x64@0.17.19", 602 | "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.17.19", 603 | "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.17.19", 604 | "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.17.19", 605 | "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.17.19", 606 | "@esbuild/linux-arm": "@esbuild/linux-arm@0.17.19", 607 | "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.17.19", 608 | "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.17.19", 609 | "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.17.19", 610 | "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.17.19", 611 | "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.17.19", 612 | "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.17.19", 613 | "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.17.19", 614 | "@esbuild/linux-x64": "@esbuild/linux-x64@0.17.19", 615 | "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.17.19", 616 | "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.17.19", 617 | "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.17.19", 618 | "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.17.19", 619 | "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.17.19", 620 | "@esbuild/win32-x64": "@esbuild/win32-x64@0.17.19" 621 | } 622 | }, 623 | "escape-string-regexp@4.0.0": { 624 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 625 | "dependencies": {} 626 | }, 627 | "eslint-scope@5.1.1": { 628 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 629 | "dependencies": { 630 | "esrecurse": "esrecurse@4.3.0", 631 | "estraverse": "estraverse@4.3.0" 632 | } 633 | }, 634 | "eslint-scope@7.2.2": { 635 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 636 | "dependencies": { 637 | "esrecurse": "esrecurse@4.3.0", 638 | "estraverse": "estraverse@5.3.0" 639 | } 640 | }, 641 | "eslint-visitor-keys@3.4.3": { 642 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 643 | "dependencies": {} 644 | }, 645 | "eslint@8.57.0": { 646 | "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", 647 | "dependencies": { 648 | "@eslint-community/eslint-utils": "@eslint-community/eslint-utils@4.4.0_eslint@8.57.0", 649 | "@eslint-community/regexpp": "@eslint-community/regexpp@4.10.0", 650 | "@eslint/eslintrc": "@eslint/eslintrc@2.1.4", 651 | "@eslint/js": "@eslint/js@8.57.0", 652 | "@humanwhocodes/config-array": "@humanwhocodes/config-array@0.11.14", 653 | "@humanwhocodes/module-importer": "@humanwhocodes/module-importer@1.0.1", 654 | "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", 655 | "@ungap/structured-clone": "@ungap/structured-clone@1.2.0", 656 | "ajv": "ajv@6.12.6", 657 | "chalk": "chalk@4.1.2", 658 | "cross-spawn": "cross-spawn@7.0.3", 659 | "debug": "debug@4.3.4", 660 | "doctrine": "doctrine@3.0.0", 661 | "escape-string-regexp": "escape-string-regexp@4.0.0", 662 | "eslint-scope": "eslint-scope@7.2.2", 663 | "eslint-visitor-keys": "eslint-visitor-keys@3.4.3", 664 | "espree": "espree@9.6.1_acorn@8.11.3", 665 | "esquery": "esquery@1.5.0", 666 | "esutils": "esutils@2.0.3", 667 | "fast-deep-equal": "fast-deep-equal@3.1.3", 668 | "file-entry-cache": "file-entry-cache@6.0.1", 669 | "find-up": "find-up@5.0.0", 670 | "glob-parent": "glob-parent@6.0.2", 671 | "globals": "globals@13.24.0", 672 | "graphemer": "graphemer@1.4.0", 673 | "ignore": "ignore@5.3.1", 674 | "imurmurhash": "imurmurhash@0.1.4", 675 | "is-glob": "is-glob@4.0.3", 676 | "is-path-inside": "is-path-inside@3.0.3", 677 | "js-yaml": "js-yaml@4.1.0", 678 | "json-stable-stringify-without-jsonify": "json-stable-stringify-without-jsonify@1.0.1", 679 | "levn": "levn@0.4.1", 680 | "lodash.merge": "lodash.merge@4.6.2", 681 | "minimatch": "minimatch@3.1.2", 682 | "natural-compare": "natural-compare@1.4.0", 683 | "optionator": "optionator@0.9.3", 684 | "strip-ansi": "strip-ansi@6.0.1", 685 | "text-table": "text-table@0.2.0" 686 | } 687 | }, 688 | "espree@9.6.1_acorn@8.11.3": { 689 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 690 | "dependencies": { 691 | "acorn": "acorn@8.11.3", 692 | "acorn-jsx": "acorn-jsx@5.3.2_acorn@8.11.3", 693 | "eslint-visitor-keys": "eslint-visitor-keys@3.4.3" 694 | } 695 | }, 696 | "esquery@1.5.0": { 697 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 698 | "dependencies": { 699 | "estraverse": "estraverse@5.3.0" 700 | } 701 | }, 702 | "esrecurse@4.3.0": { 703 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 704 | "dependencies": { 705 | "estraverse": "estraverse@5.3.0" 706 | } 707 | }, 708 | "estraverse@4.3.0": { 709 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 710 | "dependencies": {} 711 | }, 712 | "estraverse@5.3.0": { 713 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 714 | "dependencies": {} 715 | }, 716 | "esutils@2.0.3": { 717 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 718 | "dependencies": {} 719 | }, 720 | "execa@5.1.1": { 721 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 722 | "dependencies": { 723 | "cross-spawn": "cross-spawn@7.0.3", 724 | "get-stream": "get-stream@6.0.1", 725 | "human-signals": "human-signals@2.1.0", 726 | "is-stream": "is-stream@2.0.1", 727 | "merge-stream": "merge-stream@2.0.0", 728 | "npm-run-path": "npm-run-path@4.0.1", 729 | "onetime": "onetime@5.1.2", 730 | "signal-exit": "signal-exit@3.0.7", 731 | "strip-final-newline": "strip-final-newline@2.0.0" 732 | } 733 | }, 734 | "fast-deep-equal@3.1.3": { 735 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 736 | "dependencies": {} 737 | }, 738 | "fast-glob@3.3.2": { 739 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 740 | "dependencies": { 741 | "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", 742 | "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", 743 | "glob-parent": "glob-parent@5.1.2", 744 | "merge2": "merge2@1.4.1", 745 | "micromatch": "micromatch@4.0.5" 746 | } 747 | }, 748 | "fast-json-stable-stringify@2.1.0": { 749 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 750 | "dependencies": {} 751 | }, 752 | "fast-levenshtein@2.0.6": { 753 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 754 | "dependencies": {} 755 | }, 756 | "fastq@1.17.1": { 757 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 758 | "dependencies": { 759 | "reusify": "reusify@1.0.4" 760 | } 761 | }, 762 | "file-entry-cache@6.0.1": { 763 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 764 | "dependencies": { 765 | "flat-cache": "flat-cache@3.2.0" 766 | } 767 | }, 768 | "fill-range@7.0.1": { 769 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 770 | "dependencies": { 771 | "to-regex-range": "to-regex-range@5.0.1" 772 | } 773 | }, 774 | "find-up@5.0.0": { 775 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 776 | "dependencies": { 777 | "locate-path": "locate-path@6.0.0", 778 | "path-exists": "path-exists@4.0.0" 779 | } 780 | }, 781 | "flat-cache@3.2.0": { 782 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 783 | "dependencies": { 784 | "flatted": "flatted@3.3.1", 785 | "keyv": "keyv@4.5.4", 786 | "rimraf": "rimraf@3.0.2" 787 | } 788 | }, 789 | "flatted@3.3.1": { 790 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 791 | "dependencies": {} 792 | }, 793 | "foreground-child@3.1.1": { 794 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", 795 | "dependencies": { 796 | "cross-spawn": "cross-spawn@7.0.3", 797 | "signal-exit": "signal-exit@4.1.0" 798 | } 799 | }, 800 | "fs.realpath@1.0.0": { 801 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 802 | "dependencies": {} 803 | }, 804 | "fsevents@2.3.3": { 805 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 806 | "dependencies": {} 807 | }, 808 | "get-stream@6.0.1": { 809 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 810 | "dependencies": {} 811 | }, 812 | "glob-parent@5.1.2": { 813 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 814 | "dependencies": { 815 | "is-glob": "is-glob@4.0.3" 816 | } 817 | }, 818 | "glob-parent@6.0.2": { 819 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 820 | "dependencies": { 821 | "is-glob": "is-glob@4.0.3" 822 | } 823 | }, 824 | "glob-to-regexp@0.4.1": { 825 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 826 | "dependencies": {} 827 | }, 828 | "glob@10.3.10": { 829 | "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", 830 | "dependencies": { 831 | "foreground-child": "foreground-child@3.1.1", 832 | "jackspeak": "jackspeak@2.3.6", 833 | "minimatch": "minimatch@9.0.3", 834 | "minipass": "minipass@7.0.4", 835 | "path-scurry": "path-scurry@1.10.1" 836 | } 837 | }, 838 | "glob@7.2.3": { 839 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 840 | "dependencies": { 841 | "fs.realpath": "fs.realpath@1.0.0", 842 | "inflight": "inflight@1.0.6", 843 | "inherits": "inherits@2.0.4", 844 | "minimatch": "minimatch@3.1.2", 845 | "once": "once@1.4.0", 846 | "path-is-absolute": "path-is-absolute@1.0.1" 847 | } 848 | }, 849 | "globals@13.24.0": { 850 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 851 | "dependencies": { 852 | "type-fest": "type-fest@0.20.2" 853 | } 854 | }, 855 | "globby@11.1.0": { 856 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 857 | "dependencies": { 858 | "array-union": "array-union@2.1.0", 859 | "dir-glob": "dir-glob@3.0.1", 860 | "fast-glob": "fast-glob@3.3.2", 861 | "ignore": "ignore@5.3.1", 862 | "merge2": "merge2@1.4.1", 863 | "slash": "slash@3.0.0" 864 | } 865 | }, 866 | "graceful-fs@4.2.11": { 867 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 868 | "dependencies": {} 869 | }, 870 | "graphemer@1.4.0": { 871 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 872 | "dependencies": {} 873 | }, 874 | "has-flag@4.0.0": { 875 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 876 | "dependencies": {} 877 | }, 878 | "human-signals@2.1.0": { 879 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 880 | "dependencies": {} 881 | }, 882 | "ignore@5.3.1": { 883 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 884 | "dependencies": {} 885 | }, 886 | "import-fresh@3.3.0": { 887 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 888 | "dependencies": { 889 | "parent-module": "parent-module@1.0.1", 890 | "resolve-from": "resolve-from@4.0.0" 891 | } 892 | }, 893 | "imurmurhash@0.1.4": { 894 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 895 | "dependencies": {} 896 | }, 897 | "inflight@1.0.6": { 898 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 899 | "dependencies": { 900 | "once": "once@1.4.0", 901 | "wrappy": "wrappy@1.0.2" 902 | } 903 | }, 904 | "inherits@2.0.4": { 905 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 906 | "dependencies": {} 907 | }, 908 | "is-binary-path@2.1.0": { 909 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 910 | "dependencies": { 911 | "binary-extensions": "binary-extensions@2.3.0" 912 | } 913 | }, 914 | "is-extglob@2.1.1": { 915 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 916 | "dependencies": {} 917 | }, 918 | "is-fullwidth-code-point@3.0.0": { 919 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 920 | "dependencies": {} 921 | }, 922 | "is-glob@4.0.3": { 923 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 924 | "dependencies": { 925 | "is-extglob": "is-extglob@2.1.1" 926 | } 927 | }, 928 | "is-number@7.0.0": { 929 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 930 | "dependencies": {} 931 | }, 932 | "is-path-inside@3.0.3": { 933 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 934 | "dependencies": {} 935 | }, 936 | "is-stream@2.0.1": { 937 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 938 | "dependencies": {} 939 | }, 940 | "isexe@2.0.0": { 941 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 942 | "dependencies": {} 943 | }, 944 | "jackspeak@2.3.6": { 945 | "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", 946 | "dependencies": { 947 | "@isaacs/cliui": "@isaacs/cliui@8.0.2", 948 | "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" 949 | } 950 | }, 951 | "joycon@3.1.1": { 952 | "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", 953 | "dependencies": {} 954 | }, 955 | "js-tokens@4.0.0": { 956 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 957 | "dependencies": {} 958 | }, 959 | "js-yaml@4.1.0": { 960 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 961 | "dependencies": { 962 | "argparse": "argparse@2.0.1" 963 | } 964 | }, 965 | "json-buffer@3.0.1": { 966 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 967 | "dependencies": {} 968 | }, 969 | "json-schema-traverse@0.4.1": { 970 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 971 | "dependencies": {} 972 | }, 973 | "json-stable-stringify-without-jsonify@1.0.1": { 974 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 975 | "dependencies": {} 976 | }, 977 | "keyv@4.5.4": { 978 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 979 | "dependencies": { 980 | "json-buffer": "json-buffer@3.0.1" 981 | } 982 | }, 983 | "levn@0.4.1": { 984 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 985 | "dependencies": { 986 | "prelude-ls": "prelude-ls@1.2.1", 987 | "type-check": "type-check@0.4.0" 988 | } 989 | }, 990 | "lilconfig@2.1.0": { 991 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 992 | "dependencies": {} 993 | }, 994 | "lines-and-columns@1.2.4": { 995 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 996 | "dependencies": {} 997 | }, 998 | "load-tsconfig@0.2.5": { 999 | "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", 1000 | "dependencies": {} 1001 | }, 1002 | "locate-path@6.0.0": { 1003 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1004 | "dependencies": { 1005 | "p-locate": "p-locate@5.0.0" 1006 | } 1007 | }, 1008 | "lodash.merge@4.6.2": { 1009 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1010 | "dependencies": {} 1011 | }, 1012 | "lodash.sortby@4.7.0": { 1013 | "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", 1014 | "dependencies": {} 1015 | }, 1016 | "loose-envify@1.4.0": { 1017 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1018 | "dependencies": { 1019 | "js-tokens": "js-tokens@4.0.0" 1020 | } 1021 | }, 1022 | "lru-cache@10.2.0": { 1023 | "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", 1024 | "dependencies": {} 1025 | }, 1026 | "lru-cache@6.0.0": { 1027 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1028 | "dependencies": { 1029 | "yallist": "yallist@4.0.0" 1030 | } 1031 | }, 1032 | "merge-stream@2.0.0": { 1033 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1034 | "dependencies": {} 1035 | }, 1036 | "merge2@1.4.1": { 1037 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1038 | "dependencies": {} 1039 | }, 1040 | "micromatch@4.0.5": { 1041 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1042 | "dependencies": { 1043 | "braces": "braces@3.0.2", 1044 | "picomatch": "picomatch@2.3.1" 1045 | } 1046 | }, 1047 | "mimic-fn@2.1.0": { 1048 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1049 | "dependencies": {} 1050 | }, 1051 | "minimatch@3.1.2": { 1052 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1053 | "dependencies": { 1054 | "brace-expansion": "brace-expansion@1.1.11" 1055 | } 1056 | }, 1057 | "minimatch@9.0.3": { 1058 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 1059 | "dependencies": { 1060 | "brace-expansion": "brace-expansion@2.0.1" 1061 | } 1062 | }, 1063 | "minipass@7.0.4": { 1064 | "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", 1065 | "dependencies": {} 1066 | }, 1067 | "ms@2.1.2": { 1068 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1069 | "dependencies": {} 1070 | }, 1071 | "mz@2.7.0": { 1072 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1073 | "dependencies": { 1074 | "any-promise": "any-promise@1.3.0", 1075 | "object-assign": "object-assign@4.1.1", 1076 | "thenify-all": "thenify-all@1.6.0" 1077 | } 1078 | }, 1079 | "nanoid@3.3.7": { 1080 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1081 | "dependencies": {} 1082 | }, 1083 | "natural-compare-lite@1.4.0": { 1084 | "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", 1085 | "dependencies": {} 1086 | }, 1087 | "natural-compare@1.4.0": { 1088 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 1089 | "dependencies": {} 1090 | }, 1091 | "next@13.5.6_react@18.2.0_react-dom@18.2.0__react@18.2.0": { 1092 | "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", 1093 | "dependencies": { 1094 | "@next/env": "@next/env@13.5.6", 1095 | "@next/swc-darwin-arm64": "@next/swc-darwin-arm64@13.5.6", 1096 | "@next/swc-darwin-x64": "@next/swc-darwin-x64@13.5.6", 1097 | "@next/swc-linux-arm64-gnu": "@next/swc-linux-arm64-gnu@13.5.6", 1098 | "@next/swc-linux-arm64-musl": "@next/swc-linux-arm64-musl@13.5.6", 1099 | "@next/swc-linux-x64-gnu": "@next/swc-linux-x64-gnu@13.5.6", 1100 | "@next/swc-linux-x64-musl": "@next/swc-linux-x64-musl@13.5.6", 1101 | "@next/swc-win32-arm64-msvc": "@next/swc-win32-arm64-msvc@13.5.6", 1102 | "@next/swc-win32-ia32-msvc": "@next/swc-win32-ia32-msvc@13.5.6", 1103 | "@next/swc-win32-x64-msvc": "@next/swc-win32-x64-msvc@13.5.6", 1104 | "@swc/helpers": "@swc/helpers@0.5.2", 1105 | "busboy": "busboy@1.6.0", 1106 | "caniuse-lite": "caniuse-lite@1.0.30001597", 1107 | "postcss": "postcss@8.4.31", 1108 | "react": "react@18.2.0", 1109 | "react-dom": "react-dom@18.2.0_react@18.2.0", 1110 | "styled-jsx": "styled-jsx@5.1.1_react@18.2.0", 1111 | "watchpack": "watchpack@2.4.0" 1112 | } 1113 | }, 1114 | "normalize-path@3.0.0": { 1115 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1116 | "dependencies": {} 1117 | }, 1118 | "npm-run-path@4.0.1": { 1119 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1120 | "dependencies": { 1121 | "path-key": "path-key@3.1.1" 1122 | } 1123 | }, 1124 | "nprogress@0.2.0": { 1125 | "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", 1126 | "dependencies": {} 1127 | }, 1128 | "object-assign@4.1.1": { 1129 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1130 | "dependencies": {} 1131 | }, 1132 | "once@1.4.0": { 1133 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1134 | "dependencies": { 1135 | "wrappy": "wrappy@1.0.2" 1136 | } 1137 | }, 1138 | "onetime@5.1.2": { 1139 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1140 | "dependencies": { 1141 | "mimic-fn": "mimic-fn@2.1.0" 1142 | } 1143 | }, 1144 | "optionator@0.9.3": { 1145 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 1146 | "dependencies": { 1147 | "@aashutoshrathi/word-wrap": "@aashutoshrathi/word-wrap@1.2.6", 1148 | "deep-is": "deep-is@0.1.4", 1149 | "fast-levenshtein": "fast-levenshtein@2.0.6", 1150 | "levn": "levn@0.4.1", 1151 | "prelude-ls": "prelude-ls@1.2.1", 1152 | "type-check": "type-check@0.4.0" 1153 | } 1154 | }, 1155 | "p-limit@3.1.0": { 1156 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1157 | "dependencies": { 1158 | "yocto-queue": "yocto-queue@0.1.0" 1159 | } 1160 | }, 1161 | "p-locate@5.0.0": { 1162 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1163 | "dependencies": { 1164 | "p-limit": "p-limit@3.1.0" 1165 | } 1166 | }, 1167 | "parent-module@1.0.1": { 1168 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1169 | "dependencies": { 1170 | "callsites": "callsites@3.1.0" 1171 | } 1172 | }, 1173 | "path-exists@4.0.0": { 1174 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1175 | "dependencies": {} 1176 | }, 1177 | "path-is-absolute@1.0.1": { 1178 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1179 | "dependencies": {} 1180 | }, 1181 | "path-key@3.1.1": { 1182 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1183 | "dependencies": {} 1184 | }, 1185 | "path-scurry@1.10.1": { 1186 | "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", 1187 | "dependencies": { 1188 | "lru-cache": "lru-cache@10.2.0", 1189 | "minipass": "minipass@7.0.4" 1190 | } 1191 | }, 1192 | "path-type@4.0.0": { 1193 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1194 | "dependencies": {} 1195 | }, 1196 | "picocolors@1.0.0": { 1197 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1198 | "dependencies": {} 1199 | }, 1200 | "picomatch@2.3.1": { 1201 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1202 | "dependencies": {} 1203 | }, 1204 | "pirates@4.0.6": { 1205 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1206 | "dependencies": {} 1207 | }, 1208 | "postcss-load-config@3.1.4": { 1209 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 1210 | "dependencies": { 1211 | "lilconfig": "lilconfig@2.1.0", 1212 | "yaml": "yaml@1.10.2" 1213 | } 1214 | }, 1215 | "postcss@8.4.31": { 1216 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 1217 | "dependencies": { 1218 | "nanoid": "nanoid@3.3.7", 1219 | "picocolors": "picocolors@1.0.0", 1220 | "source-map-js": "source-map-js@1.0.2" 1221 | } 1222 | }, 1223 | "preact-render-to-string@6.4.0_preact@10.19.6": { 1224 | "integrity": "sha512-pzDwezZaLbK371OiJjXDsZJwVOALzFX5M1wEh2Kr0pEApq5AV6bRH/DFbA/zNA7Lck/duyREPQLLvzu2G6hEQQ==", 1225 | "dependencies": { 1226 | "preact": "preact@10.19.6", 1227 | "pretty-format": "pretty-format@3.8.0" 1228 | } 1229 | }, 1230 | "preact@10.19.6": { 1231 | "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==", 1232 | "dependencies": {} 1233 | }, 1234 | "prelude-ls@1.2.1": { 1235 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1236 | "dependencies": {} 1237 | }, 1238 | "prettier@2.8.8": { 1239 | "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", 1240 | "dependencies": {} 1241 | }, 1242 | "pretty-format@3.8.0": { 1243 | "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", 1244 | "dependencies": {} 1245 | }, 1246 | "prop-types@15.8.1": { 1247 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 1248 | "dependencies": { 1249 | "loose-envify": "loose-envify@1.4.0", 1250 | "object-assign": "object-assign@4.1.1", 1251 | "react-is": "react-is@16.13.1" 1252 | } 1253 | }, 1254 | "punycode@2.3.1": { 1255 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1256 | "dependencies": {} 1257 | }, 1258 | "queue-microtask@1.2.3": { 1259 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1260 | "dependencies": {} 1261 | }, 1262 | "react-dom@18.2.0_react@18.2.0": { 1263 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 1264 | "dependencies": { 1265 | "loose-envify": "loose-envify@1.4.0", 1266 | "react": "react@18.2.0", 1267 | "scheduler": "scheduler@0.23.0" 1268 | } 1269 | }, 1270 | "react-is@16.13.1": { 1271 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 1272 | "dependencies": {} 1273 | }, 1274 | "react@18.2.0": { 1275 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 1276 | "dependencies": { 1277 | "loose-envify": "loose-envify@1.4.0" 1278 | } 1279 | }, 1280 | "readdirp@3.6.0": { 1281 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1282 | "dependencies": { 1283 | "picomatch": "picomatch@2.3.1" 1284 | } 1285 | }, 1286 | "resolve-from@4.0.0": { 1287 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1288 | "dependencies": {} 1289 | }, 1290 | "resolve-from@5.0.0": { 1291 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1292 | "dependencies": {} 1293 | }, 1294 | "reusify@1.0.4": { 1295 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1296 | "dependencies": {} 1297 | }, 1298 | "rimraf@3.0.2": { 1299 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1300 | "dependencies": { 1301 | "glob": "glob@7.2.3" 1302 | } 1303 | }, 1304 | "rollup@3.29.4": { 1305 | "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", 1306 | "dependencies": { 1307 | "fsevents": "fsevents@2.3.3" 1308 | } 1309 | }, 1310 | "run-parallel@1.2.0": { 1311 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1312 | "dependencies": { 1313 | "queue-microtask": "queue-microtask@1.2.3" 1314 | } 1315 | }, 1316 | "scheduler@0.23.0": { 1317 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 1318 | "dependencies": { 1319 | "loose-envify": "loose-envify@1.4.0" 1320 | } 1321 | }, 1322 | "semver@7.6.0": { 1323 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 1324 | "dependencies": { 1325 | "lru-cache": "lru-cache@6.0.0" 1326 | } 1327 | }, 1328 | "shebang-command@2.0.0": { 1329 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1330 | "dependencies": { 1331 | "shebang-regex": "shebang-regex@3.0.0" 1332 | } 1333 | }, 1334 | "shebang-regex@3.0.0": { 1335 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1336 | "dependencies": {} 1337 | }, 1338 | "signal-exit@3.0.7": { 1339 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1340 | "dependencies": {} 1341 | }, 1342 | "signal-exit@4.1.0": { 1343 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1344 | "dependencies": {} 1345 | }, 1346 | "slash@3.0.0": { 1347 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1348 | "dependencies": {} 1349 | }, 1350 | "source-map-js@1.0.2": { 1351 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1352 | "dependencies": {} 1353 | }, 1354 | "source-map@0.8.0-beta.0": { 1355 | "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", 1356 | "dependencies": { 1357 | "whatwg-url": "whatwg-url@7.1.0" 1358 | } 1359 | }, 1360 | "streamsearch@1.1.0": { 1361 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 1362 | "dependencies": {} 1363 | }, 1364 | "string-width@4.2.3": { 1365 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1366 | "dependencies": { 1367 | "emoji-regex": "emoji-regex@8.0.0", 1368 | "is-fullwidth-code-point": "is-fullwidth-code-point@3.0.0", 1369 | "strip-ansi": "strip-ansi@6.0.1" 1370 | } 1371 | }, 1372 | "string-width@5.1.2": { 1373 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1374 | "dependencies": { 1375 | "eastasianwidth": "eastasianwidth@0.2.0", 1376 | "emoji-regex": "emoji-regex@9.2.2", 1377 | "strip-ansi": "strip-ansi@7.1.0" 1378 | } 1379 | }, 1380 | "strip-ansi@6.0.1": { 1381 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1382 | "dependencies": { 1383 | "ansi-regex": "ansi-regex@5.0.1" 1384 | } 1385 | }, 1386 | "strip-ansi@7.1.0": { 1387 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1388 | "dependencies": { 1389 | "ansi-regex": "ansi-regex@6.0.1" 1390 | } 1391 | }, 1392 | "strip-final-newline@2.0.0": { 1393 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 1394 | "dependencies": {} 1395 | }, 1396 | "strip-json-comments@3.1.1": { 1397 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1398 | "dependencies": {} 1399 | }, 1400 | "styled-jsx@5.1.1_react@18.2.0": { 1401 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", 1402 | "dependencies": { 1403 | "client-only": "client-only@0.0.1", 1404 | "react": "react@18.2.0" 1405 | } 1406 | }, 1407 | "sucrase@3.35.0": { 1408 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 1409 | "dependencies": { 1410 | "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", 1411 | "commander": "commander@4.1.1", 1412 | "glob": "glob@10.3.10", 1413 | "lines-and-columns": "lines-and-columns@1.2.4", 1414 | "mz": "mz@2.7.0", 1415 | "pirates": "pirates@4.0.6", 1416 | "ts-interface-checker": "ts-interface-checker@0.1.13" 1417 | } 1418 | }, 1419 | "supports-color@7.2.0": { 1420 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1421 | "dependencies": { 1422 | "has-flag": "has-flag@4.0.0" 1423 | } 1424 | }, 1425 | "text-table@0.2.0": { 1426 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 1427 | "dependencies": {} 1428 | }, 1429 | "thenify-all@1.6.0": { 1430 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 1431 | "dependencies": { 1432 | "thenify": "thenify@3.3.1" 1433 | } 1434 | }, 1435 | "thenify@3.3.1": { 1436 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1437 | "dependencies": { 1438 | "any-promise": "any-promise@1.3.0" 1439 | } 1440 | }, 1441 | "to-regex-range@5.0.1": { 1442 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1443 | "dependencies": { 1444 | "is-number": "is-number@7.0.0" 1445 | } 1446 | }, 1447 | "tr46@1.0.1": { 1448 | "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", 1449 | "dependencies": { 1450 | "punycode": "punycode@2.3.1" 1451 | } 1452 | }, 1453 | "tree-kill@1.2.2": { 1454 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 1455 | "dependencies": {} 1456 | }, 1457 | "ts-interface-checker@0.1.13": { 1458 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 1459 | "dependencies": {} 1460 | }, 1461 | "tslib@1.14.1": { 1462 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1463 | "dependencies": {} 1464 | }, 1465 | "tslib@2.6.2": { 1466 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 1467 | "dependencies": {} 1468 | }, 1469 | "tsup@6.7.0_typescript@4.9.5_esbuild@0.17.19": { 1470 | "integrity": "sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==", 1471 | "dependencies": { 1472 | "bundle-require": "bundle-require@4.0.2_esbuild@0.17.19", 1473 | "cac": "cac@6.7.14", 1474 | "chokidar": "chokidar@3.6.0", 1475 | "debug": "debug@4.3.4", 1476 | "esbuild": "esbuild@0.17.19", 1477 | "execa": "execa@5.1.1", 1478 | "globby": "globby@11.1.0", 1479 | "joycon": "joycon@3.1.1", 1480 | "postcss-load-config": "postcss-load-config@3.1.4", 1481 | "resolve-from": "resolve-from@5.0.0", 1482 | "rollup": "rollup@3.29.4", 1483 | "source-map": "source-map@0.8.0-beta.0", 1484 | "sucrase": "sucrase@3.35.0", 1485 | "tree-kill": "tree-kill@1.2.2", 1486 | "typescript": "typescript@4.9.5" 1487 | } 1488 | }, 1489 | "tsutils@3.21.0_typescript@4.9.5": { 1490 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 1491 | "dependencies": { 1492 | "tslib": "tslib@1.14.1", 1493 | "typescript": "typescript@4.9.5" 1494 | } 1495 | }, 1496 | "type-check@0.4.0": { 1497 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1498 | "dependencies": { 1499 | "prelude-ls": "prelude-ls@1.2.1" 1500 | } 1501 | }, 1502 | "type-fest@0.20.2": { 1503 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1504 | "dependencies": {} 1505 | }, 1506 | "typescript@4.9.5": { 1507 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1508 | "dependencies": {} 1509 | }, 1510 | "undici-types@5.26.5": { 1511 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 1512 | "dependencies": {} 1513 | }, 1514 | "uri-js@4.4.1": { 1515 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1516 | "dependencies": { 1517 | "punycode": "punycode@2.3.1" 1518 | } 1519 | }, 1520 | "watchpack@2.4.0": { 1521 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", 1522 | "dependencies": { 1523 | "glob-to-regexp": "glob-to-regexp@0.4.1", 1524 | "graceful-fs": "graceful-fs@4.2.11" 1525 | } 1526 | }, 1527 | "webidl-conversions@4.0.2": { 1528 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 1529 | "dependencies": {} 1530 | }, 1531 | "whatwg-url@7.1.0": { 1532 | "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", 1533 | "dependencies": { 1534 | "lodash.sortby": "lodash.sortby@4.7.0", 1535 | "tr46": "tr46@1.0.1", 1536 | "webidl-conversions": "webidl-conversions@4.0.2" 1537 | } 1538 | }, 1539 | "which@2.0.2": { 1540 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1541 | "dependencies": { 1542 | "isexe": "isexe@2.0.0" 1543 | } 1544 | }, 1545 | "wrap-ansi@7.0.0": { 1546 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1547 | "dependencies": { 1548 | "ansi-styles": "ansi-styles@4.3.0", 1549 | "string-width": "string-width@4.2.3", 1550 | "strip-ansi": "strip-ansi@6.0.1" 1551 | } 1552 | }, 1553 | "wrap-ansi@8.1.0": { 1554 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1555 | "dependencies": { 1556 | "ansi-styles": "ansi-styles@6.2.1", 1557 | "string-width": "string-width@5.1.2", 1558 | "strip-ansi": "strip-ansi@7.1.0" 1559 | } 1560 | }, 1561 | "wrappy@1.0.2": { 1562 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1563 | "dependencies": {} 1564 | }, 1565 | "yallist@4.0.0": { 1566 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1567 | "dependencies": {} 1568 | }, 1569 | "yaml@1.10.2": { 1570 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1571 | "dependencies": {} 1572 | }, 1573 | "yocto-queue@0.1.0": { 1574 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1575 | "dependencies": {} 1576 | } 1577 | } 1578 | }, 1579 | "remote": {}, 1580 | "workspace": { 1581 | "dependencies": [ 1582 | "npm:preact@^10.19.7" 1583 | ], 1584 | "packageJson": { 1585 | "dependencies": [ 1586 | "npm:@types/node@^18.14.6", 1587 | "npm:@types/nprogress@^0.2.2", 1588 | "npm:@types/react-dom@^18", 1589 | "npm:@types/react@^18", 1590 | "npm:@typescript-eslint/eslint-plugin@^5.54.0", 1591 | "npm:@typescript-eslint/parser@^5.54.0", 1592 | "npm:eslint@^8.35.0", 1593 | "npm:next@^13.2.3", 1594 | "npm:nprogress@^0.2.0", 1595 | "npm:prettier@^2.8.4", 1596 | "npm:prop-types@^15.8.1", 1597 | "npm:react-dom@^18.2.0", 1598 | "npm:react@^18.2.0", 1599 | "npm:tsup@^6.6.3", 1600 | "npm:typescript@^4.9.5" 1601 | ] 1602 | } 1603 | } 1604 | } 1605 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nextjs-toploader", 3 | "version": "3.8.16", 4 | "description": "A Next.js Top Loading Bar component made using nprogress, works with Next.js 15 and Next.js 14 and React.", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "scripts": { 8 | "build-lib": "tsup", 9 | "lint": "eslint --fix --cache src/", 10 | "format": "prettier --write \"src/**/*.{ts,tsx}\"", 11 | "typecheck": "tsc -p tsconfig.json" 12 | }, 13 | "exports": { 14 | ".": "./dist/index.js", 15 | "./app": "./dist/app.js", 16 | "./pages": "./dist/pages.js" 17 | }, 18 | "funding": { 19 | "url": "https://buymeacoffee.com/thesgj" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/TheSGJ/nextjs-toploader.git" 24 | }, 25 | "keywords": [ 26 | "Next", 27 | "Next TopLoader", 28 | "Next.js", 29 | "Next.js 15", 30 | "Next.js 14", 31 | "Next.js 13", 32 | "Nprogress", 33 | "React", 34 | "Top Loading Bar", 35 | "Progressbar" 36 | ], 37 | "author": "Shri Ganesh Jha", 38 | "license": "MIT", 39 | "bugs": { 40 | "url": "https://github.com/TheSGJ/nextjs-toploader/issues" 41 | }, 42 | "homepage": "https://github.com/TheSGJ/nextjs-toploader#readme", 43 | "files": [ 44 | "dist/**/*.js*", 45 | "dist/**/*.mjs*", 46 | "dist/**/*.d*" 47 | ], 48 | "devDependencies": { 49 | "@types/node": "^18.14.6", 50 | "@types/nprogress": "^0.2.2", 51 | "@types/react": "^18", 52 | "@types/react-dom": "^18", 53 | "@typescript-eslint/eslint-plugin": "^5.54.0", 54 | "@typescript-eslint/parser": "^5.54.0", 55 | "eslint": "^8.35.0", 56 | "next": "^13.2.3", 57 | "prettier": "^2.8.4", 58 | "react": "^18.2.0", 59 | "react-dom": "^18.2.0", 60 | "tsup": "^6.6.3", 61 | "typescript": "^4.9.5" 62 | }, 63 | "peerDependencies": { 64 | "next": ">= 6.0.0", 65 | "react": ">= 16.0.0", 66 | "react-dom": ">= 16.0.0" 67 | }, 68 | "packageManager": "yarn@3.2.4", 69 | "dependencies": { 70 | "nprogress": "^0.2.0", 71 | "prop-types": "^15.8.1" 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | import { AppRouterInstance, NavigateOptions } from 'next/dist/shared/lib/app-router-context.shared-runtime'; 3 | import { useRouter as useNextRouter, usePathname } from 'next/navigation'; 4 | import { useCallback, useEffect } from 'react'; 5 | import * as NProgress from 'nprogress'; 6 | 7 | /** 8 | * Custom useRouter hook to work with NextTopLoader 9 | * Compatible with app router only. 10 | * Solution Provided by @sho-pb 11 | * @returns {AppRouterInstance} 12 | */ 13 | export const useRouter = (): AppRouterInstance => { 14 | const router = useNextRouter(); 15 | const pathname = usePathname(); 16 | useEffect(() => { 17 | NProgress.done(); 18 | }, [pathname]); 19 | const replace = useCallback( 20 | (href: string, options?: NavigateOptions) => { 21 | href !== pathname && NProgress.start(); 22 | router.replace(href, options); 23 | }, 24 | [router, pathname] 25 | ); 26 | 27 | const push = useCallback( 28 | (href: string, options?: NavigateOptions) => { 29 | href !== pathname && NProgress.start(); 30 | router.push(href, options); 31 | }, 32 | [router, pathname] 33 | ); 34 | 35 | return { 36 | ...router, 37 | replace, 38 | push, 39 | }; 40 | }; 41 | -------------------------------------------------------------------------------- /src/hooks/useTopLoader.tsx: -------------------------------------------------------------------------------- 1 | import * as NProgress from 'nprogress'; 2 | 3 | interface TopLoaderActions { 4 | start: () => NProgress.NProgress; 5 | done: (force?: boolean) => NProgress.NProgress; 6 | remove: () => void; 7 | setProgress: (value: number) => NProgress.NProgress; 8 | inc: (amount?: number) => NProgress.NProgress; 9 | trickle: () => NProgress.NProgress; 10 | isStarted: () => boolean; 11 | isRendered: () => boolean; 12 | getPositioningCSS: () => 'translate3d' | 'translate' | 'margin'; 13 | } 14 | 15 | export const useTopLoader = (): TopLoaderActions => { 16 | const actions: TopLoaderActions = { 17 | start: () => NProgress.start(), 18 | done: (force?: boolean) => NProgress.done(force), 19 | remove: () => NProgress.remove(), 20 | setProgress: (value: number) => NProgress.set(value), 21 | inc: (amount?: number) => NProgress.inc(amount), 22 | trickle: () => NProgress.trickle(), 23 | isStarted: () => NProgress.isStarted(), 24 | isRendered: () => NProgress.isRendered(), 25 | getPositioningCSS: () => NProgress.getPositioningCSS(), 26 | }; 27 | 28 | return actions; 29 | }; 30 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | // deno-ts-ignore-file 3 | // deno-lint-ignore-file 4 | /* eslint-disable no-var */ 5 | /* eslint-disable max-len */ 6 | /* eslint-disable prefer-const */ 7 | import * as PropTypes from 'prop-types'; 8 | import * as React from 'react'; 9 | import * as NProgress from 'nprogress'; 10 | export { useTopLoader } from './hooks/useTopLoader'; 11 | 12 | // @deno-types ="npm:preact@10.19.6" 13 | 14 | // @deno-types ="npm:nprogress@0.2.2" 15 | 16 | // @deno-types ="npm:@types/react@18.2.66" 17 | 18 | export type NextTopLoaderProps = { 19 | /** 20 | * Color for the TopLoader. 21 | * @default "#29d" 22 | */ 23 | color?: string; 24 | /** 25 | * The initial position for the TopLoader in percentage, 0.08 is 8%. 26 | * @default 0.08 27 | */ 28 | initialPosition?: number; 29 | /** 30 | * The increament delay speed in milliseconds. 31 | * @default 200 32 | */ 33 | crawlSpeed?: number; 34 | /** 35 | * The height for the TopLoader in pixels (px). 36 | * @default 3 37 | */ 38 | height?: number; 39 | /** 40 | * Auto increamenting behaviour for the TopLoader. 41 | * @default true 42 | */ 43 | crawl?: boolean; 44 | /** 45 | * To show spinner or not. 46 | * @default true 47 | */ 48 | showSpinner?: boolean; 49 | /** 50 | * Animation settings using easing (a CSS easing string). 51 | * @default "ease" 52 | */ 53 | easing?: string; 54 | /** 55 | * Animation speed in ms for the TopLoader. 56 | * @default 200 57 | */ 58 | speed?: number; 59 | /** 60 | * Defines a shadow for the TopLoader. 61 | * @default "0 0 10px ${color},0 0 5px ${color}" 62 | * 63 | * @ you can disable it by setting it to `false` 64 | */ 65 | shadow?: string | false; 66 | /** 67 | * Defines a template for the TopLoader. 68 | * @default "
69 | *
" 70 | */ 71 | template?: string; 72 | /** 73 | * Defines zIndex for the TopLoader. 74 | * @default 1600 75 | * 76 | */ 77 | zIndex?: number; 78 | /** 79 | * To show the TopLoader at bottom. 80 | * @default false 81 | * 82 | */ 83 | showAtBottom?: boolean; 84 | /** 85 | * To show the TopLoader for hash anchors. 86 | * @default true 87 | * 88 | */ 89 | showForHashAnchor?: boolean; 90 | }; 91 | 92 | /** 93 | * 94 | * NextTopLoader 95 | * @license MIT 96 | * @param {NextTopLoaderProps} props The properties to configure NextTopLoader 97 | * @returns {React.JSX.Element} 98 | * 99 | */ 100 | 101 | const NextTopLoader = ({ 102 | color: propColor, 103 | height: propHeight, 104 | showSpinner, 105 | crawl, 106 | crawlSpeed, 107 | initialPosition, 108 | easing, 109 | speed, 110 | shadow, 111 | template, 112 | zIndex = 1600, 113 | showAtBottom = false, 114 | showForHashAnchor = true, 115 | }: NextTopLoaderProps): React.JSX.Element => { 116 | const defaultColor = '#29d'; 117 | const defaultHeight = 3; 118 | 119 | const color = propColor ?? defaultColor; 120 | const height = propHeight ?? defaultHeight; 121 | 122 | // Any falsy (except undefined) will disable the shadow 123 | const boxShadow = 124 | !shadow && shadow !== undefined 125 | ? '' 126 | : shadow 127 | ? `box-shadow:${shadow}` 128 | : `box-shadow:0 0 10px ${color},0 0 5px ${color}`; 129 | 130 | // Check if to show at bottom 131 | const positionStyle = showAtBottom ? 'bottom: 0;' : 'top: 0;'; 132 | const spinnerPositionStyle = showAtBottom ? 'bottom: 15px;' : 'top: 15px;'; 133 | 134 | /** 135 | * CSS Styles for the NextTopLoader 136 | */ 137 | const styles = ( 138 | 141 | ); 142 | 143 | /** 144 | * Convert the url to Absolute URL based on the current window location. 145 | * @param url {string} 146 | * @returns {string} 147 | */ 148 | const toAbsoluteURL = (url: string): string => { 149 | return new URL(url, window.location.href).href; 150 | }; 151 | 152 | /** 153 | * Check if it is hash anchor or same page anchor 154 | * @param currentUrl {string} Current Url Location 155 | * @param newUrl {string} New Url detected with each anchor 156 | * @returns {boolean} 157 | */ 158 | const isHashAnchor = (currentUrl: string, newUrl: string): boolean => { 159 | const current = new URL(toAbsoluteURL(currentUrl)); 160 | const next = new URL(toAbsoluteURL(newUrl)); 161 | return current.href.split('#')[0] === next.href.split('#')[0]; 162 | }; 163 | 164 | /** 165 | * Check if it is Same Host name 166 | * @param currentUrl {string} Current Url Location 167 | * @param newUrl {string} New Url detected with each anchor 168 | * @returns {boolean} 169 | */ 170 | const isSameHostName = (currentUrl: string, newUrl: string): boolean => { 171 | const current = new URL(toAbsoluteURL(currentUrl)); 172 | const next = new URL(toAbsoluteURL(newUrl)); 173 | return current.hostname.replace(/^www\./, '') === next.hostname.replace(/^www\./, ''); 174 | }; 175 | 176 | React.useEffect((): ReturnType => { 177 | NProgress.configure({ 178 | showSpinner: showSpinner ?? true, 179 | trickle: crawl ?? true, 180 | trickleSpeed: crawlSpeed ?? 200, 181 | minimum: initialPosition ?? 0.08, 182 | easing: easing ?? 'ease', 183 | speed: speed ?? 200, 184 | template: 185 | template ?? 186 | '
', 187 | }); 188 | 189 | /** 190 | * Check if the Current Url is same as New Url 191 | * @param currentUrl {string} 192 | * @param newUrl {string} 193 | * @returns {boolean} 194 | */ 195 | function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string): boolean { 196 | const currentUrlObj = new URL(currentUrl); 197 | const newUrlObj = new URL(newUrl); 198 | // Compare hostname, pathname, and search parameters 199 | if ( 200 | currentUrlObj.hostname === newUrlObj.hostname && 201 | currentUrlObj.pathname === newUrlObj.pathname && 202 | currentUrlObj.search === newUrlObj.search 203 | ) { 204 | // Check if the new URL is just an anchor of the current URL page 205 | const currentHash = currentUrlObj.hash; 206 | const newHash = newUrlObj.hash; 207 | return ( 208 | currentHash !== newHash && currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '') 209 | ); 210 | } 211 | return false; 212 | } 213 | 214 | // deno-lint-ignore no-var 215 | var nProgressClass: NodeListOf = document.querySelectorAll('html'); 216 | 217 | const removeNProgressClass = (): void => 218 | nProgressClass.forEach((el: Element) => el.classList.remove('nprogress-busy')); 219 | 220 | /** 221 | * Find the closest anchor to trigger 222 | * @param element {HTMLElement | null} 223 | * @returns element {Element} 224 | */ 225 | function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null { 226 | while (element && element.tagName.toLowerCase() !== 'a') { 227 | element = element.parentElement; 228 | } 229 | return element as HTMLAnchorElement; 230 | } 231 | 232 | /** 233 | * 234 | * @param event {MouseEvent} 235 | * @returns {void} 236 | */ 237 | function handleClick(event: MouseEvent): void { 238 | try { 239 | const target = event.target as HTMLElement; 240 | const anchor = findClosestAnchor(target); 241 | const newUrl = anchor?.href; 242 | if (newUrl) { 243 | const currentUrl = window.location.href; 244 | // const newUrl = (anchor as HTMLAnchorElement).href; 245 | 246 | // To debug the anchor target: 247 | // console.log('Given target is', (anchor as HTMLAnchorElement).target); 248 | const isExternalLink = ((anchor as HTMLAnchorElement).target as React.HTMLAttributeAnchorTarget) !== '' ; 249 | 250 | // Check for Special Schemes 251 | const isSpecialScheme = ['tel:', 'mailto:', 'sms:', 'blob:', 'download:'].some((scheme) => 252 | newUrl.startsWith(scheme) 253 | ); 254 | 255 | const notSameHost = !isSameHostName(window.location.href, anchor.href); 256 | if (notSameHost) { 257 | return; 258 | } 259 | 260 | const isAnchorOrHashAnchor = 261 | isAnchorOfCurrentUrl(currentUrl, newUrl) || isHashAnchor(window.location.href, anchor.href); 262 | if (!showForHashAnchor && isAnchorOrHashAnchor) { 263 | return; 264 | } 265 | 266 | if ( 267 | newUrl === currentUrl || 268 | isExternalLink || 269 | isSpecialScheme || 270 | isAnchorOrHashAnchor || 271 | event.ctrlKey || 272 | event.metaKey || 273 | event.shiftKey || 274 | event.altKey || 275 | !toAbsoluteURL(anchor.href).startsWith('http') 276 | ) { 277 | NProgress.start(); 278 | NProgress.done(); 279 | removeNProgressClass(); 280 | } else { 281 | NProgress.start(); 282 | } 283 | } 284 | } catch (err) { 285 | // Log the error in development only! 286 | // console.log('NextTopLoader error: ', err); 287 | NProgress.start(); 288 | NProgress.done(); 289 | } 290 | } 291 | 292 | /** 293 | * Complete TopLoader Progress on adding new entry to history stack 294 | * @param {History} 295 | * @returns {void} 296 | */ 297 | ((history: History): void => { 298 | const pushState = history.pushState; 299 | history.pushState = (...args) => { 300 | NProgress.done(); 301 | removeNProgressClass(); 302 | return pushState.apply(history, args); 303 | }; 304 | })((window as Window).history); 305 | 306 | /** 307 | * Complete TopLoader Progress on replacing current entry of history stack 308 | * @param {History} 309 | * @returns {void} 310 | */ 311 | ((history: History): void => { 312 | const replaceState = history.replaceState; 313 | history.replaceState = (...args) => { 314 | NProgress.done(); 315 | removeNProgressClass(); 316 | return replaceState.apply(history, args); 317 | }; 318 | })((window as Window).history); 319 | 320 | function handlePageHide(): void { 321 | NProgress.done(); 322 | removeNProgressClass(); 323 | } 324 | 325 | /** 326 | * Handle Browser Back and Forth Navigation 327 | * @returns {void} 328 | */ 329 | function handleBackAndForth(): void { 330 | NProgress.done(); 331 | } 332 | 333 | // Add the global click event listener 334 | window.addEventListener('popstate', handleBackAndForth); 335 | document.addEventListener('click', handleClick); 336 | window.addEventListener('pagehide', handlePageHide); 337 | 338 | // Clean up the global click event listener when the component is unmounted 339 | return (): void => { 340 | document.removeEventListener('click', handleClick); 341 | window.removeEventListener('pagehide', handlePageHide); 342 | window.removeEventListener('popstate', handleBackAndForth); 343 | }; 344 | }, []); 345 | 346 | return styles; 347 | }; 348 | export default NextTopLoader; 349 | 350 | NextTopLoader.propTypes = { 351 | color: PropTypes.string, 352 | height: PropTypes.number, 353 | showSpinner: PropTypes.bool, 354 | crawl: PropTypes.bool, 355 | crawlSpeed: PropTypes.number, 356 | initialPosition: PropTypes.number, 357 | easing: PropTypes.string, 358 | speed: PropTypes.number, 359 | template: PropTypes.string, 360 | shadow: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), 361 | zIndex: PropTypes.number, 362 | showAtBottom: PropTypes.bool, 363 | }; 364 | -------------------------------------------------------------------------------- /src/pages.tsx: -------------------------------------------------------------------------------- 1 | // deno-ts-ignore-file 2 | // deno-lint-ignore-file 3 | /* eslint-disable no-var */ 4 | /* eslint-disable max-len */ 5 | /* eslint-disable prefer-const */ 6 | 7 | import * as PropTypes from 'prop-types'; 8 | import * as React from 'react'; 9 | import * as NProgress from 'nprogress'; 10 | import { NextTopLoaderProps } from '.'; 11 | import Router from 'next/router'; 12 | export const PagesTopLoader = ({ 13 | color: propColor, 14 | height: propHeight, 15 | showSpinner, 16 | crawl, 17 | crawlSpeed, 18 | initialPosition, 19 | easing, 20 | speed, 21 | shadow, 22 | template, 23 | zIndex = 1600, 24 | showAtBottom = false, 25 | }: NextTopLoaderProps): JSX.Element => { 26 | const defaultColor = '#29d'; 27 | const defaultHeight = 3; 28 | 29 | const color = propColor ?? defaultColor; 30 | const height = propHeight ?? defaultHeight; 31 | 32 | // Any falsy (except undefined) will disable the shadow 33 | const boxShadow = 34 | !shadow && shadow !== undefined 35 | ? '' 36 | : shadow 37 | ? `box-shadow:${shadow}` 38 | : `box-shadow:0 0 10px ${color},0 0 5px ${color}`; 39 | 40 | // Check if to show at bottom 41 | const positionStyle = showAtBottom ? 'bottom: 0;' : 'top: 0;'; 42 | const spinnerPositionStyle = showAtBottom ? 'bottom: 15px;' : 'top: 15px;'; 43 | 44 | /** 45 | * CSS Styles for the NextTopLoader 46 | */ 47 | const styles = ( 48 | 51 | ); 52 | 53 | React.useEffect((): ReturnType => { 54 | NProgress.configure({ 55 | showSpinner: showSpinner ?? true, 56 | trickle: crawl ?? true, 57 | trickleSpeed: crawlSpeed ?? 200, 58 | minimum: initialPosition ?? 0.08, 59 | easing: easing ?? 'ease', 60 | speed: speed ?? 200, 61 | template: 62 | template ?? 63 | '
', 64 | }); 65 | 66 | const progressStarted = () => NProgress.start(); 67 | const progressComplete = () => NProgress.done(true); 68 | 69 | Router.events.on('routeChangeStart', progressStarted); 70 | Router.events.on('routeChangeComplete', progressComplete); 71 | Router.events.on('routeChangeError', progressComplete); 72 | 73 | return () => { 74 | // Clean up the global click event listener when the component is unmounted 75 | Router.events.off('routeChangeStart', progressStarted); 76 | Router.events.off('routeChangeComplete', progressComplete); 77 | Router.events.off('routeChangeError', progressComplete); 78 | }; 79 | }, []); 80 | 81 | return styles; 82 | }; 83 | 84 | PagesTopLoader.propTypes = { 85 | color: PropTypes.string, 86 | height: PropTypes.number, 87 | showSpinner: PropTypes.bool, 88 | crawl: PropTypes.bool, 89 | crawlSpeed: PropTypes.number, 90 | initialPosition: PropTypes.number, 91 | easing: PropTypes.string, 92 | speed: PropTypes.number, 93 | template: PropTypes.string, 94 | shadow: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), 95 | zIndex: PropTypes.number, 96 | showAtBottom: PropTypes.bool, 97 | }; 98 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react", 4 | "target": "es6", 5 | "module": "commonjs", 6 | "strict": true, 7 | "noImplicitAny": true, 8 | "strictNullChecks": true, 9 | "noImplicitThis": true, 10 | "alwaysStrict": false, 11 | "noUnusedLocals": true, 12 | "noUnusedParameters": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "moduleResolution": "node", 16 | "lib": ["dom", "dom.iterable", "esnext"], 17 | "skipLibCheck": true, 18 | "noEmit": true, 19 | "outDir": "dist", 20 | "plugins": [ 21 | { 22 | "name": "next" 23 | } 24 | ] 25 | }, 26 | "files": ["src/index.tsx", "src/pages.tsx", "src/app.ts"], 27 | "include": ["./src/**/*.ts", "./src/**/*.tsx"], 28 | "exclude": ["./dist", "node_modules"] 29 | } 30 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { Options } from 'tsup'; 2 | export const tsup: Options = { 3 | target: 'es6', 4 | clean: true, 5 | dts: true, 6 | entry: ['src/index.tsx', 'src/pages.tsx', 'src/app.ts'], 7 | keepNames: true, 8 | sourcemap: true, 9 | minify: true, 10 | format: ['cjs'], 11 | }; 12 | --------------------------------------------------------------------------------