From a9687f85db0a3cbc24b0b65ac95a9c4cc4c762a0 Mon Sep 17 00:00:00 2001 From: jinhyung-r <113372719+jinhyung-r@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:55:42 +0900 Subject: [PATCH 01/10] Create jekyll.yml Signed-off-by: jinhyung-r <113372719+jinhyung-r@users.noreply.github.com> --- .github/workflows/jekyll.yml | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/jekyll.yml diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml new file mode 100644 index 00000000000..68520b5aebd --- /dev/null +++ b/.github/workflows/jekyll.yml @@ -0,0 +1,64 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Ruby + uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0 + with: + ruby-version: '3.1' # Not needed with a .ruby-version file + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + cache-version: 0 # Increment this number if you need to re-download cached gems + - name: Setup Pages + id: pages + uses: actions/configure-pages@v5 + - name: Build with Jekyll + # Outputs to the './_site' directory by default + run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" + env: + JEKYLL_ENV: production + - name: Upload artifact + # Automatically uploads an artifact from the './_site' directory by default + uses: actions/upload-pages-artifact@v3 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From eaeb0fa58018b5f4adf62462720d63c8351b2cf1 Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 14 Oct 2024 15:05:50 +0900 Subject: [PATCH 02/10] feat: test post --- .gitignore | 19 +++++++------------ _posts/2024-10-14-test-post.md | 10 ++++++++++ _sass/dist/bootstrap.css | 5 +++++ assets/js/dist/app.min.js | 7 +++++++ assets/js/dist/categories.min.js | 4 ++++ assets/js/dist/commons.min.js | 4 ++++ assets/js/dist/home.min.js | 4 ++++ assets/js/dist/misc.min.js | 4 ++++ assets/js/dist/page.min.js | 4 ++++ assets/js/dist/post.min.js | 4 ++++ assets/js/dist/sw.min.js | 7 +++++++ 11 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 _posts/2024-10-14-test-post.md create mode 100644 _sass/dist/bootstrap.css create mode 100644 assets/js/dist/app.min.js create mode 100644 assets/js/dist/categories.min.js create mode 100644 assets/js/dist/commons.min.js create mode 100644 assets/js/dist/home.min.js create mode 100644 assets/js/dist/misc.min.js create mode 100644 assets/js/dist/page.min.js create mode 100644 assets/js/dist/post.min.js create mode 100644 assets/js/dist/sw.min.js diff --git a/.gitignore b/.gitignore index 0082d90041b..9003690048c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,26 +2,21 @@ .bundle vendor Gemfile.lock - + # Jekyll cache .jekyll-cache -.jekyll-metadata _site - + # RubyGems *.gem - + # NPM dependencies node_modules package-lock.json - + # IDE configurations .idea -.vscode/* -!.vscode/settings.json -!.vscode/extensions.json -!.vscode/tasks.json - +.vscode + # Misc -_sass/dist -assets/js/dist +# assets/js/dist \ No newline at end of file diff --git a/_posts/2024-10-14-test-post.md b/_posts/2024-10-14-test-post.md new file mode 100644 index 00000000000..6c477eb0199 --- /dev/null +++ b/_posts/2024-10-14-test-post.md @@ -0,0 +1,10 @@ +## 2024 10 14 블로그 포스트 테스트 + +### 마크다운 형식 테스트 + +``` +코드 블록 +``` + +``코드블록 `` + diff --git a/_sass/dist/bootstrap.css b/_sass/dist/bootstrap.css new file mode 100644 index 00000000000..6ffbb377083 --- /dev/null +++ b/_sass/dist/bootstrap.css @@ -0,0 +1,5 @@ +@charset "UTF-8";/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-success:#198754;--bs-danger:#dc3545;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-bg:#e9ecef;--bs-tertiary-bg:#f8f9fa;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}.small,small{font-size:.875em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button{text-transform:none}[role=button]{cursor:pointer}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}iframe{border:0}summary{display:list-item;cursor:pointer}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.list-unstyled{padding-left:0;list-style:none}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.figure{display:inline-block}.container{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}@media (min-width:1400px){.container{max-width:1320px}}:root{}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-1>*{flex:0 0 auto;width:100%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.g-0{--bs-gutter-x:0}.g-0{--bs-gutter-y:0}.g-4{--bs-gutter-x:1.5rem}.g-4{--bs-gutter-y:1.5rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}}@media (min-width:992px){.col-lg{flex:1 0 0%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-tooltip,.was-validated :valid~.valid-tooltip{display:block}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-tooltip{display:block}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-text:last-child{margin-bottom:0}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.toast{--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast:not(.show){display:none}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-middle{vertical-align:middle!important}.overflow-hidden{overflow:hidden!important}.d-block{display:block!important}.d-flex{display:flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-100{height:100%!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-grow-1{flex-grow:1!important}.flex-wrap{flex-wrap:wrap!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.pt-0{padding-top:0!important}.pt-2{padding-top:.5rem!important}.pe-1{padding-right:.25rem!important}.pe-4{padding-right:1.5rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-4{padding-bottom:1.5rem!important}.ps-0{padding-left:0!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-nowrap{white-space:nowrap!important}.text-muted{color:var(--bs-secondary-color)!important}.pe-none{pointer-events:none!important}.rounded-circle{border-radius:50%!important}.invisible{visibility:hidden!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.me-sm-4{margin-right:1.5rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}}@media (min-width:768px){.flex-md-row-reverse{flex-direction:row-reverse!important}.mt-md-0{margin-top:0!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.justify-content-lg-between{justify-content:space-between!important}.align-items-lg-center{align-items:center!important}.ms-lg-0{margin-left:0!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.ps-lg-2{padding-left:.5rem!important}}@media (min-width:1200px){.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}}@media (min-width:1400px){.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}} \ No newline at end of file diff --git a/assets/js/dist/app.min.js b/assets/js/dist/app.min.js new file mode 100644 index 00000000000..9cb120230de --- /dev/null +++ b/assets/js/dist/app.min.js @@ -0,0 +1,7 @@ +--- +permalink: /:basename +--- +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";const e=new Map;var t={set(t,n,r){e.has(t)||e.set(t,new Map);const o=e.get(t);o.has(n)||0===o.size?o.set(n,r):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(o.keys())[0]}.`)},get:(t,n)=>e.has(t)&&e.get(t).get(n)||null,remove(t,n){if(!e.has(t))return;const r=e.get(t);r.delete(n),0===r.size&&e.delete(t)}};const n="transitionend",r=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),o=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),i=e=>o(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(r(e)):null,s=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),a=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,l=[],c=function(e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):t},u=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void c(e);const r=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const r=Number.parseFloat(t),o=Number.parseFloat(n);return r||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let o=!1;const i=r=>{let{target:s}=r;s===t&&(o=!0,t.removeEventListener(n,i),c(e))};t.addEventListener(n,i),setTimeout((()=>{o||t.dispatchEvent(new Event(n))}),r)},d=/[^.]*(?=\..*)\.|.*/,f=/\..*/,h=/::\d+$/,g={};let m=1;const p={mouseenter:"mouseover",mouseleave:"mouseout"},b=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function v(e,t){return t&&`${t}::${m++}`||e.uidEvent||m++}function _(e){const t=v(e);return e.uidEvent=t,g[t]=g[t]||{},g[t]}function y(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function E(e,t,n){const r="string"==typeof t,o=r?n:t||n;let i=C(e);return b.has(i)||(i=e),[r,o,i]}function w(e,t,n,r,o){if("string"!=typeof t||!e)return;let[i,s,a]=E(t,n,r);if(t in p){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const l=_(e),c=l[a]||(l[a]={}),u=y(c,s,i?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=v(s,t.replace(d,"")),h=i?function(e,t,n){return function r(o){const i=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of i)if(a===s)return T(o,{delegateTarget:s}),r.oneOff&&O.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(r){return T(r,{delegateTarget:e}),n.oneOff&&O.off(e,r.type,t),t.apply(e,[r])}}(e,s);h.delegationSelector=i?n:null,h.callable=s,h.oneOff=o,h.uidEvent=f,c[f]=h,e.addEventListener(a,h,i)}function A(e,t,n,r,o){const i=y(t[n],r,o);i&&(e.removeEventListener(n,i,Boolean(o)),delete t[n][i.uidEvent])}function S(e,t,n,r){const o=t[n]||{};for(const[i,s]of Object.entries(o))i.includes(r)&&A(e,t,n,s.callable,s.delegationSelector)}function C(e){return e=e.replace(f,""),p[e]||e}const O={on(e,t,n,r){w(e,t,n,r,!1)},one(e,t,n,r){w(e,t,n,r,!0)},off(e,t,n,r){if("string"!=typeof t||!e)return;const[o,i,s]=E(t,n,r),a=s!==t,l=_(e),c=l[s]||{},u=t.startsWith(".");if(void 0===i){if(u)for(const n of Object.keys(l))S(e,l,n,t.slice(1));for(const[n,r]of Object.entries(c)){const o=n.replace(h,"");a&&!t.includes(o)||A(e,l,s,r.callable,r.delegationSelector)}}else{if(!Object.keys(c).length)return;A(e,l,s,i,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const r=a();let o=null,i=!0,s=!0,l=!1;t!==C(t)&&r&&(o=r.Event(t,n),r(e).trigger(o),i=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),l=o.isDefaultPrevented());const c=T(new Event(t,{bubbles:i,cancelable:!0}),n);return l&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function T(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,r]of Object.entries(t))try{e[n]=r}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>r})}return e}function $(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function N(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const j={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${N(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${N(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const r of n){let n=r.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),t[n]=$(e.dataset[r])}return t},getDataAttribute:(e,t)=>$(e.getAttribute(`data-bs-${N(t)}`))};class L{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=o(t)?j.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...o(t)?j.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[r,i]of Object.entries(t)){const t=e[r],s=o(t)?"element":null==(n=t)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(i).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${r}" provided type "${s}" but expected type "${i}".`)}var n}}class D extends L{constructor(e,n){super(),(e=i(e))&&(this._element=e,this._config=this._getConfig(n),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),O.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){u(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return t.get(i(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const I=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map((e=>r(e))).join(","):null},k={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let r=e.parentNode.closest(t);for(;r;)n.push(r),r=r.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!s(e)&&(e=>{if(!o(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t})(e)))},getSelectorFromElement(e){const t=I(e);return t&&k.findOne(t)?t:null},getElementFromSelector(e){const t=I(e);return t?k.findOne(t):null},getMultipleElementsFromSelector(e){const t=I(e);return t?k.find(t):[]}},M=".bs.toast",K=`mouseover${M}`,P=`mouseout${M}`,q=`focusin${M}`,x=`focusout${M}`,W=`hide${M}`,Y=`hidden${M}`,F=`show${M}`,R=`shown${M}`,V="hide",Q="show",z="showing",B={animation:"boolean",autohide:"boolean",delay:"number"},H={animation:!0,autohide:!0,delay:5e3};class U extends D{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return H}static get DefaultType(){return B}static get NAME(){return"toast"}show(){if(O.trigger(this._element,F).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");this._element.classList.remove(V),this._element.offsetHeight,this._element.classList.add(Q,z),this._queueCallback((()=>{this._element.classList.remove(z),O.trigger(this._element,R),this._maybeScheduleHide()}),this._element,this._config.animation)}hide(){if(!this.isShown())return;if(O.trigger(this._element,W).defaultPrevented)return;this._element.classList.add(z),this._queueCallback((()=>{this._element.classList.add(V),this._element.classList.remove(z,Q),O.trigger(this._element,Y)}),this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Q),super.dispose()}isShown(){return this._element.classList.contains(Q)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){O.on(this._element,K,(e=>this._onInteraction(e,!0))),O.on(this._element,P,(e=>this._onInteraction(e,!1))),O.on(this._element,q,(e=>this._onInteraction(e,!0))),O.on(this._element,x,(e=>this._onInteraction(e,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each((function(){const t=U.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}var G,J;if(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"hide";const n=`click.dismiss${e.EVENT_KEY}`,r=e.NAME;O.on(document,n,`[data-bs-dismiss="${r}"]`,(function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),s(this))return;const o=k.getElementFromSelector(this)||this.closest(`.${r}`);e.getOrCreateInstance(o)[t]()}))}(U),G=U,J=()=>{const e=a();if(e){const t=G.NAME,n=e.fn[t];e.fn[t]=G.jQueryInterface,e.fn[t].Constructor=G,e.fn[t].noConflict=()=>(e.fn[t]=n,G.jQueryInterface)}},"loading"===document.readyState?(l.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of l)e()})),l.push(J)):J(),"serviceWorker"in navigator){const e=new URL(document.currentScript.src),t=e.searchParams.get("register"),n=e.searchParams.get("baseurl");if(t){const e=`${n}/sw.min.js`,t=document.getElementById("notification"),r=t.querySelector(".toast-body>button"),o=U.getOrCreateInstance(t);navigator.serviceWorker.register(e).then((e=>{e.waiting&&o.show(),e.addEventListener("updatefound",(()=>{e.installing.addEventListener("statechange",(()=>{e.waiting&&navigator.serviceWorker.controller&&o.show()}))})),r.addEventListener("click",(()=>{e.waiting&&e.waiting.postMessage("SKIP_WAITING"),o.hide()}))}));let i=!1;navigator.serviceWorker.addEventListener("controllerchange",(()=>{i||(window.location.reload(),i=!0)}))}else navigator.serviceWorker.getRegistrations().then((function(e){for(let t of e)t.unregister()}))}}(); diff --git a/assets/js/dist/categories.min.js b/assets/js/dist/categories.min.js new file mode 100644 index 00000000000..bc294dfa289 --- /dev/null +++ b/assets/js/dist/categories.min.js @@ -0,0 +1,4 @@ +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";var e="top",t="bottom",n="right",i="left",o="auto",r=[e,t,n,i],s="start",a="end",l="clippingParents",c="viewport",u="popper",f="reference",d=r.reduce((function(e,t){return e.concat([t+"-"+s,t+"-"+a])}),[]),p=[].concat(r,[o]).reduce((function(e,t){return e.concat([t,t+"-"+s,t+"-"+a])}),[]),h="beforeRead",g="read",m="afterRead",v="beforeMain",b="main",y="afterMain",_="beforeWrite",w="write",E="afterWrite",x=[h,g,m,v,b,y,_,w,E];function O(e){return e?(e.nodeName||"").toLowerCase():null}function A(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function C(e){return e instanceof A(e).Element||e instanceof Element}function L(e){return e instanceof A(e).HTMLElement||e instanceof HTMLElement}function T(e){return"undefined"!=typeof ShadowRoot&&(e instanceof A(e).ShadowRoot||e instanceof ShadowRoot)}var S={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];L(o)&&O(o)&&(Object.assign(o.style,n),Object.keys(i).forEach((function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});L(i)&&O(i)&&(Object.assign(i.style,r),Object.keys(o).forEach((function(e){i.removeAttribute(e)})))}))}},requires:["computeStyles"]};function j(e){return e.split("-")[0]}var k=Math.max,D=Math.min,P=Math.round;function N(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function M(){return!/^((?!chrome|android).)*safari/i.test(N())}function B(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&L(e)&&(o=e.offsetWidth>0&&P(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&P(i.height)/e.offsetHeight||1);var s=(C(e)?A(e):window).visualViewport,a=!M()&&n,l=(i.left+(a&&s?s.offsetLeft:0))/o,c=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:c,right:l+u,bottom:c+f,left:l,x:l,y:c}}function I(e){var t=B(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function F(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&T(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function H(e){return A(e).getComputedStyle(e)}function $(e){return["table","td","th"].indexOf(O(e))>=0}function W(e){return((C(e)?e.ownerDocument:e.document)||window.document).documentElement}function q(e){return"html"===O(e)?e:e.assignedSlot||e.parentNode||(T(e)?e.host:null)||W(e)}function z(e){return L(e)&&"fixed"!==H(e).position?e.offsetParent:null}function R(e){for(var t=A(e),n=z(e);n&&$(n)&&"static"===H(n).position;)n=z(n);return n&&("html"===O(n)||"body"===O(n)&&"static"===H(n).position)?t:n||function(e){var t=/firefox/i.test(N());if(/Trident/i.test(N())&&L(e)&&"fixed"===H(e).position)return null;var n=q(e);for(T(n)&&(n=n.host);L(n)&&["html","body"].indexOf(O(n))<0;){var i=H(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function V(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Y(e,t,n){return k(e,D(t,n))}function U(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function K(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(o){var s,a=o.state,l=o.name,c=o.options,u=a.elements.arrow,f=a.modifiersData.popperOffsets,d=j(a.placement),p=V(d),h=[i,n].indexOf(d)>=0?"height":"width";if(u&&f){var g=function(e,t){return U("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:K(e,r))}(c.padding,a),m=I(u),v="y"===p?e:i,b="y"===p?t:n,y=a.rects.reference[h]+a.rects.reference[p]-f[p]-a.rects.popper[h],_=f[p]-a.rects.reference[p],w=R(u),E=w?"y"===p?w.clientHeight||0:w.clientWidth||0:0,x=y/2-_/2,O=g[v],A=E-m[h]-g[b],C=E/2-m[h]/2+x,L=Y(O,C,A),T=p;a.modifiersData[l]=((s={})[T]=L,s.centerOffset=L-C,s)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&F(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function X(e){return e.split("-")[1]}var G={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J(o){var r,s=o.popper,l=o.popperRect,c=o.placement,u=o.variation,f=o.offsets,d=o.position,p=o.gpuAcceleration,h=o.adaptive,g=o.roundOffsets,m=o.isFixed,v=f.x,b=void 0===v?0:v,y=f.y,_=void 0===y?0:y,w="function"==typeof g?g({x:b,y:_}):{x:b,y:_};b=w.x,_=w.y;var E=f.hasOwnProperty("x"),x=f.hasOwnProperty("y"),O=i,C=e,L=window;if(h){var T=R(s),S="clientHeight",j="clientWidth";if(T===A(s)&&"static"!==H(T=W(s)).position&&"absolute"===d&&(S="scrollHeight",j="scrollWidth"),c===e||(c===i||c===n)&&u===a)C=t,_-=(m&&T===L&&L.visualViewport?L.visualViewport.height:T[S])-l.height,_*=p?1:-1;if(c===i||(c===e||c===t)&&u===a)O=n,b-=(m&&T===L&&L.visualViewport?L.visualViewport.width:T[j])-l.width,b*=p?1:-1}var k,D=Object.assign({position:d},h&&G),N=!0===g?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:P(n*o)/o||0,y:P(i*o)/o||0}}({x:b,y:_},A(s)):{x:b,y:_};return b=N.x,_=N.y,p?Object.assign({},D,((k={})[C]=x?"0":"",k[O]=E?"0":"",k.transform=(L.devicePixelRatio||1)<=1?"translate("+b+"px, "+_+"px)":"translate3d("+b+"px, "+_+"px, 0)",k)):Object.assign({},D,((r={})[C]=x?_+"px":"",r[O]=E?b+"px":"",r.transform="",r))}var Z={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:j(t.placement),variation:X(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,J(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,J(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},ee={passive:!0};var te={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,l=A(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&c.forEach((function(e){e.addEventListener("scroll",n.update,ee)})),a&&l.addEventListener("resize",n.update,ee),function(){r&&c.forEach((function(e){e.removeEventListener("scroll",n.update,ee)})),a&&l.removeEventListener("resize",n.update,ee)}},data:{}},ne={left:"right",right:"left",bottom:"top",top:"bottom"};function ie(e){return e.replace(/left|right|bottom|top/g,(function(e){return ne[e]}))}var oe={start:"end",end:"start"};function re(e){return e.replace(/start|end/g,(function(e){return oe[e]}))}function se(e){var t=A(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ae(e){return B(W(e)).left+se(e).scrollLeft}function le(e){var t=H(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ce(e){return["html","body","#document"].indexOf(O(e))>=0?e.ownerDocument.body:L(e)&&le(e)?e:ce(q(e))}function ue(e,t){var n;void 0===t&&(t=[]);var i=ce(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=A(i),s=o?[r].concat(r.visualViewport||[],le(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ue(q(s)))}function fe(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function de(e,t,n){return t===c?fe(function(e,t){var n=A(e),i=W(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,l=0;if(o){r=o.width,s=o.height;var c=M();(c||!c&&"fixed"===t)&&(a=o.offsetLeft,l=o.offsetTop)}return{width:r,height:s,x:a+ae(e),y:l}}(e,n)):C(t)?function(e,t){var n=B(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):fe(function(e){var t,n=W(e),i=se(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=k(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=k(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ae(e),l=-i.scrollTop;return"rtl"===H(o||n).direction&&(a+=k(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(W(e)))}function pe(e,t,n,i){var o="clippingParents"===t?function(e){var t=ue(q(e)),n=["absolute","fixed"].indexOf(H(e).position)>=0&&L(e)?R(e):e;return C(n)?t.filter((function(e){return C(e)&&F(e,n)&&"body"!==O(e)})):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce((function(t,n){var o=de(e,n,i);return t.top=k(o.top,t.top),t.right=D(o.right,t.right),t.bottom=D(o.bottom,t.bottom),t.left=k(o.left,t.left),t}),de(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function he(o){var r,l=o.reference,c=o.element,u=o.placement,f=u?j(u):null,d=u?X(u):null,p=l.x+l.width/2-c.width/2,h=l.y+l.height/2-c.height/2;switch(f){case e:r={x:p,y:l.y-c.height};break;case t:r={x:p,y:l.y+l.height};break;case n:r={x:l.x+l.width,y:h};break;case i:r={x:l.x-c.width,y:h};break;default:r={x:l.x,y:l.y}}var g=f?V(f):null;if(null!=g){var m="y"===g?"height":"width";switch(d){case s:r[g]=r[g]-(l[m]/2-c[m]/2);break;case a:r[g]=r[g]+(l[m]/2-c[m]/2)}}return r}function ge(i,o){void 0===o&&(o={});var s=o,a=s.placement,d=void 0===a?i.placement:a,p=s.strategy,h=void 0===p?i.strategy:p,g=s.boundary,m=void 0===g?l:g,v=s.rootBoundary,b=void 0===v?c:v,y=s.elementContext,_=void 0===y?u:y,w=s.altBoundary,E=void 0!==w&&w,x=s.padding,O=void 0===x?0:x,A=U("number"!=typeof O?O:K(O,r)),L=_===u?f:u,T=i.rects.popper,S=i.elements[E?L:_],j=pe(C(S)?S:S.contextElement||W(i.elements.popper),m,b,h),k=B(i.elements.reference),D=he({reference:k,element:T,strategy:"absolute",placement:d}),P=fe(Object.assign({},T,D)),N=_===u?P:k,M={top:j.top-N.top+A.top,bottom:N.bottom-j.bottom+A.bottom,left:j.left-N.left+A.left,right:N.right-j.right+A.right},I=i.modifiersData.offset;if(_===u&&I){var F=I[d];Object.keys(M).forEach((function(i){var o=[n,t].indexOf(i)>=0?1:-1,r=[e,t].indexOf(i)>=0?"y":"x";M[i]+=F[r]*o}))}return M}function me(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,l=n.flipVariations,c=n.allowedAutoPlacements,u=void 0===c?p:c,f=X(i),h=f?l?d:d.filter((function(e){return X(e)===f})):r,g=h.filter((function(e){return u.indexOf(e)>=0}));0===g.length&&(g=h);var m=g.reduce((function(t,n){return t[n]=ge(e,{placement:n,boundary:o,rootBoundary:s,padding:a})[j(n)],t}),{});return Object.keys(m).sort((function(e,t){return m[e]-m[t]}))}var ve={name:"flip",enabled:!0,phase:"main",fn:function(r){var a=r.state,l=r.options,c=r.name;if(!a.modifiersData[c]._skip){for(var u=l.mainAxis,f=void 0===u||u,d=l.altAxis,p=void 0===d||d,h=l.fallbackPlacements,g=l.padding,m=l.boundary,v=l.rootBoundary,b=l.altBoundary,y=l.flipVariations,_=void 0===y||y,w=l.allowedAutoPlacements,E=a.options.placement,x=j(E),O=h||(x===E||!_?[ie(E)]:function(e){if(j(e)===o)return[];var t=ie(e);return[re(e),t,re(t)]}(E)),A=[E].concat(O).reduce((function(e,t){return e.concat(j(t)===o?me(a,{placement:t,boundary:m,rootBoundary:v,padding:g,flipVariations:_,allowedAutoPlacements:w}):t)}),[]),C=a.rects.reference,L=a.rects.popper,T=new Map,S=!0,k=A[0],D=0;D=0,I=B?"width":"height",F=ge(a,{placement:P,boundary:m,rootBoundary:v,altBoundary:b,padding:g}),H=B?M?n:i:M?t:e;C[I]>L[I]&&(H=ie(H));var $=ie(H),W=[];if(f&&W.push(F[N]<=0),p&&W.push(F[H]<=0,F[$]<=0),W.every((function(e){return e}))){k=P,S=!1;break}T.set(P,W)}if(S)for(var q=function(e){var t=A.find((function(t){var n=T.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return k=t,"break"},z=_?3:1;z>0;z--){if("break"===q(z))break}a.placement!==k&&(a.modifiersData[c]._skip=!0,a.placement=k,a.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function be(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(o){return[e,n,t,i].some((function(e){return o[e]>=0}))}var _e={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=ge(t,{elementContext:"reference"}),a=ge(t,{altBoundary:!0}),l=be(s,i),c=be(a,o,r),u=ye(l),f=ye(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var we={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var o=t.state,r=t.options,s=t.name,a=r.offset,l=void 0===a?[0,0]:a,c=p.reduce((function(t,r){return t[r]=function(t,o,r){var s=j(t),a=[i,e].indexOf(s)>=0?-1:1,l="function"==typeof r?r(Object.assign({},o,{placement:t})):r,c=l[0],u=l[1];return c=c||0,u=(u||0)*a,[i,n].indexOf(s)>=0?{x:u,y:c}:{x:c,y:u}}(r,o.rects,l),t}),{}),u=c[o.placement],f=u.x,d=u.y;null!=o.modifiersData.popperOffsets&&(o.modifiersData.popperOffsets.x+=f,o.modifiersData.popperOffsets.y+=d),o.modifiersData[s]=c}};var Ee={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=he({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};var xe={name:"preventOverflow",enabled:!0,phase:"main",fn:function(o){var r=o.state,a=o.options,l=o.name,c=a.mainAxis,u=void 0===c||c,f=a.altAxis,d=void 0!==f&&f,p=a.boundary,h=a.rootBoundary,g=a.altBoundary,m=a.padding,v=a.tether,b=void 0===v||v,y=a.tetherOffset,_=void 0===y?0:y,w=ge(r,{boundary:p,rootBoundary:h,padding:m,altBoundary:g}),E=j(r.placement),x=X(r.placement),O=!x,A=V(E),C="x"===A?"y":"x",L=r.modifiersData.popperOffsets,T=r.rects.reference,S=r.rects.popper,P="function"==typeof _?_(Object.assign({},r.rects,{placement:r.placement})):_,N="number"==typeof P?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),M=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,B={x:0,y:0};if(L){if(u){var F,H="y"===A?e:i,$="y"===A?t:n,W="y"===A?"height":"width",q=L[A],z=q+w[H],U=q-w[$],K=b?-S[W]/2:0,Q=x===s?T[W]:S[W],G=x===s?-S[W]:-T[W],J=r.elements.arrow,Z=b&&J?I(J):{width:0,height:0},ee=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[H],ne=ee[$],ie=Y(0,T[W],Z[W]),oe=O?T[W]/2-K-ie-te-N.mainAxis:Q-ie-te-N.mainAxis,re=O?-T[W]/2+K+ie+ne+N.mainAxis:G+ie+ne+N.mainAxis,se=r.elements.arrow&&R(r.elements.arrow),ae=se?"y"===A?se.clientTop||0:se.clientLeft||0:0,le=null!=(F=null==M?void 0:M[A])?F:0,ce=q+re-le,ue=Y(b?D(z,q+oe-le-ae):z,q,b?k(U,ce):U);L[A]=ue,B[A]=ue-q}if(d){var fe,de="x"===A?e:i,pe="x"===A?t:n,he=L[C],me="y"===C?"height":"width",ve=he+w[de],be=he-w[pe],ye=-1!==[e,i].indexOf(E),_e=null!=(fe=null==M?void 0:M[C])?fe:0,we=ye?ve:he-T[me]-S[me]-_e+N.altAxis,Ee=ye?he+T[me]+S[me]-_e-N.altAxis:be,xe=b&&ye?function(e,t,n){var i=Y(e,t,n);return i>n?n:i}(we,he,Ee):Y(b?we:ve,he,b?Ee:be);L[C]=xe,B[C]=xe-he}r.modifiersData[l]=B}},requiresIfExists:["offset"]};function Oe(e,t,n){void 0===n&&(n=!1);var i,o,r=L(t),s=L(t)&&function(e){var t=e.getBoundingClientRect(),n=P(t.width)/e.offsetWidth||1,i=P(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=W(t),l=B(e,s,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==O(t)||le(a))&&(c=(i=t)!==A(i)&&L(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:se(i)),L(t)?((u=B(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ae(a))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function Ae(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}})),i.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),i}var Ce={placement:"bottom",modifiers:[],strategy:"absolute"};function Le(){for(var e=arguments.length,t=new Array(e),n=0;nPe.has(e)&&Pe.get(e).get(t)||null,remove(e,t){if(!Pe.has(e))return;const n=Pe.get(e);n.delete(t),0===n.size&&Pe.delete(e)}};const Me="transitionend",Be=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),Ie=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),Fe=e=>Ie(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(Be(e)):null,He=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?He(e.parentNode):null},$e=()=>{},We=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,qe=[],ze=()=>"rtl"===document.documentElement.dir,Re=e=>{var t;t=()=>{const t=We();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(qe.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of qe)e()})),qe.push(t)):t()},Ve=function(e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):t},Ye=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void Ve(e);const n=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let i=!1;const o=n=>{let{target:r}=n;r===t&&(i=!0,t.removeEventListener(Me,o),Ve(e))};t.addEventListener(Me,o),setTimeout((()=>{i||t.dispatchEvent(new Event(Me))}),n)},Ue=/[^.]*(?=\..*)\.|.*/,Ke=/\..*/,Qe=/::\d+$/,Xe={};let Ge=1;const Je={mouseenter:"mouseover",mouseleave:"mouseout"},Ze=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function et(e,t){return t&&`${t}::${Ge++}`||e.uidEvent||Ge++}function tt(e){const t=et(e);return e.uidEvent=t,Xe[t]=Xe[t]||{},Xe[t]}function nt(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function it(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=at(e);return Ze.has(r)||(r=e),[i,o,r]}function ot(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=it(t,n,i);if(t in Je){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const l=tt(e),c=l[a]||(l[a]={}),u=nt(c,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=et(s,t.replace(Ue,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return ct(o,{delegateTarget:s}),i.oneOff&<.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return ct(i,{delegateTarget:e}),n.oneOff&<.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,c[f]=d,e.addEventListener(a,d,r)}function rt(e,t,n,i,o){const r=nt(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function st(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&rt(e,t,n,s.callable,s.delegationSelector)}function at(e){return e=e.replace(Ke,""),Je[e]||e}const lt={on(e,t,n,i){ot(e,t,n,i,!1)},one(e,t,n,i){ot(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=it(t,n,i),a=s!==t,l=tt(e),c=l[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(l))st(e,l,n,t.slice(1));for(const[n,i]of Object.entries(c)){const o=n.replace(Qe,"");a&&!t.includes(o)||rt(e,l,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;rt(e,l,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=We();let o=null,r=!0,s=!0,a=!1;t!==at(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const l=ct(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&l.preventDefault(),s&&e.dispatchEvent(l),l.defaultPrevented&&o&&o.preventDefault(),l}};function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function ut(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function ft(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const dt={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${ft(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${ft(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),t[n]=ut(e.dataset[i])}return t},getDataAttribute:(e,t)=>ut(e.getAttribute(`data-bs-${ft(t)}`))};class pt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=Ie(t)?dt.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...Ie(t)?dt.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[i,o]of Object.entries(t)){const t=e[i],r=Ie(t)?"element":null==(n=t)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${o}".`)}var n}}class ht extends pt{constructor(e,t){super(),(e=Fe(e))&&(this._element=e,this._config=this._getConfig(t),Ne.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Ne.remove(this._element,this.constructor.DATA_KEY),lt.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){Ye(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Ne.get(Fe(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const gt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},mt=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),vt=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,bt=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?!mt.has(n)||Boolean(vt.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(n)))};const yt=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map((e=>Be(e))).join(","):null},_t={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!(e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")))(e)&&(e=>{if(!Ie(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t})(e)))},getSelectorFromElement(e){const t=yt(e);return t&&_t.findOne(t)?t:null},getElementFromSelector(e){const t=yt(e);return t?_t.findOne(t):null},getMultipleElementsFromSelector(e){const t=yt(e);return t?_t.find(t):[]}},wt={allowList:gt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Et={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},xt={entry:"(string|element|function|null)",selector:"(string|element)"};class Ot extends pt{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return wt}static get DefaultType(){return Et}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},xt)}_setContent(e,t,n){const i=_t.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?Ie(t)?this._putElementInTemplate(Fe(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)bt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return Ve(e,[this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const At=new Set(["sanitize","allowList","sanitizeFn"]),Ct="fade",Lt="show",Tt=".tooltip-inner",St=".modal",jt="hide.bs.modal",kt="hover",Dt="focus",Pt={AUTO:"auto",TOP:"top",RIGHT:ze()?"left":"right",BOTTOM:"bottom",LEFT:ze()?"right":"left"},Nt={allowList:gt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Mt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Bt extends ht{constructor(e,t){if(void 0===De)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Nt}static get DefaultType(){return Mt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),lt.off(this._element.closest(St),jt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=lt.trigger(this._element,this.constructor.eventName("show")),t=(He(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),lt.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Lt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))lt.on(e,"mouseover",$e);this._queueCallback((()=>{lt.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(lt.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Lt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))lt.off(e,"mouseover",$e);this._activeTrigger.click=!1,this._activeTrigger[Dt]=!1,this._activeTrigger[kt]=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),lt.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(Ct,Lt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(Ct),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ot({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Tt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ct)}_isShown(){return this.tip&&this.tip.classList.contains(Lt)}_createPopper(e){const t=Ve(this._config.placement,[this,e,this._element]),n=Pt[t.toUpperCase()];return ke(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return Ve(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...Ve(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)lt.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e=t===kt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===kt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");lt.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Dt:kt]=!0,t._enter()})),lt.on(this._element,n,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Dt:kt]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},lt.on(this._element.closest(St),jt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=dt.getDataAttributes(this._element);for(const e of Object.keys(t))At.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:Fe(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=Bt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Re(Bt);const It=document.getElementById("mode-toggle");function Ft(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Ht="sidebar-display";class $t{static toggle(){!1===$t.isExpanded?document.body.setAttribute(Ht,""):document.body.removeAttribute(Ht),$t.isExpanded=!$t.isExpanded}}Ft($t,"isExpanded",!1);const Wt=document.getElementById("sidebar-trigger"),qt=document.getElementById("search-trigger"),zt=document.getElementById("search-cancel"),Rt=document.querySelectorAll("#main-wrapper>.container>.row"),Vt=document.getElementById("topbar-title"),Yt=document.getElementById("search"),Ut=document.getElementById("search-result-wrapper"),Kt=document.getElementById("search-results"),Qt=document.getElementById("search-input"),Xt=document.getElementById("search-hints"),Gt="d-block",Jt="d-none",Zt="input-focus",en="d-flex";class tn{static on(){Wt.classList.add(Jt),Vt.classList.add(Jt),qt.classList.add(Jt),Yt.classList.add(en),zt.classList.add(Gt)}static off(){zt.classList.remove(Gt),Yt.classList.remove(en),Wt.classList.remove(Jt),Vt.classList.remove(Jt),qt.classList.remove(Jt)}}class nn{static on(){this.resultVisible||(Ut.classList.remove(Jt),Rt.forEach((e=>{e.classList.add(Jt)})),this.resultVisible=!0)}static off(){this.resultVisible&&(Kt.innerHTML="",Xt.classList.contains(Jt)&&Xt.classList.remove(Jt),Ut.classList.add(Jt),Rt.forEach((e=>{e.classList.remove(Jt)})),Qt.textContent="",this.resultVisible=!1)}}function on(){return zt.classList.contains(Gt)}Ft(nn,"resultVisible",!1);const rn=".bs.collapse",sn=`show${rn}`,an=`shown${rn}`,ln=`hide${rn}`,cn=`hidden${rn}`,un=`click${rn}.data-api`,fn="show",dn="collapse",pn="collapsing",hn=`:scope .${dn} .${dn}`,gn='[data-bs-toggle="collapse"]',mn={parent:null,toggle:!0},vn={parent:"(null|element)",toggle:"boolean"};class bn extends ht{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=_t.find(gn);for(const e of n){const t=_t.getSelectorFromElement(e),n=_t.find(t).filter((e=>e===this._element));null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return mn}static get DefaultType(){return vn}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((e=>e!==this._element)).map((e=>bn.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(lt.trigger(this._element,sn).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(dn),this._element.classList.add(pn),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn,fn),this._element.style[t]="",lt.trigger(this._element,an)}),this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(lt.trigger(this._element,ln).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(pn),this._element.classList.remove(dn,fn);for(const e of this._triggerArray){const t=_t.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn),lt.trigger(this._element,cn)}),this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(fn)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=Fe(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(gn);for(const t of e){const e=_t.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=_t.find(hn,this._config.parent);return _t.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const n=bn.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}}))}}lt.on(document,un,gn,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of _t.getMultipleElementsFromSelector(this))bn.getOrCreateInstance(e,{toggle:!1}).toggle()})),Re(bn);const yn=document.getElementsByClassName("collapse");var _n;const wn=document.getElementById("toc-bar"),En=document.getElementById("toc-solo-trigger"),xn=document.getElementsByClassName("toc-trigger"),On=document.getElementById("toc-popup"),An=document.getElementById("toc-popup-close"),Cn="overflow-hidden",Ln="closing";class Tn{static initBar(){new IntersectionObserver((e=>{e.forEach((e=>{wn.classList.toggle("invisible",e.isIntersecting)}))}),{rootMargin:`-${this.barHeight}px 0px 0px 0px`}).observe(En),this.invisible=!1}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach((e=>{e.onclick=this.hidePopup}))}static refresh(){this.invisible&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static showPopup(){Tn.lockScroll(!0),On.showModal();On.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(e){"cancel"===e?.type&&e.preventDefault(),On.open&&(On.toggleAttribute(Ln),On.addEventListener("animationend",(()=>{On.toggleAttribute(Ln),On.close()}),{once:!0}),Tn.lockScroll(!1))}static lockScroll(e){document.documentElement.classList.toggle(Cn,e),document.body.classList.toggle(Cn,e)}static clickBackdrop(e){const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&Tn.hidePopup()}static initComponents(){this.initBar(),[...xn].forEach((e=>{e.onclick=this.showPopup})),On.onclick=this.clickBackdrop,An.onclick=On.oncancel=this.hidePopup}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}_n=Tn,Ft(Tn,"invisible",!0),Ft(Tn,"barHeight",48),Ft(Tn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:_n.barHeight});Ft(class{static refresh(){tocbot.refresh(this.options)}static init(){document.getElementById("toc-wrapper")&&tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",(()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")})),e.addEventListener("click",(()=>{window.scrollTo({top:0})}))}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map((e=>new Bt(e))),It&&It.addEventListener("click",(()=>{modeToggle.flipMode()})),document.getElementById("sidebar-trigger").addEventListener("click",$t.toggle),document.getElementById("mask").addEventListener("click",$t.toggle),qt.addEventListener("click",(()=>{tn.on(),nn.on(),Qt.focus()})),zt.addEventListener("click",(()=>{tn.off(),nn.off()})),Qt.addEventListener("focus",(()=>{Yt.classList.add(Zt)})),Qt.addEventListener("focusout",(()=>{Yt.classList.remove(Zt)})),Qt.addEventListener("input",(()=>{""===Qt.value?on()?Xt.classList.remove(Jt):nn.off():(nn.on(),on()&&Xt.classList.add(Jt))})),[...yn].forEach((e=>{const t="h_"+e.id.substring(2),n=document.getElementById(t);e.addEventListener("hide.bs.collapse",(()=>{n&&(n.querySelector(".far.fa-folder-open").className="far fa-folder fa-fw",n.querySelector(".fas.fa-angle-down").classList.add("rotate"),n.classList.remove("hide-border-bottom"))})),e.addEventListener("show.bs.collapse",(()=>{n&&(n.querySelector(".far.fa-folder").className="far fa-folder-open fa-fw",n.querySelector(".fas.fa-angle-down").classList.remove("rotate"),n.classList.add("hide-border-bottom"))}))}))}(); diff --git a/assets/js/dist/commons.min.js b/assets/js/dist/commons.min.js new file mode 100644 index 00000000000..b68715ccc7d --- /dev/null +++ b/assets/js/dist/commons.min.js @@ -0,0 +1,4 @@ +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";var e="top",t="bottom",n="right",i="left",o="auto",r=[e,t,n,i],s="start",a="end",c="clippingParents",l="viewport",u="popper",f="reference",d=r.reduce((function(e,t){return e.concat([t+"-"+s,t+"-"+a])}),[]),p=[].concat(r,[o]).reduce((function(e,t){return e.concat([t,t+"-"+s,t+"-"+a])}),[]),h="beforeRead",m="read",g="afterRead",v="beforeMain",b="main",y="afterMain",_="beforeWrite",w="write",E="afterWrite",O=[h,m,g,v,b,y,_,w,E];function x(e){return e?(e.nodeName||"").toLowerCase():null}function A(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function T(e){return e instanceof A(e).Element||e instanceof Element}function C(e){return e instanceof A(e).HTMLElement||e instanceof HTMLElement}function L(e){return"undefined"!=typeof ShadowRoot&&(e instanceof A(e).ShadowRoot||e instanceof ShadowRoot)}var j={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];C(o)&&x(o)&&(Object.assign(o.style,n),Object.keys(i).forEach((function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});C(i)&&x(i)&&(Object.assign(i.style,r),Object.keys(o).forEach((function(e){i.removeAttribute(e)})))}))}},requires:["computeStyles"]};function D(e){return e.split("-")[0]}var S=Math.max,k=Math.min,P=Math.round;function M(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function N(){return!/^((?!chrome|android).)*safari/i.test(M())}function B(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&C(e)&&(o=e.offsetWidth>0&&P(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&P(i.height)/e.offsetHeight||1);var s=(T(e)?A(e):window).visualViewport,a=!N()&&n,c=(i.left+(a&&s?s.offsetLeft:0))/o,l=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:l,right:c+u,bottom:l+f,left:c,x:c,y:l}}function H(e){var t=B(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function F(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&L(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function I(e){return A(e).getComputedStyle(e)}function W(e){return["table","td","th"].indexOf(x(e))>=0}function z(e){return((T(e)?e.ownerDocument:e.document)||window.document).documentElement}function R(e){return"html"===x(e)?e:e.assignedSlot||e.parentNode||(L(e)?e.host:null)||z(e)}function $(e){return C(e)&&"fixed"!==I(e).position?e.offsetParent:null}function q(e){for(var t=A(e),n=$(e);n&&W(n)&&"static"===I(n).position;)n=$(n);return n&&("html"===x(n)||"body"===x(n)&&"static"===I(n).position)?t:n||function(e){var t=/firefox/i.test(M());if(/Trident/i.test(M())&&C(e)&&"fixed"===I(e).position)return null;var n=R(e);for(L(n)&&(n=n.host);C(n)&&["html","body"].indexOf(x(n))<0;){var i=I(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function V(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Y(e,t,n){return S(e,k(t,n))}function K(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function U(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(o){var s,a=o.state,c=o.name,l=o.options,u=a.elements.arrow,f=a.modifiersData.popperOffsets,d=D(a.placement),p=V(d),h=[i,n].indexOf(d)>=0?"height":"width";if(u&&f){var m=function(e,t){return K("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:U(e,r))}(l.padding,a),g=H(u),v="y"===p?e:i,b="y"===p?t:n,y=a.rects.reference[h]+a.rects.reference[p]-f[p]-a.rects.popper[h],_=f[p]-a.rects.reference[p],w=q(u),E=w?"y"===p?w.clientHeight||0:w.clientWidth||0:0,O=y/2-_/2,x=m[v],A=E-g[h]-m[b],T=E/2-g[h]/2+O,C=Y(x,T,A),L=p;a.modifiersData[c]=((s={})[L]=C,s.centerOffset=C-T,s)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&F(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function G(e){return e.split("-")[1]}var X={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J(o){var r,s=o.popper,c=o.popperRect,l=o.placement,u=o.variation,f=o.offsets,d=o.position,p=o.gpuAcceleration,h=o.adaptive,m=o.roundOffsets,g=o.isFixed,v=f.x,b=void 0===v?0:v,y=f.y,_=void 0===y?0:y,w="function"==typeof m?m({x:b,y:_}):{x:b,y:_};b=w.x,_=w.y;var E=f.hasOwnProperty("x"),O=f.hasOwnProperty("y"),x=i,T=e,C=window;if(h){var L=q(s),j="clientHeight",D="clientWidth";if(L===A(s)&&"static"!==I(L=z(s)).position&&"absolute"===d&&(j="scrollHeight",D="scrollWidth"),l===e||(l===i||l===n)&&u===a)T=t,_-=(g&&L===C&&C.visualViewport?C.visualViewport.height:L[j])-c.height,_*=p?1:-1;if(l===i||(l===e||l===t)&&u===a)x=n,b-=(g&&L===C&&C.visualViewport?C.visualViewport.width:L[D])-c.width,b*=p?1:-1}var S,k=Object.assign({position:d},h&&X),M=!0===m?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:P(n*o)/o||0,y:P(i*o)/o||0}}({x:b,y:_},A(s)):{x:b,y:_};return b=M.x,_=M.y,p?Object.assign({},k,((S={})[T]=O?"0":"",S[x]=E?"0":"",S.transform=(C.devicePixelRatio||1)<=1?"translate("+b+"px, "+_+"px)":"translate3d("+b+"px, "+_+"px, 0)",S)):Object.assign({},k,((r={})[T]=O?_+"px":"",r[x]=E?b+"px":"",r.transform="",r))}var Z={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,c=void 0===a||a,l={placement:D(t.placement),variation:G(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,J(Object.assign({},l,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,J(Object.assign({},l,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},ee={passive:!0};var te={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,c=A(t.elements.popper),l=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&l.forEach((function(e){e.addEventListener("scroll",n.update,ee)})),a&&c.addEventListener("resize",n.update,ee),function(){r&&l.forEach((function(e){e.removeEventListener("scroll",n.update,ee)})),a&&c.removeEventListener("resize",n.update,ee)}},data:{}},ne={left:"right",right:"left",bottom:"top",top:"bottom"};function ie(e){return e.replace(/left|right|bottom|top/g,(function(e){return ne[e]}))}var oe={start:"end",end:"start"};function re(e){return e.replace(/start|end/g,(function(e){return oe[e]}))}function se(e){var t=A(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ae(e){return B(z(e)).left+se(e).scrollLeft}function ce(e){var t=I(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function le(e){return["html","body","#document"].indexOf(x(e))>=0?e.ownerDocument.body:C(e)&&ce(e)?e:le(R(e))}function ue(e,t){var n;void 0===t&&(t=[]);var i=le(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=A(i),s=o?[r].concat(r.visualViewport||[],ce(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ue(R(s)))}function fe(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function de(e,t,n){return t===l?fe(function(e,t){var n=A(e),i=z(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,c=0;if(o){r=o.width,s=o.height;var l=N();(l||!l&&"fixed"===t)&&(a=o.offsetLeft,c=o.offsetTop)}return{width:r,height:s,x:a+ae(e),y:c}}(e,n)):T(t)?function(e,t){var n=B(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):fe(function(e){var t,n=z(e),i=se(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=S(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=S(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ae(e),c=-i.scrollTop;return"rtl"===I(o||n).direction&&(a+=S(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:c}}(z(e)))}function pe(e,t,n,i){var o="clippingParents"===t?function(e){var t=ue(R(e)),n=["absolute","fixed"].indexOf(I(e).position)>=0&&C(e)?q(e):e;return T(n)?t.filter((function(e){return T(e)&&F(e,n)&&"body"!==x(e)})):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce((function(t,n){var o=de(e,n,i);return t.top=S(o.top,t.top),t.right=k(o.right,t.right),t.bottom=k(o.bottom,t.bottom),t.left=S(o.left,t.left),t}),de(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function he(o){var r,c=o.reference,l=o.element,u=o.placement,f=u?D(u):null,d=u?G(u):null,p=c.x+c.width/2-l.width/2,h=c.y+c.height/2-l.height/2;switch(f){case e:r={x:p,y:c.y-l.height};break;case t:r={x:p,y:c.y+c.height};break;case n:r={x:c.x+c.width,y:h};break;case i:r={x:c.x-l.width,y:h};break;default:r={x:c.x,y:c.y}}var m=f?V(f):null;if(null!=m){var g="y"===m?"height":"width";switch(d){case s:r[m]=r[m]-(c[g]/2-l[g]/2);break;case a:r[m]=r[m]+(c[g]/2-l[g]/2)}}return r}function me(i,o){void 0===o&&(o={});var s=o,a=s.placement,d=void 0===a?i.placement:a,p=s.strategy,h=void 0===p?i.strategy:p,m=s.boundary,g=void 0===m?c:m,v=s.rootBoundary,b=void 0===v?l:v,y=s.elementContext,_=void 0===y?u:y,w=s.altBoundary,E=void 0!==w&&w,O=s.padding,x=void 0===O?0:O,A=K("number"!=typeof x?x:U(x,r)),C=_===u?f:u,L=i.rects.popper,j=i.elements[E?C:_],D=pe(T(j)?j:j.contextElement||z(i.elements.popper),g,b,h),S=B(i.elements.reference),k=he({reference:S,element:L,strategy:"absolute",placement:d}),P=fe(Object.assign({},L,k)),M=_===u?P:S,N={top:D.top-M.top+A.top,bottom:M.bottom-D.bottom+A.bottom,left:D.left-M.left+A.left,right:M.right-D.right+A.right},H=i.modifiersData.offset;if(_===u&&H){var F=H[d];Object.keys(N).forEach((function(i){var o=[n,t].indexOf(i)>=0?1:-1,r=[e,t].indexOf(i)>=0?"y":"x";N[i]+=F[r]*o}))}return N}function ge(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,c=n.flipVariations,l=n.allowedAutoPlacements,u=void 0===l?p:l,f=G(i),h=f?c?d:d.filter((function(e){return G(e)===f})):r,m=h.filter((function(e){return u.indexOf(e)>=0}));0===m.length&&(m=h);var g=m.reduce((function(t,n){return t[n]=me(e,{placement:n,boundary:o,rootBoundary:s,padding:a})[D(n)],t}),{});return Object.keys(g).sort((function(e,t){return g[e]-g[t]}))}var ve={name:"flip",enabled:!0,phase:"main",fn:function(r){var a=r.state,c=r.options,l=r.name;if(!a.modifiersData[l]._skip){for(var u=c.mainAxis,f=void 0===u||u,d=c.altAxis,p=void 0===d||d,h=c.fallbackPlacements,m=c.padding,g=c.boundary,v=c.rootBoundary,b=c.altBoundary,y=c.flipVariations,_=void 0===y||y,w=c.allowedAutoPlacements,E=a.options.placement,O=D(E),x=h||(O===E||!_?[ie(E)]:function(e){if(D(e)===o)return[];var t=ie(e);return[re(e),t,re(t)]}(E)),A=[E].concat(x).reduce((function(e,t){return e.concat(D(t)===o?ge(a,{placement:t,boundary:g,rootBoundary:v,padding:m,flipVariations:_,allowedAutoPlacements:w}):t)}),[]),T=a.rects.reference,C=a.rects.popper,L=new Map,j=!0,S=A[0],k=0;k=0,H=B?"width":"height",F=me(a,{placement:P,boundary:g,rootBoundary:v,altBoundary:b,padding:m}),I=B?N?n:i:N?t:e;T[H]>C[H]&&(I=ie(I));var W=ie(I),z=[];if(f&&z.push(F[M]<=0),p&&z.push(F[I]<=0,F[W]<=0),z.every((function(e){return e}))){S=P,j=!1;break}L.set(P,z)}if(j)for(var R=function(e){var t=A.find((function(t){var n=L.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return S=t,"break"},$=_?3:1;$>0;$--){if("break"===R($))break}a.placement!==S&&(a.modifiersData[l]._skip=!0,a.placement=S,a.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function be(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(o){return[e,n,t,i].some((function(e){return o[e]>=0}))}var _e={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=me(t,{elementContext:"reference"}),a=me(t,{altBoundary:!0}),c=be(s,i),l=be(a,o,r),u=ye(c),f=ye(l);t.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var we={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var o=t.state,r=t.options,s=t.name,a=r.offset,c=void 0===a?[0,0]:a,l=p.reduce((function(t,r){return t[r]=function(t,o,r){var s=D(t),a=[i,e].indexOf(s)>=0?-1:1,c="function"==typeof r?r(Object.assign({},o,{placement:t})):r,l=c[0],u=c[1];return l=l||0,u=(u||0)*a,[i,n].indexOf(s)>=0?{x:u,y:l}:{x:l,y:u}}(r,o.rects,c),t}),{}),u=l[o.placement],f=u.x,d=u.y;null!=o.modifiersData.popperOffsets&&(o.modifiersData.popperOffsets.x+=f,o.modifiersData.popperOffsets.y+=d),o.modifiersData[s]=l}};var Ee={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=he({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};var Oe={name:"preventOverflow",enabled:!0,phase:"main",fn:function(o){var r=o.state,a=o.options,c=o.name,l=a.mainAxis,u=void 0===l||l,f=a.altAxis,d=void 0!==f&&f,p=a.boundary,h=a.rootBoundary,m=a.altBoundary,g=a.padding,v=a.tether,b=void 0===v||v,y=a.tetherOffset,_=void 0===y?0:y,w=me(r,{boundary:p,rootBoundary:h,padding:g,altBoundary:m}),E=D(r.placement),O=G(r.placement),x=!O,A=V(E),T="x"===A?"y":"x",C=r.modifiersData.popperOffsets,L=r.rects.reference,j=r.rects.popper,P="function"==typeof _?_(Object.assign({},r.rects,{placement:r.placement})):_,M="number"==typeof P?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),N=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,B={x:0,y:0};if(C){if(u){var F,I="y"===A?e:i,W="y"===A?t:n,z="y"===A?"height":"width",R=C[A],$=R+w[I],K=R-w[W],U=b?-j[z]/2:0,Q=O===s?L[z]:j[z],X=O===s?-j[z]:-L[z],J=r.elements.arrow,Z=b&&J?H(J):{width:0,height:0},ee=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[I],ne=ee[W],ie=Y(0,L[z],Z[z]),oe=x?L[z]/2-U-ie-te-M.mainAxis:Q-ie-te-M.mainAxis,re=x?-L[z]/2+U+ie+ne+M.mainAxis:X+ie+ne+M.mainAxis,se=r.elements.arrow&&q(r.elements.arrow),ae=se?"y"===A?se.clientTop||0:se.clientLeft||0:0,ce=null!=(F=null==N?void 0:N[A])?F:0,le=R+re-ce,ue=Y(b?k($,R+oe-ce-ae):$,R,b?S(K,le):K);C[A]=ue,B[A]=ue-R}if(d){var fe,de="x"===A?e:i,pe="x"===A?t:n,he=C[T],ge="y"===T?"height":"width",ve=he+w[de],be=he-w[pe],ye=-1!==[e,i].indexOf(E),_e=null!=(fe=null==N?void 0:N[T])?fe:0,we=ye?ve:he-L[ge]-j[ge]-_e+M.altAxis,Ee=ye?he+L[ge]+j[ge]-_e-M.altAxis:be,Oe=b&&ye?function(e,t,n){var i=Y(e,t,n);return i>n?n:i}(we,he,Ee):Y(b?we:ve,he,b?Ee:be);C[T]=Oe,B[T]=Oe-he}r.modifiersData[c]=B}},requiresIfExists:["offset"]};function xe(e,t,n){void 0===n&&(n=!1);var i,o,r=C(t),s=C(t)&&function(e){var t=e.getBoundingClientRect(),n=P(t.width)/e.offsetWidth||1,i=P(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=z(t),c=B(e,s,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==x(t)||ce(a))&&(l=(i=t)!==A(i)&&C(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:se(i)),C(t)?((u=B(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ae(a))),{x:c.left+l.scrollLeft-u.x,y:c.top+l.scrollTop-u.y,width:c.width,height:c.height}}function Ae(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}})),i.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),i}var Te={placement:"bottom",modifiers:[],strategy:"absolute"};function Ce(){for(var e=arguments.length,t=new Array(e),n=0;nPe.has(e)&&Pe.get(e).get(t)||null,remove(e,t){if(!Pe.has(e))return;const n=Pe.get(e);n.delete(t),0===n.size&&Pe.delete(e)}};const Ne="transitionend",Be=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),He=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),Fe=e=>He(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(Be(e)):null,Ie=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?Ie(e.parentNode):null},We=()=>{},ze=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Re=[],$e=()=>"rtl"===document.documentElement.dir,qe=function(e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):t},Ve=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void qe(e);const n=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let i=!1;const o=n=>{let{target:r}=n;r===t&&(i=!0,t.removeEventListener(Ne,o),qe(e))};t.addEventListener(Ne,o),setTimeout((()=>{i||t.dispatchEvent(new Event(Ne))}),n)},Ye=/[^.]*(?=\..*)\.|.*/,Ke=/\..*/,Ue=/::\d+$/,Qe={};let Ge=1;const Xe={mouseenter:"mouseover",mouseleave:"mouseout"},Je=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Ze(e,t){return t&&`${t}::${Ge++}`||e.uidEvent||Ge++}function et(e){const t=Ze(e);return e.uidEvent=t,Qe[t]=Qe[t]||{},Qe[t]}function tt(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function nt(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=st(e);return Je.has(r)||(r=e),[i,o,r]}function it(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=nt(t,n,i);if(t in Xe){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const c=et(e),l=c[a]||(c[a]={}),u=tt(l,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=Ze(s,t.replace(Ye,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return ct(o,{delegateTarget:s}),i.oneOff&&at.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return ct(i,{delegateTarget:e}),n.oneOff&&at.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,l[f]=d,e.addEventListener(a,d,r)}function ot(e,t,n,i,o){const r=tt(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function rt(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&ot(e,t,n,s.callable,s.delegationSelector)}function st(e){return e=e.replace(Ke,""),Xe[e]||e}const at={on(e,t,n,i){it(e,t,n,i,!1)},one(e,t,n,i){it(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=nt(t,n,i),a=s!==t,c=et(e),l=c[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(c))rt(e,c,n,t.slice(1));for(const[n,i]of Object.entries(l)){const o=n.replace(Ue,"");a&&!t.includes(o)||ot(e,c,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(l).length)return;ot(e,c,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=ze();let o=null,r=!0,s=!0,a=!1;t!==st(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const c=ct(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&c.preventDefault(),s&&e.dispatchEvent(c),c.defaultPrevented&&o&&o.preventDefault(),c}};function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function lt(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function ut(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const ft={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${ut(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${ut(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),t[n]=lt(e.dataset[i])}return t},getDataAttribute:(e,t)=>lt(e.getAttribute(`data-bs-${ut(t)}`))};class dt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=He(t)?ft.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...He(t)?ft.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[i,o]of Object.entries(t)){const t=e[i],r=He(t)?"element":null==(n=t)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${o}".`)}var n}}class pt extends dt{constructor(e,t){super(),(e=Fe(e))&&(this._element=e,this._config=this._getConfig(t),Me.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Me.remove(this._element,this.constructor.DATA_KEY),at.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){Ve(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Me.get(Fe(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const ht={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},mt=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),gt=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,vt=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?!mt.has(n)||Boolean(gt.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(n)))};const bt=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map((e=>Be(e))).join(","):null},yt={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!(e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")))(e)&&(e=>{if(!He(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t})(e)))},getSelectorFromElement(e){const t=bt(e);return t&&yt.findOne(t)?t:null},getElementFromSelector(e){const t=bt(e);return t?yt.findOne(t):null},getMultipleElementsFromSelector(e){const t=bt(e);return t?yt.find(t):[]}},_t={allowList:ht,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},wt={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Et={entry:"(string|element|function|null)",selector:"(string|element)"};class Ot extends dt{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return _t}static get DefaultType(){return wt}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},Et)}_setContent(e,t,n){const i=yt.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?He(t)?this._putElementInTemplate(Fe(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)vt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return qe(e,[this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const xt=new Set(["sanitize","allowList","sanitizeFn"]),At="fade",Tt="show",Ct=".tooltip-inner",Lt=".modal",jt="hide.bs.modal",Dt="hover",St="focus",kt={AUTO:"auto",TOP:"top",RIGHT:$e()?"left":"right",BOTTOM:"bottom",LEFT:$e()?"right":"left"},Pt={allowList:ht,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Mt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Nt extends pt{constructor(e,t){if(void 0===ke)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Pt}static get DefaultType(){return Mt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),at.off(this._element.closest(Lt),jt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=at.trigger(this._element,this.constructor.eventName("show")),t=(Ie(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),at.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Tt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))at.on(e,"mouseover",We);this._queueCallback((()=>{at.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(at.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Tt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))at.off(e,"mouseover",We);this._activeTrigger.click=!1,this._activeTrigger[St]=!1,this._activeTrigger[Dt]=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),at.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(At,Tt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(At),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new Ot({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Ct]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(At)}_isShown(){return this.tip&&this.tip.classList.contains(Tt)}_createPopper(e){const t=qe(this._config.placement,[this,e,this._element]),n=kt[t.toUpperCase()];return Se(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return qe(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...qe(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)at.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e=t===Dt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===Dt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");at.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?St:Dt]=!0,t._enter()})),at.on(this._element,n,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?St:Dt]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},at.on(this._element.closest(Lt),jt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=ft.getDataAttributes(this._element);for(const e of Object.keys(t))xt.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:Fe(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=Nt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}var Bt,Ht;Bt=Nt,Ht=()=>{const e=ze();if(e){const t=Bt.NAME,n=e.fn[t];e.fn[t]=Bt.jQueryInterface,e.fn[t].Constructor=Bt,e.fn[t].noConflict=()=>(e.fn[t]=n,Bt.jQueryInterface)}},"loading"===document.readyState?(Re.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of Re)e()})),Re.push(Ht)):Ht();const Ft=document.getElementById("mode-toggle");function It(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Wt="sidebar-display";class zt{static toggle(){!1===zt.isExpanded?document.body.setAttribute(Wt,""):document.body.removeAttribute(Wt),zt.isExpanded=!zt.isExpanded}}It(zt,"isExpanded",!1);const Rt=document.getElementById("sidebar-trigger"),$t=document.getElementById("search-trigger"),qt=document.getElementById("search-cancel"),Vt=document.querySelectorAll("#main-wrapper>.container>.row"),Yt=document.getElementById("topbar-title"),Kt=document.getElementById("search"),Ut=document.getElementById("search-result-wrapper"),Qt=document.getElementById("search-results"),Gt=document.getElementById("search-input"),Xt=document.getElementById("search-hints"),Jt="d-block",Zt="d-none",en="input-focus",tn="d-flex";class nn{static on(){Rt.classList.add(Zt),Yt.classList.add(Zt),$t.classList.add(Zt),Kt.classList.add(tn),qt.classList.add(Jt)}static off(){qt.classList.remove(Jt),Kt.classList.remove(tn),Rt.classList.remove(Zt),Yt.classList.remove(Zt),$t.classList.remove(Zt)}}class on{static on(){this.resultVisible||(Ut.classList.remove(Zt),Vt.forEach((e=>{e.classList.add(Zt)})),this.resultVisible=!0)}static off(){this.resultVisible&&(Qt.innerHTML="",Xt.classList.contains(Zt)&&Xt.classList.remove(Zt),Ut.classList.add(Zt),Vt.forEach((e=>{e.classList.remove(Zt)})),Gt.textContent="",this.resultVisible=!1)}}function rn(){return qt.classList.contains(Jt)}It(on,"resultVisible",!1),Ft&&Ft.addEventListener("click",(()=>{modeToggle.flipMode()})),document.getElementById("sidebar-trigger").addEventListener("click",zt.toggle),document.getElementById("mask").addEventListener("click",zt.toggle),$t.addEventListener("click",(()=>{nn.on(),on.on(),Gt.focus()})),qt.addEventListener("click",(()=>{nn.off(),on.off()})),Gt.addEventListener("focus",(()=>{Kt.classList.add(en)})),Gt.addEventListener("focusout",(()=>{Kt.classList.remove(en)})),Gt.addEventListener("input",(()=>{""===Gt.value?rn()?Xt.classList.remove(Zt):on.off():(on.on(),rn()&&Xt.classList.add(Zt))})),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",(()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")})),e.addEventListener("click",(()=>{window.scrollTo({top:0})}))}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map((e=>new Nt(e)))}(); diff --git a/assets/js/dist/home.min.js b/assets/js/dist/home.min.js new file mode 100644 index 00000000000..e4713f258de --- /dev/null +++ b/assets/js/dist/home.min.js @@ -0,0 +1,4 @@ +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";var t="top",e="bottom",n="right",i="left",o="auto",r=[t,e,n,i],s="start",a="end",l="clippingParents",c="viewport",u="popper",f="reference",d=r.reduce((function(t,e){return t.concat([e+"-"+s,e+"-"+a])}),[]),p=[].concat(r,[o]).reduce((function(t,e){return t.concat([e,e+"-"+s,e+"-"+a])}),[]),h="beforeRead",m="read",g="afterRead",v="beforeMain",b="main",y="afterMain",_="beforeWrite",w="write",E="afterWrite",x=[h,m,g,v,b,y,_,w,E];function O(t){return t?(t.nodeName||"").toLowerCase():null}function A(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function C(t){return t instanceof A(t).Element||t instanceof Element}function T(t){return t instanceof A(t).HTMLElement||t instanceof HTMLElement}function L(t){return"undefined"!=typeof ShadowRoot&&(t instanceof A(t).ShadowRoot||t instanceof ShadowRoot)}var S={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];T(o)&&O(o)&&(Object.assign(o.style,n),Object.keys(i).forEach((function(t){var e=i[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var i=e.elements[t],o=e.attributes[t]||{},r=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce((function(t,e){return t[e]="",t}),{});T(i)&&O(i)&&(Object.assign(i.style,r),Object.keys(o).forEach((function(t){i.removeAttribute(t)})))}))}},requires:["computeStyles"]};function j(t){return t.split("-")[0]}var k=Math.max,D=Math.min,P=Math.round;function M(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function N(){return!/^((?!chrome|android).)*safari/i.test(M())}function B(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var i=t.getBoundingClientRect(),o=1,r=1;e&&T(t)&&(o=t.offsetWidth>0&&P(i.width)/t.offsetWidth||1,r=t.offsetHeight>0&&P(i.height)/t.offsetHeight||1);var s=(C(t)?A(t):window).visualViewport,a=!N()&&n,l=(i.left+(a&&s?s.offsetLeft:0))/o,c=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:c,right:l+u,bottom:c+f,left:l,x:l,y:c}}function F(t){var e=B(t),n=t.offsetWidth,i=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:i}}function I(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&L(n)){var i=e;do{if(i&&t.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function H(t){return A(t).getComputedStyle(t)}function $(t){return["table","td","th"].indexOf(O(t))>=0}function z(t){return((C(t)?t.ownerDocument:t.document)||window.document).documentElement}function q(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(L(t)?t.host:null)||z(t)}function W(t){return T(t)&&"fixed"!==H(t).position?t.offsetParent:null}function R(t){for(var e=A(t),n=W(t);n&&$(n)&&"static"===H(n).position;)n=W(n);return n&&("html"===O(n)||"body"===O(n)&&"static"===H(n).position)?e:n||function(t){var e=/firefox/i.test(M());if(/Trident/i.test(M())&&T(t)&&"fixed"===H(t).position)return null;var n=q(t);for(L(n)&&(n=n.host);T(n)&&["html","body"].indexOf(O(n))<0;){var i=H(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||e&&"filter"===i.willChange||e&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(t)||e}function V(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Y(t,e,n){return k(t,D(e,n))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function K(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(o){var s,a=o.state,l=o.name,c=o.options,u=a.elements.arrow,f=a.modifiersData.popperOffsets,d=j(a.placement),p=V(d),h=[i,n].indexOf(d)>=0?"height":"width";if(u&&f){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:K(t,r))}(c.padding,a),g=F(u),v="y"===p?t:i,b="y"===p?e:n,y=a.rects.reference[h]+a.rects.reference[p]-f[p]-a.rects.popper[h],_=f[p]-a.rects.reference[p],w=R(u),E=w?"y"===p?w.clientHeight||0:w.clientWidth||0:0,x=y/2-_/2,O=m[v],A=E-g[h]-m[b],C=E/2-g[h]/2+x,T=Y(O,C,A),L=p;a.modifiersData[l]=((s={})[L]=T,s.centerOffset=T-C,s)}},effect:function(t){var e=t.state,n=t.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=e.elements.popper.querySelector(i)))&&I(e.elements.popper,i)&&(e.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function X(t){return t.split("-")[1]}var G={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J(o){var r,s=o.popper,l=o.popperRect,c=o.placement,u=o.variation,f=o.offsets,d=o.position,p=o.gpuAcceleration,h=o.adaptive,m=o.roundOffsets,g=o.isFixed,v=f.x,b=void 0===v?0:v,y=f.y,_=void 0===y?0:y,w="function"==typeof m?m({x:b,y:_}):{x:b,y:_};b=w.x,_=w.y;var E=f.hasOwnProperty("x"),x=f.hasOwnProperty("y"),O=i,C=t,T=window;if(h){var L=R(s),S="clientHeight",j="clientWidth";if(L===A(s)&&"static"!==H(L=z(s)).position&&"absolute"===d&&(S="scrollHeight",j="scrollWidth"),c===t||(c===i||c===n)&&u===a)C=e,_-=(g&&L===T&&T.visualViewport?T.visualViewport.height:L[S])-l.height,_*=p?1:-1;if(c===i||(c===t||c===e)&&u===a)O=n,b-=(g&&L===T&&T.visualViewport?T.visualViewport.width:L[j])-l.width,b*=p?1:-1}var k,D=Object.assign({position:d},h&&G),M=!0===m?function(t,e){var n=t.x,i=t.y,o=e.devicePixelRatio||1;return{x:P(n*o)/o||0,y:P(i*o)/o||0}}({x:b,y:_},A(s)):{x:b,y:_};return b=M.x,_=M.y,p?Object.assign({},D,((k={})[C]=x?"0":"",k[O]=E?"0":"",k.transform=(T.devicePixelRatio||1)<=1?"translate("+b+"px, "+_+"px)":"translate3d("+b+"px, "+_+"px, 0)",k)):Object.assign({},D,((r={})[C]=x?_+"px":"",r[O]=E?b+"px":"",r.transform="",r))}var Z={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,n=t.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:j(e.placement),variation:X(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,J(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,J(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},tt={passive:!0};var et={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,n=t.instance,i=t.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,l=A(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&c.forEach((function(t){t.addEventListener("scroll",n.update,tt)})),a&&l.addEventListener("resize",n.update,tt),function(){r&&c.forEach((function(t){t.removeEventListener("scroll",n.update,tt)})),a&&l.removeEventListener("resize",n.update,tt)}},data:{}},nt={left:"right",right:"left",bottom:"top",top:"bottom"};function it(t){return t.replace(/left|right|bottom|top/g,(function(t){return nt[t]}))}var ot={start:"end",end:"start"};function rt(t){return t.replace(/start|end/g,(function(t){return ot[t]}))}function st(t){var e=A(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function at(t){return B(z(t)).left+st(t).scrollLeft}function lt(t){var e=H(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ct(t){return["html","body","#document"].indexOf(O(t))>=0?t.ownerDocument.body:T(t)&<(t)?t:ct(q(t))}function ut(t,e){var n;void 0===e&&(e=[]);var i=ct(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=A(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(ut(q(s)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function dt(t,e,n){return e===c?ft(function(t,e){var n=A(t),i=z(t),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,l=0;if(o){r=o.width,s=o.height;var c=N();(c||!c&&"fixed"===e)&&(a=o.offsetLeft,l=o.offsetTop)}return{width:r,height:s,x:a+at(t),y:l}}(t,n)):C(e)?function(t,e){var n=B(t,!1,"fixed"===e);return n.top=n.top+t.clientTop,n.left=n.left+t.clientLeft,n.bottom=n.top+t.clientHeight,n.right=n.left+t.clientWidth,n.width=t.clientWidth,n.height=t.clientHeight,n.x=n.left,n.y=n.top,n}(e,n):ft(function(t){var e,n=z(t),i=st(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=k(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=k(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+at(t),l=-i.scrollTop;return"rtl"===H(o||n).direction&&(a+=k(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(z(t)))}function pt(t,e,n,i){var o="clippingParents"===e?function(t){var e=ut(q(t)),n=["absolute","fixed"].indexOf(H(t).position)>=0&&T(t)?R(t):t;return C(n)?e.filter((function(t){return C(t)&&I(t,n)&&"body"!==O(t)})):[]}(t):[].concat(e),r=[].concat(o,[n]),s=r[0],a=r.reduce((function(e,n){var o=dt(t,n,i);return e.top=k(o.top,e.top),e.right=D(o.right,e.right),e.bottom=D(o.bottom,e.bottom),e.left=k(o.left,e.left),e}),dt(t,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function ht(o){var r,l=o.reference,c=o.element,u=o.placement,f=u?j(u):null,d=u?X(u):null,p=l.x+l.width/2-c.width/2,h=l.y+l.height/2-c.height/2;switch(f){case t:r={x:p,y:l.y-c.height};break;case e:r={x:p,y:l.y+l.height};break;case n:r={x:l.x+l.width,y:h};break;case i:r={x:l.x-c.width,y:h};break;default:r={x:l.x,y:l.y}}var m=f?V(f):null;if(null!=m){var g="y"===m?"height":"width";switch(d){case s:r[m]=r[m]-(l[g]/2-c[g]/2);break;case a:r[m]=r[m]+(l[g]/2-c[g]/2)}}return r}function mt(i,o){void 0===o&&(o={});var s=o,a=s.placement,d=void 0===a?i.placement:a,p=s.strategy,h=void 0===p?i.strategy:p,m=s.boundary,g=void 0===m?l:m,v=s.rootBoundary,b=void 0===v?c:v,y=s.elementContext,_=void 0===y?u:y,w=s.altBoundary,E=void 0!==w&&w,x=s.padding,O=void 0===x?0:x,A=U("number"!=typeof O?O:K(O,r)),T=_===u?f:u,L=i.rects.popper,S=i.elements[E?T:_],j=pt(C(S)?S:S.contextElement||z(i.elements.popper),g,b,h),k=B(i.elements.reference),D=ht({reference:k,element:L,strategy:"absolute",placement:d}),P=ft(Object.assign({},L,D)),M=_===u?P:k,N={top:j.top-M.top+A.top,bottom:M.bottom-j.bottom+A.bottom,left:j.left-M.left+A.left,right:M.right-j.right+A.right},F=i.modifiersData.offset;if(_===u&&F){var I=F[d];Object.keys(N).forEach((function(i){var o=[n,e].indexOf(i)>=0?1:-1,r=[t,e].indexOf(i)>=0?"y":"x";N[i]+=I[r]*o}))}return N}function gt(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,l=n.flipVariations,c=n.allowedAutoPlacements,u=void 0===c?p:c,f=X(i),h=f?l?d:d.filter((function(t){return X(t)===f})):r,m=h.filter((function(t){return u.indexOf(t)>=0}));0===m.length&&(m=h);var g=m.reduce((function(e,n){return e[n]=mt(t,{placement:n,boundary:o,rootBoundary:s,padding:a})[j(n)],e}),{});return Object.keys(g).sort((function(t,e){return g[t]-g[e]}))}var vt={name:"flip",enabled:!0,phase:"main",fn:function(r){var a=r.state,l=r.options,c=r.name;if(!a.modifiersData[c]._skip){for(var u=l.mainAxis,f=void 0===u||u,d=l.altAxis,p=void 0===d||d,h=l.fallbackPlacements,m=l.padding,g=l.boundary,v=l.rootBoundary,b=l.altBoundary,y=l.flipVariations,_=void 0===y||y,w=l.allowedAutoPlacements,E=a.options.placement,x=j(E),O=h||(x===E||!_?[it(E)]:function(t){if(j(t)===o)return[];var e=it(t);return[rt(t),e,rt(e)]}(E)),A=[E].concat(O).reduce((function(t,e){return t.concat(j(e)===o?gt(a,{placement:e,boundary:g,rootBoundary:v,padding:m,flipVariations:_,allowedAutoPlacements:w}):e)}),[]),C=a.rects.reference,T=a.rects.popper,L=new Map,S=!0,k=A[0],D=0;D=0,F=B?"width":"height",I=mt(a,{placement:P,boundary:g,rootBoundary:v,altBoundary:b,padding:m}),H=B?N?n:i:N?e:t;C[F]>T[F]&&(H=it(H));var $=it(H),z=[];if(f&&z.push(I[M]<=0),p&&z.push(I[H]<=0,I[$]<=0),z.every((function(t){return t}))){k=P,S=!1;break}L.set(P,z)}if(S)for(var q=function(t){var e=A.find((function(e){var n=L.get(e);if(n)return n.slice(0,t).every((function(t){return t}))}));if(e)return k=e,"break"},W=_?3:1;W>0;W--){if("break"===q(W))break}a.placement!==k&&(a.modifiersData[c]._skip=!0,a.placement=k,a.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(o){return[t,n,e,i].some((function(t){return o[t]>=0}))}var _t={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,i=e.rects.reference,o=e.rects.popper,r=e.modifiersData.preventOverflow,s=mt(e,{elementContext:"reference"}),a=mt(e,{altBoundary:!0}),l=bt(s,i),c=bt(a,o,r),u=yt(l),f=yt(c);e.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var o=e.state,r=e.options,s=e.name,a=r.offset,l=void 0===a?[0,0]:a,c=p.reduce((function(e,r){return e[r]=function(e,o,r){var s=j(e),a=[i,t].indexOf(s)>=0?-1:1,l="function"==typeof r?r(Object.assign({},o,{placement:e})):r,c=l[0],u=l[1];return c=c||0,u=(u||0)*a,[i,n].indexOf(s)>=0?{x:u,y:c}:{x:c,y:u}}(r,o.rects,l),e}),{}),u=c[o.placement],f=u.x,d=u.y;null!=o.modifiersData.popperOffsets&&(o.modifiersData.popperOffsets.x+=f,o.modifiersData.popperOffsets.y+=d),o.modifiersData[s]=c}};var Et={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name;e.modifiersData[n]=ht({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(o){var r=o.state,a=o.options,l=o.name,c=a.mainAxis,u=void 0===c||c,f=a.altAxis,d=void 0!==f&&f,p=a.boundary,h=a.rootBoundary,m=a.altBoundary,g=a.padding,v=a.tether,b=void 0===v||v,y=a.tetherOffset,_=void 0===y?0:y,w=mt(r,{boundary:p,rootBoundary:h,padding:g,altBoundary:m}),E=j(r.placement),x=X(r.placement),O=!x,A=V(E),C="x"===A?"y":"x",T=r.modifiersData.popperOffsets,L=r.rects.reference,S=r.rects.popper,P="function"==typeof _?_(Object.assign({},r.rects,{placement:r.placement})):_,M="number"==typeof P?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),N=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,B={x:0,y:0};if(T){if(u){var I,H="y"===A?t:i,$="y"===A?e:n,z="y"===A?"height":"width",q=T[A],W=q+w[H],U=q-w[$],K=b?-S[z]/2:0,Q=x===s?L[z]:S[z],G=x===s?-S[z]:-L[z],J=r.elements.arrow,Z=b&&J?F(J):{width:0,height:0},tt=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[H],nt=tt[$],it=Y(0,L[z],Z[z]),ot=O?L[z]/2-K-it-et-M.mainAxis:Q-it-et-M.mainAxis,rt=O?-L[z]/2+K+it+nt+M.mainAxis:G+it+nt+M.mainAxis,st=r.elements.arrow&&R(r.elements.arrow),at=st?"y"===A?st.clientTop||0:st.clientLeft||0:0,lt=null!=(I=null==N?void 0:N[A])?I:0,ct=q+rt-lt,ut=Y(b?D(W,q+ot-lt-at):W,q,b?k(U,ct):U);T[A]=ut,B[A]=ut-q}if(d){var ft,dt="x"===A?t:i,pt="x"===A?e:n,ht=T[C],gt="y"===C?"height":"width",vt=ht+w[dt],bt=ht-w[pt],yt=-1!==[t,i].indexOf(E),_t=null!=(ft=null==N?void 0:N[C])?ft:0,wt=yt?vt:ht-L[gt]-S[gt]-_t+M.altAxis,Et=yt?ht+L[gt]+S[gt]-_t-M.altAxis:bt,xt=b&&yt?function(t,e,n){var i=Y(t,e,n);return i>n?n:i}(wt,ht,Et):Y(b?wt:vt,ht,b?Et:bt);T[C]=xt,B[C]=xt-ht}r.modifiersData[l]=B}},requiresIfExists:["offset"]};function Ot(t,e,n){void 0===n&&(n=!1);var i,o,r=T(e),s=T(e)&&function(t){var e=t.getBoundingClientRect(),n=P(e.width)/t.offsetWidth||1,i=P(e.height)/t.offsetHeight||1;return 1!==n||1!==i}(e),a=z(e),l=B(t,s,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==O(e)||lt(a))&&(c=(i=e)!==A(i)&&T(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:st(i)),T(e)?((u=B(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):a&&(u.x=at(a))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function At(t){var e=new Map,n=new Set,i=[];function o(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!n.has(t)){var i=e.get(t);i&&o(i)}})),i.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||o(t)})),i}var Ct={placement:"bottom",modifiers:[],strategy:"absolute"};function Tt(){for(var t=arguments.length,e=new Array(t),n=0;nPt.has(t)&&Pt.get(t).get(e)||null,remove(t,e){if(!Pt.has(t))return;const n=Pt.get(t);n.delete(e),0===n.size&&Pt.delete(t)}};const Nt="transitionend",Bt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),It=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Bt(t)):null,Ht=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?Ht(t.parentNode):null},$t=()=>{},zt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,qt=[],Wt=()=>"rtl"===document.documentElement.dir,Rt=t=>{var e;e=()=>{const e=zt();if(e){const n=t.NAME,i=e.fn[n];e.fn[n]=t.jQueryInterface,e.fn[n].Constructor=t,e.fn[n].noConflict=()=>(e.fn[n]=i,t.jQueryInterface)}},"loading"===document.readyState?(qt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of qt)t()})),qt.push(e)):e()},Vt=function(t){let e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;return"function"==typeof t?t(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):e},Yt=function(t,e){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void Vt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:n}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(n))):0})(e)+5;let i=!1;const o=n=>{let{target:r}=n;r===e&&(i=!0,e.removeEventListener(Nt,o),Vt(t))};e.addEventListener(Nt,o),setTimeout((()=>{i||e.dispatchEvent(new Event(Nt))}),n)},Ut=/[^.]*(?=\..*)\.|.*/,Kt=/\..*/,Qt=/::\d+$/,Xt={};let Gt=1;const Jt={mouseenter:"mouseover",mouseleave:"mouseout"},Zt=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function te(t,e){return e&&`${e}::${Gt++}`||t.uidEvent||Gt++}function ee(t){const e=te(t);return t.uidEvent=e,Xt[e]=Xt[e]||{},Xt[e]}function ne(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===n))}function ie(t,e,n){const i="string"==typeof e,o=i?n:e||n;let r=ae(t);return Zt.has(r)||(r=t),[i,o,r]}function oe(t,e,n,i,o){if("string"!=typeof e||!t)return;let[r,s,a]=ie(e,n,i);if(e in Jt){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s=t(s)}const l=ee(t),c=l[a]||(l[a]={}),u=ne(c,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=te(s,e.replace(Ut,"")),d=r?function(t,e,n){return function i(o){const r=t.querySelectorAll(e);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return ce(o,{delegateTarget:s}),i.oneOff&&le.off(t,o.type,e,n),n.apply(s,[o])}}(t,n,s):function(t,e){return function n(i){return ce(i,{delegateTarget:t}),n.oneOff&&le.off(t,i.type,e),e.apply(t,[i])}}(t,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,c[f]=d,t.addEventListener(a,d,r)}function re(t,e,n,i,o){const r=ne(e[n],i,o);r&&(t.removeEventListener(n,r,Boolean(o)),delete e[n][r.uidEvent])}function se(t,e,n,i){const o=e[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&re(t,e,n,s.callable,s.delegationSelector)}function ae(t){return t=t.replace(Kt,""),Jt[t]||t}const le={on(t,e,n,i){oe(t,e,n,i,!1)},one(t,e,n,i){oe(t,e,n,i,!0)},off(t,e,n,i){if("string"!=typeof e||!t)return;const[o,r,s]=ie(e,n,i),a=s!==e,l=ee(t),c=l[s]||{},u=e.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(l))se(t,l,n,e.slice(1));for(const[n,i]of Object.entries(c)){const o=n.replace(Qt,"");a&&!e.includes(o)||re(t,l,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;re(t,l,s,r,o?n:null)}},trigger(t,e,n){if("string"!=typeof e||!t)return null;const i=zt();let o=null,r=!0,s=!0,a=!1;e!==ae(e)&&i&&(o=i.Event(e,n),i(t).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const l=ce(new Event(e,{bubbles:r,cancelable:!0}),n);return a&&l.preventDefault(),s&&t.dispatchEvent(l),l.defaultPrevented&&o&&o.preventDefault(),l}};function ce(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(e))try{t[n]=i}catch{Object.defineProperty(t,n,{configurable:!0,get:()=>i})}return t}function ue(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function fe(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const de={setDataAttribute(t,e,n){t.setAttribute(`data-bs-${fe(e)}`,n)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${fe(e)}`)},getDataAttributes(t){if(!t)return{};const e={},n=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=ue(t.dataset[i])}return e},getDataAttribute:(t,e)=>ue(t.getAttribute(`data-bs-${fe(e)}`))};class pe{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const n=Ft(e)?de.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...Ft(e)?de.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[i,o]of Object.entries(e)){const e=t[i],r=Ft(e)?"element":null==(n=e)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${o}".`)}var n}}class he extends pe{constructor(t,e){super(),(t=It(t))&&(this._element=t,this._config=this._getConfig(e),Mt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Mt.remove(this._element,this.constructor.DATA_KEY),le.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e){Yt(t,e,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Mt.get(It(t),this.DATA_KEY)}static getOrCreateInstance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const me={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},ge=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),ve=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,be=(t,e)=>{const n=t.nodeName.toLowerCase();return e.includes(n)?!ge.has(n)||Boolean(ve.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(n)))};const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let n=t.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),e=n&&"#"!==n?n.trim():null}return e?e.split(",").map((t=>Bt(t))).join(","):null},_e={find(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(e,t)},children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const n=[];let i=t.parentNode.closest(e);for(;i;)n.push(i),i=i.parentNode.closest(e);return n},prev(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return[n];n=n.previousElementSibling}return[]},next(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return[n];n=n.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!(t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")))(t)&&(t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),n=t.closest("details:not([open])");if(!n)return e;if(n!==t){const e=t.closest("summary");if(e&&e.parentNode!==n)return!1;if(null===e)return!1}return e})(t)))},getSelectorFromElement(t){const e=ye(t);return e&&_e.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?_e.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?_e.find(e):[]}},we={allowList:me,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Ee={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},xe={entry:"(string|element|function|null)",selector:"(string|element)"};class Oe extends pe{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return we}static get DefaultType(){return Ee}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,n]of Object.entries(this._config.content))this._setContent(t,n,e);const e=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&e.classList.add(...n.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,n]of Object.entries(t))super._typeCheckConfig({selector:e,entry:n},xe)}_setContent(t,e,n){const i=_e.findOne(n,t);i&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(It(e),i):this._config.html?i.innerHTML=this._maybeSanitize(e):i.textContent=e:i.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,n){if(!t.length)return t;if(n&&"function"==typeof n)return n(t);const i=(new window.DOMParser).parseFromString(t,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const t of o){const n=t.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){t.remove();continue}const i=[].concat(...t.attributes),o=[].concat(e["*"]||[],e[n]||[]);for(const e of i)be(e,o)||t.removeAttribute(e.nodeName)}return i.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Vt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ae=new Set(["sanitize","allowList","sanitizeFn"]),Ce="fade",Te="show",Le=".tooltip-inner",Se=".modal",je="hide.bs.modal",ke="hover",De="focus",Pe={AUTO:"auto",TOP:"top",RIGHT:Wt()?"left":"right",BOTTOM:"bottom",LEFT:Wt()?"right":"left"},Me={allowList:me,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Ne={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Be extends he{constructor(t,e){if(void 0===Dt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Me}static get DefaultType(){return Ne}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),le.off(this._element.closest(Se),je,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=le.trigger(this._element,this.constructor.eventName("show")),e=(Ht(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),le.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Te),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))le.on(t,"mouseover",$t);this._queueCallback((()=>{le.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(le.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Te),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))le.off(t,"mouseover",$t);this._activeTrigger.click=!1,this._activeTrigger[De]=!1,this._activeTrigger[ke]=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),le.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ce,Te),e.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",n),this._isAnimated()&&e.classList.add(Ce),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Oe({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Le]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ce)}_isShown(){return this.tip&&this.tip.classList.contains(Te)}_createPopper(t){const e=Vt(this._config.placement,[this,t,this._element]),n=Pe[e.toUpperCase()];return kt(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Vt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Vt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)le.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ke?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=e===ke?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");le.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?De:ke]=!0,e._enter()})),le.on(this._element,n,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?De:ke]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},le.on(this._element.closest(Se),je,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=de.getDataAttributes(this._element);for(const t of Object.keys(e))Ae.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:It(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,n]of Object.entries(this._config))this.constructor.Default[e]!==n&&(t[e]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=Be.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Rt(Be);const Fe=document.getElementById("mode-toggle");function Ie(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const He="sidebar-display";class $e{static toggle(){!1===$e.isExpanded?document.body.setAttribute(He,""):document.body.removeAttribute(He),$e.isExpanded=!$e.isExpanded}}Ie($e,"isExpanded",!1);const ze=document.getElementById("sidebar-trigger"),qe=document.getElementById("search-trigger"),We=document.getElementById("search-cancel"),Re=document.querySelectorAll("#main-wrapper>.container>.row"),Ve=document.getElementById("topbar-title"),Ye=document.getElementById("search"),Ue=document.getElementById("search-result-wrapper"),Ke=document.getElementById("search-results"),Qe=document.getElementById("search-input"),Xe=document.getElementById("search-hints"),Ge="d-block",Je="d-none",Ze="input-focus",tn="d-flex";class en{static on(){ze.classList.add(Je),Ve.classList.add(Je),qe.classList.add(Je),Ye.classList.add(tn),We.classList.add(Ge)}static off(){We.classList.remove(Ge),Ye.classList.remove(tn),ze.classList.remove(Je),Ve.classList.remove(Je),qe.classList.remove(Je)}}class nn{static on(){this.resultVisible||(Ue.classList.remove(Je),Re.forEach((t=>{t.classList.add(Je)})),this.resultVisible=!0)}static off(){this.resultVisible&&(Ke.innerHTML="",Xe.classList.contains(Je)&&Xe.classList.remove(Je),Ue.classList.add(Je),Re.forEach((t=>{t.classList.remove(Je)})),Qe.textContent="",this.resultVisible=!1)}}function on(){return We.classList.contains(Ge)}Ie(nn,"resultVisible",!1);const rn=".bs.collapse",sn=`show${rn}`,an=`shown${rn}`,ln=`hide${rn}`,cn=`hidden${rn}`,un=`click${rn}.data-api`,fn="show",dn="collapse",pn="collapsing",hn=`:scope .${dn} .${dn}`,mn='[data-bs-toggle="collapse"]',gn={parent:null,toggle:!0},vn={parent:"(null|element)",toggle:"boolean"};class bn extends he{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=_e.find(mn);for(const t of n){const e=_e.getSelectorFromElement(t),n=_e.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return gn}static get DefaultType(){return vn}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>bn.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(le.trigger(this._element,sn).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(dn),this._element.classList.add(pn),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn,fn),this._element.style[e]="",le.trigger(this._element,an)}),this._element,!0),this._element.style[e]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(le.trigger(this._element,ln).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,this._element.offsetHeight,this._element.classList.add(pn),this._element.classList.remove(dn,fn);for(const t of this._triggerArray){const e=_e.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn),le.trigger(this._element,cn)}),this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(fn)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=It(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(mn);for(const e of t){const t=_e.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=_e.find(hn,this._config.parent);return _e.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const n of t)n.classList.toggle("collapsed",!e),n.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const n=bn.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===n[t])throw new TypeError(`No method named "${t}"`);n[t]()}}))}}le.on(document,un,mn,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of _e.getMultipleElementsFromSelector(this))bn.getOrCreateInstance(t,{toggle:!1}).toggle()})),Rt(bn),document.getElementsByClassName("collapse");const yn="data-src",_n="data-lqip",wn="shimmer",En="blur";function xn(t){this.parentElement.classList.remove(t)}function On(){this.complete&&(this.hasAttribute(_n)?xn.call(this,En):xn.call(this,wn))}function An(){const t=this.getAttribute(yn);this.setAttribute("src",encodeURI(t)),this.removeAttribute(yn)}class Cn{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(t){return Number(t.getAttribute(this.attrTimestamp))}static getDateFormat(t){return t.getAttribute(this.attrDateFormat)}}var Tn;const Ln=document.getElementById("toc-bar"),Sn=document.getElementById("toc-solo-trigger"),jn=document.getElementsByClassName("toc-trigger"),kn=document.getElementById("toc-popup"),Dn=document.getElementById("toc-popup-close"),Pn="overflow-hidden",Mn="closing";class Nn{static initBar(){new IntersectionObserver((t=>{t.forEach((t=>{Ln.classList.toggle("invisible",t.isIntersecting)}))}),{rootMargin:`-${this.barHeight}px 0px 0px 0px`}).observe(Sn),this.invisible=!1}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach((t=>{t.onclick=this.hidePopup}))}static refresh(){this.invisible&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static showPopup(){Nn.lockScroll(!0),kn.showModal();kn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(t){"cancel"===t?.type&&t.preventDefault(),kn.open&&(kn.toggleAttribute(Mn),kn.addEventListener("animationend",(()=>{kn.toggleAttribute(Mn),kn.close()}),{once:!0}),Nn.lockScroll(!1))}static lockScroll(t){document.documentElement.classList.toggle(Pn,t),document.body.classList.toggle(Pn,t)}static clickBackdrop(t){const e=t.target.getBoundingClientRect();(t.clientXe.right||t.clientYe.bottom)&&Nn.hidePopup()}static initComponents(){this.initBar(),[...jn].forEach((t=>{t.onclick=this.showPopup})),kn.onclick=this.clickBackdrop,Dn.onclick=kn.oncancel=this.hidePopup}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}Tn=Nn,Ie(Nn,"invisible",!0),Ie(Nn,"barHeight",48),Ie(Nn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:Tn.barHeight});Ie(class{static refresh(){tocbot.refresh(this.options)}static init(){document.getElementById("toc-wrapper")&&tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),function(){const t=document.querySelectorAll("article img");if(0===t.length)return;t.forEach((t=>{t.addEventListener("load",On)})),document.querySelectorAll('article img[loading="lazy"]').forEach((t=>{t.complete&&xn.call(t,wn)}));const e=document.querySelectorAll(`article img[${_n}="true"]`);e.length&&e.forEach((t=>{An.call(t)}))}(),dayjs.locale(Cn.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${Cn.attrTimestamp}]`).forEach((t=>{const e=dayjs.unix(Cn.getTimestamp(t)),n=e.format(Cn.getDateFormat(t));if(t.textContent=n,t.removeAttribute(Cn.attrTimestamp),t.removeAttribute(Cn.attrDateFormat),t.hasAttribute("data-bs-toggle")&&"tooltip"===t.getAttribute("data-bs-toggle")){const n=e.format("llll");t.setAttribute("data-bs-title",n)}})),Fe&&Fe.addEventListener("click",(()=>{modeToggle.flipMode()})),document.getElementById("sidebar-trigger").addEventListener("click",$e.toggle),document.getElementById("mask").addEventListener("click",$e.toggle),qe.addEventListener("click",(()=>{en.on(),nn.on(),Qe.focus()})),We.addEventListener("click",(()=>{en.off(),nn.off()})),Qe.addEventListener("focus",(()=>{Ye.classList.add(Ze)})),Qe.addEventListener("focusout",(()=>{Ye.classList.remove(Ze)})),Qe.addEventListener("input",(()=>{""===Qe.value?on()?Xe.classList.remove(Je):nn.off():(nn.on(),on()&&Xe.classList.add(Je))})),function(){const t=document.getElementById("back-to-top");window.addEventListener("scroll",(()=>{window.scrollY>50?t.classList.add("show"):t.classList.remove("show")})),t.addEventListener("click",(()=>{window.scrollTo({top:0})}))}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map((t=>new Be(t)))}(); diff --git a/assets/js/dist/misc.min.js b/assets/js/dist/misc.min.js new file mode 100644 index 00000000000..84fa4a03b7e --- /dev/null +++ b/assets/js/dist/misc.min.js @@ -0,0 +1,4 @@ +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";var t="top",e="bottom",n="right",i="left",o="auto",r=[t,e,n,i],s="start",a="end",l="clippingParents",c="viewport",u="popper",f="reference",d=r.reduce((function(t,e){return t.concat([e+"-"+s,e+"-"+a])}),[]),p=[].concat(r,[o]).reduce((function(t,e){return t.concat([e,e+"-"+s,e+"-"+a])}),[]),h="beforeRead",m="read",g="afterRead",v="beforeMain",b="main",y="afterMain",_="beforeWrite",w="write",E="afterWrite",x=[h,m,g,v,b,y,_,w,E];function O(t){return t?(t.nodeName||"").toLowerCase():null}function A(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function C(t){return t instanceof A(t).Element||t instanceof Element}function T(t){return t instanceof A(t).HTMLElement||t instanceof HTMLElement}function L(t){return"undefined"!=typeof ShadowRoot&&(t instanceof A(t).ShadowRoot||t instanceof ShadowRoot)}var S={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];T(o)&&O(o)&&(Object.assign(o.style,n),Object.keys(i).forEach((function(t){var e=i[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var i=e.elements[t],o=e.attributes[t]||{},r=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce((function(t,e){return t[e]="",t}),{});T(i)&&O(i)&&(Object.assign(i.style,r),Object.keys(o).forEach((function(t){i.removeAttribute(t)})))}))}},requires:["computeStyles"]};function j(t){return t.split("-")[0]}var k=Math.max,D=Math.min,P=Math.round;function M(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function N(){return!/^((?!chrome|android).)*safari/i.test(M())}function B(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var i=t.getBoundingClientRect(),o=1,r=1;e&&T(t)&&(o=t.offsetWidth>0&&P(i.width)/t.offsetWidth||1,r=t.offsetHeight>0&&P(i.height)/t.offsetHeight||1);var s=(C(t)?A(t):window).visualViewport,a=!N()&&n,l=(i.left+(a&&s?s.offsetLeft:0))/o,c=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:c,right:l+u,bottom:c+f,left:l,x:l,y:c}}function F(t){var e=B(t),n=t.offsetWidth,i=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:i}}function I(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&L(n)){var i=e;do{if(i&&t.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function H(t){return A(t).getComputedStyle(t)}function $(t){return["table","td","th"].indexOf(O(t))>=0}function z(t){return((C(t)?t.ownerDocument:t.document)||window.document).documentElement}function W(t){return"html"===O(t)?t:t.assignedSlot||t.parentNode||(L(t)?t.host:null)||z(t)}function R(t){return T(t)&&"fixed"!==H(t).position?t.offsetParent:null}function q(t){for(var e=A(t),n=R(t);n&&$(n)&&"static"===H(n).position;)n=R(n);return n&&("html"===O(n)||"body"===O(n)&&"static"===H(n).position)?e:n||function(t){var e=/firefox/i.test(M());if(/Trident/i.test(M())&&T(t)&&"fixed"===H(t).position)return null;var n=W(t);for(L(n)&&(n=n.host);T(n)&&["html","body"].indexOf(O(n))<0;){var i=H(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||e&&"filter"===i.willChange||e&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(t)||e}function V(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Y(t,e,n){return k(t,D(e,n))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function K(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(o){var s,a=o.state,l=o.name,c=o.options,u=a.elements.arrow,f=a.modifiersData.popperOffsets,d=j(a.placement),p=V(d),h=[i,n].indexOf(d)>=0?"height":"width";if(u&&f){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:K(t,r))}(c.padding,a),g=F(u),v="y"===p?t:i,b="y"===p?e:n,y=a.rects.reference[h]+a.rects.reference[p]-f[p]-a.rects.popper[h],_=f[p]-a.rects.reference[p],w=q(u),E=w?"y"===p?w.clientHeight||0:w.clientWidth||0:0,x=y/2-_/2,O=m[v],A=E-g[h]-m[b],C=E/2-g[h]/2+x,T=Y(O,C,A),L=p;a.modifiersData[l]=((s={})[L]=T,s.centerOffset=T-C,s)}},effect:function(t){var e=t.state,n=t.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=e.elements.popper.querySelector(i)))&&I(e.elements.popper,i)&&(e.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function X(t){return t.split("-")[1]}var G={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J(o){var r,s=o.popper,l=o.popperRect,c=o.placement,u=o.variation,f=o.offsets,d=o.position,p=o.gpuAcceleration,h=o.adaptive,m=o.roundOffsets,g=o.isFixed,v=f.x,b=void 0===v?0:v,y=f.y,_=void 0===y?0:y,w="function"==typeof m?m({x:b,y:_}):{x:b,y:_};b=w.x,_=w.y;var E=f.hasOwnProperty("x"),x=f.hasOwnProperty("y"),O=i,C=t,T=window;if(h){var L=q(s),S="clientHeight",j="clientWidth";if(L===A(s)&&"static"!==H(L=z(s)).position&&"absolute"===d&&(S="scrollHeight",j="scrollWidth"),c===t||(c===i||c===n)&&u===a)C=e,_-=(g&&L===T&&T.visualViewport?T.visualViewport.height:L[S])-l.height,_*=p?1:-1;if(c===i||(c===t||c===e)&&u===a)O=n,b-=(g&&L===T&&T.visualViewport?T.visualViewport.width:L[j])-l.width,b*=p?1:-1}var k,D=Object.assign({position:d},h&&G),M=!0===m?function(t,e){var n=t.x,i=t.y,o=e.devicePixelRatio||1;return{x:P(n*o)/o||0,y:P(i*o)/o||0}}({x:b,y:_},A(s)):{x:b,y:_};return b=M.x,_=M.y,p?Object.assign({},D,((k={})[C]=x?"0":"",k[O]=E?"0":"",k.transform=(T.devicePixelRatio||1)<=1?"translate("+b+"px, "+_+"px)":"translate3d("+b+"px, "+_+"px, 0)",k)):Object.assign({},D,((r={})[C]=x?_+"px":"",r[O]=E?b+"px":"",r.transform="",r))}var Z={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,n=t.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:j(e.placement),variation:X(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,J(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,J(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},tt={passive:!0};var et={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,n=t.instance,i=t.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,l=A(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&c.forEach((function(t){t.addEventListener("scroll",n.update,tt)})),a&&l.addEventListener("resize",n.update,tt),function(){r&&c.forEach((function(t){t.removeEventListener("scroll",n.update,tt)})),a&&l.removeEventListener("resize",n.update,tt)}},data:{}},nt={left:"right",right:"left",bottom:"top",top:"bottom"};function it(t){return t.replace(/left|right|bottom|top/g,(function(t){return nt[t]}))}var ot={start:"end",end:"start"};function rt(t){return t.replace(/start|end/g,(function(t){return ot[t]}))}function st(t){var e=A(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function at(t){return B(z(t)).left+st(t).scrollLeft}function lt(t){var e=H(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ct(t){return["html","body","#document"].indexOf(O(t))>=0?t.ownerDocument.body:T(t)&<(t)?t:ct(W(t))}function ut(t,e){var n;void 0===e&&(e=[]);var i=ct(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=A(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(ut(W(s)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function dt(t,e,n){return e===c?ft(function(t,e){var n=A(t),i=z(t),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,l=0;if(o){r=o.width,s=o.height;var c=N();(c||!c&&"fixed"===e)&&(a=o.offsetLeft,l=o.offsetTop)}return{width:r,height:s,x:a+at(t),y:l}}(t,n)):C(e)?function(t,e){var n=B(t,!1,"fixed"===e);return n.top=n.top+t.clientTop,n.left=n.left+t.clientLeft,n.bottom=n.top+t.clientHeight,n.right=n.left+t.clientWidth,n.width=t.clientWidth,n.height=t.clientHeight,n.x=n.left,n.y=n.top,n}(e,n):ft(function(t){var e,n=z(t),i=st(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=k(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=k(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+at(t),l=-i.scrollTop;return"rtl"===H(o||n).direction&&(a+=k(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(z(t)))}function pt(t,e,n,i){var o="clippingParents"===e?function(t){var e=ut(W(t)),n=["absolute","fixed"].indexOf(H(t).position)>=0&&T(t)?q(t):t;return C(n)?e.filter((function(t){return C(t)&&I(t,n)&&"body"!==O(t)})):[]}(t):[].concat(e),r=[].concat(o,[n]),s=r[0],a=r.reduce((function(e,n){var o=dt(t,n,i);return e.top=k(o.top,e.top),e.right=D(o.right,e.right),e.bottom=D(o.bottom,e.bottom),e.left=k(o.left,e.left),e}),dt(t,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function ht(o){var r,l=o.reference,c=o.element,u=o.placement,f=u?j(u):null,d=u?X(u):null,p=l.x+l.width/2-c.width/2,h=l.y+l.height/2-c.height/2;switch(f){case t:r={x:p,y:l.y-c.height};break;case e:r={x:p,y:l.y+l.height};break;case n:r={x:l.x+l.width,y:h};break;case i:r={x:l.x-c.width,y:h};break;default:r={x:l.x,y:l.y}}var m=f?V(f):null;if(null!=m){var g="y"===m?"height":"width";switch(d){case s:r[m]=r[m]-(l[g]/2-c[g]/2);break;case a:r[m]=r[m]+(l[g]/2-c[g]/2)}}return r}function mt(i,o){void 0===o&&(o={});var s=o,a=s.placement,d=void 0===a?i.placement:a,p=s.strategy,h=void 0===p?i.strategy:p,m=s.boundary,g=void 0===m?l:m,v=s.rootBoundary,b=void 0===v?c:v,y=s.elementContext,_=void 0===y?u:y,w=s.altBoundary,E=void 0!==w&&w,x=s.padding,O=void 0===x?0:x,A=U("number"!=typeof O?O:K(O,r)),T=_===u?f:u,L=i.rects.popper,S=i.elements[E?T:_],j=pt(C(S)?S:S.contextElement||z(i.elements.popper),g,b,h),k=B(i.elements.reference),D=ht({reference:k,element:L,strategy:"absolute",placement:d}),P=ft(Object.assign({},L,D)),M=_===u?P:k,N={top:j.top-M.top+A.top,bottom:M.bottom-j.bottom+A.bottom,left:j.left-M.left+A.left,right:M.right-j.right+A.right},F=i.modifiersData.offset;if(_===u&&F){var I=F[d];Object.keys(N).forEach((function(i){var o=[n,e].indexOf(i)>=0?1:-1,r=[t,e].indexOf(i)>=0?"y":"x";N[i]+=I[r]*o}))}return N}function gt(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,l=n.flipVariations,c=n.allowedAutoPlacements,u=void 0===c?p:c,f=X(i),h=f?l?d:d.filter((function(t){return X(t)===f})):r,m=h.filter((function(t){return u.indexOf(t)>=0}));0===m.length&&(m=h);var g=m.reduce((function(e,n){return e[n]=mt(t,{placement:n,boundary:o,rootBoundary:s,padding:a})[j(n)],e}),{});return Object.keys(g).sort((function(t,e){return g[t]-g[e]}))}var vt={name:"flip",enabled:!0,phase:"main",fn:function(r){var a=r.state,l=r.options,c=r.name;if(!a.modifiersData[c]._skip){for(var u=l.mainAxis,f=void 0===u||u,d=l.altAxis,p=void 0===d||d,h=l.fallbackPlacements,m=l.padding,g=l.boundary,v=l.rootBoundary,b=l.altBoundary,y=l.flipVariations,_=void 0===y||y,w=l.allowedAutoPlacements,E=a.options.placement,x=j(E),O=h||(x===E||!_?[it(E)]:function(t){if(j(t)===o)return[];var e=it(t);return[rt(t),e,rt(e)]}(E)),A=[E].concat(O).reduce((function(t,e){return t.concat(j(e)===o?gt(a,{placement:e,boundary:g,rootBoundary:v,padding:m,flipVariations:_,allowedAutoPlacements:w}):e)}),[]),C=a.rects.reference,T=a.rects.popper,L=new Map,S=!0,k=A[0],D=0;D=0,F=B?"width":"height",I=mt(a,{placement:P,boundary:g,rootBoundary:v,altBoundary:b,padding:m}),H=B?N?n:i:N?e:t;C[F]>T[F]&&(H=it(H));var $=it(H),z=[];if(f&&z.push(I[M]<=0),p&&z.push(I[H]<=0,I[$]<=0),z.every((function(t){return t}))){k=P,S=!1;break}L.set(P,z)}if(S)for(var W=function(t){var e=A.find((function(e){var n=L.get(e);if(n)return n.slice(0,t).every((function(t){return t}))}));if(e)return k=e,"break"},R=_?3:1;R>0;R--){if("break"===W(R))break}a.placement!==k&&(a.modifiersData[c]._skip=!0,a.placement=k,a.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function bt(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(o){return[t,n,e,i].some((function(t){return o[t]>=0}))}var _t={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,i=e.rects.reference,o=e.rects.popper,r=e.modifiersData.preventOverflow,s=mt(e,{elementContext:"reference"}),a=mt(e,{altBoundary:!0}),l=bt(s,i),c=bt(a,o,r),u=yt(l),f=yt(c);e.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var o=e.state,r=e.options,s=e.name,a=r.offset,l=void 0===a?[0,0]:a,c=p.reduce((function(e,r){return e[r]=function(e,o,r){var s=j(e),a=[i,t].indexOf(s)>=0?-1:1,l="function"==typeof r?r(Object.assign({},o,{placement:e})):r,c=l[0],u=l[1];return c=c||0,u=(u||0)*a,[i,n].indexOf(s)>=0?{x:u,y:c}:{x:c,y:u}}(r,o.rects,l),e}),{}),u=c[o.placement],f=u.x,d=u.y;null!=o.modifiersData.popperOffsets&&(o.modifiersData.popperOffsets.x+=f,o.modifiersData.popperOffsets.y+=d),o.modifiersData[s]=c}};var Et={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name;e.modifiersData[n]=ht({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}};var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(o){var r=o.state,a=o.options,l=o.name,c=a.mainAxis,u=void 0===c||c,f=a.altAxis,d=void 0!==f&&f,p=a.boundary,h=a.rootBoundary,m=a.altBoundary,g=a.padding,v=a.tether,b=void 0===v||v,y=a.tetherOffset,_=void 0===y?0:y,w=mt(r,{boundary:p,rootBoundary:h,padding:g,altBoundary:m}),E=j(r.placement),x=X(r.placement),O=!x,A=V(E),C="x"===A?"y":"x",T=r.modifiersData.popperOffsets,L=r.rects.reference,S=r.rects.popper,P="function"==typeof _?_(Object.assign({},r.rects,{placement:r.placement})):_,M="number"==typeof P?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),N=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,B={x:0,y:0};if(T){if(u){var I,H="y"===A?t:i,$="y"===A?e:n,z="y"===A?"height":"width",W=T[A],R=W+w[H],U=W-w[$],K=b?-S[z]/2:0,Q=x===s?L[z]:S[z],G=x===s?-S[z]:-L[z],J=r.elements.arrow,Z=b&&J?F(J):{width:0,height:0},tt=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[H],nt=tt[$],it=Y(0,L[z],Z[z]),ot=O?L[z]/2-K-it-et-M.mainAxis:Q-it-et-M.mainAxis,rt=O?-L[z]/2+K+it+nt+M.mainAxis:G+it+nt+M.mainAxis,st=r.elements.arrow&&q(r.elements.arrow),at=st?"y"===A?st.clientTop||0:st.clientLeft||0:0,lt=null!=(I=null==N?void 0:N[A])?I:0,ct=W+rt-lt,ut=Y(b?D(R,W+ot-lt-at):R,W,b?k(U,ct):U);T[A]=ut,B[A]=ut-W}if(d){var ft,dt="x"===A?t:i,pt="x"===A?e:n,ht=T[C],gt="y"===C?"height":"width",vt=ht+w[dt],bt=ht-w[pt],yt=-1!==[t,i].indexOf(E),_t=null!=(ft=null==N?void 0:N[C])?ft:0,wt=yt?vt:ht-L[gt]-S[gt]-_t+M.altAxis,Et=yt?ht+L[gt]+S[gt]-_t-M.altAxis:bt,xt=b&&yt?function(t,e,n){var i=Y(t,e,n);return i>n?n:i}(wt,ht,Et):Y(b?wt:vt,ht,b?Et:bt);T[C]=xt,B[C]=xt-ht}r.modifiersData[l]=B}},requiresIfExists:["offset"]};function Ot(t,e,n){void 0===n&&(n=!1);var i,o,r=T(e),s=T(e)&&function(t){var e=t.getBoundingClientRect(),n=P(e.width)/t.offsetWidth||1,i=P(e.height)/t.offsetHeight||1;return 1!==n||1!==i}(e),a=z(e),l=B(t,s,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==O(e)||lt(a))&&(c=(i=e)!==A(i)&&T(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:st(i)),T(e)?((u=B(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):a&&(u.x=at(a))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function At(t){var e=new Map,n=new Set,i=[];function o(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!n.has(t)){var i=e.get(t);i&&o(i)}})),i.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||o(t)})),i}var Ct={placement:"bottom",modifiers:[],strategy:"absolute"};function Tt(){for(var t=arguments.length,e=new Array(t),n=0;nPt.has(t)&&Pt.get(t).get(e)||null,remove(t,e){if(!Pt.has(t))return;const n=Pt.get(t);n.delete(e),0===n.size&&Pt.delete(t)}};const Nt="transitionend",Bt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),It=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Bt(t)):null,Ht=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?Ht(t.parentNode):null},$t=()=>{},zt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Wt=[],Rt=()=>"rtl"===document.documentElement.dir,qt=t=>{var e;e=()=>{const e=zt();if(e){const n=t.NAME,i=e.fn[n];e.fn[n]=t.jQueryInterface,e.fn[n].Constructor=t,e.fn[n].noConflict=()=>(e.fn[n]=i,t.jQueryInterface)}},"loading"===document.readyState?(Wt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Wt)t()})),Wt.push(e)):e()},Vt=function(t){let e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;return"function"==typeof t?t(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):e},Yt=function(t,e){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void Vt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:n}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(n))):0})(e)+5;let i=!1;const o=n=>{let{target:r}=n;r===e&&(i=!0,e.removeEventListener(Nt,o),Vt(t))};e.addEventListener(Nt,o),setTimeout((()=>{i||e.dispatchEvent(new Event(Nt))}),n)},Ut=/[^.]*(?=\..*)\.|.*/,Kt=/\..*/,Qt=/::\d+$/,Xt={};let Gt=1;const Jt={mouseenter:"mouseover",mouseleave:"mouseout"},Zt=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function te(t,e){return e&&`${e}::${Gt++}`||t.uidEvent||Gt++}function ee(t){const e=te(t);return t.uidEvent=e,Xt[e]=Xt[e]||{},Xt[e]}function ne(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===n))}function ie(t,e,n){const i="string"==typeof e,o=i?n:e||n;let r=ae(t);return Zt.has(r)||(r=t),[i,o,r]}function oe(t,e,n,i,o){if("string"!=typeof e||!t)return;let[r,s,a]=ie(e,n,i);if(e in Jt){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s=t(s)}const l=ee(t),c=l[a]||(l[a]={}),u=ne(c,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=te(s,e.replace(Ut,"")),d=r?function(t,e,n){return function i(o){const r=t.querySelectorAll(e);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return ce(o,{delegateTarget:s}),i.oneOff&&le.off(t,o.type,e,n),n.apply(s,[o])}}(t,n,s):function(t,e){return function n(i){return ce(i,{delegateTarget:t}),n.oneOff&&le.off(t,i.type,e),e.apply(t,[i])}}(t,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,c[f]=d,t.addEventListener(a,d,r)}function re(t,e,n,i,o){const r=ne(e[n],i,o);r&&(t.removeEventListener(n,r,Boolean(o)),delete e[n][r.uidEvent])}function se(t,e,n,i){const o=e[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&re(t,e,n,s.callable,s.delegationSelector)}function ae(t){return t=t.replace(Kt,""),Jt[t]||t}const le={on(t,e,n,i){oe(t,e,n,i,!1)},one(t,e,n,i){oe(t,e,n,i,!0)},off(t,e,n,i){if("string"!=typeof e||!t)return;const[o,r,s]=ie(e,n,i),a=s!==e,l=ee(t),c=l[s]||{},u=e.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(l))se(t,l,n,e.slice(1));for(const[n,i]of Object.entries(c)){const o=n.replace(Qt,"");a&&!e.includes(o)||re(t,l,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;re(t,l,s,r,o?n:null)}},trigger(t,e,n){if("string"!=typeof e||!t)return null;const i=zt();let o=null,r=!0,s=!0,a=!1;e!==ae(e)&&i&&(o=i.Event(e,n),i(t).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const l=ce(new Event(e,{bubbles:r,cancelable:!0}),n);return a&&l.preventDefault(),s&&t.dispatchEvent(l),l.defaultPrevented&&o&&o.preventDefault(),l}};function ce(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(e))try{t[n]=i}catch{Object.defineProperty(t,n,{configurable:!0,get:()=>i})}return t}function ue(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function fe(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const de={setDataAttribute(t,e,n){t.setAttribute(`data-bs-${fe(e)}`,n)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${fe(e)}`)},getDataAttributes(t){if(!t)return{};const e={},n=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=ue(t.dataset[i])}return e},getDataAttribute:(t,e)=>ue(t.getAttribute(`data-bs-${fe(e)}`))};class pe{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const n=Ft(e)?de.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...Ft(e)?de.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[i,o]of Object.entries(e)){const e=t[i],r=Ft(e)?"element":null==(n=e)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${o}".`)}var n}}class he extends pe{constructor(t,e){super(),(t=It(t))&&(this._element=t,this._config=this._getConfig(e),Mt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Mt.remove(this._element,this.constructor.DATA_KEY),le.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e){Yt(t,e,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Mt.get(It(t),this.DATA_KEY)}static getOrCreateInstance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const me={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},ge=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),ve=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,be=(t,e)=>{const n=t.nodeName.toLowerCase();return e.includes(n)?!ge.has(n)||Boolean(ve.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(n)))};const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let n=t.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),e=n&&"#"!==n?n.trim():null}return e?e.split(",").map((t=>Bt(t))).join(","):null},_e={find(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(e,t)},children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const n=[];let i=t.parentNode.closest(e);for(;i;)n.push(i),i=i.parentNode.closest(e);return n},prev(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return[n];n=n.previousElementSibling}return[]},next(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return[n];n=n.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!(t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")))(t)&&(t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),n=t.closest("details:not([open])");if(!n)return e;if(n!==t){const e=t.closest("summary");if(e&&e.parentNode!==n)return!1;if(null===e)return!1}return e})(t)))},getSelectorFromElement(t){const e=ye(t);return e&&_e.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?_e.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?_e.find(e):[]}},we={allowList:me,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Ee={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},xe={entry:"(string|element|function|null)",selector:"(string|element)"};class Oe extends pe{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return we}static get DefaultType(){return Ee}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,n]of Object.entries(this._config.content))this._setContent(t,n,e);const e=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&e.classList.add(...n.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,n]of Object.entries(t))super._typeCheckConfig({selector:e,entry:n},xe)}_setContent(t,e,n){const i=_e.findOne(n,t);i&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(It(e),i):this._config.html?i.innerHTML=this._maybeSanitize(e):i.textContent=e:i.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,n){if(!t.length)return t;if(n&&"function"==typeof n)return n(t);const i=(new window.DOMParser).parseFromString(t,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const t of o){const n=t.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){t.remove();continue}const i=[].concat(...t.attributes),o=[].concat(e["*"]||[],e[n]||[]);for(const e of i)be(e,o)||t.removeAttribute(e.nodeName)}return i.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Vt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ae=new Set(["sanitize","allowList","sanitizeFn"]),Ce="fade",Te="show",Le=".tooltip-inner",Se=".modal",je="hide.bs.modal",ke="hover",De="focus",Pe={AUTO:"auto",TOP:"top",RIGHT:Rt()?"left":"right",BOTTOM:"bottom",LEFT:Rt()?"right":"left"},Me={allowList:me,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Ne={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Be extends he{constructor(t,e){if(void 0===Dt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Me}static get DefaultType(){return Ne}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),le.off(this._element.closest(Se),je,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=le.trigger(this._element,this.constructor.eventName("show")),e=(Ht(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),le.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Te),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))le.on(t,"mouseover",$t);this._queueCallback((()=>{le.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(le.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Te),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))le.off(t,"mouseover",$t);this._activeTrigger.click=!1,this._activeTrigger[De]=!1,this._activeTrigger[ke]=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),le.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ce,Te),e.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",n),this._isAnimated()&&e.classList.add(Ce),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Oe({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Le]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ce)}_isShown(){return this.tip&&this.tip.classList.contains(Te)}_createPopper(t){const e=Vt(this._config.placement,[this,t,this._element]),n=Pe[e.toUpperCase()];return kt(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Vt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Vt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)le.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ke?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=e===ke?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");le.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?De:ke]=!0,e._enter()})),le.on(this._element,n,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?De:ke]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},le.on(this._element.closest(Se),je,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=de.getDataAttributes(this._element);for(const t of Object.keys(e))Ae.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:It(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,n]of Object.entries(this._config))this.constructor.Default[e]!==n&&(t[e]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=Be.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}qt(Be);const Fe=document.getElementById("mode-toggle");function Ie(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const He="sidebar-display";class $e{static toggle(){!1===$e.isExpanded?document.body.setAttribute(He,""):document.body.removeAttribute(He),$e.isExpanded=!$e.isExpanded}}Ie($e,"isExpanded",!1);const ze=document.getElementById("sidebar-trigger"),We=document.getElementById("search-trigger"),Re=document.getElementById("search-cancel"),qe=document.querySelectorAll("#main-wrapper>.container>.row"),Ve=document.getElementById("topbar-title"),Ye=document.getElementById("search"),Ue=document.getElementById("search-result-wrapper"),Ke=document.getElementById("search-results"),Qe=document.getElementById("search-input"),Xe=document.getElementById("search-hints"),Ge="d-block",Je="d-none",Ze="input-focus",tn="d-flex";class en{static on(){ze.classList.add(Je),Ve.classList.add(Je),We.classList.add(Je),Ye.classList.add(tn),Re.classList.add(Ge)}static off(){Re.classList.remove(Ge),Ye.classList.remove(tn),ze.classList.remove(Je),Ve.classList.remove(Je),We.classList.remove(Je)}}class nn{static on(){this.resultVisible||(Ue.classList.remove(Je),qe.forEach((t=>{t.classList.add(Je)})),this.resultVisible=!0)}static off(){this.resultVisible&&(Ke.innerHTML="",Xe.classList.contains(Je)&&Xe.classList.remove(Je),Ue.classList.add(Je),qe.forEach((t=>{t.classList.remove(Je)})),Qe.textContent="",this.resultVisible=!1)}}function on(){return Re.classList.contains(Ge)}Ie(nn,"resultVisible",!1);const rn=".bs.collapse",sn=`show${rn}`,an=`shown${rn}`,ln=`hide${rn}`,cn=`hidden${rn}`,un=`click${rn}.data-api`,fn="show",dn="collapse",pn="collapsing",hn=`:scope .${dn} .${dn}`,mn='[data-bs-toggle="collapse"]',gn={parent:null,toggle:!0},vn={parent:"(null|element)",toggle:"boolean"};class bn extends he{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=_e.find(mn);for(const t of n){const e=_e.getSelectorFromElement(t),n=_e.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return gn}static get DefaultType(){return vn}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>bn.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(le.trigger(this._element,sn).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(dn),this._element.classList.add(pn),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn,fn),this._element.style[e]="",le.trigger(this._element,an)}),this._element,!0),this._element.style[e]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(le.trigger(this._element,ln).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,this._element.offsetHeight,this._element.classList.add(pn),this._element.classList.remove(dn,fn);for(const t of this._triggerArray){const e=_e.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn),le.trigger(this._element,cn)}),this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(fn)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=It(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(mn);for(const e of t){const t=_e.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=_e.find(hn,this._config.parent);return _e.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const n of t)n.classList.toggle("collapsed",!e),n.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const n=bn.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===n[t])throw new TypeError(`No method named "${t}"`);n[t]()}}))}}le.on(document,un,mn,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of _e.getMultipleElementsFromSelector(this))bn.getOrCreateInstance(t,{toggle:!1}).toggle()})),qt(bn),document.getElementsByClassName("collapse");class yn{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(t){return Number(t.getAttribute(this.attrTimestamp))}static getDateFormat(t){return t.getAttribute(this.attrDateFormat)}}var _n;const wn=document.getElementById("toc-bar"),En=document.getElementById("toc-solo-trigger"),xn=document.getElementsByClassName("toc-trigger"),On=document.getElementById("toc-popup"),An=document.getElementById("toc-popup-close"),Cn="overflow-hidden",Tn="closing";class Ln{static initBar(){new IntersectionObserver((t=>{t.forEach((t=>{wn.classList.toggle("invisible",t.isIntersecting)}))}),{rootMargin:`-${this.barHeight}px 0px 0px 0px`}).observe(En),this.invisible=!1}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach((t=>{t.onclick=this.hidePopup}))}static refresh(){this.invisible&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static showPopup(){Ln.lockScroll(!0),On.showModal();On.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(t){"cancel"===t?.type&&t.preventDefault(),On.open&&(On.toggleAttribute(Tn),On.addEventListener("animationend",(()=>{On.toggleAttribute(Tn),On.close()}),{once:!0}),Ln.lockScroll(!1))}static lockScroll(t){document.documentElement.classList.toggle(Cn,t),document.body.classList.toggle(Cn,t)}static clickBackdrop(t){const e=t.target.getBoundingClientRect();(t.clientXe.right||t.clientYe.bottom)&&Ln.hidePopup()}static initComponents(){this.initBar(),[...xn].forEach((t=>{t.onclick=this.showPopup})),On.onclick=this.clickBackdrop,An.onclick=On.oncancel=this.hidePopup}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}_n=Ln,Ie(Ln,"invisible",!0),Ie(Ln,"barHeight",48),Ie(Ln,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:_n.barHeight});Ie(class{static refresh(){tocbot.refresh(this.options)}static init(){document.getElementById("toc-wrapper")&&tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),Fe&&Fe.addEventListener("click",(()=>{modeToggle.flipMode()})),document.getElementById("sidebar-trigger").addEventListener("click",$e.toggle),document.getElementById("mask").addEventListener("click",$e.toggle),We.addEventListener("click",(()=>{en.on(),nn.on(),Qe.focus()})),Re.addEventListener("click",(()=>{en.off(),nn.off()})),Qe.addEventListener("focus",(()=>{Ye.classList.add(Ze)})),Qe.addEventListener("focusout",(()=>{Ye.classList.remove(Ze)})),Qe.addEventListener("input",(()=>{""===Qe.value?on()?Xe.classList.remove(Je):nn.off():(nn.on(),on()&&Xe.classList.add(Je))})),dayjs.locale(yn.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${yn.attrTimestamp}]`).forEach((t=>{const e=dayjs.unix(yn.getTimestamp(t)),n=e.format(yn.getDateFormat(t));if(t.textContent=n,t.removeAttribute(yn.attrTimestamp),t.removeAttribute(yn.attrDateFormat),t.hasAttribute("data-bs-toggle")&&"tooltip"===t.getAttribute("data-bs-toggle")){const n=e.format("llll");t.setAttribute("data-bs-title",n)}})),function(){const t=document.getElementById("back-to-top");window.addEventListener("scroll",(()=>{window.scrollY>50?t.classList.add("show"):t.classList.remove("show")})),t.addEventListener("click",(()=>{window.scrollTo({top:0})}))}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map((t=>new Be(t)))}(); diff --git a/assets/js/dist/page.min.js b/assets/js/dist/page.min.js new file mode 100644 index 00000000000..4ffd2d95817 --- /dev/null +++ b/assets/js/dist/page.min.js @@ -0,0 +1,4 @@ +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";var e="top",t="bottom",n="right",i="left",o="auto",r=[e,t,n,i],s="start",a="end",l="clippingParents",c="viewport",u="popper",f="reference",d=r.reduce((function(e,t){return e.concat([t+"-"+s,t+"-"+a])}),[]),p=[].concat(r,[o]).reduce((function(e,t){return e.concat([t,t+"-"+s,t+"-"+a])}),[]),h="beforeRead",g="read",m="afterRead",b="beforeMain",v="main",y="afterMain",_="beforeWrite",w="write",E="afterWrite",A=[h,g,m,b,v,y,_,w,E];function x(e){return e?(e.nodeName||"").toLowerCase():null}function O(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function C(e){return e instanceof O(e).Element||e instanceof Element}function L(e){return e instanceof O(e).HTMLElement||e instanceof HTMLElement}function T(e){return"undefined"!=typeof ShadowRoot&&(e instanceof O(e).ShadowRoot||e instanceof ShadowRoot)}var S={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},o=t.elements[e];L(o)&&x(o)&&(Object.assign(o.style,n),Object.keys(i).forEach((function(e){var t=i[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var i=t.elements[e],o=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});L(i)&&x(i)&&(Object.assign(i.style,r),Object.keys(o).forEach((function(e){i.removeAttribute(e)})))}))}},requires:["computeStyles"]};function k(e){return e.split("-")[0]}var j=Math.max,D=Math.min,P=Math.round;function M(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function N(){return!/^((?!chrome|android).)*safari/i.test(M())}function B(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),o=1,r=1;t&&L(e)&&(o=e.offsetWidth>0&&P(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&P(i.height)/e.offsetHeight||1);var s=(C(e)?O(e):window).visualViewport,a=!N()&&n,l=(i.left+(a&&s?s.offsetLeft:0))/o,c=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:c,right:l+u,bottom:c+f,left:l,x:l,y:c}}function I(e){var t=B(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function F(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&T(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function H(e){return O(e).getComputedStyle(e)}function $(e){return["table","td","th"].indexOf(x(e))>=0}function q(e){return((C(e)?e.ownerDocument:e.document)||window.document).documentElement}function z(e){return"html"===x(e)?e:e.assignedSlot||e.parentNode||(T(e)?e.host:null)||q(e)}function W(e){return L(e)&&"fixed"!==H(e).position?e.offsetParent:null}function R(e){for(var t=O(e),n=W(e);n&&$(n)&&"static"===H(n).position;)n=W(n);return n&&("html"===x(n)||"body"===x(n)&&"static"===H(n).position)?t:n||function(e){var t=/firefox/i.test(M());if(/Trident/i.test(M())&&L(e)&&"fixed"===H(e).position)return null;var n=z(e);for(T(n)&&(n=n.host);L(n)&&["html","body"].indexOf(x(n))<0;){var i=H(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}function V(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Y(e,t,n){return j(e,D(t,n))}function U(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function K(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(o){var s,a=o.state,l=o.name,c=o.options,u=a.elements.arrow,f=a.modifiersData.popperOffsets,d=k(a.placement),p=V(d),h=[i,n].indexOf(d)>=0?"height":"width";if(u&&f){var g=function(e,t){return U("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:K(e,r))}(c.padding,a),m=I(u),b="y"===p?e:i,v="y"===p?t:n,y=a.rects.reference[h]+a.rects.reference[p]-f[p]-a.rects.popper[h],_=f[p]-a.rects.reference[p],w=R(u),E=w?"y"===p?w.clientHeight||0:w.clientWidth||0:0,A=y/2-_/2,x=g[b],O=E-m[h]-g[v],C=E/2-m[h]/2+A,L=Y(x,C,O),T=p;a.modifiersData[l]=((s={})[T]=L,s.centerOffset=L-C,s)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&F(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function G(e){return e.split("-")[1]}var X={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J(o){var r,s=o.popper,l=o.popperRect,c=o.placement,u=o.variation,f=o.offsets,d=o.position,p=o.gpuAcceleration,h=o.adaptive,g=o.roundOffsets,m=o.isFixed,b=f.x,v=void 0===b?0:b,y=f.y,_=void 0===y?0:y,w="function"==typeof g?g({x:v,y:_}):{x:v,y:_};v=w.x,_=w.y;var E=f.hasOwnProperty("x"),A=f.hasOwnProperty("y"),x=i,C=e,L=window;if(h){var T=R(s),S="clientHeight",k="clientWidth";if(T===O(s)&&"static"!==H(T=q(s)).position&&"absolute"===d&&(S="scrollHeight",k="scrollWidth"),c===e||(c===i||c===n)&&u===a)C=t,_-=(m&&T===L&&L.visualViewport?L.visualViewport.height:T[S])-l.height,_*=p?1:-1;if(c===i||(c===e||c===t)&&u===a)x=n,v-=(m&&T===L&&L.visualViewport?L.visualViewport.width:T[k])-l.width,v*=p?1:-1}var j,D=Object.assign({position:d},h&&X),M=!0===g?function(e,t){var n=e.x,i=e.y,o=t.devicePixelRatio||1;return{x:P(n*o)/o||0,y:P(i*o)/o||0}}({x:v,y:_},O(s)):{x:v,y:_};return v=M.x,_=M.y,p?Object.assign({},D,((j={})[C]=A?"0":"",j[x]=E?"0":"",j.transform=(L.devicePixelRatio||1)<=1?"translate("+v+"px, "+_+"px)":"translate3d("+v+"px, "+_+"px, 0)",j)):Object.assign({},D,((r={})[C]=A?_+"px":"",r[x]=E?v+"px":"",r.transform="",r))}var Z={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:k(t.placement),variation:G(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,J(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,J(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},ee={passive:!0};var te={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,l=O(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&c.forEach((function(e){e.addEventListener("scroll",n.update,ee)})),a&&l.addEventListener("resize",n.update,ee),function(){r&&c.forEach((function(e){e.removeEventListener("scroll",n.update,ee)})),a&&l.removeEventListener("resize",n.update,ee)}},data:{}},ne={left:"right",right:"left",bottom:"top",top:"bottom"};function ie(e){return e.replace(/left|right|bottom|top/g,(function(e){return ne[e]}))}var oe={start:"end",end:"start"};function re(e){return e.replace(/start|end/g,(function(e){return oe[e]}))}function se(e){var t=O(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ae(e){return B(q(e)).left+se(e).scrollLeft}function le(e){var t=H(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ce(e){return["html","body","#document"].indexOf(x(e))>=0?e.ownerDocument.body:L(e)&&le(e)?e:ce(z(e))}function ue(e,t){var n;void 0===t&&(t=[]);var i=ce(e),o=i===(null==(n=e.ownerDocument)?void 0:n.body),r=O(i),s=o?[r].concat(r.visualViewport||[],le(i)?i:[]):i,a=t.concat(s);return o?a:a.concat(ue(z(s)))}function fe(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function de(e,t,n){return t===c?fe(function(e,t){var n=O(e),i=q(e),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,l=0;if(o){r=o.width,s=o.height;var c=N();(c||!c&&"fixed"===t)&&(a=o.offsetLeft,l=o.offsetTop)}return{width:r,height:s,x:a+ae(e),y:l}}(e,n)):C(t)?function(e,t){var n=B(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):fe(function(e){var t,n=q(e),i=se(e),o=null==(t=e.ownerDocument)?void 0:t.body,r=j(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=j(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+ae(e),l=-i.scrollTop;return"rtl"===H(o||n).direction&&(a+=j(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(q(e)))}function pe(e,t,n,i){var o="clippingParents"===t?function(e){var t=ue(z(e)),n=["absolute","fixed"].indexOf(H(e).position)>=0&&L(e)?R(e):e;return C(n)?t.filter((function(e){return C(e)&&F(e,n)&&"body"!==x(e)})):[]}(e):[].concat(t),r=[].concat(o,[n]),s=r[0],a=r.reduce((function(t,n){var o=de(e,n,i);return t.top=j(o.top,t.top),t.right=D(o.right,t.right),t.bottom=D(o.bottom,t.bottom),t.left=j(o.left,t.left),t}),de(e,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function he(o){var r,l=o.reference,c=o.element,u=o.placement,f=u?k(u):null,d=u?G(u):null,p=l.x+l.width/2-c.width/2,h=l.y+l.height/2-c.height/2;switch(f){case e:r={x:p,y:l.y-c.height};break;case t:r={x:p,y:l.y+l.height};break;case n:r={x:l.x+l.width,y:h};break;case i:r={x:l.x-c.width,y:h};break;default:r={x:l.x,y:l.y}}var g=f?V(f):null;if(null!=g){var m="y"===g?"height":"width";switch(d){case s:r[g]=r[g]-(l[m]/2-c[m]/2);break;case a:r[g]=r[g]+(l[m]/2-c[m]/2)}}return r}function ge(i,o){void 0===o&&(o={});var s=o,a=s.placement,d=void 0===a?i.placement:a,p=s.strategy,h=void 0===p?i.strategy:p,g=s.boundary,m=void 0===g?l:g,b=s.rootBoundary,v=void 0===b?c:b,y=s.elementContext,_=void 0===y?u:y,w=s.altBoundary,E=void 0!==w&&w,A=s.padding,x=void 0===A?0:A,O=U("number"!=typeof x?x:K(x,r)),L=_===u?f:u,T=i.rects.popper,S=i.elements[E?L:_],k=pe(C(S)?S:S.contextElement||q(i.elements.popper),m,v,h),j=B(i.elements.reference),D=he({reference:j,element:T,strategy:"absolute",placement:d}),P=fe(Object.assign({},T,D)),M=_===u?P:j,N={top:k.top-M.top+O.top,bottom:M.bottom-k.bottom+O.bottom,left:k.left-M.left+O.left,right:M.right-k.right+O.right},I=i.modifiersData.offset;if(_===u&&I){var F=I[d];Object.keys(N).forEach((function(i){var o=[n,t].indexOf(i)>=0?1:-1,r=[e,t].indexOf(i)>=0?"y":"x";N[i]+=F[r]*o}))}return N}function me(e,t){void 0===t&&(t={});var n=t,i=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,l=n.flipVariations,c=n.allowedAutoPlacements,u=void 0===c?p:c,f=G(i),h=f?l?d:d.filter((function(e){return G(e)===f})):r,g=h.filter((function(e){return u.indexOf(e)>=0}));0===g.length&&(g=h);var m=g.reduce((function(t,n){return t[n]=ge(e,{placement:n,boundary:o,rootBoundary:s,padding:a})[k(n)],t}),{});return Object.keys(m).sort((function(e,t){return m[e]-m[t]}))}var be={name:"flip",enabled:!0,phase:"main",fn:function(r){var a=r.state,l=r.options,c=r.name;if(!a.modifiersData[c]._skip){for(var u=l.mainAxis,f=void 0===u||u,d=l.altAxis,p=void 0===d||d,h=l.fallbackPlacements,g=l.padding,m=l.boundary,b=l.rootBoundary,v=l.altBoundary,y=l.flipVariations,_=void 0===y||y,w=l.allowedAutoPlacements,E=a.options.placement,A=k(E),x=h||(A===E||!_?[ie(E)]:function(e){if(k(e)===o)return[];var t=ie(e);return[re(e),t,re(t)]}(E)),O=[E].concat(x).reduce((function(e,t){return e.concat(k(t)===o?me(a,{placement:t,boundary:m,rootBoundary:b,padding:g,flipVariations:_,allowedAutoPlacements:w}):t)}),[]),C=a.rects.reference,L=a.rects.popper,T=new Map,S=!0,j=O[0],D=0;D=0,I=B?"width":"height",F=ge(a,{placement:P,boundary:m,rootBoundary:b,altBoundary:v,padding:g}),H=B?N?n:i:N?t:e;C[I]>L[I]&&(H=ie(H));var $=ie(H),q=[];if(f&&q.push(F[M]<=0),p&&q.push(F[H]<=0,F[$]<=0),q.every((function(e){return e}))){j=P,S=!1;break}T.set(P,q)}if(S)for(var z=function(e){var t=O.find((function(t){var n=T.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return j=t,"break"},W=_?3:1;W>0;W--){if("break"===z(W))break}a.placement!==j&&(a.modifiersData[c]._skip=!0,a.placement=j,a.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(o){return[e,n,t,i].some((function(e){return o[e]>=0}))}var _e={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,o=t.rects.popper,r=t.modifiersData.preventOverflow,s=ge(t,{elementContext:"reference"}),a=ge(t,{altBoundary:!0}),l=ve(s,i),c=ve(a,o,r),u=ye(l),f=ye(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var we={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var o=t.state,r=t.options,s=t.name,a=r.offset,l=void 0===a?[0,0]:a,c=p.reduce((function(t,r){return t[r]=function(t,o,r){var s=k(t),a=[i,e].indexOf(s)>=0?-1:1,l="function"==typeof r?r(Object.assign({},o,{placement:t})):r,c=l[0],u=l[1];return c=c||0,u=(u||0)*a,[i,n].indexOf(s)>=0?{x:u,y:c}:{x:c,y:u}}(r,o.rects,l),t}),{}),u=c[o.placement],f=u.x,d=u.y;null!=o.modifiersData.popperOffsets&&(o.modifiersData.popperOffsets.x+=f,o.modifiersData.popperOffsets.y+=d),o.modifiersData[s]=c}};var Ee={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=he({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};var Ae={name:"preventOverflow",enabled:!0,phase:"main",fn:function(o){var r=o.state,a=o.options,l=o.name,c=a.mainAxis,u=void 0===c||c,f=a.altAxis,d=void 0!==f&&f,p=a.boundary,h=a.rootBoundary,g=a.altBoundary,m=a.padding,b=a.tether,v=void 0===b||b,y=a.tetherOffset,_=void 0===y?0:y,w=ge(r,{boundary:p,rootBoundary:h,padding:m,altBoundary:g}),E=k(r.placement),A=G(r.placement),x=!A,O=V(E),C="x"===O?"y":"x",L=r.modifiersData.popperOffsets,T=r.rects.reference,S=r.rects.popper,P="function"==typeof _?_(Object.assign({},r.rects,{placement:r.placement})):_,M="number"==typeof P?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),N=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,B={x:0,y:0};if(L){if(u){var F,H="y"===O?e:i,$="y"===O?t:n,q="y"===O?"height":"width",z=L[O],W=z+w[H],U=z-w[$],K=v?-S[q]/2:0,Q=A===s?T[q]:S[q],X=A===s?-S[q]:-T[q],J=r.elements.arrow,Z=v&&J?I(J):{width:0,height:0},ee=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[H],ne=ee[$],ie=Y(0,T[q],Z[q]),oe=x?T[q]/2-K-ie-te-M.mainAxis:Q-ie-te-M.mainAxis,re=x?-T[q]/2+K+ie+ne+M.mainAxis:X+ie+ne+M.mainAxis,se=r.elements.arrow&&R(r.elements.arrow),ae=se?"y"===O?se.clientTop||0:se.clientLeft||0:0,le=null!=(F=null==N?void 0:N[O])?F:0,ce=z+re-le,ue=Y(v?D(W,z+oe-le-ae):W,z,v?j(U,ce):U);L[O]=ue,B[O]=ue-z}if(d){var fe,de="x"===O?e:i,pe="x"===O?t:n,he=L[C],me="y"===C?"height":"width",be=he+w[de],ve=he-w[pe],ye=-1!==[e,i].indexOf(E),_e=null!=(fe=null==N?void 0:N[C])?fe:0,we=ye?be:he-T[me]-S[me]-_e+M.altAxis,Ee=ye?he+T[me]+S[me]-_e-M.altAxis:ve,Ae=v&&ye?function(e,t,n){var i=Y(e,t,n);return i>n?n:i}(we,he,Ee):Y(v?we:be,he,v?Ee:ve);L[C]=Ae,B[C]=Ae-he}r.modifiersData[l]=B}},requiresIfExists:["offset"]};function xe(e,t,n){void 0===n&&(n=!1);var i,o,r=L(t),s=L(t)&&function(e){var t=e.getBoundingClientRect(),n=P(t.width)/e.offsetWidth||1,i=P(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=q(t),l=B(e,s,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==x(t)||le(a))&&(c=(i=t)!==O(i)&&L(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:se(i)),L(t)?((u=B(t,!0)).x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=ae(a))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function Oe(e){var t=new Map,n=new Set,i=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var i=t.get(e);i&&o(i)}})),i.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),i}var Ce={placement:"bottom",modifiers:[],strategy:"absolute"};function Le(){for(var e=arguments.length,t=new Array(e),n=0;nPe.has(e)&&Pe.get(e).get(t)||null,remove(e,t){if(!Pe.has(e))return;const n=Pe.get(e);n.delete(t),0===n.size&&Pe.delete(e)}};const Ne="transitionend",Be=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),Ie=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),Fe=e=>Ie(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(Be(e)):null,He=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?He(e.parentNode):null},$e=()=>{},qe=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,ze=[],We=()=>"rtl"===document.documentElement.dir,Re=e=>{var t;t=()=>{const t=qe();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(ze.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of ze)e()})),ze.push(t)):t()},Ve=function(e){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;return"function"==typeof e?e(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):t},Ye=function(e,t){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void Ve(e);const n=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),o=Number.parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let i=!1;const o=n=>{let{target:r}=n;r===t&&(i=!0,t.removeEventListener(Ne,o),Ve(e))};t.addEventListener(Ne,o),setTimeout((()=>{i||t.dispatchEvent(new Event(Ne))}),n)},Ue=/[^.]*(?=\..*)\.|.*/,Ke=/\..*/,Qe=/::\d+$/,Ge={};let Xe=1;const Je={mouseenter:"mouseover",mouseleave:"mouseout"},Ze=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function et(e,t){return t&&`${t}::${Xe++}`||e.uidEvent||Xe++}function tt(e){const t=et(e);return e.uidEvent=t,Ge[t]=Ge[t]||{},Ge[t]}function nt(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function it(e,t,n){const i="string"==typeof t,o=i?n:t||n;let r=at(e);return Ze.has(r)||(r=e),[i,o,r]}function ot(e,t,n,i,o){if("string"!=typeof t||!e)return;let[r,s,a]=it(t,n,i);if(t in Je){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const l=tt(e),c=l[a]||(l[a]={}),u=nt(c,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=et(s,t.replace(Ue,"")),d=r?function(e,t,n){return function i(o){const r=e.querySelectorAll(t);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return ct(o,{delegateTarget:s}),i.oneOff&<.off(e,o.type,t,n),n.apply(s,[o])}}(e,n,s):function(e,t){return function n(i){return ct(i,{delegateTarget:e}),n.oneOff&<.off(e,i.type,t),t.apply(e,[i])}}(e,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,c[f]=d,e.addEventListener(a,d,r)}function rt(e,t,n,i,o){const r=nt(t[n],i,o);r&&(e.removeEventListener(n,r,Boolean(o)),delete t[n][r.uidEvent])}function st(e,t,n,i){const o=t[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&rt(e,t,n,s.callable,s.delegationSelector)}function at(e){return e=e.replace(Ke,""),Je[e]||e}const lt={on(e,t,n,i){ot(e,t,n,i,!1)},one(e,t,n,i){ot(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[o,r,s]=it(t,n,i),a=s!==t,l=tt(e),c=l[s]||{},u=t.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(l))st(e,l,n,t.slice(1));for(const[n,i]of Object.entries(c)){const o=n.replace(Qe,"");a&&!t.includes(o)||rt(e,l,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;rt(e,l,s,r,o?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=qe();let o=null,r=!0,s=!0,a=!1;t!==at(t)&&i&&(o=i.Event(t,n),i(e).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const l=ct(new Event(t,{bubbles:r,cancelable:!0}),n);return a&&l.preventDefault(),s&&e.dispatchEvent(l),l.defaultPrevented&&o&&o.preventDefault(),l}};function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(t))try{e[n]=i}catch{Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}function ut(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function ft(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const dt={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${ft(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${ft(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),t[n]=ut(e.dataset[i])}return t},getDataAttribute:(e,t)=>ut(e.getAttribute(`data-bs-${ft(t)}`))};class pt{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=Ie(t)?dt.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...Ie(t)?dt.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[i,o]of Object.entries(t)){const t=e[i],r=Ie(t)?"element":null==(n=t)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${o}".`)}var n}}class ht extends pt{constructor(e,t){super(),(e=Fe(e))&&(this._element=e,this._config=this._getConfig(t),Me.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Me.remove(this._element,this.constructor.DATA_KEY),lt.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t){Ye(e,t,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Me.get(Fe(e),this.DATA_KEY)}static getOrCreateInstance(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const gt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},mt=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),bt=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,vt=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?!mt.has(n)||Boolean(bt.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(n)))};const yt=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map((e=>Be(e))).join(","):null},_t={find(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(t,e)},children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!(e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")))(e)&&(e=>{if(!Ie(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t})(e)))},getSelectorFromElement(e){const t=yt(e);return t&&_t.findOne(t)?t:null},getElementFromSelector(e){const t=yt(e);return t?_t.findOne(t):null},getMultipleElementsFromSelector(e){const t=yt(e);return t?_t.find(t):[]}},wt={allowList:gt,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Et={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},At={entry:"(string|element|function|null)",selector:"(string|element)"};class xt extends pt{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return wt}static get DefaultType(){return Et}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},At)}_setContent(e,t,n){const i=_t.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?Ie(t)?this._putElementInTemplate(Fe(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const e of o){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),o=[].concat(t["*"]||[],t[n]||[]);for(const t of i)vt(t,o)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return Ve(e,[this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const Ot=new Set(["sanitize","allowList","sanitizeFn"]),Ct="fade",Lt="show",Tt=".tooltip-inner",St=".modal",kt="hide.bs.modal",jt="hover",Dt="focus",Pt={AUTO:"auto",TOP:"top",RIGHT:We()?"left":"right",BOTTOM:"bottom",LEFT:We()?"right":"left"},Mt={allowList:gt,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Nt={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Bt extends ht{constructor(e,t){if(void 0===De)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Mt}static get DefaultType(){return Nt}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),lt.off(this._element.closest(St),kt,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=lt.trigger(this._element,this.constructor.eventName("show")),t=(He(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),lt.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Lt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))lt.on(e,"mouseover",$e);this._queueCallback((()=>{lt.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(lt.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Lt),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))lt.off(e,"mouseover",$e);this._activeTrigger.click=!1,this._activeTrigger[Dt]=!1,this._activeTrigger[jt]=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),lt.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(Ct,Lt),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(Ct),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new xt({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Tt]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ct)}_isShown(){return this.tip&&this.tip.classList.contains(Lt)}_createPopper(e){const t=Ve(this._config.placement,[this,e,this._element]),n=Pt[t.toUpperCase()];return je(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return Ve(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...Ve(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)lt.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e=t===jt?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===jt?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");lt.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?Dt:jt]=!0,t._enter()})),lt.on(this._element,n,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?Dt:jt]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},lt.on(this._element.closest(St),kt,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=dt.getDataAttributes(this._element);for(const e of Object.keys(t))Ot.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:Fe(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=Bt.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Re(Bt);const It=document.getElementById("mode-toggle");function Ft(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Ht="sidebar-display";class $t{static toggle(){!1===$t.isExpanded?document.body.setAttribute(Ht,""):document.body.removeAttribute(Ht),$t.isExpanded=!$t.isExpanded}}Ft($t,"isExpanded",!1);const qt=document.getElementById("sidebar-trigger"),zt=document.getElementById("search-trigger"),Wt=document.getElementById("search-cancel"),Rt=document.querySelectorAll("#main-wrapper>.container>.row"),Vt=document.getElementById("topbar-title"),Yt=document.getElementById("search"),Ut=document.getElementById("search-result-wrapper"),Kt=document.getElementById("search-results"),Qt=document.getElementById("search-input"),Gt=document.getElementById("search-hints"),Xt="d-block",Jt="d-none",Zt="input-focus",en="d-flex";class tn{static on(){qt.classList.add(Jt),Vt.classList.add(Jt),zt.classList.add(Jt),Yt.classList.add(en),Wt.classList.add(Xt)}static off(){Wt.classList.remove(Xt),Yt.classList.remove(en),qt.classList.remove(Jt),Vt.classList.remove(Jt),zt.classList.remove(Jt)}}class nn{static on(){this.resultVisible||(Ut.classList.remove(Jt),Rt.forEach((e=>{e.classList.add(Jt)})),this.resultVisible=!0)}static off(){this.resultVisible&&(Kt.innerHTML="",Gt.classList.contains(Jt)&&Gt.classList.remove(Jt),Ut.classList.add(Jt),Rt.forEach((e=>{e.classList.remove(Jt)})),Qt.textContent="",this.resultVisible=!1)}}function on(){return Wt.classList.contains(Xt)}Ft(nn,"resultVisible",!1);const rn=".bs.collapse",sn=`show${rn}`,an=`shown${rn}`,ln=`hide${rn}`,cn=`hidden${rn}`,un=`click${rn}.data-api`,fn="show",dn="collapse",pn="collapsing",hn=`:scope .${dn} .${dn}`,gn='[data-bs-toggle="collapse"]',mn={parent:null,toggle:!0},bn={parent:"(null|element)",toggle:"boolean"};class vn extends ht{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=_t.find(gn);for(const e of n){const t=_t.getSelectorFromElement(e),n=_t.find(t).filter((e=>e===this._element));null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return mn}static get DefaultType(){return bn}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((e=>e!==this._element)).map((e=>vn.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(lt.trigger(this._element,sn).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(dn),this._element.classList.add(pn),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn,fn),this._element.style[t]="",lt.trigger(this._element,an)}),this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(lt.trigger(this._element,ln).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,this._element.offsetHeight,this._element.classList.add(pn),this._element.classList.remove(dn,fn);for(const e of this._triggerArray){const t=_t.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn),lt.trigger(this._element,cn)}),this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(fn)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=Fe(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(gn);for(const t of e){const e=_t.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=_t.find(hn,this._config.parent);return _t.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const n=vn.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}}))}}lt.on(document,un,gn,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of _t.getMultipleElementsFromSelector(this))vn.getOrCreateInstance(e,{toggle:!1}).toggle()})),Re(vn),document.getElementsByClassName("collapse");const yn=".code-header>button",_n="timeout",wn="data-title-succeed",En="data-bs-original-title",An=2e3;function xn(e){if(e.hasAttribute(_n)){let t=e.getAttribute(_n);if(Number(t)>Date.now())return!0}return!1}function On(e){e.setAttribute(_n,Date.now()+An)}function Cn(e){e.removeAttribute(_n)}function Ln(){const e=document.querySelectorAll(yn);if(0===e.length)return;const t=new ClipboardJS(yn,{target:e=>e.parentNode.nextElementSibling.querySelector("code .rouge-code")});[...e].map((e=>new Bt(e,{placement:"left"}))),t.on("success",(e=>{const t=e.trigger;(e.clearSelection(),xn(t))||(t.children[0].setAttribute("class","fas fa-check"),function(e){const t=e.getAttribute(wn);e.setAttribute(En,t),Bt.getInstance(e).show()}(t),On(t),setTimeout((()=>{!function(e){Bt.getInstance(e).hide(),e.removeAttribute(En)}(t),function(e){e.children[0].setAttribute("class","far fa-clipboard")}(t),Cn(t)}),An))}))}const Tn="data-src",Sn="data-lqip",kn="shimmer",jn="blur";function Dn(e){this.parentElement.classList.remove(e)}function Pn(){this.complete&&(this.hasAttribute(Sn)?Dn.call(this,jn):Dn.call(this,kn))}function Mn(){const e=this.getAttribute(Tn);this.setAttribute("src",encodeURI(e)),this.removeAttribute(Tn)}const Nn=document.documentElement,Bn=".popup:not(.dark)",In=".popup:not(.light)";let Fn=Bn;var Hn;const $n=document.getElementById("toc-bar"),qn=document.getElementById("toc-solo-trigger"),zn=document.getElementsByClassName("toc-trigger"),Wn=document.getElementById("toc-popup"),Rn=document.getElementById("toc-popup-close"),Vn="overflow-hidden",Yn="closing";class Un{static initBar(){new IntersectionObserver((e=>{e.forEach((e=>{$n.classList.toggle("invisible",e.isIntersecting)}))}),{rootMargin:`-${this.barHeight}px 0px 0px 0px`}).observe(qn),this.invisible=!1}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach((e=>{e.onclick=this.hidePopup}))}static refresh(){this.invisible&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static showPopup(){Un.lockScroll(!0),Wn.showModal();Wn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(e){"cancel"===e?.type&&e.preventDefault(),Wn.open&&(Wn.toggleAttribute(Yn),Wn.addEventListener("animationend",(()=>{Wn.toggleAttribute(Yn),Wn.close()}),{once:!0}),Un.lockScroll(!1))}static lockScroll(e){document.documentElement.classList.toggle(Vn,e),document.body.classList.toggle(Vn,e)}static clickBackdrop(e){const t=e.target.getBoundingClientRect();(e.clientXt.right||e.clientYt.bottom)&&Un.hidePopup()}static initComponents(){this.initBar(),[...zn].forEach((e=>{e.onclick=this.showPopup})),Wn.onclick=this.clickBackdrop,Rn.onclick=Wn.oncancel=this.hidePopup}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}Hn=Un,Ft(Un,"invisible",!0),Ft(Un,"barHeight",48),Ft(Un,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:Hn.barHeight});Ft(class{static refresh(){tocbot.refresh(this.options)}static init(){document.getElementById("toc-wrapper")&&tocbot.init(this.options)}},"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32}),matchMedia("(min-width: 1200px)"),function(){const e=document.querySelectorAll("article img");if(0===e.length)return;e.forEach((e=>{e.addEventListener("load",Pn)})),document.querySelectorAll('article img[loading="lazy"]').forEach((e=>{e.complete&&Dn.call(e,kn)}));const t=document.querySelectorAll(`article img[${Sn}="true"]`);t.length&&t.forEach((e=>{Mn.call(e)}))}(),function(){if(null===document.querySelector(".popup"))return;const e=!(null===document.querySelector(".popup.light")&&null===document.querySelector(".popup.dark"));(Nn.hasAttribute("data-mode")&&"dark"===Nn.getAttribute("data-mode")||!Nn.hasAttribute("data-mode")&&window.matchMedia("(prefers-color-scheme: dark)").matches)&&(Fn=In);let t=GLightbox({selector:`${Fn}`});if(e&&document.getElementById("mode-toggle")){let e=null;window.addEventListener("message",(n=>{n.source===window&&n.data&&n.data.direction===ModeToggle.ID&&function(e,t){Fn=Fn===Bn?In:Bn,null===t&&(t=GLightbox({selector:`${Fn}`})),[e,t]=[t,e]}(t,e)}))}}(),It&&It.addEventListener("click",(()=>{modeToggle.flipMode()})),document.getElementById("sidebar-trigger").addEventListener("click",$t.toggle),document.getElementById("mask").addEventListener("click",$t.toggle),zt.addEventListener("click",(()=>{tn.on(),nn.on(),Qt.focus()})),Wt.addEventListener("click",(()=>{tn.off(),nn.off()})),Qt.addEventListener("focus",(()=>{Yt.classList.add(Zt)})),Qt.addEventListener("focusout",(()=>{Yt.classList.remove(Zt)})),Qt.addEventListener("input",(()=>{""===Qt.value?on()?Gt.classList.remove(Jt):nn.off():(nn.on(),on()&&Gt.classList.add(Jt))})),Ln(),function(){const e=document.getElementById("copy-link");null!==e&&(e.addEventListener("click",(e=>{const t=e.target;xn(t)||navigator.clipboard.writeText(window.location.href).then((()=>{const e=t.getAttribute(En),n=t.getAttribute(wn);t.setAttribute(En,n),Bt.getInstance(t).show(),On(t),setTimeout((()=>{t.setAttribute(En,e),Cn(t)}),An)}))})),e.addEventListener("mouseleave",(e=>{Bt.getInstance(e.target).hide()})))}(),function(){const e=document.getElementById("back-to-top");window.addEventListener("scroll",(()=>{window.scrollY>50?e.classList.add("show"):e.classList.remove("show")})),e.addEventListener("click",(()=>{window.scrollTo({top:0})}))}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map((e=>new Bt(e)))}(); diff --git a/assets/js/dist/post.min.js b/assets/js/dist/post.min.js new file mode 100644 index 00000000000..cd94337c77e --- /dev/null +++ b/assets/js/dist/post.min.js @@ -0,0 +1,4 @@ +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";var t="top",e="bottom",n="right",i="left",o="auto",r=[t,e,n,i],s="start",a="end",l="clippingParents",c="viewport",u="popper",f="reference",d=r.reduce((function(t,e){return t.concat([e+"-"+s,e+"-"+a])}),[]),p=[].concat(r,[o]).reduce((function(t,e){return t.concat([e,e+"-"+s,e+"-"+a])}),[]),h="beforeRead",m="read",g="afterRead",b="beforeMain",v="main",y="afterMain",_="beforeWrite",w="write",E="afterWrite",A=[h,m,g,b,v,y,_,w,E];function x(t){return t?(t.nodeName||"").toLowerCase():null}function O(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function C(t){return t instanceof O(t).Element||t instanceof Element}function L(t){return t instanceof O(t).HTMLElement||t instanceof HTMLElement}function T(t){return"undefined"!=typeof ShadowRoot&&(t instanceof O(t).ShadowRoot||t instanceof ShadowRoot)}var S={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];L(o)&&x(o)&&(Object.assign(o.style,n),Object.keys(i).forEach((function(t){var e=i[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var i=e.elements[t],o=e.attributes[t]||{},r=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce((function(t,e){return t[e]="",t}),{});L(i)&&x(i)&&(Object.assign(i.style,r),Object.keys(o).forEach((function(t){i.removeAttribute(t)})))}))}},requires:["computeStyles"]};function k(t){return t.split("-")[0]}var j=Math.max,D=Math.min,P=Math.round;function M(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function N(){return!/^((?!chrome|android).)*safari/i.test(M())}function B(t,e,n){void 0===e&&(e=!1),void 0===n&&(n=!1);var i=t.getBoundingClientRect(),o=1,r=1;e&&L(t)&&(o=t.offsetWidth>0&&P(i.width)/t.offsetWidth||1,r=t.offsetHeight>0&&P(i.height)/t.offsetHeight||1);var s=(C(t)?O(t):window).visualViewport,a=!N()&&n,l=(i.left+(a&&s?s.offsetLeft:0))/o,c=(i.top+(a&&s?s.offsetTop:0))/r,u=i.width/o,f=i.height/r;return{width:u,height:f,top:c,right:l+u,bottom:c+f,left:l,x:l,y:c}}function I(t){var e=B(t),n=t.offsetWidth,i=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:i}}function F(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&T(n)){var i=e;do{if(i&&t.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function H(t){return O(t).getComputedStyle(t)}function $(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((C(t)?t.ownerDocument:t.document)||window.document).documentElement}function z(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(T(t)?t.host:null)||q(t)}function W(t){return L(t)&&"fixed"!==H(t).position?t.offsetParent:null}function R(t){for(var e=O(t),n=W(t);n&&$(n)&&"static"===H(n).position;)n=W(n);return n&&("html"===x(n)||"body"===x(n)&&"static"===H(n).position)?e:n||function(t){var e=/firefox/i.test(M());if(/Trident/i.test(M())&&L(t)&&"fixed"===H(t).position)return null;var n=z(t);for(T(n)&&(n=n.host);L(n)&&["html","body"].indexOf(x(n))<0;){var i=H(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||e&&"filter"===i.willChange||e&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(t)||e}function V(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Y(t,e,n){return j(t,D(e,n))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function K(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(o){var s,a=o.state,l=o.name,c=o.options,u=a.elements.arrow,f=a.modifiersData.popperOffsets,d=k(a.placement),p=V(d),h=[i,n].indexOf(d)>=0?"height":"width";if(u&&f){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:K(t,r))}(c.padding,a),g=I(u),b="y"===p?t:i,v="y"===p?e:n,y=a.rects.reference[h]+a.rects.reference[p]-f[p]-a.rects.popper[h],_=f[p]-a.rects.reference[p],w=R(u),E=w?"y"===p?w.clientHeight||0:w.clientWidth||0:0,A=y/2-_/2,x=m[b],O=E-g[h]-m[v],C=E/2-g[h]/2+A,L=Y(x,C,O),T=p;a.modifiersData[l]=((s={})[T]=L,s.centerOffset=L-C,s)}},effect:function(t){var e=t.state,n=t.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=e.elements.popper.querySelector(i)))&&F(e.elements.popper,i)&&(e.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function G(t){return t.split("-")[1]}var X={top:"auto",right:"auto",bottom:"auto",left:"auto"};function J(o){var r,s=o.popper,l=o.popperRect,c=o.placement,u=o.variation,f=o.offsets,d=o.position,p=o.gpuAcceleration,h=o.adaptive,m=o.roundOffsets,g=o.isFixed,b=f.x,v=void 0===b?0:b,y=f.y,_=void 0===y?0:y,w="function"==typeof m?m({x:v,y:_}):{x:v,y:_};v=w.x,_=w.y;var E=f.hasOwnProperty("x"),A=f.hasOwnProperty("y"),x=i,C=t,L=window;if(h){var T=R(s),S="clientHeight",k="clientWidth";if(T===O(s)&&"static"!==H(T=q(s)).position&&"absolute"===d&&(S="scrollHeight",k="scrollWidth"),c===t||(c===i||c===n)&&u===a)C=e,_-=(g&&T===L&&L.visualViewport?L.visualViewport.height:T[S])-l.height,_*=p?1:-1;if(c===i||(c===t||c===e)&&u===a)x=n,v-=(g&&T===L&&L.visualViewport?L.visualViewport.width:T[k])-l.width,v*=p?1:-1}var j,D=Object.assign({position:d},h&&X),M=!0===m?function(t,e){var n=t.x,i=t.y,o=e.devicePixelRatio||1;return{x:P(n*o)/o||0,y:P(i*o)/o||0}}({x:v,y:_},O(s)):{x:v,y:_};return v=M.x,_=M.y,p?Object.assign({},D,((j={})[C]=A?"0":"",j[x]=E?"0":"",j.transform=(L.devicePixelRatio||1)<=1?"translate("+v+"px, "+_+"px)":"translate3d("+v+"px, "+_+"px, 0)",j)):Object.assign({},D,((r={})[C]=A?_+"px":"",r[x]=E?v+"px":"",r.transform="",r))}var Z={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,n=t.options,i=n.gpuAcceleration,o=void 0===i||i,r=n.adaptive,s=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:k(e.placement),variation:G(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,J(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,J(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},tt={passive:!0};var et={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,n=t.instance,i=t.options,o=i.scroll,r=void 0===o||o,s=i.resize,a=void 0===s||s,l=O(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&c.forEach((function(t){t.addEventListener("scroll",n.update,tt)})),a&&l.addEventListener("resize",n.update,tt),function(){r&&c.forEach((function(t){t.removeEventListener("scroll",n.update,tt)})),a&&l.removeEventListener("resize",n.update,tt)}},data:{}},nt={left:"right",right:"left",bottom:"top",top:"bottom"};function it(t){return t.replace(/left|right|bottom|top/g,(function(t){return nt[t]}))}var ot={start:"end",end:"start"};function rt(t){return t.replace(/start|end/g,(function(t){return ot[t]}))}function st(t){var e=O(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function at(t){return B(q(t)).left+st(t).scrollLeft}function lt(t){var e=H(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+i)}function ct(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:L(t)&<(t)?t:ct(z(t))}function ut(t,e){var n;void 0===e&&(e=[]);var i=ct(t),o=i===(null==(n=t.ownerDocument)?void 0:n.body),r=O(i),s=o?[r].concat(r.visualViewport||[],lt(i)?i:[]):i,a=e.concat(s);return o?a:a.concat(ut(z(s)))}function ft(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function dt(t,e,n){return e===c?ft(function(t,e){var n=O(t),i=q(t),o=n.visualViewport,r=i.clientWidth,s=i.clientHeight,a=0,l=0;if(o){r=o.width,s=o.height;var c=N();(c||!c&&"fixed"===e)&&(a=o.offsetLeft,l=o.offsetTop)}return{width:r,height:s,x:a+at(t),y:l}}(t,n)):C(e)?function(t,e){var n=B(t,!1,"fixed"===e);return n.top=n.top+t.clientTop,n.left=n.left+t.clientLeft,n.bottom=n.top+t.clientHeight,n.right=n.left+t.clientWidth,n.width=t.clientWidth,n.height=t.clientHeight,n.x=n.left,n.y=n.top,n}(e,n):ft(function(t){var e,n=q(t),i=st(t),o=null==(e=t.ownerDocument)?void 0:e.body,r=j(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=j(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),a=-i.scrollLeft+at(t),l=-i.scrollTop;return"rtl"===H(o||n).direction&&(a+=j(n.clientWidth,o?o.clientWidth:0)-r),{width:r,height:s,x:a,y:l}}(q(t)))}function pt(t,e,n,i){var o="clippingParents"===e?function(t){var e=ut(z(t)),n=["absolute","fixed"].indexOf(H(t).position)>=0&&L(t)?R(t):t;return C(n)?e.filter((function(t){return C(t)&&F(t,n)&&"body"!==x(t)})):[]}(t):[].concat(e),r=[].concat(o,[n]),s=r[0],a=r.reduce((function(e,n){var o=dt(t,n,i);return e.top=j(o.top,e.top),e.right=D(o.right,e.right),e.bottom=D(o.bottom,e.bottom),e.left=j(o.left,e.left),e}),dt(t,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function ht(o){var r,l=o.reference,c=o.element,u=o.placement,f=u?k(u):null,d=u?G(u):null,p=l.x+l.width/2-c.width/2,h=l.y+l.height/2-c.height/2;switch(f){case t:r={x:p,y:l.y-c.height};break;case e:r={x:p,y:l.y+l.height};break;case n:r={x:l.x+l.width,y:h};break;case i:r={x:l.x-c.width,y:h};break;default:r={x:l.x,y:l.y}}var m=f?V(f):null;if(null!=m){var g="y"===m?"height":"width";switch(d){case s:r[m]=r[m]-(l[g]/2-c[g]/2);break;case a:r[m]=r[m]+(l[g]/2-c[g]/2)}}return r}function mt(i,o){void 0===o&&(o={});var s=o,a=s.placement,d=void 0===a?i.placement:a,p=s.strategy,h=void 0===p?i.strategy:p,m=s.boundary,g=void 0===m?l:m,b=s.rootBoundary,v=void 0===b?c:b,y=s.elementContext,_=void 0===y?u:y,w=s.altBoundary,E=void 0!==w&&w,A=s.padding,x=void 0===A?0:A,O=U("number"!=typeof x?x:K(x,r)),L=_===u?f:u,T=i.rects.popper,S=i.elements[E?L:_],k=pt(C(S)?S:S.contextElement||q(i.elements.popper),g,v,h),j=B(i.elements.reference),D=ht({reference:j,element:T,strategy:"absolute",placement:d}),P=ft(Object.assign({},T,D)),M=_===u?P:j,N={top:k.top-M.top+O.top,bottom:M.bottom-k.bottom+O.bottom,left:k.left-M.left+O.left,right:M.right-k.right+O.right},I=i.modifiersData.offset;if(_===u&&I){var F=I[d];Object.keys(N).forEach((function(i){var o=[n,e].indexOf(i)>=0?1:-1,r=[t,e].indexOf(i)>=0?"y":"x";N[i]+=F[r]*o}))}return N}function gt(t,e){void 0===e&&(e={});var n=e,i=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,l=n.flipVariations,c=n.allowedAutoPlacements,u=void 0===c?p:c,f=G(i),h=f?l?d:d.filter((function(t){return G(t)===f})):r,m=h.filter((function(t){return u.indexOf(t)>=0}));0===m.length&&(m=h);var g=m.reduce((function(e,n){return e[n]=mt(t,{placement:n,boundary:o,rootBoundary:s,padding:a})[k(n)],e}),{});return Object.keys(g).sort((function(t,e){return g[t]-g[e]}))}var bt={name:"flip",enabled:!0,phase:"main",fn:function(r){var a=r.state,l=r.options,c=r.name;if(!a.modifiersData[c]._skip){for(var u=l.mainAxis,f=void 0===u||u,d=l.altAxis,p=void 0===d||d,h=l.fallbackPlacements,m=l.padding,g=l.boundary,b=l.rootBoundary,v=l.altBoundary,y=l.flipVariations,_=void 0===y||y,w=l.allowedAutoPlacements,E=a.options.placement,A=k(E),x=h||(A===E||!_?[it(E)]:function(t){if(k(t)===o)return[];var e=it(t);return[rt(t),e,rt(e)]}(E)),O=[E].concat(x).reduce((function(t,e){return t.concat(k(e)===o?gt(a,{placement:e,boundary:g,rootBoundary:b,padding:m,flipVariations:_,allowedAutoPlacements:w}):e)}),[]),C=a.rects.reference,L=a.rects.popper,T=new Map,S=!0,j=O[0],D=0;D=0,I=B?"width":"height",F=mt(a,{placement:P,boundary:g,rootBoundary:b,altBoundary:v,padding:m}),H=B?N?n:i:N?e:t;C[I]>L[I]&&(H=it(H));var $=it(H),q=[];if(f&&q.push(F[M]<=0),p&&q.push(F[H]<=0,F[$]<=0),q.every((function(t){return t}))){j=P,S=!1;break}T.set(P,q)}if(S)for(var z=function(t){var e=O.find((function(e){var n=T.get(e);if(n)return n.slice(0,t).every((function(t){return t}))}));if(e)return j=e,"break"},W=_?3:1;W>0;W--){if("break"===z(W))break}a.placement!==j&&(a.modifiersData[c]._skip=!0,a.placement=j,a.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(o){return[t,n,e,i].some((function(t){return o[t]>=0}))}var _t={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,i=e.rects.reference,o=e.rects.popper,r=e.modifiersData.preventOverflow,s=mt(e,{elementContext:"reference"}),a=mt(e,{altBoundary:!0}),l=vt(s,i),c=vt(a,o,r),u=yt(l),f=yt(c);e.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}};var wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var o=e.state,r=e.options,s=e.name,a=r.offset,l=void 0===a?[0,0]:a,c=p.reduce((function(e,r){return e[r]=function(e,o,r){var s=k(e),a=[i,t].indexOf(s)>=0?-1:1,l="function"==typeof r?r(Object.assign({},o,{placement:e})):r,c=l[0],u=l[1];return c=c||0,u=(u||0)*a,[i,n].indexOf(s)>=0?{x:u,y:c}:{x:c,y:u}}(r,o.rects,l),e}),{}),u=c[o.placement],f=u.x,d=u.y;null!=o.modifiersData.popperOffsets&&(o.modifiersData.popperOffsets.x+=f,o.modifiersData.popperOffsets.y+=d),o.modifiersData[s]=c}};var Et={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name;e.modifiersData[n]=ht({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}};var At={name:"preventOverflow",enabled:!0,phase:"main",fn:function(o){var r=o.state,a=o.options,l=o.name,c=a.mainAxis,u=void 0===c||c,f=a.altAxis,d=void 0!==f&&f,p=a.boundary,h=a.rootBoundary,m=a.altBoundary,g=a.padding,b=a.tether,v=void 0===b||b,y=a.tetherOffset,_=void 0===y?0:y,w=mt(r,{boundary:p,rootBoundary:h,padding:g,altBoundary:m}),E=k(r.placement),A=G(r.placement),x=!A,O=V(E),C="x"===O?"y":"x",L=r.modifiersData.popperOffsets,T=r.rects.reference,S=r.rects.popper,P="function"==typeof _?_(Object.assign({},r.rects,{placement:r.placement})):_,M="number"==typeof P?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),N=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,B={x:0,y:0};if(L){if(u){var F,H="y"===O?t:i,$="y"===O?e:n,q="y"===O?"height":"width",z=L[O],W=z+w[H],U=z-w[$],K=v?-S[q]/2:0,Q=A===s?T[q]:S[q],X=A===s?-S[q]:-T[q],J=r.elements.arrow,Z=v&&J?I(J):{width:0,height:0},tt=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[H],nt=tt[$],it=Y(0,T[q],Z[q]),ot=x?T[q]/2-K-it-et-M.mainAxis:Q-it-et-M.mainAxis,rt=x?-T[q]/2+K+it+nt+M.mainAxis:X+it+nt+M.mainAxis,st=r.elements.arrow&&R(r.elements.arrow),at=st?"y"===O?st.clientTop||0:st.clientLeft||0:0,lt=null!=(F=null==N?void 0:N[O])?F:0,ct=z+rt-lt,ut=Y(v?D(W,z+ot-lt-at):W,z,v?j(U,ct):U);L[O]=ut,B[O]=ut-z}if(d){var ft,dt="x"===O?t:i,pt="x"===O?e:n,ht=L[C],gt="y"===C?"height":"width",bt=ht+w[dt],vt=ht-w[pt],yt=-1!==[t,i].indexOf(E),_t=null!=(ft=null==N?void 0:N[C])?ft:0,wt=yt?bt:ht-T[gt]-S[gt]-_t+M.altAxis,Et=yt?ht+T[gt]+S[gt]-_t-M.altAxis:vt,At=v&&yt?function(t,e,n){var i=Y(t,e,n);return i>n?n:i}(wt,ht,Et):Y(v?wt:bt,ht,v?Et:vt);L[C]=At,B[C]=At-ht}r.modifiersData[l]=B}},requiresIfExists:["offset"]};function xt(t,e,n){void 0===n&&(n=!1);var i,o,r=L(e),s=L(e)&&function(t){var e=t.getBoundingClientRect(),n=P(e.width)/t.offsetWidth||1,i=P(e.height)/t.offsetHeight||1;return 1!==n||1!==i}(e),a=q(e),l=B(t,s,n),c={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(r||!r&&!n)&&(("body"!==x(e)||lt(a))&&(c=(i=e)!==O(i)&&L(i)?{scrollLeft:(o=i).scrollLeft,scrollTop:o.scrollTop}:st(i)),L(e)?((u=B(e,!0)).x+=e.clientLeft,u.y+=e.clientTop):a&&(u.x=at(a))),{x:l.left+c.scrollLeft-u.x,y:l.top+c.scrollTop-u.y,width:l.width,height:l.height}}function Ot(t){var e=new Map,n=new Set,i=[];function o(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!n.has(t)){var i=e.get(t);i&&o(i)}})),i.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||o(t)})),i}var Ct={placement:"bottom",modifiers:[],strategy:"absolute"};function Lt(){for(var t=arguments.length,e=new Array(t),n=0;nPt.has(t)&&Pt.get(t).get(e)||null,remove(t,e){if(!Pt.has(t))return;const n=Pt.get(t);n.delete(e),0===n.size&&Pt.delete(t)}};const Nt="transitionend",Bt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),It=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ft=t=>It(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Bt(t)):null,Ht=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?Ht(t.parentNode):null},$t=()=>{},qt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,zt=[],Wt=()=>"rtl"===document.documentElement.dir,Rt=t=>{var e;e=()=>{const e=qt();if(e){const n=t.NAME,i=e.fn[n];e.fn[n]=t.jQueryInterface,e.fn[n].Constructor=t,e.fn[n].noConflict=()=>(e.fn[n]=i,t.jQueryInterface)}},"loading"===document.readyState?(zt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of zt)t()})),zt.push(e)):e()},Vt=function(t){let e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;return"function"==typeof t?t(...arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]):e},Yt=function(t,e){if(!(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]))return void Vt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:n}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(n))):0})(e)+5;let i=!1;const o=n=>{let{target:r}=n;r===e&&(i=!0,e.removeEventListener(Nt,o),Vt(t))};e.addEventListener(Nt,o),setTimeout((()=>{i||e.dispatchEvent(new Event(Nt))}),n)},Ut=/[^.]*(?=\..*)\.|.*/,Kt=/\..*/,Qt=/::\d+$/,Gt={};let Xt=1;const Jt={mouseenter:"mouseover",mouseleave:"mouseout"},Zt=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function te(t,e){return e&&`${e}::${Xt++}`||t.uidEvent||Xt++}function ee(t){const e=te(t);return t.uidEvent=e,Gt[e]=Gt[e]||{},Gt[e]}function ne(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===n))}function ie(t,e,n){const i="string"==typeof e,o=i?n:e||n;let r=ae(t);return Zt.has(r)||(r=t),[i,o,r]}function oe(t,e,n,i,o){if("string"!=typeof e||!t)return;let[r,s,a]=ie(e,n,i);if(e in Jt){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s=t(s)}const l=ee(t),c=l[a]||(l[a]={}),u=ne(c,s,r?n:null);if(u)return void(u.oneOff=u.oneOff&&o);const f=te(s,e.replace(Ut,"")),d=r?function(t,e,n){return function i(o){const r=t.querySelectorAll(e);for(let{target:s}=o;s&&s!==this;s=s.parentNode)for(const a of r)if(a===s)return ce(o,{delegateTarget:s}),i.oneOff&&le.off(t,o.type,e,n),n.apply(s,[o])}}(t,n,s):function(t,e){return function n(i){return ce(i,{delegateTarget:t}),n.oneOff&&le.off(t,i.type,e),e.apply(t,[i])}}(t,s);d.delegationSelector=r?n:null,d.callable=s,d.oneOff=o,d.uidEvent=f,c[f]=d,t.addEventListener(a,d,r)}function re(t,e,n,i,o){const r=ne(e[n],i,o);r&&(t.removeEventListener(n,r,Boolean(o)),delete e[n][r.uidEvent])}function se(t,e,n,i){const o=e[n]||{};for(const[r,s]of Object.entries(o))r.includes(i)&&re(t,e,n,s.callable,s.delegationSelector)}function ae(t){return t=t.replace(Kt,""),Jt[t]||t}const le={on(t,e,n,i){oe(t,e,n,i,!1)},one(t,e,n,i){oe(t,e,n,i,!0)},off(t,e,n,i){if("string"!=typeof e||!t)return;const[o,r,s]=ie(e,n,i),a=s!==e,l=ee(t),c=l[s]||{},u=e.startsWith(".");if(void 0===r){if(u)for(const n of Object.keys(l))se(t,l,n,e.slice(1));for(const[n,i]of Object.entries(c)){const o=n.replace(Qt,"");a&&!e.includes(o)||re(t,l,s,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;re(t,l,s,r,o?n:null)}},trigger(t,e,n){if("string"!=typeof e||!t)return null;const i=qt();let o=null,r=!0,s=!0,a=!1;e!==ae(e)&&i&&(o=i.Event(e,n),i(t).trigger(o),r=!o.isPropagationStopped(),s=!o.isImmediatePropagationStopped(),a=o.isDefaultPrevented());const l=ce(new Event(e,{bubbles:r,cancelable:!0}),n);return a&&l.preventDefault(),s&&t.dispatchEvent(l),l.defaultPrevented&&o&&o.preventDefault(),l}};function ce(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const[n,i]of Object.entries(e))try{t[n]=i}catch{Object.defineProperty(t,n,{configurable:!0,get:()=>i})}return t}function ue(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function fe(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const de={setDataAttribute(t,e,n){t.setAttribute(`data-bs-${fe(e)}`,n)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${fe(e)}`)},getDataAttributes(t){if(!t)return{};const e={},n=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=ue(t.dataset[i])}return e},getDataAttribute:(t,e)=>ue(t.getAttribute(`data-bs-${fe(e)}`))};class pe{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const n=It(e)?de.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...It(e)?de.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.constructor.DefaultType;for(const[i,o]of Object.entries(e)){const e=t[i],r=It(e)?"element":null==(n=e)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${o}".`)}var n}}class he extends pe{constructor(t,e){super(),(t=Ft(t))&&(this._element=t,this._config=this._getConfig(e),Mt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Mt.remove(this._element,this.constructor.DATA_KEY),le.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e){Yt(t,e,!(arguments.length>2&&void 0!==arguments[2])||arguments[2])}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Mt.get(Ft(t),this.DATA_KEY)}static getOrCreateInstance(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const me={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},ge=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),be=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,ve=(t,e)=>{const n=t.nodeName.toLowerCase();return e.includes(n)?!ge.has(n)||Boolean(be.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(n)))};const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let n=t.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),e=n&&"#"!==n?n.trim():null}return e?e.split(",").map((t=>Bt(t))).join(","):null},_e={find(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.documentElement;return Element.prototype.querySelector.call(e,t)},children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const n=[];let i=t.parentNode.closest(e);for(;i;)n.push(i),i=i.parentNode.closest(e);return n},prev(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return[n];n=n.previousElementSibling}return[]},next(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return[n];n=n.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!(t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")))(t)&&(t=>{if(!It(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),n=t.closest("details:not([open])");if(!n)return e;if(n!==t){const e=t.closest("summary");if(e&&e.parentNode!==n)return!1;if(null===e)return!1}return e})(t)))},getSelectorFromElement(t){const e=ye(t);return e&&_e.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?_e.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?_e.find(e):[]}},we={allowList:me,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Ee={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ae={entry:"(string|element|function|null)",selector:"(string|element)"};class xe extends pe{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return we}static get DefaultType(){return Ee}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,n]of Object.entries(this._config.content))this._setContent(t,n,e);const e=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&e.classList.add(...n.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,n]of Object.entries(t))super._typeCheckConfig({selector:e,entry:n},Ae)}_setContent(t,e,n){const i=_e.findOne(n,t);i&&((e=this._resolvePossibleFunction(e))?It(e)?this._putElementInTemplate(Ft(e),i):this._config.html?i.innerHTML=this._maybeSanitize(e):i.textContent=e:i.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,n){if(!t.length)return t;if(n&&"function"==typeof n)return n(t);const i=(new window.DOMParser).parseFromString(t,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const t of o){const n=t.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){t.remove();continue}const i=[].concat(...t.attributes),o=[].concat(e["*"]||[],e[n]||[]);for(const e of i)ve(e,o)||t.removeAttribute(e.nodeName)}return i.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Vt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Oe=new Set(["sanitize","allowList","sanitizeFn"]),Ce="fade",Le="show",Te=".tooltip-inner",Se=".modal",ke="hide.bs.modal",je="hover",De="focus",Pe={AUTO:"auto",TOP:"top",RIGHT:Wt()?"left":"right",BOTTOM:"bottom",LEFT:Wt()?"right":"left"},Me={allowList:me,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},Ne={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Be extends he{constructor(t,e){if(void 0===Dt)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Me}static get DefaultType(){return Ne}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),le.off(this._element.closest(Se),ke,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=le.trigger(this._element,this.constructor.eventName("show")),e=(Ht(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),le.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(Le),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))le.on(t,"mouseover",$t);this._queueCallback((()=>{le.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(le.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(Le),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))le.off(t,"mouseover",$t);this._activeTrigger.click=!1,this._activeTrigger[De]=!1,this._activeTrigger[je]=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),le.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ce,Le),e.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",n),this._isAnimated()&&e.classList.add(Ce),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new xe({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Te]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ce)}_isShown(){return this.tip&&this.tip.classList.contains(Le)}_createPopper(t){const e=Vt(this._config.placement,[this,t,this._element]),n=Pe[e.toUpperCase()];return jt(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Vt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Vt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)le.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===je?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=e===je?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");le.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?De:je]=!0,e._enter()})),le.on(this._element,n,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?De:je]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},le.on(this._element.closest(Se),ke,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=de.getDataAttributes(this._element);for(const t of Object.keys(e))Oe.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ft(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,n]of Object.entries(this._config))this.constructor.Default[e]!==n&&(t[e]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=Be.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Rt(Be);const Ie=document.getElementById("mode-toggle");function Fe(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const He="sidebar-display";class $e{static toggle(){!1===$e.isExpanded?document.body.setAttribute(He,""):document.body.removeAttribute(He),$e.isExpanded=!$e.isExpanded}}Fe($e,"isExpanded",!1);const qe=document.getElementById("sidebar-trigger"),ze=document.getElementById("search-trigger"),We=document.getElementById("search-cancel"),Re=document.querySelectorAll("#main-wrapper>.container>.row"),Ve=document.getElementById("topbar-title"),Ye=document.getElementById("search"),Ue=document.getElementById("search-result-wrapper"),Ke=document.getElementById("search-results"),Qe=document.getElementById("search-input"),Ge=document.getElementById("search-hints"),Xe="d-block",Je="d-none",Ze="input-focus",tn="d-flex";class en{static on(){qe.classList.add(Je),Ve.classList.add(Je),ze.classList.add(Je),Ye.classList.add(tn),We.classList.add(Xe)}static off(){We.classList.remove(Xe),Ye.classList.remove(tn),qe.classList.remove(Je),Ve.classList.remove(Je),ze.classList.remove(Je)}}class nn{static on(){this.resultVisible||(Ue.classList.remove(Je),Re.forEach((t=>{t.classList.add(Je)})),this.resultVisible=!0)}static off(){this.resultVisible&&(Ke.innerHTML="",Ge.classList.contains(Je)&&Ge.classList.remove(Je),Ue.classList.add(Je),Re.forEach((t=>{t.classList.remove(Je)})),Qe.textContent="",this.resultVisible=!1)}}function on(){return We.classList.contains(Xe)}Fe(nn,"resultVisible",!1);const rn=".bs.collapse",sn=`show${rn}`,an=`shown${rn}`,ln=`hide${rn}`,cn=`hidden${rn}`,un=`click${rn}.data-api`,fn="show",dn="collapse",pn="collapsing",hn=`:scope .${dn} .${dn}`,mn='[data-bs-toggle="collapse"]',gn={parent:null,toggle:!0},bn={parent:"(null|element)",toggle:"boolean"};class vn extends he{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=_e.find(mn);for(const t of n){const e=_e.getSelectorFromElement(t),n=_e.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return gn}static get DefaultType(){return bn}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>vn.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(le.trigger(this._element,sn).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(dn),this._element.classList.add(pn),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn,fn),this._element.style[e]="",le.trigger(this._element,an)}),this._element,!0),this._element.style[e]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(le.trigger(this._element,ln).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,this._element.offsetHeight,this._element.classList.add(pn),this._element.classList.remove(dn,fn);for(const t of this._triggerArray){const e=_e.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0;this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(pn),this._element.classList.add(dn),le.trigger(this._element,cn)}),this._element,!0)}_isShown(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._element).classList.contains(fn)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ft(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(mn);for(const e of t){const t=_e.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=_e.find(hn,this._config.parent);return _e.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const n of t)n.classList.toggle("collapsed",!e),n.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const n=vn.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===n[t])throw new TypeError(`No method named "${t}"`);n[t]()}}))}}le.on(document,un,mn,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of _e.getMultipleElementsFromSelector(this))vn.getOrCreateInstance(t,{toggle:!1}).toggle()})),Rt(vn),document.getElementsByClassName("collapse");const yn=".code-header>button",_n="timeout",wn="data-title-succeed",En="data-bs-original-title",An=2e3;function xn(t){if(t.hasAttribute(_n)){let e=t.getAttribute(_n);if(Number(e)>Date.now())return!0}return!1}function On(t){t.setAttribute(_n,Date.now()+An)}function Cn(t){t.removeAttribute(_n)}function Ln(){const t=document.querySelectorAll(yn);if(0===t.length)return;const e=new ClipboardJS(yn,{target:t=>t.parentNode.nextElementSibling.querySelector("code .rouge-code")});[...t].map((t=>new Be(t,{placement:"left"}))),e.on("success",(t=>{const e=t.trigger;(t.clearSelection(),xn(e))||(e.children[0].setAttribute("class","fas fa-check"),function(t){const e=t.getAttribute(wn);t.setAttribute(En,e),Be.getInstance(t).show()}(e),On(e),setTimeout((()=>{!function(t){Be.getInstance(t).hide(),t.removeAttribute(En)}(e),function(t){t.children[0].setAttribute("class","far fa-clipboard")}(e),Cn(e)}),An))}))}const Tn="data-src",Sn="data-lqip",kn="shimmer",jn="blur";function Dn(t){this.parentElement.classList.remove(t)}function Pn(){this.complete&&(this.hasAttribute(Sn)?Dn.call(this,jn):Dn.call(this,kn))}function Mn(){const t=this.getAttribute(Tn);this.setAttribute("src",encodeURI(t)),this.removeAttribute(Tn)}const Nn=document.documentElement,Bn=".popup:not(.dark)",In=".popup:not(.light)";let Fn=Bn;class Hn{static get attrTimestamp(){return"data-ts"}static get attrDateFormat(){return"data-df"}static get locale(){return document.documentElement.getAttribute("lang").substring(0,2)}static getTimestamp(t){return Number(t.getAttribute(this.attrTimestamp))}static getDateFormat(t){return t.getAttribute(this.attrDateFormat)}}var $n;const qn=document.getElementById("toc-bar"),zn=document.getElementById("toc-solo-trigger"),Wn=document.getElementsByClassName("toc-trigger"),Rn=document.getElementById("toc-popup"),Vn=document.getElementById("toc-popup-close"),Yn="overflow-hidden",Un="closing";class Kn{static initBar(){new IntersectionObserver((t=>{t.forEach((t=>{qn.classList.toggle("invisible",t.isIntersecting)}))}),{rootMargin:`-${this.barHeight}px 0px 0px 0px`}).observe(zn),this.invisible=!1}static listenAnchors(){[...document.getElementsByClassName("toc-link")].forEach((t=>{t.onclick=this.hidePopup}))}static refresh(){this.invisible&&this.initComponents(),tocbot.refresh(this.options),this.listenAnchors()}static showPopup(){Kn.lockScroll(!0),Rn.showModal();Rn.querySelector("li.is-active-li").scrollIntoView({block:"center"})}static hidePopup(t){"cancel"===t?.type&&t.preventDefault(),Rn.open&&(Rn.toggleAttribute(Un),Rn.addEventListener("animationend",(()=>{Rn.toggleAttribute(Un),Rn.close()}),{once:!0}),Kn.lockScroll(!1))}static lockScroll(t){document.documentElement.classList.toggle(Yn,t),document.body.classList.toggle(Yn,t)}static clickBackdrop(t){const e=t.target.getBoundingClientRect();(t.clientXe.right||t.clientYe.bottom)&&Kn.hidePopup()}static initComponents(){this.initBar(),[...Wn].forEach((t=>{t.onclick=this.showPopup})),Rn.onclick=this.clickBackdrop,Vn.onclick=Rn.oncancel=this.hidePopup}static init(){tocbot.init(this.options),this.listenAnchors(),this.initComponents()}}$n=Kn,Fe(Kn,"invisible",!0),Fe(Kn,"barHeight",48),Fe(Kn,"options",{tocSelector:"#toc-popup-content",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,collapseDepth:4,headingsOffset:$n.barHeight});class Qn{static refresh(){tocbot.refresh(this.options)}static init(){document.getElementById("toc-wrapper")&&tocbot.init(this.options)}}Fe(Qn,"options",{tocSelector:"#toc",contentSelector:".content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3, h4",orderedList:!1,scrollSmooth:!1,headingsOffset:32});const Gn=matchMedia("(min-width: 1200px)");function Xn(t){t.matches?(Kn.hidePopup(),Qn.refresh()):Kn.refresh()}!function(){const t=document.querySelectorAll("article img");if(0===t.length)return;t.forEach((t=>{t.addEventListener("load",Pn)})),document.querySelectorAll('article img[loading="lazy"]').forEach((t=>{t.complete&&Dn.call(t,kn)}));const e=document.querySelectorAll(`article img[${Sn}="true"]`);e.length&&e.forEach((t=>{Mn.call(t)}))}(),null!==document.querySelector('main>article[data-toc="true"]')&&(Gn.matches?Qn.init():Kn.init(),Gn.onchange=Xn),function(){if(null===document.querySelector(".popup"))return;const t=!(null===document.querySelector(".popup.light")&&null===document.querySelector(".popup.dark"));(Nn.hasAttribute("data-mode")&&"dark"===Nn.getAttribute("data-mode")||!Nn.hasAttribute("data-mode")&&window.matchMedia("(prefers-color-scheme: dark)").matches)&&(Fn=In);let e=GLightbox({selector:`${Fn}`});if(t&&document.getElementById("mode-toggle")){let t=null;window.addEventListener("message",(n=>{n.source===window&&n.data&&n.data.direction===ModeToggle.ID&&function(t,e){Fn=Fn===Bn?In:Bn,null===e&&(e=GLightbox({selector:`${Fn}`})),[t,e]=[e,t]}(e,t)}))}}(),Ie&&Ie.addEventListener("click",(()=>{modeToggle.flipMode()})),document.getElementById("sidebar-trigger").addEventListener("click",$e.toggle),document.getElementById("mask").addEventListener("click",$e.toggle),dayjs.locale(Hn.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),document.querySelectorAll(`[${Hn.attrTimestamp}]`).forEach((t=>{const e=dayjs.unix(Hn.getTimestamp(t)),n=e.format(Hn.getDateFormat(t));if(t.textContent=n,t.removeAttribute(Hn.attrTimestamp),t.removeAttribute(Hn.attrDateFormat),t.hasAttribute("data-bs-toggle")&&"tooltip"===t.getAttribute("data-bs-toggle")){const n=e.format("llll");t.setAttribute("data-bs-title",n)}})),Ln(),function(){const t=document.getElementById("copy-link");null!==t&&(t.addEventListener("click",(t=>{const e=t.target;xn(e)||navigator.clipboard.writeText(window.location.href).then((()=>{const t=e.getAttribute(En),n=e.getAttribute(wn);e.setAttribute(En,n),Be.getInstance(e).show(),On(e),setTimeout((()=>{e.setAttribute(En,t),Cn(e)}),An)}))})),t.addEventListener("mouseleave",(t=>{Be.getInstance(t.target).hide()})))}(),ze.addEventListener("click",(()=>{en.on(),nn.on(),Qe.focus()})),We.addEventListener("click",(()=>{en.off(),nn.off()})),Qe.addEventListener("focus",(()=>{Ye.classList.add(Ze)})),Qe.addEventListener("focusout",(()=>{Ye.classList.remove(Ze)})),Qe.addEventListener("input",(()=>{""===Qe.value?on()?Ge.classList.remove(Je):nn.off():(nn.on(),on()&&Ge.classList.add(Je))})),function(){const t=document.getElementById("back-to-top");window.addEventListener("scroll",(()=>{window.scrollY>50?t.classList.add("show"):t.classList.remove("show")})),t.addEventListener("click",(()=>{window.scrollTo({top:0})}))}(),[...document.querySelectorAll('[data-bs-toggle="tooltip"]')].map((t=>new Be(t)))}(); diff --git a/assets/js/dist/sw.min.js b/assets/js/dist/sw.min.js new file mode 100644 index 00000000000..4a2983333cd --- /dev/null +++ b/assets/js/dist/sw.min.js @@ -0,0 +1,7 @@ +--- +permalink: /:basename +--- +/*! + * jekyll-theme-chirpy v7.1.1 | © 2019 Cotes Chung | MIT Licensed | https://github.com/cotes2020/jekyll-theme-chirpy/ + */ +!function(){"use strict";importScripts("./assets/js/data/swconf.js");const e=swconf.purge,t=swconf.interceptor;self.addEventListener("install",(t=>{e||t.waitUntil(caches.open(swconf.cacheName).then((e=>e.addAll(swconf.resources))))})),self.addEventListener("activate",(t=>{t.waitUntil(caches.keys().then((t=>Promise.all(t.map((t=>e||t!==swconf.cacheName?caches.delete(t):void 0))))))})),self.addEventListener("message",(e=>{"SKIP_WAITING"===e.data&&self.skipWaiting()})),self.addEventListener("fetch",(s=>{s.request.headers.has("range")||s.respondWith(caches.match(s.request).then((n=>n||fetch(s.request).then((n=>{const r=s.request.url;if(e||"GET"!==s.request.method||!function(e){const s=new URL(e),n=s.pathname;if(!s.protocol.startsWith("http"))return!1;for(const e of t.urlPrefixes)if(s.href.startsWith(e))return!1;for(const e of t.paths)if(n.startsWith(e))return!1;return!0}(r))return n;let a=n.clone();return caches.open(swconf.cacheName).then((e=>{e.put(s.request,a)})),n})))))}))}(); From 8c5b0f9843551acdc493a4c68469309a68163d56 Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 14 Oct 2024 16:18:23 +0900 Subject: [PATCH 03/10] refactor: test post --- _posts/2024-10-14-test-post.md | 54 +++++++++++++++++++++++++++++---- _posts/image.png | Bin 0 -> 10530 bytes 2 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 _posts/image.png diff --git a/_posts/2024-10-14-test-post.md b/_posts/2024-10-14-test-post.md index 6c477eb0199..e338913e7fc 100644 --- a/_posts/2024-10-14-test-post.md +++ b/_posts/2024-10-14-test-post.md @@ -1,10 +1,52 @@ -## 2024 10 14 블로그 포스트 테스트 +--- +layout: post +title: "test post" +date: 2024-10-14 +author: horoong +categories: [blog, tech, node] +tags: [backend, development, 웹개발] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: true # 댓글 가능 유무 +published: true # 공개/비공개 +--- -### 마크다운 형식 테스트 +## 포스트 테스트 및 마크다운 문법 정리 -``` -코드 블록 -``` +* ``블록`` -``코드블록 `` +* 테스트 +* **bold** + +* *italic* + +* ***bold + italic*** + +- (-, *, + 순서 없음) + +1. 순서 목록 1 + +2. 순서 목록 2 + +* link는 [네이버](www.naver.com) 텍스트(링크) 순 + +* ![alt text](image.png) + +* 이미지는 vscode의 Paste Image사용하는 법도 좋아 보인다. [Paste Image vscode](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image) + + + +*** + +* 코드 하이라이트 + ```js + console.log('hello world!') + ``` + + +* HTML 사용하기 +
+

