Page Not Found
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
diff --git a/404.html b/404.html index 6c911b8b..00cfad7b 100644 --- a/404.html +++ b/404.html @@ -5,9 +5,9 @@
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
application.yml
",id:"via-an-applicationyml",level:3},{value:"Using the jar
via the command line",id:"using-the-jar-via-the-command-line",level:3},{value:"Using Docker",id:"using-docker",level:3},{value:"Komga seems slow, how can I check what's going on?",id:"komga-seems-slow-how-can-i-check-whats-going-on",level:2},{value:"The memory consumption is huge",id:"the-memory-consumption-is-huge",level:2},{value:"How can I sync reading progress with tracker websites?",id:"how-can-i-sync-reading-progress-with-tracker-websites",level:2},{value:"Webreader double pages are not showing as single page",id:"webreader-double-pages-are-not-showing-as-single-page",level:2},{value:"Media type application/x-7z-compressed is not supported",id:"media-type-applicationx-7z-compressed-is-not-supported",level:2},{value:"My books/series show a different name than the files/folders",id:"my-booksseries-show-a-different-name-than-the-filesfolders",level:2},{value:"This server has already been claimed",id:"this-server-has-already-been-claimed",level:2},{value:"How can I move a library to a different folder?",id:"how-can-i-move-a-library-to-a-different-folder",level:2},{value:"Scan doesn't pick up new files under mergerfs",id:"scan-doesnt-pick-up-new-files-under-mergerfs",level:2},{value:"Docker on Raspberry PI arm32: No monotonic clock was available",id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available",level:2}];function c(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"frequently-asked-questions",children:"Frequently Asked Questions"}),"\n",(0,o.jsx)(s.h2,{id:"i-forgot-my-password",children:"I forgot my password"}),"\n",(0,o.jsxs)(s.p,{children:["Either ask an admin to reset your password, or use the ",(0,o.jsx)(s.a,{href:"/docs/guides/cli#reset-password-for-a-user",children:"Command Line Interface"})," to reset it by yourself."]}),"\n",(0,o.jsx)(s.h2,{id:"where-can-i-find-the-log-files",children:"Where can I find the log files?"}),"\n",(0,o.jsx)(s.p,{children:"By default (if you haven't changed the configuration), log files are located:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["on the Windows app: ",(0,o.jsx)(s.code,{children:"%LOCALAPPDATA%/Komga/logs/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on the macOS app: ",(0,o.jsx)(s.code,{children:"~/Library/Logs/Komga/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on Windows: ",(0,o.jsx)(s.code,{children:"%USERPROFILE%/.komga/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on macOS or Unix: ",(0,o.jsx)(s.code,{children:"~/.komga/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on Docker: in the directory you mounted as ",(0,o.jsx)(s.code,{children:"/config"}),", in a subdirectory called ",(0,o.jsx)(s.code,{children:"logs"})]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"how-to-enable-debug-or-trace-logs",children:"How to enable DEBUG or TRACE logs?"}),"\n",(0,o.jsxs)(s.h3,{id:"via-an-applicationyml",children:["Via an ",(0,o.jsx)(s.code,{children:"application.yml"})]}),"\n",(0,o.jsxs)(s.p,{children:["Add the following key in your ",(0,o.jsx)(s.code,{children:"application.yml"}),":"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-yaml",children:"logging.level.org.gotson.komga: DEBUG\n"})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-yaml",children:"logging.level.org.gotson.komga: TRACE\n"})}),"\n",(0,o.jsxs)(s.h3,{id:"using-the-jar-via-the-command-line",children:["Using the ",(0,o.jsx)(s.code,{children:"jar"})," via the command line"]}),"\n",(0,o.jsxs)(s.p,{children:["Start the ",(0,o.jsx)(s.code,{children:"jar"})," with the following option:"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=DEBUG\n"})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=TRACE\n"})}),"\n",(0,o.jsx)(s.h3,{id:"using-docker",children:"Using Docker"}),"\n",(0,o.jsx)(s.p,{children:"Add the following environment variable:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"LOGGING_LEVEL_ORG_GOTSON_KOMGA=DEBUG\n"})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"LOGGING_LEVEL_ORG_GOTSON_KOMGA=TRACE\n"})}),"\n",(0,o.jsx)(s.h2,{id:"komga-seems-slow-how-can-i-check-whats-going-on",children:"Komga seems slow, how can I check what's going on?"}),"\n",(0,o.jsx)(s.p,{children:"If any activity is going on, an animated yellow bar will appear below the top-left logo. Hover your cursor over the bar to see the details of all pending tasks."}),"\n",(0,o.jsxs)("video",{controls:!0,width:"250",children:[(0,o.jsx)("source",{src:"/assets/media/faq/server-activity.webm",type:"video/webm"}),(0,o.jsx)(s.p,{children:"Sorry, your browser doesn't support embedded videos."})]}),"\n",(0,o.jsx)(s.h2,{id:"the-memory-consumption-is-huge",children:"The memory consumption is huge"}),"\n",(0,o.jsxs)(s.p,{children:["TL;DR: The operating system ",(0,o.jsx)(s.em,{children:"does not"})," report the real memory usage of the application, so don't look at those figures."]}),"\n",(0,o.jsxs)(s.p,{children:["Komga runs on the Java Virtual Machine (JVM). The JVM works differently than other native programs in regard to memory consumption.\nOn startup, the JVM will ",(0,o.jsx)(s.em,{children:"reserve"})," some memory from the OS, but that doesn't mean this memory is used by the application. If the OS needs to reclaim that memory, the JVM will try to release it."]}),"\n",(0,o.jsx)(s.p,{children:"By default, the JVM would reserve 1/4th of the physical memory (depends on the total memory and JVM version), for instance if you have 32 Gb of memory, the JVM would reserve 8 Gb."}),"\n",(0,o.jsxs)(s.p,{children:["To increase or limit the maximum memory, see ",(0,o.jsx)(s.a,{href:"/docs/installation/jar#increase-memory-limit",children:"here"})," (jar) and ",(0,o.jsx)(s.a,{href:"/docs/installation/docker#increase-memory-limit",children:"here"})," (Docker)."]}),"\n",(0,o.jsx)(s.h2,{id:"how-can-i-sync-reading-progress-with-tracker-websites",children:"How can I sync reading progress with tracker websites?"}),"\n",(0,o.jsx)(s.p,{children:"Komga does not support this outside the box."}),"\n",(0,o.jsxs)(s.p,{children:["You can try ",(0,o.jsx)(s.a,{href:"https://github.com/MALSync/MALSync",children:"MAL-Sync"})," which integrates with Komga and works with MyAnimeList, Kitsu, Anilist and others."]}),"\n",(0,o.jsx)(s.h2,{id:"webreader-double-pages-are-not-showing-as-single-page",children:"Webreader double pages are not showing as single page"}),"\n",(0,o.jsxs)(s.p,{children:["The double pages feature of the webreader requires image sizes to be available. This feature was added in v",(0,o.jsx)(s.code,{children:"0.51.0"}),". If your books have been analyzed before that version, you will need to re-analyze them in order for the double pages feature to work properly."]}),"\n",(0,o.jsx)(s.h2,{id:"media-type-applicationx-7z-compressed-is-not-supported",children:"Media type application/x-7z-compressed is not supported"}),"\n",(0,o.jsxs)(s.p,{children:["Your files are compressed using 7zip, which is not supported. Extract your archives and compress them again using the ",(0,o.jsx)(s.code,{children:"zip"})," format."]}),"\n",(0,o.jsx)(s.h2,{id:"my-booksseries-show-a-different-name-than-the-filesfolders",children:"My books/series show a different name than the files/folders"}),"\n",(0,o.jsxs)(s.p,{children:["Komga automatically import metadata from ",(0,o.jsx)(s.code,{children:"EPUB"})," files and from ",(0,o.jsx)(s.code,{children:"ComicInfo.xml"})," for ",(0,o.jsx)(s.code,{children:"cbz"}),"/",(0,o.jsx)(s.code,{children:"cbr"}),". The imported metadata will override the file/folder name."]}),"\n",(0,o.jsx)(s.h2,{id:"this-server-has-already-been-claimed",children:"This server has already been claimed"}),"\n",(0,o.jsxs)(s.p,{children:["The server cannot be claimed if a user already exists in the database. It can happen when you start Komga for the first time without the ",(0,o.jsx)(s.code,{children:"claim"})," profile as Komga will generate a default user."]}),"\n",(0,o.jsxs)(s.p,{children:["You can solve the issue by deleting the database. By default it is located in ",(0,o.jsx)(s.code,{children:"~/.komga/database.sqlite"}),". ",(0,o.jsx)(s.code,{children:"~"})," is your home directory on Unix, and your User profile on Windows."]}),"\n",(0,o.jsx)(s.h2,{id:"how-can-i-move-a-library-to-a-different-folder",children:"How can I move a library to a different folder?"}),"\n",(0,o.jsx)(s.p,{children:"You can follow those steps:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["Make sure ",(0,o.jsx)(s.a,{href:"/docs/guides/libraries#compute-hash-for-files",children:"File Hashing"})," is enabled on the library."]}),"\n",(0,o.jsxs)(s.li,{children:["Disable ",(0,o.jsx)(s.a,{href:"/docs/guides/trash#automatically-empty-trash",children:"automatically emptying the trash"})," for the library."]}),"\n",(0,o.jsx)(s.li,{children:"Perform a scan on the library and let all tasks finish. This will ensure all files are hashed."}),"\n",(0,o.jsx)(s.li,{children:"Stop Komga."}),"\n",(0,o.jsx)(s.li,{children:"Move/copy the files to the new folder."}),"\n",(0,o.jsx)(s.li,{children:"Start Komga."}),"\n",(0,o.jsx)(s.li,{children:"Edit the library and choose the new folder as the library root directory."}),"\n",(0,o.jsx)(s.li,{children:"A scan will be triggered automatically after saving the library. The scan could take some time depending on the size of the library."}),"\n",(0,o.jsx)(s.li,{children:"Once the scan is finished, the series and books should have been matched with the files in the new folder."}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"scan-doesnt-pick-up-new-files-under-mergerfs",children:"Scan doesn't pick up new files under mergerfs"}),"\n",(0,o.jsxs)(s.p,{children:["Add ",(0,o.jsx)(s.code,{children:"func.getattr=newest"})," to the options in your ",(0,o.jsx)(s.code,{children:"/etc/fstab"})," entry for the mergerfs volume. By default, mergerfs doesn't update the modified times for everything for performance reasons. This forces it to. In most cases the performance impact is negligible."]}),"\n",(0,o.jsx)(s.p,{children:"Example:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",children:"/media/user/disk* /media/user/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,minfreespace=50G,category.create=mfs,func.getattr=newest,fsname=mergerfs 0 0\n"})}),"\n",(0,o.jsx)(s.h2,{id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available",children:"Docker on Raspberry PI arm32: No monotonic clock was available"}),"\n",(0,o.jsx)(s.p,{children:"If you encounter the following message when starting the container:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-log",children:"OpenJDK Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes\n"})}),"\n",(0,o.jsx)(s.p,{children:"Your host system needs to have installed:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Docker version ",(0,o.jsx)(s.code,{children:"19.03.9"})," or newer"]}),"\n",(0,o.jsxs)(s.li,{children:["libseccomp version ",(0,o.jsx)(s.code,{children:"2.4.2"})," or newer"]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},3023:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>l});var o=n(3696);const r={},i=o.createContext(r);function a(e){const s=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0480b142.e151a101.js b/assets/js/0480b142.e151a101.js
deleted file mode 100644
index e3d9e592..00000000
--- a/assets/js/0480b142.e151a101.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[836],{2334:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var o=n(4246),r=n(1670);const i={},a="Frequently Asked Questions",l={id:"faq",title:"Frequently Asked Questions",description:"I forgot my password",source:"@site/docs/faq.md",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/faq.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Community",permalink:"/docs/community"}},t={},d=[{value:"I forgot my password",id:"i-forgot-my-password",level:2},{value:"Where can I find the log files?",id:"where-can-i-find-the-log-files",level:2},{value:"How to enable DEBUG or TRACE logs?",id:"how-to-enable-debug-or-trace-logs",level:2},{value:"Via an application.yml
",id:"via-an-applicationyml",level:3},{value:"Using the jar
via the command line",id:"using-the-jar-via-the-command-line",level:3},{value:"Using Docker",id:"using-docker",level:3},{value:"Komga seems slow, how can I check what's going on?",id:"komga-seems-slow-how-can-i-check-whats-going-on",level:2},{value:"The memory consumption is huge",id:"the-memory-consumption-is-huge",level:2},{value:"How can I sync reading progress with tracker websites?",id:"how-can-i-sync-reading-progress-with-tracker-websites",level:2},{value:"Webreader double pages are not showing as single page",id:"webreader-double-pages-are-not-showing-as-single-page",level:2},{value:"Media type application/x-7z-compressed is not supported",id:"media-type-applicationx-7z-compressed-is-not-supported",level:2},{value:"My books/series show a different name than the files/folders",id:"my-booksseries-show-a-different-name-than-the-filesfolders",level:2},{value:"This server has already been claimed",id:"this-server-has-already-been-claimed",level:2},{value:"How can I move a library to a different folder?",id:"how-can-i-move-a-library-to-a-different-folder",level:2},{value:"Scan doesn't pick up new files under mergerfs",id:"scan-doesnt-pick-up-new-files-under-mergerfs",level:2},{value:"Docker on Raspberry PI arm32: No monotonic clock was available",id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available",level:2}];function c(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"frequently-asked-questions",children:"Frequently Asked Questions"}),"\n",(0,o.jsx)(s.h2,{id:"i-forgot-my-password",children:"I forgot my password"}),"\n",(0,o.jsxs)(s.p,{children:["Either ask an admin to reset your password, or use the ",(0,o.jsx)(s.a,{href:"/docs/guides/cli#reset-password-for-a-user",children:"Command Line Interface"})," to reset it by yourself."]}),"\n",(0,o.jsx)(s.h2,{id:"where-can-i-find-the-log-files",children:"Where can I find the log files?"}),"\n",(0,o.jsx)(s.p,{children:"By default (if you haven't changed the configuration), log files are located:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["on the Windows app: ",(0,o.jsx)(s.code,{children:"%LOCALAPPDATA%/Komga/logs/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on the macOS app: ",(0,o.jsx)(s.code,{children:"~/Library/Logs/Komga/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on Windows: ",(0,o.jsx)(s.code,{children:"%USERPROFILE%/.komga/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on macOS or Unix: ",(0,o.jsx)(s.code,{children:"~/.komga/komga.log"})]}),"\n",(0,o.jsxs)(s.li,{children:["on Docker: in the directory you mounted as ",(0,o.jsx)(s.code,{children:"/config"}),", in a subdirectory called ",(0,o.jsx)(s.code,{children:"logs"})]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"how-to-enable-debug-or-trace-logs",children:"How to enable DEBUG or TRACE logs?"}),"\n",(0,o.jsxs)(s.h3,{id:"via-an-applicationyml",children:["Via an ",(0,o.jsx)(s.code,{children:"application.yml"})]}),"\n",(0,o.jsxs)(s.p,{children:["Add the following key in your ",(0,o.jsx)(s.code,{children:"application.yml"}),":"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-yaml",children:"logging.level.org.gotson.komga: DEBUG\n"})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-yaml",children:"logging.level.org.gotson.komga: TRACE\n"})}),"\n",(0,o.jsxs)(s.h3,{id:"using-the-jar-via-the-command-line",children:["Using the ",(0,o.jsx)(s.code,{children:"jar"})," via the command line"]}),"\n",(0,o.jsxs)(s.p,{children:["Start the ",(0,o.jsx)(s.code,{children:"jar"})," with the following option:"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=DEBUG\n"})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"java -jar komga-x.y.z.jar --logging.level.org.gotson.komga=TRACE\n"})}),"\n",(0,o.jsx)(s.h3,{id:"using-docker",children:"Using Docker"}),"\n",(0,o.jsx)(s.p,{children:"Add the following environment variable:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"LOGGING_LEVEL_ORG_GOTSON_KOMGA=DEBUG\n"})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",metastring:"script",children:"LOGGING_LEVEL_ORG_GOTSON_KOMGA=TRACE\n"})}),"\n",(0,o.jsx)(s.h2,{id:"komga-seems-slow-how-can-i-check-whats-going-on",children:"Komga seems slow, how can I check what's going on?"}),"\n",(0,o.jsx)(s.p,{children:"If any activity is going on, an animated yellow bar will appear below the top-left logo. Hover your cursor over the bar to see the details of all pending tasks."}),"\n",(0,o.jsxs)("video",{controls:!0,width:"250",children:[(0,o.jsx)("source",{src:"/assets/media/faq/server-activity.webm",type:"video/webm"}),(0,o.jsx)(s.p,{children:"Sorry, your browser doesn't support embedded videos."})]}),"\n",(0,o.jsx)(s.h2,{id:"the-memory-consumption-is-huge",children:"The memory consumption is huge"}),"\n",(0,o.jsxs)(s.p,{children:["TL;DR: The operating system ",(0,o.jsx)(s.em,{children:"does not"})," report the real memory usage of the application, so don't look at those figures."]}),"\n",(0,o.jsxs)(s.p,{children:["Komga runs on the Java Virtual Machine (JVM). The JVM works differently than other native programs in regard to memory consumption.\nOn startup, the JVM will ",(0,o.jsx)(s.em,{children:"reserve"})," some memory from the OS, but that doesn't mean this memory is used by the application. If the OS needs to reclaim that memory, the JVM will try to release it."]}),"\n",(0,o.jsx)(s.p,{children:"By default, the JVM would reserve 1/4th of the physical memory (depends on the total memory and JVM version), for instance if you have 32 Gb of memory, the JVM would reserve 8 Gb."}),"\n",(0,o.jsxs)(s.p,{children:["To increase or limit the maximum memory, see ",(0,o.jsx)(s.a,{href:"/docs/installation/jar#increase-memory-limit",children:"here"})," (jar) and ",(0,o.jsx)(s.a,{href:"/docs/installation/docker#increase-memory-limit",children:"here"})," (Docker)."]}),"\n",(0,o.jsx)(s.h2,{id:"how-can-i-sync-reading-progress-with-tracker-websites",children:"How can I sync reading progress with tracker websites?"}),"\n",(0,o.jsx)(s.p,{children:"Komga does not support this outside the box."}),"\n",(0,o.jsxs)(s.p,{children:["You can try ",(0,o.jsx)(s.a,{href:"https://github.com/MALSync/MALSync",children:"MAL-Sync"})," which integrates with Komga and works with MyAnimeList, Kitsu, Anilist and others."]}),"\n",(0,o.jsx)(s.h2,{id:"webreader-double-pages-are-not-showing-as-single-page",children:"Webreader double pages are not showing as single page"}),"\n",(0,o.jsxs)(s.p,{children:["The double pages feature of the webreader requires image sizes to be available. This feature was added in v",(0,o.jsx)(s.code,{children:"0.51.0"}),". If your books have been analyzed before that version, you will need to re-analyze them in order for the double pages feature to work properly."]}),"\n",(0,o.jsx)(s.h2,{id:"media-type-applicationx-7z-compressed-is-not-supported",children:"Media type application/x-7z-compressed is not supported"}),"\n",(0,o.jsxs)(s.p,{children:["Your files are compressed using 7zip, which is not supported. Extract your archives and compress them again using the ",(0,o.jsx)(s.code,{children:"zip"})," format."]}),"\n",(0,o.jsx)(s.h2,{id:"my-booksseries-show-a-different-name-than-the-filesfolders",children:"My books/series show a different name than the files/folders"}),"\n",(0,o.jsxs)(s.p,{children:["Komga automatically import metadata from ",(0,o.jsx)(s.code,{children:"EPUB"})," files and from ",(0,o.jsx)(s.code,{children:"ComicInfo.xml"})," for ",(0,o.jsx)(s.code,{children:"cbz"}),"/",(0,o.jsx)(s.code,{children:"cbr"}),". The imported metadata will override the file/folder name."]}),"\n",(0,o.jsx)(s.h2,{id:"this-server-has-already-been-claimed",children:"This server has already been claimed"}),"\n",(0,o.jsxs)(s.p,{children:["The server cannot be claimed if a user already exists in the database. It can happen when you start Komga for the first time without the ",(0,o.jsx)(s.code,{children:"claim"})," profile as Komga will generate a default user."]}),"\n",(0,o.jsxs)(s.p,{children:["You can solve the issue by deleting the database. By default it is located in ",(0,o.jsx)(s.code,{children:"~/.komga/database.sqlite"}),". ",(0,o.jsx)(s.code,{children:"~"})," is your home directory on Unix, and your User profile on Windows."]}),"\n",(0,o.jsx)(s.h2,{id:"how-can-i-move-a-library-to-a-different-folder",children:"How can I move a library to a different folder?"}),"\n",(0,o.jsx)(s.p,{children:"You can follow those steps:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["Make sure ",(0,o.jsx)(s.a,{href:"/docs/guides/libraries#compute-hash-for-files",children:"File Hashing"})," is enabled on the library."]}),"\n",(0,o.jsxs)(s.li,{children:["Disable ",(0,o.jsx)(s.a,{href:"/docs/guides/trash#automatically-empty-trash",children:"automatically emptying the trash"})," for the library."]}),"\n",(0,o.jsx)(s.li,{children:"Perform a scan on the library and let all tasks finish. This will ensure all files are hashed."}),"\n",(0,o.jsx)(s.li,{children:"Stop Komga."}),"\n",(0,o.jsx)(s.li,{children:"Move/copy the files to the new folder."}),"\n",(0,o.jsx)(s.li,{children:"Start Komga."}),"\n",(0,o.jsx)(s.li,{children:"Edit the library and choose the new folder as the library root directory."}),"\n",(0,o.jsx)(s.li,{children:"A scan will be triggered automatically after saving the library. The scan could take some time depending on the size of the library."}),"\n",(0,o.jsx)(s.li,{children:"Once the scan is finished, the series and books should have been matched with the files in the new folder."}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"scan-doesnt-pick-up-new-files-under-mergerfs",children:"Scan doesn't pick up new files under mergerfs"}),"\n",(0,o.jsxs)(s.p,{children:["Add ",(0,o.jsx)(s.code,{children:"func.getattr=newest"})," to the options in your ",(0,o.jsx)(s.code,{children:"/etc/fstab"})," entry for the mergerfs volume. By default, mergerfs doesn't update the modified times for everything for performance reasons. This forces it to. In most cases the performance impact is negligible."]}),"\n",(0,o.jsx)(s.p,{children:"Example:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-shell",children:"/media/user/disk* /media/user/storage fuse.mergerfs defaults,nonempty,allow_other,use_ino,cache.files=off,moveonenospc=true,dropcacheonclose=true,minfreespace=50G,category.create=mfs,func.getattr=newest,fsname=mergerfs 0 0\n"})}),"\n",(0,o.jsx)(s.h2,{id:"docker-on-raspberry-pi-arm32-no-monotonic-clock-was-available",children:"Docker on Raspberry PI arm32: No monotonic clock was available"}),"\n",(0,o.jsx)(s.p,{children:"If you encounter the following message when starting the container:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-log",children:"OpenJDK Server VM warning: No monotonic clock was available - timed services may be adversely affected if the time-of-day clock changes\n"})}),"\n",(0,o.jsx)(s.p,{children:"Your host system needs to have installed:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Docker version ",(0,o.jsx)(s.code,{children:"19.03.9"})," or newer"]}),"\n",(0,o.jsxs)(s.li,{children:["libseccomp version ",(0,o.jsx)(s.code,{children:"2.4.2"})," or newer"]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1670:(e,s,n)=>{n.d(s,{Z:()=>l,a:()=>a});var o=n(7378);const r={},i=o.createContext(r);function a(e){const s=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/08fb5848.511a3f33.js b/assets/js/08fb5848.511a3f33.js
new file mode 100644
index 00000000..bd3d29cc
--- /dev/null
+++ b/assets/js/08fb5848.511a3f33.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3008],{985:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=r(2540),i=r(3023);const t={slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},a=void 0,s={permalink:"/blog/prepare-v1",source:"@site/blog/2023-03-21-prepare-v1.md",title:"Prepare for v1.0.0",description:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.",date:"2023-03-21T00:00:00.000Z",formattedDate:"March 21, 2023",tags:[{label:"breaking change",permalink:"/blog/tags/breaking-change"},{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.115,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},c=[{value:"Before upgrading",id:"before-upgrading",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version."}),"\n",(0,o.jsx)(n.h2,{id:"before-upgrading",children:"Before upgrading"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Docker, it is advisable to use the ",(0,o.jsx)(n.code,{children:"0.x"})," tag instead of ",(0,o.jsx)(n.code,{children:"latest"}),". You will be able to decide when you want to upgrade, especially if you are updating containers automatically."]}),"\n",(0,o.jsxs)(n.li,{children:["Backup your ",(0,o.jsx)(n.code,{children:"database.sqlite"}),". You can find it in the configuration directory, by default:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["on Windows: ",(0,o.jsx)(n.code,{children:"%USERPROFILE%/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Unix: ",(0,o.jsx)(n.code,{children:"~/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Docker: in the directory you mounted as ",(0,o.jsx)(n.code,{children:"/config"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["The minimum Java version required will be Java 17:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Komga using the ",(0,o.jsx)(n.code,{children:"jar"}),", you will need to make sure your Java version is sufficient by running ",(0,o.jsx)(n.code,{children:"java -version"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"If you run Komga using Docker, you don't need to do anything."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.li,{children:"The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm."}),"\n",(0,o.jsxs)(n.li,{children:["The default port will be changed from ",(0,o.jsx)(n.code,{children:"8080"})," to ",(0,o.jsx)(n.code,{children:"25600"}),":","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"If you use Docker, you will need to update your container or compose configuration to expose the new port."}),"\n",(0,o.jsx)(n.li,{children:"You may need to adjust your reverse proxy settings."}),"\n",(0,o.jsxs)(n.li,{children:["You can still change the port ",(0,o.jsx)(n.a,{href:"/docs/installation/configuration#server_port--serverport-port",children:"through configuration"}),"."]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},3023:(e,n,r)=>{r.d(n,{R:()=>a,x:()=>s});var o=r(3696);const i={},t=o.createContext(i);function a(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/08fb5848.8f0aef40.js b/assets/js/08fb5848.8f0aef40.js
deleted file mode 100644
index b0e15ef6..00000000
--- a/assets/js/08fb5848.8f0aef40.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2865],{9709:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=r(4246),i=r(1670);const t={slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},a=void 0,s={permalink:"/blog/prepare-v1",source:"@site/blog/2023-03-21-prepare-v1.md",title:"Prepare for v1.0.0",description:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.",date:"2023-03-21T00:00:00.000Z",formattedDate:"March 21, 2023",tags:[{label:"breaking change",permalink:"/blog/tags/breaking-change"},{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.115,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},c=[{value:"Before upgrading",id:"before-upgrading",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version."}),"\n",(0,o.jsx)(n.h2,{id:"before-upgrading",children:"Before upgrading"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Docker, it is advisable to use the ",(0,o.jsx)(n.code,{children:"0.x"})," tag instead of ",(0,o.jsx)(n.code,{children:"latest"}),". You will be able to decide when you want to upgrade, especially if you are updating containers automatically."]}),"\n",(0,o.jsxs)(n.li,{children:["Backup your ",(0,o.jsx)(n.code,{children:"database.sqlite"}),". You can find it in the configuration directory, by default:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["on Windows: ",(0,o.jsx)(n.code,{children:"%USERPROFILE%/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Unix: ",(0,o.jsx)(n.code,{children:"~/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Docker: in the directory you mounted as ",(0,o.jsx)(n.code,{children:"/config"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["The minimum Java version required will be Java 17:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Komga using the ",(0,o.jsx)(n.code,{children:"jar"}),", you will need to make sure your Java version is sufficient by running ",(0,o.jsx)(n.code,{children:"java -version"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"If you run Komga using Docker, you don't need to do anything."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.li,{children:"The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm."}),"\n",(0,o.jsxs)(n.li,{children:["The default port will be changed from ",(0,o.jsx)(n.code,{children:"8080"})," to ",(0,o.jsx)(n.code,{children:"25600"}),":","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"If you use Docker, you will need to update your container or compose configuration to expose the new port."}),"\n",(0,o.jsx)(n.li,{children:"You may need to adjust your reverse proxy settings."}),"\n",(0,o.jsxs)(n.li,{children:["You can still change the port ",(0,o.jsx)(n.a,{href:"/docs/installation/configuration#server_port--serverport-port",children:"through configuration"}),"."]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1670:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>a});var o=r(7378);const i={},t=o.createContext(i);function a(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0920ba86.44ca4740.js b/assets/js/0920ba86.44ca4740.js
deleted file mode 100644
index c2ad5eee..00000000
--- a/assets/js/0920ba86.44ca4740.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2239],{3477:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var i=t(4246),n=t(1670);const r={},a="User accounts",l={id:"guides/user-accounts",title:"User accounts",description:"The administrator of a Komga server has the ability to create other User Accounts for that server.",source:"@site/docs/guides/user-accounts.md",sourceDirName:"guides",slug:"/guides/user-accounts",permalink:"/docs/guides/user-accounts",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/user-accounts.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"},next:{title:"Server settings & management",permalink:"/docs/guides/server-settings"}},o={},d=[{value:"Creating Users",id:"creating-users",level:2},{value:"User Roles",id:"user-roles",level:2},{value:"Administrator",id:"administrator",level:3},{value:"Page Streaming",id:"page-streaming",level:3},{value:"File Download",id:"file-download",level:3},{value:"Shared Libraries",id:"shared-libraries",level:2},{value:"Content Restrictions",id:"content-restrictions",level:2},{value:"Age Rating",id:"age-rating",level:3},{value:"Labels",id:"labels",level:3},{value:"Multiple restrictions",id:"multiple-restrictions",level:3},{value:"Deleting Users",id:"deleting-users",level:2}];function c(e){const s={admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"user-accounts",children:"User accounts"}),"\n",(0,i.jsx)(s.p,{children:"The administrator of a Komga server has the ability to create other User Accounts for that server."}),"\n",(0,i.jsxs)(s.p,{children:["You can manage Users in ",(0,i.jsx)(s.em,{children:"Server Settings > Users"}),"."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/users-management.png",style:{maxHeight:"300px"},alt:"Users management"}),"\n",(0,i.jsx)(s.h2,{id:"creating-users",children:"Creating Users"}),"\n",(0,i.jsxs)(s.p,{children:["You can add a user by clicking on the ",(0,i.jsx)(s.em,{children:"+"})," button."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/add-user.png",style:{maxHeight:"200px"},alt:"Add User"}),"\n",(0,i.jsxs)(s.p,{children:["A dialog will show up. Fill in all the required information, and press ",(0,i.jsx)(s.em,{children:"Add"}),"."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/add-user-dialog.png",style:{maxHeight:"400px"},alt:"Add User Dialog"}),"\n",(0,i.jsx)(s.h2,{id:"user-roles",children:"User Roles"}),"\n",(0,i.jsx)(s.p,{children:"Users can have different roles, giving them the ability to do certain things."}),"\n",(0,i.jsx)(s.h3,{id:"administrator",children:"Administrator"}),"\n",(0,i.jsx)(s.p,{children:"An administrator can perform all the management actions:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"add, edit, and delete libraries"}),"\n",(0,i.jsx)(s.li,{children:"add, edit, and delete users"}),"\n",(0,i.jsx)(s.li,{children:"add, edit, and delete collections"}),"\n",(0,i.jsx)(s.li,{children:"edit series and book metadata"}),"\n",(0,i.jsx)(s.li,{children:"manually scan, analyze and refresh metadata"}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"page-streaming",children:"Page Streaming"}),"\n",(0,i.jsx)(s.p,{children:"A user with this role will be able to stream individual pages, for example to read using the Webreader."}),"\n",(0,i.jsx)(s.h3,{id:"file-download",children:"File Download"}),"\n",(0,i.jsx)(s.p,{children:"A user with this role will be able to download the file of a book."}),"\n",(0,i.jsx)(s.h2,{id:"shared-libraries",children:"Shared Libraries"}),"\n",(0,i.jsxs)(s.p,{children:["An administrator can limit what libraries users can access. This is done via the ",(0,i.jsx)(s.em,{children:"Edit Restrictions"})," button."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/edit-libraries.png",style:{maxHeight:"50px"},alt:"Edit Restrictions"}),"\n",(0,i.jsxs)(s.p,{children:["Choose the libraries the user will be able to access, or select ",(0,i.jsx)(s.em,{children:"All libraries"})," for unrestricted access (default option)."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/edit-libraries-dialog.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),"\n",(0,i.jsx)(s.h2,{id:"content-restrictions",children:"Content Restrictions"}),"\n",(0,i.jsx)(s.p,{children:"Content restrictions lets you control more finely the content you share. You can select specific age rating as well as content that you\u2019ve set with a specific Label."}),"\n",(0,i.jsx)(s.p,{children:"Content restriction is performed at series level, and will also apply to books, collections and reading lists."}),"\n",(0,i.jsx)(s.h3,{id:"age-rating",children:"Age Rating"}),"\n",(0,i.jsx)(s.p,{children:"Select which age rating you wish to only allow or exclude. For instance, if you choose to only allow content under 10 as the restriction, then only content that has an age rating of 10 or under will be shared . If you choose to exclude content over 16 then those will be hidden."}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/restriction-age-allow.png",style:{maxHeight:"400px"},alt:"Age Restriction Allow under"}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/restriction-age-exclude.png",style:{maxHeight:"400px"},alt:"Age Restriction Exclude over"}),"\n",(0,i.jsx)(s.h3,{id:"labels",children:"Labels"}),"\n",(0,i.jsx)(s.p,{children:"You can create arbitrary Labels when editing library content. When sharing, you can then choose to allow one or more Labels to have content matching those Labels shared. You can also exclude labels."}),"\n",(0,i.jsx)(s.p,{children:"Labels are defined on Series:"}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/series-sharing.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),"\n",(0,i.jsx)(s.h3,{id:"multiple-restrictions",children:"Multiple restrictions"}),"\n",(0,i.jsx)(s.p,{children:"When combining multiple restrictions, the following rules apply:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Exclusion rules have always priority over allow rules."}),"\n",(0,i.jsxs)(s.li,{children:["Allow rules apply with an ",(0,i.jsx)(s.em,{children:"OR"}),' condition: for example allowing a user to access content rated 10 or under, or labelled "kids", the user will be able to access content matching one or the other.']}),"\n"]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/restrictions-dialog.png",style:{maxHeight:"400px"},alt:"Edit Restrictions"}),"\n",(0,i.jsx)(s.h2,{id:"deleting-users",children:"Deleting Users"}),"\n",(0,i.jsxs)(s.admonition,{type:"danger",children:[(0,i.jsx)(s.p,{children:"Deleting a user will remove all read progress for this user."}),(0,i.jsx)(s.p,{children:"This cannot be undone."})]})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1670:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>a});var i=t(7378);const n={},r=i.createContext(n);function a(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0920ba86.ea236d8a.js b/assets/js/0920ba86.ea236d8a.js
new file mode 100644
index 00000000..a192dc79
--- /dev/null
+++ b/assets/js/0920ba86.ea236d8a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9225],{2548:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var i=t(2540),n=t(3023);const r={},a="User accounts",l={id:"guides/user-accounts",title:"User accounts",description:"The administrator of a Komga server has the ability to create other User Accounts for that server.",source:"@site/docs/guides/user-accounts.md",sourceDirName:"guides",slug:"/guides/user-accounts",permalink:"/docs/guides/user-accounts",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/user-accounts.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"},next:{title:"Server settings & management",permalink:"/docs/guides/server-settings"}},o={},d=[{value:"Creating Users",id:"creating-users",level:2},{value:"User Roles",id:"user-roles",level:2},{value:"Administrator",id:"administrator",level:3},{value:"Page Streaming",id:"page-streaming",level:3},{value:"File Download",id:"file-download",level:3},{value:"Shared Libraries",id:"shared-libraries",level:2},{value:"Content Restrictions",id:"content-restrictions",level:2},{value:"Age Rating",id:"age-rating",level:3},{value:"Labels",id:"labels",level:3},{value:"Multiple restrictions",id:"multiple-restrictions",level:3},{value:"Deleting Users",id:"deleting-users",level:2}];function c(e){const s={admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h1,{id:"user-accounts",children:"User accounts"}),"\n",(0,i.jsx)(s.p,{children:"The administrator of a Komga server has the ability to create other User Accounts for that server."}),"\n",(0,i.jsxs)(s.p,{children:["You can manage Users in ",(0,i.jsx)(s.em,{children:"Server Settings > Users"}),"."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/users-management.png",style:{maxHeight:"300px"},alt:"Users management"}),"\n",(0,i.jsx)(s.h2,{id:"creating-users",children:"Creating Users"}),"\n",(0,i.jsxs)(s.p,{children:["You can add a user by clicking on the ",(0,i.jsx)(s.em,{children:"+"})," button."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/add-user.png",style:{maxHeight:"200px"},alt:"Add User"}),"\n",(0,i.jsxs)(s.p,{children:["A dialog will show up. Fill in all the required information, and press ",(0,i.jsx)(s.em,{children:"Add"}),"."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/add-user-dialog.png",style:{maxHeight:"400px"},alt:"Add User Dialog"}),"\n",(0,i.jsx)(s.h2,{id:"user-roles",children:"User Roles"}),"\n",(0,i.jsx)(s.p,{children:"Users can have different roles, giving them the ability to do certain things."}),"\n",(0,i.jsx)(s.h3,{id:"administrator",children:"Administrator"}),"\n",(0,i.jsx)(s.p,{children:"An administrator can perform all the management actions:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"add, edit, and delete libraries"}),"\n",(0,i.jsx)(s.li,{children:"add, edit, and delete users"}),"\n",(0,i.jsx)(s.li,{children:"add, edit, and delete collections"}),"\n",(0,i.jsx)(s.li,{children:"edit series and book metadata"}),"\n",(0,i.jsx)(s.li,{children:"manually scan, analyze and refresh metadata"}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"page-streaming",children:"Page Streaming"}),"\n",(0,i.jsx)(s.p,{children:"A user with this role will be able to stream individual pages, for example to read using the Webreader."}),"\n",(0,i.jsx)(s.h3,{id:"file-download",children:"File Download"}),"\n",(0,i.jsx)(s.p,{children:"A user with this role will be able to download the file of a book."}),"\n",(0,i.jsx)(s.h2,{id:"shared-libraries",children:"Shared Libraries"}),"\n",(0,i.jsxs)(s.p,{children:["An administrator can limit what libraries users can access. This is done via the ",(0,i.jsx)(s.em,{children:"Edit Restrictions"})," button."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/edit-libraries.png",style:{maxHeight:"50px"},alt:"Edit Restrictions"}),"\n",(0,i.jsxs)(s.p,{children:["Choose the libraries the user will be able to access, or select ",(0,i.jsx)(s.em,{children:"All libraries"})," for unrestricted access (default option)."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/edit-libraries-dialog.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),"\n",(0,i.jsx)(s.h2,{id:"content-restrictions",children:"Content Restrictions"}),"\n",(0,i.jsx)(s.p,{children:"Content restrictions lets you control more finely the content you share. You can select specific age rating as well as content that you\u2019ve set with a specific Label."}),"\n",(0,i.jsx)(s.p,{children:"Content restriction is performed at series level, and will also apply to books, collections and reading lists."}),"\n",(0,i.jsx)(s.h3,{id:"age-rating",children:"Age Rating"}),"\n",(0,i.jsx)(s.p,{children:"Select which age rating you wish to only allow or exclude. For instance, if you choose to only allow content under 10 as the restriction, then only content that has an age rating of 10 or under will be shared . If you choose to exclude content over 16 then those will be hidden."}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/restriction-age-allow.png",style:{maxHeight:"400px"},alt:"Age Restriction Allow under"}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/restriction-age-exclude.png",style:{maxHeight:"400px"},alt:"Age Restriction Exclude over"}),"\n",(0,i.jsx)(s.h3,{id:"labels",children:"Labels"}),"\n",(0,i.jsx)(s.p,{children:"You can create arbitrary Labels when editing library content. When sharing, you can then choose to allow one or more Labels to have content matching those Labels shared. You can also exclude labels."}),"\n",(0,i.jsx)(s.p,{children:"Labels are defined on Series:"}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/series-sharing.png",style:{maxHeight:"400px"},alt:"Edit Shared Libraries"}),"\n",(0,i.jsx)(s.h3,{id:"multiple-restrictions",children:"Multiple restrictions"}),"\n",(0,i.jsx)(s.p,{children:"When combining multiple restrictions, the following rules apply:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Exclusion rules have always priority over allow rules."}),"\n",(0,i.jsxs)(s.li,{children:["Allow rules apply with an ",(0,i.jsx)(s.em,{children:"OR"}),' condition: for example allowing a user to access content rated 10 or under, or labelled "kids", the user will be able to access content matching one or the other.']}),"\n"]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/user-accounts/restrictions-dialog.png",style:{maxHeight:"400px"},alt:"Edit Restrictions"}),"\n",(0,i.jsx)(s.h2,{id:"deleting-users",children:"Deleting Users"}),"\n",(0,i.jsxs)(s.admonition,{type:"danger",children:[(0,i.jsx)(s.p,{children:"Deleting a user will remove all read progress for this user."}),(0,i.jsx)(s.p,{children:"This cannot be undone."})]})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},3023:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>l});var i=t(3696);const n={},r=i.createContext(n);function a(e){const s=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0bf9748d.63d9dfd4.js b/assets/js/0bf9748d.63d9dfd4.js
deleted file mode 100644
index da40df56..00000000
--- a/assets/js/0bf9748d.63d9dfd4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9847],{7842:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var s=n(4246),a=n(1670);const r={},l="Scanning, Analyzing and Refreshing Metadata",t={id:"guides/scan-analysis-refresh",title:"Scanning, Analyzing and Refreshing Metadata",description:"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.",source:"@site/docs/guides/scan-analysis-refresh.md",sourceDirName:"guides",slug:"/guides/scan-analysis-refresh",permalink:"/docs/guides/scan-analysis-refresh",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/scan-analysis-refresh.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"},next:{title:"Image Types",permalink:"/docs/guides/image-formats"}},o={},d=[{value:"Scan Library Files",id:"scan-library-files",level:2},{value:"Deep scan",id:"deep-scan",level:3},{value:"What happens during a Scan?",id:"what-happens-during-a-scan",level:2},{value:"Analyze books",id:"analyze-books",level:2},{value:"What happens during Analysis?",id:"what-happens-during-analysis",level:3},{value:"Gather media properties",id:"gather-media-properties",level:4},{value:"Generate default artwork",id:"generate-default-artwork",level:4},{value:"Analyze your content",id:"analyze-your-content",level:3},{value:"Media Analysis screen",id:"media-analysis-screen",level:3},{value:"Refresh metadata",id:"refresh-metadata",level:2},{value:"Import metadata for CBR/CBZ containing a ComicInfo.xml file",id:"import-metadata-for-cbrcbz-containing-a-comicinfoxml-file",level:3},{value:"Book metadata",id:"book-metadata",level:4},{value:"Series metadata",id:"series-metadata",level:4},{value:"Collections",id:"collections",level:4},{value:"Read lists",id:"read-lists",level:4},{value:"StoryArcNumber",id:"storyarcnumber",level:5},{value:"Import metadata from EPUB files",id:"import-metadata-from-epub-files",level:3},{value:"Book metadata",id:"book-metadata-1",level:4},{value:"Series metadata",id:"series-metadata-1",level:4},{value:"Import metadata generated by Mylar",id:"import-metadata-generated-by-mylar",level:3},{value:"Import local media assets",id:"import-local-media-assets",level:3},{value:"Local artwork",id:"local-artwork",level:4},{value:"Import ISBN within barcode",id:"import-isbn-within-barcode",level:3},{value:"ISBN barcode",id:"isbn-barcode",level:4}];function c(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"scanning-analyzing-and-refreshing-metadata",children:"Scanning, Analyzing and Refreshing Metadata"}),"\n",(0,s.jsx)(i.p,{children:"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things."}),"\n",(0,s.jsx)(i.h2,{id:"scan-library-files",children:"Scan Library Files"}),"\n",(0,s.jsx)(i.p,{children:"Scanning a library makes Komga check its folders and sub-folders for new or removed books. If it finds new media, it then pulls it into the library. You can think of scanning as \u201ccheck for new or changed content\u201d."}),"\n",(0,s.jsx)(i.p,{children:"All files that have changed after a scan will be Analyzed."}),"\n",(0,s.jsx)(i.p,{children:"You should Scan Library Files if you have:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Added or deleted files or folders"}),"\n",(0,s.jsx)(i.li,{children:"Renamed a file or folder"}),"\n",(0,s.jsx)(i.li,{children:"Moved files or folders from one location to another"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"By default, Komga will scan your libraries regularly."}),"\n",(0,s.jsx)(i.h3,{id:"deep-scan",children:"Deep scan"}),"\n",(0,s.jsx)(i.p,{children:"This will force the scanner to compare all scanned books with the ones stored in the database. Normally this is not required, as Komga uses the last modified time of the parent folders to decide whether to compare books, but some filesystems may behave differently."}),"\n",(0,s.jsx)(i.p,{children:"Trigger a Deep Scan if Komga is missing some books after a scan."}),"\n",(0,s.jsx)(i.h2,{id:"what-happens-during-a-scan",children:"What happens during a Scan?"}),"\n",(0,s.jsxs)(i.p,{children:["Komga will generate a library representation of your files on disk. A Komga library does ",(0,s.jsx)(i.em,{children:"not"})," represent exactly your folder structure."]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Komga will create a ",(0,s.jsx)(i.em,{children:"Series"})," for each subfolder of any library, whatever the depth of this subfolder in your directory structure"]}),"\n",(0,s.jsxs)(i.li,{children:["Komga will create a ",(0,s.jsx)(i.em,{children:"Book"})," for each file found, and place it inside the ",(0,s.jsx)(i.em,{children:"Series"})," corresponding to the parent folder of the file"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"analyze-books",children:"Analyze books"}),"\n",(0,s.jsx)(i.p,{children:"Analysis is automatically performed when content is added to your Library. In rare cases, new versions of Komga may update the media analysis capabilities to correct something or add the ability to detect new things. In those cases, content may be re-analyzed when you access it after the new server version is installed."}),"\n",(0,s.jsx)(i.h3,{id:"what-happens-during-analysis",children:"What happens during Analysis?"}),"\n",(0,s.jsx)(i.p,{children:"Whenever an item is added to one of your Libraries, Komga performs some analysis on it to gather information. In addition, all files analyzed will also be refreshed for metadata."}),"\n",(0,s.jsx)(i.h4,{id:"gather-media-properties",children:"Gather media properties"}),"\n",(0,s.jsx)(i.p,{children:"The primary purpose of media analysis is to gather information about that media item. All of the media you add to a Library has properties that are useful to know, such as:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Container: ZIP, RAR, EPUB, PDF, etc."}),"\n",(0,s.jsx)(i.li,{children:"Images Format: JPEG, PNG, WEBP, etc."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Why, though? What use are these media properties? Your Server, together with your apps, can use this information to help determine whether (and how) content can be played."}),"\n",(0,s.jsx)(i.p,{children:"For example: Imagine you have a CBR file with WEBP images, but you\u2019re using Internet Explorer (which can\u2019t read WEBP). Since the webreader knows what kind of content your browser can display and since your media analysis detected that the book has WEBP images, your Komga Server can convert those images to a compatible format (like JPEG) for you in order to let you read your book successfully."}),"\n",(0,s.jsx)(i.h4,{id:"generate-default-artwork",children:"Generate default artwork"}),"\n",(0,s.jsx)(i.p,{children:"During analysis, artwork will automatically be grabbed from a book file. The first page will be used for poster/thumbnail type purposes."}),"\n",(0,s.jsx)(i.h3,{id:"analyze-your-content",children:"Analyze your content"}),"\n",(0,s.jsx)(i.p,{children:"You can analyze content in multiple ways: for a book, for a series, or even for an entire Library."}),"\n",(0,s.jsxs)(i.p,{children:["Look for the action menu icon ",(0,s.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,s.jsx)(i.em,{children:"Analyze"}),"."]}),"\n",(0,s.jsx)(i.admonition,{type:"warning",children:(0,s.jsx)(i.p,{children:"Depending on the size of your Library, analysis may take a while."})}),"\n",(0,s.jsx)(i.h3,{id:"media-analysis-screen",children:"Media Analysis screen"}),"\n",(0,s.jsxs)(i.p,{children:["You can check all the media for which the analysis did not succeed from the Media Analysis screen. You can access it from ",(0,s.jsx)(i.em,{children:"Media Management > Media Analysis"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"It will show you all books with a status of:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Error: Komga could not analyze the book. If possible, there will be a comment to describe the error."}),"\n",(0,s.jsx)(i.li,{children:"Unsupported: Komga does not support those files. The comment will give you more information."}),"\n"]}),"\n",(0,s.jsx)("a",{href:"/assets/media/guides/scan-analysis-refresh/media-analysis.png",children:(0,s.jsx)("img",{src:"/assets/media/guides/scan-analysis-refresh/media-analysis.png",style:{maxHeight:"400px"},alt:"Media Analysis"})}),"\n",(0,s.jsx)(i.h2,{id:"refresh-metadata",children:"Refresh metadata"}),"\n",(0,s.jsx)(i.p,{children:"Refreshing Metadata for a library, series, or individual book causes the metadata for the item to be refreshed, even if it already has metadata. You can think of refreshing as \u201cupdate metadata for the requested item even if it already has some\u201d."}),"\n",(0,s.jsx)(i.p,{children:"You should refresh a library or individual item if:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"You\u2019ve changed options for the library"}),"\n",(0,s.jsx)(i.li,{children:'You\u2019ve added "local media assets" (such as artwork)'}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Metadata is gathered from the following sources:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["a local ",(0,s.jsx)(i.code,{children:"ComicInfo.xml"})," file located inside a CBZ or CBR"]}),"\n",(0,s.jsx)(i.li,{children:"the metadata of an EPUB file"}),"\n",(0,s.jsx)(i.li,{children:"local media assets"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"The metadata refresh is dependent of the options of the Library."}),"\n",(0,s.jsx)(i.h3,{id:"import-metadata-for-cbrcbz-containing-a-comicinfoxml-file",children:"Import metadata for CBR/CBZ containing a ComicInfo.xml file"}),"\n",(0,s.jsx)(i.h4,{id:"book-metadata",children:"Book metadata"}),"\n",(0,s.jsxs)(i.p,{children:["This will import the following elements from the ",(0,s.jsx)(i.code,{children:"ComicInfo.xml"})," file in Komga:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"Year"}),", ",(0,s.jsx)(i.code,{children:"Month"}),", and ",(0,s.jsx)(i.code,{children:"Day"})," to form the ",(0,s.jsx)(i.em,{children:"Release Date"})]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"Writer"}),", ",(0,s.jsx)(i.code,{children:"Penciller"}),", ",(0,s.jsx)(i.code,{children:"Inker"}),", ",(0,s.jsx)(i.code,{children:"Colorist"}),", ",(0,s.jsx)(i.code,{children:"Letterer"}),", ",(0,s.jsx)(i.code,{children:"CoverArtist"}),", ",(0,s.jsx)(i.code,{children:"Editor"}),", and ",(0,s.jsx)(i.code,{children:"Translator"})," as ",(0,s.jsx)(i.em,{children:"Authors"})," with the according role. A value with multiple names separated by a ",(0,s.jsx)(i.code,{children:","})," will be split in different authors."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"Title"}),", ",(0,s.jsx)(i.code,{children:"Summary"}),", ",(0,s.jsx)(i.code,{children:"Number"})," as their Komga equivalent"]}),"\n",(0,s.jsxs)(i.li,{children:["Valid ",(0,s.jsx)(i.code,{children:"Web"})," links as a book link"]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"Tags"})," element will be split by ",(0,s.jsx)(i.code,{children:","})," and added to the book's ",(0,s.jsx)(i.em,{children:"tags"})]}),"\n",(0,s.jsxs)(i.li,{children:["If the ",(0,s.jsx)(i.code,{children:"GTIN"})," element contains a valid ISBN, as the book's ",(0,s.jsx)(i.em,{children:"ISBN"})]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"series-metadata",children:"Series metadata"}),"\n",(0,s.jsxs)(i.p,{children:["This will import the following elements from the ",(0,s.jsx)(i.code,{children:"ComicInfo.xml"})," of the Series' books in Komga:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"Series"})," and ",(0,s.jsx)(i.code,{children:"Volume"})," elements will be used to overwrite the title of the Series, in the form ",(0,s.jsx)(i.code,{children:"["'])(?.*?)\1/,f=/\{(? [\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},x={...g,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},j=Object.keys(g);function b(e,t){const n=e.map((e=>{const{start:n,end:s}=x[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:a}=t;if(a&&f.test(a)){const e=a.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return b(["tex"],t);case"lua":case"haskell":case"sql":return b(["lua"],t);case"wasm":return b(["wasm"],t);case"vb":case"vba":case"visual-basic":return b(["vb","rem"],t);case"vbnet":return b(["vbnet","rem"],t);case"batch":return b(["rem"],t);case"basic":return b(["rem","f90"],t);case"fsharp":return b(["js","ml"],t);case"ocaml":case"sml":return b(["ml"],t);case"fortran":return b(["f90"],t);case"cobol":return b(["cobol"],t);default:return b(j,t)}}(s,o),i=n.split("\n"),r=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const N={codeBlockContainer:"codeBlockContainer_mQmQ"};var k=n(4246);function y(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,o]=e;const a=t[s];a&&"string"==typeof o&&(n[a]=o)})),n}(d());return(0,k.jsx)(t,{...n,style:s,className:(0,i.Z)(n.className,N.codeBlockContainer,u.k.common.codeBlock)})}const B={codeBlockContent:"codeBlockContent_D5yF",codeBlockTitle:"codeBlockTitle_x_ju",codeBlock:"codeBlock_RMoD",codeBlockStandalone:"codeBlockStandalone_wQog",codeBlockLines:"codeBlockLines_AclH",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_O625",buttonGroup:"buttonGroup_aaMX"};function C(e){let{children:t,className:n}=e;return(0,k.jsx)(y,{as:"pre",tabIndex:0,className:(0,i.Z)(B.codeBlockStandalone,"thin-scrollbar",n),children:(0,k.jsx)("code",{className:B.codeBlockLines,children:t})})}var w=n(1763);const Z={attributes:!0,characterData:!0,childList:!0,subtree:!0};function E(e,t){const[n,o]=(0,s.useState)(),a=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=Z);const o=(0,w.zX)(t),a=(0,w.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,a),()=>t.disconnect()}),[e,o,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var L=n(6101);const _={codeLine:"codeLine_FAqz",codeLineNumber:"codeLineNumber_BE9Z",codeLineContent:"codeLineContent_EF2y"};function T(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=o({line:t,className:(0,i.Z)(n,s&&_.codeLine)}),r=t.map(((e,t)=>(0,k.jsx)("span",{...a({token:e,key:t})},t)));return(0,k.jsxs)("span",{...c,children:[s?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)("span",{className:_.codeLineNumber}),(0,k.jsx)("span",{className:_.codeLineContent,children:r})]}):r,(0,k.jsx)("br",{})]})}var z=n(9213);function I(e){return(0,k.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,k.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function A(e){return(0,k.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,k.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const S={copyButtonCopied:"copyButtonCopied_TYdd",copyButtonIcons:"copyButtonIcons_z5j7",copyButtonIcon:"copyButtonIcon_FoOz",copyButtonSuccessIcon:"copyButtonSuccessIcon_L0B6"};function M(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),o=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const a=document.getSelection(),c=a.rangeCount>0&&a.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),c&&(a.removeAllRanges(),a.addRange(c)),o&&o.focus()}(t),a(!0),c.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,k.jsx)("button",{type:"button","aria-label":o?(0,z.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,z.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,z.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,S.copyButton,o&&S.copyButtonCopied),onClick:r,children:(0,k.jsxs)("span",{className:S.copyButtonIcons,"aria-hidden":"true",children:[(0,k.jsx)(I,{className:S.copyButtonIcon}),(0,k.jsx)(A,{className:S.copyButtonSuccessIcon})]})})}function H(e){return(0,k.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,k.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const R={wordWrapButtonIcon:"wordWrapButtonIcon_HV9T",wordWrapButtonEnabled:"wordWrapButtonEnabled_XzR1"};function W(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,z.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,k.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,s&&R.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,k.jsx)(H,{className:R.wordWrapButtonIcon,"aria-hidden":"true"})})}function $(e){let{children:t,className:n="",metastring:o,title:a,showLineNumbers:c,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.L)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),a=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");o(n)}),[a]);return E(a,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(o)||a,{lineClassNames:j,code:b}=v(t,{metastring:o,language:h,magicComments:m}),N=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,k.jsxs)(y,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,k.jsx)("div",{className:B.codeBlockTitle,children:x}),(0,k.jsxs)("div",{className:B.codeBlockContent,children:[(0,k.jsx)(L.y$,{theme:f,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:a}=e;return(0,k.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.Z)(t,B.codeBlock,"thin-scrollbar"),style:n,children:(0,k.jsx)("code",{className:(0,i.Z)(B.codeBlockLines,N&&B.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,k.jsx)(T,{line:e,getLineProps:o,getTokenProps:a,classNames:j[t],showLineNumbers:N},t)))})})}}),(0,k.jsxs)("div",{className:B.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,k.jsx)(W,{className:B.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,k.jsx)(M,{className:B.codeButton,code:b})]})]})]})}function V(e){let{children:t,...n}=e;const o=(0,c.Z)(),a=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof a?$:C;return(0,k.jsx)(i,{...n,children:a},String(o))}function D(e){return(0,k.jsx)("code",{...e})}var F=n(6641);var O=n(1521),P=n(376);const q={details:"details_IpIu",isBrowser:"isBrowser_QD4r",collapsibleContent:"collapsibleContent_Fd2D"};function G(e){return!!e&&("SUMMARY"===e.tagName||G(e.parentElement))}function Q(e,t){return!!e&&(e===t||Q(e.parentElement,t))}function U(e){let{summary:t,children:n,...o}=e;(0,O.Z)().collectAnchor(o.id);const a=(0,c.Z)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,P.u)({initialState:!o.open}),[u,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,k.jsx)("summary",{children:t??"Details"});return(0,k.jsxs)("details",{...o,ref:r,open:u,"data-collapsed":l,className:(0,i.Z)(q.details,a&&q.isBrowser,o.className),onMouseDown:e=>{G(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;G(t)&&Q(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,k.jsx)(P.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,k.jsx)("div",{className:q.collapsibleContent,children:n})})]})}const X={details:"details_jERq"},Y="alert alert--info";function J(e){let{...t}=e;return(0,k.jsx)(U,{...t,className:(0,i.Z)(Y,X.details,t.className)})}function K(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,k.jsx)(k.Fragment,{children:t.filter((e=>e!==n))});return(0,k.jsx)(J,{...e,summary:n,children:o})}var ee=n(1999);function te(e){return(0,k.jsx)(ee.Z,{...e})}const ne={containsTaskList:"containsTaskList_QWGu"};function se(e){if(void 0!==e)return(0,i.Z)(e,e?.includes("contains-task-list")&&ne.containsTaskList)}const oe={img:"img_SS3x"};var ae=n(458);const ce={Head:a.Z,details:K,Details:K,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,k.jsx)(D,{...e}):(0,k.jsx)(V,{...e})},a:function(e){return(0,k.jsx)(F.Z,{...e})},pre:function(e){return(0,k.jsx)(k.Fragment,{children:e.children})},ul:function(e){return(0,k.jsx)("ul",{...e,className:se(e.className)})},li:function(e){return(0,O.Z)().collectAnchor(e.id),(0,k.jsx)("li",{...e})},img:function(e){return(0,k.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,i.Z)(t,oe.img))});var t},h1:e=>(0,k.jsx)(te,{as:"h1",...e}),h2:e=>(0,k.jsx)(te,{as:"h2",...e}),h3:e=>(0,k.jsx)(te,{as:"h3",...e}),h4:e=>(0,k.jsx)(te,{as:"h4",...e}),h5:e=>(0,k.jsx)(te,{as:"h5",...e}),h6:e=>(0,k.jsx)(te,{as:"h6",...e}),admonition:ae.Z,mermaid:()=>null};function ie(e){let{children:t}=e;return(0,k.jsx)(o.Z,{components:ce,children:t})}},4582:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7378);var s=n(624),o=n(6641),a=n(4246);function c(e){const{permalink:t,title:n,subLabel:c,isNext:i}=e;return(0,a.jsxs)(o.Z,{className:(0,s.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}},1478:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7378);var s=n(624),o=n(6641);const a={tag:"tag_otG2",tagRegular:"tagRegular_s0E1",tagWithCount:"tagWithCount_PGyn"};var c=n(4246);function i(e){let{permalink:t,label:n,count:i}=e;return(0,c.jsxs)(o.Z,{href:t,className:(0,s.Z)(a.tag,i?a.tagWithCount:a.tagRegular),children:[n,i&&(0,c.jsx)("span",{children:i})]})}},8349:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});n(7378);var s=n(624),o=n(9213),a=n(1478);const c={tags:"tags_Ow0B",tag:"tag_DFxh"};var i=n(4246);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(o.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.Z)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:c.tag,children:(0,i.jsx)(a.Z,{label:t,permalink:n})},n)}))})]})}},6324:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,o,a]=t;if(s&&a){s=parseInt(s),a=parseInt(a);const e=s{"use strict";n.d(t,{Z:()=>i,a:()=>c});var s=n(7378);const o={},a=s.createContext(o);function c(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1bb85636.416c2272.js b/assets/js/1bb85636.416c2272.js deleted file mode 100644 index 90b66bb1..00000000 --- a/assets/js/1bb85636.416c2272.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9844],{8704:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var o=t(4246),i=t(1670);const s={},a="Read with Chunky Reader (iPad)",r={id:"guides/chunky",title:"Read with Chunky Reader (iPad)",description:"Chunky Reader does not work anymore with Komga 1.4.0+",source:"@site/docs/guides/chunky.md",sourceDirName:"guides",slug:"/guides/chunky",permalink:"/docs/guides/chunky",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/chunky.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"},next:{title:"Theme",permalink:"/docs/guides/theme"}},d={},c=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Chunky",id:"adding-your-komga-server-to-chunky",level:2},{value:"Limitations",id:"limitations",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"read-with-chunky-reader-ipad",children:"Read with Chunky Reader (iPad)"}),"\n",(0,o.jsx)(n.admonition,{title:"Note",type:"danger",children:(0,o.jsx)(n.p,{children:"Chunky Reader does not work anymore with Komga 1.4.0+"})}),"\n",(0,o.jsx)(n.h2,{id:"background",children:"Background"}),"\n",(0,o.jsxs)(n.p,{children:["Thanks to Komga's OPDS support, you can use the ",(0,o.jsx)(n.a,{href:"https://apps.apple.com/app/id663567628",children:"Chunky Reader"})," application for iPad to remotely download or stream your comics. Chunky Reader is at time of writing the only comic reader on iPad that supports the OPDS page streaming extension. This lets you stream individual pages without having to download the whole comic file onto your iPad."]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsx)(n.p,{children:"Please note that Chunky Reader's OPDS support requires the in app purchase which costs $3.99 or the equivalent of your local currency."})}),"\n",(0,o.jsx)(n.h2,{id:"adding-your-komga-server-to-chunky",children:"Adding your Komga server to Chunky"}),"\n",(0,o.jsxs)(n.p,{children:["First you need to make sure that you can browse to your komga server's web UI from Safari on your iPad. Open up Safari, navigate to your server's address and log in as normal. Next, open the address bar, delete ",(0,o.jsx)(n.code,{children:"/dashboard"})," part which is added automatically when you log in, and then append ",(0,o.jsx)(n.code,{children:"/opds/v1.2/catalog"})," to the end of the URL and press return."]}),"\n",(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/safari-check1.png"}),"\n",(0,o.jsx)(n.p,{children:"You should then see a screen like the below image, if you do, you're ready to proceed with configuring Chunky Reader. You may wish to copy the URL to your iPad clipboard for pasting later."}),"\n",(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/safari-check2.png"}),"\n",(0,o.jsx)(n.p,{children:"Open Chunky Reader and click the cloud icon, circled in red in the screenshot below."}),"\n",(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/cloud-symbol.png"}),"\n",(0,o.jsx)(n.p,{children:"In the pop up window, click the plus button, circled in red in the screenshot below."}),"\n",(0,o.jsx)("div",{class:"text--center",children:(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/plus-button.png",width:"300"})}),"\n",(0,o.jsx)(n.p,{children:'Now choose the green plus button next to "Calibre/Ubooquity/OPDS".'}),"\n",(0,o.jsx)("div",{class:"text--center",children:(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/opds-option.png",width:"300"})}),"\n",(0,o.jsxs)(n.p,{children:["In this dialogue box, enter your ",(0,o.jsx)(n.em,{children:"server address"})," (paste from the earlier step if you copied it to clipboard), ",(0,o.jsx)(n.em,{children:"username"}),", and ",(0,o.jsx)(n.em,{children:"password"}),". Then click ",(0,o.jsx)(n.em,{children:"Connect"}),". Your Komga server should now appear in the cloud icon menu. You can stream comics by navigating to them and tapping the name, or download them via clicking the blue download button next to a comic. You can download all the comics in a given view by tapping the ",(0,o.jsx)(n.em,{children:"All"})," button in the bottom right of the menu."]}),"\n",(0,o.jsx)("div",{class:"text--center",children:(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/list-view.png",width:"300"})}),"\n",(0,o.jsx)(n.h2,{id:"limitations",children:"Limitations"}),"\n",(0,o.jsxs)(n.p,{children:["Reading comics via Chunky Reader ",(0,o.jsx)(n.strong,{children:"does not"})," update the read progress. This means you will need to manually mark your comics as read via the web UI."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},1670:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var o=t(7378);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1bb85636.a0cf6f8e.js b/assets/js/1bb85636.a0cf6f8e.js new file mode 100644 index 00000000..d281013e --- /dev/null +++ b/assets/js/1bb85636.a0cf6f8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3054],{4312:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var o=t(2540),i=t(3023);const s={},a="Read with Chunky Reader (iPad)",r={id:"guides/chunky",title:"Read with Chunky Reader (iPad)",description:"Chunky Reader does not work anymore with Komga 1.4.0+",source:"@site/docs/guides/chunky.md",sourceDirName:"guides",slug:"/guides/chunky",permalink:"/docs/guides/chunky",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/chunky.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"},next:{title:"Theme",permalink:"/docs/guides/theme"}},d={},c=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Chunky",id:"adding-your-komga-server-to-chunky",level:2},{value:"Limitations",id:"limitations",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"read-with-chunky-reader-ipad",children:"Read with Chunky Reader (iPad)"}),"\n",(0,o.jsx)(n.admonition,{title:"Note",type:"danger",children:(0,o.jsx)(n.p,{children:"Chunky Reader does not work anymore with Komga 1.4.0+"})}),"\n",(0,o.jsx)(n.h2,{id:"background",children:"Background"}),"\n",(0,o.jsxs)(n.p,{children:["Thanks to Komga's OPDS support, you can use the ",(0,o.jsx)(n.a,{href:"https://apps.apple.com/app/id663567628",children:"Chunky Reader"})," application for iPad to remotely download or stream your comics. Chunky Reader is at time of writing the only comic reader on iPad that supports the OPDS page streaming extension. This lets you stream individual pages without having to download the whole comic file onto your iPad."]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsx)(n.p,{children:"Please note that Chunky Reader's OPDS support requires the in app purchase which costs $3.99 or the equivalent of your local currency."})}),"\n",(0,o.jsx)(n.h2,{id:"adding-your-komga-server-to-chunky",children:"Adding your Komga server to Chunky"}),"\n",(0,o.jsxs)(n.p,{children:["First you need to make sure that you can browse to your komga server's web UI from Safari on your iPad. Open up Safari, navigate to your server's address and log in as normal. Next, open the address bar, delete ",(0,o.jsx)(n.code,{children:"/dashboard"})," part which is added automatically when you log in, and then append ",(0,o.jsx)(n.code,{children:"/opds/v1.2/catalog"})," to the end of the URL and press return."]}),"\n",(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/safari-check1.png"}),"\n",(0,o.jsx)(n.p,{children:"You should then see a screen like the below image, if you do, you're ready to proceed with configuring Chunky Reader. You may wish to copy the URL to your iPad clipboard for pasting later."}),"\n",(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/safari-check2.png"}),"\n",(0,o.jsx)(n.p,{children:"Open Chunky Reader and click the cloud icon, circled in red in the screenshot below."}),"\n",(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/cloud-symbol.png"}),"\n",(0,o.jsx)(n.p,{children:"In the pop up window, click the plus button, circled in red in the screenshot below."}),"\n",(0,o.jsx)("div",{class:"text--center",children:(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/plus-button.png",width:"300"})}),"\n",(0,o.jsx)(n.p,{children:'Now choose the green plus button next to "Calibre/Ubooquity/OPDS".'}),"\n",(0,o.jsx)("div",{class:"text--center",children:(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/opds-option.png",width:"300"})}),"\n",(0,o.jsxs)(n.p,{children:["In this dialogue box, enter your ",(0,o.jsx)(n.em,{children:"server address"})," (paste from the earlier step if you copied it to clipboard), ",(0,o.jsx)(n.em,{children:"username"}),", and ",(0,o.jsx)(n.em,{children:"password"}),". Then click ",(0,o.jsx)(n.em,{children:"Connect"}),". Your Komga server should now appear in the cloud icon menu. You can stream comics by navigating to them and tapping the name, or download them via clicking the blue download button next to a comic. You can download all the comics in a given view by tapping the ",(0,o.jsx)(n.em,{children:"All"})," button in the bottom right of the menu."]}),"\n",(0,o.jsx)("div",{class:"text--center",children:(0,o.jsx)("img",{src:"/assets/media/guides/chunky-setup/list-view.png",width:"300"})}),"\n",(0,o.jsx)(n.h2,{id:"limitations",children:"Limitations"}),"\n",(0,o.jsxs)(n.p,{children:["Reading comics via Chunky Reader ",(0,o.jsx)(n.strong,{children:"does not"})," update the read progress. This means you will need to manually mark your comics as read via the web UI."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},3023:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var o=t(3696);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1c21263c.7778a7ee.js b/assets/js/1c21263c.7778a7ee.js new file mode 100644 index 00000000..ca6fe510 --- /dev/null +++ b/assets/js/1c21263c.7778a7ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6542],{2351:t=>{t.exports=JSON.parse('{"title":"Installation","slug":"/category/installation","permalink":"/docs/category/installation","navigation":{"previous":{"title":"Introduction","permalink":"/docs/introduction"},"next":{"title":"Official methods","permalink":"/docs/category/official-methods"}}}')}}]); \ No newline at end of file diff --git a/assets/js/1c21263c.e1663bec.js b/assets/js/1c21263c.e1663bec.js deleted file mode 100644 index 5f29dbe9..00000000 --- a/assets/js/1c21263c.e1663bec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[563],{9287:t=>{t.exports=JSON.parse('{"title":"Installation","slug":"/category/installation","permalink":"/docs/category/installation","navigation":{"previous":{"title":"Introduction","permalink":"/docs/introduction"},"next":{"title":"Official methods","permalink":"/docs/category/official-methods"}}}')}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.1c121aff.js b/assets/js/1df93b7f.1c121aff.js deleted file mode 100644 index 6a989377..00000000 --- a/assets/js/1df93b7f.1c121aff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3237],{3513:(e,s,n)=>{n.r(s),n.d(s,{default:()=>g});n(7378);var t=n(624),r=n(6641),i=n(353),a=n(4514);const c={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var o=n(4246);const l=[{title:"Organize",description:(0,o.jsx)(o.Fragment,{children:"Organize your CBZ, CBR, PDF and EPUB files in different libraries, collections or reading lists."})},{title:"Read",description:(0,o.jsx)(o.Fragment,{children:"Use the integrated Webreader, the Tachiyomi extension, any OPDS reader, or other integrations."})},{title:"Manage",description:(0,o.jsx)(o.Fragment,{children:"Edit metadata for your series and books."})}];function d(e){let{title:s,Svg:n,description:r}=e;return(0,o.jsx)("div",{className:(0,t.Z)("col col--4"),children:(0,o.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,o.jsx)("h3",{children:s}),(0,o.jsx)("p",{children:r})]})})}function h(){return(0,o.jsx)("section",{className:c.features,children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:l.map(((e,s)=>(0,o.jsx)(d,{...e},s)))})})})}const m={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function u(){const{siteConfig:e}=(0,i.Z)();return(0,o.jsx)("header",{className:(0,t.Z)("hero",m.heroBanner),children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)("img",{src:"img/logo.svg",width:"300px"}),(0,o.jsx)("h1",{className:"hero__title",children:e.title}),(0,o.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,o.jsxs)("div",{className:m.buttons,children:[(0,o.jsx)(r.Z,{className:"button button--primary button--lg margin--sm",to:"/docs/introduction",children:"Get Started"}),(0,o.jsx)(r.Z,{className:"button button--primary button--lg margin--sm",to:"/blog",children:"Announcements"})]})]})})}function g(){const{siteConfig:e}=(0,i.Z)();return(0,o.jsxs)(a.Z,{title:"Free and open source comics/mangas media server",description:"Free and open source comics/mangas media server",children:[(0,o.jsx)(u,{}),(0,o.jsx)("main",{children:(0,o.jsx)(h,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.9562306d.js b/assets/js/1df93b7f.9562306d.js new file mode 100644 index 00000000..b606b335 --- /dev/null +++ b/assets/js/1df93b7f.9562306d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4583],{3693:(e,s,n)=>{n.r(s),n.d(s,{default:()=>g});n(3696);var t=n(1750),r=n(3587),i=n(7032),a=n(2213);const c={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var o=n(2540);const l=[{title:"Organize",description:(0,o.jsx)(o.Fragment,{children:"Organize your CBZ, CBR, PDF and EPUB files in different libraries, collections or reading lists."})},{title:"Read",description:(0,o.jsx)(o.Fragment,{children:"Use the integrated Webreader, the Tachiyomi extension, any OPDS reader, or other integrations."})},{title:"Manage",description:(0,o.jsx)(o.Fragment,{children:"Edit metadata for your series and books."})}];function d(e){let{title:s,Svg:n,description:r}=e;return(0,o.jsx)("div",{className:(0,t.A)("col col--4"),children:(0,o.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,o.jsx)("h3",{children:s}),(0,o.jsx)("p",{children:r})]})})}function h(){return(0,o.jsx)("section",{className:c.features,children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:l.map(((e,s)=>(0,o.jsx)(d,{...e},s)))})})})}const m={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function u(){const{siteConfig:e}=(0,i.A)();return(0,o.jsx)("header",{className:(0,t.A)("hero",m.heroBanner),children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)("img",{src:"img/logo.svg",width:"300px"}),(0,o.jsx)("h1",{className:"hero__title",children:e.title}),(0,o.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,o.jsxs)("div",{className:m.buttons,children:[(0,o.jsx)(r.A,{className:"button button--primary button--lg margin--sm",to:"/docs/introduction",children:"Get Started"}),(0,o.jsx)(r.A,{className:"button button--primary button--lg margin--sm",to:"/blog",children:"Announcements"})]})]})})}function g(){const{siteConfig:e}=(0,i.A)();return(0,o.jsxs)(a.A,{title:"Free and open source comics/mangas media server",description:"Free and open source comics/mangas media server",children:[(0,o.jsx)(u,{}),(0,o.jsx)("main",{children:(0,o.jsx)(h,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/1ec3b236.eee8cffa.js b/assets/js/1ec3b236.1ba91bc8.js similarity index 79% rename from assets/js/1ec3b236.eee8cffa.js rename to assets/js/1ec3b236.1ba91bc8.js index 7afa2e8b..68ce9529 100644 --- a/assets/js/1ec3b236.eee8cffa.js +++ b/assets/js/1ec3b236.1ba91bc8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7021],{5138:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=n(4246),o=n(1670);const t={},i="Command Line Interface",a={id:"guides/cli",title:"Command Line Interface",description:"Komga offers a few commands available from the command line.",source:"@site/docs/guides/cli.md",sourceDirName:"guides",slug:"/guides/cli",permalink:"/docs/guides/cli",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cli.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Announcements",permalink:"/docs/guides/announcements"},next:{title:"Contribution",permalink:"/docs/contribution"}},d={},l=[{value:"How to use?",id:"how-to-use",level:2},{value:"With the jar
file",id:"with-the-jar-file",level:3},{value:"With docker run",id:"with-docker-run",level:3},{value:"With docker-compose",id:"with-docker-compose",level:3},{value:"Available commands",id:"available-commands",level:2},{value:"List users",id:"list-users",level:3},{value:"Reset password for a user",id:"reset-password-for-a-user",level:3}];function c(e){const s={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"command-line-interface",children:"Command Line Interface"}),"\n",(0,r.jsx)(s.p,{children:"Komga offers a few commands available from the command line."}),"\n",(0,r.jsx)(s.h2,{id:"how-to-use",children:"How to use?"}),"\n",(0,r.jsx)(s.p,{children:"You just need to append the command to the command line. Note that Komga will still start and run as usual."}),"\n",(0,r.jsxs)(s.h3,{id:"with-the-jar-file",children:["With the ",(0,r.jsx)(s.code,{children:"jar"})," file"]}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"java -jar komga-x.y.z.jar --list-users\n"})}),"\n",(0,r.jsx)(s.h3,{id:"with-docker-run",children:"With docker run"}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"docker run ghcr.io/gotson/komga:latest --list-users\n"})}),"\n",(0,r.jsx)(s.h3,{id:"with-docker-compose",children:"With docker-compose"}),"\n",(0,r.jsxs)(s.p,{children:["You can override the ",(0,r.jsx)(s.code,{children:"command"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"services:\n komga:\n image: gotson/komga:latest\n command: --newpassword=toto --reset=admin@example.org\n"})}),"\n",(0,r.jsx)(s.h2,{id:"available-commands",children:"Available commands"}),"\n",(0,r.jsx)(s.h3,{id:"list-users",children:"List users"}),"\n",(0,r.jsxs)(s.p,{children:["Command: ",(0,r.jsx)(s.code,{children:"--list-users"})]}),"\n",(0,r.jsx)(s.p,{children:"This will output all the users configured in the database. The output will be shown in the console or the logs."}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"2023-08-02T13:41:45.215+08:00 INFO 1979 --- [ main] o.g.k.i.apprunner.ListUsersRunner : Here is a list of all users: [admin@example.org, jacky@example.org]"})}),"\n",(0,r.jsx)(s.h3,{id:"reset-password-for-a-user",children:"Reset password for a user"}),"\n",(0,r.jsxs)(s.p,{children:["Command: ",(0,r.jsx)(s.code,{children:"--reset=user@domain.com --newpassword=YourNewPassword"})]}),"\n",(0,r.jsx)(s.p,{children:"This will reset the password for the specified user."}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"2023-08-02T13:50:42.998+08:00 INFO 2806 --- [ main] o.g.k.i.apprunner.PasswordResetRunner : Reset password for user: admin@example.org"})})]})}function h(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1670:(e,s,n)=>{n.d(s,{Z:()=>a,a:()=>i});var r=n(7378);const o={},t=r.createContext(o);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[832],{1696:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=n(2540),o=n(3023);const t={},i="Command Line Interface",a={id:"guides/cli",title:"Command Line Interface",description:"Komga offers a few commands available from the command line.",source:"@site/docs/guides/cli.md",sourceDirName:"guides",slug:"/guides/cli",permalink:"/docs/guides/cli",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cli.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Announcements",permalink:"/docs/guides/announcements"},next:{title:"Contribution",permalink:"/docs/contribution"}},d={},l=[{value:"How to use?",id:"how-to-use",level:2},{value:"With thejar
file",id:"with-the-jar-file",level:3},{value:"With docker run",id:"with-docker-run",level:3},{value:"With docker-compose",id:"with-docker-compose",level:3},{value:"Available commands",id:"available-commands",level:2},{value:"List users",id:"list-users",level:3},{value:"Reset password for a user",id:"reset-password-for-a-user",level:3}];function c(e){const s={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"command-line-interface",children:"Command Line Interface"}),"\n",(0,r.jsx)(s.p,{children:"Komga offers a few commands available from the command line."}),"\n",(0,r.jsx)(s.h2,{id:"how-to-use",children:"How to use?"}),"\n",(0,r.jsx)(s.p,{children:"You just need to append the command to the command line. Note that Komga will still start and run as usual."}),"\n",(0,r.jsxs)(s.h3,{id:"with-the-jar-file",children:["With the ",(0,r.jsx)(s.code,{children:"jar"})," file"]}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"java -jar komga-x.y.z.jar --list-users\n"})}),"\n",(0,r.jsx)(s.h3,{id:"with-docker-run",children:"With docker run"}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-shell",children:"docker run ghcr.io/gotson/komga:latest --list-users\n"})}),"\n",(0,r.jsx)(s.h3,{id:"with-docker-compose",children:"With docker-compose"}),"\n",(0,r.jsxs)(s.p,{children:["You can override the ",(0,r.jsx)(s.code,{children:"command"}),":"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"services:\n komga:\n image: gotson/komga:latest\n command: --newpassword=toto --reset=admin@example.org\n"})}),"\n",(0,r.jsx)(s.h2,{id:"available-commands",children:"Available commands"}),"\n",(0,r.jsx)(s.h3,{id:"list-users",children:"List users"}),"\n",(0,r.jsxs)(s.p,{children:["Command: ",(0,r.jsx)(s.code,{children:"--list-users"})]}),"\n",(0,r.jsx)(s.p,{children:"This will output all the users configured in the database. The output will be shown in the console or the logs."}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"2023-08-02T13:41:45.215+08:00 INFO 1979 --- [ main] o.g.k.i.apprunner.ListUsersRunner : Here is a list of all users: [admin@example.org, jacky@example.org]"})}),"\n",(0,r.jsx)(s.h3,{id:"reset-password-for-a-user",children:"Reset password for a user"}),"\n",(0,r.jsxs)(s.p,{children:["Command: ",(0,r.jsx)(s.code,{children:"--reset=user@domain.com --newpassword=YourNewPassword"})]}),"\n",(0,r.jsx)(s.p,{children:"This will reset the password for the specified user."}),"\n",(0,r.jsx)(s.p,{children:"Example:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"2023-08-02T13:50:42.998+08:00 INFO 2806 --- [ main] o.g.k.i.apprunner.PasswordResetRunner : Reset password for user: admin@example.org"})})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},3023:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>a});var r=n(3696);const o={},t=r.createContext(o);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/206b31bb.29daa73d.js b/assets/js/206b31bb.29daa73d.js deleted file mode 100644 index 9bff346b..00000000 --- a/assets/js/206b31bb.29daa73d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1778],{1539:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var i=s(4246),t=s(1670);const o={},r="One-Shots",l={id:"guides/oneshots",title:"One-Shots",description:"What are One-Shots?",source:"@site/docs/guides/oneshots.md",sourceDirName:"guides",slug:"/guides/oneshots",permalink:"/docs/guides/oneshots",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/oneshots.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Image Types",permalink:"/docs/guides/image-formats"},next:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"}},d={},h=[{value:"What are One-Shots?",id:"what-are-one-shots",level:2},{value:"One-Shots handling",id:"one-shots-handling",level:2},{value:"Configuration",id:"configuration",level:3},{value:"Processing",id:"processing",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Dashboard",id:"dashboard",level:3},{value:"REST API",id:"rest-api",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"one-shots",children:"One-Shots"}),"\n",(0,i.jsx)(n.h2,{id:"what-are-one-shots",children:"What are One-Shots?"}),"\n",(0,i.jsx)(n.p,{children:"One-Shots are series containing a single book."}),"\n",(0,i.jsx)(n.p,{children:"However not all series containing a single book are One-Shots. Here are some example of single book series that are not One-Shots:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"a series that has multiple books published, but only a single book is collected in Komga"}),"\n",(0,i.jsx)(n.li,{children:"a series that currently has only 1 book published, but will have more in the future"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Historically Komga required each series to be in its own directory on disk. This was cumbersome for One-Shots, as each book needed to be placed in a dedicated directory."}),"\n",(0,i.jsx)(n.p,{children:"With One-Shots handling, this is not necessary anymore."}),"\n",(0,i.jsx)(n.p,{children:"One-Shots are still composed of a series with a single book, but are handled slightly differently."}),"\n",(0,i.jsx)(n.h2,{id:"one-shots-handling",children:"One-Shots handling"}),"\n",(0,i.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["You can enable One-Shots handling through ",(0,i.jsx)(n.a,{href:"/docs/guides/libraries#one-shots-directory",children:"Library options"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"processing",children:"Processing"}),"\n",(0,i.jsxs)(n.p,{children:["One-Shots are detected during the scan. Any directory for which the full path contains the configured ",(0,i.jsx)(n.em,{children:"One-Shots directory"})," will generate One-Shot series instead of standard Series."]}),"\n",(0,i.jsxs)(n.p,{children:["Given the following directory structure, with ",(0,i.jsx)(n.em,{children:"One-Shots directory"})," configured to ",(0,i.jsx)(n.code,{children:"_oneshots"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"/data/books/Comics\n\u251c\u2500\u2500 Space Adventures\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_002.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_003.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 _oneshots\n\u2502\xa0\xa0 \u2514\u2500\u2500 Pluto Adventures.cbz\n\u251c\u2500\u2500 Super Duck\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_002.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 Super_Duck_003.cbz\n\u2514\u2500\u2500 _oneshots\n \u251c\u2500\u2500 A oneshot.cbz\n \u251c\u2500\u2500 Another oneshot.cbz\n \u2514\u2500\u2500 Yet another oneshot.cbz\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will result in:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["2 regular series:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Space Adventures"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Super Duck"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["4 One-Shots:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Pluto Adventures"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"A oneshot"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Another oneshot"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Yet another oneshot"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"One-Shots directory"})," is checked against ",(0,i.jsx)(n.strong,{children:"any part of the directory path"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"_oneshots"})," will match on:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"/data/books/Comics/_oneshots"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"/data/books/Comics/My weirdly named _oneshots"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["To match only directories starting with the provided string, prefix ",(0,i.jsx)(n.em,{children:"One-Shots directory"})," with ",(0,i.jsx)(n.code,{children:"/"}),", like ",(0,i.jsx)(n.code,{children:"/_oneshots"})]})}),"\n",(0,i.jsx)(n.h3,{id:"metadata",children:"Metadata"}),"\n",(0,i.jsx)(n.p,{children:"While the book metadata will be processed as usual, the series metadata for One-Shots will be handled slightly differently:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["the Mylar ",(0,i.jsx)(n.code,{children:"series.json"})," is ignored"]}),"\n",(0,i.jsx)(n.li,{children:"the local artwork is ignored. The one for the book is still processed as usual."}),"\n",(0,i.jsxs)(n.li,{children:["in addition, some metadata is set:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"the series title and summary are set from the one of the book"}),"\n",(0,i.jsxs)(n.li,{children:["the series status is set to ",(0,i.jsx)(n.em,{children:"Ended"})]}),"\n",(0,i.jsx)(n.li,{children:"the series total book count is set to 1"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"dashboard",children:"Dashboard"}),"\n",(0,i.jsx)(n.p,{children:"The Dashboard has specific handling for One-Shots:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"One-Shots are displayed in a new view that shows both series and book metadata fields"}),"\n",(0,i.jsxs)(n.li,{children:["when editing One-Shots metadata, a new dialog will allow to edit both book and series level metadata fields.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"If you edit multiple items and all are One-Shots, this dialog is also used."}),"\n",(0,i.jsx)(n.li,{children:"If there is a mix of One-Shots and normal items (series or books), the regular dialog will be used instead.s"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"One-Shots can be added to both collections and readlists"}),"\n",(0,i.jsxs)(n.li,{children:["One-Shots will not show in the ",(0,i.jsx)(n.em,{children:"Recently Added Series"})," or ",(0,i.jsx)(n.em,{children:"Recently Updated Series"})," sections, but they will show in ",(0,i.jsx)(n.em,{children:"Recently Added Books"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Item card in Series views (when browsing libraries or collections):","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"will show an unread indicator in the top-right corner, instead of the number of unread books"}),"\n",(0,i.jsxs)(n.li,{children:["will display ",(0,i.jsx)(n.em,{children:"One-shot"})," at the bottom of the card instead of the number of books"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Item card in Book views (when browsing readlists or recommended) will not display the Series name nor the book number"}),"\n",(0,i.jsxs)(n.li,{children:["the Series filter panel has a ",(0,i.jsx)(n.em,{children:"One-shot"})," filter"]}),"\n",(0,i.jsx)(n.li,{children:"One-Shots will not show in the Series picker dialog when importing books"}),"\n",(0,i.jsx)(n.li,{children:"One-Shots will show only as books in the search bar and detailed search view"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"rest-api",children:"REST API"}),"\n",(0,i.jsxs)(n.p,{children:["One-Shots are still composed of a Series with a single Book, however both have a new ",(0,i.jsx)(n.code,{children:"boolean"})," attribute ",(0,i.jsx)(n.code,{children:"oneshot"})," which can be used in client applications to handle One-Shots differently."]})]})}function c(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1670:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>r});var i=s(7378);const t={},o=i.createContext(t);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/206b31bb.616092fa.js b/assets/js/206b31bb.616092fa.js new file mode 100644 index 00000000..9d846b4b --- /dev/null +++ b/assets/js/206b31bb.616092fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6897],{6638:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>h});var i=s(2540),t=s(3023);const o={},r="One-Shots",l={id:"guides/oneshots",title:"One-Shots",description:"What are One-Shots?",source:"@site/docs/guides/oneshots.md",sourceDirName:"guides",slug:"/guides/oneshots",permalink:"/docs/guides/oneshots",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/oneshots.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Image Types",permalink:"/docs/guides/image-formats"},next:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"}},d={},h=[{value:"What are One-Shots?",id:"what-are-one-shots",level:2},{value:"One-Shots handling",id:"one-shots-handling",level:2},{value:"Configuration",id:"configuration",level:3},{value:"Processing",id:"processing",level:3},{value:"Metadata",id:"metadata",level:3},{value:"Dashboard",id:"dashboard",level:3},{value:"REST API",id:"rest-api",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"one-shots",children:"One-Shots"}),"\n",(0,i.jsx)(n.h2,{id:"what-are-one-shots",children:"What are One-Shots?"}),"\n",(0,i.jsx)(n.p,{children:"One-Shots are series containing a single book."}),"\n",(0,i.jsx)(n.p,{children:"However not all series containing a single book are One-Shots. Here are some example of single book series that are not One-Shots:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"a series that has multiple books published, but only a single book is collected in Komga"}),"\n",(0,i.jsx)(n.li,{children:"a series that currently has only 1 book published, but will have more in the future"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Historically Komga required each series to be in its own directory on disk. This was cumbersome for One-Shots, as each book needed to be placed in a dedicated directory."}),"\n",(0,i.jsx)(n.p,{children:"With One-Shots handling, this is not necessary anymore."}),"\n",(0,i.jsx)(n.p,{children:"One-Shots are still composed of a series with a single book, but are handled slightly differently."}),"\n",(0,i.jsx)(n.h2,{id:"one-shots-handling",children:"One-Shots handling"}),"\n",(0,i.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["You can enable One-Shots handling through ",(0,i.jsx)(n.a,{href:"/docs/guides/libraries#one-shots-directory",children:"Library options"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"processing",children:"Processing"}),"\n",(0,i.jsxs)(n.p,{children:["One-Shots are detected during the scan. Any directory for which the full path contains the configured ",(0,i.jsx)(n.em,{children:"One-Shots directory"})," will generate One-Shot series instead of standard Series."]}),"\n",(0,i.jsxs)(n.p,{children:["Given the following directory structure, with ",(0,i.jsx)(n.em,{children:"One-Shots directory"})," configured to ",(0,i.jsx)(n.code,{children:"_oneshots"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"/data/books/Comics\n\u251c\u2500\u2500 Space Adventures\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_002.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Space_Adventures_003.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 _oneshots\n\u2502\xa0\xa0 \u2514\u2500\u2500 Pluto Adventures.cbz\n\u251c\u2500\u2500 Super Duck\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_001.cbz\n\u2502\xa0\xa0 \u251c\u2500\u2500 Super_Duck_002.cbz\n\u2502\xa0\xa0 \u2514\u2500\u2500 Super_Duck_003.cbz\n\u2514\u2500\u2500 _oneshots\n \u251c\u2500\u2500 A oneshot.cbz\n \u251c\u2500\u2500 Another oneshot.cbz\n \u2514\u2500\u2500 Yet another oneshot.cbz\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will result in:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["2 regular series:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Space Adventures"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Super Duck"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["4 One-Shots:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Pluto Adventures"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"A oneshot"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Another oneshot"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.em,{children:"Yet another oneshot"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"One-Shots directory"})," is checked against ",(0,i.jsx)(n.strong,{children:"any part of the directory path"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"_oneshots"})," will match on:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"/data/books/Comics/_oneshots"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"/data/books/Comics/My weirdly named _oneshots"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["To match only directories starting with the provided string, prefix ",(0,i.jsx)(n.em,{children:"One-Shots directory"})," with ",(0,i.jsx)(n.code,{children:"/"}),", like ",(0,i.jsx)(n.code,{children:"/_oneshots"})]})}),"\n",(0,i.jsx)(n.h3,{id:"metadata",children:"Metadata"}),"\n",(0,i.jsx)(n.p,{children:"While the book metadata will be processed as usual, the series metadata for One-Shots will be handled slightly differently:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["the Mylar ",(0,i.jsx)(n.code,{children:"series.json"})," is ignored"]}),"\n",(0,i.jsx)(n.li,{children:"the local artwork is ignored. The one for the book is still processed as usual."}),"\n",(0,i.jsxs)(n.li,{children:["in addition, some metadata is set:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"the series title and summary are set from the one of the book"}),"\n",(0,i.jsxs)(n.li,{children:["the series status is set to ",(0,i.jsx)(n.em,{children:"Ended"})]}),"\n",(0,i.jsx)(n.li,{children:"the series total book count is set to 1"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"dashboard",children:"Dashboard"}),"\n",(0,i.jsx)(n.p,{children:"The Dashboard has specific handling for One-Shots:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"One-Shots are displayed in a new view that shows both series and book metadata fields"}),"\n",(0,i.jsxs)(n.li,{children:["when editing One-Shots metadata, a new dialog will allow to edit both book and series level metadata fields.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"If you edit multiple items and all are One-Shots, this dialog is also used."}),"\n",(0,i.jsx)(n.li,{children:"If there is a mix of One-Shots and normal items (series or books), the regular dialog will be used instead.s"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"One-Shots can be added to both collections and readlists"}),"\n",(0,i.jsxs)(n.li,{children:["One-Shots will not show in the ",(0,i.jsx)(n.em,{children:"Recently Added Series"})," or ",(0,i.jsx)(n.em,{children:"Recently Updated Series"})," sections, but they will show in ",(0,i.jsx)(n.em,{children:"Recently Added Books"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Item card in Series views (when browsing libraries or collections):","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"will show an unread indicator in the top-right corner, instead of the number of unread books"}),"\n",(0,i.jsxs)(n.li,{children:["will display ",(0,i.jsx)(n.em,{children:"One-shot"})," at the bottom of the card instead of the number of books"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Item card in Book views (when browsing readlists or recommended) will not display the Series name nor the book number"}),"\n",(0,i.jsxs)(n.li,{children:["the Series filter panel has a ",(0,i.jsx)(n.em,{children:"One-shot"})," filter"]}),"\n",(0,i.jsx)(n.li,{children:"One-Shots will not show in the Series picker dialog when importing books"}),"\n",(0,i.jsx)(n.li,{children:"One-Shots will show only as books in the search bar and detailed search view"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"rest-api",children:"REST API"}),"\n",(0,i.jsxs)(n.p,{children:["One-Shots are still composed of a Series with a single Book, however both have a new ",(0,i.jsx)(n.code,{children:"boolean"})," attribute ",(0,i.jsx)(n.code,{children:"oneshot"})," which can be used in client applications to handle One-Shots differently."]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},3023:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>l});var i=s(3696);const t={},o=i.createContext(t);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2360.6b99ef8a.js b/assets/js/2360.6b99ef8a.js new file mode 100644 index 00000000..f895a610 --- /dev/null +++ b/assets/js/2360.6b99ef8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2360],{4257:(e,t,s)=>{s.d(t,{A:()=>f});var r=s(3696),a=s(1750),n=s(2213),l=s(2575),i=s(3587),o=s(6590),c=s(9519),m=s(4379);function d(e){const{pathname:t}=(0,c.zy)();return(0,r.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.ys)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_CLW8",sidebarItemTitle:"sidebarItemTitle_DQfJ",sidebarItemList:"sidebarItemList_rvuc",sidebarItem:"sidebarItem__RMN",sidebarItemLink:"sidebarItemLink_Ony9",sidebarItemLinkActive:"sidebarItemLinkActive_MJ75"};var h=s(2540);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,a.A)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.T)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,a.A)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,a.A)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.A,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=s(5454);function x(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.A,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,h.jsx)(p.GX,{component:x,props:e})}function b(e){let{sidebar:t}=e;const s=(0,l.l)();return t?.items.length?"mobile"===s?(0,h.jsx)(j,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function f(e){const{sidebar:t,toc:s,children:r,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.A,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(b,{sidebar:t}),(0,h.jsx)("main",{className:(0,a.A)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"https://schema.org/Blog",children:r}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},5512:(e,t,s)=>{s.d(t,{A:()=>M});s(3696);var r=s(1750),a=s(7069),n=s(883),l=s(2540);function i(e){let{children:t,className:s}=e;const{frontMatter:r,assets:i,metadata:{description:o}}=(0,a.e)(),{withBaseUrl:c}=(0,n.h)(),m=i.image??r.image,d=r.keywords??[];return(0,l.jsxs)("article",{className:s,itemProp:"blogPost",itemScope:!0,itemType:"https://schema.org/BlogPosting",children:[o&&(0,l.jsx)("meta",{itemProp:"description",content:o}),m&&(0,l.jsx)("link",{itemProp:"image",href:c(m,{absolute:!0})}),d.length>0&&(0,l.jsx)("meta",{itemProp:"keywords",content:d.join(",")}),t]})}var o=s(3587);const c={title:"title_Kdtz"};function m(e){let{className:t}=e;const{metadata:s,isBlogPostPage:n}=(0,a.e)(),{permalink:i,title:m}=s,d=n?"h1":"h2";return(0,l.jsx)(d,{className:(0,r.A)(c.title,t),itemProp:"headline",children:n?m:(0,l.jsx)(o.A,{itemProp:"url",to:i,children:m})})}var d=s(6590),u=s(2815);const h={container:"container_iZB2"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,u.W)();return t=>{const s=Math.ceil(t);return e(s,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,l.jsx)(l.Fragment,{children:s(t)})}function p(e){let{date:t,formattedDate:s}=e;return(0,l.jsx)("time",{dateTime:t,itemProp:"datePublished",children:s})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:s}=(0,a.e)(),{date:n,formattedDate:i,readingTime:o}=s;return(0,l.jsxs)("div",{className:(0,r.A)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:n,formattedDate:i}),void 0!==o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:o})]})]})}function b(e){return e.href?(0,l.jsx)(o.A,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function f(e){let{author:t,className:s}=e;const{name:a,title:n,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,l.jsxs)("div",{className:(0,r.A)("avatar margin-bottom--sm",s),children:[o&&(0,l.jsx)(b,{href:m,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:"avatar__photo",src:o,alt:a,itemProp:"image"})}),a&&(0,l.jsxs)("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person",children:[(0,l.jsx)("div",{className:"avatar__name",children:(0,l.jsx)(b,{href:m,itemProp:"url",children:(0,l.jsx)("span",{itemProp:"name",children:a})})}),n&&(0,l.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:n})]})]})}const v={authorCol:"authorCol_v1VX",imageOnlyAuthorRow:"imageOnlyAuthorRow_RxZ1",imageOnlyAuthorCol:"imageOnlyAuthorCol_iWtj"};function P(e){let{className:t}=e;const{metadata:{authors:s},assets:n}=(0,a.e)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,l.jsx)("div",{className:(0,r.A)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,l.jsx)("div",{className:(0,r.A)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(f,{author:{...e,imageURL:n.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(m,{}),(0,l.jsx)(j,{}),(0,l.jsx)(P,{})]})}var A=s(5994),_=s(5079);function k(e){let{children:t,className:s}=e;const{isBlogPostPage:n}=(0,a.e)();return(0,l.jsx)("div",{id:n?A.blogPostContainerID:void 0,className:(0,r.A)("markdown",s),itemProp:"articleBody",children:(0,l.jsx)(_.A,{children:t})})}var w=s(6061),T=s(1279);function I(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function y(e){const{blogPostTitle:t,...s}=e;return(0,l.jsx)(o.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,l.jsx)(I,{})})}const F={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_JgJa"};function L(){const{metadata:e,isBlogPostPage:t}=(0,a.e)(),{tags:s,title:n,editUrl:i,hasTruncateMarker:o}=e,c=!t&&o,m=s.length>0;return m||c||i?(0,l.jsxs)("footer",{className:(0,r.A)("row docusaurus-mt-lg",t&&F.blogPostFooterDetailsFull),children:[m&&(0,l.jsx)("div",{className:(0,r.A)("col",{"col--9":c}),children:(0,l.jsx)(T.A,{tags:s})}),t&&i&&(0,l.jsx)("div",{className:"col margin-top--sm",children:(0,l.jsx)(w.A,{editUrl:i})}),c&&(0,l.jsx)("div",{className:(0,r.A)("col text--right",{"col--3":m}),children:(0,l.jsx)(y,{blogPostTitle:n,to:e.permalink})})]}):null}function M(e){let{children:t,className:s}=e;const n=function(){const{isBlogPostPage:e}=(0,a.e)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(i,{className:(0,r.A)(n,s),children:[(0,l.jsx)(N,{}),(0,l.jsx)(k,{children:t}),(0,l.jsx)(L,{})]})}},7069:(e,t,s)=>{s.d(t,{e:()=>o,i:()=>i});var r=s(3696),a=s(5198),n=s(2540);const l=r.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:a=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:a});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,r.useContext)(l);if(null===e)throw new a.dV("BlogPostProvider");return e}},2815:(e,t,s)=>{s.d(t,{W:()=>c});var r=s(3696),a=s(7032);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.A)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const r=e.split("|");if(1===r.length)return r[0];r.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const a=s.select(t),n=s.pluralForms.indexOf(a);return r[Math.min(n,r.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/24227623.50dfa1e7.js b/assets/js/24227623.50dfa1e7.js new file mode 100644 index 00000000..7d97c3c3 --- /dev/null +++ b/assets/js/24227623.50dfa1e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7311],{5934:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var a=s(2540),n=s(3023);const i={},o="Read progress",d={id:"guides/read-progress",title:"Read progress",description:"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.",source:"@site/docs/guides/read-progress.md",sourceDirName:"guides",slug:"/guides/read-progress",permalink:"/docs/guides/read-progress",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/read-progress.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Server settings & management",permalink:"/docs/guides/server-settings"},next:{title:"Collections",permalink:"/docs/guides/collections"}},t={},l=[{value:"Supported readers",id:"supported-readers",level:2},{value:"Webreader",id:"webreader",level:3},{value:"Tachiyomi",id:"tachiyomi",level:3},{value:"CDisplayEx",id:"cdisplayex",level:3},{value:"Unread and in progress indicators",id:"unread-and-in-progress-indicators",level:2},{value:"Marking progress manually",id:"marking-progress-manually",level:2}];function c(e){const r={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.h1,{id:"read-progress",children:"Read progress"}),"\n",(0,a.jsx)(r.p,{children:"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately."}),"\n",(0,a.jsx)(r.h2,{id:"supported-readers",children:"Supported readers"}),"\n",(0,a.jsx)(r.h3,{id:"webreader",children:"Webreader"}),"\n",(0,a.jsx)(r.p,{children:"The webreader can track the progress as you read:"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"when you open a book that is in progress, the webreader will resume reading where you left it."}),"\n",(0,a.jsx)(r.li,{children:"when you finish reading a book, the webreader will mark it as read."}),"\n"]}),"\n",(0,a.jsx)(r.h3,{id:"tachiyomi",children:"Tachiyomi"}),"\n",(0,a.jsxs)(r.p,{children:["Tachiyomi can track progress of read books, using the Komga tracker. See ",(0,a.jsx)(r.a,{href:"/docs/guides/tachiyomi#track-read-progress",children:"here"})," for more details."]}),"\n",(0,a.jsx)(r.h3,{id:"cdisplayex",children:"CDisplayEx"}),"\n",(0,a.jsxs)(r.p,{children:["CDisplayEx syncs read status and reading progress, See ",(0,a.jsx)(r.a,{href:"/docs/guides/cdisplayex#reading-status",children:"here"}),"."]}),"\n",(0,a.jsx)(r.h2,{id:"unread-and-in-progress-indicators",children:"Unread and in progress indicators"}),"\n",(0,a.jsx)(r.p,{children:"The book card will display read progress indicators:"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"Unread books will display an orange tick in the top right corner:"}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/read-progress/book-card-unread.png",style:{maxHeight:"300px"},alt:"Book card showing unread indicator"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"In progress books will display a progress bar at the bottom of the thumbnail:"}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/read-progress/book-card-inprogress.png",style:{maxHeight:"300px"},alt:"Book card showing reading progress"}),"\n",(0,a.jsx)(r.p,{children:"In addition, the series card will display the number of unread books in the top right corner:"}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/read-progress/series-card-unread-count.png",style:{maxHeight:"300px"},alt:"Series card showing unread count of books"}),"\n",(0,a.jsx)(r.h2,{id:"marking-progress-manually",children:"Marking progress manually"}),"\n",(0,a.jsxs)(r.p,{children:["You can mark books or series as read or unread manually. Look for the action menu icon ",(0,a.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,a.jsx)(r.em,{children:"Mark as read"})," or ",(0,a.jsx)(r.em,{children:"Mark as unread"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,a.jsx)(r,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},3023:(e,r,s)=>{s.d(r,{R:()=>o,x:()=>d});var a=s(3696);const n={},i=a.createContext(n);function o(e){const r=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),a.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24227623.650430a6.js b/assets/js/24227623.650430a6.js deleted file mode 100644 index cfb3bb71..00000000 --- a/assets/js/24227623.650430a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2854],{2395:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var a=s(4246),n=s(1670);const i={},o="Read progress",d={id:"guides/read-progress",title:"Read progress",description:"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.",source:"@site/docs/guides/read-progress.md",sourceDirName:"guides",slug:"/guides/read-progress",permalink:"/docs/guides/read-progress",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/read-progress.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Server settings & management",permalink:"/docs/guides/server-settings"},next:{title:"Collections",permalink:"/docs/guides/collections"}},t={},l=[{value:"Supported readers",id:"supported-readers",level:2},{value:"Webreader",id:"webreader",level:3},{value:"Tachiyomi",id:"tachiyomi",level:3},{value:"CDisplayEx",id:"cdisplayex",level:3},{value:"Unread and in progress indicators",id:"unread-and-in-progress-indicators",level:2},{value:"Marking progress manually",id:"marking-progress-manually",level:2}];function c(e){const r={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.h1,{id:"read-progress",children:"Read progress"}),"\n",(0,a.jsx)(r.p,{children:"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately."}),"\n",(0,a.jsx)(r.h2,{id:"supported-readers",children:"Supported readers"}),"\n",(0,a.jsx)(r.h3,{id:"webreader",children:"Webreader"}),"\n",(0,a.jsx)(r.p,{children:"The webreader can track the progress as you read:"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"when you open a book that is in progress, the webreader will resume reading where you left it."}),"\n",(0,a.jsx)(r.li,{children:"when you finish reading a book, the webreader will mark it as read."}),"\n"]}),"\n",(0,a.jsx)(r.h3,{id:"tachiyomi",children:"Tachiyomi"}),"\n",(0,a.jsxs)(r.p,{children:["Tachiyomi can track progress of read books, using the Komga tracker. See ",(0,a.jsx)(r.a,{href:"/docs/guides/tachiyomi#track-read-progress",children:"here"})," for more details."]}),"\n",(0,a.jsx)(r.h3,{id:"cdisplayex",children:"CDisplayEx"}),"\n",(0,a.jsxs)(r.p,{children:["CDisplayEx syncs read status and reading progress, See ",(0,a.jsx)(r.a,{href:"/docs/guides/cdisplayex#reading-status",children:"here"}),"."]}),"\n",(0,a.jsx)(r.h2,{id:"unread-and-in-progress-indicators",children:"Unread and in progress indicators"}),"\n",(0,a.jsx)(r.p,{children:"The book card will display read progress indicators:"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"Unread books will display an orange tick in the top right corner:"}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/read-progress/book-card-unread.png",style:{maxHeight:"300px"},alt:"Book card showing unread indicator"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"In progress books will display a progress bar at the bottom of the thumbnail:"}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/read-progress/book-card-inprogress.png",style:{maxHeight:"300px"},alt:"Book card showing reading progress"}),"\n",(0,a.jsx)(r.p,{children:"In addition, the series card will display the number of unread books in the top right corner:"}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/read-progress/series-card-unread-count.png",style:{maxHeight:"300px"},alt:"Series card showing unread count of books"}),"\n",(0,a.jsx)(r.h2,{id:"marking-progress-manually",children:"Marking progress manually"}),"\n",(0,a.jsxs)(r.p,{children:["You can mark books or series as read or unread manually. Look for the action menu icon ",(0,a.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,a.jsx)(r.em,{children:"Mark as read"})," or ",(0,a.jsx)(r.em,{children:"Mark as unread"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,a.jsx)(r,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},1670:(e,r,s)=>{s.d(r,{Z:()=>d,a:()=>o});var a=s(7378);const n={},i=a.createContext(n);function o(e){const r=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),a.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/25088eef.1dab6459.js b/assets/js/25088eef.e005a9c8.js similarity index 77% rename from assets/js/25088eef.1dab6459.js rename to assets/js/25088eef.e005a9c8.js index 7f65d70d..180845d2 100644 --- a/assets/js/25088eef.1dab6459.js +++ b/assets/js/25088eef.e005a9c8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8315],{2233:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/upgrade","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2824],{4160:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/upgrade","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file diff --git a/assets/js/2b8f2de1.2b4b0ab8.js b/assets/js/2b8f2de1.2b4b0ab8.js deleted file mode 100644 index 7d248892..00000000 --- a/assets/js/2b8f2de1.2b4b0ab8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9925],{4003:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>d,metadata:()=>l,toc:()=>c});var r=s(4246),n=s(1670);const d={},i="Read with any OPDS reader",l={id:"guides/opds",title:"Read with any OPDS reader",description:"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.",source:"@site/docs/guides/opds.md",sourceDirName:"guides",slug:"/guides/opds",permalink:"/docs/guides/opds",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/opds.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"},next:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"}},o={},c=[];function a(e){const t={a:"a",code:"code",h1:"h1",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"read-with-any-opds-reader",children:"Read with any OPDS reader"}),"\n",(0,r.jsx)(t.p,{children:"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol."}),"\n",(0,r.jsx)(t.p,{children:"Komga supports OPDS v1 and v2, the URL should be configured accordingly:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["OPDS v1: ",(0,r.jsx)(t.code,{children:"http(s)://your-server(:25600)(/baseUrl)/opds/v1.2/catalog"})]}),"\n",(0,r.jsxs)(t.li,{children:["OPDS v2: ",(0,r.jsx)(t.code,{children:"http(s)://your-server(:25600)(/baseUrl)/opds/v2/catalog"})]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Here is a list of reader applications that have been tested:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"OS"}),(0,r.jsx)(t.th,{children:"App name"}),(0,r.jsx)(t.th,{style:{textAlign:"center"},children:"Status"}),(0,r.jsx)(t.th,{style:{textAlign:"center"},children:"OpenSearch support"}),(0,r.jsx)(t.th,{style:{textAlign:"center"},children:"Page streaming support"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=org.geometerplus.zlibrary.ui.android",children:"FBReader: Favorite Book Reader"})}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:["\u274c"," Can't download CBR/CBZ, only PDF. PDF only supported in Premium version. Does not remember password."]}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=com.flyersoft.moonreader",children:"Moon+ Reader"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=com.foobnix.pdf.reader",children:"Librera"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=com.obreey.reader",children:"PocketBook"})}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:["\u274c"," Doesn't show CBR/CBZ"]}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"iOS"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"http://kybook-reader.com/",children:"KyBook 3"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:(0,r.jsx)(t.strong,{children:"Yes"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"iOS"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://panels.app/",children:"Panels"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,r.jsx)(t.strong,{children:"Yes"})," ",(0,r.jsx)("br",{}),"(v3.0.0+)"]}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,r.jsx)(t.strong,{children:"OPDS PSE 1.0"})," (v2.8.0+)",(0,r.jsx)("br",{}),(0,r.jsx)(t.strong,{children:"OPDS PSE 1.1"})," (v2.9.7+)"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"iPadOS"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://apps.apple.com/us/app/chunky-comic-reader/id663567628",children:"Chunky Comic Reader"})}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:["\u274c"," Does not work anymore with Komga 1.4.0+"]}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:(0,r.jsx)(t.strong,{children:"OPDS PSE 1.0"})})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"The OPDS v1 feed also supports:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["OpenSearch functionality, to search by ",(0,r.jsx)(t.code,{children:"Series"})]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://anansi-project.github.io/docs/opds-pse/intro",children:"OPDS Page Streaming Extension 1.2"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},1670:(e,t,s)=>{s.d(t,{Z:()=>l,a:()=>i});var r=s(7378);const n={},d=r.createContext(n);function i(e){const t=r.useContext(d);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(d.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b8f2de1.3c84ce7d.js b/assets/js/2b8f2de1.3c84ce7d.js new file mode 100644 index 00000000..a8760a90 --- /dev/null +++ b/assets/js/2b8f2de1.3c84ce7d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7769],{3766:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>d,metadata:()=>l,toc:()=>c});var r=s(2540),n=s(3023);const d={},i="Read with any OPDS reader",l={id:"guides/opds",title:"Read with any OPDS reader",description:"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.",source:"@site/docs/guides/opds.md",sourceDirName:"guides",slug:"/guides/opds",permalink:"/docs/guides/opds",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/opds.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"},next:{title:"Read with Panels on iOS",permalink:"/docs/guides/panels"}},o={},c=[];function a(e){const t={a:"a",code:"code",h1:"h1",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"read-with-any-opds-reader",children:"Read with any OPDS reader"}),"\n",(0,r.jsx)(t.p,{children:"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol."}),"\n",(0,r.jsx)(t.p,{children:"Komga supports OPDS v1 and v2, the URL should be configured accordingly:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["OPDS v1: ",(0,r.jsx)(t.code,{children:"http(s)://your-server(:25600)(/baseUrl)/opds/v1.2/catalog"})]}),"\n",(0,r.jsxs)(t.li,{children:["OPDS v2: ",(0,r.jsx)(t.code,{children:"http(s)://your-server(:25600)(/baseUrl)/opds/v2/catalog"})]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Here is a list of reader applications that have been tested:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"OS"}),(0,r.jsx)(t.th,{children:"App name"}),(0,r.jsx)(t.th,{style:{textAlign:"center"},children:"Status"}),(0,r.jsx)(t.th,{style:{textAlign:"center"},children:"OpenSearch support"}),(0,r.jsx)(t.th,{style:{textAlign:"center"},children:"Page streaming support"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=org.geometerplus.zlibrary.ui.android",children:"FBReader: Favorite Book Reader"})}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:["\u274c"," Can't download CBR/CBZ, only PDF. PDF only supported in Premium version. Does not remember password."]}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=com.flyersoft.moonreader",children:"Moon+ Reader"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=com.foobnix.pdf.reader",children:"Librera"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Android"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://play.google.com/store/apps/details?id=com.obreey.reader",children:"PocketBook"})}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:["\u274c"," Doesn't show CBR/CBZ"]}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"iOS"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"http://kybook-reader.com/",children:"KyBook 3"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:(0,r.jsx)(t.strong,{children:"Yes"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"iOS"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://panels.app/",children:"Panels"})}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"\u2714\ufe0f"}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,r.jsx)(t.strong,{children:"Yes"})," ",(0,r.jsx)("br",{}),"(v3.0.0+)"]}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,r.jsx)(t.strong,{children:"OPDS PSE 1.0"})," (v2.8.0+)",(0,r.jsx)("br",{}),(0,r.jsx)(t.strong,{children:"OPDS PSE 1.1"})," (v2.9.7+)"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"iPadOS"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://apps.apple.com/us/app/chunky-comic-reader/id663567628",children:"Chunky Comic Reader"})}),(0,r.jsxs)(t.td,{style:{textAlign:"center"},children:["\u274c"," Does not work anymore with Komga 1.4.0+"]}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:"No"}),(0,r.jsx)(t.td,{style:{textAlign:"center"},children:(0,r.jsx)(t.strong,{children:"OPDS PSE 1.0"})})]})]})]}),"\n",(0,r.jsx)(t.p,{children:"The OPDS v1 feed also supports:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["OpenSearch functionality, to search by ",(0,r.jsx)(t.code,{children:"Series"})]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://anansi-project.github.io/docs/opds-pse/intro",children:"OPDS Page Streaming Extension 1.2"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},3023:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>l});var r=s(3696);const n={},d=r.createContext(n);function i(e){const t=r.useContext(d);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(d.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2fcc23cb.2b67b013.js b/assets/js/2fcc23cb.4f0a2441.js similarity index 64% rename from assets/js/2fcc23cb.2b67b013.js rename to assets/js/2fcc23cb.4f0a2441.js index 501fd6d9..350b0543 100644 --- a/assets/js/2fcc23cb.2b67b013.js +++ b/assets/js/2fcc23cb.4f0a2441.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3307],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2015],{4061:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/30469b70.5541dc82.js b/assets/js/30469b70.93c91dd5.js similarity index 63% rename from assets/js/30469b70.5541dc82.js rename to assets/js/30469b70.93c91dd5.js index c8b55201..21f3b393 100644 --- a/assets/js/30469b70.5541dc82.js +++ b/assets/js/30469b70.93c91dd5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8365],{4469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2148],{2945:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/3431.ea65bc33.js b/assets/js/3431.ea65bc33.js new file mode 100644 index 00000000..b307c5e9 --- /dev/null +++ b/assets/js/3431.ea65bc33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3431],{569:(e,t,i)=>{i.d(t,{A:()=>a});i(3696);var n=i(1750),s=i(6590),o=i(1381),r=i(2540);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,n.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},3431:(e,t,i)=>{i.r(t),i.d(t,{default:()=>l});i(3696);var n=i(6590),s=i(5605),o=i(2213),r=i(569),a=i(2540);function l(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.be,{title:e}),(0,a.jsx)(o.A,{children:(0,a.jsx)(r.A,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/3fda2baf.2558185e.js b/assets/js/3fda2baf.2558185e.js deleted file mode 100644 index c3f98c6a..00000000 --- a/assets/js/3fda2baf.2558185e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7547],{1621:e=>{e.exports=JSON.parse('{"label":"upgrade","permalink":"/blog/tags/upgrade","allTagsPath":"/blog/tags","count":3,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/3fda2baf.d498d205.js b/assets/js/3fda2baf.d498d205.js new file mode 100644 index 00000000..ccdbb972 --- /dev/null +++ b/assets/js/3fda2baf.d498d205.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[40],{7249:e=>{e.exports=JSON.parse('{"label":"upgrade","permalink":"/blog/tags/upgrade","allTagsPath":"/blog/tags","count":3,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/4094.24887df7.js b/assets/js/4094.24887df7.js deleted file mode 100644 index d9a55205..00000000 --- a/assets/js/4094.24887df7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4094],{7853:(e,t,i)=>{i.d(t,{Z:()=>a});i(7378);var n=i(624),s=i(9213),o=i(1999),r=i(4246);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,n.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},4094:(e,t,i)=>{i.r(t),i.d(t,{default:()=>l});i(7378);var n=i(9213),s=i(8831),o=i(4514),r=i(7853),a=i(4246);function l(){const e=(0,n.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.d,{title:e}),(0,a.jsx)(o.Z,{children:(0,a.jsx)(r.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/416fe654.98e505a6.js b/assets/js/416fe654.98e505a6.js deleted file mode 100644 index 73095c57..00000000 --- a/assets/js/416fe654.98e505a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7214],{9438:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(4246),o=n(1670);const i={},r="Contribution",a={id:"contribution",title:"Contribution",description:"Code",source:"@site/docs/contribution.md",sourceDirName:".",slug:"/contribution",permalink:"/docs/contribution",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/contribution.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Command Line Interface",permalink:"/docs/guides/cli"},next:{title:"Community",permalink:"/docs/community"}},l={},c=[{value:"Code",id:"code",level:2},{value:"Application",id:"application",level:3},{value:"Tachiyomi Extension",id:"tachiyomi-extension",level:3},{value:"Website",id:"website",level:3},{value:"Translation",id:"translation",level:2},{value:"Helpful links",id:"helpful-links",level:4},{value:"Project status",id:"project-status",level:4},{value:"Donation",id:"donation",level:2},{value:"Sponsors",id:"sponsors",level:2}];function h(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"contribution",children:"Contribution"}),"\n",(0,s.jsx)(t.h2,{id:"code",children:"Code"}),"\n",(0,s.jsx)(t.p,{children:"Skilled at code? Know how to improve something or you generally want to support the creation of the app?"}),"\n",(0,s.jsx)(t.h3,{id:"application",children:"Application"}),"\n",(0,s.jsxs)(t.p,{children:["The main application: ",(0,s.jsx)(t.a,{href:"https://github.com/gotson/komga",children:"gotson/komga"})," ",(0,s.jsx)(t.img,{src:"https://img.shields.io/github/issues/gotson/komga?style=social",alt:"GitHub issues"})]}),"\n",(0,s.jsx)(t.h3,{id:"tachiyomi-extension",children:"Tachiyomi Extension"}),"\n",(0,s.jsxs)(t.p,{children:["The official Komga extension for Tachiyomi: ",(0,s.jsx)(t.a,{href:"https://github.com/tachiyomiorg/tachiyomi-extensions/tree/master/src/all/komga",children:"tachiyomiorg/tachiyomi-extensions"})]}),"\n",(0,s.jsx)(t.h3,{id:"website",children:"Website"}),"\n",(0,s.jsxs)(t.p,{children:["The repository that hosts this very website you're reading on now: ",(0,s.jsx)(t.a,{href:"https://github.com/gotson/komga-website",children:"gotson/komga-website"})]}),"\n",(0,s.jsx)(t.h2,{id:"translation",children:"Translation"}),"\n",(0,s.jsx)("a",{id:"weblate-status",href:"https://hosted.weblate.org/engage/komga/",children:(0,s.jsx)("img",{src:"https://hosted.weblate.org/widgets/komga/-/svg-badge.svg",alt:"Translation status"})}),"\n",(0,s.jsxs)(t.p,{children:["Want to help translate the app to your language? You can easily help by utilizing a service we use called ",(0,s.jsx)(t.strong,{children:"Weblate"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Visit our translation project ",(0,s.jsx)(t.a,{href:"https://hosted.weblate.org/engage/komga/",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h4,{id:"helpful-links",children:"Helpful links"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.weblate.org/en/latest/user/translating.html",children:"Translators guide"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.weblate.org/en/latest/user/profile.html#secondary-languages",children:"Secondary-languages"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.weblate.org/en/latest/user/profile.html#subscriptions",children:"Subscriptions"})}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"project-status",children:"Project status"}),"\n",(0,s.jsx)("a",{id:"weblate-status",href:"https://hosted.weblate.org/engage/komga/",children:(0,s.jsx)("img",{src:"https://hosted.weblate.org/widgets/komga/-/horizontal-auto.svg",alt:"Translation status"})}),"\n",(0,s.jsx)(t.h2,{id:"donation",children:"Donation"}),"\n",(0,s.jsx)(t.p,{children:"If you can't contribute code, but you still wish to help, then you can choose to contribute financially by using the buttons below, or going directly to any of those platforms:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://opencollective.com/komga",children:"Open Collective"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://ko-fi.com/gotson",children:"Ko-Fi"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/sponsors/gotson",children:"Github Sponsors"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"sponsors",children:"Sponsors"}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsx)("a",{href:"https://www.jetbrains.com/?from=Komga",target:"_blank",rel:"noopener",children:(0,s.jsx)("img",{src:"/assets/media/sponsors/sponsors-jetbrains.png",style:{maxHeight:"100px"}})})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>r});var s=n(7378);const o={},i=s.createContext(o);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/416fe654.dc30cbbe.js b/assets/js/416fe654.dc30cbbe.js new file mode 100644 index 00000000..ea5dd490 --- /dev/null +++ b/assets/js/416fe654.dc30cbbe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5216],{8714:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(2540),o=n(3023);const i={},r="Contribution",a={id:"contribution",title:"Contribution",description:"Code",source:"@site/docs/contribution.md",sourceDirName:".",slug:"/contribution",permalink:"/docs/contribution",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/contribution.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Command Line Interface",permalink:"/docs/guides/cli"},next:{title:"Community",permalink:"/docs/community"}},l={},c=[{value:"Code",id:"code",level:2},{value:"Application",id:"application",level:3},{value:"Tachiyomi Extension",id:"tachiyomi-extension",level:3},{value:"Website",id:"website",level:3},{value:"Translation",id:"translation",level:2},{value:"Helpful links",id:"helpful-links",level:4},{value:"Project status",id:"project-status",level:4},{value:"Donation",id:"donation",level:2},{value:"Sponsors",id:"sponsors",level:2}];function h(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"contribution",children:"Contribution"}),"\n",(0,s.jsx)(t.h2,{id:"code",children:"Code"}),"\n",(0,s.jsx)(t.p,{children:"Skilled at code? Know how to improve something or you generally want to support the creation of the app?"}),"\n",(0,s.jsx)(t.h3,{id:"application",children:"Application"}),"\n",(0,s.jsxs)(t.p,{children:["The main application: ",(0,s.jsx)(t.a,{href:"https://github.com/gotson/komga",children:"gotson/komga"})," ",(0,s.jsx)(t.img,{src:"https://img.shields.io/github/issues/gotson/komga?style=social",alt:"GitHub issues"})]}),"\n",(0,s.jsx)(t.h3,{id:"tachiyomi-extension",children:"Tachiyomi Extension"}),"\n",(0,s.jsxs)(t.p,{children:["The official Komga extension for Tachiyomi: ",(0,s.jsx)(t.a,{href:"https://github.com/tachiyomiorg/tachiyomi-extensions/tree/master/src/all/komga",children:"tachiyomiorg/tachiyomi-extensions"})]}),"\n",(0,s.jsx)(t.h3,{id:"website",children:"Website"}),"\n",(0,s.jsxs)(t.p,{children:["The repository that hosts this very website you're reading on now: ",(0,s.jsx)(t.a,{href:"https://github.com/gotson/komga-website",children:"gotson/komga-website"})]}),"\n",(0,s.jsx)(t.h2,{id:"translation",children:"Translation"}),"\n",(0,s.jsx)("a",{id:"weblate-status",href:"https://hosted.weblate.org/engage/komga/",children:(0,s.jsx)("img",{src:"https://hosted.weblate.org/widgets/komga/-/svg-badge.svg",alt:"Translation status"})}),"\n",(0,s.jsxs)(t.p,{children:["Want to help translate the app to your language? You can easily help by utilizing a service we use called ",(0,s.jsx)(t.strong,{children:"Weblate"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Visit our translation project ",(0,s.jsx)(t.a,{href:"https://hosted.weblate.org/engage/komga/",children:"here"}),"."]}),"\n",(0,s.jsx)(t.h4,{id:"helpful-links",children:"Helpful links"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.weblate.org/en/latest/user/translating.html",children:"Translators guide"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.weblate.org/en/latest/user/profile.html#secondary-languages",children:"Secondary-languages"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.weblate.org/en/latest/user/profile.html#subscriptions",children:"Subscriptions"})}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"project-status",children:"Project status"}),"\n",(0,s.jsx)("a",{id:"weblate-status",href:"https://hosted.weblate.org/engage/komga/",children:(0,s.jsx)("img",{src:"https://hosted.weblate.org/widgets/komga/-/horizontal-auto.svg",alt:"Translation status"})}),"\n",(0,s.jsx)(t.h2,{id:"donation",children:"Donation"}),"\n",(0,s.jsx)(t.p,{children:"If you can't contribute code, but you still wish to help, then you can choose to contribute financially by using the buttons below, or going directly to any of those platforms:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://opencollective.com/komga",children:"Open Collective"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://ko-fi.com/gotson",children:"Ko-Fi"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/sponsors/gotson",children:"Github Sponsors"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"sponsors",children:"Sponsors"}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsx)("a",{href:"https://www.jetbrains.com/?from=Komga",target:"_blank",rel:"noopener",children:(0,s.jsx)("img",{src:"/assets/media/sponsors/sponsors-jetbrains.png",style:{maxHeight:"100px"}})})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},3023:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(3696);const o={},i=s.createContext(o);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4462.6fe1ef75.js b/assets/js/4462.6fe1ef75.js new file mode 100644 index 00000000..9df2113e --- /dev/null +++ b/assets/js/4462.6fe1ef75.js @@ -0,0 +1 @@ +(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4462],{3603:(e,t,n)=>{"use strict";n.d(t,{A:()=>L});var s=n(3696),o=n(2540);function a(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:a.length>0?(0,o.jsx)(o.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a},children:n}}var c=n(1750),i=n(6590),r=n(3237);const l={admonition:"admonition_WCGJ",admonitionHeading:"admonitionHeading_GCBg",admonitionIcon:"admonitionIcon_L39b",admonitionContent:"admonitionContent_pbrs"};function d(e){let{type:t,className:n,children:s}=e;return(0,o.jsx)("div",{className:(0,c.A)(r.G.common.admonition,r.G.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,o.jsxs)("div",{className:l.admonitionHeading,children:[(0,o.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,o.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:a,className:c}=e;return(0,o.jsxs)(d,{type:t,className:c,children:[(0,o.jsx)(u,{title:s,icon:n}),(0,o.jsx)(m,{children:a})]})}function p(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,o.jsx)(p,{}),title:(0,o.jsx)(i.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function g(e){return(0,o.jsx)(h,{...f,...e,className:(0,c.A)("alert alert--secondary",e.className),children:e.children})}function x(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const j={icon:(0,o.jsx)(x,{}),title:(0,o.jsx)(i.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,o.jsx)(h,{...j,...e,className:(0,c.A)("alert alert--success",e.className),children:e.children})}function v(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const N={icon:(0,o.jsx)(v,{}),title:(0,o.jsx)(i.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function k(e){return(0,o.jsx)(h,{...N,...e,className:(0,c.A)("alert alert--info",e.className),children:e.children})}function y(e){return(0,o.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const A={icon:(0,o.jsx)(y,{}),title:(0,o.jsx)(i.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function B(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const C={icon:(0,o.jsx)(B,{}),title:(0,o.jsx)(i.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const w={icon:(0,o.jsx)(y,{}),title:(0,o.jsx)(i.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const E={...{note:g,tip:b,info:k,warning:function(e){return(0,o.jsx)(h,{...A,...e,className:(0,c.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,o.jsx)(h,{...C,...e,className:(0,c.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,o.jsx)(g,{title:"secondary",...e}),important:e=>(0,o.jsx)(k,{title:"important",...e}),success:e=>(0,o.jsx)(b,{title:"success",...e}),caution:function(e){return(0,o.jsx)(h,{...w,...e,className:(0,c.A)("alert alert--warning",e.className),children:e.children})}}};function L(e){const t=a(e),n=(s=t.type,E[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),E.info));var s;return(0,o.jsx)(n,{...t})}},6061:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});n(3696);var s=n(6590),o=n(3237),a=n(3587),c=n(1750);const i={iconEdit:"iconEdit_bHB7"};var r=n(2540);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.A)(i.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(a.A,{to:t,className:o.G.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(s.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}},5079:(e,t,n)=>{"use strict";n.d(t,{A:()=>ie});var s=n(3696),o=n(3023),a=n(7854),c=n(6681),i=n(1750),r=n(2363),l=n(7412);function d(){const{prism:e}=(0,l.p)(),{colorMode:t}=(0,r.G)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(3237),m=n(9934),h=n.n(m);const p=/title=(?["'])(?.*?)\1/,f=/\{(? [\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},x={...g,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},j=Object.keys(g);function b(e,t){const n=e.map((e=>{const{start:n,end:s}=x[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:a}=t;if(a&&f.test(a)){const e=a.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return b(["tex"],t);case"lua":case"haskell":case"sql":return b(["lua"],t);case"wasm":return b(["wasm"],t);case"vb":case"vba":case"visual-basic":return b(["vb","rem"],t);case"vbnet":return b(["vbnet","rem"],t);case"batch":return b(["rem"],t);case"basic":return b(["rem","f90"],t);case"fsharp":return b(["js","ml"],t);case"ocaml":case"sml":return b(["ml"],t);case"fortran":return b(["f90"],t);case"cobol":return b(["cobol"],t);default:return b(j,t)}}(s,o),i=n.split("\n"),r=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const N={codeBlockContainer:"codeBlockContainer_mQmQ"};var k=n(2540);function y(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,o]=e;const a=t[s];a&&"string"==typeof o&&(n[a]=o)})),n}(d());return(0,k.jsx)(t,{...n,style:s,className:(0,i.A)(n.className,N.codeBlockContainer,u.G.common.codeBlock)})}const A={codeBlockContent:"codeBlockContent_D5yF",codeBlockTitle:"codeBlockTitle_x_ju",codeBlock:"codeBlock_RMoD",codeBlockStandalone:"codeBlockStandalone_wQog",codeBlockLines:"codeBlockLines_AclH",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_O625",buttonGroup:"buttonGroup_aaMX"};function B(e){let{children:t,className:n}=e;return(0,k.jsx)(y,{as:"pre",tabIndex:0,className:(0,i.A)(A.codeBlockStandalone,"thin-scrollbar",n),children:(0,k.jsx)("code",{className:A.codeBlockLines,children:t})})}var C=n(5198);const w={attributes:!0,characterData:!0,childList:!0,subtree:!0};function E(e,t){const[n,o]=(0,s.useState)(),a=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=w);const o=(0,C._q)(t),a=(0,C.Be)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,a),()=>t.disconnect()}),[e,o,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var L=n(7663);const _={codeLine:"codeLine_FAqz",codeLineNumber:"codeLineNumber_BE9Z",codeLineContent:"codeLineContent_EF2y"};function T(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=o({line:t,className:(0,i.A)(n,s&&_.codeLine)}),r=t.map(((e,t)=>(0,k.jsx)("span",{...a({token:e,key:t})},t)));return(0,k.jsxs)("span",{...c,children:[s?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)("span",{className:_.codeLineNumber}),(0,k.jsx)("span",{className:_.codeLineContent,children:r})]}):r,(0,k.jsx)("br",{})]})}var z=n(6590);function S(e){return(0,k.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,k.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function M(e){return(0,k.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,k.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const H={copyButtonCopied:"copyButtonCopied_TYdd",copyButtonIcons:"copyButtonIcons_z5j7",copyButtonIcon:"copyButtonIcon_FoOz",copyButtonSuccessIcon:"copyButtonSuccessIcon_L0B6"};function I(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),o=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const a=document.getSelection(),c=a.rangeCount>0&&a.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),c&&(a.removeAllRanges(),a.addRange(c)),o&&o.focus()}(t),a(!0),c.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,k.jsx)("button",{type:"button","aria-label":o?(0,z.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,z.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,z.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.A)("clean-btn",n,H.copyButton,o&&H.copyButtonCopied),onClick:r,children:(0,k.jsxs)("span",{className:H.copyButtonIcons,"aria-hidden":"true",children:[(0,k.jsx)(S,{className:H.copyButtonIcon}),(0,k.jsx)(M,{className:H.copyButtonSuccessIcon})]})})}function R(e){return(0,k.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,k.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const W={wordWrapButtonIcon:"wordWrapButtonIcon_HV9T",wordWrapButtonEnabled:"wordWrapButtonEnabled_XzR1"};function $(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,z.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,k.jsx)("button",{type:"button",onClick:n,className:(0,i.A)("clean-btn",t,s&&W.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,k.jsx)(R,{className:W.wordWrapButtonIcon,"aria-hidden":"true"})})}function V(e){let{children:t,className:n="",metastring:o,title:a,showLineNumbers:c,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.p)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),a=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");o(n)}),[a]);return E(a,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(o)||a,{lineClassNames:j,code:b}=v(t,{metastring:o,language:h,magicComments:m}),N=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,k.jsxs)(y,{as:"div",className:(0,i.A)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,k.jsx)("div",{className:A.codeBlockTitle,children:x}),(0,k.jsxs)("div",{className:A.codeBlockContent,children:[(0,k.jsx)(L.f4,{theme:f,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:a}=e;return(0,k.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.A)(t,A.codeBlock,"thin-scrollbar"),style:n,children:(0,k.jsx)("code",{className:(0,i.A)(A.codeBlockLines,N&&A.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,k.jsx)(T,{line:e,getLineProps:o,getTokenProps:a,classNames:j[t],showLineNumbers:N},t)))})})}}),(0,k.jsxs)("div",{className:A.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,k.jsx)($,{className:A.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,k.jsx)(I,{className:A.codeButton,code:b})]})]})]})}function D(e){let{children:t,...n}=e;const o=(0,c.A)(),a=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof a?V:B;return(0,k.jsx)(i,{...n,children:a},String(o))}function G(e){return(0,k.jsx)("code",{...e})}var F=n(3587);var O=n(2041),P=n(51);const q={details:"details_IpIu",isBrowser:"isBrowser_QD4r",collapsibleContent:"collapsibleContent_Fd2D"};function Q(e){return!!e&&("SUMMARY"===e.tagName||Q(e.parentElement))}function U(e,t){return!!e&&(e===t||U(e.parentElement,t))}function Z(e){let{summary:t,children:n,...o}=e;(0,O.A)().collectAnchor(o.id);const a=(0,c.A)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,P.u)({initialState:!o.open}),[u,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,k.jsx)("summary",{children:t??"Details"});return(0,k.jsxs)("details",{...o,ref:r,open:u,"data-collapsed":l,className:(0,i.A)(q.details,a&&q.isBrowser,o.className),onMouseDown:e=>{Q(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Q(t)&&U(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,k.jsx)(P.N,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,k.jsx)("div",{className:q.collapsibleContent,children:n})})]})}const X={details:"details_jERq"},Y="alert alert--info";function J(e){let{...t}=e;return(0,k.jsx)(Z,{...t,className:(0,i.A)(Y,X.details,t.className)})}function K(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,k.jsx)(k.Fragment,{children:t.filter((e=>e!==n))});return(0,k.jsx)(J,{...e,summary:n,children:o})}var ee=n(1381);function te(e){return(0,k.jsx)(ee.A,{...e})}const ne={containsTaskList:"containsTaskList_QWGu"};function se(e){if(void 0!==e)return(0,i.A)(e,e?.includes("contains-task-list")&&ne.containsTaskList)}const oe={img:"img_SS3x"};var ae=n(3603);const ce={Head:a.A,details:K,Details:K,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,k.jsx)(G,{...e}):(0,k.jsx)(D,{...e})},a:function(e){return(0,k.jsx)(F.A,{...e})},pre:function(e){return(0,k.jsx)(k.Fragment,{children:e.children})},ul:function(e){return(0,k.jsx)("ul",{...e,className:se(e.className)})},li:function(e){return(0,O.A)().collectAnchor(e.id),(0,k.jsx)("li",{...e})},img:function(e){return(0,k.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,i.A)(t,oe.img))});var t},h1:e=>(0,k.jsx)(te,{as:"h1",...e}),h2:e=>(0,k.jsx)(te,{as:"h2",...e}),h3:e=>(0,k.jsx)(te,{as:"h3",...e}),h4:e=>(0,k.jsx)(te,{as:"h4",...e}),h5:e=>(0,k.jsx)(te,{as:"h5",...e}),h6:e=>(0,k.jsx)(te,{as:"h6",...e}),admonition:ae.A,mermaid:()=>null};function ie(e){let{children:t}=e;return(0,k.jsx)(o.x,{components:ce,children:t})}},5780:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(3696);var s=n(1750),o=n(3587),a=n(2540);function c(e){const{permalink:t,title:n,subLabel:c,isNext:i}=e;return(0,a.jsxs)(o.A,{className:(0,s.A)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}},2515:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(3696);var s=n(1750),o=n(3587);const a={tag:"tag_otG2",tagRegular:"tagRegular_s0E1",tagWithCount:"tagWithCount_PGyn"};var c=n(2540);function i(e){let{permalink:t,label:n,count:i}=e;return(0,c.jsxs)(o.A,{href:t,className:(0,s.A)(a.tag,i?a.tagWithCount:a.tagRegular),children:[n,i&&(0,c.jsx)("span",{children:i})]})}},1279:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});n(3696);var s=n(1750),o=n(6590),a=n(2515);const c={tags:"tags_Ow0B",tag:"tag_DFxh"};var i=n(2540);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(o.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.A)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:c.tag,children:(0,i.jsx)(a.A,{label:t,permalink:n})},n)}))})]})}},9934:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,o,a]=t;if(s&&a){s=parseInt(s),a=parseInt(a);const e=s{"use strict";n.d(t,{R:()=>c,x:()=>i});var s=n(3696);const o={},a=s.createContext(o);function c(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/45fa992b.c838a254.js b/assets/js/45fa992b.717ab7d8.js similarity index 92% rename from assets/js/45fa992b.c838a254.js rename to assets/js/45fa992b.717ab7d8.js index ca2adac0..9254e4e6 100644 --- a/assets/js/45fa992b.c838a254.js +++ b/assets/js/45fa992b.717ab7d8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6155],{3352:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var s=n(4246),t=n(1670);const r={slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-support",source:"@site/blog/2023-11-29-ebooks.md",title:"eBook support",description:"Version 1.8.0 is bringing a long awaited feature: proper eBook support!",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.37,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook drop 2",permalink:"/blog/ebook-drop2"},nextItem:{title:"Prepare for v1.0.0",permalink:"/blog/prepare-v1"}},l={authorsImageUrls:[void 0]},h=[{value:"What you need to know",id:"what-you-need-to-know",level:2},{value:"Other recent changes you may have missed",id:"other-recent-changes-you-may-have-missed",level:2}];function d(e){const o={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.8.0",children:"1.8.0"})," is bringing a long awaited feature: ",(0,s.jsx)(o.strong,{children:"proper eBook support!"})]}),"\n",(0,s.jsxs)(o.p,{children:["Github issue ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/221",children:"#221"})," has been opened for more than 3 years, and has finally been tackled."]}),"\n",(0,s.jsx)(o.h2,{id:"what-you-need-to-know",children:"What you need to know"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"eBooks behave like any other book in Komga, in regards to series or metadata. You can even mix comic books and ebooks in the same series."}),"\n",(0,s.jsx)(o.li,{children:"only EPUB format is supported. Other formats will not be supported in the future."}),"\n",(0,s.jsx)(o.li,{children:"existing EPUB files will be re-analyzed. If you had image-only EPUB, those may not be compatible anymore with third-party clients."}),"\n",(0,s.jsxs)(o.li,{children:["the web EPUB reader is a very first version, and ",(0,s.jsx)(o.strong,{children:"does not support saving progress"}),". Read progress saving and restore will come in a future release."]}),"\n",(0,s.jsxs)(o.li,{children:["any book in Komga can be read with ",(0,s.jsx)(o.a,{href:"https://readium.org/webpub-manifest/",children:"WebPub"})," compatible clients."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"There will be issues"}),". EPUB is a complex format, and many EPUB files are not properly built. Raise issues ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/new/choose",children:"on Github"})," for support."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"other-recent-changes-you-may-have-missed",children:"Other recent changes you may have missed"}),"\n",(0,s.jsx)(o.p,{children:"In case you haven't kept up with the release notes since version 1.0.0, here are the most significant changes:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["Komga is now available as a ",(0,s.jsx)(o.a,{href:"/docs/installation/desktop",children:"desktop app"}),", and is available in the ",(0,s.jsx)(o.a,{href:"/docs/installation/ms-store",children:"Microsoft Store"})]}),"\n",(0,s.jsxs)(o.li,{children:["Multiple settings are now configurable from the ",(0,s.jsx)(o.a,{href:"/docs/guides/server-settings",children:"Server Settings"})," screen. You may need to cleanup your configuration file and remove deprecated entries."]}),"\n",(0,s.jsx)(o.li,{children:"Thumbnails size can now be configured in Server Settings."}),"\n",(0,s.jsx)(o.li,{children:"Background task management has been revamped, and now supports proper parallel executions (configurable in Server Settings)."}),"\n",(0,s.jsxs)(o.li,{children:["Komga now has support for ",(0,s.jsx)(o.a,{href:"/docs/guides/oneshots",children:"One-Shots"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["a ",(0,s.jsx)(o.a,{href:"/docs/guides/cli",children:"Command Line Interface"})," was added to update forgotten password for the admin account."]}),"\n"]})]})}function c(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1670:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>a});var s=n(7378);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3195],{8372:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var s=n(2540),t=n(3023);const r={slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-support",source:"@site/blog/2023-11-29-ebooks.md",title:"eBook support",description:"Version 1.8.0 is bringing a long awaited feature: proper eBook support!",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.37,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook drop 2",permalink:"/blog/ebook-drop2"},nextItem:{title:"Prepare for v1.0.0",permalink:"/blog/prepare-v1"}},l={authorsImageUrls:[void 0]},h=[{value:"What you need to know",id:"what-you-need-to-know",level:2},{value:"Other recent changes you may have missed",id:"other-recent-changes-you-may-have-missed",level:2}];function d(e){const o={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.8.0",children:"1.8.0"})," is bringing a long awaited feature: ",(0,s.jsx)(o.strong,{children:"proper eBook support!"})]}),"\n",(0,s.jsxs)(o.p,{children:["Github issue ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/221",children:"#221"})," has been opened for more than 3 years, and has finally been tackled."]}),"\n",(0,s.jsx)(o.h2,{id:"what-you-need-to-know",children:"What you need to know"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"eBooks behave like any other book in Komga, in regards to series or metadata. You can even mix comic books and ebooks in the same series."}),"\n",(0,s.jsx)(o.li,{children:"only EPUB format is supported. Other formats will not be supported in the future."}),"\n",(0,s.jsx)(o.li,{children:"existing EPUB files will be re-analyzed. If you had image-only EPUB, those may not be compatible anymore with third-party clients."}),"\n",(0,s.jsxs)(o.li,{children:["the web EPUB reader is a very first version, and ",(0,s.jsx)(o.strong,{children:"does not support saving progress"}),". Read progress saving and restore will come in a future release."]}),"\n",(0,s.jsxs)(o.li,{children:["any book in Komga can be read with ",(0,s.jsx)(o.a,{href:"https://readium.org/webpub-manifest/",children:"WebPub"})," compatible clients."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"There will be issues"}),". EPUB is a complex format, and many EPUB files are not properly built. Raise issues ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/new/choose",children:"on Github"})," for support."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"other-recent-changes-you-may-have-missed",children:"Other recent changes you may have missed"}),"\n",(0,s.jsx)(o.p,{children:"In case you haven't kept up with the release notes since version 1.0.0, here are the most significant changes:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["Komga is now available as a ",(0,s.jsx)(o.a,{href:"/docs/installation/desktop",children:"desktop app"}),", and is available in the ",(0,s.jsx)(o.a,{href:"/docs/installation/ms-store",children:"Microsoft Store"})]}),"\n",(0,s.jsxs)(o.li,{children:["Multiple settings are now configurable from the ",(0,s.jsx)(o.a,{href:"/docs/guides/server-settings",children:"Server Settings"})," screen. You may need to cleanup your configuration file and remove deprecated entries."]}),"\n",(0,s.jsx)(o.li,{children:"Thumbnails size can now be configured in Server Settings."}),"\n",(0,s.jsx)(o.li,{children:"Background task management has been revamped, and now supports proper parallel executions (configurable in Server Settings)."}),"\n",(0,s.jsxs)(o.li,{children:["Komga now has support for ",(0,s.jsx)(o.a,{href:"/docs/guides/oneshots",children:"One-Shots"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["a ",(0,s.jsx)(o.a,{href:"/docs/guides/cli",children:"Command Line Interface"})," was added to update forgotten password for the admin account."]}),"\n"]})]})}function c(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},3023:(e,o,n)=>{n.d(o,{R:()=>a,x:()=>i});var s=n(3696);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/49136dfa.6997c181.js b/assets/js/49136dfa.6997c181.js new file mode 100644 index 00000000..54640ab1 --- /dev/null +++ b/assets/js/49136dfa.6997c181.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3259],{6738:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>n,metadata:()=>r,toc:()=>d});var t=o(2540),s=o(3023);const n={},l="Import Books",r={id:"guides/import-books",title:"Import Books",description:"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).",source:"@site/docs/guides/import-books.md",sourceDirName:"guides",slug:"/guides/import-books",permalink:"/docs/guides/import-books",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/import-books.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Full Text Search",permalink:"/docs/guides/search"},next:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"}},a={},d=[{value:"Scan for books",id:"scan-for-books",level:2},{value:"Select destination series",id:"select-destination-series",level:2},{value:"Check book details",id:"check-book-details",level:2},{value:"Finalize the import",id:"finalize-the-import",level:2}];function c(e){const i={em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"import-books",children:"Import Books"}),"\n",(0,t.jsxs)(i.p,{children:["Komga lets you import files that are outside your existing libraries directly into existing series folder (from the ",(0,t.jsx)(i.em,{children:"Import > Books"})," screen)."]}),"\n",(0,t.jsx)(i.h2,{id:"scan-for-books",children:"Scan for books"}),"\n",(0,t.jsxs)(i.p,{children:["Start by choosing a folder to scan for eligible books, and click ",(0,t.jsx)(i.em,{children:"Scan"}),"."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/import-books/book-import-scan.png",style:{maxHeight:" 400px"},alt:"Scan for books"}),"\n",(0,t.jsx)(i.p,{children:"Komga will display a list of all files eligible for import."}),"\n",(0,t.jsx)(i.h2,{id:"select-destination-series",children:"Select destination series"}),"\n",(0,t.jsxs)(i.p,{children:["You will need to pick a destination series for each. You can choose individually, or for all the selected files at once using the ",(0,t.jsx)(i.em,{children:"Select Series"})," button."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/import-books/book-import-pick-series.png",style:{maxHeight:" 400px"},alt:"Select series"}),"\n",(0,t.jsx)(i.h2,{id:"check-book-details",children:"Check book details"}),"\n",(0,t.jsx)(i.p,{children:"For each book, you can:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"display the book details: format, number of pages, and detailed page list"}),"\n",(0,t.jsx)(i.li,{children:"browse the book pages"}),"\n",(0,t.jsx)(i.li,{children:"change the destination file name"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"If you choose a number for a book, and a book already exists with that number, Komga will offer you to upgrade it, effectively replacing the existing file. In case of upgrade, you can:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"display the details of both books side by side"}),"\n",(0,t.jsx)(i.li,{children:"browse both books side by side"}),"\n"]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/import-books/book-import-buttons.png",style:{maxHeight:" 400px"},alt:"Book actions"}),"\n",(0,t.jsx)(i.h2,{id:"finalize-the-import",children:"Finalize the import"}),"\n",(0,t.jsx)(i.p,{children:"Komga will import only the selected files (checkbox on the left)."}),"\n",(0,t.jsx)(i.p,{children:"You can decide to:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"move the files: files will be moved from their location, effectively deleting the original file."}),"\n",(0,t.jsx)(i.li,{children:"copy/hardlink the files: Komga will try to hardlink the files to their destination (compatible file systems only), and if that doesn't work will copy the files to their destination, leaving the original file untouched."}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["Cick ",(0,t.jsx)(i.em,{children:"Import"})," to start the import process."]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},3023:(e,i,o)=>{o.d(i,{R:()=>l,x:()=>r});var t=o(3696);const s={},n=t.createContext(s);function l(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/49136dfa.f3d97620.js b/assets/js/49136dfa.f3d97620.js deleted file mode 100644 index 15c0324f..00000000 --- a/assets/js/49136dfa.f3d97620.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[473],{7854:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>n,metadata:()=>r,toc:()=>d});var t=o(4246),s=o(1670);const n={},l="Import Books",r={id:"guides/import-books",title:"Import Books",description:"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).",source:"@site/docs/guides/import-books.md",sourceDirName:"guides",slug:"/guides/import-books",permalink:"/docs/guides/import-books",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/import-books.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Full Text Search",permalink:"/docs/guides/search"},next:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"}},a={},d=[{value:"Scan for books",id:"scan-for-books",level:2},{value:"Select destination series",id:"select-destination-series",level:2},{value:"Check book details",id:"check-book-details",level:2},{value:"Finalize the import",id:"finalize-the-import",level:2}];function c(e){const i={em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"import-books",children:"Import Books"}),"\n",(0,t.jsxs)(i.p,{children:["Komga lets you import files that are outside your existing libraries directly into existing series folder (from the ",(0,t.jsx)(i.em,{children:"Import > Books"})," screen)."]}),"\n",(0,t.jsx)(i.h2,{id:"scan-for-books",children:"Scan for books"}),"\n",(0,t.jsxs)(i.p,{children:["Start by choosing a folder to scan for eligible books, and click ",(0,t.jsx)(i.em,{children:"Scan"}),"."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/import-books/book-import-scan.png",style:{maxHeight:" 400px"},alt:"Scan for books"}),"\n",(0,t.jsx)(i.p,{children:"Komga will display a list of all files eligible for import."}),"\n",(0,t.jsx)(i.h2,{id:"select-destination-series",children:"Select destination series"}),"\n",(0,t.jsxs)(i.p,{children:["You will need to pick a destination series for each. You can choose individually, or for all the selected files at once using the ",(0,t.jsx)(i.em,{children:"Select Series"})," button."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/import-books/book-import-pick-series.png",style:{maxHeight:" 400px"},alt:"Select series"}),"\n",(0,t.jsx)(i.h2,{id:"check-book-details",children:"Check book details"}),"\n",(0,t.jsx)(i.p,{children:"For each book, you can:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"display the book details: format, number of pages, and detailed page list"}),"\n",(0,t.jsx)(i.li,{children:"browse the book pages"}),"\n",(0,t.jsx)(i.li,{children:"change the destination file name"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"If you choose a number for a book, and a book already exists with that number, Komga will offer you to upgrade it, effectively replacing the existing file. In case of upgrade, you can:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"display the details of both books side by side"}),"\n",(0,t.jsx)(i.li,{children:"browse both books side by side"}),"\n"]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/import-books/book-import-buttons.png",style:{maxHeight:" 400px"},alt:"Book actions"}),"\n",(0,t.jsx)(i.h2,{id:"finalize-the-import",children:"Finalize the import"}),"\n",(0,t.jsx)(i.p,{children:"Komga will import only the selected files (checkbox on the left)."}),"\n",(0,t.jsx)(i.p,{children:"You can decide to:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"move the files: files will be moved from their location, effectively deleting the original file."}),"\n",(0,t.jsx)(i.li,{children:"copy/hardlink the files: Komga will try to hardlink the files to their destination (compatible file systems only), and if that doesn't work will copy the files to their destination, leaving the original file untouched."}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["Cick ",(0,t.jsx)(i.em,{children:"Import"})," to start the import process."]})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1670:(e,i,o)=>{o.d(i,{Z:()=>r,a:()=>l});var t=o(7378);const s={},n=t.createContext(s);function l(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c25ac78.5c1ed5c5.js b/assets/js/4c25ac78.5c1ed5c5.js new file mode 100644 index 00000000..449beef4 --- /dev/null +++ b/assets/js/4c25ac78.5c1ed5c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7994],{8280:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>d,toc:()=>o});var s=i(2540),n=i(3023);const a={},r="Edit Metadata",d={id:"guides/edit-metadata",title:"Edit Metadata",description:"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.",source:"@site/docs/guides/edit-metadata.md",sourceDirName:"guides",slug:"/guides/edit-metadata",permalink:"/docs/guides/edit-metadata",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/edit-metadata.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"One-Shots",permalink:"/docs/guides/oneshots"},next:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"}},l={},o=[{value:"The Edit Screen",id:"the-edit-screen",level:2},{value:"Opening the Edit Screen",id:"opening-the-edit-screen",level:3},{value:"From the Item Card",id:"from-the-item-card",level:4},{value:"From the Item Details",id:"from-the-item-details",level:4},{value:"Edit Screen Details",id:"edit-screen-details",level:3},{value:"Edit Screen for Series",id:"edit-screen-for-series",level:4},{value:"General",id:"general",level:5},{value:"Tags",id:"tags",level:5},{value:"Edit Screen for Books",id:"edit-screen-for-books",level:4},{value:"General",id:"general-1",level:5},{value:"Authors",id:"authors",level:5},{value:"Tags",id:"tags-1",level:5},{value:"Using the Edit Screen",id:"using-the-edit-screen",level:2},{value:"Editing Standard Fields, Tags or Authors",id:"editing-standard-fields-tags-or-authors",level:3},{value:"Changing Fields",id:"changing-fields",level:3},{value:"Locking And Unlocking",id:"locking-and-unlocking",level:3},{value:"Sort Titles",id:"sort-titles",level:3},{value:"Sort Numbers",id:"sort-numbers",level:3}];function h(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",ol:"ol",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"edit-metadata",children:"Edit Metadata"}),"\n",(0,s.jsx)(t.p,{children:"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience."}),"\n",(0,s.jsx)(t.p,{children:"You may wish to customize or change the information associated with a library item."}),"\n",(0,s.jsx)(t.h2,{id:"the-edit-screen",children:"The Edit Screen"}),"\n",(0,s.jsx)(t.h3,{id:"opening-the-edit-screen",children:"Opening the Edit Screen"}),"\n",(0,s.jsx)(t.p,{children:"The edit screen for an item can be accessed in several ways, depending on where you are."}),"\n",(0,s.jsx)(t.h4,{id:"from-the-item-card",children:"From the Item Card"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Hover over the item card"}),"\n",(0,s.jsxs)(t.li,{children:["Click the ",(0,s.jsx)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," icon"]}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"from-the-item-details",children:"From the Item Details"}),"\n",(0,s.jsxs)(t.p,{children:["When viewing the details for a Library item, click the ",(0,s.jsx)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," button in the top actionbar."]}),"\n",(0,s.jsx)(t.h3,{id:"edit-screen-details",children:"Edit Screen Details"}),"\n",(0,s.jsx)(t.p,{children:"The Edit Screen allows you to access title, authors, summary, tags, and more. There are several areas of the Edit Screen that can be accessed from the tabs on the left side."}),"\n",(0,s.jsx)(t.h4,{id:"edit-screen-for-series",children:"Edit Screen for Series"}),"\n",(0,s.jsx)(t.h5,{id:"general",children:"General"}),"\n",(0,s.jsx)(t.p,{children:"The General screen allows you to edit details such as the title, sort title, summary, and more."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h5,{id:"tags",children:"Tags"}),"\n",(0,s.jsx)(t.p,{children:"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-series-tags.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h4,{id:"edit-screen-for-books",children:"Edit Screen for Books"}),"\n",(0,s.jsx)(t.h5,{id:"general-1",children:"General"}),"\n",(0,s.jsx)(t.p,{children:"The General screen allows you to edit details such as the title, number, summary, and more."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-book-general.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h5,{id:"authors",children:"Authors"}),"\n",(0,s.jsx)(t.p,{children:"The Authors page includes metadata such as writers, pencillers, inkers, and more. These are items that can have more than one value and are typically available for sorting or filtering."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-book-authors.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h5,{id:"tags-1",children:"Tags"}),"\n",(0,s.jsx)(t.p,{children:"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-book-tags.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h2,{id:"using-the-edit-screen",children:"Using the Edit Screen"}),"\n",(0,s.jsx)(t.h3,{id:"editing-standard-fields-tags-or-authors",children:"Editing Standard Fields, Tags or Authors"}),"\n",(0,s.jsx)(t.h3,{id:"changing-fields",children:"Changing Fields"}),"\n",(0,s.jsx)(t.p,{children:"To edit the details for a particular piece of metadata:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Choose the tab of category you want to change on the left, then click the detail field"}),"\n",(0,s.jsx)(t.li,{children:"Type or paste the changes"}),"\n",(0,s.jsx)(t.li,{children:"For items in the Tags or Authors area, simply start typing the name. If the name already exists in the database, it will appear for you and you can select it. Otherwise, simply type out the name like normal."}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["To remove an item, click the ",(0,s.jsx)(t.code,{children:"X"})," next to the entry."]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/author-chip.png",style:{maxHeight:"80px"}}),"\n",(0,s.jsx)(t.h3,{id:"locking-and-unlocking",children:"Locking And Unlocking"}),"\n",(0,s.jsx)(t.p,{children:"If you\u2019ve made an edit to a field, it is automatically locked. A locked field will not be altered when an item is refreshed. To lock or unlock a field:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Edit the field and it will lock automatically"}),"\n",(0,s.jsx)(t.li,{children:"Click the lock icon to either lock or unlock the field"}),"\n",(0,s.jsx)(t.li,{children:"A field is locked when the lock icon is colored orange"}),"\n"]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/locked-field.png",style:{maxHeight:"80px"}}),"\n",(0,s.jsx)(t.h3,{id:"sort-titles",children:"Sort Titles"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"Sort Title"})," field lets you control how items are sorted alphabetically. The ",(0,s.jsx)(t.code,{children:"Title"})," field is what will be displayed, but the ",(0,s.jsx)(t.code,{children:"Sort Title"})," field is used for sorting."]}),"\n",(0,s.jsx)(t.p,{children:'For example, if you want to ignore the article ("The") for your series like "The Boys":'}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:'Find the "The Boys" series and open the Edit Details screen'}),"\n",(0,s.jsxs)(t.li,{children:["Click in the ",(0,s.jsx)(t.code,{children:"Sort Title"}),' and type "Boys (The)" then ',(0,s.jsx)(t.code,{children:"Save Changes"})]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:['The result is that the series "The Boys" will appear together in the list under the letter B and sorted as entered in the ',(0,s.jsx)(t.code,{children:"Sort Title"})," field."]}),"\n",(0,s.jsx)(t.h3,{id:"sort-numbers",children:"Sort Numbers"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"Sort Number"})," field lets you control how items are sorted within a series. The ",(0,s.jsx)(t.code,{children:"Number"})," field is what will be displayed, but the ",(0,s.jsx)(t.code,{children:"Sort Number"})," field is used for sorting."]}),"\n",(0,s.jsx)(t.p,{children:'For example, if you have a "2015 Special" that is between book 24 and 25:'}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["set the ",(0,s.jsx)(t.code,{children:"Number"}),' to "2015 Special"']}),"\n",(0,s.jsxs)(t.li,{children:["set the ",(0,s.jsx)(t.code,{children:"Sort Number"}),' to "24.5"']}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:'The result is that the special book will appear between book 24 and 25, and will show "2015 Special" as its number.'})]})}function c(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},3023:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>d});var s=i(3696);const n={},a=s.createContext(n);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c25ac78.753561d2.js b/assets/js/4c25ac78.753561d2.js deleted file mode 100644 index ad91e26f..00000000 --- a/assets/js/4c25ac78.753561d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2727],{2450:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>d,toc:()=>o});var s=i(4246),n=i(1670);const a={},r="Edit Metadata",d={id:"guides/edit-metadata",title:"Edit Metadata",description:"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.",source:"@site/docs/guides/edit-metadata.md",sourceDirName:"guides",slug:"/guides/edit-metadata",permalink:"/docs/guides/edit-metadata",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/edit-metadata.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"One-Shots",permalink:"/docs/guides/oneshots"},next:{title:"Local Artwork Assets",permalink:"/docs/guides/local-artwork-assets"}},l={},o=[{value:"The Edit Screen",id:"the-edit-screen",level:2},{value:"Opening the Edit Screen",id:"opening-the-edit-screen",level:3},{value:"From the Item Card",id:"from-the-item-card",level:4},{value:"From the Item Details",id:"from-the-item-details",level:4},{value:"Edit Screen Details",id:"edit-screen-details",level:3},{value:"Edit Screen for Series",id:"edit-screen-for-series",level:4},{value:"General",id:"general",level:5},{value:"Tags",id:"tags",level:5},{value:"Edit Screen for Books",id:"edit-screen-for-books",level:4},{value:"General",id:"general-1",level:5},{value:"Authors",id:"authors",level:5},{value:"Tags",id:"tags-1",level:5},{value:"Using the Edit Screen",id:"using-the-edit-screen",level:2},{value:"Editing Standard Fields, Tags or Authors",id:"editing-standard-fields-tags-or-authors",level:3},{value:"Changing Fields",id:"changing-fields",level:3},{value:"Locking And Unlocking",id:"locking-and-unlocking",level:3},{value:"Sort Titles",id:"sort-titles",level:3},{value:"Sort Numbers",id:"sort-numbers",level:3}];function h(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",ol:"ol",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"edit-metadata",children:"Edit Metadata"}),"\n",(0,s.jsx)(t.p,{children:"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience."}),"\n",(0,s.jsx)(t.p,{children:"You may wish to customize or change the information associated with a library item."}),"\n",(0,s.jsx)(t.h2,{id:"the-edit-screen",children:"The Edit Screen"}),"\n",(0,s.jsx)(t.h3,{id:"opening-the-edit-screen",children:"Opening the Edit Screen"}),"\n",(0,s.jsx)(t.p,{children:"The edit screen for an item can be accessed in several ways, depending on where you are."}),"\n",(0,s.jsx)(t.h4,{id:"from-the-item-card",children:"From the Item Card"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Hover over the item card"}),"\n",(0,s.jsxs)(t.li,{children:["Click the ",(0,s.jsx)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," icon"]}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"from-the-item-details",children:"From the Item Details"}),"\n",(0,s.jsxs)(t.p,{children:["When viewing the details for a Library item, click the ",(0,s.jsx)("img",{src:"/assets/media/guides/edit-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," button in the top actionbar."]}),"\n",(0,s.jsx)(t.h3,{id:"edit-screen-details",children:"Edit Screen Details"}),"\n",(0,s.jsx)(t.p,{children:"The Edit Screen allows you to access title, authors, summary, tags, and more. There are several areas of the Edit Screen that can be accessed from the tabs on the left side."}),"\n",(0,s.jsx)(t.h4,{id:"edit-screen-for-series",children:"Edit Screen for Series"}),"\n",(0,s.jsx)(t.h5,{id:"general",children:"General"}),"\n",(0,s.jsx)(t.p,{children:"The General screen allows you to edit details such as the title, sort title, summary, and more."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-series-general-2.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h5,{id:"tags",children:"Tags"}),"\n",(0,s.jsx)(t.p,{children:"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-series-tags.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h4,{id:"edit-screen-for-books",children:"Edit Screen for Books"}),"\n",(0,s.jsx)(t.h5,{id:"general-1",children:"General"}),"\n",(0,s.jsx)(t.p,{children:"The General screen allows you to edit details such as the title, number, summary, and more."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-book-general.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h5,{id:"authors",children:"Authors"}),"\n",(0,s.jsx)(t.p,{children:"The Authors page includes metadata such as writers, pencillers, inkers, and more. These are items that can have more than one value and are typically available for sorting or filtering."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-book-authors.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h5,{id:"tags-1",children:"Tags"}),"\n",(0,s.jsx)(t.p,{children:"The Tags page includes metadata such as genres and tags. These are items that can have more than one value and are typically available for sorting or filtering."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/edit-book-tags.png",style:{maxHeight:"300px"}}),"\n",(0,s.jsx)(t.h2,{id:"using-the-edit-screen",children:"Using the Edit Screen"}),"\n",(0,s.jsx)(t.h3,{id:"editing-standard-fields-tags-or-authors",children:"Editing Standard Fields, Tags or Authors"}),"\n",(0,s.jsx)(t.h3,{id:"changing-fields",children:"Changing Fields"}),"\n",(0,s.jsx)(t.p,{children:"To edit the details for a particular piece of metadata:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Choose the tab of category you want to change on the left, then click the detail field"}),"\n",(0,s.jsx)(t.li,{children:"Type or paste the changes"}),"\n",(0,s.jsx)(t.li,{children:"For items in the Tags or Authors area, simply start typing the name. If the name already exists in the database, it will appear for you and you can select it. Otherwise, simply type out the name like normal."}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["To remove an item, click the ",(0,s.jsx)(t.code,{children:"X"})," next to the entry."]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/author-chip.png",style:{maxHeight:"80px"}}),"\n",(0,s.jsx)(t.h3,{id:"locking-and-unlocking",children:"Locking And Unlocking"}),"\n",(0,s.jsx)(t.p,{children:"If you\u2019ve made an edit to a field, it is automatically locked. A locked field will not be altered when an item is refreshed. To lock or unlock a field:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Edit the field and it will lock automatically"}),"\n",(0,s.jsx)(t.li,{children:"Click the lock icon to either lock or unlock the field"}),"\n",(0,s.jsx)(t.li,{children:"A field is locked when the lock icon is colored orange"}),"\n"]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/edit-metadata/locked-field.png",style:{maxHeight:"80px"}}),"\n",(0,s.jsx)(t.h3,{id:"sort-titles",children:"Sort Titles"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"Sort Title"})," field lets you control how items are sorted alphabetically. The ",(0,s.jsx)(t.code,{children:"Title"})," field is what will be displayed, but the ",(0,s.jsx)(t.code,{children:"Sort Title"})," field is used for sorting."]}),"\n",(0,s.jsx)(t.p,{children:'For example, if you want to ignore the article ("The") for your series like "The Boys":'}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:'Find the "The Boys" series and open the Edit Details screen'}),"\n",(0,s.jsxs)(t.li,{children:["Click in the ",(0,s.jsx)(t.code,{children:"Sort Title"}),' and type "Boys (The)" then ',(0,s.jsx)(t.code,{children:"Save Changes"})]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:['The result is that the series "The Boys" will appear together in the list under the letter B and sorted as entered in the ',(0,s.jsx)(t.code,{children:"Sort Title"})," field."]}),"\n",(0,s.jsx)(t.h3,{id:"sort-numbers",children:"Sort Numbers"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"Sort Number"})," field lets you control how items are sorted within a series. The ",(0,s.jsx)(t.code,{children:"Number"})," field is what will be displayed, but the ",(0,s.jsx)(t.code,{children:"Sort Number"})," field is used for sorting."]}),"\n",(0,s.jsx)(t.p,{children:'For example, if you have a "2015 Special" that is between book 24 and 25:'}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["set the ",(0,s.jsx)(t.code,{children:"Number"}),' to "2015 Special"']}),"\n",(0,s.jsxs)(t.li,{children:["set the ",(0,s.jsx)(t.code,{children:"Sort Number"}),' to "24.5"']}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:'The result is that the special book will appear between book 24 and 25, and will show "2015 Special" as its number.'})]})}function c(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1670:(e,t,i)=>{i.d(t,{Z:()=>d,a:()=>r});var s=i(7378);const n={},a=s.createContext(n);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4cc4731f.b8ca3f20.js b/assets/js/4cc4731f.b8ca3f20.js new file mode 100644 index 00000000..1a90eb9f --- /dev/null +++ b/assets/js/4cc4731f.b8ca3f20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3390],{6088:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var s=i(2540),t=i(3023);const a={},l="Install via third-party integrations",r={id:"installation/thirdparty",title:"Install via third-party integrations",description:"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.",source:"@site/docs/installation/thirdparty.md",sourceDirName:"installation",slug:"/installation/thirdparty",permalink:"/docs/installation/thirdparty",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/thirdparty.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Run with the Jar file",permalink:"/docs/installation/jar"},next:{title:"Configuration options",permalink:"/docs/installation/configuration"}},o={},d=[{value:"Windows Installer and Updater",id:"windows-installer-and-updater",level:2},{value:"Scoop (Windows)",id:"scoop-windows",level:2},{value:"Installation",id:"installation",level:3},{value:"1. (Skip if JDK is installed) Install JDK",id:"1-skip-if-jdk-is-installed-install-jdk",level:4},{value:"2. Install Komga",id:"2-install-komga",level:4},{value:"Manage",id:"manage",level:3},{value:"Run",id:"run",level:4},{value:"Update",id:"update",level:4},{value:"Uninstall",id:"uninstall",level:4},{value:"AUR - Arch User Repository",id:"aur---arch-user-repository",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Run",id:"run-1",level:3},{value:"QNAP",id:"qnap",level:2},{value:"FreeNAS",id:"freenas",level:2},{value:"YunoHost",id:"yunohost",level:2},{value:"TrueNAS SCALE",id:"truenas-scale",level:2},{value:"Built-in Community Repository",id:"built-in-community-repository",level:3},{value:"TrueCharts",id:"truecharts",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"install-via-third-party-integrations",children:"Install via third-party integrations"}),"\n",(0,s.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,s.jsx)(n.p,{children:"Those methods are not officially supported, if you encounter installation issues please contact the respective authors."})}),"\n",(0,s.jsx)(n.h2,{id:"windows-installer-and-updater",children:"Windows Installer and Updater"}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.a,{href:"https://github.com/losslesspng/SetUpKomgaJava",children:"Powershell script"})," to get up and running with Komga."]}),"\n",(0,s.jsx)(n.h2,{id:"scoop-windows",children:"Scoop (Windows)"}),"\n",(0,s.jsxs)(n.p,{children:["Komga is available in ",(0,s.jsx)(n.a,{href:"https://github.com/ScoopInstaller/Scoop",children:"Scoop"}),"'s ",(0,s.jsx)(n.a,{href:"https://github.com/ScoopInstaller/Extras",children:"extras"})," bucket."]}),"\n",(0,s.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,s.jsxs)(n.p,{children:["You need Scoop to use this installation method. Instruction to install Scoop can be found ",(0,s.jsx)(n.a,{href:"https://github.com/ScoopInstaller/Scoop#installation",children:"here"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"1-skip-if-jdk-is-installed-install-jdk",children:"1. (Skip if JDK is installed) Install JDK"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop bucket add java"})," and then run ",(0,s.jsx)(n.code,{children:"scoop install java/temurin-lts-jdk"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"2-install-komga",children:"2. Install Komga"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop bucket add extras"})," and then run ",(0,s.jsx)(n.code,{children:"scoop install komga"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"manage",children:"Manage"}),"\n",(0,s.jsx)(n.h4,{id:"run",children:"Run"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"komga"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Note: Default config dir is ",(0,s.jsx)(n.code,{children:"%USERPROFILE%\\scoop\\apps\\komga\\current\\config"})]}),"\n",(0,s.jsx)(n.h4,{id:"update",children:"Update"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop update komga"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"uninstall",children:"Uninstall"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop uninstall komga"})]}),"\n",(0,s.jsx)(n.h2,{id:"aur---arch-user-repository",children:"AUR - Arch User Repository"}),"\n",(0,s.jsxs)(n.p,{children:["Komga is available as an ",(0,s.jsx)(n.a,{href:"https://aur.archlinux.org/packages/komga/",children:"AUR"})," package."]}),"\n",(0,s.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,s.jsxs)(n.p,{children:["It can be installed using ",(0,s.jsx)(n.code,{children:"yay -S komga"})," (or any other AUR package manager)."]}),"\n",(0,s.jsx)(n.h3,{id:"run-1",children:"Run"}),"\n",(0,s.jsxs)(n.p,{children:["Just run ",(0,s.jsx)(n.code,{children:"komga"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"qnap",children:"QNAP"}),"\n",(0,s.jsxs)(n.p,{children:["Komga is available as a ",(0,s.jsx)(n.a,{href:"https://www.qnapclub.eu/en/qpkg/853",children:"QPKG"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"freenas",children:"FreeNAS"}),"\n",(0,s.jsxs)(n.p,{children:["There is a ",(0,s.jsx)(n.a,{href:"https://blog.tommyku.com/blog/deploying-komga-on-freenas-jail/",children:"tutorial"})," to install Komga on FreeNAS jail."]}),"\n",(0,s.jsx)(n.h2,{id:"yunohost",children:"YunoHost"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://install-app.yunohost.org/?app=komga",children:(0,s.jsx)(n.img,{src:"https://install-app.yunohost.org/install-with-yunohost.svg",alt:"Install Komga with YunoHost"})})}),"\n",(0,s.jsx)(n.h2,{id:"truenas-scale",children:"TrueNAS SCALE"}),"\n",(0,s.jsx)(n.p,{children:"There are two primary methods to get Komga on TrueNAS SCALE. These are:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The built-in Community repository."}),"\n",(0,s.jsx)(n.li,{children:"The TrueCharts community repository."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"TrueCharts offers more features, such as easier management of domain names and https certificates."}),"\n",(0,s.jsx)(n.h3,{id:"built-in-community-repository",children:"Built-in Community Repository"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open ",(0,s.jsx)(n.code,{children:"Apps"})," then go to ",(0,s.jsx)(n.code,{children:"Discover Apps"})," and then search for ",(0,s.jsx)(n.code,{children:"Komga"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Click on ",(0,s.jsx)(n.code,{children:"Komga"})," and then click on ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Leave everything as default, except:","\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Optional: Under ",(0,s.jsx)(n.code,{children:"Network Configuration"})," you can change the ",(0,s.jsx)(n.code,{children:"Web Port"}),". This is the port at which you can later access Komga."]}),"\n",(0,s.jsxs)(n.li,{children:["Optional: Under ",(0,s.jsx)(n.code,{children:"Storage Configuration"})," you can add the location to wherever your media files are currently stored by clicking ",(0,s.jsx)(n.code,{children:"Add"})," next to ",(0,s.jsx)(n.code,{children:"Additional Storage"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"truecharts",children:"TrueCharts"}),"\n",(0,s.jsxs)(n.p,{children:["There is a ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/guides/getting-started#adding-truecharts",children:"tutorial"})," to install Truecharts on TrueNAS SCALE. Follow the steps to add TrueCharts to SCALE."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open ",(0,s.jsx)(n.code,{children:"Apps"})," then go to ",(0,s.jsx)(n.code,{children:"Discover Apps"})," and then search for ",(0,s.jsx)(n.code,{children:"Komga"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Click on ",(0,s.jsx)(n.code,{children:"Komga"})," and then click on ",(0,s.jsx)(n.code,{children:"Install"}),". Make sure that the ",(0,s.jsx)(n.code,{children:"Komga"})," that you select says ",(0,s.jsx)(n.code,{children:"Truecharts"})," in the UI, and not ",(0,s.jsx)(n.code,{children:"TrueNAS"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Leave everything as default, except:","\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Optional: Under ",(0,s.jsx)(n.code,{children:"Networking and Services"})," you can change the ",(0,s.jsx)(n.code,{children:"Port"}),". This is the port at which you can later access Komga."]}),"\n",(0,s.jsxs)(n.li,{children:["Optional: If you will only access Komga through a domain name, see the TrueCharts guides for (a) ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/options/networking",children:"Networking and Services"})," and (b) ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/options/ingress",children:"Ingress"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Optional: In ",(0,s.jsx)(n.code,{children:"Storage and Persistence"}),", under ",(0,s.jsx)(n.code,{children:"App Data Storage"})," you can change the location to wherever your media files are currently stored. For detailed instructions, see the ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/guides/add-storage",children:"TrueCharts guide for adding storage"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},3023:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>r});var s=i(3696);const t={},a=s.createContext(t);function l(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4cc4731f.fed034b3.js b/assets/js/4cc4731f.fed034b3.js deleted file mode 100644 index a7857e1e..00000000 --- a/assets/js/4cc4731f.fed034b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1169],{2588:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var s=i(4246),t=i(1670);const a={},l="Install via third-party integrations",r={id:"installation/thirdparty",title:"Install via third-party integrations",description:"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.",source:"@site/docs/installation/thirdparty.md",sourceDirName:"installation",slug:"/installation/thirdparty",permalink:"/docs/installation/thirdparty",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/thirdparty.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Run with the Jar file",permalink:"/docs/installation/jar"},next:{title:"Configuration options",permalink:"/docs/installation/configuration"}},o={},d=[{value:"Windows Installer and Updater",id:"windows-installer-and-updater",level:2},{value:"Scoop (Windows)",id:"scoop-windows",level:2},{value:"Installation",id:"installation",level:3},{value:"1. (Skip if JDK is installed) Install JDK",id:"1-skip-if-jdk-is-installed-install-jdk",level:4},{value:"2. Install Komga",id:"2-install-komga",level:4},{value:"Manage",id:"manage",level:3},{value:"Run",id:"run",level:4},{value:"Update",id:"update",level:4},{value:"Uninstall",id:"uninstall",level:4},{value:"AUR - Arch User Repository",id:"aur---arch-user-repository",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Run",id:"run-1",level:3},{value:"QNAP",id:"qnap",level:2},{value:"FreeNAS",id:"freenas",level:2},{value:"YunoHost",id:"yunohost",level:2},{value:"TrueNAS SCALE",id:"truenas-scale",level:2},{value:"Built-in Community Repository",id:"built-in-community-repository",level:3},{value:"TrueCharts",id:"truecharts",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"install-via-third-party-integrations",children:"Install via third-party integrations"}),"\n",(0,s.jsx)(n.admonition,{title:"Warning",type:"warning",children:(0,s.jsx)(n.p,{children:"Those methods are not officially supported, if you encounter installation issues please contact the respective authors."})}),"\n",(0,s.jsx)(n.h2,{id:"windows-installer-and-updater",children:"Windows Installer and Updater"}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.a,{href:"https://github.com/losslesspng/SetUpKomgaJava",children:"Powershell script"})," to get up and running with Komga."]}),"\n",(0,s.jsx)(n.h2,{id:"scoop-windows",children:"Scoop (Windows)"}),"\n",(0,s.jsxs)(n.p,{children:["Komga is available in ",(0,s.jsx)(n.a,{href:"https://github.com/ScoopInstaller/Scoop",children:"Scoop"}),"'s ",(0,s.jsx)(n.a,{href:"https://github.com/ScoopInstaller/Extras",children:"extras"})," bucket."]}),"\n",(0,s.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,s.jsxs)(n.p,{children:["You need Scoop to use this installation method. Instruction to install Scoop can be found ",(0,s.jsx)(n.a,{href:"https://github.com/ScoopInstaller/Scoop#installation",children:"here"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"1-skip-if-jdk-is-installed-install-jdk",children:"1. (Skip if JDK is installed) Install JDK"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop bucket add java"})," and then run ",(0,s.jsx)(n.code,{children:"scoop install java/temurin-lts-jdk"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"2-install-komga",children:"2. Install Komga"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop bucket add extras"})," and then run ",(0,s.jsx)(n.code,{children:"scoop install komga"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"manage",children:"Manage"}),"\n",(0,s.jsx)(n.h4,{id:"run",children:"Run"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"komga"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Note: Default config dir is ",(0,s.jsx)(n.code,{children:"%USERPROFILE%\\scoop\\apps\\komga\\current\\config"})]}),"\n",(0,s.jsx)(n.h4,{id:"update",children:"Update"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop update komga"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"uninstall",children:"Uninstall"}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"scoop uninstall komga"})]}),"\n",(0,s.jsx)(n.h2,{id:"aur---arch-user-repository",children:"AUR - Arch User Repository"}),"\n",(0,s.jsxs)(n.p,{children:["Komga is available as an ",(0,s.jsx)(n.a,{href:"https://aur.archlinux.org/packages/komga/",children:"AUR"})," package."]}),"\n",(0,s.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,s.jsxs)(n.p,{children:["It can be installed using ",(0,s.jsx)(n.code,{children:"yay -S komga"})," (or any other AUR package manager)."]}),"\n",(0,s.jsx)(n.h3,{id:"run-1",children:"Run"}),"\n",(0,s.jsxs)(n.p,{children:["Just run ",(0,s.jsx)(n.code,{children:"komga"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"qnap",children:"QNAP"}),"\n",(0,s.jsxs)(n.p,{children:["Komga is available as a ",(0,s.jsx)(n.a,{href:"https://www.qnapclub.eu/en/qpkg/853",children:"QPKG"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"freenas",children:"FreeNAS"}),"\n",(0,s.jsxs)(n.p,{children:["There is a ",(0,s.jsx)(n.a,{href:"https://blog.tommyku.com/blog/deploying-komga-on-freenas-jail/",children:"tutorial"})," to install Komga on FreeNAS jail."]}),"\n",(0,s.jsx)(n.h2,{id:"yunohost",children:"YunoHost"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://install-app.yunohost.org/?app=komga",children:(0,s.jsx)(n.img,{src:"https://install-app.yunohost.org/install-with-yunohost.svg",alt:"Install Komga with YunoHost"})})}),"\n",(0,s.jsx)(n.h2,{id:"truenas-scale",children:"TrueNAS SCALE"}),"\n",(0,s.jsx)(n.p,{children:"There are two primary methods to get Komga on TrueNAS SCALE. These are:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The built-in Community repository."}),"\n",(0,s.jsx)(n.li,{children:"The TrueCharts community repository."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"TrueCharts offers more features, such as easier management of domain names and https certificates."}),"\n",(0,s.jsx)(n.h3,{id:"built-in-community-repository",children:"Built-in Community Repository"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open ",(0,s.jsx)(n.code,{children:"Apps"})," then go to ",(0,s.jsx)(n.code,{children:"Discover Apps"})," and then search for ",(0,s.jsx)(n.code,{children:"Komga"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Click on ",(0,s.jsx)(n.code,{children:"Komga"})," and then click on ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Leave everything as default, except:","\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Optional: Under ",(0,s.jsx)(n.code,{children:"Network Configuration"})," you can change the ",(0,s.jsx)(n.code,{children:"Web Port"}),". This is the port at which you can later access Komga."]}),"\n",(0,s.jsxs)(n.li,{children:["Optional: Under ",(0,s.jsx)(n.code,{children:"Storage Configuration"})," you can add the location to wherever your media files are currently stored by clicking ",(0,s.jsx)(n.code,{children:"Add"})," next to ",(0,s.jsx)(n.code,{children:"Additional Storage"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"truecharts",children:"TrueCharts"}),"\n",(0,s.jsxs)(n.p,{children:["There is a ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/guides/getting-started#adding-truecharts",children:"tutorial"})," to install Truecharts on TrueNAS SCALE. Follow the steps to add TrueCharts to SCALE."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open ",(0,s.jsx)(n.code,{children:"Apps"})," then go to ",(0,s.jsx)(n.code,{children:"Discover Apps"})," and then search for ",(0,s.jsx)(n.code,{children:"Komga"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Click on ",(0,s.jsx)(n.code,{children:"Komga"})," and then click on ",(0,s.jsx)(n.code,{children:"Install"}),". Make sure that the ",(0,s.jsx)(n.code,{children:"Komga"})," that you select says ",(0,s.jsx)(n.code,{children:"Truecharts"})," in the UI, and not ",(0,s.jsx)(n.code,{children:"TrueNAS"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Leave everything as default, except:","\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Optional: Under ",(0,s.jsx)(n.code,{children:"Networking and Services"})," you can change the ",(0,s.jsx)(n.code,{children:"Port"}),". This is the port at which you can later access Komga."]}),"\n",(0,s.jsxs)(n.li,{children:["Optional: If you will only access Komga through a domain name, see the TrueCharts guides for (a) ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/options/networking",children:"Networking and Services"})," and (b) ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/options/ingress",children:"Ingress"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Optional: In ",(0,s.jsx)(n.code,{children:"Storage and Persistence"}),", under ",(0,s.jsx)(n.code,{children:"App Data Storage"})," you can change the location to wherever your media files are currently stored. For detailed instructions, see the ",(0,s.jsx)(n.a,{href:"https://truecharts.org/manual/SCALE/guides/add-storage",children:"TrueCharts guide for adding storage"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1670:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>l});var s=i(7378);const t={},a=s.createContext(t);function l(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4e7428db.0b8e5022.js b/assets/js/4e7428db.0b8e5022.js deleted file mode 100644 index e9e39f9b..00000000 --- a/assets/js/4e7428db.0b8e5022.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9835],{7821:e=>{e.exports=JSON.parse('{"label":"komga","permalink":"/blog/tags/komga","allTagsPath":"/blog/tags","count":3,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/4e7428db.ad2e7955.js b/assets/js/4e7428db.ad2e7955.js new file mode 100644 index 00000000..26f6c6c0 --- /dev/null +++ b/assets/js/4e7428db.ad2e7955.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[127],{5756:e=>{e.exports=JSON.parse('{"label":"komga","permalink":"/blog/tags/komga","allTagsPath":"/blog/tags","count":3,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/5240.ae957736.js b/assets/js/5240.ae957736.js deleted file mode 100644 index e88ce8b0..00000000 --- a/assets/js/5240.ae957736.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5240],{5988:(e,t,s)=>{s.d(t,{Z:()=>f});var r=s(7378),a=s(624),n=s(4514),l=s(8357),i=s(6641),o=s(9213),c=s(3620),m=s(8862);function d(e){const{pathname:t}=(0,c.TH)();return(0,r.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_CLW8",sidebarItemTitle:"sidebarItemTitle_DQfJ",sidebarItemList:"sidebarItemList_rvuc",sidebarItem:"sidebarItem__RMN",sidebarItemLink:"sidebarItemLink_Ony9",sidebarItemLinkActive:"sidebarItemLinkActive_MJ75"};var h=s(4246);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,a.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,a.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,a.Z)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=s(3471);function x(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,h.jsx)(p.Zo,{component:x,props:e})}function b(e){let{sidebar:t}=e;const s=(0,l.i)();return t?.items.length?"mobile"===s?(0,h.jsx)(j,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function f(e){const{sidebar:t,toc:s,children:r,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.Z,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(b,{sidebar:t}),(0,h.jsx)("main",{className:(0,a.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"https://schema.org/Blog",children:r}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},5532:(e,t,s)=>{s.d(t,{Z:()=>L});s(7378);var r=s(624),a=s(412),n=s(8948),l=s(4246);function i(e){let{children:t,className:s}=e;const{frontMatter:r,assets:i,metadata:{description:o}}=(0,a.C)(),{withBaseUrl:c}=(0,n.C)(),m=i.image??r.image,d=r.keywords??[];return(0,l.jsxs)("article",{className:s,itemProp:"blogPost",itemScope:!0,itemType:"https://schema.org/BlogPosting",children:[o&&(0,l.jsx)("meta",{itemProp:"description",content:o}),m&&(0,l.jsx)("link",{itemProp:"image",href:c(m,{absolute:!0})}),d.length>0&&(0,l.jsx)("meta",{itemProp:"keywords",content:d.join(",")}),t]})}var o=s(6641);const c={title:"title_Kdtz"};function m(e){let{className:t}=e;const{metadata:s,isBlogPostPage:n}=(0,a.C)(),{permalink:i,title:m}=s,d=n?"h1":"h2";return(0,l.jsx)(d,{className:(0,r.Z)(c.title,t),itemProp:"headline",children:n?m:(0,l.jsx)(o.Z,{itemProp:"url",to:i,children:m})})}var d=s(9213),u=s(689);const h={container:"container_iZB2"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,u.c)();return t=>{const s=Math.ceil(t);return e(s,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,l.jsx)(l.Fragment,{children:s(t)})}function p(e){let{date:t,formattedDate:s}=e;return(0,l.jsx)("time",{dateTime:t,itemProp:"datePublished",children:s})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:s}=(0,a.C)(),{date:n,formattedDate:i,readingTime:o}=s;return(0,l.jsxs)("div",{className:(0,r.Z)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:n,formattedDate:i}),void 0!==o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:o})]})]})}function b(e){return e.href?(0,l.jsx)(o.Z,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function f(e){let{author:t,className:s}=e;const{name:a,title:n,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,l.jsxs)("div",{className:(0,r.Z)("avatar margin-bottom--sm",s),children:[o&&(0,l.jsx)(b,{href:m,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:"avatar__photo",src:o,alt:a,itemProp:"image"})}),a&&(0,l.jsxs)("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person",children:[(0,l.jsx)("div",{className:"avatar__name",children:(0,l.jsx)(b,{href:m,itemProp:"url",children:(0,l.jsx)("span",{itemProp:"name",children:a})})}),n&&(0,l.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:n})]})]})}const v={authorCol:"authorCol_v1VX",imageOnlyAuthorRow:"imageOnlyAuthorRow_RxZ1",imageOnlyAuthorCol:"imageOnlyAuthorCol_iWtj"};function P(e){let{className:t}=e;const{metadata:{authors:s},assets:n}=(0,a.C)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,l.jsx)("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,l.jsx)("div",{className:(0,r.Z)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(f,{author:{...e,imageURL:n.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(m,{}),(0,l.jsx)(j,{}),(0,l.jsx)(P,{})]})}var _=s(1721),k=s(432);function Z(e){let{children:t,className:s}=e;const{isBlogPostPage:n}=(0,a.C)();return(0,l.jsx)("div",{id:n?_.blogPostContainerID:void 0,className:(0,r.Z)("markdown",s),itemProp:"articleBody",children:(0,l.jsx)(k.Z,{children:t})})}var C=s(4565),I=s(8349);function w(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function T(e){const{blogPostTitle:t,...s}=e;return(0,l.jsx)(o.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,l.jsx)(w,{})})}const y={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_JgJa"};function F(){const{metadata:e,isBlogPostPage:t}=(0,a.C)(),{tags:s,title:n,editUrl:i,hasTruncateMarker:o}=e,c=!t&&o,m=s.length>0;return m||c||i?(0,l.jsxs)("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&y.blogPostFooterDetailsFull),children:[m&&(0,l.jsx)("div",{className:(0,r.Z)("col",{"col--9":c}),children:(0,l.jsx)(I.Z,{tags:s})}),t&&i&&(0,l.jsx)("div",{className:"col margin-top--sm",children:(0,l.jsx)(C.Z,{editUrl:i})}),c&&(0,l.jsx)("div",{className:(0,r.Z)("col text--right",{"col--3":m}),children:(0,l.jsx)(T,{blogPostTitle:n,to:e.permalink})})]}):null}function L(e){let{children:t,className:s}=e;const n=function(){const{isBlogPostPage:e}=(0,a.C)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(i,{className:(0,r.Z)(n,s),children:[(0,l.jsx)(N,{}),(0,l.jsx)(Z,{children:t}),(0,l.jsx)(F,{})]})}},412:(e,t,s)=>{s.d(t,{C:()=>o,n:()=>i});var r=s(7378),a=s(1763),n=s(4246);const l=r.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:a=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:a});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,r.useContext)(l);if(null===e)throw new a.i6("BlogPostProvider");return e}},689:(e,t,s)=>{s.d(t,{c:()=>c});var r=s(7378),a=s(353);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const r=e.split("|");if(1===r.length)return r[0];r.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const a=s.select(t),n=s.pluralForms.indexOf(a);return r[Math.min(n,r.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/55519d27.6b01b317.js b/assets/js/55519d27.6b01b317.js new file mode 100644 index 00000000..0b0e28e1 --- /dev/null +++ b/assets/js/55519d27.6b01b317.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[577],{897:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var s=r(2540),n=r(3023);const a={},t="Libraries",l={id:"guides/libraries",title:"Libraries",description:"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.",source:"@site/docs/guides/libraries.md",sourceDirName:"guides",slug:"/guides/libraries",permalink:"/docs/guides/libraries",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/libraries.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Desktop Application",permalink:"/docs/guides/desktop"},next:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"}},o={},c=[{value:"Creating libraries",id:"creating-libraries",level:2},{value:"Scanner",id:"scanner",level:3},{value:"Empty trash automatically after every scan",id:"empty-trash-automatically-after-every-scan",level:4},{value:"Force directory modified time",id:"force-directory-modified-time",level:4},{value:"Scan on startup",id:"scan-on-startup",level:4},{value:"Scan interval",id:"scan-interval",level:4},{value:"One-Shots directory",id:"one-shots-directory",level:4},{value:"Scan for these file types",id:"scan-for-these-file-types",level:4},{value:"Directory exclusions",id:"directory-exclusions",level:4},{value:"Options",id:"options",level:3},{value:"Analysis",id:"analysis",level:4},{value:"Compute hash for files",id:"compute-hash-for-files",level:5},{value:"Compute hash for pages",id:"compute-hash-for-pages",level:5},{value:"Analyze page dimensions",id:"analyze-page-dimensions",level:5},{value:"File management",id:"file-management",level:4},{value:"Automatically repair incorrect file extensions",id:"automatically-repair-incorrect-file-extensions",level:5},{value:"Automatically convert to CBZ",id:"automatically-convert-to-cbz",level:5},{value:"Series cover",id:"series-cover",level:4},{value:"Metadata",id:"metadata",level:3},{value:"Edit a library",id:"edit-a-library",level:2},{value:"Delete a library",id:"delete-a-library",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"libraries",children:"Libraries"}),"\n",(0,s.jsx)(i.p,{children:"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users."}),"\n",(0,s.jsx)(i.p,{children:"Each library has a root folder, and no library can share any part of their path."}),"\n",(0,s.jsxs)(i.p,{children:["For example if you have a library with a root path of ",(0,s.jsx)(i.code,{children:"/books/mangas"}),", you can't create a library with a root path of ",(0,s.jsx)(i.code,{children:"/books"}),", because the two root paths would overlap. You can however create a library with a root path of ",(0,s.jsx)(i.code,{children:"/books/comics"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"creating-libraries",children:"Creating libraries"}),"\n",(0,s.jsx)(i.p,{children:"From the web interface:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["click on the ",(0,s.jsx)(i.em,{children:"+"})," icon next to ",(0,s.jsx)(i.em,{children:"Libraries"})," in the sidebar ",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add.png",style:{verticalAlign:"middle",maxHeight:"32px"}})]}),"\n",(0,s.jsxs)(i.li,{children:["choose a ",(0,s.jsx)(i.em,{children:"Name"})," for your library"]}),"\n",(0,s.jsxs)(i.li,{children:["click the ",(0,s.jsx)(i.em,{children:"Browse"})," button and select a root folder containing your books"]}),"\n",(0,s.jsxs)(i.li,{children:["click ",(0,s.jsx)(i.em,{children:"Add"})]}),"\n"]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-dialog.png",style:{maxHeight:"300px"},alt:"Add Library Dialog"}),"\n",(0,s.jsx)(i.p,{children:"You can also specify extra options."}),"\n",(0,s.jsx)(i.h3,{id:"scanner",children:"Scanner"}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-scanner.png",style:{maxHeight:"400px"},alt:"Add Library Dialog Scanner"}),"\n",(0,s.jsx)(i.h4,{id:"empty-trash-automatically-after-every-scan",children:"Empty trash automatically after every scan"}),"\n",(0,s.jsxs)(i.p,{children:["See ",(0,s.jsx)(i.a,{href:"/docs/guides/trash#automatically-empty-trash",children:"Emptying library trash"}),"."]}),"\n",(0,s.jsx)(i.h4,{id:"force-directory-modified-time",children:"Force directory modified time"}),"\n",(0,s.jsx)(i.p,{children:"This will force the last modified time of a directory as the maximum from its own last modified time and the last modified time from all the books inside the directory. This should be used only if your filesystem does not update the last modified time of a directory when files inside it are modified (Google Drive for instance)."}),"\n",(0,s.jsx)(i.h4,{id:"scan-on-startup",children:"Scan on startup"}),"\n",(0,s.jsx)(i.p,{children:"If enabled, the library will be scanner when Komga starts."}),"\n",(0,s.jsx)(i.h4,{id:"scan-interval",children:"Scan interval"}),"\n",(0,s.jsx)(i.p,{children:"Choose to scan all of your libraries on a time-based interval. Choose the interval to use from the dropdown. Available frequencies:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"disabled"}),"\n",(0,s.jsx)(i.li,{children:"hourly"}),"\n",(0,s.jsx)(i.li,{children:"every 6 hours"}),"\n",(0,s.jsx)(i.li,{children:"every 12 hours"}),"\n",(0,s.jsx)(i.li,{children:"daily"}),"\n",(0,s.jsx)(i.li,{children:"weekly"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"The scan interval is based on when Komga started, or when you changed that setting for the library. For instance, if you have it set to \u201cevery 6 hours\u201d and you start your server at 12:35, then a scan will be started around 18:35."}),"\n",(0,s.jsx)(i.h4,{id:"one-shots-directory",children:"One-Shots directory"}),"\n",(0,s.jsxs)(i.p,{children:["See ",(0,s.jsx)(i.a,{href:"/docs/guides/oneshots",children:"One-Shots"}),"."]}),"\n",(0,s.jsx)(i.h4,{id:"scan-for-these-file-types",children:"Scan for these file types"}),"\n",(0,s.jsx)(i.p,{children:"This will configure the scanner to only look for files with specific file extensions. Available types:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Comic Book archives: ",(0,s.jsx)(i.code,{children:"cbz"}),", ",(0,s.jsx)(i.code,{children:"zip"}),", ",(0,s.jsx)(i.code,{children:"cbr"}),", ",(0,s.jsx)(i.code,{children:"rar"})]}),"\n",(0,s.jsxs)(i.li,{children:["PDF: ",(0,s.jsx)(i.code,{children:"pdf"})]}),"\n",(0,s.jsxs)(i.li,{children:["Epub: ",(0,s.jsx)(i.code,{children:"epub"})]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"directory-exclusions",children:"Directory exclusions"}),"\n",(0,s.jsx)(i.p,{children:"You can specify any pattern to exclude directory subtrees from the scan."}),"\n",(0,s.jsx)(i.p,{children:"Any directory for which the full path contains any of the configured patterns will be ignored during the scan."}),"\n",(0,s.jsxs)(i.p,{children:["Patterns are checked against ",(0,s.jsx)(i.strong,{children:"any part of the directory path"}),":"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"#recycle"})," will match on:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"/data/books/Comics/#recycle"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"/data/books/Comics/My weirdly named #recycle comic"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.admonition,{type:"tip",children:(0,s.jsxs)(i.p,{children:["To match only directories starting with the provided string, prefix the pattern with ",(0,s.jsx)(i.code,{children:"/"}),", like ",(0,s.jsx)(i.code,{children:"/#recycle"})]})}),"\n",(0,s.jsx)(i.h3,{id:"options",children:"Options"}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-options.png",style:{maxHeight:"500px"},alt:"Add Library Dialog Options"}),"\n",(0,s.jsx)(i.h4,{id:"analysis",children:"Analysis"}),"\n",(0,s.jsx)(i.h5,{id:"compute-hash-for-files",children:"Compute hash for files"}),"\n",(0,s.jsx)(i.p,{children:'Komga will compute a filehash for your files. This is required for the "restore from trash bin" functionality to work, and to detect duplicate files.'}),"\n",(0,s.jsx)(i.p,{children:"This can consume lots of resources on large libraries or slow hardware."}),"\n",(0,s.jsx)(i.h5,{id:"compute-hash-for-pages",children:"Compute hash for pages"}),"\n",(0,s.jsxs)(i.p,{children:["Komga will compute a filehash for the first and last 3 pages in each book (",(0,s.jsx)(i.code,{children:"cbz"})," only). Those are used to detect duplicate pages."]}),"\n",(0,s.jsx)(i.p,{children:"This can consume lots of resources on large libraries or slow hardware."}),"\n",(0,s.jsx)(i.h5,{id:"analyze-page-dimensions",children:"Analyze page dimensions"}),"\n",(0,s.jsx)(i.p,{children:"Komga will retrieve each page's dimensions (width and height). This is useful for:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"properly displaying landscape pages in the web reader, when using double pages"}),"\n",(0,s.jsx)(i.li,{children:'comparing page dimensions in the "Import" dialog'}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"This can consume lots of resources on large libraries or slow hardware."}),"\n",(0,s.jsx)(i.h4,{id:"file-management",children:"File management"}),"\n",(0,s.jsx)(i.h5,{id:"automatically-repair-incorrect-file-extensions",children:"Automatically repair incorrect file extensions"}),"\n",(0,s.jsxs)(i.p,{children:["Files with an incorrect extension will be automatically renamed in the background. For example a ",(0,s.jsx)(i.code,{children:"zip"})," file with a ",(0,s.jsx)(i.code,{children:".cbr"})," extension will be renamed to ",(0,s.jsx)(i.code,{children:".cbz"}),"."]}),"\n",(0,s.jsx)(i.h5,{id:"automatically-convert-to-cbz",children:"Automatically convert to CBZ"}),"\n",(0,s.jsxs)(i.p,{children:["Books in ",(0,s.jsx)(i.code,{children:"rar"}),"/",(0,s.jsx)(i.code,{children:"cbr"})," format (RAR4 only) will be converted to ",(0,s.jsx)(i.code,{children:"cbz"})," automatically in the background. The ",(0,s.jsx)(i.code,{children:"zip"})," files are created with the ",(0,s.jsx)(i.code,{children:"DEFLATE"})," method without compression."]}),"\n",(0,s.jsx)(i.h4,{id:"series-cover",children:"Series cover"}),"\n",(0,s.jsx)(i.p,{children:"Choose which book cover is used for the series."}),"\n",(0,s.jsx)(i.h3,{id:"metadata",children:"Metadata"}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-metadata.png",style:{maxHeight:"600px"},alt:"Add Library Dialog Metadata"}),"\n",(0,s.jsxs)(i.p,{children:["Check the ",(0,s.jsx)(i.a,{href:"/docs/guides/scan-analysis-refresh#refresh-metadata",children:"Refresh Metadata"})," section to know more about what they do."]}),"\n",(0,s.jsx)(i.h2,{id:"edit-a-library",children:"Edit a library"}),"\n",(0,s.jsxs)(i.p,{children:["To edit a library, look for the action menu icon ",(0,s.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,s.jsx)(i.em,{children:"Edit"}),"."]}),"\n",(0,s.jsxs)(i.admonition,{type:"warning",children:[(0,s.jsxs)(i.p,{children:["If you change the root folder of a library, and ",(0,s.jsx)(i.strong,{children:"the new path doesn't share anything with the previous path"}),", you will lose all your series, books and read progress for that library."]}),(0,s.jsxs)(i.p,{children:["If you change the path ",(0,s.jsx)(i.strong,{children:"for a parent directory of the current path"}),", you will not lose your content."]}),(0,s.jsxs)(i.p,{children:["If you change the path ",(0,s.jsx)(i.strong,{children:"for a child directory of the current path"}),", you will lose part of your content."]})]}),"\n",(0,s.jsx)(i.h2,{id:"delete-a-library",children:"Delete a library"}),"\n",(0,s.jsxs)(i.p,{children:["To delete a library, look for the action menu icon ",(0,s.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,s.jsx)(i.em,{children:"Delete"}),"."]}),"\n",(0,s.jsxs)(i.admonition,{type:"danger",children:[(0,s.jsx)(i.p,{children:"Deleting a library will remove all series and books contained in this library. Read progress for all those books will be deleted."}),(0,s.jsx)(i.p,{children:"Your media files will not be affected."}),(0,s.jsx)(i.p,{children:"This cannot be undone."})]})]})}function h(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},3023:(e,i,r)=>{r.d(i,{R:()=>t,x:()=>l});var s=r(3696);const n={},a=s.createContext(n);function t(e){const i=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),s.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/55519d27.f5247e87.js b/assets/js/55519d27.f5247e87.js deleted file mode 100644 index 1b694a87..00000000 --- a/assets/js/55519d27.f5247e87.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4114],{8003:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var s=r(4246),n=r(1670);const a={},t="Libraries",l={id:"guides/libraries",title:"Libraries",description:"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.",source:"@site/docs/guides/libraries.md",sourceDirName:"guides",slug:"/guides/libraries",permalink:"/docs/guides/libraries",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/libraries.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Desktop Application",permalink:"/docs/guides/desktop"},next:{title:"Emptying Library Trash",permalink:"/docs/guides/trash"}},o={},c=[{value:"Creating libraries",id:"creating-libraries",level:2},{value:"Scanner",id:"scanner",level:3},{value:"Empty trash automatically after every scan",id:"empty-trash-automatically-after-every-scan",level:4},{value:"Force directory modified time",id:"force-directory-modified-time",level:4},{value:"Scan on startup",id:"scan-on-startup",level:4},{value:"Scan interval",id:"scan-interval",level:4},{value:"One-Shots directory",id:"one-shots-directory",level:4},{value:"Scan for these file types",id:"scan-for-these-file-types",level:4},{value:"Directory exclusions",id:"directory-exclusions",level:4},{value:"Options",id:"options",level:3},{value:"Analysis",id:"analysis",level:4},{value:"Compute hash for files",id:"compute-hash-for-files",level:5},{value:"Compute hash for pages",id:"compute-hash-for-pages",level:5},{value:"Analyze page dimensions",id:"analyze-page-dimensions",level:5},{value:"File management",id:"file-management",level:4},{value:"Automatically repair incorrect file extensions",id:"automatically-repair-incorrect-file-extensions",level:5},{value:"Automatically convert to CBZ",id:"automatically-convert-to-cbz",level:5},{value:"Series cover",id:"series-cover",level:4},{value:"Metadata",id:"metadata",level:3},{value:"Edit a library",id:"edit-a-library",level:2},{value:"Delete a library",id:"delete-a-library",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"libraries",children:"Libraries"}),"\n",(0,s.jsx)(i.p,{children:"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users."}),"\n",(0,s.jsx)(i.p,{children:"Each library has a root folder, and no library can share any part of their path."}),"\n",(0,s.jsxs)(i.p,{children:["For example if you have a library with a root path of ",(0,s.jsx)(i.code,{children:"/books/mangas"}),", you can't create a library with a root path of ",(0,s.jsx)(i.code,{children:"/books"}),", because the two root paths would overlap. You can however create a library with a root path of ",(0,s.jsx)(i.code,{children:"/books/comics"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"creating-libraries",children:"Creating libraries"}),"\n",(0,s.jsx)(i.p,{children:"From the web interface:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["click on the ",(0,s.jsx)(i.em,{children:"+"})," icon next to ",(0,s.jsx)(i.em,{children:"Libraries"})," in the sidebar ",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add.png",style:{verticalAlign:"middle",maxHeight:"32px"}})]}),"\n",(0,s.jsxs)(i.li,{children:["choose a ",(0,s.jsx)(i.em,{children:"Name"})," for your library"]}),"\n",(0,s.jsxs)(i.li,{children:["click the ",(0,s.jsx)(i.em,{children:"Browse"})," button and select a root folder containing your books"]}),"\n",(0,s.jsxs)(i.li,{children:["click ",(0,s.jsx)(i.em,{children:"Add"})]}),"\n"]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-dialog.png",style:{maxHeight:"300px"},alt:"Add Library Dialog"}),"\n",(0,s.jsx)(i.p,{children:"You can also specify extra options."}),"\n",(0,s.jsx)(i.h3,{id:"scanner",children:"Scanner"}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-scanner.png",style:{maxHeight:"400px"},alt:"Add Library Dialog Scanner"}),"\n",(0,s.jsx)(i.h4,{id:"empty-trash-automatically-after-every-scan",children:"Empty trash automatically after every scan"}),"\n",(0,s.jsxs)(i.p,{children:["See ",(0,s.jsx)(i.a,{href:"/docs/guides/trash#automatically-empty-trash",children:"Emptying library trash"}),"."]}),"\n",(0,s.jsx)(i.h4,{id:"force-directory-modified-time",children:"Force directory modified time"}),"\n",(0,s.jsx)(i.p,{children:"This will force the last modified time of a directory as the maximum from its own last modified time and the last modified time from all the books inside the directory. This should be used only if your filesystem does not update the last modified time of a directory when files inside it are modified (Google Drive for instance)."}),"\n",(0,s.jsx)(i.h4,{id:"scan-on-startup",children:"Scan on startup"}),"\n",(0,s.jsx)(i.p,{children:"If enabled, the library will be scanner when Komga starts."}),"\n",(0,s.jsx)(i.h4,{id:"scan-interval",children:"Scan interval"}),"\n",(0,s.jsx)(i.p,{children:"Choose to scan all of your libraries on a time-based interval. Choose the interval to use from the dropdown. Available frequencies:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"disabled"}),"\n",(0,s.jsx)(i.li,{children:"hourly"}),"\n",(0,s.jsx)(i.li,{children:"every 6 hours"}),"\n",(0,s.jsx)(i.li,{children:"every 12 hours"}),"\n",(0,s.jsx)(i.li,{children:"daily"}),"\n",(0,s.jsx)(i.li,{children:"weekly"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"The scan interval is based on when Komga started, or when you changed that setting for the library. For instance, if you have it set to \u201cevery 6 hours\u201d and you start your server at 12:35, then a scan will be started around 18:35."}),"\n",(0,s.jsx)(i.h4,{id:"one-shots-directory",children:"One-Shots directory"}),"\n",(0,s.jsxs)(i.p,{children:["See ",(0,s.jsx)(i.a,{href:"/docs/guides/oneshots",children:"One-Shots"}),"."]}),"\n",(0,s.jsx)(i.h4,{id:"scan-for-these-file-types",children:"Scan for these file types"}),"\n",(0,s.jsx)(i.p,{children:"This will configure the scanner to only look for files with specific file extensions. Available types:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Comic Book archives: ",(0,s.jsx)(i.code,{children:"cbz"}),", ",(0,s.jsx)(i.code,{children:"zip"}),", ",(0,s.jsx)(i.code,{children:"cbr"}),", ",(0,s.jsx)(i.code,{children:"rar"})]}),"\n",(0,s.jsxs)(i.li,{children:["PDF: ",(0,s.jsx)(i.code,{children:"pdf"})]}),"\n",(0,s.jsxs)(i.li,{children:["Epub: ",(0,s.jsx)(i.code,{children:"epub"})]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"directory-exclusions",children:"Directory exclusions"}),"\n",(0,s.jsx)(i.p,{children:"You can specify any pattern to exclude directory subtrees from the scan."}),"\n",(0,s.jsx)(i.p,{children:"Any directory for which the full path contains any of the configured patterns will be ignored during the scan."}),"\n",(0,s.jsxs)(i.p,{children:["Patterns are checked against ",(0,s.jsx)(i.strong,{children:"any part of the directory path"}),":"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.code,{children:"#recycle"})," will match on:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"/data/books/Comics/#recycle"})}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.code,{children:"/data/books/Comics/My weirdly named #recycle comic"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.admonition,{type:"tip",children:(0,s.jsxs)(i.p,{children:["To match only directories starting with the provided string, prefix the pattern with ",(0,s.jsx)(i.code,{children:"/"}),", like ",(0,s.jsx)(i.code,{children:"/#recycle"})]})}),"\n",(0,s.jsx)(i.h3,{id:"options",children:"Options"}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-options.png",style:{maxHeight:"500px"},alt:"Add Library Dialog Options"}),"\n",(0,s.jsx)(i.h4,{id:"analysis",children:"Analysis"}),"\n",(0,s.jsx)(i.h5,{id:"compute-hash-for-files",children:"Compute hash for files"}),"\n",(0,s.jsx)(i.p,{children:'Komga will compute a filehash for your files. This is required for the "restore from trash bin" functionality to work, and to detect duplicate files.'}),"\n",(0,s.jsx)(i.p,{children:"This can consume lots of resources on large libraries or slow hardware."}),"\n",(0,s.jsx)(i.h5,{id:"compute-hash-for-pages",children:"Compute hash for pages"}),"\n",(0,s.jsxs)(i.p,{children:["Komga will compute a filehash for the first and last 3 pages in each book (",(0,s.jsx)(i.code,{children:"cbz"})," only). Those are used to detect duplicate pages."]}),"\n",(0,s.jsx)(i.p,{children:"This can consume lots of resources on large libraries or slow hardware."}),"\n",(0,s.jsx)(i.h5,{id:"analyze-page-dimensions",children:"Analyze page dimensions"}),"\n",(0,s.jsx)(i.p,{children:"Komga will retrieve each page's dimensions (width and height). This is useful for:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"properly displaying landscape pages in the web reader, when using double pages"}),"\n",(0,s.jsx)(i.li,{children:'comparing page dimensions in the "Import" dialog'}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"This can consume lots of resources on large libraries or slow hardware."}),"\n",(0,s.jsx)(i.h4,{id:"file-management",children:"File management"}),"\n",(0,s.jsx)(i.h5,{id:"automatically-repair-incorrect-file-extensions",children:"Automatically repair incorrect file extensions"}),"\n",(0,s.jsxs)(i.p,{children:["Files with an incorrect extension will be automatically renamed in the background. For example a ",(0,s.jsx)(i.code,{children:"zip"})," file with a ",(0,s.jsx)(i.code,{children:".cbr"})," extension will be renamed to ",(0,s.jsx)(i.code,{children:".cbz"}),"."]}),"\n",(0,s.jsx)(i.h5,{id:"automatically-convert-to-cbz",children:"Automatically convert to CBZ"}),"\n",(0,s.jsxs)(i.p,{children:["Books in ",(0,s.jsx)(i.code,{children:"rar"}),"/",(0,s.jsx)(i.code,{children:"cbr"})," format (RAR4 only) will be converted to ",(0,s.jsx)(i.code,{children:"cbz"})," automatically in the background. The ",(0,s.jsx)(i.code,{children:"zip"})," files are created with the ",(0,s.jsx)(i.code,{children:"DEFLATE"})," method without compression."]}),"\n",(0,s.jsx)(i.h4,{id:"series-cover",children:"Series cover"}),"\n",(0,s.jsx)(i.p,{children:"Choose which book cover is used for the series."}),"\n",(0,s.jsx)(i.h3,{id:"metadata",children:"Metadata"}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/libraries/library-add-metadata.png",style:{maxHeight:"600px"},alt:"Add Library Dialog Metadata"}),"\n",(0,s.jsxs)(i.p,{children:["Check the ",(0,s.jsx)(i.a,{href:"/docs/guides/scan-analysis-refresh#refresh-metadata",children:"Refresh Metadata"})," section to know more about what they do."]}),"\n",(0,s.jsx)(i.h2,{id:"edit-a-library",children:"Edit a library"}),"\n",(0,s.jsxs)(i.p,{children:["To edit a library, look for the action menu icon ",(0,s.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,s.jsx)(i.em,{children:"Edit"}),"."]}),"\n",(0,s.jsxs)(i.admonition,{type:"warning",children:[(0,s.jsxs)(i.p,{children:["If you change the root folder of a library, and ",(0,s.jsx)(i.strong,{children:"the new path doesn't share anything with the previous path"}),", you will lose all your series, books and read progress for that library."]}),(0,s.jsxs)(i.p,{children:["If you change the path ",(0,s.jsx)(i.strong,{children:"for a parent directory of the current path"}),", you will not lose your content."]}),(0,s.jsxs)(i.p,{children:["If you change the path ",(0,s.jsx)(i.strong,{children:"for a child directory of the current path"}),", you will lose part of your content."]})]}),"\n",(0,s.jsx)(i.h2,{id:"delete-a-library",children:"Delete a library"}),"\n",(0,s.jsxs)(i.p,{children:["To delete a library, look for the action menu icon ",(0,s.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,s.jsx)(i.em,{children:"Delete"}),"."]}),"\n",(0,s.jsxs)(i.admonition,{type:"danger",children:[(0,s.jsx)(i.p,{children:"Deleting a library will remove all series and books contained in this library. Read progress for all those books will be deleted."}),(0,s.jsx)(i.p,{children:"Your media files will not be affected."}),(0,s.jsx)(i.p,{children:"This cannot be undone."})]})]})}function h(e={}){const{wrapper:i}={...(0,n.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1670:(e,i,r)=>{r.d(i,{Z:()=>l,a:()=>t});var s=r(7378);const n={},a=s.createContext(n);function t(e){const i=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),s.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5592dbb1.8e0bd0fa.js b/assets/js/5592dbb1.8e0bd0fa.js deleted file mode 100644 index c7ad4f7e..00000000 --- a/assets/js/5592dbb1.8e0bd0fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8336],{9568:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var n=i(4246),o=i(1670);const s={},r="Desktop Application",a={id:"guides/desktop",title:"Desktop Application",description:"The Desktop application runs in your menu bar / tray icon:",source:"@site/docs/guides/desktop.md",sourceDirName:"guides",slug:"/guides/desktop",permalink:"/docs/guides/desktop",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/desktop.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Accessing the web interface",permalink:"/docs/guides/webui"},next:{title:"Libraries",permalink:"/docs/guides/libraries"}},c={},l=[];function p(e){const t={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"desktop-application",children:"Desktop Application"}),"\n",(0,n.jsx)(t.p,{children:"The Desktop application runs in your menu bar / tray icon:"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/desktop/desktop-menu.png",style:{maxHeight:"200px"},alt:"Desktop application menu"}),"\n",(0,n.jsx)(t.p,{children:"From the menu you can:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Open Komga: this will open the ",(0,n.jsx)(t.a,{href:"/docs/guides/webui",children:"web interface"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Show log file: this will open a file explorer at the location of the log file."}),"\n",(0,n.jsx)(t.li,{children:"Open configuration directory: this will open a file explorer at the location of the configuration directory."}),"\n",(0,n.jsx)(t.li,{children:"Quit Komga: this will stop Komga and exit the application."}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},1670:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>r});var n=i(7378);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5592dbb1.eae84bbc.js b/assets/js/5592dbb1.eae84bbc.js new file mode 100644 index 00000000..f94a86e4 --- /dev/null +++ b/assets/js/5592dbb1.eae84bbc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4689],{8630:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var n=i(2540),o=i(3023);const s={},r="Desktop Application",a={id:"guides/desktop",title:"Desktop Application",description:"The Desktop application runs in your menu bar / tray icon:",source:"@site/docs/guides/desktop.md",sourceDirName:"guides",slug:"/guides/desktop",permalink:"/docs/guides/desktop",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/desktop.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Accessing the web interface",permalink:"/docs/guides/webui"},next:{title:"Libraries",permalink:"/docs/guides/libraries"}},c={},l=[];function p(e){const t={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"desktop-application",children:"Desktop Application"}),"\n",(0,n.jsx)(t.p,{children:"The Desktop application runs in your menu bar / tray icon:"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/desktop/desktop-menu.png",style:{maxHeight:"200px"},alt:"Desktop application menu"}),"\n",(0,n.jsx)(t.p,{children:"From the menu you can:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Open Komga: this will open the ",(0,n.jsx)(t.a,{href:"/docs/guides/webui",children:"web interface"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Show log file: this will open a file explorer at the location of the log file."}),"\n",(0,n.jsx)(t.li,{children:"Open configuration directory: this will open a file explorer at the location of the configuration directory."}),"\n",(0,n.jsx)(t.li,{children:"Quit Komga: this will stop Komga and exit the application."}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},3023:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>a});var n=i(3696);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3041.39dc021e.js b/assets/js/5882.90e8489b.js similarity index 99% rename from assets/js/3041.39dc021e.js rename to assets/js/5882.90e8489b.js index fd0782ae..8854f23e 100644 --- a/assets/js/3041.39dc021e.js +++ b/assets/js/5882.90e8489b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3041],{3041:(e,t,r)=>{function n(e,t){var r=void 0;return function(){for(var n=arguments.length,o=new Array(n),i=0;i pn});var a=function(){};function c(e){var t=e.item,r=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,c=[],l=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(s){u=!0,o=s}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t =3||2===r&&n>=4||1===r&&n>=10);function i(t,r,n){if(o&&void 0!==n){var i=n[0].__autocomplete_algoliaCredentials,a={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(p(r),[{headers:a}]))}else e.apply(void 0,[t].concat(p(r)))}return{init:function(t,r){e("init",{appId:t,apiKey:r})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("clickedObjectIDsAfterSearch",g(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("clickedObjectIDs",g(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n 0&&e.apply(void 0,["clickedFilters"].concat(r))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("convertedObjectIDsAfterSearch",g(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("convertedObjectIDs",g(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n 0&&e.apply(void 0,["convertedFilters"].concat(r))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&t.reduce((function(e,t){var r=t.items,n=d(t,f);return[].concat(p(e),p(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,r=[],n=0;n 0&&e.apply(void 0,["viewedFilters"].concat(r))}}}function S(e){var t=e.items.reduce((function(e,t){var r;return e[t.__autocomplete_indexName]=(null!==(r=e[t.__autocomplete_indexName])&&void 0!==r?r:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function j(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function E(e){return function(e){if(Array.isArray(e))return P(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return P(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return P(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r 0&&C({onItemsChange:o,items:r,insights:f,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,r=e.onSelect,n=e.onActive;s("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:f}}),r((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&l({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Selected"},c({item:t,items:m.current}))]})})),n((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&u({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Active"},c({item:t,items:m.current}))]})}))},onStateChange:function(e){var t=e.state;p({state:t})},__autocomplete_pluginOptions:e}}function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function q(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==_(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function R(e,t,r){var n,o=t.initialState;return{getState:function(){return o},dispatch:function(n,i){var a=function(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r 0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(V++),plugins:o,initialState:X({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(Q(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:a,onResolve:a};Object.keys(t).forEach((function(e){t[e].__default=!0}));var n=$($({},t),e);return Promise.resolve(n)})))}))}(e,r)}))).then((function(e){return L(e)})).then((function(e){return e.map((function(e){return X(X({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))},onResolve:function(r){e.onResolve(r),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:X({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}function re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ne(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ie,De,Ae,ke=null,xe=(Ie=-1,De=-1,Ae=void 0,function(e){var t=++Ie;return Promise.resolve(e).then((function(e){return Ae&&t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function He(e){return He="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},He(e)}var Fe=["props","refresh","store"],Ue=["inputElement","formElement","panelElement"],Be=["inputElement"],Ve=["inputElement","maxLength"],Ke=["sourceIndex"],$e=["sourceIndex"],Je=["item","source","sourceIndex"];function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function We(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ge(e){var t=e.props,r=e.refresh,n=e.store,o=Ze(e,Fe),i=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,i=e.panelElement;function a(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,i].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return We({onTouchStart:a,onMouseDown:a,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},Ze(e,Ue))},getRootProps:function(e){return We({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return We({action:"",noValidate:!0,role:"search",onSubmit:function(i){var a;i.preventDefault(),t.onSubmit(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(a=e.inputElement)||void 0===a||a.blur()},onReset:function(i){var a;i.preventDefault(),t.onReset(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(a=e.inputElement)||void 0===a||a.focus()}},Ze(e,Be))},getLabelProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,Ke);return We({htmlFor:"".concat(i(t.id,n),"-input"),id:"".concat(i(t.id,n),"-label")},o)},getInputProps:function(e){var i;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&Ce(We({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var l=e||{},u=(l.inputElement,l.maxLength),s=void 0===u?512:u,f=Ze(l,Ve),m=ge(n.getState()),p=function(e){return Boolean(e&&e.match(Me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),v=null!=m&&m.itemUrl&&!p?"go":"search";return We({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:s,type:"search",onChange:function(e){Ce(We({event:e,props:t,query:e.currentTarget.value.slice(0,s),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,i=Le(e,_e);if("ArrowUp"===t.key||"ArrowDown"===t.key){var a=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},c=function(){var e=ge(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,a=e.itemInputValue,c=e.itemUrl,l=e.source;l.onActive(qe({event:t,item:r,itemInputValue:a,itemUrl:c,refresh:n,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?Ce(qe({event:t,props:r,query:o.getState().query,refresh:n,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),c(),setTimeout(a,0)})):(o.dispatch(t.key,{}),c(),a())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=ge(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});Ce(qe({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},i)).then((function(){m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i))}))}}}(We({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:a,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},f)},getPanelProps:function(e){return We({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,$e);return We({role:"listbox","aria-labelledby":"".concat(i(t.id,n),"-label"),id:"".concat(i(t.id,n),"-list")},o)},getItemProps:function(e){var a=e.item,c=e.source,l=e.sourceIndex,u=Ze(e,Je);return We({id:"".concat(i(t.id,l),"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=ge(n.getState());if(null!==n.getState().activeItemId&&t){var i=t.item,c=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(We({event:e,item:i,itemInputValue:c,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():Ce(We({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(We({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},u)}}}var Xe=[{segment:"autocomplete-core",version:"1.9.3"}];function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t =r?null===n?null:0:o}function at(e){return at="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},at(e)}function ct(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function lt(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){var t=e.translations,r=void 0===t?{}:t,n=At(e,Pt),o=r.noResultsText,i=void 0===o?"No results for":o,a=r.suggestedQueryText,c=void 0===a?"Try searching for":a,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return yt.createElement("div",{className:"DocSearch-NoResults"},yt.createElement("div",{className:"DocSearch-Screen-Icon"},yt.createElement(Et,null)),yt.createElement("p",{className:"DocSearch-Title"},i,' "',yt.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&yt.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},yt.createElement("p",{className:"DocSearch-Help"},c,":"),yt.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(It(e),[yt.createElement("li",{key:t},yt.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&yt.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),yt.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var xt=function(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ct(e){switch(e.type){case"lvl1":return yt.createElement(xt,null);case"content":return yt.createElement(_t,null);default:return yt.createElement(Nt,null)}}function Nt(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function _t(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Tt(){return yt.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},yt.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),yt.createElement("path",{d:"M8 17l-6-6 6-6"})))}var qt=["hit","attribute","tagName"];function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Lt(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ft(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ut(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,i=Ht(e,qt);return(0,yt.createElement)(o,Lt(Lt({},i),{},{dangerouslySetInnerHTML:{__html:Ft(t,"_snippetResult.".concat(r,".value"))||Ft(t,r)}}))}function Bt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,i=[],a=!0,c=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(l){c=!0,o=l}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Vt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Vt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r |<\/mark>)/g,Wt=RegExp(zt.source);function Qt(e){var t,r,n=e;if(!n.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((n.__docsearch_parent?null===(t=n.__docsearch_parent)||void 0===t||null===(t=t._highlightResult)||void 0===t||null===(t=t.hierarchy)||void 0===t?void 0:t.lvl0:null===(r=e._highlightResult)||void 0===r||null===(r=r.hierarchy)||void 0===r?void 0:r.lvl0)||{}).value;return o&&Wt.test(o)?o.replace(zt,""):o}function Zt(){return Zt=Object.assign||function(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function or(e){var t=e.translations,r=void 0===t?{}:t,n=nr(e,tr),o=r.recentSearchesTitle,i=void 0===o?"Recent":o,a=r.noRecentSearchesText,c=void 0===a?"No recent searches":a,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,v=r.removeFavoriteSearchButtonTitle,d=void 0===v?"Remove this search from favorites":v;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:yt.createElement("div",{className:"DocSearch-StartScreen"},yt.createElement("p",{className:"DocSearch-Help"},c)):!1===n.hasCollections?null:yt.createElement("div",{className:"DocSearch-Dropdown-Container"},yt.createElement($t,rr({},n,{title:i,collection:n.state.collections[0],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Xt,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return yt.createElement(yt.Fragment,null,yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(Yt,null))),yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(er,null))))}})),yt.createElement($t,rr({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Yt,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},yt.createElement(er,null)))}})))}var ir=["translations"];function ar(){return ar=Object.assign||function(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var lr=yt.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=cr(e,ir);if("error"===n.state.status)return yt.createElement(wt,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?yt.createElement(kt,ar({},n,{translations:null==r?void 0:r.noResultsScreen})):yt.createElement(Gt,n):yt.createElement(or,ar({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function ur(){return yt.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},yt.createElement("g",{fill:"none",fillRule:"evenodd"},yt.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},yt.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),yt.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},yt.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var sr=r(6573),fr=["translations"];function mr(){return mr=Object.assign||function(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vr(e){var t=e.translations,r=void 0===t?{}:t,n=pr(e,fr),o=r.resetButtonTitle,i=void 0===o?"Clear the query":o,a=r.resetButtonAriaLabel,c=void 0===a?"Clear the query":a,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return yt.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),yt.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),yt.createElement(yt.Fragment,null,yt.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},yt.createElement("label",mr({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),yt.createElement(sr.W,null)),yt.createElement("div",{className:"DocSearch-LoadingIndicator"},yt.createElement(ur,null)),yt.createElement("input",mr({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:ht}))),yt.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!n.state.query},yt.createElement(er,null))),yt.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var dr=["_highlightResult","_snippetResult"];function yr(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hr(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function br(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=hr(t),i=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,yr(t,dr)),a=i.findIndex((function(e){return e.objectID===r.objectID}));a>-1&&i.splice(a,1),i.unshift(r),i=i.slice(0,n),o.setItem(i)},remove:function(e){i=i.filter((function(t){return t.objectID!==e.objectID})),o.setItem(i)},getAll:function(){return i}}}function gr(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}"),i=e=>{n().setItem(t,JSON.stringify(e))};return{get:(t,r,n={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{(()=>{const t=e.timeToLive?1e3*e.timeToLive:null,r=o(),n=Object.fromEntries(Object.entries(r).filter((([,e])=>void 0!==e.timestamp)));if(i(n),!t)return;const a=Object.fromEntries(Object.entries(n).filter((([,e])=>{const r=(new Date).getTime();return!(e.timestamp+t Promise.all([e?e.value:r(),void 0!==e]))).then((([e,t])=>Promise.all([e,t||n.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const i=o();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:r},n().setItem(t,JSON.stringify(i)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Or(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Or({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Or({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Or({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Or({caches:t}).clear()))}}function Sr(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const i=JSON.stringify(r);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);const a=n(),c=o&&o.miss||(()=>Promise.resolve());return a.then((e=>c(e))).then((()=>a))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function jr(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function wr(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Er(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Pr="4.22.1",Ir={WithinQueryParameters:0,WithinHeaders:1};function Dr(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ar={Read:1,Write:2,Any:3},kr={Up:1,Down:2,Timeouted:3},xr=12e4;function Cr(e,t=kr.Up){return{...e,status:t,lastUpdate:Date.now()}}function Nr(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ar.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ar.Any}}const _r={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};function Tr(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Cr(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===kr.Up||Date.now()-e.lastUpdate>xr}(e))),n=e.filter((e=>function(e){return e.status===kr.Timeouted&&Date.now()-e.lastUpdate<=xr}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Nr(e))):t}}))}const qr=(e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e);function Rr(e,t,r,n){const o=[],i=function(e,t){if(e.method===_r.Get||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),a=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),c=r.method,l=r.method!==_r.Get?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Fr(o)};const p={data:i,headers:a,method:c,url:Mr(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},v=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},d={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=v(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",Ur(n)),e.hostsCache.set(m,Cr(m,r.isTimedOut?kr.Timeouted:kr.Down))]).then((()=>f(t,l)))},onFail(e){throw v(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,Fr(o))}};return e.requester.send(p).then((e=>qr(e,d)))};return Tr(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Lr(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Mr(e,t,r){const n=Hr(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Hr(e){return Object.keys(e).map((t=>{return Er("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function Fr(e){return e.map((e=>Ur(e)))}function Ur(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const Br=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Ir.WithinHeaders?n:{},queryParameters:()=>e===Ir.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Ir.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,headers:s,queryParameters:u,hosts:l.map((e=>Nr(e))),read(e,t){const r=Dr(t,f.timeouts.read),n=()=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Write))),e,Dr(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ar.Read},{url:`${t}.algolia.net`,accept:Ar.Write}].concat(jr([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return wr(o,e.methods)},Vr=e=>(t,r)=>t.method===_r.Get?e.transporter.read(t,r):e.transporter.write(t,r),Kr=e=>(t,r={})=>wr({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),$r=e=>(t,r)=>{const n=t.map((e=>({...e,params:Hr(e.params||{})})));return e.transporter.read({method:_r.Post,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},Jr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...i}=t.params;return Kr(e)(t.indexName,{methods:{searchForFacetValues:Qr}}).searchForFacetValues(n,o,{...r,...i})}))),zr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),Wr=e=>(t,r)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),Qr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),Zr={Debug:1,Info:2,Error:3};function Gr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let i;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===i&&(clearTimeout(o),i=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(i),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(i),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=Zr.Error,{debug:(e,t)=>(Zr.Debug>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(Zr.Info>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Sr(),requestsCache:Sr({serializable:!1}),hostsCache:Or({caches:[gr({key:`${Pr}-${e}`}),Sr()]}),userAgent:Lr(Pr).add({segment:"Browser",version:"lite"}),authMode:Ir.WithinQueryParameters};var o;return Br({...n,...r,methods:{search:$r,searchForFacetValues:Jr,multipleQueries:$r,multipleSearchForFacetValues:Jr,customRequest:Vr,initIndex:e=>t=>Kr(e)(t,{methods:{search:Wr,searchForFacetValues:Qr,findAnswers:zr}})}})}Gr.version=Pr;const Xr=Gr;var Yr="3.5.2";function en(){}function tn(e){return e}function rn(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function nn(e,t,r){return e.reduce((function(e,n){var o=t(n);return e.hasOwnProperty(o)||(e[o]=[]),e[o].length<(r||5)&&e[o].push(n),e}),{})}var on=["footer","searchBox"];function an(){return an=Object.assign||function(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pn(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,i=void 0===o?"Search docs":o,a=e.searchParameters,c=e.maxResultsPerGroup,l=e.onClose,u=void 0===l?en:l,s=e.transformItems,f=void 0===s?tn:s,m=e.hitComponent,p=void 0===m?St:m,v=e.resultsFooterComponent,d=void 0===v?function(){return null}:v,y=e.navigator,h=e.initialScrollY,b=void 0===h?0:h,g=e.transformSearchClient,O=void 0===g?tn:g,S=e.disableUserPersonalization,j=void 0!==S&&S,w=e.initialQuery,E=void 0===w?"":w,P=e.translations,I=void 0===P?{}:P,D=e.getMissingResultsUrl,A=e.insights,k=void 0!==A&&A,x=I.footer,C=I.searchBox,N=mn(I,on),_=sn(yt.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),T=_[0],q=_[1],R=yt.useRef(null),L=yt.useRef(null),M=yt.useRef(null),H=yt.useRef(null),F=yt.useRef(null),U=yt.useRef(10),B=yt.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,ht):"").current,V=yt.useRef(E||B).current,K=function(e,t,r){return yt.useMemo((function(){var n=Xr(e,t);return n.addAlgoliaAgent("docsearch",Yr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",Yr),r(n)}),[e,t,r])}(t,r,O),$=yt.useRef(br({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,J=yt.useRef(br({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===$.getAll().length?7:4})).current,z=yt.useCallback((function(e){if(!j){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===$.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&J.add(t)}}),[$,J,j]),W=yt.useCallback((function(e){if(T.context.algoliaInsightsPlugin&&e.__autocomplete_id){var t=e,r={eventName:"Item Selected",index:t.__autocomplete_indexName,items:[t],positions:[e.__autocomplete_id],queryID:t.__autocomplete_queryID};T.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(r)}}),[T.context.algoliaInsightsPlugin]),Q=yt.useMemo((function(){return dt({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:V,context:{searchSuggestions:[]}},insights:k,navigator:y,onStateChange:function(e){q(e.state)},getSources:function(e){var o=e.query,i=e.state,l=e.setContext,s=e.setStatus;if(!o)return j?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return J.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return $.getAll()}}];var m=Boolean(k);return K.search([{query:o,indexName:n,params:ln({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(U.current),"hierarchy.lvl2:".concat(U.current),"hierarchy.lvl3:".concat(U.current),"hierarchy.lvl4:".concat(U.current),"hierarchy.lvl5:".concat(U.current),"hierarchy.lvl6:".concat(U.current),"content:".concat(U.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:m},a)}]).catch((function(e){throw"RetryError"===e.name&&s("error"),e})).then((function(e){var o=e.results[0],a=o.hits,s=o.nbHits,p=nn(a,(function(e){return Qt(e)}),c);i.context.searchSuggestions.length 0&&(X(),F.current&&F.current.focus())}),[V,X]),yt.useEffect((function(){function e(){if(L.current){var e=.01*window.innerHeight;L.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),yt.createElement("div",an({ref:R},G({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===T.status&&"DocSearch-Container--Stalled","error"===T.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&u()}}),yt.createElement("div",{className:"DocSearch-Modal",ref:L},yt.createElement("header",{className:"DocSearch-SearchBar",ref:M},yt.createElement(vr,an({},Q,{state:T,autoFocus:0===V.length,inputRef:F,isFromSelection:Boolean(V)&&V===B,translations:C,onClose:u}))),yt.createElement("div",{className:"DocSearch-Dropdown",ref:H},yt.createElement(lr,an({},Q,{indexName:n,state:T,hitComponent:p,resultsFooterComponent:d,disableUserPersonalization:j,recentSearches:J,favoriteSearches:$,inputRef:F,translations:N,getMissingResultsUrl:D,onItemClick:function(e,t){W(e),z(e),rn(t)||u()}}))),yt.createElement("footer",{className:"DocSearch-Footer"},yt.createElement(Ot,{translations:x}))))}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5882],{5882:(e,t,r)=>{function n(e,t){var r=void 0;return function(){for(var n=arguments.length,o=new Array(n),i=0;i pn});var a=function(){};function c(e){var t=e.item,r=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,c=[],l=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(s){u=!0,o=s}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t =3||2===r&&n>=4||1===r&&n>=10);function i(t,r,n){if(o&&void 0!==n){var i=n[0].__autocomplete_algoliaCredentials,a={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(p(r),[{headers:a}]))}else e.apply(void 0,[t].concat(p(r)))}return{init:function(t,r){e("init",{appId:t,apiKey:r})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("clickedObjectIDsAfterSearch",g(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("clickedObjectIDs",g(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n 0&&e.apply(void 0,["clickedFilters"].concat(r))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("convertedObjectIDsAfterSearch",g(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&i("convertedObjectIDs",g(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n 0&&e.apply(void 0,["convertedFilters"].concat(r))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&t.reduce((function(e,t){var r=t.items,n=d(t,f);return[].concat(p(e),p(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,r=[],n=0;n 0&&e.apply(void 0,["viewedFilters"].concat(r))}}}function S(e){var t=e.items.reduce((function(e,t){var r;return e[t.__autocomplete_indexName]=(null!==(r=e[t.__autocomplete_indexName])&&void 0!==r?r:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function j(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function E(e){return function(e){if(Array.isArray(e))return P(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return P(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return P(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r 0&&C({onItemsChange:o,items:r,insights:f,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,r=e.onSelect,n=e.onActive;s("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:f}}),r((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&l({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Selected"},c({item:t,items:m.current}))]})})),n((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&u({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Active"},c({item:t,items:m.current}))]})}))},onStateChange:function(e){var t=e.state;p({state:t})},__autocomplete_pluginOptions:e}}function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function q(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==_(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function R(e,t,r){var n,o=t.initialState;return{getState:function(){return o},dispatch:function(n,i){var a=function(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r 0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(V++),plugins:o,initialState:X({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(Q(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:a,onResolve:a};Object.keys(t).forEach((function(e){t[e].__default=!0}));var n=$($({},t),e);return Promise.resolve(n)})))}))}(e,r)}))).then((function(e){return L(e)})).then((function(e){return e.map((function(e){return X(X({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))},onResolve:function(r){e.onResolve(r),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:X({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}function re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ne(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ie,De,Ae,ke=null,xe=(Ie=-1,De=-1,Ae=void 0,function(e){var t=++Ie;return Promise.resolve(e).then((function(e){return Ae&&t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function He(e){return He="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},He(e)}var Fe=["props","refresh","store"],Ue=["inputElement","formElement","panelElement"],Be=["inputElement"],Ve=["inputElement","maxLength"],Ke=["sourceIndex"],$e=["sourceIndex"],Je=["item","source","sourceIndex"];function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function We(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ge(e){var t=e.props,r=e.refresh,n=e.store,o=Ze(e,Fe),i=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,i=e.panelElement;function a(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,i].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return We({onTouchStart:a,onMouseDown:a,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},Ze(e,Ue))},getRootProps:function(e){return We({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return We({action:"",noValidate:!0,role:"search",onSubmit:function(i){var a;i.preventDefault(),t.onSubmit(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(a=e.inputElement)||void 0===a||a.blur()},onReset:function(i){var a;i.preventDefault(),t.onReset(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(a=e.inputElement)||void 0===a||a.focus()}},Ze(e,Be))},getLabelProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,Ke);return We({htmlFor:"".concat(i(t.id,n),"-input"),id:"".concat(i(t.id,n),"-label")},o)},getInputProps:function(e){var i;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&Ce(We({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var l=e||{},u=(l.inputElement,l.maxLength),s=void 0===u?512:u,f=Ze(l,Ve),m=ge(n.getState()),p=function(e){return Boolean(e&&e.match(Me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),v=null!=m&&m.itemUrl&&!p?"go":"search";return We({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:s,type:"search",onChange:function(e){Ce(We({event:e,props:t,query:e.currentTarget.value.slice(0,s),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,i=Le(e,_e);if("ArrowUp"===t.key||"ArrowDown"===t.key){var a=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},c=function(){var e=ge(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,a=e.itemInputValue,c=e.itemUrl,l=e.source;l.onActive(qe({event:t,item:r,itemInputValue:a,itemUrl:c,refresh:n,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?Ce(qe({event:t,props:r,query:o.getState().query,refresh:n,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),c(),setTimeout(a,0)})):(o.dispatch(t.key,{}),c(),a())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=ge(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});Ce(qe({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},i)).then((function(){m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i))}))}}}(We({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:a,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},f)},getPanelProps:function(e){return We({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,$e);return We({role:"listbox","aria-labelledby":"".concat(i(t.id,n),"-label"),id:"".concat(i(t.id,n),"-list")},o)},getItemProps:function(e){var a=e.item,c=e.source,l=e.sourceIndex,u=Ze(e,Je);return We({id:"".concat(i(t.id,l),"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=ge(n.getState());if(null!==n.getState().activeItemId&&t){var i=t.item,c=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(We({event:e,item:i,itemInputValue:c,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():Ce(We({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(We({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},u)}}}var Xe=[{segment:"autocomplete-core",version:"1.9.3"}];function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t =r?null===n?null:0:o}function at(e){return at="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},at(e)}function ct(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function lt(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){var t=e.translations,r=void 0===t?{}:t,n=At(e,Pt),o=r.noResultsText,i=void 0===o?"No results for":o,a=r.suggestedQueryText,c=void 0===a?"Try searching for":a,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return yt.createElement("div",{className:"DocSearch-NoResults"},yt.createElement("div",{className:"DocSearch-Screen-Icon"},yt.createElement(Et,null)),yt.createElement("p",{className:"DocSearch-Title"},i,' "',yt.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&yt.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},yt.createElement("p",{className:"DocSearch-Help"},c,":"),yt.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(It(e),[yt.createElement("li",{key:t},yt.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&yt.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),yt.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var xt=function(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ct(e){switch(e.type){case"lvl1":return yt.createElement(xt,null);case"content":return yt.createElement(_t,null);default:return yt.createElement(Nt,null)}}function Nt(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function _t(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Tt(){return yt.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},yt.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),yt.createElement("path",{d:"M8 17l-6-6 6-6"})))}var qt=["hit","attribute","tagName"];function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Lt(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ft(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ut(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,i=Ht(e,qt);return(0,yt.createElement)(o,Lt(Lt({},i),{},{dangerouslySetInnerHTML:{__html:Ft(t,"_snippetResult.".concat(r,".value"))||Ft(t,r)}}))}function Bt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,i=[],a=!0,c=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(l){c=!0,o=l}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Vt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Vt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r |<\/mark>)/g,Wt=RegExp(zt.source);function Qt(e){var t,r,n=e;if(!n.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((n.__docsearch_parent?null===(t=n.__docsearch_parent)||void 0===t||null===(t=t._highlightResult)||void 0===t||null===(t=t.hierarchy)||void 0===t?void 0:t.lvl0:null===(r=e._highlightResult)||void 0===r||null===(r=r.hierarchy)||void 0===r?void 0:r.lvl0)||{}).value;return o&&Wt.test(o)?o.replace(zt,""):o}function Zt(){return Zt=Object.assign||function(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function or(e){var t=e.translations,r=void 0===t?{}:t,n=nr(e,tr),o=r.recentSearchesTitle,i=void 0===o?"Recent":o,a=r.noRecentSearchesText,c=void 0===a?"No recent searches":a,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,v=r.removeFavoriteSearchButtonTitle,d=void 0===v?"Remove this search from favorites":v;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:yt.createElement("div",{className:"DocSearch-StartScreen"},yt.createElement("p",{className:"DocSearch-Help"},c)):!1===n.hasCollections?null:yt.createElement("div",{className:"DocSearch-Dropdown-Container"},yt.createElement($t,rr({},n,{title:i,collection:n.state.collections[0],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Xt,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return yt.createElement(yt.Fragment,null,yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(Yt,null))),yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(er,null))))}})),yt.createElement($t,rr({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Yt,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},yt.createElement(er,null)))}})))}var ir=["translations"];function ar(){return ar=Object.assign||function(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var lr=yt.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=cr(e,ir);if("error"===n.state.status)return yt.createElement(wt,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?yt.createElement(kt,ar({},n,{translations:null==r?void 0:r.noResultsScreen})):yt.createElement(Gt,n):yt.createElement(or,ar({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function ur(){return yt.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},yt.createElement("g",{fill:"none",fillRule:"evenodd"},yt.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},yt.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),yt.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},yt.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var sr=r(8536),fr=["translations"];function mr(){return mr=Object.assign||function(e){for(var t=1;t =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vr(e){var t=e.translations,r=void 0===t?{}:t,n=pr(e,fr),o=r.resetButtonTitle,i=void 0===o?"Clear the query":o,a=r.resetButtonAriaLabel,c=void 0===a?"Clear the query":a,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=n.getFormProps({inputElement:n.inputRef.current}).onReset;return yt.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),yt.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),yt.createElement(yt.Fragment,null,yt.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:m},yt.createElement("label",mr({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),yt.createElement(sr.W,null)),yt.createElement("div",{className:"DocSearch-LoadingIndicator"},yt.createElement(ur,null)),yt.createElement("input",mr({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:ht}))),yt.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!n.state.query},yt.createElement(er,null))),yt.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var dr=["_highlightResult","_snippetResult"];function yr(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hr(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function br(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=hr(t),i=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,yr(t,dr)),a=i.findIndex((function(e){return e.objectID===r.objectID}));a>-1&&i.splice(a,1),i.unshift(r),i=i.slice(0,n),o.setItem(i)},remove:function(e){i=i.filter((function(t){return t.objectID!==e.objectID})),o.setItem(i)},getAll:function(){return i}}}function gr(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}"),i=e=>{n().setItem(t,JSON.stringify(e))};return{get:(t,r,n={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{(()=>{const t=e.timeToLive?1e3*e.timeToLive:null,r=o(),n=Object.fromEntries(Object.entries(r).filter((([,e])=>void 0!==e.timestamp)));if(i(n),!t)return;const a=Object.fromEntries(Object.entries(n).filter((([,e])=>{const r=(new Date).getTime();return!(e.timestamp+t Promise.all([e?e.value:r(),void 0!==e]))).then((([e,t])=>Promise.all([e,t||n.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const i=o();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:r},n().setItem(t,JSON.stringify(i)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Or(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Or({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Or({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Or({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Or({caches:t}).clear()))}}function Sr(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const i=JSON.stringify(r);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);const a=n(),c=o&&o.miss||(()=>Promise.resolve());return a.then((e=>c(e))).then((()=>a))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function jr(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function wr(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Er(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Pr="4.22.1",Ir={WithinQueryParameters:0,WithinHeaders:1};function Dr(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ar={Read:1,Write:2,Any:3},kr={Up:1,Down:2,Timeouted:3},xr=12e4;function Cr(e,t=kr.Up){return{...e,status:t,lastUpdate:Date.now()}}function Nr(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ar.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ar.Any}}const _r={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};function Tr(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Cr(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===kr.Up||Date.now()-e.lastUpdate>xr}(e))),n=e.filter((e=>function(e){return e.status===kr.Timeouted&&Date.now()-e.lastUpdate<=xr}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Nr(e))):t}}))}const qr=(e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e);function Rr(e,t,r,n){const o=[],i=function(e,t){if(e.method===_r.Get||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),a=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),c=r.method,l=r.method!==_r.Get?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Fr(o)};const p={data:i,headers:a,method:c,url:Mr(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},v=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},d={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=v(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",Ur(n)),e.hostsCache.set(m,Cr(m,r.isTimedOut?kr.Timeouted:kr.Down))]).then((()=>f(t,l)))},onFail(e){throw v(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,Fr(o))}};return e.requester.send(p).then((e=>qr(e,d)))};return Tr(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Lr(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Mr(e,t,r){const n=Hr(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Hr(e){return Object.keys(e).map((t=>{return Er("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function Fr(e){return e.map((e=>Ur(e)))}function Ur(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const Br=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Ir.WithinHeaders?n:{},queryParameters:()=>e===Ir.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Ir.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,headers:s,queryParameters:u,hosts:l.map((e=>Nr(e))),read(e,t){const r=Dr(t,f.timeouts.read),n=()=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Write))),e,Dr(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ar.Read},{url:`${t}.algolia.net`,accept:Ar.Write}].concat(jr([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return wr(o,e.methods)},Vr=e=>(t,r)=>t.method===_r.Get?e.transporter.read(t,r):e.transporter.write(t,r),Kr=e=>(t,r={})=>wr({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),$r=e=>(t,r)=>{const n=t.map((e=>({...e,params:Hr(e.params||{})})));return e.transporter.read({method:_r.Post,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},Jr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...i}=t.params;return Kr(e)(t.indexName,{methods:{searchForFacetValues:Qr}}).searchForFacetValues(n,o,{...r,...i})}))),zr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),Wr=e=>(t,r)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),Qr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),Zr={Debug:1,Info:2,Error:3};function Gr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let i;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===i&&(clearTimeout(o),i=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(i),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(i),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=Zr.Error,{debug:(e,t)=>(Zr.Debug>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(Zr.Info>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Sr(),requestsCache:Sr({serializable:!1}),hostsCache:Or({caches:[gr({key:`${Pr}-${e}`}),Sr()]}),userAgent:Lr(Pr).add({segment:"Browser",version:"lite"}),authMode:Ir.WithinQueryParameters};var o;return Br({...n,...r,methods:{search:$r,searchForFacetValues:Jr,multipleQueries:$r,multipleSearchForFacetValues:Jr,customRequest:Vr,initIndex:e=>t=>Kr(e)(t,{methods:{search:Wr,searchForFacetValues:Qr,findAnswers:zr}})}})}Gr.version=Pr;const Xr=Gr;var Yr="3.5.2";function en(){}function tn(e){return e}function rn(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function nn(e,t,r){return e.reduce((function(e,n){var o=t(n);return e.hasOwnProperty(o)||(e[o]=[]),e[o].length<(r||5)&&e[o].push(n),e}),{})}var on=["footer","searchBox"];function an(){return an=Object.assign||function(e){for(var t=1;t e.length)&&(t=e.length);for(var r=0,n=new Array(t);r =0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n =0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function pn(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,i=void 0===o?"Search docs":o,a=e.searchParameters,c=e.maxResultsPerGroup,l=e.onClose,u=void 0===l?en:l,s=e.transformItems,f=void 0===s?tn:s,m=e.hitComponent,p=void 0===m?St:m,v=e.resultsFooterComponent,d=void 0===v?function(){return null}:v,y=e.navigator,h=e.initialScrollY,b=void 0===h?0:h,g=e.transformSearchClient,O=void 0===g?tn:g,S=e.disableUserPersonalization,j=void 0!==S&&S,w=e.initialQuery,E=void 0===w?"":w,P=e.translations,I=void 0===P?{}:P,D=e.getMissingResultsUrl,A=e.insights,k=void 0!==A&&A,x=I.footer,C=I.searchBox,N=mn(I,on),_=sn(yt.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),T=_[0],q=_[1],R=yt.useRef(null),L=yt.useRef(null),M=yt.useRef(null),H=yt.useRef(null),F=yt.useRef(null),U=yt.useRef(10),B=yt.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,ht):"").current,V=yt.useRef(E||B).current,K=function(e,t,r){return yt.useMemo((function(){var n=Xr(e,t);return n.addAlgoliaAgent("docsearch",Yr),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",Yr),r(n)}),[e,t,r])}(t,r,O),$=yt.useRef(br({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,J=yt.useRef(br({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===$.getAll().length?7:4})).current,z=yt.useCallback((function(e){if(!j){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===$.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&J.add(t)}}),[$,J,j]),W=yt.useCallback((function(e){if(T.context.algoliaInsightsPlugin&&e.__autocomplete_id){var t=e,r={eventName:"Item Selected",index:t.__autocomplete_indexName,items:[t],positions:[e.__autocomplete_id],queryID:t.__autocomplete_queryID};T.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(r)}}),[T.context.algoliaInsightsPlugin]),Q=yt.useMemo((function(){return dt({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:V,context:{searchSuggestions:[]}},insights:k,navigator:y,onStateChange:function(e){q(e.state)},getSources:function(e){var o=e.query,i=e.state,l=e.setContext,s=e.setStatus;if(!o)return j?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return J.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),rn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return $.getAll()}}];var m=Boolean(k);return K.search([{query:o,indexName:n,params:ln({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(U.current),"hierarchy.lvl2:".concat(U.current),"hierarchy.lvl3:".concat(U.current),"hierarchy.lvl4:".concat(U.current),"hierarchy.lvl5:".concat(U.current),"hierarchy.lvl6:".concat(U.current),"content:".concat(U.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:m},a)}]).catch((function(e){throw"RetryError"===e.name&&s("error"),e})).then((function(e){var o=e.results[0],a=o.hits,s=o.nbHits,p=nn(a,(function(e){return Qt(e)}),c);i.context.searchSuggestions.length 0&&(X(),F.current&&F.current.focus())}),[V,X]),yt.useEffect((function(){function e(){if(L.current){var e=.01*window.innerHeight;L.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),yt.createElement("div",an({ref:R},G({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===T.status&&"DocSearch-Container--Stalled","error"===T.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&u()}}),yt.createElement("div",{className:"DocSearch-Modal",ref:L},yt.createElement("header",{className:"DocSearch-SearchBar",ref:M},yt.createElement(vr,an({},Q,{state:T,autoFocus:0===V.length,inputRef:F,isFromSelection:Boolean(V)&&V===B,translations:C,onClose:u}))),yt.createElement("div",{className:"DocSearch-Dropdown",ref:H},yt.createElement(lr,an({},Q,{indexName:n,state:T,hitComponent:p,resultsFooterComponent:d,disableUserPersonalization:j,recentSearches:J,favoriteSearches:$,inputRef:F,translations:N,getMissingResultsUrl:D,onItemClick:function(e,t){W(e),z(e),rn(t)||u()}}))),yt.createElement("footer",{className:"DocSearch-Footer"},yt.createElement(Ot,{translations:x}))))}}}]); \ No newline at end of file diff --git a/assets/js/58903ab2.fbbc79d0.js b/assets/js/58903ab2.607a81b0.js similarity index 70% rename from assets/js/58903ab2.fbbc79d0.js rename to assets/js/58903ab2.607a81b0.js index e3b47148..47a2fb75 100644 --- a/assets/js/58903ab2.fbbc79d0.js +++ b/assets/js/58903ab2.607a81b0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6399],{2228:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>r});var a=n(4246),i=n(1670);const s={},o="Install the Desktop application",l={id:"installation/desktop",title:"Install the Desktop application",description:"You can install Komga from the Download page. Just follow the instructions on the page.",source:"@site/docs/installation/desktop.md",sourceDirName:"installation",slug:"/installation/desktop",permalink:"/docs/installation/desktop",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/desktop.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install from the Microsoft Store",permalink:"/docs/installation/ms-store"},next:{title:"Run with Docker",permalink:"/docs/installation/docker"}},d={},r=[{value:"Updating",id:"updating",level:2},{value:"Windows",id:"windows",level:3},{value:"macOS",id:"macos",level:3},{value:"Linux",id:"linux",level:3},{value:"Read next",id:"read-next",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"install-the-desktop-application",children:"Install the Desktop application"}),"\n",(0,a.jsxs)(t.p,{children:["You can install Komga from the ",(0,a.jsx)(t.a,{href:"https://download.komga.org",children:"Download page"}),". Just follow the instructions on the page."]}),"\n",(0,a.jsx)(t.p,{children:"The desktop application is available for Windows, macOS and Linux."}),"\n",(0,a.jsx)(t.h2,{id:"updating",children:"Updating"}),"\n",(0,a.jsx)(t.p,{children:"The application will automatically update itself when a new version is available."}),"\n",(0,a.jsx)(t.h3,{id:"windows",children:"Windows"}),"\n",(0,a.jsx)(t.p,{children:"The OS itself will check for updates every 8 hours and upgrade the app in the background, even if it's not being used. Users will never see an update prompt."}),"\n",(0,a.jsx)(t.h3,{id:"macos",children:"macOS"}),"\n",(0,a.jsx)(t.p,{children:"The app will check for updates on startup without blocking the user, and on a schedule whilst the app runs. Once the user agrees, updates will be downloaded and applied in the background ready for the next launch."}),"\n",(0,a.jsx)(t.h3,{id:"linux",children:"Linux"}),"\n",(0,a.jsx)(t.p,{children:"An update check will be performed synchronously on each app start. If a new version is available then the update process will start and the update downloaded and applied, without any user interaction being required."}),"\n",(0,a.jsx)(t.h2,{id:"read-next",children:"Read next"}),"\n",(0,a.jsxs)(t.p,{children:["Check the ",(0,a.jsx)(t.a,{href:"/docs/guides/desktop",children:"Desktop Application"})," page."]})]})}function p(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},1670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var a=n(7378);const i={},s=a.createContext(i);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[983],{5263:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>l,toc:()=>r});var a=n(2540),i=n(3023);const s={},o="Install the Desktop application",l={id:"installation/desktop",title:"Install the Desktop application",description:"You can install Komga from the Download page. Just follow the instructions on the page.",source:"@site/docs/installation/desktop.md",sourceDirName:"installation",slug:"/installation/desktop",permalink:"/docs/installation/desktop",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/desktop.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install from the Microsoft Store",permalink:"/docs/installation/ms-store"},next:{title:"Run with Docker",permalink:"/docs/installation/docker"}},d={},r=[{value:"Updating",id:"updating",level:2},{value:"Windows",id:"windows",level:3},{value:"macOS",id:"macos",level:3},{value:"Linux",id:"linux",level:3},{value:"Read next",id:"read-next",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"install-the-desktop-application",children:"Install the Desktop application"}),"\n",(0,a.jsxs)(t.p,{children:["You can install Komga from the ",(0,a.jsx)(t.a,{href:"https://download.komga.org",children:"Download page"}),". Just follow the instructions on the page."]}),"\n",(0,a.jsx)(t.p,{children:"The desktop application is available for Windows, macOS and Linux."}),"\n",(0,a.jsx)(t.h2,{id:"updating",children:"Updating"}),"\n",(0,a.jsx)(t.p,{children:"The application will automatically update itself when a new version is available."}),"\n",(0,a.jsx)(t.h3,{id:"windows",children:"Windows"}),"\n",(0,a.jsx)(t.p,{children:"The OS itself will check for updates every 8 hours and upgrade the app in the background, even if it's not being used. Users will never see an update prompt."}),"\n",(0,a.jsx)(t.h3,{id:"macos",children:"macOS"}),"\n",(0,a.jsx)(t.p,{children:"The app will check for updates on startup without blocking the user, and on a schedule whilst the app runs. Once the user agrees, updates will be downloaded and applied in the background ready for the next launch."}),"\n",(0,a.jsx)(t.h3,{id:"linux",children:"Linux"}),"\n",(0,a.jsx)(t.p,{children:"An update check will be performed synchronously on each app start. If a new version is available then the update process will start and the update downloaded and applied, without any user interaction being required."}),"\n",(0,a.jsx)(t.h2,{id:"read-next",children:"Read next"}),"\n",(0,a.jsxs)(t.p,{children:["Check the ",(0,a.jsx)(t.a,{href:"/docs/guides/desktop",children:"Desktop Application"})," page."]})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},3023:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var a=n(3696);const i={},s=a.createContext(i);function o(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/59c4a0ab.3041f249.js b/assets/js/59c4a0ab.06fe9e4f.js similarity index 84% rename from assets/js/59c4a0ab.3041f249.js rename to assets/js/59c4a0ab.06fe9e4f.js index 3e23f62a..f39691db 100644 --- a/assets/js/59c4a0ab.3041f249.js +++ b/assets/js/59c4a0ab.06fe9e4f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7583],{5570:t=>{t.exports=JSON.parse('{"title":"Official methods","slug":"/category/official-methods","permalink":"/docs/category/official-methods","navigation":{"previous":{"title":"Installation","permalink":"/docs/category/installation"},"next":{"title":"Install from the Microsoft Store","permalink":"/docs/installation/ms-store"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8918],{8129:t=>{t.exports=JSON.parse('{"title":"Official methods","slug":"/category/official-methods","permalink":"/docs/category/official-methods","navigation":{"previous":{"title":"Installation","permalink":"/docs/category/installation"},"next":{"title":"Install from the Microsoft Store","permalink":"/docs/installation/ms-store"}}}')}}]); \ No newline at end of file diff --git a/assets/js/5e80a3fb.3721c842.js b/assets/js/5e80a3fb.c6a22bea.js similarity index 77% rename from assets/js/5e80a3fb.3721c842.js rename to assets/js/5e80a3fb.c6a22bea.js index de877b52..7060b1c8 100644 --- a/assets/js/5e80a3fb.3721c842.js +++ b/assets/js/5e80a3fb.c6a22bea.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5370],{6072:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/komga","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7501],{5171:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/komga","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.196d26f2.js b/assets/js/5e95c892.196d26f2.js deleted file mode 100644 index 83bf3a4a..00000000 --- a/assets/js/5e95c892.196d26f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9661],{2108:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(7378);var t=r(624),u=r(8831),a=r(5484),c=r(5473),n=r(4514),i=r(4246);function l(e){return(0,i.jsx)(u.FG,{className:(0,t.Z)(a.k.wrapper.docsPages),children:(0,i.jsx)(n.Z,{children:(0,c.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.36d947f5.js b/assets/js/5e95c892.36d947f5.js new file mode 100644 index 00000000..da46f433 --- /dev/null +++ b/assets/js/5e95c892.36d947f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9647],{415:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(3696);var t=r(1750),u=r(5605),a=r(3237),c=r(3971),n=r(2213),i=r(2540);function l(e){return(0,i.jsx)(u.e3,{className:(0,t.A)(a.G.wrapper.docsPages),children:(0,i.jsx)(n.A,{children:(0,c.v)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5ef0e9d6.0479338c.js b/assets/js/5ef0e9d6.02f31abc.js similarity index 75% rename from assets/js/5ef0e9d6.0479338c.js rename to assets/js/5ef0e9d6.02f31abc.js index 84d8ecb3..fbdb08c6 100644 --- a/assets/js/5ef0e9d6.0479338c.js +++ b/assets/js/5ef0e9d6.02f31abc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9880],{3456:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=a(4246),o=a(1670);const i={},s="Community",r={id:"community",title:"Community",description:"This page lists community applications or tools that can be used alongside Komga.",source:"@site/docs/community.md",sourceDirName:".",slug:"/community",permalink:"/docs/community",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/community.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Contribution",permalink:"/docs/contribution"},next:{title:"Frequently Asked Questions",permalink:"/docs/faq"}},l={},c=[{value:"Komf",id:"komf",level:2},{value:"Kurp",id:"kurp",level:2},{value:"Manga Manager",id:"manga-manager",level:2},{value:"KoMI",id:"komi",level:2},{value:"Mylar League",id:"mylar-league",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"community",children:"Community"}),"\n",(0,n.jsx)(t.p,{children:"This page lists community applications or tools that can be used alongside Komga."}),"\n",(0,n.jsx)(t.h2,{id:"komf",children:"Komf"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/Snd-R/komf",children:"Komga and Kavita Metadata Fetcher"})," is a tool that fetches metadata and thumbnails for your digital comic book library. It can automatically pick up added series and update their metadata and thumbnail."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"kurp",children:"Kurp"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/Snd-R/kurp",children:"Komga and Kavita upscaling reverse proxy"}),". Reverse proxy that intercepts image requests and applies upscaling. Other requests are transparently proxied without noticable delay"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"manga-manager",children:"Manga Manager"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/MangaManagerORG/Manga-Manager",children:"Manga Manager"})," is an all-in-one tool to make managing your manga library easy. Has a built-in metadata editor as well as cover and back cover editor."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"komi",children:"KoMI"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/edwinbadillo/KoMI",children:"KoMI"})," is a user script that adds buttons in the series page to perform metadata matching with online sources."]}),"\n",(0,n.jsx)(t.h2,{id:"mylar-league",children:"Mylar League"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/flips22/mylar-league",children:"Mylar League"})," is a collection of various tools to aid in the integration of mylar and komga with leagueofcomicgeeks.com."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1670:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>s});var n=a(7378);const o={},i=n.createContext(o);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[911],{4823:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=a(2540),o=a(3023);const i={},s="Community",r={id:"community",title:"Community",description:"This page lists community applications or tools that can be used alongside Komga.",source:"@site/docs/community.md",sourceDirName:".",slug:"/community",permalink:"/docs/community",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/community.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Contribution",permalink:"/docs/contribution"},next:{title:"Frequently Asked Questions",permalink:"/docs/faq"}},l={},c=[{value:"Komf",id:"komf",level:2},{value:"Kurp",id:"kurp",level:2},{value:"Manga Manager",id:"manga-manager",level:2},{value:"KoMI",id:"komi",level:2},{value:"Mylar League",id:"mylar-league",level:2}];function d(e){const t={a:"a",blockquote:"blockquote",h1:"h1",h2:"h2",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"community",children:"Community"}),"\n",(0,n.jsx)(t.p,{children:"This page lists community applications or tools that can be used alongside Komga."}),"\n",(0,n.jsx)(t.h2,{id:"komf",children:"Komf"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/Snd-R/komf",children:"Komga and Kavita Metadata Fetcher"})," is a tool that fetches metadata and thumbnails for your digital comic book library. It can automatically pick up added series and update their metadata and thumbnail."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"kurp",children:"Kurp"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/Snd-R/kurp",children:"Komga and Kavita upscaling reverse proxy"}),". Reverse proxy that intercepts image requests and applies upscaling. Other requests are transparently proxied without noticable delay"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"manga-manager",children:"Manga Manager"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/MangaManagerORG/Manga-Manager",children:"Manga Manager"})," is an all-in-one tool to make managing your manga library easy. Has a built-in metadata editor as well as cover and back cover editor."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"komi",children:"KoMI"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/edwinbadillo/KoMI",children:"KoMI"})," is a user script that adds buttons in the series page to perform metadata matching with online sources."]}),"\n",(0,n.jsx)(t.h2,{id:"mylar-league",children:"Mylar League"}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/flips22/mylar-league",children:"Mylar League"})," is a collection of various tools to aid in the integration of mylar and komga with leagueofcomicgeeks.com."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},3023:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>r});var n=a(3696);const o={},i=n.createContext(o);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/607df45e.dda85bbd.js b/assets/js/607df45e.dda85bbd.js deleted file mode 100644 index 032efadf..00000000 --- a/assets/js/607df45e.dda85bbd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9112],{3486:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(4246),r=n(1670);const i={},s="Google Drive and rclone",a={id:"installation/gdrive",title:"Google Drive and rclone",description:"If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.",source:"@site/docs/installation/gdrive.md",sourceDirName:"installation",slug:"/installation/gdrive",permalink:"/docs/installation/gdrive",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/gdrive.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Social login",permalink:"/docs/installation/oauth2"},next:{title:"Guides",permalink:"/docs/category/guides"}},c={},l=[];function d(e){const o={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"google-drive-and-rclone",children:"Google Drive and rclone"}),"\n",(0,t.jsxs)(o.p,{children:["If your books are stored on Google Drive, you can use ",(0,t.jsx)(o.a,{href:"https://github.com/plexdrive/plexdrive",children:"Plexdrive"})," or ",(0,t.jsx)(o.a,{href:"https://rclone.org/",children:"rclone"})," to make them accessible to Komga."]}),"\n",(0,t.jsxs)(o.p,{children:["You will need to configure your library to ",(0,t.jsx)(o.a,{href:"/docs/guides/libraries#force-directory-modified-time",children:"force the directory modified time"}),"."]}),"\n",(0,t.jsx)(o.p,{children:"Rclone requires some specific configuration to cache files locally, and work better with Komga.\nHere is a user-provided configuration that works well (thanks Magikarp):"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-shell",children:"rclone mount : \\\n --no-checksum \\\n --use-server-modtime \\\n --no-gzip-encoding \\\n --no-update-modtime \\\n --no-seek \\\n --modify-window 2m \\\n --allow-other \\\n --allow-non-empty \\\n --dir-cache-time 30m \\\n --cache-read-retries 15 \\\n --cache-db-purge \\\n --timeout 30m \\\n --vfs-cache-mode full \\\n --vfs-read-chunk-size 2M \\\n --vfs-read-chunk-size-limit 5M \\\n --vfs-cache-max-age 30m \\\n --attr-timeout 20s \\\n --poll-interval 9m \\\n --vfs-cache-poll-interval 10m\n"})})]})}function u(e={}){const{wrapper:o}={...(0,r.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1670:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>s});var t=n(7378);const r={},i=t.createContext(r);function s(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/607df45e.ec4acb8f.js b/assets/js/607df45e.ec4acb8f.js new file mode 100644 index 00000000..4084580b --- /dev/null +++ b/assets/js/607df45e.ec4acb8f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8368],{2504:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=n(2540),r=n(3023);const i={},s="Google Drive and rclone",a={id:"installation/gdrive",title:"Google Drive and rclone",description:"If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.",source:"@site/docs/installation/gdrive.md",sourceDirName:"installation",slug:"/installation/gdrive",permalink:"/docs/installation/gdrive",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/gdrive.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Social login",permalink:"/docs/installation/oauth2"},next:{title:"Guides",permalink:"/docs/category/guides"}},c={},l=[];function d(e){const o={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"google-drive-and-rclone",children:"Google Drive and rclone"}),"\n",(0,t.jsxs)(o.p,{children:["If your books are stored on Google Drive, you can use ",(0,t.jsx)(o.a,{href:"https://github.com/plexdrive/plexdrive",children:"Plexdrive"})," or ",(0,t.jsx)(o.a,{href:"https://rclone.org/",children:"rclone"})," to make them accessible to Komga."]}),"\n",(0,t.jsxs)(o.p,{children:["You will need to configure your library to ",(0,t.jsx)(o.a,{href:"/docs/guides/libraries#force-directory-modified-time",children:"force the directory modified time"}),"."]}),"\n",(0,t.jsx)(o.p,{children:"Rclone requires some specific configuration to cache files locally, and work better with Komga.\nHere is a user-provided configuration that works well (thanks Magikarp):"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-shell",children:"rclone mount : \\\n --no-checksum \\\n --use-server-modtime \\\n --no-gzip-encoding \\\n --no-update-modtime \\\n --no-seek \\\n --modify-window 2m \\\n --allow-other \\\n --allow-non-empty \\\n --dir-cache-time 30m \\\n --cache-read-retries 15 \\\n --cache-db-purge \\\n --timeout 30m \\\n --vfs-cache-mode full \\\n --vfs-read-chunk-size 2M \\\n --vfs-read-chunk-size-limit 5M \\\n --vfs-cache-max-age 30m \\\n --attr-timeout 20s \\\n --poll-interval 9m \\\n --vfs-cache-poll-interval 10m\n"})})]})}function u(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},3023:(e,o,n)=>{n.d(o,{R:()=>s,x:()=>a});var t=n(3696);const r={},i=t.createContext(r);function s(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/634dddf1.bff2616c.js b/assets/js/634dddf1.bff2616c.js new file mode 100644 index 00000000..bdf41011 --- /dev/null +++ b/assets/js/634dddf1.bff2616c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[625],{4176:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var s=n(2540),t=n(3023);const r={slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-support",source:"@site/blog/2023-11-29-ebooks.md",title:"eBook support",description:"Version 1.8.0 is bringing a long awaited feature: proper eBook support!",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.37,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook drop 2",permalink:"/blog/ebook-drop2"},nextItem:{title:"Prepare for v1.0.0",permalink:"/blog/prepare-v1"}},l={authorsImageUrls:[void 0]},h=[{value:"What you need to know",id:"what-you-need-to-know",level:2},{value:"Other recent changes you may have missed",id:"other-recent-changes-you-may-have-missed",level:2}];function d(e){const o={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.8.0",children:"1.8.0"})," is bringing a long awaited feature: ",(0,s.jsx)(o.strong,{children:"proper eBook support!"})]}),"\n",(0,s.jsxs)(o.p,{children:["Github issue ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/221",children:"#221"})," has been opened for more than 3 years, and has finally been tackled."]}),"\n",(0,s.jsx)(o.h2,{id:"what-you-need-to-know",children:"What you need to know"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"eBooks behave like any other book in Komga, in regards to series or metadata. You can even mix comic books and ebooks in the same series."}),"\n",(0,s.jsx)(o.li,{children:"only EPUB format is supported. Other formats will not be supported in the future."}),"\n",(0,s.jsx)(o.li,{children:"existing EPUB files will be re-analyzed. If you had image-only EPUB, those may not be compatible anymore with third-party clients."}),"\n",(0,s.jsxs)(o.li,{children:["the web EPUB reader is a very first version, and ",(0,s.jsx)(o.strong,{children:"does not support saving progress"}),". Read progress saving and restore will come in a future release."]}),"\n",(0,s.jsxs)(o.li,{children:["any book in Komga can be read with ",(0,s.jsx)(o.a,{href:"https://readium.org/webpub-manifest/",children:"WebPub"})," compatible clients."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"There will be issues"}),". EPUB is a complex format, and many EPUB files are not properly built. Raise issues ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/new/choose",children:"on Github"})," for support."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"other-recent-changes-you-may-have-missed",children:"Other recent changes you may have missed"}),"\n",(0,s.jsx)(o.p,{children:"In case you haven't kept up with the release notes since version 1.0.0, here are the most significant changes:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["Komga is now available as a ",(0,s.jsx)(o.a,{href:"/docs/installation/desktop",children:"desktop app"}),", and is available in the ",(0,s.jsx)(o.a,{href:"/docs/installation/ms-store",children:"Microsoft Store"})]}),"\n",(0,s.jsxs)(o.li,{children:["Multiple settings are now configurable from the ",(0,s.jsx)(o.a,{href:"/docs/guides/server-settings",children:"Server Settings"})," screen. You may need to cleanup your configuration file and remove deprecated entries."]}),"\n",(0,s.jsx)(o.li,{children:"Thumbnails size can now be configured in Server Settings."}),"\n",(0,s.jsx)(o.li,{children:"Background task management has been revamped, and now supports proper parallel executions (configurable in Server Settings)."}),"\n",(0,s.jsxs)(o.li,{children:["Komga now has support for ",(0,s.jsx)(o.a,{href:"/docs/guides/oneshots",children:"One-Shots"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["a ",(0,s.jsx)(o.a,{href:"/docs/guides/cli",children:"Command Line Interface"})," was added to update forgotten password for the admin account."]}),"\n"]})]})}function c(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},3023:(e,o,n)=>{n.d(o,{R:()=>a,x:()=>i});var s=n(3696);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/634dddf1.c7b8dba8.js b/assets/js/634dddf1.c7b8dba8.js deleted file mode 100644 index 2c5e7cfb..00000000 --- a/assets/js/634dddf1.c7b8dba8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5862],{6937:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var s=n(4246),t=n(1670);const r={slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-support",source:"@site/blog/2023-11-29-ebooks.md",title:"eBook support",description:"Version 1.8.0 is bringing a long awaited feature: proper eBook support!",date:"2023-11-29T00:00:00.000Z",formattedDate:"November 29, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.37,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-support",title:"eBook support",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook drop 2",permalink:"/blog/ebook-drop2"},nextItem:{title:"Prepare for v1.0.0",permalink:"/blog/prepare-v1"}},l={authorsImageUrls:[void 0]},h=[{value:"What you need to know",id:"what-you-need-to-know",level:2},{value:"Other recent changes you may have missed",id:"other-recent-changes-you-may-have-missed",level:2}];function d(e){const o={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.8.0",children:"1.8.0"})," is bringing a long awaited feature: ",(0,s.jsx)(o.strong,{children:"proper eBook support!"})]}),"\n",(0,s.jsxs)(o.p,{children:["Github issue ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/221",children:"#221"})," has been opened for more than 3 years, and has finally been tackled."]}),"\n",(0,s.jsx)(o.h2,{id:"what-you-need-to-know",children:"What you need to know"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"eBooks behave like any other book in Komga, in regards to series or metadata. You can even mix comic books and ebooks in the same series."}),"\n",(0,s.jsx)(o.li,{children:"only EPUB format is supported. Other formats will not be supported in the future."}),"\n",(0,s.jsx)(o.li,{children:"existing EPUB files will be re-analyzed. If you had image-only EPUB, those may not be compatible anymore with third-party clients."}),"\n",(0,s.jsxs)(o.li,{children:["the web EPUB reader is a very first version, and ",(0,s.jsx)(o.strong,{children:"does not support saving progress"}),". Read progress saving and restore will come in a future release."]}),"\n",(0,s.jsxs)(o.li,{children:["any book in Komga can be read with ",(0,s.jsx)(o.a,{href:"https://readium.org/webpub-manifest/",children:"WebPub"})," compatible clients."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.strong,{children:"There will be issues"}),". EPUB is a complex format, and many EPUB files are not properly built. Raise issues ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/issues/new/choose",children:"on Github"})," for support."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"other-recent-changes-you-may-have-missed",children:"Other recent changes you may have missed"}),"\n",(0,s.jsx)(o.p,{children:"In case you haven't kept up with the release notes since version 1.0.0, here are the most significant changes:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["Komga is now available as a ",(0,s.jsx)(o.a,{href:"/docs/installation/desktop",children:"desktop app"}),", and is available in the ",(0,s.jsx)(o.a,{href:"/docs/installation/ms-store",children:"Microsoft Store"})]}),"\n",(0,s.jsxs)(o.li,{children:["Multiple settings are now configurable from the ",(0,s.jsx)(o.a,{href:"/docs/guides/server-settings",children:"Server Settings"})," screen. You may need to cleanup your configuration file and remove deprecated entries."]}),"\n",(0,s.jsx)(o.li,{children:"Thumbnails size can now be configured in Server Settings."}),"\n",(0,s.jsx)(o.li,{children:"Background task management has been revamped, and now supports proper parallel executions (configurable in Server Settings)."}),"\n",(0,s.jsxs)(o.li,{children:["Komga now has support for ",(0,s.jsx)(o.a,{href:"/docs/guides/oneshots",children:"One-Shots"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["a ",(0,s.jsx)(o.a,{href:"/docs/guides/cli",children:"Command Line Interface"})," was added to update forgotten password for the admin account."]}),"\n"]})]})}function c(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1670:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>a});var s=n(7378);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/674e178f.9b6fc7ad.js b/assets/js/674e178f.db5864f1.js similarity index 84% rename from assets/js/674e178f.9b6fc7ad.js rename to assets/js/674e178f.db5864f1.js index f60b33b3..a9b0e60d 100644 --- a/assets/js/674e178f.9b6fc7ad.js +++ b/assets/js/674e178f.db5864f1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5203],{8657:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=t(4246),i=t(1670);const s={},a="Read with CDisplayEx",r={id:"guides/cdisplayex",title:"Read with CDisplayEx",description:"The premium version of CDisplayEx for Android allows you to connect",source:"@site/docs/guides/cdisplayex.md",sourceDirName:"guides",slug:"/guides/cdisplayex",permalink:"/docs/guides/cdisplayex",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cdisplayex.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Paperback",permalink:"/docs/guides/paperback"},next:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"}},d={},l=[{value:"Add a new location",id:"add-a-new-location",level:2},{value:"Nested folders",id:"nested-folders",level:2},{value:"Library",id:"library",level:2},{value:"Reading status",id:"reading-status",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"read-with-cdisplayex",children:"Read with CDisplayEx"}),"\n",(0,o.jsxs)(n.p,{children:["The premium version of ",(0,o.jsx)(n.a,{href:"https://www.cdisplayex.com/mobile/",children:"CDisplayEx"})," for Android allows you to connect\nto Komga using the ",(0,o.jsx)(n.a,{href:"/docs/api/rest#authenticating",children:"REST API"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["If you have disabled the ",(0,o.jsx)(n.a,{href:"/docs/guides/libraries#analyze-page-dimensions",children:"page dimensions analysis"})," option, re-enable it,\nit is necessary to open books with CDisplayEx."]})}),"\n",(0,o.jsx)(n.h2,{id:"add-a-new-location",children:"Add a new location"}),"\n",(0,o.jsxs)(n.p,{children:["On the home page, use the big ",(0,o.jsx)(n.strong,{children:"+"})," button at the bottom right to add a new location. Then choose the Komga option from the list that appears.\nA dialog box appears asking you to enter some information."]}),"\n",(0,o.jsxs)(n.p,{children:["You can specify an ",(0,o.jsx)(n.strong,{children:"IP Address"})," or a ",(0,o.jsx)(n.strong,{children:"host name"})," to identify the remote server.\nHere are some examples: ",(0,o.jsx)(n.code,{children:"192.168.1.12, computer.local, demo.komga.org, user.host.net/komga"})]}),"\n",(0,o.jsxs)(n.p,{children:["Enter your ",(0,o.jsx)(n.strong,{children:"username"})," and ",(0,o.jsx)(n.strong,{children:"password"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["Specify a ",(0,o.jsx)(n.strong,{children:"port"})," number if you are using a different port than the one used by default by the HTTP or HTTPS protocols. If you are using HTTPS, check the ",(0,o.jsx)(n.strong,{children:"SSL"})," option."]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"If you are using a self-signed certificate and don't want to add it to your device, there is an experimental option to disable SSL certificate verification."})}),"\n",(0,o.jsxs)(n.p,{children:["The application uses a ",(0,o.jsx)(n.strong,{children:"virtual folder"})," structure to browse books by library, series, collections and reading lists. Select a folder to\nmake only part of your library accessible. If you want to make everything accessible, leave the ",(0,o.jsx)(n.strong,{children:"path"})," blank."]}),"\n",(0,o.jsxs)(n.p,{children:["Add a ",(0,o.jsx)(n.strong,{children:"description"})," and leave the other options checked."]}),"\n",(0,o.jsxs)(n.p,{children:["Now press the ",(0,o.jsx)(n.strong,{children:"ADD"})," button, the synchronization will start, depending on the size of your library and the performance of your server,\nit may take a few minutes or a few seconds. You will be notified when this operation is complete."]}),"\n",(0,o.jsx)(n.h2,{id:"nested-folders",children:"Nested folders"}),"\n",(0,o.jsx)(n.p,{children:"Without waiting for the synchronization to complete, you can browse folders by tapping on the location that was just\nadded to the home page. In this view, the server must be reachable. You will be able to navigate in a virtual folder structure."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["To see a thumbnail on the folder and to display statistical information,\nyou must activate the thumbnail option: ",(0,o.jsx)(n.a,{href:"https://www.cdisplayex.com/mobile/settings/#show-a-thumbnail-on-folders",children:"Show a thumbnail on folders"})]})}),"\n",(0,o.jsx)(n.h2,{id:"library",children:"Library"}),"\n",(0,o.jsx)(n.p,{children:"Once the synchronization is complete, the location has been added to the application library, it is accessible offline.\nGo to the series from the home page or by using the navigation bar. If you want to read a book offline you need to download it,\nlong press on the book and use the download button."}),"\n",(0,o.jsx)(n.h2,{id:"reading-status",children:"Reading status"}),"\n",(0,o.jsx)(n.p,{children:"Reading status and read progress are synced at different times when you use the app."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When you sync location manually. (Make a long press on the location and start the synchronization)"}),"\n",(0,o.jsx)(n.li,{children:"When you browse or refresh a series folder from a location."}),"\n",(0,o.jsx)(n.li,{children:"When you open and close a book."}),"\n",(0,o.jsx)(n.li,{children:"When the app goes into the background while a book is open."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1670:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var o=t(7378);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[205],{9700:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=t(2540),i=t(3023);const s={},a="Read with CDisplayEx",r={id:"guides/cdisplayex",title:"Read with CDisplayEx",description:"The premium version of CDisplayEx for Android allows you to connect",source:"@site/docs/guides/cdisplayex.md",sourceDirName:"guides",slug:"/guides/cdisplayex",permalink:"/docs/guides/cdisplayex",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/cdisplayex.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Paperback",permalink:"/docs/guides/paperback"},next:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"}},d={},l=[{value:"Add a new location",id:"add-a-new-location",level:2},{value:"Nested folders",id:"nested-folders",level:2},{value:"Library",id:"library",level:2},{value:"Reading status",id:"reading-status",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"read-with-cdisplayex",children:"Read with CDisplayEx"}),"\n",(0,o.jsxs)(n.p,{children:["The premium version of ",(0,o.jsx)(n.a,{href:"https://www.cdisplayex.com/mobile/",children:"CDisplayEx"})," for Android allows you to connect\nto Komga using the ",(0,o.jsx)(n.a,{href:"/docs/api/rest#authenticating",children:"REST API"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["If you have disabled the ",(0,o.jsx)(n.a,{href:"/docs/guides/libraries#analyze-page-dimensions",children:"page dimensions analysis"})," option, re-enable it,\nit is necessary to open books with CDisplayEx."]})}),"\n",(0,o.jsx)(n.h2,{id:"add-a-new-location",children:"Add a new location"}),"\n",(0,o.jsxs)(n.p,{children:["On the home page, use the big ",(0,o.jsx)(n.strong,{children:"+"})," button at the bottom right to add a new location. Then choose the Komga option from the list that appears.\nA dialog box appears asking you to enter some information."]}),"\n",(0,o.jsxs)(n.p,{children:["You can specify an ",(0,o.jsx)(n.strong,{children:"IP Address"})," or a ",(0,o.jsx)(n.strong,{children:"host name"})," to identify the remote server.\nHere are some examples: ",(0,o.jsx)(n.code,{children:"192.168.1.12, computer.local, demo.komga.org, user.host.net/komga"})]}),"\n",(0,o.jsxs)(n.p,{children:["Enter your ",(0,o.jsx)(n.strong,{children:"username"})," and ",(0,o.jsx)(n.strong,{children:"password"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["Specify a ",(0,o.jsx)(n.strong,{children:"port"})," number if you are using a different port than the one used by default by the HTTP or HTTPS protocols. If you are using HTTPS, check the ",(0,o.jsx)(n.strong,{children:"SSL"})," option."]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"If you are using a self-signed certificate and don't want to add it to your device, there is an experimental option to disable SSL certificate verification."})}),"\n",(0,o.jsxs)(n.p,{children:["The application uses a ",(0,o.jsx)(n.strong,{children:"virtual folder"})," structure to browse books by library, series, collections and reading lists. Select a folder to\nmake only part of your library accessible. If you want to make everything accessible, leave the ",(0,o.jsx)(n.strong,{children:"path"})," blank."]}),"\n",(0,o.jsxs)(n.p,{children:["Add a ",(0,o.jsx)(n.strong,{children:"description"})," and leave the other options checked."]}),"\n",(0,o.jsxs)(n.p,{children:["Now press the ",(0,o.jsx)(n.strong,{children:"ADD"})," button, the synchronization will start, depending on the size of your library and the performance of your server,\nit may take a few minutes or a few seconds. You will be notified when this operation is complete."]}),"\n",(0,o.jsx)(n.h2,{id:"nested-folders",children:"Nested folders"}),"\n",(0,o.jsx)(n.p,{children:"Without waiting for the synchronization to complete, you can browse folders by tapping on the location that was just\nadded to the home page. In this view, the server must be reachable. You will be able to navigate in a virtual folder structure."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["To see a thumbnail on the folder and to display statistical information,\nyou must activate the thumbnail option: ",(0,o.jsx)(n.a,{href:"https://www.cdisplayex.com/mobile/settings/#show-a-thumbnail-on-folders",children:"Show a thumbnail on folders"})]})}),"\n",(0,o.jsx)(n.h2,{id:"library",children:"Library"}),"\n",(0,o.jsx)(n.p,{children:"Once the synchronization is complete, the location has been added to the application library, it is accessible offline.\nGo to the series from the home page or by using the navigation bar. If you want to read a book offline you need to download it,\nlong press on the book and use the download button."}),"\n",(0,o.jsx)(n.h2,{id:"reading-status",children:"Reading status"}),"\n",(0,o.jsx)(n.p,{children:"Reading status and read progress are synced at different times when you use the app."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"When you sync location manually. (Make a long press on the location and start the synchronization)"}),"\n",(0,o.jsx)(n.li,{children:"When you browse or refresh a series folder from a location."}),"\n",(0,o.jsx)(n.li,{children:"When you open and close a book."}),"\n",(0,o.jsx)(n.li,{children:"When the app goes into the background while a book is open."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},3023:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>r});var o=t(3696);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.5a185da7.js b/assets/js/6875c492.5a185da7.js new file mode 100644 index 00000000..1bd2b9a5 --- /dev/null +++ b/assets/js/6875c492.5a185da7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4813],{523:(e,t,n)=>{n.d(t,{A:()=>l});n(3696);var s=n(6590),a=n(5780),i=n(2540);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.A,{permalink:n,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),l&&(0,i.jsx)(a.A,{permalink:l,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},4134:(e,t,n)=>{n.d(t,{A:()=>l});n(3696);var s=n(7069),a=n(5512),i=n(2540);function l(e){let{items:t,component:n=a.A}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.i,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},6139:(e,t,n)=>{n.r(t),n.d(t,{default:()=>A});n(3696);var s=n(1750),a=n(6590),i=n(2815),l=n(5605),r=n(3237),o=n(3587),c=n(4257),g=n(523),d=n(689),u=n(4134),h=n(6082),p=n(1381),m=n(2540);function x(e){const t=function(){const{selectMessage:e}=(0,i.W)();return t=>e(t,(0,a.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.T)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l.be,{title:n}),(0,m.jsx)(d.A,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const l=x(t);return(0,m.jsxs)(c.A,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.A,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.A,{as:"h1",children:l}),(0,m.jsx)(o.A,{href:t.allTagsPath,children:(0,m.jsx)(a.A,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.A,{items:n}),(0,m.jsx)(g.A,{metadata:i})]})}function A(e){return(0,m.jsxs)(l.e3,{className:(0,s.A)(r.G.wrapper.blogPages,r.G.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},6082:(e,t,n)=>{n.d(t,{A:()=>h});n(3696);var s=n(1750),a=n(6590),i=n(7854),l=n(2540);function r(){return(0,l.jsx)(a.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,l.jsx)(a.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.A,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var g=n(3237),d=n(3603);function u(e){let{className:t}=e;return(0,l.jsx)(d.A,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,s.A)(t,g.G.common.unlistedBanner),children:(0,l.jsx)(o,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.86ad6217.js b/assets/js/6875c492.86ad6217.js deleted file mode 100644 index 16ac48a9..00000000 --- a/assets/js/6875c492.86ad6217.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8610],{13:(e,t,n)=>{n.d(t,{Z:()=>l});n(7378);var s=n(9213),a=n(4582),i=n(4246);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),l&&(0,i.jsx)(a.Z,{permalink:l,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},2134:(e,t,n)=>{n.d(t,{Z:()=>l});n(7378);var s=n(412),a=n(5532),i=n(4246);function l(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},1071:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(7378);var s=n(624),a=n(9213),i=n(689),l=n(8831),r=n(5484),o=n(6641),c=n(5988),g=n(13),d=n(505),u=n(2134),h=n(3873),p=n(1999),m=n(4246);function x(e){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l.d,{title:n}),(0,m.jsx)(d.Z,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const l=x(t);return(0,m.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.Z,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.Z,{as:"h1",children:l}),(0,m.jsx)(o.Z,{href:t.allTagsPath,children:(0,m.jsx)(a.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.Z,{items:n}),(0,m.jsx)(g.Z,{metadata:i})]})}function f(e){return(0,m.jsxs)(l.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},3873:(e,t,n)=>{n.d(t,{Z:()=>h});n(7378);var s=n(624),a=n(9213),i=n(7092),l=n(4246);function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var g=n(5484),d=n(458);function u(e){let{className:t}=e;return(0,l.jsx)(d.Z,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,s.Z)(t,g.k.common.unlistedBanner),children:(0,l.jsx)(o,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/74bb4bec.0dfecdb7.js b/assets/js/74bb4bec.7b67bb2e.js similarity index 88% rename from assets/js/74bb4bec.0dfecdb7.js rename to assets/js/74bb4bec.7b67bb2e.js index e414a4d2..37a651bc 100644 --- a/assets/js/74bb4bec.0dfecdb7.js +++ b/assets/js/74bb4bec.7b67bb2e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4445],{7711:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var s=t(4246),n=t(1670);const r={slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-drop2",source:"@site/blog/2023-12-15-ebooks-drop2.md",title:"eBook drop 2",description:"Version 1.9.0 contains the second feature drop for Ebooks support.",date:"2023-12-15T00:00:00.000Z",formattedDate:"December 15, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:.605,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,nextItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},p=[];function d(e){const o={a:"a",p:"p",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"1.9.0"})," contains the second feature drop for Ebooks support."]}),"\n",(0,s.jsx)(o.p,{children:"It brings nice additions to the initial release, most notably the read progress will be kept when reading and restored, same as with other books."}),"\n",(0,s.jsx)(o.p,{children:"The analysis process of EPUB files was also revamped, and some EPUB files that were not analyzed before should be working fine now."}),"\n",(0,s.jsx)(o.p,{children:"While the first release forced all the EPUB files through the Epub Reader, this release brings back compatibility with the Divina Reader for pre-paginated EPUB files containing only images. This also restores support for the Pages API, and thus the compatibility with Tachiyomi, or any OPDS-PSE client."}),"\n",(0,s.jsxs)(o.p,{children:["Head over to the ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"Release Notes"})," for more details on all the new features and fixes."]})]})}function c(e={}){const{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1670:(e,o,t)=>{t.d(o,{Z:()=>i,a:()=>a});var s=t(7378);const n={},r=s.createContext(n);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6324],{6076:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var s=t(2540),n=t(3023);const r={slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-drop2",source:"@site/blog/2023-12-15-ebooks-drop2.md",title:"eBook drop 2",description:"Version 1.9.0 contains the second feature drop for Ebooks support.",date:"2023-12-15T00:00:00.000Z",formattedDate:"December 15, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:.605,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,nextItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},p=[];function d(e){const o={a:"a",p:"p",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"1.9.0"})," contains the second feature drop for Ebooks support."]}),"\n",(0,s.jsx)(o.p,{children:"It brings nice additions to the initial release, most notably the read progress will be kept when reading and restored, same as with other books."}),"\n",(0,s.jsx)(o.p,{children:"The analysis process of EPUB files was also revamped, and some EPUB files that were not analyzed before should be working fine now."}),"\n",(0,s.jsx)(o.p,{children:"While the first release forced all the EPUB files through the Epub Reader, this release brings back compatibility with the Divina Reader for pre-paginated EPUB files containing only images. This also restores support for the Pages API, and thus the compatibility with Tachiyomi, or any OPDS-PSE client."}),"\n",(0,s.jsxs)(o.p,{children:["Head over to the ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"Release Notes"})," for more details on all the new features and fixes."]})]})}function c(e={}){const{wrapper:o}={...(0,n.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},3023:(e,o,t)=>{t.d(o,{R:()=>a,x:()=>i});var s=t(3696);const n={},r=s.createContext(n);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/767395cb.f1a19dbf.js b/assets/js/767395cb.56c94914.js similarity index 76% rename from assets/js/767395cb.f1a19dbf.js rename to assets/js/767395cb.56c94914.js index eab854dc..2272a620 100644 --- a/assets/js/767395cb.f1a19dbf.js +++ b/assets/js/767395cb.56c94914.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3526],{2804:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var o=n(4246),r=n(1670);const s={},i="Expose your server",a={id:"installation/https",title:"Expose your server",description:"HTTPS",source:"@site/docs/installation/https.md",sourceDirName:"installation",slug:"/installation/https",permalink:"/docs/installation/https",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/https.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Configuration options",permalink:"/docs/installation/configuration"},next:{title:"Social login",permalink:"/docs/installation/oauth2"}},d={},c=[{value:"HTTPS",id:"https",level:2},{value:"Reverse proxy",id:"reverse-proxy",level:2},{value:"Caddy (v1)",id:"caddy-v1",level:3},{value:"Caddy (v2)",id:"caddy-v2",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"expose-your-server",children:"Expose your server"}),"\n",(0,o.jsx)(t.h2,{id:"https",children:"HTTPS"}),"\n",(0,o.jsxs)(t.p,{children:["If you want to open your Komga server outside your local network, it is strongly advised to secure it with ",(0,o.jsx)(t.code,{children:"https"})," (especially due to the use of http basic authentication)."]}),"\n",(0,o.jsxs)(t.p,{children:["Spring Boot supports ",(0,o.jsx)(t.code,{children:"https"})," out of the box, but you will have to configure it, and ",(0,o.jsx)(t.code,{children:"https"})," is most useful only with valid certificates (not self-signed), which most people don't readily have available."]}),"\n",(0,o.jsxs)(t.p,{children:["I recommend using ",(0,o.jsx)(t.a,{href:"https://caddyserver.com/",children:"Caddy"})," as a reverse proxy, as it supports the automatic generation of ",(0,o.jsx)(t.a,{href:"https://letsencrypt.org/",children:"Let's Encrypt"})," certificates."]}),"\n",(0,o.jsx)(t.h2,{id:"reverse-proxy",children:"Reverse proxy"}),"\n",(0,o.jsx)(t.p,{children:"Here are some sample configuration on how to configure reverse proxy for Komga."}),"\n",(0,o.jsx)(t.h3,{id:"caddy-v1",children:"Caddy (v1)"}),"\n",(0,o.jsx)(t.p,{children:"Without a base URL configured in Komga, using a subdomain:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"komga.yourdomain.com {\n proxy / http://your-komga-server:25600 {\n transparent\n }\n}\n"})}),"\n",(0,o.jsx)(t.p,{children:"With a base URL configured in Komga:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"yourdomain.com {\n proxy /komga http://your-komga-server:25600 {\n transparent\n }\n}\n"})}),"\n",(0,o.jsx)(t.h3,{id:"caddy-v2",children:"Caddy (v2)"}),"\n",(0,o.jsx)(t.p,{children:"Without a base URL configured in Komga, using a subdomain:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"komga.yourdomain.com {\n reverse_proxy http://your-komga-server:25600\n}\n"})}),"\n",(0,o.jsx)(t.p,{children:"With a base URL configured in Komga:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"yourdomain.com {\n reverse_proxy /komga/* http://your-komga-server:25600\n}\n"})})]})}function p(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>i});var o=n(7378);const r={},s=o.createContext(r);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4103],{858:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var o=n(2540),r=n(3023);const s={},i="Expose your server",a={id:"installation/https",title:"Expose your server",description:"HTTPS",source:"@site/docs/installation/https.md",sourceDirName:"installation",slug:"/installation/https",permalink:"/docs/installation/https",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/https.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Configuration options",permalink:"/docs/installation/configuration"},next:{title:"Social login",permalink:"/docs/installation/oauth2"}},d={},c=[{value:"HTTPS",id:"https",level:2},{value:"Reverse proxy",id:"reverse-proxy",level:2},{value:"Caddy (v1)",id:"caddy-v1",level:3},{value:"Caddy (v2)",id:"caddy-v2",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"expose-your-server",children:"Expose your server"}),"\n",(0,o.jsx)(t.h2,{id:"https",children:"HTTPS"}),"\n",(0,o.jsxs)(t.p,{children:["If you want to open your Komga server outside your local network, it is strongly advised to secure it with ",(0,o.jsx)(t.code,{children:"https"})," (especially due to the use of http basic authentication)."]}),"\n",(0,o.jsxs)(t.p,{children:["Spring Boot supports ",(0,o.jsx)(t.code,{children:"https"})," out of the box, but you will have to configure it, and ",(0,o.jsx)(t.code,{children:"https"})," is most useful only with valid certificates (not self-signed), which most people don't readily have available."]}),"\n",(0,o.jsxs)(t.p,{children:["I recommend using ",(0,o.jsx)(t.a,{href:"https://caddyserver.com/",children:"Caddy"})," as a reverse proxy, as it supports the automatic generation of ",(0,o.jsx)(t.a,{href:"https://letsencrypt.org/",children:"Let's Encrypt"})," certificates."]}),"\n",(0,o.jsx)(t.h2,{id:"reverse-proxy",children:"Reverse proxy"}),"\n",(0,o.jsx)(t.p,{children:"Here are some sample configuration on how to configure reverse proxy for Komga."}),"\n",(0,o.jsx)(t.h3,{id:"caddy-v1",children:"Caddy (v1)"}),"\n",(0,o.jsx)(t.p,{children:"Without a base URL configured in Komga, using a subdomain:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"komga.yourdomain.com {\n proxy / http://your-komga-server:25600 {\n transparent\n }\n}\n"})}),"\n",(0,o.jsx)(t.p,{children:"With a base URL configured in Komga:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"yourdomain.com {\n proxy /komga http://your-komga-server:25600 {\n transparent\n }\n}\n"})}),"\n",(0,o.jsx)(t.h3,{id:"caddy-v2",children:"Caddy (v2)"}),"\n",(0,o.jsx)(t.p,{children:"Without a base URL configured in Komga, using a subdomain:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"komga.yourdomain.com {\n reverse_proxy http://your-komga-server:25600\n}\n"})}),"\n",(0,o.jsx)(t.p,{children:"With a base URL configured in Komga:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"yourdomain.com {\n reverse_proxy /komga/* http://your-komga-server:25600\n}\n"})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},3023:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var o=n(3696);const r={},s=o.createContext(r);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d6e8713.cdecba21.js b/assets/js/7d6e8713.43894447.js similarity index 85% rename from assets/js/7d6e8713.cdecba21.js rename to assets/js/7d6e8713.43894447.js index 13e2861e..1e2dc0ba 100644 --- a/assets/js/7d6e8713.cdecba21.js +++ b/assets/js/7d6e8713.43894447.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3620],{2724:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>d,contentTitle:()=>s,default:()=>c,frontMatter:()=>t,metadata:()=>l,toc:()=>o});var n=i(4246),r=i(1670);const t={},s="Read with the Webreader",l={id:"guides/webreader",title:"Read with the Webreader",description:"Komga has an integrated Webreader packed with features.",source:"@site/docs/guides/webreader.md",sourceDirName:"guides",slug:"/guides/webreader",permalink:"/docs/guides/webreader",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webreader.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Readers",permalink:"/docs/category/readers"},next:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"}},d={},o=[{value:"Settings",id:"settings",level:2},{value:"General",id:"general",level:3},{value:"Reading mode",id:"reading-mode",level:4},{value:"Animate page transitions",id:"animate-page-transitions",level:4},{value:"Gestures",id:"gestures",level:4},{value:"Display",id:"display",level:3},{value:"Background color",id:"background-color",level:4},{value:"Reader specific options: Paged reader",id:"reader-specific-options-paged-reader",level:3},{value:"Scale type",id:"scale-type",level:4},{value:"Double pages",id:"double-pages",level:4},{value:"Thumbnails explorer",id:"thumbnails-explorer",level:2},{value:"Help dialog",id:"help-dialog",level:2}];function h(e){const a={em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h1,{id:"read-with-the-webreader",children:"Read with the Webreader"}),"\n",(0,n.jsx)(a.p,{children:"Komga has an integrated Webreader packed with features."}),"\n",(0,n.jsx)(a.p,{children:"To start reading a book, you can click on the read button either on the book card, or on the book details screen."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/book-card.png",style:{maxHeight:"300px"},alt:"Book Card Read Button"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/read-button.png",style:{maxHeight:"300px"},alt:"Book Details read button"}),"\n",(0,n.jsx)(a.p,{children:"Here is an overview of the Webreader's interface."}),"\n",(0,n.jsx)("a",{href:"/assets/media/guides/webreader/reader.png",children:(0,n.jsx)("img",{src:"/assets/media/guides/webreader/reader.png",alt:"Webreader overview"})}),"\n",(0,n.jsx)(a.h2,{id:"settings",children:"Settings"}),"\n",(0,n.jsx)(a.p,{children:"The Webreader can be configured in various ways from the settings dialog."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/reader-settings.png",style:{maxHeight:"400px"},alt:"Webreader settings"}),"\n",(0,n.jsx)(a.h3,{id:"general",children:"General"}),"\n",(0,n.jsx)(a.h4,{id:"reading-mode",children:"Reading mode"}),"\n",(0,n.jsx)(a.p,{children:"Four reading modes are available:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Left to right"}),"\n",(0,n.jsx)(a.li,{children:"Right to left"}),"\n",(0,n.jsx)(a.li,{children:"Vertical"}),"\n",(0,n.jsx)(a.li,{children:"Webtoon: displays all the pages in a continuous vertical strip"}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["The Webreader will automatically use the ",(0,n.jsx)(a.em,{children:"Reading direction"})," specified in the Book metadata."]}),"\n",(0,n.jsx)(a.h4,{id:"animate-page-transitions",children:"Animate page transitions"}),"\n",(0,n.jsx)(a.p,{children:"If enable, a smooth transition will be used to switch between pages."}),"\n",(0,n.jsx)(a.h4,{id:"gestures",children:"Gestures"}),"\n",(0,n.jsx)(a.p,{children:"Touch gestures are available in the Page reader only (Left to right, Right to left, Vertical), and can be disabled if necessary."}),"\n",(0,n.jsx)(a.h3,{id:"display",children:"Display"}),"\n",(0,n.jsx)(a.h4,{id:"background-color",children:"Background color"}),"\n",(0,n.jsx)(a.p,{children:"You can choose the background color of the reader between white and black."}),"\n",(0,n.jsx)(a.h3,{id:"reader-specific-options-paged-reader",children:"Reader specific options: Paged reader"}),"\n",(0,n.jsx)(a.h4,{id:"scale-type",children:"Scale type"}),"\n",(0,n.jsx)(a.p,{children:"Four scale types are available:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Fit to screen"}),"\n",(0,n.jsx)(a.li,{children:"Fit to width"}),"\n",(0,n.jsx)(a.li,{children:"Fit to height"}),"\n",(0,n.jsx)(a.li,{children:"Original"}),"\n"]}),"\n",(0,n.jsx)(a.h4,{id:"double-pages",children:"Double pages"}),"\n",(0,n.jsx)(a.p,{children:"When enabled, the Webreader will display two pages on the same screen, like an open book, with the following exceptions:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"The first and last page will always be shown as a single page"}),"\n",(0,n.jsx)(a.li,{children:"If a page has a landscape orientation (width > height), it will be show as a single page"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"thumbnails-explorer",children:"Thumbnails explorer"}),"\n",(0,n.jsx)(a.p,{children:"You can use the Thumbnails explorer to have an overview of all the pages in the book, and to quickly navigate to a particular page."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/thumbnails-explorer.png",alt:"Thumbnails explorer"}),"\n",(0,n.jsx)(a.h2,{id:"help-dialog",children:"Help dialog"}),"\n",(0,n.jsx)(a.p,{children:"The help dialog will display the available keyboard shortcuts. The dialog is context-aware, and will only show shortcuts that are relevant to the current reading mode."})]})}function c(e={}){const{wrapper:a}={...(0,r.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1670:(e,a,i)=>{i.d(a,{Z:()=>l,a:()=>s});var n=i(7378);const r={},t=n.createContext(r);function s(e){const a=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(t.Provider,{value:a},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7526],{163:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>d,contentTitle:()=>s,default:()=>c,frontMatter:()=>t,metadata:()=>l,toc:()=>o});var n=i(2540),r=i(3023);const t={},s="Read with the Webreader",l={id:"guides/webreader",title:"Read with the Webreader",description:"Komga has an integrated Webreader packed with features.",source:"@site/docs/guides/webreader.md",sourceDirName:"guides",slug:"/guides/webreader",permalink:"/docs/guides/webreader",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webreader.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Readers",permalink:"/docs/category/readers"},next:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"}},d={},o=[{value:"Settings",id:"settings",level:2},{value:"General",id:"general",level:3},{value:"Reading mode",id:"reading-mode",level:4},{value:"Animate page transitions",id:"animate-page-transitions",level:4},{value:"Gestures",id:"gestures",level:4},{value:"Display",id:"display",level:3},{value:"Background color",id:"background-color",level:4},{value:"Reader specific options: Paged reader",id:"reader-specific-options-paged-reader",level:3},{value:"Scale type",id:"scale-type",level:4},{value:"Double pages",id:"double-pages",level:4},{value:"Thumbnails explorer",id:"thumbnails-explorer",level:2},{value:"Help dialog",id:"help-dialog",level:2}];function h(e){const a={em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h1,{id:"read-with-the-webreader",children:"Read with the Webreader"}),"\n",(0,n.jsx)(a.p,{children:"Komga has an integrated Webreader packed with features."}),"\n",(0,n.jsx)(a.p,{children:"To start reading a book, you can click on the read button either on the book card, or on the book details screen."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/book-card.png",style:{maxHeight:"300px"},alt:"Book Card Read Button"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/read-button.png",style:{maxHeight:"300px"},alt:"Book Details read button"}),"\n",(0,n.jsx)(a.p,{children:"Here is an overview of the Webreader's interface."}),"\n",(0,n.jsx)("a",{href:"/assets/media/guides/webreader/reader.png",children:(0,n.jsx)("img",{src:"/assets/media/guides/webreader/reader.png",alt:"Webreader overview"})}),"\n",(0,n.jsx)(a.h2,{id:"settings",children:"Settings"}),"\n",(0,n.jsx)(a.p,{children:"The Webreader can be configured in various ways from the settings dialog."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/reader-settings.png",style:{maxHeight:"400px"},alt:"Webreader settings"}),"\n",(0,n.jsx)(a.h3,{id:"general",children:"General"}),"\n",(0,n.jsx)(a.h4,{id:"reading-mode",children:"Reading mode"}),"\n",(0,n.jsx)(a.p,{children:"Four reading modes are available:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Left to right"}),"\n",(0,n.jsx)(a.li,{children:"Right to left"}),"\n",(0,n.jsx)(a.li,{children:"Vertical"}),"\n",(0,n.jsx)(a.li,{children:"Webtoon: displays all the pages in a continuous vertical strip"}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["The Webreader will automatically use the ",(0,n.jsx)(a.em,{children:"Reading direction"})," specified in the Book metadata."]}),"\n",(0,n.jsx)(a.h4,{id:"animate-page-transitions",children:"Animate page transitions"}),"\n",(0,n.jsx)(a.p,{children:"If enable, a smooth transition will be used to switch between pages."}),"\n",(0,n.jsx)(a.h4,{id:"gestures",children:"Gestures"}),"\n",(0,n.jsx)(a.p,{children:"Touch gestures are available in the Page reader only (Left to right, Right to left, Vertical), and can be disabled if necessary."}),"\n",(0,n.jsx)(a.h3,{id:"display",children:"Display"}),"\n",(0,n.jsx)(a.h4,{id:"background-color",children:"Background color"}),"\n",(0,n.jsx)(a.p,{children:"You can choose the background color of the reader between white and black."}),"\n",(0,n.jsx)(a.h3,{id:"reader-specific-options-paged-reader",children:"Reader specific options: Paged reader"}),"\n",(0,n.jsx)(a.h4,{id:"scale-type",children:"Scale type"}),"\n",(0,n.jsx)(a.p,{children:"Four scale types are available:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Fit to screen"}),"\n",(0,n.jsx)(a.li,{children:"Fit to width"}),"\n",(0,n.jsx)(a.li,{children:"Fit to height"}),"\n",(0,n.jsx)(a.li,{children:"Original"}),"\n"]}),"\n",(0,n.jsx)(a.h4,{id:"double-pages",children:"Double pages"}),"\n",(0,n.jsx)(a.p,{children:"When enabled, the Webreader will display two pages on the same screen, like an open book, with the following exceptions:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"The first and last page will always be shown as a single page"}),"\n",(0,n.jsx)(a.li,{children:"If a page has a landscape orientation (width > height), it will be show as a single page"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"thumbnails-explorer",children:"Thumbnails explorer"}),"\n",(0,n.jsx)(a.p,{children:"You can use the Thumbnails explorer to have an overview of all the pages in the book, and to quickly navigate to a particular page."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/webreader/thumbnails-explorer.png",alt:"Thumbnails explorer"}),"\n",(0,n.jsx)(a.h2,{id:"help-dialog",children:"Help dialog"}),"\n",(0,n.jsx)(a.p,{children:"The help dialog will display the available keyboard shortcuts. The dialog is context-aware, and will only show shortcuts that are relevant to the current reading mode."})]})}function c(e={}){const{wrapper:a}={...(0,r.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},3023:(e,a,i)=>{i.d(a,{R:()=>s,x:()=>l});var n=i(3696);const r={},t=n.createContext(r);function s(e){const a=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(t.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7da97648.9da41fe6.js b/assets/js/7da97648.9da41fe6.js deleted file mode 100644 index 702d596c..00000000 --- a/assets/js/7da97648.9da41fe6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5671],{3923:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var n=s(4246),t=s(1670);const o={},a="Read with Tachiyomi",r={id:"guides/tachiyomi",title:"Read with Tachiyomi",description:"Install and configure",source:"@site/docs/guides/tachiyomi.md",sourceDirName:"guides",slug:"/guides/tachiyomi",permalink:"/docs/guides/tachiyomi",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/tachiyomi.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with the Webreader",permalink:"/docs/guides/webreader"},next:{title:"Read with Paperback",permalink:"/docs/guides/paperback"}},c={},d=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Browse",id:"browse",level:2},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"read-with-tachiyomi",children:"Read with Tachiyomi"}),"\n",(0,n.jsx)(i.h2,{id:"install-and-configure",children:"Install and configure"}),"\n",(0,n.jsxs)(i.p,{children:["Komga has an official extension for ",(0,n.jsx)(i.a,{href:"https://tachiyomi.org",children:"Tachiyomi"}),", available from within Tachiyomi's extension menu."]}),"\n",(0,n.jsx)(i.p,{children:"Once installed, the extension will let you configure up to 3 Komga servers."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-extension-info.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension info"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-configuration.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension configuration"}),"\n",(0,n.jsxs)(i.p,{children:["You will need to configure the extension with your ",(0,n.jsx)(i.em,{children:"server address"}),", ",(0,n.jsx)(i.em,{children:"username"})," and ",(0,n.jsx)(i.em,{children:"password"})," before you can use it."]}),"\n",(0,n.jsxs)(i.admonition,{type:"tip",children:[(0,n.jsxs)(i.p,{children:["Example server address: ",(0,n.jsx)(i.code,{children:"http://my.server:25600(/baseUrl)"})]}),(0,n.jsx)(i.p,{children:(0,n.jsxs)(i.strong,{children:["Note that there is no trailing slash (",(0,n.jsx)(i.code,{children:"/"}),")."]})})]}),"\n",(0,n.jsx)(i.h2,{id:"browse",children:"Browse"}),"\n",(0,n.jsx)(i.p,{children:"You can browse series, use the filter menu, and search for series."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-browse.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension browse"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-filters.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension filters"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-search.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension search"}),"\n",(0,n.jsx)(i.h2,{id:"track-read-progress",children:"Track read progress"}),"\n",(0,n.jsxs)(i.p,{children:["Tachiyomi starting from ",(0,n.jsx)(i.code,{children:"0.12.1"})," can keep your read progress in sync with your Komga server. Check the official Tachiyomi website for ",(0,n.jsx)(i.a,{href:"https://tachiyomi.org/help/guides/tracking/#what-is-tracking",children:"instructions"}),"."]}),"\n",(0,n.jsx)(i.p,{children:"Requirements:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["Tachiyomi ",(0,n.jsx)(i.code,{children:"0.12.1+"})]}),"\n",(0,n.jsxs)(i.li,{children:["Komga ",(0,n.jsx)(i.code,{children:"0. 95.2+"})]}),"\n",(0,n.jsxs)(i.li,{children:["Tachiyomi Komga extension ",(0,n.jsx)(i.code,{children:"1.2.24+"})]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"changelog-and-compatibility",children:"Changelog and Compatibility"}),"\n",(0,n.jsxs)(i.p,{children:["Each version of the Komga extension need a specific version of the Komga server to work properly. Check the ",(0,n.jsx)(i.a,{href:"https://github.com/inorichi/tachiyomi-extensions/blob/master/src/all/komga/CHANGELOG.md",children:"CHANGELOG"})," for more information."]})]})}function l(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},1670:(e,i,s)=>{s.d(i,{Z:()=>r,a:()=>a});var n=s(7378);const t={},o=n.createContext(t);function a(e){const i=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7da97648.e2da54be.js b/assets/js/7da97648.e2da54be.js new file mode 100644 index 00000000..ce05142c --- /dev/null +++ b/assets/js/7da97648.e2da54be.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2379],{7691:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=s(2540),t=s(3023);const o={},r="Read with Tachiyomi",a={id:"guides/tachiyomi",title:"Read with Tachiyomi",description:"Install and configure",source:"@site/docs/guides/tachiyomi.md",sourceDirName:"guides",slug:"/guides/tachiyomi",permalink:"/docs/guides/tachiyomi",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/tachiyomi.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with the Webreader",permalink:"/docs/guides/webreader"},next:{title:"Read with Paperback",permalink:"/docs/guides/paperback"}},c={},d=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Browse",id:"browse",level:2},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"read-with-tachiyomi",children:"Read with Tachiyomi"}),"\n",(0,n.jsx)(i.h2,{id:"install-and-configure",children:"Install and configure"}),"\n",(0,n.jsxs)(i.p,{children:["Komga has an official extension for ",(0,n.jsx)(i.a,{href:"https://tachiyomi.org",children:"Tachiyomi"}),", available from within Tachiyomi's extension menu."]}),"\n",(0,n.jsx)(i.p,{children:"Once installed, the extension will let you configure up to 3 Komga servers."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-extension-info.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension info"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-configuration.png",style:{maxHeight:"600px"},alt:"Tachiyomi extension configuration"}),"\n",(0,n.jsxs)(i.p,{children:["You will need to configure the extension with your ",(0,n.jsx)(i.em,{children:"server address"}),", ",(0,n.jsx)(i.em,{children:"username"})," and ",(0,n.jsx)(i.em,{children:"password"})," before you can use it."]}),"\n",(0,n.jsxs)(i.admonition,{type:"tip",children:[(0,n.jsxs)(i.p,{children:["Example server address: ",(0,n.jsx)(i.code,{children:"http://my.server:25600(/baseUrl)"})]}),(0,n.jsx)(i.p,{children:(0,n.jsxs)(i.strong,{children:["Note that there is no trailing slash (",(0,n.jsx)(i.code,{children:"/"}),")."]})})]}),"\n",(0,n.jsx)(i.h2,{id:"browse",children:"Browse"}),"\n",(0,n.jsx)(i.p,{children:"You can browse series, use the filter menu, and search for series."}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-browse.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension browse"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-filters.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension filters"}),"\n",(0,n.jsx)("img",{src:"/assets/media/guides/tachiyomi/tachiyomi-search.png",style:{maxHeight:"500px"},alt:"Tachiyomi extension search"}),"\n",(0,n.jsx)(i.h2,{id:"track-read-progress",children:"Track read progress"}),"\n",(0,n.jsxs)(i.p,{children:["Tachiyomi starting from ",(0,n.jsx)(i.code,{children:"0.12.1"})," can keep your read progress in sync with your Komga server. Check the official Tachiyomi website for ",(0,n.jsx)(i.a,{href:"https://tachiyomi.org/help/guides/tracking/#what-is-tracking",children:"instructions"}),"."]}),"\n",(0,n.jsx)(i.p,{children:"Requirements:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["Tachiyomi ",(0,n.jsx)(i.code,{children:"0.12.1+"})]}),"\n",(0,n.jsxs)(i.li,{children:["Komga ",(0,n.jsx)(i.code,{children:"0. 95.2+"})]}),"\n",(0,n.jsxs)(i.li,{children:["Tachiyomi Komga extension ",(0,n.jsx)(i.code,{children:"1.2.24+"})]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"changelog-and-compatibility",children:"Changelog and Compatibility"}),"\n",(0,n.jsxs)(i.p,{children:["Each version of the Komga extension need a specific version of the Komga server to work properly. Check the ",(0,n.jsx)(i.a,{href:"https://github.com/inorichi/tachiyomi-extensions/blob/master/src/all/komga/CHANGELOG.md",children:"CHANGELOG"})," for more information."]})]})}function l(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},3023:(e,i,s)=>{s.d(i,{R:()=>r,x:()=>a});var n=s(3696);const t={},o=n.createContext(t);function r(e){const i=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/814f3328.4689fea6.js b/assets/js/814f3328.890b9f8e.js similarity index 83% rename from assets/js/814f3328.4689fea6.js rename to assets/js/814f3328.890b9f8e.js index c93ccc74..463142de 100644 --- a/assets/js/814f3328.4689fea6.js +++ b/assets/js/814f3328.890b9f8e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"eBook drop 2","permalink":"/blog/ebook-drop2","unlisted":false},{"title":"eBook support","permalink":"/blog/ebook-support","unlisted":false},{"title":"Prepare for v1.0.0","permalink":"/blog/prepare-v1","unlisted":false}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7472],{5513:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"eBook drop 2","permalink":"/blog/ebook-drop2","unlisted":false},{"title":"eBook support","permalink":"/blog/ebook-support","unlisted":false},{"title":"Prepare for v1.0.0","permalink":"/blog/prepare-v1","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/896f20ab.2ddc7ce9.js b/assets/js/896f20ab.48fadc48.js similarity index 78% rename from assets/js/896f20ab.2ddc7ce9.js rename to assets/js/896f20ab.48fadc48.js index 8e94b7a7..3107376b 100644 --- a/assets/js/896f20ab.2ddc7ce9.js +++ b/assets/js/896f20ab.48fadc48.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7426],{5414:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/breaking-change","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8341],{7930:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/breaking-change","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file diff --git a/assets/js/9127.bfdebe15.js b/assets/js/8973.c286a7fa.js similarity index 58% rename from assets/js/9127.bfdebe15.js rename to assets/js/8973.c286a7fa.js index 3e26acc8..d598c332 100644 --- a/assets/js/9127.bfdebe15.js +++ b/assets/js/8973.c286a7fa.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9127],{9127:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8973],{8973:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/8a3a4158.3543390e.js b/assets/js/8a3a4158.cb0c86e5.js similarity index 63% rename from assets/js/8a3a4158.3543390e.js rename to assets/js/8a3a4158.cb0c86e5.js index e8251839..dc5582c9 100644 --- a/assets/js/8a3a4158.3543390e.js +++ b/assets/js/8a3a4158.cb0c86e5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1987],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6696],{1966:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/8badb5d4.64f16185.js b/assets/js/8badb5d4.64f16185.js new file mode 100644 index 00000000..2e4a411b --- /dev/null +++ b/assets/js/8badb5d4.64f16185.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5109],{7830:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>l});var t=s(2540),i=s(3023);const d={},r="Image Types",a={id:"guides/image-formats",title:"Image Types",description:"Decoding images",source:"@site/docs/guides/image-formats.md",sourceDirName:"guides",slug:"/guides/image-formats",permalink:"/docs/guides/image-formats",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/image-formats.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"},next:{title:"One-Shots",permalink:"/docs/guides/oneshots"}},c={},l=[{value:"Decoding images",id:"decoding-images",level:2},{value:"Common types",id:"common-types",level:2},{value:"Advanced types",id:"advanced-types",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"image-types",children:"Image Types"}),"\n",(0,t.jsx)(n.h2,{id:"decoding-images",children:"Decoding images"}),"\n",(0,t.jsx)(n.p,{children:"Komga doesn't always need to decode images within your books. Image decoding is necessary in the following cases:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"thumbnail generation"}),"\n",(0,t.jsx)(n.li,{children:"ISBN barcode detection"}),"\n",(0,t.jsx)(n.li,{children:"analyze page dimensions"}),"\n",(0,t.jsx)(n.li,{children:"on-the-fly page conversion"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If the client requesting a page can decode the format, Komga passes the raw image data without decoding."}),"\n",(0,t.jsx)(n.h2,{id:"common-types",children:"Common types"}),"\n",(0,t.jsx)(n.p,{children:"The following types are supported on every platform:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"JPEG"}),"\n",(0,t.jsx)(n.li,{children:"PNG"}),"\n",(0,t.jsx)(n.li,{children:"GIF"}),"\n",(0,t.jsx)(n.li,{children:"WebP"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"advanced-types",children:"Advanced types"}),"\n",(0,t.jsx)(n.p,{children:"More advanced types are supported on some platforms only, as they rely on native libraries for decoding."}),"\n",(0,t.jsx)(n.p,{children:"For WebP, the native library will be used if present. Else, the Java implementation will be used as fallback."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Platform"}),(0,t.jsx)(n.th,{children:"JPEG XL (jxl)"}),(0,t.jsx)(n.th,{children:"AVIF / HEIF"}),(0,t.jsx)(n.th,{children:"WebP"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"macOS app"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (native)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Windows app"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (java)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker amd64"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (native)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm64"}),(0,t.jsx)(n.td,{children:"\u274c"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (native)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm"}),(0,t.jsx)(n.td,{children:"\u274c"}),(0,t.jsx)(n.td,{children:"\u274c"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (java)"]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["When using the ",(0,t.jsx)(n.code,{children:"jar"}),", you will need to provide the native libraries yourself, and run Java with the correct arguments. You can check for more details ",(0,t.jsx)(n.a,{href:"https://github.com/gotson/NightMonkeys#requirements",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},3023:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>a});var t=s(3696);const i={},d=t.createContext(i);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8badb5d4.f87441e2.js b/assets/js/8badb5d4.f87441e2.js deleted file mode 100644 index 4cc5b924..00000000 --- a/assets/js/8badb5d4.f87441e2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3562],{1117:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>l});var t=s(4246),i=s(1670);const d={},r="Image Types",a={id:"guides/image-formats",title:"Image Types",description:"Decoding images",source:"@site/docs/guides/image-formats.md",sourceDirName:"guides",slug:"/guides/image-formats",permalink:"/docs/guides/image-formats",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/image-formats.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"},next:{title:"One-Shots",permalink:"/docs/guides/oneshots"}},c={},l=[{value:"Decoding images",id:"decoding-images",level:2},{value:"Common types",id:"common-types",level:2},{value:"Advanced types",id:"advanced-types",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"image-types",children:"Image Types"}),"\n",(0,t.jsx)(n.h2,{id:"decoding-images",children:"Decoding images"}),"\n",(0,t.jsx)(n.p,{children:"Komga doesn't always need to decode images within your books. Image decoding is necessary in the following cases:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"thumbnail generation"}),"\n",(0,t.jsx)(n.li,{children:"ISBN barcode detection"}),"\n",(0,t.jsx)(n.li,{children:"analyze page dimensions"}),"\n",(0,t.jsx)(n.li,{children:"on-the-fly page conversion"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If the client requesting a page can decode the format, Komga passes the raw image data without decoding."}),"\n",(0,t.jsx)(n.h2,{id:"common-types",children:"Common types"}),"\n",(0,t.jsx)(n.p,{children:"The following types are supported on every platform:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"JPEG"}),"\n",(0,t.jsx)(n.li,{children:"PNG"}),"\n",(0,t.jsx)(n.li,{children:"GIF"}),"\n",(0,t.jsx)(n.li,{children:"WebP"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"advanced-types",children:"Advanced types"}),"\n",(0,t.jsx)(n.p,{children:"More advanced types are supported on some platforms only, as they rely on native libraries for decoding."}),"\n",(0,t.jsx)(n.p,{children:"For WebP, the native library will be used if present. Else, the Java implementation will be used as fallback."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Platform"}),(0,t.jsx)(n.th,{children:"JPEG XL (jxl)"}),(0,t.jsx)(n.th,{children:"AVIF / HEIF"}),(0,t.jsx)(n.th,{children:"WebP"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"macOS app"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (native)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Windows app"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (java)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker amd64"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (native)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm64"}),(0,t.jsx)(n.td,{children:"\u274c"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (native)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm"}),(0,t.jsx)(n.td,{children:"\u274c"}),(0,t.jsx)(n.td,{children:"\u274c"}),(0,t.jsxs)(n.td,{children:["\u2714\ufe0f"," (java)"]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["When using the ",(0,t.jsx)(n.code,{children:"jar"}),", you will need to provide the native libraries yourself, and run Java with the correct arguments. You can check for more details ",(0,t.jsx)(n.a,{href:"https://github.com/gotson/NightMonkeys#requirements",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},1670:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var t=s(7378);const i={},d=t.createContext(i);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4670.ecdd816c.js b/assets/js/9074.ddc936f5.js similarity index 58% rename from assets/js/4670.ecdd816c.js rename to assets/js/9074.ddc936f5.js index 9038f5e9..51c46bdc 100644 --- a/assets/js/4670.ecdd816c.js +++ b/assets/js/9074.ddc936f5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4670],{4670:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9074],{9074:(e,s,b)=>{b.r(s)}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.5847a488.js b/assets/js/935f2afb.5847a488.js deleted file mode 100644 index f909b7ed..00000000 --- a/assets/js/935f2afb.5847a488.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/docs/introduction","docId":"introduction","unlisted":false},{"type":"category","label":"Installation","collapsed":false,"items":[{"type":"category","label":"Official methods","items":[{"type":"link","label":"Install from the Microsoft Store","href":"/docs/installation/ms-store","docId":"installation/ms-store","unlisted":false},{"type":"link","label":"Install the Desktop application","href":"/docs/installation/desktop","docId":"installation/desktop","unlisted":false},{"type":"link","label":"Run with Docker","href":"/docs/installation/docker","docId":"installation/docker","unlisted":false},{"type":"link","label":"Run with the Jar file","href":"/docs/installation/jar","docId":"installation/jar","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/official-methods"},{"type":"link","label":"Install via third-party integrations","href":"/docs/installation/thirdparty","docId":"installation/thirdparty","unlisted":false},{"type":"category","label":"Configuration","items":[{"type":"link","label":"Expose your server","href":"/docs/installation/https","docId":"installation/https","unlisted":false},{"type":"link","label":"Social login","href":"/docs/installation/oauth2","docId":"installation/oauth2","unlisted":false},{"type":"link","label":"Google Drive and rclone","href":"/docs/installation/gdrive","docId":"installation/gdrive","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/installation/configuration"}],"collapsible":true,"href":"/docs/category/installation"},{"type":"category","label":"Guides","collapsed":true,"items":[{"type":"link","label":"Accessing the web interface","href":"/docs/guides/webui","docId":"guides/webui","unlisted":false},{"type":"link","label":"Desktop Application","href":"/docs/guides/desktop","docId":"guides/desktop","unlisted":false},{"type":"link","label":"Libraries","href":"/docs/guides/libraries","docId":"guides/libraries","unlisted":false},{"type":"link","label":"Emptying Library Trash","href":"/docs/guides/trash","docId":"guides/trash","unlisted":false},{"type":"link","label":"Scanning, Analyzing and Refreshing Metadata","href":"/docs/guides/scan-analysis-refresh","docId":"guides/scan-analysis-refresh","unlisted":false},{"type":"link","label":"Image Types","href":"/docs/guides/image-formats","docId":"guides/image-formats","unlisted":false},{"type":"link","label":"One-Shots","href":"/docs/guides/oneshots","docId":"guides/oneshots","unlisted":false},{"type":"link","label":"Edit Metadata","href":"/docs/guides/edit-metadata","docId":"guides/edit-metadata","unlisted":false},{"type":"link","label":"Local Artwork Assets","href":"/docs/guides/local-artwork-assets","docId":"guides/local-artwork-assets","unlisted":false},{"type":"link","label":"User accounts","href":"/docs/guides/user-accounts","docId":"guides/user-accounts","unlisted":false},{"type":"link","label":"Server settings & management","href":"/docs/guides/server-settings","docId":"guides/server-settings","unlisted":false},{"type":"link","label":"Read progress","href":"/docs/guides/read-progress","docId":"guides/read-progress","unlisted":false},{"type":"link","label":"Collections","href":"/docs/guides/collections","docId":"guides/collections","unlisted":false},{"type":"link","label":"Read lists","href":"/docs/guides/readlists","docId":"guides/readlists","unlisted":false},{"type":"link","label":"Full Text Search","href":"/docs/guides/search","docId":"guides/search","unlisted":false},{"type":"link","label":"Import Books","href":"/docs/guides/import-books","docId":"guides/import-books","unlisted":false},{"type":"link","label":"Duplicate Files","href":"/docs/guides/duplicate-files","docId":"guides/duplicate-files","unlisted":false},{"type":"link","label":"Duplicate Pages","href":"/docs/guides/duplicate-pages","docId":"guides/duplicate-pages","unlisted":false},{"type":"category","label":"Readers","items":[{"type":"link","label":"Read with the Webreader","href":"/docs/guides/webreader","docId":"guides/webreader","unlisted":false},{"type":"link","label":"Read with Tachiyomi","href":"/docs/guides/tachiyomi","docId":"guides/tachiyomi","unlisted":false},{"type":"link","label":"Read with Paperback","href":"/docs/guides/paperback","docId":"guides/paperback","unlisted":false},{"type":"link","label":"Read with CDisplayEx","href":"/docs/guides/cdisplayex","docId":"guides/cdisplayex","unlisted":false},{"type":"link","label":"Read with any OPDS reader","href":"/docs/guides/opds","docId":"guides/opds","unlisted":false},{"type":"link","label":"Read with Panels on iOS","href":"/docs/guides/panels","docId":"guides/panels","unlisted":false},{"type":"link","label":"Read with Chunky Reader (iPad)","href":"/docs/guides/chunky","docId":"guides/chunky","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/readers"},{"type":"link","label":"Theme","href":"/docs/guides/theme","docId":"guides/theme","unlisted":false},{"type":"link","label":"Announcements","href":"/docs/guides/announcements","docId":"guides/announcements","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs/guides/cli","docId":"guides/cli","unlisted":false}],"collapsible":true,"href":"/docs/category/guides"},{"type":"link","label":"Contribution","href":"/docs/contribution","docId":"contribution","unlisted":false},{"type":"link","label":"Community","href":"/docs/community","docId":"community","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/docs/faq","docId":"faq","unlisted":false}],"api":[{"type":"category","label":"REST API","items":[{"type":"link","label":"Deprecation","href":"/docs/api/deprecation","docId":"api/deprecation","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/api/rest"}]},"docs":{"api/deprecation":{"id":"api/deprecation","title":"Deprecation","description":"To be removed in 2.0.0","sidebar":"api"},"api/rest":{"id":"api/rest","title":"REST API","description":"Komga offers a REST API, which you can browse using Swagger. It\'s available at /swagger-ui.html.","sidebar":"api"},"community":{"id":"community","title":"Community","description":"This page lists community applications or tools that can be used alongside Komga.","sidebar":"docsSidebar"},"contribution":{"id":"contribution","title":"Contribution","description":"Code","sidebar":"docsSidebar"},"faq":{"id":"faq","title":"Frequently Asked Questions","description":"I forgot my password","sidebar":"docsSidebar"},"guides/announcements":{"id":"guides/announcements","title":"Announcements","description":"Announcements from the Komga website will be shown inside the application.","sidebar":"docsSidebar"},"guides/cdisplayex":{"id":"guides/cdisplayex","title":"Read with CDisplayEx","description":"The premium version of CDisplayEx for Android allows you to connect","sidebar":"docsSidebar"},"guides/chunky":{"id":"guides/chunky","title":"Read with Chunky Reader (iPad)","description":"Chunky Reader does not work anymore with Komga 1.4.0+","sidebar":"docsSidebar"},"guides/cli":{"id":"guides/cli","title":"Command Line Interface","description":"Komga offers a few commands available from the command line.","sidebar":"docsSidebar"},"guides/collections":{"id":"guides/collections","title":"Collections","description":"Collections let you gather related series together. For example, you might add all the Batman series together in a \\"Batman\\" collection.","sidebar":"docsSidebar"},"guides/desktop":{"id":"guides/desktop","title":"Desktop Application","description":"The Desktop application runs in your menu bar / tray icon:","sidebar":"docsSidebar"},"guides/duplicate-files":{"id":"guides/duplicate-files","title":"Duplicate Files","description":"Komga can detect duplicate files among your books.","sidebar":"docsSidebar"},"guides/duplicate-pages":{"id":"guides/duplicate-pages","title":"Duplicate Pages","description":"Komga can detect duplicate pages among your books, and delete them manually or automatically.","sidebar":"docsSidebar"},"guides/edit-metadata":{"id":"guides/edit-metadata","title":"Edit Metadata","description":"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.","sidebar":"docsSidebar"},"guides/image-formats":{"id":"guides/image-formats","title":"Image Types","description":"Decoding images","sidebar":"docsSidebar"},"guides/import-books":{"id":"guides/import-books","title":"Import Books","description":"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).","sidebar":"docsSidebar"},"guides/libraries":{"id":"guides/libraries","title":"Libraries","description":"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.","sidebar":"docsSidebar"},"guides/local-artwork-assets":{"id":"guides/local-artwork-assets","title":"Local Artwork Assets","description":"Supported Artwork Image Formats","sidebar":"docsSidebar"},"guides/oneshots":{"id":"guides/oneshots","title":"One-Shots","description":"What are One-Shots?","sidebar":"docsSidebar"},"guides/opds":{"id":"guides/opds","title":"Read with any OPDS reader","description":"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.","sidebar":"docsSidebar"},"guides/panels":{"id":"guides/panels","title":"Read with Panels on iOS","description":"Background","sidebar":"docsSidebar"},"guides/paperback":{"id":"guides/paperback","title":"Read with Paperback","description":"Komga has an extension for Paperback, a free iOS and iPadOS reader.","sidebar":"docsSidebar"},"guides/read-progress":{"id":"guides/read-progress","title":"Read progress","description":"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.","sidebar":"docsSidebar"},"guides/readlists":{"id":"guides/readlists","title":"Read lists","description":"Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a \\"Wolverine\\" read list.","sidebar":"docsSidebar"},"guides/scan-analysis-refresh":{"id":"guides/scan-analysis-refresh","title":"Scanning, Analyzing and Refreshing Metadata","description":"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.","sidebar":"docsSidebar"},"guides/search":{"id":"guides/search","title":"Full Text Search","description":"Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.","sidebar":"docsSidebar"},"guides/server-settings":{"id":"guides/server-settings","title":"Server settings & management","description":"The Server Settings > Server screen allows for more configuration of your server.","sidebar":"docsSidebar"},"guides/tachiyomi":{"id":"guides/tachiyomi","title":"Read with Tachiyomi","description":"Install and configure","sidebar":"docsSidebar"},"guides/theme":{"id":"guides/theme","title":"Theme","description":"You can customize the application theme from the sidebar.","sidebar":"docsSidebar"},"guides/trash":{"id":"guides/trash","title":"Emptying Library Trash","description":"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server.","sidebar":"docsSidebar"},"guides/user-accounts":{"id":"guides/user-accounts","title":"User accounts","description":"The administrator of a Komga server has the ability to create other User Accounts for that server.","sidebar":"docsSidebar"},"guides/webreader":{"id":"guides/webreader","title":"Read with the Webreader","description":"Komga has an integrated Webreader packed with features.","sidebar":"docsSidebar"},"guides/webui":{"id":"guides/webui","title":"Accessing the web interface","description":"Once Komga is started, you can access the web interface at//:(/baseUrl).","sidebar":"docsSidebar"},"installation/configuration":{"id":"installation/configuration","title":"Configuration options","description":"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.","sidebar":"docsSidebar"},"installation/desktop":{"id":"installation/desktop","title":"Install the Desktop application","description":"You can install Komga from the Download page. Just follow the instructions on the page.","sidebar":"docsSidebar"},"installation/docker":{"id":"installation/docker","title":"Run with Docker","description":"Registries","sidebar":"docsSidebar"},"installation/gdrive":{"id":"installation/gdrive","title":"Google Drive and rclone","description":"If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.","sidebar":"docsSidebar"},"installation/https":{"id":"installation/https","title":"Expose your server","description":"HTTPS","sidebar":"docsSidebar"},"installation/jar":{"id":"installation/jar","title":"Run with the Jar file","description":"You need Java version 17+ to run Komga. Check your version with java -version.","sidebar":"docsSidebar"},"installation/ms-store":{"id":"installation/ms-store","title":"Install from the Microsoft Store","description":"You can install Komga from the Microsoft Store.","sidebar":"docsSidebar"},"installation/oauth2":{"id":"installation/oauth2","title":"Social login","description":"Komga supports social login via OAuth2 and OpenID Connect. In order for this to work, Komga needs to retrieve the user\'s email address via your provider, and will match it with the email of the Komga users.","sidebar":"docsSidebar"},"installation/thirdparty":{"id":"installation/thirdparty","title":"Install via third-party integrations","description":"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.","sidebar":"docsSidebar"},"introduction":{"id":"introduction","title":"Introduction","description":"What is Komga?","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.7279b6dd.js b/assets/js/935f2afb.7279b6dd.js new file mode 100644 index 00000000..852a21b8 --- /dev/null +++ b/assets/js/935f2afb.7279b6dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/docs/introduction","docId":"introduction","unlisted":false},{"type":"category","label":"Installation","collapsed":false,"items":[{"type":"category","label":"Official methods","items":[{"type":"link","label":"Install from the Microsoft Store","href":"/docs/installation/ms-store","docId":"installation/ms-store","unlisted":false},{"type":"link","label":"Install the Desktop application","href":"/docs/installation/desktop","docId":"installation/desktop","unlisted":false},{"type":"link","label":"Run with Docker","href":"/docs/installation/docker","docId":"installation/docker","unlisted":false},{"type":"link","label":"Run with the Jar file","href":"/docs/installation/jar","docId":"installation/jar","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/official-methods"},{"type":"link","label":"Install via third-party integrations","href":"/docs/installation/thirdparty","docId":"installation/thirdparty","unlisted":false},{"type":"category","label":"Configuration","items":[{"type":"link","label":"Expose your server","href":"/docs/installation/https","docId":"installation/https","unlisted":false},{"type":"link","label":"Social login","href":"/docs/installation/oauth2","docId":"installation/oauth2","unlisted":false},{"type":"link","label":"Google Drive and rclone","href":"/docs/installation/gdrive","docId":"installation/gdrive","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/installation/configuration"}],"collapsible":true,"href":"/docs/category/installation"},{"type":"category","label":"Guides","collapsed":true,"items":[{"type":"link","label":"Accessing the web interface","href":"/docs/guides/webui","docId":"guides/webui","unlisted":false},{"type":"link","label":"Desktop Application","href":"/docs/guides/desktop","docId":"guides/desktop","unlisted":false},{"type":"link","label":"Libraries","href":"/docs/guides/libraries","docId":"guides/libraries","unlisted":false},{"type":"link","label":"Emptying Library Trash","href":"/docs/guides/trash","docId":"guides/trash","unlisted":false},{"type":"link","label":"Scanning, Analyzing and Refreshing Metadata","href":"/docs/guides/scan-analysis-refresh","docId":"guides/scan-analysis-refresh","unlisted":false},{"type":"link","label":"Image Types","href":"/docs/guides/image-formats","docId":"guides/image-formats","unlisted":false},{"type":"link","label":"One-Shots","href":"/docs/guides/oneshots","docId":"guides/oneshots","unlisted":false},{"type":"link","label":"Edit Metadata","href":"/docs/guides/edit-metadata","docId":"guides/edit-metadata","unlisted":false},{"type":"link","label":"Local Artwork Assets","href":"/docs/guides/local-artwork-assets","docId":"guides/local-artwork-assets","unlisted":false},{"type":"link","label":"User accounts","href":"/docs/guides/user-accounts","docId":"guides/user-accounts","unlisted":false},{"type":"link","label":"Server settings & management","href":"/docs/guides/server-settings","docId":"guides/server-settings","unlisted":false},{"type":"link","label":"Read progress","href":"/docs/guides/read-progress","docId":"guides/read-progress","unlisted":false},{"type":"link","label":"Collections","href":"/docs/guides/collections","docId":"guides/collections","unlisted":false},{"type":"link","label":"Read lists","href":"/docs/guides/readlists","docId":"guides/readlists","unlisted":false},{"type":"link","label":"Full Text Search","href":"/docs/guides/search","docId":"guides/search","unlisted":false},{"type":"link","label":"Import Books","href":"/docs/guides/import-books","docId":"guides/import-books","unlisted":false},{"type":"link","label":"Duplicate Files","href":"/docs/guides/duplicate-files","docId":"guides/duplicate-files","unlisted":false},{"type":"link","label":"Duplicate Pages","href":"/docs/guides/duplicate-pages","docId":"guides/duplicate-pages","unlisted":false},{"type":"category","label":"Readers","items":[{"type":"link","label":"Read with the Webreader","href":"/docs/guides/webreader","docId":"guides/webreader","unlisted":false},{"type":"link","label":"Read with Tachiyomi","href":"/docs/guides/tachiyomi","docId":"guides/tachiyomi","unlisted":false},{"type":"link","label":"Read with Paperback","href":"/docs/guides/paperback","docId":"guides/paperback","unlisted":false},{"type":"link","label":"Read with CDisplayEx","href":"/docs/guides/cdisplayex","docId":"guides/cdisplayex","unlisted":false},{"type":"link","label":"Read with any OPDS reader","href":"/docs/guides/opds","docId":"guides/opds","unlisted":false},{"type":"link","label":"Read with Panels on iOS","href":"/docs/guides/panels","docId":"guides/panels","unlisted":false},{"type":"link","label":"Read with Chunky Reader (iPad)","href":"/docs/guides/chunky","docId":"guides/chunky","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/category/readers"},{"type":"link","label":"Theme","href":"/docs/guides/theme","docId":"guides/theme","unlisted":false},{"type":"link","label":"Announcements","href":"/docs/guides/announcements","docId":"guides/announcements","unlisted":false},{"type":"link","label":"Command Line Interface","href":"/docs/guides/cli","docId":"guides/cli","unlisted":false}],"collapsible":true,"href":"/docs/category/guides"},{"type":"link","label":"Contribution","href":"/docs/contribution","docId":"contribution","unlisted":false},{"type":"link","label":"Community","href":"/docs/community","docId":"community","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/docs/faq","docId":"faq","unlisted":false}],"api":[{"type":"category","label":"REST API","items":[{"type":"link","label":"Deprecation","href":"/docs/api/deprecation","docId":"api/deprecation","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/docs/api/rest"}]},"docs":{"api/deprecation":{"id":"api/deprecation","title":"Deprecation","description":"To be removed in 2.0.0","sidebar":"api"},"api/rest":{"id":"api/rest","title":"REST API","description":"Komga offers a REST API, which you can browse using Swagger. It\'s available at /swagger-ui.html.","sidebar":"api"},"community":{"id":"community","title":"Community","description":"This page lists community applications or tools that can be used alongside Komga.","sidebar":"docsSidebar"},"contribution":{"id":"contribution","title":"Contribution","description":"Code","sidebar":"docsSidebar"},"faq":{"id":"faq","title":"Frequently Asked Questions","description":"I forgot my password","sidebar":"docsSidebar"},"guides/announcements":{"id":"guides/announcements","title":"Announcements","description":"Announcements from the Komga website will be shown inside the application.","sidebar":"docsSidebar"},"guides/cdisplayex":{"id":"guides/cdisplayex","title":"Read with CDisplayEx","description":"The premium version of CDisplayEx for Android allows you to connect","sidebar":"docsSidebar"},"guides/chunky":{"id":"guides/chunky","title":"Read with Chunky Reader (iPad)","description":"Chunky Reader does not work anymore with Komga 1.4.0+","sidebar":"docsSidebar"},"guides/cli":{"id":"guides/cli","title":"Command Line Interface","description":"Komga offers a few commands available from the command line.","sidebar":"docsSidebar"},"guides/collections":{"id":"guides/collections","title":"Collections","description":"Collections let you gather related series together. For example, you might add all the Batman series together in a \\"Batman\\" collection.","sidebar":"docsSidebar"},"guides/desktop":{"id":"guides/desktop","title":"Desktop Application","description":"The Desktop application runs in your menu bar / tray icon:","sidebar":"docsSidebar"},"guides/duplicate-files":{"id":"guides/duplicate-files","title":"Duplicate Files","description":"Komga can detect duplicate files among your books.","sidebar":"docsSidebar"},"guides/duplicate-pages":{"id":"guides/duplicate-pages","title":"Duplicate Pages","description":"Komga can detect duplicate pages among your books, and delete them manually or automatically.","sidebar":"docsSidebar"},"guides/edit-metadata":{"id":"guides/edit-metadata","title":"Edit Metadata","description":"In some cases, when you add an item to your Library, information such as summaries or release date is retrieved from embedded metadata. These details are shown when viewing the item to provide information about the item and make using Komga a more enjoyable experience.","sidebar":"docsSidebar"},"guides/image-formats":{"id":"guides/image-formats","title":"Image Types","description":"Decoding images","sidebar":"docsSidebar"},"guides/import-books":{"id":"guides/import-books","title":"Import Books","description":"Komga lets you import files that are outside your existing libraries directly into existing series folder (from the Import > Books screen).","sidebar":"docsSidebar"},"guides/libraries":{"id":"guides/libraries","title":"Libraries","description":"You can separate content in different libraries, a library is a group of books. Libraries access can also be restricted to specific users.","sidebar":"docsSidebar"},"guides/local-artwork-assets":{"id":"guides/local-artwork-assets","title":"Local Artwork Assets","description":"Supported Artwork Image Formats","sidebar":"docsSidebar"},"guides/oneshots":{"id":"guides/oneshots","title":"One-Shots","description":"What are One-Shots?","sidebar":"docsSidebar"},"guides/opds":{"id":"guides/opds","title":"Read with any OPDS reader","description":"Komga should work with any OPDS reader, unfortunately most readers badly implement the OPDS protocol.","sidebar":"docsSidebar"},"guides/panels":{"id":"guides/panels","title":"Read with Panels on iOS","description":"Background","sidebar":"docsSidebar"},"guides/paperback":{"id":"guides/paperback","title":"Read with Paperback","description":"Komga has an extension for Paperback, a free iOS and iPadOS reader.","sidebar":"docsSidebar"},"guides/read-progress":{"id":"guides/read-progress","title":"Read progress","description":"Komga can track which books you have read, and books that you are currently reading. Reading progress is tracked for each user separately.","sidebar":"docsSidebar"},"guides/readlists":{"id":"guides/readlists","title":"Read lists","description":"Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a \\"Wolverine\\" read list.","sidebar":"docsSidebar"},"guides/scan-analysis-refresh":{"id":"guides/scan-analysis-refresh","title":"Scanning, Analyzing and Refreshing Metadata","description":"Once a library has been created, it is processed by Komga so all the files are matched to series and books, and metadata is gathered. As time goes on, you\u2019ll add and remove books to the libraries or make other changes that mean the library is no longer up-to-date. You can Scan libraries to bring them up-to-date. Scanning, Analyzing and Refreshing a library do different things.","sidebar":"docsSidebar"},"guides/search":{"id":"guides/search","title":"Full Text Search","description":"Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.","sidebar":"docsSidebar"},"guides/server-settings":{"id":"guides/server-settings","title":"Server settings & management","description":"The Server Settings > Server screen allows for more configuration of your server.","sidebar":"docsSidebar"},"guides/tachiyomi":{"id":"guides/tachiyomi","title":"Read with Tachiyomi","description":"Install and configure","sidebar":"docsSidebar"},"guides/theme":{"id":"guides/theme","title":"Theme","description":"You can customize the application theme from the sidebar.","sidebar":"docsSidebar"},"guides/trash":{"id":"guides/trash","title":"Emptying Library Trash","description":"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server.","sidebar":"docsSidebar"},"guides/user-accounts":{"id":"guides/user-accounts","title":"User accounts","description":"The administrator of a Komga server has the ability to create other User Accounts for that server.","sidebar":"docsSidebar"},"guides/webreader":{"id":"guides/webreader","title":"Read with the Webreader","description":"Komga has an integrated Webreader packed with features.","sidebar":"docsSidebar"},"guides/webui":{"id":"guides/webui","title":"Accessing the web interface","description":"Once Komga is started, you can access the web interface at//:(/baseUrl).","sidebar":"docsSidebar"},"installation/configuration":{"id":"installation/configuration","title":"Configuration options","description":"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.","sidebar":"docsSidebar"},"installation/desktop":{"id":"installation/desktop","title":"Install the Desktop application","description":"You can install Komga from the Download page. Just follow the instructions on the page.","sidebar":"docsSidebar"},"installation/docker":{"id":"installation/docker","title":"Run with Docker","description":"Registries","sidebar":"docsSidebar"},"installation/gdrive":{"id":"installation/gdrive","title":"Google Drive and rclone","description":"If your books are stored on Google Drive, you can use Plexdrive or rclone to make them accessible to Komga.","sidebar":"docsSidebar"},"installation/https":{"id":"installation/https","title":"Expose your server","description":"HTTPS","sidebar":"docsSidebar"},"installation/jar":{"id":"installation/jar","title":"Run with the Jar file","description":"You need Java version 17+ to run Komga. Check your version with java -version.","sidebar":"docsSidebar"},"installation/ms-store":{"id":"installation/ms-store","title":"Install from the Microsoft Store","description":"You can install Komga from the Microsoft Store.","sidebar":"docsSidebar"},"installation/oauth2":{"id":"installation/oauth2","title":"Social login","description":"Komga supports social login via OAuth2 and OpenID Connect. In order for this to work, Komga needs to retrieve the user\'s email address via your provider, and will match it with the email of the Komga users.","sidebar":"docsSidebar"},"installation/thirdparty":{"id":"installation/thirdparty","title":"Install via third-party integrations","description":"Those methods are not officially supported, if you encounter installation issues please contact the respective authors.","sidebar":"docsSidebar"},"introduction":{"id":"introduction","title":"Introduction","description":"What is Komga?","sidebar":"docsSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/97c4f258.cc76fc06.js b/assets/js/97c4f258.cc76fc06.js deleted file mode 100644 index 9d550c70..00000000 --- a/assets/js/97c4f258.cc76fc06.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[305],{7119:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var n=o(4246),s=o(1670);const r={},t="Configuration options",a={id:"installation/configuration",title:"Configuration options",description:"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.",source:"@site/docs/installation/configuration.md",sourceDirName:"installation",slug:"/installation/configuration",permalink:"/docs/installation/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/configuration.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install via third-party integrations",permalink:"/docs/installation/thirdparty"},next:{title:"Expose your server",permalink:"/docs/installation/https"}},l={},d=[{value:"Optional configuration",id:"optional-configuration",level:2},{value:"KOMGA_CONFIGDIR / komga.config-dir: <directory>
",id:"komga_configdir--komgaconfig-dir-directory",level:4},{value:"SERVER_PORT / server.port:<port>
",id:"server_port--serverport-port",level:4},{value:"SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path:<baseUrl>
",id:"server_servlet_context_path--serverservletcontext-path-baseurl",level:4},{value:"SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout:<duration>
",id:"server_servlet_session_timeout--serverservletsessiontimeout-duration",level:4},{value:"KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron:",id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron",level:4},{value:"<cron>
KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup:",id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse",level:4},{value:"<true/false>
KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions:",id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions",level:4},{value:"<exclusions>
KOMGA_REMEMBERME_KEY / komga.remember-me.key:",id:"komga_rememberme_key--komgaremember-mekey-key",level:4},{value:"<key>
KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity:",id:"komga_rememberme_validity--komgaremember-mevalidity-duration",level:4},{value:"<duration>
KOMGA_SESSIONTIMEOUT / komga.session-timeout:",id:"komga_sessiontimeout--komgasession-timeout-duration",level:4},{value:"KOMGA_DATABASE_FILE / komga.database.file:<duration>
<file path>
",id:"komga_database_file--komgadatabasefile-file-path",level:4},{value:"KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins:<origins>
",id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins",level:4},{value:"KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections:",id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse",level:4},{value:"<true/false>
KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists:",id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse",level:4},{value:"KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation:<true/false>
<true/false>
",id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse",level:4},{value:"KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification:<true/false>
",id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse",level:4},{value:"LOGGING_FILE_NAME / logging.file.name:<logfile name>
",id:"logging_file_name--loggingfilename-logfile-name",level:4},{value:"KOMGA_TASKCONSUMERS / komga.task-consumers:",id:"komga_taskconsumers--komgatask-consumers-int",level:4},{value:"<int>
KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max:",id:"komga_taskconsumersmax--komgatask-consumers-max-int",level:4},{value:"Sample Configuration File",id:"sample-configuration-file",level:2},{value:"Database performance",id:"database-performance",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h1:"h1",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"configuration-options",children:"Configuration options"}),"\n",(0,n.jsxs)(i.admonition,{type:"tip",children:[(0,n.jsx)(i.p,{children:"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour."}),(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.code,{children:"application.yml"})," file does not exist by default, you need to create one if you want to customize the configuration."]})]}),"\n",(0,n.jsxs)(i.p,{children:["Komga relies heavily on ",(0,n.jsx)(i.a,{href:"https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html",children:"Spring Boot's configuration"}),", leveraging ",(0,n.jsx)(i.code,{children:"profiles"})," and configuration ",(0,n.jsx)(i.code,{children:"properties"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["The easiest way to configure is either via environment variables (a good fit for ",(0,n.jsx)(i.code,{children:"docker"})," and ",(0,n.jsx)(i.code,{children:"docker-compose"}),") or by using an ",(0,n.jsx)(i.code,{children:"application.yml"})," file located in the configuration directory:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["The Docker image will load any ",(0,n.jsx)(i.code,{children:"application.yml"})," file located in the ",(0,n.jsx)(i.code,{children:"/config"})," mounted folder."]}),"\n",(0,n.jsxs)(i.li,{children:["The Jar will load any ",(0,n.jsx)(i.code,{children:"application.yml"})," file located in the ",(0,n.jsx)(i.code,{children:"komga.config-dir"})," directory (defaults to ",(0,n.jsx)(i.code,{children:"~/.komga"}),", ",(0,n.jsx)(i.a,{href:"#komga-configdir-komga-config-dir-directory",children:"more details"}),")."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["Each configuration key can have a different format depending if it's from the environment variable, or from the ",(0,n.jsx)(i.code,{children:"application.yml"})," file. In the following section I will provide both format in the form ",(0,n.jsx)(i.code,{children:"ENVIRONMENT_VARIABLE"})," / ",(0,n.jsx)(i.code,{children:"application-property"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["You can also specify configuration via the command line, when launching the ",(0,n.jsx)(i.code,{children:"jar"}),". Use the ",(0,n.jsx)(i.code,{children:"application-property"})," form, and prefix with ",(0,n.jsx)(i.code,{children:"--"}),". For example:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-shell",children:'java -jar komga.jar --server.servlet.context-path="/komga" --server.port=8443\n'})}),"\n",(0,n.jsx)(i.h2,{id:"optional-configuration",children:"Optional configuration"}),"\n",(0,n.jsx)(i.p,{children:"You can use some optional configuration keys:"}),"\n",(0,n.jsxs)(i.h4,{id:"komga_configdir--komgaconfig-dir-directory",children:["KOMGA_CONFIGDIR / komga.config-dir: ",(0,n.jsx)(i.code,{children:"<int>
"})]}),"\n",(0,n.jsx)(i.p,{children:"The Komga configuration directory. Will be used to store the logs, database, and any other file Komga needs."}),"\n",(0,n.jsx)(i.p,{children:"Defaults to:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"%LOCALAPPDATA%/Komga"})," on the ",(0,n.jsx)(i.em,{children:"Windows app"}),". That folder is virtualized by Windows."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"~/Library/Application Support/Komga"})," on the macOS app."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"~/.komga"})," otherwise."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.code,{children:"~"})," is your home directory on Unix, and your User profile on Windows."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsxs)(i.em,{children:["When overriding this configuration, you need to use ",(0,n.jsx)(i.code,{children:"${user.home}"})," instead of ",(0,n.jsx)(i.code,{children:"~"})," (this is a specific Spring Boot variable)."]})}),"\n",(0,n.jsxs)(i.h4,{id:"server_port--serverport-port",children:["SERVER_PORT / server.port: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"Port to listen to for the API and web interface."}),"\n",(0,n.jsxs)(i.p,{children:["Can also be configured from the ",(0,n.jsx)(i.a,{href:"/docs/guides/server-settings#server-port",children:"Server Settings"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"25600"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"server_servlet_context_path--serverservletcontext-path-baseurl",children:["SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"Base URL, useful if you need to reverse proxy with a subfolder."}),"\n",(0,n.jsxs)(i.p,{children:["Can also be configured from the ",(0,n.jsx)(i.a,{href:"/docs/guides/server-settings#base-url",children:"Server Settings"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"/"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"server_servlet_session_timeout--serverservletsessiontimeout-duration",children:["SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsxs)(i.p,{children:["The duration after which an inactive session will expire. You can specify the timeunit, for example ",(0,n.jsx)(i.code,{children:"14d"})," for 14 days, or ",(0,n.jsx)(i.code,{children:"24h"})," for 24 hours. If no unit is set, seconds will be used."]}),"\n",(0,n.jsx)(i.p,{children:"Defaults to 30 minutes."}),"\n",(0,n.jsx)(i.h4,{id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron",children:(0,n.jsxs)(i.del,{children:["KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been moved to ",(0,n.jsx)(i.a,{href:"/docs/guides/libraries#scan-interval",children:"Library options: scan interval"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse",children:(0,n.jsxs)(i.del,{children:["KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been moved to ",(0,n.jsx)(i.a,{href:"/docs/guides/libraries#scan-on-startup",children:"Library options: scan on startup"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions",children:(0,n.jsxs)(i.del,{children:["KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been moved to ",(0,n.jsx)(i.a,{href:"/docs/guides/libraries#directory-exclusions",children:"Library options: directory exclusions"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"komga_rememberme_key--komgaremember-mekey-key",children:(0,n.jsxs)(i.del,{children:["KOMGA_REMEMBERME_KEY / komga.remember-me.key: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsx)(i.h4,{id:"komga_rememberme_validity--komgaremember-mevalidity-duration",children:(0,n.jsxs)(i.del,{children:["KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsx)(i.h4,{id:"komga_sessiontimeout--komgasession-timeout-duration",children:(0,n.jsxs)(i.del,{children:["KOMGA_SESSIONTIMEOUT / komga.session-timeout: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been replaced by ",(0,n.jsx)(i.code,{children:"server.servlet.session.timeout"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"komga_database_file--komgadatabasefile-file-path",children:["KOMGA_DATABASE_FILE / komga.database.file: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"File path for the SQLite database."}),"\n",(0,n.jsxs)(i.p,{children:["If you want to change the directory, it is advised to change ",(0,n.jsx)(i.code,{children:"komga.config-dir"})," instead."]}),"\n",(0,n.jsx)(i.p,{children:"Defaults to:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"/config/database.sqlite"})," for ",(0,n.jsx)(i.em,{children:"Docker"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"\\${komga.config-dir}/database.sqlite"})," otherwise."]}),"\n"]}),"\n",(0,n.jsxs)(i.h4,{id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins",children:["KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"A list of origins to allow for CORS."}),"\n",(0,n.jsx)(i.p,{children:"Defaults to empty list."}),"\n",(0,n.jsx)(i.h4,{id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse",children:(0,n.jsxs)(i.del,{children:["KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsx)(i.h4,{id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse",children:(0,n.jsxs)(i.del,{children:["KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsxs)(i.h4,{id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse",children:["KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"A boolean indicating whether Komga should create new users when a login via OAuth2/OIDC succeeds, but there is no existing user with that email."}),"\n",(0,n.jsxs)(i.p,{children:["Such users will be created with a random password, which the user can subsequently change from the ",(0,n.jsx)(i.em,{children:"Account Settings"})," page later on, for example to be able to connect using OPDS or Tachiyomi."]}),"\n",(0,n.jsx)(i.admonition,{type:"warning",children:(0,n.jsx)(i.p,{children:"It is recommended to enable this only with OAuth2 providers you control"})}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"false"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse",children:["KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsxs)(i.p,{children:["A boolean indicating whether Komga should check whether the ",(0,n.jsx)(i.code,{children:"email_verified"})," claim is present and true in the OpenID Connect request."]}),"\n",(0,n.jsx)(i.admonition,{type:"warning",children:(0,n.jsx)(i.p,{children:"It is recommended to disable this only with OIDC providers that do not verify emails (like Azure AD)"})}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"logging_file_name--loggingfilename-logfile-name",children:["LOGGING_FILE_NAME / logging.file.name: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"Name of the log file."}),"\n",(0,n.jsxs)(i.p,{children:["If you want to change the directory, it is advised to change ",(0,n.jsx)(i.code,{children:"komga.config-dir"})," instead."]}),"\n",(0,n.jsx)(i.p,{children:"Defaults to:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"~/Library/Logs/Komga/komga.log"})," for the ",(0,n.jsx)(i.em,{children:"macOS app"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"/config/logs/komga.log"})," for ",(0,n.jsx)(i.em,{children:"Docker"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"\\${komga.config-dir}/komga.log"})," otherwise."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.code,{children:"~"})," is your home directory on Unix, and your User profile on Windows."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsxs)(i.em,{children:["When overriding this configuration, you need to use ",(0,n.jsx)(i.code,{children:"${user.home}"})," instead of ",(0,n.jsx)(i.code,{children:"~"})," (this is a specific Spring Boot variable)."]})}),"\n",(0,n.jsx)(i.h4,{id:"komga_taskconsumers--komgatask-consumers-int",children:(0,n.jsxs)(i.del,{children:["KOMGA_TASKCONSUMERS / komga.task-consumers: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been removed."}),"\n",(0,n.jsx)(i.h4,{id:"komga_taskconsumersmax--komgatask-consumers-max-int",children:(0,n.jsxs)(i.del,{children:["KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been removed."}),"\n",(0,n.jsx)(i.h2,{id:"sample-configuration-file",children:"Sample Configuration File"}),"\n",(0,n.jsxs)(i.p,{children:["Here is a sample ",(0,n.jsx)(i.code,{children:"application.yml"})," file in case you need to customize it. Keep only the lines you need."]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"# Only keep lines that are relevant to you!\n# Lines starting with # are comments\n# Make sure indentation is correct (2 spaces at every indentation level), yaml is very sensitive!\nkomga:\n database:\n file: ${user.home}/.komga/database.sqlite\n cors.allowed-origins:\n - http://localhost:8081\n - http://localhost:8082\n delete-empty-collections: true\n delete-empty-read-lists: true\nserver:\n port: 25600\n servlet:\n session.timeout: 7d # session timeout, here 7 days\n context-path: /komga\n"})}),"\n",(0,n.jsx)(i.h2,{id:"database-performance",children:"Database performance"}),"\n",(0,n.jsx)(i.admonition,{type:"warning",children:(0,n.jsx)(i.p,{children:"Use at your own risk!"})}),"\n",(0,n.jsx)(i.p,{children:"Some specific configuration keys are available to tweak the database performance."}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"komga:\n database:\n # sets the retry timeout when SQLITE_BUSY error happens\n busy-timeout: 30s\n \n # changes the journal mode\n # accepted values are: DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF\n # most likely to be set to wal if needed, check https://sqlite.org/wal.html for more details\n journal-mode: wal\n \n # pool size will determine the number of connections in the pool\n # this takes precedence over max-pool-size if set\n # defaults to undefined\n pool-size: 1\n \n # max-pool-size will determine the maximum number of connections in the pool\n # when set, the number of connections is set to the number of available processors capped at max-pool-size\n # defaults to 1\n max-pool-size: 8\n \n # pragmas accepts a list of key/value pairs where:\n # - key is the pragma name (see https://www.sqlite.org/pragma.html)\n # - value is the pragma value\n pragmas:\n # here are some example pragmas\n page_size: 1024\n synchronous: OFF\n"})})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1670:(e,i,o)=>{o.d(i,{Z:()=>a,a:()=>t});var n=o(7378);const s={},r=n.createContext(s);function t(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/97c4f258.f7873090.js b/assets/js/97c4f258.f7873090.js new file mode 100644 index 00000000..29bd02ae --- /dev/null +++ b/assets/js/97c4f258.f7873090.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1057],{6769:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var n=o(2540),s=o(3023);const r={},t="Configuration options",a={id:"installation/configuration",title:"Configuration options",description:"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour.",source:"@site/docs/installation/configuration.md",sourceDirName:"installation",slug:"/installation/configuration",permalink:"/docs/installation/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/configuration.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install via third-party integrations",permalink:"/docs/installation/thirdparty"},next:{title:"Expose your server",permalink:"/docs/installation/https"}},l={},d=[{value:"Optional configuration",id:"optional-configuration",level:2},{value:"KOMGA_CONFIGDIR / komga.config-dir: <directory>
",id:"komga_configdir--komgaconfig-dir-directory",level:4},{value:"SERVER_PORT / server.port:<port>
",id:"server_port--serverport-port",level:4},{value:"SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path:<baseUrl>
",id:"server_servlet_context_path--serverservletcontext-path-baseurl",level:4},{value:"SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout:<duration>
",id:"server_servlet_session_timeout--serverservletsessiontimeout-duration",level:4},{value:"KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron:",id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron",level:4},{value:"<cron>
KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup:",id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse",level:4},{value:"<true/false>
KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions:",id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions",level:4},{value:"<exclusions>
KOMGA_REMEMBERME_KEY / komga.remember-me.key:",id:"komga_rememberme_key--komgaremember-mekey-key",level:4},{value:"<key>
KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity:",id:"komga_rememberme_validity--komgaremember-mevalidity-duration",level:4},{value:"<duration>
KOMGA_SESSIONTIMEOUT / komga.session-timeout:",id:"komga_sessiontimeout--komgasession-timeout-duration",level:4},{value:"KOMGA_DATABASE_FILE / komga.database.file:<duration>
<file path>
",id:"komga_database_file--komgadatabasefile-file-path",level:4},{value:"KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins:<origins>
",id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins",level:4},{value:"KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections:",id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse",level:4},{value:"<true/false>
KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists:",id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse",level:4},{value:"KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation:<true/false>
<true/false>
",id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse",level:4},{value:"KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification:<true/false>
",id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse",level:4},{value:"LOGGING_FILE_NAME / logging.file.name:<logfile name>
",id:"logging_file_name--loggingfilename-logfile-name",level:4},{value:"KOMGA_TASKCONSUMERS / komga.task-consumers:",id:"komga_taskconsumers--komgatask-consumers-int",level:4},{value:"<int>
KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max:",id:"komga_taskconsumersmax--komgatask-consumers-max-int",level:4},{value:"Sample Configuration File",id:"sample-configuration-file",level:2},{value:"Database performance",id:"database-performance",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h1:"h1",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"configuration-options",children:"Configuration options"}),"\n",(0,n.jsxs)(i.admonition,{type:"tip",children:[(0,n.jsx)(i.p,{children:"Komga has sensible default values for all configuration keys. You only need to configure it if you want to change the default behaviour."}),(0,n.jsxs)(i.p,{children:["The ",(0,n.jsx)(i.code,{children:"application.yml"})," file does not exist by default, you need to create one if you want to customize the configuration."]})]}),"\n",(0,n.jsxs)(i.p,{children:["Komga relies heavily on ",(0,n.jsx)(i.a,{href:"https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html",children:"Spring Boot's configuration"}),", leveraging ",(0,n.jsx)(i.code,{children:"profiles"})," and configuration ",(0,n.jsx)(i.code,{children:"properties"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["The easiest way to configure is either via environment variables (a good fit for ",(0,n.jsx)(i.code,{children:"docker"})," and ",(0,n.jsx)(i.code,{children:"docker-compose"}),") or by using an ",(0,n.jsx)(i.code,{children:"application.yml"})," file located in the configuration directory:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["The Docker image will load any ",(0,n.jsx)(i.code,{children:"application.yml"})," file located in the ",(0,n.jsx)(i.code,{children:"/config"})," mounted folder."]}),"\n",(0,n.jsxs)(i.li,{children:["The Jar will load any ",(0,n.jsx)(i.code,{children:"application.yml"})," file located in the ",(0,n.jsx)(i.code,{children:"komga.config-dir"})," directory (defaults to ",(0,n.jsx)(i.code,{children:"~/.komga"}),", ",(0,n.jsx)(i.a,{href:"#komga-configdir-komga-config-dir-directory",children:"more details"}),")."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["Each configuration key can have a different format depending if it's from the environment variable, or from the ",(0,n.jsx)(i.code,{children:"application.yml"})," file. In the following section I will provide both format in the form ",(0,n.jsx)(i.code,{children:"ENVIRONMENT_VARIABLE"})," / ",(0,n.jsx)(i.code,{children:"application-property"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["You can also specify configuration via the command line, when launching the ",(0,n.jsx)(i.code,{children:"jar"}),". Use the ",(0,n.jsx)(i.code,{children:"application-property"})," form, and prefix with ",(0,n.jsx)(i.code,{children:"--"}),". For example:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-shell",children:'java -jar komga.jar --server.servlet.context-path="/komga" --server.port=8443\n'})}),"\n",(0,n.jsx)(i.h2,{id:"optional-configuration",children:"Optional configuration"}),"\n",(0,n.jsx)(i.p,{children:"You can use some optional configuration keys:"}),"\n",(0,n.jsxs)(i.h4,{id:"komga_configdir--komgaconfig-dir-directory",children:["KOMGA_CONFIGDIR / komga.config-dir: ",(0,n.jsx)(i.code,{children:"<int>
"})]}),"\n",(0,n.jsx)(i.p,{children:"The Komga configuration directory. Will be used to store the logs, database, and any other file Komga needs."}),"\n",(0,n.jsx)(i.p,{children:"Defaults to:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"%LOCALAPPDATA%/Komga"})," on the ",(0,n.jsx)(i.em,{children:"Windows app"}),". That folder is virtualized by Windows."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"~/Library/Application Support/Komga"})," on the macOS app."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"~/.komga"})," otherwise."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.code,{children:"~"})," is your home directory on Unix, and your User profile on Windows."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsxs)(i.em,{children:["When overriding this configuration, you need to use ",(0,n.jsx)(i.code,{children:"${user.home}"})," instead of ",(0,n.jsx)(i.code,{children:"~"})," (this is a specific Spring Boot variable)."]})}),"\n",(0,n.jsxs)(i.h4,{id:"server_port--serverport-port",children:["SERVER_PORT / server.port: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"Port to listen to for the API and web interface."}),"\n",(0,n.jsxs)(i.p,{children:["Can also be configured from the ",(0,n.jsx)(i.a,{href:"/docs/guides/server-settings#server-port",children:"Server Settings"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"25600"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"server_servlet_context_path--serverservletcontext-path-baseurl",children:["SERVER_SERVLET_CONTEXT_PATH / server.servlet.context-path: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"Base URL, useful if you need to reverse proxy with a subfolder."}),"\n",(0,n.jsxs)(i.p,{children:["Can also be configured from the ",(0,n.jsx)(i.a,{href:"/docs/guides/server-settings#base-url",children:"Server Settings"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"/"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"server_servlet_session_timeout--serverservletsessiontimeout-duration",children:["SERVER_SERVLET_SESSION_TIMEOUT / server.servlet.session.timeout: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsxs)(i.p,{children:["The duration after which an inactive session will expire. You can specify the timeunit, for example ",(0,n.jsx)(i.code,{children:"14d"})," for 14 days, or ",(0,n.jsx)(i.code,{children:"24h"})," for 24 hours. If no unit is set, seconds will be used."]}),"\n",(0,n.jsx)(i.p,{children:"Defaults to 30 minutes."}),"\n",(0,n.jsx)(i.h4,{id:"komga_libraries_scan_cron--komgalibraries-scan-cron-cron",children:(0,n.jsxs)(i.del,{children:["KOMGA_LIBRARIES_SCAN_CRON / komga.libraries-scan-cron: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been moved to ",(0,n.jsx)(i.a,{href:"/docs/guides/libraries#scan-interval",children:"Library options: scan interval"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"komga_libraries_scan_startup--komgalibraries-scan-startup-truefalse",children:(0,n.jsxs)(i.del,{children:["KOMGA_LIBRARIES_SCAN_STARTUP / komga.libraries-scan-startup: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been moved to ",(0,n.jsx)(i.a,{href:"/docs/guides/libraries#scan-on-startup",children:"Library options: scan on startup"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"komga_libraries_scan_directory_exclusions--komgalibraries-scan-directory-exclusions-exclusions",children:(0,n.jsxs)(i.del,{children:["KOMGA_LIBRARIES_SCAN_DIRECTORY_EXCLUSIONS / komga.libraries-scan-directory-exclusions: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been moved to ",(0,n.jsx)(i.a,{href:"/docs/guides/libraries#directory-exclusions",children:"Library options: directory exclusions"}),"."]}),"\n",(0,n.jsx)(i.h4,{id:"komga_rememberme_key--komgaremember-mekey-key",children:(0,n.jsxs)(i.del,{children:["KOMGA_REMEMBERME_KEY / komga.remember-me.key: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsx)(i.h4,{id:"komga_rememberme_validity--komgaremember-mevalidity-duration",children:(0,n.jsxs)(i.del,{children:["KOMGA_REMEMBERME_VALIDITY / komga.remember-me.validity: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsx)(i.h4,{id:"komga_sessiontimeout--komgasession-timeout-duration",children:(0,n.jsxs)(i.del,{children:["KOMGA_SESSIONTIMEOUT / komga.session-timeout: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsxs)(i.p,{children:["This has been replaced by ",(0,n.jsx)(i.code,{children:"server.servlet.session.timeout"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"komga_database_file--komgadatabasefile-file-path",children:["KOMGA_DATABASE_FILE / komga.database.file: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"File path for the SQLite database."}),"\n",(0,n.jsxs)(i.p,{children:["If you want to change the directory, it is advised to change ",(0,n.jsx)(i.code,{children:"komga.config-dir"})," instead."]}),"\n",(0,n.jsx)(i.p,{children:"Defaults to:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"/config/database.sqlite"})," for ",(0,n.jsx)(i.em,{children:"Docker"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"\\${komga.config-dir}/database.sqlite"})," otherwise."]}),"\n"]}),"\n",(0,n.jsxs)(i.h4,{id:"komga_cors_allowed_origins--komgacorsallowed-origins-origins",children:["KOMGA_CORS_ALLOWED_ORIGINS / komga.cors.allowed-origins: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"A list of origins to allow for CORS."}),"\n",(0,n.jsx)(i.p,{children:"Defaults to empty list."}),"\n",(0,n.jsx)(i.h4,{id:"komga_delete_empty_collections--komgadelete-empty-collections-truefalse",children:(0,n.jsxs)(i.del,{children:["KOMGA_DELETE_EMPTY_COLLECTIONS / komga.delete-empty-collections: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsx)(i.h4,{id:"komga_delete_empty_read_lists--komgadelete-empty-read-lists-truefalse",children:(0,n.jsxs)(i.del,{children:["KOMGA_DELETE_EMPTY_READ_LISTS / komga.delete-empty-read-lists: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been moved to Server Settings."}),"\n",(0,n.jsxs)(i.h4,{id:"komga_oauth2_account_creation--komgaoauth2-account-creation-truefalse",children:["KOMGA_OAUTH2_ACCOUNT_CREATION / komga.oauth2-account-creation: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"A boolean indicating whether Komga should create new users when a login via OAuth2/OIDC succeeds, but there is no existing user with that email."}),"\n",(0,n.jsxs)(i.p,{children:["Such users will be created with a random password, which the user can subsequently change from the ",(0,n.jsx)(i.em,{children:"Account Settings"})," page later on, for example to be able to connect using OPDS or Tachiyomi."]}),"\n",(0,n.jsx)(i.admonition,{type:"warning",children:(0,n.jsx)(i.p,{children:"It is recommended to enable this only with OAuth2 providers you control"})}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"false"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"komga_oidc_email_verification--komgaoidc-email-verification-truefalse",children:["KOMGA_OIDC_EMAIL_VERIFICATION / komga.oidc-email-verification: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsxs)(i.p,{children:["A boolean indicating whether Komga should check whether the ",(0,n.jsx)(i.code,{children:"email_verified"})," claim is present and true in the OpenID Connect request."]}),"\n",(0,n.jsx)(i.admonition,{type:"warning",children:(0,n.jsx)(i.p,{children:"It is recommended to disable this only with OIDC providers that do not verify emails (like Azure AD)"})}),"\n",(0,n.jsxs)(i.p,{children:["Defaults to ",(0,n.jsx)(i.code,{children:"true"}),"."]}),"\n",(0,n.jsxs)(i.h4,{id:"logging_file_name--loggingfilename-logfile-name",children:["LOGGING_FILE_NAME / logging.file.name: ",(0,n.jsx)(i.code,{children:" "})]}),"\n",(0,n.jsx)(i.p,{children:"Name of the log file."}),"\n",(0,n.jsxs)(i.p,{children:["If you want to change the directory, it is advised to change ",(0,n.jsx)(i.code,{children:"komga.config-dir"})," instead."]}),"\n",(0,n.jsx)(i.p,{children:"Defaults to:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"~/Library/Logs/Komga/komga.log"})," for the ",(0,n.jsx)(i.em,{children:"macOS app"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"/config/logs/komga.log"})," for ",(0,n.jsx)(i.em,{children:"Docker"}),"."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.code,{children:"\\${komga.config-dir}/komga.log"})," otherwise."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.code,{children:"~"})," is your home directory on Unix, and your User profile on Windows."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsxs)(i.em,{children:["When overriding this configuration, you need to use ",(0,n.jsx)(i.code,{children:"${user.home}"})," instead of ",(0,n.jsx)(i.code,{children:"~"})," (this is a specific Spring Boot variable)."]})}),"\n",(0,n.jsx)(i.h4,{id:"komga_taskconsumers--komgatask-consumers-int",children:(0,n.jsxs)(i.del,{children:["KOMGA_TASKCONSUMERS / komga.task-consumers: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been removed."}),"\n",(0,n.jsx)(i.h4,{id:"komga_taskconsumersmax--komgatask-consumers-max-int",children:(0,n.jsxs)(i.del,{children:["KOMGA_TASKCONSUMERSMAX / komga.task-consumers-max: ",(0,n.jsx)(i.code,{children:" "})]})}),"\n",(0,n.jsx)(i.p,{children:"This has been removed."}),"\n",(0,n.jsx)(i.h2,{id:"sample-configuration-file",children:"Sample Configuration File"}),"\n",(0,n.jsxs)(i.p,{children:["Here is a sample ",(0,n.jsx)(i.code,{children:"application.yml"})," file in case you need to customize it. Keep only the lines you need."]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"# Only keep lines that are relevant to you!\n# Lines starting with # are comments\n# Make sure indentation is correct (2 spaces at every indentation level), yaml is very sensitive!\nkomga:\n database:\n file: ${user.home}/.komga/database.sqlite\n cors.allowed-origins:\n - http://localhost:8081\n - http://localhost:8082\n delete-empty-collections: true\n delete-empty-read-lists: true\nserver:\n port: 25600\n servlet:\n session.timeout: 7d # session timeout, here 7 days\n context-path: /komga\n"})}),"\n",(0,n.jsx)(i.h2,{id:"database-performance",children:"Database performance"}),"\n",(0,n.jsx)(i.admonition,{type:"warning",children:(0,n.jsx)(i.p,{children:"Use at your own risk!"})}),"\n",(0,n.jsx)(i.p,{children:"Some specific configuration keys are available to tweak the database performance."}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-yaml",children:"komga:\n database:\n # sets the retry timeout when SQLITE_BUSY error happens\n busy-timeout: 30s\n \n # changes the journal mode\n # accepted values are: DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF\n # most likely to be set to wal if needed, check https://sqlite.org/wal.html for more details\n journal-mode: wal\n \n # pool size will determine the number of connections in the pool\n # this takes precedence over max-pool-size if set\n # defaults to undefined\n pool-size: 1\n \n # max-pool-size will determine the maximum number of connections in the pool\n # when set, the number of connections is set to the number of available processors capped at max-pool-size\n # defaults to 1\n max-pool-size: 8\n \n # pragmas accepts a list of key/value pairs where:\n # - key is the pragma name (see https://www.sqlite.org/pragma.html)\n # - value is the pragma value\n pragmas:\n # here are some example pragmas\n page_size: 1024\n synchronous: OFF\n"})})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},3023:(e,i,o)=>{o.d(i,{R:()=>t,x:()=>a});var n=o(3696);const s={},r=n.createContext(s);function t(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/98ce5054.2537cb81.js b/assets/js/98ce5054.2537cb81.js deleted file mode 100644 index ce032e18..00000000 --- a/assets/js/98ce5054.2537cb81.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8209],{3912:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var r=t(4246),n=t(1670);const o={},i="Local Artwork Assets",d={id:"guides/local-artwork-assets",title:"Local Artwork Assets",description:"Supported Artwork Image Formats",source:"@site/docs/guides/local-artwork-assets.md",sourceDirName:"guides",slug:"/guides/local-artwork-assets",permalink:"/docs/guides/local-artwork-assets",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/local-artwork-assets.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"},next:{title:"User accounts",permalink:"/docs/guides/user-accounts"}},l={},c=[{value:"Supported Artwork Image Formats",id:"supported-artwork-image-formats",level:2},{value:"Poster Artwork",id:"poster-artwork",level:2},{value:"Books",id:"books",level:4},{value:"Series",id:"series",level:4}];function a(e){const s={code:"code",h1:"h1",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"local-artwork-assets",children:"Local Artwork Assets"}),"\n",(0,r.jsx)(s.h2,{id:"supported-artwork-image-formats",children:"Supported Artwork Image Formats"}),"\n",(0,r.jsx)(s.p,{children:"There are a number of supported custom media items that need to be named correctly to be detected. The supported image file formats are:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"jpg"}),"\n",(0,r.jsx)(s.li,{children:"jpeg"}),"\n",(0,r.jsx)(s.li,{children:"png"}),"\n",(0,r.jsx)(s.li,{children:"webp"}),"\n",(0,r.jsx)(s.li,{children:"tbn"}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"poster-artwork",children:"Poster Artwork"}),"\n",(0,r.jsx)(s.p,{children:"Posters are typically displayed for books, series and collections on dashboards, library views, and when looking at details for the element. Poster art is typically of 21:29.7 aspect ratio. Custom Poster artwork will be detected and used if named and stored as follows."}),"\n",(0,r.jsx)(s.h4,{id:"books",children:"Books"}),"\n",(0,r.jsx)(s.p,{children:"Custom poster must have the same name as the book file:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Exact book name.ext"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"ext"})," is the file extension."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"/Series\n Book 10.cbz\n Book 10.jpg\n"})}),"\n",(0,r.jsx)(s.p,{children:"More than one poster image can be included. For multiple items to be scanned, they should be named as follows:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Exact book name-X.ext"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Where ",(0,r.jsx)(s.code,{children:"-X"})," is a number."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"/Series\n Book 12.cbz\n Book 12-1.jpg\n Book 12-2.png\n"})}),"\n",(0,r.jsx)(s.h4,{id:"series",children:"Series"}),"\n",(0,r.jsx)(s.p,{children:"Custom poster must be located in the Series directory and named as follows:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"cover.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"default.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"folder.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"series.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"poster.ext"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"ext"})," is the file extension."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"/Series\n poster.jpg\n"})})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},1670:(e,s,t)=>{t.d(s,{Z:()=>d,a:()=>i});var r=t(7378);const n={},o=r.createContext(n);function i(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/98ce5054.5869eadb.js b/assets/js/98ce5054.5869eadb.js new file mode 100644 index 00000000..2047887c --- /dev/null +++ b/assets/js/98ce5054.5869eadb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5628],{1356:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var r=t(2540),n=t(3023);const o={},i="Local Artwork Assets",d={id:"guides/local-artwork-assets",title:"Local Artwork Assets",description:"Supported Artwork Image Formats",source:"@site/docs/guides/local-artwork-assets.md",sourceDirName:"guides",slug:"/guides/local-artwork-assets",permalink:"/docs/guides/local-artwork-assets",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/local-artwork-assets.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Edit Metadata",permalink:"/docs/guides/edit-metadata"},next:{title:"User accounts",permalink:"/docs/guides/user-accounts"}},l={},c=[{value:"Supported Artwork Image Formats",id:"supported-artwork-image-formats",level:2},{value:"Poster Artwork",id:"poster-artwork",level:2},{value:"Books",id:"books",level:4},{value:"Series",id:"series",level:4}];function a(e){const s={code:"code",h1:"h1",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"local-artwork-assets",children:"Local Artwork Assets"}),"\n",(0,r.jsx)(s.h2,{id:"supported-artwork-image-formats",children:"Supported Artwork Image Formats"}),"\n",(0,r.jsx)(s.p,{children:"There are a number of supported custom media items that need to be named correctly to be detected. The supported image file formats are:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"jpg"}),"\n",(0,r.jsx)(s.li,{children:"jpeg"}),"\n",(0,r.jsx)(s.li,{children:"png"}),"\n",(0,r.jsx)(s.li,{children:"webp"}),"\n",(0,r.jsx)(s.li,{children:"tbn"}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"poster-artwork",children:"Poster Artwork"}),"\n",(0,r.jsx)(s.p,{children:"Posters are typically displayed for books, series and collections on dashboards, library views, and when looking at details for the element. Poster art is typically of 21:29.7 aspect ratio. Custom Poster artwork will be detected and used if named and stored as follows."}),"\n",(0,r.jsx)(s.h4,{id:"books",children:"Books"}),"\n",(0,r.jsx)(s.p,{children:"Custom poster must have the same name as the book file:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Exact book name.ext"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"ext"})," is the file extension."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"/Series\n Book 10.cbz\n Book 10.jpg\n"})}),"\n",(0,r.jsx)(s.p,{children:"More than one poster image can be included. For multiple items to be scanned, they should be named as follows:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Exact book name-X.ext"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Where ",(0,r.jsx)(s.code,{children:"-X"})," is a number."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"/Series\n Book 12.cbz\n Book 12-1.jpg\n Book 12-2.png\n"})}),"\n",(0,r.jsx)(s.h4,{id:"series",children:"Series"}),"\n",(0,r.jsx)(s.p,{children:"Custom poster must be located in the Series directory and named as follows:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"cover.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"default.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"folder.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"series.ext"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"poster.ext"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"ext"})," is the file extension."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"/Series\n poster.jpg\n"})})]})}function h(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},3023:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>d});var r=t(3696);const n={},o=r.createContext(n);function i(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.f5229099.js b/assets/js/9e4087bc.5346ec20.js similarity index 52% rename from assets/js/9e4087bc.f5229099.js rename to assets/js/9e4087bc.5346ec20.js index e5bf8174..dc4427ce 100644 --- a/assets/js/9e4087bc.f5229099.js +++ b/assets/js/9e4087bc.5346ec20.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3608],{7507:(e,s,t)=>{t.r(s),t.d(s,{default:()=>o});t(7378);var r=t(6641),a=t(9213),i=t(8831),n=t(4514),c=t(1999),l=t(4246);function h(e){let{year:s,posts:t}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:s,children:s}),(0,l.jsx)("ul",{children:t.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(r.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e.metadata.date)))})]})}function d(e){let{years:s}=e;return(0,l.jsx)("section",{className:"margin-vert--lg",children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:s.map(((e,s)=>(0,l.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,l.jsx)(h,{...e})},s)))})})})}function o(e){let{archive:s}=e;const t=(0,a.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),r=(0,a.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),h=function(e){const s=e.reduce(((e,s)=>{const t=s.metadata.date.split("-")[0],r=e.get(t)??[];return e.set(t,[s,...r])}),new Map);return Array.from(s,(e=>{let[s,t]=e;return{year:s,posts:t}}))}(s.blogPosts);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.d,{title:t,description:r}),(0,l.jsxs)(n.Z,{children:[(0,l.jsx)("header",{className:"hero hero--primary",children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)(c.Z,{as:"h1",className:"hero__title",children:t}),(0,l.jsx)("p",{className:"hero__subtitle",children:r})]})}),(0,l.jsx)("main",{children:h.length>0&&(0,l.jsx)(d,{years:h})})]})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2711],{5441:(e,s,t)=>{t.r(s),t.d(s,{default:()=>o});t(3696);var r=t(3587),a=t(6590),i=t(5605),n=t(2213),c=t(1381),l=t(2540);function h(e){let{year:s,posts:t}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.A,{as:"h3",id:s,children:s}),(0,l.jsx)("ul",{children:t.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(r.A,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e.metadata.date)))})]})}function d(e){let{years:s}=e;return(0,l.jsx)("section",{className:"margin-vert--lg",children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:s.map(((e,s)=>(0,l.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,l.jsx)(h,{...e})},s)))})})})}function o(e){let{archive:s}=e;const t=(0,a.T)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),r=(0,a.T)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),h=function(e){const s=e.reduce(((e,s)=>{const t=s.metadata.date.split("-")[0],r=e.get(t)??[];return e.set(t,[s,...r])}),new Map);return Array.from(s,(e=>{let[s,t]=e;return{year:s,posts:t}}))}(s.blogPosts);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.be,{title:t,description:r}),(0,l.jsxs)(n.A,{children:[(0,l.jsx)("header",{className:"hero hero--primary",children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)(c.A,{as:"h1",className:"hero__title",children:t}),(0,l.jsx)("p",{className:"hero__subtitle",children:r})]})}),(0,l.jsx)("main",{children:h.length>0&&(0,l.jsx)(d,{years:h})})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/a09c2993.3d32f9a5.js b/assets/js/a09c2993.3d32f9a5.js new file mode 100644 index 00000000..4207ea12 --- /dev/null +++ b/assets/js/a09c2993.3d32f9a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5899],{2624:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var t=i(2540),s=i(3023);const r={},o="Introduction",d={id:"introduction",title:"Introduction",description:"What is Komga?",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/docs/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/introduction.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",next:{title:"Installation",permalink:"/docs/category/installation"}},l={},a=[{value:"What is Komga?",id:"what-is-komga",level:2},{value:"What media and devices work?",id:"what-media-and-devices-work",level:2},{value:"Komga supports these media file types",id:"komga-supports-these-media-file-types",level:3},{value:"Komga server compatibility",id:"komga-server-compatibility",level:3},{value:"Demo",id:"demo",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(n.h2,{id:"what-is-komga",children:"What is Komga?"}),"\n",(0,t.jsx)(n.p,{children:"Komga is a media server for your comics, mangas, BDs, magazines and eBooks."}),"\n",(0,t.jsx)(n.p,{children:"How it works:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Install and run Komga on a computer or NAS."}),"\n",(0,t.jsx)(n.li,{children:"Add libraries by type of content and let Komga do the rest."}),"\n",(0,t.jsx)(n.li,{children:"Use the web interface or any compatible client."}),"\n",(0,t.jsx)(n.li,{children:"Enjoy your books!"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"what-media-and-devices-work",children:"What media and devices work?"}),"\n",(0,t.jsx)(n.h3,{id:"komga-supports-these-media-file-types",children:"Komga supports these media file types"}),"\n",(0,t.jsx)(n.p,{children:"Komga supports the following file types:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Comic book archives: ",(0,t.jsx)(n.em,{children:"CBZ"})," and ",(0,t.jsx)(n.em,{children:"CBR"})," (except solid archives, for RAR5 see below)"]}),"\n",(0,t.jsxs)(n.li,{children:["eBooks in ",(0,t.jsx)(n.em,{children:"EPUB"})," format"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"PDF"})," files"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"RAR 5 is supported on some platforms only, as it relies on native libraries for decoding."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Platform"}),(0,t.jsx)(n.th,{children:"RAR 5"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"macOS app"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Windows app"}),(0,t.jsx)(n.td,{children:"\u274c"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker amd64"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm64"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm"}),(0,t.jsx)(n.td,{children:"\u274c"})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["When using the ",(0,t.jsx)(n.code,{children:"jar"}),", you will need to provide the native library yourself, and run Java with the correct arguments. You can check for more details ",(0,t.jsx)(n.a,{href:"https://github.com/gotson/NightCompress/#requirements",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"komga-server-compatibility",children:"Komga server compatibility"}),"\n",(0,t.jsx)(n.p,{children:"Komga can run on any system that can run Java or Docker:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Windows"}),"\n",(0,t.jsx)(n.li,{children:"macOS"}),"\n",(0,t.jsx)(n.li,{children:"Linux"}),"\n",(0,t.jsx)(n.li,{children:"Many popular NAS devices such as QNAP, Synology and more"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"demo",children:"Demo"}),"\n",(0,t.jsxs)(n.p,{children:["A demonstration website is available at: ",(0,t.jsx)(n.a,{href:"https://demo.komga.org",children:"https://demo.komga.org"})]}),"\n",(0,t.jsx)(n.p,{children:"You can log in using the following credentials:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Login: ",(0,t.jsx)(n.code,{children:"demo@komga.org"})]}),"\n",(0,t.jsxs)(n.li,{children:["Password: ",(0,t.jsx)(n.code,{children:"komga-demo"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},3023:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>d});var t=i(3696);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a09c2993.874c3390.js b/assets/js/a09c2993.874c3390.js deleted file mode 100644 index c5553e3f..00000000 --- a/assets/js/a09c2993.874c3390.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4128],{6587:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var t=i(4246),s=i(1670);const r={},o="Introduction",d={id:"introduction",title:"Introduction",description:"What is Komga?",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/docs/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/introduction.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",next:{title:"Installation",permalink:"/docs/category/installation"}},l={},a=[{value:"What is Komga?",id:"what-is-komga",level:2},{value:"What media and devices work?",id:"what-media-and-devices-work",level:2},{value:"Komga supports these media file types",id:"komga-supports-these-media-file-types",level:3},{value:"Komga server compatibility",id:"komga-server-compatibility",level:3},{value:"Demo",id:"demo",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(n.h2,{id:"what-is-komga",children:"What is Komga?"}),"\n",(0,t.jsx)(n.p,{children:"Komga is a media server for your comics, mangas, BDs, magazines and eBooks."}),"\n",(0,t.jsx)(n.p,{children:"How it works:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Install and run Komga on a computer or NAS."}),"\n",(0,t.jsx)(n.li,{children:"Add libraries by type of content and let Komga do the rest."}),"\n",(0,t.jsx)(n.li,{children:"Use the web interface or any compatible client."}),"\n",(0,t.jsx)(n.li,{children:"Enjoy your books!"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"what-media-and-devices-work",children:"What media and devices work?"}),"\n",(0,t.jsx)(n.h3,{id:"komga-supports-these-media-file-types",children:"Komga supports these media file types"}),"\n",(0,t.jsx)(n.p,{children:"Komga supports the following file types:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Comic book archives: ",(0,t.jsx)(n.em,{children:"CBZ"})," and ",(0,t.jsx)(n.em,{children:"CBR"})," (except solid archives, for RAR5 see below)"]}),"\n",(0,t.jsxs)(n.li,{children:["eBooks in ",(0,t.jsx)(n.em,{children:"EPUB"})," format"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"PDF"})," files"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"RAR 5 is supported on some platforms only, as it relies on native libraries for decoding."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Platform"}),(0,t.jsx)(n.th,{children:"RAR 5"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"macOS app"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Windows app"}),(0,t.jsx)(n.td,{children:"\u274c"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker amd64"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm64"}),(0,t.jsx)(n.td,{children:"\u2714\ufe0f"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Docker arm"}),(0,t.jsx)(n.td,{children:"\u274c"})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["When using the ",(0,t.jsx)(n.code,{children:"jar"}),", you will need to provide the native library yourself, and run Java with the correct arguments. You can check for more details ",(0,t.jsx)(n.a,{href:"https://github.com/gotson/NightCompress/#requirements",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"komga-server-compatibility",children:"Komga server compatibility"}),"\n",(0,t.jsx)(n.p,{children:"Komga can run on any system that can run Java or Docker:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Windows"}),"\n",(0,t.jsx)(n.li,{children:"macOS"}),"\n",(0,t.jsx)(n.li,{children:"Linux"}),"\n",(0,t.jsx)(n.li,{children:"Many popular NAS devices such as QNAP, Synology and more"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"demo",children:"Demo"}),"\n",(0,t.jsxs)(n.p,{children:["A demonstration website is available at: ",(0,t.jsx)(n.a,{href:"https://demo.komga.org",children:"https://demo.komga.org"})]}),"\n",(0,t.jsx)(n.p,{children:"You can log in using the following credentials:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Login: ",(0,t.jsx)(n.code,{children:"demo@komga.org"})]}),"\n",(0,t.jsxs)(n.li,{children:["Password: ",(0,t.jsx)(n.code,{children:"komga-demo"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1670:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>o});var t=i(7378);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a22ccb60.908e0395.js b/assets/js/a22ccb60.908e0395.js new file mode 100644 index 00000000..132436f8 --- /dev/null +++ b/assets/js/a22ccb60.908e0395.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1598],{1575:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=t(2540),r=t(3023);const o={},d="Deprecation",s={id:"api/deprecation",title:"Deprecation",description:"To be removed in 2.0.0",source:"@site/docs/api/deprecation.md",sourceDirName:"api",slug:"/api/deprecation",permalink:"/docs/api/deprecation",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/deprecation.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"api",previous:{title:"REST API",permalink:"/docs/api/rest"}},a={},c=[{value:"To be removed in 2.0.0",id:"to-be-removed-in-200",level:2},{value:"PUT /api/v1/libraries/{libraryId}",id:"put-apiv1librarieslibraryid",level:3}];function p(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deprecation",children:"Deprecation"}),"\n",(0,i.jsx)(n.h2,{id:"to-be-removed-in-200",children:"To be removed in 2.0.0"}),"\n",(0,i.jsxs)(n.p,{children:["The following API endpoints will be removed in version ",(0,i.jsx)(n.code,{children:"2.0.0"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"put-apiv1librarieslibraryid",children:"PUT /api/v1/libraries/{libraryId}"}),"\n",(0,i.jsxs)(n.p,{children:["Deprecated since version: ",(0,i.jsx)(n.code,{children:"1.3.0"})]}),"\n",(0,i.jsxs)(n.p,{children:["Use ",(0,i.jsx)(n.code,{children:"PATCH /api/v1/libraries/{libraryId}"})," instead, without any change needed. The ",(0,i.jsx)(n.code,{children:"PUT"})," endpoint redirects to the ",(0,i.jsx)(n.code,{children:"PATCH"})," endpoint internally."]}),"\n",(0,i.jsx)(n.p,{children:"The endpoint now accepts a partial DTO, and will only update fields that are present."})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},3023:(e,n,t)=>{t.d(n,{R:()=>d,x:()=>s});var i=t(3696);const r={},o=i.createContext(r);function d(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a22ccb60.fb378048.js b/assets/js/a22ccb60.fb378048.js deleted file mode 100644 index c21c3497..00000000 --- a/assets/js/a22ccb60.fb378048.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9353],{9882:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>d,toc:()=>c});var i=t(4246),r=t(1670);const o={},a="Deprecation",d={id:"api/deprecation",title:"Deprecation",description:"To be removed in 2.0.0",source:"@site/docs/api/deprecation.md",sourceDirName:"api",slug:"/api/deprecation",permalink:"/docs/api/deprecation",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/deprecation.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"api",previous:{title:"REST API",permalink:"/docs/api/rest"}},s={},c=[{value:"To be removed in 2.0.0",id:"to-be-removed-in-200",level:2},{value:"PUT /api/v1/libraries/{libraryId}",id:"put-apiv1librarieslibraryid",level:3}];function p(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deprecation",children:"Deprecation"}),"\n",(0,i.jsx)(n.h2,{id:"to-be-removed-in-200",children:"To be removed in 2.0.0"}),"\n",(0,i.jsxs)(n.p,{children:["The following API endpoints will be removed in version ",(0,i.jsx)(n.code,{children:"2.0.0"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"put-apiv1librarieslibraryid",children:"PUT /api/v1/libraries/{libraryId}"}),"\n",(0,i.jsxs)(n.p,{children:["Deprecated since version: ",(0,i.jsx)(n.code,{children:"1.3.0"})]}),"\n",(0,i.jsxs)(n.p,{children:["Use ",(0,i.jsx)(n.code,{children:"PATCH /api/v1/libraries/{libraryId}"})," instead, without any change needed. The ",(0,i.jsx)(n.code,{children:"PUT"})," endpoint redirects to the ",(0,i.jsx)(n.code,{children:"PATCH"})," endpoint internally."]}),"\n",(0,i.jsx)(n.p,{children:"The endpoint now accepts a partial DTO, and will only update fields that are present."})]})}function l(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},1670:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>a});var i=t(7378);const r={},o=i.createContext(r);function a(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a624e12b.3943beeb.js b/assets/js/a624e12b.3943beeb.js new file mode 100644 index 00000000..04a0bf26 --- /dev/null +++ b/assets/js/a624e12b.3943beeb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1130],{2532:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var i=o(2540),t=o(3023);const r={},s="Social login",a={id:"installation/oauth2",title:"Social login",description:"Komga supports social login via OAuth2 and OpenID Connect. In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users.",source:"@site/docs/installation/oauth2.md",sourceDirName:"installation",slug:"/installation/oauth2",permalink:"/docs/installation/oauth2",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/oauth2.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Expose your server",permalink:"/docs/installation/https"},next:{title:"Google Drive and rclone",permalink:"/docs/installation/gdrive"}},c={},l=[{value:"Guide for common providers",id:"guide-for-common-providers",level:2},{value:"Google",id:"google",level:3},{value:"Facebook",id:"facebook",level:3},{value:"Github",id:"github",level:3},{value:"Advanced configuration",id:"advanced-configuration",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"social-login",children:"Social login"}),"\n",(0,i.jsxs)(n.p,{children:["Komga supports social login via ",(0,i.jsx)(n.strong,{children:"OAuth2"})," and ",(0,i.jsx)(n.strong,{children:"OpenID Connect"}),". In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users."]}),"\n",(0,i.jsxs)(n.p,{children:["In order to setup social login, you will need to create an application in the developer portal of the social login provider of your choice (Google, Facebook, Github\u2026), and retrieve a ",(0,i.jsx)(n.em,{children:"Client ID"})," and ",(0,i.jsx)(n.em,{children:"Client Secret"}),". You will also need to configure a ",(0,i.jsx)(n.em,{children:"Redirect URI"})," in the application you created."]}),"\n",(0,i.jsxs)(n.p,{children:["You can enable automatic account creation upon successful social login, see ",(0,i.jsx)(n.a,{href:"/docs/installation/configuration#komga-oauth2-account-creation-komga-oauth2-account-creation-true-false",children:"here"})," for more details."]}),"\n",(0,i.jsx)(n.h2,{id:"guide-for-common-providers",children:"Guide for common providers"}),"\n",(0,i.jsx)(n.p,{children:"You can easily configure Google, Github, and Facebook without any complex configuration."}),"\n",(0,i.jsx)(n.h3,{id:"google",children:"Google"}),"\n",(0,i.jsxs)(n.p,{children:["Follow the instructions on the ",(0,i.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/OpenIDConnect",children:"OpenID Connect page"}),', starting in the section, "Setting up OAuth 2.0".']}),"\n",(0,i.jsxs)(n.p,{children:['When asked for a "Redirect URI", use ',(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/google"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address."]}),"\n",(0,i.jsx)(n.p,{children:'After completing the "Obtain OAuth 2.0 credentials" instructions, you should have a new OAuth Client with credentials consisting of a Client ID and a Client Secret.'}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with the OAuth 2.0 credentials you created earlier."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"spring:\n security:\n oauth2:\n client:\n registration:\n google:\n client-id: 1044613984fsf335-mnsdvkjy3yf98294unfmnvd8.apps.googleusercontent.com\n client-secret: jwhfkjhwefkn44t8vcxml3m\n"})}),"\n",(0,i.jsx)(n.h3,{id:"facebook",children:"Facebook"}),"\n",(0,i.jsxs)(n.p,{children:["Follow the ",(0,i.jsx)(n.a,{href:"https://developers.facebook.com/docs/development/register",children:"instructions"})," to create an App, and add the Facebook Login product."]}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.code,{children:"Valid OAuth Redirect URIs"}),", use ",(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/facebook"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address."]}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with the App ID and App Secret."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"spring:\n security:\n oauth2:\n client:\n registration:\n facebook:\n client-id: 227581266063919\n client-secret: 47f03915334f49cdueru810069321964929\n"})}),"\n",(0,i.jsx)(n.h3,{id:"github",children:"Github"}),"\n",(0,i.jsxs)(n.p,{children:["Register a ",(0,i.jsx)(n.a,{href:"https://github.com/settings/applications/new",children:"new application"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:['For the "Authorization callback URL", use ',(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/github"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address."]}),"\n",(0,i.jsx)(n.p,{children:"Generate a new Client Secret, you should now have a Client ID and Client Secret."}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with the OAuth 2.0 credentials you created earlier."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"spring:\n security:\n oauth2:\n client:\n registration:\n github:\n client-id: 62736jnfksui37384hnmsdnf\n client-secret: jhjgfy67363uhif762328938844940e3e8c8629c18f9\n scope: user:email\n"})}),"\n",(0,i.jsx)(n.h2,{id:"advanced-configuration",children:"Advanced configuration"}),"\n",(0,i.jsx)(n.p,{children:"You can configure any OAuth2 provider, but you will need to provide a more extensive configuration. The below example shows how to configure a Keycloak instance, but any provider could be configured in a similar fashion."}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with your credentials You will also need to update the various URIs in the ",(0,i.jsx)(n.code,{children:"provider"})," section."]}),"\n",(0,i.jsx)(n.p,{children:"You need to make sure that the users have an email setup, and that it has been marked as verified."}),"\n",(0,i.jsxs)(n.p,{children:["When configuring the client in your provider, you may need to input a redirect URI. Use the following: ",(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/{registrationId}"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address, and ",(0,i.jsx)(n.code,{children:"registrationId"})," is the name of the configuration key (",(0,i.jsx)(n.code,{children:"keycloak"})," in the below example)."]}),"\n",(0,i.jsxs)(n.p,{children:["There are 2 options to configure a provider, either set ",(0,i.jsx)(n.code,{children:"issuer-uri"})," or all of the following: ",(0,i.jsx)(n.code,{children:"authorization-uri"}),", ",(0,i.jsx)(n.code,{children:"token-uri"}),",\n",(0,i.jsx)(n.code,{children:"jwk-set-uri"}),", ",(0,i.jsx)(n.code,{children:"user-info-uri"}),". If your authentication server provides ",(0,i.jsx)(n.code,{children:"issuer-uri"}),", this option is preferred."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"registration"})," section contains a ",(0,i.jsx)(n.code,{children:"provider"})," option, this must be the same name as specified in the\n",(0,i.jsx)(n.code,{children:"provider"})," configuration. (In the example below, we've configured ",(0,i.jsx)(n.code,{children:"provider"})," with name ",(0,i.jsx)(n.code,{children:"keycloak"}),", so in the\n",(0,i.jsx)(n.code,{children:"registration"})," section we set ",(0,i.jsx)(n.code,{children:"provider: keycloak"}),"). The name of the provider can be whatever you want, no need\nto use the service's name if you don't want to."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'spring:\n security:\n oauth2:\n client:\n registration:\n keycloak:\n provider: keycloak # this must match the provider below\n client-id: your-client-id\n client-secret: c830e452-a2a9-40a0-93c1-eb84ea688245\n client-name: Keycloak\n scope: openid,email\n authorization-grant-type: authorization_code\n # the placeholders in {} will be replaced automatically, you don\'t need to change this line\n redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"\n provider:\n keycloak: # this must match the provider above\n user-name-attribute: sub\n # either set the issuer-uri, in which case the app will lookup the configuration for you automatically\n issuer-uri: http://localhost:8085/auth/realms/komgatest\n # or set all of the following\n authorization-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/auth\n token-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/token\n jwk-set-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/certs\n user-info-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/userinfo\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},3023:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>a});var i=o(3696);const t={},r=i.createContext(t);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a624e12b.9d6ad2be.js b/assets/js/a624e12b.9d6ad2be.js deleted file mode 100644 index cd358607..00000000 --- a/assets/js/a624e12b.9d6ad2be.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3287],{99:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var i=o(4246),t=o(1670);const r={},s="Social login",a={id:"installation/oauth2",title:"Social login",description:"Komga supports social login via OAuth2 and OpenID Connect. In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users.",source:"@site/docs/installation/oauth2.md",sourceDirName:"installation",slug:"/installation/oauth2",permalink:"/docs/installation/oauth2",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/oauth2.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Expose your server",permalink:"/docs/installation/https"},next:{title:"Google Drive and rclone",permalink:"/docs/installation/gdrive"}},c={},l=[{value:"Guide for common providers",id:"guide-for-common-providers",level:2},{value:"Google",id:"google",level:3},{value:"Facebook",id:"facebook",level:3},{value:"Github",id:"github",level:3},{value:"Advanced configuration",id:"advanced-configuration",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"social-login",children:"Social login"}),"\n",(0,i.jsxs)(n.p,{children:["Komga supports social login via ",(0,i.jsx)(n.strong,{children:"OAuth2"})," and ",(0,i.jsx)(n.strong,{children:"OpenID Connect"}),". In order for this to work, Komga needs to retrieve the user's email address via your provider, and will match it with the email of the Komga users."]}),"\n",(0,i.jsxs)(n.p,{children:["In order to setup social login, you will need to create an application in the developer portal of the social login provider of your choice (Google, Facebook, Github\u2026), and retrieve a ",(0,i.jsx)(n.em,{children:"Client ID"})," and ",(0,i.jsx)(n.em,{children:"Client Secret"}),". You will also need to configure a ",(0,i.jsx)(n.em,{children:"Redirect URI"})," in the application you created."]}),"\n",(0,i.jsxs)(n.p,{children:["You can enable automatic account creation upon successful social login, see ",(0,i.jsx)(n.a,{href:"/docs/installation/configuration#komga-oauth2-account-creation-komga-oauth2-account-creation-true-false",children:"here"})," for more details."]}),"\n",(0,i.jsx)(n.h2,{id:"guide-for-common-providers",children:"Guide for common providers"}),"\n",(0,i.jsx)(n.p,{children:"You can easily configure Google, Github, and Facebook without any complex configuration."}),"\n",(0,i.jsx)(n.h3,{id:"google",children:"Google"}),"\n",(0,i.jsxs)(n.p,{children:["Follow the instructions on the ",(0,i.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/OpenIDConnect",children:"OpenID Connect page"}),', starting in the section, "Setting up OAuth 2.0".']}),"\n",(0,i.jsxs)(n.p,{children:['When asked for a "Redirect URI", use ',(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/google"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address."]}),"\n",(0,i.jsx)(n.p,{children:'After completing the "Obtain OAuth 2.0 credentials" instructions, you should have a new OAuth Client with credentials consisting of a Client ID and a Client Secret.'}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with the OAuth 2.0 credentials you created earlier."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"spring:\n security:\n oauth2:\n client:\n registration:\n google:\n client-id: 1044613984fsf335-mnsdvkjy3yf98294unfmnvd8.apps.googleusercontent.com\n client-secret: jwhfkjhwefkn44t8vcxml3m\n"})}),"\n",(0,i.jsx)(n.h3,{id:"facebook",children:"Facebook"}),"\n",(0,i.jsxs)(n.p,{children:["Follow the ",(0,i.jsx)(n.a,{href:"https://developers.facebook.com/docs/development/register",children:"instructions"})," to create an App, and add the Facebook Login product."]}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.code,{children:"Valid OAuth Redirect URIs"}),", use ",(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/facebook"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address."]}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with the App ID and App Secret."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"spring:\n security:\n oauth2:\n client:\n registration:\n facebook:\n client-id: 227581266063919\n client-secret: 47f03915334f49cdueru810069321964929\n"})}),"\n",(0,i.jsx)(n.h3,{id:"github",children:"Github"}),"\n",(0,i.jsxs)(n.p,{children:["Register a ",(0,i.jsx)(n.a,{href:"https://github.com/settings/applications/new",children:"new application"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:['For the "Authorization callback URL", use ',(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/github"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address."]}),"\n",(0,i.jsx)(n.p,{children:"Generate a new Client Secret, you should now have a Client ID and Client Secret."}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with the OAuth 2.0 credentials you created earlier."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"spring:\n security:\n oauth2:\n client:\n registration:\n github:\n client-id: 62736jnfksui37384hnmsdnf\n client-secret: jhjgfy67363uhif762328938844940e3e8c8629c18f9\n scope: user:email\n"})}),"\n",(0,i.jsx)(n.h2,{id:"advanced-configuration",children:"Advanced configuration"}),"\n",(0,i.jsx)(n.p,{children:"You can configure any OAuth2 provider, but you will need to provide a more extensive configuration. The below example shows how to configure a Keycloak instance, but any provider could be configured in a similar fashion."}),"\n",(0,i.jsxs)(n.p,{children:["Modify your ",(0,i.jsx)(n.code,{children:"application.yml"})," as below and replace the values in the ",(0,i.jsx)(n.code,{children:"client-id"})," and ",(0,i.jsx)(n.code,{children:"client-secret"})," property with your credentials You will also need to update the various URIs in the ",(0,i.jsx)(n.code,{children:"provider"})," section."]}),"\n",(0,i.jsx)(n.p,{children:"You need to make sure that the users have an email setup, and that it has been marked as verified."}),"\n",(0,i.jsxs)(n.p,{children:["When configuring the client in your provider, you may need to input a redirect URI. Use the following: ",(0,i.jsx)(n.code,{children:"{baseUrl}/login/oauth2/code/{registrationId}"}),", where ",(0,i.jsx)(n.code,{children:"baseUrl"})," is your server's address, and ",(0,i.jsx)(n.code,{children:"registrationId"})," is the name of the configuration key (",(0,i.jsx)(n.code,{children:"keycloak"})," in the below example)."]}),"\n",(0,i.jsxs)(n.p,{children:["There are 2 options to configure a provider, either set ",(0,i.jsx)(n.code,{children:"issuer-uri"})," or all of the following: ",(0,i.jsx)(n.code,{children:"authorization-uri"}),", ",(0,i.jsx)(n.code,{children:"token-uri"}),",\n",(0,i.jsx)(n.code,{children:"jwk-set-uri"}),", ",(0,i.jsx)(n.code,{children:"user-info-uri"}),". If your authentication server provides ",(0,i.jsx)(n.code,{children:"issuer-uri"}),", this option is preferred."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"registration"})," section contains a ",(0,i.jsx)(n.code,{children:"provider"})," option, this must be the same name as specified in the\n",(0,i.jsx)(n.code,{children:"provider"})," configuration. (In the example below, we've configured ",(0,i.jsx)(n.code,{children:"provider"})," with name ",(0,i.jsx)(n.code,{children:"keycloak"}),", so in the\n",(0,i.jsx)(n.code,{children:"registration"})," section we set ",(0,i.jsx)(n.code,{children:"provider: keycloak"}),"). The name of the provider can be whatever you want, no need\nto use the service's name if you don't want to."]}),"\n",(0,i.jsx)(n.p,{children:"Sample configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'spring:\n security:\n oauth2:\n client:\n registration:\n keycloak:\n provider: keycloak # this must match the provider below\n client-id: your-client-id\n client-secret: c830e452-a2a9-40a0-93c1-eb84ea688245\n client-name: Keycloak\n scope: openid,email\n authorization-grant-type: authorization_code\n # the placeholders in {} will be replaced automatically, you don\'t need to change this line\n redirect-uri: "{baseUrl}/{action}/oauth2/code/{registrationId}"\n provider:\n keycloak: # this must match the provider above\n user-name-attribute: sub\n # either set the issuer-uri, in which case the app will lookup the configuration for you automatically\n issuer-uri: http://localhost:8085/auth/realms/komgatest\n # or set all of the following\n authorization-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/auth\n token-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/token\n jwk-set-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/certs\n user-info-uri: http://localhost:8085/auth/realms/komgatest/protocol/openid-connect/userinfo\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1670:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>s});var i=o(7378);const t={},r=i.createContext(t);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.1ba2a45c.js b/assets/js/a6aa9e1f.1ba2a45c.js deleted file mode 100644 index b2c6156f..00000000 --- a/assets/js/a6aa9e1f.1ba2a45c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3089],{3462:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});a(7378);var n=a(624),i=a(353),s=a(8831),r=a(5484),l=a(5988),o=a(13),g=a(505),d=a(2134),p=a(4246);function c(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,i.Z)(),{blogDescription:n,blogTitle:r,permalink:l}=t,o="/"===l?a:r;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s.d,{title:o,description:n}),(0,p.jsx)(g.Z,{tag:"blog_posts_list"})]})}function b(e){const{metadata:t,items:a,sidebar:n}=e;return(0,p.jsxs)(l.Z,{sidebar:n,children:[(0,p.jsx)(d.Z,{items:a}),(0,p.jsx)(o.Z,{metadata:t})]})}function m(e){return(0,p.jsxs)(s.FG,{className:(0,n.Z)(r.k.wrapper.blogPages,r.k.page.blogListPage),children:[(0,p.jsx)(c,{...e}),(0,p.jsx)(b,{...e})]})}},13:(e,t,a)=>{a.d(t,{Z:()=>r});a(7378);var n=a(9213),i=a(4582),s=a(4246);function r(e){const{metadata:t}=e,{previousPage:a,nextPage:r}=t;return(0,s.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,s.jsx)(i.Z,{permalink:a,title:(0,s.jsx)(n.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,s.jsx)(i.Z,{permalink:r,title:(0,s.jsx)(n.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},2134:(e,t,a)=>{a.d(t,{Z:()=>r});a(7378);var n=a(412),i=a(5532),s=a(4246);function r(e){let{items:t,component:a=i.Z}=e;return(0,s.jsx)(s.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,s.jsx)(n.n,{content:t,children:(0,s.jsx)(a,{children:(0,s.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.d2eb562e.js b/assets/js/a6aa9e1f.d2eb562e.js new file mode 100644 index 00000000..03c1722b --- /dev/null +++ b/assets/js/a6aa9e1f.d2eb562e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7643],{6075:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});a(3696);var i=a(1750),n=a(7032),s=a(5605),r=a(3237),l=a(4257),o=a(523),g=a(689),d=a(4134),p=a(2540);function c(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,n.A)(),{blogDescription:i,blogTitle:r,permalink:l}=t,o="/"===l?a:r;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s.be,{title:o,description:i}),(0,p.jsx)(g.A,{tag:"blog_posts_list"})]})}function b(e){const{metadata:t,items:a,sidebar:i}=e;return(0,p.jsxs)(l.A,{sidebar:i,children:[(0,p.jsx)(d.A,{items:a}),(0,p.jsx)(o.A,{metadata:t})]})}function m(e){return(0,p.jsxs)(s.e3,{className:(0,i.A)(r.G.wrapper.blogPages,r.G.page.blogListPage),children:[(0,p.jsx)(c,{...e}),(0,p.jsx)(b,{...e})]})}},523:(e,t,a)=>{a.d(t,{A:()=>r});a(3696);var i=a(6590),n=a(5780),s=a(2540);function r(e){const{metadata:t}=e,{previousPage:a,nextPage:r}=t;return(0,s.jsxs)("nav",{className:"pagination-nav","aria-label":(0,i.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,s.jsx)(n.A,{permalink:a,title:(0,s.jsx)(i.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,s.jsx)(n.A,{permalink:r,title:(0,s.jsx)(i.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},4134:(e,t,a)=>{a.d(t,{A:()=>r});a(3696);var i=a(7069),n=a(5512),s=a(2540);function r(e){let{items:t,component:a=n.A}=e;return(0,s.jsx)(s.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,s.jsx)(i.i,{content:t,children:(0,s.jsx)(a,{children:(0,s.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.8ba13298.js b/assets/js/a7023ddc.79418894.js similarity index 80% rename from assets/js/a7023ddc.8ba13298.js rename to assets/js/a7023ddc.79418894.js index a5616f0a..3c0da05f 100644 --- a/assets/js/a7023ddc.8ba13298.js +++ b/assets/js/a7023ddc.79418894.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1713],{5208:e=>{e.exports=JSON.parse('[{"label":"upgrade","permalink":"/blog/tags/upgrade","count":3},{"label":"komga","permalink":"/blog/tags/komga","count":3},{"label":"breaking change","permalink":"/blog/tags/breaking-change","count":1}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9267],{8289:e=>{e.exports=JSON.parse('[{"label":"upgrade","permalink":"/blog/tags/upgrade","count":3},{"label":"komga","permalink":"/blog/tags/komga","count":3},{"label":"breaking change","permalink":"/blog/tags/breaking-change","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.c3a45da9.js b/assets/js/a7bd4aaa.c3a45da9.js deleted file mode 100644 index 61fce84a..00000000 --- a/assets/js/a7bd4aaa.c3a45da9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8518],{4987:(e,n,s)=>{s.r(n),s.d(n,{default:()=>d});s(7378);var r=s(8831),o=s(3149),t=s(5611),i=s(5473),c=s(505),u=s(4246);function a(e){const{version:n}=e;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.Z,{version:n.version,tag:(0,o.os)(n.pluginId,n.version)}),(0,u.jsx)(r.d,{children:n.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(e){const{version:n,route:s}=e;return(0,u.jsx)(r.FG,{className:n.className,children:(0,u.jsx)(t.q,{version:n,children:(0,i.H)(s.routes)})})}function d(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...e}),(0,u.jsx)(l,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.fa0db761.js b/assets/js/a7bd4aaa.fa0db761.js new file mode 100644 index 00000000..a3deec49 --- /dev/null +++ b/assets/js/a7bd4aaa.fa0db761.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7098],{3970:(e,n,s)=>{s.r(n),s.d(n,{default:()=>x});s(3696);var r=s(5605),t=s(8721),o=s(7294),i=s(3971),c=s(689),u=s(2540);function a(e){const{version:n}=e;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.A,{version:n.version,tag:(0,t.tU)(n.pluginId,n.version)}),(0,u.jsx)(r.be,{children:n.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(e){const{version:n,route:s}=e;return(0,u.jsx)(r.e3,{className:n.className,children:(0,u.jsx)(o.n,{version:n,children:(0,i.v)(s.routes)})})}function x(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...e}),(0,u.jsx)(l,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.704c3bcc.js b/assets/js/a94703ab.704c3bcc.js deleted file mode 100644 index 2688105b..00000000 --- a/assets/js/a94703ab.704c3bcc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4368],{3505:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7378),o=n(624),i=n(8831),s=n(5484),l=n(6100),r=n(2095),c=n(9213),d=n(3457),u=n(4993);const m={backToTopButton:"backToTopButton_iEvu",backToTopButtonShow:"backToTopButtonShow_DO8w"};var b=n(4246);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a {e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(6903),x=n(3620),f=n(8357),j=n(2347),k=n(898);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_oTwn",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_pMEX"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(10),S=n(1763);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(376),Z=n(8862),L=n(6641),w=n(6457);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function A(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,w.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:A}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),A(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(L.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(5626),H=n(6125);const M={menuExternalLink:"menuExternalLink_BiEj"};function D(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(L.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const R={menuHtmlItem:"menuHtmlItem_OniL"};function P(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[R.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function W(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(A,{item:t,...n});case"html":return(0,b.jsx)(P,{item:t,...n});default:return(0,b.jsx)(D,{item:t,...n})}}function F(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(W,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(F),Y={menu:"menu_jmj1",menuWithAnnouncementBar:"menuWithAnnouncementBar_YufC"};function U(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",Y.menu,l&&Y.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const z="sidebar_CUen",q="sidebarWithHideableNavbar_w4KB",K="sidebarHidden_k6VE",O="sidebarLogo_CYvI";function J(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(z,s&&q,i&&K),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(U,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const X=a.memo(J);var G=n(3471),Q=n(2335);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,Q.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(G.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(X,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_pLDq",expandButtonIcon:"expandButtonIcon_X5ff"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_c7NB",docSidebarContainerHidden:"docSidebarContainerHidden_P3S_",sidebarViewport:"sidebarViewport_KYo0"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_a9sJ",docMainContainerEnhanced:"docMainContainerEnhanced_grEJ",docItemWrapperEnhanced:"docItemWrapperEnhanced_VqDq"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_DfVB",docsWrapper:"docsWrapper__sE8"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(7853);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},7853:(e,t,n)=>{n.d(t,{Z:()=>l});n(7378);var a=n(624),o=n(9213),i=n(1999),s=n(4246);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.f0fd9bc6.js b/assets/js/a94703ab.f0fd9bc6.js new file mode 100644 index 00000000..729e32a4 --- /dev/null +++ b/assets/js/a94703ab.f0fd9bc6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9048],{761:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(3696),o=n(1750),i=n(5605),s=n(3237),l=n(5220),r=n(4382),c=n(6590),d=n(766),u=n(2432);const m={backToTopButton:"backToTopButton_iEvu",backToTopButtonShow:"backToTopButtonShow_DO8w"};var b=n(2540);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.gk)();return(0,d.Mq)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a {e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(7683),x=n(9519),f=n(2575),j=n(7412),v=n(699);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const g={collapseSidebarButton:"collapseSidebarButton_oTwn",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_pMEX"};function C(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",g.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:g.collapseSidebarButtonIcon})})}var A=n(3043),k=n(5198);const S=Symbol("EmptyContext"),T=a.createContext(S);function N(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(T.Provider,{value:i,children:t})}var I=n(51),B=n(4379),w=n(3587),y=n(6681);function E(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function L(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.p)(),v=function(e){const t=(0,y.A)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.Nr)(e):void 0),[e,t])}(t),_=(0,l.w8)(t,i),g=(0,B.ys)(x,i),{collapsed:C,setCollapsed:A}=(0,I.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:N,setExpandedItem:L}=function(){const e=(0,a.useContext)(T);if(e===S)throw new k.dV("DocSidebarItemsExpandedStateProvider");return e}(),M=function(e){void 0===e&&(e=!C),L(e?null:c),A(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,k.ZC)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:C,updateCollapsed:M}),(0,a.useEffect)((()=>{h&&null!=N&&N!==c&&f&&A(!0)}),[h,N,c,A,f]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":C},p),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":g}),children:[(0,b.jsx)(w.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?M(!1):(e.preventDefault(),M())}:()=>{n?.(t)},"aria-current":g?"page":void 0,"aria-expanded":h?!C:void 0,href:h?v??"#":v,...d,children:m}),x&&h&&(0,b.jsx)(E,{collapsed:C,categoryLabel:m,onClick:e=>{e.preventDefault(),M()}})]}),(0,b.jsx)(I.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:C,children:(0,b.jsx)(Y,{items:u,tabIndex:C?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var M=n(2616),H=n(9016);const D={menuExternalLink:"menuExternalLink_BiEj"};function G(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l.w8)(t,a),x=(0,M.A)(d);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(w.A,{className:(0,o.A)("menu__link",!x&&D.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.A,{})]})},u)}const P={menuHtmlItem:"menuHtmlItem_OniL"};function W(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(n),l&&[P.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function R(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(L,{item:t,...n});case"html":return(0,b.jsx)(W,{item:t,...n});default:return(0,b.jsx)(G,{item:t,...n})}}function V(e){let{items:t,...n}=e;const a=(0,l.Y)(t,n.activePath);return(0,b.jsx)(N,{children:a.map(((e,t)=>(0,b.jsx)(R,{item:e,index:t,...n},t)))})}const Y=(0,a.memo)(V),F={menu:"menu_jmj1",menuWithAnnouncementBar:"menuWithAnnouncementBar_YufC"};function q(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,A.Mj)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",F.menu,l&&F.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(Y,{items:n,activePath:t,level:1})})})}const U="sidebar_CUen",z="sidebarWithHideableNavbar_w4KB",O="sidebarHidden_k6VE",K="sidebarLogo_CYvI";function X(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(U,s&&z,i&&O),children:[s&&(0,b.jsx)(v.A,{tabIndex:-1,className:K}),(0,b.jsx)(q,{path:t,sidebar:n}),l&&(0,b.jsx)(C,{onClick:a})]})}const J=a.memo(X);var Z=n(5454),$=n(5974);const Q=e=>{let{sidebar:t,path:n}=e;const a=(0,$.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(Y,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Z.GX,{component:Q,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_pLDq",expandButtonIcon:"expandButtonIcon_X5ff"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_c7NB",docSidebarContainerHidden:"docSidebarContainerHidden_P3S_",sidebarViewport:"sidebarViewport_KYo0"};function se(e){let{children:t}=e;const n=(0,r.t)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.A)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_a9sJ",docMainContainerEnhanced:"docMainContainerEnhanced_grEJ",docItemWrapperEnhanced:"docItemWrapperEnhanced_VqDq"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.t)();return(0,b.jsx)("main",{className:(0,o.A)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_DfVB",docsWrapper:"docsWrapper__sE8"};function ue(e){let{children:t}=e;const n=(0,r.t)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(569);function be(e){const t=(0,l.B5)(e);if(!t)return(0,b.jsx)(me.A,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(r.V,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},569:(e,t,n)=>{n.d(t,{A:()=>l});n(3696);var a=n(1750),o=n(6590),i=n(1381),s=n(2540);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a981d65e.5fc03410.js b/assets/js/a981d65e.5fc03410.js deleted file mode 100644 index cc57839c..00000000 --- a/assets/js/a981d65e.5fc03410.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5674],{4965:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>n,metadata:()=>o,toc:()=>h});var i=a(4246),r=a(1670);const n={},s="Emptying Library Trash",o={id:"guides/trash",title:"Emptying Library Trash",description:"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server.",source:"@site/docs/guides/trash.md",sourceDirName:"guides",slug:"/guides/trash",permalink:"/docs/guides/trash",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/trash.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Libraries",permalink:"/docs/guides/libraries"},next:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"}},l={},h=[{value:"File Hashes",id:"file-hashes",level:2},{value:"Automatically Empty Trash",id:"automatically-empty-trash",level:2},{value:"Manually Empty Trash",id:"manually-empty-trash",level:2}];function c(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"emptying-library-trash",children:"Emptying Library Trash"}),"\n",(0,i.jsx)(t.p,{children:"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server."}),"\n",(0,i.jsx)(t.p,{children:"If an item is currently in the trash, it can be restored back to the Library by making the file for the library item available again at the expected location. Conversely, if you perform an \u201cEmpty Trash\u201d on your Server, then the item is discarded from the trash and can no longer be automatically restored."}),"\n",(0,i.jsx)(t.p,{children:'Items currently in the trash will be displayed with an "Unavailable" indicator.'}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/unavailable-card.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on card"}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/unavailable-details.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on details view"}),"\n",(0,i.jsx)(t.h2,{id:"file-hashes",children:"File Hashes"}),"\n",(0,i.jsx)(t.p,{children:"With the trash bin, you can move or rename files and folders without losing your metadata, read progress, or read lists and collections."}),"\n",(0,i.jsxs)(t.p,{children:["To track your files when they are renamed or restored, Komga generates a file hash for each file. If Komga doesn't have a file hash for a file, it won't be able to restore data after a file move or rename. Hashing files requires some computing power, so you may want to disable this entirely on low-end devices (see ",(0,i.jsx)(t.a,{href:"/docs/installation/configuration",children:"Configuration"}),")."]}),"\n",(0,i.jsx)(t.h2,{id:"automatically-empty-trash",children:"Automatically Empty Trash"}),"\n",(0,i.jsx)(t.p,{children:"By default, items found removed from a Library are placed in the trash until the trash is emptied. You can choose to have your Server automatically empty the trash after every scan occurs if you wish. To do so:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Open Komga web interface"}),"\n",(0,i.jsx)(t.li,{children:"Edit the library for which you want to change the setting"}),"\n",(0,i.jsxs)(t.li,{children:["Enable the ",(0,i.jsx)(t.em,{children:"Empty trash automatically after every scan"})," option"]}),"\n",(0,i.jsx)(t.li,{children:"Save Changes"}),"\n"]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/empty-trash-after-scan.png",style:{maxHeight:"300px"},alt:"Empty trash automatically after every scan option"}),"\n",(0,i.jsxs)(t.admonition,{type:"danger",children:[(0,i.jsx)(t.p,{children:"Enabling this option means that content will be removed from your Library immediately with no chance to simply restore it if there was a mistake."}),(0,i.jsx)(t.p,{children:"It will also prevent folder and file moves between libraries."})]}),"\n",(0,i.jsx)(t.h2,{id:"manually-empty-trash",children:"Manually Empty Trash"}),"\n",(0,i.jsx)(t.p,{children:"If you have items in the trash that you\u2019re ready to remove, you can empty the trash. When you choose to empty the trash, you\u2019ll need to confirm your choice."}),"\n",(0,i.jsxs)(t.p,{children:["Look for the action menu icon ",(0,i.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,i.jsx)(t.em,{children:"Empty Trash"}),"."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/empty-trash-confirmation-dialog.png",style:{maxHeight:"250px"},alt:"Empty trash confirmation dialog"})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1670:(e,t,a)=>{a.d(t,{Z:()=>o,a:()=>s});var i=a(7378);const r={},n=i.createContext(r);function s(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a981d65e.ca4f4ca6.js b/assets/js/a981d65e.ca4f4ca6.js new file mode 100644 index 00000000..18bfe75a --- /dev/null +++ b/assets/js/a981d65e.ca4f4ca6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8792],{5332:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>n,metadata:()=>o,toc:()=>h});var i=a(2540),r=a(3023);const n={},s="Emptying Library Trash",o={id:"guides/trash",title:"Emptying Library Trash",description:"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server.",source:"@site/docs/guides/trash.md",sourceDirName:"guides",slug:"/guides/trash",permalink:"/docs/guides/trash",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/trash.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Libraries",permalink:"/docs/guides/libraries"},next:{title:"Scanning, Analyzing and Refreshing Metadata",permalink:"/docs/guides/scan-analysis-refresh"}},l={},h=[{value:"File Hashes",id:"file-hashes",level:2},{value:"Automatically Empty Trash",id:"automatically-empty-trash",level:2},{value:"Manually Empty Trash",id:"manually-empty-trash",level:2}];function c(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"emptying-library-trash",children:"Emptying Library Trash"}),"\n",(0,i.jsx)(t.p,{children:"Like modern operating systems, Komga uses a concept of placing items in the \u201ctrash\u201d before they\u2019re permanently removed. If you move or delete the file for a library item or if the file somehow becomes unavailable, then the library item will be placed into the \u201ctrash\u201d. This helps prevent against items being accidentally or unintentionally removed from your Library. It can be particularly helpful in situations where a drive or network share where content is stored isn\u2019t available when a Library Scan occurs. By default, the item will remain in the trash until you perform an \u201cEmpty Trash\u201d on your Server."}),"\n",(0,i.jsx)(t.p,{children:"If an item is currently in the trash, it can be restored back to the Library by making the file for the library item available again at the expected location. Conversely, if you perform an \u201cEmpty Trash\u201d on your Server, then the item is discarded from the trash and can no longer be automatically restored."}),"\n",(0,i.jsx)(t.p,{children:'Items currently in the trash will be displayed with an "Unavailable" indicator.'}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/unavailable-card.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on card"}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/unavailable-details.png",style:{maxHeight:"300px"},alt:"Unavailable indicator on details view"}),"\n",(0,i.jsx)(t.h2,{id:"file-hashes",children:"File Hashes"}),"\n",(0,i.jsx)(t.p,{children:"With the trash bin, you can move or rename files and folders without losing your metadata, read progress, or read lists and collections."}),"\n",(0,i.jsxs)(t.p,{children:["To track your files when they are renamed or restored, Komga generates a file hash for each file. If Komga doesn't have a file hash for a file, it won't be able to restore data after a file move or rename. Hashing files requires some computing power, so you may want to disable this entirely on low-end devices (see ",(0,i.jsx)(t.a,{href:"/docs/installation/configuration",children:"Configuration"}),")."]}),"\n",(0,i.jsx)(t.h2,{id:"automatically-empty-trash",children:"Automatically Empty Trash"}),"\n",(0,i.jsx)(t.p,{children:"By default, items found removed from a Library are placed in the trash until the trash is emptied. You can choose to have your Server automatically empty the trash after every scan occurs if you wish. To do so:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Open Komga web interface"}),"\n",(0,i.jsx)(t.li,{children:"Edit the library for which you want to change the setting"}),"\n",(0,i.jsxs)(t.li,{children:["Enable the ",(0,i.jsx)(t.em,{children:"Empty trash automatically after every scan"})," option"]}),"\n",(0,i.jsx)(t.li,{children:"Save Changes"}),"\n"]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/empty-trash-after-scan.png",style:{maxHeight:"300px"},alt:"Empty trash automatically after every scan option"}),"\n",(0,i.jsxs)(t.admonition,{type:"danger",children:[(0,i.jsx)(t.p,{children:"Enabling this option means that content will be removed from your Library immediately with no chance to simply restore it if there was a mistake."}),(0,i.jsx)(t.p,{children:"It will also prevent folder and file moves between libraries."})]}),"\n",(0,i.jsx)(t.h2,{id:"manually-empty-trash",children:"Manually Empty Trash"}),"\n",(0,i.jsx)(t.p,{children:"If you have items in the trash that you\u2019re ready to remove, you can empty the trash. When you choose to empty the trash, you\u2019ll need to confirm your choice."}),"\n",(0,i.jsxs)(t.p,{children:["Look for the action menu icon ",(0,i.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,i.jsx)(t.em,{children:"Empty Trash"}),"."]}),"\n",(0,i.jsx)("img",{src:"/assets/media/guides/trash/empty-trash-confirmation-dialog.png",style:{maxHeight:"250px"},alt:"Empty trash confirmation dialog"})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},3023:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>o});var i=a(3696);const r={},n=i.createContext(r);function s(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ac07380c.e3477a94.js b/assets/js/ac07380c.e3477a94.js deleted file mode 100644 index b4518397..00000000 --- a/assets/js/ac07380c.e3477a94.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4434],{789:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var t=r(4246),i=r(1670);const s={},o="Run with Docker",c={id:"installation/docker",title:"Run with Docker",description:"Registries",source:"@site/docs/installation/docker.md",sourceDirName:"installation",slug:"/installation/docker",permalink:"/docs/installation/docker",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/docker.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"},next:{title:"Run with the Jar file",permalink:"/docs/installation/jar"}},d={},a=[{value:"Registries",id:"registries",level:2},{value:"Version tags",id:"version-tags",level:2},{value:"Usage",id:"usage",level:2},{value:"docker",id:"docker",level:3},{value:"docker-compose",id:"docker-compose",level:3},{value:"Parameters",id:"parameters",level:2},{value:"User / Group Identifiers",id:"user--group-identifiers",level:2},{value:"Increase memory limit",id:"increase-memory-limit",level:2},{value:"Support info",id:"support-info",level:2},{value:"Updating",id:"updating",level:2},{value:"Via Docker Run/Create",id:"via-docker-runcreate",level:3},{value:"Via Docker Compose",id:"via-docker-compose",level:3},{value:"Automatic updates",id:"automatic-updates",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"run-with-docker",children:"Run with Docker"}),"\n",(0,t.jsx)(n.h2,{id:"registries",children:"Registries"}),"\n",(0,t.jsx)(n.p,{children:"The Docker images are published on:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://hub.docker.com/r/gotson/komga",children:"DockerHub"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://github.com/gotson/komga/pkgs/container/komga",children:"ghcr.io"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"version-tags",children:"Version tags"}),"\n",(0,t.jsx)(n.p,{children:"This image provides various versions that are available via tags."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"center"},children:(0,t.jsx)(n.strong,{children:"Tag"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Description"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"latest"})}),(0,t.jsx)(n.td,{children:"latest commit"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"MAJOR.x"})}),(0,t.jsxs)(n.td,{children:["latest ",(0,t.jsx)(n.code,{children:"MAJOR"})," version, for example ",(0,t.jsx)(n.code,{children:"0.x"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"x.y.z"})}),(0,t.jsxs)(n.td,{children:["version ",(0,t.jsx)(n.code,{children:"x.y.z"})]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"Here are some example snippets to help you get started creating a container."}),"\n",(0,t.jsx)(n.h3,{id:"docker",children:"docker"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"docker create \\\n --name=komga \\\n --user 1000:1000 \\\n -p 25600:25600 \\\n --mount type=bind,source=/path/to/config,target=/config \\\n --mount type=bind,source=/path/to/data,target=/data \\\n --restart unless-stopped \\\n gotson/komga\n"})}),"\n",(0,t.jsx)(n.p,{children:"Then start the container:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"docker start komga\n"})}),"\n",(0,t.jsx)(n.h3,{id:"docker-compose",children:"docker-compose"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"---\nversion: '3.3'\nservices:\n komga:\n image: gotson/komga\n container_name: komga\n volumes:\n - type: bind\n source: /path/to/config\n target: /config\n - type: bind\n source: /path/to/data\n target: /data\n - type: bind\n source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London\n target: /etc/timezone\n read_only: true\n ports:\n - 25600:25600\n user: \"1000:1000\"\n # remove the whole environment section if you don't need it\n environment:\n - = \n restart: unless-stopped\n"})}),"\n",(0,t.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,t.jsxs)(n.p,{children:["Container images are configured using parameters passed at runtime (such as those above).\nThese parameters are separated by a colon and indicate ",(0,t.jsx)(n.code,{children:"external:internal"})," respectively.\nFor example, ",(0,t.jsx)(n.code,{children:"-p 8080:80"})," would expose port ",(0,t.jsx)(n.code,{children:"80"})," from inside the container to be accessible from the host's IP on port ",(0,t.jsx)(n.code,{children:"8080"})," outside the container."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Parameter"}),(0,t.jsx)(n.th,{children:"Function"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"-p 25600"})}),(0,t.jsx)(n.td,{children:"The port for the Komga APIs and web interface"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"--user: 1000:1000"})}),(0,t.jsxs)(n.td,{children:["User",":Group"," identifier - see below for explanation"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"--mount type=bind,source=/path/to/config,target=/config"})}),(0,t.jsx)(n.td,{children:"Database and Komga configurations"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"--mount type=bind,source=/path/to/data,target=/data"})}),(0,t.jsx)(n.td,{children:"Location of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"-e ENV_VAR=value"})}),(0,t.jsxs)(n.td,{children:["Any ",(0,t.jsx)(n.a,{href:"/docs/installation/configuration",children:"configuration"})," environment variable"]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"user--group-identifiers",children:"User / Group Identifiers"}),"\n",(0,t.jsxs)(n.p,{children:["When using volumes (",(0,t.jsx)(n.code,{children:"-v"})," flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user ID and group ID."]}),"\n",(0,t.jsx)(n.p,{children:"Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic."}),"\n",(0,t.jsxs)(n.p,{children:["In this instance ",(0,t.jsx)(n.code,{children:"UID=1000"})," and ",(0,t.jsx)(n.code,{children:"GID=1000"}),", to find yours use ",(0,t.jsx)(n.code,{children:"id "})," as below:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"$ id \n uid=1000(jdoe) gid=1000(jdgroup) groups=1000(jdgroup)\n"})}),"\n",(0,t.jsx)(n.h2,{id:"increase-memory-limit",children:"Increase memory limit"}),"\n",(0,t.jsxs)(n.p,{children:["By default the ",(0,t.jsx)(n.code,{children:"java"})," process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some ",(0,t.jsx)(n.code,{children:"OutOfMemoryException"})," in the logs you probably need to increase the maximum memory Komga can use."]}),"\n",(0,t.jsxs)(n.p,{children:["To do so, you can use the ",(0,t.jsx)(n.code,{children:"JAVA_TOOL_OPTIONS=-Xmx "})," environment variable, where ",(0,t.jsx)(n.code,{children:" "})," can be any amount like ",(0,t.jsx)(n.code,{children:"2048m"}),", ",(0,t.jsx)(n.code,{children:"4g"})," etc. For example to run Komga with a maximum of 4gb of memory:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",metastring:"script",children:"JAVA_TOOL_OPTIONS=-Xmx4g\n"})}),"\n",(0,t.jsx)(n.h2,{id:"support-info",children:"Support info"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Shell access whilst the container is running: ",(0,t.jsx)(n.code,{children:"docker exec -it komga /bin/bash"})]}),"\n",(0,t.jsxs)(n.li,{children:["To monitor the logs of the container in realtime: ",(0,t.jsx)(n.code,{children:"docker logs -f komga"})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"updating",children:"Updating"}),"\n",(0,t.jsx)(n.p,{children:"Below are the instructions for updating containers:"}),"\n",(0,t.jsx)(n.h3,{id:"via-docker-runcreate",children:"Via Docker Run/Create"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Update the image: ",(0,t.jsx)(n.code,{children:"docker pull gotson/komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["Stop the running container: ",(0,t.jsx)(n.code,{children:"docker stop komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["Delete the container: ",(0,t.jsx)(n.code,{children:"docker rm komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your ",(0,t.jsx)(n.code,{children:"/config"})," folder and settings will be preserved)"]}),"\n",(0,t.jsxs)(n.li,{children:["Start the new container: ",(0,t.jsx)(n.code,{children:"docker start komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["You can also remove the old dangling images: ",(0,t.jsx)(n.code,{children:"docker image prune"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"via-docker-compose",children:"Via Docker Compose"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Update all images: ",(0,t.jsx)(n.code,{children:"docker-compose pull"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["or update a single image: ",(0,t.jsx)(n.code,{children:"docker-compose pull komga"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Let compose update all containers as necessary: ",(0,t.jsx)(n.code,{children:"docker-compose up -d"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["or update a single container: ",(0,t.jsx)(n.code,{children:"docker-compose up -d komga"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["You can also remove the old dangling images: ",(0,t.jsx)(n.code,{children:"docker image prune"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"automatic-updates",children:"Automatic updates"}),"\n",(0,t.jsxs)(n.p,{children:["You can use ",(0,t.jsx)(n.a,{href:"https://github.com/containrrr/watchtower",children:"Watchtower"})," to automatically update your containers."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1670:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>o});var t=r(7378);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ac07380c.f084a18d.js b/assets/js/ac07380c.f084a18d.js new file mode 100644 index 00000000..63178a65 --- /dev/null +++ b/assets/js/ac07380c.f084a18d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3962],{8555:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var t=r(2540),i=r(3023);const s={},o="Run with Docker",c={id:"installation/docker",title:"Run with Docker",description:"Registries",source:"@site/docs/installation/docker.md",sourceDirName:"installation",slug:"/installation/docker",permalink:"/docs/installation/docker",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/docker.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"},next:{title:"Run with the Jar file",permalink:"/docs/installation/jar"}},d={},a=[{value:"Registries",id:"registries",level:2},{value:"Version tags",id:"version-tags",level:2},{value:"Usage",id:"usage",level:2},{value:"docker",id:"docker",level:3},{value:"docker-compose",id:"docker-compose",level:3},{value:"Parameters",id:"parameters",level:2},{value:"User / Group Identifiers",id:"user--group-identifiers",level:2},{value:"Increase memory limit",id:"increase-memory-limit",level:2},{value:"Support info",id:"support-info",level:2},{value:"Updating",id:"updating",level:2},{value:"Via Docker Run/Create",id:"via-docker-runcreate",level:3},{value:"Via Docker Compose",id:"via-docker-compose",level:3},{value:"Automatic updates",id:"automatic-updates",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"run-with-docker",children:"Run with Docker"}),"\n",(0,t.jsx)(n.h2,{id:"registries",children:"Registries"}),"\n",(0,t.jsx)(n.p,{children:"The Docker images are published on:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://hub.docker.com/r/gotson/komga",children:"DockerHub"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://github.com/gotson/komga/pkgs/container/komga",children:"ghcr.io"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"version-tags",children:"Version tags"}),"\n",(0,t.jsx)(n.p,{children:"This image provides various versions that are available via tags."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"center"},children:(0,t.jsx)(n.strong,{children:"Tag"})}),(0,t.jsx)(n.th,{children:(0,t.jsx)(n.strong,{children:"Description"})})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"latest"})}),(0,t.jsx)(n.td,{children:"latest commit"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"MAJOR.x"})}),(0,t.jsxs)(n.td,{children:["latest ",(0,t.jsx)(n.code,{children:"MAJOR"})," version, for example ",(0,t.jsx)(n.code,{children:"0.x"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"x.y.z"})}),(0,t.jsxs)(n.td,{children:["version ",(0,t.jsx)(n.code,{children:"x.y.z"})]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"Here are some example snippets to help you get started creating a container."}),"\n",(0,t.jsx)(n.h3,{id:"docker",children:"docker"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"docker create \\\n --name=komga \\\n --user 1000:1000 \\\n -p 25600:25600 \\\n --mount type=bind,source=/path/to/config,target=/config \\\n --mount type=bind,source=/path/to/data,target=/data \\\n --restart unless-stopped \\\n gotson/komga\n"})}),"\n",(0,t.jsx)(n.p,{children:"Then start the container:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"docker start komga\n"})}),"\n",(0,t.jsx)(n.h3,{id:"docker-compose",children:"docker-compose"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"---\nversion: '3.3'\nservices:\n komga:\n image: gotson/komga\n container_name: komga\n volumes:\n - type: bind\n source: /path/to/config\n target: /config\n - type: bind\n source: /path/to/data\n target: /data\n - type: bind\n source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London\n target: /etc/timezone\n read_only: true\n ports:\n - 25600:25600\n user: \"1000:1000\"\n # remove the whole environment section if you don't need it\n environment:\n - = \n restart: unless-stopped\n"})}),"\n",(0,t.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,t.jsxs)(n.p,{children:["Container images are configured using parameters passed at runtime (such as those above).\nThese parameters are separated by a colon and indicate ",(0,t.jsx)(n.code,{children:"external:internal"})," respectively.\nFor example, ",(0,t.jsx)(n.code,{children:"-p 8080:80"})," would expose port ",(0,t.jsx)(n.code,{children:"80"})," from inside the container to be accessible from the host's IP on port ",(0,t.jsx)(n.code,{children:"8080"})," outside the container."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Parameter"}),(0,t.jsx)(n.th,{children:"Function"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"-p 25600"})}),(0,t.jsx)(n.td,{children:"The port for the Komga APIs and web interface"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"--user: 1000:1000"})}),(0,t.jsxs)(n.td,{children:["User",":Group"," identifier - see below for explanation"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"--mount type=bind,source=/path/to/config,target=/config"})}),(0,t.jsx)(n.td,{children:"Database and Komga configurations"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"--mount type=bind,source=/path/to/data,target=/data"})}),(0,t.jsx)(n.td,{children:"Location of your data directory on disk. Choose a folder that contains both your books and your preferred import location for hardlinks to work."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.code,{children:"-e ENV_VAR=value"})}),(0,t.jsxs)(n.td,{children:["Any ",(0,t.jsx)(n.a,{href:"/docs/installation/configuration",children:"configuration"})," environment variable"]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"user--group-identifiers",children:"User / Group Identifiers"}),"\n",(0,t.jsxs)(n.p,{children:["When using volumes (",(0,t.jsx)(n.code,{children:"-v"})," flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user ID and group ID."]}),"\n",(0,t.jsx)(n.p,{children:"Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic."}),"\n",(0,t.jsxs)(n.p,{children:["In this instance ",(0,t.jsx)(n.code,{children:"UID=1000"})," and ",(0,t.jsx)(n.code,{children:"GID=1000"}),", to find yours use ",(0,t.jsx)(n.code,{children:"id "})," as below:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"$ id \n uid=1000(jdoe) gid=1000(jdgroup) groups=1000(jdgroup)\n"})}),"\n",(0,t.jsx)(n.h2,{id:"increase-memory-limit",children:"Increase memory limit"}),"\n",(0,t.jsxs)(n.p,{children:["By default the ",(0,t.jsx)(n.code,{children:"java"})," process will be limited in the maximum amount of memory (RAM) it can use, usually 1gb. If you encounter some ",(0,t.jsx)(n.code,{children:"OutOfMemoryException"})," in the logs you probably need to increase the maximum memory Komga can use."]}),"\n",(0,t.jsxs)(n.p,{children:["To do so, you can use the ",(0,t.jsx)(n.code,{children:"JAVA_TOOL_OPTIONS=-Xmx "})," environment variable, where ",(0,t.jsx)(n.code,{children:" "})," can be any amount like ",(0,t.jsx)(n.code,{children:"2048m"}),", ",(0,t.jsx)(n.code,{children:"4g"})," etc. For example to run Komga with a maximum of 4gb of memory:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",metastring:"script",children:"JAVA_TOOL_OPTIONS=-Xmx4g\n"})}),"\n",(0,t.jsx)(n.h2,{id:"support-info",children:"Support info"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Shell access whilst the container is running: ",(0,t.jsx)(n.code,{children:"docker exec -it komga /bin/bash"})]}),"\n",(0,t.jsxs)(n.li,{children:["To monitor the logs of the container in realtime: ",(0,t.jsx)(n.code,{children:"docker logs -f komga"})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"updating",children:"Updating"}),"\n",(0,t.jsx)(n.p,{children:"Below are the instructions for updating containers:"}),"\n",(0,t.jsx)(n.h3,{id:"via-docker-runcreate",children:"Via Docker Run/Create"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Update the image: ",(0,t.jsx)(n.code,{children:"docker pull gotson/komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["Stop the running container: ",(0,t.jsx)(n.code,{children:"docker stop komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["Delete the container: ",(0,t.jsx)(n.code,{children:"docker rm komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your ",(0,t.jsx)(n.code,{children:"/config"})," folder and settings will be preserved)"]}),"\n",(0,t.jsxs)(n.li,{children:["Start the new container: ",(0,t.jsx)(n.code,{children:"docker start komga"})]}),"\n",(0,t.jsxs)(n.li,{children:["You can also remove the old dangling images: ",(0,t.jsx)(n.code,{children:"docker image prune"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"via-docker-compose",children:"Via Docker Compose"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Update all images: ",(0,t.jsx)(n.code,{children:"docker-compose pull"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["or update a single image: ",(0,t.jsx)(n.code,{children:"docker-compose pull komga"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["Let compose update all containers as necessary: ",(0,t.jsx)(n.code,{children:"docker-compose up -d"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["or update a single container: ",(0,t.jsx)(n.code,{children:"docker-compose up -d komga"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["You can also remove the old dangling images: ",(0,t.jsx)(n.code,{children:"docker image prune"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"automatic-updates",children:"Automatic updates"}),"\n",(0,t.jsxs)(n.p,{children:["You can use ",(0,t.jsx)(n.a,{href:"https://github.com/containrrr/watchtower",children:"Watchtower"})," to automatically update your containers."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},3023:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>c});var t=r(3696);const i={},s=t.createContext(i);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b242fde9.f48b4801.js b/assets/js/b242fde9.f48b4801.js deleted file mode 100644 index a2c25039..00000000 --- a/assets/js/b242fde9.f48b4801.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5647],{7433:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>r});var s=i(4246),n=i(1670);const l={},a="Duplicate Files",c={id:"guides/duplicate-files",title:"Duplicate Files",description:"Komga can detect duplicate files among your books.",source:"@site/docs/guides/duplicate-files.md",sourceDirName:"guides",slug:"/guides/duplicate-files",permalink:"/docs/guides/duplicate-files",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-files.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Import Books",permalink:"/docs/guides/import-books"},next:{title:"Duplicate Pages",permalink:"/docs/guides/duplicate-pages"}},o={},r=[{value:"Browsing Duplicate Files",id:"browsing-duplicate-files",level:2}];function d(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",p:"p",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"duplicate-files",children:"Duplicate Files"}),"\n",(0,s.jsx)(t.p,{children:"Komga can detect duplicate files among your books."}),"\n",(0,s.jsxs)(t.p,{children:["You need to enable ",(0,s.jsx)(t.a,{href:"/docs/guides/libraries#compute-hash-for-files",children:"file hashing"})," for your libraries."]}),"\n",(0,s.jsxs)(t.p,{children:["You can manage duplicate pages from ",(0,s.jsx)(t.em,{children:"Server Settings > Duplicate Files"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"browsing-duplicate-files",children:"Browsing Duplicate Files"}),"\n",(0,s.jsx)(t.p,{children:"This screen will show all the duplicate files."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/duplicate-files/duplicate-files.png",style:{maxHeight:" 400px"},alt:"Browse Duplicate Files"}),"\n",(0,s.jsx)(t.p,{children:"You can direcly delete a duplicate file by clicking on the trashcan icon."})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1670:(e,t,i)=>{i.d(t,{Z:()=>c,a:()=>a});var s=i(7378);const n={},l=s.createContext(n);function a(e){const t=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b242fde9.ffe63f73.js b/assets/js/b242fde9.ffe63f73.js new file mode 100644 index 00000000..2ac65e5f --- /dev/null +++ b/assets/js/b242fde9.ffe63f73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7549],{9665:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>r});var s=i(2540),n=i(3023);const l={},a="Duplicate Files",c={id:"guides/duplicate-files",title:"Duplicate Files",description:"Komga can detect duplicate files among your books.",source:"@site/docs/guides/duplicate-files.md",sourceDirName:"guides",slug:"/guides/duplicate-files",permalink:"/docs/guides/duplicate-files",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-files.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Import Books",permalink:"/docs/guides/import-books"},next:{title:"Duplicate Pages",permalink:"/docs/guides/duplicate-pages"}},o={},r=[{value:"Browsing Duplicate Files",id:"browsing-duplicate-files",level:2}];function d(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",p:"p",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"duplicate-files",children:"Duplicate Files"}),"\n",(0,s.jsx)(t.p,{children:"Komga can detect duplicate files among your books."}),"\n",(0,s.jsxs)(t.p,{children:["You need to enable ",(0,s.jsx)(t.a,{href:"/docs/guides/libraries#compute-hash-for-files",children:"file hashing"})," for your libraries."]}),"\n",(0,s.jsxs)(t.p,{children:["You can manage duplicate pages from ",(0,s.jsx)(t.em,{children:"Server Settings > Duplicate Files"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"browsing-duplicate-files",children:"Browsing Duplicate Files"}),"\n",(0,s.jsx)(t.p,{children:"This screen will show all the duplicate files."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/duplicate-files/duplicate-files.png",style:{maxHeight:" 400px"},alt:"Browse Duplicate Files"}),"\n",(0,s.jsx)(t.p,{children:"You can direcly delete a duplicate file by clicking on the trashcan icon."})]})}function u(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},3023:(e,t,i)=>{i.d(t,{R:()=>a,x:()=>c});var s=i(3696);const n={},l=s.createContext(n);function a(e){const t=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.4ce4afce.js b/assets/js/b2b675dd.4ce4afce.js deleted file mode 100644 index b5a1a192..00000000 --- a/assets/js/b2b675dd.4ce4afce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.7e1f393c.js b/assets/js/b2b675dd.7e1f393c.js new file mode 100644 index 00000000..a0ca6326 --- /dev/null +++ b/assets/js/b2b675dd.7e1f393c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1991],{9775:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Latest Komga announcements","blogTitle":"Announcements"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.5193f76e.js b/assets/js/b2f554cd.72419fb0.js similarity index 99% rename from assets/js/b2f554cd.5193f76e.js rename to assets/js/b2f554cd.72419fb0.js index e4696395..a4fef0b2 100644 --- a/assets/js/b2f554cd.5193f76e.js +++ b/assets/js/b2f554cd.72419fb0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1477],{4556:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"ebook-drop2","metadata":{"permalink":"/blog/ebook-drop2","source":"@site/blog/2023-12-15-ebooks-drop2.md","title":"eBook drop 2","description":"Version 1.9.0 contains the second feature drop for Ebooks support.","date":"2023-12-15T00:00:00.000Z","formattedDate":"December 15, 2023","tags":[{"label":"upgrade","permalink":"/blog/tags/upgrade"},{"label":"komga","permalink":"/blog/tags/komga"}],"readingTime":0.605,"hasTruncateMarker":false,"authors":[{"name":"gotson","title":"Developer of Komga","url":"https://github.com/gotson","imageURL":"https://github.com/gotson.png","key":"gotson"}],"frontMatter":{"slug":"ebook-drop2","title":"eBook drop 2","authors":"gotson","tags":["upgrade","komga"]},"unlisted":false,"nextItem":{"title":"eBook support","permalink":"/blog/ebook-support"}},"content":"Version [1.9.0](https://github.com/gotson/komga/releases/tag/1.9.0) contains the second feature drop for Ebooks support.\\n\\nIt brings nice additions to the initial release, most notably the read progress will be kept when reading and restored, same as with other books.\\n\\nThe analysis process of EPUB files was also revamped, and some EPUB files that were not analyzed before should be working fine now.\\n\\nWhile the first release forced all the EPUB files through the Epub Reader, this release brings back compatibility with the Divina Reader for pre-paginated EPUB files containing only images. This also restores support for the Pages API, and thus the compatibility with Tachiyomi, or any OPDS-PSE client.\\n\\nHead over to the [Release Notes](https://github.com/gotson/komga/releases/tag/1.9.0) for more details on all the new features and fixes."},{"id":"ebook-support","metadata":{"permalink":"/blog/ebook-support","source":"@site/blog/2023-11-29-ebooks.md","title":"eBook support","description":"Version 1.8.0 is bringing a long awaited feature: proper eBook support!","date":"2023-11-29T00:00:00.000Z","formattedDate":"November 29, 2023","tags":[{"label":"upgrade","permalink":"/blog/tags/upgrade"},{"label":"komga","permalink":"/blog/tags/komga"}],"readingTime":1.37,"hasTruncateMarker":false,"authors":[{"name":"gotson","title":"Developer of Komga","url":"https://github.com/gotson","imageURL":"https://github.com/gotson.png","key":"gotson"}],"frontMatter":{"slug":"ebook-support","title":"eBook support","authors":"gotson","tags":["upgrade","komga"]},"unlisted":false,"prevItem":{"title":"eBook drop 2","permalink":"/blog/ebook-drop2"},"nextItem":{"title":"Prepare for v1.0.0","permalink":"/blog/prepare-v1"}},"content":"Version [1.8.0](https://github.com/gotson/komga/releases/tag/1.8.0) is bringing a long awaited feature: **proper eBook support!**\\n\\nGithub issue [#221](https://github.com/gotson/komga/issues/221) has been opened for more than 3 years, and has finally been tackled.\\n\\n## What you need to know\\n\\n- eBooks behave like any other book in Komga, in regards to series or metadata. You can even mix comic books and ebooks in the same series.\\n- only EPUB format is supported. Other formats will not be supported in the future.\\n- existing EPUB files will be re-analyzed. If you had image-only EPUB, those may not be compatible anymore with third-party clients.\\n- the web EPUB reader is a very first version, and **does not support saving progress**. Read progress saving and restore will come in a future release.\\n- any book in Komga can be read with [WebPub](https://readium.org/webpub-manifest/) compatible clients.\\n- **There will be issues**. EPUB is a complex format, and many EPUB files are not properly built. Raise issues [on Github](https://github.com/gotson/komga/issues/new/choose) for support.\\n\\n## Other recent changes you may have missed\\n\\nIn case you haven\'t kept up with the release notes since version 1.0.0, here are the most significant changes:\\n- Komga is now available as a [desktop app](/docs/installation/desktop), and is available in the [Microsoft Store](/docs/installation/ms-store)\\n- Multiple settings are now configurable from the [Server Settings](/docs/guides/server-settings) screen. You may need to cleanup your configuration file and remove deprecated entries.\\n- Thumbnails size can now be configured in Server Settings.\\n- Background task management has been revamped, and now supports proper parallel executions (configurable in Server Settings).\\n- Komga now has support for [One-Shots](/docs/guides/oneshots).\\n- a [Command Line Interface](/docs/guides/cli) was added to update forgotten password for the admin account."},{"id":"prepare-v1","metadata":{"permalink":"/blog/prepare-v1","source":"@site/blog/2023-03-21-prepare-v1.md","title":"Prepare for v1.0.0","description":"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.","date":"2023-03-21T00:00:00.000Z","formattedDate":"March 21, 2023","tags":[{"label":"breaking change","permalink":"/blog/tags/breaking-change"},{"label":"upgrade","permalink":"/blog/tags/upgrade"},{"label":"komga","permalink":"/blog/tags/komga"}],"readingTime":1.115,"hasTruncateMarker":false,"authors":[{"name":"gotson","title":"Developer of Komga","url":"https://github.com/gotson","imageURL":"https://github.com/gotson.png","key":"gotson"}],"frontMatter":{"slug":"prepare-v1","title":"Prepare for v1.0.0","authors":"gotson","tags":["breaking change","upgrade","komga"]},"unlisted":false,"prevItem":{"title":"eBook support","permalink":"/blog/ebook-support"}},"content":"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.\\n\\n## Before upgrading\\n\\n- If you run Docker, it is advisable to use the `0.x` tag instead of `latest`. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.\\n- Backup your `database.sqlite`. You can find it in the configuration directory, by default:\\n - on Windows: `%USERPROFILE%/.komga/database.sqlite`\\n - on Unix: `~/.komga/database.sqlite`\\n - on Docker: in the directory you mounted as `/config`\\n\\n## Breaking changes\\n\\n- The minimum Java version required will be Java 17:\\n - If you run Komga using the `jar`, you will need to make sure your Java version is sufficient by running `java -version`.\\n - If you run Komga using Docker, you don\'t need to do anything.\\n- The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.\\n- The default port will be changed from `8080` to `25600`:\\n - If you use Docker, you will need to update your container or compose configuration to expose the new port.\\n - You may need to adjust your reverse proxy settings.\\n - You can still change the port [through configuration](/docs/installation/configuration#server_port--serverport-port)."}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5894],{6042:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"ebook-drop2","metadata":{"permalink":"/blog/ebook-drop2","source":"@site/blog/2023-12-15-ebooks-drop2.md","title":"eBook drop 2","description":"Version 1.9.0 contains the second feature drop for Ebooks support.","date":"2023-12-15T00:00:00.000Z","formattedDate":"December 15, 2023","tags":[{"label":"upgrade","permalink":"/blog/tags/upgrade"},{"label":"komga","permalink":"/blog/tags/komga"}],"readingTime":0.605,"hasTruncateMarker":false,"authors":[{"name":"gotson","title":"Developer of Komga","url":"https://github.com/gotson","imageURL":"https://github.com/gotson.png","key":"gotson"}],"frontMatter":{"slug":"ebook-drop2","title":"eBook drop 2","authors":"gotson","tags":["upgrade","komga"]},"unlisted":false,"nextItem":{"title":"eBook support","permalink":"/blog/ebook-support"}},"content":"Version [1.9.0](https://github.com/gotson/komga/releases/tag/1.9.0) contains the second feature drop for Ebooks support.\\n\\nIt brings nice additions to the initial release, most notably the read progress will be kept when reading and restored, same as with other books.\\n\\nThe analysis process of EPUB files was also revamped, and some EPUB files that were not analyzed before should be working fine now.\\n\\nWhile the first release forced all the EPUB files through the Epub Reader, this release brings back compatibility with the Divina Reader for pre-paginated EPUB files containing only images. This also restores support for the Pages API, and thus the compatibility with Tachiyomi, or any OPDS-PSE client.\\n\\nHead over to the [Release Notes](https://github.com/gotson/komga/releases/tag/1.9.0) for more details on all the new features and fixes."},{"id":"ebook-support","metadata":{"permalink":"/blog/ebook-support","source":"@site/blog/2023-11-29-ebooks.md","title":"eBook support","description":"Version 1.8.0 is bringing a long awaited feature: proper eBook support!","date":"2023-11-29T00:00:00.000Z","formattedDate":"November 29, 2023","tags":[{"label":"upgrade","permalink":"/blog/tags/upgrade"},{"label":"komga","permalink":"/blog/tags/komga"}],"readingTime":1.37,"hasTruncateMarker":false,"authors":[{"name":"gotson","title":"Developer of Komga","url":"https://github.com/gotson","imageURL":"https://github.com/gotson.png","key":"gotson"}],"frontMatter":{"slug":"ebook-support","title":"eBook support","authors":"gotson","tags":["upgrade","komga"]},"unlisted":false,"prevItem":{"title":"eBook drop 2","permalink":"/blog/ebook-drop2"},"nextItem":{"title":"Prepare for v1.0.0","permalink":"/blog/prepare-v1"}},"content":"Version [1.8.0](https://github.com/gotson/komga/releases/tag/1.8.0) is bringing a long awaited feature: **proper eBook support!**\\n\\nGithub issue [#221](https://github.com/gotson/komga/issues/221) has been opened for more than 3 years, and has finally been tackled.\\n\\n## What you need to know\\n\\n- eBooks behave like any other book in Komga, in regards to series or metadata. You can even mix comic books and ebooks in the same series.\\n- only EPUB format is supported. Other formats will not be supported in the future.\\n- existing EPUB files will be re-analyzed. If you had image-only EPUB, those may not be compatible anymore with third-party clients.\\n- the web EPUB reader is a very first version, and **does not support saving progress**. Read progress saving and restore will come in a future release.\\n- any book in Komga can be read with [WebPub](https://readium.org/webpub-manifest/) compatible clients.\\n- **There will be issues**. EPUB is a complex format, and many EPUB files are not properly built. Raise issues [on Github](https://github.com/gotson/komga/issues/new/choose) for support.\\n\\n## Other recent changes you may have missed\\n\\nIn case you haven\'t kept up with the release notes since version 1.0.0, here are the most significant changes:\\n- Komga is now available as a [desktop app](/docs/installation/desktop), and is available in the [Microsoft Store](/docs/installation/ms-store)\\n- Multiple settings are now configurable from the [Server Settings](/docs/guides/server-settings) screen. You may need to cleanup your configuration file and remove deprecated entries.\\n- Thumbnails size can now be configured in Server Settings.\\n- Background task management has been revamped, and now supports proper parallel executions (configurable in Server Settings).\\n- Komga now has support for [One-Shots](/docs/guides/oneshots).\\n- a [Command Line Interface](/docs/guides/cli) was added to update forgotten password for the admin account."},{"id":"prepare-v1","metadata":{"permalink":"/blog/prepare-v1","source":"@site/blog/2023-03-21-prepare-v1.md","title":"Prepare for v1.0.0","description":"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.","date":"2023-03-21T00:00:00.000Z","formattedDate":"March 21, 2023","tags":[{"label":"breaking change","permalink":"/blog/tags/breaking-change"},{"label":"upgrade","permalink":"/blog/tags/upgrade"},{"label":"komga","permalink":"/blog/tags/komga"}],"readingTime":1.115,"hasTruncateMarker":false,"authors":[{"name":"gotson","title":"Developer of Komga","url":"https://github.com/gotson","imageURL":"https://github.com/gotson.png","key":"gotson"}],"frontMatter":{"slug":"prepare-v1","title":"Prepare for v1.0.0","authors":"gotson","tags":["breaking change","upgrade","komga"]},"unlisted":false,"prevItem":{"title":"eBook support","permalink":"/blog/ebook-support"}},"content":"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.\\n\\n## Before upgrading\\n\\n- If you run Docker, it is advisable to use the `0.x` tag instead of `latest`. You will be able to decide when you want to upgrade, especially if you are updating containers automatically.\\n- Backup your `database.sqlite`. You can find it in the configuration directory, by default:\\n - on Windows: `%USERPROFILE%/.komga/database.sqlite`\\n - on Unix: `~/.komga/database.sqlite`\\n - on Docker: in the directory you mounted as `/config`\\n\\n## Breaking changes\\n\\n- The minimum Java version required will be Java 17:\\n - If you run Komga using the `jar`, you will need to make sure your Java version is sufficient by running `java -version`.\\n - If you run Komga using Docker, you don\'t need to do anything.\\n- The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm.\\n- The default port will be changed from `8080` to `25600`:\\n - If you use Docker, you will need to update your container or compose configuration to expose the new port.\\n - You may need to adjust your reverse proxy settings.\\n - You can still change the port [through configuration](/docs/installation/configuration#server_port--serverport-port)."}]}')}}]); \ No newline at end of file diff --git a/assets/js/b94207ad.0ec3f891.js b/assets/js/b94207ad.0ec3f891.js deleted file mode 100644 index 2304ff92..00000000 --- a/assets/js/b94207ad.0ec3f891.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4443],{3961:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var n=o(4246),s=o(1670);const a={},i="Install from the Microsoft Store",r={id:"installation/ms-store",title:"Install from the Microsoft Store",description:"You can install Komga from the Microsoft Store.",source:"@site/docs/installation/ms-store.md",sourceDirName:"installation",slug:"/installation/ms-store",permalink:"/docs/installation/ms-store",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/ms-store.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Official methods",permalink:"/docs/category/official-methods"},next:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"}},l={},c=[{value:"Updating",id:"updating",level:2},{value:"Read next",id:"read-next",level:2}];function d(t){const e={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"install-from-the-microsoft-store",children:"Install from the Microsoft Store"}),"\n",(0,n.jsxs)(e.p,{children:["You can install Komga from the ",(0,n.jsx)(e.a,{href:"https://www.microsoft.com/store/apps/9N924KC4S4HG",children:"Microsoft Store"}),"."]}),"\n",(0,n.jsx)(e.h2,{id:"updating",children:"Updating"}),"\n",(0,n.jsx)(e.p,{children:"The application will automatically update itself when a new version is available from the Microsoft Store."}),"\n",(0,n.jsx)(e.p,{children:"Note that it takes up to a day or two for new releases to show in the Microsoft Store, as Microsoft needs to validate every new version."}),"\n",(0,n.jsx)(e.h2,{id:"read-next",children:"Read next"}),"\n",(0,n.jsxs)(e.p,{children:["Check the ",(0,n.jsx)(e.a,{href:"/docs/guides/desktop",children:"Desktop Application"})," page."]})]})}function p(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},1670:(t,e,o)=>{o.d(e,{Z:()=>r,a:()=>i});var n=o(7378);const s={},a=n.createContext(s);function i(t){const e=n.useContext(a);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),n.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/b94207ad.a23cfe3a.js b/assets/js/b94207ad.a23cfe3a.js new file mode 100644 index 00000000..a85ba50c --- /dev/null +++ b/assets/js/b94207ad.a23cfe3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1982],{8825:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=o(2540),s=o(3023);const i={},a="Install from the Microsoft Store",r={id:"installation/ms-store",title:"Install from the Microsoft Store",description:"You can install Komga from the Microsoft Store.",source:"@site/docs/installation/ms-store.md",sourceDirName:"installation",slug:"/installation/ms-store",permalink:"/docs/installation/ms-store",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/installation/ms-store.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Official methods",permalink:"/docs/category/official-methods"},next:{title:"Install the Desktop application",permalink:"/docs/installation/desktop"}},l={},c=[{value:"Updating",id:"updating",level:2},{value:"Read next",id:"read-next",level:2}];function d(t){const e={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.R)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"install-from-the-microsoft-store",children:"Install from the Microsoft Store"}),"\n",(0,n.jsxs)(e.p,{children:["You can install Komga from the ",(0,n.jsx)(e.a,{href:"https://www.microsoft.com/store/apps/9N924KC4S4HG",children:"Microsoft Store"}),"."]}),"\n",(0,n.jsx)(e.h2,{id:"updating",children:"Updating"}),"\n",(0,n.jsx)(e.p,{children:"The application will automatically update itself when a new version is available from the Microsoft Store."}),"\n",(0,n.jsx)(e.p,{children:"Note that it takes up to a day or two for new releases to show in the Microsoft Store, as Microsoft needs to validate every new version."}),"\n",(0,n.jsx)(e.h2,{id:"read-next",children:"Read next"}),"\n",(0,n.jsxs)(e.p,{children:["Check the ",(0,n.jsx)(e.a,{href:"/docs/guides/desktop",children:"Desktop Application"})," page."]})]})}function p(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},3023:(t,e,o)=>{o.d(e,{R:()=>a,x:()=>r});var n=o(3696);const s={},i=n.createContext(s);function a(t){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:a(t.components),n.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/b94d24b4.4cdfada3.js b/assets/js/b94d24b4.4cdfada3.js deleted file mode 100644 index e857f761..00000000 --- a/assets/js/b94d24b4.4cdfada3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6826],{4852:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var s=t(4246),o=t(1670);const i={},a="Announcements",c={id:"guides/announcements",title:"Announcements",description:"Announcements from the Komga website will be shown inside the application.",source:"@site/docs/guides/announcements.md",sourceDirName:"guides",slug:"/guides/announcements",permalink:"/docs/guides/announcements",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/announcements.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Theme",permalink:"/docs/guides/theme"},next:{title:"Command Line Interface",permalink:"/docs/guides/cli"}},r={},d=[];function u(e){const n={a:"a",em:"em",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"announcements",children:"Announcements"}),"\n",(0,s.jsxs)(n.p,{children:["Announcements from the ",(0,s.jsx)(n.a,{href:"/blog",children:"Komga website"})," will be shown inside the application."]}),"\n",(0,s.jsxs)(n.p,{children:["An orange dot will indicate that some announcements are unread. From the ",(0,s.jsx)(n.em,{children:"Announcements"})," view, a user can mark announcements as read, which will clear the orange dot indicator."]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/announcements/announcements.png"})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},1670:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var s=t(7378);const o={},i=s.createContext(o);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b94d24b4.66c1dfb6.js b/assets/js/b94d24b4.66c1dfb6.js new file mode 100644 index 00000000..3d64c9ab --- /dev/null +++ b/assets/js/b94d24b4.66c1dfb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4940],{3582:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var s=t(2540),o=t(3023);const i={},c="Announcements",a={id:"guides/announcements",title:"Announcements",description:"Announcements from the Komga website will be shown inside the application.",source:"@site/docs/guides/announcements.md",sourceDirName:"guides",slug:"/guides/announcements",permalink:"/docs/guides/announcements",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/announcements.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Theme",permalink:"/docs/guides/theme"},next:{title:"Command Line Interface",permalink:"/docs/guides/cli"}},r={},d=[];function u(e){const n={a:"a",em:"em",h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"announcements",children:"Announcements"}),"\n",(0,s.jsxs)(n.p,{children:["Announcements from the ",(0,s.jsx)(n.a,{href:"/blog",children:"Komga website"})," will be shown inside the application."]}),"\n",(0,s.jsxs)(n.p,{children:["An orange dot will indicate that some announcements are unread. From the ",(0,s.jsx)(n.em,{children:"Announcements"})," view, a user can mark announcements as read, which will clear the orange dot indicator."]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/announcements/announcements.png"})]})}function m(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},3023:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>a});var s=t(3696);const o={},i=s.createContext(o);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9a7991f.fa1c25d7.js b/assets/js/b9a7991f.8ad2ce08.js similarity index 73% rename from assets/js/b9a7991f.fa1c25d7.js rename to assets/js/b9a7991f.8ad2ce08.js index 667c4529..29cfcda5 100644 --- a/assets/js/b9a7991f.fa1c25d7.js +++ b/assets/js/b9a7991f.8ad2ce08.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3817],{2954:e=>{e.exports=JSON.parse('{"label":"breaking change","permalink":"/blog/tags/breaking-change","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1347],{3867:e=>{e.exports=JSON.parse('{"label":"breaking change","permalink":"/blog/tags/breaking-change","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/c2d7cd96.0b68be9a.js b/assets/js/c2d7cd96.0b68be9a.js deleted file mode 100644 index e4571761..00000000 --- a/assets/js/c2d7cd96.0b68be9a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[7972],{6139:(e,l,s)=>{s.r(l),s.d(l,{assets:()=>o,contentTitle:()=>d,default:()=>t,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var i=s(4246),n=s(1670);const r={},d="Full Text Search",c={id:"guides/search",title:"Full Text Search",description:"Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.",source:"@site/docs/guides/search.md",sourceDirName:"guides",slug:"/guides/search",permalink:"/docs/guides/search",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/search.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read lists",permalink:"/docs/guides/readlists"},next:{title:"Import Books",permalink:"/docs/guides/import-books"}},o={},h=[{value:"Series additional fields",id:"series-additional-fields",level:3},{value:"Book additional fields",id:"book-additional-fields",level:3}];function a(e){const l={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l.h1,{id:"full-text-search",children:"Full Text Search"}),"\n",(0,i.jsxs)(l.p,{children:["Komga leverages ",(0,i.jsx)(l.a,{href:"https://en.wikipedia.org/wiki/Full-text_search",children:"Full Text Search"})," (FTS hereafter) to provide relevant results from your libraries."]}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsx)(l.li,{children:"FTS will order results by relevance"}),"\n",(0,i.jsx)(l.li,{children:"FTS is case-insensitive"}),"\n",(0,i.jsx)(l.li,{children:"When searching with CJK characters (Chinese, Japanese, Korean), a minimum of 2 characters is required."}),"\n",(0,i.jsxs)(l.li,{children:["The order of words is not important: ",(0,i.jsx)(l.code,{children:"batman robin"})," will match ",(0,i.jsx)(l.code,{children:"Robin & Batman"})]}),"\n",(0,i.jsxs)(l.li,{children:["To search by words in order, enclose your search in ",(0,i.jsx)(l.code,{children:'"'}),": ",(0,i.jsx)(l.code,{children:'"white knight"'})," will not match ",(0,i.jsx)(l.code,{children:"knight white"})," nor ",(0,i.jsx)(l.code,{children:"white and knight"})]}),"\n",(0,i.jsx)(l.li,{children:"By default, the search will match the item title. For Books, the ISBN will also be matched by default."}),"\n",(0,i.jsxs)(l.li,{children:["You can use the ",(0,i.jsx)(l.code,{children:"AND"}),", ",(0,i.jsx)(l.code,{children:"OR"})," and ",(0,i.jsx)(l.code,{children:"NOT"})," operators (UPPERCASE) to build complex queries:","\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"batman NOT publisher:dc"})," will match all ",(0,i.jsx)(l.code,{children:"Batman"})," series not published by ",(0,i.jsx)(l.em,{children:"DC Comics"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"batman OR robin"})," will match ",(0,i.jsx)(l.code,{children:"Batman"})," or ",(0,i.jsx)(l.code,{children:"Robin"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"batman AND (robin OR superman)"})," will match ",(0,i.jsx)(l.code,{children:"Superman & Batman"})," and ",(0,i.jsx)(l.code,{children:"Batman & Robin"})]}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"writer:remender penciller:murphy"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:["You can perform range queries using the ",(0,i.jsx)(l.code,{children:"[a TO b]"})," syntax. Example: ",(0,i.jsx)(l.code,{children:"release_date:[1990 TO 2000]"}),". Note that the matching is lexicographic, not numerical. You can also use wildcards: ",(0,i.jsx)(l.code,{children:"release_date:[2010 TO *]"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(l.p,{children:["Some extra fields are available for search using the ",(0,i.jsx)(l.code,{children:"field:search"})," syntax, see after."]}),"\n",(0,i.jsx)(l.h3,{id:"series-additional-fields",children:"Series additional fields"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"publisher"}),". Example: ",(0,i.jsx)(l.code,{children:"publisher:vertigo"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"status"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["Possible values: ",(0,i.jsx)(l.code,{children:"ongoing"}),", ",(0,i.jsx)(l.code,{children:"ended"}),", ",(0,i.jsx)(l.code,{children:"hiatus"}),", ",(0,i.jsx)(l.code,{children:"abandoned"})]}),"\n",(0,i.jsxs)(l.li,{children:["Example: ",(0,i.jsx)(l.code,{children:"status:hiatus"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"reading_direction"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["Possible values: ",(0,i.jsx)(l.code,{children:"left_to_right"}),", ",(0,i.jsx)(l.code,{children:"right_to_left"}),", ",(0,i.jsx)(l.code,{children:"vertical"}),", ",(0,i.jsx)(l.code,{children:"webtoon"})]}),"\n",(0,i.jsxs)(l.li,{children:["Example: ",(0,i.jsx)(l.code,{children:"reading_direction:right_to_left"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"age_rating"}),". Example: ",(0,i.jsx)(l.code,{children:"age_rating:12"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"language"}),". Example: ",(0,i.jsx)(l.code,{children:"language:fr"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"tag"})," will search any tag, whether it is set at Series or Book level. Example: ",(0,i.jsx)(l.code,{children:"tag:action"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"series_tag"})," will search series tags only"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"book_tag"})," will search book tags only"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"genre"}),". Example: ",(0,i.jsx)(l.code,{children:"genre:action"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"author"})," will search authors with any role. Example: ",(0,i.jsx)(l.code,{children:"author:(sean murphy)"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["You can also search by specific role. Example: ",(0,i.jsx)(l.code,{children:"writer:remender"})]}),"\n",(0,i.jsxs)(l.li,{children:["Possible role values are: ",(0,i.jsx)(l.code,{children:"writer"}),", ",(0,i.jsx)(l.code,{children:"penciller"}),", ",(0,i.jsx)(l.code,{children:"letterer"}),", ",(0,i.jsx)(l.code,{children:"inker"}),", ",(0,i.jsx)(l.code,{children:"editor"}),", ",(0,i.jsx)(l.code,{children:"cover"}),", ",(0,i.jsx)(l.code,{children:"colorist"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"book_count"}),", which is the number of books present in that Series. Example: ",(0,i.jsx)(l.code,{children:"book_count:1"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"total_book_count"}),". Example: ",(0,i.jsx)(l.code,{children:"total_book_count:100"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"release_date"})," will search by year released. Example: ",(0,i.jsx)(l.code,{children:"release_date:1999"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"deleted"})," will search soft-deleted series. Example: ",(0,i.jsx)(l.code,{children:"deleted:true"})," or ",(0,i.jsx)(l.code,{children:"deleted:false"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"complete"})," will search complete series, ie series where the ",(0,i.jsx)(l.em,{children:"total book counts"})," (from metadata) is equals to the actual book counts (number of files). Example: ",(0,i.jsx)(l.code,{children:"complete:true"})," or ",(0,i.jsx)(l.code,{children:"complete:false"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"sharing_label"}),". Example: ",(0,i.jsx)(l.code,{children:"sharing_label:kids"})]}),"\n"]}),"\n",(0,i.jsx)(l.h3,{id:"book-additional-fields",children:"Book additional fields"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"tag"})," will search any tag. Example: ",(0,i.jsx)(l.code,{children:'tag:"double pages"'})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"author"})," will search authors with any role. Example: ",(0,i.jsx)(l.code,{children:"author:(sean murphy)"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["You can also search by specific role. Example: ",(0,i.jsx)(l.code,{children:"writer:remender"})]}),"\n",(0,i.jsxs)(l.li,{children:["Possible role values are: ",(0,i.jsx)(l.code,{children:"writer"}),", ",(0,i.jsx)(l.code,{children:"penciller"}),", ",(0,i.jsx)(l.code,{children:"letterer"}),", ",(0,i.jsx)(l.code,{children:"inker"}),", ",(0,i.jsx)(l.code,{children:"editor"}),", ",(0,i.jsx)(l.code,{children:"cover"}),", ",(0,i.jsx)(l.code,{children:"colorist"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"release_date"})," will search by year released. Example: ",(0,i.jsx)(l.code,{children:"release_date:1999"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"status"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["Possible values: ",(0,i.jsx)(l.code,{children:"ready"}),", ",(0,i.jsx)(l.code,{children:"unknown"}),", ",(0,i.jsx)(l.code,{children:"error"}),", ",(0,i.jsx)(l.code,{children:"unsupported"}),", ",(0,i.jsx)(l.code,{children:"outdated"})]}),"\n",(0,i.jsxs)(l.li,{children:["Example: ",(0,i.jsx)(l.code,{children:"status:(error OR unsupported)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"deleted"})," will search soft-deleted books. Example: ",(0,i.jsx)(l.code,{children:"deleted:true"})," or ",(0,i.jsx)(l.code,{children:"deleted:false"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"oneshot"})," will search for One-Shots only. Example: ",(0,i.jsx)(l.code,{children:"oneshot:true"})," or ",(0,i.jsx)(l.code,{children:"oneshot:false"})]}),"\n"]}),"\n",(0,i.jsx)(l.p,{children:"Some additional Series fields will be available if the book is a One-Shot:"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"publisher"})}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"status"}),", which should always be ",(0,i.jsx)(l.code,{children:"ended"})]}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"reading_direction"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"age_rating"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"language"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"genre"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"sharing_label"})}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"complete"}),", which will always be ",(0,i.jsx)(l.code,{children:"true"})]}),"\n"]})]})}function t(e={}){const{wrapper:l}={...(0,n.a)(),...e.components};return l?(0,i.jsx)(l,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1670:(e,l,s)=>{s.d(l,{Z:()=>c,a:()=>d});var i=s(7378);const n={},r=i.createContext(n);function d(e){const l=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(l):{...l,...e}}),[l,e])}function c(e){let l;return l=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:l},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c2d7cd96.dcf1bbce.js b/assets/js/c2d7cd96.dcf1bbce.js new file mode 100644 index 00000000..e358be0f --- /dev/null +++ b/assets/js/c2d7cd96.dcf1bbce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9091],{5240:(e,l,s)=>{s.r(l),s.d(l,{assets:()=>o,contentTitle:()=>d,default:()=>t,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var i=s(2540),n=s(3023);const r={},d="Full Text Search",c={id:"guides/search",title:"Full Text Search",description:"Komga leverages Full Text Search (FTS hereafter) to provide relevant results from your libraries.",source:"@site/docs/guides/search.md",sourceDirName:"guides",slug:"/guides/search",permalink:"/docs/guides/search",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/search.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read lists",permalink:"/docs/guides/readlists"},next:{title:"Import Books",permalink:"/docs/guides/import-books"}},o={},h=[{value:"Series additional fields",id:"series-additional-fields",level:3},{value:"Book additional fields",id:"book-additional-fields",level:3}];function a(e){const l={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l.h1,{id:"full-text-search",children:"Full Text Search"}),"\n",(0,i.jsxs)(l.p,{children:["Komga leverages ",(0,i.jsx)(l.a,{href:"https://en.wikipedia.org/wiki/Full-text_search",children:"Full Text Search"})," (FTS hereafter) to provide relevant results from your libraries."]}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsx)(l.li,{children:"FTS will order results by relevance"}),"\n",(0,i.jsx)(l.li,{children:"FTS is case-insensitive"}),"\n",(0,i.jsx)(l.li,{children:"When searching with CJK characters (Chinese, Japanese, Korean), a minimum of 2 characters is required."}),"\n",(0,i.jsxs)(l.li,{children:["The order of words is not important: ",(0,i.jsx)(l.code,{children:"batman robin"})," will match ",(0,i.jsx)(l.code,{children:"Robin & Batman"})]}),"\n",(0,i.jsxs)(l.li,{children:["To search by words in order, enclose your search in ",(0,i.jsx)(l.code,{children:'"'}),": ",(0,i.jsx)(l.code,{children:'"white knight"'})," will not match ",(0,i.jsx)(l.code,{children:"knight white"})," nor ",(0,i.jsx)(l.code,{children:"white and knight"})]}),"\n",(0,i.jsx)(l.li,{children:"By default, the search will match the item title. For Books, the ISBN will also be matched by default."}),"\n",(0,i.jsxs)(l.li,{children:["You can use the ",(0,i.jsx)(l.code,{children:"AND"}),", ",(0,i.jsx)(l.code,{children:"OR"})," and ",(0,i.jsx)(l.code,{children:"NOT"})," operators (UPPERCASE) to build complex queries:","\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"batman NOT publisher:dc"})," will match all ",(0,i.jsx)(l.code,{children:"Batman"})," series not published by ",(0,i.jsx)(l.em,{children:"DC Comics"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"batman OR robin"})," will match ",(0,i.jsx)(l.code,{children:"Batman"})," or ",(0,i.jsx)(l.code,{children:"Robin"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"batman AND (robin OR superman)"})," will match ",(0,i.jsx)(l.code,{children:"Superman & Batman"})," and ",(0,i.jsx)(l.code,{children:"Batman & Robin"})]}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"writer:remender penciller:murphy"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:["You can perform range queries using the ",(0,i.jsx)(l.code,{children:"[a TO b]"})," syntax. Example: ",(0,i.jsx)(l.code,{children:"release_date:[1990 TO 2000]"}),". Note that the matching is lexicographic, not numerical. You can also use wildcards: ",(0,i.jsx)(l.code,{children:"release_date:[2010 TO *]"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(l.p,{children:["Some extra fields are available for search using the ",(0,i.jsx)(l.code,{children:"field:search"})," syntax, see after."]}),"\n",(0,i.jsx)(l.h3,{id:"series-additional-fields",children:"Series additional fields"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"publisher"}),". Example: ",(0,i.jsx)(l.code,{children:"publisher:vertigo"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"status"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["Possible values: ",(0,i.jsx)(l.code,{children:"ongoing"}),", ",(0,i.jsx)(l.code,{children:"ended"}),", ",(0,i.jsx)(l.code,{children:"hiatus"}),", ",(0,i.jsx)(l.code,{children:"abandoned"})]}),"\n",(0,i.jsxs)(l.li,{children:["Example: ",(0,i.jsx)(l.code,{children:"status:hiatus"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"reading_direction"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["Possible values: ",(0,i.jsx)(l.code,{children:"left_to_right"}),", ",(0,i.jsx)(l.code,{children:"right_to_left"}),", ",(0,i.jsx)(l.code,{children:"vertical"}),", ",(0,i.jsx)(l.code,{children:"webtoon"})]}),"\n",(0,i.jsxs)(l.li,{children:["Example: ",(0,i.jsx)(l.code,{children:"reading_direction:right_to_left"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"age_rating"}),". Example: ",(0,i.jsx)(l.code,{children:"age_rating:12"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"language"}),". Example: ",(0,i.jsx)(l.code,{children:"language:fr"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"tag"})," will search any tag, whether it is set at Series or Book level. Example: ",(0,i.jsx)(l.code,{children:"tag:action"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"series_tag"})," will search series tags only"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"book_tag"})," will search book tags only"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"genre"}),". Example: ",(0,i.jsx)(l.code,{children:"genre:action"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"author"})," will search authors with any role. Example: ",(0,i.jsx)(l.code,{children:"author:(sean murphy)"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["You can also search by specific role. Example: ",(0,i.jsx)(l.code,{children:"writer:remender"})]}),"\n",(0,i.jsxs)(l.li,{children:["Possible role values are: ",(0,i.jsx)(l.code,{children:"writer"}),", ",(0,i.jsx)(l.code,{children:"penciller"}),", ",(0,i.jsx)(l.code,{children:"letterer"}),", ",(0,i.jsx)(l.code,{children:"inker"}),", ",(0,i.jsx)(l.code,{children:"editor"}),", ",(0,i.jsx)(l.code,{children:"cover"}),", ",(0,i.jsx)(l.code,{children:"colorist"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"book_count"}),", which is the number of books present in that Series. Example: ",(0,i.jsx)(l.code,{children:"book_count:1"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"total_book_count"}),". Example: ",(0,i.jsx)(l.code,{children:"total_book_count:100"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"release_date"})," will search by year released. Example: ",(0,i.jsx)(l.code,{children:"release_date:1999"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"deleted"})," will search soft-deleted series. Example: ",(0,i.jsx)(l.code,{children:"deleted:true"})," or ",(0,i.jsx)(l.code,{children:"deleted:false"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"complete"})," will search complete series, ie series where the ",(0,i.jsx)(l.em,{children:"total book counts"})," (from metadata) is equals to the actual book counts (number of files). Example: ",(0,i.jsx)(l.code,{children:"complete:true"})," or ",(0,i.jsx)(l.code,{children:"complete:false"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"sharing_label"}),". Example: ",(0,i.jsx)(l.code,{children:"sharing_label:kids"})]}),"\n"]}),"\n",(0,i.jsx)(l.h3,{id:"book-additional-fields",children:"Book additional fields"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"tag"})," will search any tag. Example: ",(0,i.jsx)(l.code,{children:'tag:"double pages"'})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"author"})," will search authors with any role. Example: ",(0,i.jsx)(l.code,{children:"author:(sean murphy)"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["You can also search by specific role. Example: ",(0,i.jsx)(l.code,{children:"writer:remender"})]}),"\n",(0,i.jsxs)(l.li,{children:["Possible role values are: ",(0,i.jsx)(l.code,{children:"writer"}),", ",(0,i.jsx)(l.code,{children:"penciller"}),", ",(0,i.jsx)(l.code,{children:"letterer"}),", ",(0,i.jsx)(l.code,{children:"inker"}),", ",(0,i.jsx)(l.code,{children:"editor"}),", ",(0,i.jsx)(l.code,{children:"cover"}),", ",(0,i.jsx)(l.code,{children:"colorist"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"release_date"})," will search by year released. Example: ",(0,i.jsx)(l.code,{children:"release_date:1999"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"status"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsxs)(l.li,{children:["Possible values: ",(0,i.jsx)(l.code,{children:"ready"}),", ",(0,i.jsx)(l.code,{children:"unknown"}),", ",(0,i.jsx)(l.code,{children:"error"}),", ",(0,i.jsx)(l.code,{children:"unsupported"}),", ",(0,i.jsx)(l.code,{children:"outdated"})]}),"\n",(0,i.jsxs)(l.li,{children:["Example: ",(0,i.jsx)(l.code,{children:"status:(error OR unsupported)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"deleted"})," will search soft-deleted books. Example: ",(0,i.jsx)(l.code,{children:"deleted:true"})," or ",(0,i.jsx)(l.code,{children:"deleted:false"})]}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"oneshot"})," will search for One-Shots only. Example: ",(0,i.jsx)(l.code,{children:"oneshot:true"})," or ",(0,i.jsx)(l.code,{children:"oneshot:false"})]}),"\n"]}),"\n",(0,i.jsx)(l.p,{children:"Some additional Series fields will be available if the book is a One-Shot:"}),"\n",(0,i.jsxs)(l.ul,{children:["\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"publisher"})}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"status"}),", which should always be ",(0,i.jsx)(l.code,{children:"ended"})]}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"reading_direction"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"age_rating"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"language"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"genre"})}),"\n",(0,i.jsx)(l.li,{children:(0,i.jsx)(l.code,{children:"sharing_label"})}),"\n",(0,i.jsxs)(l.li,{children:[(0,i.jsx)(l.code,{children:"complete"}),", which will always be ",(0,i.jsx)(l.code,{children:"true"})]}),"\n"]})]})}function t(e={}){const{wrapper:l}={...(0,n.R)(),...e.components};return l?(0,i.jsx)(l,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},3023:(e,l,s)=>{s.d(l,{R:()=>d,x:()=>c});var i=s(3696);const n={},r=i.createContext(n);function d(e){const l=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(l):{...l,...e}}),[l,e])}function c(e){let l;return l=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(r.Provider,{value:l},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c8d8dd9d.0cdef4fa.js b/assets/js/c8d8dd9d.0cdef4fa.js new file mode 100644 index 00000000..3231cb1c --- /dev/null +++ b/assets/js/c8d8dd9d.0cdef4fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[685],{6240:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var s=t(2540),n=t(3023);const r={slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-drop2",source:"@site/blog/2023-12-15-ebooks-drop2.md",title:"eBook drop 2",description:"Version 1.9.0 contains the second feature drop for Ebooks support.",date:"2023-12-15T00:00:00.000Z",formattedDate:"December 15, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:.605,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,nextItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},p=[];function d(e){const o={a:"a",p:"p",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"1.9.0"})," contains the second feature drop for Ebooks support."]}),"\n",(0,s.jsx)(o.p,{children:"It brings nice additions to the initial release, most notably the read progress will be kept when reading and restored, same as with other books."}),"\n",(0,s.jsx)(o.p,{children:"The analysis process of EPUB files was also revamped, and some EPUB files that were not analyzed before should be working fine now."}),"\n",(0,s.jsx)(o.p,{children:"While the first release forced all the EPUB files through the Epub Reader, this release brings back compatibility with the Divina Reader for pre-paginated EPUB files containing only images. This also restores support for the Pages API, and thus the compatibility with Tachiyomi, or any OPDS-PSE client."}),"\n",(0,s.jsxs)(o.p,{children:["Head over to the ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"Release Notes"})," for more details on all the new features and fixes."]})]})}function c(e={}){const{wrapper:o}={...(0,n.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},3023:(e,o,t)=>{t.d(o,{R:()=>a,x:()=>i});var s=t(3696);const n={},r=s.createContext(n);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c8d8dd9d.86b815b4.js b/assets/js/c8d8dd9d.86b815b4.js deleted file mode 100644 index dd53f8bb..00000000 --- a/assets/js/c8d8dd9d.86b815b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[15],{6800:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var s=t(4246),n=t(1670);const r={slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},a=void 0,i={permalink:"/blog/ebook-drop2",source:"@site/blog/2023-12-15-ebooks-drop2.md",title:"eBook drop 2",description:"Version 1.9.0 contains the second feature drop for Ebooks support.",date:"2023-12-15T00:00:00.000Z",formattedDate:"December 15, 2023",tags:[{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:.605,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"ebook-drop2",title:"eBook drop 2",authors:"gotson",tags:["upgrade","komga"]},unlisted:!1,nextItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},p=[];function d(e){const o={a:"a",p:"p",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(o.p,{children:["Version ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"1.9.0"})," contains the second feature drop for Ebooks support."]}),"\n",(0,s.jsx)(o.p,{children:"It brings nice additions to the initial release, most notably the read progress will be kept when reading and restored, same as with other books."}),"\n",(0,s.jsx)(o.p,{children:"The analysis process of EPUB files was also revamped, and some EPUB files that were not analyzed before should be working fine now."}),"\n",(0,s.jsx)(o.p,{children:"While the first release forced all the EPUB files through the Epub Reader, this release brings back compatibility with the Divina Reader for pre-paginated EPUB files containing only images. This also restores support for the Pages API, and thus the compatibility with Tachiyomi, or any OPDS-PSE client."}),"\n",(0,s.jsxs)(o.p,{children:["Head over to the ",(0,s.jsx)(o.a,{href:"https://github.com/gotson/komga/releases/tag/1.9.0",children:"Release Notes"})," for more details on all the new features and fixes."]})]})}function c(e={}){const{wrapper:o}={...(0,n.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1670:(e,o,t)=>{t.d(o,{Z:()=>i,a:()=>a});var s=t(7378);const n={},r=s.createContext(n);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca683365.0dc23a23.js b/assets/js/ca683365.0dc23a23.js new file mode 100644 index 00000000..a767f4b2 --- /dev/null +++ b/assets/js/ca683365.0dc23a23.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3372],{2851:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var s=n(2540),i=n(3023);const o={},r="Theme",c={id:"guides/theme",title:"Theme",description:"You can customize the application theme from the sidebar.",source:"@site/docs/guides/theme.md",sourceDirName:"guides",slug:"/guides/theme",permalink:"/docs/guides/theme",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/theme.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"},next:{title:"Announcements",permalink:"/docs/guides/announcements"}},a={},d=[];function m(e){const t={h1:"h1",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"theme",children:"Theme"}),"\n",(0,s.jsx)(t.p,{children:"You can customize the application theme from the sidebar."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/theme/theme.png",style:{maxHeight:"50px"}}),"\n",(0,s.jsx)(t.p,{children:"Three themes are available:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Light"}),"\n",(0,s.jsx)(t.li,{children:"Dark"}),"\n",(0,s.jsx)(t.li,{children:"System: this will follow the theme of your OS."}),"\n"]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/theme/theme-list.png",style:{maxHeight:"150px"}})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},3023:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var s=n(3696);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca683365.4b7d17d4.js b/assets/js/ca683365.4b7d17d4.js deleted file mode 100644 index 39319422..00000000 --- a/assets/js/ca683365.4b7d17d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3438],{2945:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(4246),i=n(1670);const o={},r="Theme",a={id:"guides/theme",title:"Theme",description:"You can customize the application theme from the sidebar.",source:"@site/docs/guides/theme.md",sourceDirName:"guides",slug:"/guides/theme",permalink:"/docs/guides/theme",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/theme.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"},next:{title:"Announcements",permalink:"/docs/guides/announcements"}},c={},d=[];function m(e){const t={h1:"h1",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"theme",children:"Theme"}),"\n",(0,s.jsx)(t.p,{children:"You can customize the application theme from the sidebar."}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/theme/theme.png",style:{maxHeight:"50px"}}),"\n",(0,s.jsx)(t.p,{children:"Three themes are available:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Light"}),"\n",(0,s.jsx)(t.li,{children:"Dark"}),"\n",(0,s.jsx)(t.li,{children:"System: this will follow the theme of your OS."}),"\n"]}),"\n",(0,s.jsx)("img",{src:"/assets/media/guides/theme/theme-list.png",style:{maxHeight:"150px"}})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},1670:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>r});var s=n(7378);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.5609de16.js b/assets/js/ccc49370.5609de16.js new file mode 100644 index 00000000..0b89a688 --- /dev/null +++ b/assets/js/ccc49370.5609de16.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3249],{8119:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(3696);var i=t(1750),a=t(5605),s=t(3237),o=t(7069),l=t(4257),r=t(5512),c=t(6590),d=t(5780),u=t(2540);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.T)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.A,{...t,subLabel:(0,u.jsx)(c.A,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),n&&(0,u.jsx)(d.A,{...n,subLabel:(0,u.jsx)(c.A,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:n}=(0,o.e)(),{title:t,description:i,date:s,tags:l,authors:r,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.be,{title:t,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),r.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:r.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var h=t(3077),f=t(6082);function v(e){let{sidebar:n,children:t}=e;const{metadata:i,toc:a}=(0,o.e)(),{nextItem:s,prevItem:c,frontMatter:d,unlisted:g}=i,{hide_table_of_contents:v,toc_min_heading_level:p,toc_max_heading_level:x}=d;return(0,u.jsxs)(l.A,{sidebar:n,toc:!v&&a.length>0?(0,u.jsx)(h.A,{toc:a,minHeadingLevel:p,maxHeadingLevel:x}):void 0,children:[g&&(0,u.jsx)(f.A,{}),(0,u.jsx)(r.A,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function p(e){const n=e.content;return(0,u.jsx)(o.i,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.e3,{className:(0,i.A)(s.G.wrapper.blogPages,s.G.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},3077:(e,n,t)=>{t.d(n,{A:()=>c});t(3696);var i=t(1750),a=t(5397);const s={tableOfContents:"tableOfContents_XG6w",docItemContainer:"docItemContainer_Tr6w"};var o=t(2540);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,i.A)(s.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(a.A,{...t,linkClassName:l,linkActiveClassName:r})})}},5397:(e,n,t)=>{t.d(n,{A:()=>f});var i=t(3696),a=t(7412);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const i=t.slice(2,e.level);e.parentIndex=Math.max(...i),t[e.level]=n}));const i=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):i.push(a)})),i}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:i});return function(e){return e.level>=t&&e.level<=i}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function r(e,n){let{anchorTopOffset:t}=n;const i=e.find((e=>l(e).top>=t));if(i){return function(e){return e.top>0&&e.bottom {e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const i=[];for(let a=n;a<=t;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:s,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(3587),m=t(2540);function g(e){let{toc:n,className:t,linkClassName:i,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.A,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:t,linkClassName:i})]},e.id)))}):null}const h=i.memo(g);function f(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const f=(0,a.p)(),v=c??f.tableOfContents.minHeadingLevel,p=u??f.tableOfContents.maxHeadingLevel,x=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>o({toc:s(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:v,maxHeadingLevel:p});return d((0,i.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:v,maxHeadingLevel:p}}),[l,r,v,p])),(0,m.jsx)(h,{toc:x,className:t,linkClassName:l,...g})}},6082:(e,n,t)=>{t.d(n,{A:()=>g});t(3696);var i=t(1750),a=t(6590),s=t(7854),o=t(2540);function l(){return(0,o.jsx)(a.A,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(a.A,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(s.A,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(3237),u=t(3603);function m(e){let{className:n}=e;return(0,o.jsx)(u.A,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,i.A)(n,d.G.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function g(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.aaddfe2c.js b/assets/js/ccc49370.aaddfe2c.js deleted file mode 100644 index 92d2b549..00000000 --- a/assets/js/ccc49370.aaddfe2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6103],{3227:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(7378);var i=t(624),a=t(8831),s=t(5484),o=t(412),l=t(5988),r=t(5532),c=t(9213),d=t(4582),u=t(4246);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.Z,{...t,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),n&&(0,u.jsx)(d.Z,{...n,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:n}=(0,o.C)(),{title:t,description:i,date:s,tags:l,authors:r,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.d,{title:t,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),r.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:r.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var h=t(7061),f=t(3873);function v(e){let{sidebar:n,children:t}=e;const{metadata:i,toc:a}=(0,o.C)(),{nextItem:s,prevItem:c,frontMatter:d,unlisted:g}=i,{hide_table_of_contents:v,toc_min_heading_level:p,toc_max_heading_level:x}=d;return(0,u.jsxs)(l.Z,{sidebar:n,toc:!v&&a.length>0?(0,u.jsx)(h.Z,{toc:a,minHeadingLevel:p,maxHeadingLevel:x}):void 0,children:[g&&(0,u.jsx)(f.Z,{}),(0,u.jsx)(r.Z,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function p(e){const n=e.content;return(0,u.jsx)(o.n,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.FG,{className:(0,i.Z)(s.k.wrapper.blogPages,s.k.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},7061:(e,n,t)=>{t.d(n,{Z:()=>c});t(7378);var i=t(624),a=t(6033);const s={tableOfContents:"tableOfContents_XG6w",docItemContainer:"docItemContainer_Tr6w"};var o=t(4246);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,i.Z)(s.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(a.Z,{...t,linkClassName:l,linkActiveClassName:r})})}},6033:(e,n,t)=>{t.d(n,{Z:()=>f});var i=t(7378),a=t(2347);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const i=t.slice(2,e.level);e.parentIndex=Math.max(...i),t[e.level]=n}));const i=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):i.push(a)})),i}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:i});return function(e){return e.level>=t&&e.level<=i}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function r(e,n){let{anchorTopOffset:t}=n;const i=e.find((e=>l(e).top>=t));if(i){return function(e){return e.top>0&&e.bottom {e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const i=[];for(let a=n;a<=t;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:s,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(6641),m=t(4246);function g(e){let{toc:n,className:t,linkClassName:i,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:t,linkClassName:i})]},e.id)))}):null}const h=i.memo(g);function f(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const f=(0,a.L)(),v=c??f.tableOfContents.minHeadingLevel,p=u??f.tableOfContents.maxHeadingLevel,x=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>o({toc:s(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:v,maxHeadingLevel:p});return d((0,i.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:v,maxHeadingLevel:p}}),[l,r,v,p])),(0,m.jsx)(h,{toc:x,className:t,linkClassName:l,...g})}},3873:(e,n,t)=>{t.d(n,{Z:()=>g});t(7378);var i=t(624),a=t(9213),s=t(7092),o=t(4246);function l(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(s.Z,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(5484),u=t(458);function m(e){let{className:n}=e;return(0,o.jsx)(u.Z,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function g(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/cfba0797.5f5e60da.js b/assets/js/cfba0797.18f559dd.js similarity index 83% rename from assets/js/cfba0797.5f5e60da.js rename to assets/js/cfba0797.18f559dd.js index 4465e95d..3295430a 100644 --- a/assets/js/cfba0797.5f5e60da.js +++ b/assets/js/cfba0797.18f559dd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4578],{5202:e=>{e.exports=JSON.parse('{"title":"Guides","slug":"/category/guides","permalink":"/docs/category/guides","navigation":{"previous":{"title":"Google Drive and rclone","permalink":"/docs/installation/gdrive"},"next":{"title":"Accessing the web interface","permalink":"/docs/guides/webui"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[2520],{8847:e=>{e.exports=JSON.parse('{"title":"Guides","slug":"/category/guides","permalink":"/docs/category/guides","navigation":{"previous":{"title":"Google Drive and rclone","permalink":"/docs/installation/gdrive"},"next":{"title":"Accessing the web interface","permalink":"/docs/guides/webui"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d135d818.7c0492e3.js b/assets/js/d135d818.7c0492e3.js new file mode 100644 index 00000000..1445a82f --- /dev/null +++ b/assets/js/d135d818.7c0492e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4569],{7446:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>r});var a=n(2540),s=n(3023);const i={},o="Duplicate Pages",l={id:"guides/duplicate-pages",title:"Duplicate Pages",description:"Komga can detect duplicate pages among your books, and delete them manually or automatically.",source:"@site/docs/guides/duplicate-pages.md",sourceDirName:"guides",slug:"/guides/duplicate-pages",permalink:"/docs/guides/duplicate-pages",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-pages.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"},next:{title:"Readers",permalink:"/docs/category/readers"}},c={},r=[{value:"Browsing New Duplicates",id:"browsing-new-duplicates",level:2},{value:"Browsing Known Duplicates",id:"browsing-known-duplicates",level:2}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"duplicate-pages",children:"Duplicate Pages"}),"\n",(0,a.jsx)(t.p,{children:"Komga can detect duplicate pages among your books, and delete them manually or automatically."}),"\n",(0,a.jsxs)(t.p,{children:["You need to enable ",(0,a.jsx)(t.a,{href:"/docs/guides/libraries#compute-hash-for-pages",children:"page hashing"})," for your libraries."]}),"\n",(0,a.jsxs)(t.p,{children:["You can manage duplicate pages from ",(0,a.jsx)(t.em,{children:"Server Settings > Duplicate Pages"}),"."]}),"\n",(0,a.jsxs)(t.admonition,{type:"warning",children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.strong,{children:"Duplicate page removal will modify your files."})}),(0,a.jsx)(t.p,{children:"It is recommended to perform a backup, and to try using manual deletion before using automatic deletion."})]}),"\n",(0,a.jsx)(t.h2,{id:"browsing-new-duplicates",children:"Browsing New Duplicates"}),"\n",(0,a.jsxs)(t.p,{children:["This screen will show all the newly detected duplicate pages. You can sort them by ",(0,a.jsx)(t.em,{children:"Count"})," of duplicates, ",(0,a.jsx)(t.em,{children:"Size"})," of the image, or the ",(0,a.jsx)(t.em,{children:"Total Size"})," you could save by deleting it."]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-new.png",style:{maxHeight:" 400px"},alt:"Browse New Duplicates"}),"\n",(0,a.jsx)(t.p,{children:"For each duplicate page, you can:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.em,{children:"Ignore"}),": It won't show anymore on this page, and Komga won't do anything about it."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.em,{children:"Manual Delete"}),": You will be able to trigger manual deletion from the ",(0,a.jsx)(t.em,{children:"Known"})," view."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.em,{children:"Auto Delete"}),": Komga will automatically remove those pages after a library scan."]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["You can also see the detailed list of matches by clicking on the ",(0,a.jsx)(t.em,{children:"Matches"})," button. It will show all the books containing the duplicate page, as well as the image for each, so you can perform a visual check. You can also delete matches individually."]}),"\n",(0,a.jsx)(t.h2,{id:"browsing-known-duplicates",children:"Browsing Known Duplicates"}),"\n",(0,a.jsxs)(t.p,{children:["This screen will show all the duplicate pages for which you chose an action. You can sort them by ",(0,a.jsx)(t.em,{children:"Deletion Count"})," , ",(0,a.jsx)(t.em,{children:"Size"})," of the image, or the ",(0,a.jsx)(t.em,{children:"Space Saved"})," so far."]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-known.png",style:{maxHeight:" 400px"},alt:"Browse Known Duplicates"}),"\n",(0,a.jsxs)(t.p,{children:["For each page, you can change the action. You can ",(0,a.jsx)(t.em,{children:"Ignore"})," a page that was set for deletion, or mark an ignored one for deletion, if you changed your mind."]}),"\n",(0,a.jsxs)(t.p,{children:["For pages set for ",(0,a.jsx)(t.em,{children:"Manual Delete"}),", you can trigger the deletion using the ",(0,a.jsx)(t.em,{children:"Delete Matches"})," button."]})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},3023:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var a=n(3696);const s={},i=a.createContext(s);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d135d818.fe03d2de.js b/assets/js/d135d818.fe03d2de.js deleted file mode 100644 index 735c0370..00000000 --- a/assets/js/d135d818.fe03d2de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4119],{7249:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>r});var a=n(4246),s=n(1670);const i={},o="Duplicate Pages",l={id:"guides/duplicate-pages",title:"Duplicate Pages",description:"Komga can detect duplicate pages among your books, and delete them manually or automatically.",source:"@site/docs/guides/duplicate-pages.md",sourceDirName:"guides",slug:"/guides/duplicate-pages",permalink:"/docs/guides/duplicate-pages",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/duplicate-pages.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Duplicate Files",permalink:"/docs/guides/duplicate-files"},next:{title:"Readers",permalink:"/docs/category/readers"}},c={},r=[{value:"Browsing New Duplicates",id:"browsing-new-duplicates",level:2},{value:"Browsing Known Duplicates",id:"browsing-known-duplicates",level:2}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"duplicate-pages",children:"Duplicate Pages"}),"\n",(0,a.jsx)(t.p,{children:"Komga can detect duplicate pages among your books, and delete them manually or automatically."}),"\n",(0,a.jsxs)(t.p,{children:["You need to enable ",(0,a.jsx)(t.a,{href:"/docs/guides/libraries#compute-hash-for-pages",children:"page hashing"})," for your libraries."]}),"\n",(0,a.jsxs)(t.p,{children:["You can manage duplicate pages from ",(0,a.jsx)(t.em,{children:"Server Settings > Duplicate Pages"}),"."]}),"\n",(0,a.jsxs)(t.admonition,{type:"warning",children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.strong,{children:"Duplicate page removal will modify your files."})}),(0,a.jsx)(t.p,{children:"It is recommended to perform a backup, and to try using manual deletion before using automatic deletion."})]}),"\n",(0,a.jsx)(t.h2,{id:"browsing-new-duplicates",children:"Browsing New Duplicates"}),"\n",(0,a.jsxs)(t.p,{children:["This screen will show all the newly detected duplicate pages. You can sort them by ",(0,a.jsx)(t.em,{children:"Count"})," of duplicates, ",(0,a.jsx)(t.em,{children:"Size"})," of the image, or the ",(0,a.jsx)(t.em,{children:"Total Size"})," you could save by deleting it."]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-new.png",style:{maxHeight:" 400px"},alt:"Browse New Duplicates"}),"\n",(0,a.jsx)(t.p,{children:"For each duplicate page, you can:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.em,{children:"Ignore"}),": It won't show anymore on this page, and Komga won't do anything about it."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.em,{children:"Manual Delete"}),": You will be able to trigger manual deletion from the ",(0,a.jsx)(t.em,{children:"Known"})," view."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.em,{children:"Auto Delete"}),": Komga will automatically remove those pages after a library scan."]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["You can also see the detailed list of matches by clicking on the ",(0,a.jsx)(t.em,{children:"Matches"})," button. It will show all the books containing the duplicate page, as well as the image for each, so you can perform a visual check. You can also delete matches individually."]}),"\n",(0,a.jsx)(t.h2,{id:"browsing-known-duplicates",children:"Browsing Known Duplicates"}),"\n",(0,a.jsxs)(t.p,{children:["This screen will show all the duplicate pages for which you chose an action. You can sort them by ",(0,a.jsx)(t.em,{children:"Deletion Count"})," , ",(0,a.jsx)(t.em,{children:"Size"})," of the image, or the ",(0,a.jsx)(t.em,{children:"Space Saved"})," so far."]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/duplicate-pages/duplicate-pages-known.png",style:{maxHeight:" 400px"},alt:"Browse Known Duplicates"}),"\n",(0,a.jsxs)(t.p,{children:["For each page, you can change the action. You can ",(0,a.jsx)(t.em,{children:"Ignore"})," a page that was set for deletion, or mark an ignored one for deletion, if you changed your mind."]}),"\n",(0,a.jsxs)(t.p,{children:["For pages set for ",(0,a.jsx)(t.em,{children:"Manual Delete"}),", you can trigger the deletion using the ",(0,a.jsx)(t.em,{children:"Delete Matches"})," button."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1670:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var a=n(7378);const s={},i=a.createContext(s);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d6e0cd3c.7a9e679f.js b/assets/js/d6e0cd3c.7a9e679f.js new file mode 100644 index 00000000..9c088fb7 --- /dev/null +++ b/assets/js/d6e0cd3c.7a9e679f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6225],{1762:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=n(2540),c=n(3023);const i={},r="Accessing the web interface",o={id:"guides/webui",title:"Accessing the web interface",description:"Once Komga is started, you can access the web interface at//:(/baseUrl).",source:"@site/docs/guides/webui.md",sourceDirName:"guides",slug:"/guides/webui",permalink:"/docs/guides/webui",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webui.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Guides",permalink:"/docs/category/guides"},next:{title:"Desktop Application",permalink:"/docs/guides/desktop"}},a={},d=[{value:"Create user account",id:"create-user-account",level:2}];function l(e){const t={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,c.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"accessing-the-web-interface",children:"Accessing the web interface"}),"\n",(0,s.jsxs)(t.p,{children:["Once Komga is started, you can access the web interface at: ",(0,s.jsx)(t.code,{children:"http:// : (/baseUrl)"}),"."]}),"\n",(0,s.jsxs)(t.admonition,{type:"tip",children:[(0,s.jsxs)(t.p,{children:["If you are running Komga locally, ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:" "})})," will be ",(0,s.jsx)(t.code,{children:"localhost"}),"."]}),(0,s.jsxs)(t.p,{children:["The default ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:" "})})," is ",(0,s.jsx)(t.code,{children:"25600"}),"."]})]}),"\n",(0,s.jsx)(t.h2,{id:"create-user-account",children:"Create user account"}),"\n",(0,s.jsxs)(t.p,{children:["You will be asked to create a user account. Choose an ",(0,s.jsx)(t.em,{children:"email"})," and ",(0,s.jsx)(t.em,{children:"password"}),", then click on ",(0,s.jsx)(t.strong,{children:"Create User Account"}),"."]}),"\n",(0,s.jsx)("div",{class:"text--center",children:(0,s.jsx)("img",{src:"/assets/media/installation/create-initial-account.png",style:{maxHeight:"500px"},alt:"Create initial account"})})]})}function u(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},3023:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>o});var s=n(3696);const c={},i=s.createContext(c);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d6e0cd3c.8e8e297b.js b/assets/js/d6e0cd3c.8e8e297b.js deleted file mode 100644 index 479e50a6..00000000 --- a/assets/js/d6e0cd3c.8e8e297b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[278],{4953:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=n(4246),c=n(1670);const i={},r="Accessing the web interface",o={id:"guides/webui",title:"Accessing the web interface",description:"Once Komga is started, you can access the web interface at//:(/baseUrl).",source:"@site/docs/guides/webui.md",sourceDirName:"guides",slug:"/guides/webui",permalink:"/docs/guides/webui",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/webui.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Guides",permalink:"/docs/category/guides"},next:{title:"Desktop Application",permalink:"/docs/guides/desktop"}},a={},d=[{value:"Create user account",id:"create-user-account",level:2}];function l(e){const t={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"accessing-the-web-interface",children:"Accessing the web interface"}),"\n",(0,s.jsxs)(t.p,{children:["Once Komga is started, you can access the web interface at: ",(0,s.jsx)(t.code,{children:"http:// : (/baseUrl)"}),"."]}),"\n",(0,s.jsxs)(t.admonition,{type:"tip",children:[(0,s.jsxs)(t.p,{children:["If you are running Komga locally, ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:" "})})," will be ",(0,s.jsx)(t.code,{children:"localhost"}),"."]}),(0,s.jsxs)(t.p,{children:["The default ",(0,s.jsx)(t.em,{children:(0,s.jsx)(t.code,{children:" "})})," is ",(0,s.jsx)(t.code,{children:"25600"}),"."]})]}),"\n",(0,s.jsx)(t.h2,{id:"create-user-account",children:"Create user account"}),"\n",(0,s.jsxs)(t.p,{children:["You will be asked to create a user account. Choose an ",(0,s.jsx)(t.em,{children:"email"})," and ",(0,s.jsx)(t.em,{children:"password"}),", then click on ",(0,s.jsx)(t.strong,{children:"Create User Account"}),"."]}),"\n",(0,s.jsx)("div",{class:"text--center",children:(0,s.jsx)("img",{src:"/assets/media/installation/create-initial-account.png",style:{maxHeight:"500px"},alt:"Create initial account"})})]})}function u(e={}){const{wrapper:t}={...(0,c.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1670:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>r});var s=n(7378);const c={},i=s.createContext(c);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d86518ca.1c85e960.js b/assets/js/d86518ca.1c85e960.js new file mode 100644 index 00000000..0f7f4c94 --- /dev/null +++ b/assets/js/d86518ca.1c85e960.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[303],{1991:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(2540),t=n(3023);const i={},o="Read with Paperback",a={id:"guides/paperback",title:"Read with Paperback",description:"Komga has an extension for Paperback, a free iOS and iPadOS reader.",source:"@site/docs/guides/paperback.md",sourceDirName:"guides",slug:"/guides/paperback",permalink:"/docs/guides/paperback",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/paperback.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"},next:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"}},d={},c=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Add the source repository",id:"add-the-source-repository",level:3},{value:"Install the source",id:"install-the-source",level:3},{value:"Configure the source",id:"configure-the-source",level:3},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Add the tracker repository",id:"add-the-tracker-repository",level:3},{value:"Install the tracker",id:"install-the-tracker",level:3},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components},{Details:n}=r;return n||function(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"read-with-paperback",children:"Read with Paperback"}),"\n",(0,s.jsxs)(r.p,{children:["Komga has an extension for ",(0,s.jsx)(r.a,{href:"https://paperback.moe/",children:"Paperback"}),", a free iOS and iPadOS reader."]}),"\n",(0,s.jsx)(r.admonition,{type:"warning",children:(0,s.jsx)(r.p,{children:"Paperback requires iOS 13.4+ or iPadOS 13.4+."})}),"\n",(0,s.jsx)(r.h2,{id:"install-and-configure",children:"Install and configure"}),"\n",(0,s.jsx)(r.h3,{id:"add-the-source-repository",children:"Add the source repository"}),"\n",(0,s.jsxs)(r.p,{children:["Support for Komga comes pre-installed with Paperback under the ",(0,s.jsx)(r.code,{children:"Paperback"})," source name. If deleted the extension and repository simply open ",(0,s.jsx)(r.a,{href:"https://paperback-ios.github.io/extensions-main-promises/",children:"the repository page"})," on your device and tap ",(0,s.jsx)(r.strong,{children:"Add to Paperback"}),"."]}),"\n",(0,s.jsx)(r.p,{children:'Once Paperback opens choose "Add as Source Repo" on the popup.'}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Add the source repository manually"}),(0,s.jsx)(r.p,{children:"If you prefer, it is also possible to add the repository manually:"}),(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app, go to ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Sources"})," then press ",(0,s.jsx)(r.strong,{children:"Edit"})," on the top right-hand corner."]}),"\n",(0,s.jsxs)(r.li,{children:["Press the top left-hand corner ",(0,s.jsx)(r.strong,{children:"+"})," button to add a repository."]}),"\n",(0,s.jsxs)(r.li,{children:["Use the base url:","\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{children:"https://paperback-ios.github.io/extensions-main-promises/\n"})}),"\n"]}),"\n"]})]}),"\n",(0,s.jsx)(r.h3,{id:"install-the-source",children:"Install the source"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["In the app ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Sources"})," windows, choose ",(0,s.jsx)(r.code,{children:"Browse Official Repo"}),", or ",(0,s.jsx)(r.code,{children:"Browse ..."})," followed by the repository name you chose previously"]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Install the source ",(0,s.jsx)(r.strong,{children:"Paperback"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"configure-the-source",children:"Configure the source"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Sources"}),", press the ",(0,s.jsx)(r.code,{children:"Paperback"})," source"]}),"\n",(0,s.jsxs)(r.li,{children:["Select ",(0,s.jsx)(r.strong,{children:"Server Settings"})," and set your:","\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"server url"}),"\n",(0,s.jsx)(r.li,{children:"username"}),"\n",(0,s.jsx)(r.li,{children:"password"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["Press ",(0,s.jsx)(r.strong,{children:"Save"})," to exit"]}),"\n"]}),"\n",(0,s.jsx)(r.admonition,{type:"tip",children:(0,s.jsxs)(r.p,{children:["You can test your settings by opening ",(0,s.jsx)(r.strong,{children:"Try Settings"})," below the Server Settings section"]})}),"\n",(0,s.jsx)(r.h2,{id:"track-read-progress",children:"Track read progress"}),"\n",(0,s.jsx)(r.p,{children:"It is possible to sync read chapters from the app to the Komga server using an implicit tracker."}),"\n",(0,s.jsx)(r.h3,{id:"add-the-tracker-repository",children:"Add the tracker repository"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app, go to ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Trackers"})," then press ",(0,s.jsx)(r.strong,{children:"Edit"})," on the top right-hand corner"]}),"\n",(0,s.jsxs)(r.li,{children:["Press the top left-hand corner ",(0,s.jsx)(r.strong,{children:"+"})," button to add a repository."]}),"\n",(0,s.jsxs)(r.li,{children:["Use the base url (",(0,s.jsx)(r.strong,{children:"do not"})," open this url):","\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{children:"https://paperback-ios.github.io/trackers-main/main/\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"install-the-tracker",children:"Install the tracker"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Trackers"})," windows, choose ",(0,s.jsx)(r.code,{children:"Browse ..."})," for the repository you just added"]}),"\n",(0,s.jsxs)(r.li,{children:["Install the tracker ",(0,s.jsx)(r.strong,{children:"Paperback"})]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"When you read or mark as read a chapter in the app, it will now be marked as such on your Komga server."}),"\n",(0,s.jsx)(r.h2,{id:"changelog-and-compatibility",children:"Changelog and Compatibility"}),"\n",(0,s.jsx)(r.p,{children:"Each version of the Komga extension need a specific version of the Komga server to work properly."})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},3023:(e,r,n)=>{n.d(r,{R:()=>o,x:()=>a});var s=n(3696);const t={},i=s.createContext(t);function o(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d86518ca.26613847.js b/assets/js/d86518ca.26613847.js deleted file mode 100644 index 2bfe103c..00000000 --- a/assets/js/d86518ca.26613847.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5416],{900:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(4246),t=n(1670);const i={},o="Read with Paperback",a={id:"guides/paperback",title:"Read with Paperback",description:"Komga has an extension for Paperback, a free iOS and iPadOS reader.",source:"@site/docs/guides/paperback.md",sourceDirName:"guides",slug:"/guides/paperback",permalink:"/docs/guides/paperback",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/paperback.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with Tachiyomi",permalink:"/docs/guides/tachiyomi"},next:{title:"Read with CDisplayEx",permalink:"/docs/guides/cdisplayex"}},d={},c=[{value:"Install and configure",id:"install-and-configure",level:2},{value:"Add the source repository",id:"add-the-source-repository",level:3},{value:"Install the source",id:"install-the-source",level:3},{value:"Configure the source",id:"configure-the-source",level:3},{value:"Track read progress",id:"track-read-progress",level:2},{value:"Add the tracker repository",id:"add-the-tracker-repository",level:3},{value:"Install the tracker",id:"install-the-tracker",level:3},{value:"Changelog and Compatibility",id:"changelog-and-compatibility",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:n}=r;return n||function(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"read-with-paperback",children:"Read with Paperback"}),"\n",(0,s.jsxs)(r.p,{children:["Komga has an extension for ",(0,s.jsx)(r.a,{href:"https://paperback.moe/",children:"Paperback"}),", a free iOS and iPadOS reader."]}),"\n",(0,s.jsx)(r.admonition,{type:"warning",children:(0,s.jsx)(r.p,{children:"Paperback requires iOS 13.4+ or iPadOS 13.4+."})}),"\n",(0,s.jsx)(r.h2,{id:"install-and-configure",children:"Install and configure"}),"\n",(0,s.jsx)(r.h3,{id:"add-the-source-repository",children:"Add the source repository"}),"\n",(0,s.jsxs)(r.p,{children:["Support for Komga comes pre-installed with Paperback under the ",(0,s.jsx)(r.code,{children:"Paperback"})," source name. If deleted the extension and repository simply open ",(0,s.jsx)(r.a,{href:"https://paperback-ios.github.io/extensions-main-promises/",children:"the repository page"})," on your device and tap ",(0,s.jsx)(r.strong,{children:"Add to Paperback"}),"."]}),"\n",(0,s.jsx)(r.p,{children:'Once Paperback opens choose "Add as Source Repo" on the popup.'}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Add the source repository manually"}),(0,s.jsx)(r.p,{children:"If you prefer, it is also possible to add the repository manually:"}),(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app, go to ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Sources"})," then press ",(0,s.jsx)(r.strong,{children:"Edit"})," on the top right-hand corner."]}),"\n",(0,s.jsxs)(r.li,{children:["Press the top left-hand corner ",(0,s.jsx)(r.strong,{children:"+"})," button to add a repository."]}),"\n",(0,s.jsxs)(r.li,{children:["Use the base url:","\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{children:"https://paperback-ios.github.io/extensions-main-promises/\n"})}),"\n"]}),"\n"]})]}),"\n",(0,s.jsx)(r.h3,{id:"install-the-source",children:"Install the source"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["In the app ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Sources"})," windows, choose ",(0,s.jsx)(r.code,{children:"Browse Official Repo"}),", or ",(0,s.jsx)(r.code,{children:"Browse ..."})," followed by the repository name you chose previously"]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Install the source ",(0,s.jsx)(r.strong,{children:"Paperback"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"configure-the-source",children:"Configure the source"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Sources"}),", press the ",(0,s.jsx)(r.code,{children:"Paperback"})," source"]}),"\n",(0,s.jsxs)(r.li,{children:["Select ",(0,s.jsx)(r.strong,{children:"Server Settings"})," and set your:","\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"server url"}),"\n",(0,s.jsx)(r.li,{children:"username"}),"\n",(0,s.jsx)(r.li,{children:"password"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["Press ",(0,s.jsx)(r.strong,{children:"Save"})," to exit"]}),"\n"]}),"\n",(0,s.jsx)(r.admonition,{type:"tip",children:(0,s.jsxs)(r.p,{children:["You can test your settings by opening ",(0,s.jsx)(r.strong,{children:"Try Settings"})," below the Server Settings section"]})}),"\n",(0,s.jsx)(r.h2,{id:"track-read-progress",children:"Track read progress"}),"\n",(0,s.jsx)(r.p,{children:"It is possible to sync read chapters from the app to the Komga server using an implicit tracker."}),"\n",(0,s.jsx)(r.h3,{id:"add-the-tracker-repository",children:"Add the tracker repository"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app, go to ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Trackers"})," then press ",(0,s.jsx)(r.strong,{children:"Edit"})," on the top right-hand corner"]}),"\n",(0,s.jsxs)(r.li,{children:["Press the top left-hand corner ",(0,s.jsx)(r.strong,{children:"+"})," button to add a repository."]}),"\n",(0,s.jsxs)(r.li,{children:["Use the base url (",(0,s.jsx)(r.strong,{children:"do not"})," open this url):","\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{children:"https://paperback-ios.github.io/trackers-main/main/\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"install-the-tracker",children:"Install the tracker"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["In the app ",(0,s.jsx)(r.strong,{children:"Settings"}),", ",(0,s.jsx)(r.strong,{children:"External Trackers"})," windows, choose ",(0,s.jsx)(r.code,{children:"Browse ..."})," for the repository you just added"]}),"\n",(0,s.jsxs)(r.li,{children:["Install the tracker ",(0,s.jsx)(r.strong,{children:"Paperback"})]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"When you read or mark as read a chapter in the app, it will now be marked as such on your Komga server."}),"\n",(0,s.jsx)(r.h2,{id:"changelog-and-compatibility",children:"Changelog and Compatibility"}),"\n",(0,s.jsx)(r.p,{children:"Each version of the Komga extension need a specific version of the Komga server to work properly."})]})}function h(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1670:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>o});var s=n(7378);const t={},i=s.createContext(t);function o(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df8142cd.0a292453.js b/assets/js/df8142cd.0a292453.js new file mode 100644 index 00000000..6b1c3a6c --- /dev/null +++ b/assets/js/df8142cd.0a292453.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[1915],{1055:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var t=n(2540),i=n(3023);const o={},a="REST API",r={id:"api/rest",title:"REST API",description:"Komga offers a REST API, which you can browse using Swagger. It's available at /swagger-ui.html.",source:"@site/docs/api/rest.md",sourceDirName:"api",slug:"/api/rest",permalink:"/docs/api/rest",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/rest.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"api",next:{title:"Deprecation",permalink:"/docs/api/deprecation"}},c={},l=[{value:"Authenticating",id:"authenticating",level:2},{value:"Sessions",id:"sessions",level:2},{value:"Remember Me",id:"remember-me",level:2},{value:"Logout",id:"logout",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"rest-api",children:"REST API"}),"\n",(0,t.jsxs)(s.p,{children:["Komga offers a REST API, which you can browse using Swagger. It's available at ",(0,t.jsx)(s.code,{children:"/swagger-ui.html"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The OpenAPI specification is also available ",(0,t.jsx)(s.a,{href:"https://github.com/gotson/komga/blob/master/komga/docs/openapi.json",children:"here"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"authenticating",children:"Authenticating"}),"\n",(0,t.jsxs)(s.p,{children:["Most endpoints require authentication. Authentication is done using ",(0,t.jsx)(s.strong,{children:"Basic Authentication"})," and can be set on any endpoint."]}),"\n",(0,t.jsx)(s.h2,{id:"sessions",children:"Sessions"}),"\n",(0,t.jsx)(s.p,{children:"Upon successful authentication, a session is created, and can be reused."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["By default, a ",(0,t.jsx)(s.code,{children:"SESSION"})," cookie is set via ",(0,t.jsx)(s.code,{children:"Set-Cookie"})," response header. This works well for browsers and clients that can handle cookies."]}),"\n",(0,t.jsxs)(s.li,{children:["If you specify a header ",(0,t.jsx)(s.code,{children:"X-Auth-Token"})," during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["If you need to set the session cookie later on, you can call ",(0,t.jsx)(s.code,{children:"/api/v1/login/set-cookie"})," with ",(0,t.jsx)(s.code,{children:"X-Auth-Token"}),". The response will contain the ",(0,t.jsx)(s.code,{children:"Set-Cookie"})," header."]}),"\n",(0,t.jsx)(s.h2,{id:"remember-me",children:"Remember Me"}),"\n",(0,t.jsxs)(s.p,{children:["During authentication, if a request parameter ",(0,t.jsx)(s.code,{children:"remember-me"})," is passed and set to ",(0,t.jsx)(s.code,{children:"true"}),", the server will also return a ",(0,t.jsx)(s.code,{children:"remember-me"})," cookie. This cookie will be used to login automatically even if the session has expired."]}),"\n",(0,t.jsx)(s.h2,{id:"logout",children:"Logout"}),"\n",(0,t.jsxs)(s.p,{children:["You can explicitely logout an existing session by calling ",(0,t.jsx)(s.code,{children:"/api/logout"}),". This would return a ",(0,t.jsx)(s.code,{children:"204"}),"."]})]})}function h(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},3023:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>r});var t=n(3696);const i={},o=t.createContext(i);function a(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df8142cd.d1c8ec40.js b/assets/js/df8142cd.d1c8ec40.js deleted file mode 100644 index c3769454..00000000 --- a/assets/js/df8142cd.d1c8ec40.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5035],{6676:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var t=n(4246),i=n(1670);const o={},a="REST API",r={id:"api/rest",title:"REST API",description:"Komga offers a REST API, which you can browse using Swagger. It's available at /swagger-ui.html.",source:"@site/docs/api/rest.md",sourceDirName:"api",slug:"/api/rest",permalink:"/docs/api/rest",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/api/rest.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"api",next:{title:"Deprecation",permalink:"/docs/api/deprecation"}},c={},l=[{value:"Authenticating",id:"authenticating",level:2},{value:"Sessions",id:"sessions",level:2},{value:"Remember Me",id:"remember-me",level:2},{value:"Logout",id:"logout",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"rest-api",children:"REST API"}),"\n",(0,t.jsxs)(s.p,{children:["Komga offers a REST API, which you can browse using Swagger. It's available at ",(0,t.jsx)(s.code,{children:"/swagger-ui.html"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["The OpenAPI specification is also available ",(0,t.jsx)(s.a,{href:"https://github.com/gotson/komga/blob/master/komga/docs/openapi.json",children:"here"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"authenticating",children:"Authenticating"}),"\n",(0,t.jsxs)(s.p,{children:["Most endpoints require authentication. Authentication is done using ",(0,t.jsx)(s.strong,{children:"Basic Authentication"})," and can be set on any endpoint."]}),"\n",(0,t.jsx)(s.h2,{id:"sessions",children:"Sessions"}),"\n",(0,t.jsx)(s.p,{children:"Upon successful authentication, a session is created, and can be reused."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["By default, a ",(0,t.jsx)(s.code,{children:"SESSION"})," cookie is set via ",(0,t.jsx)(s.code,{children:"Set-Cookie"})," response header. This works well for browsers and clients that can handle cookies."]}),"\n",(0,t.jsxs)(s.li,{children:["If you specify a header ",(0,t.jsx)(s.code,{children:"X-Auth-Token"})," during authentication, the session ID will be returned via this same header. You can then pass that header again for subsequent requests to reuse the session."]}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["If you need to set the session cookie later on, you can call ",(0,t.jsx)(s.code,{children:"/api/v1/login/set-cookie"})," with ",(0,t.jsx)(s.code,{children:"X-Auth-Token"}),". The response will contain the ",(0,t.jsx)(s.code,{children:"Set-Cookie"})," header."]}),"\n",(0,t.jsx)(s.h2,{id:"remember-me",children:"Remember Me"}),"\n",(0,t.jsxs)(s.p,{children:["During authentication, if a request parameter ",(0,t.jsx)(s.code,{children:"remember-me"})," is passed and set to ",(0,t.jsx)(s.code,{children:"true"}),", the server will also return a ",(0,t.jsx)(s.code,{children:"remember-me"})," cookie. This cookie will be used to login automatically even if the session has expired."]}),"\n",(0,t.jsx)(s.h2,{id:"logout",children:"Logout"}),"\n",(0,t.jsxs)(s.p,{children:["You can explicitely logout an existing session by calling ",(0,t.jsx)(s.code,{children:"/api/logout"}),". This would return a ",(0,t.jsx)(s.code,{children:"204"}),"."]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1670:(e,s,n)=>{n.d(s,{Z:()=>r,a:()=>a});var t=n(7378);const i={},o=t.createContext(i);function a(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1862fee.8252bf34.js b/assets/js/e1862fee.8252bf34.js deleted file mode 100644 index b90b776c..00000000 --- a/assets/js/e1862fee.8252bf34.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[5880],{3970:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=r(4246),i=r(1670);const t={slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},a=void 0,s={permalink:"/blog/prepare-v1",source:"@site/blog/2023-03-21-prepare-v1.md",title:"Prepare for v1.0.0",description:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.",date:"2023-03-21T00:00:00.000Z",formattedDate:"March 21, 2023",tags:[{label:"breaking change",permalink:"/blog/tags/breaking-change"},{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.115,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},c=[{value:"Before upgrading",id:"before-upgrading",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version."}),"\n",(0,o.jsx)(n.h2,{id:"before-upgrading",children:"Before upgrading"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Docker, it is advisable to use the ",(0,o.jsx)(n.code,{children:"0.x"})," tag instead of ",(0,o.jsx)(n.code,{children:"latest"}),". You will be able to decide when you want to upgrade, especially if you are updating containers automatically."]}),"\n",(0,o.jsxs)(n.li,{children:["Backup your ",(0,o.jsx)(n.code,{children:"database.sqlite"}),". You can find it in the configuration directory, by default:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["on Windows: ",(0,o.jsx)(n.code,{children:"%USERPROFILE%/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Unix: ",(0,o.jsx)(n.code,{children:"~/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Docker: in the directory you mounted as ",(0,o.jsx)(n.code,{children:"/config"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["The minimum Java version required will be Java 17:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Komga using the ",(0,o.jsx)(n.code,{children:"jar"}),", you will need to make sure your Java version is sufficient by running ",(0,o.jsx)(n.code,{children:"java -version"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"If you run Komga using Docker, you don't need to do anything."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.li,{children:"The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm."}),"\n",(0,o.jsxs)(n.li,{children:["The default port will be changed from ",(0,o.jsx)(n.code,{children:"8080"})," to ",(0,o.jsx)(n.code,{children:"25600"}),":","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"If you use Docker, you will need to update your container or compose configuration to expose the new port."}),"\n",(0,o.jsx)(n.li,{children:"You may need to adjust your reverse proxy settings."}),"\n",(0,o.jsxs)(n.li,{children:["You can still change the port ",(0,o.jsx)(n.a,{href:"/docs/installation/configuration#server_port--serverport-port",children:"through configuration"}),"."]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1670:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>a});var o=r(7378);const i={},t=o.createContext(i);function a(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1862fee.8ca984dc.js b/assets/js/e1862fee.8ca984dc.js new file mode 100644 index 00000000..0d0eae32 --- /dev/null +++ b/assets/js/e1862fee.8ca984dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3993],{372:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=r(2540),i=r(3023);const t={slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},a=void 0,s={permalink:"/blog/prepare-v1",source:"@site/blog/2023-03-21-prepare-v1.md",title:"Prepare for v1.0.0",description:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version.",date:"2023-03-21T00:00:00.000Z",formattedDate:"March 21, 2023",tags:[{label:"breaking change",permalink:"/blog/tags/breaking-change"},{label:"upgrade",permalink:"/blog/tags/upgrade"},{label:"komga",permalink:"/blog/tags/komga"}],readingTime:1.115,hasTruncateMarker:!1,authors:[{name:"gotson",title:"Developer of Komga",url:"https://github.com/gotson",imageURL:"https://github.com/gotson.png",key:"gotson"}],frontMatter:{slug:"prepare-v1",title:"Prepare for v1.0.0",authors:"gotson",tags:["breaking change","upgrade","komga"]},unlisted:!1,prevItem:{title:"eBook support",permalink:"/blog/ebook-support"}},l={authorsImageUrls:[void 0]},c=[{value:"Before upgrading",id:"before-upgrading",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"The future v1.0.0 will bring some breaking changes, this guide will help you to prepare for the next major version."}),"\n",(0,o.jsx)(n.h2,{id:"before-upgrading",children:"Before upgrading"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Docker, it is advisable to use the ",(0,o.jsx)(n.code,{children:"0.x"})," tag instead of ",(0,o.jsx)(n.code,{children:"latest"}),". You will be able to decide when you want to upgrade, especially if you are updating containers automatically."]}),"\n",(0,o.jsxs)(n.li,{children:["Backup your ",(0,o.jsx)(n.code,{children:"database.sqlite"}),". You can find it in the configuration directory, by default:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["on Windows: ",(0,o.jsx)(n.code,{children:"%USERPROFILE%/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Unix: ",(0,o.jsx)(n.code,{children:"~/.komga/database.sqlite"})]}),"\n",(0,o.jsxs)(n.li,{children:["on Docker: in the directory you mounted as ",(0,o.jsx)(n.code,{children:"/config"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["The minimum Java version required will be Java 17:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you run Komga using the ",(0,o.jsx)(n.code,{children:"jar"}),", you will need to make sure your Java version is sufficient by running ",(0,o.jsx)(n.code,{children:"java -version"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"If you run Komga using Docker, you don't need to do anything."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.li,{children:"The hashing algorithm for files and pages will change. Previous hashes for files and pages will be deleted. On startup, if hashing is enabled, Komga will re-hash files and pages using the new algorithm."}),"\n",(0,o.jsxs)(n.li,{children:["The default port will be changed from ",(0,o.jsx)(n.code,{children:"8080"})," to ",(0,o.jsx)(n.code,{children:"25600"}),":","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"If you use Docker, you will need to update your container or compose configuration to expose the new port."}),"\n",(0,o.jsx)(n.li,{children:"You may need to adjust your reverse proxy settings."}),"\n",(0,o.jsxs)(n.li,{children:["You can still change the port ",(0,o.jsx)(n.a,{href:"/docs/installation/configuration#server_port--serverport-port",children:"through configuration"}),"."]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},3023:(e,n,r)=>{r.d(n,{R:()=>a,x:()=>s});var o=r(3696);const i={},t=o.createContext(i);function a(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e41126ef.0299af62.js b/assets/js/e41126ef.0299af62.js deleted file mode 100644 index 750677f4..00000000 --- a/assets/js/e41126ef.0299af62.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6383],{209:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>r,contentTitle:()=>a,default:()=>h,frontMatter:()=>n,metadata:()=>d,toc:()=>o});var t=s(4246),l=s(1670);const n={},a="Read lists",d={id:"guides/readlists",title:"Read lists",description:'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.',source:"@site/docs/guides/readlists.md",sourceDirName:"guides",slug:"/guides/readlists",permalink:"/docs/guides/readlists",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/readlists.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Collections",permalink:"/docs/guides/collections"},next:{title:"Full Text Search",permalink:"/docs/guides/search"}},r={},o=[{value:"Adding books to a read list",id:"adding-books-to-a-read-list",level:2},{value:"Finding the Read Lists",id:"finding-the-read-lists",level:2},{value:"Book details screen",id:"book-details-screen",level:3},{value:"Viewing the libraries "By Read List"",id:"viewing-the-libraries-by-read-list",level:3},{value:"Read List details",id:"read-list-details",level:2},{value:"Read List ordering",id:"read-list-ordering",level:3},{value:"Edit read list elements",id:"edit-read-list-elements",level:3},{value:"Deleting a read list",id:"deleting-a-read-list",level:2},{value:"Import read lists from ComicRack",id:"import-read-lists-from-comicrack",level:2}];function c(e){const i={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"read-lists",children:"Read lists"}),"\n",(0,t.jsx)(i.p,{children:'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.'}),"\n",(0,t.jsx)(i.h2,{id:"adding-books-to-a-read-list",children:"Adding books to a read list"}),"\n",(0,t.jsxs)(i.p,{children:["You can add a Book to a read list from the action menu icon ",(0,t.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,t.jsx)(i.em,{children:"Add to read list"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["You can also select multiple books, and click on ",(0,t.jsx)(i.em,{children:"Add to read list"}),"."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/multiselect-add-readlist.png",style:{maxHeight:" 80px"}}),"\n",(0,t.jsx)(i.p,{children:"A dialog will show up, where you can either add books to an existing read list, or create a new read list."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/add-readlist-dialog.png",style:{maxHeight:" 300px"}}),"\n",(0,t.jsx)(i.h2,{id:"finding-the-read-lists",children:"Finding the Read Lists"}),"\n",(0,t.jsx)(i.p,{children:"Read lists can be discovered or viewed in three ways:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Book details screen"}),"\n",(0,t.jsx)(i.li,{children:'Viewing the libraries "By Read List"'}),"\n",(0,t.jsx)(i.li,{children:"Searching in the search bar"}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"book-details-screen",children:"Book details screen"}),"\n",(0,t.jsx)(i.p,{children:"When viewing the details screen for a specific book that belongs to a read list, the read list will be displayed in a collapsible panel."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/book-readlist-collapsed.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.p,{children:"Click on the panel to expand it and see the content of the read list."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/book-readlist-expanded.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.h3,{id:"viewing-the-libraries-by-read-list",children:'Viewing the libraries "By Read List"'}),"\n",(0,t.jsx)(i.p,{children:'Only show read lists that exist in the library. Opening a read list goes to the "read list details" screen (see below).'}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/browse-readlists.png",style:{maxHeight:"100px"}}),"\n",(0,t.jsx)(i.h2,{id:"read-list-details",children:"Read List details"}),"\n",(0,t.jsx)(i.p,{children:"The read list details screen contains all the books that belong to the read list. It can include books from any library and any series. By adding items in different libraries or series to read lists, you can relate them to each other."}),"\n",(0,t.jsx)(i.h3,{id:"read-list-ordering",children:"Read List ordering"}),"\n",(0,t.jsx)(i.p,{children:"By default books in a read list are ordered manually. However, you can edit a read list and choose to disable the manual ordering, in which case books will be ordered by release date."}),"\n",(0,t.jsx)(i.p,{children:"Either click on the edit button on the read list card."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-card.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.p,{children:"Or click on the edit button from the read list details screen."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-button.png",style:{maxHeight:"60px"}}),"\n",(0,t.jsx)(i.p,{children:"A dialog will show up, where you can edit the read list's ordering."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-dialog.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.p,{children:"A manually ordered read list will be showing as such in the read list details screen."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-manual-ordering.png",style:{maxHeight:"50px"}}),"\n",(0,t.jsx)(i.h3,{id:"edit-read-list-elements",children:"Edit read list elements"}),"\n",(0,t.jsx)(i.p,{children:"From the read list details screen you can edit the elements composing a read list. To do so, click on the corresponding button in the toolbar."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements-button.png",style:{maxHeight:"80px"}}),"\n",(0,t.jsx)(i.p,{children:"The book cards will show two extra elements:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"a delete button, to remove the book from the read list"}),"\n",(0,t.jsx)(i.li,{children:"a grip handle, which let you drag and drop books to reorder them (only available when the read list is manually ordered)"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements.png",style:{maxHeight:"400px"}}),"\n",(0,t.jsx)(i.h2,{id:"deleting-a-read-list",children:"Deleting a read list"}),"\n",(0,t.jsxs)(i.p,{children:["To delete a read list, look for the action menu icon ",(0,t.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,t.jsx)(i.em,{children:"Delete"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"This will not delete the items in the read list, nor your media files."}),"\n",(0,t.jsx)(i.h2,{id:"import-read-lists-from-comicrack",children:"Import read lists from ComicRack"}),"\n",(0,t.jsxs)(i.p,{children:["You can import ComicRack reading lists in ",(0,t.jsx)(i.code,{children:".cbl"})," format from the ",(0,t.jsx)(i.em,{children:"Import > Read List"})," screen."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/import.png",style:{maxHeight:"400px"}}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:".cbl"})," files contain the following information:"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"read list name"}),"\n",(0,t.jsx)(i.li,{children:"books contained in the list, in order"}),"\n",(0,t.jsxs)(i.li,{children:["for each book:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"name of the series it is part of"}),"\n",(0,t.jsx)(i.li,{children:"volume of the series"}),"\n",(0,t.jsx)(i.li,{children:"year of the series"}),"\n",(0,t.jsx)(i.li,{children:"number of that book in the series"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Komga will try to match each book in the list in the following way:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["part of a series named ",(0,t.jsx)(i.code,{children:"Series"})," or ",(0,t.jsx)(i.code,{children:"Series (Volume)"})]}),"\n",(0,t.jsx)(i.li,{children:"where the number matches"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["The result will be shown after you click the ",(0,t.jsx)(i.em,{children:"Match"})," button."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/import-results.png",style:{maxHeight:"500px"}}),"\n",(0,t.jsx)(i.p,{children:"If some books are not matched, you can manually choose a series and a book. Duplicates and missing books will be shown with an error indicator on the right side."}),"\n",(0,t.jsxs)(i.p,{children:["Click ",(0,t.jsx)(i.em,{children:"Create"})," to create the read list. If some books are unmatched, you can still create the read list (a confirmation dialog will pop-up)."]})]})}function h(e={}){const{wrapper:i}={...(0,l.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1670:(e,i,s)=>{s.d(i,{Z:()=>d,a:()=>a});var t=s(7378);const l={},n=t.createContext(l);function a(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e41126ef.a7a93e5a.js b/assets/js/e41126ef.a7a93e5a.js new file mode 100644 index 00000000..90142580 --- /dev/null +++ b/assets/js/e41126ef.a7a93e5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3147],{8751:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>r,contentTitle:()=>a,default:()=>h,frontMatter:()=>n,metadata:()=>d,toc:()=>o});var t=s(2540),l=s(3023);const n={},a="Read lists",d={id:"guides/readlists",title:"Read lists",description:'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.',source:"@site/docs/guides/readlists.md",sourceDirName:"guides",slug:"/guides/readlists",permalink:"/docs/guides/readlists",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/readlists.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Collections",permalink:"/docs/guides/collections"},next:{title:"Full Text Search",permalink:"/docs/guides/search"}},r={},o=[{value:"Adding books to a read list",id:"adding-books-to-a-read-list",level:2},{value:"Finding the Read Lists",id:"finding-the-read-lists",level:2},{value:"Book details screen",id:"book-details-screen",level:3},{value:"Viewing the libraries "By Read List"",id:"viewing-the-libraries-by-read-list",level:3},{value:"Read List details",id:"read-list-details",level:2},{value:"Read List ordering",id:"read-list-ordering",level:3},{value:"Edit read list elements",id:"edit-read-list-elements",level:3},{value:"Deleting a read list",id:"deleting-a-read-list",level:2},{value:"Import read lists from ComicRack",id:"import-read-lists-from-comicrack",level:2}];function c(e){const i={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"read-lists",children:"Read lists"}),"\n",(0,t.jsx)(i.p,{children:'Read lists let you gather related books together. Think of it as playlists, but for books. For example, you might add all the books where Wolverine appears together in a "Wolverine" read list.'}),"\n",(0,t.jsx)(i.h2,{id:"adding-books-to-a-read-list",children:"Adding books to a read list"}),"\n",(0,t.jsxs)(i.p,{children:["You can add a Book to a read list from the action menu icon ",(0,t.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,t.jsx)(i.em,{children:"Add to read list"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["You can also select multiple books, and click on ",(0,t.jsx)(i.em,{children:"Add to read list"}),"."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/multiselect-add-readlist.png",style:{maxHeight:" 80px"}}),"\n",(0,t.jsx)(i.p,{children:"A dialog will show up, where you can either add books to an existing read list, or create a new read list."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/add-readlist-dialog.png",style:{maxHeight:" 300px"}}),"\n",(0,t.jsx)(i.h2,{id:"finding-the-read-lists",children:"Finding the Read Lists"}),"\n",(0,t.jsx)(i.p,{children:"Read lists can be discovered or viewed in three ways:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Book details screen"}),"\n",(0,t.jsx)(i.li,{children:'Viewing the libraries "By Read List"'}),"\n",(0,t.jsx)(i.li,{children:"Searching in the search bar"}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"book-details-screen",children:"Book details screen"}),"\n",(0,t.jsx)(i.p,{children:"When viewing the details screen for a specific book that belongs to a read list, the read list will be displayed in a collapsible panel."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/book-readlist-collapsed.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.p,{children:"Click on the panel to expand it and see the content of the read list."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/book-readlist-expanded.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.h3,{id:"viewing-the-libraries-by-read-list",children:'Viewing the libraries "By Read List"'}),"\n",(0,t.jsx)(i.p,{children:'Only show read lists that exist in the library. Opening a read list goes to the "read list details" screen (see below).'}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/browse-readlists.png",style:{maxHeight:"100px"}}),"\n",(0,t.jsx)(i.h2,{id:"read-list-details",children:"Read List details"}),"\n",(0,t.jsx)(i.p,{children:"The read list details screen contains all the books that belong to the read list. It can include books from any library and any series. By adding items in different libraries or series to read lists, you can relate them to each other."}),"\n",(0,t.jsx)(i.h3,{id:"read-list-ordering",children:"Read List ordering"}),"\n",(0,t.jsx)(i.p,{children:"By default books in a read list are ordered manually. However, you can edit a read list and choose to disable the manual ordering, in which case books will be ordered by release date."}),"\n",(0,t.jsx)(i.p,{children:"Either click on the edit button on the read list card."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-card.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.p,{children:"Or click on the edit button from the read list details screen."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-button.png",style:{maxHeight:"60px"}}),"\n",(0,t.jsx)(i.p,{children:"A dialog will show up, where you can edit the read list's ordering."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-dialog.png",style:{maxHeight:"300px"}}),"\n",(0,t.jsx)(i.p,{children:"A manually ordered read list will be showing as such in the read list details screen."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-manual-ordering.png",style:{maxHeight:"50px"}}),"\n",(0,t.jsx)(i.h3,{id:"edit-read-list-elements",children:"Edit read list elements"}),"\n",(0,t.jsx)(i.p,{children:"From the read list details screen you can edit the elements composing a read list. To do so, click on the corresponding button in the toolbar."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements-button.png",style:{maxHeight:"80px"}}),"\n",(0,t.jsx)(i.p,{children:"The book cards will show two extra elements:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"a delete button, to remove the book from the read list"}),"\n",(0,t.jsx)(i.li,{children:"a grip handle, which let you drag and drop books to reorder them (only available when the read list is manually ordered)"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Once you are done with your changes, click the tick in the top bar. Click the cross to discard your changes."}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/readlist-edit-elements.png",style:{maxHeight:"400px"}}),"\n",(0,t.jsx)(i.h2,{id:"deleting-a-read-list",children:"Deleting a read list"}),"\n",(0,t.jsxs)(i.p,{children:["To delete a read list, look for the action menu icon ",(0,t.jsx)("img",{src:"/assets/media/guides/action-menu-icon.png",style:{verticalAlign:"middle",maxHeight:"32px"}})," and click on ",(0,t.jsx)(i.em,{children:"Delete"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"This will not delete the items in the read list, nor your media files."}),"\n",(0,t.jsx)(i.h2,{id:"import-read-lists-from-comicrack",children:"Import read lists from ComicRack"}),"\n",(0,t.jsxs)(i.p,{children:["You can import ComicRack reading lists in ",(0,t.jsx)(i.code,{children:".cbl"})," format from the ",(0,t.jsx)(i.em,{children:"Import > Read List"})," screen."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/import.png",style:{maxHeight:"400px"}}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:".cbl"})," files contain the following information:"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"read list name"}),"\n",(0,t.jsx)(i.li,{children:"books contained in the list, in order"}),"\n",(0,t.jsxs)(i.li,{children:["for each book:","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"name of the series it is part of"}),"\n",(0,t.jsx)(i.li,{children:"volume of the series"}),"\n",(0,t.jsx)(i.li,{children:"year of the series"}),"\n",(0,t.jsx)(i.li,{children:"number of that book in the series"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Komga will try to match each book in the list in the following way:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["part of a series named ",(0,t.jsx)(i.code,{children:"Series"})," or ",(0,t.jsx)(i.code,{children:"Series (Volume)"})]}),"\n",(0,t.jsx)(i.li,{children:"where the number matches"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["The result will be shown after you click the ",(0,t.jsx)(i.em,{children:"Match"})," button."]}),"\n",(0,t.jsx)("img",{src:"/assets/media/guides/readlists/import-results.png",style:{maxHeight:"500px"}}),"\n",(0,t.jsx)(i.p,{children:"If some books are not matched, you can manually choose a series and a book. Duplicates and missing books will be shown with an error indicator on the right side."}),"\n",(0,t.jsxs)(i.p,{children:["Click ",(0,t.jsx)(i.em,{children:"Create"})," to create the read list. If some books are unmatched, you can still create the read list (a confirmation dialog will pop-up)."]})]})}function h(e={}){const{wrapper:i}={...(0,l.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},3023:(e,i,s)=>{s.d(i,{R:()=>a,x:()=>d});var t=s(3696);const l={},n=t.createContext(l);function a(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebc1cc14.51833c20.js b/assets/js/ebc1cc14.51833c20.js new file mode 100644 index 00000000..5481fc60 --- /dev/null +++ b/assets/js/ebc1cc14.51833c20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6119],{4307:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>t,metadata:()=>i,toc:()=>l});var a=n(2540),o=n(3023);const t={},r="Read with Panels on iOS",i={id:"guides/panels",title:"Read with Panels on iOS",description:"Background",source:"@site/docs/guides/panels.md",sourceDirName:"guides",slug:"/guides/panels",permalink:"/docs/guides/panels",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/panels.md",tags:[],version:"current",lastUpdatedAt:1708506287,formattedLastUpdatedAt:"Feb 21, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"},next:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"}},d={},l=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Panels",id:"adding-your-komga-server-to-panels",level:2},{value:"Komga as Import Service",id:"komga-as-import-service",level:2},{value:"Komga as a Library",id:"komga-as-a-library",level:2}];function c(e){const s={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"read-with-panels-on-ios",children:"Read with Panels on iOS"}),"\n",(0,a.jsx)(s.h2,{id:"background",children:"Background"}),"\n",(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.a,{href:"https://apps.apple.com/us/app/panels-comic-reader/id1236567663",children:"Panels app"})," allows you to connect with any OPDS compatible server. With Panels you will be able to to remotely download or stream your comics using your iPhone or iPad. With Panels, users can conveniently navigate through their entire Komga library and keep track of their reading progress."]}),"\n",(0,a.jsx)(s.admonition,{type:"warning",children:(0,a.jsx)(s.p,{children:"Please note that Panels OPDS support requires either a Panels+ subscription or Panels in-app purchase."})}),"\n",(0,a.jsx)(s.h2,{id:"adding-your-komga-server-to-panels",children:"Adding your Komga server to Panels"}),"\n",(0,a.jsx)(s.p,{children:"An OPDS feed is added to Panels as an importing service. From that point, it can be used either as a new library or just to download titles to your own device library."}),"\n",(0,a.jsx)(s.p,{children:"To add a new OPDS feed, open Panels and go to Library -> Connect Service -> OPDS."}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/01.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsxs)(s.p,{children:["You'll be taken to the OPDS configuration screen. Give any name to your server, then enter your ",(0,a.jsx)(s.em,{children:"server address"}),", ",(0,a.jsx)(s.em,{children:"username"}),", and ",(0,a.jsx)(s.em,{children:"password"}),". Tap on ",(0,a.jsx)(s.em,{children:"Apply"}),"."]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/02.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsx)(s.p,{children:"Your Komga server should now appear both as a new library and as a new Import Service. Let's explore both options."}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/03.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsx)(s.h2,{id:"komga-as-import-service",children:"Komga as Import Service"}),"\n",(0,a.jsx)(s.p,{children:"You can use this method if you plan to use your Komga server mainly to import (download) comics into your device."}),"\n",(0,a.jsx)(s.p,{children:"To add content to your library, you can follow either of these 2 flows:"}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsx)(s.li,{children:"From he content screen, tap your server, navigate and select the files you want to import, and last select where yo place them in your device library."}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/04.png"}),"\n",(0,a.jsxs)(s.ol,{start:"2",children:["\n",(0,a.jsx)(s.li,{children:'Navigate first to the location in your device library where you want your files to be imported. Then tap the 3 dot symbol and select "Import Files". Choose your server and find the files you want to download to your phone.'}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/05.png"}),"\n",(0,a.jsx)(s.p,{children:'From either of the above flows above, your download should start and be visible from the "Downloads" tab.'}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/06.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsx)(s.h2,{id:"komga-as-a-library",children:"Komga as a Library"}),"\n",(0,a.jsx)(s.p,{children:"Panels treats OPDS feeds as libraries. That means you can navigate your server library as if it was on your own device, with the benefit of keeping all files stored somewhere else.\nOnce you find a title you want to read, you can tap to open and start reading it (stream) or you can choose to download it for offline use. Long press a title (or select many) to show all options."}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/07.png"})]})}function p(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},3023:(e,s,n)=>{n.d(s,{R:()=>r,x:()=>i});var a=n(3696);const o={},t=a.createContext(o);function r(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebc1cc14.efabab5c.js b/assets/js/ebc1cc14.efabab5c.js deleted file mode 100644 index 8abc484e..00000000 --- a/assets/js/ebc1cc14.efabab5c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8284],{1144:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>t,metadata:()=>i,toc:()=>l});var a=n(4246),o=n(1670);const t={},r="Read with Panels on iOS",i={id:"guides/panels",title:"Read with Panels on iOS",description:"Background",source:"@site/docs/guides/panels.md",sourceDirName:"guides",slug:"/guides/panels",permalink:"/docs/guides/panels",draft:!1,unlisted:!1,editUrl:"https://github.com/gotson/komga-website/tree/master/docs/guides/panels.md",tags:[],version:"current",lastUpdatedAt:1706756672,formattedLastUpdatedAt:"Feb 1, 2024",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Read with any OPDS reader",permalink:"/docs/guides/opds"},next:{title:"Read with Chunky Reader (iPad)",permalink:"/docs/guides/chunky"}},d={},l=[{value:"Background",id:"background",level:2},{value:"Adding your Komga server to Panels",id:"adding-your-komga-server-to-panels",level:2},{value:"Komga as Import Service",id:"komga-as-import-service",level:2},{value:"Komga as a Library",id:"komga-as-a-library",level:2}];function c(e){const s={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"read-with-panels-on-ios",children:"Read with Panels on iOS"}),"\n",(0,a.jsx)(s.h2,{id:"background",children:"Background"}),"\n",(0,a.jsxs)(s.p,{children:[(0,a.jsx)(s.a,{href:"https://apps.apple.com/us/app/panels-comic-reader/id1236567663",children:"Panels app"})," allows you to connect with any OPDS compatible server. With Panels you will be able to to remotely download or stream your comics using your iPhone or iPad. With Panels, users can conveniently navigate through their entire Komga library and keep track of their reading progress."]}),"\n",(0,a.jsx)(s.admonition,{type:"warning",children:(0,a.jsx)(s.p,{children:"Please note that Panels OPDS support requires either a Panels+ subscription or Panels in-app purchase."})}),"\n",(0,a.jsx)(s.h2,{id:"adding-your-komga-server-to-panels",children:"Adding your Komga server to Panels"}),"\n",(0,a.jsx)(s.p,{children:"An OPDS feed is added to Panels as an importing service. From that point, it can be used either as a new library or just to download titles to your own device library."}),"\n",(0,a.jsx)(s.p,{children:"To add a new OPDS feed, open Panels and go to Library -> Connect Service -> OPDS."}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/01.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsxs)(s.p,{children:["You'll be taken to the OPDS configuration screen. Give any name to your server, then enter your ",(0,a.jsx)(s.em,{children:"server address"}),", ",(0,a.jsx)(s.em,{children:"username"}),", and ",(0,a.jsx)(s.em,{children:"password"}),". Tap on ",(0,a.jsx)(s.em,{children:"Apply"}),"."]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/02.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsx)(s.p,{children:"Your Komga server should now appear both as a new library and as a new Import Service. Let's explore both options."}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/03.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsx)(s.h2,{id:"komga-as-import-service",children:"Komga as Import Service"}),"\n",(0,a.jsx)(s.p,{children:"You can use this method if you plan to use your Komga server mainly to import (download) comics into your device."}),"\n",(0,a.jsx)(s.p,{children:"To add content to your library, you can follow either of these 2 flows:"}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsx)(s.li,{children:"From he content screen, tap your server, navigate and select the files you want to import, and last select where yo place them in your device library."}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/04.png"}),"\n",(0,a.jsxs)(s.ol,{start:"2",children:["\n",(0,a.jsx)(s.li,{children:'Navigate first to the location in your device library where you want your files to be imported. Then tap the 3 dot symbol and select "Import Files". Choose your server and find the files you want to download to your phone.'}),"\n"]}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/05.png"}),"\n",(0,a.jsx)(s.p,{children:'From either of the above flows above, your download should start and be visible from the "Downloads" tab.'}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/06.png",style:{maxHeight:"800px"}}),"\n",(0,a.jsx)(s.h2,{id:"komga-as-a-library",children:"Komga as a Library"}),"\n",(0,a.jsx)(s.p,{children:"Panels treats OPDS feeds as libraries. That means you can navigate your server library as if it was on your own device, with the benefit of keeping all files stored somewhere else.\nOnce you find a title you want to read, you can tap to open and start reading it (stream) or you can choose to download it for offline use. Long press a title (or select many) to show all options."}),"\n",(0,a.jsx)("img",{src:"/assets/media/guides/panels-setup/07.png"})]})}function p(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},1670:(e,s,n)=>{n.d(s,{Z:()=>i,a:()=>r});var a=n(7378);const o={},t=a.createContext(o);function r(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.76f8c691.js b/assets/js/main.76f8c691.js deleted file mode 100644 index 494eda0b..00000000 --- a/assets/js/main.76f8c691.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.76f8c691.js.LICENSE.txt */ -(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[179],{6573:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7378);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},3427:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7378),a=n(4246);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},3002:(e,t,n)=>{"use strict";var r=n(7378),a=n(7634),o=n(4289),i=n(2883),s=n(161);const l=[n(142),n(3815),n(4374),n(6222)];var c=n(6623),u=n(3620),d=n(5473),f=n(4246);function p(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var g=n(7092),h=n(353),m=n(8948),b=n(2347),y=n(8831),v=n(3714),w=n(174),k=n(3149),x=n(1721),S=n(505);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,v.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(g.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,x.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(g.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.h})]}),n&&(0,f.jsx)(y.d,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(E,{}),(0,f.jsx)(S.Z,{tag:k.HX,locale:e}),(0,f.jsx)(g.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var N=n(3427),L=n(3340),P=n(9834);function O(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r {const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const j=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,P.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),O("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?O("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=O("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),I(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(j,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(u.AW,{location:t,render:()=>e})})}}const M=R,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n \n\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(3361);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),I(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(i.B6,{children:(0,f.jsx)(o.VK,{children:(0,f.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};I(window.location.pathname).then(s)}},3340:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n(7378),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"introduction","docs":[{"id":"api/deprecation","path":"/docs/api/deprecation","sidebar":"api"},{"id":"api/rest","path":"/docs/api/rest","sidebar":"api"},{"id":"community","path":"/docs/community","sidebar":"docsSidebar"},{"id":"contribution","path":"/docs/contribution","sidebar":"docsSidebar"},{"id":"faq","path":"/docs/faq","sidebar":"docsSidebar"},{"id":"guides/announcements","path":"/docs/guides/announcements","sidebar":"docsSidebar"},{"id":"guides/cdisplayex","path":"/docs/guides/cdisplayex","sidebar":"docsSidebar"},{"id":"guides/chunky","path":"/docs/guides/chunky","sidebar":"docsSidebar"},{"id":"guides/cli","path":"/docs/guides/cli","sidebar":"docsSidebar"},{"id":"guides/collections","path":"/docs/guides/collections","sidebar":"docsSidebar"},{"id":"guides/desktop","path":"/docs/guides/desktop","sidebar":"docsSidebar"},{"id":"guides/duplicate-files","path":"/docs/guides/duplicate-files","sidebar":"docsSidebar"},{"id":"guides/duplicate-pages","path":"/docs/guides/duplicate-pages","sidebar":"docsSidebar"},{"id":"guides/edit-metadata","path":"/docs/guides/edit-metadata","sidebar":"docsSidebar"},{"id":"guides/image-formats","path":"/docs/guides/image-formats","sidebar":"docsSidebar"},{"id":"guides/import-books","path":"/docs/guides/import-books","sidebar":"docsSidebar"},{"id":"guides/libraries","path":"/docs/guides/libraries","sidebar":"docsSidebar"},{"id":"guides/local-artwork-assets","path":"/docs/guides/local-artwork-assets","sidebar":"docsSidebar"},{"id":"guides/oneshots","path":"/docs/guides/oneshots","sidebar":"docsSidebar"},{"id":"guides/opds","path":"/docs/guides/opds","sidebar":"docsSidebar"},{"id":"guides/panels","path":"/docs/guides/panels","sidebar":"docsSidebar"},{"id":"guides/paperback","path":"/docs/guides/paperback","sidebar":"docsSidebar"},{"id":"guides/read-progress","path":"/docs/guides/read-progress","sidebar":"docsSidebar"},{"id":"guides/readlists","path":"/docs/guides/readlists","sidebar":"docsSidebar"},{"id":"guides/scan-analysis-refresh","path":"/docs/guides/scan-analysis-refresh","sidebar":"docsSidebar"},{"id":"guides/search","path":"/docs/guides/search","sidebar":"docsSidebar"},{"id":"guides/server-settings","path":"/docs/guides/server-settings","sidebar":"docsSidebar"},{"id":"guides/tachiyomi","path":"/docs/guides/tachiyomi","sidebar":"docsSidebar"},{"id":"guides/theme","path":"/docs/guides/theme","sidebar":"docsSidebar"},{"id":"guides/trash","path":"/docs/guides/trash","sidebar":"docsSidebar"},{"id":"guides/user-accounts","path":"/docs/guides/user-accounts","sidebar":"docsSidebar"},{"id":"guides/webreader","path":"/docs/guides/webreader","sidebar":"docsSidebar"},{"id":"guides/webui","path":"/docs/guides/webui","sidebar":"docsSidebar"},{"id":"installation/configuration","path":"/docs/installation/configuration","sidebar":"docsSidebar"},{"id":"installation/desktop","path":"/docs/installation/desktop","sidebar":"docsSidebar"},{"id":"installation/docker","path":"/docs/installation/docker","sidebar":"docsSidebar"},{"id":"installation/gdrive","path":"/docs/installation/gdrive","sidebar":"docsSidebar"},{"id":"installation/https","path":"/docs/installation/https","sidebar":"docsSidebar"},{"id":"installation/jar","path":"/docs/installation/jar","sidebar":"docsSidebar"},{"id":"installation/ms-store","path":"/docs/installation/ms-store","sidebar":"docsSidebar"},{"id":"installation/oauth2","path":"/docs/installation/oauth2","sidebar":"docsSidebar"},{"id":"installation/thirdparty","path":"/docs/installation/thirdparty","sidebar":"docsSidebar"},{"id":"introduction","path":"/docs/introduction","sidebar":"docsSidebar"},{"id":"/category/installation","path":"/docs/category/installation","sidebar":"docsSidebar"},{"id":"/category/official-methods","path":"/docs/category/official-methods","sidebar":"docsSidebar"},{"id":"/category/guides","path":"/docs/category/guides","sidebar":"docsSidebar"},{"id":"/category/readers","path":"/docs/category/readers","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/introduction","label":"introduction"}},"api":{"link":{"path":"/docs/api/rest","label":"REST API"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.1.1"}}}');var c=n(4246);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function f(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},6293:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7378),a=n(161),o=n(7092),i=n(1721),s=n(4514),l=n(4246);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(p,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(o.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const f=e=>(0,l.jsx)(d,{...e});class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},161:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},7092:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7378);var r=n(2883),a=n(4246);function o(e){return(0,a.jsx)(r.ql,{...e})}},6641:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7378),a=n(4289),o=n(1721),i=n(353),s=n(5626),l=n(161),c=n(1521),u=n(8948),d=n(4246);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":m,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,u.C)(),x=(0,c.Z)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=f||p;const _=(0,s.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&_&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const N=(0,r.useRef)(!1),L=n?a.OL:a.rU,P=l.Z.canUseIntersectionObserver,O=(0,r.useRef)(),j=()=>{N.current||null==T||(window.docusaurus.preload(T),N.current=!0)};(0,r.useEffect)((()=>(!P&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{P&&O.current&&O.current.disconnect()})),[O,T,P,_]);const I=T?.startsWith("#")??!1,R=!y.target||"_self"===y.target,M=!T||!_||!R||I;return m||!I&&M||x.collectLink(T),y.id&&x.collectAnchor(y.id),M?(0,d.jsx)("a",{ref:S,href:T,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(L,{...y,onMouseEnter:j,onTouchStart:j,innerRef:e=>{S.current=e,P&&e&&_&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T,...n&&{isActive:h,activeClassName:g}})}const p=r.forwardRef(f)},9213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(7378),a=n(4246);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("IllegalYour Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = ${e} ${"/"===e?" (default value)":""}
\nWe suggest trying baseUrl =
\nchildren",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},5688:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},5626:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},8948:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7378),a=n(353),o=n(5626);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},1521:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7378);n(4246);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},353:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7378),a=n(3340);function o(){return(0,r.useContext)(a._)}},6457:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7378),a=n(3427);function o(){return(0,r.useContext)(a._)}},9834:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7378);const a=n(161).Z.canUseDOM?r.useLayoutEffect:r.useEffect},3361:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},6881:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7378),a=n(4246);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},2935:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>p,WS:()=>g,_r:()=>d,Jo:()=>y,zh:()=>f,yW:()=>m,gB:()=>h});var r=n(3620),a=n(353),o=n(5688);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,f=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function g(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function h(e){return f(e).versions}function m(e){const t=f(e);return s(t)}function b(e){const t=f(e),{pathname:n}=(0,r.TH)();return c(t,n)}function y(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(8504),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3815:(e,t,n)=>{"use strict";n.r(t);var r=n(6101),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(3109),n(2642)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},1999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7378);var r=n(624),a=n(9213),o=n(2347),i=n(6641),s=n(1521);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_JmGV",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_pMLv"};var c=n(4246);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.Z)(),{navbar:{hideOnScroll:f}}=(0,o.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const p=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",f?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},6125:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7378);const r={iconExternalLink:"iconExternalLink_nPrP"};var a=n(4246);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},4514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ot});var r=n(7378),a=n(624),o=n(6293),i=n(8831),s=n(3620),l=n(9213),c=n(4993),u=n(4246);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??g,{containerRef:n,onClick:r}=p();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(5484),b=n(174);const y={skipToContent:"skipToContent_oPtH"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var w=n(2347),k=n(10);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_J5rP"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_bSb_"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_zJRd",announcementBarPlaceholder:"announcementBarPlaceholder_NpUd",announcementBarClose:"announcementBarClose_Jjdj",announcementBarContent:"announcementBarContent_t7IR"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),o&&(0,u.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var N=n(2335),L=n(3457);var P=n(1763),O=n(3471);const j=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,O.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,P.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(j.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function M(){const e=(0,r.useContext)(j);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,O.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:R(o)})),[a,o,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=M();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(5421),B=n(6457);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_ki11",toggleButton:"toggleButton_MMFG",darkToggleIcon:"darkToggleIcon_U96C",lightToggleIcon:"lightToggleIcon_lgto",toggleButtonDisabled:"toggleButtonDisabled_Uw7m"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,B.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const Z=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_m8pZ"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,F.I)();return r?null:(0,u.jsx)(Z,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var G=n(898);function q(){return(0,u.jsx)(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,N.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(q,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Q=n(6641),X=n(8948),J=n(5626);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(6125);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),f=(0,X.Z)(t),p=(0,X.Z)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.Z)(a),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,g&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(Q.Z,{href:l?p:a,...c,...h}):(0,u.jsx)(Q.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(376),se=n(8862),le=n(353);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_MJ1i"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ze,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),p()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(Ze,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,u.jsx)(r,{...n})}var ge=n(3714);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_kvP7";var be=n(1542);function ye(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ve=n(6573),we=["translations"];function ke(){return ke=Object.assign||function(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var _e="Ctrl";var Ce=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ee(e,we),i=a.buttonText,s=void 0===i?"Search":i,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=xe((0,r.useState)(null),2),d=u[0],f=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(_e))}),[]),r.createElement("button",ke({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ve.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===_e?r.createElement(ye,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Te=n(7092);const Ae="q";function Ne(){const{withBaseUrl:e}=(0,X.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=function(){const{siteConfig:{themeConfig:e}}=(0,le.Z)();return e}();return(0,r.useCallback)((r=>{const a=new URL(r);if(ee(t,a.href))return r;const o=`${a.pathname+a.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(o,n))}),[e,t,n])}var Le=n(3149);const Pe={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Oe=null;function je(e){let{hit:t,children:n}=e;return(0,u.jsx)(Q.Z,{to:t.url,children:n})}function Ie(e){let{state:t,onClose:n}=e;const a=function(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,le.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${Ae}=${encodeURIComponent(t)}`),[e,n])}();return(0,u.jsx)(Q.Z,{to:a(t.query),onClick:n,children:(0,u.jsx)(l.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Re(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,le.Z)(),l=Ne(),c=function(){const{locale:e,tags:t}=(0,Le._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],f=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,d):d,p={...o.searchParameters,facetFilters:f},g=(0,s.k6)(),h=(0,r.useRef)(null),m=(0,r.useRef)(null),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)(void 0),k=(0,r.useCallback)((()=>Oe?Promise.resolve():Promise.all([n.e(3041).then(n.bind(n,3041)),Promise.all([n.e(532),n.e(9127)]).then(n.bind(n,9127)),Promise.all([n.e(532),n.e(4670)]).then(n.bind(n,4670))]).then((e=>{let[{DocSearchModal:t}]=e;Oe=t}))),[]),x=(0,r.useCallback)((()=>{k().then((()=>{h.current=document.createElement("div"),document.body.insertBefore(h.current,document.body.firstChild),y(!0)}))}),[k,y]),S=(0,r.useCallback)((()=>{y(!1),h.current?.remove()}),[y]),E=(0,r.useCallback)((e=>{k().then((()=>{y(!0),w(e.key)}))}),[k,y,w]),_=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;ee(a,t)?window.location.href=t:g.push(t)}}).current,C=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:l(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,u.jsx)(Ie,{...e,onClose:S})),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:b,onOpen:x,onClose:S,onInput:E,searchButtonRef:m}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te.Z,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(Ce,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:x,ref:m,translations:Pe.button}),b&&Oe&&h.current&&(0,be.createPortal)((0,u.jsx)(Oe,{onClose:S,initialScrollY:window.scrollY,initialQuery:v,navigator:_,transformItems:C,hitComponent:je,transformSearchClient:A,...o.searchPagePath&&{resultsFooterComponent:T},...o,searchParameters:p,placeholder:Pe.placeholder,translations:Pe.modal}),h.current)]})}function Me(){const{siteConfig:e}=(0,le.Z)();return(0,u.jsx)(Re,{...e.themeConfig.algolia})}const De={navbarSearchContainer:"navbarSearchContainer_bzqh"};function Fe(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.Z)(n,De.navbarSearchContainer),children:t})}var Be=n(2935),ze=n(6100);var $e=n(4453);const Ue=e=>e.docs.find((t=>t.id===e.mainDocId));const He={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),f=(0,ge.l)(),{search:p,hash:g}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],m=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:me}),m]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Fe,{className:n,children:(0,u.jsx)(Me,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,Be.Iw)(r),i=(0,ze.vY)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,Be.Iw)(r),i=(0,ze.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ze.lO)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:c,hash:d}=(0,s.TH)(),f=(0,Be.Iw)(n),p=(0,Be.gB)(n),{savePreferredVersionName:g}=(0,$e.J)(n),h=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Ue(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...o],m=(0,ze.lO)(n)[0],b=t&&h.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,y=t&&h.length>1?void 0:Ue(m).path;return h.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function Ze(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=He[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function Ve(){const e=(0,N.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ze,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ge(){const e=0===(0,w.L)().navbar.items.length,t=M();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function qe(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(D,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ve,{}),secondaryMenu:(0,u.jsx)(Ge,{})}):null}const Ke={navbarHideable:"navbarHideable_hhpl",navbarHidden:"navbarHidden_nmcs"};function Ye(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Qe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,N.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,L.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i =s?n(!1):i+c {if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!d&&Ke.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ye,{onClick:i.toggle}),(0,u.jsx)(qe,{})]})}var Xe=n(1721);const Je={errorBoundaryError:"errorBoundaryError_WE6Q",errorBoundaryFallback:"errorBoundaryFallback_bdJX"};function et(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function tt(e){let{error:t}=e;const n=(0,Xe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Je.errorBoundaryError,children:n})}class nt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const rt="right";function at(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function ot(){const{toggle:e,shown:t}=(0,N.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(at,{})})}const it={colorModeToggle:"colorModeToggle_Hewu"};function st(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(nt,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ze,{...e})},t)))})}function lt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ct(){const e=(0,N.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??rt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(lt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(ot,{}),(0,u.jsx)(q,{}),(0,u.jsx)(st,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(st,{items:r}),(0,u.jsx)(W,{className:it.colorModeToggle}),!a&&(0,u.jsx)(Fe,{children:(0,u.jsx)(Me,{})})]})})}function ut(){return(0,u.jsx)(Qe,{children:(0,u.jsx)(ct,{})})}function dt(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Q.Z,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function ft(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(dt,{item:t})},t.href??t.to)}function pt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(ft,{item:e},t)))})]})}function gt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(pt,{column:e},t)))})}function ht(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function mt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(dt,{item:t})}function bt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(mt,{item:e}),t.length!==n+1&&(0,u.jsx)(ht,{})]},n)))})})}function yt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(gt,{columns:t}):(0,u.jsx)(bt,{links:t})}var vt=n(6925);const wt={footerLogoLink:"footerLogoLink_tutC"};function kt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(vt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function xt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Q.Z,{href:t.href,className:wt.footerLogoLink,target:t.target,children:(0,u.jsx)(kt,{logo:t})}):(0,u.jsx)(kt,{logo:t})}function St(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Et(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function _t(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(Et,{style:a,links:n&&n.length>0&&(0,u.jsx)(yt,{links:n}),logo:r&&(0,u.jsx)(xt,{logo:r}),copyright:t&&(0,u.jsx)(St,{copyright:t})})}const Ct=r.memo(_t),Tt=(0,P.Qc)([F.S,k.pl,L.OC,$e.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(O.n2,{children:(0,u.jsx)(N.M,{children:(0,u.jsx)(I,{children:t})})})}]);function At(e){let{children:t}=e;return(0,u.jsx)(Tt,{children:t})}var Nt=n(1999);function Lt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Nt.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(et,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(tt,{error:t})})]})})})}const Pt={mainWrapper:"mainWrapper_MB5r"};function Ot(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.t)(),(0,u.jsxs)(At,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(A,{}),(0,u.jsx)(ut,{}),(0,u.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Pt.mainWrapper,r),children:(0,u.jsx)(o.Z,{fallback:e=>(0,u.jsx)(Lt,{...e}),children:t})}),!n&&(0,u.jsx)(Ct,{})]})}},898:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7378);var r=n(6641),a=n(8948),o=n(353),i=n(2347),s=n(6925),l=n(4246);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...f}=e,p=(0,a.Z)(s?.href||"/"),g=n?"":t,h=s?.alt??g;return(0,l.jsxs)(r.Z,{to:p,...f,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7378);var r=n(7092),a=n(4246);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},6925:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7378),a=n(624),o=n(6457),i=n(5421);const s={themedComponent:"themedComponent_siVc","themedComponent--light":"themedComponent--light_hHel","themedComponent--dark":"themedComponent--dark_yETr"};var l=n(4246);function c(e){let{className:t,children:n}=e;const c=(0,o.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},376:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(7378),a=n(161),o=n(9834),i=n(6903),s=n(4246);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.Z.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:c?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(u.current,n),i?.(n))},className:l,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&c(t)}),[a,t]),a?(0,s.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?m:h;return(0,s.jsx)(r,{...n})}},10:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>g});var r=n(7378),a=n(6457),o=n(1819),i=n(1763),s=n(2347),l=n(4246);const c=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),f=e=>c.set(String(e)),p=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(p.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},5421:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>m});var r=n(7378),a=n(161),o=n(1763),i=n(1819),s=n(2347),l=n(4246);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,g=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),h=e=>{d.set(p(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&h(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},4453:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b,Oh:()=>w});var r=n(7378),a=n(2935),o=n(5688),i=n(2347),s=n(6100),l=n(1763),c=n(1819),u=n(4246);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function h(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,u.jsx)(g.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.cE?(0,u.jsx)(m,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(g);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,a._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},2095:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(7378),a=n(1763),o=n(4246);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},5611:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(7378),a=n(1763),o=n(4246);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},2335:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>g});var r=n(7378),a=n(3471),o=n(8357),i=n(3620),s=n(1763);function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(2347),u=n(4246);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function p(e){let{children:t}=e;const n=f();return(0,u.jsx)(d.Provider,{value:n,children:t})}function g(){const e=r.useContext(d);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3471:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(7378),a=n(1763),o=n(4246);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},174:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7378);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},8357:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(7378),a=n(161);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},5484:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},6903:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},6100:(e,t,n)=>{"use strict";n.d(t,{MN:()=>T,LM:()=>g,_F:()=>y,cE:()=>f,jA:()=>h,xz:()=>p,SN:()=>C,lO:()=>S,vY:()=>_,oz:()=>E,s1:()=>x,f:()=>w});var r=n(7378),a=n(3620),o=n(5473),i=n(2935),s=n(4453),l=n(5611),c=n(2095);function u(e){return Array.from(new Set(e))}var d=n(8862);const f=!!i._r;function p(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function g(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=g(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,a.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.H)(i),sidebarName:c,sidebarItems:u}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!g(e)))}},8831:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>g});var r=n(7378),a=n(624),o=n(7092),i=n(6881);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(8948),c=n(353);var u=n(4246);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),f=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),s=(0,a.Z)(i,t);return(0,u.jsxs)(f.Provider,{value:s,children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function g(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(p,{className:(0,a.Z)(r,o),children:t})}},1763:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(7378),a=n(9834),o=n(4246);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(? \w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},8862:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7378),a=n(6623),o=n(353);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},3457:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>c,RF:()=>f});var r=n(7378),a=n(161),o=n(6457),i=(n(9834),n(1763)),s=n(4246);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(d()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3149:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(2935),a=n(353),o=n(4453);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,o.Oh)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=l[e],o=t[e].versions.find((e=>e.isLast));return s(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},1819:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7378);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},3714:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(353),a=n(3620),o=n(1721);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},4993:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7378),a=n(3620),o=n(1763);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},2347:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(353);function a(){return(0,r.Z)().siteConfig.themeConfig}},2520:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},6102:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},1721:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2520);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(6102);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6623:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});n(7378);var r=n(1237),a=n.n(r),o=n(6887);const i={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,6923)),"@theme/BlogTagsListPage",6923],"01dfd4e6":[()=>n.e(7694).then(n.bind(n,2226)),"@site/docs/guides/server-settings.md",2226],"03c48fcb":[()=>n.e(5037).then(n.bind(n,7181)),"@site/docs/guides/collections.md",7181],"04262cfc":[()=>n.e(3861).then(n.t.bind(n,4698,19)),"~docs/default/category-docs-docssidebar-category-readers-e2b.json",4698],"0480b142":[()=>n.e(836).then(n.bind(n,2334)),"@site/docs/faq.md",2334],"08fb5848":[()=>n.e(2865).then(n.bind(n,9709)),"@site/blog/2023-03-21-prepare-v1.md?truncated=true",9709],"0920ba86":[()=>n.e(2239).then(n.bind(n,3477)),"@site/docs/guides/user-accounts.md",3477],"0bf9748d":[()=>n.e(9847).then(n.bind(n,7842)),"@site/docs/guides/scan-analysis-refresh.md",7842],"0c5c2428":[()=>n.e(6236).then(n.bind(n,9297)),"@site/docs/installation/jar.md",9297],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,777)),"@theme/DocCategoryGeneratedIndexPage",777],17896441:[()=>Promise.all([n.e(532),n.e(1894),n.e(7918)]).then(n.bind(n,1633)),"@theme/DocItem",1633],"1bb85636":[()=>n.e(9844).then(n.bind(n,8704)),"@site/docs/guides/chunky.md",8704],"1c21263c":[()=>n.e(563).then(n.t.bind(n,9287,19)),"~docs/default/category-docs-docssidebar-category-installation-c5d.json",9287],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,3513)),"@site/src/pages/index.tsx",3513],"1ec3b236":[()=>n.e(7021).then(n.bind(n,5138)),"@site/docs/guides/cli.md",5138],"206b31bb":[()=>n.e(1778).then(n.bind(n,1539)),"@site/docs/guides/oneshots.md",1539],24227623:[()=>n.e(2854).then(n.bind(n,2395)),"@site/docs/guides/read-progress.md",2395],"25088eef":[()=>n.e(8315).then(n.t.bind(n,2233,19)),"~blog/default/blog-tags-upgrade-101-list.json",2233],"2b8f2de1":[()=>n.e(9925).then(n.bind(n,4003)),"@site/docs/guides/opds.md",4003],"2fcc23cb":[()=>n.e(3307).then(n.t.bind(n,5745,19)),"/home/runner/work/komga-website/komga-website/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"30469b70":[()=>n.e(8365).then(n.t.bind(n,4469,19)),"/home/runner/work/komga-website/komga-website/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"3fda2baf":[()=>n.e(7547).then(n.t.bind(n,1621,19)),"~blog/default/blog-tags-upgrade-101.json",1621],"416fe654":[()=>n.e(7214).then(n.bind(n,9438)),"@site/docs/contribution.md",9438],"45fa992b":[()=>n.e(6155).then(n.bind(n,3352)),"@site/blog/2023-11-29-ebooks.md",3352],"49136dfa":[()=>n.e(473).then(n.bind(n,7854)),"@site/docs/guides/import-books.md",7854],"4c25ac78":[()=>n.e(2727).then(n.bind(n,2450)),"@site/docs/guides/edit-metadata.md",2450],"4cc4731f":[()=>n.e(1169).then(n.bind(n,2588)),"@site/docs/installation/thirdparty.md",2588],"4e7428db":[()=>n.e(9835).then(n.t.bind(n,7821,19)),"~blog/default/blog-tags-komga-ec4.json",7821],"55519d27":[()=>n.e(4114).then(n.bind(n,8003)),"@site/docs/guides/libraries.md",8003],"5592dbb1":[()=>n.e(8336).then(n.bind(n,9568)),"@site/docs/guides/desktop.md",9568],"58903ab2":[()=>n.e(6399).then(n.bind(n,2228)),"@site/docs/installation/desktop.md",2228],"59c4a0ab":[()=>n.e(7583).then(n.t.bind(n,5570,19)),"~docs/default/category-docs-docssidebar-category-official-methods-a27.json",5570],"5e80a3fb":[()=>n.e(5370).then(n.t.bind(n,6072,19)),"~blog/default/blog-tags-komga-ec4-list.json",6072],"5e95c892":[()=>n.e(9661).then(n.bind(n,2108)),"@theme/DocsRoot",2108],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5ef0e9d6":[()=>n.e(9880).then(n.bind(n,3456)),"@site/docs/community.md",3456],"607df45e":[()=>n.e(9112).then(n.bind(n,3486)),"@site/docs/installation/gdrive.md",3486],"634dddf1":[()=>n.e(5862).then(n.bind(n,6937)),"@site/blog/2023-11-29-ebooks.md?truncated=true",6937],"674e178f":[()=>n.e(5203).then(n.bind(n,8657)),"@site/docs/guides/cdisplayex.md",8657],"6875c492":[()=>Promise.all([n.e(532),n.e(1894),n.e(5240),n.e(8610)]).then(n.bind(n,1071)),"@theme/BlogTagsPostsPage",1071],"74bb4bec":[()=>n.e(4445).then(n.bind(n,7711)),"@site/blog/2023-12-15-ebooks-drop2.md?truncated=true",7711],"767395cb":[()=>n.e(3526).then(n.bind(n,2804)),"@site/docs/installation/https.md",2804],"7d6e8713":[()=>n.e(3620).then(n.bind(n,2724)),"@site/docs/guides/webreader.md",2724],"7da97648":[()=>n.e(5671).then(n.bind(n,3923)),"@site/docs/guides/tachiyomi.md",3923],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"896f20ab":[()=>n.e(7426).then(n.t.bind(n,5414,19)),"~blog/default/blog-tags-breaking-change-d5e-list.json",5414],"8a3a4158":[()=>n.e(1987).then(n.t.bind(n,3769,19)),"/home/runner/work/komga-website/komga-website/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"8badb5d4":[()=>n.e(3562).then(n.bind(n,1117)),"@site/docs/guides/image-formats.md",1117],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"97c4f258":[()=>n.e(305).then(n.bind(n,7119)),"@site/docs/installation/configuration.md",7119],"98ce5054":[()=>n.e(8209).then(n.bind(n,3912)),"@site/docs/guides/local-artwork-assets.md",3912],"9e4087bc":[()=>n.e(3608).then(n.bind(n,7507)),"@theme/BlogArchivePage",7507],a09c2993:[()=>n.e(4128).then(n.bind(n,6587)),"@site/docs/introduction.md",6587],a22ccb60:[()=>n.e(9353).then(n.bind(n,9882)),"@site/docs/api/deprecation.md",9882],a624e12b:[()=>n.e(3287).then(n.bind(n,99)),"@site/docs/installation/oauth2.md",99],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(1894),n.e(5240),n.e(3089)]).then(n.bind(n,3462)),"@theme/BlogListPage",3462],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,5208,19)),"~blog/default/blog-tags-tags-4c2.json",5208],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,4987)),"@theme/DocVersionRoot",4987],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,3505)),"@theme/DocRoot",3505],a981d65e:[()=>n.e(5674).then(n.bind(n,4965)),"@site/docs/guides/trash.md",4965],ac07380c:[()=>n.e(4434).then(n.bind(n,789)),"@site/docs/installation/docker.md",789],b242fde9:[()=>n.e(5647).then(n.bind(n,7433)),"@site/docs/guides/duplicate-files.md",7433],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,4556,19)),"~blog/default/blog-archive-80c.json",4556],b94207ad:[()=>n.e(4443).then(n.bind(n,3961)),"@site/docs/installation/ms-store.md",3961],b94d24b4:[()=>n.e(6826).then(n.bind(n,4852)),"@site/docs/guides/announcements.md",4852],b9a7991f:[()=>n.e(3817).then(n.t.bind(n,2954,19)),"~blog/default/blog-tags-breaking-change-d5e.json",2954],c2d7cd96:[()=>n.e(7972).then(n.bind(n,6139)),"@site/docs/guides/search.md",6139],c8d8dd9d:[()=>n.e(15).then(n.bind(n,6800)),"@site/blog/2023-12-15-ebooks-drop2.md",6800],ca683365:[()=>n.e(3438).then(n.bind(n,2945)),"@site/docs/guides/theme.md",2945],ccc49370:[()=>Promise.all([n.e(532),n.e(1894),n.e(5240),n.e(6103)]).then(n.bind(n,3227)),"@theme/BlogPostPage",3227],cfba0797:[()=>n.e(4578).then(n.t.bind(n,5202,19)),"~docs/default/category-docs-docssidebar-category-guides-24e.json",5202],d135d818:[()=>n.e(4119).then(n.bind(n,7249)),"@site/docs/guides/duplicate-pages.md",7249],d6e0cd3c:[()=>n.e(278).then(n.bind(n,4953)),"@site/docs/guides/webui.md",4953],d86518ca:[()=>n.e(5416).then(n.bind(n,900)),"@site/docs/guides/paperback.md",900],df8142cd:[()=>n.e(5035).then(n.bind(n,6676)),"@site/docs/api/rest.md",6676],e1862fee:[()=>n.e(5880).then(n.bind(n,3970)),"@site/blog/2023-03-21-prepare-v1.md",3970],e41126ef:[()=>n.e(6383).then(n.bind(n,209)),"@site/docs/guides/readlists.md",209],ebc1cc14:[()=>n.e(8284).then(n.bind(n,1144)),"@site/docs/guides/panels.md",1144]};var s=n(4246);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(3361),u=n(6881);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(4094).then(n.bind(n,4094)),modules:["@theme/NotFound"],webpack:()=>[4094],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:l,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(o,{...a,...n})})}})}const f=[{path:"/blog",component:d("/blog","a1a"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","504"),exact:!0},{path:"/blog/ebook-drop2",component:d("/blog/ebook-drop2","84c"),exact:!0},{path:"/blog/ebook-support",component:d("/blog/ebook-support","c42"),exact:!0},{path:"/blog/prepare-v1",component:d("/blog/prepare-v1","98d"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","c2d"),exact:!0},{path:"/blog/tags/breaking-change",component:d("/blog/tags/breaking-change","8ac"),exact:!0},{path:"/blog/tags/komga",component:d("/blog/tags/komga","962"),exact:!0},{path:"/blog/tags/upgrade",component:d("/blog/tags/upgrade","a24"),exact:!0},{path:"/docs",component:d("/docs","d6a"),routes:[{path:"/docs",component:d("/docs","746"),routes:[{path:"/docs",component:d("/docs","02b"),routes:[{path:"/docs/api/deprecation",component:d("/docs/api/deprecation","ea6"),exact:!0,sidebar:"api"},{path:"/docs/api/rest",component:d("/docs/api/rest","814"),exact:!0,sidebar:"api"},{path:"/docs/category/guides",component:d("/docs/category/guides","277"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/category/installation",component:d("/docs/category/installation","801"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/category/official-methods",component:d("/docs/category/official-methods","39e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/category/readers",component:d("/docs/category/readers","afc"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/community",component:d("/docs/community","6ef"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/contribution",component:d("/docs/contribution","eac"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/faq",component:d("/docs/faq","76c"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/announcements",component:d("/docs/guides/announcements","3df"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/cdisplayex",component:d("/docs/guides/cdisplayex","1d6"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/chunky",component:d("/docs/guides/chunky","a82"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/cli",component:d("/docs/guides/cli","871"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/collections",component:d("/docs/guides/collections","b98"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/desktop",component:d("/docs/guides/desktop","b77"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/duplicate-files",component:d("/docs/guides/duplicate-files","c0c"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/duplicate-pages",component:d("/docs/guides/duplicate-pages","1e7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/edit-metadata",component:d("/docs/guides/edit-metadata","e6b"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/image-formats",component:d("/docs/guides/image-formats","0b3"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/import-books",component:d("/docs/guides/import-books","eb3"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/libraries",component:d("/docs/guides/libraries","6e3"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/local-artwork-assets",component:d("/docs/guides/local-artwork-assets","a67"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/oneshots",component:d("/docs/guides/oneshots","16a"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/opds",component:d("/docs/guides/opds","48e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/panels",component:d("/docs/guides/panels","65d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/paperback",component:d("/docs/guides/paperback","faa"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/read-progress",component:d("/docs/guides/read-progress","728"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/readlists",component:d("/docs/guides/readlists","7b4"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/scan-analysis-refresh",component:d("/docs/guides/scan-analysis-refresh","573"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/search",component:d("/docs/guides/search","d87"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/server-settings",component:d("/docs/guides/server-settings","887"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/tachiyomi",component:d("/docs/guides/tachiyomi","fe9"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/theme",component:d("/docs/guides/theme","281"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/trash",component:d("/docs/guides/trash","109"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/user-accounts",component:d("/docs/guides/user-accounts","e75"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/webreader",component:d("/docs/guides/webreader","112"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/guides/webui",component:d("/docs/guides/webui","269"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/configuration",component:d("/docs/installation/configuration","1f3"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/desktop",component:d("/docs/installation/desktop","5d2"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/docker",component:d("/docs/installation/docker","244"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/gdrive",component:d("/docs/installation/gdrive","6e6"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/https",component:d("/docs/installation/https","965"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/jar",component:d("/docs/installation/jar","08e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/ms-store",component:d("/docs/installation/ms-store","c78"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/oauth2",component:d("/docs/installation/oauth2","dd6"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/installation/thirdparty",component:d("/docs/installation/thirdparty","9c4"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/introduction",component:d("/docs/introduction","178"),exact:!0,sidebar:"docsSidebar"}]}]}]},{path:"/",component:d("/","2f2"),exact:!0},{path:"*",component:d("*")}]},5036:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(5773);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(2215);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,h(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t {"use strict";var r=n(9185),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=p(n);a&&a!==g&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),m=0;m {"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5182:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},142:(e,t,n)=>{"use strict";n.r(t)},6222:(e,t,n)=>{"use strict";n.r(t)},8504:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:' '};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},247:()=>{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i {!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(Prism)},5094:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},3109:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l =o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),g=f.indexOf(p);if(g>-1){++a;var h=f.substring(0,g),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(g+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(m),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},2642:(e,t,n)=>{var r={"./prism-bash":247,"./prism-diff":9109,"./prism-json":5094};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=2642},8772:(e,t,n)=>{"use strict";var r=n(331);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},3615:(e,t,n)=>{e.exports=n(8772)()},331:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},3577:(e,t,n)=>{"use strict";var r=n(7378),a=n(1102);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!d.call(g,e)||!d.call(p,e)&&(f.test(e)?g[e]=!0:(p[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){m[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),m.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){m[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),L=Symbol.for("react.suspense_list"),P=Symbol.for("react.memo"),O=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var j=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var I=Symbol.iterator;function R(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=I&&e[I]||e["@@iterator"])?e:null}var M,D=Object.assign;function F(e){if(void 0===M)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);M=t&&t[1]||""}return"\n"+M+e}var B=!1;function z(e,t){if(!e||B)return"";B=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var a=c.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(1!==i||1!==s)do{if(i--,0>--s||a[i]!==o[s]){var l="\n"+a[i].replace(" at new "," at ");return e.displayName&&l.includes(" ")&&(l=l.replace(" ",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{B=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?F(e):""}function $(e){switch(e.tag){case 5:return F(e.type);case 16:return F("Lazy");case 13:return F("Suspense");case 19:return F("SuspenseList");case 0:case 2:case 15:return e=z(e.type,!1);case 11:return e=z(e.type.render,!1);case 1:return e=z(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case x:return"Portal";case _:return"Profiler";case E:return"StrictMode";case N:return"Suspense";case L:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case P:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case O:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function W(e){e._valueTracker||(e._valueTracker=function(e){var t=V(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function G(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function K(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Q(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){Q(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a "+t.valueOf().toString()+"",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function fe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var pe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ge=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||pe.hasOwnProperty(e)&&pe[e]?(""+t).trim():t+"px"}function me(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(pe).forEach((function(e){ge.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),pe[t]=pe[e]}))}));var be=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(o(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(o(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(o(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(o(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,Ee=null;function _e(e){if(e=va(e)){if("function"!=typeof xe)throw Error(o(280));var t=e.stateNode;t&&(t=ka(t),xe(e.stateNode,e.type,t))}}function Ce(e){Se?Ee?Ee.push(e):Ee=[e]:Se=e}function Te(){if(Se){var e=Se,t=Ee;if(Ee=Se=null,_e(e),t)for(e=0;e >>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function ft(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~a;0!==s?r=dt(s):0!==(o&=i)&&(r=dt(o))}else 0!==(i=n&~a)?r=dt(i):0!==o&&(r=dt(o));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&a)&&((a=r&-r)>=(o=t&-t)||16===a&&0!=(4194240&o)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0 n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),a=1< =Rn),Fn=String.fromCharCode(32),Bn=!1;function zn(e,t){switch(e){case"keyup":return-1!==jn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Hn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Vn(e,t,n,r){Ce(r),0<(t=Wr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Wn=null,Gn=null;function qn(e){Fr(e,0)}function Kn(e){if(G(wa(e)))return e}function Yn(e,t){if("change"===e)return t}var Qn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9 =t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function fr(){for(var e=window,t=q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=q((e=t.contentWindow).document)}return t}function pr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function gr(e){var t=fr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&pr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=void 0===r.end?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=ur(n,o);var i=ur(n,r);a&&i&&(1!==e.rangeCount||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n =document.documentMode,mr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==mr||mr!==q(r)||("selectionStart"in(r=mr)&&pr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Wr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Sr={},Er={};function _r(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Er)return Sr[e]=n[t];return e}u&&(Er=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Cr=_r("animationend"),Tr=_r("animationiteration"),Ar=_r("animationstart"),Nr=_r("transitionend"),Lr=new Map,Pr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Or(e,t){Lr.set(e,t),l(t,[e])}for(var jr=0;jr Sa||(e.current=xa[Sa],xa[Sa]=null,Sa--)}function Ca(e,t){Sa++,xa[Sa]=e.current,e.current=t}var Ta={},Aa=Ea(Ta),Na=Ea(!1),La=Ta;function Pa(e,t){var n=e.type.contextTypes;if(!n)return Ta;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Oa(e){return null!=(e=e.childContextTypes)}function ja(){_a(Na),_a(Aa)}function Ia(e,t,n){if(Aa.current!==Ta)throw Error(o(168));Ca(Aa,t),Ca(Na,n)}function Ra(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in t))throw Error(o(108,H(e)||"Unknown",a));return D({},n,r)}function Ma(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ta,La=Aa.current,Ca(Aa,e),Ca(Na,Na.current),!0}function Da(e,t,n){var r=e.stateNode;if(!r)throw Error(o(169));n?(e=Ra(e,t,La),r.__reactInternalMemoizedMergedChildContext=e,_a(Na),_a(Aa),Ca(Aa,e)):_a(Na),Ca(Na,n)}var Fa=null,Ba=!1,za=!1;function $a(e){null===Fa?Fa=[e]:Fa.push(e)}function Ua(){if(!za&&null!==Fa){za=!0;var e=0,t=vt;try{var n=Fa;for(vt=1;e >=i,a-=i,Ya=1<<32-it(t)+a|n<h?(m=d,d=null):m=d.sibling;var b=p(a,d,s[h],l);if(null===b){null===d&&(d=m);break}e&&d&&null===b.alternate&&t(a,d),o=i(b,o,h),null===u?c=b:u.sibling=b,u=b,d=m}if(h===s.length)return n(a,d),ao&&Xa(a,h),c;if(null===d){for(;h m?(b=h,h=null):b=h.sibling;var v=p(a,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(a,h),s=i(v,s,m),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(a,h),ao&&Xa(a,m),u;if(null===h){for(;!y.done;m++,y=l.next())null!==(y=f(a,y.value,c))&&(s=i(y,s,m),null===d?u=y:d.sibling=y,d=y);return ao&&Xa(a,m),u}for(h=r(a,h);!y.done;m++,y=l.next())null!==(y=g(h,a,m,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?m:y.key),s=i(y,s,m),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(a,e)})),ao&&Xa(a,m),u}return function e(r,o,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=o;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(o=a(u,i.props.children)).return=r,r=o;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===O&&Ko(c)===u.type){n(r,u.sibling),(o=a(u,i.props)).ref=Go(r,u,i),o.return=r,r=o;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((o=Mc(i.props.children,r.mode,l,i.key)).return=r,r=o):((l=Rc(i.type,i.key,i.props,null,r.mode,l)).ref=Go(r,o,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==o;){if(o.key===u){if(4===o.tag&&o.stateNode.containerInfo===i.containerInfo&&o.stateNode.implementation===i.implementation){n(r,o.sibling),(o=a(o,i.children||[])).return=r,r=o;break e}n(r,o);break}t(r,o),o=o.sibling}(o=Bc(i,r.mode,l)).return=r,r=o}return s(r);case O:return e(r,o,(u=i._init)(i._payload),l)}if(te(i))return h(r,o,i,l);if(R(i))return m(r,o,i,l);qo(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==o&&6===o.tag?(n(r,o.sibling),(o=a(o,i)).return=r,r=o):(n(r,o),(o=Fc(i,r.mode,l)).return=r,r=o),s(r)):n(r,o)}}var Qo=Yo(!0),Xo=Yo(!1),Jo={},ei=Ea(Jo),ti=Ea(Jo),ni=Ea(Jo);function ri(e){if(e===Jo)throw Error(o(174));return e}function ai(e,t){switch(Ca(ni,t),Ca(ti,e),Ca(ei,Jo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}_a(ei),Ca(ei,t)}function oi(){_a(ei),_a(ti),_a(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(Ca(ti,e),Ca(ei,n))}function si(e){ti.current===e&&(_a(ei),_a(ti))}var li=Ea(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e n?n:4,e(!0);var r=pi.transition;pi.transition={};try{e(!1),t()}finally{vt=n,pi.transition=r}}function es(){return Ti().memoizedState}function ts(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))as(t,n);else if(null!==(n=No(e,t,n,r))){rc(n,e,r,tc()),os(n,t,r)}}function ns(e,t,n){var r=nc(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))as(t,a);else{var o=e.alternate;if(0===e.lanes&&(null===o||0===o.lanes)&&null!==(o=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(a.next=a,Ao(t)):(a.next=l.next,l.next=a),void(t.interleaved=a)}}catch(c){}null!==(n=No(e,t,a,r))&&(rc(n,e,r,a=tc()),os(n,t,r))}}function rs(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function as(e,t){vi=yi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function os(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var is={readContext:Co,useCallback:xi,useContext:xi,useEffect:xi,useImperativeHandle:xi,useInsertionEffect:xi,useLayoutEffect:xi,useMemo:xi,useReducer:xi,useRef:xi,useState:xi,useDebugValue:xi,useDeferredValue:xi,useTransition:xi,useMutableSource:xi,useSyncExternalStore:xi,useId:xi,unstable_isNewReconciler:!1},ss={readContext:Co,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Co,useEffect:Hi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,$i(4194308,4,Gi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $i(4194308,4,e,t)},useInsertionEffect:function(e,t){return $i(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ci();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,hi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:Fi,useDebugValue:Ki,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=Fi(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hi,a=Ci();if(ao){if(void 0===n)throw Error(o(407));n=n()}else{if(n=t(),null===Ll)throw Error(o(349));0!=(30&gi)||ji(r,t,n)}a.memoizedState=n;var i={value:n,getSnapshot:t};return a.queue=i,Hi(Ri.bind(null,r,i,e),[e]),r.flags|=2048,Bi(9,Ii.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Ll.identifierPrefix;if(ao){var n=Qa;t=":"+t+"R"+(n=(Ya&~(1<<32-it(Ya)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=ki++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Zi,useImperativeHandle:qi,useInsertionEffect:Vi,useLayoutEffect:Wi,useMemo:Qi,useReducer:Ni,useRef:zi,useState:function(){return Ni(Ai)},useDebugValue:Ki,useDeferredValue:function(e){return Xi(Ti(),mi.memoizedState,e)},useTransition:function(){return[Ni(Ai)[0],Ti().memoizedState]},useMutableSource:Pi,useSyncExternalStore:Oi,useId:es,unstable_isNewReconciler:!1},cs={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Zi,useImperativeHandle:qi,useInsertionEffect:Vi,useLayoutEffect:Wi,useMemo:Qi,useReducer:Li,useRef:zi,useState:function(){return Li(Ai)},useDebugValue:Ki,useDeferredValue:function(e){var t=Ti();return null===mi?t.memoizedState=e:Xi(t,mi.memoizedState,e)},useTransition:function(){return[Li(Ai)[0],Ti().memoizedState]},useMutableSource:Pi,useSyncExternalStore:Oi,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function fs(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var ps="function"==typeof WeakMap?WeakMap:Map;function gs(e,t,n){(n=Io(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vl||(Vl=!0,Wl=r),fs(0,t)},n}function hs(e,t,n){(n=Io(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){fs(0,t)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){fs(0,t),"function"!=typeof r&&(null===Gl?Gl=new Set([this]):Gl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function ms(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ps;var a=new Set;r.set(t,a)}else void 0===(a=r.get(t))&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=Cc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ys(e,t,n,r,a){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Io(-1,1)).tag=2,Ro(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=a,e)}var vs=w.ReactCurrentOwner,ws=!1;function ks(e,t,n,r){t.child=null===e?Xo(t,null,n,r):Qo(t,e.child,n,r)}function xs(e,t,n,r,a){n=n.render;var o=t.ref;return _o(t,a),r=Ei(e,t,n,r,o,a),n=_i(),null===e||ws?(ao&&n&&eo(t),t.flags|=1,ks(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Vs(e,t,a))}function Ss(e,t,n,r,a){if(null===e){var o=n.type;return"function"!=typeof o||jc(o)||void 0!==o.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Rc(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=o,Es(e,t,o,r,a))}if(o=e.child,0==(e.lanes&a)){var i=o.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Vs(e,t,a)}return t.flags|=1,(e=Ic(o,r)).ref=t.ref,e.return=t,t.child=e}function Es(e,t,n,r,a){if(null!==e){var o=e.memoizedProps;if(lr(o,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=o,0==(e.lanes&a))return t.lanes=e.lanes,Vs(e,t,a);0!=(131072&e.flags)&&(ws=!0)}}return Ts(e,t,n,r,a)}function _s(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ca(Il,jl),jl|=n;else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ca(Il,jl),jl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==o?o.baseLanes:n,Ca(Il,jl),jl|=r}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Ca(Il,jl),jl|=r;return ks(e,t,a,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ts(e,t,n,r,a){var o=Oa(n)?La:Aa.current;return o=Pa(t,o),_o(t,a),n=Ei(e,t,n,r,o,a),r=_i(),null===e||ws?(ao&&r&&eo(t),t.flags|=1,ks(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Vs(e,t,a))}function As(e,t,n,r,a){if(Oa(n)){var o=!0;Ma(t)}else o=!1;if(_o(t,a),null===t.stateNode)Zs(e,t),Zo(t,n,r),Wo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Co(c):c=Pa(t,c=Oa(n)?La:Aa.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Vo(t,i,r,c),Po=!1;var f=t.memoizedState;i.state=f,Fo(t,r,i,a),l=t.memoizedState,s!==r||f!==l||Na.current||Po?("function"==typeof u&&($o(t,n,u,r),l=t.memoizedState),(s=Po||Ho(t,n,s,r,f,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,jo(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:bo(t.type,s),i.props=c,d=t.pendingProps,f=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Co(l):l=Pa(t,l=Oa(n)?La:Aa.current);var p=n.getDerivedStateFromProps;(u="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||f!==l)&&Vo(t,i,r,l),Po=!1,f=t.memoizedState,i.state=f,Fo(t,r,i,a);var g=t.memoizedState;s!==d||f!==g||Na.current||Po?("function"==typeof p&&($o(t,n,p,r),g=t.memoizedState),(c=Po||Ho(t,n,c,r,f,g,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,g,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,g,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=g),i.props=r,i.state=g,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Ns(e,t,n,r,o,a)}function Ns(e,t,n,r,a,o){Cs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return a&&Da(t,n,!1),Vs(e,t,o);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Qo(t,e.child,null,o),t.child=Qo(t,null,s,o)):ks(e,t,s,o),t.memoizedState=r.state,a&&Da(t,n,!0),t.child}function Ls(e){var t=e.stateNode;t.pendingContext?Ia(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ia(0,t.context,!1),ai(e,t.containerInfo)}function Ps(e,t,n,r,a){return go(),ho(a),t.flags|=256,ks(e,t,n,r),t.child}var Os,js,Is,Rs,Ms={dehydrated:null,treeContext:null,retryLane:0};function Ds(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fs(e,t,n){var r,a=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Ca(li,1&i),null===e)return co(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=a.children,e=a.fallback,s?(a=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&a)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Dc(l,a,0,null),e=Mc(e,a,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Ds(n),t.memoizedState=Ms,e):Bs(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,a,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=ds(Error(o(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,a=t.mode,r=Dc({mode:"visible",children:r.children},a,0,null),(i=Mc(i,a,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Qo(t,e.child,null,s),t.child.memoizedState=Ds(s),t.memoizedState=Ms,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===a.data){if(r=a.nextSibling&&a.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=ds(i=Error(o(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Ll)){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}0!==(a=0!=(a&(r.suspendedLanes|s))?0:a)&&a!==i.retryLane&&(i.retryLane=a,Lo(e,a),rc(r,e,a,-1))}return mc(),zs(e,t,s,r=ds(Error(o(421))))}return"$?"===a.data?(t.flags|=128,t.child=e.child,t=Ac.bind(null,e),a._reactRetry=t,null):(e=i.treeContext,ro=ca(a.nextSibling),no=t,ao=!0,oo=null,null!==e&&(Ga[qa++]=Ya,Ga[qa++]=Qa,Ga[qa++]=Ka,Ya=e.id,Qa=e.overflow,Ka=t),t=Bs(t,r.children),t.flags|=4096,t)}(e,t,l,a,r,i,n);if(s){s=a.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:a.children};return 0==(1&l)&&t.child!==i?((a=t.child).childLanes=0,a.pendingProps=c,t.deletions=null):(a=Ic(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Ic(r,s):(s=Mc(s,l,n,null)).flags|=2,s.return=t,a.return=t,a.sibling=s,t.child=a,a=s,s=t.child,l=null===(l=e.child.memoizedState)?Ds(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Ms,a}return e=(s=e.child).sibling,a=Ic(s,{mode:"visible",children:a.children}),0==(1&t.mode)&&(a.lanes=n),a.return=t,a.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=a,t.memoizedState=null,a}function Bs(e,t){return(t=Dc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ho(r),Qo(t,e.child,null,n),(e=Bs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function $s(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Eo(e.return,t,n)}function Us(e,t,n,r,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function Hs(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(ks(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&$s(e,n,t);else if(19===e.tag)$s(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ca(li,r),0==(1&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),Us(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===ci(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}Us(t,!0,n,null,o);break;case"together":Us(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Zs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Vs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Dl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(o(153));if(null!==t.child){for(n=Ic(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ic(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Ws(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Gs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=14680064&a.subtreeFlags,r|=14680064&a.flags,a.return=e,a=a.sibling;else for(a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function qs(e,t,n){var r=t.pendingProps;switch(to(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Gs(t),null;case 1:case 17:return Oa(t.type)&&ja(),Gs(t),null;case 3:return r=t.stateNode,oi(),_a(Na),_a(Aa),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(fo(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==oo&&(sc(oo),oo=null))),js(e,t),Gs(t),null;case 5:si(t);var a=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Is(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(o(166));return Gs(t),null}if(e=ri(ei.current),fo(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fa]=t,r[pa]=i,e=0!=(1&t.mode),n){case"dialog":Br("cancel",r),Br("close",r);break;case"iframe":case"object":case"embed":Br("load",r);break;case"video":case"audio":for(a=0;a <\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fa]=t,e[pa]=r,Os(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Br("cancel",e),Br("close",e),a=r;break;case"iframe":case"object":case"embed":Br("load",e),a=r;break;case"video":case"audio":for(a=0;a Hl&&(t.flags|=128,r=!0,Ws(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Ws(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!ao)return Gs(t),null}else 2*Qe()-i.renderingStartTime>Hl&&1073741824!==n&&(t.flags|=128,r=!0,Ws(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Qe(),t.sibling=null,n=li.current,Ca(li,r?1&n|2:1&n),t):(Gs(t),null);case 22:case 23:return fc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&jl)&&(Gs(t),6&t.subtreeFlags&&(t.flags|=8192)):Gs(t),null;case 24:case 25:return null}throw Error(o(156,t.tag))}function Ks(e,t){switch(to(t),t.tag){case 1:return Oa(t.type)&&ja(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return oi(),_a(Na),_a(Aa),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(_a(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(o(340));go()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return _a(li),null;case 4:return oi(),null;case 10:return So(t.type._context),null;case 22:case 23:return fc(),null;default:return null}}Os=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},js=function(){},Is=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,ri(ei.current);var o,i=null;switch(n){case"input":a=K(e,a),r=K(e,r),i=[];break;case"select":a=D({},a,{value:void 0}),r=D({},r,{value:void 0}),i=[];break;case"textarea":a=re(e,a),r=re(e,r),i=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&null!=a[u])if("style"===u){var l=a[u];for(o in l)l.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=a?a[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(o in l)!l.hasOwnProperty(o)||c&&c.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in c)c.hasOwnProperty(o)&&l[o]!==c[o]&&(n||(n={}),n[o]=c[o])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Br("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Rs=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ys=!1,Qs=!1,Xs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_c(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){_c(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,void 0!==o&&tl(t,n,o)}a=a.next}while(a!==r)}}function al(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fa],delete t[pa],delete t[ha],delete t[ma],delete t[ba])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,fl=!1;function pl(e,t,n){for(n=n.child;null!==n;)gl(e,t,n),n=n.sibling}function gl(e,t,n){if(ot&&"function"==typeof ot.onCommitFiberUnmount)try{ot.onCommitFiberUnmount(at,n)}catch(s){}switch(n.tag){case 5:Qs||el(n,t);case 6:var r=dl,a=fl;dl=null,pl(e,t,n),fl=a,null!==(dl=r)&&(fl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(fl?(e=dl,n=n.stateNode,8===e.nodeType?la(e.parentNode,n):1===e.nodeType&&la(e,n),Ut(e)):la(dl,n.stateNode));break;case 4:r=dl,a=fl,dl=n.stateNode.containerInfo,fl=!0,pl(e,t,n),dl=r,fl=a;break;case 0:case 11:case 14:case 15:if(!Qs&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,void 0!==i&&(0!=(2&o)||0!=(4&o))&&tl(n,t,i),a=a.next}while(a!==r)}pl(e,t,n);break;case 1:if(!Qs&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){_c(n,t,s)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:1&n.mode?(Qs=(r=Qs)||null!==n.memoizedState,pl(e,t,n),Qs=r):pl(e,t,n);break;default:pl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xs),t.forEach((function(t){var r=Nc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function ml(e,t){var n=t.deletions;if(null!==n)for(var r=0;r a&&(a=s),r&=~i}if(r=a,10<(r=(120>(r=Qe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ra(xc.bind(null,e,$l,Zl),r);break}xc(e,$l,Zl);break;default:throw Error(o(329))}}}return ac(e,Qe()),e.callbackNode===n?oc.bind(null,e):null}function ic(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=$l,$l=n,null!==t&&sc(t)),e}function sc(e){null===$l?$l=e:$l.push.apply($l,e)}function lc(e,t){for(t&=~Bl,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0 e?16:e,null===Kl)var r=!1;else{if(e=Kl,Kl=null,Yl=0,0!=(6&Nl))throw Error(o(331));var a=Nl;for(Nl|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var c=0;c Qe()-Ul?pc(e,0):Bl|=n),ac(e,t)}function Tc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=Lo(e,t))&&(bt(e,t,n),ac(e,n))}function Ac(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Tc(e,n)}function Nc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(o(314))}null!==r&&r.delete(t),Tc(e,n)}function Lc(e,t){return Ge(e,t)}function Pc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Oc(e,t,n,r){return new Pc(e,t,n,r)}function jc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ic(e,t){var n=e.alternate;return null===n?((n=Oc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Rc(e,t,n,r,a,i){var s=2;if(r=e,"function"==typeof e)jc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Mc(n.children,a,i,t);case E:s=8,a|=8;break;case _:return(e=Oc(12,n,t,2|a)).elementType=_,e.lanes=i,e;case N:return(e=Oc(13,n,t,a)).elementType=N,e.lanes=i,e;case L:return(e=Oc(19,n,t,a)).elementType=L,e.lanes=i,e;case j:return Dc(n,a,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case A:s=11;break e;case P:s=14;break e;case O:s=16,r=null;break e}throw Error(o(130,null==e?e:typeof e,""))}return(t=Oc(s,n,t,a)).elementType=e,t.type=r,t.lanes=i,t}function Mc(e,t,n,r){return(e=Oc(7,e,r,t)).lanes=n,e}function Dc(e,t,n,r){return(e=Oc(22,e,r,t)).elementType=j,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Oc(6,e,null,t)).lanes=n,e}function Bc(e,t,n){return(t=Oc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=mt(0),this.expirationTimes=mt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mt(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function $c(e,t,n,r,a,o,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===o&&(t|=8)):t=0,o=Oc(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Oo(o),e}function Uc(e){if(!e)return Ta;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(o(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Oa(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(o(171))}if(1===e.tag){var n=e.type;if(Oa(n))return Ra(e,n,t)}return t}function Hc(e,t,n,r,a,o,i,s,l){return(e=$c(n,r,!0,e,0,o,0,s,l)).context=Uc(null),n=e.current,(o=Io(r=tc(),a=nc(n))).callback=null!=t?t:null,Ro(n,o,a),e.current.lanes=a,bt(e,a,r),ac(e,r),e}function Zc(e,t,n,r){var a=t.current,o=tc(),i=nc(a);return n=Uc(n),null===t.context?t.context=n:t.pendingContext=n,(t=Io(o,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ro(a,t,i))&&(rc(e,a,i,o),Mo(e,a,i)),i}function Vc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Wc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n {"use strict";var r=n(1542);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},1542:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(3577)},4335:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!o(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!o(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!o(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},2883:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(7378),a=n(3615),o=n.n(a),i=n(4335),s=n.n(i),l=n(3996),c=n.n(l),u=n(4445),d=n.n(u);function f(){return f=Object.assign||function(e){for(var t=1;t =0||(a[n]=e[n]);return a}var m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(m).map((function(e){return m[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=S(e,m.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[m.BASE]})).map((function(e){return e[m.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a /g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},F=function(e,t,n){switch(e){case m.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=M(n,a),[r.createElement(m.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=R(n),o=L(t);return a?"<"+e+' data-rh="true" '+a+">"+I(o,r)+""+e+">":"<"+e+' data-rh="true">'+I(o,r)+""+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+I(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===j.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+""+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var g=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=P(e.metaTags,v),o=P(t,b),i=P(n,y);return{priorityMethods:{toComponent:function(){return[].concat(D(m.META,a.priority),D(m.LINK,o.priority),D(m.SCRIPT,i.priority))},toString:function(){return F(m.META,a.priority,r)+" "+F(m.LINK,o.priority,r)+" "+F(m.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=g.priorityMethods,u=g.linkTags,d=g.metaTags,f=g.scriptTags}return{priority:p,base:F(m.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",a,r),link:F(m.LINK,u,r),meta:F(m.META,d,r),noscript:F(m.NOSCRIPT,o,r),script:F(m.SCRIPT,f,r),style:F(m.STYLE,i,r),title:F(m.TITLE,{title:l,titleAttributes:c},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),Z="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=Z,V.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var W=function(e,t){var n,r=document.head||document.querySelector(m.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},G=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),s=0;s =0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;G(m.BODY,e.bodyAttributes),G(m.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=L(e)),G(m.TITLE,t)}(u,d);var f={baseTag:W(m.BASE,n),linkTags:W(m.LINK,a),metaTags:W(m.META,o),noscriptTags:W(m.NOSCRIPT,i),scriptTags:W(m.SCRIPT,l),styleTags:W(m.STYLE,c)},p={},g={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(g[e]=f[e].oldTags)})),t&&t(),s(e,p,g)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case m.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case m.BODY:return f({},a,{bodyAttributes:f({},o)});case m.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=h(r,Q),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,o),l){case m.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:s,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),a=f({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof $||(o=new $(o.context,o.instances)),o?r.createElement(Y,f({},a,{context:o.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},8702:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case o:case s:case i:case p:return e;default:switch(e=e&&e.$$typeof){case c:case f:case m:case h:case l:return e;default:return t}}case a:return t}}}function x(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=m,t.Memo=h,t.Portal=a,t.Profiler=s,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===f},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===m},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===s||e===i||e===p||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===f||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9185:(e,t,n)=>{"use strict";e.exports=n(8702)},1237:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t {"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(3620),a=n(5773),o=n(7378);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},4289:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>m});var r=n(3620),a=n(351),o=n(7378),i=n(5036),s=n(5773),l=n(808),c=n(2215),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a {"use strict";n.d(t,{AW:()=>E,F0:()=>v,LX:()=>S,TH:()=>j,k6:()=>O,rs:()=>L,s6:()=>y});var r=n(351),a=n(7378),o=n(3615),i=n.n(o),s=n(5036),l=n(2215),c=n(5773),u=n(4039),d=n.n(u),f=(n(9185),n(808)),p=(n(5839),1073741823),g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=a.createContext||function(e,t){var n,o,s="__create-react-context-"+function(){var e="__global_unique_id__";return g[e]=(g[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i{var r=n(5182);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(s+=e.slice(i,p),i=p+d.length,f)s+=f[1];else{var g=e[i],h=n[2],m=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=h&&null!=g&&g!==h,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=b||y;r.push({name:m||o++,prefix:h||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return i {"use strict";var r=n(7378),a=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:a,type:e,key:c,ref:u,props:o,_owner:s.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},1535:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,m={};function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||g}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,h(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var a,o={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,a)&&!E.hasOwnProperty(a)&&(o[a]=t[a]);var l=arguments.length-2;if(1===l)o.children=r;else if(1 {"use strict";e.exports=n(1535)},4246:(e,t,n)=>{"use strict";e.exports=n(1426)},3323:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0 >>1,a=e[r];if(!(0 >>1;ro(l,n))co(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(co(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function o(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,f=null,p=3,g=!1,h=!1,m=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)a(u);else{if(!(t.startTime<=e))break;a(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(m=!1,w(e),!h)if(null!==r(c))h=!0,j(x);else{var t=r(u);null!==t&&I(k,t.startTime-e)}}function x(e,n){h=!1,m&&(m=!1,y(C),C=-1),g=!0;var o=p;try{for(w(n),f=r(c);null!==f&&(!(f.expirationTime>n)||e&&!N());){var i=f.callback;if("function"==typeof i){f.callback=null,p=f.priorityLevel;var s=i(f.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?f.callback=s:f===r(c)&&a(c),w(n)}else a(c);f=r(c)}if(null!==f)var l=!0;else{var d=r(u);null!==d&&I(k,d.startTime-n),l=!1}return l}finally{f=null,p=o,g=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,E=!1,_=null,C=-1,T=5,A=-1;function N(){return!(t.unstable_now()-A e||125 i?(e.sortIndex=o,n(u,e),null===r(c)&&e===r(u)&&(m?(y(C),C=-1):m=!0,I(k,o-i))):(e.sortIndex=s,n(c,e),h||g||(h=!0,j(x))),e},t.unstable_shouldYield=N,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},1102:(e,t,n)=>{"use strict";e.exports=n(3323)},4445:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l {"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t r})},351:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},808:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r =0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},624:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t a});const a=function(){for(var e,t,n=0,a="",o=arguments.length;n {"use strict";n.d(t,{p1:()=>T,y$:()=>ee});var r,a,o,i,s,l,c,u=n(7378),d=n(624),f=Object.create,p=Object.defineProperty,g=Object.defineProperties,h=Object.getOwnPropertyDescriptor,m=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,x=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&x(e,n,t[n]);if(y)for(var n of y(t))k.call(t,n)&&x(e,n,t[n]);return e},E=(e,t)=>g(e,m(t)),_=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&y)for(var r of y(e))t.indexOf(r)<0&&k.call(e,r)&&(n[r]=e[r]);return n},C=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=x.value.length,x=x.next){var E=x.value;if(t.length>e.length)return;if(!(E instanceof a)){var _,C=1;if(y){if(!(_=o(k,S,e,b))||_.index>=e.length)break;var T=_.index,A=_.index+_[0].length,N=S;for(N+=x.value.length;T>=N;)N+=(x=x.next).value.length;if(S=N-=x.value.length,x.value instanceof a)continue;for(var L=x;L!==t.tail&&(Nd.reach&&(d.reach=I);var R=x.prev;if(O&&(R=l(t,R,O),S+=O.length),c(t,R,C),x=l(t,R,new a(f,m?r.tokenize(P,m):P,v,P)),j&&l(t,x,j),C>1){var M={cause:f+","+g,reach:I};i(e,t,n,x.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a "+o.content+""+o.tag+">"},r}();t.exports=n,n.default=n}},function(){return a||(0,r[b(r)[0]])((a={exports:{}}).exports,a),a.exports}),T=((e,t,n)=>(n=null!=e?f(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of b(t))w.call(e,a)||a===n||p(e,a,{get:()=>t[a],enumerable:!(r=h(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(C());T.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},T.languages.markup.tag.inside["attr-value"].inside.entity=T.languages.markup.entity,T.languages.markup.doctype.inside["internal-subset"].inside=T.languages.markup,T.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(T.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:T.languages[t]},n.cdata=/^$/i,{"included-cdata":{pattern://i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:T.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},T.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(T.languages.markup.tag,"addAttribute",{value:function(e,t){T.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:T.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),T.languages.html=T.languages.markup,T.languages.mathml=T.languages.markup,T.languages.svg=T.languages.markup,T.languages.xml=T.languages.extend("markup",{}),T.languages.ssml=T.languages.xml,T.languages.atom=T.languages.xml,T.languages.rss=T.languages.xml,o=T,i={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},l="(?:[^\\\\-]|"+(s=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",l=RegExp(l+"-"+l),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},o.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:l,inside:{escape:s,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":i,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:s}},"special-escape":i,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:s,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},T.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},T.languages.javascript=T.languages.extend("clike",{"class-name":[T.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),T.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,T.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:T.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:T.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:T.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:T.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:T.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),T.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:T.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),T.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),T.languages.markup&&(T.languages.markup.tag.addInlined("script","javascript"),T.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),T.languages.js=T.languages.javascript,T.languages.actionscript=T.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<|>>?>?|[!=]=?)=?|[~?@]/}),T.languages.actionscript["class-name"].alias="function",delete T.languages.actionscript.parameter,delete T.languages.actionscript["literal-property"],T.languages.markup&&T.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:T.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(T),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},a="doc-comment";if(o=e.languages[t]){var o,i=o[a];if((i=i||(o=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[a])instanceof RegExp&&(i=o[a]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s |\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(T),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-] )(?:[ \t]*(?:(?![#:]) |: ))*/.source.replace(/ /g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s< >[ \t]+)?)(?:< >)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/< >/g,(function(){return r})).replace(/< >/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s< >[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/< >/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:< >[ \t]+)?)< >(?=\s*:\s)/.source.replace(/< >/g,(function(){return r})).replace(/< >/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(T),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/ /g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_) |_(?:(?!_)