" background-color: grey, padding: 30px 인 html 코드 사용하기

+
diff --git a/_posts/image.png b/_posts/image.png new file mode 100644 index 0000000000000000000000000000000000000000..75c2f60dc2018cd33d86719646465456fae3b9c2 GIT binary patch literal 10530 zcmZX31y~%*(&#Q4+}$NOEbf-zZow@$1Xvae4oe7bAwh#BxGn@(EI7df1Pkr~g1g(l zIrp4%@Aux+*VEPAC0*4uJ<~PO+L}r@n3R|R002itSzZ?a04^YK;U{Q_yDJu3Apn30 zcaoFSR*{pV*Y2- z`{9&kLZvd~{=WUAWMb|JDgg7jSVG!}hQhU|c$0J2}7;TU@0q0ALpFT!6m`qXbus*ba+9i(X!g&Ms|oQjm6V zpN%Syk1?6`Ji~o?oB2*dK(lOMm08)(AEc*vL|hQ7D=PN5<$mX;rjhi$!U~G(kvAhk zo~=J7aLXh%Y&qD~7#=FXwW86Z<(~IV#3iC>n|4efD~GTv$BMRZ!m{i`4e!f{b=0MC z@@HrgUJ=*Z77PMhnpmkYD$vEtVO}N4%rIs#^&PEWwS_lL(Vqzfve=(kvJG>KeG3up zmD?dxds7&&iWRirFnykyBlqgYCxEQFaMYeT;zo5eR3KBvvj5|hdSdcs?|Oj$aPM1{ zbp?upakxDDvvJ?xn8eB4916xDVdU1V+EFx>QQqivGQn4cs^2mu+Dc8j^B!?u$f9$|BL4=+y~M15 z(m;^Fj;X=)_`_nDT&QO6p6G^>+lG?7xqJAmc*2SJ)iUiaY!u7-q-~ zvLe1H{+$3{RK*VRbSV83JRN$<0wkyB{_iksQTZ6i`mr#fZ$7iJk*Y%9zC$qqRz}8r zvMxa?3*Gr-`T4^Szu%aXs8Z0IPYl1g&oC5U@~cNqSq05d+jnuz(BX!sbzmHMh?0#& zigepSxC5Vn-;8!ouYeoLf>9G00ZGr2@wvYdTQSlq(-X#jW3sj-(Tz%GgexPD$9U2E zytA++zmDp(awJFVC0>7f-1F9|F?}OlKV2go^E*(TsEEcBeIk;gGq6Xu`jrt;1ygE# z{5O`DwbiIIx_i=l7<&pXBCi1w5#6iF5H!(%ED#T7+S{RS*RK68p|z3KX2^Y`jwEf> z8<9?lb>w5}K(sc1WrECGnb`Jtx{eU~etba;0~ELCg3pwVl-Qn9GiNa@u(Z&t<8MUy z%PU#aCnOYrjn>~XlrX*XGd*II`G8y zXMgelby5@81nX&1g{&}3z&o3M!V~+G;1jVE7woG>KWUS=kWV{+d zV*%rOF0I#amqM2hd#PjA%U-{@);K}msOrb#SRpwhX(9H-yv7V5=3zUV!2gIl9M)S{S-f9pUV!t%-3wVf zGe;hjM_1%Cu0%{i>`L5CQcJ=~qQ!Z^!JvAh>QYEt$gQfBa=;$+F<&}TC{o5@Ju5=2 zVJnVvRR6W!CMOw(2!{`6h^|$MZz*%Ri=LB#UtWxkkb!x@$HHdQ^SqrSvm3MGriG?( z&%}|S60~xPa@6vT(tVw;FyS)T=YxD6U65h>C+UjM1*=6#1v+`|iZ;q0injCEe{hXS zmS4aB-2akKm)tJyb#GMa$JDA+`Etc_J?H21vJ&b6*{}02h-lv9>akiB%NJ`n$Q$bU zgdSin`Y%TM%S#nmTi_$GI842}2u1a|tsG^AGEbAeJ-i-iUxl_{2jL z)$?uh%@rHstZYoz<=0i$Gg+#mv!gp~(^RG<_ar0zy8Pg${^|ooTodXO{u9yyPiq0S z-uA=xRm0xH`NItvKItLwYPj;38Rz4E-Olk*k8Hd04O31VPMCh-l(};Zyy5)SF6pj_ zFpF?t=A!VWt5ZFei^xpDK+B9m?NDNo|A2XX<=nSVxiRvZzXEkZB+_% z2|5WJxwa0v4{Er+sGgcNdrcGYZFI@4(DJLytjxFeu1902J5=qk`d0U;Sot$qZo;xxOJ;#lR3vZ4DV+0Y~le1tr zV--jAy`2tERPt3MRytGss052^AuXhQ8uco=S1D5IFqYPQ5ANHy7D_&!{w6&@4Lj8q z)Kv4r+i7roVyI+DbSR<6+J?y*uQzxT#p9J&zWZKdSt9`q-G}v(WHjEei)u~cH1-;_ zmc1Ukj!u+CRL_e2w3#K91s6*ah2)KhN}I}*%KAX)!0m_jLiqy0B0^moJuOUHCHkhnKj@!K0f>iv~&}dv!VQSb!S&T=!Omw{(>& zkSY`^{!Ar1Hqyf6R~z<(*ZOx4z~PPPg1zI|~?vVU7++1P$5dlY&he%ss}_6ogW zvitn~&1X5jNHEQX5>LhBvYv;YH%Y+*`SBYN9pAfS{-zki_=q{EL z_F|_3u`f*xPs<8-3zi4!4T^sfwP)PdKPLYy9h`_MZpdQD9*{ZRcR83H^UU+?-Xa>g zY~Xed@M1XWTD(x$&nCMES+xBM+J25+zP@L-HB<}}wGi`5@q=G~T!a_x)=z6KRJXe4 zO~7imi|&V0O>rAczHa(tH|_i1-qDOoq#e{8TI^cPEP8|XmhN-XbCzyfZo}|&Xoqya(Jd=^e`z2E>2@3jr zod^E$>S*%a<&Vm=SWDa%!q$)EJXd-Tqh-?(Rf&%q7t`lS{YjxBYa+`_VE^J1@MA#c zrEC7Pe62p+K9*iAnUX-!qonIE>w4dc$%u?|k8_9G$b+2jcOK7=8z$YB<*E4`%1C5? z0Q>rok6z0FlGy-`4FG!XoP#gL*dK#I>5NCYzRh^K{1SkRGXVZablDCZz#u2!hthc| z9{@#1r=18|Sy^aPM3=L($f|)H`^~iG=lG9nRV@vgTc}=HJhNV$m zm;gq6$Hv$hsn~0105}l%695X35`c=pfQTXur1}?E1hN5;|LR8q03w|LD1XyvBI-Za zJ4E@z^Pd{|eFOj<(IP|?-%m*YPy-h}A^(E|gb`zaXL@ofDu`Oo#>37I?CI#{W!@h2 z0nvd0Q8xAj07#$yDL@rn<|BmsDW?}kUPc<~;x=xsJXW@D)^x2GT2%gUDW zA^*scxAU~|aDsR_xq<2b$hER|^Y)TrWc;J(-|Ii~wDWcPuO_hP-)12U1pOHS@$vA2 z{*{ejmHg8yuI=P&=VC1HHn_Q-^~9z_&1{@=#Sz5{A?|F5@~1`=0tfoQv?4?;pd$b5g)eZ=+%Jw)fz)j{A|x(4Q-9h;(D-{V z$_ITLL593tk}4rsr^L4~U+!jmDIGplc|Od%wQ%$&gv11IF_1m_gD|?gsa7KO_uhu>W&YlGJFWiu%TB5v?D~~E{)JDU2t|hh z;Ab1o=~Nixf5QwRFVvaxO%n8Pkfl=Y0D!5U%raXszx)RP({(_me;`!&9Td1Aj9;VD z^{?m-0L%$l5$PXrr3WH6y3*Tzc>AwhD9~&IEe_=$n3F}y#)ZVj##Y8tiI|XC_u|0eNzuevv$%Hg#2@!_@-i>HzP&`D5O*d#ajrZikY4cvBZzx!T|XCQzw+}6n4 z+_m*`Dd6?P;x;yo_~g!bVeGB@&T?5{&zzut-BjRS`gvbDtmXkSYgg*mOfgwu=Cser z{)NtGccM>x|7>DWNB0p{RaR5~cvm~T1#0y-HXjk^6w;DGn<&<5C{oXOf75v;#e?I42)pITQdg1=|(lpp5&o%Ts=&hPuKaIDIWp)^y6Ecb}>Nj2;7$`Py9=J9aN6K2 ztL3%BIrtDIzirh0LxRLXHLU%?f4Q;LVr3sG*Ic~8<7q$m#hIV|9!llbqYFAq@;@CG znW}S|Am$K@!(NF{VY>=)aw;7+NepsT5nWO1=vn#fkUT zlUkbNquh}~6P40`biI{}R{^E(FmDfT?b>76@g7qk+wi*J#UTqLIi+O1+p8VTiUDik zki}t-t8vB$17e)Z-#JocXZsCPjWF||39jZfOt?e@s{QT7zGiDN&`hiZhn%;A z-Eanni%u%w!t10%I12xRFrbQV;J8bzJLqP+nCa3l4yQX3Z&W3Qh!BKBMnsmeTyn{l zmZk2+jANJ(c5u=QTsU6u@8jm(+{54#K57!NRn&w0-jo zD&f5|X>?~d=MlKA48>}q9wSXfSUpe1BF|;`qQm@)b@(Yx+tlvE#W&Tel=-3^Q*cv{ z-{Xu;BD;~+0x>$|c%RHNaP^3~qVm~w5iV+Dz}ffglnBUJoWGCSE+-o?dH`K zJ=!j^e;zZuDQr%6wMZ0dDrFNfS3I530^4p_dbP#Gvr_L^Yq;3#EoPWP8)pm~Z&(`i zOLY6Vvzxv44Y+`@*j$Rkq*R9NJY8nric)Kd_wq+z25nb(qRhb&Zu0>8N~+_8%)A)a zQymovN3mt6V%8q-VC-s}z69?jAQUcVg*#sY#oC`LZ$G6tr6q&l(TM+=Ew&3zMa1+1tHHYsFm9oj>0|lY(f~4(C$}K=A)OK!Y~&h^ zo?D~h?jh5y&3(=HI3BZ+T;ffXUm{jxuwGXKq5I09LrokbVz61E8T>sOMnBMg=b> zvYF#0@A_Jo@3xXQA%3xik!H)<^UzQ+I< zwYQ;hiM?Z~leC(8DKZbg0pG?JzXrvAHFOhUeAhwE#a@n}^ip_y;2+AlbuYjN$4I=)vQWKxWS z*z!95ptpRTbw!WO*tFDUdinMGbZdUZj@pvq4PFKIGh#AG``w9JF_*GL)Q#g|Ks|v^ z3p126$nPclFe@q&c9wMhn+IQp1vO90{XbeP3& zM#pZr6Q^3SzQuzQZ~mh15++CDsc%yrB%2F3LQ6VB>HW!|VvK5Lv@>(qnv86Wwy=c-$*`yH=pj`{5^7Jg zGP?hUYUXmv9I}8;z=~!eLHi!S(`#8257`>Yem2nOzlGH}H(2`c^N{TP)?$6?w^+&! zGwogO9l)nML2l;|d2?=alO)rbLJIWxOtWa>Eu9VK><}LlVqvB~X?M=#5X)!dK)ys0 ze?o~Y4UGW{I7J>PXec5efc zCD^-ws-vjSXB|N9zz^ag1XzGUcV+PMx16=WB+yE#!OyvlXt;@)lto6Vf$Oz~r#CYA z{tL@g$li{@@uOG;v!!3%bw7m%`MMHa&?Jlt#Na>xX)1)`V8@F_Ay$NEazq#qeNAw& zhg648M%(_r=1C(!LKFYV8;Py&NwXtOT9}P}b!0Ns1?jlIyyOon<5iu2WVqZe%QwF# zN(RJDNPbF$DZkR5iC|(!c*#dVo5$)_dY%Z9q$En@SJ`S4*^d;2uYo^s6TMc5ZQ*fG zYa@1XI6*)<;x(i4eAbG61S|Oi5^Uj=rnnVt0B{%xBm)iAPnCvXXH8=&=h8gT3B5GS zxX0Gi`;ZDY4B3$yiw?U@sueCT+SH@u^DTV3{XkbgGddFVwa;Rp0?4BYw$4vtp!`Ay zXI)XnldeJr+?{ac_DNk?&&Glje?li3( z)}S?>Rm*LVZhI>kcxZ1qYjqT!1Fo^>#5YpE-qDajnns*5&7Lw%2jvUP5xl5x%F;$~ zu)@jM;m4)Z7UhF*5uVdF=OszQ0nK}Lq{dyi9F`xGWTRC#dj!GZI1-N_e!Xi}A$3aQ z2!*{zigWORP(uX}9KM99Xxwttg>^v?en(TVQO~;4woyZ_P$|=^hS_*U8;~pp*3*2# zhXM7YN~j4=CWdT0SY)y1fMQS@l`9lDE5NR)(A)8nlvj_Rf1|6i4oHsd7gm4XzacQ2 zq!=C2OC*V;D9SAGF~Lv&uO^&^bIY7~8)1P%38 zmg$OCkBgL}WwyhC7`C1!e3({krTtl=_3N`Ah3uZ;2s0E*PjUmvm<6#RsBN*l)%{wr7P<(t)p!eS|)h-S9V0lzwO zWAyYtG=-vGA>KiE2g_Q$|yL(A4 zM1TGwM;wRMGUG$wikPC_^Bw-o@MIxqkGPM2OdfjZX}bqbDNM&=w5WO+=s zvlA&^2BQacL0pQBfOilHm!z*$CC;bI?qQH{<@v3>^uD*#cY7iIU5$&tgo(OOU%s+q ztmu9~bMt$img)23unsyDisy=+z@wvbvDM_c$E*NK|I?(noFfQyl0OsqHr$ zwD7zN0PJDZj5Qa~wGKn3AC$i8@JpPipfocjMC``Ts2LJ`)t@^7FU9tqMuc&&bY8q^ zdPk(~IAGyWpteN`8hT*>Aaf2)2ENwrKgPfem!u*OP+R=Uhj209W&t7&Vr9}hY&o{W z3%`movr<_UQ}(VtT}MMYSc?g&_u&^Zev8~!r4z77+X3R^6HxH&AvCAXm(dzXhf z1(AGoZUVdzHhRnJSv_Vg`|kOP1U@6jiZuvC**L90+b_3}PXiRrieC?ChZAJ|VjRMR zu0JeXpqS12zF$IY6&22eqSe_O5W5Yxfn5p)+@?=rr0!WhjA8BopRo^G9MJk{1+8Uf zB?<7&fkZKO{}!z~sc3DCjFVB>^tq8iGS(LN2XT&-!F?(nO+6bwfq9` z4$in)RxN;ul)7;w0^isjVND?3M%{V|?p>mhl^yfOCz|VAo2h+|hz!c(t8$j<2IAY>4AO>KINtu00b}Tuk@<99?^S(`}>vW8m&Hm5m}! zdBPeWU#E?Z1G$|d>stTsSCV4{-fO;e^f^PT;n2qFY7P!IL)X^vGOx?&Maz(TAv(sY z_oD}8{^w;khKuJn`i2a=vG3g528WsM#}?x8Wx64P?Q91+{Nu8ZCaDl+ zwE^pq?KEU5s4w6v_OiWBYS!4ytobMtIXMXK2bw_HtWPEIvjG7^%~ zGsKD6F;+0z`#&dGWUk_JPuA7PTO)DIktgj{Cg#wX{_HS>m zk5{`nTJKin%=yZdgI{rUd!Y6u3Iul>N6!{*ZEclHQz4QQl@-RDa!Ur+*sB6m%D%^I zs8oE`Z#feEZ_ao7Od7zI<44qooVAd(Zx~P0l9E=L`0WOXQ$X{MK4yr+RANFBlM*J) zjHYWxJs!2F_V(dYtHjXo@Knt2k@)Etn+$Bvtq~IcimSqcf)amH9y7Ms?F7+?erGxR z*FXxj*8?; z{QNu~?);(>5+c$-mNzBl^)3|OdU~E28KrB{vS8CnlJi)$VK1z7b%vpP^N;38g=u68 zZ;#(8q;eS}ahud>Ta$q-P^9UjMMWAr+=wSyS_3Y-ehqxk&zVxOw`WoRD5zpKakf1X zPTqd~Iq25sz7vP%C~~~)3Oys??h73+Bn(T!=fG=WBr7-gjq{f;MJFK}{)~Nbe8c6X zB~VKVA5uSLgQ^Ibkn2LtgW1Ke+K|0;o?#xsk?Rm)*N>XNc-npVo50u;F){S&o|d-v zN65B;r#LU02-w+=R7P`}YwVL+kkRS0mo1sDkF})ypCsKeDXqAu$BE`bHZbcB#(OGC zwwzE=QGb-`v3@2ybPGg7#zDm2+pezXI&oBxj>d_ji+$5{0SDZpG=p45^RKVNZCVcf zTO4eOmDSY3#`2Y7ZNZRGygczFxk%hjM2^qP=`}%MQIpkFbR4A+re=;L`?yxFbmhq_ zXJ@OmZ_!Y1NIrJJ#a?Js)RPpq*ShBBI74Zm$jQkUE1;tvW%`^9!fs2FGc|Tt2;cPd z^hhhXw@^q2HY$ryE%Vx}_r_Ph>_lSd#^Fg$ON;fa4Y|2I#G9_NBr_J>taF|oQU9(( z>BIHO?{xDy=`J@ncX%qdsW?aM^X>?oFhsC*&U~>^u$15y_1sisg!`M_(9Svza_IVJ2LjBCgd(jKQ$Sp zpn2rSWvG9n@8a$41&IJqluBF2j9U9%SJViP?3~NI`Guc4;uM}*hAf_%lEMczn?pPTs$9VTICTFJH9nWp=1<<2Yxp$282mwu-*P z?1{ET)U7}x*ejw;U5?5O1grgw4Lc6q%n2_a!uYw;TzV$Q+X$X>FM_U4%-YpepVs&l#j03CZ?#x0+y7E(Xo@8WVnmt(jN^yxjTkksW)k_+$ zQi8)Hjy}G!Mo@fWSZVUqBIgK|LqcMnP^$!+NAq$>_-CJ#D%x~S?4sS(DP+-UDvdF$ zd~20i5$$rZ;V?q5aYk$Xs=-a{)9S})?YBkNkfg#33D~a+sovgRj)%{}je%uZ0~r9< z%wJ+7560oz6lM=%y2qu7vvP)LmxzZlm3k~gTn6dfy$S&&Yapm>$vvfkAf#Z-g=#BgIpi4E_czB;_qHSjojs*iT!&|oCnfU($^4r4L&B?j z9nKG8y}K)eEB=d7+B-~PRH}2E-cH5Ia6Iaq={}8wO2;x-^~+Mlc=ST;Fm<6^$G zA_c^#>wheu5ENNt4@qK$z3$!G`#qMww>g}Njbm(lz2{-DnB z@sImh(3_u5FW#l3KcNWpW=BKN=2y)7vKg|k@2E?oZcn^uC{HfTyS+S=YXC3G6C2K) zmP%ykgOv6;Hs%}L&YsIeIL{B`!%jG5<^Q%|E z3$4~9kUq6YT$*nqWNnVBd$vwLD>70Vch6WHAnqB`A)dgu#&oh@Sg+;_e&d^=xxu9d zyc1hNw?=bgI|sNzb|y=kT@CE{!4p@`ZETbg^F&+@zax&Z}r4BM00gc$TnQ{mK1iCYsH$`gr=qt=co_+?gsu@1?#5? zqf%)5q|&T**@G+fWOu8lJPqxl+`BJ$h`mK!hx%9|K{pkKewj^xCm^}0eekeW0 zyG|TJdJIn3AmfiKgk0CVAZ5e9ClU{Z7IyYL#$_Y@tr^I; zf`gdL5`>xiKP<8+E(jiYk6gw-?G^@Ev}vk@g7AN=;|BJji7+yD84%bZCiA!CpD6t+ zCbgfb|7qtC(1-0(sOrl9WAaA;g_*N(vfMvy0fdjF5 Date: Mon, 14 Oct 2024 16:46:03 +0900 Subject: [PATCH 04/10] refactor: baseurl & test post --- _config.yml | 2 +- _data/contact.yml | 6 +++--- _data/share.yml | 18 +++++++++--------- _posts/2019-08-08-text-and-typography.md | 1 + _posts/2019-08-08-write-a-new-post.md | 1 + _posts/2019-08-09-getting-started.md | 1 + _posts/2019-08-11-customize-the-favicon.md | 1 + _posts/2024-10-14-test-post.md | 10 +++++----- _posts/image.png => postImg/post-test.png | Bin 9 files changed, 22 insertions(+), 18 deletions(-) rename _posts/image.png => postImg/post-test.png (100%) diff --git a/_config.yml b/_config.yml index 7a9b11a37d7..93d96d8b3b9 100644 --- a/_config.yml +++ b/_config.yml @@ -150,7 +150,7 @@ pwa: paginate: 10 # The base URL of your site -baseurl: "" +baseurl: "https://jinhyung-r.github.io/horoong.github.io/" # ------------ The following options are not recommended to be modified ------------------ diff --git a/_data/contact.yml b/_data/contact.yml index ed40acb7e97..54721a92900 100644 --- a/_data/contact.yml +++ b/_data/contact.yml @@ -10,9 +10,9 @@ icon: "fas fa-envelope" noblank: true # open link in current tab -- type: rss - icon: "fas fa-rss" - noblank: true +# - type: rss +# icon: "fas fa-rss" +# noblank: true # Uncomment and complete the url below to enable more contact options # # - type: mastodon diff --git a/_data/share.yml b/_data/share.yml index 6f9756804f5..fcf7dbe394f 100644 --- a/_data/share.yml +++ b/_data/share.yml @@ -2,17 +2,17 @@ # Icons from platforms: - - type: Twitter - icon: "fa-brands fa-square-x-twitter" - link: "https://twitter.com/intent/tweet?text=TITLE&url=URL" + # - type: Twitter + # icon: "fa-brands fa-square-x-twitter" + # link: "https://twitter.com/intent/tweet?text=TITLE&url=URL" - - type: Facebook - icon: "fab fa-facebook-square" - link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL" + # - type: Facebook + # icon: "fab fa-facebook-square" + # link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL" - - type: Telegram - icon: "fab fa-telegram" - link: "https://t.me/share/url?url=URL&text=TITLE" + # - type: Telegram + # icon: "fab fa-telegram" + # link: "https://t.me/share/url?url=URL&text=TITLE" # Uncomment below if you need to. # diff --git a/_posts/2019-08-08-text-and-typography.md b/_posts/2019-08-08-text-and-typography.md index a8db26a00ff..face6512557 100644 --- a/_posts/2019-08-08-text-and-typography.md +++ b/_posts/2019-08-08-text-and-typography.md @@ -12,6 +12,7 @@ image: path: /commons/devices-mockup.png lqip: data:image/webp;base64,UklGRpoAAABXRUJQVlA4WAoAAAAQAAAADwAABwAAQUxQSDIAAAARL0AmbZurmr57yyIiqE8oiG0bejIYEQTgqiDA9vqnsUSI6H+oAERp2HZ65qP/VIAWAFZQOCBCAAAA8AEAnQEqEAAIAAVAfCWkAALp8sF8rgRgAP7o9FDvMCkMde9PK7euH5M1m6VWoDXf2FkP3BqV0ZYbO6NA/VFIAAAA alt: Responsive rendering of Chirpy theme on multiple devices. +published: False # 공개/비공개 --- ## Headings diff --git a/_posts/2019-08-08-write-a-new-post.md b/_posts/2019-08-08-write-a-new-post.md index 69eaf34acbe..0f1c6f2351a 100644 --- a/_posts/2019-08-08-write-a-new-post.md +++ b/_posts/2019-08-08-write-a-new-post.md @@ -5,6 +5,7 @@ date: 2019-08-08 14:10:00 +0800 categories: [Blogging, Tutorial] tags: [writing] render_with_liquid: false +published: False # 공개/비공개 --- This tutorial will guide you how to write a post in the _Chirpy_ template, and it's worth reading even if you've used Jekyll before, as many features require specific variables to be set. diff --git a/_posts/2019-08-09-getting-started.md b/_posts/2019-08-09-getting-started.md index 3b41a3cabe4..414ebc5bb8b 100644 --- a/_posts/2019-08-09-getting-started.md +++ b/_posts/2019-08-09-getting-started.md @@ -9,6 +9,7 @@ categories: [Blogging, Tutorial] tags: [getting started] pin: true media_subpath: '/posts/20180809' +published: False # 공개/비공개 --- ## Creating a Site Repository diff --git a/_posts/2019-08-11-customize-the-favicon.md b/_posts/2019-08-11-customize-the-favicon.md index a3278fa90eb..97aba9ebc85 100644 --- a/_posts/2019-08-11-customize-the-favicon.md +++ b/_posts/2019-08-11-customize-the-favicon.md @@ -4,6 +4,7 @@ author: cotes date: 2019-08-11 00:34:00 +0800 categories: [Blogging, Tutorial] tags: [favicon] +published: False # 공개/비공개 --- The [favicons](https://www.favicon-generator.org/about/) of [**Chirpy**](https://github.com/cotes2020/jekyll-theme-chirpy/) are placed in the directory `assets/img/favicons/`{: .filepath}. You may want to replace them with your own. The following sections will guide you to create and replace the default favicons. diff --git a/_posts/2024-10-14-test-post.md b/_posts/2024-10-14-test-post.md index e338913e7fc..290f06acb39 100644 --- a/_posts/2024-10-14-test-post.md +++ b/_posts/2024-10-14-test-post.md @@ -2,8 +2,8 @@ layout: post title: "test post" date: 2024-10-14 -author: horoong -categories: [blog, tech, node] +author: "horoong" +categories: [blog, node] tags: [backend, development, 웹개발] # description: "설명 추가하기" # image: 대표이지미지 경로(/assets/imgages/000. @@ -30,9 +30,9 @@ published: true # 공개/비공개 2. 순서 목록 2 -* link는 [네이버](www.naver.com) 텍스트(링크) 순 +* link는 [네이버](https://www.naver.com/) 텍스트(링크) 순 -* ![alt text](image.png) +* ![alt text]({{ site.baseurl }}/postImg/post-test.png) * 이미지는 vscode의 Paste Image사용하는 법도 좋아 보인다. [Paste Image vscode](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image) @@ -48,5 +48,5 @@ published: true # 공개/비공개 * HTML 사용하기
-

" background-color: grey, padding: 30px 인 html 코드 사용하기

+

background-color: grey, padding: 30px 인 html 코드 사용하기

diff --git a/_posts/image.png b/postImg/post-test.png similarity index 100% rename from _posts/image.png rename to postImg/post-test.png From 5676bd0a55d3a6d792f0923f373957f9d75b5344 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 18 Oct 2024 12:02:05 +0900 Subject: [PATCH 05/10] feat: published false --- _posts/2024-10-14-test-post.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/2024-10-14-test-post.md b/_posts/2024-10-14-test-post.md index 290f06acb39..a0925d8636b 100644 --- a/_posts/2024-10-14-test-post.md +++ b/_posts/2024-10-14-test-post.md @@ -9,7 +9,7 @@ tags: [backend, development, 웹개발] # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ comments: true # 댓글 가능 유무 -published: true # 공개/비공개 +published: false # 공개/비공개 --- ## 포스트 테스트 및 마크다운 문법 정리 @@ -32,7 +32,7 @@ published: true # 공개/비공개 * link는 [네이버](https://www.naver.com/) 텍스트(링크) 순 -* ![alt text]({{ site.baseurl }}/postImg/post-test.png) +* 이미지 첨부하기 ![alt text]({{ site.baseurl }}/postImg/post-test.png) * 이미지는 vscode의 Paste Image사용하는 법도 좋아 보인다. [Paste Image vscode](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image) From 16cb5905cb7de39dc60c9f850c76da876ed7f888 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 8 Nov 2024 17:28:41 +0900 Subject: [PATCH 06/10] feat: post --- .DS_Store | Bin 0 -> 8196 bytes _config.yml | 3 +- ...4\352\267\270-\352\260\234\354\204\244.md" | 63 +++ ...0\353\262\225-\354\240\225\353\246\254.md" | 427 ++++++++++++++++++ ...5\355\212\270-\354\240\225\353\246\254.md" | 91 ++++ ...5-\352\260\200\354\235\264\353\223\234.md" | 170 +++++++ ...024-10-22-EMP-\354\240\225\353\246\254.md" | 221 +++++++++ ...-\353\260\217-\355\233\204\352\270\260.md" | 205 +++++++++ 8 files changed, 1179 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 "_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" create mode 100644 "_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" create mode 100644 "_posts/2024-10-18-\355\203\200\354\236\205\354\212\244\355\201\254\353\246\275\355\212\270-\354\240\225\353\246\254.md" create mode 100644 "_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" create mode 100644 "_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" create mode 100644 "_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..193efd8a585a56326f1931e02431db8060304c41 GIT binary patch literal 8196 zcmeHMTWl0n7(U;$v@=sK)6$mWWa&b|U@5Tn!X4S(xP)SB?=6>Qw=>d_=}g&~?EcH@Zf`z=mSP$d@wN*B%p~e`e2NY8edHGKXYb@EbwCDB{C;D=Rf~B z|9@uw|9t*@K)LbX_}B=%+KomYGj!)t#>6r!B|K1`3v8lE|SE%Q4)1hnsT@FVGzj z6N(}$DXngHwq;XWQ@pKh%Un}@c58E@Dc;($X>LxDYZ^9g?@t}KryTbwVFtoa0b5jL z*4bj4Y;UGh+)0$w7Hqm6+9WG#g+4r@j*VIqt}|erHdERXkBr(!Y+u%#A!9}+Tst@A zcqy%NB5hCP?6hyT+cp>WMt$?7&wJyZoAo;b!IY-uJhR^`dB8RJibgP_*XwI!`5+(f%$n4SVRfzEsAy?<&?A$@66@8CismVU$7ySYYO~rZ zYlbppr!%H4hBm8PWo^GQG9xS(gFDoR!gH4H+{TFg@_p!e4&*(sCUa(fFdTm#gnG)6fv>x-Rjp2AEnp8|8|-v3;zTg1u_3~>dGc;CrIm98 z%U8K{eO!%c3kdmwUA>0bGD5vzA83rlG>L*uup2hURIP+UNeOgY8i_^7Y~G@(S}6sU znA@?FSjOXA@a=phnaW>=>IL>LyTmTD&k3sEvhUar>{l?9VIe_t1>ywH)mTIDOrRMp zXvI$KLOVJLtUY)beRu@@IEceY;V9AsRU1=qkjE*4>*EC2Gk6kbaSl)8JYK|0cp0zY zbzHzZ0&+KjxUT>~LGi(@e8l~o9^hv`l{%jPci;W~KM;zV$ODlF{+}K|Y1cp({|Qj| zc~ER7&$Z)Jk5c7@%gqZKs8AE6<3xjWoaoIz45=R{QLd8=>AavcLggR72smv<=Rb?i K{{VdVaPtT9mkIX( literal 0 HcmV?d00001 diff --git a/_config.yml b/_config.yml index 93d96d8b3b9..e9a45dcf20f 100644 --- a/_config.yml +++ b/_config.yml @@ -150,7 +150,8 @@ pwa: paginate: 10 # The base URL of your site -baseurl: "https://jinhyung-r.github.io/horoong.github.io/" +# baseurl: "https://jinhyung-r.github.io/horoong.github.io/" +baseurl: "" # ------------ The following options are not recommended to be modified ------------------ diff --git "a/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" "b/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" new file mode 100644 index 00000000000..42eea5278b0 --- /dev/null +++ "b/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" @@ -0,0 +1,63 @@ +--- +layout: post +title: "Github Pages 활용한 블로그 도입" +date: 2024-10-13 +author: "horoong" +categories: [blog, Github Pages] +tags: [blog, jekyll] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 +--- + +# 블로그 선택 + +부트캠프를 진행하면서 블로그 포스팅을 하면 도움이 된다는 이야기를 아주 많이 들었다. + +필자도 당연하게 정보를 찾으면 여러 블로그에서 정보를 얻는 것은 마찬가지 였으나 노션에 따로 정리해서 내가 필요할 때 내가 정리해 둔 글을 보면되지 왜 남에게 공개하면서 정보를 저장해야하는가? 라는 의문이 있었다. 그러나 다른 참가자분들과 얘기를 나눠보면서 느꼇던 점이 있어 시작하게 되었으니, 다들 많이들 을어본 이야기이지만 유명한 말이 있다. + + `본인만 아는 지식은 지식이 아니며 다른 사람들에게 설명 가능해야 온전한 지식이 된다.` + +역시 괜히 있는 말이 아니다. 최대한 올바르게 진행하며, 남들과 공유하여 나에게 부족한 부분을 얻는 것을 목표로 진행하려한다. + + +그렇게 노션에만 정리를 진행해오다가 어떤 블로그를 고를지 고민을 하던 중에 Github Pages로 블로그를 적는 글을 몇 번 본 적이 있어 3가지 정도를 추리고 비교해보았다. + +--- + +- Tistory + + * 티스토리 역시 많이 사용하는데 현재 카카오에서 운영하며 개발쪽으로만 치우쳐진 기능도 아니고 일반적인 사용자도 많이 사용한다. 블로그를 쉽게 운영할 수 있는 좋은 선택지라 생각한다. + +- velog + * velog는 구글링을 통해서 개발 지식들을 찾을 때에 가장 많은 개발에 관련된 블로그를 찾을 수 있었다. 미니멀한 디자인도 가지고 있고 시리즈 기능을 가지고 있어서 어느 주제를 정해서 길게 여러 글로 정리하기에 좋은 선택지라 생각한다. + +- Github Pages + * 다른 블로그들과 다른 점이 많다. Github에서 무료로 제공하는 ***정적 웹 호스팅 서비스***이다. + + * Jekyll과 같은 정적 사이트 생성기를 활용한 사이트들을 만들고, 다만 웹에서 글쓰기는 어렵다. 대신에 ***markdown editor***를 활용해서 포스트를 작성한다. + + * 마크다운을 잘 활용한다는 것과 에디터에서 작성한다는 점. + vscode에서 작성해서 preview로 확인하고 호스팅하면 된다니 아주 맘에 들었다.(필자는 브라우저로 이동해서 글을 쓰는 블로그보다는 이 점이 아주 맘에 들었다. 여러 과정이 더 필요하지만 추가로 후술 할 것이다.) + + +3가지 블로그들을 찾아보고 도입에서 고민된 점들은 +* Tistory는 범용적으로는 활용이 가능하나 마크다운 글쓰기가 크게 맘에 들지 않았다. +* velog는 개발 관련 지식들이 너무 많은데 맞는 지식도 있고 아닌 지식도 있다.(사실 이 부분은 개인적인 견해다. 좋은 정보를 찾는 것도 개발자의 능력이니까) +* ***가장 중요했던 Github pages를 선택한 점*** + * 벡엔드 개발자를 목표로 하고 있는데 프로젝트를 하면서 프론트 포지션을 고른 분들과 얘기를 해보면 모르는 부분이 많다. 이 부분을 채우기 위해서 간단한 프론트 지식(HTML, CSS)을 보완하고자 Github Pages를 선택했다. + +현재까지론 이미지 삽입 기능이 다른 블로그와 확실히 달라 어렵긴하지만 도입하는데에 어렵진 않을 것 같다. + +다음 글은 Github Pages와 Jekyll을 어떻게 도입 했는지 정리하려 한다. + +**이미지 첨부와 함께** + + + + + + + diff --git "a/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" "b/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" new file mode 100644 index 00000000000..719bfa14f1b --- /dev/null +++ "b/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" @@ -0,0 +1,427 @@ +--- +layout: post +title: "마크다운 문법 정리" +date: 2024-10-13 +author: "horoong" +categories: [blog, Github Pages] +tags: [blog, jekyll] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 +--- + +[공통] 마크다운 markdown 작성법 +====================== + +> 영어지만, 조금 더 상세하게 마크다운 사용법을 안내하고 있는 +> "Markdown Guide (https://www.markdownguide.org/)" 를 보시는 것을 추천합니다. ^^ + +> 아, 그리고 마크다운만으로 표현이 부족하다고 느끼신다면, HTML 태그를 활용하시는 것도 좋습니다. + + +# 1. 마크다운에 관하여 +## 1.1. 마크다운이란? +[**Markdown**](https://www.markdownguide.org/getting-started/)은 텍스트 기반의 마크업언어로 2004년 존그루버에 의해 만들어졌으며 쉽게 쓰고 읽을 수 있으며 HTML로 변환이 가능하다. 특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 컨텐츠를 작성하고 보다 직관적으로 인식할 수 있다. +마크다운이 최근 각광받기 시작한 이유는 깃헙([https://github.com](https://github.com)) 덕분이다. 깃헙의 저장소Repository에 관한 정보를 기록하는 README.md는 깃헙을 사용하는 사람이라면 누구나 가장 먼저 접하게 되는 마크다운 문서였다. 마크다운을 통해서 설치방법, 소스코드 설명, 이슈 등을 간단하게 기록하고 가독성을 높일 수 있다는 강점이 부각되면서 점점 여러 곳으로 퍼져가게 된다. + +## 1.2. 마크다운의 장-단점 +### 1.2.1. 장점 + 1. 간결하다. + 2. 별도의 도구없이 작성가능하다. + 3. 다양한 형태로 변환이 가능하다. + 4. 텍스트(Text)로 저장되기 때문에 용량이 적어 보관이 용이하다. + 5. 텍스트파일이기 때문에 버전관리시스템을 이용하여 변경이력을 관리할 수 있다. + 6. 지원하는 프로그램과 플랫폼이 다양하다. + +### 1.2.2. 단점 + 1. 표준이 없다. + 2. 표준이 없기 때문에 도구에 따라서 변환방식이나 생성물이 다르다. + 3. 모든 HTML 마크업을 대신하지 못한다. + +**** +# 2. 마크다운 사용법(문법) +## 2.1. 헤더Headers +* 큰제목: 문서 제목 + ``` + This is an H1 + ============= + ``` + This is an H1 + ============= + +* 작은제목: 문서 부제목 + ``` + This is an H2 + ------------- + ``` + This is an H2 + ------------- + +* 글머리: 1~6까지만 지원 +``` +# This is a H1 +## This is a H2 +### This is a H3 +#### This is a H4 +##### This is a H5 +###### This is a H6 +``` +# This is a H1 +## This is a H2 +### This is a H3 +#### This is a H4 +##### This is a H5 +###### This is a H6 +####### This is a H7(지원하지 않음) + +## 2.2. BlockQuote +이메일에서 사용하는 ```>``` 블럭인용문자를 이용한다. +``` +> This is a first blockqute. +> > This is a second blockqute. +> > > This is a third blockqute. +``` +> This is a first blockqute. +> > This is a second blockqute. +> > > This is a third blockqute. + +이 안에서는 다른 마크다운 요소를 포함할 수 있다. +> ### This is a H3 +> * List +> ``` +> code +> ``` + +## 2.3. 목록 +### ● 순서있는 목록(번호) +순서있는 목록은 숫자와 점을 사용한다. +``` +1. 첫번째 +2. 두번째 +3. 세번째 +``` +1. 첫번째 +2. 두번째 +3. 세번째 + +**현재까지는 어떤 번호를 입력해도 순서는 내림차순으로 정의된다.** +``` +1. 첫번째 +3. 세번째 +2. 두번째 +``` +1. 첫번째 +3. 세번째 +2. 두번째 + +딱히 개선될 것 같지는 않다. 존 그루버가 신경안쓰고 있다고... + +### ● 순서없는 목록(글머리 기호: `*`, `+`, `-` 지원) +``` +* 빨강 + * 녹색 + * 파랑 + ++ 빨강 + + 녹색 + + 파랑 + +- 빨강 + - 녹색 + - 파랑 +``` +* 빨강 + * 녹색 + * 파랑 + ++ 빨강 + + 녹색 + + 파랑 + +- 빨강 + - 녹색 + - 파랑 + +혼합해서 사용하는 것도 가능하다(내가 선호하는 방식) + +``` +* 1단계 + - 2단계 + + 3단계 + + 4단계 +``` + +* 1단계 + - 2단계 + + 3단계 + + 4단계 + +## 2.4. 코드 +4개의 공백 또는 하나의 탭으로 들여쓰기를 만나면 변환되기 시작하여 들여쓰지 않은 행을 만날때까지 변환이 계속된다. + +### 2.4.1. 들여쓰기 +``` +This is a normal paragraph: + + This is a code block. + +end code block. +``` + +실제로 적용해보면, + +적용예: + +***** +This is a normal paragraph: + + This is a code block. + +end code block. +***** + +> 한줄 띄어쓰지 않으면 인식이 제대로 안되는 문제가 발생합니다. + +``` +This is a normal paragraph: + This is a code block. +end code block. +``` + +적용예: + +***** +This is a normal paragraph: + This is a code block. +end code block. +***** + +### 2.4.1. 코드블럭 +코드블럭은 다음과 같이 2가지 방식을 사용할 수 있습니다: + +* `
{code}
` 이용방식 + +``` +
+
+public class BootSpringBootApplication {
+  public static void main(String[] args) {
+    System.out.println("Hello, Honeymon");
+  }
+
+}
+
+
+``` + +
+
+public class BootSpringBootApplication {
+  public static void main(String[] args) {
+    System.out.println("Hello, Honeymon");
+  }
+}
+
+
+ +* 코드블럭코드("\```") 을 이용하는 방법 + +
+
+```
+public class BootSpringBootApplication {
+  public static void main(String[] args) {
+    System.out.println("Hello, Honeymon");
+  }
+}
+```
+
+
+ +``` +public class BootSpringBootApplication { + public static void main(String[] args) { + System.out.println("Hello, Honeymon"); + } +} +``` + +**깃헙**에서는 코드블럭코드("\```") 시작점에 사용하는 언어를 선언하여 [문법강조(Syntax highlighting)](https://docs.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks#syntax-highlighting)이 가능하다. + +
+
+```java
+public class BootSpringBootApplication {
+  public static void main(String[] args) {
+    System.out.println("Hello, Honeymon");
+  }
+}
+```
+
+
+ +```java +public class BootSpringBootApplication { + public static void main(String[] args) { + System.out.println("Hello, Honeymon"); + } +} +``` + + +## 2.5. 수평선 ```
``` +아래 줄은 모두 수평선을 만든다. 마크다운 문서를 미리보기로 출력할 때 *페이지 나누기* 용도로 많이 사용한다. + +``` +* * * + +*** + +***** + +- - - + +--------------------------------------- +``` + +* 적용예 +* * * + +*** + +***** + +- - - + +--------------------------------------- + + +## 2.6. 링크 +* 참조링크 + +``` +[link keyword][id] + +[id]: URL "Optional Title here" + +// code +Link: [Google][googlelink] + +[googlelink]: https://google.com "Go google" +``` + +Link: [Google][googlelink] + +[googlelink]: https://google.com "Go google" + +* 외부링크 +``` +사용문법: [Title](link) +적용예: [Google](https://google.com, "google link") +``` +Link: [Google](https://google.com, "google link") + +* 자동연결 +``` +일반적인 URL 혹은 이메일주소인 경우 적절한 형식으로 링크를 형성한다. + +* 외부링크: +* 이메일링크: +``` + +* 외부링크: +* 이메일링크: + +## 2.7. 강조 +``` +*single asterisks* +_single underscores_ +**double asterisks** +__double underscores__ +~~cancelline~~ +``` + +* *single asterisks* +* _single underscores_ +* **double asterisks** +* __double underscores__ +* ~~cancelline~~ + +> ```문장 중간에 사용할 경우에는 **띄어쓰기** 를 사용하는 것이 좋다.``` +> 문장 중간에 사용할 경우에는 띄어쓰기를 사용하는 것이 좋다. + + +## 2.8. 이미지 +``` +![Alt text](/path/to/img.jpg) +![Alt text](/path/to/img.jpg "Optional title") +``` +![석촌호수 러버덕](http://cfile6.uf.tistory.com/image/2426E646543C9B4532C7B0) +![석촌호수 러버덕](http://cfile6.uf.tistory.com/image/2426E646543C9B4532C7B0 "RubberDuck") + +사이즈 조절 기능은 없기 때문에 ``````를 이용한다. + +예 +``` +RubberDuck
+RubberDuck +``` + +RubberDuck
+RubberDuck + +## 2.9. 줄바꿈 +3칸 이상 띄어쓰기(` `)를 하면 줄이 바뀐다. + +``` +* 줄 바꿈을 하기 위해서는 문장 마지막에서 3칸이상을 띄어쓰기해야 한다. +이렇게 + +* 줄 바꿈을 하기 위해서는 문장 마지막에서 3칸이상을 띄어쓰기해야 한다.___\\ 띄어쓰기 +이렇게 +``` + +* 줄 바꿈을 하기 위해서는 문장 마지막에서 3칸이상을 띄어쓰기해야 한다. 이렇게 + +* 줄 바꿈을 하기 위해서는 문장 마지막에서 3칸이상을 띄어쓰기해야 한다. \ +이렇게 + + +**** +# 3. 마크다운 사용기 +## 3.1. 위지윅(WSYWIG) 에디터 +우리가 흔하게 접하는 웹에서 사용되는 에디터(네이버, 다음, 구글 등)이 대부분 위지윅 에디터에 속하며 기본적으로 HTML을 이용하여 스타일을 적용하여 문장을 꾸미는 형태를 취하게 된다. 그래서 하루패드와 같은 마크다운 에디터의 View 영역의 내용을 복사하여 붙여넣기를 하면 대체적으로 View영역에서 보이는 그대로 복사되는 편이다. 다만, 붙여넣기 이후에 문장들을 수정하려고 할 때 문제가 되는데, 이는 스타일이 포함된 태그가 수정과정에서 변형되면서 전체적인 영향을 끼치는 탓이다. 티스토리 블로그에서는 쉽지 않고... 워드프레스의 경우에는 마크다운으로 작성된 포스트를 HTML로 변환해주는 기능을 활용하는 것이 좋다. +결론은, **복사해서 붙여넣기하면 가급적이면 본문은 수정하지 않는 것이 좋다.** + +## 3.2. 깃헙Github, 비트버킷Bitbucket과 요비Yobi 등 +최근 유행하는 협업개발플랫폼의 경우에는 마크다운을 변환하는 컨버터 기능을 기본탑재하고 있기 때문에 마크다운 문법으로 작성한 텍스트를 그대로 복사해서 붙여넣거나 업로드하는 것만으로 마크다운의 적용이 가능하다. + +## 3.3. MS워드 적용 +View 영역의 항목을 그대로 붙여넣거나 HTML 내보내기 등으로 생성한 파일을 불러오는 형태로 사용가능하다. 적용한 헤더를 워드가 읽어드리면서 목차에 적용하기 때문에 이를 활용하면 목차까지도 손쉽게 적용이 가능해진다. + +***** + +# 4. 정리 +마크다운은 기본문법만 알고있다면 일반 텍스트편집기에서도 손쉽게 작성이 가능한 마크업언어다. 현재 다양한 도구와 플랫폼에서 지원하고 있기 때문에 더욱 손쉽게 스타일적용된 문서를 작성할 수 있어 점점 널리 사용되고 있다. + +> 마크다운을 이해하고 사용하면서 쉽고 빠르게 스타일문서를 작성해보세요. + +저는 Dropbox 프로를 구매해서 집-랩탑-스마트폰이 각각 연동을 시켜서 사용하고 있습니다. 드랍박스에 저장된 마크다운 문서는 Dropbox 웹서비스 상에서 제공하기 때문에 웹상에서 바로 열람할 수도 있어 링크를 걸어서 다른 사람과 공유하는 형식으로 사용하고 있다. +* 링크 예: [Markdown 설명](https://www.dropbox.com/s/mzp9tq4qtfjdlif/20141021_markdown_use_tip.md?dl=0) + +***** + +# P.S. +최근에는 여러 기능이 포함되며 무거워지는[Notion](https://www.notion.so/product) 을 대신해서 [옵시디언(Obsidian)](https://obsidian.md/) 조금씩 사용중이다. Notion 에서 작성한 문서는 Atom(), Visual Studio Code(), Notepad++()텍스트 편집기에 복붙(복사하고 붙여넣기)하면 마크다운문법으로 작성된 문장이 기입되고 이지윅 에디터를 제공하는 웹에디터에 붙여넣기 하면 거의 완벽한 형태로 복사된다. 그래서 애용중이다. + +## ○ 참고문서 +* [78 Tools for writing and previewing Markdown](http://mashable.com/2013/06/24/markdown-tools/) +* [John gruber 마크다운 번역](http://nolboo.github.io/blog/2013/09/07/john-gruber-markdown/) +* [깃허브 취향의 마크다운 번역](http://nolboo.github.io/blog/2014/03/25/github-flavored-markdown/) +* [허니몬의 마크다운 작성법](http://www.slideshare.net/ihoneymon/ss-40575068) +* Notion.so() +* Atom() +* Visual Studio Code() +* Notepad++() \ No newline at end of file diff --git "a/_posts/2024-10-18-\355\203\200\354\236\205\354\212\244\355\201\254\353\246\275\355\212\270-\354\240\225\353\246\254.md" "b/_posts/2024-10-18-\355\203\200\354\236\205\354\212\244\355\201\254\353\246\275\355\212\270-\354\240\225\353\246\254.md" new file mode 100644 index 00000000000..7e48485bcc3 --- /dev/null +++ "b/_posts/2024-10-18-\355\203\200\354\236\205\354\212\244\355\201\254\353\246\275\355\212\270-\354\240\225\353\246\254.md" @@ -0,0 +1,91 @@ +--- +layout: post +title: "TypeScript 도입" +date: 2024-10-19 +author: "horoong" +categories: [blog, TypeScript] +tags: [backend, development, 웹개발] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 +--- + +# Typescript 정리 + + +### 모든 언어에는 이미 타입이 존재한다 +--- + +파이썬에도 타입이 있고 javascript에도 타입이 있다, 물론 이전에 배웠던 c언어에도 존재하니 당연히 존재한다. + +두가지로 나눈다면 + +* 정적 타입(C, Java) +* 동적 타입(Python, JavaScript) + +이렇게 존재하니 확인해보자 + +간단한 예로 JavaScript의 `let`을 확인해보자 +```js +let a = "hello" +let b = 1234 +``` + + +***string***, ***number*** 등등.. 담기는 값에 따라 변경이 될 것이다. + +타입에 대한 문제는 간단한 함수인 JavaScript의 ``toUpperCase()``로 확인 할 수 있다. + +* a의 변수에서 `a.toUpperCase();` 이렇게 실행한다면 올바르게 동작할 것이다. +* b의 변수에서 `b.toUpperCase();` 이렇게 실행한다면 오류가 발생할 것이다. + +여기서의 문제를 확인해보자 +TypeError에러가 발생하지만, 문제는 실행은 되고 에러가 난다는 점인데 애초에 실행이 되지않게 Type을 정해놓는 방식으로 적용하면 실행도 막고 오류도 방지하는 좋은 방식이니 도입하지 않을 수가 없다. + +적용하는데 학습이라는 언덕을 넘어야하지만 말이다. + +타입스크립트를 도입해서 위의 let에 대한 코드를 변경해보자. +```ts +let a: string = "hello"; +let b: number = 1234; + +a.toUpperCase(); // 이 경우엔 당연하게 올바르게 동작할 것이고 +b.toUpperCase(); // 이 경우에는 동작은 하지 않겠지만, 미리 오류를 띄워 확인 가능 할 것이다. +``` +타입스크립트는 코드가 컴파일 되기 전에 타입 검사(Type Checking)를 수행 후 타입 검사가 성공한다면 자바스크립트로 변환하여 컴파일을 진행한다. + +#### 실행 순서 +1. TypeScript + +2. 추상 문법 트리 + +3. 타입 검사(성공 or 실패) + + 3.1 성공 시 JavaScript(타입 검사를 통과한 타입 오류 발생이 적은 코드) + + 3.2 실패 시 컴파일 종료 + +4. 추상 문법 트리 + +5. 바이트 코드 + +6. 실행 + +이러한 순서로 타입스크립트는 동작한다. + +마치면서, 타입 별로 정리를 한 시스템과 TypeScript까지 정리한다면 +* 정적 타입 시스템 + +* 동적 타입 시스템 + +* 점진적 타입 시스템 + +이렇게 정리할 수 있겟다. + +역시 단점으로는 코드를 작성하면서 타입을 명시해야 검사할 수 있으니 자연스러운 습관으로 들이는 노력을 하자. + + +--- +## diff --git "a/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" "b/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" new file mode 100644 index 00000000000..bc844d5e3d4 --- /dev/null +++ "b/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" @@ -0,0 +1,170 @@ +--- +layout: post +title: "AWS EC2와 RDS 프리티어로 설정하기" +date: 2024-11-07 +author: "horoong" +categories: [blog, AWS] +tags: [RDS, development, 웹개발] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: true # 댓글 가능 유무 +published: true # 공개/비공개 +--- + +# AWS EC2-RDS 프리티어 설정 가이드 + +이번 포스트는 AWS 프리티어를 활용해서 EC2와 RDS를 연결해서 사용하는 법을 정리해보려고한다. + +이전까지는 GCP에서 무료크레딧을 이용해서 진행했었는데 가지고있는 가용할 수 있는 자원을 다 소진해버려서 AWS환경을 사용해볼겸 진행해봤다. + +과금으로 유명한 AWS니 만큼 과금요소를 최대한 줄이고 조심해서 프리티어를 활용해보자. + +필자는 참고로 맥유저인데 예전부터 사용하던 FIG(현 Amazon Q, 큰 기업으로 가다니 뭔가 뿌듯하다?)를 사용하면서 AWS 계정을 만들어 둔 상태에서 진행했다. + +계정만 만들어 두고 VPC나 EC2등 서비스를 사용하지 않았으니 빈 계정과 마찬가지니 만약 참고한다면 이미 진행한 내용들은 넘기고 진행해도 좋을 것 같다. + + +## 목차 +1. [VPC 생성](#1-vpc-생성) +2. [보안 그룹 생성](#2-보안-그룹-생성) +3. [EC2 인스턴스 생성](#3-ec2-인스턴스-생성) +4. [RDS 데이터베이스 생성](#4-rds-데이터베이스-생성) +5. [데이터베이스 접속 테스트](#5-데이터베이스-접속-테스트) + +## 1. VPC 생성 +1. AWS 콘솔 → VPC 서비스 이동 +2. "VPC 생성" 클릭 +3. 설정: + - "VPC 등" 옵션 선택 (중요!) + - 이름 태그 자동 생성: my-vpc + - IPv4 CIDR 블록: 10.0.0.0/16 + - IPv6 CIDR 블록: 없음 + - 테넌시: 기본값 + - 가용 영역(AZ) 수: 1 + - 퍼블릭 서브넷 수: 1 + - 프라이빗 서브넷 수: 1 + - NAT 게이트웨이: 없음 + - VPC 엔드포인트: 없음 + +## 2. 보안 그룹 생성 +### EC2 보안 그룹 (ec2-sg) +1. EC2 서비스 → 보안 그룹 +2. "보안 그룹 생성" 클릭 +3. 설정: + - 보안 그룹 이름: ec2-sg(이름은 자유다) + - 설명: Security group for EC2 + - VPC: 방금 생성한 VPC 선택 +4. 인바운드 규칙: + - 유형: SSH + - 포트: 22 + - 소스: Anywhere (0.0.0.0/0) +5. 아웃바운드 규칙: 기본값 유지 + +### RDS 보안 그룹 (rds-sg) +1. "보안 그룹 생성" 클릭 +2. 설정: + - 보안 그룹 이름: rds-sg(여기도 이름은 자유다) + - 설명: Security group for RDS + - VPC: 방금 생성한 VPC 선택 +3. 인바운드 규칙: + - 유형: MySQL/Aurora + - 포트: 3306 + - 소스: ec2-sg 보안 그룹 ID 선택 +4. 아웃바운드 규칙: 기본값 유지 + +## 3. EC2 인스턴스 생성 +1. EC2 서비스에서 "인스턴스 시작" +2. 설정: + - 이름: my-ec2 + - AMI: Ubuntu Server + - 인스턴스 유형: t2.micro (프리티어) +3. 키 페어: + - 새 키 페어 생성 + - 이름: my-key + - 형식: .pem +4. 네트워크 설정: + - VPC: 생성한 VPC + - 서브넷: 퍼블릭 서브넷 + - 퍼블릭 IP 자동 할당: 활성화 + - 보안 그룹: ec2-sg +5. 스토리지: + - 크기: 30GB (프리티어 한도에 맞춰서 진행, 넘어가면 과금이니 주의하자) + - 유형: gp2 + +## 4. RDS 데이터베이스 생성 +1. RDS 서비스에서 "데이터베이스 생성" +2. 설정: + - 표준 생성 + - MySQL 8.0.28 + - 프리티어 템플릿 +3. 설정: + - DB 인스턴스 식별자: 이름은 마음대로 작성 + - 마스터 사용자 이름: admin + - 마스터 암호 설정 +4. 인스턴스 구성: + - db.t3.micro +5. 스토리지: + - 20GB (프리티어 한도) + - gp2 +6. 연결: + - VPC: 생성한 VPC + - 서브넷 그룹: Private 서브넷 + - 퍼블릭 액세스: 아니요 + - 보안 그룹: rds-sg +7. 추가 구성: + - 백업: 비활성화 + - 유지 관리: 기본값 + - 삭제 방지: 비활성화 + +## 5. 데이터베이스 접속 테스트 +1. EC2 접속: + ```zsh + chmod 400 my-key.pem + ssh -i .pem(파일) ubuntu@[EC2-퍼블릭-IP] + ``` + 필자는 이 부분에서 ec2-user로 알고있었는데 ubuntu로 AMI를 만들어서 ec2-user -> ubuntu가 되어버렸다. + + `ssh -i my-key.pem ec2-user@[EC2-퍼블릭-IP]`이 명령문이 디폴트인것 같다. + +2. MySQL 클라이언트 설치: + ```bash + sudo apt update + sudo apt install mysql-client -y + ``` + +3. RDS 접속: + ```bash + mysql -h [RDS-엔드포인트] -u admin -p + ``` + RDS 엔드포인트는 RDS 페이지에서 상세내용으로 확인가능하다. + + +4. 데이터베이스 생성 및 테스트: + ```sql + CREATE DATABASE mydb; + USE mydb; + CREATE TABLE test (id INT, name VARCHAR(50)); + INSERT INTO test VALUES (1, 'test'); + SELECT * FROM test; + ``` + +## 프리티어 주의사항 +### 이거 어기면 바로 과금이니 주의하자(페이지에서 주의사항으로 알려준다.) +1. EC2: + - t2.micro 인스턴스만 무료 + - 스토리지 30GB까지 무료 + - 750시간/월 무료 + +2. RDS: + - db.t3.micro 인스턴스만 무료 + - 스토리지 20GB까지 무료 + - 750시간/월 무료 + +3. VPC 관련: + - VPC, 서브넷, 보안 그룹은 무료 + - NAT Gateway는 유료이므로 사용하지 않음 + + +#### 추가) 여기까지는 AWS 설정이고 로컬환경에 연결은 하지 않은 상태이다. +로컬에서 연결하려면 추가적인 작업이 필요하니 다음 글로 정리해두겠다. diff --git "a/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" "b/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" new file mode 100644 index 00000000000..3607c86baa1 --- /dev/null +++ "b/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" @@ -0,0 +1,221 @@ +--- +layout: post +title: "EMP 프로젝트 소개" +date: 2024-10-22 +author: "horoong" +categories: [blog, project] +tags: [project, development, 웹개발] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 +--- + +### 🎵 Emotional Mood Player (EMP) + +> 감정과 가사 기반의 맞춤형 음악 추천 서비스 + + +### 📌 프로젝트 소개 + +> Emotional Mood Player는 사용자의 감정 상태와 선호하는 가사를 기반으로 개인화된 플레이리스트를 생성해주는 음악 추천 서비스입니다. 자연어 처리 기술을 활용하여 가사의 의미를 분석하고, 사용자의 감정 상태에 맞는 최적의 음악을 추천합니다. + +### 주요 기능 + +1. 감정 기반 음악 추천: 현재 감정 상태에 따른 맞춤형 플레이리스트 생성 +2. 가사 기반 음악 추천: 선호하는 가사 스타일과 유사한 곡들을 추천 +3. 플레이리스트 관리: 생성된 플레이리스트 저장, 수정, 삭제 기능 +4. 음악 재생: Spotify API를 통한 음악 스트리밍 서비스 제공 +5. 소셜 공유: 생성된 플레이리스트 공유 기능(개발 예정) + +### 🛠 기술 스택 +#### Frontend + + - React 18.3.1 + - Recoil (상태 관리) + - Axios (HTTP 클라이언트) + - React Router DOM + - CSS Modules + +#### Backend + + Node.js + Express.js + Prisma (ORM) + MySQL + Passport.js (인증) + Winston (로깅) + +### DevOps & Tools + + ESLint + Prettier + Nodemon + Cross-env + +### 프로젝트 구조 + ├── frontend/ # 리액트 기반 프론트엔드 + ├── model_server/ # ML 모델 서버 + └── server/ # Express 기반 백엔드 + +### 🔑 주요 기술적 특징 + +#### 백엔드 아키텍처 + + 3-Tier Architecture 적용 + + Presentation Layer (Controllers) + Business Logic Layer (Services) + Data Access Layer (Models) + + +보안 + + Passport.js를 활용한 OAuth2.0 인증 + Session 기반 사용자 인증 + CORS 설정을 통한 보안 강화 + +데이터베이스 + + Prisma ORM을 활용한 타입 안전성 보장 + 마이그레이션 기반 데이터베이스 버전 관리 + +에러 처리 + + 전역 에러 핸들러를 통한 일관된 에러 응답 + Winston 로거를 활용한 체계적인 로그 관리 + +### 🚀 시작하기 +#### 요구사항 + + Node.js 18 이상 + MySQL 8.0 이상 + Spotify Premium 계정 (음악 재생 기능) + Spotify Preminum 계정이 아닐 경우 Playlist 생성만 가능 + +--- +--- +추가 고도화 진행 사항 + +1. TypeScript 도입 + 3차 프로젝트는 프레임워크로 NEST.JS를 도입해서 사용하고싶었으나 벡엔드 포지션 팀원이 많기도하고 구현 능력이 달라 포기했던 부분이 있었다. + + 진행은 Express로 만들고 JS까지만 사용해서 TS로의 전환까지 해보려고한다. + +2. 프레임워크 + 현재 프로젝트 구조는 관심사 분리/레이어 구분 이정도 원칙만을 사용해서 구현했었다. 1번의 타입스크립트로는 OOP 구현이 어렵기도 하고 의존성 주입(Dependency Injection, DI)이 쉬운 NestJS가 있기 때문에 OOP 구현은 NestJS 프로젝트를 할때 구현해보자는 생각이 있어 고도화는 `TypeScript + Express`로 진행하려한다. + +3. 디렉토리 구조 + EMP 프로젝트는 기능별 구조(Feature-based)르 벡엔드 폴더 구조를 구성했는데, 이전부터 관심이 있었던 DDD(Domain-Driven Design)까지 구현을 해보고싶었다. 현재까지 구현된 기능들에서 커뮤니티(예로 자신이 만든 플레이리스트를 공유하는 게시판이라거나) 여러 기능들을 추가적으로 구현하기에 좋을 것 같다는 생각을 가지고 있었는데 DDD까지 구현하기에는 어려운 부분이 있어 약간의 원칙들만 가져와서 구현을 해보려고 한다. 여기에는 2번에서 언급한 Exrpess의 OOP의 구현 난이도도 한 몫했다. + + 아래는 비교를 위해서 약간의 예를 가져와봤다. + + **feature-based** + ``` + src/ + ├── controllers/ + │ ├── authController.ts + │ ├── playlistController.ts + │ └── userController.ts + ├── services/ + │ ├── authService.ts + │ ├── playlistService.ts + │ └── userService.ts + ├── routes/ + │ ├── authRoutes.ts + │ ├── playlistRoutes.ts + │ └── userRoutes.ts + ├── models/ + │ └── index.ts + └── utils/ + ├── errors.ts + └── logger.ts + ``` + feature-based 구조는 레이어 별 코드 분리로 모듈화를 하는 방식으로 현재 벡엔드 코드 상태다. + + 관심사 분리(controller와 service 분리), 단일 책임 원칙 등을 지키려고 노력했었으나, 팀원들과 협업을 하면서 비즈니스 코드 중복과 복잡성이 늘어날 확률이 눈에 보이기 시작했다. + + 역시 협업의 처음에는 컨벤션을 견고히 잡아두어야한다는 말이 이해가 간다. + + 문제를 해결할 겸 여러가지 방식과 기능 추가를 고려해두고 구조 방식을 찾아보았다. + + **DDD(Domain-Driven Design)** + ``` + src/ + ├── modules/ + │ ├── auth/ + │ │ ├── domain/ + │ │ │ ├── entities/ + │ │ │ └── value-objects/ + │ │ ├── application/ + │ │ │ ├── use-cases/ + │ │ │ └── services/ + │ │ ├── infrastructure/ + │ │ │ ├── repositories/ + │ │ │ └── providers/ + │ │ └── interfaces/ + │ │ ├── controllers/ + │ │ └── routes/ + │ │ + │ └── playlist/ + │ ├── domain/ + │ ├── application/ + │ ├── infrastructure/ + │ └── interfaces/ + │ + └── shared/ + ├── infrastructure/ + └── domain/ + ``` + + DDD구조는 비즈니스 도메인 별로 개발을 진행해야하는데, 명확한 코드계층을 통해서 도메인 별로 관련된 요소를 해당 모듈에 모아서 작성해야한다. 작년 우아콘에서 DDD 세션이 있었는데 아무래도 대규모 서비스들이 채택하는 이유가 있다. 각각의 서비스의 응집도와 확장성을 모두 챙길 수 있으니 이해가 간다. + + 여담이지만 OOP의 확장이라는 말이 있는데 아직까지는 잘 모르겟다. + + 정리하자면 + 1. 비즈니스 도메인 중심: 각 도메인의 로직이 하나의 모듈에 있다. + 2. 아키텍쳐: presentation layer, Application, Domain, Infrastructure 계층으로 구성 + 3. 도메인 모델이 명확함(역시 비즈니스 도메인에 맞춰서 개발하다보니, 구현도 쉽지 않을까 아니겠지만ㅎㅎ) + + 결론적으로는 아주 약간만 DDD에서 채용하기로 했다. DDD는 공부할게 많고 아직까지는 부족하다생각되어서 복잡한 로직을 생각해보고 구현할 일이 생긴다면 그때 구현해보겠다. + + feature-based로 진행을 하겠지만 약간의 도메인 정리 정도로 방향을 잡았다. + + 1. Domain별 분리 + 2. 공통코드(type, middleware, utils)들을 shared로 정리 + 3. Infra 관련 코드들(DB, config)들 별도로 분리 + + 3가지를 잘 맞춰서 진행해보자! + +### 추가) 진행상황 추가 +DDD를 채용하기로 했지만 우아콘2024에 가서 DDD에 대한 세션을 들었다. +역시나 생각하던 걸림돌이기도했고 프로젝트 구조만을 약간 채용하는 것만으로는 많이 부족하다고 생각해서 결국 기능별 구조로 변경했다. + +**현재 코드 구조는 아래와 같다.** +``` +├── front +│ ├── public +│ └── src +├── model_server # 파이썬 AI 모델 서버(FAST API) +└── server + ├── prisma + └── src + ├── @types + ├── auth # 인증 관련 기능 + ├── config # 설정 + ├── infrastructure # 인프라 기반 코드 + │ ├── auth # 인증 인프라 + │ ├── database # DB 연결 관리 + │ ├── session # 세션 관리 + │ ├── swagger # API 문서 스웨거 + │ └── types + ├── middlewares # 인증, 에러, 유효성 검사 미들웨어 + │ └── validators + ├── playlists # 플레이리스트 관련 기능 + ├── routes # 라우터 매니저 및 설정 + ├── shared # 공통 타입과 유틸리티 + │ ├── types + │ └── utils + └── users # 계정 관련 기능 +``` \ No newline at end of file diff --git "a/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" "b/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" new file mode 100644 index 00000000000..644141a271b --- /dev/null +++ "b/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" @@ -0,0 +1,205 @@ +--- +layout: post +title: "EMP 프로젝트 타입스크립트 마이그레이션 회고" +date: 2024-11-07 +author: "horoong" +categories: [blog, project] +tags: [project, development, 웹개발] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: true # 댓글 가능 유무 +published: true # 공개/비공개 +--- + +# 리펙토링 한걸음 내딛기 +--- + +이전에 글로 소개했었던 EMP 프로젝트를 리펙토링 하기로 결정했다. + +두번째 팀프로젝트를 타입스크립트를 진행하고, 세번째 팀프로젝트를 진행했을때 기술 스택이 JS로 정해져서 굉장히 아쉬웠다. 그러나 어쩌겠는가 혼자하는게 아니라 팀프로젝트이고 완성은 혼자 할 수 없다. + +그렇게 진행해서 벡엔드 단에서 정해진건 Express와 JavaScript를 사용해서 만들었다. 이러쿵 저러쿵 다사다난하지만 완성을 했다. 프로젝트를 많이 해본건 아니지만 완성의 기분은 좋다(뒤에 찜찜한 느낌이 있었지만) + +리펙토링을 항상 염두해서 작성했지만 프로젝트가 끝나고 나서 막상 타입스크립트로 전환 시작해야지 했는데 일단 벡엔드 소스코드를 보는데 답답하게 느껴져서 프로젝트 구조부터 다르게 진행해보기로 했다. + +# 아키텍쳐 재구성 +--- +몇가지를 필수적으로 생각하고 기능에 대한 로직만 이사하고 새로만들기로 했다. + +1. **당연히 프로젝트 구성** + ``` + client <-> Express server(API server) <-> MySQL DB + + + ML server + ``` + 이 아키텍쳐는 내가 건들수 없는 부분이 아니었으니 ***pass*** + +2. **3-tier 아키텍쳐** + + 프레젠테이션 레이어(컨트롤러), 비즈니스 레이어(서비스), 데이터 엑세스 레이어(프리즈마) + +3. **아직 무료 크레딧 남은 GCP DB(이제는 끝낫다.. 잘가라..)** + + 말이 필요한가? 무료다 + + 테스트 계정들과 테스트 플레이리스트들도 있으니 그대로 쓰면된다 + +4. **에러처리 전략** + + AppError를 확장해서 cause로 체이닝하는 개념을 적용한 에러처리는 맘에들어서 이삿짐에 넣었다 + +5. **winston 로깅** + + + +# 도입기 +--- +1차적으로 도입하고 싶던 tool이 있었다. + +eslint인데 무려 존재는 했다. 팀원 모두 lint에 익숙하지 않아 lint오류가 있는 상태에서 커밋해서 올리는 경우가 많아서 `lint staged + husky`를 도입했다(리펙토링은 나 혼자 하지만). + +### 1. **eslint(lint staged + husky)** +간단하게 정리하면 git staged에 올라가있는 파일들에 대해 커밋완료 이전에 lint 설정에 어긋나지 않았는지 확인하는 역할을 한다. +```zsh +> git add 0000 +# add 된 파일들에 대해 정의한 lint설정 및 체크 +> git commit +# commit이 완료되었다면 정의한 lint 설정들을 통과한 파일들 +# 추가로 prettier도 설정해두었다면 prettier까지 적용되어서 파일 내용이 재작성된다 +``` +**후기**: + +처음에 도입했을땐 tsconfig와 eslint설정으로 인해서 commit조차 시도를 못했다. 필자는 커밋을 자주하는 편은 아니지만 작성이 어느정도되면 커밋을 해야한다고 생각하기 때문에 커밋을 작성하는데 remote repository에 올릴 수 조차 없었다. + +아주 멘붕인 상황 + 이전에도 lint 잘 지킬걸 공부좀 할걸 하는 후회가 엄습했다. 결국 작성한 코드가 타입체크와 lint 규칙을 통과하게 아주 만족스러운 리펙토링 과정을 거쳐서 remote repository에 올릴 수 있었다 ㅋㅋ... + +### 2. **타입정의** +`애초부터 잘 만들어야했다.` + +이번에 마이그레이션하면서 뼈아프게 느꼇다. + +프로젝트에 대해서 대부분 알고 있다고 생각했는데 그게 아니었다. + +처음부터 타입들을 생각하고 진행한게 아닌 기능 완성 및 시간에 쫓기다시피 작성을 하다보니 코드에 대한 헛점도 많고, 여기에 뭐가 들어가는지만 알지 세세하게 알지 못했다(~~스프링이었다면 이미 타입이 들어가있었겟지 라고 생각했는데 지금은 언어는 도구일뿐..이라 생각한다 아직 멀었지만~~). + +당당하게 any 안쓰는게 당연하지 하고 tsconfig에 `noImplicitAny`를 설정하고 `'@typescript-eslint/no-explicit-any': 'error'`로 설정했다가 피봤다. + +any를 지양하는 것은 좋지만, 외부 라이브러리에서 가져올때는 any가 필요하다는걸 크게 배웠다. + +*Prisma Client로 데이터베이스에서 정의한 타입을 사용해서 동적 쿼리 처리할때 any로 반환되는 경우를 생각조차 못하고 있었다* + +prisma에서 지정한 타입을 타입스크립트에서 자동으로 변환해주지 않아서 왜 오류가 뜨는지 모르는 상태로 몇시간 삽질을 했다. + +역시 인터넷은 지식 저장소가 아니라 삽질의 저장소다. 남이 삽질한거 보면 내 문제도 해결, 아주 집단 지성이 좋지만 남의 삽질과 내 삽질을 비교해야하니 힘들다. + +삽질은 크게 + +1. 타입스크립트에서만 지정 -> prisma 클라이언트와 다름 오류 +2. DTO 정의하면서 타입 지정 -> prisma 와 불일치 +3. 프리즈마 import로만 사용 + 타입스크립트에서 지정 -> 역시 오류 + +해결은 prisma와 prisma client import로 `import { Provider } from '@prisma/client';` 이런식으로 확실하게 불러줘야한다. + +또 한가지 문제가 있었는데 **prisma 이벤트 핸들링 할때 any문제** 였다. +프리즈마 이벤트들도 로깅하려고 프리즈마 이벤트 핸들링을 정의했어야했는데 + +```ts +private static setupLogging(): void { +if (!PrismaService.instance) return; + +const prisma = PrismaService.instance; + +// Prisma의 타입 시스템 제한으로 인해 any 타입 사용 +(prisma as any).$on('query', (event: PrismaEventType['query']) => { +logger.debug('Prisma Query:', { + query: event.query, + params: event.params, + duration: event.duration, + timestamp: event.timestamp, +}); +}); + +(prisma as any).$on('error', (event: PrismaEventType['error']) => { +logger.error('Prisma Error:', { + message: event.message, + timestamp: event.timestamp, + target: event.target, +}); +}); + +(prisma as any).$on('info', (event: PrismaEventType['info']) => { +logger.info('Prisma Info:', { + message: event.message, + timestamp: event.timestamp, +}); +}); + +(prisma as any).$on('warn', (event: PrismaEventType['warn']) => { +logger.warn('Prisma Warning:', { + message: event.message, + timestamp: event.timestamp, +}); +}); +} +``` + +이 부분은 gpt가 답을 찾았다. 현재 prisma의 이벤트 타입(query, error, info, warn)들은 Prisma.QeuryEvent와 Prisma.LogEvent 타입으로 정의되어서 $on으로 핸들링 했을때 핸들링이 안된다. + +필자는 결국 as any를 채택해서 any를 사용했지만 여러 방안이 있다. + +* **타입 가드 활용:** 특정 타입 가드 함수를 만들어서 query/error/info 등... 상황에 맞는 이벤트를 검사해서 각 타입에 맞게 캐스팅해서 쓰는 경우 + +* **any 대신에 unknown 활용:** 타입스크립트에서는 unknown이 any보다 안전하니까(any는 다 통과시키고, unknown은 타입 추론 이전까지는 제한이다) unknown을 사용하는 것도 방법이다 + +* **prisma에서 이 부분은 빠르게 지원해줬으면 좋겠다.** + + +### 3. **gracefulShutdown** + +이 기능은 JS로 프로젝트 설계했을때에도 만들었어야 하는 기능인데 시간에 쫓겨서 못 넣은 기능이었다. + +* 서버가 갑작스럽게 종료되는걸 방지(어떤 요인에 의해서 강제종료되더라도) + +* 실행중인 작업을 안전하게 종료(작업이 끝난 후에 종료) + +* 서버 종료 시에 db 연결을 적절하게 정리 + +* 로그를 남겨서 어떻게 종료되었는지 확인 + +이정도로 구성했다. + +보통 시그널을 받아서 종료하는데 +* `SIGTERM`: 프로세스 종료 시그널로 일반적인 종료시에 요청하는 시그널 + +* `SIGINT`: 이건 keyboard interrupt 시그널로 많이하는 ctrl+c로 종료할때 받는 시그널이다. + +프로세스를 단계별로 정리하자면 + +1. 시그널 수신 + 로깅 + +2. DB 연결 종료 + +3. 성공 실패에 따라서 종료코드로 종료하기 + + 3.1 종료 코드 `process.exit(0)` 은 정상 종료이고 + 3.2 종료 코드 `process.exit(1)` 은 비정상 종료이다 + + +이런식으로 정리할 수 있을 것 같다. + +현재는 DB연결에 대한 부분에 사용하고 있는데 서비스가 복잡해지는 경우에는 도커같은 서비스 사용할때 정상적으로 task를 마무리하고 종료하는데 좋게 쓰이지 않을까 싶다. + +### 4. Validation +JS-EMP 플젝에서에서 만들다가 유저 정보는 validation까지 필요없을것 같아 진행 도중에 폐기한 기능이다. +타입스크립트의 타입체크는 물론이고 플레이리스트관련은 validation이 있었으면 해서 생각하던 중, AI model server에서만 아주 약하게 validation하고 넘어갓는데 API서버에서 요청을 넘기는 부분에서 막으면 좋을 것 같아서 기능을 추가했다. + +AI model server에서 걸러진다는건 결국 API 서버를 거쳐서 리소스를 사용해서 응답을 받는 것이기 때문에 API 서버 자체에서 blocking을 하는 것이 성능적으로 더 이득일것이라고 생각했다. + +단계별로 코드를 작성했다. + +1. 기본 validation type 정의하기(shared/types/validation.types.ts) + +2. + + From dfef3d68bd9cdade07062fd71985162f65d34880 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 8 Nov 2024 17:35:17 +0900 Subject: [PATCH 07/10] fix: baseurl --- _config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index e9a45dcf20f..1030660986e 100644 --- a/_config.yml +++ b/_config.yml @@ -150,8 +150,7 @@ pwa: paginate: 10 # The base URL of your site -# baseurl: "https://jinhyung-r.github.io/horoong.github.io/" -baseurl: "" +baseurl: "/" # ------------ The following options are not recommended to be modified ------------------ From f75f52f231409ef6d232ea9d5d0400f46f2eb3e5 Mon Sep 17 00:00:00 2001 From: jh Date: Fri, 8 Nov 2024 17:41:38 +0900 Subject: [PATCH 08/10] refactor: change published false --- ...4\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" | 4 ++-- ...\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git "a/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" "b/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" index bc844d5e3d4..26c17be4186 100644 --- "a/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" +++ "b/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" @@ -8,8 +8,8 @@ tags: [RDS, development, 웹개발] # description: "설명 추가하기" # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ -comments: true # 댓글 가능 유무 -published: true # 공개/비공개 +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 --- # AWS EC2-RDS 프리티어 설정 가이드 diff --git "a/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" "b/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" index 644141a271b..6d5327426d6 100644 --- "a/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" +++ "b/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" @@ -8,8 +8,8 @@ tags: [project, development, 웹개발] # description: "설명 추가하기" # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ -comments: true # 댓글 가능 유무 -published: true # 공개/비공개 +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 --- # 리펙토링 한걸음 내딛기 From 26d72377e5dacdb97eb73ab6faa36743ab2e0019 Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 16 Dec 2024 07:41:01 +0900 Subject: [PATCH 09/10] chore: update gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9003690048c..0a5da66bbba 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,7 @@ package-lock.json .vscode # Misc -# assets/js/dist \ No newline at end of file +# assets/js/dist + +# Mac +.DS_Store \ No newline at end of file From 82a4407b3aef3db5de07ceb67918a1eec687ac57 Mon Sep 17 00:00:00 2001 From: jh Date: Mon, 16 Dec 2024 08:35:12 +0900 Subject: [PATCH 10/10] feat: pending posts --- .gitignore | 43 +++- ...4\352\267\270-\352\260\234\354\204\244.md" | 2 +- ...0\353\262\225-\354\240\225\353\246\254.md" | 2 +- ...5-\352\260\200\354\235\264\353\223\234.md" | 2 +- ...\354\230\201\354\262\264\354\240\234-1.md" | 15 ++ ...024-10-22-EMP-\354\240\225\353\246\254.md" | 2 +- ...024-10-23-EMP-\354\240\225\353\246\254.md" | 125 ++++++++++ ...-\353\260\217-\355\233\204\352\270\260.md" | 215 +++++++++++++++++- 8 files changed, 395 insertions(+), 11 deletions(-) create mode 100644 "_posts/cs/2024-11-28-\355\230\274\354\236\220\352\263\265\353\266\200\355\225\230\353\212\224-cs-\354\232\264\354\230\201\354\262\264\354\240\234-1.md" create mode 100644 "_posts/project/2024-10-23-EMP-\354\240\225\353\246\254.md" diff --git a/.gitignore b/.gitignore index 0a5da66bbba..3f40417bac7 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,44 @@ package-lock.json # Misc # assets/js/dist -# Mac -.DS_Store \ No newline at end of file +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + diff --git "a/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" "b/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" index 42eea5278b0..005ab713e55 100644 --- "a/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" +++ "b/_posts/2024-10-13-jeykyll-github-pages-\355\231\234\354\232\251\355\225\234-\353\270\224\353\241\234\352\267\270-\352\260\234\354\204\244.md" @@ -9,7 +9,7 @@ tags: [blog, jekyll] # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ comments: false # 댓글 가능 유무 -published: false # 공개/비공개 +published: true # 공개/비공개 --- # 블로그 선택 diff --git "a/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" "b/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" index 719bfa14f1b..2a57fe0f0eb 100644 --- "a/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" +++ "b/_posts/2024-10-13-\353\247\210\355\201\254\353\213\244\354\232\264-\353\254\270\353\262\225-\354\240\225\353\246\254.md" @@ -9,7 +9,7 @@ tags: [blog, jekyll] # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ comments: false # 댓글 가능 유무 -published: false # 공개/비공개 +published: true # 공개/비공개 --- [공통] 마크다운 markdown 작성법 diff --git "a/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" "b/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" index 26c17be4186..e88b3b85e50 100644 --- "a/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" +++ "b/_posts/2024-11-07-AWS-EC2-RDS-\355\224\204\353\246\254\355\213\260\354\226\264-\354\204\244\354\240\225-\352\260\200\354\235\264\353\223\234.md" @@ -9,7 +9,7 @@ tags: [RDS, development, 웹개발] # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ comments: false # 댓글 가능 유무 -published: false # 공개/비공개 +published: true # 공개/비공개 --- # AWS EC2-RDS 프리티어 설정 가이드 diff --git "a/_posts/cs/2024-11-28-\355\230\274\354\236\220\352\263\265\353\266\200\355\225\230\353\212\224-cs-\354\232\264\354\230\201\354\262\264\354\240\234-1.md" "b/_posts/cs/2024-11-28-\355\230\274\354\236\220\352\263\265\353\266\200\355\225\230\353\212\224-cs-\354\232\264\354\230\201\354\262\264\354\240\234-1.md" new file mode 100644 index 00000000000..b8cd5067f39 --- /dev/null +++ "b/_posts/cs/2024-11-28-\355\230\274\354\236\220\352\263\265\353\266\200\355\225\230\353\212\224-cs-\354\232\264\354\230\201\354\262\264\354\240\234-1.md" @@ -0,0 +1,15 @@ +--- +layout: post +title: "혼자공부하는 cs와 운영체제 1" +date: 2024-11-28 +author: "horoong" +categories: [blog, cs] +tags: [cs, os] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 +--- + +# 혼자 공부하는 시 \ No newline at end of file diff --git "a/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" "b/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" index 3607c86baa1..6705b17beb2 100644 --- "a/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" +++ "b/_posts/project/2024-10-22-EMP-\354\240\225\353\246\254.md" @@ -9,7 +9,7 @@ tags: [project, development, 웹개발] # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ comments: false # 댓글 가능 유무 -published: false # 공개/비공개 +published: true # 공개/비공개 --- ### 🎵 Emotional Mood Player (EMP) diff --git "a/_posts/project/2024-10-23-EMP-\354\240\225\353\246\254.md" "b/_posts/project/2024-10-23-EMP-\354\240\225\353\246\254.md" new file mode 100644 index 00000000000..b5ab6a7cda5 --- /dev/null +++ "b/_posts/project/2024-10-23-EMP-\354\240\225\353\246\254.md" @@ -0,0 +1,125 @@ +--- +layout: post +title: "EMP 프로젝트 간단 정리와 벡엔드 타입스크립트 내용 추가" +date: 2024-10-23 +author: "horoong" +categories: [blog, project] +tags: [project, development, 웹개발] +# description: "설명 추가하기" +# image: 대표이지미지 경로(/assets/imgages/000. +# permaling: /custom-url-for-post/ +comments: false # 댓글 가능 유무 +published: false # 공개/비공개 +--- + +# EMP 정리 + + +## 프론트엔드 + +### 1. 기술스택 +* 리엑트 +* 상태관리 - 리코일 +* 라우팅? +* 바닐라 css +* axios +* CRA 빌드? + +### 2. 주요 기능(대략) +* OAuthCallback.jsx -인증 +* 플레이리스트 관리(CRUD) +* **spotify sdk** + * 스포티파이에서 제공하는 sdk 사용 + * 스포티파이에서 제공하는 access token을 벡엔드에서 받아서 사용(아마 1시간 단위로 만료됨) + * 예전 기준 구글 로그인 및 프리미엄 유저가 아닐 경우 preview로 재생 계획(이었지만 구현하짐 않음) + * 프리미엄 유저일 경우 노래 재생 가능 + +나머지 등등… +--- + + +## 벡엔드 +### 1. 기술스택 +* **node.js** +* **express.js** +* **typescript** +* **prisma** +* **MySQL** +* **OAuth2.0** + * google + * spotify +### 2. 인프라 +* session store: mysql session store +* winston 로깅 +* swagger +* dotenv + +### 3. 아키텍쳐 패턴 및 원칙 +* 싱글톤 - getInstance() 사용 싱글톤 +* shared 파일 및 미들웨어 +* 단일책임원칙 사용하기 + +### 4. 기능 정리 +#### 4.1. 인증 서비스 +* OAuth2.0 - 구글, 스포티파이 +* 세션 인증 +* 토큰 갱신 +* httpOnly + +#### 4.2 플레이리스트 서비스 관련 정리 +* api server <- -> model server <- -> client +* **감정(emotion) 기반** - 선택지로 플레이리스트 생성 +* **가사(lyrics) 기반**- 가사 텍스트 입력하면 가사 기반 생성 + +#### 4.3 에러 핸들링 +* 전역 에러 핸들러 +* 커스텀 에러 클래스 +* http 코드 + +#### 4.4 validation +* DTO 사용 입력데이터 검증 +* 커스텀 validator +* 미들웨어를 사용해서 요청 데이터 검증 + +### 5. 보안? +* cors +* 세션 기반 인증 인가 +* http only + +### 6. 로깅 및 문서화 +* winston(레벨별) +* log lotation 일자별 정리 +* swagger 사용 + +### 7. api -> swagger + + +총 서비스 2개입니당 +--- + +## ai 모델 + +### 1. 기술스택 +* FastAPI +* 사이킷런, TF-IDF(요건 텍스트 분석에 쓴건데 정확히 모르겟네요, cosine 유사도 검색시 사용) +* LSTM/W2V(word to vector) + +### 2. 각 모델 정리 +* *데이터 벡터화* +* 추천 시스템 +* *API 엔드포인트 5001 - 요거는 제가 맥이라 5001로 했는데 실제로 배포할때 코드는 5000으로 되어있을겁니다* +* +#### 2.1 가사 기반 추천 +1. 클라이언트가 가사, 최신곡 선호, 플레이리스트 제목을 입력함 +2. api server가 검색어, 선호도, user id, 제목을 받아서 model server로넘김(request 검증) +3. 모델 서버 url/myplaylist 에다가 요청 보내기 +4. request 기준으로 가사 기반 검색 후에 노래 db에서 추천곡 골라서 response 만들어서 넘김 + +#### 2.2 감정 기반 추천 +1. 클라이언트에서 장르, 감정 유형, 최신곡 선호, 제목 입력 +2. api server가 입력 받은거 + userid 해서 model server로 넘김(request 검증) +3. 모델 서버 url/myplaylist 에다가 요청 보내기 +4. 모델 서버에서 장르와 감정 벡터와 +5. 코사인 유사도 계산 및 추천 -> reponse 생성 후 넘김 + + diff --git "a/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" "b/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" index 6d5327426d6..5ac453ba95c 100644 --- "a/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" +++ "b/_posts/project/2024-11-07-TS-\354\240\204\355\231\230-\353\260\217-\355\233\204\352\270\260.md" @@ -9,7 +9,7 @@ tags: [project, development, 웹개발] # image: 대표이지미지 경로(/assets/imgages/000. # permaling: /custom-url-for-post/ comments: false # 댓글 가능 유무 -published: false # 공개/비공개 +published: true # 공개/비공개 --- # 리펙토링 한걸음 내딛기 @@ -57,7 +57,21 @@ published: false # 공개/비공개 --- 1차적으로 도입하고 싶던 tool이 있었다. -eslint인데 무려 존재는 했다. 팀원 모두 lint에 익숙하지 않아 lint오류가 있는 상태에서 커밋해서 올리는 경우가 많아서 `lint staged + husky`를 도입했다(리펙토링은 나 혼자 하지만). +eslint인데 프로젝트에 이미 존재는 했다. 팀원 모두 lint에 익숙하지 않아 lint오류가 있는 상태에서 커밋해서 올리는 경우가 많아서 `lint staged + husky`를 도입했다. + +```json +{ + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{ts,tsx}": ["eslint --fix", "prettier --write"] + } +} +``` + ### 1. **eslint(lint staged + husky)** 간단하게 정리하면 git staged에 올라가있는 파일들에 대해 커밋완료 이전에 lint 설정에 어긋나지 않았는지 확인하는 역할을 한다. @@ -70,7 +84,7 @@ eslint인데 무려 존재는 했다. 팀원 모두 lint에 익숙하지 않아 ``` **후기**: -처음에 도입했을땐 tsconfig와 eslint설정으로 인해서 commit조차 시도를 못했다. 필자는 커밋을 자주하는 편은 아니지만 작성이 어느정도되면 커밋을 해야한다고 생각하기 때문에 커밋을 작성하는데 remote repository에 올릴 수 조차 없었다. +처음에 도입했을땐 tsconfig와 eslint설정으로 인해서 commit조차 시도를 못했다. 필자는 작동 확인 후에 커밋을 해서 잘 작동되는지 test commit만 시도 한 후에 tsconfig와 lint 규칙이 작동하는지 확인을 안하고 진행했었다. 이 부분에서 문제였는데 lint을 warn으로 두는게 아니라 error로 규칙을 잡아두어서 해결하기 전까지는remote repository에 올릴 수 조차 없었다. 아주 멘붕인 상황 + 이전에도 lint 잘 지킬걸 공부좀 할걸 하는 후회가 엄습했다. 결국 작성한 코드가 타입체크와 lint 규칙을 통과하게 아주 만족스러운 리펙토링 과정을 거쳐서 remote repository에 올릴 수 있었다 ㅋㅋ... @@ -81,7 +95,7 @@ eslint인데 무려 존재는 했다. 팀원 모두 lint에 익숙하지 않아 프로젝트에 대해서 대부분 알고 있다고 생각했는데 그게 아니었다. -처음부터 타입들을 생각하고 진행한게 아닌 기능 완성 및 시간에 쫓기다시피 작성을 하다보니 코드에 대한 헛점도 많고, 여기에 뭐가 들어가는지만 알지 세세하게 알지 못했다(~~스프링이었다면 이미 타입이 들어가있었겟지 라고 생각했는데 지금은 언어는 도구일뿐..이라 생각한다 아직 멀었지만~~). +처음부터 타입들을 생각하고 진행한게 아닌 기능 완성 및 시간에 쫓기다시피 작성을 하다보니 코드에 대한 허점도 많고, 여기에 뭐가 들어가는지만 알지 세세하게 알지 못했다. 당당하게 any 안쓰는게 당연하지 하고 tsconfig에 `noImplicitAny`를 설정하고 `'@typescript-eslint/no-explicit-any': 'error'`로 설정했다가 피봤다. @@ -169,6 +183,36 @@ logger.warn('Prisma Warning:', { 이정도로 구성했다. +코드는 이런식으로 구성했다 + +```ts +private setupGracefulShutdown(): void { + const gracefulShutdown = async (signal: string) => { + logger.info(`${signal} signal received: closing HTTP server`); + try { + await PrismaService.disconnect(); + logger.info('Server closed'); + process.exit(0); + } catch (error) { + logger.error('Error during graceful shutdown:', error); + process.exit(1); + } + }; + + process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); + process.on('SIGINT', () => gracefulShutdown('SIGINT')); + + process.on('unhandledRejection', (reason: unknown) => { + logger.error('Unhandled Promise rejection:', reason); + }); + + process.on('uncaughtException', (error: Error) => { + logger.error('Uncaught Exception:', error); + process.exit(1); + }); + } +``` + 보통 시그널을 받아서 종료하는데 * `SIGTERM`: 프로세스 종료 시그널로 일반적인 종료시에 요청하는 시그널 @@ -199,7 +243,168 @@ AI model server에서 걸러진다는건 결국 API 서버를 거쳐서 리소 단계별로 코드를 작성했다. 1. 기본 validation type 정의하기(shared/types/validation.types.ts) + ```ts + // 검증 시의 오류들 어디에서 발생했는지와 message + export interface ValidationError { + field: string; + message: string; + } + + // 전체 검증경과 불리언과 에러들 파악 + export interface ValidationResult { + isValid: boolean; + errors: ValidationError[]; + } + + // 검증 규칙 정의 + export type ValidationRule = { + validate: (value: T) => boolean; // 여기에서 값을 검증하는 함수로 + message: string; // 여기에서 검증 실패하면 message + }; + + // 각 필드마다 적용할 규칙 정의 + export type Validator = { + [K in keyof T]?: ValidationRule[]; + }; + ``` + + +2. validationUtils (shared/utils/validatort.ts) + + `검증용 유틸리티 함수들정의(재사용 가능하게)` + + ```ts + // 문자열, 빈 문자열 확인, 숫자인지, 불리언인지 등 미리 정의 + export class ValidationUtils { + static isString(value: unknown): value is string { + return typeof value === 'string'; + } + + static isNumber(value: unknown): value is number { + return typeof value === 'number' && !isNaN(value); + } + + static isBoolean(value: unknown): value is boolean { + return typeof value === 'boolean'; + } + + static isEmail(value: string): boolean { + const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/; + return emailRegex.test(value); + } + + static isNotEmpty(value: string): boolean { + return value.trim().length > 0; + } + + static isLength(value: string, min: number, max: number): boolean { + const length = value.trim().length; + return length >= min && length <= max; + } + + static isArray(value: unknown): value is unknown[] { + return Array.isArray(value); + } + + static isValidURL(value: string): boolean { + try { + new URL(value); + return true; + } catch { + return false; + } + } + } + ``` + +3. DTO 검증 (DTOValidator.ts) + + ```typescript + // dto.validator.ts + export class DTOValidator { + static validate(validator: Validator) { + return async (req: Request, _res: Response, next: NextFunction) => { + try { + const validationResult = this.validateObject(req.body, validator); + + if (!validationResult.isValid) { + throw new AppError( + COMMON_ERROR.VALIDATION_ERROR.name, + '입력값 검증 실패', + { + statusCode: COMMON_ERROR.VALIDATION_ERROR.statusCode, + cause: new Error(JSON.stringify(validationResult.errors)) + } + ); + } + + next(); + } catch (error) { + next(error); + } + }; + } + + private static validateObject( + data: T, + validator: Validator + ): ValidationResult { + const errors: ValidationError[] = []; + + Object.entries(validator).forEach(([field, rules]) => { + const value = data[field as keyof T]; + + if (rules && Array.isArray(rules)) { + for (const rule of rules) { + if (!rule.validate(value)) { + errors.push({ + field, + message: rule.message + }); + break; + } + } + } + }); + + return { + isValid: errors.length === 0, + errors + }; + } + } + ``` + +### 5. 싱글톤 패턴 + +서비스 클래스에 싱글톤을 도입했다. +싱글톤의 특징은 특정 클래스가 `하나의 인스턴스` 만을 가지게 보장하여, 이 인스턴스에 전역적으로 접근 가능하게 하는 것이다. + +```ts +export class UserService { + private static instance: UserService; + private readonly logger = createLogger(config); + + private constructor() {} // 여기서 다른 곳에서 생성자를 못만들게 막고 + + // 여기서 싱글톤 인스턴스에 접근할 수 있다. + public static getInstance(): UserService { + if (!UserService.instance) { + UserService.instance = new UserService(); + } + return UserService.instance; + } +} +``` +알기 쉬운 예로, 설정을 불러 올때 사용했다. + +현재는 Express를 사용해서 Typescript만으로는 의존성 주입(Dependency Injection)을 구현하기 어려울 것 같고, Nest.js를 사용했을때 구현해보려고 한다. + +--- -2. +# 마치며 +프로젝트 기간 동안 정말 기능 구현에만 급급해서 코드 퀄리티는 거의 없다시피 만든걸 확인한 리팩토링이었다. +지금도 보완할 점들이 많이 보이는데 다음 플젝의 프레임워크를 nest.js를 사용해서 조금더 높은 수준을 구현해보려고한다. +(~~아이디어는 참 좋아서 더 좋게 기능도 넣어서 발전시켜보고싶다.~~)