From fdda1c345f7189729dc2ee16a8257e05b8402c29 Mon Sep 17 00:00:00 2001 From: Tieptk Date: Wed, 28 May 2025 15:30:26 +0700 Subject: [PATCH] upload 28/5 --- .vite/deps/@fancyapps_ui.js | 3081 ++++++++++ .vite/deps/@fancyapps_ui.js.map | 7 + .vite/deps/_metadata.json | 61 + .vite/deps/chunk-5WRI5ZAA.js | 30 + .vite/deps/chunk-5WRI5ZAA.js.map | 7 + .vite/deps/chunk-KS2M7ZJI.js | 972 +++ .vite/deps/chunk-KS2M7ZJI.js.map | 7 + .vite/deps/chunk-WFLWNDNR.js | 312 + .vite/deps/chunk-WFLWNDNR.js.map | 7 + .vite/deps/chunk-XLOWEJT4.js | 493 ++ .vite/deps/chunk-XLOWEJT4.js.map | 7 + .vite/deps/package.json | 3 + .vite/deps/preact-iso.js | 430 ++ .vite/deps/preact-iso.js.map | 7 + .vite/deps/preact.js | 28 + .vite/deps/preact.js.map | 7 + .vite/deps/prerender-2A2BKSYN.js | 392 ++ .vite/deps/prerender-2A2BKSYN.js.map | 7 + .vite/deps/react.js | 5 + .vite/deps/react.js.map | 7 + .vite/deps/swiper_modules.js | 5248 +++++++++++++++++ .vite/deps/swiper_modules.js.map | 7 + .vite/deps/swiper_react.js | 4561 ++++++++++++++ .vite/deps/swiper_react.js.map | 7 + config/routing.php | 129 + old/index.html | 2 +- old/src/pages/product/ProductDetail.tsx | 3 +- old/template/buildpc/buildpc.html | 1027 ---- old/package-lock.json => package-lock.json | 33 + old/package.json => package.json | 1 + package/composer.lock | 92 + package/vendor/autoload.php | 25 + package/vendor/composer/ClassLoader.php | 579 ++ package/vendor/composer/InstalledVersions.php | 359 ++ package/vendor/composer/LICENSE | 21 + package/vendor/composer/autoload_classmap.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + package/vendor/composer/autoload_psr4.php | 10 + package/vendor/composer/autoload_real.php | 38 + package/vendor/composer/autoload_static.php | 36 + package/vendor/composer/installed.json | 78 + package/vendor/composer/installed.php | 32 + package/vendor/composer/platform_check.php | 26 + .../liquid/.github/PULL_REQUEST_TEMPLATE.md | 5 + .../liquid/liquid/.github/workflows/cs.yaml | 46 + .../liquid/liquid/.github/workflows/mt.yaml | 48 + .../liquid/.github/workflows/tests.yaml | 56 + package/vendor/liquid/liquid/.gitignore | 3 + package/vendor/liquid/liquid/.php_cs.dist | 42 + package/vendor/liquid/liquid/CHANGELOG.md | 107 + package/vendor/liquid/liquid/LICENSE | 22 + package/vendor/liquid/liquid/README.md | 139 + package/vendor/liquid/liquid/composer.json | 58 + .../liquid/liquid/examples/advanced.php | 32 + .../vendor/liquid/liquid/examples/block.php | 39 + .../vendor/liquid/liquid/examples/filters.php | 25 + .../vendor/liquid/liquid/examples/index.php | 70 + .../examples/protected/cache/.gitignore | 2 + .../examples/protected/templates/base.tpl | 15 + .../protected/templates/blocks/child.tpl | 6 + .../examples/protected/templates/child.tpl | 7 + .../examples/protected/templates/footer.tpl | 3 + .../examples/protected/templates/header.tpl | 2 + .../protected/templates/honorific.html | 1 + .../examples/protected/templates/index.tpl | 44 + .../protected/templates/subfooter.tpl | 1 + .../vendor/liquid/liquid/examples/simple.php | 23 + .../vendor/liquid/liquid/infection.json.dist | 8 + package/vendor/liquid/liquid/phpunit.xml.dist | 23 + .../liquid/src/Liquid/AbstractBlock.php | 264 + .../liquid/liquid/src/Liquid/AbstractTag.php | 100 + .../vendor/liquid/liquid/src/Liquid/Cache.php | 78 + .../liquid/liquid/src/Liquid/Cache/Apc.php | 74 + .../liquid/liquid/src/Liquid/Cache/File.php | 106 + .../liquid/liquid/src/Liquid/Cache/Local.php | 60 + .../liquid/liquid/src/Liquid/Context.php | 458 ++ .../liquid/src/Liquid/CustomFilters.php | 32 + .../liquid/liquid/src/Liquid/Decision.php | 161 + .../liquid/liquid/src/Liquid/Document.php | 95 + .../vendor/liquid/liquid/src/Liquid/Drop.php | 107 + .../src/Liquid/Exception/CacheException.php | 21 + .../Liquid/Exception/FilesystemException.php | 21 + .../Exception/MissingFilesystemException.php | 22 + .../Liquid/Exception/NotFoundException.php | 21 + .../src/Liquid/Exception/ParseException.php | 21 + .../src/Liquid/Exception/RenderException.php | 21 + .../Exception/WrongArgumentException.php | 21 + .../liquid/liquid/src/Liquid/FileSystem.php | 32 + .../liquid/src/Liquid/FileSystem/Local.php | 110 + .../liquid/src/Liquid/FileSystem/Virtual.php | 64 + .../liquid/liquid/src/Liquid/Filterbank.php | 153 + .../liquid/liquid/src/Liquid/Liquid.php | 170 + .../liquid/src/Liquid/LiquidException.php | 19 + .../liquid/src/Liquid/LocalFileSystem.php | 19 + .../liquid/liquid/src/Liquid/Regexp.php | 134 + .../liquid/src/Liquid/StandardFilters.php | 727 +++ .../liquid/src/Liquid/Tag/TagAssign.php | 76 + .../liquid/liquid/src/Liquid/Tag/TagBlock.php | 56 + .../liquid/liquid/src/Liquid/Tag/TagBreak.php | 42 + .../liquid/src/Liquid/Tag/TagCapture.php | 71 + .../liquid/liquid/src/Liquid/Tag/TagCase.php | 171 + .../liquid/src/Liquid/Tag/TagComment.php | 37 + .../liquid/src/Liquid/Tag/TagContinue.php | 42 + .../liquid/liquid/src/Liquid/Tag/TagCycle.php | 130 + .../liquid/src/Liquid/Tag/TagDecrement.php | 83 + .../liquid/src/Liquid/Tag/TagExtends.php | 214 + .../liquid/liquid/src/Liquid/Tag/TagFor.php | 236 + .../liquid/liquid/src/Liquid/Tag/TagIf.php | 168 + .../liquid/src/Liquid/Tag/TagIfchanged.php | 61 + .../liquid/src/Liquid/Tag/TagInclude.php | 200 + .../liquid/src/Liquid/Tag/TagIncrement.php | 83 + .../liquid/src/Liquid/Tag/TagPaginate.php | 206 + .../liquid/liquid/src/Liquid/Tag/TagRaw.php | 52 + .../liquid/src/Liquid/Tag/TagTablerow.php | 152 + .../liquid/src/Liquid/Tag/TagUnless.php | 31 + .../liquid/liquid/src/Liquid/Template.php | 270 + .../liquid/liquid/src/Liquid/Variable.php | 173 + .../liquid/tests/Liquid/AbstractBlockTest.php | 38 + .../liquid/tests/Liquid/Cache/ApcTest.php | 53 + .../liquid/tests/Liquid/Cache/FileTest.php | 173 + .../liquid/tests/Liquid/Cache/LocalTest.php | 45 + .../liquid/tests/Liquid/ContextTest.php | 503 ++ .../liquid/tests/Liquid/CustomFiltersTest.php | 47 + .../liquid/tests/Liquid/CustomTagTest.php | 47 + .../liquid/liquid/tests/Liquid/DropTest.php | 140 + .../tests/Liquid/EscapeByDefaultTest.php | 127 + .../liquid/tests/Liquid/FilterbankTest.php | 244 + .../liquid/tests/Liquid/FixturesTest.php | 50 + .../liquid/liquid/tests/Liquid/LiquidTest.php | 88 + .../tests/Liquid/LocalFileSystemTest.php | 169 + .../liquid/liquid/tests/Liquid/OutputTest.php | 194 + .../liquid/tests/Liquid/ParsingQuirksTest.php | 27 + .../liquid/liquid/tests/Liquid/RegexpTest.php | 69 + .../tests/Liquid/StandardFiltersTest.php | 1144 ++++ .../tests/Liquid/Tag/NoTransformTest.php | 35 + .../liquid/tests/Liquid/Tag/TagAssignTest.php | 98 + .../liquid/tests/Liquid/Tag/TagBlockTest.php | 31 + .../liquid/tests/Liquid/Tag/TagBreakTest.php | 50 + .../tests/Liquid/Tag/TagCaptureTest.php | 34 + .../liquid/tests/Liquid/Tag/TagCaseTest.php | 106 + .../tests/Liquid/Tag/TagCommentTest.php | 43 + .../tests/Liquid/Tag/TagContinueTest.php | 50 + .../liquid/tests/Liquid/Tag/TagCycleTest.php | 51 + .../tests/Liquid/Tag/TagDecrementTest.php | 49 + .../tests/Liquid/Tag/TagExtendsTest.php | 215 + .../liquid/tests/Liquid/Tag/TagForTest.php | 224 + .../liquid/tests/Liquid/Tag/TagIfTest.php | 289 + .../tests/Liquid/Tag/TagIfchangedTest.php | 31 + .../tests/Liquid/Tag/TagIncludeTest.php | 263 + .../tests/Liquid/Tag/TagIncrementTest.php | 44 + .../tests/Liquid/Tag/TagPaginateTest.php | 210 + .../liquid/tests/Liquid/Tag/TagRawTest.php | 28 + .../tests/Liquid/Tag/TagTablerowTest.php | 66 + .../liquid/tests/Liquid/Tag/TagUnlessTest.php | 45 + .../liquid/tests/Liquid/TemplateTest.php | 169 + .../liquid/liquid/tests/Liquid/TestCase.php | 63 + .../liquid/tests/Liquid/TestFileSystem.php | 29 + .../liquid/liquid/tests/Liquid/TickTest.php | 49 + .../tests/Liquid/VariableResolutionTest.php | 63 + .../liquid/tests/Liquid/VariableTest.php | 122 + .../tests/Liquid/VirtualFileSystemTest.php | 81 + .../liquid/tests/Liquid/cache_dir/.gitignore | 4 + .../tests/Liquid/fixtures/assign-capture.html | 20 + .../Liquid/fixtures/assign-capture.liquid | 24 + .../tests/Liquid/fixtures/assign-capture.php | 12 + .../liquid/tests/Liquid/fixtures/assign.html | 3 + .../tests/Liquid/fixtures/assign.liquid | 3 + .../liquid/tests/Liquid/fixtures/assign.php | 16 + .../liquid/tests/Liquid/fixtures/case.html | 22 + .../liquid/tests/Liquid/fixtures/case.liquid | 11 + .../liquid/tests/Liquid/fixtures/case.php | 14 + .../liquid/tests/Liquid/fixtures/comment.html | 1 + .../tests/Liquid/fixtures/comment.liquid | 1 + .../liquid/tests/Liquid/fixtures/comment.php | 12 + .../liquid/tests/Liquid/fixtures/cycle.html | 9 + .../liquid/tests/Liquid/fixtures/cycle.liquid | 9 + .../liquid/tests/Liquid/fixtures/cycle.php | 12 + .../liquid/tests/Liquid/fixtures/filters.html | 53 + .../tests/Liquid/fixtures/filters.liquid | 50 + .../liquid/tests/Liquid/fixtures/filters.php | 19 + .../liquid/tests/Liquid/fixtures/for.html | 104 + .../liquid/tests/Liquid/fixtures/for.liquid | 41 + .../liquid/tests/Liquid/fixtures/for.php | 22 + .../liquid/tests/Liquid/fixtures/include.html | 2 + .../tests/Liquid/fixtures/include.liquid | 2 + .../liquid/tests/Liquid/fixtures/include.php | 12 + .../tests/Liquid/fixtures/iterable.html | 12 + .../tests/Liquid/fixtures/iterable.liquid | 15 + .../liquid/tests/Liquid/fixtures/iterable.php | 18 + .../liquid/tests/Liquid/fixtures/output.html | 4 + .../tests/Liquid/fixtures/output.liquid | 4 + .../liquid/tests/Liquid/fixtures/output.php | 18 + .../Liquid/fixtures/whitespace-control.html | 7 + .../Liquid/fixtures/whitespace-control.liquid | 17 + .../Liquid/fixtures/whitespace-control.php | 12 + .../tests/Liquid/templates/_mypartial.liquid | 0 .../tests/Liquid/templates/mypartial.tpl | 1 + public/assets/index.js | 6 + public/assets/style.css | 1 + public_html/assets/builder/index.js | 6 + public_html/assets/builder/style.css | 1 + public_html/assets/script/style.css | 6 + public_html/assets/script/style.css.map | 2 +- public_html/assets/script/style.scss | 6 + src/Hura/App.php | 1 + .../components/buildpc/CreateBuildpc.tsx | 0 .../components/buildpc/ListCompare.tsx | 0 .../components/buildpc/PopupBuildpc.tsx | 0 {old/src => src}/components/footer/Footer.tsx | 0 {old/src => src}/components/header/Header.tsx | 0 .../components/product/FormReview.tsx | 0 .../components/product/MemberReview.tsx | 0 .../components/product/ProductDescription.tsx | 0 .../components/product/ProductReview.tsx | 0 .../components/product/SupplierListBox.tsx | 0 src/index.tsx | 23 + src/pages/account/home.php | 1 + src/pages/buildpc/Buildpc.tsx | 112 + src/pages/buildpc/CompareBuildpc.tsx | 112 + src/pages/buildpc/DetailBuildpc.tsx | 424 ++ src/pages/category/detail.php | 1 + src/pages/category/home.php | 1 + src/pages/classifieds/detail.php | 1 + src/pages/classifieds/home.php | 1 + src/pages/faq/detail.php | 1 + src/pages/faq/form.php | 1 + src/pages/faq/home.php | 1 + src/pages/product/detail.php | 1 + src/pages/product/productsave.php | 1 + src/pages/productDetail/ProductDetail.tsx | 888 +++ src/pages/repair/home.php | 1 + src/pages/shop/home.php | 1 + old/tailwind.config.js => tailwind.config.js | 0 template/account/home.html | 106 + template/buildpc/home.html | 2 + template/category/detail.html | 377 ++ template/category/home.html | 90 + template/classifieds/detail.html | 496 ++ template/classifieds/home.html | 392 ++ template/faq/detail.html | 316 + template/faq/form.html | 94 + template/faq/home.html | 193 + template/home/home.html | 237 +- template/product/detail.html | 2 + template/product/productsave.html | 243 + template/repair/home.html | 504 ++ template/shared/footer.html | 8 +- template/shared/header.html | 45 +- template/shop/home.html | 504 ++ template/theme.html | 122 +- old/tsconfig.json => tsconfig.json | 0 old/vite.config.ts => vite.config.ts | 13 + 252 files changed, 35084 insertions(+), 1237 deletions(-) create mode 100644 .vite/deps/@fancyapps_ui.js create mode 100644 .vite/deps/@fancyapps_ui.js.map create mode 100644 .vite/deps/_metadata.json create mode 100644 .vite/deps/chunk-5WRI5ZAA.js create mode 100644 .vite/deps/chunk-5WRI5ZAA.js.map create mode 100644 .vite/deps/chunk-KS2M7ZJI.js create mode 100644 .vite/deps/chunk-KS2M7ZJI.js.map create mode 100644 .vite/deps/chunk-WFLWNDNR.js create mode 100644 .vite/deps/chunk-WFLWNDNR.js.map create mode 100644 .vite/deps/chunk-XLOWEJT4.js create mode 100644 .vite/deps/chunk-XLOWEJT4.js.map create mode 100644 .vite/deps/package.json create mode 100644 .vite/deps/preact-iso.js create mode 100644 .vite/deps/preact-iso.js.map create mode 100644 .vite/deps/preact.js create mode 100644 .vite/deps/preact.js.map create mode 100644 .vite/deps/prerender-2A2BKSYN.js create mode 100644 .vite/deps/prerender-2A2BKSYN.js.map create mode 100644 .vite/deps/react.js create mode 100644 .vite/deps/react.js.map create mode 100644 .vite/deps/swiper_modules.js create mode 100644 .vite/deps/swiper_modules.js.map create mode 100644 .vite/deps/swiper_react.js create mode 100644 .vite/deps/swiper_react.js.map rename old/package-lock.json => package-lock.json (99%) rename old/package.json => package.json (94%) create mode 100644 package/composer.lock create mode 100644 package/vendor/autoload.php create mode 100644 package/vendor/composer/ClassLoader.php create mode 100644 package/vendor/composer/InstalledVersions.php create mode 100644 package/vendor/composer/LICENSE create mode 100644 package/vendor/composer/autoload_classmap.php create mode 100644 package/vendor/composer/autoload_namespaces.php create mode 100644 package/vendor/composer/autoload_psr4.php create mode 100644 package/vendor/composer/autoload_real.php create mode 100644 package/vendor/composer/autoload_static.php create mode 100644 package/vendor/composer/installed.json create mode 100644 package/vendor/composer/installed.php create mode 100644 package/vendor/composer/platform_check.php create mode 100644 package/vendor/liquid/liquid/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 package/vendor/liquid/liquid/.github/workflows/cs.yaml create mode 100644 package/vendor/liquid/liquid/.github/workflows/mt.yaml create mode 100644 package/vendor/liquid/liquid/.github/workflows/tests.yaml create mode 100644 package/vendor/liquid/liquid/.gitignore create mode 100644 package/vendor/liquid/liquid/.php_cs.dist create mode 100644 package/vendor/liquid/liquid/CHANGELOG.md create mode 100644 package/vendor/liquid/liquid/LICENSE create mode 100644 package/vendor/liquid/liquid/README.md create mode 100644 package/vendor/liquid/liquid/composer.json create mode 100644 package/vendor/liquid/liquid/examples/advanced.php create mode 100644 package/vendor/liquid/liquid/examples/block.php create mode 100644 package/vendor/liquid/liquid/examples/filters.php create mode 100644 package/vendor/liquid/liquid/examples/index.php create mode 100644 package/vendor/liquid/liquid/examples/protected/cache/.gitignore create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/base.tpl create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/blocks/child.tpl create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/child.tpl create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/footer.tpl create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/header.tpl create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/honorific.html create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/index.tpl create mode 100644 package/vendor/liquid/liquid/examples/protected/templates/subfooter.tpl create mode 100644 package/vendor/liquid/liquid/examples/simple.php create mode 100644 package/vendor/liquid/liquid/infection.json.dist create mode 100644 package/vendor/liquid/liquid/phpunit.xml.dist create mode 100644 package/vendor/liquid/liquid/src/Liquid/AbstractBlock.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/AbstractTag.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Cache.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Cache/Apc.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Cache/File.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Cache/Local.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Context.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/CustomFilters.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Decision.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Document.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Drop.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/CacheException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/FilesystemException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/MissingFilesystemException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/NotFoundException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/ParseException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/RenderException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Exception/WrongArgumentException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/FileSystem.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/FileSystem/Local.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/FileSystem/Virtual.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Filterbank.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Liquid.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/LiquidException.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/LocalFileSystem.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Regexp.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/StandardFilters.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagAssign.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagBlock.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagBreak.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagCapture.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagCase.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagComment.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagContinue.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagCycle.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagDecrement.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagExtends.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagFor.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagIf.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagIfchanged.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagInclude.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagIncrement.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagPaginate.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagRaw.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagTablerow.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Tag/TagUnless.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Template.php create mode 100644 package/vendor/liquid/liquid/src/Liquid/Variable.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/AbstractBlockTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Cache/ApcTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Cache/FileTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Cache/LocalTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/ContextTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/CustomFiltersTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/CustomTagTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/DropTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/EscapeByDefaultTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/FilterbankTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/FixturesTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/LiquidTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/LocalFileSystemTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/OutputTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/ParsingQuirksTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/RegexpTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/StandardFiltersTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/NoTransformTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagAssignTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagBlockTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagBreakTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaptureTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaseTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagCommentTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagContinueTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagCycleTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagDecrementTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagExtendsTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagForTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfchangedTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncludeTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncrementTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagPaginateTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagRawTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagTablerowTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/Tag/TagUnlessTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/TemplateTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/TestCase.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/TestFileSystem.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/TickTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/VariableResolutionTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/VariableTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/VirtualFileSystemTest.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/cache_dir/.gitignore create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/assign.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/assign.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/assign.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/case.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/case.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/case.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/cycle.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/cycle.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/cycle.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/for.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/for.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/for.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/include.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/include.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/include.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/iterable.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/iterable.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/iterable.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/output.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/output.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/output.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.html create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.php create mode 100644 package/vendor/liquid/liquid/tests/Liquid/templates/_mypartial.liquid create mode 100644 package/vendor/liquid/liquid/tests/Liquid/templates/mypartial.tpl create mode 100644 public/assets/index.js create mode 100644 public/assets/style.css create mode 100644 public_html/assets/builder/index.js create mode 100644 public_html/assets/builder/style.css rename {old/src => src}/components/buildpc/CreateBuildpc.tsx (100%) rename {old/src => src}/components/buildpc/ListCompare.tsx (100%) rename {old/src => src}/components/buildpc/PopupBuildpc.tsx (100%) rename {old/src => src}/components/footer/Footer.tsx (100%) rename {old/src => src}/components/header/Header.tsx (100%) rename {old/src => src}/components/product/FormReview.tsx (100%) rename {old/src => src}/components/product/MemberReview.tsx (100%) rename {old/src => src}/components/product/ProductDescription.tsx (100%) rename {old/src => src}/components/product/ProductReview.tsx (100%) rename {old/src => src}/components/product/SupplierListBox.tsx (100%) create mode 100644 src/index.tsx create mode 100644 src/pages/account/home.php create mode 100644 src/pages/buildpc/Buildpc.tsx create mode 100644 src/pages/buildpc/CompareBuildpc.tsx create mode 100644 src/pages/buildpc/DetailBuildpc.tsx create mode 100644 src/pages/category/detail.php create mode 100644 src/pages/category/home.php create mode 100644 src/pages/classifieds/detail.php create mode 100644 src/pages/classifieds/home.php create mode 100644 src/pages/faq/detail.php create mode 100644 src/pages/faq/form.php create mode 100644 src/pages/faq/home.php create mode 100644 src/pages/product/detail.php create mode 100644 src/pages/product/productsave.php create mode 100644 src/pages/productDetail/ProductDetail.tsx create mode 100644 src/pages/repair/home.php create mode 100644 src/pages/shop/home.php rename old/tailwind.config.js => tailwind.config.js (100%) create mode 100644 template/account/home.html create mode 100644 template/category/detail.html create mode 100644 template/category/home.html create mode 100644 template/classifieds/detail.html create mode 100644 template/classifieds/home.html create mode 100644 template/faq/detail.html create mode 100644 template/faq/form.html create mode 100644 template/faq/home.html create mode 100644 template/product/detail.html create mode 100644 template/product/productsave.html create mode 100644 template/repair/home.html create mode 100644 template/shop/home.html rename old/tsconfig.json => tsconfig.json (100%) rename old/vite.config.ts => vite.config.ts (56%) diff --git a/.vite/deps/@fancyapps_ui.js b/.vite/deps/@fancyapps_ui.js new file mode 100644 index 0000000..7cf70ed --- /dev/null +++ b/.vite/deps/@fancyapps_ui.js @@ -0,0 +1,3081 @@ +import "./chunk-5WRI5ZAA.js"; + +// node_modules/@fancyapps/ui/dist/index.esm.js +var t = (t2, e2 = 1e4) => (t2 = parseFloat(t2 + "") || 0, Math.round((t2 + Number.EPSILON) * e2) / e2); +var e = function(t2) { + if (!(t2 && t2 instanceof Element && t2.offsetParent)) return false; + const e2 = t2.scrollHeight > t2.clientHeight, i2 = window.getComputedStyle(t2).overflowY, n2 = -1 !== i2.indexOf("hidden"), s2 = -1 !== i2.indexOf("visible"); + return e2 && !n2 && !s2; +}; +var i = function(t2, n2 = void 0) { + return !(!t2 || t2 === document.body || n2 && t2 === n2) && (e(t2) ? t2 : i(t2.parentElement, n2)); +}; +var n = function(t2) { + var e2 = new DOMParser().parseFromString(t2, "text/html").body; + if (e2.childElementCount > 1) { + for (var i2 = document.createElement("div"); e2.firstChild; ) i2.appendChild(e2.firstChild); + return i2; + } + return e2.firstChild; +}; +var s = (t2) => `${t2 || ""}`.split(" ").filter((t3) => !!t3); +var o = (t2, e2, i2) => { + t2 && s(e2).forEach((e3) => { + t2.classList.toggle(e3, i2 || false); + }); +}; +var a = class { + constructor(t2) { + Object.defineProperty(this, "pageX", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "pageY", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "clientX", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "clientY", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "id", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "time", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "nativePointer", { enumerable: true, configurable: true, writable: true, value: void 0 }), this.nativePointer = t2, this.pageX = t2.pageX, this.pageY = t2.pageY, this.clientX = t2.clientX, this.clientY = t2.clientY, this.id = self.Touch && t2 instanceof Touch ? t2.identifier : -1, this.time = Date.now(); + } +}; +var r = { passive: false }; +var l = class { + constructor(t2, { start: e2 = () => true, move: i2 = () => { + }, end: n2 = () => { + } }) { + Object.defineProperty(this, "element", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "startCallback", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "moveCallback", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "endCallback", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "currentPointers", { enumerable: true, configurable: true, writable: true, value: [] }), Object.defineProperty(this, "startPointers", { enumerable: true, configurable: true, writable: true, value: [] }), this.element = t2, this.startCallback = e2, this.moveCallback = i2, this.endCallback = n2; + for (const t3 of ["onPointerStart", "onTouchStart", "onMove", "onTouchEnd", "onPointerEnd", "onWindowBlur"]) this[t3] = this[t3].bind(this); + this.element.addEventListener("mousedown", this.onPointerStart, r), this.element.addEventListener("touchstart", this.onTouchStart, r), this.element.addEventListener("touchmove", this.onMove, r), this.element.addEventListener("touchend", this.onTouchEnd), this.element.addEventListener("touchcancel", this.onTouchEnd); + } + onPointerStart(t2) { + if (!t2.buttons || 0 !== t2.button) return; + const e2 = new a(t2); + this.currentPointers.some((t3) => t3.id === e2.id) || this.triggerPointerStart(e2, t2) && (window.addEventListener("mousemove", this.onMove), window.addEventListener("mouseup", this.onPointerEnd), window.addEventListener("blur", this.onWindowBlur)); + } + onTouchStart(t2) { + for (const e2 of Array.from(t2.changedTouches || [])) this.triggerPointerStart(new a(e2), t2); + window.addEventListener("blur", this.onWindowBlur); + } + onMove(t2) { + const e2 = this.currentPointers.slice(), i2 = "changedTouches" in t2 ? Array.from(t2.changedTouches || []).map((t3) => new a(t3)) : [new a(t2)], n2 = []; + for (const t3 of i2) { + const e3 = this.currentPointers.findIndex((e4) => e4.id === t3.id); + e3 < 0 || (n2.push(t3), this.currentPointers[e3] = t3); + } + n2.length && this.moveCallback(t2, this.currentPointers.slice(), e2); + } + onPointerEnd(t2) { + t2.buttons > 0 && 0 !== t2.button || (this.triggerPointerEnd(t2, new a(t2)), window.removeEventListener("mousemove", this.onMove), window.removeEventListener("mouseup", this.onPointerEnd), window.removeEventListener("blur", this.onWindowBlur)); + } + onTouchEnd(t2) { + for (const e2 of Array.from(t2.changedTouches || [])) this.triggerPointerEnd(t2, new a(e2)); + } + triggerPointerStart(t2, e2) { + return !!this.startCallback(e2, t2, this.currentPointers.slice()) && (this.currentPointers.push(t2), this.startPointers.push(t2), true); + } + triggerPointerEnd(t2, e2) { + const i2 = this.currentPointers.findIndex((t3) => t3.id === e2.id); + i2 < 0 || (this.currentPointers.splice(i2, 1), this.startPointers.splice(i2, 1), this.endCallback(t2, e2, this.currentPointers.slice())); + } + onWindowBlur() { + this.clear(); + } + clear() { + for (; this.currentPointers.length; ) { + const t2 = this.currentPointers[this.currentPointers.length - 1]; + this.currentPointers.splice(this.currentPointers.length - 1, 1), this.startPointers.splice(this.currentPointers.length - 1, 1), this.endCallback(new Event("touchend", { bubbles: true, cancelable: true, clientX: t2.clientX, clientY: t2.clientY }), t2, this.currentPointers.slice()); + } + } + stop() { + this.element.removeEventListener("mousedown", this.onPointerStart, r), this.element.removeEventListener("touchstart", this.onTouchStart, r), this.element.removeEventListener("touchmove", this.onMove, r), this.element.removeEventListener("touchend", this.onTouchEnd), this.element.removeEventListener("touchcancel", this.onTouchEnd), window.removeEventListener("mousemove", this.onMove), window.removeEventListener("mouseup", this.onPointerEnd), window.removeEventListener("blur", this.onWindowBlur); + } +}; +function c(t2, e2) { + return e2 ? Math.sqrt(Math.pow(e2.clientX - t2.clientX, 2) + Math.pow(e2.clientY - t2.clientY, 2)) : 0; +} +function h(t2, e2) { + return e2 ? { clientX: (t2.clientX + e2.clientX) / 2, clientY: (t2.clientY + e2.clientY) / 2 } : t2; +} +var d = (t2) => "object" == typeof t2 && null !== t2 && t2.constructor === Object && "[object Object]" === Object.prototype.toString.call(t2); +var u = (t2, ...e2) => { + const i2 = e2.length; + for (let n2 = 0; n2 < i2; n2++) { + const i3 = e2[n2] || {}; + Object.entries(i3).forEach(([e3, i4]) => { + const n3 = Array.isArray(i4) ? [] : {}; + t2[e3] || Object.assign(t2, { [e3]: n3 }), d(i4) ? Object.assign(t2[e3], u(n3, i4)) : Array.isArray(i4) ? Object.assign(t2, { [e3]: [...i4] }) : Object.assign(t2, { [e3]: i4 }); + }); + } + return t2; +}; +var p = function(t2, e2) { + return t2.split(".").reduce((t3, e3) => "object" == typeof t3 ? t3[e3] : void 0, e2); +}; +var f = class { + constructor(t2 = {}) { + Object.defineProperty(this, "options", { enumerable: true, configurable: true, writable: true, value: t2 }), Object.defineProperty(this, "events", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Map() }), this.setOptions(t2); + for (const t3 of Object.getOwnPropertyNames(Object.getPrototypeOf(this))) t3.startsWith("on") && "function" == typeof this[t3] && (this[t3] = this[t3].bind(this)); + } + setOptions(t2) { + this.options = t2 ? u({}, this.constructor.defaults, t2) : {}; + for (const [t3, e2] of Object.entries(this.option("on") || {})) this.on(t3, e2); + } + option(t2, ...e2) { + let i2 = p(t2, this.options); + return i2 && "function" == typeof i2 && (i2 = i2.call(this, this, ...e2)), i2; + } + optionFor(t2, e2, i2, ...n2) { + let s2 = p(e2, t2); + var o2; + "string" != typeof (o2 = s2) || isNaN(o2) || isNaN(parseFloat(o2)) || (s2 = parseFloat(s2)), "true" === s2 && (s2 = true), "false" === s2 && (s2 = false), s2 && "function" == typeof s2 && (s2 = s2.call(this, this, t2, ...n2)); + let a2 = p(e2, this.options); + return a2 && "function" == typeof a2 ? s2 = a2.call(this, this, t2, ...n2, s2) : void 0 === s2 && (s2 = a2), void 0 === s2 ? i2 : s2; + } + cn(t2) { + const e2 = this.options.classes; + return e2 && e2[t2] || ""; + } + localize(t2, e2 = []) { + t2 = String(t2).replace(/\{\{(\w+).?(\w+)?\}\}/g, (t3, e3, i2) => { + let n2 = ""; + return i2 ? n2 = this.option(`${e3[0] + e3.toLowerCase().substring(1)}.l10n.${i2}`) : e3 && (n2 = this.option(`l10n.${e3}`)), n2 || (n2 = t3), n2; + }); + for (let i2 = 0; i2 < e2.length; i2++) t2 = t2.split(e2[i2][0]).join(e2[i2][1]); + return t2 = t2.replace(/\{\{(.*?)\}\}/g, (t3, e3) => e3); + } + on(t2, e2) { + let i2 = []; + "string" == typeof t2 ? i2 = t2.split(" ") : Array.isArray(t2) && (i2 = t2), this.events || (this.events = /* @__PURE__ */ new Map()), i2.forEach((t3) => { + let i3 = this.events.get(t3); + i3 || (this.events.set(t3, []), i3 = []), i3.includes(e2) || i3.push(e2), this.events.set(t3, i3); + }); + } + off(t2, e2) { + let i2 = []; + "string" == typeof t2 ? i2 = t2.split(" ") : Array.isArray(t2) && (i2 = t2), i2.forEach((t3) => { + const i3 = this.events.get(t3); + if (Array.isArray(i3)) { + const t4 = i3.indexOf(e2); + t4 > -1 && i3.splice(t4, 1); + } + }); + } + emit(t2, ...e2) { + [...this.events.get(t2) || []].forEach((t3) => t3(this, ...e2)), "*" !== t2 && this.emit("*", t2, ...e2); + } +}; +Object.defineProperty(f, "version", { enumerable: true, configurable: true, writable: true, value: "5.0.36" }), Object.defineProperty(f, "defaults", { enumerable: true, configurable: true, writable: true, value: {} }); +var g = class extends f { + constructor(t2 = {}) { + super(t2), Object.defineProperty(this, "plugins", { enumerable: true, configurable: true, writable: true, value: {} }); + } + attachPlugins(t2 = {}) { + const e2 = /* @__PURE__ */ new Map(); + for (const [i2, n2] of Object.entries(t2)) { + const t3 = this.option(i2), s2 = this.plugins[i2]; + s2 || false === t3 ? s2 && false === t3 && (s2.detach(), delete this.plugins[i2]) : e2.set(i2, new n2(this, t3 || {})); + } + for (const [t3, i2] of e2) this.plugins[t3] = i2, i2.attach(); + } + detachPlugins(t2) { + t2 = t2 || Object.keys(this.plugins); + for (const e2 of t2) { + const t3 = this.plugins[e2]; + t3 && t3.detach(), delete this.plugins[e2]; + } + return this.emit("detachPlugins"), this; + } +}; +var m; +!function(t2) { + t2[t2.Init = 0] = "Init", t2[t2.Error = 1] = "Error", t2[t2.Ready = 2] = "Ready", t2[t2.Panning = 3] = "Panning", t2[t2.Mousemove = 4] = "Mousemove", t2[t2.Destroy = 5] = "Destroy"; +}(m || (m = {})); +var v = ["a", "b", "c", "d", "e", "f"]; +var b = { PANUP: "Move up", PANDOWN: "Move down", PANLEFT: "Move left", PANRIGHT: "Move right", ZOOMIN: "Zoom in", ZOOMOUT: "Zoom out", TOGGLEZOOM: "Toggle zoom level", TOGGLE1TO1: "Toggle zoom level", ITERATEZOOM: "Toggle zoom level", ROTATECCW: "Rotate counterclockwise", ROTATECW: "Rotate clockwise", FLIPX: "Flip horizontally", FLIPY: "Flip vertically", FITX: "Fit horizontally", FITY: "Fit vertically", RESET: "Reset", TOGGLEFS: "Toggle fullscreen" }; +var y = { content: null, width: "auto", height: "auto", panMode: "drag", touch: true, dragMinThreshold: 3, lockAxis: false, mouseMoveFactor: 1, mouseMoveFriction: 0.12, zoom: true, pinchToZoom: true, panOnlyZoomed: "auto", minScale: 1, maxScale: 2, friction: 0.25, dragFriction: 0.35, decelFriction: 0.05, click: "toggleZoom", dblClick: false, wheel: "zoom", wheelLimit: 7, spinner: true, bounds: "auto", infinite: false, rubberband: true, bounce: true, maxVelocity: 75, transformParent: false, classes: { content: "f-panzoom__content", isLoading: "is-loading", canZoomIn: "can-zoom_in", canZoomOut: "can-zoom_out", isDraggable: "is-draggable", isDragging: "is-dragging", inFullscreen: "in-fullscreen", htmlHasFullscreen: "with-panzoom-in-fullscreen" }, l10n: b }; +var w = ''; +var x = '
' + w + w + "
"; +var E = (t2) => t2 && null !== t2 && t2 instanceof Element && "nodeType" in t2; +var S = (t2, e2) => { + t2 && s(e2).forEach((e3) => { + t2.classList.remove(e3); + }); +}; +var P = (t2, e2) => { + t2 && s(e2).forEach((e3) => { + t2.classList.add(e3); + }); +}; +var C = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 }; +var T = 1e5; +var M = 1e4; +var O = "mousemove"; +var A = "drag"; +var L = "content"; +var z = "auto"; +var R = null; +var k = null; +var I = class _I extends g { + get fits() { + return this.contentRect.width - this.contentRect.fitWidth < 1 && this.contentRect.height - this.contentRect.fitHeight < 1; + } + get isTouchDevice() { + return null === k && (k = window.matchMedia("(hover: none)").matches), k; + } + get isMobile() { + return null === R && (R = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)), R; + } + get panMode() { + return this.options.panMode !== O || this.isTouchDevice ? A : O; + } + get panOnlyZoomed() { + const t2 = this.options.panOnlyZoomed; + return t2 === z ? this.isTouchDevice : t2; + } + get isInfinite() { + return this.option("infinite"); + } + get angle() { + return 180 * Math.atan2(this.current.b, this.current.a) / Math.PI || 0; + } + get targetAngle() { + return 180 * Math.atan2(this.target.b, this.target.a) / Math.PI || 0; + } + get scale() { + const { a: t2, b: e2 } = this.current; + return Math.sqrt(t2 * t2 + e2 * e2) || 1; + } + get targetScale() { + const { a: t2, b: e2 } = this.target; + return Math.sqrt(t2 * t2 + e2 * e2) || 1; + } + get minScale() { + return this.option("minScale") || 1; + } + get fullScale() { + const { contentRect: t2 } = this; + return t2.fullWidth / t2.fitWidth || 1; + } + get maxScale() { + return this.fullScale * (this.option("maxScale") || 1) || 1; + } + get coverScale() { + const { containerRect: t2, contentRect: e2 } = this, i2 = Math.max(t2.height / e2.fitHeight, t2.width / e2.fitWidth) || 1; + return Math.min(this.fullScale, i2); + } + get isScaling() { + return Math.abs(this.targetScale - this.scale) > 1e-5 && !this.isResting; + } + get isContentLoading() { + const t2 = this.content; + return !!(t2 && t2 instanceof HTMLImageElement) && !t2.complete; + } + get isResting() { + if (this.isBouncingX || this.isBouncingY) return false; + for (const t2 of v) { + const e2 = "e" == t2 || "f" === t2 ? 1e-4 : 1e-5; + if (Math.abs(this.target[t2] - this.current[t2]) > e2) return false; + } + return !(!this.ignoreBounds && !this.checkBounds().inBounds); + } + constructor(t2, e2 = {}, i2 = {}) { + var s2; + if (super(e2), Object.defineProperty(this, "pointerTracker", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "resizeObserver", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "updateTimer", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "clickTimer", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "rAF", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "isTicking", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "ignoreBounds", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "isBouncingX", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "isBouncingY", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "clicks", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "trackingPoints", { enumerable: true, configurable: true, writable: true, value: [] }), Object.defineProperty(this, "pwt", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "cwd", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "pmme", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "friction", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: m.Init }), Object.defineProperty(this, "isDragging", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "container", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "content", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "spinner", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "containerRect", { enumerable: true, configurable: true, writable: true, value: { width: 0, height: 0, innerWidth: 0, innerHeight: 0 } }), Object.defineProperty(this, "contentRect", { enumerable: true, configurable: true, writable: true, value: { top: 0, right: 0, bottom: 0, left: 0, fullWidth: 0, fullHeight: 0, fitWidth: 0, fitHeight: 0, width: 0, height: 0 } }), Object.defineProperty(this, "dragStart", { enumerable: true, configurable: true, writable: true, value: { x: 0, y: 0, top: 0, left: 0, time: 0 } }), Object.defineProperty(this, "dragOffset", { enumerable: true, configurable: true, writable: true, value: { x: 0, y: 0, time: 0 } }), Object.defineProperty(this, "current", { enumerable: true, configurable: true, writable: true, value: Object.assign({}, C) }), Object.defineProperty(this, "target", { enumerable: true, configurable: true, writable: true, value: Object.assign({}, C) }), Object.defineProperty(this, "velocity", { enumerable: true, configurable: true, writable: true, value: { a: 0, b: 0, c: 0, d: 0, e: 0, f: 0 } }), Object.defineProperty(this, "lockedAxis", { enumerable: true, configurable: true, writable: true, value: false }), !t2) throw new Error("Container Element Not Found"); + this.container = t2, this.initContent(), this.attachPlugins(Object.assign(Object.assign({}, _I.Plugins), i2)), this.emit("attachPlugins"), this.emit("init"); + const o2 = this.content; + if (o2.addEventListener("load", this.onLoad), o2.addEventListener("error", this.onError), this.isContentLoading) { + if (this.option("spinner")) { + t2.classList.add(this.cn("isLoading")); + const e3 = n(x); + !t2.contains(o2) || o2.parentElement instanceof HTMLPictureElement ? this.spinner = t2.appendChild(e3) : this.spinner = (null === (s2 = o2.parentElement) || void 0 === s2 ? void 0 : s2.insertBefore(e3, o2)) || null; + } + this.emit("beforeLoad"); + } else queueMicrotask(() => { + this.enable(); + }); + } + initContent() { + const { container: t2 } = this, e2 = this.cn(L); + let i2 = this.option(L) || t2.querySelector(`.${e2}`); + if (i2 || (i2 = t2.querySelector("img,picture") || t2.firstElementChild, i2 && P(i2, e2)), i2 instanceof HTMLPictureElement && (i2 = i2.querySelector("img")), !i2) throw new Error("No content found"); + this.content = i2; + } + onLoad() { + const { spinner: t2, container: e2, state: i2 } = this; + t2 && (t2.remove(), this.spinner = null), this.option("spinner") && e2.classList.remove(this.cn("isLoading")), this.emit("afterLoad"), i2 === m.Init ? this.enable() : this.updateMetrics(); + } + onError() { + this.state !== m.Destroy && (this.spinner && (this.spinner.remove(), this.spinner = null), this.stop(), this.detachEvents(), this.state = m.Error, this.emit("error")); + } + getNextScale(t2) { + const { fullScale: e2, targetScale: i2, coverScale: n2, maxScale: s2, minScale: o2 } = this; + let a2 = o2; + switch (t2) { + case "toggleMax": + a2 = i2 - o2 < 0.5 * (s2 - o2) ? s2 : o2; + break; + case "toggleCover": + a2 = i2 - o2 < 0.5 * (n2 - o2) ? n2 : o2; + break; + case "toggleZoom": + a2 = i2 - o2 < 0.5 * (e2 - o2) ? e2 : o2; + break; + case "iterateZoom": + let t3 = [1, e2, s2].sort((t4, e3) => t4 - e3), r2 = t3.findIndex((t4) => t4 > i2 + 1e-5); + a2 = t3[r2] || 1; + } + return a2; + } + attachObserver() { + var t2; + const e2 = () => { + const { container: t3, containerRect: e3 } = this; + return Math.abs(e3.width - t3.getBoundingClientRect().width) > 0.1 || Math.abs(e3.height - t3.getBoundingClientRect().height) > 0.1; + }; + this.resizeObserver || void 0 === window.ResizeObserver || (this.resizeObserver = new ResizeObserver(() => { + this.updateTimer || (e2() ? (this.onResize(), this.isMobile && (this.updateTimer = setTimeout(() => { + e2() && this.onResize(), this.updateTimer = null; + }, 500))) : this.updateTimer && (clearTimeout(this.updateTimer), this.updateTimer = null)); + })), null === (t2 = this.resizeObserver) || void 0 === t2 || t2.observe(this.container); + } + detachObserver() { + var t2; + null === (t2 = this.resizeObserver) || void 0 === t2 || t2.disconnect(); + } + attachEvents() { + const { container: t2 } = this; + t2.addEventListener("click", this.onClick, { passive: false, capture: false }), t2.addEventListener("wheel", this.onWheel, { passive: false }), this.pointerTracker = new l(t2, { start: this.onPointerDown, move: this.onPointerMove, end: this.onPointerUp }), document.addEventListener(O, this.onMouseMove); + } + detachEvents() { + var t2; + const { container: e2 } = this; + e2.removeEventListener("click", this.onClick, { passive: false, capture: false }), e2.removeEventListener("wheel", this.onWheel, { passive: false }), null === (t2 = this.pointerTracker) || void 0 === t2 || t2.stop(), this.pointerTracker = null, document.removeEventListener(O, this.onMouseMove), document.removeEventListener("keydown", this.onKeydown, true), this.clickTimer && (clearTimeout(this.clickTimer), this.clickTimer = null), this.updateTimer && (clearTimeout(this.updateTimer), this.updateTimer = null); + } + animate() { + this.setTargetForce(); + const t2 = this.friction, e2 = this.option("maxVelocity"); + for (const i2 of v) t2 ? (this.velocity[i2] *= 1 - t2, e2 && !this.isScaling && (this.velocity[i2] = Math.max(Math.min(this.velocity[i2], e2), -1 * e2)), this.current[i2] += this.velocity[i2]) : this.current[i2] = this.target[i2]; + this.setTransform(), this.setEdgeForce(), !this.isResting || this.isDragging ? this.rAF = requestAnimationFrame(() => this.animate()) : this.stop("current"); + } + setTargetForce() { + for (const t2 of v) "e" === t2 && this.isBouncingX || "f" === t2 && this.isBouncingY || (this.velocity[t2] = (1 / (1 - this.friction) - 1) * (this.target[t2] - this.current[t2])); + } + checkBounds(t2 = 0, e2 = 0) { + const { current: i2 } = this, n2 = i2.e + t2, s2 = i2.f + e2, o2 = this.getBounds(), { x: a2, y: r2 } = o2, l2 = a2.min, c2 = a2.max, h2 = r2.min, d2 = r2.max; + let u2 = 0, p2 = 0; + return l2 !== 1 / 0 && n2 < l2 ? u2 = l2 - n2 : c2 !== 1 / 0 && n2 > c2 && (u2 = c2 - n2), h2 !== 1 / 0 && s2 < h2 ? p2 = h2 - s2 : d2 !== 1 / 0 && s2 > d2 && (p2 = d2 - s2), Math.abs(u2) < 1e-4 && (u2 = 0), Math.abs(p2) < 1e-4 && (p2 = 0), Object.assign(Object.assign({}, o2), { xDiff: u2, yDiff: p2, inBounds: !u2 && !p2 }); + } + clampTargetBounds() { + const { target: t2 } = this, { x: e2, y: i2 } = this.getBounds(); + e2.min !== 1 / 0 && (t2.e = Math.max(t2.e, e2.min)), e2.max !== 1 / 0 && (t2.e = Math.min(t2.e, e2.max)), i2.min !== 1 / 0 && (t2.f = Math.max(t2.f, i2.min)), i2.max !== 1 / 0 && (t2.f = Math.min(t2.f, i2.max)); + } + calculateContentDim(t2 = this.current) { + const { content: e2, contentRect: i2 } = this, { fitWidth: n2, fitHeight: s2, fullWidth: o2, fullHeight: a2 } = i2; + let r2 = o2, l2 = a2; + if (this.option("zoom") || 0 !== this.angle) { + const i3 = !(e2 instanceof HTMLImageElement) && ("none" === window.getComputedStyle(e2).maxWidth || "none" === window.getComputedStyle(e2).maxHeight), c2 = i3 ? o2 : n2, h2 = i3 ? a2 : s2, d2 = this.getMatrix(t2), u2 = new DOMPoint(0, 0).matrixTransform(d2), p2 = new DOMPoint(0 + c2, 0).matrixTransform(d2), f2 = new DOMPoint(0 + c2, 0 + h2).matrixTransform(d2), g2 = new DOMPoint(0, 0 + h2).matrixTransform(d2), m2 = Math.abs(f2.x - u2.x), v2 = Math.abs(f2.y - u2.y), b2 = Math.abs(g2.x - p2.x), y2 = Math.abs(g2.y - p2.y); + r2 = Math.max(m2, b2), l2 = Math.max(v2, y2); + } + return { contentWidth: r2, contentHeight: l2 }; + } + setEdgeForce() { + if (this.ignoreBounds || this.isDragging || this.panMode === O || this.targetScale < this.scale) return this.isBouncingX = false, void (this.isBouncingY = false); + const { target: t2 } = this, { x: e2, y: i2, xDiff: n2, yDiff: s2 } = this.checkBounds(); + const o2 = this.option("maxVelocity"); + let a2 = this.velocity.e, r2 = this.velocity.f; + 0 !== n2 ? (this.isBouncingX = true, n2 * a2 <= 0 ? a2 += 0.14 * n2 : (a2 = 0.14 * n2, e2.min !== 1 / 0 && (this.target.e = Math.max(t2.e, e2.min)), e2.max !== 1 / 0 && (this.target.e = Math.min(t2.e, e2.max))), o2 && (a2 = Math.max(Math.min(a2, o2), -1 * o2))) : this.isBouncingX = false, 0 !== s2 ? (this.isBouncingY = true, s2 * r2 <= 0 ? r2 += 0.14 * s2 : (r2 = 0.14 * s2, i2.min !== 1 / 0 && (this.target.f = Math.max(t2.f, i2.min)), i2.max !== 1 / 0 && (this.target.f = Math.min(t2.f, i2.max))), o2 && (r2 = Math.max(Math.min(r2, o2), -1 * o2))) : this.isBouncingY = false, this.isBouncingX && (this.velocity.e = a2), this.isBouncingY && (this.velocity.f = r2); + } + enable() { + const { content: t2 } = this, e2 = new DOMMatrixReadOnly(window.getComputedStyle(t2).transform); + for (const t3 of v) this.current[t3] = this.target[t3] = e2[t3]; + this.updateMetrics(), this.attachObserver(), this.attachEvents(), this.state = m.Ready, this.emit("ready"); + } + onClick(t2) { + var e2; + "click" === t2.type && 0 === t2.detail && (this.dragOffset.x = 0, this.dragOffset.y = 0), this.isDragging && (null === (e2 = this.pointerTracker) || void 0 === e2 || e2.clear(), this.trackingPoints = [], this.startDecelAnim()); + const i2 = t2.target; + if (!i2 || t2.defaultPrevented) return; + if (i2.hasAttribute("disabled")) return t2.preventDefault(), void t2.stopPropagation(); + if ((() => { + const t3 = window.getSelection(); + return t3 && "Range" === t3.type; + })() && !i2.closest("button")) return; + const n2 = i2.closest("[data-panzoom-action]"), s2 = i2.closest("[data-panzoom-change]"), o2 = n2 || s2, a2 = o2 && E(o2) ? o2.dataset : null; + if (a2) { + const e3 = a2.panzoomChange, i3 = a2.panzoomAction; + if ((e3 || i3) && t2.preventDefault(), e3) { + let t3 = {}; + try { + t3 = JSON.parse(e3); + } catch (t4) { + console && console.warn("The given data was not valid JSON"); + } + return void this.applyChange(t3); + } + if (i3) return void (this[i3] && this[i3]()); + } + if (Math.abs(this.dragOffset.x) > 3 || Math.abs(this.dragOffset.y) > 3) return t2.preventDefault(), void t2.stopPropagation(); + if (i2.closest("[data-fancybox]")) return; + const r2 = this.content.getBoundingClientRect(), l2 = this.dragStart; + if (l2.time && !this.canZoomOut() && (Math.abs(r2.x - l2.x) > 2 || Math.abs(r2.y - l2.y) > 2)) return; + this.dragStart.time = 0; + const c2 = (e3) => { + this.option("zoom", t2) && e3 && "string" == typeof e3 && /(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(e3) && "function" == typeof this[e3] && (t2.preventDefault(), this[e3]({ event: t2 })); + }, h2 = this.option("click", t2), d2 = this.option("dblClick", t2); + d2 ? (this.clicks++, 1 == this.clicks && (this.clickTimer = setTimeout(() => { + 1 === this.clicks ? (this.emit("click", t2), !t2.defaultPrevented && h2 && c2(h2)) : (this.emit("dblClick", t2), t2.defaultPrevented || c2(d2)), this.clicks = 0, this.clickTimer = null; + }, 350))) : (this.emit("click", t2), !t2.defaultPrevented && h2 && c2(h2)); + } + addTrackingPoint(t2) { + const e2 = this.trackingPoints.filter((t3) => t3.time > Date.now() - 100); + e2.push(t2), this.trackingPoints = e2; + } + onPointerDown(t2, e2, i2) { + var n2; + if (false === this.option("touch", t2)) return false; + this.pwt = 0, this.dragOffset = { x: 0, y: 0, time: 0 }, this.trackingPoints = []; + const s2 = this.content.getBoundingClientRect(); + if (this.dragStart = { x: s2.x, y: s2.y, top: s2.top, left: s2.left, time: Date.now() }, this.clickTimer) return false; + if (this.panMode === O && this.targetScale > 1) return t2.preventDefault(), t2.stopPropagation(), false; + const o2 = t2.composedPath()[0]; + if (!i2.length) { + if (["TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO", "IFRAME"].includes(o2.nodeName) || o2.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]")) return false; + null === (n2 = window.getSelection()) || void 0 === n2 || n2.removeAllRanges(); + } + if ("mousedown" === t2.type) ["A", "BUTTON"].includes(o2.nodeName) || t2.preventDefault(); + else if (Math.abs(this.velocity.a) > 0.3) return false; + return this.target.e = this.current.e, this.target.f = this.current.f, this.stop(), this.isDragging || (this.isDragging = true, this.addTrackingPoint(e2), this.emit("touchStart", t2)), true; + } + onPointerMove(e2, n2, s2) { + if (false === this.option("touch", e2)) return; + if (!this.isDragging) return; + if (n2.length < 2 && this.panOnlyZoomed && t(this.targetScale) <= t(this.minScale)) return; + if (this.emit("touchMove", e2), e2.defaultPrevented) return; + this.addTrackingPoint(n2[0]); + const { content: o2 } = this, a2 = h(s2[0], s2[1]), r2 = h(n2[0], n2[1]); + let l2 = 0, d2 = 0; + if (n2.length > 1) { + const t2 = o2.getBoundingClientRect(); + l2 = a2.clientX - t2.left - 0.5 * t2.width, d2 = a2.clientY - t2.top - 0.5 * t2.height; + } + const u2 = c(s2[0], s2[1]), p2 = c(n2[0], n2[1]); + let f2 = u2 ? p2 / u2 : 1, g2 = r2.clientX - a2.clientX, m2 = r2.clientY - a2.clientY; + this.dragOffset.x += g2, this.dragOffset.y += m2, this.dragOffset.time = Date.now() - this.dragStart.time; + let v2 = t(this.targetScale) === t(this.minScale) && this.option("lockAxis"); + if (v2 && !this.lockedAxis) if ("xy" === v2 || "y" === v2 || "touchmove" === e2.type) { + if (Math.abs(this.dragOffset.x) < 6 && Math.abs(this.dragOffset.y) < 6) return void e2.preventDefault(); + const t2 = Math.abs(180 * Math.atan2(this.dragOffset.y, this.dragOffset.x) / Math.PI); + this.lockedAxis = t2 > 45 && t2 < 135 ? "y" : "x", this.dragOffset.x = 0, this.dragOffset.y = 0, g2 = 0, m2 = 0; + } else this.lockedAxis = v2; + if (i(e2.target, this.content) && (v2 = "x", this.dragOffset.y = 0), v2 && "xy" !== v2 && this.lockedAxis !== v2 && t(this.targetScale) === t(this.minScale)) return; + e2.cancelable && e2.preventDefault(), this.container.classList.add(this.cn("isDragging")); + const b2 = this.checkBounds(g2, m2); + this.option("rubberband") ? ("x" !== this.isInfinite && (b2.xDiff > 0 && g2 < 0 || b2.xDiff < 0 && g2 > 0) && (g2 *= Math.max(0, 0.5 - Math.abs(0.75 / this.contentRect.fitWidth * b2.xDiff))), "y" !== this.isInfinite && (b2.yDiff > 0 && m2 < 0 || b2.yDiff < 0 && m2 > 0) && (m2 *= Math.max(0, 0.5 - Math.abs(0.75 / this.contentRect.fitHeight * b2.yDiff)))) : (b2.xDiff && (g2 = 0), b2.yDiff && (m2 = 0)); + const y2 = this.targetScale, w2 = this.minScale, x2 = this.maxScale; + y2 < 0.5 * w2 && (f2 = Math.max(f2, w2)), y2 > 1.5 * x2 && (f2 = Math.min(f2, x2)), "y" === this.lockedAxis && t(y2) === t(w2) && (g2 = 0), "x" === this.lockedAxis && t(y2) === t(w2) && (m2 = 0), this.applyChange({ originX: l2, originY: d2, panX: g2, panY: m2, scale: f2, friction: this.option("dragFriction"), ignoreBounds: true }); + } + onPointerUp(t2, e2, n2) { + if (n2.length) return this.dragOffset.x = 0, this.dragOffset.y = 0, void (this.trackingPoints = []); + this.container.classList.remove(this.cn("isDragging")), this.isDragging && (this.addTrackingPoint(e2), this.panOnlyZoomed && this.contentRect.width - this.contentRect.fitWidth < 1 && this.contentRect.height - this.contentRect.fitHeight < 1 && (this.trackingPoints = []), i(t2.target, this.content) && "y" === this.lockedAxis && (this.trackingPoints = []), this.emit("touchEnd", t2), this.isDragging = false, this.lockedAxis = false, this.state !== m.Destroy && (t2.defaultPrevented || this.startDecelAnim())); + } + startDecelAnim() { + var e2; + const i2 = this.isScaling; + this.rAF && (cancelAnimationFrame(this.rAF), this.rAF = null), this.isBouncingX = false, this.isBouncingY = false; + for (const t2 of v) this.velocity[t2] = 0; + this.target.e = this.current.e, this.target.f = this.current.f, S(this.container, "is-scaling"), S(this.container, "is-animating"), this.isTicking = false; + const { trackingPoints: n2 } = this, s2 = n2[0], o2 = n2[n2.length - 1]; + let a2 = 0, r2 = 0, l2 = 0; + o2 && s2 && (a2 = o2.clientX - s2.clientX, r2 = o2.clientY - s2.clientY, l2 = o2.time - s2.time); + const c2 = (null === (e2 = window.visualViewport) || void 0 === e2 ? void 0 : e2.scale) || 1; + 1 !== c2 && (a2 *= c2, r2 *= c2); + let h2 = 0, d2 = 0, u2 = 0, p2 = 0, f2 = this.option("decelFriction"); + const g2 = this.targetScale; + if (l2 > 0) { + u2 = Math.abs(a2) > 3 ? a2 / (l2 / 30) : 0, p2 = Math.abs(r2) > 3 ? r2 / (l2 / 30) : 0; + const t2 = this.option("maxVelocity"); + t2 && (u2 = Math.max(Math.min(u2, t2), -1 * t2), p2 = Math.max(Math.min(p2, t2), -1 * t2)); + } + u2 && (h2 = u2 / (1 / (1 - f2) - 1)), p2 && (d2 = p2 / (1 / (1 - f2) - 1)), ("y" === this.option("lockAxis") || "xy" === this.option("lockAxis") && "y" === this.lockedAxis && t(g2) === this.minScale) && (h2 = u2 = 0), ("x" === this.option("lockAxis") || "xy" === this.option("lockAxis") && "x" === this.lockedAxis && t(g2) === this.minScale) && (d2 = p2 = 0); + const m2 = this.dragOffset.x, b2 = this.dragOffset.y, y2 = this.option("dragMinThreshold") || 0; + Math.abs(m2) < y2 && Math.abs(b2) < y2 && (h2 = d2 = 0, u2 = p2 = 0), (this.option("zoom") && (g2 < this.minScale - 1e-5 || g2 > this.maxScale + 1e-5) || i2 && !h2 && !d2) && (f2 = 0.35), this.applyChange({ panX: h2, panY: d2, friction: f2 }), this.emit("decel", u2, p2, m2, b2); + } + onWheel(t2) { + var e2 = [-t2.deltaX || 0, -t2.deltaY || 0, -t2.detail || 0].reduce(function(t3, e3) { + return Math.abs(e3) > Math.abs(t3) ? e3 : t3; + }); + const i2 = Math.max(-1, Math.min(1, e2)); + if (this.emit("wheel", t2, i2), this.panMode === O) return; + if (t2.defaultPrevented) return; + const n2 = this.option("wheel"); + "pan" === n2 ? (t2.preventDefault(), this.panOnlyZoomed && !this.canZoomOut() || this.applyChange({ panX: 2 * -t2.deltaX, panY: 2 * -t2.deltaY, bounce: false })) : "zoom" === n2 && false !== this.option("zoom") && this.zoomWithWheel(t2); + } + onMouseMove(t2) { + this.panWithMouse(t2); + } + onKeydown(t2) { + "Escape" === t2.key && this.toggleFS(); + } + onResize() { + this.updateMetrics(), this.checkBounds().inBounds || this.requestTick(); + } + setTransform() { + this.emit("beforeTransform"); + const { current: e2, target: i2, content: n2, contentRect: s2 } = this, o2 = Object.assign({}, C); + for (const n3 of v) { + const s3 = "e" == n3 || "f" === n3 ? M : T; + o2[n3] = t(e2[n3], s3), Math.abs(i2[n3] - e2[n3]) < ("e" == n3 || "f" === n3 ? 0.51 : 1e-3) && (e2[n3] = i2[n3]); + } + let { a: a2, b: r2, c: l2, d: c2, e: h2, f: d2 } = o2, u2 = `matrix(${a2}, ${r2}, ${l2}, ${c2}, ${h2}, ${d2})`, p2 = n2.parentElement instanceof HTMLPictureElement ? n2.parentElement : n2; + if (this.option("transformParent") && (p2 = p2.parentElement || p2), p2.style.transform === u2) return; + p2.style.transform = u2; + const { contentWidth: f2, contentHeight: g2 } = this.calculateContentDim(); + s2.width = f2, s2.height = g2, this.emit("afterTransform"); + } + updateMetrics(e2 = false) { + var i2; + if (!this || this.state === m.Destroy) return; + if (this.isContentLoading) return; + const n2 = Math.max(1, (null === (i2 = window.visualViewport) || void 0 === i2 ? void 0 : i2.scale) || 1), { container: s2, content: o2 } = this, a2 = o2 instanceof HTMLImageElement, r2 = s2.getBoundingClientRect(), l2 = getComputedStyle(this.container); + let c2 = r2.width * n2, h2 = r2.height * n2; + const d2 = parseFloat(l2.paddingTop) + parseFloat(l2.paddingBottom), u2 = c2 - (parseFloat(l2.paddingLeft) + parseFloat(l2.paddingRight)), p2 = h2 - d2; + this.containerRect = { width: c2, height: h2, innerWidth: u2, innerHeight: p2 }; + const f2 = parseFloat(o2.dataset.width || "") || ((t2) => { + let e3 = 0; + return e3 = t2 instanceof HTMLImageElement ? t2.naturalWidth : t2 instanceof SVGElement ? t2.width.baseVal.value : Math.max(t2.offsetWidth, t2.scrollWidth), e3 || 0; + })(o2), g2 = parseFloat(o2.dataset.height || "") || ((t2) => { + let e3 = 0; + return e3 = t2 instanceof HTMLImageElement ? t2.naturalHeight : t2 instanceof SVGElement ? t2.height.baseVal.value : Math.max(t2.offsetHeight, t2.scrollHeight), e3 || 0; + })(o2); + let v2 = this.option("width", f2) || z, b2 = this.option("height", g2) || z; + const y2 = v2 === z, w2 = b2 === z; + "number" != typeof v2 && (v2 = f2), "number" != typeof b2 && (b2 = g2), y2 && (v2 = f2 * (b2 / g2)), w2 && (b2 = g2 / (f2 / v2)); + let x2 = o2.parentElement instanceof HTMLPictureElement ? o2.parentElement : o2; + this.option("transformParent") && (x2 = x2.parentElement || x2); + const E2 = x2.getAttribute("style") || ""; + x2.style.setProperty("transform", "none", "important"), a2 && (x2.style.width = "", x2.style.height = ""), x2.offsetHeight; + const S2 = o2.getBoundingClientRect(); + let P2 = S2.width * n2, C2 = S2.height * n2, T2 = P2, M2 = C2; + P2 = Math.min(P2, v2), C2 = Math.min(C2, b2), a2 ? { width: P2, height: C2 } = ((t2, e3, i3, n3) => { + const s3 = i3 / t2, o3 = n3 / e3, a3 = Math.min(s3, o3); + return { width: t2 *= a3, height: e3 *= a3 }; + })(v2, b2, P2, C2) : (P2 = Math.min(P2, v2), C2 = Math.min(C2, b2)); + let O2 = 0.5 * (M2 - C2), A2 = 0.5 * (T2 - P2); + this.contentRect = Object.assign(Object.assign({}, this.contentRect), { top: S2.top - r2.top + O2, bottom: r2.bottom - S2.bottom + O2, left: S2.left - r2.left + A2, right: r2.right - S2.right + A2, fitWidth: P2, fitHeight: C2, width: P2, height: C2, fullWidth: v2, fullHeight: b2 }), x2.style.cssText = E2, a2 && (x2.style.width = `${P2}px`, x2.style.height = `${C2}px`), this.setTransform(), true !== e2 && this.emit("refresh"), this.ignoreBounds || (t(this.targetScale) < t(this.minScale) ? this.zoomTo(this.minScale, { friction: 0 }) : this.targetScale > this.maxScale ? this.zoomTo(this.maxScale, { friction: 0 }) : this.state === m.Init || this.checkBounds().inBounds || this.requestTick()), this.updateControls(); + } + calculateBounds() { + const { contentWidth: e2, contentHeight: i2 } = this.calculateContentDim(this.target), { targetScale: n2, lockedAxis: s2 } = this, { fitWidth: o2, fitHeight: a2 } = this.contentRect; + let r2 = 0, l2 = 0, c2 = 0, h2 = 0; + const d2 = this.option("infinite"); + if (true === d2 || s2 && d2 === s2) r2 = -1 / 0, c2 = 1 / 0, l2 = -1 / 0, h2 = 1 / 0; + else { + let { containerRect: s3, contentRect: d3 } = this, u2 = t(o2 * n2, M), p2 = t(a2 * n2, M), { innerWidth: f2, innerHeight: g2 } = s3; + if (s3.width === u2 && (f2 = s3.width), s3.width === p2 && (g2 = s3.height), e2 > f2) { + c2 = 0.5 * (e2 - f2), r2 = -1 * c2; + let t2 = 0.5 * (d3.right - d3.left); + r2 += t2, c2 += t2; + } + if (o2 > f2 && e2 < f2 && (r2 -= 0.5 * (o2 - f2), c2 -= 0.5 * (o2 - f2)), i2 > g2) { + h2 = 0.5 * (i2 - g2), l2 = -1 * h2; + let t2 = 0.5 * (d3.bottom - d3.top); + l2 += t2, h2 += t2; + } + a2 > g2 && i2 < g2 && (r2 -= 0.5 * (a2 - g2), c2 -= 0.5 * (a2 - g2)); + } + return { x: { min: r2, max: c2 }, y: { min: l2, max: h2 } }; + } + getBounds() { + const t2 = this.option("bounds"); + return t2 !== z ? t2 : this.calculateBounds(); + } + updateControls() { + const e2 = this, i2 = e2.container, { panMode: n2, contentRect: s2, targetScale: a2, minScale: r2 } = e2; + let l2 = r2, c2 = e2.option("click") || false; + c2 && (l2 = e2.getNextScale(c2)); + let h2 = e2.canZoomIn(), d2 = e2.canZoomOut(), u2 = n2 === A && !!this.option("touch"), p2 = d2 && u2; + if (u2 && (t(a2) < t(r2) && !this.panOnlyZoomed && (p2 = true), (t(s2.width, 1) > t(s2.fitWidth, 1) || t(s2.height, 1) > t(s2.fitHeight, 1)) && (p2 = true)), t(s2.width * a2, 1) < t(s2.fitWidth, 1) && (p2 = false), n2 === O && (p2 = false), o(i2, this.cn("isDraggable"), p2), !this.option("zoom")) return; + let f2 = h2 && t(l2) > t(a2), g2 = !f2 && !p2 && d2 && t(l2) < t(a2); + o(i2, this.cn("canZoomIn"), f2), o(i2, this.cn("canZoomOut"), g2); + for (const t2 of i2.querySelectorAll("[data-panzoom-action]")) { + let e3 = false, i3 = false; + switch (t2.dataset.panzoomAction) { + case "zoomIn": + h2 ? e3 = true : i3 = true; + break; + case "zoomOut": + d2 ? e3 = true : i3 = true; + break; + case "toggleZoom": + case "iterateZoom": + h2 || d2 ? e3 = true : i3 = true; + const n3 = t2.querySelector("g"); + n3 && (n3.style.display = h2 ? "" : "none"); + } + e3 ? (t2.removeAttribute("disabled"), t2.removeAttribute("tabindex")) : i3 && (t2.setAttribute("disabled", ""), t2.setAttribute("tabindex", "-1")); + } + } + panTo({ x: t2 = this.target.e, y: e2 = this.target.f, scale: i2 = this.targetScale, friction: n2 = this.option("friction"), angle: s2 = 0, originX: o2 = 0, originY: a2 = 0, flipX: r2 = false, flipY: l2 = false, ignoreBounds: c2 = false }) { + this.state !== m.Destroy && this.applyChange({ panX: t2 - this.target.e, panY: e2 - this.target.f, scale: i2 / this.targetScale, angle: s2, originX: o2, originY: a2, friction: n2, flipX: r2, flipY: l2, ignoreBounds: c2 }); + } + applyChange({ panX: e2 = 0, panY: i2 = 0, scale: n2 = 1, angle: s2 = 0, originX: o2 = -this.current.e, originY: a2 = -this.current.f, friction: r2 = this.option("friction"), flipX: l2 = false, flipY: c2 = false, ignoreBounds: h2 = false, bounce: d2 = this.option("bounce") }) { + const u2 = this.state; + if (u2 === m.Destroy) return; + this.rAF && (cancelAnimationFrame(this.rAF), this.rAF = null), this.friction = r2 || 0, this.ignoreBounds = h2; + const { current: p2 } = this, f2 = p2.e, g2 = p2.f, b2 = this.getMatrix(this.target); + let y2 = new DOMMatrix().translate(f2, g2).translate(o2, a2).translate(e2, i2); + if (this.option("zoom")) { + if (!h2) { + const t2 = this.targetScale, e3 = this.minScale, i3 = this.maxScale; + t2 * n2 < e3 && (n2 = e3 / t2), t2 * n2 > i3 && (n2 = i3 / t2); + } + y2 = y2.scale(n2); + } + y2 = y2.translate(-o2, -a2).translate(-f2, -g2).multiply(b2), s2 && (y2 = y2.rotate(s2)), l2 && (y2 = y2.scale(-1, 1)), c2 && (y2 = y2.scale(1, -1)); + for (const e3 of v) "e" !== e3 && "f" !== e3 && (y2[e3] > this.minScale + 1e-5 || y2[e3] < this.minScale - 1e-5) ? this.target[e3] = y2[e3] : this.target[e3] = t(y2[e3], M); + (this.targetScale < this.scale || Math.abs(n2 - 1) > 0.1 || this.panMode === O || false === d2) && !h2 && this.clampTargetBounds(), u2 === m.Init ? this.animate() : this.isResting || (this.state = m.Panning, this.requestTick()); + } + stop(t2 = false) { + if (this.state === m.Init || this.state === m.Destroy) return; + const e2 = this.isTicking; + this.rAF && (cancelAnimationFrame(this.rAF), this.rAF = null), this.isBouncingX = false, this.isBouncingY = false; + for (const e3 of v) this.velocity[e3] = 0, "current" === t2 ? this.current[e3] = this.target[e3] : "target" === t2 && (this.target[e3] = this.current[e3]); + this.setTransform(), S(this.container, "is-scaling"), S(this.container, "is-animating"), this.isTicking = false, this.state = m.Ready, e2 && (this.emit("endAnimation"), this.updateControls()); + } + requestTick() { + this.isTicking || (this.emit("startAnimation"), this.updateControls(), P(this.container, "is-animating"), this.isScaling && P(this.container, "is-scaling")), this.isTicking = true, this.rAF || (this.rAF = requestAnimationFrame(() => this.animate())); + } + panWithMouse(e2, i2 = this.option("mouseMoveFriction")) { + if (this.pmme = e2, this.panMode !== O || !e2) return; + if (t(this.targetScale) <= t(this.minScale)) return; + this.emit("mouseMove", e2); + const { container: n2, containerRect: s2, contentRect: o2 } = this, a2 = s2.width, r2 = s2.height, l2 = n2.getBoundingClientRect(), c2 = (e2.clientX || 0) - l2.left, h2 = (e2.clientY || 0) - l2.top; + let { contentWidth: d2, contentHeight: u2 } = this.calculateContentDim(this.target); + const p2 = this.option("mouseMoveFactor"); + p2 > 1 && (d2 !== a2 && (d2 *= p2), u2 !== r2 && (u2 *= p2)); + let f2 = 0.5 * (d2 - a2) - c2 / a2 * 100 / 100 * (d2 - a2); + f2 += 0.5 * (o2.right - o2.left); + let g2 = 0.5 * (u2 - r2) - h2 / r2 * 100 / 100 * (u2 - r2); + g2 += 0.5 * (o2.bottom - o2.top), this.applyChange({ panX: f2 - this.target.e, panY: g2 - this.target.f, friction: i2 }); + } + zoomWithWheel(e2) { + if (this.state === m.Destroy || this.state === m.Init) return; + const i2 = Date.now(); + if (i2 - this.pwt < 45) return void e2.preventDefault(); + this.pwt = i2; + var n2 = [-e2.deltaX || 0, -e2.deltaY || 0, -e2.detail || 0].reduce(function(t2, e3) { + return Math.abs(e3) > Math.abs(t2) ? e3 : t2; + }); + const s2 = Math.max(-1, Math.min(1, n2)), { targetScale: o2, maxScale: a2, minScale: r2 } = this; + let l2 = o2 * (100 + 45 * s2) / 100; + t(l2) < t(r2) && t(o2) <= t(r2) ? (this.cwd += Math.abs(s2), l2 = r2) : t(l2) > t(a2) && t(o2) >= t(a2) ? (this.cwd += Math.abs(s2), l2 = a2) : (this.cwd = 0, l2 = Math.max(Math.min(l2, a2), r2)), this.cwd > this.option("wheelLimit") || (e2.preventDefault(), t(l2) !== t(o2) && this.zoomTo(l2, { event: e2 })); + } + canZoomIn() { + return this.option("zoom") && (t(this.contentRect.width, 1) < t(this.contentRect.fitWidth, 1) || t(this.targetScale) < t(this.maxScale)); + } + canZoomOut() { + return this.option("zoom") && t(this.targetScale) > t(this.minScale); + } + zoomIn(t2 = 1.25, e2) { + this.zoomTo(this.targetScale * t2, e2); + } + zoomOut(t2 = 0.8, e2) { + this.zoomTo(this.targetScale * t2, e2); + } + zoomToFit(t2) { + this.zoomTo("fit", t2); + } + zoomToCover(t2) { + this.zoomTo("cover", t2); + } + zoomToFull(t2) { + this.zoomTo("full", t2); + } + zoomToMax(t2) { + this.zoomTo("max", t2); + } + toggleZoom(t2) { + this.zoomTo(this.getNextScale("toggleZoom"), t2); + } + toggleMax(t2) { + this.zoomTo(this.getNextScale("toggleMax"), t2); + } + toggleCover(t2) { + this.zoomTo(this.getNextScale("toggleCover"), t2); + } + iterateZoom(t2) { + this.zoomTo("next", t2); + } + zoomTo(t2 = 1, { friction: e2 = z, originX: i2 = z, originY: n2 = z, event: s2 } = {}) { + if (this.isContentLoading || this.state === m.Destroy) return; + const { targetScale: o2, fullScale: a2, maxScale: r2, coverScale: l2 } = this; + if (this.stop(), this.panMode === O && (s2 = this.pmme || s2), s2 || i2 === z || n2 === z) { + const t3 = this.content.getBoundingClientRect(), e3 = this.container.getBoundingClientRect(), o3 = s2 ? s2.clientX : e3.left + 0.5 * e3.width, a3 = s2 ? s2.clientY : e3.top + 0.5 * e3.height; + i2 = o3 - t3.left - 0.5 * t3.width, n2 = a3 - t3.top - 0.5 * t3.height; + } + let c2 = 1; + "number" == typeof t2 ? c2 = t2 : "full" === t2 ? c2 = a2 : "cover" === t2 ? c2 = l2 : "max" === t2 ? c2 = r2 : "fit" === t2 ? c2 = 1 : "next" === t2 && (c2 = this.getNextScale("iterateZoom")), c2 = c2 / o2 || 1, e2 = e2 === z ? c2 > 1 ? 0.15 : 0.25 : e2, this.applyChange({ scale: c2, originX: i2, originY: n2, friction: e2 }), s2 && this.panMode === O && this.panWithMouse(s2, e2); + } + rotateCCW() { + this.applyChange({ angle: -90 }); + } + rotateCW() { + this.applyChange({ angle: 90 }); + } + flipX() { + this.applyChange({ flipX: true }); + } + flipY() { + this.applyChange({ flipY: true }); + } + fitX() { + this.stop("target"); + const { containerRect: t2, contentRect: e2, target: i2 } = this; + this.applyChange({ panX: 0.5 * t2.width - (e2.left + 0.5 * e2.fitWidth) - i2.e, panY: 0.5 * t2.height - (e2.top + 0.5 * e2.fitHeight) - i2.f, scale: t2.width / e2.fitWidth / this.targetScale, originX: 0, originY: 0, ignoreBounds: true }); + } + fitY() { + this.stop("target"); + const { containerRect: t2, contentRect: e2, target: i2 } = this; + this.applyChange({ panX: 0.5 * t2.width - (e2.left + 0.5 * e2.fitWidth) - i2.e, panY: 0.5 * t2.innerHeight - (e2.top + 0.5 * e2.fitHeight) - i2.f, scale: t2.height / e2.fitHeight / this.targetScale, originX: 0, originY: 0, ignoreBounds: true }); + } + toggleFS() { + const { container: t2 } = this, e2 = this.cn("inFullscreen"), i2 = this.cn("htmlHasFullscreen"); + t2.classList.toggle(e2); + const n2 = t2.classList.contains(e2); + n2 ? (document.documentElement.classList.add(i2), document.addEventListener("keydown", this.onKeydown, true)) : (document.documentElement.classList.remove(i2), document.removeEventListener("keydown", this.onKeydown, true)), this.updateMetrics(), this.emit(n2 ? "enterFS" : "exitFS"); + } + getMatrix(t2 = this.current) { + const { a: e2, b: i2, c: n2, d: s2, e: o2, f: a2 } = t2; + return new DOMMatrix([e2, i2, n2, s2, o2, a2]); + } + reset(t2) { + if (this.state !== m.Init && this.state !== m.Destroy) { + this.stop("current"); + for (const t3 of v) this.target[t3] = C[t3]; + this.target.a = this.minScale, this.target.d = this.minScale, this.clampTargetBounds(), this.isResting || (this.friction = void 0 === t2 ? this.option("friction") : t2, this.state = m.Panning, this.requestTick()); + } + } + destroy() { + this.stop(), this.state = m.Destroy, this.detachEvents(), this.detachObserver(); + const { container: t2, content: e2 } = this, i2 = this.option("classes") || {}; + for (const e3 of Object.values(i2)) t2.classList.remove(e3 + ""); + e2 && (e2.removeEventListener("load", this.onLoad), e2.removeEventListener("error", this.onError)), this.detachPlugins(); + } +}; +Object.defineProperty(I, "defaults", { enumerable: true, configurable: true, writable: true, value: y }), Object.defineProperty(I, "Plugins", { enumerable: true, configurable: true, writable: true, value: {} }); +var D = function(t2, e2) { + let i2 = true; + return (...n2) => { + i2 && (i2 = false, t2(...n2), setTimeout(() => { + i2 = true; + }, e2)); + }; +}; +var F = (t2, e2) => { + let i2 = []; + return t2.childNodes.forEach((t3) => { + t3.nodeType !== Node.ELEMENT_NODE || e2 && !t3.matches(e2) || i2.push(t3); + }), i2; +}; +var j = { viewport: null, track: null, enabled: true, slides: [], axis: "x", transition: "fade", preload: 1, slidesPerPage: "auto", initialPage: 0, friction: 0.12, Panzoom: { decelFriction: 0.12 }, center: true, infinite: true, fill: true, dragFree: false, adaptiveHeight: false, direction: "ltr", classes: { container: "f-carousel", viewport: "f-carousel__viewport", track: "f-carousel__track", slide: "f-carousel__slide", isLTR: "is-ltr", isRTL: "is-rtl", isHorizontal: "is-horizontal", isVertical: "is-vertical", inTransition: "in-transition", isSelected: "is-selected" }, l10n: { NEXT: "Next slide", PREV: "Previous slide", GOTO: "Go to slide #%d" } }; +var B; +!function(t2) { + t2[t2.Init = 0] = "Init", t2[t2.Ready = 1] = "Ready", t2[t2.Destroy = 2] = "Destroy"; +}(B || (B = {})); +var H = (t2) => { + if ("string" == typeof t2 || t2 instanceof HTMLElement) t2 = { html: t2 }; + else { + const e2 = t2.thumb; + void 0 !== e2 && ("string" == typeof e2 && (t2.thumbSrc = e2), e2 instanceof HTMLImageElement && (t2.thumbEl = e2, t2.thumbElSrc = e2.src, t2.thumbSrc = e2.src), delete t2.thumb); + } + return Object.assign({ html: "", el: null, isDom: false, class: "", customClass: "", index: -1, dim: 0, gap: 0, pos: 0, transition: false }, t2); +}; +var N = (t2 = {}) => Object.assign({ index: -1, slides: [], dim: 0, pos: -1 }, t2); +var _ = class extends f { + constructor(t2, e2) { + super(e2), Object.defineProperty(this, "instance", { enumerable: true, configurable: true, writable: true, value: t2 }); + } + attach() { + } + detach() { + } +}; +var $ = { classes: { list: "f-carousel__dots", isDynamic: "is-dynamic", hasDots: "has-dots", dot: "f-carousel__dot", isBeforePrev: "is-before-prev", isPrev: "is-prev", isCurrent: "is-current", isNext: "is-next", isAfterNext: "is-after-next" }, dotTpl: '', dynamicFrom: 11, maxCount: 1 / 0, minCount: 2 }; +var W = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "isDynamic", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "list", { enumerable: true, configurable: true, writable: true, value: null }); + } + onRefresh() { + this.refresh(); + } + build() { + let t2 = this.list; + if (!t2) { + t2 = document.createElement("ul"), P(t2, this.cn("list")), t2.setAttribute("role", "tablist"); + const e2 = this.instance.container; + e2.appendChild(t2), P(e2, this.cn("hasDots")), this.list = t2; + } + return t2; + } + refresh() { + var t2; + const e2 = this.instance.pages.length, i2 = Math.min(2, this.option("minCount")), n2 = Math.max(2e3, this.option("maxCount")), s2 = this.option("dynamicFrom"); + if (e2 < i2 || e2 > n2) return void this.cleanup(); + const a2 = "number" == typeof s2 && e2 > 5 && e2 >= s2, r2 = !this.list || this.isDynamic !== a2 || this.list.children.length !== e2; + r2 && this.cleanup(); + const l2 = this.build(); + if (o(l2, this.cn("isDynamic"), !!a2), r2) for (let t3 = 0; t3 < e2; t3++) l2.append(this.createItem(t3)); + let c2, h2 = 0; + for (const e3 of [...l2.children]) { + const i3 = h2 === this.instance.page; + i3 && (c2 = e3), o(e3, this.cn("isCurrent"), i3), null === (t2 = e3.children[0]) || void 0 === t2 || t2.setAttribute("aria-selected", i3 ? "true" : "false"); + for (const t3 of ["isBeforePrev", "isPrev", "isNext", "isAfterNext"]) S(e3, this.cn(t3)); + h2++; + } + if (c2 = c2 || l2.firstChild, a2 && c2) { + const t3 = c2.previousElementSibling, e3 = t3 && t3.previousElementSibling; + P(t3, this.cn("isPrev")), P(e3, this.cn("isBeforePrev")); + const i3 = c2.nextElementSibling, n3 = i3 && i3.nextElementSibling; + P(i3, this.cn("isNext")), P(n3, this.cn("isAfterNext")); + } + this.isDynamic = a2; + } + createItem(t2 = 0) { + var e2; + const i2 = document.createElement("li"); + i2.setAttribute("role", "presentation"); + const s2 = n(this.instance.localize(this.option("dotTpl"), [["%d", t2 + 1]]).replace(/\%i/g, t2 + "")); + return i2.appendChild(s2), null === (e2 = i2.children[0]) || void 0 === e2 || e2.setAttribute("role", "tab"), i2; + } + cleanup() { + this.list && (this.list.remove(), this.list = null), this.isDynamic = false, S(this.instance.container, this.cn("hasDots")); + } + attach() { + this.instance.on(["refresh", "change"], this.onRefresh); + } + detach() { + this.instance.off(["refresh", "change"], this.onRefresh), this.cleanup(); + } +}; +Object.defineProperty(W, "defaults", { enumerable: true, configurable: true, writable: true, value: $ }); +var X = "disabled"; +var q = "next"; +var Y = "prev"; +var V = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "container", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "prev", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "next", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "isDom", { enumerable: true, configurable: true, writable: true, value: false }); + } + onRefresh() { + const t2 = this.instance, e2 = t2.pages.length, i2 = t2.page; + if (e2 < 2) return void this.cleanup(); + this.build(); + let n2 = this.prev, s2 = this.next; + n2 && s2 && (n2.removeAttribute(X), s2.removeAttribute(X), t2.isInfinite || (i2 <= 0 && n2.setAttribute(X, ""), i2 >= e2 - 1 && s2.setAttribute(X, ""))); + } + addBtn(t2) { + var e2; + const i2 = this.instance, n2 = document.createElement("button"); + n2.setAttribute("tabindex", "0"), n2.setAttribute("title", i2.localize(`{{${t2.toUpperCase()}}}`)), P(n2, this.cn("button") + " " + this.cn(t2 === q ? "isNext" : "isPrev")); + const s2 = i2.isRTL ? t2 === q ? Y : q : t2; + var o2; + return n2.innerHTML = i2.localize(this.option(`${s2}Tpl`)), n2.dataset[`carousel${o2 = t2, o2 ? o2.match("^[a-z]") ? o2.charAt(0).toUpperCase() + o2.substring(1) : o2 : ""}`] = "true", null === (e2 = this.container) || void 0 === e2 || e2.appendChild(n2), n2; + } + build() { + const t2 = this.instance.container, e2 = this.cn("container"); + let { container: i2, prev: n2, next: s2 } = this; + i2 || (i2 = t2.querySelector("." + e2), this.isDom = !!i2), i2 || (i2 = document.createElement("div"), P(i2, e2), t2.appendChild(i2)), this.container = i2, s2 || (s2 = i2.querySelector("[data-carousel-next]")), s2 || (s2 = this.addBtn(q)), this.next = s2, n2 || (n2 = i2.querySelector("[data-carousel-prev]")), n2 || (n2 = this.addBtn(Y)), this.prev = n2; + } + cleanup() { + this.isDom || (this.prev && this.prev.remove(), this.next && this.next.remove(), this.container && this.container.remove()), this.prev = null, this.next = null, this.container = null, this.isDom = false; + } + attach() { + this.instance.on(["refresh", "change"], this.onRefresh); + } + detach() { + this.instance.off(["refresh", "change"], this.onRefresh), this.cleanup(); + } +}; +Object.defineProperty(V, "defaults", { enumerable: true, configurable: true, writable: true, value: { classes: { container: "f-carousel__nav", button: "f-button", isNext: "is-next", isPrev: "is-prev" }, nextTpl: '', prevTpl: '' } }); +var Z = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "selectedIndex", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "target", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "nav", { enumerable: true, configurable: true, writable: true, value: null }); + } + addAsTargetFor(t2) { + this.target = this.instance, this.nav = t2, this.attachEvents(); + } + addAsNavFor(t2) { + this.nav = this.instance, this.target = t2, this.attachEvents(); + } + attachEvents() { + const { nav: t2, target: e2 } = this; + t2 && e2 && (t2.options.initialSlide = e2.options.initialPage, t2.state === B.Ready ? this.onNavReady(t2) : t2.on("ready", this.onNavReady), e2.state === B.Ready ? this.onTargetReady(e2) : e2.on("ready", this.onTargetReady)); + } + onNavReady(t2) { + t2.on("createSlide", this.onNavCreateSlide), t2.on("Panzoom.click", this.onNavClick), t2.on("Panzoom.touchEnd", this.onNavTouch), this.onTargetChange(); + } + onTargetReady(t2) { + t2.on("change", this.onTargetChange), t2.on("Panzoom.refresh", this.onTargetChange), this.onTargetChange(); + } + onNavClick(t2, e2, i2) { + this.onNavTouch(t2, t2.panzoom, i2); + } + onNavTouch(t2, e2, i2) { + var n2, s2; + if (Math.abs(e2.dragOffset.x) > 3 || Math.abs(e2.dragOffset.y) > 3) return; + const o2 = i2.target, { nav: a2, target: r2 } = this; + if (!a2 || !r2 || !o2) return; + const l2 = o2.closest("[data-index]"); + if (i2.stopPropagation(), i2.preventDefault(), !l2) return; + const c2 = parseInt(l2.dataset.index || "", 10) || 0, h2 = r2.getPageForSlide(c2), d2 = a2.getPageForSlide(c2); + a2.slideTo(d2), r2.slideTo(h2, { friction: (null === (s2 = null === (n2 = this.nav) || void 0 === n2 ? void 0 : n2.plugins) || void 0 === s2 ? void 0 : s2.Sync.option("friction")) || 0 }), this.markSelectedSlide(c2); + } + onNavCreateSlide(t2, e2) { + e2.index === this.selectedIndex && this.markSelectedSlide(e2.index); + } + onTargetChange() { + var t2, e2; + const { target: i2, nav: n2 } = this; + if (!i2 || !n2) return; + if (n2.state !== B.Ready || i2.state !== B.Ready) return; + const s2 = null === (e2 = null === (t2 = i2.pages[i2.page]) || void 0 === t2 ? void 0 : t2.slides[0]) || void 0 === e2 ? void 0 : e2.index, o2 = n2.getPageForSlide(s2); + this.markSelectedSlide(s2), n2.slideTo(o2, null === n2.prevPage && null === i2.prevPage ? { friction: 0 } : void 0); + } + markSelectedSlide(t2) { + const e2 = this.nav; + e2 && e2.state === B.Ready && (this.selectedIndex = t2, [...e2.slides].map((e3) => { + e3.el && e3.el.classList[e3.index === t2 ? "add" : "remove"]("is-nav-selected"); + })); + } + attach() { + const t2 = this; + let e2 = t2.options.target, i2 = t2.options.nav; + e2 ? t2.addAsNavFor(e2) : i2 && t2.addAsTargetFor(i2); + } + detach() { + const t2 = this, e2 = t2.nav, i2 = t2.target; + e2 && (e2.off("ready", t2.onNavReady), e2.off("createSlide", t2.onNavCreateSlide), e2.off("Panzoom.click", t2.onNavClick), e2.off("Panzoom.touchEnd", t2.onNavTouch)), t2.nav = null, i2 && (i2.off("ready", t2.onTargetReady), i2.off("refresh", t2.onTargetChange), i2.off("change", t2.onTargetChange)), t2.target = null; + } +}; +Object.defineProperty(Z, "defaults", { enumerable: true, configurable: true, writable: true, value: { friction: 0.35 } }); +var U = { Navigation: V, Dots: W, Sync: Z }; +var G = "animationend"; +var K = "isSelected"; +var J = "slide"; +var Q = class _Q extends g { + get axis() { + return this.isHorizontal ? "e" : "f"; + } + get isEnabled() { + return this.state === B.Ready; + } + get isInfinite() { + let t2 = false; + const { contentDim: e2, viewportDim: i2, pages: n2, slides: s2 } = this, o2 = s2[0]; + return n2.length >= 2 && o2 && e2 + o2.dim >= i2 && (t2 = this.option("infinite")), t2; + } + get isRTL() { + return "rtl" === this.option("direction"); + } + get isHorizontal() { + return "x" === this.option("axis"); + } + constructor(t2, e2 = {}, i2 = {}) { + if (super(), Object.defineProperty(this, "bp", { enumerable: true, configurable: true, writable: true, value: "" }), Object.defineProperty(this, "lp", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "userOptions", { enumerable: true, configurable: true, writable: true, value: {} }), Object.defineProperty(this, "userPlugins", { enumerable: true, configurable: true, writable: true, value: {} }), Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: B.Init }), Object.defineProperty(this, "page", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "prevPage", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "container", { enumerable: true, configurable: true, writable: true, value: void 0 }), Object.defineProperty(this, "viewport", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "track", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "slides", { enumerable: true, configurable: true, writable: true, value: [] }), Object.defineProperty(this, "pages", { enumerable: true, configurable: true, writable: true, value: [] }), Object.defineProperty(this, "panzoom", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "inTransition", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Set() }), Object.defineProperty(this, "contentDim", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "viewportDim", { enumerable: true, configurable: true, writable: true, value: 0 }), "string" == typeof t2 && (t2 = document.querySelector(t2)), !t2 || !E(t2)) throw new Error("No Element found"); + this.container = t2, this.slideNext = D(this.slideNext.bind(this), 150), this.slidePrev = D(this.slidePrev.bind(this), 150), this.userOptions = e2, this.userPlugins = i2, queueMicrotask(() => { + this.processOptions(); + }); + } + processOptions() { + var t2, e2; + const i2 = u({}, _Q.defaults, this.userOptions); + let n2 = ""; + const s2 = i2.breakpoints; + if (s2 && d(s2)) for (const [t3, e3] of Object.entries(s2)) window.matchMedia(t3).matches && d(e3) && (n2 += t3, u(i2, e3)); + n2 === this.bp && this.state !== B.Init || (this.bp = n2, this.state === B.Ready && (i2.initialSlide = (null === (e2 = null === (t2 = this.pages[this.page]) || void 0 === t2 ? void 0 : t2.slides[0]) || void 0 === e2 ? void 0 : e2.index) || 0), this.state !== B.Init && this.destroy(), super.setOptions(i2), false === this.option("enabled") ? this.attachEvents() : setTimeout(() => { + this.init(); + }, 0)); + } + init() { + this.state = B.Init, this.emit("init"), this.attachPlugins(Object.assign(Object.assign({}, _Q.Plugins), this.userPlugins)), this.emit("attachPlugins"), this.initLayout(), this.initSlides(), this.updateMetrics(), this.setInitialPosition(), this.initPanzoom(), this.attachEvents(), this.state = B.Ready, this.emit("ready"); + } + initLayout() { + const { container: t2 } = this, e2 = this.option("classes"); + P(t2, this.cn("container")), o(t2, e2.isLTR, !this.isRTL), o(t2, e2.isRTL, this.isRTL), o(t2, e2.isVertical, !this.isHorizontal), o(t2, e2.isHorizontal, this.isHorizontal); + let i2 = this.option("viewport") || t2.querySelector(`.${e2.viewport}`); + i2 || (i2 = document.createElement("div"), P(i2, e2.viewport), i2.append(...F(t2, `.${e2.slide}`)), t2.prepend(i2)), i2.addEventListener("scroll", this.onScroll); + let n2 = this.option("track") || t2.querySelector(`.${e2.track}`); + n2 || (n2 = document.createElement("div"), P(n2, e2.track), n2.append(...Array.from(i2.childNodes))), n2.setAttribute("aria-live", "polite"), i2.contains(n2) || i2.prepend(n2), this.viewport = i2, this.track = n2, this.emit("initLayout"); + } + initSlides() { + const { track: t2 } = this; + if (!t2) return; + const e2 = [...this.slides], i2 = []; + [...F(t2, `.${this.cn(J)}`)].forEach((t3) => { + if (E(t3)) { + const e3 = H({ el: t3, isDom: true, index: this.slides.length }); + i2.push(e3); + } + }); + for (let t3 of [...this.option("slides", []) || [], ...e2]) i2.push(H(t3)); + this.slides = i2; + for (let t3 = 0; t3 < this.slides.length; t3++) this.slides[t3].index = t3; + for (const t3 of i2) this.emit("beforeInitSlide", t3, t3.index), this.emit("initSlide", t3, t3.index); + this.emit("initSlides"); + } + setInitialPage() { + const t2 = this.option("initialSlide"); + this.page = "number" == typeof t2 ? this.getPageForSlide(t2) : parseInt(this.option("initialPage", 0) + "", 10) || 0; + } + setInitialPosition() { + const { track: t2, pages: e2, isHorizontal: i2 } = this; + if (!t2 || !e2.length) return; + let n2 = this.page; + e2[n2] || (this.page = n2 = 0); + const s2 = (e2[n2].pos || 0) * (this.isRTL && i2 ? 1 : -1), o2 = i2 ? `${s2}px` : "0", a2 = i2 ? "0" : `${s2}px`; + t2.style.transform = `translate3d(${o2}, ${a2}, 0) scale(1)`, this.option("adaptiveHeight") && this.setViewportHeight(); + } + initPanzoom() { + this.panzoom && (this.panzoom.destroy(), this.panzoom = null); + const t2 = this.option("Panzoom") || {}; + this.panzoom = new I(this.viewport, u({}, { content: this.track, zoom: false, panOnlyZoomed: false, lockAxis: this.isHorizontal ? "x" : "y", infinite: this.isInfinite, click: false, dblClick: false, touch: (t3) => !(this.pages.length < 2 && !t3.options.infinite), bounds: () => this.getBounds(), maxVelocity: (t3) => Math.abs(t3.target[this.axis] - t3.current[this.axis]) < 2 * this.viewportDim ? 100 : 0 }, t2)), this.panzoom.on("*", (t3, e2, ...i2) => { + this.emit(`Panzoom.${e2}`, t3, ...i2); + }), this.panzoom.on("decel", this.onDecel), this.panzoom.on("refresh", this.onRefresh), this.panzoom.on("beforeTransform", this.onBeforeTransform), this.panzoom.on("endAnimation", this.onEndAnimation); + } + attachEvents() { + const t2 = this.container; + t2 && (t2.addEventListener("click", this.onClick, { passive: false, capture: false }), t2.addEventListener("slideTo", this.onSlideTo)), window.addEventListener("resize", this.onResize); + } + createPages() { + let t2 = []; + const { contentDim: e2, viewportDim: i2 } = this; + let n2 = this.option("slidesPerPage"); + n2 = ("auto" === n2 || e2 <= i2) && false !== this.option("fill") ? 1 / 0 : parseFloat(n2 + ""); + let s2 = 0, o2 = 0, a2 = 0; + for (const e3 of this.slides) (!t2.length || o2 + e3.dim - i2 > 0.05 || a2 >= n2) && (t2.push(N()), s2 = t2.length - 1, o2 = 0, a2 = 0), t2[s2].slides.push(e3), o2 += e3.dim + e3.gap, a2++; + return t2; + } + processPages() { + const e2 = this.pages, { contentDim: i2, viewportDim: n2, isInfinite: s2 } = this, o2 = this.option("center"), a2 = this.option("fill"), r2 = a2 && o2 && i2 > n2 && !s2; + if (e2.forEach((t2, e3) => { + var s3; + t2.index = e3, t2.pos = (null === (s3 = t2.slides[0]) || void 0 === s3 ? void 0 : s3.pos) || 0, t2.dim = 0; + for (const [e4, i3] of t2.slides.entries()) t2.dim += i3.dim, e4 < t2.slides.length - 1 && (t2.dim += i3.gap); + r2 && t2.pos + 0.5 * t2.dim < 0.5 * n2 ? t2.pos = 0 : r2 && t2.pos + 0.5 * t2.dim >= i2 - 0.5 * n2 ? t2.pos = i2 - n2 : o2 && (t2.pos += -0.5 * (n2 - t2.dim)); + }), e2.forEach((e3) => { + a2 && !s2 && i2 > n2 && (e3.pos = Math.max(e3.pos, 0), e3.pos = Math.min(e3.pos, i2 - n2)), e3.pos = t(e3.pos, 1e3), e3.dim = t(e3.dim, 1e3), Math.abs(e3.pos) <= 0.1 && (e3.pos = 0); + }), s2) return e2; + const l2 = []; + let c2; + return e2.forEach((t2) => { + const e3 = Object.assign({}, t2); + c2 && e3.pos === c2.pos ? (c2.dim += e3.dim, c2.slides = [...c2.slides, ...e3.slides]) : (e3.index = l2.length, c2 = e3, l2.push(e3)); + }), l2; + } + getPageFromIndex(t2 = 0) { + const e2 = this.pages.length; + let i2; + return t2 = parseInt((t2 || 0).toString()) || 0, i2 = this.isInfinite ? (t2 % e2 + e2) % e2 : Math.max(Math.min(t2, e2 - 1), 0), i2; + } + getSlideMetrics(e2) { + var i2, n2; + const s2 = this.isHorizontal ? "width" : "height"; + let o2 = 0, a2 = 0, r2 = e2.el; + const l2 = !(!r2 || r2.parentNode); + if (r2 ? o2 = parseFloat(r2.dataset[s2] || "") || 0 : (r2 = document.createElement("div"), r2.style.visibility = "hidden", (this.track || document.body).prepend(r2)), P(r2, this.cn(J) + " " + e2.class + " " + e2.customClass), o2) r2.style[s2] = `${o2}px`, r2.style["width" === s2 ? "height" : "width"] = ""; + else { + l2 && (this.track || document.body).prepend(r2), o2 = r2.getBoundingClientRect()[s2] * Math.max(1, (null === (i2 = window.visualViewport) || void 0 === i2 ? void 0 : i2.scale) || 1); + let t2 = r2[this.isHorizontal ? "offsetWidth" : "offsetHeight"]; + t2 - 1 > o2 && (o2 = t2); + } + const c2 = getComputedStyle(r2); + return "content-box" === c2.boxSizing && (this.isHorizontal ? (o2 += parseFloat(c2.paddingLeft) || 0, o2 += parseFloat(c2.paddingRight) || 0) : (o2 += parseFloat(c2.paddingTop) || 0, o2 += parseFloat(c2.paddingBottom) || 0)), a2 = parseFloat(c2[this.isHorizontal ? "marginRight" : "marginBottom"]) || 0, l2 ? null === (n2 = r2.parentElement) || void 0 === n2 || n2.removeChild(r2) : e2.el || r2.remove(), { dim: t(o2, 1e3), gap: t(a2, 1e3) }; + } + getBounds() { + const { isInfinite: t2, isRTL: e2, isHorizontal: i2, pages: n2 } = this; + let s2 = { min: 0, max: 0 }; + if (t2) s2 = { min: -1 / 0, max: 1 / 0 }; + else if (n2.length) { + const t3 = n2[0].pos, o2 = n2[n2.length - 1].pos; + s2 = e2 && i2 ? { min: t3, max: o2 } : { min: -1 * o2, max: -1 * t3 }; + } + return { x: i2 ? s2 : { min: 0, max: 0 }, y: i2 ? { min: 0, max: 0 } : s2 }; + } + repositionSlides() { + let e2, { isHorizontal: i2, isRTL: n2, isInfinite: s2, viewport: o2, viewportDim: a2, contentDim: r2, page: l2, pages: c2, slides: h2, panzoom: d2 } = this, u2 = 0, p2 = 0, f2 = 0, g2 = 0; + d2 ? g2 = -1 * d2.current[this.axis] : c2[l2] && (g2 = c2[l2].pos || 0), e2 = i2 ? n2 ? "right" : "left" : "top", n2 && i2 && (g2 *= -1); + for (const i3 of h2) { + const n3 = i3.el; + n3 ? ("top" === e2 ? (n3.style.right = "", n3.style.left = "") : n3.style.top = "", i3.index !== u2 ? n3.style[e2] = 0 === p2 ? "" : `${t(p2, 1e3)}px` : n3.style[e2] = "", f2 += i3.dim + i3.gap, u2++) : p2 += i3.dim + i3.gap; + } + if (s2 && f2 && o2) { + let n3 = getComputedStyle(o2), s3 = "padding", l3 = i2 ? "Right" : "Bottom", c3 = parseFloat(n3[s3 + (i2 ? "Left" : "Top")]); + g2 -= c3, a2 += c3, a2 += parseFloat(n3[s3 + l3]); + for (const i3 of h2) i3.el && (t(i3.pos) < t(a2) && t(i3.pos + i3.dim + i3.gap) < t(g2) && t(g2) > t(r2 - a2) && (i3.el.style[e2] = `${t(p2 + f2, 1e3)}px`), t(i3.pos + i3.gap) >= t(r2 - a2) && t(i3.pos) > t(g2 + a2) && t(g2) < t(a2) && (i3.el.style[e2] = `-${t(f2, 1e3)}px`)); + } + let m2, v2, b2 = [...this.inTransition]; + if (b2.length > 1 && (m2 = c2[b2[0]], v2 = c2[b2[1]]), m2 && v2) { + let i3 = 0; + for (const n3 of h2) n3.el ? this.inTransition.has(n3.index) && m2.slides.indexOf(n3) < 0 && (n3.el.style[e2] = `${t(i3 + (m2.pos - v2.pos), 1e3)}px`) : i3 += n3.dim + n3.gap; + } + } + createSlideEl(t2) { + const { track: e2, slides: i2 } = this; + if (!e2 || !t2) return; + if (t2.el && t2.el.parentNode) return; + const n2 = t2.el || document.createElement("div"); + P(n2, this.cn(J)), P(n2, t2.class), P(n2, t2.customClass); + const s2 = t2.html; + s2 && (s2 instanceof HTMLElement ? n2.appendChild(s2) : n2.innerHTML = t2.html + ""); + const o2 = []; + i2.forEach((t3, e3) => { + t3.el && o2.push(e3); + }); + const a2 = t2.index; + let r2 = null; + if (o2.length) { + r2 = i2[o2.reduce((t3, e3) => Math.abs(e3 - a2) < Math.abs(t3 - a2) ? e3 : t3)]; + } + const l2 = r2 && r2.el && r2.el.parentNode ? r2.index < t2.index ? r2.el.nextSibling : r2.el : null; + e2.insertBefore(n2, e2.contains(l2) ? l2 : null), t2.el = n2, this.emit("createSlide", t2); + } + removeSlideEl(t2, e2 = false) { + const i2 = null == t2 ? void 0 : t2.el; + if (!i2 || !i2.parentNode) return; + const n2 = this.cn(K); + if (i2.classList.contains(n2) && (S(i2, n2), this.emit("unselectSlide", t2)), t2.isDom && !e2) return i2.removeAttribute("aria-hidden"), i2.removeAttribute("data-index"), void (i2.style.left = ""); + this.emit("removeSlide", t2); + const s2 = new CustomEvent(G); + i2.dispatchEvent(s2), t2.el && (t2.el.remove(), t2.el = null); + } + transitionTo(t2 = 0, e2 = this.option("transition")) { + var i2, n2, s2, o2; + if (!e2) return false; + const a2 = this.page, { pages: r2, panzoom: l2 } = this; + t2 = parseInt((t2 || 0).toString()) || 0; + const c2 = this.getPageFromIndex(t2); + if (!l2 || !r2[c2] || r2.length < 2 || Math.abs(((null === (n2 = null === (i2 = r2[a2]) || void 0 === i2 ? void 0 : i2.slides[0]) || void 0 === n2 ? void 0 : n2.dim) || 0) - this.viewportDim) > 1) return false; + let h2 = t2 > a2 ? 1 : -1; + this.isInfinite && (0 === a2 && t2 === r2.length - 1 && (h2 = -1), a2 === r2.length - 1 && 0 === t2 && (h2 = 1)); + const d2 = r2[c2].pos * (this.isRTL ? 1 : -1); + if (a2 === c2 && Math.abs(d2 - l2.target[this.axis]) < 1) return false; + this.clearTransitions(); + const u2 = l2.isResting; + P(this.container, this.cn("inTransition")); + const p2 = (null === (s2 = r2[a2]) || void 0 === s2 ? void 0 : s2.slides[0]) || null, f2 = (null === (o2 = r2[c2]) || void 0 === o2 ? void 0 : o2.slides[0]) || null; + this.inTransition.add(f2.index), this.createSlideEl(f2); + let g2 = p2.el, m2 = f2.el; + u2 || e2 === J || (e2 = "fadeFast", g2 = null); + const v2 = this.isRTL ? "next" : "prev", b2 = this.isRTL ? "prev" : "next"; + return g2 && (this.inTransition.add(p2.index), p2.transition = e2, g2.addEventListener(G, this.onAnimationEnd), g2.classList.add(`f-${e2}Out`, `to-${h2 > 0 ? b2 : v2}`)), m2 && (f2.transition = e2, m2.addEventListener(G, this.onAnimationEnd), m2.classList.add(`f-${e2}In`, `from-${h2 > 0 ? v2 : b2}`)), l2.current[this.axis] = d2, l2.target[this.axis] = d2, l2.requestTick(), this.onChange(c2), true; + } + manageSlideVisiblity() { + const t2 = /* @__PURE__ */ new Set(), e2 = /* @__PURE__ */ new Set(), i2 = this.getVisibleSlides(parseFloat(this.option("preload", 0) + "") || 0); + for (const n2 of this.slides) i2.has(n2) ? t2.add(n2) : e2.add(n2); + for (const e3 of this.inTransition) t2.add(this.slides[e3]); + for (const e3 of t2) this.createSlideEl(e3), this.lazyLoadSlide(e3); + for (const i3 of e2) t2.has(i3) || this.removeSlideEl(i3); + this.markSelectedSlides(), this.repositionSlides(); + } + markSelectedSlides() { + if (!this.pages[this.page] || !this.pages[this.page].slides) return; + const t2 = "aria-hidden"; + let e2 = this.cn(K); + if (e2) for (const i2 of this.slides) { + const n2 = i2.el; + n2 && (n2.dataset.index = `${i2.index}`, n2.classList.contains("f-thumbs__slide") ? this.getVisibleSlides(0).has(i2) ? n2.removeAttribute(t2) : n2.setAttribute(t2, "true") : this.pages[this.page].slides.includes(i2) ? (n2.classList.contains(e2) || (P(n2, e2), this.emit("selectSlide", i2)), n2.removeAttribute(t2)) : (n2.classList.contains(e2) && (S(n2, e2), this.emit("unselectSlide", i2)), n2.setAttribute(t2, "true"))); + } + } + flipInfiniteTrack() { + const { axis: t2, isHorizontal: e2, isInfinite: i2, isRTL: n2, viewportDim: s2, contentDim: o2 } = this, a2 = this.panzoom; + if (!a2 || !i2) return; + let r2 = a2.current[t2], l2 = a2.target[t2] - r2, c2 = 0, h2 = 0.5 * s2; + n2 && e2 ? (r2 < -h2 && (c2 = -1, r2 += o2), r2 > o2 - h2 && (c2 = 1, r2 -= o2)) : (r2 > h2 && (c2 = 1, r2 -= o2), r2 < -o2 + h2 && (c2 = -1, r2 += o2)), c2 && (a2.current[t2] = r2, a2.target[t2] = r2 + l2); + } + lazyLoadImg(t2, e2) { + const i2 = this, s2 = "f-fadeIn", o2 = "is-preloading"; + let a2 = false, r2 = null; + const l2 = () => { + a2 || (a2 = true, r2 && (r2.remove(), r2 = null), S(e2, o2), e2.complete && (P(e2, s2), setTimeout(() => { + S(e2, s2); + }, 350)), this.option("adaptiveHeight") && t2.el && this.pages[this.page].slides.indexOf(t2) > -1 && (i2.updateMetrics(), i2.setViewportHeight()), this.emit("load", t2)); + }; + P(e2, o2), e2.src = e2.dataset.lazySrcset || e2.dataset.lazySrc || "", delete e2.dataset.lazySrc, delete e2.dataset.lazySrcset, e2.addEventListener("error", () => { + l2(); + }), e2.addEventListener("load", () => { + l2(); + }), setTimeout(() => { + const i3 = e2.parentNode; + i3 && t2.el && (e2.complete ? l2() : a2 || (r2 = n(x), i3.insertBefore(r2, e2))); + }, 300); + } + lazyLoadSlide(t2) { + const e2 = t2 && t2.el; + if (!e2) return; + const i2 = /* @__PURE__ */ new Set(); + let n2 = Array.from(e2.querySelectorAll("[data-lazy-src],[data-lazy-srcset]")); + e2.dataset.lazySrc && n2.push(e2), n2.map((t3) => { + t3 instanceof HTMLImageElement ? i2.add(t3) : t3 instanceof HTMLElement && t3.dataset.lazySrc && (t3.style.backgroundImage = `url('${t3.dataset.lazySrc}')`, delete t3.dataset.lazySrc); + }); + for (const e3 of i2) this.lazyLoadImg(t2, e3); + } + onAnimationEnd(t2) { + var e2; + const i2 = t2.target, n2 = i2 ? parseInt(i2.dataset.index || "", 10) || 0 : -1, s2 = this.slides[n2], o2 = t2.animationName; + if (!i2 || !s2 || !o2) return; + const a2 = !!this.inTransition.has(n2) && s2.transition; + a2 && o2.substring(0, a2.length + 2) === `f-${a2}` && this.inTransition.delete(n2), this.inTransition.size || this.clearTransitions(), n2 === this.page && (null === (e2 = this.panzoom) || void 0 === e2 ? void 0 : e2.isResting) && this.emit("settle"); + } + onDecel(t2, e2 = 0, i2 = 0, n2 = 0, s2 = 0) { + if (this.option("dragFree")) return void this.setPageFromPosition(); + const { isRTL: o2, isHorizontal: a2, axis: r2, pages: l2 } = this, c2 = l2.length, h2 = Math.abs(Math.atan2(i2, e2) / (Math.PI / 180)); + let d2 = 0; + if (d2 = h2 > 45 && h2 < 135 ? a2 ? 0 : i2 : a2 ? e2 : 0, !c2) return; + let u2 = this.page, p2 = o2 && a2 ? 1 : -1; + const f2 = t2.current[r2] * p2; + let { pageIndex: g2 } = this.getPageFromPosition(f2); + Math.abs(d2) > 5 ? (l2[u2].dim < document.documentElement["client" + (this.isHorizontal ? "Width" : "Height")] - 1 && (u2 = g2), u2 = o2 && a2 ? d2 < 0 ? u2 - 1 : u2 + 1 : d2 < 0 ? u2 + 1 : u2 - 1) : u2 = 0 === n2 && 0 === s2 ? u2 : g2, this.slideTo(u2, { transition: false, friction: t2.option("decelFriction") }); + } + onClick(t2) { + const e2 = t2.target, i2 = e2 && E(e2) ? e2.dataset : null; + let n2, s2; + i2 && (void 0 !== i2.carouselPage ? (s2 = "slideTo", n2 = i2.carouselPage) : void 0 !== i2.carouselNext ? s2 = "slideNext" : void 0 !== i2.carouselPrev && (s2 = "slidePrev")), s2 ? (t2.preventDefault(), t2.stopPropagation(), e2 && !e2.hasAttribute("disabled") && this[s2](n2)) : this.emit("click", t2); + } + onSlideTo(t2) { + const e2 = t2.detail || 0; + this.slideTo(this.getPageForSlide(e2), { friction: 0 }); + } + onChange(t2, e2 = 0) { + const i2 = this.page; + this.prevPage = i2, this.page = t2, this.option("adaptiveHeight") && this.setViewportHeight(), t2 !== i2 && (this.markSelectedSlides(), this.emit("change", t2, i2, e2)); + } + onRefresh() { + let t2 = this.contentDim, e2 = this.viewportDim; + this.updateMetrics(), this.contentDim === t2 && this.viewportDim === e2 || this.slideTo(this.page, { friction: 0, transition: false }); + } + onScroll() { + var t2; + null === (t2 = this.viewport) || void 0 === t2 || t2.scroll(0, 0); + } + onResize() { + this.option("breakpoints") && this.processOptions(); + } + onBeforeTransform(t2) { + this.lp !== t2.current[this.axis] && (this.flipInfiniteTrack(), this.manageSlideVisiblity()), this.lp = t2.current.e; + } + onEndAnimation() { + this.inTransition.size || this.emit("settle"); + } + reInit(t2 = null, e2 = null) { + this.destroy(), this.state = B.Init, this.prevPage = null, this.userOptions = t2 || this.userOptions, this.userPlugins = e2 || this.userPlugins, this.processOptions(); + } + slideTo(t2 = 0, { friction: e2 = this.option("friction"), transition: i2 = this.option("transition") } = {}) { + if (this.state === B.Destroy) return; + t2 = parseInt((t2 || 0).toString()) || 0; + const n2 = this.getPageFromIndex(t2), { axis: s2, isHorizontal: o2, isRTL: a2, pages: r2, panzoom: l2 } = this, c2 = r2.length, h2 = a2 && o2 ? 1 : -1; + if (!l2 || !c2) return; + if (this.page !== n2) { + const e3 = new Event("beforeChange", { bubbles: true, cancelable: true }); + if (this.emit("beforeChange", e3, t2), e3.defaultPrevented) return; + } + if (this.transitionTo(t2, i2)) return; + let d2 = r2[n2].pos; + if (this.isInfinite) { + const e3 = this.contentDim, i3 = l2.target[s2] * h2; + if (2 === c2) d2 += e3 * Math.floor(parseFloat(t2 + "") / 2); + else { + d2 = [d2, d2 - e3, d2 + e3].reduce(function(t3, e4) { + return Math.abs(e4 - i3) < Math.abs(t3 - i3) ? e4 : t3; + }); + } + } + d2 *= h2, Math.abs(l2.target[s2] - d2) < 1 || (l2.panTo({ x: o2 ? d2 : 0, y: o2 ? 0 : d2, friction: e2 }), this.onChange(n2)); + } + slideToClosest(t2) { + if (this.panzoom) { + const { pageIndex: e2 } = this.getPageFromPosition(); + this.slideTo(e2, t2); + } + } + slideNext() { + this.slideTo(this.page + 1); + } + slidePrev() { + this.slideTo(this.page - 1); + } + clearTransitions() { + this.inTransition.clear(), S(this.container, this.cn("inTransition")); + const t2 = ["to-prev", "to-next", "from-prev", "from-next"]; + for (const e2 of this.slides) { + const i2 = e2.el; + if (i2) { + i2.removeEventListener(G, this.onAnimationEnd), i2.classList.remove(...t2); + const n2 = e2.transition; + n2 && i2.classList.remove(`f-${n2}Out`, `f-${n2}In`); + } + } + this.manageSlideVisiblity(); + } + addSlide(t2, e2) { + var i2, n2, s2, o2; + const a2 = this.panzoom, r2 = (null === (i2 = this.pages[this.page]) || void 0 === i2 ? void 0 : i2.pos) || 0, l2 = (null === (n2 = this.pages[this.page]) || void 0 === n2 ? void 0 : n2.dim) || 0, c2 = this.contentDim < this.viewportDim; + let h2 = Array.isArray(e2) ? e2 : [e2]; + const d2 = []; + for (const t3 of h2) d2.push(H(t3)); + this.slides.splice(t2, 0, ...d2); + for (let t3 = 0; t3 < this.slides.length; t3++) this.slides[t3].index = t3; + for (const t3 of d2) this.emit("beforeInitSlide", t3, t3.index); + if (this.page >= t2 && (this.page += d2.length), this.updateMetrics(), a2) { + const e3 = (null === (s2 = this.pages[this.page]) || void 0 === s2 ? void 0 : s2.pos) || 0, i3 = (null === (o2 = this.pages[this.page]) || void 0 === o2 ? void 0 : o2.dim) || 0, n3 = this.pages.length || 1, h3 = this.isRTL ? l2 - i3 : i3 - l2, d3 = this.isRTL ? r2 - e3 : e3 - r2; + c2 && 1 === n3 ? (t2 <= this.page && (a2.current[this.axis] -= h3, a2.target[this.axis] -= h3), a2.panTo({ [this.isHorizontal ? "x" : "y"]: -1 * e3 })) : d3 && t2 <= this.page && (a2.target[this.axis] -= d3, a2.current[this.axis] -= d3, a2.requestTick()); + } + for (const t3 of d2) this.emit("initSlide", t3, t3.index); + } + prependSlide(t2) { + this.addSlide(0, t2); + } + appendSlide(t2) { + this.addSlide(this.slides.length, t2); + } + removeSlide(t2) { + const e2 = this.slides.length; + t2 = (t2 % e2 + e2) % e2; + const i2 = this.slides[t2]; + if (i2) { + this.removeSlideEl(i2, true), this.slides.splice(t2, 1); + for (let t3 = 0; t3 < this.slides.length; t3++) this.slides[t3].index = t3; + this.updateMetrics(), this.slideTo(this.page, { friction: 0, transition: false }), this.emit("destroySlide", i2); + } + } + updateMetrics() { + const { panzoom: e2, viewport: i2, track: n2, slides: s2, isHorizontal: o2, isInfinite: a2 } = this; + if (!n2) return; + const r2 = o2 ? "width" : "height", l2 = o2 ? "offsetWidth" : "offsetHeight"; + if (i2) { + let e3 = Math.max(i2[l2], t(i2.getBoundingClientRect()[r2], 1e3)), n3 = getComputedStyle(i2), s3 = "padding", a3 = o2 ? "Right" : "Bottom"; + e3 -= parseFloat(n3[s3 + (o2 ? "Left" : "Top")]) + parseFloat(n3[s3 + a3]), this.viewportDim = e3; + } + let c2, h2 = 0; + for (const [e3, i3] of s2.entries()) { + let n3 = 0, o3 = 0; + !i3.el && c2 ? (n3 = c2.dim, o3 = c2.gap) : ({ dim: n3, gap: o3 } = this.getSlideMetrics(i3), c2 = i3), n3 = t(n3, 1e3), o3 = t(o3, 1e3), i3.dim = n3, i3.gap = o3, i3.pos = h2, h2 += n3, (a2 || e3 < s2.length - 1) && (h2 += o3); + } + h2 = t(h2, 1e3), this.contentDim = h2, e2 && (e2.contentRect[r2] = h2, e2.contentRect[o2 ? "fullWidth" : "fullHeight"] = h2), this.pages = this.createPages(), this.pages = this.processPages(), this.state === B.Init && this.setInitialPage(), this.page = Math.max(0, Math.min(this.page, this.pages.length - 1)), this.manageSlideVisiblity(), this.emit("refresh"); + } + getProgress(e2, i2 = false, n2 = false) { + void 0 === e2 && (e2 = this.page); + const s2 = this, o2 = s2.panzoom, a2 = s2.contentDim, r2 = s2.pages[e2] || 0; + if (!r2 || !o2) return e2 > this.page ? -1 : 1; + let l2 = -1 * o2.current.e, c2 = t((l2 - r2.pos) / (1 * r2.dim), 1e3), h2 = c2, d2 = c2; + this.isInfinite && true !== n2 && (h2 = t((l2 - r2.pos + a2) / (1 * r2.dim), 1e3), d2 = t((l2 - r2.pos - a2) / (1 * r2.dim), 1e3)); + let u2 = [c2, h2, d2].reduce(function(t2, e3) { + return Math.abs(e3) < Math.abs(t2) ? e3 : t2; + }); + return i2 ? u2 : u2 > 1 ? 1 : u2 < -1 ? -1 : u2; + } + setViewportHeight() { + const { page: t2, pages: e2, viewport: i2, isHorizontal: n2 } = this; + if (!i2 || !e2[t2]) return; + let s2 = 0; + n2 && this.track && (this.track.style.height = "auto", e2[t2].slides.forEach((t3) => { + t3.el && (s2 = Math.max(s2, t3.el.offsetHeight)); + })), i2.style.height = s2 ? `${s2}px` : ""; + } + getPageForSlide(t2) { + for (const e2 of this.pages) for (const i2 of e2.slides) if (i2.index === t2) return e2.index; + return -1; + } + getVisibleSlides(t2 = 0) { + var e2; + const i2 = /* @__PURE__ */ new Set(); + let { panzoom: n2, contentDim: s2, viewportDim: o2, pages: a2, page: r2 } = this; + if (o2) { + s2 = s2 + (null === (e2 = this.slides[this.slides.length - 1]) || void 0 === e2 ? void 0 : e2.gap) || 0; + let l2 = 0; + l2 = n2 && n2.state !== m.Init && n2.state !== m.Destroy ? -1 * n2.current[this.axis] : a2[r2] && a2[r2].pos || 0, this.isInfinite && (l2 -= Math.floor(l2 / s2) * s2), this.isRTL && this.isHorizontal && (l2 *= -1); + const c2 = l2 - o2 * t2, h2 = l2 + o2 * (t2 + 1), d2 = this.isInfinite ? [-1, 0, 1] : [0]; + for (const t3 of this.slides) for (const e3 of d2) { + const n3 = t3.pos + e3 * s2, o3 = n3 + t3.dim + t3.gap; + n3 < h2 && o3 > c2 && i2.add(t3); + } + } + return i2; + } + getPageFromPosition(t2) { + const { viewportDim: e2, contentDim: i2, slides: n2, pages: s2, panzoom: o2 } = this, a2 = s2.length, r2 = n2.length, l2 = n2[0], c2 = n2[r2 - 1], h2 = this.option("center"); + let d2 = 0, u2 = 0, p2 = 0, f2 = void 0 === t2 ? -1 * ((null == o2 ? void 0 : o2.target[this.axis]) || 0) : t2; + h2 && (f2 += 0.5 * e2), this.isInfinite ? (f2 < l2.pos - 0.5 * c2.gap && (f2 -= i2, p2 = -1), f2 > c2.pos + c2.dim + 0.5 * c2.gap && (f2 -= i2, p2 = 1)) : f2 = Math.max(l2.pos || 0, Math.min(f2, c2.pos)); + let g2 = c2, m2 = n2.find((t3) => { + const e3 = t3.pos - 0.5 * g2.gap, i3 = t3.pos + t3.dim + 0.5 * t3.gap; + return g2 = t3, f2 >= e3 && f2 < i3; + }); + return m2 || (m2 = c2), u2 = this.getPageForSlide(m2.index), d2 = u2 + p2 * a2, { page: d2, pageIndex: u2 }; + } + setPageFromPosition() { + const { pageIndex: t2 } = this.getPageFromPosition(); + this.onChange(t2); + } + destroy() { + if ([B.Destroy].includes(this.state)) return; + this.state = B.Destroy; + const { container: t2, viewport: e2, track: i2, slides: n2, panzoom: s2 } = this, o2 = this.option("classes"); + t2.removeEventListener("click", this.onClick, { passive: false, capture: false }), t2.removeEventListener("slideTo", this.onSlideTo), window.removeEventListener("resize", this.onResize), s2 && (s2.destroy(), this.panzoom = null), n2 && n2.forEach((t3) => { + this.removeSlideEl(t3); + }), this.detachPlugins(), e2 && (e2.removeEventListener("scroll", this.onScroll), e2.offsetParent && i2 && i2.offsetParent && e2.replaceWith(...i2.childNodes)); + for (const [e3, i3] of Object.entries(o2)) "container" !== e3 && i3 && t2.classList.remove(i3); + this.track = null, this.viewport = null, this.page = 0, this.slides = []; + const a2 = this.events.get("ready"); + this.events = /* @__PURE__ */ new Map(), a2 && this.events.set("ready", a2); + } +}; +Object.defineProperty(Q, "Panzoom", { enumerable: true, configurable: true, writable: true, value: I }), Object.defineProperty(Q, "defaults", { enumerable: true, configurable: true, writable: true, value: j }), Object.defineProperty(Q, "Plugins", { enumerable: true, configurable: true, writable: true, value: U }); +var tt = function(t2) { + if (!E(t2)) return 0; + const e2 = window.scrollY, i2 = window.innerHeight, n2 = e2 + i2, s2 = t2.getBoundingClientRect(), o2 = s2.y + e2, a2 = s2.height, r2 = o2 + a2; + if (e2 > r2 || n2 < o2) return 0; + if (e2 < o2 && n2 > r2) return 100; + if (o2 < e2 && r2 > n2) return 100; + let l2 = a2; + o2 < e2 && (l2 -= e2 - o2), r2 > n2 && (l2 -= r2 - n2); + const c2 = l2 / i2 * 100; + return Math.round(c2); +}; +var et = !("undefined" == typeof window || !window.document || !window.document.createElement); +var it; +var nt = ["a[href]", "area[href]", 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', "select:not([disabled]):not([aria-hidden])", "textarea:not([disabled]):not([aria-hidden])", "button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)", "iframe", "object", "embed", "video", "audio", "[contenteditable]", '[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'].join(","); +var st = (t2) => { + if (t2 && et) { + void 0 === it && document.createElement("div").focus({ get preventScroll() { + return it = true, false; + } }); + try { + if (it) t2.focus({ preventScroll: true }); + else { + const e2 = window.scrollY || document.body.scrollTop, i2 = window.scrollX || document.body.scrollLeft; + t2.focus(), document.body.scrollTo({ top: e2, left: i2, behavior: "auto" }); + } + } catch (t3) { + } + } +}; +var ot = () => { + const t2 = document; + let e2, i2 = "", n2 = "", s2 = ""; + return t2.fullscreenEnabled ? (i2 = "requestFullscreen", n2 = "exitFullscreen", s2 = "fullscreenElement") : t2.webkitFullscreenEnabled && (i2 = "webkitRequestFullscreen", n2 = "webkitExitFullscreen", s2 = "webkitFullscreenElement"), i2 && (e2 = { request: function(e3 = t2.documentElement) { + return "webkitRequestFullscreen" === i2 ? e3[i2](Element.ALLOW_KEYBOARD_INPUT) : e3[i2](); + }, exit: function() { + return t2[s2] && t2[n2](); + }, isFullscreen: function() { + return t2[s2]; + } }), e2; +}; +var at = { animated: true, autoFocus: true, backdropClick: "close", Carousel: { classes: { container: "fancybox__carousel", viewport: "fancybox__viewport", track: "fancybox__track", slide: "fancybox__slide" } }, closeButton: "auto", closeExisting: false, commonCaption: false, compact: () => window.matchMedia("(max-width: 578px), (max-height: 578px)").matches, contentClick: "toggleZoom", contentDblClick: false, defaultType: "image", defaultDisplay: "flex", dragToClose: true, Fullscreen: { autoStart: false }, groupAll: false, groupAttr: "data-fancybox", hideClass: "f-fadeOut", hideScrollbar: true, idle: 3500, keyboard: { Escape: "close", Delete: "close", Backspace: "close", PageUp: "next", PageDown: "prev", ArrowUp: "prev", ArrowDown: "next", ArrowRight: "next", ArrowLeft: "prev" }, l10n: Object.assign(Object.assign({}, b), { CLOSE: "Close", NEXT: "Next", PREV: "Previous", MODAL: "You can close this modal content with the ESC key", ERROR: "Something Went Wrong, Please Try Again Later", IMAGE_ERROR: "Image Not Found", ELEMENT_NOT_FOUND: "HTML Element Not Found", AJAX_NOT_FOUND: "Error Loading AJAX : Not Found", AJAX_FORBIDDEN: "Error Loading AJAX : Forbidden", IFRAME_ERROR: "Error Loading Page", TOGGLE_ZOOM: "Toggle zoom level", TOGGLE_THUMBS: "Toggle thumbnails", TOGGLE_SLIDESHOW: "Toggle slideshow", TOGGLE_FULLSCREEN: "Toggle full-screen mode", DOWNLOAD: "Download" }), parentEl: null, placeFocusBack: true, showClass: "f-zoomInUp", startIndex: 0, tpl: { closeButton: '', main: '' }, trapFocus: true, wheel: "zoom" }; +var rt; +var lt; +!function(t2) { + t2[t2.Init = 0] = "Init", t2[t2.Ready = 1] = "Ready", t2[t2.Closing = 2] = "Closing", t2[t2.CustomClosing = 3] = "CustomClosing", t2[t2.Destroy = 4] = "Destroy"; +}(rt || (rt = {})), function(t2) { + t2[t2.Loading = 0] = "Loading", t2[t2.Opening = 1] = "Opening", t2[t2.Ready = 2] = "Ready", t2[t2.Closing = 3] = "Closing"; +}(lt || (lt = {})); +var ct = ""; +var ht = false; +var dt = false; +var ut = null; +var pt = () => { + let t2 = "", e2 = ""; + const i2 = Oe.getInstance(); + if (i2) { + const n2 = i2.carousel, s2 = i2.getSlide(); + if (n2 && s2) { + let o2 = s2.slug || void 0, a2 = s2.triggerEl || void 0; + e2 = o2 || (i2.option("slug") || ""), !e2 && a2 && a2.dataset && (e2 = a2.dataset.fancybox || ""), e2 && "true" !== e2 && (t2 = "#" + e2 + (!o2 && n2.slides.length > 1 ? "-" + (s2.index + 1) : "")); + } + } + return { hash: t2, slug: e2, index: 1 }; +}; +var ft = () => { + const t2 = new URL(document.URL).hash, e2 = t2.slice(1).split("-"), i2 = e2[e2.length - 1], n2 = i2 && /^\+?\d+$/.test(i2) && parseInt(e2.pop() || "1", 10) || 1; + return { hash: t2, slug: e2.join("-"), index: n2 }; +}; +var gt = () => { + const { slug: t2, index: e2 } = ft(); + if (!t2) return; + let i2 = document.querySelector(`[data-slug="${t2}"]`); + if (i2 && i2.dispatchEvent(new CustomEvent("click", { bubbles: true, cancelable: true })), Oe.getInstance()) return; + const n2 = document.querySelectorAll(`[data-fancybox="${t2}"]`); + n2.length && (i2 = n2[e2 - 1], i2 && i2.dispatchEvent(new CustomEvent("click", { bubbles: true, cancelable: true }))); +}; +var mt = () => { + if (false === Oe.defaults.Hash) return; + const t2 = Oe.getInstance(); + if (false === (null == t2 ? void 0 : t2.options.Hash)) return; + const { slug: e2, index: i2 } = ft(), { slug: n2 } = pt(); + t2 && (e2 === n2 ? t2.jumpTo(i2 - 1) : (ht = true, t2.close())), gt(); +}; +var vt = () => { + ut && clearTimeout(ut), queueMicrotask(() => { + mt(); + }); +}; +var bt = () => { + window.addEventListener("hashchange", vt, false), setTimeout(() => { + mt(); + }, 500); +}; +et && (/complete|interactive|loaded/.test(document.readyState) ? bt() : document.addEventListener("DOMContentLoaded", bt)); +var yt = "is-zooming-in"; +var wt = class extends _ { + onCreateSlide(t2, e2, i2) { + const n2 = this.instance.optionFor(i2, "src") || ""; + i2.el && "image" === i2.type && "string" == typeof n2 && this.setImage(i2, n2); + } + onRemoveSlide(t2, e2, i2) { + i2.panzoom && i2.panzoom.destroy(), i2.panzoom = void 0, i2.imageEl = void 0; + } + onChange(t2, e2, i2, n2) { + S(this.instance.container, yt); + for (const t3 of e2.slides) { + const e3 = t3.panzoom; + e3 && t3.index !== i2 && e3.reset(0.35); + } + } + onClose() { + var t2; + const e2 = this.instance, i2 = e2.container, n2 = e2.getSlide(); + if (!i2 || !i2.parentElement || !n2) return; + const { el: s2, contentEl: o2, panzoom: a2, thumbElSrc: r2 } = n2; + if (!s2 || !r2 || !o2 || !a2 || a2.isContentLoading || a2.state === m.Init || a2.state === m.Destroy) return; + a2.updateMetrics(); + let l2 = this.getZoomInfo(n2); + if (!l2) return; + this.instance.state = rt.CustomClosing, i2.classList.remove(yt), i2.classList.add("is-zooming-out"), o2.style.backgroundImage = `url('${r2}')`; + const c2 = i2.getBoundingClientRect(); + 1 === ((null === (t2 = window.visualViewport) || void 0 === t2 ? void 0 : t2.scale) || 1) && Object.assign(i2.style, { position: "absolute", top: `${i2.offsetTop + window.scrollY}px`, left: `${i2.offsetLeft + window.scrollX}px`, bottom: "auto", right: "auto", width: `${c2.width}px`, height: `${c2.height}px`, overflow: "hidden" }); + const { x: h2, y: d2, scale: u2, opacity: p2 } = l2; + if (p2) { + const t3 = ((t4, e3, i3, n3) => { + const s3 = e3 - t4, o3 = n3 - i3; + return (e4) => i3 + ((e4 - t4) / s3 * o3 || 0); + })(a2.scale, u2, 1, 0); + a2.on("afterTransform", () => { + o2.style.opacity = t3(a2.scale) + ""; + }); + } + a2.on("endAnimation", () => { + e2.destroy(); + }), a2.target.a = u2, a2.target.b = 0, a2.target.c = 0, a2.target.d = u2, a2.panTo({ x: h2, y: d2, scale: u2, friction: p2 ? 0.2 : 0.33, ignoreBounds: true }), a2.isResting && e2.destroy(); + } + setImage(t2, e2) { + const i2 = this.instance; + t2.src = e2, this.process(t2, e2).then((e3) => { + const { contentEl: n2, imageEl: s2, thumbElSrc: o2, el: a2 } = t2; + if (i2.isClosing() || !n2 || !s2) return; + n2.offsetHeight; + const r2 = !!i2.isOpeningSlide(t2) && this.getZoomInfo(t2); + if (this.option("protected") && a2) { + a2.addEventListener("contextmenu", (t4) => { + t4.preventDefault(); + }); + const t3 = document.createElement("div"); + P(t3, "fancybox-protected"), n2.appendChild(t3); + } + if (o2 && r2) { + const s3 = e3.contentRect, a3 = Math.max(s3.fullWidth, s3.fullHeight); + let c2 = null; + !r2.opacity && a3 > 1200 && (c2 = document.createElement("img"), P(c2, "fancybox-ghost"), c2.src = o2, n2.appendChild(c2)); + const h2 = () => { + c2 && (P(c2, "f-fadeFastOut"), setTimeout(() => { + c2 && (c2.remove(), c2 = null); + }, 200)); + }; + (l2 = o2, new Promise((t3, e4) => { + const i3 = new Image(); + i3.onload = t3, i3.onerror = e4, i3.src = l2; + })).then(() => { + i2.hideLoading(t2), t2.state = lt.Opening, this.instance.emit("reveal", t2), this.zoomIn(t2).then(() => { + h2(), this.instance.done(t2); + }, () => { + }), c2 && setTimeout(() => { + h2(); + }, a3 > 2500 ? 800 : 200); + }, () => { + i2.hideLoading(t2), i2.revealContent(t2); + }); + } else { + const n3 = this.optionFor(t2, "initialSize"), s3 = this.optionFor(t2, "zoom"), o3 = { event: i2.prevMouseMoveEvent || i2.options.event, friction: s3 ? 0.12 : 0 }; + let a3 = i2.optionFor(t2, "showClass") || void 0, r3 = true; + i2.isOpeningSlide(t2) && ("full" === n3 ? e3.zoomToFull(o3) : "cover" === n3 ? e3.zoomToCover(o3) : "max" === n3 ? e3.zoomToMax(o3) : r3 = false, e3.stop("current")), r3 && a3 && (a3 = e3.isDragging ? "f-fadeIn" : ""), i2.hideLoading(t2), i2.revealContent(t2, a3); + } + var l2; + }, () => { + i2.setError(t2, "{{IMAGE_ERROR}}"); + }); + } + process(t2, e2) { + return new Promise((i2, s2) => { + var o2; + const a2 = this.instance, r2 = t2.el; + a2.clearContent(t2), a2.showLoading(t2); + let l2 = this.optionFor(t2, "content"); + if ("string" == typeof l2 && (l2 = n(l2)), !l2 || !E(l2)) { + if (l2 = document.createElement("img"), l2 instanceof HTMLImageElement) { + let i3 = "", n2 = t2.caption; + i3 = "string" == typeof n2 && n2 ? n2.replace(/<[^>]+>/gi, "").substring(0, 1e3) : `Image ${t2.index + 1} of ${(null === (o2 = a2.carousel) || void 0 === o2 ? void 0 : o2.pages.length) || 1}`, l2.src = e2 || "", l2.alt = i3, l2.draggable = false, t2.srcset && l2.setAttribute("srcset", t2.srcset), this.instance.isOpeningSlide(t2) && (l2.fetchPriority = "high"); + } + t2.sizes && l2.setAttribute("sizes", t2.sizes); + } + P(l2, "fancybox-image"), t2.imageEl = l2, a2.setContent(t2, l2, false); + t2.panzoom = new I(r2, u({ transformParent: true }, this.option("Panzoom") || {}, { content: l2, width: (e3, i3) => a2.optionFor(t2, "width", "auto", i3) || "auto", height: (e3, i3) => a2.optionFor(t2, "height", "auto", i3) || "auto", wheel: () => { + const t3 = a2.option("wheel"); + return ("zoom" === t3 || "pan" == t3) && t3; + }, click: (e3, i3) => { + var n2, s3; + if (a2.isCompact || a2.isClosing()) return false; + if (t2.index !== (null === (n2 = a2.getSlide()) || void 0 === n2 ? void 0 : n2.index)) return false; + if (i3) { + const t3 = i3.composedPath()[0]; + if (["A", "BUTTON", "TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO"].includes(t3.nodeName)) return false; + } + let o3 = !i3 || i3.target && (null === (s3 = t2.contentEl) || void 0 === s3 ? void 0 : s3.contains(i3.target)); + return a2.option(o3 ? "contentClick" : "backdropClick") || false; + }, dblClick: () => a2.isCompact ? "toggleZoom" : a2.option("contentDblClick") || false, spinner: false, panOnlyZoomed: true, wheelLimit: 1 / 0, on: { ready: (t3) => { + i2(t3); + }, error: () => { + s2(); + }, destroy: () => { + s2(); + } } })); + }); + } + zoomIn(t2) { + return new Promise((e2, i2) => { + const n2 = this.instance, s2 = n2.container, { panzoom: o2, contentEl: a2, el: r2 } = t2; + o2 && o2.updateMetrics(); + const l2 = this.getZoomInfo(t2); + if (!(l2 && r2 && a2 && o2 && s2)) return void i2(); + const { x: c2, y: h2, scale: d2, opacity: u2 } = l2, p2 = () => { + t2.state !== lt.Closing && (u2 && (a2.style.opacity = Math.max(Math.min(1, 1 - (1 - o2.scale) / (1 - d2)), 0) + ""), o2.scale >= 1 && o2.scale > o2.targetScale - 0.1 && e2(o2)); + }, f2 = (t3) => { + (t3.scale < 0.99 || t3.scale > 1.01) && !t3.isDragging || (S(s2, yt), a2.style.opacity = "", t3.off("endAnimation", f2), t3.off("touchStart", f2), t3.off("afterTransform", p2), e2(t3)); + }; + o2.on("endAnimation", f2), o2.on("touchStart", f2), o2.on("afterTransform", p2), o2.on(["error", "destroy"], () => { + i2(); + }), o2.panTo({ x: c2, y: h2, scale: d2, friction: 0, ignoreBounds: true }), o2.stop("current"); + const g2 = { event: "mousemove" === o2.panMode ? n2.prevMouseMoveEvent || n2.options.event : void 0 }, m2 = this.optionFor(t2, "initialSize"); + P(s2, yt), n2.hideLoading(t2), "full" === m2 ? o2.zoomToFull(g2) : "cover" === m2 ? o2.zoomToCover(g2) : "max" === m2 ? o2.zoomToMax(g2) : o2.reset(0.172); + }); + } + getZoomInfo(t2) { + const { el: e2, imageEl: i2, thumbEl: n2, panzoom: s2 } = t2, o2 = this.instance, a2 = o2.container; + if (!e2 || !i2 || !n2 || !s2 || tt(n2) < 3 || !this.optionFor(t2, "zoom") || !a2 || o2.state === rt.Destroy) return false; + if ("0" === getComputedStyle(a2).getPropertyValue("--f-images-zoom")) return false; + const r2 = window.visualViewport || null; + if (1 !== (r2 ? r2.scale : 1)) return false; + let { top: l2, left: c2, width: h2, height: d2 } = n2.getBoundingClientRect(), { top: u2, left: p2, fitWidth: f2, fitHeight: g2 } = s2.contentRect; + if (!(h2 && d2 && f2 && g2)) return false; + const m2 = s2.container.getBoundingClientRect(); + p2 += m2.left, u2 += m2.top; + const v2 = -1 * (p2 + 0.5 * f2 - (c2 + 0.5 * h2)), b2 = -1 * (u2 + 0.5 * g2 - (l2 + 0.5 * d2)), y2 = h2 / f2; + let w2 = this.option("zoomOpacity") || false; + return "auto" === w2 && (w2 = Math.abs(h2 / d2 - f2 / g2) > 0.1), { x: v2, y: b2, scale: y2, opacity: w2 }; + } + attach() { + const t2 = this, e2 = t2.instance; + e2.on("Carousel.change", t2.onChange), e2.on("Carousel.createSlide", t2.onCreateSlide), e2.on("Carousel.removeSlide", t2.onRemoveSlide), e2.on("close", t2.onClose); + } + detach() { + const t2 = this, e2 = t2.instance; + e2.off("Carousel.change", t2.onChange), e2.off("Carousel.createSlide", t2.onCreateSlide), e2.off("Carousel.removeSlide", t2.onRemoveSlide), e2.off("close", t2.onClose); + } +}; +Object.defineProperty(wt, "defaults", { enumerable: true, configurable: true, writable: true, value: { initialSize: "fit", Panzoom: { maxScale: 1 }, protected: false, zoom: true, zoomOpacity: "auto" } }), "function" == typeof SuppressedError && SuppressedError; +var xt = "html"; +var Et = "image"; +var St = "map"; +var Pt = "youtube"; +var Ct = "vimeo"; +var Tt = "html5video"; +var Mt = (t2, e2 = {}) => { + const i2 = new URL(t2), n2 = new URLSearchParams(i2.search), s2 = new URLSearchParams(); + for (const [t3, i3] of [...n2, ...Object.entries(e2)]) { + let e3 = i3 + ""; + if ("t" === t3) { + let t4 = e3.match(/((\d*)m)?(\d*)s?/); + t4 && s2.set("start", 60 * parseInt(t4[2] || "0") + parseInt(t4[3] || "0") + ""); + } else s2.set(t3, e3); + } + let o2 = s2 + "", a2 = t2.match(/#t=((.*)?\d+s)/); + return a2 && (o2 += `#t=${a2[1]}`), o2; +}; +var Ot = { ajax: null, autoSize: true, iframeAttr: { allow: "autoplay; fullscreen", scrolling: "auto" }, preload: true, videoAutoplay: true, videoRatio: 16 / 9, videoTpl: ``, videoFormat: "", vimeo: { byline: 1, color: "00adef", controls: 1, dnt: 1, muted: 0 }, youtube: { controls: 1, enablejsapi: 1, nocookie: 1, rel: 0, fs: 1 } }; +var At = ["image", "html", "ajax", "inline", "clone", "iframe", "map", "pdf", "html5video", "youtube", "vimeo"]; +var Lt = class extends _ { + onBeforeInitSlide(t2, e2, i2) { + this.processType(i2); + } + onCreateSlide(t2, e2, i2) { + this.setContent(i2); + } + onClearContent(t2, e2) { + e2.xhr && (e2.xhr.abort(), e2.xhr = null); + const i2 = e2.iframeEl; + i2 && (i2.onload = i2.onerror = null, i2.src = "//about:blank", e2.iframeEl = null); + const n2 = e2.contentEl, s2 = e2.placeholderEl; + if ("inline" === e2.type && n2 && s2) n2.classList.remove("fancybox__content"), "none" !== getComputedStyle(n2).getPropertyValue("display") && (n2.style.display = "none"), setTimeout(() => { + s2 && (n2 && s2.parentNode && s2.parentNode.insertBefore(n2, s2), s2.remove()); + }, 0), e2.contentEl = void 0, e2.placeholderEl = void 0; + else for (; e2.el && e2.el.firstChild; ) e2.el.removeChild(e2.el.firstChild); + } + onSelectSlide(t2, e2, i2) { + i2.state === lt.Ready && this.playVideo(); + } + onUnselectSlide(t2, e2, i2) { + var n2, s2; + if (i2.type === Tt) { + try { + null === (s2 = null === (n2 = i2.el) || void 0 === n2 ? void 0 : n2.querySelector("video")) || void 0 === s2 || s2.pause(); + } catch (t3) { + } + return; + } + let o2; + i2.type === Ct ? o2 = { method: "pause", value: "true" } : i2.type === Pt && (o2 = { event: "command", func: "pauseVideo" }), o2 && i2.iframeEl && i2.iframeEl.contentWindow && i2.iframeEl.contentWindow.postMessage(JSON.stringify(o2), "*"), i2.poller && clearTimeout(i2.poller); + } + onDone(t2, e2) { + t2.isCurrentSlide(e2) && !t2.isClosing() && this.playVideo(); + } + onRefresh(t2, e2) { + e2.slides.forEach((t3) => { + t3.el && (this.resizeIframe(t3), this.setAspectRatio(t3)); + }); + } + onMessage(t2) { + try { + let e2 = JSON.parse(t2.data); + if ("https://player.vimeo.com" === t2.origin) { + if ("ready" === e2.event) for (let e3 of Array.from(document.getElementsByClassName("fancybox__iframe"))) e3 instanceof HTMLIFrameElement && e3.contentWindow === t2.source && (e3.dataset.ready = "true"); + } else if (t2.origin.match(/^https:\/\/(www.)?youtube(-nocookie)?.com$/) && "onReady" === e2.event) { + const t3 = document.getElementById(e2.id); + t3 && (t3.dataset.ready = "true"); + } + } catch (t3) { + } + } + loadAjaxContent(t2) { + const e2 = this.instance.optionFor(t2, "src") || ""; + this.instance.showLoading(t2); + const i2 = this.instance, n2 = new XMLHttpRequest(); + i2.showLoading(t2), n2.onreadystatechange = function() { + n2.readyState === XMLHttpRequest.DONE && i2.state === rt.Ready && (i2.hideLoading(t2), 200 === n2.status ? i2.setContent(t2, n2.responseText) : i2.setError(t2, 404 === n2.status ? "{{AJAX_NOT_FOUND}}" : "{{AJAX_FORBIDDEN}}")); + }; + const s2 = t2.ajax || null; + n2.open(s2 ? "POST" : "GET", e2 + ""), n2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), n2.setRequestHeader("X-Requested-With", "XMLHttpRequest"), n2.send(s2), t2.xhr = n2; + } + setInlineContent(t2) { + let e2 = null; + if (E(t2.src)) e2 = t2.src; + else if ("string" == typeof t2.src) { + const i2 = t2.src.split("#", 2).pop(); + e2 = i2 ? document.getElementById(i2) : null; + } + if (e2) { + if ("clone" === t2.type || e2.closest(".fancybox__slide")) { + e2 = e2.cloneNode(true); + const i2 = e2.dataset.animationName; + i2 && (e2.classList.remove(i2), delete e2.dataset.animationName); + let n2 = e2.getAttribute("id"); + n2 = n2 ? `${n2}--clone` : `clone-${this.instance.id}-${t2.index}`, e2.setAttribute("id", n2); + } else if (e2.parentNode) { + const i2 = document.createElement("div"); + i2.classList.add("fancybox-placeholder"), e2.parentNode.insertBefore(i2, e2), t2.placeholderEl = i2; + } + this.instance.setContent(t2, e2); + } else this.instance.setError(t2, "{{ELEMENT_NOT_FOUND}}"); + } + setIframeContent(t2) { + const { src: e2, el: i2 } = t2; + if (!e2 || "string" != typeof e2 || !i2) return; + i2.classList.add("is-loading"); + const n2 = this.instance, s2 = document.createElement("iframe"); + s2.className = "fancybox__iframe", s2.setAttribute("id", `fancybox__iframe_${n2.id}_${t2.index}`); + for (const [e3, i3] of Object.entries(this.optionFor(t2, "iframeAttr") || {})) s2.setAttribute(e3, i3); + s2.onerror = () => { + n2.setError(t2, "{{IFRAME_ERROR}}"); + }, t2.iframeEl = s2; + const o2 = this.optionFor(t2, "preload"); + if ("iframe" !== t2.type || false === o2) return s2.setAttribute("src", t2.src + ""), n2.setContent(t2, s2, false), this.resizeIframe(t2), void n2.revealContent(t2); + n2.showLoading(t2), s2.onload = () => { + if (!s2.src.length) return; + const e3 = "true" !== s2.dataset.ready; + s2.dataset.ready = "true", this.resizeIframe(t2), e3 ? n2.revealContent(t2) : n2.hideLoading(t2); + }, s2.setAttribute("src", e2), n2.setContent(t2, s2, false); + } + resizeIframe(t2) { + const { type: e2, iframeEl: i2 } = t2; + if (e2 === Pt || e2 === Ct) return; + const n2 = null == i2 ? void 0 : i2.parentElement; + if (!i2 || !n2) return; + let s2 = t2.autoSize; + void 0 === s2 && (s2 = this.optionFor(t2, "autoSize")); + let o2 = t2.width || 0, a2 = t2.height || 0; + o2 && a2 && (s2 = false); + const r2 = n2 && n2.style; + if (false !== t2.preload && false !== s2 && r2) try { + const t3 = window.getComputedStyle(n2), e3 = parseFloat(t3.paddingLeft) + parseFloat(t3.paddingRight), s3 = parseFloat(t3.paddingTop) + parseFloat(t3.paddingBottom), l2 = i2.contentWindow; + if (l2) { + const t4 = l2.document, i3 = t4.getElementsByTagName(xt)[0], n3 = t4.body; + r2.width = "", n3.style.overflow = "hidden", o2 = o2 || i3.scrollWidth + e3, r2.width = `${o2}px`, n3.style.overflow = "", r2.flex = "0 0 auto", r2.height = `${n3.scrollHeight}px`, a2 = i3.scrollHeight + s3; + } + } catch (t3) { + } + if (o2 || a2) { + const t3 = { flex: "0 1 auto", width: "", height: "" }; + o2 && "auto" !== o2 && (t3.width = `${o2}px`), a2 && "auto" !== a2 && (t3.height = `${a2}px`), Object.assign(r2, t3); + } + } + playVideo() { + const t2 = this.instance.getSlide(); + if (!t2) return; + const { el: e2 } = t2; + if (!e2 || !e2.offsetParent) return; + if (!this.optionFor(t2, "videoAutoplay")) return; + if (t2.type === Tt) try { + const t3 = e2.querySelector("video"); + if (t3) { + const e3 = t3.play(); + void 0 !== e3 && e3.then(() => { + }).catch((e4) => { + t3.muted = true, t3.play(); + }); + } + } catch (t3) { + } + if (t2.type !== Pt && t2.type !== Ct) return; + const i2 = () => { + if (t2.iframeEl && t2.iframeEl.contentWindow) { + let e3; + if ("true" === t2.iframeEl.dataset.ready) return e3 = t2.type === Pt ? { event: "command", func: "playVideo" } : { method: "play", value: "true" }, e3 && t2.iframeEl.contentWindow.postMessage(JSON.stringify(e3), "*"), void (t2.poller = void 0); + t2.type === Pt && (e3 = { event: "listening", id: t2.iframeEl.getAttribute("id") }, t2.iframeEl.contentWindow.postMessage(JSON.stringify(e3), "*")); + } + t2.poller = setTimeout(i2, 250); + }; + i2(); + } + processType(t2) { + if (t2.html) return t2.type = xt, t2.src = t2.html, void (t2.html = ""); + const e2 = this.instance.optionFor(t2, "src", ""); + if (!e2 || "string" != typeof e2) return; + let i2 = t2.type, n2 = null; + if (n2 = e2.match(/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|shorts\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)) { + const s2 = this.optionFor(t2, Pt), { nocookie: o2 } = s2, a2 = function(t3, e3) { + var i3 = {}; + for (var n3 in t3) Object.prototype.hasOwnProperty.call(t3, n3) && e3.indexOf(n3) < 0 && (i3[n3] = t3[n3]); + if (null != t3 && "function" == typeof Object.getOwnPropertySymbols) { + var s3 = 0; + for (n3 = Object.getOwnPropertySymbols(t3); s3 < n3.length; s3++) e3.indexOf(n3[s3]) < 0 && Object.prototype.propertyIsEnumerable.call(t3, n3[s3]) && (i3[n3[s3]] = t3[n3[s3]]); + } + return i3; + }(s2, ["nocookie"]), r2 = `www.youtube${o2 ? "-nocookie" : ""}.com`, l2 = Mt(e2, a2), c2 = encodeURIComponent(n2[2]); + t2.videoId = c2, t2.src = `https://${r2}/embed/${c2}?${l2}`, t2.thumbSrc = t2.thumbSrc || `https://i.ytimg.com/vi/${c2}/mqdefault.jpg`, i2 = Pt; + } else if (n2 = e2.match(/^.+vimeo.com\/(?:\/)?([\d]+)((\/|\?h=)([a-z0-9]+))?(.*)?/)) { + const s2 = Mt(e2, this.optionFor(t2, Ct)), o2 = encodeURIComponent(n2[1]), a2 = n2[4] || ""; + t2.videoId = o2, t2.src = `https://player.vimeo.com/video/${o2}?${a2 ? `h=${a2}${s2 ? "&" : ""}` : ""}${s2}`, i2 = Ct; + } + if (!i2 && t2.triggerEl) { + const e3 = t2.triggerEl.dataset.type; + At.includes(e3) && (i2 = e3); + } + i2 || "string" == typeof e2 && ("#" === e2.charAt(0) ? i2 = "inline" : (n2 = e2.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i)) ? (i2 = Tt, t2.videoFormat = t2.videoFormat || "video/" + ("ogv" === n2[1] ? "ogg" : n2[1])) : e2.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ? i2 = Et : e2.match(/\.(pdf)((\?|#).*)?$/i) && (i2 = "pdf")), (n2 = e2.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i)) ? (t2.src = `https://maps.google.${n2[1]}/?ll=${(n2[2] ? n2[2] + "&z=" + Math.floor(parseFloat(n2[3])) + (n2[4] ? n2[4].replace(/^\//, "&") : "") : n2[4] + "").replace(/\?/, "&")}&output=${n2[4] && n2[4].indexOf("layer=c") > 0 ? "svembed" : "embed"}`, i2 = St) : (n2 = e2.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i)) && (t2.src = `https://maps.google.${n2[1]}/maps?q=${n2[2].replace("query=", "q=").replace("api=1", "")}&output=embed`, i2 = St), i2 = i2 || this.instance.option("defaultType"), t2.type = i2, i2 === Et && (t2.thumbSrc = t2.thumbSrc || t2.src); + } + setContent(t2) { + const e2 = this.instance.optionFor(t2, "src") || ""; + if (t2 && t2.type && e2) { + switch (t2.type) { + case xt: + this.instance.setContent(t2, e2); + break; + case Tt: + const i2 = this.option("videoTpl"); + i2 && this.instance.setContent(t2, i2.replace(/\{\{src\}\}/gi, e2 + "").replace(/\{\{format\}\}/gi, this.optionFor(t2, "videoFormat") || "").replace(/\{\{poster\}\}/gi, t2.poster || t2.thumbSrc || "")); + break; + case "inline": + case "clone": + this.setInlineContent(t2); + break; + case "ajax": + this.loadAjaxContent(t2); + break; + case "pdf": + case St: + case Pt: + case Ct: + t2.preload = false; + case "iframe": + this.setIframeContent(t2); + } + this.setAspectRatio(t2); + } + } + setAspectRatio(t2) { + const e2 = t2.contentEl; + if (!(t2.el && e2 && t2.type && [Pt, Ct, Tt].includes(t2.type))) return; + let i2, n2 = t2.width || "auto", s2 = t2.height || "auto"; + if ("auto" === n2 || "auto" === s2) { + i2 = this.optionFor(t2, "videoRatio"); + const e3 = (i2 + "").match(/(\d+)\s*\/\s?(\d+)/); + i2 = e3 && e3.length > 2 ? parseFloat(e3[1]) / parseFloat(e3[2]) : parseFloat(i2 + ""); + } else n2 && s2 && (i2 = n2 / s2); + if (!i2) return; + e2.style.aspectRatio = "", e2.style.width = "", e2.style.height = "", e2.offsetHeight; + const o2 = e2.getBoundingClientRect(), a2 = o2.width || 1, r2 = o2.height || 1; + e2.style.aspectRatio = i2 + "", i2 < a2 / r2 ? (s2 = "auto" === s2 ? r2 : Math.min(r2, s2), e2.style.width = "auto", e2.style.height = `${s2}px`) : (n2 = "auto" === n2 ? a2 : Math.min(a2, n2), e2.style.width = `${n2}px`, e2.style.height = "auto"); + } + attach() { + const t2 = this, e2 = t2.instance; + e2.on("Carousel.beforeInitSlide", t2.onBeforeInitSlide), e2.on("Carousel.createSlide", t2.onCreateSlide), e2.on("Carousel.selectSlide", t2.onSelectSlide), e2.on("Carousel.unselectSlide", t2.onUnselectSlide), e2.on("Carousel.Panzoom.refresh", t2.onRefresh), e2.on("done", t2.onDone), e2.on("clearContent", t2.onClearContent), window.addEventListener("message", t2.onMessage); + } + detach() { + const t2 = this, e2 = t2.instance; + e2.off("Carousel.beforeInitSlide", t2.onBeforeInitSlide), e2.off("Carousel.createSlide", t2.onCreateSlide), e2.off("Carousel.selectSlide", t2.onSelectSlide), e2.off("Carousel.unselectSlide", t2.onUnselectSlide), e2.off("Carousel.Panzoom.refresh", t2.onRefresh), e2.off("done", t2.onDone), e2.off("clearContent", t2.onClearContent), window.removeEventListener("message", t2.onMessage); + } +}; +Object.defineProperty(Lt, "defaults", { enumerable: true, configurable: true, writable: true, value: Ot }); +var zt = "play"; +var Rt = "pause"; +var kt = "ready"; +var It = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: kt }), Object.defineProperty(this, "inHover", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "timer", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "progressBar", { enumerable: true, configurable: true, writable: true, value: null }); + } + get isActive() { + return this.state !== kt; + } + onReady(t2) { + this.option("autoStart") && (t2.isInfinite || t2.page < t2.pages.length - 1) && this.start(); + } + onChange() { + this.removeProgressBar(), this.pause(); + } + onSettle() { + this.resume(); + } + onVisibilityChange() { + "visible" === document.visibilityState ? this.resume() : this.pause(); + } + onMouseEnter() { + this.inHover = true, this.pause(); + } + onMouseLeave() { + var t2; + this.inHover = false, (null === (t2 = this.instance.panzoom) || void 0 === t2 ? void 0 : t2.isResting) && this.resume(); + } + onTimerEnd() { + const t2 = this.instance; + "play" === this.state && (t2.isInfinite || t2.page !== t2.pages.length - 1 ? t2.slideNext() : t2.slideTo(0)); + } + removeProgressBar() { + this.progressBar && (this.progressBar.remove(), this.progressBar = null); + } + createProgressBar() { + var t2; + if (!this.option("showProgress")) return null; + this.removeProgressBar(); + const e2 = this.instance, i2 = (null === (t2 = e2.pages[e2.page]) || void 0 === t2 ? void 0 : t2.slides) || []; + let n2 = this.option("progressParentEl"); + if (n2 || (n2 = (1 === i2.length ? i2[0].el : null) || e2.viewport), !n2) return null; + const s2 = document.createElement("div"); + return P(s2, "f-progress"), n2.prepend(s2), this.progressBar = s2, s2.offsetHeight, s2; + } + set() { + const t2 = this, e2 = t2.instance; + if (e2.pages.length < 2) return; + if (t2.timer) return; + const i2 = t2.option("timeout"); + t2.state = zt, P(e2.container, "has-autoplay"); + let n2 = t2.createProgressBar(); + n2 && (n2.style.transitionDuration = `${i2}ms`, n2.style.transform = "scaleX(1)"), t2.timer = setTimeout(() => { + t2.timer = null, t2.inHover || t2.onTimerEnd(); + }, i2), t2.emit("set"); + } + clear() { + const t2 = this; + t2.timer && (clearTimeout(t2.timer), t2.timer = null), t2.removeProgressBar(); + } + start() { + const t2 = this; + if (t2.set(), t2.state !== kt) { + if (t2.option("pauseOnHover")) { + const e2 = t2.instance.container; + e2.addEventListener("mouseenter", t2.onMouseEnter, false), e2.addEventListener("mouseleave", t2.onMouseLeave, false); + } + document.addEventListener("visibilitychange", t2.onVisibilityChange, false), t2.emit("start"); + } + } + stop() { + const t2 = this, e2 = t2.state, i2 = t2.instance.container; + t2.clear(), t2.state = kt, i2.removeEventListener("mouseenter", t2.onMouseEnter, false), i2.removeEventListener("mouseleave", t2.onMouseLeave, false), document.removeEventListener("visibilitychange", t2.onVisibilityChange, false), S(i2, "has-autoplay"), e2 !== kt && t2.emit("stop"); + } + pause() { + const t2 = this; + t2.state === zt && (t2.state = Rt, t2.clear(), t2.emit(Rt)); + } + resume() { + const t2 = this, e2 = t2.instance; + if (e2.isInfinite || e2.page !== e2.pages.length - 1) if (t2.state !== zt) { + if (t2.state === Rt && !t2.inHover) { + const e3 = new Event("resume", { bubbles: true, cancelable: true }); + t2.emit("resume", e3), e3.defaultPrevented || t2.set(); + } + } else t2.set(); + else t2.stop(); + } + toggle() { + this.state === zt || this.state === Rt ? this.stop() : this.start(); + } + attach() { + const t2 = this, e2 = t2.instance; + e2.on("ready", t2.onReady), e2.on("Panzoom.startAnimation", t2.onChange), e2.on("Panzoom.endAnimation", t2.onSettle), e2.on("Panzoom.touchMove", t2.onChange); + } + detach() { + const t2 = this, e2 = t2.instance; + e2.off("ready", t2.onReady), e2.off("Panzoom.startAnimation", t2.onChange), e2.off("Panzoom.endAnimation", t2.onSettle), e2.off("Panzoom.touchMove", t2.onChange), t2.stop(); + } +}; +Object.defineProperty(It, "defaults", { enumerable: true, configurable: true, writable: true, value: { autoStart: true, pauseOnHover: true, progressParentEl: null, showProgress: true, timeout: 3e3 } }); +var Dt = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "ref", { enumerable: true, configurable: true, writable: true, value: null }); + } + onPrepare(t2) { + const e2 = t2.carousel; + if (!e2) return; + const i2 = t2.container; + i2 && (e2.options.Autoplay = u({ autoStart: false }, this.option("Autoplay") || {}, { pauseOnHover: false, timeout: this.option("timeout"), progressParentEl: () => this.option("progressParentEl") || null, on: { start: () => { + t2.emit("startSlideshow"); + }, set: (e3) => { + var n2; + i2.classList.add("has-slideshow"), (null === (n2 = t2.getSlide()) || void 0 === n2 ? void 0 : n2.state) !== lt.Ready && e3.pause(); + }, stop: () => { + i2.classList.remove("has-slideshow"), t2.isCompact || t2.endIdle(), t2.emit("endSlideshow"); + }, resume: (e3, i3) => { + var n2, s2, o2; + !i3 || !i3.cancelable || (null === (n2 = t2.getSlide()) || void 0 === n2 ? void 0 : n2.state) === lt.Ready && (null === (o2 = null === (s2 = t2.carousel) || void 0 === s2 ? void 0 : s2.panzoom) || void 0 === o2 ? void 0 : o2.isResting) || i3.preventDefault(); + } } }), e2.attachPlugins({ Autoplay: It }), this.ref = e2.plugins.Autoplay); + } + onReady(t2) { + const e2 = t2.carousel, i2 = this.ref; + i2 && e2 && this.option("playOnStart") && (e2.isInfinite || e2.page < e2.pages.length - 1) && i2.start(); + } + onDone(t2, e2) { + const i2 = this.ref, n2 = t2.carousel; + if (!i2 || !n2) return; + const s2 = e2.panzoom; + s2 && s2.on("startAnimation", () => { + t2.isCurrentSlide(e2) && i2.stop(); + }), t2.isCurrentSlide(e2) && i2.resume(); + } + onKeydown(t2, e2) { + var i2; + const n2 = this.ref; + n2 && e2 === this.option("key") && "BUTTON" !== (null === (i2 = document.activeElement) || void 0 === i2 ? void 0 : i2.nodeName) && n2.toggle(); + } + attach() { + const t2 = this, e2 = t2.instance; + e2.on("Carousel.init", t2.onPrepare), e2.on("Carousel.ready", t2.onReady), e2.on("done", t2.onDone), e2.on("keydown", t2.onKeydown); + } + detach() { + const t2 = this, e2 = t2.instance; + e2.off("Carousel.init", t2.onPrepare), e2.off("Carousel.ready", t2.onReady), e2.off("done", t2.onDone), e2.off("keydown", t2.onKeydown); + } +}; +Object.defineProperty(Dt, "defaults", { enumerable: true, configurable: true, writable: true, value: { key: " ", playOnStart: false, progressParentEl: (t2) => { + var e2; + return (null === (e2 = t2.instance.container) || void 0 === e2 ? void 0 : e2.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]")) || t2.instance.container; +}, timeout: 3e3 } }); +var Ft = { classes: { container: "f-thumbs f-carousel__thumbs", viewport: "f-thumbs__viewport", track: "f-thumbs__track", slide: "f-thumbs__slide", isResting: "is-resting", isSelected: "is-selected", isLoading: "is-loading", hasThumbs: "has-thumbs" }, minCount: 2, parentEl: null, thumbTpl: '', type: "modern" }; +var jt; +!function(t2) { + t2[t2.Init = 0] = "Init", t2[t2.Ready = 1] = "Ready", t2[t2.Hidden = 2] = "Hidden"; +}(jt || (jt = {})); +var Bt = "isResting"; +var Ht = "thumbWidth"; +var Nt = "thumbHeight"; +var _t = "thumbClipWidth"; +var $t = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "type", { enumerable: true, configurable: true, writable: true, value: "modern" }), Object.defineProperty(this, "container", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "track", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "carousel", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "thumbWidth", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "thumbClipWidth", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "thumbHeight", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "thumbGap", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "thumbExtraGap", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: jt.Init }); + } + get isModern() { + return "modern" === this.type; + } + onInitSlide(t2, e2) { + const i2 = e2.el ? e2.el.dataset : void 0; + i2 && (e2.thumbSrc = i2.thumbSrc || e2.thumbSrc || "", e2[_t] = parseFloat(i2[_t] || "") || e2[_t] || 0, e2[Nt] = parseFloat(i2.thumbHeight || "") || e2[Nt] || 0), this.addSlide(e2); + } + onInitSlides() { + this.build(); + } + onChange() { + var t2; + if (!this.isModern) return; + const e2 = this.container, i2 = this.instance, n2 = i2.panzoom, s2 = this.carousel, a2 = s2 ? s2.panzoom : null, r2 = i2.page; + if (n2 && s2 && a2) { + if (n2.isDragging) { + S(e2, this.cn(Bt)); + let n3 = (null === (t2 = s2.pages[r2]) || void 0 === t2 ? void 0 : t2.pos) || 0; + n3 += i2.getProgress(r2) * (this[_t] + this.thumbGap); + let o2 = a2.getBounds(); + -1 * n3 > o2.x.min && -1 * n3 < o2.x.max && a2.panTo({ x: -1 * n3, friction: 0.12 }); + } else o(e2, this.cn(Bt), n2.isResting); + this.shiftModern(); + } + } + onRefresh() { + this.updateProps(); + for (const t2 of this.instance.slides || []) this.resizeModernSlide(t2); + this.shiftModern(); + } + isDisabled() { + const t2 = this.option("minCount") || 0; + if (t2) { + const e3 = this.instance; + let i2 = 0; + for (const t3 of e3.slides || []) t3.thumbSrc && i2++; + if (i2 < t2) return true; + } + const e2 = this.option("type"); + return ["modern", "classic"].indexOf(e2) < 0; + } + getThumb(t2) { + const e2 = this.option("thumbTpl") || ""; + return { html: this.instance.localize(e2, [["%i", t2.index], ["%d", t2.index + 1], ["%s", t2.thumbSrc || "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"]]) }; + } + addSlide(t2) { + const e2 = this.carousel; + e2 && e2.addSlide(t2.index, this.getThumb(t2)); + } + getSlides() { + const t2 = []; + for (const e2 of this.instance.slides || []) t2.push(this.getThumb(e2)); + return t2; + } + resizeModernSlide(t2) { + this.isModern && (t2[Ht] = t2[_t] && t2[Nt] ? Math.round(this[Nt] * (t2[_t] / t2[Nt])) : this[Ht]); + } + updateProps() { + const t2 = this.container; + if (!t2) return; + const e2 = (e3) => parseFloat(getComputedStyle(t2).getPropertyValue("--f-thumb-" + e3)) || 0; + this.thumbGap = e2("gap"), this.thumbExtraGap = e2("extra-gap"), this[Ht] = e2("width") || 40, this[_t] = e2("clip-width") || 40, this[Nt] = e2("height") || 40; + } + build() { + const t2 = this; + if (t2.state !== jt.Init) return; + if (t2.isDisabled()) return void t2.emit("disabled"); + const e2 = t2.instance, i2 = e2.container, n2 = t2.getSlides(), s2 = t2.option("type"); + t2.type = s2; + const o2 = t2.option("parentEl"), a2 = t2.cn("container"), r2 = t2.cn("track"); + let l2 = null == o2 ? void 0 : o2.querySelector("." + a2); + l2 || (l2 = document.createElement("div"), P(l2, a2), o2 ? o2.appendChild(l2) : i2.after(l2)), P(l2, `is-${s2}`), P(i2, t2.cn("hasThumbs")), t2.container = l2, t2.updateProps(); + let c2 = l2.querySelector("." + r2); + c2 || (c2 = document.createElement("div"), P(c2, t2.cn("track")), l2.appendChild(c2)), t2.track = c2; + const h2 = u({}, { track: c2, infinite: false, center: true, fill: "classic" === s2, dragFree: true, slidesPerPage: 1, transition: false, preload: 0.25, friction: 0.12, Panzoom: { maxVelocity: 0 }, Dots: false, Navigation: false, classes: { container: "f-thumbs", viewport: "f-thumbs__viewport", track: "f-thumbs__track", slide: "f-thumbs__slide" } }, t2.option("Carousel") || {}, { Sync: { target: e2 }, slides: n2 }), d2 = new e2.constructor(l2, h2); + d2.on("createSlide", (e3, i3) => { + t2.setProps(i3.index), t2.emit("createSlide", i3, i3.el); + }), d2.on("ready", () => { + t2.shiftModern(), t2.emit("ready"); + }), d2.on("refresh", () => { + t2.shiftModern(); + }), d2.on("Panzoom.click", (e3, i3, n3) => { + t2.onClick(n3); + }), t2.carousel = d2, t2.state = jt.Ready; + } + onClick(t2) { + t2.preventDefault(), t2.stopPropagation(); + const e2 = this.instance, { pages: i2, page: n2 } = e2, s2 = (t3) => { + if (t3) { + const e3 = t3.closest("[data-carousel-index]"); + if (e3) return [parseInt(e3.dataset.carouselIndex || "", 10) || 0, e3]; + } + return [-1, void 0]; + }, o2 = (t3, e3) => { + const i3 = document.elementFromPoint(t3, e3); + return i3 ? s2(i3) : [-1, void 0]; + }; + let [a2, r2] = s2(t2.target); + if (a2 > -1) return; + const l2 = this[_t], c2 = t2.clientX, h2 = t2.clientY; + let [d2, u2] = o2(c2 - l2, h2), [p2, f2] = o2(c2 + l2, h2); + u2 && f2 ? (a2 = Math.abs(c2 - u2.getBoundingClientRect().right) < Math.abs(c2 - f2.getBoundingClientRect().left) ? d2 : p2, a2 === n2 && (a2 = a2 === d2 ? p2 : d2)) : u2 ? a2 = d2 : f2 && (a2 = p2), a2 > -1 && i2[a2] && e2.slideTo(a2); + } + getShift(t2) { + var e2; + const i2 = this, { instance: n2 } = i2, s2 = i2.carousel; + if (!n2 || !s2) return 0; + const o2 = i2[Ht], a2 = i2[_t], r2 = i2.thumbGap, l2 = i2.thumbExtraGap; + if (!(null === (e2 = s2.slides[t2]) || void 0 === e2 ? void 0 : e2.el)) return 0; + const c2 = 0.5 * (o2 - a2), h2 = n2.pages.length - 1; + let d2 = n2.getProgress(0), u2 = n2.getProgress(h2), p2 = n2.getProgress(t2, false, true), f2 = 0, g2 = c2 + l2 + r2; + const m2 = d2 < 0 && d2 > -1, v2 = u2 > 0 && u2 < 1; + return 0 === t2 ? (f2 = g2 * Math.abs(d2), v2 && 1 === d2 && (f2 -= g2 * Math.abs(u2))) : t2 === h2 ? (f2 = g2 * Math.abs(u2) * -1, m2 && -1 === u2 && (f2 += g2 * Math.abs(d2))) : m2 || v2 ? (f2 = -1 * g2, f2 += g2 * Math.abs(d2), f2 += g2 * (1 - Math.abs(u2))) : f2 = g2 * p2, f2; + } + setProps(e2) { + var i2; + const n2 = this; + if (!n2.isModern) return; + const { instance: s2 } = n2, o2 = n2.carousel; + if (s2 && o2) { + const a2 = null === (i2 = o2.slides[e2]) || void 0 === i2 ? void 0 : i2.el; + if (a2 && a2.childNodes.length) { + let i3 = t(1 - Math.abs(s2.getProgress(e2))), o3 = t(n2.getShift(e2)); + a2.style.setProperty("--progress", i3 ? i3 + "" : ""), a2.style.setProperty("--shift", o3 + ""); + } + } + } + shiftModern() { + const t2 = this; + if (!t2.isModern) return; + const { instance: e2, track: i2 } = t2, n2 = e2.panzoom, s2 = t2.carousel; + if (!(e2 && i2 && n2 && s2)) return; + if (n2.state === m.Init || n2.state === m.Destroy) return; + for (const i3 of e2.slides) t2.setProps(i3.index); + let o2 = (t2[_t] + t2.thumbGap) * (s2.slides.length || 0); + i2.style.setProperty("--width", o2 + ""); + } + cleanup() { + const t2 = this; + t2.carousel && t2.carousel.destroy(), t2.carousel = null, t2.container && t2.container.remove(), t2.container = null, t2.track && t2.track.remove(), t2.track = null, t2.state = jt.Init, S(t2.instance.container, t2.cn("hasThumbs")); + } + attach() { + const t2 = this, e2 = t2.instance; + e2.on("initSlide", t2.onInitSlide), e2.state === B.Init ? e2.on("initSlides", t2.onInitSlides) : t2.onInitSlides(), e2.on(["change", "Panzoom.afterTransform"], t2.onChange), e2.on("Panzoom.refresh", t2.onRefresh); + } + detach() { + const t2 = this, e2 = t2.instance; + e2.off("initSlide", t2.onInitSlide), e2.off("initSlides", t2.onInitSlides), e2.off(["change", "Panzoom.afterTransform"], t2.onChange), e2.off("Panzoom.refresh", t2.onRefresh), t2.cleanup(); + } +}; +Object.defineProperty($t, "defaults", { enumerable: true, configurable: true, writable: true, value: Ft }); +var Wt = Object.assign(Object.assign({}, Ft), { key: "t", showOnStart: true, parentEl: null }); +var Xt = "is-masked"; +var qt = "aria-hidden"; +var Yt = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "ref", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "hidden", { enumerable: true, configurable: true, writable: true, value: false }); + } + get isEnabled() { + const t2 = this.ref; + return t2 && !t2.isDisabled(); + } + get isHidden() { + return this.hidden; + } + onClick(t2, e2) { + e2.stopPropagation(); + } + onCreateSlide(t2, e2) { + var i2, n2, s2; + const o2 = (null === (s2 = null === (n2 = null === (i2 = this.instance) || void 0 === i2 ? void 0 : i2.carousel) || void 0 === n2 ? void 0 : n2.slides[e2.index]) || void 0 === s2 ? void 0 : s2.type) || "", a2 = e2.el; + if (a2 && o2) { + let t3 = `for-${o2}`; + ["video", "youtube", "vimeo", "html5video"].includes(o2) && (t3 += " for-video"), P(a2, t3); + } + } + onInit() { + var t2; + const e2 = this, i2 = e2.instance, n2 = i2.carousel; + if (e2.ref || !n2) return; + const s2 = e2.option("parentEl") || i2.footer || i2.container; + if (!s2) return; + const o2 = u({}, e2.options, { parentEl: s2, classes: { container: "f-thumbs fancybox__thumbs" }, Carousel: { Sync: { friction: i2.option("Carousel.friction") || 0 } }, on: { ready: (t3) => { + const i3 = t3.container; + i3 && this.hidden && (e2.refresh(), i3.style.transition = "none", e2.hide(), i3.offsetHeight, queueMicrotask(() => { + i3.style.transition = "", e2.show(); + })); + } } }); + o2.Carousel = o2.Carousel || {}, o2.Carousel.on = u((null === (t2 = e2.options.Carousel) || void 0 === t2 ? void 0 : t2.on) || {}, { click: this.onClick, createSlide: this.onCreateSlide }), n2.options.Thumbs = o2, n2.attachPlugins({ Thumbs: $t }), e2.ref = n2.plugins.Thumbs, e2.option("showOnStart") || (e2.ref.state = jt.Hidden, e2.hidden = true); + } + onResize() { + var t2; + const e2 = null === (t2 = this.ref) || void 0 === t2 ? void 0 : t2.container; + e2 && (e2.style.maxHeight = ""); + } + onKeydown(t2, e2) { + const i2 = this.option("key"); + i2 && i2 === e2 && this.toggle(); + } + toggle() { + const t2 = this.ref; + if (t2 && !t2.isDisabled()) return t2.state === jt.Hidden ? (t2.state = jt.Init, void t2.build()) : void (this.hidden ? this.show() : this.hide()); + } + show() { + const t2 = this.ref; + if (!t2 || t2.isDisabled()) return; + const e2 = t2.container; + e2 && (this.refresh(), e2.offsetHeight, e2.removeAttribute(qt), e2.classList.remove(Xt), this.hidden = false); + } + hide() { + const t2 = this.ref, e2 = t2 && t2.container; + e2 && (this.refresh(), e2.offsetHeight, e2.classList.add(Xt), e2.setAttribute(qt, "true")), this.hidden = true; + } + refresh() { + const t2 = this.ref; + if (!t2 || !t2.state) return; + const e2 = t2.container, i2 = (null == e2 ? void 0 : e2.firstChild) || null; + e2 && i2 && i2.childNodes.length && (e2.style.maxHeight = `${i2.getBoundingClientRect().height}px`); + } + attach() { + const t2 = this, e2 = t2.instance; + e2.state === rt.Init ? e2.on("Carousel.init", t2.onInit) : t2.onInit(), e2.on("resize", t2.onResize), e2.on("keydown", t2.onKeydown); + } + detach() { + var t2; + const e2 = this, i2 = e2.instance; + i2.off("Carousel.init", e2.onInit), i2.off("resize", e2.onResize), i2.off("keydown", e2.onKeydown), null === (t2 = i2.carousel) || void 0 === t2 || t2.detachPlugins(["Thumbs"]), e2.ref = null; + } +}; +Object.defineProperty(Yt, "defaults", { enumerable: true, configurable: true, writable: true, value: Wt }); +var Vt = { panLeft: { icon: '', change: { panX: -100 } }, panRight: { icon: '', change: { panX: 100 } }, panUp: { icon: '', change: { panY: -100 } }, panDown: { icon: '', change: { panY: 100 } }, zoomIn: { icon: '', action: "zoomIn" }, zoomOut: { icon: '', action: "zoomOut" }, toggle1to1: { icon: '', action: "toggleZoom" }, toggleZoom: { icon: '', action: "toggleZoom" }, iterateZoom: { icon: '', action: "iterateZoom" }, rotateCCW: { icon: '', action: "rotateCCW" }, rotateCW: { icon: '', action: "rotateCW" }, flipX: { icon: '', action: "flipX" }, flipY: { icon: '', action: "flipY" }, fitX: { icon: '', action: "fitX" }, fitY: { icon: '', action: "fitY" }, reset: { icon: '', action: "reset" }, toggleFS: { icon: '', action: "toggleFS" } }; +var Zt; +!function(t2) { + t2[t2.Init = 0] = "Init", t2[t2.Ready = 1] = "Ready", t2[t2.Disabled = 2] = "Disabled"; +}(Zt || (Zt = {})); +var Ut = { absolute: "auto", display: { left: ["infobar"], middle: [], right: ["iterateZoom", "slideshow", "fullscreen", "thumbs", "close"] }, enabled: "auto", items: { infobar: { tpl: '
/
' }, download: { tpl: '' }, prev: { tpl: '' }, next: { tpl: '' }, slideshow: { tpl: '' }, fullscreen: { tpl: '' }, thumbs: { tpl: '' }, close: { tpl: '' } }, parentEl: null }; +var Gt = { tabindex: "-1", width: "24", height: "24", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }; +var Kt = "has-toolbar"; +var Jt = "fancybox__toolbar"; +var Qt = class extends _ { + constructor() { + super(...arguments), Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: Zt.Init }), Object.defineProperty(this, "container", { enumerable: true, configurable: true, writable: true, value: null }); + } + onReady(t2) { + var e2; + if (!t2.carousel) return; + let i2 = this.option("display"), n2 = this.option("absolute"), s2 = this.option("enabled"); + if ("auto" === s2) { + const t3 = this.instance.carousel; + let e3 = 0; + if (t3) for (const i3 of t3.slides) (i3.panzoom || "image" === i3.type) && e3++; + e3 || (s2 = false); + } + s2 || (i2 = void 0); + let o2 = 0; + const a2 = { left: [], middle: [], right: [] }; + if (i2) for (const t3 of ["left", "middle", "right"]) for (const n3 of i2[t3]) { + const i3 = this.createEl(n3); + i3 && (null === (e2 = a2[t3]) || void 0 === e2 || e2.push(i3), o2++); + } + let r2 = null; + if (o2 && (r2 = this.createContainer()), r2) { + for (const [t3, e3] of Object.entries(a2)) { + const i3 = document.createElement("div"); + P(i3, Jt + "__column is-" + t3); + for (const t4 of e3) i3.appendChild(t4); + "auto" !== n2 || "middle" !== t3 || e3.length || (n2 = true), r2.appendChild(i3); + } + true === n2 && P(r2, "is-absolute"), this.state = Zt.Ready, this.onRefresh(); + } else this.state = Zt.Disabled; + } + onClick(t2) { + var e2, i2; + const n2 = this.instance, s2 = n2.getSlide(), o2 = null == s2 ? void 0 : s2.panzoom, a2 = t2.target, r2 = a2 && E(a2) ? a2.dataset : null; + if (!r2) return; + if (void 0 !== r2.fancyboxToggleThumbs) return t2.preventDefault(), t2.stopPropagation(), void (null === (e2 = n2.plugins.Thumbs) || void 0 === e2 || e2.toggle()); + if (void 0 !== r2.fancyboxToggleFullscreen) return t2.preventDefault(), t2.stopPropagation(), void this.instance.toggleFullscreen(); + if (void 0 !== r2.fancyboxToggleSlideshow) { + t2.preventDefault(), t2.stopPropagation(); + const e3 = null === (i2 = n2.carousel) || void 0 === i2 ? void 0 : i2.plugins.Autoplay; + let s3 = e3.isActive; + return o2 && "mousemove" === o2.panMode && !s3 && o2.reset(), void (s3 ? e3.stop() : e3.start()); + } + const l2 = r2.panzoomAction, c2 = r2.panzoomChange; + if ((c2 || l2) && (t2.preventDefault(), t2.stopPropagation()), c2) { + let t3 = {}; + try { + t3 = JSON.parse(c2); + } catch (t4) { + } + o2 && o2.applyChange(t3); + } else l2 && o2 && o2[l2] && o2[l2](); + } + onChange() { + this.onRefresh(); + } + onRefresh() { + if (this.instance.isClosing()) return; + const t2 = this.container; + if (!t2) return; + const e2 = this.instance.getSlide(); + if (!e2 || e2.state !== lt.Ready) return; + const i2 = e2 && !e2.error && e2.panzoom; + for (const e3 of t2.querySelectorAll("[data-panzoom-action]")) i2 ? (e3.removeAttribute("disabled"), e3.removeAttribute("tabindex")) : (e3.setAttribute("disabled", ""), e3.setAttribute("tabindex", "-1")); + let n2 = i2 && i2.canZoomIn(), s2 = i2 && i2.canZoomOut(); + for (const e3 of t2.querySelectorAll('[data-panzoom-action="zoomIn"]')) n2 ? (e3.removeAttribute("disabled"), e3.removeAttribute("tabindex")) : (e3.setAttribute("disabled", ""), e3.setAttribute("tabindex", "-1")); + for (const e3 of t2.querySelectorAll('[data-panzoom-action="zoomOut"]')) s2 ? (e3.removeAttribute("disabled"), e3.removeAttribute("tabindex")) : (e3.setAttribute("disabled", ""), e3.setAttribute("tabindex", "-1")); + for (const e3 of t2.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')) { + s2 || n2 ? (e3.removeAttribute("disabled"), e3.removeAttribute("tabindex")) : (e3.setAttribute("disabled", ""), e3.setAttribute("tabindex", "-1")); + const t3 = e3.querySelector("g"); + t3 && (t3.style.display = n2 ? "" : "none"); + } + } + onDone(t2, e2) { + var i2; + null === (i2 = e2.panzoom) || void 0 === i2 || i2.on("afterTransform", () => { + this.instance.isCurrentSlide(e2) && this.onRefresh(); + }), this.instance.isCurrentSlide(e2) && this.onRefresh(); + } + createContainer() { + const t2 = this.instance.container; + if (!t2) return null; + const e2 = this.option("parentEl") || t2; + let i2 = e2.querySelector("." + Jt); + return i2 || (i2 = document.createElement("div"), P(i2, Jt), e2.prepend(i2)), i2.addEventListener("click", this.onClick, { passive: false, capture: true }), t2 && P(t2, Kt), this.container = i2, i2; + } + createEl(t2) { + const e2 = this.instance, i2 = e2.carousel; + if (!i2) return null; + if ("toggleFS" === t2) return null; + if ("fullscreen" === t2 && !ot()) return null; + let s2 = null; + const o2 = i2.slides.length || 0; + let a2 = 0, r2 = 0; + for (const t3 of i2.slides) (t3.panzoom || "image" === t3.type) && a2++, ("image" === t3.type || t3.downloadSrc) && r2++; + if (o2 < 2 && ["infobar", "prev", "next"].includes(t2)) return s2; + if (void 0 !== Vt[t2] && !a2) return null; + if ("download" === t2 && !r2) return null; + if ("thumbs" === t2) { + const t3 = e2.plugins.Thumbs; + if (!t3 || !t3.isEnabled) return null; + } + if ("slideshow" === t2) { + if (!i2.plugins.Autoplay || o2 < 2) return null; + } + if (void 0 !== Vt[t2]) { + const e3 = Vt[t2]; + s2 = document.createElement("button"), s2.setAttribute("title", this.instance.localize(`{{${t2.toUpperCase()}}}`)), P(s2, "f-button"), e3.action && (s2.dataset.panzoomAction = e3.action), e3.change && (s2.dataset.panzoomChange = JSON.stringify(e3.change)), s2.appendChild(n(this.instance.localize(e3.icon))); + } else { + const e3 = (this.option("items") || [])[t2]; + e3 && (s2 = n(this.instance.localize(e3.tpl)), "function" == typeof e3.click && s2.addEventListener("click", (t3) => { + t3.preventDefault(), t3.stopPropagation(), "function" == typeof e3.click && e3.click.call(this, this, t3); + })); + } + const l2 = null == s2 ? void 0 : s2.querySelector("svg"); + if (l2) for (const [t3, e3] of Object.entries(Gt)) l2.getAttribute(t3) || l2.setAttribute(t3, String(e3)); + return s2; + } + removeContainer() { + const t2 = this.container; + t2 && t2.remove(), this.container = null, this.state = Zt.Disabled; + const e2 = this.instance.container; + e2 && S(e2, Kt); + } + attach() { + const t2 = this, e2 = t2.instance; + e2.on("Carousel.initSlides", t2.onReady), e2.on("done", t2.onDone), e2.on(["reveal", "Carousel.change"], t2.onChange), t2.onReady(t2.instance); + } + detach() { + const t2 = this, e2 = t2.instance; + e2.off("Carousel.initSlides", t2.onReady), e2.off("done", t2.onDone), e2.off(["reveal", "Carousel.change"], t2.onChange), t2.removeContainer(); + } +}; +Object.defineProperty(Qt, "defaults", { enumerable: true, configurable: true, writable: true, value: Ut }); +var te = { Hash: class extends _ { + onReady() { + ht = false; + } + onChange(t2) { + ut && clearTimeout(ut); + const { hash: e2 } = pt(), { hash: i2 } = ft(), n2 = t2.isOpeningSlide(t2.getSlide()); + n2 && (ct = i2 === e2 ? "" : i2), e2 && e2 !== i2 && (ut = setTimeout(() => { + try { + if (t2.state === rt.Ready) { + let t3 = "replaceState"; + n2 && !dt && (t3 = "pushState", dt = true), window.history[t3]({}, document.title, window.location.pathname + window.location.search + e2); + } + } catch (t3) { + } + }, 300)); + } + onClose(t2) { + if (ut && clearTimeout(ut), !ht && dt) return dt = false, ht = false, void window.history.back(); + if (!ht) try { + window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (ct || "")); + } catch (t3) { + } + } + attach() { + const t2 = this.instance; + t2.on("ready", this.onReady), t2.on(["Carousel.ready", "Carousel.change"], this.onChange), t2.on("close", this.onClose); + } + detach() { + const t2 = this.instance; + t2.off("ready", this.onReady), t2.off(["Carousel.ready", "Carousel.change"], this.onChange), t2.off("close", this.onClose); + } + static parseURL() { + return ft(); + } + static startFromUrl() { + gt(); + } + static destroy() { + window.removeEventListener("hashchange", vt, false); + } +}, Html: Lt, Images: wt, Slideshow: Dt, Thumbs: Yt, Toolbar: Qt }; +var ee = "with-fancybox"; +var ie = "hide-scrollbar"; +var ne = "--fancybox-scrollbar-compensate"; +var se = "--fancybox-body-margin"; +var oe = "aria-hidden"; +var ae = "is-using-tab"; +var re = "is-animated"; +var le = "is-compact"; +var ce = "is-loading"; +var he = "is-opening"; +var de = "has-caption"; +var ue = "disabled"; +var pe = "tabindex"; +var fe = "download"; +var ge = "href"; +var me = "src"; +var ve = (t2) => "string" == typeof t2; +var be = function() { + var t2 = window.getSelection(); + return !!t2 && "Range" === t2.type; +}; +var ye; +var we = null; +var xe = null; +var Ee = 0; +var Se = 0; +var Pe = 0; +var Ce = 0; +var Te = /* @__PURE__ */ new Map(); +var Me = 0; +var Oe = class _Oe extends g { + get isIdle() { + return this.idle; + } + get isCompact() { + return this.option("compact"); + } + constructor(t2 = [], e2 = {}, i2 = {}) { + super(e2), Object.defineProperty(this, "userSlides", { enumerable: true, configurable: true, writable: true, value: [] }), Object.defineProperty(this, "userPlugins", { enumerable: true, configurable: true, writable: true, value: {} }), Object.defineProperty(this, "idle", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "idleTimer", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "clickTimer", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "pwt", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "ignoreFocusChange", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "startedFs", { enumerable: true, configurable: true, writable: true, value: false }), Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: rt.Init }), Object.defineProperty(this, "id", { enumerable: true, configurable: true, writable: true, value: 0 }), Object.defineProperty(this, "container", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "caption", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "footer", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "carousel", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "lastFocus", { enumerable: true, configurable: true, writable: true, value: null }), Object.defineProperty(this, "prevMouseMoveEvent", { enumerable: true, configurable: true, writable: true, value: void 0 }), ye || (ye = ot()), this.id = e2.id || ++Me, Te.set(this.id, this), this.userSlides = t2, this.userPlugins = i2, queueMicrotask(() => { + this.init(); + }); + } + init() { + if (this.state === rt.Destroy) return; + this.state = rt.Init, this.attachPlugins(Object.assign(Object.assign({}, _Oe.Plugins), this.userPlugins)), this.emit("init"), this.emit("attachPlugins"), true === this.option("hideScrollbar") && (() => { + if (!et) return; + const t3 = document, e2 = t3.body, i2 = t3.documentElement; + if (e2.classList.contains(ie)) return; + let n2 = window.innerWidth - i2.getBoundingClientRect().width; + const s2 = parseFloat(window.getComputedStyle(e2).marginRight); + n2 < 0 && (n2 = 0), i2.style.setProperty(ne, `${n2}px`), s2 && e2.style.setProperty(se, `${s2}px`), e2.classList.add(ie); + })(), this.initLayout(), this.scale(); + const t2 = () => { + this.initCarousel(this.userSlides), this.state = rt.Ready, this.attachEvents(), this.emit("ready"), setTimeout(() => { + this.container && this.container.setAttribute(oe, "false"); + }, 16); + }; + this.option("Fullscreen.autoStart") && ye && !ye.isFullscreen() ? ye.request().then(() => { + this.startedFs = true, t2(); + }).catch(() => t2()) : t2(); + } + initLayout() { + var t2, e2; + const i2 = this.option("parentEl") || document.body, s2 = n(this.localize(this.option("tpl.main") || "")); + if (s2) { + if (s2.setAttribute("id", `fancybox-${this.id}`), s2.setAttribute("aria-label", this.localize("{{MODAL}}")), s2.classList.toggle(le, this.isCompact), P(s2, this.option("mainClass") || ""), P(s2, he), this.container = s2, this.footer = s2.querySelector(".fancybox__footer"), i2.appendChild(s2), P(document.documentElement, ee), we && xe || (we = document.createElement("span"), P(we, "fancybox-focus-guard"), we.setAttribute(pe, "0"), we.setAttribute(oe, "true"), we.setAttribute("aria-label", "Focus guard"), xe = we.cloneNode(), null === (t2 = s2.parentElement) || void 0 === t2 || t2.insertBefore(we, s2), null === (e2 = s2.parentElement) || void 0 === e2 || e2.append(xe)), s2.addEventListener("mousedown", (t3) => { + Ee = t3.pageX, Se = t3.pageY, S(s2, ae); + }), this.option("closeExisting")) for (const t3 of Te.values()) t3.id !== this.id && t3.close(); + else this.option("animated") && (P(s2, re), setTimeout(() => { + this.isClosing() || S(s2, re); + }, 350)); + this.emit("initLayout"); + } + } + initCarousel(t2) { + const i2 = this.container; + if (!i2) return; + const n2 = i2.querySelector(".fancybox__carousel"); + if (!n2) return; + const s2 = this.carousel = new Q(n2, u({}, { slides: t2, transition: "fade", Panzoom: { lockAxis: this.option("dragToClose") ? "xy" : "x", infinite: !!this.option("dragToClose") && "y" }, Dots: false, Navigation: { classes: { container: "fancybox__nav", button: "f-button", isNext: "is-next", isPrev: "is-prev" } }, initialPage: this.option("startIndex"), l10n: this.option("l10n") }, this.option("Carousel") || {})); + s2.on("*", (t3, e2, ...i3) => { + this.emit(`Carousel.${e2}`, t3, ...i3); + }), s2.on(["ready", "change"], () => { + this.manageCaption(); + }), this.on("Carousel.removeSlide", (t3, e2, i3) => { + this.clearContent(i3), i3.state = void 0; + }), s2.on("Panzoom.touchStart", () => { + var t3, e2; + this.isCompact || this.endIdle(), (null === (t3 = document.activeElement) || void 0 === t3 ? void 0 : t3.closest(".f-thumbs")) && (null === (e2 = this.container) || void 0 === e2 || e2.focus()); + }), s2.on("settle", () => { + this.idleTimer || this.isCompact || !this.option("idle") || this.setIdle(), this.option("autoFocus") && !this.isClosing && this.checkFocus(); + }), this.option("dragToClose") && (s2.on("Panzoom.afterTransform", (t3, i3) => { + const n3 = this.getSlide(); + if (n3 && e(n3.el)) return; + const s3 = this.container; + if (s3) { + const t4 = Math.abs(i3.current.f), e2 = t4 < 1 ? "" : Math.max(0.5, Math.min(1, 1 - t4 / i3.contentRect.fitHeight * 1.5)); + s3.style.setProperty("--fancybox-ts", e2 ? "0s" : ""), s3.style.setProperty("--fancybox-opacity", e2 + ""); + } + }), s2.on("Panzoom.touchEnd", (t3, i3, n3) => { + var s3; + const o2 = this.getSlide(); + if (o2 && e(o2.el)) return; + if (i3.isMobile && document.activeElement && -1 !== ["TEXTAREA", "INPUT"].indexOf(null === (s3 = document.activeElement) || void 0 === s3 ? void 0 : s3.nodeName)) return; + const a2 = Math.abs(i3.dragOffset.y); + "y" === i3.lockedAxis && (a2 >= 200 || a2 >= 50 && i3.dragOffset.time < 300) && (n3 && n3.cancelable && n3.preventDefault(), this.close(n3, "f-throwOut" + (i3.current.f < 0 ? "Up" : "Down"))); + })), s2.on("change", (t3) => { + var e2; + let i3 = null === (e2 = this.getSlide()) || void 0 === e2 ? void 0 : e2.triggerEl; + if (i3) { + const e3 = new CustomEvent("slideTo", { bubbles: true, cancelable: true, detail: t3.page }); + i3.dispatchEvent(e3); + } + }), s2.on(["refresh", "change"], (t3) => { + const e2 = this.container; + if (!e2) return; + for (const i4 of e2.querySelectorAll("[data-fancybox-current-index]")) i4.innerHTML = t3.page + 1; + for (const i4 of e2.querySelectorAll("[data-fancybox-count]")) i4.innerHTML = t3.pages.length; + if (!t3.isInfinite) { + for (const i4 of e2.querySelectorAll("[data-fancybox-next]")) t3.page < t3.pages.length - 1 ? (i4.removeAttribute(ue), i4.removeAttribute(pe)) : (i4.setAttribute(ue, ""), i4.setAttribute(pe, "-1")); + for (const i4 of e2.querySelectorAll("[data-fancybox-prev]")) t3.page > 0 ? (i4.removeAttribute(ue), i4.removeAttribute(pe)) : (i4.setAttribute(ue, ""), i4.setAttribute(pe, "-1")); + } + const i3 = this.getSlide(); + if (!i3) return; + let n3 = i3.downloadSrc || ""; + n3 || "image" !== i3.type || i3.error || !ve(i3[me]) || (n3 = i3[me]); + for (const t4 of e2.querySelectorAll("[data-fancybox-download]")) { + const e3 = i3.downloadFilename; + n3 ? (t4.removeAttribute(ue), t4.removeAttribute(pe), t4.setAttribute(ge, n3), t4.setAttribute(fe, e3 || n3), t4.setAttribute("target", "_blank")) : (t4.setAttribute(ue, ""), t4.setAttribute(pe, "-1"), t4.removeAttribute(ge), t4.removeAttribute(fe)); + } + }), this.emit("initCarousel"); + } + attachEvents() { + const t2 = this, e2 = t2.container; + if (!e2) return; + e2.addEventListener("click", t2.onClick, { passive: false, capture: false }), e2.addEventListener("wheel", t2.onWheel, { passive: false, capture: false }), document.addEventListener("keydown", t2.onKeydown, { passive: false, capture: true }), document.addEventListener("visibilitychange", t2.onVisibilityChange, false), document.addEventListener("mousemove", t2.onMousemove), t2.option("trapFocus") && document.addEventListener("focus", t2.onFocus, true), window.addEventListener("resize", t2.onResize); + const i2 = window.visualViewport; + i2 && (i2.addEventListener("scroll", t2.onResize), i2.addEventListener("resize", t2.onResize)); + } + detachEvents() { + const t2 = this, e2 = t2.container; + if (!e2) return; + document.removeEventListener("keydown", t2.onKeydown, { passive: false, capture: true }), e2.removeEventListener("wheel", t2.onWheel, { passive: false, capture: false }), e2.removeEventListener("click", t2.onClick, { passive: false, capture: false }), document.removeEventListener("mousemove", t2.onMousemove), window.removeEventListener("resize", t2.onResize); + const i2 = window.visualViewport; + i2 && (i2.removeEventListener("resize", t2.onResize), i2.removeEventListener("scroll", t2.onResize)), document.removeEventListener("visibilitychange", t2.onVisibilityChange, false), document.removeEventListener("focus", t2.onFocus, true); + } + scale() { + const t2 = this.container; + if (!t2) return; + const e2 = window.visualViewport, i2 = Math.max(1, (null == e2 ? void 0 : e2.scale) || 1); + let n2 = "", s2 = "", o2 = ""; + if (e2 && i2 > 1) { + let t3 = `${e2.offsetLeft}px`, a2 = `${e2.offsetTop}px`; + n2 = e2.width * i2 + "px", s2 = e2.height * i2 + "px", o2 = `translate3d(${t3}, ${a2}, 0) scale(${1 / i2})`; + } + t2.style.transform = o2, t2.style.width = n2, t2.style.height = s2; + } + onClick(t2) { + var e2; + const { container: i2, isCompact: n2 } = this; + if (!i2 || this.isClosing()) return; + !n2 && this.option("idle") && this.resetIdle(); + const s2 = t2.composedPath()[0]; + if (s2.closest(".fancybox-spinner") || s2.closest("[data-fancybox-close]")) return t2.preventDefault(), void this.close(t2); + if (s2.closest("[data-fancybox-prev]")) return t2.preventDefault(), void this.prev(); + if (s2.closest("[data-fancybox-next]")) return t2.preventDefault(), void this.next(); + if ("click" === t2.type && 0 === t2.detail) return; + if (Math.abs(t2.pageX - Ee) > 30 || Math.abs(t2.pageY - Se) > 30) return; + const o2 = document.activeElement; + if (be() && o2 && i2.contains(o2)) return; + if (n2 && "image" === (null === (e2 = this.getSlide()) || void 0 === e2 ? void 0 : e2.type)) return void (this.clickTimer ? (clearTimeout(this.clickTimer), this.clickTimer = null) : this.clickTimer = setTimeout(() => { + this.toggleIdle(), this.clickTimer = null; + }, 350)); + if (this.emit("click", t2), t2.defaultPrevented) return; + let a2 = false; + if (s2.closest(".fancybox__content")) { + if (o2) { + if (o2.closest("[contenteditable]")) return; + s2.matches(nt) || o2.blur(); + } + if (be()) return; + a2 = this.option("contentClick"); + } else s2.closest(".fancybox__carousel") && !s2.matches(nt) && (a2 = this.option("backdropClick")); + "close" === a2 ? (t2.preventDefault(), this.close(t2)) : "next" === a2 ? (t2.preventDefault(), this.next()) : "prev" === a2 && (t2.preventDefault(), this.prev()); + } + onWheel(t2) { + const e2 = t2.target; + let n2 = this.option("wheel", t2); + e2.closest(".fancybox__thumbs") && (n2 = "slide"); + const s2 = "slide" === n2, o2 = [-t2.deltaX || 0, -t2.deltaY || 0, -t2.detail || 0].reduce(function(t3, e3) { + return Math.abs(e3) > Math.abs(t3) ? e3 : t3; + }), a2 = Math.max(-1, Math.min(1, o2)), r2 = Date.now(); + this.pwt && r2 - this.pwt < 300 ? s2 && t2.preventDefault() : (this.pwt = r2, this.emit("wheel", t2, a2), t2.defaultPrevented || ("close" === n2 ? (t2.preventDefault(), this.close(t2)) : "slide" === n2 && (i(e2) || (t2.preventDefault(), this[a2 > 0 ? "prev" : "next"]())))); + } + onScroll() { + window.scrollTo(Pe, Ce); + } + onKeydown(t2) { + if (!this.isTopmost()) return; + this.isCompact || !this.option("idle") || this.isClosing() || this.resetIdle(); + const e2 = t2.key, i2 = this.option("keyboard"); + if (!i2) return; + const n2 = t2.composedPath()[0], s2 = document.activeElement && document.activeElement.classList, o2 = s2 && s2.contains("f-button") || n2.dataset.carouselPage || n2.dataset.carouselIndex; + if ("Escape" !== e2 && !o2 && E(n2)) { + if (n2.isContentEditable || -1 !== ["TEXTAREA", "OPTION", "INPUT", "SELECT", "VIDEO"].indexOf(n2.nodeName)) return; + } + if ("Tab" === t2.key ? P(this.container, ae) : S(this.container, ae), t2.ctrlKey || t2.altKey || t2.shiftKey) return; + this.emit("keydown", e2, t2); + const a2 = i2[e2]; + a2 && "function" == typeof this[a2] && (t2.preventDefault(), this[a2]()); + } + onResize() { + const t2 = this.container; + if (!t2) return; + const e2 = this.isCompact; + t2.classList.toggle(le, e2), this.manageCaption(this.getSlide()), this.isCompact ? this.clearIdle() : this.endIdle(), this.scale(), this.emit("resize"); + } + onFocus(t2) { + this.isTopmost() && this.checkFocus(t2); + } + onMousemove(t2) { + this.prevMouseMoveEvent = t2, !this.isCompact && this.option("idle") && this.resetIdle(); + } + onVisibilityChange() { + "visible" === document.visibilityState ? this.checkFocus() : this.endIdle(); + } + manageCloseBtn(t2) { + const e2 = this.optionFor(t2, "closeButton") || false; + if ("auto" === e2) { + const t3 = this.plugins.Toolbar; + if (t3 && t3.state === Zt.Ready) return; + } + if (!e2) return; + if (!t2.contentEl || t2.closeBtnEl) return; + const i2 = this.option("tpl.closeButton"); + if (i2) { + const e3 = n(this.localize(i2)); + t2.closeBtnEl = t2.contentEl.appendChild(e3), t2.el && P(t2.el, "has-close-btn"); + } + } + manageCaption(t2 = void 0) { + var e2, i2; + const n2 = "fancybox__caption", s2 = this.container; + if (!s2) return; + S(s2, de); + const o2 = this.isCompact || this.option("commonCaption"), a2 = !o2; + if (this.caption && this.stop(this.caption), a2 && this.caption && (this.caption.remove(), this.caption = null), o2 && !this.caption) for (const t3 of (null === (e2 = this.carousel) || void 0 === e2 ? void 0 : e2.slides) || []) t3.captionEl && (t3.captionEl.remove(), t3.captionEl = void 0, S(t3.el, de), null === (i2 = t3.el) || void 0 === i2 || i2.removeAttribute("aria-labelledby")); + if (t2 || (t2 = this.getSlide()), !t2 || o2 && !this.isCurrentSlide(t2)) return; + const r2 = t2.el; + let l2 = this.optionFor(t2, "caption", ""); + if (!l2) return void (o2 && this.caption && this.animate(this.caption, "f-fadeOut", () => { + this.caption && (this.caption.innerHTML = ""); + })); + let c2 = null; + if (a2) { + if (c2 = t2.captionEl || null, r2 && !c2) { + const e3 = n2 + `_${this.id}_${t2.index}`; + c2 = document.createElement("div"), P(c2, n2), c2.setAttribute("id", e3), t2.captionEl = r2.appendChild(c2), P(r2, de), r2.setAttribute("aria-labelledby", e3); + } + } else { + if (c2 = this.caption, c2 || (c2 = s2.querySelector("." + n2)), !c2) { + c2 = document.createElement("div"), c2.dataset.fancyboxCaption = "", P(c2, n2); + (this.footer || s2).prepend(c2); + } + P(s2, de), this.caption = c2; + } + c2 && (c2.innerHTML = "", ve(l2) || "number" == typeof l2 ? c2.innerHTML = l2 + "" : l2 instanceof HTMLElement && c2.appendChild(l2)); + } + checkFocus(t2) { + this.focus(t2); + } + focus(t2) { + var e2; + if (this.ignoreFocusChange) return; + const i2 = document.activeElement || null, n2 = (null == t2 ? void 0 : t2.target) || null, s2 = this.container, o2 = null === (e2 = this.carousel) || void 0 === e2 ? void 0 : e2.viewport; + if (!s2 || !o2) return; + if (!t2 && i2 && s2.contains(i2)) return; + const a2 = this.getSlide(), r2 = a2 && a2.state === lt.Ready ? a2.el : null; + if (!r2 || r2.contains(i2) || s2 === i2) return; + t2 && t2.cancelable && t2.preventDefault(), this.ignoreFocusChange = true; + const l2 = Array.from(s2.querySelectorAll(nt)); + let c2 = [], h2 = null; + for (let t3 of l2) { + const e3 = !t3.offsetParent || !!t3.closest('[aria-hidden="true"]'), i3 = r2 && r2.contains(t3), n3 = !o2.contains(t3); + if (t3 === s2 || (i3 || n3) && !e3) { + c2.push(t3); + const e4 = t3.dataset.origTabindex; + void 0 !== e4 && e4 && (t3.tabIndex = parseFloat(e4)), t3.removeAttribute("data-orig-tabindex"), !t3.hasAttribute("autoFocus") && h2 || (h2 = t3); + } else { + const e4 = void 0 === t3.dataset.origTabindex ? t3.getAttribute("tabindex") || "" : t3.dataset.origTabindex; + e4 && (t3.dataset.origTabindex = e4), t3.tabIndex = -1; + } + } + let d2 = null; + t2 ? (!n2 || c2.indexOf(n2) < 0) && (d2 = h2 || s2, c2.length && (i2 === xe ? d2 = c2[0] : this.lastFocus !== s2 && i2 !== we || (d2 = c2[c2.length - 1]))) : d2 = a2 && "image" === a2.type ? s2 : h2 || s2, d2 && st(d2), this.lastFocus = document.activeElement, this.ignoreFocusChange = false; + } + next() { + const t2 = this.carousel; + t2 && t2.pages.length > 1 && t2.slideNext(); + } + prev() { + const t2 = this.carousel; + t2 && t2.pages.length > 1 && t2.slidePrev(); + } + jumpTo(...t2) { + this.carousel && this.carousel.slideTo(...t2); + } + isTopmost() { + var t2; + return (null === (t2 = _Oe.getInstance()) || void 0 === t2 ? void 0 : t2.id) == this.id; + } + animate(t2 = null, e2 = "", i2) { + if (!t2 || !e2) return void (i2 && i2()); + this.stop(t2); + const n2 = (s2) => { + s2.target === t2 && t2.dataset.animationName && (t2.removeEventListener("animationend", n2), delete t2.dataset.animationName, i2 && i2(), S(t2, e2)); + }; + t2.dataset.animationName = e2, t2.addEventListener("animationend", n2), P(t2, e2); + } + stop(t2) { + t2 && t2.dispatchEvent(new CustomEvent("animationend", { bubbles: false, cancelable: true, currentTarget: t2 })); + } + setContent(t2, e2 = "", i2 = true) { + if (this.isClosing()) return; + const s2 = t2.el; + if (!s2) return; + let o2 = null; + if (E(e2) ? o2 = e2 : (o2 = n(e2 + ""), E(o2) || (o2 = document.createElement("div"), o2.innerHTML = e2 + "")), ["img", "picture", "iframe", "video", "audio"].includes(o2.nodeName.toLowerCase())) { + const t3 = document.createElement("div"); + t3.appendChild(o2), o2 = t3; + } + E(o2) && t2.filter && !t2.error && (o2 = o2.querySelector(t2.filter)), o2 && E(o2) ? (P(o2, "fancybox__content"), t2.id && o2.setAttribute("id", t2.id), s2.classList.add(`has-${t2.error ? "error" : t2.type || "unknown"}`), s2.prepend(o2), "none" === o2.style.display && (o2.style.display = ""), "none" === getComputedStyle(o2).getPropertyValue("display") && (o2.style.display = t2.display || this.option("defaultDisplay") || "flex"), t2.contentEl = o2, i2 && this.revealContent(t2), this.manageCloseBtn(t2), this.manageCaption(t2)) : this.setError(t2, "{{ELEMENT_NOT_FOUND}}"); + } + revealContent(t2, e2) { + const i2 = t2.el, n2 = t2.contentEl; + i2 && n2 && (this.emit("reveal", t2), this.hideLoading(t2), t2.state = lt.Opening, (e2 = this.isOpeningSlide(t2) ? void 0 === e2 ? this.optionFor(t2, "showClass") : e2 : "f-fadeIn") ? this.animate(n2, e2, () => { + this.done(t2); + }) : this.done(t2)); + } + done(t2) { + this.isClosing() || (t2.state = lt.Ready, this.emit("done", t2), P(t2.el, "is-done"), this.isCurrentSlide(t2) && this.option("autoFocus") && queueMicrotask(() => { + var e2; + null === (e2 = t2.panzoom) || void 0 === e2 || e2.updateControls(), this.option("autoFocus") && this.focus(); + }), this.isOpeningSlide(t2) && (S(this.container, he), !this.isCompact && this.option("idle") && this.setIdle())); + } + isCurrentSlide(t2) { + const e2 = this.getSlide(); + return !(!t2 || !e2) && e2.index === t2.index; + } + isOpeningSlide(t2) { + var e2, i2; + return null === (null === (e2 = this.carousel) || void 0 === e2 ? void 0 : e2.prevPage) && t2 && t2.index === (null === (i2 = this.getSlide()) || void 0 === i2 ? void 0 : i2.index); + } + showLoading(t2) { + t2.state = lt.Loading; + const e2 = t2.el; + if (!e2) return; + P(e2, ce), this.emit("loading", t2), t2.spinnerEl || setTimeout(() => { + if (!this.isClosing() && !t2.spinnerEl && t2.state === lt.Loading) { + let i2 = n(x); + P(i2, "fancybox-spinner"), t2.spinnerEl = i2, e2.prepend(i2), this.animate(i2, "f-fadeIn"); + } + }, 250); + } + hideLoading(t2) { + const e2 = t2.el; + if (!e2) return; + const i2 = t2.spinnerEl; + this.isClosing() ? null == i2 || i2.remove() : (S(e2, ce), i2 && this.animate(i2, "f-fadeOut", () => { + i2.remove(); + }), t2.state === lt.Loading && (this.emit("loaded", t2), t2.state = lt.Ready)); + } + setError(t2, e2) { + if (this.isClosing()) return; + const i2 = new Event("error", { bubbles: true, cancelable: true }); + if (this.emit("error", i2, t2), i2.defaultPrevented) return; + t2.error = e2, this.hideLoading(t2), this.clearContent(t2); + const n2 = document.createElement("div"); + n2.classList.add("fancybox-error"), n2.innerHTML = this.localize(e2 || "

{{ERROR}}

"), this.setContent(t2, n2); + } + clearContent(t2) { + if (void 0 === t2.state) return; + this.emit("clearContent", t2), t2.contentEl && (t2.contentEl.remove(), t2.contentEl = void 0); + const e2 = t2.el; + e2 && (S(e2, "has-error"), S(e2, "has-unknown"), S(e2, `has-${t2.type || "unknown"}`)), t2.closeBtnEl && t2.closeBtnEl.remove(), t2.closeBtnEl = void 0, t2.captionEl && t2.captionEl.remove(), t2.captionEl = void 0, t2.spinnerEl && t2.spinnerEl.remove(), t2.spinnerEl = void 0; + } + getSlide() { + var t2; + const e2 = this.carousel; + return (null === (t2 = null == e2 ? void 0 : e2.pages[null == e2 ? void 0 : e2.page]) || void 0 === t2 ? void 0 : t2.slides[0]) || void 0; + } + close(t2, e2) { + if (this.isClosing()) return; + const i2 = new Event("shouldClose", { bubbles: true, cancelable: true }); + if (this.emit("shouldClose", i2, t2), i2.defaultPrevented) return; + t2 && t2.cancelable && (t2.preventDefault(), t2.stopPropagation()); + const n2 = () => { + this.proceedClose(t2, e2); + }; + this.startedFs && ye && ye.isFullscreen() ? Promise.resolve(ye.exit()).then(() => n2()) : n2(); + } + clearIdle() { + this.idleTimer && clearTimeout(this.idleTimer), this.idleTimer = null; + } + setIdle(t2 = false) { + const e2 = () => { + this.clearIdle(), this.idle = true, P(this.container, "is-idle"), this.emit("setIdle"); + }; + if (this.clearIdle(), !this.isClosing()) if (t2) e2(); + else { + const t3 = this.option("idle"); + t3 && (this.idleTimer = setTimeout(e2, t3)); + } + } + endIdle() { + this.clearIdle(), this.idle && !this.isClosing() && (this.idle = false, S(this.container, "is-idle"), this.emit("endIdle")); + } + resetIdle() { + this.endIdle(), this.setIdle(); + } + toggleIdle() { + this.idle ? this.endIdle() : this.setIdle(true); + } + toggleFullscreen() { + ye && (ye.isFullscreen() ? ye.exit() : ye.request().then(() => { + this.startedFs = true; + })); + } + isClosing() { + return [rt.Closing, rt.CustomClosing, rt.Destroy].includes(this.state); + } + proceedClose(t2, e2) { + var i2, n2; + this.state = rt.Closing, this.clearIdle(), this.detachEvents(); + const s2 = this.container, o2 = this.carousel, a2 = this.getSlide(), r2 = a2 && this.option("placeFocusBack") ? a2.triggerEl || this.option("triggerEl") : null; + if (r2 && (tt(r2) ? st(r2) : r2.focus()), s2 && (S(s2, he), P(s2, "is-closing"), s2.setAttribute(oe, "true"), this.option("animated") && P(s2, re), s2.style.pointerEvents = "none"), o2) { + o2.clearTransitions(), null === (i2 = o2.panzoom) || void 0 === i2 || i2.destroy(), null === (n2 = o2.plugins.Navigation) || void 0 === n2 || n2.detach(); + for (const t3 of o2.slides) { + t3.state = lt.Closing, this.hideLoading(t3); + const e3 = t3.contentEl; + e3 && this.stop(e3); + const i3 = null == t3 ? void 0 : t3.panzoom; + i3 && (i3.stop(), i3.detachEvents(), i3.detachObserver()), this.isCurrentSlide(t3) || o2.emit("removeSlide", t3); + } + } + Pe = window.scrollX, Ce = window.scrollY, window.addEventListener("scroll", this.onScroll), this.emit("close", t2), this.state !== rt.CustomClosing ? (void 0 === e2 && a2 && (e2 = this.optionFor(a2, "hideClass")), e2 && a2 ? (this.animate(a2.contentEl, e2, () => { + o2 && o2.emit("removeSlide", a2); + }), setTimeout(() => { + this.destroy(); + }, 500)) : this.destroy()) : setTimeout(() => { + this.destroy(); + }, 500); + } + destroy() { + var t2; + if (this.state === rt.Destroy) return; + window.removeEventListener("scroll", this.onScroll), this.state = rt.Destroy, null === (t2 = this.carousel) || void 0 === t2 || t2.destroy(); + const e2 = this.container; + e2 && e2.remove(), Te.delete(this.id); + const i2 = _Oe.getInstance(); + i2 ? i2.focus() : (we && (we.remove(), we = null), xe && (xe.remove(), xe = null), S(document.documentElement, ee), (() => { + if (!et) return; + const t3 = document, e3 = t3.body; + e3.classList.remove(ie), e3.style.setProperty(se, ""), t3.documentElement.style.setProperty(ne, ""); + })(), this.emit("destroy")); + } + static bind(t2, e2, i2) { + if (!et) return; + let n2, s2 = "", o2 = {}; + if (void 0 === t2 ? n2 = document.body : ve(t2) ? (n2 = document.body, s2 = t2, "object" == typeof e2 && (o2 = e2 || {})) : (n2 = t2, ve(e2) && (s2 = e2), "object" == typeof i2 && (o2 = i2 || {})), !n2 || !E(n2)) return; + s2 = s2 || "[data-fancybox]"; + const a2 = _Oe.openers.get(n2) || /* @__PURE__ */ new Map(); + a2.set(s2, o2), _Oe.openers.set(n2, a2), 1 === a2.size && n2.addEventListener("click", _Oe.fromEvent); + } + static unbind(t2, e2) { + let i2, n2 = ""; + if (ve(t2) ? (i2 = document.body, n2 = t2) : (i2 = t2, ve(e2) && (n2 = e2)), !i2) return; + const s2 = _Oe.openers.get(i2); + s2 && n2 && s2.delete(n2), n2 && s2 || (_Oe.openers.delete(i2), i2.removeEventListener("click", _Oe.fromEvent)); + } + static destroy() { + let t2; + for (; t2 = _Oe.getInstance(); ) t2.destroy(); + for (const t3 of _Oe.openers.keys()) t3.removeEventListener("click", _Oe.fromEvent); + _Oe.openers = /* @__PURE__ */ new Map(); + } + static fromEvent(t2) { + if (t2.defaultPrevented) return; + if (t2.button && 0 !== t2.button) return; + if (t2.ctrlKey || t2.metaKey || t2.shiftKey) return; + let e2 = t2.composedPath()[0]; + const i2 = e2.closest("[data-fancybox-trigger]"); + if (i2) { + const t3 = i2.dataset.fancyboxTrigger || "", n3 = document.querySelectorAll(`[data-fancybox="${t3}"]`), s3 = parseInt(i2.dataset.fancyboxIndex || "", 10) || 0; + e2 = n3[s3] || e2; + } + if (!(e2 && e2 instanceof Element)) return; + let n2, s2, o2, a2; + if ([..._Oe.openers].reverse().find(([t3, i3]) => !(!t3.contains(e2) || ![...i3].reverse().find(([i4, r3]) => { + let l3 = e2.closest(i4); + return !!l3 && (n2 = t3, s2 = i4, o2 = l3, a2 = r3, true); + }))), !n2 || !s2 || !o2) return; + a2 = a2 || {}, t2.preventDefault(), e2 = o2; + let r2 = [], l2 = u({}, at, a2); + l2.event = t2, l2.triggerEl = e2, l2.delegate = i2; + const c2 = l2.groupAll, h2 = l2.groupAttr, d2 = h2 && e2 ? e2.getAttribute(`${h2}`) : ""; + if ((!e2 || d2 || c2) && (r2 = [].slice.call(n2.querySelectorAll(s2))), e2 && !c2 && (r2 = d2 ? r2.filter((t3) => t3.getAttribute(`${h2}`) === d2) : [e2]), !r2.length) return; + const p2 = _Oe.getInstance(); + return p2 && p2.options.triggerEl && r2.indexOf(p2.options.triggerEl) > -1 ? void 0 : (e2 && (l2.startIndex = r2.indexOf(e2)), _Oe.fromNodes(r2, l2)); + } + static fromSelector(t2, e2, i2) { + let n2 = null, s2 = "", o2 = {}; + if (ve(t2) ? (n2 = document.body, s2 = t2, "object" == typeof e2 && (o2 = e2 || {})) : t2 instanceof HTMLElement && ve(e2) && (n2 = t2, s2 = e2, "object" == typeof i2 && (o2 = i2 || {})), !n2 || !s2) return false; + const a2 = _Oe.openers.get(n2); + return !!a2 && (o2 = u({}, a2.get(s2) || {}, o2), !!o2 && _Oe.fromNodes(Array.from(n2.querySelectorAll(s2)), o2)); + } + static fromNodes(t2, e2) { + e2 = u({}, at, e2 || {}); + const i2 = []; + for (const n2 of t2) { + const t3 = n2.dataset || {}, s2 = t3[me] || n2.getAttribute(ge) || n2.getAttribute("currentSrc") || n2.getAttribute(me) || void 0; + let o2; + const a2 = e2.delegate; + let r2; + a2 && i2.length === e2.startIndex && (o2 = a2 instanceof HTMLImageElement ? a2 : a2.querySelector("img:not([aria-hidden])")), o2 || (o2 = n2 instanceof HTMLImageElement ? n2 : n2.querySelector("img:not([aria-hidden])")), o2 && (r2 = o2.currentSrc || o2[me] || void 0, !r2 && o2.dataset && (r2 = o2.dataset.lazySrc || o2.dataset[me] || void 0)); + const l2 = { src: s2, triggerEl: n2, thumbEl: o2, thumbElSrc: r2, thumbSrc: r2 }; + for (const e3 in t3) { + let i3 = t3[e3] + ""; + i3 = "false" !== i3 && ("true" === i3 || i3), l2[e3] = i3; + } + i2.push(l2); + } + return new _Oe(i2, e2); + } + static getInstance(t2) { + if (t2) return Te.get(t2); + return Array.from(Te.values()).reverse().find((t3) => !t3.isClosing() && t3) || null; + } + static getSlide() { + var t2; + return (null === (t2 = _Oe.getInstance()) || void 0 === t2 ? void 0 : t2.getSlide()) || null; + } + static show(t2 = [], e2 = {}) { + return new _Oe(t2, e2); + } + static next() { + const t2 = _Oe.getInstance(); + t2 && t2.next(); + } + static prev() { + const t2 = _Oe.getInstance(); + t2 && t2.prev(); + } + static close(t2 = true, ...e2) { + if (t2) for (const t3 of Te.values()) t3.close(...e2); + else { + const t3 = _Oe.getInstance(); + t3 && t3.close(...e2); + } + } +}; +Object.defineProperty(Oe, "version", { enumerable: true, configurable: true, writable: true, value: "5.0.36" }), Object.defineProperty(Oe, "defaults", { enumerable: true, configurable: true, writable: true, value: at }), Object.defineProperty(Oe, "Plugins", { enumerable: true, configurable: true, writable: true, value: te }), Object.defineProperty(Oe, "openers", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Map() }); +export { + Q as Carousel, + Oe as Fancybox, + I as Panzoom +}; +//# sourceMappingURL=@fancyapps_ui.js.map diff --git a/.vite/deps/@fancyapps_ui.js.map b/.vite/deps/@fancyapps_ui.js.map new file mode 100644 index 0000000..adb25b4 --- /dev/null +++ b/.vite/deps/@fancyapps_ui.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/@fancyapps/ui/dist/index.esm.js"], + "sourcesContent": ["const t=(t,e=1e4)=>(t=parseFloat(t+\"\")||0,Math.round((t+Number.EPSILON)*e)/e),e=function(t){if(!(t&&t instanceof Element&&t.offsetParent))return!1;const e=t.scrollHeight>t.clientHeight,i=window.getComputedStyle(t).overflowY,n=-1!==i.indexOf(\"hidden\"),s=-1!==i.indexOf(\"visible\");return e&&!n&&!s},i=function(t,n=void 0){return!(!t||t===document.body||n&&t===n)&&(e(t)?t:i(t.parentElement,n))},n=function(t){var e=(new DOMParser).parseFromString(t,\"text/html\").body;if(e.childElementCount>1){for(var i=document.createElement(\"div\");e.firstChild;)i.appendChild(e.firstChild);return i}return e.firstChild},s=t=>`${t||\"\"}`.split(\" \").filter((t=>!!t)),o=(t,e,i)=>{t&&s(e).forEach((e=>{t.classList.toggle(e,i||!1)}))};class a{constructor(t){Object.defineProperty(this,\"pageX\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"pageY\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"clientX\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"clientY\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"id\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"time\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"nativePointer\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.nativePointer=t,this.pageX=t.pageX,this.pageY=t.pageY,this.clientX=t.clientX,this.clientY=t.clientY,this.id=self.Touch&&t instanceof Touch?t.identifier:-1,this.time=Date.now()}}const r={passive:!1};class l{constructor(t,{start:e=(()=>!0),move:i=(()=>{}),end:n=(()=>{})}){Object.defineProperty(this,\"element\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"startCallback\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"moveCallback\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"endCallback\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"currentPointers\",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,\"startPointers\",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.element=t,this.startCallback=e,this.moveCallback=i,this.endCallback=n;for(const t of[\"onPointerStart\",\"onTouchStart\",\"onMove\",\"onTouchEnd\",\"onPointerEnd\",\"onWindowBlur\"])this[t]=this[t].bind(this);this.element.addEventListener(\"mousedown\",this.onPointerStart,r),this.element.addEventListener(\"touchstart\",this.onTouchStart,r),this.element.addEventListener(\"touchmove\",this.onMove,r),this.element.addEventListener(\"touchend\",this.onTouchEnd),this.element.addEventListener(\"touchcancel\",this.onTouchEnd)}onPointerStart(t){if(!t.buttons||0!==t.button)return;const e=new a(t);this.currentPointers.some((t=>t.id===e.id))||this.triggerPointerStart(e,t)&&(window.addEventListener(\"mousemove\",this.onMove),window.addEventListener(\"mouseup\",this.onPointerEnd),window.addEventListener(\"blur\",this.onWindowBlur))}onTouchStart(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerStart(new a(e),t);window.addEventListener(\"blur\",this.onWindowBlur)}onMove(t){const e=this.currentPointers.slice(),i=\"changedTouches\"in t?Array.from(t.changedTouches||[]).map((t=>new a(t))):[new a(t)],n=[];for(const t of i){const e=this.currentPointers.findIndex((e=>e.id===t.id));e<0||(n.push(t),this.currentPointers[e]=t)}n.length&&this.moveCallback(t,this.currentPointers.slice(),e)}onPointerEnd(t){t.buttons>0&&0!==t.button||(this.triggerPointerEnd(t,new a(t)),window.removeEventListener(\"mousemove\",this.onMove),window.removeEventListener(\"mouseup\",this.onPointerEnd),window.removeEventListener(\"blur\",this.onWindowBlur))}onTouchEnd(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerEnd(t,new a(e))}triggerPointerStart(t,e){return!!this.startCallback(e,t,this.currentPointers.slice())&&(this.currentPointers.push(t),this.startPointers.push(t),!0)}triggerPointerEnd(t,e){const i=this.currentPointers.findIndex((t=>t.id===e.id));i<0||(this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(t,e,this.currentPointers.slice()))}onWindowBlur(){this.clear()}clear(){for(;this.currentPointers.length;){const t=this.currentPointers[this.currentPointers.length-1];this.currentPointers.splice(this.currentPointers.length-1,1),this.startPointers.splice(this.currentPointers.length-1,1),this.endCallback(new Event(\"touchend\",{bubbles:!0,cancelable:!0,clientX:t.clientX,clientY:t.clientY}),t,this.currentPointers.slice())}}stop(){this.element.removeEventListener(\"mousedown\",this.onPointerStart,r),this.element.removeEventListener(\"touchstart\",this.onTouchStart,r),this.element.removeEventListener(\"touchmove\",this.onMove,r),this.element.removeEventListener(\"touchend\",this.onTouchEnd),this.element.removeEventListener(\"touchcancel\",this.onTouchEnd),window.removeEventListener(\"mousemove\",this.onMove),window.removeEventListener(\"mouseup\",this.onPointerEnd),window.removeEventListener(\"blur\",this.onWindowBlur)}}function c(t,e){return e?Math.sqrt(Math.pow(e.clientX-t.clientX,2)+Math.pow(e.clientY-t.clientY,2)):0}function h(t,e){return e?{clientX:(t.clientX+e.clientX)/2,clientY:(t.clientY+e.clientY)/2}:t}const d=t=>\"object\"==typeof t&&null!==t&&t.constructor===Object&&\"[object Object]\"===Object.prototype.toString.call(t),u=(t,...e)=>{const i=e.length;for(let n=0;n{const n=Array.isArray(i)?[]:{};t[e]||Object.assign(t,{[e]:n}),d(i)?Object.assign(t[e],u(n,i)):Array.isArray(i)?Object.assign(t,{[e]:[...i]}):Object.assign(t,{[e]:i})}))}return t},p=function(t,e){return t.split(\".\").reduce(((t,e)=>\"object\"==typeof t?t[e]:void 0),e)};class f{constructor(t={}){Object.defineProperty(this,\"options\",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,\"events\",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.setOptions(t);for(const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this)))t.startsWith(\"on\")&&\"function\"==typeof this[t]&&(this[t]=this[t].bind(this))}setOptions(t){this.options=t?u({},this.constructor.defaults,t):{};for(const[t,e]of Object.entries(this.option(\"on\")||{}))this.on(t,e)}option(t,...e){let i=p(t,this.options);return i&&\"function\"==typeof i&&(i=i.call(this,this,...e)),i}optionFor(t,e,i,...n){let s=p(e,t);var o;\"string\"!=typeof(o=s)||isNaN(o)||isNaN(parseFloat(o))||(s=parseFloat(s)),\"true\"===s&&(s=!0),\"false\"===s&&(s=!1),s&&\"function\"==typeof s&&(s=s.call(this,this,t,...n));let a=p(e,this.options);return a&&\"function\"==typeof a?s=a.call(this,this,t,...n,s):void 0===s&&(s=a),void 0===s?i:s}cn(t){const e=this.options.classes;return e&&e[t]||\"\"}localize(t,e=[]){t=String(t).replace(/\\{\\{(\\w+).?(\\w+)?\\}\\}/g,((t,e,i)=>{let n=\"\";return i?n=this.option(`${e[0]+e.toLowerCase().substring(1)}.l10n.${i}`):e&&(n=this.option(`l10n.${e}`)),n||(n=t),n}));for(let i=0;ie))}on(t,e){let i=[];\"string\"==typeof t?i=t.split(\" \"):Array.isArray(t)&&(i=t),this.events||(this.events=new Map),i.forEach((t=>{let i=this.events.get(t);i||(this.events.set(t,[]),i=[]),i.includes(e)||i.push(e),this.events.set(t,i)}))}off(t,e){let i=[];\"string\"==typeof t?i=t.split(\" \"):Array.isArray(t)&&(i=t),i.forEach((t=>{const i=this.events.get(t);if(Array.isArray(i)){const t=i.indexOf(e);t>-1&&i.splice(t,1)}}))}emit(t,...e){[...this.events.get(t)||[]].forEach((t=>t(this,...e))),\"*\"!==t&&this.emit(\"*\",t,...e)}}Object.defineProperty(f,\"version\",{enumerable:!0,configurable:!0,writable:!0,value:\"5.0.36\"}),Object.defineProperty(f,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:{}});class g extends f{constructor(t={}){super(t),Object.defineProperty(this,\"plugins\",{enumerable:!0,configurable:!0,writable:!0,value:{}})}attachPlugins(t={}){const e=new Map;for(const[i,n]of Object.entries(t)){const t=this.option(i),s=this.plugins[i];s||!1===t?s&&!1===t&&(s.detach(),delete this.plugins[i]):e.set(i,new n(this,t||{}))}for(const[t,i]of e)this.plugins[t]=i,i.attach()}detachPlugins(t){t=t||Object.keys(this.plugins);for(const e of t){const t=this.plugins[e];t&&t.detach(),delete this.plugins[e]}return this.emit(\"detachPlugins\"),this}}var m;!function(t){t[t.Init=0]=\"Init\",t[t.Error=1]=\"Error\",t[t.Ready=2]=\"Ready\",t[t.Panning=3]=\"Panning\",t[t.Mousemove=4]=\"Mousemove\",t[t.Destroy=5]=\"Destroy\"}(m||(m={}));const v=[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],b={PANUP:\"Move up\",PANDOWN:\"Move down\",PANLEFT:\"Move left\",PANRIGHT:\"Move right\",ZOOMIN:\"Zoom in\",ZOOMOUT:\"Zoom out\",TOGGLEZOOM:\"Toggle zoom level\",TOGGLE1TO1:\"Toggle zoom level\",ITERATEZOOM:\"Toggle zoom level\",ROTATECCW:\"Rotate counterclockwise\",ROTATECW:\"Rotate clockwise\",FLIPX:\"Flip horizontally\",FLIPY:\"Flip vertically\",FITX:\"Fit horizontally\",FITY:\"Fit vertically\",RESET:\"Reset\",TOGGLEFS:\"Toggle fullscreen\"},y={content:null,width:\"auto\",height:\"auto\",panMode:\"drag\",touch:!0,dragMinThreshold:3,lockAxis:!1,mouseMoveFactor:1,mouseMoveFriction:.12,zoom:!0,pinchToZoom:!0,panOnlyZoomed:\"auto\",minScale:1,maxScale:2,friction:.25,dragFriction:.35,decelFriction:.05,click:\"toggleZoom\",dblClick:!1,wheel:\"zoom\",wheelLimit:7,spinner:!0,bounds:\"auto\",infinite:!1,rubberband:!0,bounce:!0,maxVelocity:75,transformParent:!1,classes:{content:\"f-panzoom__content\",isLoading:\"is-loading\",canZoomIn:\"can-zoom_in\",canZoomOut:\"can-zoom_out\",isDraggable:\"is-draggable\",isDragging:\"is-dragging\",inFullscreen:\"in-fullscreen\",htmlHasFullscreen:\"with-panzoom-in-fullscreen\"},l10n:b},w='',x='
'+w+w+\"
\",E=t=>t&&null!==t&&t instanceof Element&&\"nodeType\"in t,S=(t,e)=>{t&&s(e).forEach((e=>{t.classList.remove(e)}))},P=(t,e)=>{t&&s(e).forEach((e=>{t.classList.add(e)}))},C={a:1,b:0,c:0,d:1,e:0,f:0},T=1e5,M=1e4,O=\"mousemove\",A=\"drag\",L=\"content\",z=\"auto\";let R=null,k=null;class I extends g{get fits(){return this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1}get isTouchDevice(){return null===k&&(k=window.matchMedia(\"(hover: none)\").matches),k}get isMobile(){return null===R&&(R=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)),R}get panMode(){return this.options.panMode!==O||this.isTouchDevice?A:O}get panOnlyZoomed(){const t=this.options.panOnlyZoomed;return t===z?this.isTouchDevice:t}get isInfinite(){return this.option(\"infinite\")}get angle(){return 180*Math.atan2(this.current.b,this.current.a)/Math.PI||0}get targetAngle(){return 180*Math.atan2(this.target.b,this.target.a)/Math.PI||0}get scale(){const{a:t,b:e}=this.current;return Math.sqrt(t*t+e*e)||1}get targetScale(){const{a:t,b:e}=this.target;return Math.sqrt(t*t+e*e)||1}get minScale(){return this.option(\"minScale\")||1}get fullScale(){const{contentRect:t}=this;return t.fullWidth/t.fitWidth||1}get maxScale(){return this.fullScale*(this.option(\"maxScale\")||1)||1}get coverScale(){const{containerRect:t,contentRect:e}=this,i=Math.max(t.height/e.fitHeight,t.width/e.fitWidth)||1;return Math.min(this.fullScale,i)}get isScaling(){return Math.abs(this.targetScale-this.scale)>1e-5&&!this.isResting}get isContentLoading(){const t=this.content;return!!(t&&t instanceof HTMLImageElement)&&!t.complete}get isResting(){if(this.isBouncingX||this.isBouncingY)return!1;for(const t of v){const e=\"e\"==t||\"f\"===t?1e-4:1e-5;if(Math.abs(this.target[t]-this.current[t])>e)return!1}return!(!this.ignoreBounds&&!this.checkBounds().inBounds)}constructor(t,e={},i={}){var s;if(super(e),Object.defineProperty(this,\"pointerTracker\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"resizeObserver\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"updateTimer\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"clickTimer\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"rAF\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"isTicking\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"ignoreBounds\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"isBouncingX\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"isBouncingY\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"clicks\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"trackingPoints\",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,\"pwt\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"cwd\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"pmme\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"friction\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"state\",{enumerable:!0,configurable:!0,writable:!0,value:m.Init}),Object.defineProperty(this,\"isDragging\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"container\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"content\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"spinner\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"containerRect\",{enumerable:!0,configurable:!0,writable:!0,value:{width:0,height:0,innerWidth:0,innerHeight:0}}),Object.defineProperty(this,\"contentRect\",{enumerable:!0,configurable:!0,writable:!0,value:{top:0,right:0,bottom:0,left:0,fullWidth:0,fullHeight:0,fitWidth:0,fitHeight:0,width:0,height:0}}),Object.defineProperty(this,\"dragStart\",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,top:0,left:0,time:0}}),Object.defineProperty(this,\"dragOffset\",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,time:0}}),Object.defineProperty(this,\"current\",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},C)}),Object.defineProperty(this,\"target\",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},C)}),Object.defineProperty(this,\"velocity\",{enumerable:!0,configurable:!0,writable:!0,value:{a:0,b:0,c:0,d:0,e:0,f:0}}),Object.defineProperty(this,\"lockedAxis\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),!t)throw new Error(\"Container Element Not Found\");this.container=t,this.initContent(),this.attachPlugins(Object.assign(Object.assign({},I.Plugins),i)),this.emit(\"attachPlugins\"),this.emit(\"init\");const o=this.content;if(o.addEventListener(\"load\",this.onLoad),o.addEventListener(\"error\",this.onError),this.isContentLoading){if(this.option(\"spinner\")){t.classList.add(this.cn(\"isLoading\"));const e=n(x);!t.contains(o)||o.parentElement instanceof HTMLPictureElement?this.spinner=t.appendChild(e):this.spinner=(null===(s=o.parentElement)||void 0===s?void 0:s.insertBefore(e,o))||null}this.emit(\"beforeLoad\")}else queueMicrotask((()=>{this.enable()}))}initContent(){const{container:t}=this,e=this.cn(L);let i=this.option(L)||t.querySelector(`.${e}`);if(i||(i=t.querySelector(\"img,picture\")||t.firstElementChild,i&&P(i,e)),i instanceof HTMLPictureElement&&(i=i.querySelector(\"img\")),!i)throw new Error(\"No content found\");this.content=i}onLoad(){const{spinner:t,container:e,state:i}=this;t&&(t.remove(),this.spinner=null),this.option(\"spinner\")&&e.classList.remove(this.cn(\"isLoading\")),this.emit(\"afterLoad\"),i===m.Init?this.enable():this.updateMetrics()}onError(){this.state!==m.Destroy&&(this.spinner&&(this.spinner.remove(),this.spinner=null),this.stop(),this.detachEvents(),this.state=m.Error,this.emit(\"error\"))}getNextScale(t){const{fullScale:e,targetScale:i,coverScale:n,maxScale:s,minScale:o}=this;let a=o;switch(t){case\"toggleMax\":a=i-o<.5*(s-o)?s:o;break;case\"toggleCover\":a=i-o<.5*(n-o)?n:o;break;case\"toggleZoom\":a=i-o<.5*(e-o)?e:o;break;case\"iterateZoom\":let t=[1,e,s].sort(((t,e)=>t-e)),r=t.findIndex((t=>t>i+1e-5));a=t[r]||1}return a}attachObserver(){var t;const e=()=>{const{container:t,containerRect:e}=this;return Math.abs(e.width-t.getBoundingClientRect().width)>.1||Math.abs(e.height-t.getBoundingClientRect().height)>.1};this.resizeObserver||void 0===window.ResizeObserver||(this.resizeObserver=new ResizeObserver((()=>{this.updateTimer||(e()?(this.onResize(),this.isMobile&&(this.updateTimer=setTimeout((()=>{e()&&this.onResize(),this.updateTimer=null}),500))):this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null))}))),null===(t=this.resizeObserver)||void 0===t||t.observe(this.container)}detachObserver(){var t;null===(t=this.resizeObserver)||void 0===t||t.disconnect()}attachEvents(){const{container:t}=this;t.addEventListener(\"click\",this.onClick,{passive:!1,capture:!1}),t.addEventListener(\"wheel\",this.onWheel,{passive:!1}),this.pointerTracker=new l(t,{start:this.onPointerDown,move:this.onPointerMove,end:this.onPointerUp}),document.addEventListener(O,this.onMouseMove)}detachEvents(){var t;const{container:e}=this;e.removeEventListener(\"click\",this.onClick,{passive:!1,capture:!1}),e.removeEventListener(\"wheel\",this.onWheel,{passive:!1}),null===(t=this.pointerTracker)||void 0===t||t.stop(),this.pointerTracker=null,document.removeEventListener(O,this.onMouseMove),document.removeEventListener(\"keydown\",this.onKeydown,!0),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null)}animate(){this.setTargetForce();const t=this.friction,e=this.option(\"maxVelocity\");for(const i of v)t?(this.velocity[i]*=1-t,e&&!this.isScaling&&(this.velocity[i]=Math.max(Math.min(this.velocity[i],e),-1*e)),this.current[i]+=this.velocity[i]):this.current[i]=this.target[i];this.setTransform(),this.setEdgeForce(),!this.isResting||this.isDragging?this.rAF=requestAnimationFrame((()=>this.animate())):this.stop(\"current\")}setTargetForce(){for(const t of v)\"e\"===t&&this.isBouncingX||\"f\"===t&&this.isBouncingY||(this.velocity[t]=(1/(1-this.friction)-1)*(this.target[t]-this.current[t]))}checkBounds(t=0,e=0){const{current:i}=this,n=i.e+t,s=i.f+e,o=this.getBounds(),{x:a,y:r}=o,l=a.min,c=a.max,h=r.min,d=r.max;let u=0,p=0;return l!==1/0&&nc&&(u=c-n),h!==1/0&&sd&&(p=d-s),Math.abs(u)<1e-4&&(u=0),Math.abs(p)<1e-4&&(p=0),Object.assign(Object.assign({},o),{xDiff:u,yDiff:p,inBounds:!u&&!p})}clampTargetBounds(){const{target:t}=this,{x:e,y:i}=this.getBounds();e.min!==1/0&&(t.e=Math.max(t.e,e.min)),e.max!==1/0&&(t.e=Math.min(t.e,e.max)),i.min!==1/0&&(t.f=Math.max(t.f,i.min)),i.max!==1/0&&(t.f=Math.min(t.f,i.max))}calculateContentDim(t=this.current){const{content:e,contentRect:i}=this,{fitWidth:n,fitHeight:s,fullWidth:o,fullHeight:a}=i;let r=o,l=a;if(this.option(\"zoom\")||0!==this.angle){const i=!(e instanceof HTMLImageElement)&&(\"none\"===window.getComputedStyle(e).maxWidth||\"none\"===window.getComputedStyle(e).maxHeight),c=i?o:n,h=i?a:s,d=this.getMatrix(t),u=new DOMPoint(0,0).matrixTransform(d),p=new DOMPoint(0+c,0).matrixTransform(d),f=new DOMPoint(0+c,0+h).matrixTransform(d),g=new DOMPoint(0,0+h).matrixTransform(d),m=Math.abs(f.x-u.x),v=Math.abs(f.y-u.y),b=Math.abs(g.x-p.x),y=Math.abs(g.y-p.y);r=Math.max(m,b),l=Math.max(v,y)}return{contentWidth:r,contentHeight:l}}setEdgeForce(){if(this.ignoreBounds||this.isDragging||this.panMode===O||this.targetScale{const t=window.getSelection();return t&&\"Range\"===t.type})()&&!i.closest(\"button\"))return;const n=i.closest(\"[data-panzoom-action]\"),s=i.closest(\"[data-panzoom-change]\"),o=n||s,a=o&&E(o)?o.dataset:null;if(a){const e=a.panzoomChange,i=a.panzoomAction;if((e||i)&&t.preventDefault(),e){let t={};try{t=JSON.parse(e)}catch(t){console&&console.warn(\"The given data was not valid JSON\")}return void this.applyChange(t)}if(i)return void(this[i]&&this[i]())}if(Math.abs(this.dragOffset.x)>3||Math.abs(this.dragOffset.y)>3)return t.preventDefault(),void t.stopPropagation();if(i.closest(\"[data-fancybox]\"))return;const r=this.content.getBoundingClientRect(),l=this.dragStart;if(l.time&&!this.canZoomOut()&&(Math.abs(r.x-l.x)>2||Math.abs(r.y-l.y)>2))return;this.dragStart.time=0;const c=e=>{this.option(\"zoom\",t)&&e&&\"string\"==typeof e&&/(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(e)&&\"function\"==typeof this[e]&&(t.preventDefault(),this[e]({event:t}))},h=this.option(\"click\",t),d=this.option(\"dblClick\",t);d?(this.clicks++,1==this.clicks&&(this.clickTimer=setTimeout((()=>{1===this.clicks?(this.emit(\"click\",t),!t.defaultPrevented&&h&&c(h)):(this.emit(\"dblClick\",t),t.defaultPrevented||c(d)),this.clicks=0,this.clickTimer=null}),350))):(this.emit(\"click\",t),!t.defaultPrevented&&h&&c(h))}addTrackingPoint(t){const e=this.trackingPoints.filter((t=>t.time>Date.now()-100));e.push(t),this.trackingPoints=e}onPointerDown(t,e,i){var n;if(!1===this.option(\"touch\",t))return!1;this.pwt=0,this.dragOffset={x:0,y:0,time:0},this.trackingPoints=[];const s=this.content.getBoundingClientRect();if(this.dragStart={x:s.x,y:s.y,top:s.top,left:s.left,time:Date.now()},this.clickTimer)return!1;if(this.panMode===O&&this.targetScale>1)return t.preventDefault(),t.stopPropagation(),!1;const o=t.composedPath()[0];if(!i.length){if([\"TEXTAREA\",\"OPTION\",\"INPUT\",\"SELECT\",\"VIDEO\",\"IFRAME\"].includes(o.nodeName)||o.closest(\"[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]\"))return!1;null===(n=window.getSelection())||void 0===n||n.removeAllRanges()}if(\"mousedown\"===t.type)[\"A\",\"BUTTON\"].includes(o.nodeName)||t.preventDefault();else if(Math.abs(this.velocity.a)>.3)return!1;return this.target.e=this.current.e,this.target.f=this.current.f,this.stop(),this.isDragging||(this.isDragging=!0,this.addTrackingPoint(e),this.emit(\"touchStart\",t)),!0}onPointerMove(e,n,s){if(!1===this.option(\"touch\",e))return;if(!this.isDragging)return;if(n.length<2&&this.panOnlyZoomed&&t(this.targetScale)<=t(this.minScale))return;if(this.emit(\"touchMove\",e),e.defaultPrevented)return;this.addTrackingPoint(n[0]);const{content:o}=this,a=h(s[0],s[1]),r=h(n[0],n[1]);let l=0,d=0;if(n.length>1){const t=o.getBoundingClientRect();l=a.clientX-t.left-.5*t.width,d=a.clientY-t.top-.5*t.height}const u=c(s[0],s[1]),p=c(n[0],n[1]);let f=u?p/u:1,g=r.clientX-a.clientX,m=r.clientY-a.clientY;this.dragOffset.x+=g,this.dragOffset.y+=m,this.dragOffset.time=Date.now()-this.dragStart.time;let v=t(this.targetScale)===t(this.minScale)&&this.option(\"lockAxis\");if(v&&!this.lockedAxis)if(\"xy\"===v||\"y\"===v||\"touchmove\"===e.type){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return void e.preventDefault();const t=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockedAxis=t>45&&t<135?\"y\":\"x\",this.dragOffset.x=0,this.dragOffset.y=0,g=0,m=0}else this.lockedAxis=v;if(i(e.target,this.content)&&(v=\"x\",this.dragOffset.y=0),v&&\"xy\"!==v&&this.lockedAxis!==v&&t(this.targetScale)===t(this.minScale))return;e.cancelable&&e.preventDefault(),this.container.classList.add(this.cn(\"isDragging\"));const b=this.checkBounds(g,m);this.option(\"rubberband\")?(\"x\"!==this.isInfinite&&(b.xDiff>0&&g<0||b.xDiff<0&&g>0)&&(g*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitWidth*b.xDiff))),\"y\"!==this.isInfinite&&(b.yDiff>0&&m<0||b.yDiff<0&&m>0)&&(m*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitHeight*b.yDiff)))):(b.xDiff&&(g=0),b.yDiff&&(m=0));const y=this.targetScale,w=this.minScale,x=this.maxScale;y<.5*w&&(f=Math.max(f,w)),y>1.5*x&&(f=Math.min(f,x)),\"y\"===this.lockedAxis&&t(y)===t(w)&&(g=0),\"x\"===this.lockedAxis&&t(y)===t(w)&&(m=0),this.applyChange({originX:l,originY:d,panX:g,panY:m,scale:f,friction:this.option(\"dragFriction\"),ignoreBounds:!0})}onPointerUp(t,e,n){if(n.length)return this.dragOffset.x=0,this.dragOffset.y=0,void(this.trackingPoints=[]);this.container.classList.remove(this.cn(\"isDragging\")),this.isDragging&&(this.addTrackingPoint(e),this.panOnlyZoomed&&this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1&&(this.trackingPoints=[]),i(t.target,this.content)&&\"y\"===this.lockedAxis&&(this.trackingPoints=[]),this.emit(\"touchEnd\",t),this.isDragging=!1,this.lockedAxis=!1,this.state!==m.Destroy&&(t.defaultPrevented||this.startDecelAnim()))}startDecelAnim(){var e;const i=this.isScaling;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const t of v)this.velocity[t]=0;this.target.e=this.current.e,this.target.f=this.current.f,S(this.container,\"is-scaling\"),S(this.container,\"is-animating\"),this.isTicking=!1;const{trackingPoints:n}=this,s=n[0],o=n[n.length-1];let a=0,r=0,l=0;o&&s&&(a=o.clientX-s.clientX,r=o.clientY-s.clientY,l=o.time-s.time);const c=(null===(e=window.visualViewport)||void 0===e?void 0:e.scale)||1;1!==c&&(a*=c,r*=c);let h=0,d=0,u=0,p=0,f=this.option(\"decelFriction\");const g=this.targetScale;if(l>0){u=Math.abs(a)>3?a/(l/30):0,p=Math.abs(r)>3?r/(l/30):0;const t=this.option(\"maxVelocity\");t&&(u=Math.max(Math.min(u,t),-1*t),p=Math.max(Math.min(p,t),-1*t))}u&&(h=u/(1/(1-f)-1)),p&&(d=p/(1/(1-f)-1)),(\"y\"===this.option(\"lockAxis\")||\"xy\"===this.option(\"lockAxis\")&&\"y\"===this.lockedAxis&&t(g)===this.minScale)&&(h=u=0),(\"x\"===this.option(\"lockAxis\")||\"xy\"===this.option(\"lockAxis\")&&\"x\"===this.lockedAxis&&t(g)===this.minScale)&&(d=p=0);const m=this.dragOffset.x,b=this.dragOffset.y,y=this.option(\"dragMinThreshold\")||0;Math.abs(m)this.maxScale+1e-5)||i&&!h&&!d)&&(f=.35),this.applyChange({panX:h,panY:d,friction:f}),this.emit(\"decel\",u,p,m,b)}onWheel(t){var e=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const i=Math.max(-1,Math.min(1,e));if(this.emit(\"wheel\",t,i),this.panMode===O)return;if(t.defaultPrevented)return;const n=this.option(\"wheel\");\"pan\"===n?(t.preventDefault(),this.panOnlyZoomed&&!this.canZoomOut()||this.applyChange({panX:2*-t.deltaX,panY:2*-t.deltaY,bounce:!1})):\"zoom\"===n&&!1!==this.option(\"zoom\")&&this.zoomWithWheel(t)}onMouseMove(t){this.panWithMouse(t)}onKeydown(t){\"Escape\"===t.key&&this.toggleFS()}onResize(){this.updateMetrics(),this.checkBounds().inBounds||this.requestTick()}setTransform(){this.emit(\"beforeTransform\");const{current:e,target:i,content:n,contentRect:s}=this,o=Object.assign({},C);for(const n of v){const s=\"e\"==n||\"f\"===n?M:T;o[n]=t(e[n],s),Math.abs(i[n]-e[n])<(\"e\"==n||\"f\"===n?.51:.001)&&(e[n]=i[n])}let{a:a,b:r,c:l,d:c,e:h,f:d}=o,u=`matrix(${a}, ${r}, ${l}, ${c}, ${h}, ${d})`,p=n.parentElement instanceof HTMLPictureElement?n.parentElement:n;if(this.option(\"transformParent\")&&(p=p.parentElement||p),p.style.transform===u)return;p.style.transform=u;const{contentWidth:f,contentHeight:g}=this.calculateContentDim();s.width=f,s.height=g,this.emit(\"afterTransform\")}updateMetrics(e=!1){var i;if(!this||this.state===m.Destroy)return;if(this.isContentLoading)return;const n=Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1),{container:s,content:o}=this,a=o instanceof HTMLImageElement,r=s.getBoundingClientRect(),l=getComputedStyle(this.container);let c=r.width*n,h=r.height*n;const d=parseFloat(l.paddingTop)+parseFloat(l.paddingBottom),u=c-(parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),p=h-d;this.containerRect={width:c,height:h,innerWidth:u,innerHeight:p};const f=parseFloat(o.dataset.width||\"\")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalWidth:t instanceof SVGElement?t.width.baseVal.value:Math.max(t.offsetWidth,t.scrollWidth),e||0})(o),g=parseFloat(o.dataset.height||\"\")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalHeight:t instanceof SVGElement?t.height.baseVal.value:Math.max(t.offsetHeight,t.scrollHeight),e||0})(o);let v=this.option(\"width\",f)||z,b=this.option(\"height\",g)||z;const y=v===z,w=b===z;\"number\"!=typeof v&&(v=f),\"number\"!=typeof b&&(b=g),y&&(v=f*(b/g)),w&&(b=g/(f/v));let x=o.parentElement instanceof HTMLPictureElement?o.parentElement:o;this.option(\"transformParent\")&&(x=x.parentElement||x);const E=x.getAttribute(\"style\")||\"\";x.style.setProperty(\"transform\",\"none\",\"important\"),a&&(x.style.width=\"\",x.style.height=\"\"),x.offsetHeight;const S=o.getBoundingClientRect();let P=S.width*n,C=S.height*n,T=P,M=C;P=Math.min(P,v),C=Math.min(C,b),a?({width:P,height:C}=((t,e,i,n)=>{const s=i/t,o=n/e,a=Math.min(s,o);return{width:t*=a,height:e*=a}})(v,b,P,C)):(P=Math.min(P,v),C=Math.min(C,b));let O=.5*(M-C),A=.5*(T-P);this.contentRect=Object.assign(Object.assign({},this.contentRect),{top:S.top-r.top+O,bottom:r.bottom-S.bottom+O,left:S.left-r.left+A,right:r.right-S.right+A,fitWidth:P,fitHeight:C,width:P,height:C,fullWidth:v,fullHeight:b}),x.style.cssText=E,a&&(x.style.width=`${P}px`,x.style.height=`${C}px`),this.setTransform(),!0!==e&&this.emit(\"refresh\"),this.ignoreBounds||(t(this.targetScale)this.maxScale?this.zoomTo(this.maxScale,{friction:0}):this.state===m.Init||this.checkBounds().inBounds||this.requestTick()),this.updateControls()}calculateBounds(){const{contentWidth:e,contentHeight:i}=this.calculateContentDim(this.target),{targetScale:n,lockedAxis:s}=this,{fitWidth:o,fitHeight:a}=this.contentRect;let r=0,l=0,c=0,h=0;const d=this.option(\"infinite\");if(!0===d||s&&d===s)r=-1/0,c=1/0,l=-1/0,h=1/0;else{let{containerRect:s,contentRect:d}=this,u=t(o*n,M),p=t(a*n,M),{innerWidth:f,innerHeight:g}=s;if(s.width===u&&(f=s.width),s.width===p&&(g=s.height),e>f){c=.5*(e-f),r=-1*c;let t=.5*(d.right-d.left);r+=t,c+=t}if(o>f&&eg){h=.5*(i-g),l=-1*h;let t=.5*(d.bottom-d.top);l+=t,h+=t}a>g&&it(s.fitWidth,1)||t(s.height,1)>t(s.fitHeight,1))&&(p=!0)),t(s.width*a,1)t(a),g=!f&&!p&&d&&t(l)i&&(n=i/t)}y=y.scale(n)}y=y.translate(-o,-a).translate(-f,-g).multiply(b),s&&(y=y.rotate(s)),l&&(y=y.scale(-1,1)),c&&(y=y.scale(1,-1));for(const e of v)\"e\"!==e&&\"f\"!==e&&(y[e]>this.minScale+1e-5||y[e].1||this.panMode===O||!1===d)&&!h&&this.clampTargetBounds(),u===m.Init?this.animate():this.isResting||(this.state=m.Panning,this.requestTick())}stop(t=!1){if(this.state===m.Init||this.state===m.Destroy)return;const e=this.isTicking;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const e of v)this.velocity[e]=0,\"current\"===t?this.current[e]=this.target[e]:\"target\"===t&&(this.target[e]=this.current[e]);this.setTransform(),S(this.container,\"is-scaling\"),S(this.container,\"is-animating\"),this.isTicking=!1,this.state=m.Ready,e&&(this.emit(\"endAnimation\"),this.updateControls())}requestTick(){this.isTicking||(this.emit(\"startAnimation\"),this.updateControls(),P(this.container,\"is-animating\"),this.isScaling&&P(this.container,\"is-scaling\")),this.isTicking=!0,this.rAF||(this.rAF=requestAnimationFrame((()=>this.animate())))}panWithMouse(e,i=this.option(\"mouseMoveFriction\")){if(this.pmme=e,this.panMode!==O||!e)return;if(t(this.targetScale)<=t(this.minScale))return;this.emit(\"mouseMove\",e);const{container:n,containerRect:s,contentRect:o}=this,a=s.width,r=s.height,l=n.getBoundingClientRect(),c=(e.clientX||0)-l.left,h=(e.clientY||0)-l.top;let{contentWidth:d,contentHeight:u}=this.calculateContentDim(this.target);const p=this.option(\"mouseMoveFactor\");p>1&&(d!==a&&(d*=p),u!==r&&(u*=p));let f=.5*(d-a)-c/a*100/100*(d-a);f+=.5*(o.right-o.left);let g=.5*(u-r)-h/r*100/100*(u-r);g+=.5*(o.bottom-o.top),this.applyChange({panX:f-this.target.e,panY:g-this.target.f,friction:i})}zoomWithWheel(e){if(this.state===m.Destroy||this.state===m.Init)return;const i=Date.now();if(i-this.pwt<45)return void e.preventDefault();this.pwt=i;var n=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const s=Math.max(-1,Math.min(1,n)),{targetScale:o,maxScale:a,minScale:r}=this;let l=o*(100+45*s)/100;t(l)t(a)&&t(o)>=t(a)?(this.cwd+=Math.abs(s),l=a):(this.cwd=0,l=Math.max(Math.min(l,a),r)),this.cwd>this.option(\"wheelLimit\")||(e.preventDefault(),t(l)!==t(o)&&this.zoomTo(l,{event:e}))}canZoomIn(){return this.option(\"zoom\")&&(t(this.contentRect.width,1)t(this.minScale)}zoomIn(t=1.25,e){this.zoomTo(this.targetScale*t,e)}zoomOut(t=.8,e){this.zoomTo(this.targetScale*t,e)}zoomToFit(t){this.zoomTo(\"fit\",t)}zoomToCover(t){this.zoomTo(\"cover\",t)}zoomToFull(t){this.zoomTo(\"full\",t)}zoomToMax(t){this.zoomTo(\"max\",t)}toggleZoom(t){this.zoomTo(this.getNextScale(\"toggleZoom\"),t)}toggleMax(t){this.zoomTo(this.getNextScale(\"toggleMax\"),t)}toggleCover(t){this.zoomTo(this.getNextScale(\"toggleCover\"),t)}iterateZoom(t){this.zoomTo(\"next\",t)}zoomTo(t=1,{friction:e=z,originX:i=z,originY:n=z,event:s}={}){if(this.isContentLoading||this.state===m.Destroy)return;const{targetScale:o,fullScale:a,maxScale:r,coverScale:l}=this;if(this.stop(),this.panMode===O&&(s=this.pmme||s),s||i===z||n===z){const t=this.content.getBoundingClientRect(),e=this.container.getBoundingClientRect(),o=s?s.clientX:e.left+.5*e.width,a=s?s.clientY:e.top+.5*e.height;i=o-t.left-.5*t.width,n=a-t.top-.5*t.height}let c=1;\"number\"==typeof t?c=t:\"full\"===t?c=a:\"cover\"===t?c=l:\"max\"===t?c=r:\"fit\"===t?c=1:\"next\"===t&&(c=this.getNextScale(\"iterateZoom\")),c=c/o||1,e=e===z?c>1?.15:.25:e,this.applyChange({scale:c,originX:i,originY:n,friction:e}),s&&this.panMode===O&&this.panWithMouse(s,e)}rotateCCW(){this.applyChange({angle:-90})}rotateCW(){this.applyChange({angle:90})}flipX(){this.applyChange({flipX:!0})}flipY(){this.applyChange({flipY:!0})}fitX(){this.stop(\"target\");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.height-(e.top+.5*e.fitHeight)-i.f,scale:t.width/e.fitWidth/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}fitY(){this.stop(\"target\");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.innerHeight-(e.top+.5*e.fitHeight)-i.f,scale:t.height/e.fitHeight/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}toggleFS(){const{container:t}=this,e=this.cn(\"inFullscreen\"),i=this.cn(\"htmlHasFullscreen\");t.classList.toggle(e);const n=t.classList.contains(e);n?(document.documentElement.classList.add(i),document.addEventListener(\"keydown\",this.onKeydown,!0)):(document.documentElement.classList.remove(i),document.removeEventListener(\"keydown\",this.onKeydown,!0)),this.updateMetrics(),this.emit(n?\"enterFS\":\"exitFS\")}getMatrix(t=this.current){const{a:e,b:i,c:n,d:s,e:o,f:a}=t;return new DOMMatrix([e,i,n,s,o,a])}reset(t){if(this.state!==m.Init&&this.state!==m.Destroy){this.stop(\"current\");for(const t of v)this.target[t]=C[t];this.target.a=this.minScale,this.target.d=this.minScale,this.clampTargetBounds(),this.isResting||(this.friction=void 0===t?this.option(\"friction\"):t,this.state=m.Panning,this.requestTick())}}destroy(){this.stop(),this.state=m.Destroy,this.detachEvents(),this.detachObserver();const{container:t,content:e}=this,i=this.option(\"classes\")||{};for(const e of Object.values(i))t.classList.remove(e+\"\");e&&(e.removeEventListener(\"load\",this.onLoad),e.removeEventListener(\"error\",this.onError)),this.detachPlugins()}}Object.defineProperty(I,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:y}),Object.defineProperty(I,\"Plugins\",{enumerable:!0,configurable:!0,writable:!0,value:{}});const D=function(t,e){let i=!0;return(...n)=>{i&&(i=!1,t(...n),setTimeout((()=>{i=!0}),e))}},F=(t,e)=>{let i=[];return t.childNodes.forEach((t=>{t.nodeType!==Node.ELEMENT_NODE||e&&!t.matches(e)||i.push(t)})),i},j={viewport:null,track:null,enabled:!0,slides:[],axis:\"x\",transition:\"fade\",preload:1,slidesPerPage:\"auto\",initialPage:0,friction:.12,Panzoom:{decelFriction:.12},center:!0,infinite:!0,fill:!0,dragFree:!1,adaptiveHeight:!1,direction:\"ltr\",classes:{container:\"f-carousel\",viewport:\"f-carousel__viewport\",track:\"f-carousel__track\",slide:\"f-carousel__slide\",isLTR:\"is-ltr\",isRTL:\"is-rtl\",isHorizontal:\"is-horizontal\",isVertical:\"is-vertical\",inTransition:\"in-transition\",isSelected:\"is-selected\"},l10n:{NEXT:\"Next slide\",PREV:\"Previous slide\",GOTO:\"Go to slide #%d\"}};var B;!function(t){t[t.Init=0]=\"Init\",t[t.Ready=1]=\"Ready\",t[t.Destroy=2]=\"Destroy\"}(B||(B={}));const H=t=>{if(\"string\"==typeof t||t instanceof HTMLElement)t={html:t};else{const e=t.thumb;void 0!==e&&(\"string\"==typeof e&&(t.thumbSrc=e),e instanceof HTMLImageElement&&(t.thumbEl=e,t.thumbElSrc=e.src,t.thumbSrc=e.src),delete t.thumb)}return Object.assign({html:\"\",el:null,isDom:!1,class:\"\",customClass:\"\",index:-1,dim:0,gap:0,pos:0,transition:!1},t)},N=(t={})=>Object.assign({index:-1,slides:[],dim:0,pos:-1},t);class _ extends f{constructor(t,e){super(e),Object.defineProperty(this,\"instance\",{enumerable:!0,configurable:!0,writable:!0,value:t})}attach(){}detach(){}}const $={classes:{list:\"f-carousel__dots\",isDynamic:\"is-dynamic\",hasDots:\"has-dots\",dot:\"f-carousel__dot\",isBeforePrev:\"is-before-prev\",isPrev:\"is-prev\",isCurrent:\"is-current\",isNext:\"is-next\",isAfterNext:\"is-after-next\"},dotTpl:'',dynamicFrom:11,maxCount:1/0,minCount:2};class W extends _{constructor(){super(...arguments),Object.defineProperty(this,\"isDynamic\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"list\",{enumerable:!0,configurable:!0,writable:!0,value:null})}onRefresh(){this.refresh()}build(){let t=this.list;if(!t){t=document.createElement(\"ul\"),P(t,this.cn(\"list\")),t.setAttribute(\"role\",\"tablist\");const e=this.instance.container;e.appendChild(t),P(e,this.cn(\"hasDots\")),this.list=t}return t}refresh(){var t;const e=this.instance.pages.length,i=Math.min(2,this.option(\"minCount\")),n=Math.max(2e3,this.option(\"maxCount\")),s=this.option(\"dynamicFrom\");if(en)return void this.cleanup();const a=\"number\"==typeof s&&e>5&&e>=s,r=!this.list||this.isDynamic!==a||this.list.children.length!==e;r&&this.cleanup();const l=this.build();if(o(l,this.cn(\"isDynamic\"),!!a),r)for(let t=0;t=e-1&&s.setAttribute(X,\"\")))}addBtn(t){var e;const i=this.instance,n=document.createElement(\"button\");n.setAttribute(\"tabindex\",\"0\"),n.setAttribute(\"title\",i.localize(`{{${t.toUpperCase()}}}`)),P(n,this.cn(\"button\")+\" \"+this.cn(t===q?\"isNext\":\"isPrev\"));const s=i.isRTL?t===q?Y:q:t;var o;return n.innerHTML=i.localize(this.option(`${s}Tpl`)),n.dataset[`carousel${o=t,o?o.match(\"^[a-z]\")?o.charAt(0).toUpperCase()+o.substring(1):o:\"\"}`]=\"true\",null===(e=this.container)||void 0===e||e.appendChild(n),n}build(){const t=this.instance.container,e=this.cn(\"container\");let{container:i,prev:n,next:s}=this;i||(i=t.querySelector(\".\"+e),this.isDom=!!i),i||(i=document.createElement(\"div\"),P(i,e),t.appendChild(i)),this.container=i,s||(s=i.querySelector(\"[data-carousel-next]\")),s||(s=this.addBtn(q)),this.next=s,n||(n=i.querySelector(\"[data-carousel-prev]\")),n||(n=this.addBtn(Y)),this.prev=n}cleanup(){this.isDom||(this.prev&&this.prev.remove(),this.next&&this.next.remove(),this.container&&this.container.remove()),this.prev=null,this.next=null,this.container=null,this.isDom=!1}attach(){this.instance.on([\"refresh\",\"change\"],this.onRefresh)}detach(){this.instance.off([\"refresh\",\"change\"],this.onRefresh),this.cleanup()}}Object.defineProperty(V,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:{classes:{container:\"f-carousel__nav\",button:\"f-button\",isNext:\"is-next\",isPrev:\"is-prev\"},nextTpl:'',prevTpl:''}});class Z extends _{constructor(){super(...arguments),Object.defineProperty(this,\"selectedIndex\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"target\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"nav\",{enumerable:!0,configurable:!0,writable:!0,value:null})}addAsTargetFor(t){this.target=this.instance,this.nav=t,this.attachEvents()}addAsNavFor(t){this.nav=this.instance,this.target=t,this.attachEvents()}attachEvents(){const{nav:t,target:e}=this;t&&e&&(t.options.initialSlide=e.options.initialPage,t.state===B.Ready?this.onNavReady(t):t.on(\"ready\",this.onNavReady),e.state===B.Ready?this.onTargetReady(e):e.on(\"ready\",this.onTargetReady))}onNavReady(t){t.on(\"createSlide\",this.onNavCreateSlide),t.on(\"Panzoom.click\",this.onNavClick),t.on(\"Panzoom.touchEnd\",this.onNavTouch),this.onTargetChange()}onTargetReady(t){t.on(\"change\",this.onTargetChange),t.on(\"Panzoom.refresh\",this.onTargetChange),this.onTargetChange()}onNavClick(t,e,i){this.onNavTouch(t,t.panzoom,i)}onNavTouch(t,e,i){var n,s;if(Math.abs(e.dragOffset.x)>3||Math.abs(e.dragOffset.y)>3)return;const o=i.target,{nav:a,target:r}=this;if(!a||!r||!o)return;const l=o.closest(\"[data-index]\");if(i.stopPropagation(),i.preventDefault(),!l)return;const c=parseInt(l.dataset.index||\"\",10)||0,h=r.getPageForSlide(c),d=a.getPageForSlide(c);a.slideTo(d),r.slideTo(h,{friction:(null===(s=null===(n=this.nav)||void 0===n?void 0:n.plugins)||void 0===s?void 0:s.Sync.option(\"friction\"))||0}),this.markSelectedSlide(c)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onTargetChange(){var t,e;const{target:i,nav:n}=this;if(!i||!n)return;if(n.state!==B.Ready||i.state!==B.Ready)return;const s=null===(e=null===(t=i.pages[i.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index,o=n.getPageForSlide(s);this.markSelectedSlide(s),n.slideTo(o,null===n.prevPage&&null===i.prevPage?{friction:0}:void 0)}markSelectedSlide(t){const e=this.nav;e&&e.state===B.Ready&&(this.selectedIndex=t,[...e.slides].map((e=>{e.el&&e.el.classList[e.index===t?\"add\":\"remove\"](\"is-nav-selected\")})))}attach(){const t=this;let e=t.options.target,i=t.options.nav;e?t.addAsNavFor(e):i&&t.addAsTargetFor(i)}detach(){const t=this,e=t.nav,i=t.target;e&&(e.off(\"ready\",t.onNavReady),e.off(\"createSlide\",t.onNavCreateSlide),e.off(\"Panzoom.click\",t.onNavClick),e.off(\"Panzoom.touchEnd\",t.onNavTouch)),t.nav=null,i&&(i.off(\"ready\",t.onTargetReady),i.off(\"refresh\",t.onTargetChange),i.off(\"change\",t.onTargetChange)),t.target=null}}Object.defineProperty(Z,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:{friction:.35}});const U={Navigation:V,Dots:W,Sync:Z},G=\"animationend\",K=\"isSelected\",J=\"slide\";class Q extends g{get axis(){return this.isHorizontal?\"e\":\"f\"}get isEnabled(){return this.state===B.Ready}get isInfinite(){let t=!1;const{contentDim:e,viewportDim:i,pages:n,slides:s}=this,o=s[0];return n.length>=2&&o&&e+o.dim>=i&&(t=this.option(\"infinite\")),t}get isRTL(){return\"rtl\"===this.option(\"direction\")}get isHorizontal(){return\"x\"===this.option(\"axis\")}constructor(t,e={},i={}){if(super(),Object.defineProperty(this,\"bp\",{enumerable:!0,configurable:!0,writable:!0,value:\"\"}),Object.defineProperty(this,\"lp\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"userOptions\",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,\"userPlugins\",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,\"state\",{enumerable:!0,configurable:!0,writable:!0,value:B.Init}),Object.defineProperty(this,\"page\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"prevPage\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"container\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,\"viewport\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"track\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"slides\",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,\"pages\",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,\"panzoom\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"inTransition\",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,\"contentDim\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"viewportDim\",{enumerable:!0,configurable:!0,writable:!0,value:0}),\"string\"==typeof t&&(t=document.querySelector(t)),!t||!E(t))throw new Error(\"No Element found\");this.container=t,this.slideNext=D(this.slideNext.bind(this),150),this.slidePrev=D(this.slidePrev.bind(this),150),this.userOptions=e,this.userPlugins=i,queueMicrotask((()=>{this.processOptions()}))}processOptions(){var t,e;const i=u({},Q.defaults,this.userOptions);let n=\"\";const s=i.breakpoints;if(s&&d(s))for(const[t,e]of Object.entries(s))window.matchMedia(t).matches&&d(e)&&(n+=t,u(i,e));n===this.bp&&this.state!==B.Init||(this.bp=n,this.state===B.Ready&&(i.initialSlide=(null===(e=null===(t=this.pages[this.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index)||0),this.state!==B.Init&&this.destroy(),super.setOptions(i),!1===this.option(\"enabled\")?this.attachEvents():setTimeout((()=>{this.init()}),0))}init(){this.state=B.Init,this.emit(\"init\"),this.attachPlugins(Object.assign(Object.assign({},Q.Plugins),this.userPlugins)),this.emit(\"attachPlugins\"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.setInitialPosition(),this.initPanzoom(),this.attachEvents(),this.state=B.Ready,this.emit(\"ready\")}initLayout(){const{container:t}=this,e=this.option(\"classes\");P(t,this.cn(\"container\")),o(t,e.isLTR,!this.isRTL),o(t,e.isRTL,this.isRTL),o(t,e.isVertical,!this.isHorizontal),o(t,e.isHorizontal,this.isHorizontal);let i=this.option(\"viewport\")||t.querySelector(`.${e.viewport}`);i||(i=document.createElement(\"div\"),P(i,e.viewport),i.append(...F(t,`.${e.slide}`)),t.prepend(i)),i.addEventListener(\"scroll\",this.onScroll);let n=this.option(\"track\")||t.querySelector(`.${e.track}`);n||(n=document.createElement(\"div\"),P(n,e.track),n.append(...Array.from(i.childNodes))),n.setAttribute(\"aria-live\",\"polite\"),i.contains(n)||i.prepend(n),this.viewport=i,this.track=n,this.emit(\"initLayout\")}initSlides(){const{track:t}=this;if(!t)return;const e=[...this.slides],i=[];[...F(t,`.${this.cn(J)}`)].forEach((t=>{if(E(t)){const e=H({el:t,isDom:!0,index:this.slides.length});i.push(e)}}));for(let t of[...this.option(\"slides\",[])||[],...e])i.push(H(t));this.slides=i;for(let t=0;t!(this.pages.length<2&&!t.options.infinite),bounds:()=>this.getBounds(),maxVelocity:t=>Math.abs(t.target[this.axis]-t.current[this.axis])<2*this.viewportDim?100:0},t)),this.panzoom.on(\"*\",((t,e,...i)=>{this.emit(`Panzoom.${e}`,t,...i)})),this.panzoom.on(\"decel\",this.onDecel),this.panzoom.on(\"refresh\",this.onRefresh),this.panzoom.on(\"beforeTransform\",this.onBeforeTransform),this.panzoom.on(\"endAnimation\",this.onEndAnimation)}attachEvents(){const t=this.container;t&&(t.addEventListener(\"click\",this.onClick,{passive:!1,capture:!1}),t.addEventListener(\"slideTo\",this.onSlideTo)),window.addEventListener(\"resize\",this.onResize)}createPages(){let t=[];const{contentDim:e,viewportDim:i}=this;let n=this.option(\"slidesPerPage\");n=(\"auto\"===n||e<=i)&&!1!==this.option(\"fill\")?1/0:parseFloat(n+\"\");let s=0,o=0,a=0;for(const e of this.slides)(!t.length||o+e.dim-i>.05||a>=n)&&(t.push(N()),s=t.length-1,o=0,a=0),t[s].slides.push(e),o+=e.dim+e.gap,a++;return t}processPages(){const e=this.pages,{contentDim:i,viewportDim:n,isInfinite:s}=this,o=this.option(\"center\"),a=this.option(\"fill\"),r=a&&o&&i>n&&!s;if(e.forEach(((t,e)=>{var s;t.index=e,t.pos=(null===(s=t.slides[0])||void 0===s?void 0:s.pos)||0,t.dim=0;for(const[e,i]of t.slides.entries())t.dim+=i.dim,e=i-.5*n?t.pos=i-n:o&&(t.pos+=-.5*(n-t.dim))})),e.forEach((e=>{a&&!s&&i>n&&(e.pos=Math.max(e.pos,0),e.pos=Math.min(e.pos,i-n)),e.pos=t(e.pos,1e3),e.dim=t(e.dim,1e3),Math.abs(e.pos)<=.1&&(e.pos=0)})),s)return e;const l=[];let c;return e.forEach((t=>{const e=Object.assign({},t);c&&e.pos===c.pos?(c.dim+=e.dim,c.slides=[...c.slides,...e.slides]):(e.index=l.length,c=e,l.push(e))})),l}getPageFromIndex(t=0){const e=this.pages.length;let i;return t=parseInt((t||0).toString())||0,i=this.isInfinite?(t%e+e)%e:Math.max(Math.min(t,e-1),0),i}getSlideMetrics(e){var i,n;const s=this.isHorizontal?\"width\":\"height\";let o=0,a=0,r=e.el;const l=!(!r||r.parentNode);if(r?o=parseFloat(r.dataset[s]||\"\")||0:(r=document.createElement(\"div\"),r.style.visibility=\"hidden\",(this.track||document.body).prepend(r)),P(r,this.cn(J)+\" \"+e.class+\" \"+e.customClass),o)r.style[s]=`${o}px`,r.style[\"width\"===s?\"height\":\"width\"]=\"\";else{l&&(this.track||document.body).prepend(r),o=r.getBoundingClientRect()[s]*Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1);let t=r[this.isHorizontal?\"offsetWidth\":\"offsetHeight\"];t-1>o&&(o=t)}const c=getComputedStyle(r);return\"content-box\"===c.boxSizing&&(this.isHorizontal?(o+=parseFloat(c.paddingLeft)||0,o+=parseFloat(c.paddingRight)||0):(o+=parseFloat(c.paddingTop)||0,o+=parseFloat(c.paddingBottom)||0)),a=parseFloat(c[this.isHorizontal?\"marginRight\":\"marginBottom\"])||0,l?null===(n=r.parentElement)||void 0===n||n.removeChild(r):e.el||r.remove(),{dim:t(o,1e3),gap:t(a,1e3)}}getBounds(){const{isInfinite:t,isRTL:e,isHorizontal:i,pages:n}=this;let s={min:0,max:0};if(t)s={min:-1/0,max:1/0};else if(n.length){const t=n[0].pos,o=n[n.length-1].pos;s=e&&i?{min:t,max:o}:{min:-1*o,max:-1*t}}return{x:i?s:{min:0,max:0},y:i?{min:0,max:0}:s}}repositionSlides(){let e,{isHorizontal:i,isRTL:n,isInfinite:s,viewport:o,viewportDim:a,contentDim:r,page:l,pages:c,slides:h,panzoom:d}=this,u=0,p=0,f=0,g=0;d?g=-1*d.current[this.axis]:c[l]&&(g=c[l].pos||0),e=i?n?\"right\":\"left\":\"top\",n&&i&&(g*=-1);for(const i of h){const n=i.el;n?(\"top\"===e?(n.style.right=\"\",n.style.left=\"\"):n.style.top=\"\",i.index!==u?n.style[e]=0===p?\"\":`${t(p,1e3)}px`:n.style[e]=\"\",f+=i.dim+i.gap,u++):p+=i.dim+i.gap}if(s&&f&&o){let n=getComputedStyle(o),s=\"padding\",l=i?\"Right\":\"Bottom\",c=parseFloat(n[s+(i?\"Left\":\"Top\")]);g-=c,a+=c,a+=parseFloat(n[s+l]);for(const i of h)i.el&&(t(i.pos)t(r-a)&&(i.el.style[e]=`${t(p+f,1e3)}px`),t(i.pos+i.gap)>=t(r-a)&&t(i.pos)>t(g+a)&&t(g)1&&(m=c[b[0]],v=c[b[1]]),m&&v){let i=0;for(const n of h)n.el?this.inTransition.has(n.index)&&m.slides.indexOf(n)<0&&(n.el.style[e]=`${t(i+(m.pos-v.pos),1e3)}px`):i+=n.dim+n.gap}}createSlideEl(t){const{track:e,slides:i}=this;if(!e||!t)return;if(t.el&&t.el.parentNode)return;const n=t.el||document.createElement(\"div\");P(n,this.cn(J)),P(n,t.class),P(n,t.customClass);const s=t.html;s&&(s instanceof HTMLElement?n.appendChild(s):n.innerHTML=t.html+\"\");const o=[];i.forEach(((t,e)=>{t.el&&o.push(e)}));const a=t.index;let r=null;if(o.length){r=i[o.reduce(((t,e)=>Math.abs(e-a)1)return!1;let h=t>a?1:-1;this.isInfinite&&(0===a&&t===r.length-1&&(h=-1),a===r.length-1&&0===t&&(h=1));const d=r[c].pos*(this.isRTL?1:-1);if(a===c&&Math.abs(d-l.target[this.axis])<1)return!1;this.clearTransitions();const u=l.isResting;P(this.container,this.cn(\"inTransition\"));const p=(null===(s=r[a])||void 0===s?void 0:s.slides[0])||null,f=(null===(o=r[c])||void 0===o?void 0:o.slides[0])||null;this.inTransition.add(f.index),this.createSlideEl(f);let g=p.el,m=f.el;u||e===J||(e=\"fadeFast\",g=null);const v=this.isRTL?\"next\":\"prev\",b=this.isRTL?\"prev\":\"next\";return g&&(this.inTransition.add(p.index),p.transition=e,g.addEventListener(G,this.onAnimationEnd),g.classList.add(`f-${e}Out`,`to-${h>0?b:v}`)),m&&(f.transition=e,m.addEventListener(G,this.onAnimationEnd),m.classList.add(`f-${e}In`,`from-${h>0?v:b}`)),l.current[this.axis]=d,l.target[this.axis]=d,l.requestTick(),this.onChange(c),!0}manageSlideVisiblity(){const t=new Set,e=new Set,i=this.getVisibleSlides(parseFloat(this.option(\"preload\",0)+\"\")||0);for(const n of this.slides)i.has(n)?t.add(n):e.add(n);for(const e of this.inTransition)t.add(this.slides[e]);for(const e of t)this.createSlideEl(e),this.lazyLoadSlide(e);for(const i of e)t.has(i)||this.removeSlideEl(i);this.markSelectedSlides(),this.repositionSlides()}markSelectedSlides(){if(!this.pages[this.page]||!this.pages[this.page].slides)return;const t=\"aria-hidden\";let e=this.cn(K);if(e)for(const i of this.slides){const n=i.el;n&&(n.dataset.index=`${i.index}`,n.classList.contains(\"f-thumbs__slide\")?this.getVisibleSlides(0).has(i)?n.removeAttribute(t):n.setAttribute(t,\"true\"):this.pages[this.page].slides.includes(i)?(n.classList.contains(e)||(P(n,e),this.emit(\"selectSlide\",i)),n.removeAttribute(t)):(n.classList.contains(e)&&(S(n,e),this.emit(\"unselectSlide\",i)),n.setAttribute(t,\"true\")))}}flipInfiniteTrack(){const{axis:t,isHorizontal:e,isInfinite:i,isRTL:n,viewportDim:s,contentDim:o}=this,a=this.panzoom;if(!a||!i)return;let r=a.current[t],l=a.target[t]-r,c=0,h=.5*s;n&&e?(r<-h&&(c=-1,r+=o),r>o-h&&(c=1,r-=o)):(r>h&&(c=1,r-=o),r<-o+h&&(c=-1,r+=o)),c&&(a.current[t]=r,a.target[t]=r+l)}lazyLoadImg(t,e){const i=this,s=\"f-fadeIn\",o=\"is-preloading\";let a=!1,r=null;const l=()=>{a||(a=!0,r&&(r.remove(),r=null),S(e,o),e.complete&&(P(e,s),setTimeout((()=>{S(e,s)}),350)),this.option(\"adaptiveHeight\")&&t.el&&this.pages[this.page].slides.indexOf(t)>-1&&(i.updateMetrics(),i.setViewportHeight()),this.emit(\"load\",t))};P(e,o),e.src=e.dataset.lazySrcset||e.dataset.lazySrc||\"\",delete e.dataset.lazySrc,delete e.dataset.lazySrcset,e.addEventListener(\"error\",(()=>{l()})),e.addEventListener(\"load\",(()=>{l()})),setTimeout((()=>{const i=e.parentNode;i&&t.el&&(e.complete?l():a||(r=n(x),i.insertBefore(r,e)))}),300)}lazyLoadSlide(t){const e=t&&t.el;if(!e)return;const i=new Set;let n=Array.from(e.querySelectorAll(\"[data-lazy-src],[data-lazy-srcset]\"));e.dataset.lazySrc&&n.push(e),n.map((t=>{t instanceof HTMLImageElement?i.add(t):t instanceof HTMLElement&&t.dataset.lazySrc&&(t.style.backgroundImage=`url('${t.dataset.lazySrc}')`,delete t.dataset.lazySrc)}));for(const e of i)this.lazyLoadImg(t,e)}onAnimationEnd(t){var e;const i=t.target,n=i?parseInt(i.dataset.index||\"\",10)||0:-1,s=this.slides[n],o=t.animationName;if(!i||!s||!o)return;const a=!!this.inTransition.has(n)&&s.transition;a&&o.substring(0,a.length+2)===`f-${a}`&&this.inTransition.delete(n),this.inTransition.size||this.clearTransitions(),n===this.page&&(null===(e=this.panzoom)||void 0===e?void 0:e.isResting)&&this.emit(\"settle\")}onDecel(t,e=0,i=0,n=0,s=0){if(this.option(\"dragFree\"))return void this.setPageFromPosition();const{isRTL:o,isHorizontal:a,axis:r,pages:l}=this,c=l.length,h=Math.abs(Math.atan2(i,e)/(Math.PI/180));let d=0;if(d=h>45&&h<135?a?0:i:a?e:0,!c)return;let u=this.page,p=o&&a?1:-1;const f=t.current[r]*p;let{pageIndex:g}=this.getPageFromPosition(f);Math.abs(d)>5?(l[u].dim=t&&(this.page+=d.length),this.updateMetrics(),a){const e=(null===(s=this.pages[this.page])||void 0===s?void 0:s.pos)||0,i=(null===(o=this.pages[this.page])||void 0===o?void 0:o.dim)||0,n=this.pages.length||1,h=this.isRTL?l-i:i-l,d=this.isRTL?r-e:e-r;c&&1===n?(t<=this.page&&(a.current[this.axis]-=h,a.target[this.axis]-=h),a.panTo({[this.isHorizontal?\"x\":\"y\"]:-1*e})):d&&t<=this.page&&(a.target[this.axis]-=d,a.current[this.axis]-=d,a.requestTick())}for(const t of d)this.emit(\"initSlide\",t,t.index)}prependSlide(t){this.addSlide(0,t)}appendSlide(t){this.addSlide(this.slides.length,t)}removeSlide(t){const e=this.slides.length;t=(t%e+e)%e;const i=this.slides[t];if(i){this.removeSlideEl(i,!0),this.slides.splice(t,1);for(let t=0;tthis.page?-1:1;let l=-1*o.current.e,c=t((l-r.pos)/(1*r.dim),1e3),h=c,d=c;this.isInfinite&&!0!==n&&(h=t((l-r.pos+a)/(1*r.dim),1e3),d=t((l-r.pos-a)/(1*r.dim),1e3));let u=[c,h,d].reduce((function(t,e){return Math.abs(e)1?1:u<-1?-1:u}setViewportHeight(){const{page:t,pages:e,viewport:i,isHorizontal:n}=this;if(!i||!e[t])return;let s=0;n&&this.track&&(this.track.style.height=\"auto\",e[t].slides.forEach((t=>{t.el&&(s=Math.max(s,t.el.offsetHeight))}))),i.style.height=s?`${s}px`:\"\"}getPageForSlide(t){for(const e of this.pages)for(const i of e.slides)if(i.index===t)return e.index;return-1}getVisibleSlides(t=0){var e;const i=new Set;let{panzoom:n,contentDim:s,viewportDim:o,pages:a,page:r}=this;if(o){s=s+(null===(e=this.slides[this.slides.length-1])||void 0===e?void 0:e.gap)||0;let l=0;l=n&&n.state!==m.Init&&n.state!==m.Destroy?-1*n.current[this.axis]:a[r]&&a[r].pos||0,this.isInfinite&&(l-=Math.floor(l/s)*s),this.isRTL&&this.isHorizontal&&(l*=-1);const c=l-o*t,h=l+o*(t+1),d=this.isInfinite?[-1,0,1]:[0];for(const t of this.slides)for(const e of d){const n=t.pos+e*s,o=n+t.dim+t.gap;nc&&i.add(t)}}return i}getPageFromPosition(t){const{viewportDim:e,contentDim:i,slides:n,pages:s,panzoom:o}=this,a=s.length,r=n.length,l=n[0],c=n[r-1],h=this.option(\"center\");let d=0,u=0,p=0,f=void 0===t?-1*((null==o?void 0:o.target[this.axis])||0):t;h&&(f+=.5*e),this.isInfinite?(fc.pos+c.dim+.5*c.gap&&(f-=i,p=1)):f=Math.max(l.pos||0,Math.min(f,c.pos));let g=c,m=n.find((t=>{const e=t.pos-.5*g.gap,i=t.pos+t.dim+.5*t.gap;return g=t,f>=e&&f{this.removeSlideEl(t)})),this.detachPlugins(),e&&(e.removeEventListener(\"scroll\",this.onScroll),e.offsetParent&&i&&i.offsetParent&&e.replaceWith(...i.childNodes));for(const[e,i]of Object.entries(o))\"container\"!==e&&i&&t.classList.remove(i);this.track=null,this.viewport=null,this.page=0,this.slides=[];const a=this.events.get(\"ready\");this.events=new Map,a&&this.events.set(\"ready\",a)}}Object.defineProperty(Q,\"Panzoom\",{enumerable:!0,configurable:!0,writable:!0,value:I}),Object.defineProperty(Q,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:j}),Object.defineProperty(Q,\"Plugins\",{enumerable:!0,configurable:!0,writable:!0,value:U});const tt=function(t){if(!E(t))return 0;const e=window.scrollY,i=window.innerHeight,n=e+i,s=t.getBoundingClientRect(),o=s.y+e,a=s.height,r=o+a;if(e>r||nr)return 100;if(on)return 100;let l=a;on&&(l-=r-n);const c=l/i*100;return Math.round(c)},et=!(\"undefined\"==typeof window||!window.document||!window.document.createElement);let it;const nt=[\"a[href]\",\"area[href]\",'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\"select:not([disabled]):not([aria-hidden])\",\"textarea:not([disabled]):not([aria-hidden])\",\"button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)\",\"iframe\",\"object\",\"embed\",\"video\",\"audio\",\"[contenteditable]\",'[tabindex]:not([tabindex^=\"-\"]):not([disabled]):not([aria-hidden])'].join(\",\"),st=t=>{if(t&&et){void 0===it&&document.createElement(\"div\").focus({get preventScroll(){return it=!0,!1}});try{if(it)t.focus({preventScroll:!0});else{const e=window.scrollY||document.body.scrollTop,i=window.scrollX||document.body.scrollLeft;t.focus(),document.body.scrollTo({top:e,left:i,behavior:\"auto\"})}}catch(t){}}},ot=()=>{const t=document;let e,i=\"\",n=\"\",s=\"\";return t.fullscreenEnabled?(i=\"requestFullscreen\",n=\"exitFullscreen\",s=\"fullscreenElement\"):t.webkitFullscreenEnabled&&(i=\"webkitRequestFullscreen\",n=\"webkitExitFullscreen\",s=\"webkitFullscreenElement\"),i&&(e={request:function(e=t.documentElement){return\"webkitRequestFullscreen\"===i?e[i](Element.ALLOW_KEYBOARD_INPUT):e[i]()},exit:function(){return t[s]&&t[n]()},isFullscreen:function(){return t[s]}}),e},at={animated:!0,autoFocus:!0,backdropClick:\"close\",Carousel:{classes:{container:\"fancybox__carousel\",viewport:\"fancybox__viewport\",track:\"fancybox__track\",slide:\"fancybox__slide\"}},closeButton:\"auto\",closeExisting:!1,commonCaption:!1,compact:()=>window.matchMedia(\"(max-width: 578px), (max-height: 578px)\").matches,contentClick:\"toggleZoom\",contentDblClick:!1,defaultType:\"image\",defaultDisplay:\"flex\",dragToClose:!0,Fullscreen:{autoStart:!1},groupAll:!1,groupAttr:\"data-fancybox\",hideClass:\"f-fadeOut\",hideScrollbar:!0,idle:3500,keyboard:{Escape:\"close\",Delete:\"close\",Backspace:\"close\",PageUp:\"next\",PageDown:\"prev\",ArrowUp:\"prev\",ArrowDown:\"next\",ArrowRight:\"next\",ArrowLeft:\"prev\"},l10n:Object.assign(Object.assign({},b),{CLOSE:\"Close\",NEXT:\"Next\",PREV:\"Previous\",MODAL:\"You can close this modal content with the ESC key\",ERROR:\"Something Went Wrong, Please Try Again Later\",IMAGE_ERROR:\"Image Not Found\",ELEMENT_NOT_FOUND:\"HTML Element Not Found\",AJAX_NOT_FOUND:\"Error Loading AJAX : Not Found\",AJAX_FORBIDDEN:\"Error Loading AJAX : Forbidden\",IFRAME_ERROR:\"Error Loading Page\",TOGGLE_ZOOM:\"Toggle zoom level\",TOGGLE_THUMBS:\"Toggle thumbnails\",TOGGLE_SLIDESHOW:\"Toggle slideshow\",TOGGLE_FULLSCREEN:\"Toggle full-screen mode\",DOWNLOAD:\"Download\"}),parentEl:null,placeFocusBack:!0,showClass:\"f-zoomInUp\",startIndex:0,tpl:{closeButton:'',main:'
\\n
\\n
\\n
\\n
'},trapFocus:!0,wheel:\"zoom\"};var rt,lt;!function(t){t[t.Init=0]=\"Init\",t[t.Ready=1]=\"Ready\",t[t.Closing=2]=\"Closing\",t[t.CustomClosing=3]=\"CustomClosing\",t[t.Destroy=4]=\"Destroy\"}(rt||(rt={})),function(t){t[t.Loading=0]=\"Loading\",t[t.Opening=1]=\"Opening\",t[t.Ready=2]=\"Ready\",t[t.Closing=3]=\"Closing\"}(lt||(lt={}));let ct=\"\",ht=!1,dt=!1,ut=null;const pt=()=>{let t=\"\",e=\"\";const i=Oe.getInstance();if(i){const n=i.carousel,s=i.getSlide();if(n&&s){let o=s.slug||void 0,a=s.triggerEl||void 0;e=o||(i.option(\"slug\")||\"\"),!e&&a&&a.dataset&&(e=a.dataset.fancybox||\"\"),e&&\"true\"!==e&&(t=\"#\"+e+(!o&&n.slides.length>1?\"-\"+(s.index+1):\"\"))}}return{hash:t,slug:e,index:1}},ft=()=>{const t=new URL(document.URL).hash,e=t.slice(1).split(\"-\"),i=e[e.length-1],n=i&&/^\\+?\\d+$/.test(i)&&parseInt(e.pop()||\"1\",10)||1;return{hash:t,slug:e.join(\"-\"),index:n}},gt=()=>{const{slug:t,index:e}=ft();if(!t)return;let i=document.querySelector(`[data-slug=\"${t}\"]`);if(i&&i.dispatchEvent(new CustomEvent(\"click\",{bubbles:!0,cancelable:!0})),Oe.getInstance())return;const n=document.querySelectorAll(`[data-fancybox=\"${t}\"]`);n.length&&(i=n[e-1],i&&i.dispatchEvent(new CustomEvent(\"click\",{bubbles:!0,cancelable:!0})))},mt=()=>{if(!1===Oe.defaults.Hash)return;const t=Oe.getInstance();if(!1===(null==t?void 0:t.options.Hash))return;const{slug:e,index:i}=ft(),{slug:n}=pt();t&&(e===n?t.jumpTo(i-1):(ht=!0,t.close())),gt()},vt=()=>{ut&&clearTimeout(ut),queueMicrotask((()=>{mt()}))},bt=()=>{window.addEventListener(\"hashchange\",vt,!1),setTimeout((()=>{mt()}),500)};et&&(/complete|interactive|loaded/.test(document.readyState)?bt():document.addEventListener(\"DOMContentLoaded\",bt));const yt=\"is-zooming-in\";class wt extends _{onCreateSlide(t,e,i){const n=this.instance.optionFor(i,\"src\")||\"\";i.el&&\"image\"===i.type&&\"string\"==typeof n&&this.setImage(i,n)}onRemoveSlide(t,e,i){i.panzoom&&i.panzoom.destroy(),i.panzoom=void 0,i.imageEl=void 0}onChange(t,e,i,n){S(this.instance.container,yt);for(const t of e.slides){const e=t.panzoom;e&&t.index!==i&&e.reset(.35)}}onClose(){var t;const e=this.instance,i=e.container,n=e.getSlide();if(!i||!i.parentElement||!n)return;const{el:s,contentEl:o,panzoom:a,thumbElSrc:r}=n;if(!s||!r||!o||!a||a.isContentLoading||a.state===m.Init||a.state===m.Destroy)return;a.updateMetrics();let l=this.getZoomInfo(n);if(!l)return;this.instance.state=rt.CustomClosing,i.classList.remove(yt),i.classList.add(\"is-zooming-out\"),o.style.backgroundImage=`url('${r}')`;const c=i.getBoundingClientRect();1===((null===(t=window.visualViewport)||void 0===t?void 0:t.scale)||1)&&Object.assign(i.style,{position:\"absolute\",top:`${i.offsetTop+window.scrollY}px`,left:`${i.offsetLeft+window.scrollX}px`,bottom:\"auto\",right:\"auto\",width:`${c.width}px`,height:`${c.height}px`,overflow:\"hidden\"});const{x:h,y:d,scale:u,opacity:p}=l;if(p){const t=((t,e,i,n)=>{const s=e-t,o=n-i;return e=>i+((e-t)/s*o||0)})(a.scale,u,1,0);a.on(\"afterTransform\",(()=>{o.style.opacity=t(a.scale)+\"\"}))}a.on(\"endAnimation\",(()=>{e.destroy()})),a.target.a=u,a.target.b=0,a.target.c=0,a.target.d=u,a.panTo({x:h,y:d,scale:u,friction:p?.2:.33,ignoreBounds:!0}),a.isResting&&e.destroy()}setImage(t,e){const i=this.instance;t.src=e,this.process(t,e).then((e=>{const{contentEl:n,imageEl:s,thumbElSrc:o,el:a}=t;if(i.isClosing()||!n||!s)return;n.offsetHeight;const r=!!i.isOpeningSlide(t)&&this.getZoomInfo(t);if(this.option(\"protected\")&&a){a.addEventListener(\"contextmenu\",(t=>{t.preventDefault()}));const t=document.createElement(\"div\");P(t,\"fancybox-protected\"),n.appendChild(t)}if(o&&r){const s=e.contentRect,a=Math.max(s.fullWidth,s.fullHeight);let c=null;!r.opacity&&a>1200&&(c=document.createElement(\"img\"),P(c,\"fancybox-ghost\"),c.src=o,n.appendChild(c));const h=()=>{c&&(P(c,\"f-fadeFastOut\"),setTimeout((()=>{c&&(c.remove(),c=null)}),200))};(l=o,new Promise(((t,e)=>{const i=new Image;i.onload=t,i.onerror=e,i.src=l}))).then((()=>{i.hideLoading(t),t.state=lt.Opening,this.instance.emit(\"reveal\",t),this.zoomIn(t).then((()=>{h(),this.instance.done(t)}),(()=>{})),c&&setTimeout((()=>{h()}),a>2500?800:200)}),(()=>{i.hideLoading(t),i.revealContent(t)}))}else{const n=this.optionFor(t,\"initialSize\"),s=this.optionFor(t,\"zoom\"),o={event:i.prevMouseMoveEvent||i.options.event,friction:s?.12:0};let a=i.optionFor(t,\"showClass\")||void 0,r=!0;i.isOpeningSlide(t)&&(\"full\"===n?e.zoomToFull(o):\"cover\"===n?e.zoomToCover(o):\"max\"===n?e.zoomToMax(o):r=!1,e.stop(\"current\")),r&&a&&(a=e.isDragging?\"f-fadeIn\":\"\"),i.hideLoading(t),i.revealContent(t,a)}var l}),(()=>{i.setError(t,\"{{IMAGE_ERROR}}\")}))}process(t,e){return new Promise(((i,s)=>{var o;const a=this.instance,r=t.el;a.clearContent(t),a.showLoading(t);let l=this.optionFor(t,\"content\");if(\"string\"==typeof l&&(l=n(l)),!l||!E(l)){if(l=document.createElement(\"img\"),l instanceof HTMLImageElement){let i=\"\",n=t.caption;i=\"string\"==typeof n&&n?n.replace(/<[^>]+>/gi,\"\").substring(0,1e3):`Image ${t.index+1} of ${(null===(o=a.carousel)||void 0===o?void 0:o.pages.length)||1}`,l.src=e||\"\",l.alt=i,l.draggable=!1,t.srcset&&l.setAttribute(\"srcset\",t.srcset),this.instance.isOpeningSlide(t)&&(l.fetchPriority=\"high\")}t.sizes&&l.setAttribute(\"sizes\",t.sizes)}P(l,\"fancybox-image\"),t.imageEl=l,a.setContent(t,l,!1);t.panzoom=new I(r,u({transformParent:!0},this.option(\"Panzoom\")||{},{content:l,width:(e,i)=>a.optionFor(t,\"width\",\"auto\",i)||\"auto\",height:(e,i)=>a.optionFor(t,\"height\",\"auto\",i)||\"auto\",wheel:()=>{const t=a.option(\"wheel\");return(\"zoom\"===t||\"pan\"==t)&&t},click:(e,i)=>{var n,s;if(a.isCompact||a.isClosing())return!1;if(t.index!==(null===(n=a.getSlide())||void 0===n?void 0:n.index))return!1;if(i){const t=i.composedPath()[0];if([\"A\",\"BUTTON\",\"TEXTAREA\",\"OPTION\",\"INPUT\",\"SELECT\",\"VIDEO\"].includes(t.nodeName))return!1}let o=!i||i.target&&(null===(s=t.contentEl)||void 0===s?void 0:s.contains(i.target));return a.option(o?\"contentClick\":\"backdropClick\")||!1},dblClick:()=>a.isCompact?\"toggleZoom\":a.option(\"contentDblClick\")||!1,spinner:!1,panOnlyZoomed:!0,wheelLimit:1/0,on:{ready:t=>{i(t)},error:()=>{s()},destroy:()=>{s()}}}))}))}zoomIn(t){return new Promise(((e,i)=>{const n=this.instance,s=n.container,{panzoom:o,contentEl:a,el:r}=t;o&&o.updateMetrics();const l=this.getZoomInfo(t);if(!(l&&r&&a&&o&&s))return void i();const{x:c,y:h,scale:d,opacity:u}=l,p=()=>{t.state!==lt.Closing&&(u&&(a.style.opacity=Math.max(Math.min(1,1-(1-o.scale)/(1-d)),0)+\"\"),o.scale>=1&&o.scale>o.targetScale-.1&&e(o))},f=t=>{(t.scale<.99||t.scale>1.01)&&!t.isDragging||(S(s,yt),a.style.opacity=\"\",t.off(\"endAnimation\",f),t.off(\"touchStart\",f),t.off(\"afterTransform\",p),e(t))};o.on(\"endAnimation\",f),o.on(\"touchStart\",f),o.on(\"afterTransform\",p),o.on([\"error\",\"destroy\"],(()=>{i()})),o.panTo({x:c,y:h,scale:d,friction:0,ignoreBounds:!0}),o.stop(\"current\");const g={event:\"mousemove\"===o.panMode?n.prevMouseMoveEvent||n.options.event:void 0},m=this.optionFor(t,\"initialSize\");P(s,yt),n.hideLoading(t),\"full\"===m?o.zoomToFull(g):\"cover\"===m?o.zoomToCover(g):\"max\"===m?o.zoomToMax(g):o.reset(.172)}))}getZoomInfo(t){const{el:e,imageEl:i,thumbEl:n,panzoom:s}=t,o=this.instance,a=o.container;if(!e||!i||!n||!s||tt(n)<3||!this.optionFor(t,\"zoom\")||!a||o.state===rt.Destroy)return!1;if(\"0\"===getComputedStyle(a).getPropertyValue(\"--f-images-zoom\"))return!1;const r=window.visualViewport||null;if(1!==(r?r.scale:1))return!1;let{top:l,left:c,width:h,height:d}=n.getBoundingClientRect(),{top:u,left:p,fitWidth:f,fitHeight:g}=s.contentRect;if(!(h&&d&&f&&g))return!1;const m=s.container.getBoundingClientRect();p+=m.left,u+=m.top;const v=-1*(p+.5*f-(c+.5*h)),b=-1*(u+.5*g-(l+.5*d)),y=h/f;let w=this.option(\"zoomOpacity\")||!1;return\"auto\"===w&&(w=Math.abs(h/d-f/g)>.1),{x:v,y:b,scale:y,opacity:w}}attach(){const t=this,e=t.instance;e.on(\"Carousel.change\",t.onChange),e.on(\"Carousel.createSlide\",t.onCreateSlide),e.on(\"Carousel.removeSlide\",t.onRemoveSlide),e.on(\"close\",t.onClose)}detach(){const t=this,e=t.instance;e.off(\"Carousel.change\",t.onChange),e.off(\"Carousel.createSlide\",t.onCreateSlide),e.off(\"Carousel.removeSlide\",t.onRemoveSlide),e.off(\"close\",t.onClose)}}Object.defineProperty(wt,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:{initialSize:\"fit\",Panzoom:{maxScale:1},protected:!1,zoom:!0,zoomOpacity:\"auto\"}}),\"function\"==typeof SuppressedError&&SuppressedError;const xt=\"html\",Et=\"image\",St=\"map\",Pt=\"youtube\",Ct=\"vimeo\",Tt=\"html5video\",Mt=(t,e={})=>{const i=new URL(t),n=new URLSearchParams(i.search),s=new URLSearchParams;for(const[t,i]of[...n,...Object.entries(e)]){let e=i+\"\";if(\"t\"===t){let t=e.match(/((\\d*)m)?(\\d*)s?/);t&&s.set(\"start\",60*parseInt(t[2]||\"0\")+parseInt(t[3]||\"0\")+\"\")}else s.set(t,e)}let o=s+\"\",a=t.match(/#t=((.*)?\\d+s)/);return a&&(o+=`#t=${a[1]}`),o},Ot={ajax:null,autoSize:!0,iframeAttr:{allow:\"autoplay; fullscreen\",scrolling:\"auto\"},preload:!0,videoAutoplay:!0,videoRatio:16/9,videoTpl:'',videoFormat:\"\",vimeo:{byline:1,color:\"00adef\",controls:1,dnt:1,muted:0},youtube:{controls:1,enablejsapi:1,nocookie:1,rel:0,fs:1}},At=[\"image\",\"html\",\"ajax\",\"inline\",\"clone\",\"iframe\",\"map\",\"pdf\",\"html5video\",\"youtube\",\"vimeo\"];class Lt extends _{onBeforeInitSlide(t,e,i){this.processType(i)}onCreateSlide(t,e,i){this.setContent(i)}onClearContent(t,e){e.xhr&&(e.xhr.abort(),e.xhr=null);const i=e.iframeEl;i&&(i.onload=i.onerror=null,i.src=\"//about:blank\",e.iframeEl=null);const n=e.contentEl,s=e.placeholderEl;if(\"inline\"===e.type&&n&&s)n.classList.remove(\"fancybox__content\"),\"none\"!==getComputedStyle(n).getPropertyValue(\"display\")&&(n.style.display=\"none\"),setTimeout((()=>{s&&(n&&s.parentNode&&s.parentNode.insertBefore(n,s),s.remove())}),0),e.contentEl=void 0,e.placeholderEl=void 0;else for(;e.el&&e.el.firstChild;)e.el.removeChild(e.el.firstChild)}onSelectSlide(t,e,i){i.state===lt.Ready&&this.playVideo()}onUnselectSlide(t,e,i){var n,s;if(i.type===Tt){try{null===(s=null===(n=i.el)||void 0===n?void 0:n.querySelector(\"video\"))||void 0===s||s.pause()}catch(t){}return}let o;i.type===Ct?o={method:\"pause\",value:\"true\"}:i.type===Pt&&(o={event:\"command\",func:\"pauseVideo\"}),o&&i.iframeEl&&i.iframeEl.contentWindow&&i.iframeEl.contentWindow.postMessage(JSON.stringify(o),\"*\"),i.poller&&clearTimeout(i.poller)}onDone(t,e){t.isCurrentSlide(e)&&!t.isClosing()&&this.playVideo()}onRefresh(t,e){e.slides.forEach((t=>{t.el&&(this.resizeIframe(t),this.setAspectRatio(t))}))}onMessage(t){try{let e=JSON.parse(t.data);if(\"https://player.vimeo.com\"===t.origin){if(\"ready\"===e.event)for(let e of Array.from(document.getElementsByClassName(\"fancybox__iframe\")))e instanceof HTMLIFrameElement&&e.contentWindow===t.source&&(e.dataset.ready=\"true\")}else if(t.origin.match(/^https:\\/\\/(www.)?youtube(-nocookie)?.com$/)&&\"onReady\"===e.event){const t=document.getElementById(e.id);t&&(t.dataset.ready=\"true\")}}catch(t){}}loadAjaxContent(t){const e=this.instance.optionFor(t,\"src\")||\"\";this.instance.showLoading(t);const i=this.instance,n=new XMLHttpRequest;i.showLoading(t),n.onreadystatechange=function(){n.readyState===XMLHttpRequest.DONE&&i.state===rt.Ready&&(i.hideLoading(t),200===n.status?i.setContent(t,n.responseText):i.setError(t,404===n.status?\"{{AJAX_NOT_FOUND}}\":\"{{AJAX_FORBIDDEN}}\"))};const s=t.ajax||null;n.open(s?\"POST\":\"GET\",e+\"\"),n.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\"),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.send(s),t.xhr=n}setInlineContent(t){let e=null;if(E(t.src))e=t.src;else if(\"string\"==typeof t.src){const i=t.src.split(\"#\",2).pop();e=i?document.getElementById(i):null}if(e){if(\"clone\"===t.type||e.closest(\".fancybox__slide\")){e=e.cloneNode(!0);const i=e.dataset.animationName;i&&(e.classList.remove(i),delete e.dataset.animationName);let n=e.getAttribute(\"id\");n=n?`${n}--clone`:`clone-${this.instance.id}-${t.index}`,e.setAttribute(\"id\",n)}else if(e.parentNode){const i=document.createElement(\"div\");i.classList.add(\"fancybox-placeholder\"),e.parentNode.insertBefore(i,e),t.placeholderEl=i}this.instance.setContent(t,e)}else this.instance.setError(t,\"{{ELEMENT_NOT_FOUND}}\")}setIframeContent(t){const{src:e,el:i}=t;if(!e||\"string\"!=typeof e||!i)return;i.classList.add(\"is-loading\");const n=this.instance,s=document.createElement(\"iframe\");s.className=\"fancybox__iframe\",s.setAttribute(\"id\",`fancybox__iframe_${n.id}_${t.index}`);for(const[e,i]of Object.entries(this.optionFor(t,\"iframeAttr\")||{}))s.setAttribute(e,i);s.onerror=()=>{n.setError(t,\"{{IFRAME_ERROR}}\")},t.iframeEl=s;const o=this.optionFor(t,\"preload\");if(\"iframe\"!==t.type||!1===o)return s.setAttribute(\"src\",t.src+\"\"),n.setContent(t,s,!1),this.resizeIframe(t),void n.revealContent(t);n.showLoading(t),s.onload=()=>{if(!s.src.length)return;const e=\"true\"!==s.dataset.ready;s.dataset.ready=\"true\",this.resizeIframe(t),e?n.revealContent(t):n.hideLoading(t)},s.setAttribute(\"src\",e),n.setContent(t,s,!1)}resizeIframe(t){const{type:e,iframeEl:i}=t;if(e===Pt||e===Ct)return;const n=null==i?void 0:i.parentElement;if(!i||!n)return;let s=t.autoSize;void 0===s&&(s=this.optionFor(t,\"autoSize\"));let o=t.width||0,a=t.height||0;o&&a&&(s=!1);const r=n&&n.style;if(!1!==t.preload&&!1!==s&&r)try{const t=window.getComputedStyle(n),e=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),s=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),l=i.contentWindow;if(l){const t=l.document,i=t.getElementsByTagName(xt)[0],n=t.body;r.width=\"\",n.style.overflow=\"hidden\",o=o||i.scrollWidth+e,r.width=`${o}px`,n.style.overflow=\"\",r.flex=\"0 0 auto\",r.height=`${n.scrollHeight}px`,a=i.scrollHeight+s}}catch(t){}if(o||a){const t={flex:\"0 1 auto\",width:\"\",height:\"\"};o&&\"auto\"!==o&&(t.width=`${o}px`),a&&\"auto\"!==a&&(t.height=`${a}px`),Object.assign(r,t)}}playVideo(){const t=this.instance.getSlide();if(!t)return;const{el:e}=t;if(!e||!e.offsetParent)return;if(!this.optionFor(t,\"videoAutoplay\"))return;if(t.type===Tt)try{const t=e.querySelector(\"video\");if(t){const e=t.play();void 0!==e&&e.then((()=>{})).catch((e=>{t.muted=!0,t.play()}))}}catch(t){}if(t.type!==Pt&&t.type!==Ct)return;const i=()=>{if(t.iframeEl&&t.iframeEl.contentWindow){let e;if(\"true\"===t.iframeEl.dataset.ready)return e=t.type===Pt?{event:\"command\",func:\"playVideo\"}:{method:\"play\",value:\"true\"},e&&t.iframeEl.contentWindow.postMessage(JSON.stringify(e),\"*\"),void(t.poller=void 0);t.type===Pt&&(e={event:\"listening\",id:t.iframeEl.getAttribute(\"id\")},t.iframeEl.contentWindow.postMessage(JSON.stringify(e),\"*\"))}t.poller=setTimeout(i,250)};i()}processType(t){if(t.html)return t.type=xt,t.src=t.html,void(t.html=\"\");const e=this.instance.optionFor(t,\"src\",\"\");if(!e||\"string\"!=typeof e)return;let i=t.type,n=null;if(n=e.match(/(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(?:watch\\?(?:.*&)?v=|v\\/|u\\/|shorts\\/|embed\\/?)?(videoseries\\?list=(?:.*)|[\\w-]{11}|\\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const s=this.optionFor(t,Pt),{nocookie:o}=s,a=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(i[n]=t[n]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(t);s0?\"svembed\":\"embed\"}`,i=St):(n=e.match(/(?:maps\\.)?google\\.([a-z]{2,3}(?:\\.[a-z]{2})?)\\/(?:maps\\/search\\/)(.*)/i))&&(t.src=`https://maps.google.${n[1]}/maps?q=${n[2].replace(\"query=\",\"q=\").replace(\"api=1\",\"\")}&output=embed`,i=St),i=i||this.instance.option(\"defaultType\"),t.type=i,i===Et&&(t.thumbSrc=t.thumbSrc||t.src)}setContent(t){const e=this.instance.optionFor(t,\"src\")||\"\";if(t&&t.type&&e){switch(t.type){case xt:this.instance.setContent(t,e);break;case Tt:const i=this.option(\"videoTpl\");i&&this.instance.setContent(t,i.replace(/\\{\\{src\\}\\}/gi,e+\"\").replace(/\\{\\{format\\}\\}/gi,this.optionFor(t,\"videoFormat\")||\"\").replace(/\\{\\{poster\\}\\}/gi,t.poster||t.thumbSrc||\"\"));break;case\"inline\":case\"clone\":this.setInlineContent(t);break;case\"ajax\":this.loadAjaxContent(t);break;case\"pdf\":case St:case Pt:case Ct:t.preload=!1;case\"iframe\":this.setIframeContent(t)}this.setAspectRatio(t)}}setAspectRatio(t){const e=t.contentEl;if(!(t.el&&e&&t.type&&[Pt,Ct,Tt].includes(t.type)))return;let i,n=t.width||\"auto\",s=t.height||\"auto\";if(\"auto\"===n||\"auto\"===s){i=this.optionFor(t,\"videoRatio\");const e=(i+\"\").match(/(\\d+)\\s*\\/\\s?(\\d+)/);i=e&&e.length>2?parseFloat(e[1])/parseFloat(e[2]):parseFloat(i+\"\")}else n&&s&&(i=n/s);if(!i)return;e.style.aspectRatio=\"\",e.style.width=\"\",e.style.height=\"\",e.offsetHeight;const o=e.getBoundingClientRect(),a=o.width||1,r=o.height||1;e.style.aspectRatio=i+\"\",i{t.timer=null,t.inHover||t.onTimerEnd()}),i),t.emit(\"set\")}clear(){const t=this;t.timer&&(clearTimeout(t.timer),t.timer=null),t.removeProgressBar()}start(){const t=this;if(t.set(),t.state!==kt){if(t.option(\"pauseOnHover\")){const e=t.instance.container;e.addEventListener(\"mouseenter\",t.onMouseEnter,!1),e.addEventListener(\"mouseleave\",t.onMouseLeave,!1)}document.addEventListener(\"visibilitychange\",t.onVisibilityChange,!1),t.emit(\"start\")}}stop(){const t=this,e=t.state,i=t.instance.container;t.clear(),t.state=kt,i.removeEventListener(\"mouseenter\",t.onMouseEnter,!1),i.removeEventListener(\"mouseleave\",t.onMouseLeave,!1),document.removeEventListener(\"visibilitychange\",t.onVisibilityChange,!1),S(i,\"has-autoplay\"),e!==kt&&t.emit(\"stop\")}pause(){const t=this;t.state===zt&&(t.state=Rt,t.clear(),t.emit(Rt))}resume(){const t=this,e=t.instance;if(e.isInfinite||e.page!==e.pages.length-1)if(t.state!==zt){if(t.state===Rt&&!t.inHover){const e=new Event(\"resume\",{bubbles:!0,cancelable:!0});t.emit(\"resume\",e),e.defaultPrevented||t.set()}}else t.set();else t.stop()}toggle(){this.state===zt||this.state===Rt?this.stop():this.start()}attach(){const t=this,e=t.instance;e.on(\"ready\",t.onReady),e.on(\"Panzoom.startAnimation\",t.onChange),e.on(\"Panzoom.endAnimation\",t.onSettle),e.on(\"Panzoom.touchMove\",t.onChange)}detach(){const t=this,e=t.instance;e.off(\"ready\",t.onReady),e.off(\"Panzoom.startAnimation\",t.onChange),e.off(\"Panzoom.endAnimation\",t.onSettle),e.off(\"Panzoom.touchMove\",t.onChange),t.stop()}}Object.defineProperty(It,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:{autoStart:!0,pauseOnHover:!0,progressParentEl:null,showProgress:!0,timeout:3e3}});class Dt extends _{constructor(){super(...arguments),Object.defineProperty(this,\"ref\",{enumerable:!0,configurable:!0,writable:!0,value:null})}onPrepare(t){const e=t.carousel;if(!e)return;const i=t.container;i&&(e.options.Autoplay=u({autoStart:!1},this.option(\"Autoplay\")||{},{pauseOnHover:!1,timeout:this.option(\"timeout\"),progressParentEl:()=>this.option(\"progressParentEl\")||null,on:{start:()=>{t.emit(\"startSlideshow\")},set:e=>{var n;i.classList.add(\"has-slideshow\"),(null===(n=t.getSlide())||void 0===n?void 0:n.state)!==lt.Ready&&e.pause()},stop:()=>{i.classList.remove(\"has-slideshow\"),t.isCompact||t.endIdle(),t.emit(\"endSlideshow\")},resume:(e,i)=>{var n,s,o;!i||!i.cancelable||(null===(n=t.getSlide())||void 0===n?void 0:n.state)===lt.Ready&&(null===(o=null===(s=t.carousel)||void 0===s?void 0:s.panzoom)||void 0===o?void 0:o.isResting)||i.preventDefault()}}}),e.attachPlugins({Autoplay:It}),this.ref=e.plugins.Autoplay)}onReady(t){const e=t.carousel,i=this.ref;i&&e&&this.option(\"playOnStart\")&&(e.isInfinite||e.page{t.isCurrentSlide(e)&&i.stop()})),t.isCurrentSlide(e)&&i.resume()}onKeydown(t,e){var i;const n=this.ref;n&&e===this.option(\"key\")&&\"BUTTON\"!==(null===(i=document.activeElement)||void 0===i?void 0:i.nodeName)&&n.toggle()}attach(){const t=this,e=t.instance;e.on(\"Carousel.init\",t.onPrepare),e.on(\"Carousel.ready\",t.onReady),e.on(\"done\",t.onDone),e.on(\"keydown\",t.onKeydown)}detach(){const t=this,e=t.instance;e.off(\"Carousel.init\",t.onPrepare),e.off(\"Carousel.ready\",t.onReady),e.off(\"done\",t.onDone),e.off(\"keydown\",t.onKeydown)}}Object.defineProperty(Dt,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:{key:\" \",playOnStart:!1,progressParentEl:t=>{var e;return(null===(e=t.instance.container)||void 0===e?void 0:e.querySelector(\".fancybox__toolbar [data-fancybox-toggle-slideshow]\"))||t.instance.container},timeout:3e3}});const Ft={classes:{container:\"f-thumbs f-carousel__thumbs\",viewport:\"f-thumbs__viewport\",track:\"f-thumbs__track\",slide:\"f-thumbs__slide\",isResting:\"is-resting\",isSelected:\"is-selected\",isLoading:\"is-loading\",hasThumbs:\"has-thumbs\"},minCount:2,parentEl:null,thumbTpl:'',type:\"modern\"};var jt;!function(t){t[t.Init=0]=\"Init\",t[t.Ready=1]=\"Ready\",t[t.Hidden=2]=\"Hidden\"}(jt||(jt={}));const Bt=\"isResting\",Ht=\"thumbWidth\",Nt=\"thumbHeight\",_t=\"thumbClipWidth\";let $t=class extends _{constructor(){super(...arguments),Object.defineProperty(this,\"type\",{enumerable:!0,configurable:!0,writable:!0,value:\"modern\"}),Object.defineProperty(this,\"container\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"track\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"carousel\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"thumbWidth\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"thumbClipWidth\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"thumbHeight\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"thumbGap\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"thumbExtraGap\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"state\",{enumerable:!0,configurable:!0,writable:!0,value:jt.Init})}get isModern(){return\"modern\"===this.type}onInitSlide(t,e){const i=e.el?e.el.dataset:void 0;i&&(e.thumbSrc=i.thumbSrc||e.thumbSrc||\"\",e[_t]=parseFloat(i[_t]||\"\")||e[_t]||0,e[Nt]=parseFloat(i.thumbHeight||\"\")||e[Nt]||0),this.addSlide(e)}onInitSlides(){this.build()}onChange(){var t;if(!this.isModern)return;const e=this.container,i=this.instance,n=i.panzoom,s=this.carousel,a=s?s.panzoom:null,r=i.page;if(n&&s&&a){if(n.isDragging){S(e,this.cn(Bt));let n=(null===(t=s.pages[r])||void 0===t?void 0:t.pos)||0;n+=i.getProgress(r)*(this[_t]+this.thumbGap);let o=a.getBounds();-1*n>o.x.min&&-1*nparseFloat(getComputedStyle(t).getPropertyValue(\"--f-thumb-\"+e))||0;this.thumbGap=e(\"gap\"),this.thumbExtraGap=e(\"extra-gap\"),this[Ht]=e(\"width\")||40,this[_t]=e(\"clip-width\")||40,this[Nt]=e(\"height\")||40}build(){const t=this;if(t.state!==jt.Init)return;if(t.isDisabled())return void t.emit(\"disabled\");const e=t.instance,i=e.container,n=t.getSlides(),s=t.option(\"type\");t.type=s;const o=t.option(\"parentEl\"),a=t.cn(\"container\"),r=t.cn(\"track\");let l=null==o?void 0:o.querySelector(\".\"+a);l||(l=document.createElement(\"div\"),P(l,a),o?o.appendChild(l):i.after(l)),P(l,`is-${s}`),P(i,t.cn(\"hasThumbs\")),t.container=l,t.updateProps();let c=l.querySelector(\".\"+r);c||(c=document.createElement(\"div\"),P(c,t.cn(\"track\")),l.appendChild(c)),t.track=c;const h=u({},{track:c,infinite:!1,center:!0,fill:\"classic\"===s,dragFree:!0,slidesPerPage:1,transition:!1,preload:.25,friction:.12,Panzoom:{maxVelocity:0},Dots:!1,Navigation:!1,classes:{container:\"f-thumbs\",viewport:\"f-thumbs__viewport\",track:\"f-thumbs__track\",slide:\"f-thumbs__slide\"}},t.option(\"Carousel\")||{},{Sync:{target:e},slides:n}),d=new e.constructor(l,h);d.on(\"createSlide\",((e,i)=>{t.setProps(i.index),t.emit(\"createSlide\",i,i.el)})),d.on(\"ready\",(()=>{t.shiftModern(),t.emit(\"ready\")})),d.on(\"refresh\",(()=>{t.shiftModern()})),d.on(\"Panzoom.click\",((e,i,n)=>{t.onClick(n)})),t.carousel=d,t.state=jt.Ready}onClick(t){t.preventDefault(),t.stopPropagation();const e=this.instance,{pages:i,page:n}=e,s=t=>{if(t){const e=t.closest(\"[data-carousel-index]\");if(e)return[parseInt(e.dataset.carouselIndex||\"\",10)||0,e]}return[-1,void 0]},o=(t,e)=>{const i=document.elementFromPoint(t,e);return i?s(i):[-1,void 0]};let[a,r]=s(t.target);if(a>-1)return;const l=this[_t],c=t.clientX,h=t.clientY;let[d,u]=o(c-l,h),[p,f]=o(c+l,h);u&&f?(a=Math.abs(c-u.getBoundingClientRect().right)-1&&i[a]&&e.slideTo(a)}getShift(t){var e;const i=this,{instance:n}=i,s=i.carousel;if(!n||!s)return 0;const o=i[Ht],a=i[_t],r=i.thumbGap,l=i.thumbExtraGap;if(!(null===(e=s.slides[t])||void 0===e?void 0:e.el))return 0;const c=.5*(o-a),h=n.pages.length-1;let d=n.getProgress(0),u=n.getProgress(h),p=n.getProgress(t,!1,!0),f=0,g=c+l+r;const m=d<0&&d>-1,v=u>0&&u<1;return 0===t?(f=g*Math.abs(d),v&&1===d&&(f-=g*Math.abs(u))):t===h?(f=g*Math.abs(u)*-1,m&&-1===u&&(f+=g*Math.abs(d))):m||v?(f=-1*g,f+=g*Math.abs(d),f+=g*(1-Math.abs(u))):f=g*p,f}setProps(e){var i;const n=this;if(!n.isModern)return;const{instance:s}=n,o=n.carousel;if(s&&o){const a=null===(i=o.slides[e])||void 0===i?void 0:i.el;if(a&&a.childNodes.length){let i=t(1-Math.abs(s.getProgress(e))),o=t(n.getShift(e));a.style.setProperty(\"--progress\",i?i+\"\":\"\"),a.style.setProperty(\"--shift\",o+\"\")}}}shiftModern(){const t=this;if(!t.isModern)return;const{instance:e,track:i}=t,n=e.panzoom,s=t.carousel;if(!(e&&i&&n&&s))return;if(n.state===m.Init||n.state===m.Destroy)return;for(const i of e.slides)t.setProps(i.index);let o=(t[_t]+t.thumbGap)*(s.slides.length||0);i.style.setProperty(\"--width\",o+\"\")}cleanup(){const t=this;t.carousel&&t.carousel.destroy(),t.carousel=null,t.container&&t.container.remove(),t.container=null,t.track&&t.track.remove(),t.track=null,t.state=jt.Init,S(t.instance.container,t.cn(\"hasThumbs\"))}attach(){const t=this,e=t.instance;e.on(\"initSlide\",t.onInitSlide),e.state===B.Init?e.on(\"initSlides\",t.onInitSlides):t.onInitSlides(),e.on([\"change\",\"Panzoom.afterTransform\"],t.onChange),e.on(\"Panzoom.refresh\",t.onRefresh)}detach(){const t=this,e=t.instance;e.off(\"initSlide\",t.onInitSlide),e.off(\"initSlides\",t.onInitSlides),e.off([\"change\",\"Panzoom.afterTransform\"],t.onChange),e.off(\"Panzoom.refresh\",t.onRefresh),t.cleanup()}};Object.defineProperty($t,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:Ft});const Wt=Object.assign(Object.assign({},Ft),{key:\"t\",showOnStart:!0,parentEl:null}),Xt=\"is-masked\",qt=\"aria-hidden\";class Yt extends _{constructor(){super(...arguments),Object.defineProperty(this,\"ref\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"hidden\",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isEnabled(){const t=this.ref;return t&&!t.isDisabled()}get isHidden(){return this.hidden}onClick(t,e){e.stopPropagation()}onCreateSlide(t,e){var i,n,s;const o=(null===(s=null===(n=null===(i=this.instance)||void 0===i?void 0:i.carousel)||void 0===n?void 0:n.slides[e.index])||void 0===s?void 0:s.type)||\"\",a=e.el;if(a&&o){let t=`for-${o}`;[\"video\",\"youtube\",\"vimeo\",\"html5video\"].includes(o)&&(t+=\" for-video\"),P(a,t)}}onInit(){var t;const e=this,i=e.instance,n=i.carousel;if(e.ref||!n)return;const s=e.option(\"parentEl\")||i.footer||i.container;if(!s)return;const o=u({},e.options,{parentEl:s,classes:{container:\"f-thumbs fancybox__thumbs\"},Carousel:{Sync:{friction:i.option(\"Carousel.friction\")||0}},on:{ready:t=>{const i=t.container;i&&this.hidden&&(e.refresh(),i.style.transition=\"none\",e.hide(),i.offsetHeight,queueMicrotask((()=>{i.style.transition=\"\",e.show()})))}}});o.Carousel=o.Carousel||{},o.Carousel.on=u((null===(t=e.options.Carousel)||void 0===t?void 0:t.on)||{},{click:this.onClick,createSlide:this.onCreateSlide}),n.options.Thumbs=o,n.attachPlugins({Thumbs:$t}),e.ref=n.plugins.Thumbs,e.option(\"showOnStart\")||(e.ref.state=jt.Hidden,e.hidden=!0)}onResize(){var t;const e=null===(t=this.ref)||void 0===t?void 0:t.container;e&&(e.style.maxHeight=\"\")}onKeydown(t,e){const i=this.option(\"key\");i&&i===e&&this.toggle()}toggle(){const t=this.ref;if(t&&!t.isDisabled())return t.state===jt.Hidden?(t.state=jt.Init,void t.build()):void(this.hidden?this.show():this.hide())}show(){const t=this.ref;if(!t||t.isDisabled())return;const e=t.container;e&&(this.refresh(),e.offsetHeight,e.removeAttribute(qt),e.classList.remove(Xt),this.hidden=!1)}hide(){const t=this.ref,e=t&&t.container;e&&(this.refresh(),e.offsetHeight,e.classList.add(Xt),e.setAttribute(qt,\"true\")),this.hidden=!0}refresh(){const t=this.ref;if(!t||!t.state)return;const e=t.container,i=(null==e?void 0:e.firstChild)||null;e&&i&&i.childNodes.length&&(e.style.maxHeight=`${i.getBoundingClientRect().height}px`)}attach(){const t=this,e=t.instance;e.state===rt.Init?e.on(\"Carousel.init\",t.onInit):t.onInit(),e.on(\"resize\",t.onResize),e.on(\"keydown\",t.onKeydown)}detach(){var t;const e=this,i=e.instance;i.off(\"Carousel.init\",e.onInit),i.off(\"resize\",e.onResize),i.off(\"keydown\",e.onKeydown),null===(t=i.carousel)||void 0===t||t.detachPlugins([\"Thumbs\"]),e.ref=null}}Object.defineProperty(Yt,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:Wt});const Vt={panLeft:{icon:'',change:{panX:-100}},panRight:{icon:'',change:{panX:100}},panUp:{icon:'',change:{panY:-100}},panDown:{icon:'',change:{panY:100}},zoomIn:{icon:'',action:\"zoomIn\"},zoomOut:{icon:'',action:\"zoomOut\"},toggle1to1:{icon:'',action:\"toggleZoom\"},toggleZoom:{icon:'',action:\"toggleZoom\"},iterateZoom:{icon:'',action:\"iterateZoom\"},rotateCCW:{icon:'',action:\"rotateCCW\"},rotateCW:{icon:'',action:\"rotateCW\"},flipX:{icon:'',action:\"flipX\"},flipY:{icon:'',action:\"flipY\"},fitX:{icon:'',action:\"fitX\"},fitY:{icon:'',action:\"fitY\"},reset:{icon:'',action:\"reset\"},toggleFS:{icon:'',action:\"toggleFS\"}};var Zt;!function(t){t[t.Init=0]=\"Init\",t[t.Ready=1]=\"Ready\",t[t.Disabled=2]=\"Disabled\"}(Zt||(Zt={}));const Ut={absolute:\"auto\",display:{left:[\"infobar\"],middle:[],right:[\"iterateZoom\",\"slideshow\",\"fullscreen\",\"thumbs\",\"close\"]},enabled:\"auto\",items:{infobar:{tpl:'
/
'},download:{tpl:'
'},prev:{tpl:''},next:{tpl:''},slideshow:{tpl:''},fullscreen:{tpl:''},thumbs:{tpl:''},close:{tpl:''}},parentEl:null},Gt={tabindex:\"-1\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",xmlns:\"http://www.w3.org/2000/svg\"},Kt=\"has-toolbar\",Jt=\"fancybox__toolbar\";class Qt extends _{constructor(){super(...arguments),Object.defineProperty(this,\"state\",{enumerable:!0,configurable:!0,writable:!0,value:Zt.Init}),Object.defineProperty(this,\"container\",{enumerable:!0,configurable:!0,writable:!0,value:null})}onReady(t){var e;if(!t.carousel)return;let i=this.option(\"display\"),n=this.option(\"absolute\"),s=this.option(\"enabled\");if(\"auto\"===s){const t=this.instance.carousel;let e=0;if(t)for(const i of t.slides)(i.panzoom||\"image\"===i.type)&&e++;e||(s=!1)}s||(i=void 0);let o=0;const a={left:[],middle:[],right:[]};if(i)for(const t of[\"left\",\"middle\",\"right\"])for(const n of i[t]){const i=this.createEl(n);i&&(null===(e=a[t])||void 0===e||e.push(i),o++)}let r=null;if(o&&(r=this.createContainer()),r){for(const[t,e]of Object.entries(a)){const i=document.createElement(\"div\");P(i,Jt+\"__column is-\"+t);for(const t of e)i.appendChild(t);\"auto\"!==n||\"middle\"!==t||e.length||(n=!0),r.appendChild(i)}!0===n&&P(r,\"is-absolute\"),this.state=Zt.Ready,this.onRefresh()}else this.state=Zt.Disabled}onClick(t){var e,i;const n=this.instance,s=n.getSlide(),o=null==s?void 0:s.panzoom,a=t.target,r=a&&E(a)?a.dataset:null;if(!r)return;if(void 0!==r.fancyboxToggleThumbs)return t.preventDefault(),t.stopPropagation(),void(null===(e=n.plugins.Thumbs)||void 0===e||e.toggle());if(void 0!==r.fancyboxToggleFullscreen)return t.preventDefault(),t.stopPropagation(),void this.instance.toggleFullscreen();if(void 0!==r.fancyboxToggleSlideshow){t.preventDefault(),t.stopPropagation();const e=null===(i=n.carousel)||void 0===i?void 0:i.plugins.Autoplay;let s=e.isActive;return o&&\"mousemove\"===o.panMode&&!s&&o.reset(),void(s?e.stop():e.start())}const l=r.panzoomAction,c=r.panzoomChange;if((c||l)&&(t.preventDefault(),t.stopPropagation()),c){let t={};try{t=JSON.parse(c)}catch(t){}o&&o.applyChange(t)}else l&&o&&o[l]&&o[l]()}onChange(){this.onRefresh()}onRefresh(){if(this.instance.isClosing())return;const t=this.container;if(!t)return;const e=this.instance.getSlide();if(!e||e.state!==lt.Ready)return;const i=e&&!e.error&&e.panzoom;for(const e of t.querySelectorAll(\"[data-panzoom-action]\"))i?(e.removeAttribute(\"disabled\"),e.removeAttribute(\"tabindex\")):(e.setAttribute(\"disabled\",\"\"),e.setAttribute(\"tabindex\",\"-1\"));let n=i&&i.canZoomIn(),s=i&&i.canZoomOut();for(const e of t.querySelectorAll('[data-panzoom-action=\"zoomIn\"]'))n?(e.removeAttribute(\"disabled\"),e.removeAttribute(\"tabindex\")):(e.setAttribute(\"disabled\",\"\"),e.setAttribute(\"tabindex\",\"-1\"));for(const e of t.querySelectorAll('[data-panzoom-action=\"zoomOut\"]'))s?(e.removeAttribute(\"disabled\"),e.removeAttribute(\"tabindex\")):(e.setAttribute(\"disabled\",\"\"),e.setAttribute(\"tabindex\",\"-1\"));for(const e of t.querySelectorAll('[data-panzoom-action=\"toggleZoom\"],[data-panzoom-action=\"iterateZoom\"]')){s||n?(e.removeAttribute(\"disabled\"),e.removeAttribute(\"tabindex\")):(e.setAttribute(\"disabled\",\"\"),e.setAttribute(\"tabindex\",\"-1\"));const t=e.querySelector(\"g\");t&&(t.style.display=n?\"\":\"none\")}}onDone(t,e){var i;null===(i=e.panzoom)||void 0===i||i.on(\"afterTransform\",(()=>{this.instance.isCurrentSlide(e)&&this.onRefresh()})),this.instance.isCurrentSlide(e)&&this.onRefresh()}createContainer(){const t=this.instance.container;if(!t)return null;const e=this.option(\"parentEl\")||t;let i=e.querySelector(\".\"+Jt);return i||(i=document.createElement(\"div\"),P(i,Jt),e.prepend(i)),i.addEventListener(\"click\",this.onClick,{passive:!1,capture:!0}),t&&P(t,Kt),this.container=i,i}createEl(t){const e=this.instance,i=e.carousel;if(!i)return null;if(\"toggleFS\"===t)return null;if(\"fullscreen\"===t&&!ot())return null;let s=null;const o=i.slides.length||0;let a=0,r=0;for(const t of i.slides)(t.panzoom||\"image\"===t.type)&&a++,(\"image\"===t.type||t.downloadSrc)&&r++;if(o<2&&[\"infobar\",\"prev\",\"next\"].includes(t))return s;if(void 0!==Vt[t]&&!a)return null;if(\"download\"===t&&!r)return null;if(\"thumbs\"===t){const t=e.plugins.Thumbs;if(!t||!t.isEnabled)return null}if(\"slideshow\"===t){if(!i.plugins.Autoplay||o<2)return null}if(void 0!==Vt[t]){const e=Vt[t];s=document.createElement(\"button\"),s.setAttribute(\"title\",this.instance.localize(`{{${t.toUpperCase()}}}`)),P(s,\"f-button\"),e.action&&(s.dataset.panzoomAction=e.action),e.change&&(s.dataset.panzoomChange=JSON.stringify(e.change)),s.appendChild(n(this.instance.localize(e.icon)))}else{const e=(this.option(\"items\")||[])[t];e&&(s=n(this.instance.localize(e.tpl)),\"function\"==typeof e.click&&s.addEventListener(\"click\",(t=>{t.preventDefault(),t.stopPropagation(),\"function\"==typeof e.click&&e.click.call(this,this,t)})))}const l=null==s?void 0:s.querySelector(\"svg\");if(l)for(const[t,e]of Object.entries(Gt))l.getAttribute(t)||l.setAttribute(t,String(e));return s}removeContainer(){const t=this.container;t&&t.remove(),this.container=null,this.state=Zt.Disabled;const e=this.instance.container;e&&S(e,Kt)}attach(){const t=this,e=t.instance;e.on(\"Carousel.initSlides\",t.onReady),e.on(\"done\",t.onDone),e.on([\"reveal\",\"Carousel.change\"],t.onChange),t.onReady(t.instance)}detach(){const t=this,e=t.instance;e.off(\"Carousel.initSlides\",t.onReady),e.off(\"done\",t.onDone),e.off([\"reveal\",\"Carousel.change\"],t.onChange),t.removeContainer()}}Object.defineProperty(Qt,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:Ut});const te={Hash:class extends _{onReady(){ht=!1}onChange(t){ut&&clearTimeout(ut);const{hash:e}=pt(),{hash:i}=ft(),n=t.isOpeningSlide(t.getSlide());n&&(ct=i===e?\"\":i),e&&e!==i&&(ut=setTimeout((()=>{try{if(t.state===rt.Ready){let t=\"replaceState\";n&&!dt&&(t=\"pushState\",dt=!0),window.history[t]({},document.title,window.location.pathname+window.location.search+e)}}catch(t){}}),300))}onClose(t){if(ut&&clearTimeout(ut),!ht&&dt)return dt=!1,ht=!1,void window.history.back();if(!ht)try{window.history.replaceState({},document.title,window.location.pathname+window.location.search+(ct||\"\"))}catch(t){}}attach(){const t=this.instance;t.on(\"ready\",this.onReady),t.on([\"Carousel.ready\",\"Carousel.change\"],this.onChange),t.on(\"close\",this.onClose)}detach(){const t=this.instance;t.off(\"ready\",this.onReady),t.off([\"Carousel.ready\",\"Carousel.change\"],this.onChange),t.off(\"close\",this.onClose)}static parseURL(){return ft()}static startFromUrl(){gt()}static destroy(){window.removeEventListener(\"hashchange\",vt,!1)}},Html:Lt,Images:wt,Slideshow:Dt,Thumbs:Yt,Toolbar:Qt},ee=\"with-fancybox\",ie=\"hide-scrollbar\",ne=\"--fancybox-scrollbar-compensate\",se=\"--fancybox-body-margin\",oe=\"aria-hidden\",ae=\"is-using-tab\",re=\"is-animated\",le=\"is-compact\",ce=\"is-loading\",he=\"is-opening\",de=\"has-caption\",ue=\"disabled\",pe=\"tabindex\",fe=\"download\",ge=\"href\",me=\"src\",ve=t=>\"string\"==typeof t,be=function(){var t=window.getSelection();return!!t&&\"Range\"===t.type};let ye,we=null,xe=null,Ee=0,Se=0,Pe=0,Ce=0;const Te=new Map;let Me=0;class Oe extends g{get isIdle(){return this.idle}get isCompact(){return this.option(\"compact\")}constructor(t=[],e={},i={}){super(e),Object.defineProperty(this,\"userSlides\",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,\"userPlugins\",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,\"idle\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"idleTimer\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"clickTimer\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"pwt\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"ignoreFocusChange\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"startedFs\",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,\"state\",{enumerable:!0,configurable:!0,writable:!0,value:rt.Init}),Object.defineProperty(this,\"id\",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,\"container\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"footer\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"carousel\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"lastFocus\",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,\"prevMouseMoveEvent\",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ye||(ye=ot()),this.id=e.id||++Me,Te.set(this.id,this),this.userSlides=t,this.userPlugins=i,queueMicrotask((()=>{this.init()}))}init(){if(this.state===rt.Destroy)return;this.state=rt.Init,this.attachPlugins(Object.assign(Object.assign({},Oe.Plugins),this.userPlugins)),this.emit(\"init\"),this.emit(\"attachPlugins\"),!0===this.option(\"hideScrollbar\")&&(()=>{if(!et)return;const t=document,e=t.body,i=t.documentElement;if(e.classList.contains(ie))return;let n=window.innerWidth-i.getBoundingClientRect().width;const s=parseFloat(window.getComputedStyle(e).marginRight);n<0&&(n=0),i.style.setProperty(ne,`${n}px`),s&&e.style.setProperty(se,`${s}px`),e.classList.add(ie)})(),this.initLayout(),this.scale();const t=()=>{this.initCarousel(this.userSlides),this.state=rt.Ready,this.attachEvents(),this.emit(\"ready\"),setTimeout((()=>{this.container&&this.container.setAttribute(oe,\"false\")}),16)};this.option(\"Fullscreen.autoStart\")&&ye&&!ye.isFullscreen()?ye.request().then((()=>{this.startedFs=!0,t()})).catch((()=>t())):t()}initLayout(){var t,e;const i=this.option(\"parentEl\")||document.body,s=n(this.localize(this.option(\"tpl.main\")||\"\"));if(s){if(s.setAttribute(\"id\",`fancybox-${this.id}`),s.setAttribute(\"aria-label\",this.localize(\"{{MODAL}}\")),s.classList.toggle(le,this.isCompact),P(s,this.option(\"mainClass\")||\"\"),P(s,he),this.container=s,this.footer=s.querySelector(\".fancybox__footer\"),i.appendChild(s),P(document.documentElement,ee),we&&xe||(we=document.createElement(\"span\"),P(we,\"fancybox-focus-guard\"),we.setAttribute(pe,\"0\"),we.setAttribute(oe,\"true\"),we.setAttribute(\"aria-label\",\"Focus guard\"),xe=we.cloneNode(),null===(t=s.parentElement)||void 0===t||t.insertBefore(we,s),null===(e=s.parentElement)||void 0===e||e.append(xe)),s.addEventListener(\"mousedown\",(t=>{Ee=t.pageX,Se=t.pageY,S(s,ae)})),this.option(\"closeExisting\"))for(const t of Te.values())t.id!==this.id&&t.close();else this.option(\"animated\")&&(P(s,re),setTimeout((()=>{this.isClosing()||S(s,re)}),350));this.emit(\"initLayout\")}}initCarousel(t){const i=this.container;if(!i)return;const n=i.querySelector(\".fancybox__carousel\");if(!n)return;const s=this.carousel=new Q(n,u({},{slides:t,transition:\"fade\",Panzoom:{lockAxis:this.option(\"dragToClose\")?\"xy\":\"x\",infinite:!!this.option(\"dragToClose\")&&\"y\"},Dots:!1,Navigation:{classes:{container:\"fancybox__nav\",button:\"f-button\",isNext:\"is-next\",isPrev:\"is-prev\"}},initialPage:this.option(\"startIndex\"),l10n:this.option(\"l10n\")},this.option(\"Carousel\")||{}));s.on(\"*\",((t,e,...i)=>{this.emit(`Carousel.${e}`,t,...i)})),s.on([\"ready\",\"change\"],(()=>{this.manageCaption()})),this.on(\"Carousel.removeSlide\",((t,e,i)=>{this.clearContent(i),i.state=void 0})),s.on(\"Panzoom.touchStart\",(()=>{var t,e;this.isCompact||this.endIdle(),(null===(t=document.activeElement)||void 0===t?void 0:t.closest(\".f-thumbs\"))&&(null===(e=this.container)||void 0===e||e.focus())})),s.on(\"settle\",(()=>{this.idleTimer||this.isCompact||!this.option(\"idle\")||this.setIdle(),this.option(\"autoFocus\")&&!this.isClosing&&this.checkFocus()})),this.option(\"dragToClose\")&&(s.on(\"Panzoom.afterTransform\",((t,i)=>{const n=this.getSlide();if(n&&e(n.el))return;const s=this.container;if(s){const t=Math.abs(i.current.f),e=t<1?\"\":Math.max(.5,Math.min(1,1-t/i.contentRect.fitHeight*1.5));s.style.setProperty(\"--fancybox-ts\",e?\"0s\":\"\"),s.style.setProperty(\"--fancybox-opacity\",e+\"\")}})),s.on(\"Panzoom.touchEnd\",((t,i,n)=>{var s;const o=this.getSlide();if(o&&e(o.el))return;if(i.isMobile&&document.activeElement&&-1!==[\"TEXTAREA\",\"INPUT\"].indexOf(null===(s=document.activeElement)||void 0===s?void 0:s.nodeName))return;const a=Math.abs(i.dragOffset.y);\"y\"===i.lockedAxis&&(a>=200||a>=50&&i.dragOffset.time<300)&&(n&&n.cancelable&&n.preventDefault(),this.close(n,\"f-throwOut\"+(i.current.f<0?\"Up\":\"Down\")))}))),s.on(\"change\",(t=>{var e;let i=null===(e=this.getSlide())||void 0===e?void 0:e.triggerEl;if(i){const e=new CustomEvent(\"slideTo\",{bubbles:!0,cancelable:!0,detail:t.page});i.dispatchEvent(e)}})),s.on([\"refresh\",\"change\"],(t=>{const e=this.container;if(!e)return;for(const i of e.querySelectorAll(\"[data-fancybox-current-index]\"))i.innerHTML=t.page+1;for(const i of e.querySelectorAll(\"[data-fancybox-count]\"))i.innerHTML=t.pages.length;if(!t.isInfinite){for(const i of e.querySelectorAll(\"[data-fancybox-next]\"))t.page0?(i.removeAttribute(ue),i.removeAttribute(pe)):(i.setAttribute(ue,\"\"),i.setAttribute(pe,\"-1\"))}const i=this.getSlide();if(!i)return;let n=i.downloadSrc||\"\";n||\"image\"!==i.type||i.error||!ve(i[me])||(n=i[me]);for(const t of e.querySelectorAll(\"[data-fancybox-download]\")){const e=i.downloadFilename;n?(t.removeAttribute(ue),t.removeAttribute(pe),t.setAttribute(ge,n),t.setAttribute(fe,e||n),t.setAttribute(\"target\",\"_blank\")):(t.setAttribute(ue,\"\"),t.setAttribute(pe,\"-1\"),t.removeAttribute(ge),t.removeAttribute(fe))}})),this.emit(\"initCarousel\")}attachEvents(){const t=this,e=t.container;if(!e)return;e.addEventListener(\"click\",t.onClick,{passive:!1,capture:!1}),e.addEventListener(\"wheel\",t.onWheel,{passive:!1,capture:!1}),document.addEventListener(\"keydown\",t.onKeydown,{passive:!1,capture:!0}),document.addEventListener(\"visibilitychange\",t.onVisibilityChange,!1),document.addEventListener(\"mousemove\",t.onMousemove),t.option(\"trapFocus\")&&document.addEventListener(\"focus\",t.onFocus,!0),window.addEventListener(\"resize\",t.onResize);const i=window.visualViewport;i&&(i.addEventListener(\"scroll\",t.onResize),i.addEventListener(\"resize\",t.onResize))}detachEvents(){const t=this,e=t.container;if(!e)return;document.removeEventListener(\"keydown\",t.onKeydown,{passive:!1,capture:!0}),e.removeEventListener(\"wheel\",t.onWheel,{passive:!1,capture:!1}),e.removeEventListener(\"click\",t.onClick,{passive:!1,capture:!1}),document.removeEventListener(\"mousemove\",t.onMousemove),window.removeEventListener(\"resize\",t.onResize);const i=window.visualViewport;i&&(i.removeEventListener(\"resize\",t.onResize),i.removeEventListener(\"scroll\",t.onResize)),document.removeEventListener(\"visibilitychange\",t.onVisibilityChange,!1),document.removeEventListener(\"focus\",t.onFocus,!0)}scale(){const t=this.container;if(!t)return;const e=window.visualViewport,i=Math.max(1,(null==e?void 0:e.scale)||1);let n=\"\",s=\"\",o=\"\";if(e&&i>1){let t=`${e.offsetLeft}px`,a=`${e.offsetTop}px`;n=e.width*i+\"px\",s=e.height*i+\"px\",o=`translate3d(${t}, ${a}, 0) scale(${1/i})`}t.style.transform=o,t.style.width=n,t.style.height=s}onClick(t){var e;const{container:i,isCompact:n}=this;if(!i||this.isClosing())return;!n&&this.option(\"idle\")&&this.resetIdle();const s=t.composedPath()[0];if(s.closest(\".fancybox-spinner\")||s.closest(\"[data-fancybox-close]\"))return t.preventDefault(),void this.close(t);if(s.closest(\"[data-fancybox-prev]\"))return t.preventDefault(),void this.prev();if(s.closest(\"[data-fancybox-next]\"))return t.preventDefault(),void this.next();if(\"click\"===t.type&&0===t.detail)return;if(Math.abs(t.pageX-Ee)>30||Math.abs(t.pageY-Se)>30)return;const o=document.activeElement;if(be()&&o&&i.contains(o))return;if(n&&\"image\"===(null===(e=this.getSlide())||void 0===e?void 0:e.type))return void(this.clickTimer?(clearTimeout(this.clickTimer),this.clickTimer=null):this.clickTimer=setTimeout((()=>{this.toggleIdle(),this.clickTimer=null}),350));if(this.emit(\"click\",t),t.defaultPrevented)return;let a=!1;if(s.closest(\".fancybox__content\")){if(o){if(o.closest(\"[contenteditable]\"))return;s.matches(nt)||o.blur()}if(be())return;a=this.option(\"contentClick\")}else s.closest(\".fancybox__carousel\")&&!s.matches(nt)&&(a=this.option(\"backdropClick\"));\"close\"===a?(t.preventDefault(),this.close(t)):\"next\"===a?(t.preventDefault(),this.next()):\"prev\"===a&&(t.preventDefault(),this.prev())}onWheel(t){const e=t.target;let n=this.option(\"wheel\",t);e.closest(\".fancybox__thumbs\")&&(n=\"slide\");const s=\"slide\"===n,o=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t})),a=Math.max(-1,Math.min(1,o)),r=Date.now();this.pwt&&r-this.pwt<300?s&&t.preventDefault():(this.pwt=r,this.emit(\"wheel\",t,a),t.defaultPrevented||(\"close\"===n?(t.preventDefault(),this.close(t)):\"slide\"===n&&(i(e)||(t.preventDefault(),this[a>0?\"prev\":\"next\"]()))))}onScroll(){window.scrollTo(Pe,Ce)}onKeydown(t){if(!this.isTopmost())return;this.isCompact||!this.option(\"idle\")||this.isClosing()||this.resetIdle();const e=t.key,i=this.option(\"keyboard\");if(!i)return;const n=t.composedPath()[0],s=document.activeElement&&document.activeElement.classList,o=s&&s.contains(\"f-button\")||n.dataset.carouselPage||n.dataset.carouselIndex;if(\"Escape\"!==e&&!o&&E(n)){if(n.isContentEditable||-1!==[\"TEXTAREA\",\"OPTION\",\"INPUT\",\"SELECT\",\"VIDEO\"].indexOf(n.nodeName))return}if(\"Tab\"===t.key?P(this.container,ae):S(this.container,ae),t.ctrlKey||t.altKey||t.shiftKey)return;this.emit(\"keydown\",e,t);const a=i[e];a&&\"function\"==typeof this[a]&&(t.preventDefault(),this[a]())}onResize(){const t=this.container;if(!t)return;const e=this.isCompact;t.classList.toggle(le,e),this.manageCaption(this.getSlide()),this.isCompact?this.clearIdle():this.endIdle(),this.scale(),this.emit(\"resize\")}onFocus(t){this.isTopmost()&&this.checkFocus(t)}onMousemove(t){this.prevMouseMoveEvent=t,!this.isCompact&&this.option(\"idle\")&&this.resetIdle()}onVisibilityChange(){\"visible\"===document.visibilityState?this.checkFocus():this.endIdle()}manageCloseBtn(t){const e=this.optionFor(t,\"closeButton\")||!1;if(\"auto\"===e){const t=this.plugins.Toolbar;if(t&&t.state===Zt.Ready)return}if(!e)return;if(!t.contentEl||t.closeBtnEl)return;const i=this.option(\"tpl.closeButton\");if(i){const e=n(this.localize(i));t.closeBtnEl=t.contentEl.appendChild(e),t.el&&P(t.el,\"has-close-btn\")}}manageCaption(t=void 0){var e,i;const n=\"fancybox__caption\",s=this.container;if(!s)return;S(s,de);const o=this.isCompact||this.option(\"commonCaption\"),a=!o;if(this.caption&&this.stop(this.caption),a&&this.caption&&(this.caption.remove(),this.caption=null),o&&!this.caption)for(const t of(null===(e=this.carousel)||void 0===e?void 0:e.slides)||[])t.captionEl&&(t.captionEl.remove(),t.captionEl=void 0,S(t.el,de),null===(i=t.el)||void 0===i||i.removeAttribute(\"aria-labelledby\"));if(t||(t=this.getSlide()),!t||o&&!this.isCurrentSlide(t))return;const r=t.el;let l=this.optionFor(t,\"caption\",\"\");if(!l)return void(o&&this.caption&&this.animate(this.caption,\"f-fadeOut\",(()=>{this.caption&&(this.caption.innerHTML=\"\")})));let c=null;if(a){if(c=t.captionEl||null,r&&!c){const e=n+`_${this.id}_${t.index}`;c=document.createElement(\"div\"),P(c,n),c.setAttribute(\"id\",e),t.captionEl=r.appendChild(c),P(r,de),r.setAttribute(\"aria-labelledby\",e)}}else{if(c=this.caption,c||(c=s.querySelector(\".\"+n)),!c){c=document.createElement(\"div\"),c.dataset.fancyboxCaption=\"\",P(c,n);(this.footer||s).prepend(c)}P(s,de),this.caption=c}c&&(c.innerHTML=\"\",ve(l)||\"number\"==typeof l?c.innerHTML=l+\"\":l instanceof HTMLElement&&c.appendChild(l))}checkFocus(t){this.focus(t)}focus(t){var e;if(this.ignoreFocusChange)return;const i=document.activeElement||null,n=(null==t?void 0:t.target)||null,s=this.container,o=null===(e=this.carousel)||void 0===e?void 0:e.viewport;if(!s||!o)return;if(!t&&i&&s.contains(i))return;const a=this.getSlide(),r=a&&a.state===lt.Ready?a.el:null;if(!r||r.contains(i)||s===i)return;t&&t.cancelable&&t.preventDefault(),this.ignoreFocusChange=!0;const l=Array.from(s.querySelectorAll(nt));let c=[],h=null;for(let t of l){const e=!t.offsetParent||!!t.closest('[aria-hidden=\"true\"]'),i=r&&r.contains(t),n=!o.contains(t);if(t===s||(i||n)&&!e){c.push(t);const e=t.dataset.origTabindex;void 0!==e&&e&&(t.tabIndex=parseFloat(e)),t.removeAttribute(\"data-orig-tabindex\"),!t.hasAttribute(\"autoFocus\")&&h||(h=t)}else{const e=void 0===t.dataset.origTabindex?t.getAttribute(\"tabindex\")||\"\":t.dataset.origTabindex;e&&(t.dataset.origTabindex=e),t.tabIndex=-1}}let d=null;t?(!n||c.indexOf(n)<0)&&(d=h||s,c.length&&(i===xe?d=c[0]:this.lastFocus!==s&&i!==we||(d=c[c.length-1]))):d=a&&\"image\"===a.type?s:h||s,d&&st(d),this.lastFocus=document.activeElement,this.ignoreFocusChange=!1}next(){const t=this.carousel;t&&t.pages.length>1&&t.slideNext()}prev(){const t=this.carousel;t&&t.pages.length>1&&t.slidePrev()}jumpTo(...t){this.carousel&&this.carousel.slideTo(...t)}isTopmost(){var t;return(null===(t=Oe.getInstance())||void 0===t?void 0:t.id)==this.id}animate(t=null,e=\"\",i){if(!t||!e)return void(i&&i());this.stop(t);const n=s=>{s.target===t&&t.dataset.animationName&&(t.removeEventListener(\"animationend\",n),delete t.dataset.animationName,i&&i(),S(t,e))};t.dataset.animationName=e,t.addEventListener(\"animationend\",n),P(t,e)}stop(t){t&&t.dispatchEvent(new CustomEvent(\"animationend\",{bubbles:!1,cancelable:!0,currentTarget:t}))}setContent(t,e=\"\",i=!0){if(this.isClosing())return;const s=t.el;if(!s)return;let o=null;if(E(e)?o=e:(o=n(e+\"\"),E(o)||(o=document.createElement(\"div\"),o.innerHTML=e+\"\")),[\"img\",\"picture\",\"iframe\",\"video\",\"audio\"].includes(o.nodeName.toLowerCase())){const t=document.createElement(\"div\");t.appendChild(o),o=t}E(o)&&t.filter&&!t.error&&(o=o.querySelector(t.filter)),o&&E(o)?(P(o,\"fancybox__content\"),t.id&&o.setAttribute(\"id\",t.id),s.classList.add(`has-${t.error?\"error\":t.type||\"unknown\"}`),s.prepend(o),\"none\"===o.style.display&&(o.style.display=\"\"),\"none\"===getComputedStyle(o).getPropertyValue(\"display\")&&(o.style.display=t.display||this.option(\"defaultDisplay\")||\"flex\"),t.contentEl=o,i&&this.revealContent(t),this.manageCloseBtn(t),this.manageCaption(t)):this.setError(t,\"{{ELEMENT_NOT_FOUND}}\")}revealContent(t,e){const i=t.el,n=t.contentEl;i&&n&&(this.emit(\"reveal\",t),this.hideLoading(t),t.state=lt.Opening,(e=this.isOpeningSlide(t)?void 0===e?this.optionFor(t,\"showClass\"):e:\"f-fadeIn\")?this.animate(n,e,(()=>{this.done(t)})):this.done(t))}done(t){this.isClosing()||(t.state=lt.Ready,this.emit(\"done\",t),P(t.el,\"is-done\"),this.isCurrentSlide(t)&&this.option(\"autoFocus\")&&queueMicrotask((()=>{var e;null===(e=t.panzoom)||void 0===e||e.updateControls(),this.option(\"autoFocus\")&&this.focus()})),this.isOpeningSlide(t)&&(S(this.container,he),!this.isCompact&&this.option(\"idle\")&&this.setIdle()))}isCurrentSlide(t){const e=this.getSlide();return!(!t||!e)&&e.index===t.index}isOpeningSlide(t){var e,i;return null===(null===(e=this.carousel)||void 0===e?void 0:e.prevPage)&&t&&t.index===(null===(i=this.getSlide())||void 0===i?void 0:i.index)}showLoading(t){t.state=lt.Loading;const e=t.el;if(!e)return;P(e,ce),this.emit(\"loading\",t),t.spinnerEl||setTimeout((()=>{if(!this.isClosing()&&!t.spinnerEl&&t.state===lt.Loading){let i=n(x);P(i,\"fancybox-spinner\"),t.spinnerEl=i,e.prepend(i),this.animate(i,\"f-fadeIn\")}}),250)}hideLoading(t){const e=t.el;if(!e)return;const i=t.spinnerEl;this.isClosing()?null==i||i.remove():(S(e,ce),i&&this.animate(i,\"f-fadeOut\",(()=>{i.remove()})),t.state===lt.Loading&&(this.emit(\"loaded\",t),t.state=lt.Ready))}setError(t,e){if(this.isClosing())return;const i=new Event(\"error\",{bubbles:!0,cancelable:!0});if(this.emit(\"error\",i,t),i.defaultPrevented)return;t.error=e,this.hideLoading(t),this.clearContent(t);const n=document.createElement(\"div\");n.classList.add(\"fancybox-error\"),n.innerHTML=this.localize(e||\"

{{ERROR}}

\"),this.setContent(t,n)}clearContent(t){if(void 0===t.state)return;this.emit(\"clearContent\",t),t.contentEl&&(t.contentEl.remove(),t.contentEl=void 0);const e=t.el;e&&(S(e,\"has-error\"),S(e,\"has-unknown\"),S(e,`has-${t.type||\"unknown\"}`)),t.closeBtnEl&&t.closeBtnEl.remove(),t.closeBtnEl=void 0,t.captionEl&&t.captionEl.remove(),t.captionEl=void 0,t.spinnerEl&&t.spinnerEl.remove(),t.spinnerEl=void 0}getSlide(){var t;const e=this.carousel;return(null===(t=null==e?void 0:e.pages[null==e?void 0:e.page])||void 0===t?void 0:t.slides[0])||void 0}close(t,e){if(this.isClosing())return;const i=new Event(\"shouldClose\",{bubbles:!0,cancelable:!0});if(this.emit(\"shouldClose\",i,t),i.defaultPrevented)return;t&&t.cancelable&&(t.preventDefault(),t.stopPropagation());const n=()=>{this.proceedClose(t,e)};this.startedFs&&ye&&ye.isFullscreen()?Promise.resolve(ye.exit()).then((()=>n())):n()}clearIdle(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null}setIdle(t=!1){const e=()=>{this.clearIdle(),this.idle=!0,P(this.container,\"is-idle\"),this.emit(\"setIdle\")};if(this.clearIdle(),!this.isClosing())if(t)e();else{const t=this.option(\"idle\");t&&(this.idleTimer=setTimeout(e,t))}}endIdle(){this.clearIdle(),this.idle&&!this.isClosing()&&(this.idle=!1,S(this.container,\"is-idle\"),this.emit(\"endIdle\"))}resetIdle(){this.endIdle(),this.setIdle()}toggleIdle(){this.idle?this.endIdle():this.setIdle(!0)}toggleFullscreen(){ye&&(ye.isFullscreen()?ye.exit():ye.request().then((()=>{this.startedFs=!0})))}isClosing(){return[rt.Closing,rt.CustomClosing,rt.Destroy].includes(this.state)}proceedClose(t,e){var i,n;this.state=rt.Closing,this.clearIdle(),this.detachEvents();const s=this.container,o=this.carousel,a=this.getSlide(),r=a&&this.option(\"placeFocusBack\")?a.triggerEl||this.option(\"triggerEl\"):null;if(r&&(tt(r)?st(r):r.focus()),s&&(S(s,he),P(s,\"is-closing\"),s.setAttribute(oe,\"true\"),this.option(\"animated\")&&P(s,re),s.style.pointerEvents=\"none\"),o){o.clearTransitions(),null===(i=o.panzoom)||void 0===i||i.destroy(),null===(n=o.plugins.Navigation)||void 0===n||n.detach();for(const t of o.slides){t.state=lt.Closing,this.hideLoading(t);const e=t.contentEl;e&&this.stop(e);const i=null==t?void 0:t.panzoom;i&&(i.stop(),i.detachEvents(),i.detachObserver()),this.isCurrentSlide(t)||o.emit(\"removeSlide\",t)}}Pe=window.scrollX,Ce=window.scrollY,window.addEventListener(\"scroll\",this.onScroll),this.emit(\"close\",t),this.state!==rt.CustomClosing?(void 0===e&&a&&(e=this.optionFor(a,\"hideClass\")),e&&a?(this.animate(a.contentEl,e,(()=>{o&&o.emit(\"removeSlide\",a)})),setTimeout((()=>{this.destroy()}),500)):this.destroy()):setTimeout((()=>{this.destroy()}),500)}destroy(){var t;if(this.state===rt.Destroy)return;window.removeEventListener(\"scroll\",this.onScroll),this.state=rt.Destroy,null===(t=this.carousel)||void 0===t||t.destroy();const e=this.container;e&&e.remove(),Te.delete(this.id);const i=Oe.getInstance();i?i.focus():(we&&(we.remove(),we=null),xe&&(xe.remove(),xe=null),S(document.documentElement,ee),(()=>{if(!et)return;const t=document,e=t.body;e.classList.remove(ie),e.style.setProperty(se,\"\"),t.documentElement.style.setProperty(ne,\"\")})(),this.emit(\"destroy\"))}static bind(t,e,i){if(!et)return;let n,s=\"\",o={};if(void 0===t?n=document.body:ve(t)?(n=document.body,s=t,\"object\"==typeof e&&(o=e||{})):(n=t,ve(e)&&(s=e),\"object\"==typeof i&&(o=i||{})),!n||!E(n))return;s=s||\"[data-fancybox]\";const a=Oe.openers.get(n)||new Map;a.set(s,o),Oe.openers.set(n,a),1===a.size&&n.addEventListener(\"click\",Oe.fromEvent)}static unbind(t,e){let i,n=\"\";if(ve(t)?(i=document.body,n=t):(i=t,ve(e)&&(n=e)),!i)return;const s=Oe.openers.get(i);s&&n&&s.delete(n),n&&s||(Oe.openers.delete(i),i.removeEventListener(\"click\",Oe.fromEvent))}static destroy(){let t;for(;t=Oe.getInstance();)t.destroy();for(const t of Oe.openers.keys())t.removeEventListener(\"click\",Oe.fromEvent);Oe.openers=new Map}static fromEvent(t){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let e=t.composedPath()[0];const i=e.closest(\"[data-fancybox-trigger]\");if(i){const t=i.dataset.fancyboxTrigger||\"\",n=document.querySelectorAll(`[data-fancybox=\"${t}\"]`),s=parseInt(i.dataset.fancyboxIndex||\"\",10)||0;e=n[s]||e}if(!(e&&e instanceof Element))return;let n,s,o,a;if([...Oe.openers].reverse().find((([t,i])=>!(!t.contains(e)||![...i].reverse().find((([i,r])=>{let l=e.closest(i);return!!l&&(n=t,s=i,o=l,a=r,!0)}))))),!n||!s||!o)return;a=a||{},t.preventDefault(),e=o;let r=[],l=u({},at,a);l.event=t,l.triggerEl=e,l.delegate=i;const c=l.groupAll,h=l.groupAttr,d=h&&e?e.getAttribute(`${h}`):\"\";if((!e||d||c)&&(r=[].slice.call(n.querySelectorAll(s))),e&&!c&&(r=d?r.filter((t=>t.getAttribute(`${h}`)===d)):[e]),!r.length)return;const p=Oe.getInstance();return p&&p.options.triggerEl&&r.indexOf(p.options.triggerEl)>-1?void 0:(e&&(l.startIndex=r.indexOf(e)),Oe.fromNodes(r,l))}static fromSelector(t,e,i){let n=null,s=\"\",o={};if(ve(t)?(n=document.body,s=t,\"object\"==typeof e&&(o=e||{})):t instanceof HTMLElement&&ve(e)&&(n=t,s=e,\"object\"==typeof i&&(o=i||{})),!n||!s)return!1;const a=Oe.openers.get(n);return!!a&&(o=u({},a.get(s)||{},o),!!o&&Oe.fromNodes(Array.from(n.querySelectorAll(s)),o))}static fromNodes(t,e){e=u({},at,e||{});const i=[];for(const n of t){const t=n.dataset||{},s=t[me]||n.getAttribute(ge)||n.getAttribute(\"currentSrc\")||n.getAttribute(me)||void 0;let o;const a=e.delegate;let r;a&&i.length===e.startIndex&&(o=a instanceof HTMLImageElement?a:a.querySelector(\"img:not([aria-hidden])\")),o||(o=n instanceof HTMLImageElement?n:n.querySelector(\"img:not([aria-hidden])\")),o&&(r=o.currentSrc||o[me]||void 0,!r&&o.dataset&&(r=o.dataset.lazySrc||o.dataset[me]||void 0));const l={src:s,triggerEl:n,thumbEl:o,thumbElSrc:r,thumbSrc:r};for(const e in t){let i=t[e]+\"\";i=\"false\"!==i&&(\"true\"===i||i),l[e]=i}i.push(l)}return new Oe(i,e)}static getInstance(t){if(t)return Te.get(t);return Array.from(Te.values()).reverse().find((t=>!t.isClosing()&&t))||null}static getSlide(){var t;return(null===(t=Oe.getInstance())||void 0===t?void 0:t.getSlide())||null}static show(t=[],e={}){return new Oe(t,e)}static next(){const t=Oe.getInstance();t&&t.next()}static prev(){const t=Oe.getInstance();t&&t.prev()}static close(t=!0,...e){if(t)for(const t of Te.values())t.close(...e);else{const t=Oe.getInstance();t&&t.close(...e)}}}Object.defineProperty(Oe,\"version\",{enumerable:!0,configurable:!0,writable:!0,value:\"5.0.36\"}),Object.defineProperty(Oe,\"defaults\",{enumerable:!0,configurable:!0,writable:!0,value:at}),Object.defineProperty(Oe,\"Plugins\",{enumerable:!0,configurable:!0,writable:!0,value:te}),Object.defineProperty(Oe,\"openers\",{enumerable:!0,configurable:!0,writable:!0,value:new Map});export{Q as Carousel,Oe as Fancybox,I as Panzoom};\n"], + "mappings": "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", + "names": ["t", "e", "i", "n", "s", "o", "a", "r", "l", "c", "h", "d", "u", "p", "f", "g", "m", "v", "b", "y", "w", "x", "E", "S", "P", "C", "T", "M", "O", "A"] +} diff --git a/.vite/deps/_metadata.json b/.vite/deps/_metadata.json new file mode 100644 index 0000000..62bfd57 --- /dev/null +++ b/.vite/deps/_metadata.json @@ -0,0 +1,61 @@ +{ + "hash": "ce7a0443", + "configHash": "8bcd3e19", + "lockfileHash": "1d8bf9b4", + "browserHash": "b15efe69", + "optimized": { + "@fancyapps/ui": { + "src": "../../node_modules/@fancyapps/ui/dist/index.esm.js", + "file": "@fancyapps_ui.js", + "fileHash": "0e91493d", + "needsInterop": false + }, + "preact": { + "src": "../../node_modules/preact/dist/preact.module.js", + "file": "preact.js", + "fileHash": "b331e8bf", + "needsInterop": false + }, + "preact-iso": { + "src": "../../node_modules/preact-iso/src/index.js", + "file": "preact-iso.js", + "fileHash": "da0bf0a6", + "needsInterop": false + }, + "react": { + "src": "../../node_modules/react/index.js", + "file": "react.js", + "fileHash": "8051360a", + "needsInterop": true + }, + "swiper/modules": { + "src": "../../node_modules/swiper/modules/index.mjs", + "file": "swiper_modules.js", + "fileHash": "ab031693", + "needsInterop": false + }, + "swiper/react": { + "src": "../../node_modules/swiper/swiper-react.mjs", + "file": "swiper_react.js", + "fileHash": "8a08080a", + "needsInterop": false + } + }, + "chunks": { + "chunk-KS2M7ZJI": { + "file": "chunk-KS2M7ZJI.js" + }, + "chunk-XLOWEJT4": { + "file": "chunk-XLOWEJT4.js" + }, + "prerender-2A2BKSYN": { + "file": "prerender-2A2BKSYN.js" + }, + "chunk-WFLWNDNR": { + "file": "chunk-WFLWNDNR.js" + }, + "chunk-5WRI5ZAA": { + "file": "chunk-5WRI5ZAA.js" + } + } +} \ No newline at end of file diff --git a/.vite/deps/chunk-5WRI5ZAA.js b/.vite/deps/chunk-5WRI5ZAA.js new file mode 100644 index 0000000..0e67478 --- /dev/null +++ b/.vite/deps/chunk-5WRI5ZAA.js @@ -0,0 +1,30 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +export { + __commonJS, + __toESM +}; diff --git a/.vite/deps/chunk-5WRI5ZAA.js.map b/.vite/deps/chunk-5WRI5ZAA.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/.vite/deps/chunk-5WRI5ZAA.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/.vite/deps/chunk-KS2M7ZJI.js b/.vite/deps/chunk-KS2M7ZJI.js new file mode 100644 index 0000000..d2040ec --- /dev/null +++ b/.vite/deps/chunk-KS2M7ZJI.js @@ -0,0 +1,972 @@ +import { + __commonJS +} from "./chunk-5WRI5ZAA.js"; + +// node_modules/react/cjs/react.development.js +var require_react_development = __commonJS({ + "node_modules/react/cjs/react.development.js"(exports, module) { + "use strict"; + (function() { + function defineDeprecationWarning(methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function() { + console.warn( + "%s(...) is deprecated in plain JavaScript React classes. %s", + info[0], + info[1] + ); + } + }); + } + function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) + return null; + maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; + } + function warnNoop(publicInstance, callerName) { + publicInstance = (publicInstance = publicInstance.constructor) && (publicInstance.displayName || publicInstance.name) || "ReactClass"; + var warningKey = publicInstance + "." + callerName; + didWarnStateUpdateForUnmountedComponent[warningKey] || (console.error( + "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", + callerName, + publicInstance + ), didWarnStateUpdateForUnmountedComponent[warningKey] = true); + } + function Component(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + function ComponentDummy() { + } + function PureComponent(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = false; + } catch (e) { + JSCompiler_inline_result = true; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; + JSCompiler_temp_const.call( + JSCompiler_inline_result, + "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", + JSCompiler_inline_result$jscomp$0 + ); + return testStringCoercion(value); + } + } + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) + return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: + return "Fragment"; + case REACT_PROFILER_TYPE: + return "Profiler"; + case REACT_STRICT_MODE_TYPE: + return "StrictMode"; + case REACT_SUSPENSE_TYPE: + return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: + return "SuspenseList"; + case REACT_ACTIVITY_TYPE: + return "Activity"; + } + if ("object" === typeof type) + switch ("number" === typeof type.tag && console.error( + "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." + ), type.$$typeof) { + case REACT_PORTAL_TYPE: + return "Portal"; + case REACT_CONTEXT_TYPE: + return (type.displayName || "Context") + ".Provider"; + case REACT_CONSUMER_TYPE: + return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"); + return type; + case REACT_MEMO_TYPE: + return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo"; + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) { + } + } + return null; + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ("object" === typeof type && null !== type && type.$$typeof === REACT_LAZY_TYPE) + return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return false; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error( + "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", + displayName + )); + } + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: true + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error( + "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." + )); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, self, source, owner, props, debugStack, debugTask) { + self = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type, + key, + props, + _owner: owner + }; + null !== (void 0 !== self ? self : null) ? Object.defineProperty(type, "ref", { + enumerable: false, + get: elementRefGetterWithDeprecationWarning + }) : Object.defineProperty(type, "ref", { enumerable: false, value: null }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: false, + enumerable: false, + writable: true, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: false, + enumerable: false, + writable: true, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: false, + enumerable: false, + writable: true, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: false, + enumerable: false, + writable: true, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function cloneAndReplaceKey(oldElement, newKey) { + newKey = ReactElement( + oldElement.type, + newKey, + void 0, + void 0, + oldElement._owner, + oldElement.props, + oldElement._debugStack, + oldElement._debugTask + ); + oldElement._store && (newKey._store.validated = oldElement._store.validated); + return newKey; + } + function isValidElement(object) { + return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE; + } + function escape(key) { + var escaperLookup = { "=": "=0", ":": "=2" }; + return "$" + key.replace(/[=:]/g, function(match) { + return escaperLookup[match]; + }); + } + function getElementKey(element, index) { + return "object" === typeof element && null !== element && null != element.key ? (checkKeyStringCoercion(element.key), escape("" + element.key)) : index.toString(36); + } + function noop$1() { + } + function resolveThenable(thenable) { + switch (thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + default: + switch ("string" === typeof thenable.status ? thenable.then(noop$1, noop$1) : (thenable.status = "pending", thenable.then( + function(fulfilledValue) { + "pending" === thenable.status && (thenable.status = "fulfilled", thenable.value = fulfilledValue); + }, + function(error) { + "pending" === thenable.status && (thenable.status = "rejected", thenable.reason = error); + } + )), thenable.status) { + case "fulfilled": + return thenable.value; + case "rejected": + throw thenable.reason; + } + } + throw thenable; + } + function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + if ("undefined" === type || "boolean" === type) children = null; + var invokeCallback = false; + if (null === children) invokeCallback = true; + else + switch (type) { + case "bigint": + case "string": + case "number": + invokeCallback = true; + break; + case "object": + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = true; + break; + case REACT_LAZY_TYPE: + return invokeCallback = children._init, mapIntoArray( + invokeCallback(children._payload), + array, + escapedPrefix, + nameSoFar, + callback + ); + } + } + if (invokeCallback) { + invokeCallback = children; + callback = callback(invokeCallback); + var childKey = "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; + isArrayImpl(callback) ? (escapedPrefix = "", null != childKey && (escapedPrefix = childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), mapIntoArray(callback, array, escapedPrefix, "", function(c) { + return c; + })) : null != callback && (isValidElement(callback) && (null != callback.key && (invokeCallback && invokeCallback.key === callback.key || checkKeyStringCoercion(callback.key)), escapedPrefix = cloneAndReplaceKey( + callback, + escapedPrefix + (null == callback.key || invokeCallback && invokeCallback.key === callback.key ? "" : ("" + callback.key).replace( + userProvidedKeyEscapeRegex, + "$&/" + ) + "/") + childKey + ), "" !== nameSoFar && null != invokeCallback && isValidElement(invokeCallback) && null == invokeCallback.key && invokeCallback._store && !invokeCallback._store.validated && (escapedPrefix._store.validated = 2), callback = escapedPrefix), array.push(callback)); + return 1; + } + invokeCallback = 0; + childKey = "" === nameSoFar ? "." : nameSoFar + ":"; + if (isArrayImpl(children)) + for (var i = 0; i < children.length; i++) + nameSoFar = children[i], type = childKey + getElementKey(nameSoFar, i), invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + ); + else if (i = getIteratorFn(children), "function" === typeof i) + for (i === children.entries && (didWarnAboutMaps || console.warn( + "Using Maps as children is not supported. Use an array of keyed ReactElements instead." + ), didWarnAboutMaps = true), children = i.call(children), i = 0; !(nameSoFar = children.next()).done; ) + nameSoFar = nameSoFar.value, type = childKey + getElementKey(nameSoFar, i++), invokeCallback += mapIntoArray( + nameSoFar, + array, + escapedPrefix, + type, + callback + ); + else if ("object" === type) { + if ("function" === typeof children.then) + return mapIntoArray( + resolveThenable(children), + array, + escapedPrefix, + nameSoFar, + callback + ); + array = String(children); + throw Error( + "Objects are not valid as a React child (found: " + ("[object Object]" === array ? "object with keys {" + Object.keys(children).join(", ") + "}" : array) + "). If you meant to render a collection of children, use an array instead." + ); + } + return invokeCallback; + } + function mapChildren(children, func, context) { + if (null == children) return children; + var result = [], count = 0; + mapIntoArray(children, result, "", "", function(child) { + return func.call(context, child, count++); + }); + return result; + } + function lazyInitializer(payload) { + if (-1 === payload._status) { + var ctor = payload._result; + ctor = ctor(); + ctor.then( + function(moduleObject) { + if (0 === payload._status || -1 === payload._status) + payload._status = 1, payload._result = moduleObject; + }, + function(error) { + if (0 === payload._status || -1 === payload._status) + payload._status = 2, payload._result = error; + } + ); + -1 === payload._status && (payload._status = 0, payload._result = ctor); + } + if (1 === payload._status) + return ctor = payload._result, void 0 === ctor && console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", + ctor + ), "default" in ctor || console.error( + "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", + ctor + ), ctor.default; + throw payload._result; + } + function resolveDispatcher() { + var dispatcher = ReactSharedInternals.H; + null === dispatcher && console.error( + "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." + ); + return dispatcher; + } + function noop() { + } + function enqueueTask(task) { + if (null === enqueueTaskImpl) + try { + var requireString = ("require" + Math.random()).slice(0, 7); + enqueueTaskImpl = (module && module[requireString]).call( + module, + "timers" + ).setImmediate; + } catch (_err) { + enqueueTaskImpl = function(callback) { + false === didWarnAboutMessageChannel && (didWarnAboutMessageChannel = true, "undefined" === typeof MessageChannel && console.error( + "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning." + )); + var channel = new MessageChannel(); + channel.port1.onmessage = callback; + channel.port2.postMessage(void 0); + }; + } + return enqueueTaskImpl(task); + } + function aggregateErrors(errors) { + return 1 < errors.length && "function" === typeof AggregateError ? new AggregateError(errors) : errors[0]; + } + function popActScope(prevActQueue, prevActScopeDepth) { + prevActScopeDepth !== actScopeDepth - 1 && console.error( + "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. " + ); + actScopeDepth = prevActScopeDepth; + } + function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { + var queue = ReactSharedInternals.actQueue; + if (null !== queue) + if (0 !== queue.length) + try { + flushActQueue(queue); + enqueueTask(function() { + return recursivelyFlushAsyncActWork(returnValue, resolve, reject); + }); + return; + } catch (error) { + ReactSharedInternals.thrownErrors.push(error); + } + else ReactSharedInternals.actQueue = null; + 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve(returnValue); + } + function flushActQueue(queue) { + if (!isFlushing) { + isFlushing = true; + var i = 0; + try { + for (; i < queue.length; i++) { + var callback = queue[i]; + do { + ReactSharedInternals.didUsePromise = false; + var continuation = callback(false); + if (null !== continuation) { + if (ReactSharedInternals.didUsePromise) { + queue[i] = callback; + queue.splice(0, i); + return; + } + callback = continuation; + } else break; + } while (1); + } + queue.length = 0; + } catch (error) { + queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error); + } finally { + isFlushing = false; + } + } + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"); + Symbol.for("react.provider"); + var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, didWarnStateUpdateForUnmountedComponent = {}, ReactNoopUpdateQueue = { + isMounted: function() { + return false; + }, + enqueueForceUpdate: function(publicInstance) { + warnNoop(publicInstance, "forceUpdate"); + }, + enqueueReplaceState: function(publicInstance) { + warnNoop(publicInstance, "replaceState"); + }, + enqueueSetState: function(publicInstance) { + warnNoop(publicInstance, "setState"); + } + }, assign = Object.assign, emptyObject = {}; + Object.freeze(emptyObject); + Component.prototype.isReactComponent = {}; + Component.prototype.setState = function(partialState, callback) { + if ("object" !== typeof partialState && "function" !== typeof partialState && null != partialState) + throw Error( + "takes an object of state variables to update or a function which returns an object of state variables." + ); + this.updater.enqueueSetState(this, partialState, callback, "setState"); + }; + Component.prototype.forceUpdate = function(callback) { + this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); + }; + var deprecatedAPIs = { + isMounted: [ + "isMounted", + "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks." + ], + replaceState: [ + "replaceState", + "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)." + ] + }, fnName; + for (fnName in deprecatedAPIs) + deprecatedAPIs.hasOwnProperty(fnName) && defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + ComponentDummy.prototype = Component.prototype; + deprecatedAPIs = PureComponent.prototype = new ComponentDummy(); + deprecatedAPIs.constructor = PureComponent; + assign(deprecatedAPIs, Component.prototype); + deprecatedAPIs.isPureReactComponent = true; + var isArrayImpl = Array.isArray, REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = { + H: null, + A: null, + T: null, + S: null, + V: null, + actQueue: null, + isBatchingLegacy: false, + didScheduleLegacyUpdate: false, + didUsePromise: false, + thrownErrors: [], + getCurrentStack: null, + recentlyCreatedOwnerStacks: 0 + }, hasOwnProperty = Object.prototype.hasOwnProperty, createTask = console.createTask ? console.createTask : function() { + return null; + }; + deprecatedAPIs = { + "react-stack-bottom-frame": function(callStackForError) { + return callStackForError(); + } + }; + var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = deprecatedAPIs["react-stack-bottom-frame"].bind(deprecatedAPIs, UnknownOwner)(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutMaps = false, userProvidedKeyEscapeRegex = /\/+/g, reportGlobalError = "function" === typeof reportError ? reportError : function(error) { + if ("object" === typeof window && "function" === typeof window.ErrorEvent) { + var event = new window.ErrorEvent("error", { + bubbles: true, + cancelable: true, + message: "object" === typeof error && null !== error && "string" === typeof error.message ? String(error.message) : String(error), + error + }); + if (!window.dispatchEvent(event)) return; + } else if ("object" === typeof process && "function" === typeof process.emit) { + process.emit("uncaughtException", error); + return; + } + console.error(error); + }, didWarnAboutMessageChannel = false, enqueueTaskImpl = null, actScopeDepth = 0, didWarnNoAwaitAct = false, isFlushing = false, queueSeveralMicrotasks = "function" === typeof queueMicrotask ? function(callback) { + queueMicrotask(function() { + return queueMicrotask(callback); + }); + } : enqueueTask; + deprecatedAPIs = Object.freeze({ + __proto__: null, + c: function(size) { + return resolveDispatcher().useMemoCache(size); + } + }); + exports.Children = { + map: mapChildren, + forEach: function(children, forEachFunc, forEachContext) { + mapChildren( + children, + function() { + forEachFunc.apply(this, arguments); + }, + forEachContext + ); + }, + count: function(children) { + var n = 0; + mapChildren(children, function() { + n++; + }); + return n; + }, + toArray: function(children) { + return mapChildren(children, function(child) { + return child; + }) || []; + }, + only: function(children) { + if (!isValidElement(children)) + throw Error( + "React.Children.only expected to receive a single React element child." + ); + return children; + } + }; + exports.Component = Component; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.Profiler = REACT_PROFILER_TYPE; + exports.PureComponent = PureComponent; + exports.StrictMode = REACT_STRICT_MODE_TYPE; + exports.Suspense = REACT_SUSPENSE_TYPE; + exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; + exports.__COMPILER_RUNTIME = deprecatedAPIs; + exports.act = function(callback) { + var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth; + actScopeDepth++; + var queue = ReactSharedInternals.actQueue = null !== prevActQueue ? prevActQueue : [], didAwaitActCall = false; + try { + var result = callback(); + } catch (error) { + ReactSharedInternals.thrownErrors.push(error); + } + if (0 < ReactSharedInternals.thrownErrors.length) + throw popActScope(prevActQueue, prevActScopeDepth), callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback; + if (null !== result && "object" === typeof result && "function" === typeof result.then) { + var thenable = result; + queueSeveralMicrotasks(function() { + didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error( + "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);" + )); + }); + return { + then: function(resolve, reject) { + didAwaitActCall = true; + thenable.then( + function(returnValue) { + popActScope(prevActQueue, prevActScopeDepth); + if (0 === prevActScopeDepth) { + try { + flushActQueue(queue), enqueueTask(function() { + return recursivelyFlushAsyncActWork( + returnValue, + resolve, + reject + ); + }); + } catch (error$0) { + ReactSharedInternals.thrownErrors.push(error$0); + } + if (0 < ReactSharedInternals.thrownErrors.length) { + var _thrownError = aggregateErrors( + ReactSharedInternals.thrownErrors + ); + ReactSharedInternals.thrownErrors.length = 0; + reject(_thrownError); + } + } else resolve(returnValue); + }, + function(error) { + popActScope(prevActQueue, prevActScopeDepth); + 0 < ReactSharedInternals.thrownErrors.length ? (error = aggregateErrors( + ReactSharedInternals.thrownErrors + ), ReactSharedInternals.thrownErrors.length = 0, reject(error)) : reject(error); + } + ); + } + }; + } + var returnValue$jscomp$0 = result; + popActScope(prevActQueue, prevActScopeDepth); + 0 === prevActScopeDepth && (flushActQueue(queue), 0 !== queue.length && queueSeveralMicrotasks(function() { + didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error( + "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)" + )); + }), ReactSharedInternals.actQueue = null); + if (0 < ReactSharedInternals.thrownErrors.length) + throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback; + return { + then: function(resolve, reject) { + didAwaitActCall = true; + 0 === prevActScopeDepth ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() { + return recursivelyFlushAsyncActWork( + returnValue$jscomp$0, + resolve, + reject + ); + })) : resolve(returnValue$jscomp$0); + } + }; + }; + exports.cache = function(fn) { + return function() { + return fn.apply(null, arguments); + }; + }; + exports.captureOwnerStack = function() { + var getCurrentStack = ReactSharedInternals.getCurrentStack; + return null === getCurrentStack ? null : getCurrentStack(); + }; + exports.cloneElement = function(element, config, children) { + if (null === element || void 0 === element) + throw Error( + "The argument must be a React element, but you passed " + element + "." + ); + var props = assign({}, element.props), key = element.key, owner = element._owner; + if (null != config) { + var JSCompiler_inline_result; + a: { + if (hasOwnProperty.call(config, "ref") && (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( + config, + "ref" + ).get) && JSCompiler_inline_result.isReactWarning) { + JSCompiler_inline_result = false; + break a; + } + JSCompiler_inline_result = void 0 !== config.ref; + } + JSCompiler_inline_result && (owner = getOwner()); + hasValidKey(config) && (checkKeyStringCoercion(config.key), key = "" + config.key); + for (propName in config) + !hasOwnProperty.call(config, propName) || "key" === propName || "__self" === propName || "__source" === propName || "ref" === propName && void 0 === config.ref || (props[propName] = config[propName]); + } + var propName = arguments.length - 2; + if (1 === propName) props.children = children; + else if (1 < propName) { + JSCompiler_inline_result = Array(propName); + for (var i = 0; i < propName; i++) + JSCompiler_inline_result[i] = arguments[i + 2]; + props.children = JSCompiler_inline_result; + } + props = ReactElement( + element.type, + key, + void 0, + void 0, + owner, + props, + element._debugStack, + element._debugTask + ); + for (key = 2; key < arguments.length; key++) + owner = arguments[key], isValidElement(owner) && owner._store && (owner._store.validated = 1); + return props; + }; + exports.createContext = function(defaultValue) { + defaultValue = { + $$typeof: REACT_CONTEXT_TYPE, + _currentValue: defaultValue, + _currentValue2: defaultValue, + _threadCount: 0, + Provider: null, + Consumer: null + }; + defaultValue.Provider = defaultValue; + defaultValue.Consumer = { + $$typeof: REACT_CONSUMER_TYPE, + _context: defaultValue + }; + defaultValue._currentRenderer = null; + defaultValue._currentRenderer2 = null; + return defaultValue; + }; + exports.createElement = function(type, config, children) { + for (var i = 2; i < arguments.length; i++) { + var node = arguments[i]; + isValidElement(node) && node._store && (node._store.validated = 1); + } + i = {}; + node = null; + if (null != config) + for (propName in didWarnAboutOldJSXRuntime || !("__self" in config) || "key" in config || (didWarnAboutOldJSXRuntime = true, console.warn( + "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" + )), hasValidKey(config) && (checkKeyStringCoercion(config.key), node = "" + config.key), config) + hasOwnProperty.call(config, propName) && "key" !== propName && "__self" !== propName && "__source" !== propName && (i[propName] = config[propName]); + var childrenLength = arguments.length - 2; + if (1 === childrenLength) i.children = children; + else if (1 < childrenLength) { + for (var childArray = Array(childrenLength), _i = 0; _i < childrenLength; _i++) + childArray[_i] = arguments[_i + 2]; + Object.freeze && Object.freeze(childArray); + i.children = childArray; + } + if (type && type.defaultProps) + for (propName in childrenLength = type.defaultProps, childrenLength) + void 0 === i[propName] && (i[propName] = childrenLength[propName]); + node && defineKeyPropWarningGetter( + i, + "function" === typeof type ? type.displayName || type.name || "Unknown" : type + ); + var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return ReactElement( + type, + node, + void 0, + void 0, + getOwner(), + i, + propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, + propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask + ); + }; + exports.createRef = function() { + var refObject = { current: null }; + Object.seal(refObject); + return refObject; + }; + exports.forwardRef = function(render) { + null != render && render.$$typeof === REACT_MEMO_TYPE ? console.error( + "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." + ) : "function" !== typeof render ? console.error( + "forwardRef requires a render function but was given %s.", + null === render ? "null" : typeof render + ) : 0 !== render.length && 2 !== render.length && console.error( + "forwardRef render functions accept exactly two parameters: props and ref. %s", + 1 === render.length ? "Did you forget to use the ref parameter?" : "Any additional parameter will be undefined." + ); + null != render && null != render.defaultProps && console.error( + "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" + ); + var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render }, ownName; + Object.defineProperty(elementType, "displayName", { + enumerable: false, + configurable: true, + get: function() { + return ownName; + }, + set: function(name) { + ownName = name; + render.name || render.displayName || (Object.defineProperty(render, "name", { value: name }), render.displayName = name); + } + }); + return elementType; + }; + exports.isValidElement = isValidElement; + exports.lazy = function(ctor) { + return { + $$typeof: REACT_LAZY_TYPE, + _payload: { _status: -1, _result: ctor }, + _init: lazyInitializer + }; + }; + exports.memo = function(type, compare) { + null == type && console.error( + "memo: The first argument must be a component. Instead received: %s", + null === type ? "null" : typeof type + ); + compare = { + $$typeof: REACT_MEMO_TYPE, + type, + compare: void 0 === compare ? null : compare + }; + var ownName; + Object.defineProperty(compare, "displayName", { + enumerable: false, + configurable: true, + get: function() { + return ownName; + }, + set: function(name) { + ownName = name; + type.name || type.displayName || (Object.defineProperty(type, "name", { value: name }), type.displayName = name); + } + }); + return compare; + }; + exports.startTransition = function(scope) { + var prevTransition = ReactSharedInternals.T, currentTransition = {}; + ReactSharedInternals.T = currentTransition; + currentTransition._updatedFibers = /* @__PURE__ */ new Set(); + try { + var returnValue = scope(), onStartTransitionFinish = ReactSharedInternals.S; + null !== onStartTransitionFinish && onStartTransitionFinish(currentTransition, returnValue); + "object" === typeof returnValue && null !== returnValue && "function" === typeof returnValue.then && returnValue.then(noop, reportGlobalError); + } catch (error) { + reportGlobalError(error); + } finally { + null === prevTransition && currentTransition._updatedFibers && (scope = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < scope && console.warn( + "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." + )), ReactSharedInternals.T = prevTransition; + } + }; + exports.unstable_useCacheRefresh = function() { + return resolveDispatcher().useCacheRefresh(); + }; + exports.use = function(usable) { + return resolveDispatcher().use(usable); + }; + exports.useActionState = function(action, initialState, permalink) { + return resolveDispatcher().useActionState( + action, + initialState, + permalink + ); + }; + exports.useCallback = function(callback, deps) { + return resolveDispatcher().useCallback(callback, deps); + }; + exports.useContext = function(Context) { + var dispatcher = resolveDispatcher(); + Context.$$typeof === REACT_CONSUMER_TYPE && console.error( + "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?" + ); + return dispatcher.useContext(Context); + }; + exports.useDebugValue = function(value, formatterFn) { + return resolveDispatcher().useDebugValue(value, formatterFn); + }; + exports.useDeferredValue = function(value, initialValue) { + return resolveDispatcher().useDeferredValue(value, initialValue); + }; + exports.useEffect = function(create, createDeps, update) { + null == create && console.warn( + "React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + var dispatcher = resolveDispatcher(); + if ("function" === typeof update) + throw Error( + "useEffect CRUD overload is not enabled in this build of React." + ); + return dispatcher.useEffect(create, createDeps); + }; + exports.useId = function() { + return resolveDispatcher().useId(); + }; + exports.useImperativeHandle = function(ref, create, deps) { + return resolveDispatcher().useImperativeHandle(ref, create, deps); + }; + exports.useInsertionEffect = function(create, deps) { + null == create && console.warn( + "React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useInsertionEffect(create, deps); + }; + exports.useLayoutEffect = function(create, deps) { + null == create && console.warn( + "React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?" + ); + return resolveDispatcher().useLayoutEffect(create, deps); + }; + exports.useMemo = function(create, deps) { + return resolveDispatcher().useMemo(create, deps); + }; + exports.useOptimistic = function(passthrough, reducer) { + return resolveDispatcher().useOptimistic(passthrough, reducer); + }; + exports.useReducer = function(reducer, initialArg, init) { + return resolveDispatcher().useReducer(reducer, initialArg, init); + }; + exports.useRef = function(initialValue) { + return resolveDispatcher().useRef(initialValue); + }; + exports.useState = function(initialState) { + return resolveDispatcher().useState(initialState); + }; + exports.useSyncExternalStore = function(subscribe, getSnapshot, getServerSnapshot) { + return resolveDispatcher().useSyncExternalStore( + subscribe, + getSnapshot, + getServerSnapshot + ); + }; + exports.useTransition = function() { + return resolveDispatcher().useTransition(); + }; + exports.version = "19.1.0"; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); + } +}); + +// node_modules/react/index.js +var require_react = __commonJS({ + "node_modules/react/index.js"(exports, module) { + if (false) { + module.exports = null; + } else { + module.exports = require_react_development(); + } + } +}); + +export { + require_react +}; +/*! Bundled license information: + +react/cjs/react.development.js: + (** + * @license React + * react.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ +//# sourceMappingURL=chunk-KS2M7ZJI.js.map diff --git a/.vite/deps/chunk-KS2M7ZJI.js.map b/.vite/deps/chunk-KS2M7ZJI.js.map new file mode 100644 index 0000000..a3a7c14 --- /dev/null +++ b/.vite/deps/chunk-KS2M7ZJI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/react/cjs/react.development.js", "../../node_modules/react/index.js"], + "sourcesContent": ["/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props,\n oldElement._debugStack,\n oldElement._debugTask\n );\n oldElement._store &&\n (newKey._store.validated = oldElement._store.validated);\n return newKey;\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function noop$1() {}\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function noop() {}\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n V: null,\n actQueue: null,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null,\n recentlyCreatedOwnerStacks: 0\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n deprecatedAPIs = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = deprecatedAPIs[\n \"react-stack-bottom-frame\"\n ].bind(deprecatedAPIs, UnknownOwner)();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$0) {\n ReactSharedInternals.thrownErrors.push(error$0);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.captureOwnerStack = function () {\n var getCurrentStack = ReactSharedInternals.getCurrentStack;\n return null === getCurrentStack ? null : getCurrentStack();\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(\n element.type,\n key,\n void 0,\n void 0,\n owner,\n props,\n element._debugStack,\n element._debugTask\n );\n for (key = 2; key < arguments.length; key++)\n (owner = arguments[key]),\n isValidElement(owner) && owner._store && (owner._store.validated = 1);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n for (var i = 2; i < arguments.length; i++) {\n var node = arguments[i];\n isValidElement(node) && node._store && (node._store.validated = 1);\n }\n i = {};\n node = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (node = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n node &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return ReactElement(\n type,\n node,\n void 0,\n void 0,\n getOwner(),\n i,\n propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n null == type &&\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, createDeps, update) {\n null == create &&\n console.warn(\n \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n var dispatcher = resolveDispatcher();\n if (\"function\" === typeof update)\n throw Error(\n \"useEffect CRUD overload is not enabled in this build of React.\"\n );\n return dispatcher.useEffect(create, createDeps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n"], + "mappings": "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", + "names": [] +} diff --git a/.vite/deps/chunk-WFLWNDNR.js b/.vite/deps/chunk-WFLWNDNR.js new file mode 100644 index 0000000..bb5d4dd --- /dev/null +++ b/.vite/deps/chunk-WFLWNDNR.js @@ -0,0 +1,312 @@ +// node_modules/preact/dist/preact.module.js +var n; +var l; +var u; +var t; +var i; +var r; +var o; +var e; +var f; +var c; +var s; +var a; +var h; +var p = {}; +var y = []; +var v = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; +var w = Array.isArray; +function d(n2, l2) { + for (var u2 in l2) n2[u2] = l2[u2]; + return n2; +} +function g(n2) { + n2 && n2.parentNode && n2.parentNode.removeChild(n2); +} +function _(l2, u2, t2) { + var i2, r2, o2, e2 = {}; + for (o2 in u2) "key" == o2 ? i2 = u2[o2] : "ref" == o2 ? r2 = u2[o2] : e2[o2] = u2[o2]; + if (arguments.length > 2 && (e2.children = arguments.length > 3 ? n.call(arguments, 2) : t2), "function" == typeof l2 && null != l2.defaultProps) for (o2 in l2.defaultProps) null == e2[o2] && (e2[o2] = l2.defaultProps[o2]); + return m(l2, e2, i2, r2, null); +} +function m(n2, t2, i2, r2, o2) { + var e2 = { type: n2, props: t2, key: i2, ref: r2, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: null == o2 ? ++u : o2, __i: -1, __u: 0 }; + return null == o2 && null != l.vnode && l.vnode(e2), e2; +} +function b() { + return { current: null }; +} +function k(n2) { + return n2.children; +} +function x(n2, l2) { + this.props = n2, this.context = l2; +} +function S(n2, l2) { + if (null == l2) return n2.__ ? S(n2.__, n2.__i + 1) : null; + for (var u2; l2 < n2.__k.length; l2++) if (null != (u2 = n2.__k[l2]) && null != u2.__e) return u2.__e; + return "function" == typeof n2.type ? S(n2) : null; +} +function C(n2) { + var l2, u2; + if (null != (n2 = n2.__) && null != n2.__c) { + for (n2.__e = n2.__c.base = null, l2 = 0; l2 < n2.__k.length; l2++) if (null != (u2 = n2.__k[l2]) && null != u2.__e) { + n2.__e = n2.__c.base = u2.__e; + break; + } + return C(n2); + } +} +function M(n2) { + (!n2.__d && (n2.__d = true) && i.push(n2) && !$.__r++ || r != l.debounceRendering) && ((r = l.debounceRendering) || o)($); +} +function $() { + for (var n2, u2, t2, r2, o2, f2, c2, s2 = 1; i.length; ) i.length > s2 && i.sort(e), n2 = i.shift(), s2 = i.length, n2.__d && (t2 = void 0, o2 = (r2 = (u2 = n2).__v).__e, f2 = [], c2 = [], u2.__P && ((t2 = d({}, r2)).__v = r2.__v + 1, l.vnode && l.vnode(t2), O(u2.__P, t2, r2, u2.__n, u2.__P.namespaceURI, 32 & r2.__u ? [o2] : null, f2, null == o2 ? S(r2) : o2, !!(32 & r2.__u), c2), t2.__v = r2.__v, t2.__.__k[t2.__i] = t2, z(f2, t2, c2), t2.__e != o2 && C(t2))); + $.__r = 0; +} +function I(n2, l2, u2, t2, i2, r2, o2, e2, f2, c2, s2) { + var a2, h2, v2, w2, d2, g2, _2 = t2 && t2.__k || y, m2 = l2.length; + for (f2 = P(u2, l2, _2, f2, m2), a2 = 0; a2 < m2; a2++) null != (v2 = u2.__k[a2]) && (h2 = -1 == v2.__i ? p : _2[v2.__i] || p, v2.__i = a2, g2 = O(n2, v2, h2, i2, r2, o2, e2, f2, c2, s2), w2 = v2.__e, v2.ref && h2.ref != v2.ref && (h2.ref && q(h2.ref, null, v2), s2.push(v2.ref, v2.__c || w2, v2)), null == d2 && null != w2 && (d2 = w2), 4 & v2.__u || h2.__k === v2.__k ? f2 = A(v2, f2, n2) : "function" == typeof v2.type && void 0 !== g2 ? f2 = g2 : w2 && (f2 = w2.nextSibling), v2.__u &= -7); + return u2.__e = d2, f2; +} +function P(n2, l2, u2, t2, i2) { + var r2, o2, e2, f2, c2, s2 = u2.length, a2 = s2, h2 = 0; + for (n2.__k = new Array(i2), r2 = 0; r2 < i2; r2++) null != (o2 = l2[r2]) && "boolean" != typeof o2 && "function" != typeof o2 ? (f2 = r2 + h2, (o2 = n2.__k[r2] = "string" == typeof o2 || "number" == typeof o2 || "bigint" == typeof o2 || o2.constructor == String ? m(null, o2, null, null, null) : w(o2) ? m(k, { children: o2 }, null, null, null) : null == o2.constructor && o2.__b > 0 ? m(o2.type, o2.props, o2.key, o2.ref ? o2.ref : null, o2.__v) : o2).__ = n2, o2.__b = n2.__b + 1, e2 = null, -1 != (c2 = o2.__i = L(o2, u2, f2, a2)) && (a2--, (e2 = u2[c2]) && (e2.__u |= 2)), null == e2 || null == e2.__v ? (-1 == c2 && (i2 > s2 ? h2-- : i2 < s2 && h2++), "function" != typeof o2.type && (o2.__u |= 4)) : c2 != f2 && (c2 == f2 - 1 ? h2-- : c2 == f2 + 1 ? h2++ : (c2 > f2 ? h2-- : h2++, o2.__u |= 4))) : n2.__k[r2] = null; + if (a2) for (r2 = 0; r2 < s2; r2++) null != (e2 = u2[r2]) && 0 == (2 & e2.__u) && (e2.__e == t2 && (t2 = S(e2)), B(e2, e2)); + return t2; +} +function A(n2, l2, u2) { + var t2, i2; + if ("function" == typeof n2.type) { + for (t2 = n2.__k, i2 = 0; t2 && i2 < t2.length; i2++) t2[i2] && (t2[i2].__ = n2, l2 = A(t2[i2], l2, u2)); + return l2; + } + n2.__e != l2 && (l2 && n2.type && !u2.contains(l2) && (l2 = S(n2)), u2.insertBefore(n2.__e, l2 || null), l2 = n2.__e); + do { + l2 = l2 && l2.nextSibling; + } while (null != l2 && 8 == l2.nodeType); + return l2; +} +function H(n2, l2) { + return l2 = l2 || [], null == n2 || "boolean" == typeof n2 || (w(n2) ? n2.some(function(n3) { + H(n3, l2); + }) : l2.push(n2)), l2; +} +function L(n2, l2, u2, t2) { + var i2, r2, o2 = n2.key, e2 = n2.type, f2 = l2[u2]; + if (null === f2 && null == n2.key || f2 && o2 == f2.key && e2 == f2.type && 0 == (2 & f2.__u)) return u2; + if (t2 > (null != f2 && 0 == (2 & f2.__u) ? 1 : 0)) for (i2 = u2 - 1, r2 = u2 + 1; i2 >= 0 || r2 < l2.length; ) { + if (i2 >= 0) { + if ((f2 = l2[i2]) && 0 == (2 & f2.__u) && o2 == f2.key && e2 == f2.type) return i2; + i2--; + } + if (r2 < l2.length) { + if ((f2 = l2[r2]) && 0 == (2 & f2.__u) && o2 == f2.key && e2 == f2.type) return r2; + r2++; + } + } + return -1; +} +function T(n2, l2, u2) { + "-" == l2[0] ? n2.setProperty(l2, null == u2 ? "" : u2) : n2[l2] = null == u2 ? "" : "number" != typeof u2 || v.test(l2) ? u2 : u2 + "px"; +} +function j(n2, l2, u2, t2, i2) { + var r2; + n: if ("style" == l2) if ("string" == typeof u2) n2.style.cssText = u2; + else { + if ("string" == typeof t2 && (n2.style.cssText = t2 = ""), t2) for (l2 in t2) u2 && l2 in u2 || T(n2.style, l2, ""); + if (u2) for (l2 in u2) t2 && u2[l2] == t2[l2] || T(n2.style, l2, u2[l2]); + } + else if ("o" == l2[0] && "n" == l2[1]) r2 = l2 != (l2 = l2.replace(f, "$1")), l2 = l2.toLowerCase() in n2 || "onFocusOut" == l2 || "onFocusIn" == l2 ? l2.toLowerCase().slice(2) : l2.slice(2), n2.l || (n2.l = {}), n2.l[l2 + r2] = u2, u2 ? t2 ? u2.u = t2.u : (u2.u = c, n2.addEventListener(l2, r2 ? a : s, r2)) : n2.removeEventListener(l2, r2 ? a : s, r2); + else { + if ("http://www.w3.org/2000/svg" == i2) l2 = l2.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); + else if ("width" != l2 && "height" != l2 && "href" != l2 && "list" != l2 && "form" != l2 && "tabIndex" != l2 && "download" != l2 && "rowSpan" != l2 && "colSpan" != l2 && "role" != l2 && "popover" != l2 && l2 in n2) try { + n2[l2] = null == u2 ? "" : u2; + break n; + } catch (n3) { + } + "function" == typeof u2 || (null == u2 || false === u2 && "-" != l2[4] ? n2.removeAttribute(l2) : n2.setAttribute(l2, "popover" == l2 && 1 == u2 ? "" : u2)); + } +} +function F(n2) { + return function(u2) { + if (this.l) { + var t2 = this.l[u2.type + n2]; + if (null == u2.t) u2.t = c++; + else if (u2.t < t2.u) return; + return t2(l.event ? l.event(u2) : u2); + } + }; +} +function O(n2, u2, t2, i2, r2, o2, e2, f2, c2, s2) { + var a2, h2, p2, y2, v2, _2, m2, b2, S2, C2, M2, $2, P2, A2, H2, L2, T2, j2 = u2.type; + if (null != u2.constructor) return null; + 128 & t2.__u && (c2 = !!(32 & t2.__u), o2 = [f2 = u2.__e = t2.__e]), (a2 = l.__b) && a2(u2); + n: if ("function" == typeof j2) try { + if (b2 = u2.props, S2 = "prototype" in j2 && j2.prototype.render, C2 = (a2 = j2.contextType) && i2[a2.__c], M2 = a2 ? C2 ? C2.props.value : a2.__ : i2, t2.__c ? m2 = (h2 = u2.__c = t2.__c).__ = h2.__E : (S2 ? u2.__c = h2 = new j2(b2, M2) : (u2.__c = h2 = new x(b2, M2), h2.constructor = j2, h2.render = D), C2 && C2.sub(h2), h2.props = b2, h2.state || (h2.state = {}), h2.context = M2, h2.__n = i2, p2 = h2.__d = true, h2.__h = [], h2._sb = []), S2 && null == h2.__s && (h2.__s = h2.state), S2 && null != j2.getDerivedStateFromProps && (h2.__s == h2.state && (h2.__s = d({}, h2.__s)), d(h2.__s, j2.getDerivedStateFromProps(b2, h2.__s))), y2 = h2.props, v2 = h2.state, h2.__v = u2, p2) S2 && null == j2.getDerivedStateFromProps && null != h2.componentWillMount && h2.componentWillMount(), S2 && null != h2.componentDidMount && h2.__h.push(h2.componentDidMount); + else { + if (S2 && null == j2.getDerivedStateFromProps && b2 !== y2 && null != h2.componentWillReceiveProps && h2.componentWillReceiveProps(b2, M2), !h2.__e && null != h2.shouldComponentUpdate && false === h2.shouldComponentUpdate(b2, h2.__s, M2) || u2.__v == t2.__v) { + for (u2.__v != t2.__v && (h2.props = b2, h2.state = h2.__s, h2.__d = false), u2.__e = t2.__e, u2.__k = t2.__k, u2.__k.some(function(n3) { + n3 && (n3.__ = u2); + }), $2 = 0; $2 < h2._sb.length; $2++) h2.__h.push(h2._sb[$2]); + h2._sb = [], h2.__h.length && e2.push(h2); + break n; + } + null != h2.componentWillUpdate && h2.componentWillUpdate(b2, h2.__s, M2), S2 && null != h2.componentDidUpdate && h2.__h.push(function() { + h2.componentDidUpdate(y2, v2, _2); + }); + } + if (h2.context = M2, h2.props = b2, h2.__P = n2, h2.__e = false, P2 = l.__r, A2 = 0, S2) { + for (h2.state = h2.__s, h2.__d = false, P2 && P2(u2), a2 = h2.render(h2.props, h2.state, h2.context), H2 = 0; H2 < h2._sb.length; H2++) h2.__h.push(h2._sb[H2]); + h2._sb = []; + } else do { + h2.__d = false, P2 && P2(u2), a2 = h2.render(h2.props, h2.state, h2.context), h2.state = h2.__s; + } while (h2.__d && ++A2 < 25); + h2.state = h2.__s, null != h2.getChildContext && (i2 = d(d({}, i2), h2.getChildContext())), S2 && !p2 && null != h2.getSnapshotBeforeUpdate && (_2 = h2.getSnapshotBeforeUpdate(y2, v2)), L2 = a2, null != a2 && a2.type === k && null == a2.key && (L2 = N(a2.props.children)), f2 = I(n2, w(L2) ? L2 : [L2], u2, t2, i2, r2, o2, e2, f2, c2, s2), h2.base = u2.__e, u2.__u &= -161, h2.__h.length && e2.push(h2), m2 && (h2.__E = h2.__ = null); + } catch (n3) { + if (u2.__v = null, c2 || null != o2) if (n3.then) { + for (u2.__u |= c2 ? 160 : 128; f2 && 8 == f2.nodeType && f2.nextSibling; ) f2 = f2.nextSibling; + o2[o2.indexOf(f2)] = null, u2.__e = f2; + } else for (T2 = o2.length; T2--; ) g(o2[T2]); + else u2.__e = t2.__e, u2.__k = t2.__k; + l.__e(n3, u2, t2); + } + else null == o2 && u2.__v == t2.__v ? (u2.__k = t2.__k, u2.__e = t2.__e) : f2 = u2.__e = V(t2.__e, u2, t2, i2, r2, o2, e2, c2, s2); + return (a2 = l.diffed) && a2(u2), 128 & u2.__u ? void 0 : f2; +} +function z(n2, u2, t2) { + for (var i2 = 0; i2 < t2.length; i2++) q(t2[i2], t2[++i2], t2[++i2]); + l.__c && l.__c(u2, n2), n2.some(function(u3) { + try { + n2 = u3.__h, u3.__h = [], n2.some(function(n3) { + n3.call(u3); + }); + } catch (n3) { + l.__e(n3, u3.__v); + } + }); +} +function N(n2) { + return "object" != typeof n2 || null == n2 || n2.__b && n2.__b > 0 ? n2 : w(n2) ? n2.map(N) : d({}, n2); +} +function V(u2, t2, i2, r2, o2, e2, f2, c2, s2) { + var a2, h2, y2, v2, d2, _2, m2, b2 = i2.props, k2 = t2.props, x2 = t2.type; + if ("svg" == x2 ? o2 = "http://www.w3.org/2000/svg" : "math" == x2 ? o2 = "http://www.w3.org/1998/Math/MathML" : o2 || (o2 = "http://www.w3.org/1999/xhtml"), null != e2) { + for (a2 = 0; a2 < e2.length; a2++) if ((d2 = e2[a2]) && "setAttribute" in d2 == !!x2 && (x2 ? d2.localName == x2 : 3 == d2.nodeType)) { + u2 = d2, e2[a2] = null; + break; + } + } + if (null == u2) { + if (null == x2) return document.createTextNode(k2); + u2 = document.createElementNS(o2, x2, k2.is && k2), c2 && (l.__m && l.__m(t2, e2), c2 = false), e2 = null; + } + if (null == x2) b2 === k2 || c2 && u2.data == k2 || (u2.data = k2); + else { + if (e2 = e2 && n.call(u2.childNodes), b2 = i2.props || p, !c2 && null != e2) for (b2 = {}, a2 = 0; a2 < u2.attributes.length; a2++) b2[(d2 = u2.attributes[a2]).name] = d2.value; + for (a2 in b2) if (d2 = b2[a2], "children" == a2) ; + else if ("dangerouslySetInnerHTML" == a2) y2 = d2; + else if (!(a2 in k2)) { + if ("value" == a2 && "defaultValue" in k2 || "checked" == a2 && "defaultChecked" in k2) continue; + j(u2, a2, null, d2, o2); + } + for (a2 in k2) d2 = k2[a2], "children" == a2 ? v2 = d2 : "dangerouslySetInnerHTML" == a2 ? h2 = d2 : "value" == a2 ? _2 = d2 : "checked" == a2 ? m2 = d2 : c2 && "function" != typeof d2 || b2[a2] === d2 || j(u2, a2, d2, b2[a2], o2); + if (h2) c2 || y2 && (h2.__html == y2.__html || h2.__html == u2.innerHTML) || (u2.innerHTML = h2.__html), t2.__k = []; + else if (y2 && (u2.innerHTML = ""), I("template" == t2.type ? u2.content : u2, w(v2) ? v2 : [v2], t2, i2, r2, "foreignObject" == x2 ? "http://www.w3.org/1999/xhtml" : o2, e2, f2, e2 ? e2[0] : i2.__k && S(i2, 0), c2, s2), null != e2) for (a2 = e2.length; a2--; ) g(e2[a2]); + c2 || (a2 = "value", "progress" == x2 && null == _2 ? u2.removeAttribute("value") : null != _2 && (_2 !== u2[a2] || "progress" == x2 && !_2 || "option" == x2 && _2 != b2[a2]) && j(u2, a2, _2, b2[a2], o2), a2 = "checked", null != m2 && m2 != u2[a2] && j(u2, a2, m2, b2[a2], o2)); + } + return u2; +} +function q(n2, u2, t2) { + try { + if ("function" == typeof n2) { + var i2 = "function" == typeof n2.__u; + i2 && n2.__u(), i2 && null == u2 || (n2.__u = n2(u2)); + } else n2.current = u2; + } catch (n3) { + l.__e(n3, t2); + } +} +function B(n2, u2, t2) { + var i2, r2; + if (l.unmount && l.unmount(n2), (i2 = n2.ref) && (i2.current && i2.current != n2.__e || q(i2, null, u2)), null != (i2 = n2.__c)) { + if (i2.componentWillUnmount) try { + i2.componentWillUnmount(); + } catch (n3) { + l.__e(n3, u2); + } + i2.base = i2.__P = null; + } + if (i2 = n2.__k) for (r2 = 0; r2 < i2.length; r2++) i2[r2] && B(i2[r2], u2, t2 || "function" != typeof n2.type); + t2 || g(n2.__e), n2.__c = n2.__ = n2.__e = void 0; +} +function D(n2, l2, u2) { + return this.constructor(n2, u2); +} +function E(u2, t2, i2) { + var r2, o2, e2, f2; + t2 == document && (t2 = document.documentElement), l.__ && l.__(u2, t2), o2 = (r2 = "function" == typeof i2) ? null : i2 && i2.__k || t2.__k, e2 = [], f2 = [], O(t2, u2 = (!r2 && i2 || t2).__k = _(k, null, [u2]), o2 || p, p, t2.namespaceURI, !r2 && i2 ? [i2] : o2 ? null : t2.firstChild ? n.call(t2.childNodes) : null, e2, !r2 && i2 ? i2 : o2 ? o2.__e : t2.firstChild, r2, f2), z(e2, u2, f2); +} +function G(n2, l2) { + E(n2, l2, G); +} +function J(l2, u2, t2) { + var i2, r2, o2, e2, f2 = d({}, l2.props); + for (o2 in l2.type && l2.type.defaultProps && (e2 = l2.type.defaultProps), u2) "key" == o2 ? i2 = u2[o2] : "ref" == o2 ? r2 = u2[o2] : f2[o2] = null == u2[o2] && null != e2 ? e2[o2] : u2[o2]; + return arguments.length > 2 && (f2.children = arguments.length > 3 ? n.call(arguments, 2) : t2), m(l2.type, f2, i2 || l2.key, r2 || l2.ref, null); +} +function K(n2) { + function l2(n3) { + var u2, t2; + return this.getChildContext || (u2 = /* @__PURE__ */ new Set(), (t2 = {})[l2.__c] = this, this.getChildContext = function() { + return t2; + }, this.componentWillUnmount = function() { + u2 = null; + }, this.shouldComponentUpdate = function(n4) { + this.props.value != n4.value && u2.forEach(function(n5) { + n5.__e = true, M(n5); + }); + }, this.sub = function(n4) { + u2.add(n4); + var l3 = n4.componentWillUnmount; + n4.componentWillUnmount = function() { + u2 && u2.delete(n4), l3 && l3.call(n4); + }; + }), n3.children; + } + return l2.__c = "__cC" + h++, l2.__ = n2, l2.Provider = l2.__l = (l2.Consumer = function(n3, l3) { + return n3.children(l3); + }).contextType = l2, l2; +} +n = y.slice, l = { __e: function(n2, l2, u2, t2) { + for (var i2, r2, o2; l2 = l2.__; ) if ((i2 = l2.__c) && !i2.__) try { + if ((r2 = i2.constructor) && null != r2.getDerivedStateFromError && (i2.setState(r2.getDerivedStateFromError(n2)), o2 = i2.__d), null != i2.componentDidCatch && (i2.componentDidCatch(n2, t2 || {}), o2 = i2.__d), o2) return i2.__E = i2; + } catch (l3) { + n2 = l3; + } + throw n2; +} }, u = 0, t = function(n2) { + return null != n2 && null == n2.constructor; +}, x.prototype.setState = function(n2, l2) { + var u2; + u2 = null != this.__s && this.__s != this.state ? this.__s : this.__s = d({}, this.state), "function" == typeof n2 && (n2 = n2(d({}, u2), this.props)), n2 && d(u2, n2), null != n2 && this.__v && (l2 && this._sb.push(l2), M(this)); +}, x.prototype.forceUpdate = function(n2) { + this.__v && (this.__e = true, n2 && this.__h.push(n2), M(this)); +}, x.prototype.render = k, i = [], o = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, e = function(n2, l2) { + return n2.__v.__b - l2.__v.__b; +}, $.__r = 0, f = /(PointerCapture)$|Capture$/i, c = 0, s = F(false), a = F(true), h = 0; + +export { + l, + t, + _, + b, + k, + x, + H, + E, + G, + J, + K +}; +//# sourceMappingURL=chunk-WFLWNDNR.js.map diff --git a/.vite/deps/chunk-WFLWNDNR.js.map b/.vite/deps/chunk-WFLWNDNR.js.map new file mode 100644 index 0000000..c1d91d7 --- /dev/null +++ b/.vite/deps/chunk-WFLWNDNR.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/preact/src/constants.js", "../../node_modules/preact/src/util.js", "../../node_modules/preact/src/options.js", "../../node_modules/preact/src/create-element.js", "../../node_modules/preact/src/component.js", "../../node_modules/preact/src/diff/props.js", "../../node_modules/preact/src/create-context.js", "../../node_modules/preact/src/diff/children.js", "../../node_modules/preact/src/diff/index.js", "../../node_modules/preact/src/render.js", "../../node_modules/preact/src/clone-element.js", "../../node_modules/preact/src/diff/catch-error.js"], + "sourcesContent": ["/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 2;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 1;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nexport const XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nexport const MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\nexport const NULL = null;\nexport const UNDEFINED = undefined;\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { EMPTY_ARR } from './constants';\n\nexport const isArray = Array.isArray;\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-expect-error We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {import('./index').ContainerNode} node The node to remove\n */\nexport function removeNode(node) {\n\tif (node && node.parentNode) node.parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {import('./internal').Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\nimport { NULL, UNDEFINED } from './constants';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor for this\n * virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array} [children] The children of the\n * virtual node\n * @returns {import('./internal').VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != NULL) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] == UNDEFINED) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, NULL);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {import('./internal').VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\t/** @type {import('./internal').VNode} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: NULL,\n\t\t_parent: NULL,\n\t\t_depth: 0,\n\t\t_dom: NULL,\n\t\t_component: NULL,\n\t\tconstructor: UNDEFINED,\n\t\t_original: original == NULL ? ++vnodeId : original,\n\t\t_index: -1,\n\t\t_flags: 0\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == NULL && options.vnode != NULL) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: NULL };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != NULL && vnode.constructor == UNDEFINED;\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE, NULL } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {import('./internal').Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != NULL && this._nextState != this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == NULL) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {import('./internal').Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](https://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {import('./internal').VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == NULL) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: NULL;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != NULL && sibling._dom != NULL) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : NULL;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {import('./internal').Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet oldVNode = component._vnode,\n\t\toldDom = oldVNode._dom,\n\t\tcommitQueue = [],\n\t\trefQueue = [];\n\n\tif (component._parentDom) {\n\t\tconst newVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : NULL,\n\t\t\tcommitQueue,\n\t\t\toldDom == NULL ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {import('./internal').VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != NULL && vnode._component != NULL) {\n\t\tvnode._dom = vnode._component.base = NULL;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != NULL && child._dom != NULL) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./internal').Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce != options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {import('./internal').Component} a\n * @param {import('./internal').Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet c,\n\t\tl = 1;\n\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile (rerenderQueue.length) {\n\t\t// Keep the rerender queue sorted by (depth, insertion order). The queue\n\t\t// will initially be sorted on the first iteration only if it has more than 1 item.\n\t\t//\n\t\t// New items can be added to the queue e.g. when rerendering a provider, so we want to\n\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t// single pass\n\t\tif (rerenderQueue.length > l) {\n\t\t\trerenderQueue.sort(depthSort);\n\t\t}\n\n\t\tc = rerenderQueue.shift();\n\t\tl = rerenderQueue.length;\n\n\t\tif (c._dirty) {\n\t\t\trenderComponent(c);\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\n}\n\nprocess._rerenderCount = 0;\n", "import { IS_NON_DIMENSIONAL, NULL, SVG_NAMESPACE } from '../constants';\nimport options from '../options';\n\nfunction setStyle(style, key, value) {\n\tif (key[0] == '-') {\n\t\tstyle.setProperty(key, value == NULL ? '' : value);\n\t} else if (value == NULL) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\nconst CAPTURE_REGEX = /(PointerCapture)$|Capture$/i;\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {import('../internal').PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name == 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] != oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] == 'o' && name[1] == 'n') {\n\t\tuseCapture = name != (name = name.replace(CAPTURE_REGEX, '$1'));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (\n\t\t\tname.toLowerCase() in dom ||\n\t\t\tname == 'onFocusOut' ||\n\t\t\tname == 'onFocusIn'\n\t\t)\n\t\t\tname = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue._attached = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue._attached = oldValue._attached;\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == SVG_NAMESPACE) {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname != 'popover' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == NULL ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != NULL && (value !== false || name[4] == '-')) {\n\t\t\tdom.setAttribute(name, name == 'popover' && value == true ? '' : value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {import('../internal').PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e._dispatched == NULL) {\n\t\t\t\te._dispatched = eventClock++;\n\n\t\t\t\t// When `e._dispatched` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e._dispatched < eventHandler._attached) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n", "import { enqueueRender } from './component';\nimport { NULL } from './constants';\n\nexport let i = 0;\n\nexport function createContext(defaultValue) {\n\tfunction Context(props) {\n\t\tif (!this.getChildContext) {\n\t\t\t/** @type {Set | null} */\n\t\t\tlet subs = new Set();\n\t\t\tlet ctx = {};\n\t\t\tctx[Context._id] = this;\n\n\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\tthis.componentWillUnmount = () => {\n\t\t\t\tsubs = NULL;\n\t\t\t};\n\n\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t// @ts-expect-error even\n\t\t\t\tif (this.props.value != _props.value) {\n\t\t\t\t\tsubs.forEach(c => {\n\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.sub = c => {\n\t\t\t\tsubs.add(c);\n\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\tif (subs) {\n\t\t\t\t\t\tsubs.delete(c);\n\t\t\t\t\t}\n\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\treturn props.children;\n\t}\n\n\tContext._id = '__cC' + i++;\n\tContext._defaultValue = defaultValue;\n\n\t/** @type {import('./internal').FunctionComponent} */\n\tContext.Consumer = (props, contextValue) => {\n\t\treturn props.children(contextValue);\n\t};\n\n\t// we could also get rid of _contextRef entirely\n\tContext.Provider =\n\t\tContext._contextRef =\n\t\tContext.Consumer.contextType =\n\t\t\tContext;\n\n\treturn Context;\n}\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport {\n\tEMPTY_OBJ,\n\tEMPTY_ARR,\n\tINSERT_VNODE,\n\tMATCHED,\n\tUNDEFINED,\n\tNULL\n} from '../constants';\nimport { isArray } from '../util';\nimport { getDomSibling } from '../component';\n\n/**\n * @typedef {import('../internal').ComponentChildren} ComponentChildren\n * @typedef {import('../internal').Component} Component\n * @typedef {import('../internal').PreactElement} PreactElement\n * @typedef {import('../internal').VNode} VNode\n */\n\n/**\n * Diff the children of a virtual node\n * @param {PreactElement} parentDom The DOM element whose children are being\n * diffed\n * @param {ComponentChildren[]} renderResult\n * @param {VNode} newParentVNode The new virtual node whose children should be\n * diff'ed against oldParentVNode\n * @param {VNode} oldParentVNode The old virtual node whose children should be\n * diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array} excessDomChildren\n * @param {Array} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\tlet i,\n\t\t/** @type {VNode} */\n\t\toldVNode,\n\t\t/** @type {VNode} */\n\t\tchildVNode,\n\t\t/** @type {PreactElement} */\n\t\tnewDom,\n\t\t/** @type {PreactElement} */\n\t\tfirstChildDom;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\t/** @type {VNode[]} */\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet newChildrenLength = renderResult.length;\n\n\toldDom = constructNewChildrenArray(\n\t\tnewParentVNode,\n\t\trenderResult,\n\t\toldChildren,\n\t\toldDom,\n\t\tnewChildrenLength\n\t);\n\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\tchildVNode = newParentVNode._children[i];\n\t\tif (childVNode == NULL) continue;\n\n\t\t// At this point, constructNewChildrenArray has assigned _index to be the\n\t\t// matchingIndex for this VNode's oldVNode (or -1 if there is no oldVNode).\n\t\tif (childVNode._index == -1) {\n\t\t\toldVNode = EMPTY_OBJ;\n\t\t} else {\n\t\t\toldVNode = oldChildren[childVNode._index] || EMPTY_OBJ;\n\t\t}\n\n\t\t// Update childVNode._index to its final index\n\t\tchildVNode._index = i;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tlet result = diff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\n\t\t// Adjust DOM nodes\n\t\tnewDom = childVNode._dom;\n\t\tif (childVNode.ref && oldVNode.ref != childVNode.ref) {\n\t\t\tif (oldVNode.ref) {\n\t\t\t\tapplyRef(oldVNode.ref, NULL, childVNode);\n\t\t\t}\n\t\t\trefQueue.push(\n\t\t\t\tchildVNode.ref,\n\t\t\t\tchildVNode._component || newDom,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t}\n\n\t\tif (firstChildDom == NULL && newDom != NULL) {\n\t\t\tfirstChildDom = newDom;\n\t\t}\n\n\t\tif (\n\t\t\tchildVNode._flags & INSERT_VNODE ||\n\t\t\toldVNode._children === childVNode._children\n\t\t) {\n\t\t\toldDom = insert(childVNode, oldDom, parentDom);\n\t\t} else if (typeof childVNode.type == 'function' && result !== UNDEFINED) {\n\t\t\toldDom = result;\n\t\t} else if (newDom) {\n\t\t\toldDom = newDom.nextSibling;\n\t\t}\n\n\t\t// Unset diffing flags\n\t\tchildVNode._flags &= ~(INSERT_VNODE | MATCHED);\n\t}\n\n\tnewParentVNode._dom = firstChildDom;\n\n\treturn oldDom;\n}\n\n/**\n * @param {VNode} newParentVNode\n * @param {ComponentChildren[]} renderResult\n * @param {VNode[]} oldChildren\n */\nfunction constructNewChildrenArray(\n\tnewParentVNode,\n\trenderResult,\n\toldChildren,\n\toldDom,\n\tnewChildrenLength\n) {\n\t/** @type {number} */\n\tlet i;\n\t/** @type {VNode} */\n\tlet childVNode;\n\t/** @type {VNode} */\n\tlet oldVNode;\n\n\tlet oldChildrenLength = oldChildren.length,\n\t\tremainingOldChildren = oldChildrenLength;\n\n\tlet skew = 0;\n\n\tnewParentVNode._children = new Array(newChildrenLength);\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\t// @ts-expect-error We are reusing the childVNode variable to hold both the\n\t\t// pre and post normalized childVNode\n\t\tchildVNode = renderResult[i];\n\n\t\tif (\n\t\t\tchildVNode == NULL ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tnewParentVNode._children[i] = NULL;\n\t\t\tcontinue;\n\t\t}\n\t\t// If this newVNode is being reused (e.g.
{reuse}{reuse}
) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint' ||\n\t\t\tchildVNode.constructor == String\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tNULL,\n\t\t\t\tchildVNode,\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL\n\t\t\t);\n\t\t} else if (isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tNULL,\n\t\t\t\tNULL,\n\t\t\t\tNULL\n\t\t\t);\n\t\t} else if (childVNode.constructor == UNDEFINED && childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t// const reuse =
\n\t\t\t//
{reuse}{reuse}
\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : NULL,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\tconst skewedIndex = i + skew;\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\t// Temporarily store the matchingIndex on the _index property so we can pull\n\t\t// out the oldVNode in diffChildren. We'll override this to the VNode's\n\t\t// final index after using this property to get the oldVNode\n\t\tconst matchingIndex = (childVNode._index = findMatchingIndex(\n\t\t\tchildVNode,\n\t\t\toldChildren,\n\t\t\tskewedIndex,\n\t\t\tremainingOldChildren\n\t\t));\n\n\t\toldVNode = NULL;\n\t\tif (matchingIndex != -1) {\n\t\t\toldVNode = oldChildren[matchingIndex];\n\t\t\tremainingOldChildren--;\n\t\t\tif (oldVNode) {\n\t\t\t\toldVNode._flags |= MATCHED;\n\t\t\t}\n\t\t}\n\n\t\t// Here, we define isMounting for the purposes of the skew diffing\n\t\t// algorithm. Nodes that are unsuspending are considered mounting and we detect\n\t\t// this by checking if oldVNode._original == null\n\t\tconst isMounting = oldVNode == NULL || oldVNode._original == NULL;\n\n\t\tif (isMounting) {\n\t\t\tif (matchingIndex == -1) {\n\t\t\t\t// When the array of children is growing we need to decrease the skew\n\t\t\t\t// as we are adding a new element to the array.\n\t\t\t\t// Example:\n\t\t\t\t// [1, 2, 3] --> [0, 1, 2, 3]\n\t\t\t\t// oldChildren newChildren\n\t\t\t\t//\n\t\t\t\t// The new element is at index 0, so our skew is 0,\n\t\t\t\t// we need to decrease the skew as we are adding a new element.\n\t\t\t\t// The decrease will cause us to compare the element at position 1\n\t\t\t\t// with value 1 with the element at position 0 with value 0.\n\t\t\t\t//\n\t\t\t\t// A linear concept is applied when the array is shrinking,\n\t\t\t\t// if the length is unchanged we can assume that no skew\n\t\t\t\t// changes are needed.\n\t\t\t\tif (newChildrenLength > oldChildrenLength) {\n\t\t\t\t\tskew--;\n\t\t\t\t} else if (newChildrenLength < oldChildrenLength) {\n\t\t\t\t\tskew++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we are mounting a DOM VNode, mark it for insertion\n\t\t\tif (typeof childVNode.type != 'function') {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t} else if (matchingIndex != skewedIndex) {\n\t\t\t// When we move elements around i.e. [0, 1, 2] --> [1, 0, 2]\n\t\t\t// --> we diff 1, we find it at position 1 while our skewed index is 0 and our skew is 0\n\t\t\t// we set the skew to 1 as we found an offset.\n\t\t\t// --> we diff 0, we find it at position 0 while our skewed index is at 2 and our skew is 1\n\t\t\t// this makes us increase the skew again.\n\t\t\t// --> we diff 2, we find it at position 2 while our skewed index is at 4 and our skew is 2\n\t\t\t//\n\t\t\t// this becomes an optimization question where currently we see a 1 element offset as an insertion\n\t\t\t// or deletion i.e. we optimize for [0, 1, 2] --> [9, 0, 1, 2]\n\t\t\t// while a more than 1 offset we see as a swap.\n\t\t\t// We could probably build heuristics for having an optimized course of action here as well, but\n\t\t\t// might go at the cost of some bytes.\n\t\t\t//\n\t\t\t// If we wanted to optimize for i.e. only swaps we'd just do the last two code-branches and have\n\t\t\t// only the first item be a re-scouting and all the others fall in their skewed counter-part.\n\t\t\t// We could also further optimize for swaps\n\t\t\tif (matchingIndex == skewedIndex - 1) {\n\t\t\t\tskew--;\n\t\t\t} else if (matchingIndex == skewedIndex + 1) {\n\t\t\t\tskew++;\n\t\t\t} else {\n\t\t\t\tif (matchingIndex > skewedIndex) {\n\t\t\t\t\tskew--;\n\t\t\t\t} else {\n\t\t\t\t\tskew++;\n\t\t\t\t}\n\n\t\t\t\t// Move this VNode's DOM if the original index (matchingIndex) doesn't\n\t\t\t\t// match the new skew index (i + new skew)\n\t\t\t\t// In the former two branches we know that it matches after skewing\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove remaining oldChildren if there are any. Loop forwards so that as we\n\t// unmount DOM from the beginning of the oldChildren, we can adjust oldDom to\n\t// point to the next child, which needs to be the first DOM node that won't be\n\t// unmounted.\n\tif (remainingOldChildren) {\n\t\tfor (i = 0; i < oldChildrenLength; i++) {\n\t\t\toldVNode = oldChildren[i];\n\t\t\tif (oldVNode != NULL && (oldVNode._flags & MATCHED) == 0) {\n\t\t\t\tif (oldVNode._dom == oldDom) {\n\t\t\t\t\toldDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn oldDom;\n}\n\n/**\n * @param {VNode} parentVNode\n * @param {PreactElement} oldDom\n * @param {PreactElement} parentDom\n * @returns {PreactElement}\n */\nfunction insert(parentVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\n\tif (typeof parentVNode.type == 'function') {\n\t\tlet children = parentVNode._children;\n\t\tfor (let i = 0; children && i < children.length; i++) {\n\t\t\tif (children[i]) {\n\t\t\t\t// If we enter this code path on sCU bailout, where we copy\n\t\t\t\t// oldVNode._children to newVNode._children, we need to update the old\n\t\t\t\t// children's _parent pointer to point to the newVNode (parentVNode\n\t\t\t\t// here).\n\t\t\t\tchildren[i]._parent = parentVNode;\n\t\t\t\toldDom = insert(children[i], oldDom, parentDom);\n\t\t\t}\n\t\t}\n\n\t\treturn oldDom;\n\t} else if (parentVNode._dom != oldDom) {\n\t\tif (oldDom && parentVNode.type && !parentDom.contains(oldDom)) {\n\t\t\toldDom = getDomSibling(parentVNode);\n\t\t}\n\t\tparentDom.insertBefore(parentVNode._dom, oldDom || NULL);\n\t\toldDom = parentVNode._dom;\n\t}\n\n\tdo {\n\t\toldDom = oldDom && oldDom.nextSibling;\n\t} while (oldDom != NULL && oldDom.nodeType == 8);\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {ComponentChildren} children The unflattened children of a virtual\n * node\n * @returns {VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == NULL || typeof children == 'boolean') {\n\t} else if (isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\n/**\n * @param {VNode} childVNode\n * @param {VNode[]} oldChildren\n * @param {number} skewedIndex\n * @param {number} remainingOldChildren\n * @returns {number}\n */\nfunction findMatchingIndex(\n\tchildVNode,\n\toldChildren,\n\tskewedIndex,\n\tremainingOldChildren\n) {\n\tconst key = childVNode.key;\n\tconst type = childVNode.type;\n\tlet oldVNode = oldChildren[skewedIndex];\n\n\t// We only need to perform a search if there are more children\n\t// (remainingOldChildren) to search. However, if the oldVNode we just looked\n\t// at skewedIndex was not already used in this diff, then there must be at\n\t// least 1 other (so greater than 1) remainingOldChildren to attempt to match\n\t// against. So the following condition checks that ensuring\n\t// remainingOldChildren > 1 if the oldVNode is not already used/matched. Else\n\t// if the oldVNode was null or matched, then there could needs to be at least\n\t// 1 (aka `remainingOldChildren > 0`) children to find and compare against.\n\t//\n\t// If there is an unkeyed functional VNode, that isn't a built-in like our Fragment,\n\t// we should not search as we risk re-using state of an unrelated VNode. (reverted for now)\n\tlet shouldSearch =\n\t\t// (typeof type != 'function' || type === Fragment || key) &&\n\t\tremainingOldChildren >\n\t\t(oldVNode != NULL && (oldVNode._flags & MATCHED) == 0 ? 1 : 0);\n\n\tif (\n\t\t(oldVNode === NULL && childVNode.key == null) ||\n\t\t(oldVNode &&\n\t\t\tkey == oldVNode.key &&\n\t\t\ttype == oldVNode.type &&\n\t\t\t(oldVNode._flags & MATCHED) == 0)\n\t) {\n\t\treturn skewedIndex;\n\t} else if (shouldSearch) {\n\t\tlet x = skewedIndex - 1;\n\t\tlet y = skewedIndex + 1;\n\t\twhile (x >= 0 || y < oldChildren.length) {\n\t\t\tif (x >= 0) {\n\t\t\t\toldVNode = oldChildren[x];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) == 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype == oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn x;\n\t\t\t\t}\n\t\t\t\tx--;\n\t\t\t}\n\n\t\t\tif (y < oldChildren.length) {\n\t\t\t\toldVNode = oldChildren[y];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) == 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype == oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn y;\n\t\t\t\t}\n\t\t\t\ty++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn -1;\n}\n", "import {\n\tEMPTY_OBJ,\n\tMATH_NAMESPACE,\n\tMODE_HYDRATE,\n\tMODE_SUSPENDED,\n\tNULL,\n\tRESET_MODE,\n\tSVG_NAMESPACE,\n\tUNDEFINED,\n\tXHTML_NAMESPACE\n} from '../constants';\nimport { BaseComponent, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { setProperty } from './props';\nimport { assign, isArray, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * @typedef {import('../internal').ComponentChildren} ComponentChildren\n * @typedef {import('../internal').Component} Component\n * @typedef {import('../internal').PreactElement} PreactElement\n * @typedef {import('../internal').VNode} VNode\n */\n\n/**\n * @template {any} T\n * @typedef {import('../internal').Ref} Ref\n */\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {PreactElement} parentDom The parent of the DOM element\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array} excessDomChildren\n * @param {Array} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\t/** @type {any} */\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor != UNDEFINED) return NULL;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._flags & MODE_SUSPENDED) {\n\t\tisHydrating = !!(oldVNode._flags & MODE_HYDRATE);\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\touter: if (typeof newType == 'function') {\n\t\ttry {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\t\t\tconst isClassComponent =\n\t\t\t\t'prototype' in newType && newType.prototype.render;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif (isClassComponent) {\n\t\t\t\t\t// @ts-expect-error The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-expect-error Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new BaseComponent(\n\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (isClassComponent && c._nextState == NULL) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (isClassComponent && newType.getDerivedStateFromProps != NULL) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tisClassComponent &&\n\t\t\t\t\tnewType.getDerivedStateFromProps == NULL &&\n\t\t\t\t\tc.componentWillMount != NULL\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (isClassComponent && c.componentDidMount != NULL) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tisClassComponent &&\n\t\t\t\t\tnewType.getDerivedStateFromProps == NULL &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != NULL\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(!c._force &&\n\t\t\t\t\t\tc.shouldComponentUpdate != NULL &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\tnewVNode._original == oldVNode._original\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original != oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.some(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != NULL) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (isClassComponent && c.componentDidUpdate != NULL) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\t\t\tc._force = false;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif (isClassComponent) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != NULL) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (isClassComponent && !isNew && c.getSnapshotBeforeUpdate != NULL) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != NULL && tmp.type === Fragment && tmp.key == NULL;\n\t\t\tlet renderResult = tmp;\n\n\t\t\tif (isTopLevelFragment) {\n\t\t\t\trenderResult = cloneNode(tmp.props.children);\n\t\t\t}\n\n\t\t\toldDom = diffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tisArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnamespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._flags &= RESET_MODE;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = NULL;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnewVNode._original = NULL;\n\t\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\t\tif (isHydrating || excessDomChildren != NULL) {\n\t\t\t\tif (e.then) {\n\t\t\t\t\tnewVNode._flags |= isHydrating\n\t\t\t\t\t\t? MODE_HYDRATE | MODE_SUSPENDED\n\t\t\t\t\t\t: MODE_SUSPENDED;\n\n\t\t\t\t\twhile (oldDom && oldDom.nodeType == 8 && oldDom.nextSibling) {\n\t\t\t\t\t\toldDom = oldDom.nextSibling;\n\t\t\t\t\t}\n\n\t\t\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = NULL;\n\t\t\t\t\tnewVNode._dom = oldDom;\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = excessDomChildren.length; i--; ) {\n\t\t\t\t\t\tremoveNode(excessDomChildren[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t}\n\t\t\toptions._catchError(e, newVNode, oldVNode);\n\t\t}\n\t} else if (\n\t\texcessDomChildren == NULL &&\n\t\tnewVNode._original == oldVNode._original\n\t) {\n\t\tnewVNode._children = oldVNode._children;\n\t\tnewVNode._dom = oldVNode._dom;\n\t} else {\n\t\toldDom = newVNode._dom = diffElementNodes(\n\t\t\toldVNode._dom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\t}\n\n\tif ((tmp = options.diffed)) tmp(newVNode);\n\n\treturn newVNode._flags & MODE_SUSPENDED ? undefined : oldDom;\n}\n\n/**\n * @param {Array} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {VNode} root\n */\nexport function commitRoot(commitQueue, root, refQueue) {\n\tfor (let i = 0; i < refQueue.length; i++) {\n\t\tapplyRef(refQueue[i], refQueue[++i], refQueue[++i]);\n\t}\n\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-expect-error Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-expect-error See above comment on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\nfunction cloneNode(node) {\n\tif (\n\t\ttypeof node != 'object' ||\n\t\tnode == NULL ||\n\t\t(node._depth && node._depth > 0)\n\t) {\n\t\treturn node;\n\t}\n\n\tif (isArray(node)) {\n\t\treturn node.map(cloneNode);\n\t}\n\n\treturn assign({}, node);\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {PreactElement} dom The DOM element representing the virtual nodes\n * being diffed\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array} excessDomChildren\n * @param {Array} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n * @returns {PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating,\n\trefQueue\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = /** @type {string} */ (newVNode.type);\n\t/** @type {any} */\n\tlet i;\n\t/** @type {{ __html?: string }} */\n\tlet newHtml;\n\t/** @type {{ __html?: string }} */\n\tlet oldHtml;\n\t/** @type {ComponentChildren} */\n\tlet newChildren;\n\tlet value;\n\tlet inputValue;\n\tlet checked;\n\n\t// Tracks entering and exiting namespaces when descending through the tree.\n\tif (nodeType == 'svg') namespace = SVG_NAMESPACE;\n\telse if (nodeType == 'math') namespace = MATH_NAMESPACE;\n\telse if (!namespace) namespace = XHTML_NAMESPACE;\n\n\tif (excessDomChildren != NULL) {\n\t\tfor (i = 0; i < excessDomChildren.length; i++) {\n\t\t\tvalue = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tvalue &&\n\t\t\t\t'setAttribute' in value == !!nodeType &&\n\t\t\t\t(nodeType ? value.localName == nodeType : value.nodeType == 3)\n\t\t\t) {\n\t\t\t\tdom = value;\n\t\t\t\texcessDomChildren[i] = NULL;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == NULL) {\n\t\tif (nodeType == NULL) {\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tdom = document.createElementNS(\n\t\t\tnamespace,\n\t\t\tnodeType,\n\t\t\tnewProps.is && newProps\n\t\t);\n\n\t\t// we are creating a new node, so we can assume this is a new subtree (in\n\t\t// case we are hydrating), this deopts the hydrate\n\t\tif (isHydrating) {\n\t\t\tif (options._hydrationMismatch)\n\t\t\t\toptions._hydrationMismatch(newVNode, excessDomChildren);\n\t\t\tisHydrating = false;\n\t\t}\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = NULL;\n\t}\n\n\tif (nodeType == NULL) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data != newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\t// If we are in a situation where we are not hydrating but are using\n\t\t// existing DOM (e.g. replaceNode) we should read the existing DOM\n\t\t// attributes to diff them\n\t\tif (!isHydrating && excessDomChildren != NULL) {\n\t\t\toldProps = {};\n\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\tvalue = dom.attributes[i];\n\t\t\t\toldProps[value.name] = value.value;\n\t\t\t}\n\t\t}\n\n\t\tfor (i in oldProps) {\n\t\t\tvalue = oldProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\toldHtml = value;\n\t\t\t} else if (!(i in newProps)) {\n\t\t\t\tif (\n\t\t\t\t\t(i == 'value' && 'defaultValue' in newProps) ||\n\t\t\t\t\t(i == 'checked' && 'defaultChecked' in newProps)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tsetProperty(dom, i, NULL, value, namespace);\n\t\t\t}\n\t\t}\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tfor (i in newProps) {\n\t\t\tvalue = newProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t\tnewChildren = value;\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\tnewHtml = value;\n\t\t\t} else if (i == 'value') {\n\t\t\t\tinputValue = value;\n\t\t\t} else if (i == 'checked') {\n\t\t\t\tchecked = value;\n\t\t\t} else if (\n\t\t\t\t(!isHydrating || typeof value == 'function') &&\n\t\t\t\toldProps[i] !== value\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, value, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\tif (\n\t\t\t\t!isHydrating &&\n\t\t\t\t(!oldHtml ||\n\t\t\t\t\t(newHtml.__html != oldHtml.__html && newHtml.__html != dom.innerHTML))\n\t\t\t) {\n\t\t\t\tdom.innerHTML = newHtml.__html;\n\t\t\t}\n\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\tif (oldHtml) dom.innerHTML = '';\n\n\t\t\tdiffChildren(\n\t\t\t\t// @ts-expect-error\n\t\t\t\tnewVNode.type == 'template' ? dom.content : dom,\n\t\t\t\tisArray(newChildren) ? newChildren : [newChildren],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnodeType == 'foreignObject' ? XHTML_NAMESPACE : namespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != NULL) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tremoveNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// As above, don't diff props during hydration\n\t\tif (!isHydrating) {\n\t\t\ti = 'value';\n\t\t\tif (nodeType == 'progress' && inputValue == NULL) {\n\t\t\t\tdom.removeAttribute('value');\n\t\t\t} else if (\n\t\t\t\tinputValue != UNDEFINED &&\n\t\t\t\t// #2756 For the -element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(inputValue !== dom[i] ||\n\t\t\t\t\t(nodeType == 'progress' && !inputValue) ||\n\t\t\t\t\t// This is only for IE 11 to fix -
-
-

Đặt tên:

- -
- - - -
- - - -
-
- - Sản phẩm - -
- - Thông tin - - - Giá gốc - - - Khuyến mãi - - - Thành tiền - - Nhà cung cấp -
-
- -
-
- - CPU - -
-
- -
- 4.700.000 Vnđ -
-
- 20% -
- - 4.000.000đ - -
- - - -
- Mua - ngay - -
-
-
-
-
-
- - CPU Cooler - -
-
- -
- 4.700.000 Vnđ -
-
- 20% -
- - 4.000.000đ - -
- - - -
- Mua - ngay - -
-
-
-
- -
- 4.700.000 Vnđ -
-
- 20% -
- - 4.000.000đ - -
- - - -
- Mua - ngay - -
-
-
- - + - Chọn thêm CPU -
-
-
- - CPU Cooler - - -
-
- - CPU Cooler - - -
-
- - CPU Cooler - - -
-
- - CPU Cooler - - -
-
- - CPU Cooler - - -
-
- - -
- Tổng tiền 2 sản phẩm: 8.000.000đ - -
- -
- - - - -
- - - - - -
- - - - diff --git a/old/package-lock.json b/package-lock.json similarity index 99% rename from old/package-lock.json rename to package-lock.json index 5f73d9c..99d89fc 100644 --- a/old/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ }, "devDependencies": { "@preact/preset-vite": "^2.9.3", + "@types/node": "^22.15.23", "eslint": "^8.57.1", "eslint-config-preact": "^1.5.0", "typescript": "^5.8.3", @@ -1329,6 +1330,16 @@ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true }, + "node_modules/@types/node": { + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -4736,6 +4747,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -5825,6 +5843,15 @@ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true }, + "@types/node": { + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", + "dev": true, + "requires": { + "undici-types": "~6.21.0" + } + }, "@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -8214,6 +8241,12 @@ "which-boxed-primitive": "^1.1.1" } }, + "undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, "update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", diff --git a/old/package.json b/package.json similarity index 94% rename from old/package.json rename to package.json index ee8b3e0..fd90485 100644 --- a/old/package.json +++ b/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@preact/preset-vite": "^2.9.3", + "@types/node": "^22.15.23", "eslint": "^8.57.1", "eslint-config-preact": "^1.5.0", "typescript": "^5.8.3", diff --git a/package/composer.lock b/package/composer.lock new file mode 100644 index 0000000..97bcfd7 --- /dev/null +++ b/package/composer.lock @@ -0,0 +1,92 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "ee7e3ad86855a67e00785a425ecb5246", + "packages": [ + { + "name": "liquid/liquid", + "version": "1.4.32", + "source": { + "type": "git", + "url": "https://github.com/kalimatas/php-liquid.git", + "reference": "f0be8a3e0e0fcee99c0091748dcb21675b3caf46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kalimatas/php-liquid/zipball/f0be8a3e0e0fcee99c0091748dcb21675b3caf46", + "reference": "f0be8a3e0e0fcee99c0091748dcb21675b3caf46", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^2.16.4", + "infection/infection": ">=0.17.6", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.2.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Liquid\\": "src/Liquid" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guz Alexander", + "email": "kalimatas@gmail.com", + "homepage": "http://guzalexander.com" + }, + { + "name": "Harald Hanek" + }, + { + "name": "Mateo Murphy" + }, + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com", + "homepage": "https://www.alexeykopytko.com/" + } + ], + "description": "Liquid template engine for PHP", + "homepage": "https://github.com/kalimatas/php-liquid", + "keywords": [ + "liquid", + "template" + ], + "support": { + "issues": "https://github.com/kalimatas/php-liquid/issues", + "source": "https://github.com/kalimatas/php-liquid/tree/1.4.32" + }, + "time": "2022-08-08T01:55:20+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "ext-json": "*", + "ext-mysqli": "*", + "ext-zip": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/package/vendor/autoload.php b/package/vendor/autoload.php new file mode 100644 index 0000000..a8a1e02 --- /dev/null +++ b/package/vendor/autoload.php @@ -0,0 +1,25 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/package/vendor/composer/InstalledVersions.php b/package/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..51e734a --- /dev/null +++ b/package/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/package/vendor/composer/LICENSE b/package/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/package/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/package/vendor/composer/autoload_classmap.php b/package/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..0fb0a2c --- /dev/null +++ b/package/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/package/vendor/composer/autoload_namespaces.php b/package/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..15a2ff3 --- /dev/null +++ b/package/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/liquid/liquid/src/Liquid'), +); diff --git a/package/vendor/composer/autoload_real.php b/package/vendor/composer/autoload_real.php new file mode 100644 index 0000000..3164fc5 --- /dev/null +++ b/package/vendor/composer/autoload_real.php @@ -0,0 +1,38 @@ +register(true); + + return $loader; + } +} diff --git a/package/vendor/composer/autoload_static.php b/package/vendor/composer/autoload_static.php new file mode 100644 index 0000000..65cdaaf --- /dev/null +++ b/package/vendor/composer/autoload_static.php @@ -0,0 +1,36 @@ + + array ( + 'Liquid\\' => 7, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Liquid\\' => + array ( + 0 => __DIR__ . '/..' . '/liquid/liquid/src/Liquid', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInitee7e3ad86855a67e00785a425ecb5246::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitee7e3ad86855a67e00785a425ecb5246::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInitee7e3ad86855a67e00785a425ecb5246::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/package/vendor/composer/installed.json b/package/vendor/composer/installed.json new file mode 100644 index 0000000..54b1864 --- /dev/null +++ b/package/vendor/composer/installed.json @@ -0,0 +1,78 @@ +{ + "packages": [ + { + "name": "liquid/liquid", + "version": "1.4.32", + "version_normalized": "1.4.32.0", + "source": { + "type": "git", + "url": "https://github.com/kalimatas/php-liquid.git", + "reference": "f0be8a3e0e0fcee99c0091748dcb21675b3caf46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kalimatas/php-liquid/zipball/f0be8a3e0e0fcee99c0091748dcb21675b3caf46", + "reference": "f0be8a3e0e0fcee99c0091748dcb21675b3caf46", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^2.16.4", + "infection/infection": ">=0.17.6", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.2.6" + }, + "time": "2022-08-08T01:55:20+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Liquid\\": "src/Liquid" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guz Alexander", + "email": "kalimatas@gmail.com", + "homepage": "http://guzalexander.com" + }, + { + "name": "Harald Hanek" + }, + { + "name": "Mateo Murphy" + }, + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com", + "homepage": "https://www.alexeykopytko.com/" + } + ], + "description": "Liquid template engine for PHP", + "homepage": "https://github.com/kalimatas/php-liquid", + "keywords": [ + "liquid", + "template" + ], + "support": { + "issues": "https://github.com/kalimatas/php-liquid/issues", + "source": "https://github.com/kalimatas/php-liquid/tree/1.4.32" + }, + "install-path": "../liquid/liquid" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/package/vendor/composer/installed.php b/package/vendor/composer/installed.php new file mode 100644 index 0000000..a890967 --- /dev/null +++ b/package/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'name' => '__root__', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '1c2e648b54daf6079ce591d9464594587ffb788d', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + '__root__' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '1c2e648b54daf6079ce591d9464594587ffb788d', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'liquid/liquid' => array( + 'pretty_version' => '1.4.32', + 'version' => '1.4.32.0', + 'reference' => 'f0be8a3e0e0fcee99c0091748dcb21675b3caf46', + 'type' => 'library', + 'install_path' => __DIR__ . '/../liquid/liquid', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/package/vendor/composer/platform_check.php b/package/vendor/composer/platform_check.php new file mode 100644 index 0000000..92370c5 --- /dev/null +++ b/package/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/package/vendor/liquid/liquid/.github/PULL_REQUEST_TEMPLATE.md b/package/vendor/liquid/liquid/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..499b112 --- /dev/null +++ b/package/vendor/liquid/liquid/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,5 @@ +- [ ] I've run the tests with `vendor/bin/phpunit` +- [ ] None of the tests were found failing +- [ ] I've seen the coverage report at `build/coverage/index.html` +- [ ] Not a single line left uncovered by tests +- [ ] Any coding standards issues were fixed with `vendor/bin/php-cs-fixer fix` diff --git a/package/vendor/liquid/liquid/.github/workflows/cs.yaml b/package/vendor/liquid/liquid/.github/workflows/cs.yaml new file mode 100644 index 0000000..123909f --- /dev/null +++ b/package/vendor/liquid/liquid/.github/workflows/cs.yaml @@ -0,0 +1,46 @@ +name: Code Style + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: ['7.3'] + + name: PHP ${{ matrix.php-version }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + extensions: + coverage: pcov + tools: composer:v1 + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ~/.cache/composer + key: composer-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }} + restore-keys: | + composer-${{ matrix.php-version }}- + composer- + + - name: Install dependencies + run: | + composer update --prefer-dist --no-interaction --no-progress ${{ matrix.dependencies }} + + - name: Check code style + run: | + php vendor/bin/php-cs-fixer --using-cache=no --diff --dry-run --stop-on-violation --verbose fix + diff --git a/package/vendor/liquid/liquid/.github/workflows/mt.yaml b/package/vendor/liquid/liquid/.github/workflows/mt.yaml new file mode 100644 index 0000000..0cc10c4 --- /dev/null +++ b/package/vendor/liquid/liquid/.github/workflows/mt.yaml @@ -0,0 +1,48 @@ +name: Mutation Testing + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: ['7.4'] + dependencies: [''] + + name: PHP ${{ matrix.php-version }} ${{ matrix.dependencies }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + extensions: + coverage: pcov + tools: composer:v2 + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ~/.cache/composer + key: composer-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }} + restore-keys: | + composer-${{ matrix.php-version }}- + composer- + + - name: Install dependencies + run: | + composer update --prefer-dist --no-interaction --no-progress ${{ matrix.dependencies }} + + - name: Run mutation testing + run: | + php vendor/bin/infection --min-msi=80 --min-covered-msi=80 --show-mutations --threads=$(nproc) + diff --git a/package/vendor/liquid/liquid/.github/workflows/tests.yaml b/package/vendor/liquid/liquid/.github/workflows/tests.yaml new file mode 100644 index 0000000..1ec8e5a --- /dev/null +++ b/package/vendor/liquid/liquid/.github/workflows/tests.yaml @@ -0,0 +1,56 @@ +# yamllint disable rule:line-length +# yamllint disable rule:braces + +name: CI + +on: + pull_request: + push: + branches: + - master + - main + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: ['7.3', '7.4', '8.0', '8.1'] + include: + - { php-version: '7.3', dependencies: '--prefer-lowest', legend: 'with lowest dependencies' } + + name: PHP ${{ matrix.php-version }} ${{ matrix.legend }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: pcov + tools: composer:v2 + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('composer.*') }}-${{ matrix.composer-flags }} + restore-keys: | + composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('composer.*') }}- + composer-${{ runner.os }}-${{ matrix.php-version }}- + composer-${{ runner.os }}- + composer- + + - name: Install dependencies + run: | + composer update --prefer-dist --no-interaction --no-progress ${{ matrix.dependencies }} + + - name: Run tests + run: | + php vendor/bin/phpunit diff --git a/package/vendor/liquid/liquid/.gitignore b/package/vendor/liquid/liquid/.gitignore new file mode 100644 index 0000000..072705c --- /dev/null +++ b/package/vendor/liquid/liquid/.gitignore @@ -0,0 +1,3 @@ +.idea/ +vendor/ +composer.lock diff --git a/package/vendor/liquid/liquid/.php_cs.dist b/package/vendor/liquid/liquid/.php_cs.dist new file mode 100644 index 0000000..713a8be --- /dev/null +++ b/package/vendor/liquid/liquid/.php_cs.dist @@ -0,0 +1,42 @@ +setRiskyAllowed(true) + ->setRules([ + '@PSR2' => true, + 'psr4' => true, + 'no_unreachable_default_argument_value' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_order' => true, + 'semicolon_after_instruction' => true, + 'whitespace_after_comma_in_array' => true, + 'header_comment' => ['header' => $header], + 'php_unit_construct' => true, + 'php_unit_dedicate_assert' => true, + 'php_unit_dedicate_assert_internal_type' => true, + 'php_unit_expectation' => true, + 'php_unit_mock_short_will_return' => true, + 'php_unit_mock' => true, + 'php_unit_namespaced' => true, + 'php_unit_no_expectation_annotation' => true, + 'php_unit_ordered_covers' => true, + 'php_unit_set_up_tear_down_visibility' => true, + 'php_unit_test_case_static_method_calls' => ['call_type' => 'this'], + ]) + ->setIndent("\t") + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__) + ) +; diff --git a/package/vendor/liquid/liquid/CHANGELOG.md b/package/vendor/liquid/liquid/CHANGELOG.md new file mode 100644 index 0000000..c2143dd --- /dev/null +++ b/package/vendor/liquid/liquid/CHANGELOG.md @@ -0,0 +1,107 @@ +## master + +## 1.4.8 (2018-03-22) + + * Now we return null for missing properties, like we do for missing keys for arrays. + +## 1.4.7 (2018-02-09) + + * Paginate tag shall now respect request parameters. + * It is now possible to set a custom query param for the paginate tag. + * Page number will now never go overboard. + +## 1.4.6 (2018-02-07) + + * TagPaginate shall not pollute the global scope, but work in own scope. + * TagPaginate errors if no collection present instead of vague warning. + +## 1.4.5 (2017-12-12) + + * Capture tag shall save a variable in the global context. + +## 1.4.4 (2017-11-03) + + * TagUnless is an inverted TagIf: simplified implementation + * Allow dashes in filenames + +## 1.4.3 (2017-10-10) + + * `escape` and `escape_once` filters now escape everything, but arrays + * New standard filter for explicit string conversion + +## 1.4.2 (2017-10-09) + + * Better caching for non-extending templates + * Simplified 'assign' tag to use rules for variables + * Now supporting PHP 7.2 + * Different types of exception depending on the case + * Filterbank will not call instance methods statically + * Callback-type filters + +## 1.4.1 (2017-09-28) + + * Unquoted template names in 'include' tag, as in Jekyll + * Caching now works correctly with 'extends' tag + +## 1.4.0 (2017-09-25) + + * Dropped support for EOL'ed versions of PHP (< 5.6) + * Arrays won't be silently cast to string as 'Array' anymore + * Complex objects could now be passed between templates and to filters + * Additional test coverage + +## 1.3.1 (2017-09-23) + + * Support for numeric and variable array indicies + * Support loop break and continue + * Allow looping over extended ranges + * Math filters now work with floats + * Fixed 'default' filter + * Local cache with data stored in a private variable + * Virtual file system to get inversion of control and DI + * Lots of tests with the coverage upped to 97% + * Small bug fixes and various enhancements + +## 1.3.0 (2017-07-17) + + * Support Traversable loops and filters + * Fix date filter for format with colon + * Various minor improvements and bugs fixes + +## 1.2.1 (2016-12-12) + + * Remove content injection from $_GET. + * Add PHP 5.6, 7.0, 7.1 to Travis file. + +## 1.2 (2016-06-11) + + * Added "ESCAPE_BY_DEFAULT" setting for context-aware auto-escaping. + * Made "Context" work with plain objects. + * "escape" now uses "htmlentities". + * Fixed "escape_now". + +## 1.1 (2015-06-01) + + * New tags: "paginate", "unless", "ifchanged" were added + * Added support for "for in (range)" syntax + * Added support for multiple conditions in if statements + * Added support for hashes/objects in for loops + +## 1.0 (2014-09-07) + + * Add namespaces + * Add composer support + * Implement new standard filters + * Add 'raw' tag + +## 0.9.2 (2012-08-15) + + * context->set allows now global vars + * Allow Templatenames with Fileextension + * Tag 'extends' supports now multiple inheritance + * Clean up code, change all variables and methods to camelCase + +## 0.9.1 (2012-05-12) + + * added the extends and block filter + * Initial release diff --git a/package/vendor/liquid/liquid/LICENSE b/package/vendor/liquid/liquid/LICENSE new file mode 100644 index 0000000..0e3bcec --- /dev/null +++ b/package/vendor/liquid/liquid/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Guz Alexander, http://guzalexander.com +Copyright (c) 2011, 2012 Harald Hanek, http://www.delacap.com +Copyright (c) 2006 Mateo Murphy + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package/vendor/liquid/liquid/README.md b/package/vendor/liquid/liquid/README.md new file mode 100644 index 0000000..3f29aad --- /dev/null +++ b/package/vendor/liquid/liquid/README.md @@ -0,0 +1,139 @@ +# Liquid template engine for PHP [![CI](https://github.com/kalimatas/php-liquid/actions/workflows/tests.yaml/badge.svg)](https://github.com/kalimatas/php-liquid/actions/workflows/tests.yaml) [![Coverage Status](https://coveralls.io/repos/github/kalimatas/php-liquid/badge.svg?branch=master)](https://coveralls.io/github/kalimatas/php-liquid?branch=master) [![Total Downloads](https://poser.pugx.org/liquid/liquid/downloads.svg)](https://packagist.org/packages/liquid/liquid) + +Liquid is a PHP port of the [Liquid template engine for Ruby](https://github.com/Shopify/liquid), which was written by Tobias Lutke. Although there are many other templating engines for PHP, including Smarty (from which Liquid was partially inspired), Liquid had some advantages that made porting worthwhile: + + * Readable and human friendly syntax, that is usable in any type of document, not just html, without need for escaping. + * Quick and easy to use and maintain. + * 100% secure, no possibility of embedding PHP code. + * Clean OO design, rather than the mix of OO and procedural found in other templating engines. + * Seperate compiling and rendering stages for improved performance. + * Easy to extend with your own "tags and filters":https://github.com/harrydeluxe/php-liquid/wiki/Liquid-for-programmers. + * 100% Markup compatibility with a Ruby templating engine, making templates usable for either. + * Unit tested: Liquid is fully unit-tested. The library is stable and ready to be used in large projects. + +## Why Liquid? + +Why another templating library? + +Liquid was written to meet three templating library requirements: good performance, easy to extend, and simply to use. + +## Installing + +You can install this lib via [composer](https://getcomposer.org/): + + composer require liquid/liquid + +## Example template + + {% if products %} +
    + {% for product in products %} +
  • +

    {{ product.name }}

    + Only {{ product.price | price }} + + {{ product.description | prettyprint | paragraph }} + + {{ 'it rocks!' | paragraph }} + +
  • + {% endfor %} +
+ {% endif %} + +## How to use Liquid + +The main class is `Liquid::Template` class. There are two separate stages of working with Liquid templates: parsing and rendering. Here is a simple example: + + use Liquid\Template; + + $template = new Template(); + $template->parse("Hello, {{ name }}!"); + echo $template->render(array('name' => 'Alex')); + + // Will echo + // Hello, Alex! + +To find more examples have a look at the `examples` directory or at the original Ruby implementation repository's [wiki page](https://github.com/Shopify/liquid/wiki). + +## Advanced usage + +You would probably want to add a caching layer (at very least a request-wide one), enable context-aware automatic escaping, and do load includes from disk with full file names. + + use Liquid\Liquid; + use Liquid\Template; + use Liquid\Cache\Local; + + Liquid::set('INCLUDE_SUFFIX', ''); + Liquid::set('INCLUDE_PREFIX', ''); + Liquid::set('INCLUDE_ALLOW_EXT', true); + Liquid::set('ESCAPE_BY_DEFAULT', true); + + $template = new Template(__DIR__.'/protected/templates/'); + + $template->parse("Hello, {% include 'honorific.html' %}{{ plain-html | raw }} {{ comment-with-xss }}"); + $template->setCache(new Local()); + + echo $template->render([ + 'name' => 'Alex', + 'plain-html' => 'Your comment was:', + 'comment-with-xss' => '', + ]); + +Will output: + + Hello, Mx. Alex + Your comment was: <script>alert();</script> + +Note that automatic escaping is not a standard Liquid feature: use with care. + +Similarly, the following snippet will parse and render `templates/home.liquid` while storing parsing results in a class-local cache: + + \Liquid\Liquid::set('INCLUDE_PREFIX', ''); + + $template = new \Liquid\Template(__DIR__ . '/protected/templates'); + $template->setCache(new \Liquid\Cache\Local()); + echo $template->parseFile('home')->render(); + +If you render the same template over and over for at least a dozen of times, the class-local cache will give you a slight speed up in range of some milliseconds per render depending on a complexity of your template. + +You should probably extend `Liquid\Template` to initialize everything you do with `Liquid::set` in one place. + +### Custom filters + +Adding filters has never been easier. + + $template = new Template(); + $template->registerFilter('absolute_url', function ($arg) { + return "https://www.example.com$arg"; + }); + $template->parse("{{ my_url | absolute_url }}"); + echo $template->render(array( + 'my_url' => '/test' + )); + // expect: https://www.example.com/test + +## Requirements + + * PHP 7.0+ + +Some earlier versions could be used with PHP 5.3/5.4/5.5/5.6, though they're not supported anymore. + +## Issues + +Have a bug? Please create an issue here on GitHub! + +[https://github.com/kalimatas/php-liquid/issues](https://github.com/kalimatas/php-liquid/issues) + +## Fork notes + +This fork is based on [php-liquid](https://github.com/harrydeluxe/php-liquid) by Harald Hanek. + +It contains several improvements: + + * namespaces + * installing via composer + * new standard filters + * `raw` tag added + +Any help is appreciated! diff --git a/package/vendor/liquid/liquid/composer.json b/package/vendor/liquid/liquid/composer.json new file mode 100644 index 0000000..a453643 --- /dev/null +++ b/package/vendor/liquid/liquid/composer.json @@ -0,0 +1,58 @@ +{ + "name": "liquid/liquid", + "type": "library", + "description": "Liquid template engine for PHP", + "keywords": [ + "liquid", + "template" + ], + "homepage": "https://github.com/kalimatas/php-liquid", + "license": "MIT", + "authors": [ + { + "name": "Guz Alexander", + "email": "kalimatas@gmail.com", + "homepage": "http://guzalexander.com" + }, + { + "name": "Harald Hanek" + }, + { + "name": "Mateo Murphy" + }, + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com", + "homepage": "https://www.alexeykopytko.com/" + } + ], + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^2.16.4", + "infection/infection": ">=0.17.6", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.2.6" + }, + "config": { + "sort-packages": true, + "allow-plugins": true + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Liquid\\": "src/Liquid" + } + }, + "autoload-dev": { + "psr-4": { + "Liquid\\": "tests/Liquid" + } + } +} diff --git a/package/vendor/liquid/liquid/examples/advanced.php b/package/vendor/liquid/liquid/examples/advanced.php new file mode 100644 index 0000000..5b89f3b --- /dev/null +++ b/package/vendor/liquid/liquid/examples/advanced.php @@ -0,0 +1,32 @@ +parse("Hello, {% include 'honorific.html' %}{{ plain-html | raw }} {{ comment-with-xss }}\n"); +$template->setCache(new Local()); + +echo $template->render([ + 'name' => 'Alex', + 'plain-html' => 'Your comment was:', + 'comment-with-xss' => '', +]); diff --git a/package/vendor/liquid/liquid/examples/block.php b/package/vendor/liquid/liquid/examples/block.php new file mode 100644 index 0000000..b7832d0 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/block.php @@ -0,0 +1,39 @@ + 'file', 'cache_dir' => $protectedPath . 'cache' . DIRECTORY_SEPARATOR); +// or if you have APC installed +//$cache = array('cache' => 'apc'); +//$liquid->setCache($cache); + +$liquid->parse(file_get_contents($protectedPath . 'templates' . DIRECTORY_SEPARATOR . 'child.tpl')); + +$assigns = array( + 'document' => array( + 'title' => 'This is php-liquid', + 'content' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', + 'copyright' => '© Copyright 2014 Guz Alexander - All rights reserved.', + ), +); + +echo $liquid->render($assigns); diff --git a/package/vendor/liquid/liquid/examples/filters.php b/package/vendor/liquid/liquid/examples/filters.php new file mode 100644 index 0000000..95c80c2 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/filters.php @@ -0,0 +1,25 @@ +registerFilter('absolute_url', function ($arg) { + return "https://www.example.com$arg"; +}); +$template->parse("{{ my_url | absolute_url }}"); +echo $template->render(array( + 'my_url' => '/test' +)); +// expect: https://www.example.com/test diff --git a/package/vendor/liquid/liquid/examples/index.php b/package/vendor/liquid/liquid/examples/index.php new file mode 100644 index 0000000..850fe42 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/index.php @@ -0,0 +1,70 @@ + 'file', 'cache_dir' => $protectedPath . 'cache' . DIRECTORY_SEPARATOR); +// or if you have APC installed +//$cache = array('cache' => 'apc'); +//$liquid->setCache($cache); + +$liquid->parse(file_get_contents($protectedPath . 'templates' . DIRECTORY_SEPARATOR . 'index.tpl')); + +$assigns = array( + 'document' => array( + 'title' => 'This is php-liquid', + 'content' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.', + 'copyright' => 'Guz Alexander - All rights reserved.', + ), + 'blog' => array( + array( + 'title' => 'Blog Title 1', + 'content' => 'Nunc putamus parum claram', + 'tags' => array('claram', 'parum'), + 'comments' => array( + array( + 'title' => 'First Comment', + 'message' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr', + ), + ), + ), + array( + 'title' => 'Blog Title 2', + 'content' => 'Nunc putamus parum claram', + 'tags' => array('claram', 'parum', 'freestyle'), + 'comments' => array( + array( + 'title' => 'First Comment', + 'message' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr', + ), + array( + 'title' => 'Second Comment', + 'message' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr', + ), + ), + ), + + ), + 'array' => array('one', 'two', 'three', 'four'), +); + +echo $liquid->render($assigns); diff --git a/package/vendor/liquid/liquid/examples/protected/cache/.gitignore b/package/vendor/liquid/liquid/examples/protected/cache/.gitignore new file mode 100644 index 0000000..acb5c9f --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/cache/.gitignore @@ -0,0 +1,2 @@ +!.gitignore +liquid_* diff --git a/package/vendor/liquid/liquid/examples/protected/templates/base.tpl b/package/vendor/liquid/liquid/examples/protected/templates/base.tpl new file mode 100644 index 0000000..36ff6cc --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/base.tpl @@ -0,0 +1,15 @@ +{% comment %} This is the base template. {% endcomment %} + + + + {% include 'header.tpl' %} + + +
{% block content %}{% endblock %}
+ + + diff --git a/package/vendor/liquid/liquid/examples/protected/templates/blocks/child.tpl b/package/vendor/liquid/liquid/examples/protected/templates/blocks/child.tpl new file mode 100644 index 0000000..b4012cb --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/blocks/child.tpl @@ -0,0 +1,6 @@ +{% comment %} This is the child template. {% endcomment %} +{% extends "base.tpl" %} + +{% block footer %} + {{ document.copyright }} +{% endblock %} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/examples/protected/templates/child.tpl b/package/vendor/liquid/liquid/examples/protected/templates/child.tpl new file mode 100644 index 0000000..feab5e8 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/child.tpl @@ -0,0 +1,7 @@ +{% comment %} This is the child template. {% endcomment %} +{% extends "blocks/child.tpl" %} + +{% block content %} +

Entry one

+

This is my first entry.

+{% endblock %} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/examples/protected/templates/footer.tpl b/package/vendor/liquid/liquid/examples/protected/templates/footer.tpl new file mode 100644 index 0000000..68d063b --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/footer.tpl @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/package/vendor/liquid/liquid/examples/protected/templates/header.tpl b/package/vendor/liquid/liquid/examples/protected/templates/header.tpl new file mode 100644 index 0000000..85856d9 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/header.tpl @@ -0,0 +1,2 @@ + +{{ document.title }} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/examples/protected/templates/honorific.html b/package/vendor/liquid/liquid/examples/protected/templates/honorific.html new file mode 100644 index 0000000..a935dd2 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/honorific.html @@ -0,0 +1 @@ +Mx. {{ name }} diff --git a/package/vendor/liquid/liquid/examples/protected/templates/index.tpl b/package/vendor/liquid/liquid/examples/protected/templates/index.tpl new file mode 100644 index 0000000..a1375a2 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/index.tpl @@ -0,0 +1,44 @@ +{% comment %} + +This is a comment block +(c) 2014 Guz Alexander + +{% endcomment %} + + + + {% include 'header' %} + + +

{{ document.title }}

+

{{ document.content }}

+

Link to simple.php

+ {% if blog %} + Total Blogentrys: {{ blog | size }} +
    + {% for entry in blog %} +
  • +

    {{ entry.title | upcase }}

    +

    {{ entry.content }}

    + Comments: {{ entry.comments | size }} + {% assign uzu = 'dudu2' %} + {% assign freestyle = false %} + + {% for t in entry.tags %} + {% if t == 'freestyle' %} + {% assign freestyle = true %} + {% endif %} + {% endfor %} + + {% if freestyle %} +

    Blogentry has tag: freestyle

    + {% endif %} + +
  • + {% endfor %} +
+ {% endif %} + + {% include 'footer' %} + + diff --git a/package/vendor/liquid/liquid/examples/protected/templates/subfooter.tpl b/package/vendor/liquid/liquid/examples/protected/templates/subfooter.tpl new file mode 100644 index 0000000..829a268 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/protected/templates/subfooter.tpl @@ -0,0 +1 @@ +{{ document.copyright }} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/examples/simple.php b/package/vendor/liquid/liquid/examples/simple.php new file mode 100644 index 0000000..7cea203 --- /dev/null +++ b/package/vendor/liquid/liquid/examples/simple.php @@ -0,0 +1,23 @@ +parse('{{ hello }} {{ goback }}'); + +echo $liquid->render(array('hello' => 'hello world', 'goback' => 'index')); diff --git a/package/vendor/liquid/liquid/infection.json.dist b/package/vendor/liquid/liquid/infection.json.dist new file mode 100644 index 0000000..51839ef --- /dev/null +++ b/package/vendor/liquid/liquid/infection.json.dist @@ -0,0 +1,8 @@ +{ + "timeout": 2, + "source": { + "directories": [ + "src" + ] + } +} diff --git a/package/vendor/liquid/liquid/phpunit.xml.dist b/package/vendor/liquid/liquid/phpunit.xml.dist new file mode 100644 index 0000000..84562a6 --- /dev/null +++ b/package/vendor/liquid/liquid/phpunit.xml.dist @@ -0,0 +1,23 @@ + + + + + + tests/ + + + + + + src/ + + + diff --git a/package/vendor/liquid/liquid/src/Liquid/AbstractBlock.php b/package/vendor/liquid/liquid/src/Liquid/AbstractBlock.php new file mode 100644 index 0000000..4ca05b2 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/AbstractBlock.php @@ -0,0 +1,264 @@ +nodelist; + } + + /** + * Parses the given tokens + * + * @param array $tokens + * + * @throws \Liquid\LiquidException + * @return void + */ + public function parse(array &$tokens) + { + $startRegexp = new Regexp('/^' . Liquid::get('TAG_START') . '/'); + $tagRegexp = new Regexp('/^' . Liquid::get('TAG_START') . Liquid::get('WHITESPACE_CONTROL') . '?\s*(\w+)\s*(.*?)' . Liquid::get('WHITESPACE_CONTROL') . '?' . Liquid::get('TAG_END') . '$/s'); + $variableStartRegexp = new Regexp('/^' . Liquid::get('VARIABLE_START') . '/'); + + $this->nodelist = array(); + + $tags = Template::getTags(); + + while (count($tokens)) { + $token = array_shift($tokens); + + if ($startRegexp->match($token)) { + $this->whitespaceHandler($token); + if ($tagRegexp->match($token)) { + // If we found the proper block delimitor just end parsing here and let the outer block proceed + if ($tagRegexp->matches[1] == $this->blockDelimiter()) { + $this->endTag(); + return; + } + + $tagName = null; + if (array_key_exists($tagRegexp->matches[1], $tags)) { + $tagName = $tags[$tagRegexp->matches[1]]; + } else { + $tagName = self::TAG_PREFIX . ucwords($tagRegexp->matches[1]); + $tagName = (class_exists($tagName) === true) ? $tagName : null; + } + + if ($tagName !== null) { + $this->nodelist[] = new $tagName($tagRegexp->matches[2], $tokens, $this->fileSystem); + if ($tagRegexp->matches[1] == 'extends') { + return; + } + } else { + $this->unknownTag($tagRegexp->matches[1], $tagRegexp->matches[2], $tokens); + } + } else { + throw new ParseException("Tag $token was not properly terminated (won't match $tagRegexp)"); + } + } elseif ($variableStartRegexp->match($token)) { + $this->whitespaceHandler($token); + $this->nodelist[] = $this->createVariable($token); + } else { + // This is neither a tag or a variable, proceed with an ltrim + if (self::$trimWhitespace) { + $token = ltrim($token); + } + + self::$trimWhitespace = false; + $this->nodelist[] = $token; + } + } + + $this->assertMissingDelimitation(); + } + + /** + * Handle the whitespace. + * + * @param string $token + */ + protected function whitespaceHandler($token) + { + /* + * This assumes that TAG_START is always '{%', and a whitespace control indicator + * is exactly one character long, on a third position. + */ + if (mb_substr($token, 2, 1) === Liquid::get('WHITESPACE_CONTROL')) { + $previousToken = end($this->nodelist); + if (is_string($previousToken)) { // this can also be a tag or a variable + $this->nodelist[key($this->nodelist)] = rtrim($previousToken); + } + } + + /* + * This assumes that TAG_END is always '%}', and a whitespace control indicator + * is exactly one character long, on a third position from the end. + */ + self::$trimWhitespace = mb_substr($token, -3, 1) === Liquid::get('WHITESPACE_CONTROL'); + } + + /** + * Render the block. + * + * @param Context $context + * + * @return string + */ + public function render(Context $context) + { + return $this->renderAll($this->nodelist, $context); + } + + /** + * Renders all the given nodelist's nodes + * + * @param array $list + * @param Context $context + * + * @return string + */ + protected function renderAll(array $list, Context $context) + { + $result = ''; + + foreach ($list as $token) { + if (is_object($token) && method_exists($token, 'render')) { + $value = $token->render($context); + } else { + $value = $token; + } + + if (is_array($value)) { + $value = htmlspecialchars(print_r($value, true)); + } + + $result .= $value; + + if (isset($context->registers['break'])) { + break; + } + if (isset($context->registers['continue'])) { + break; + } + + $context->tick(); + } + + return $result; + } + + /** + * An action to execute when the end tag is reached + */ + protected function endTag() + { + // Do nothing by default + } + + /** + * Handler for unknown tags + * + * @param string $tag + * @param string $params + * @param array $tokens + * + * @throws \Liquid\Exception\ParseException + */ + protected function unknownTag($tag, $params, array $tokens) + { + switch ($tag) { + case 'else': + throw new ParseException($this->blockName() . " does not expect else tag"); + case 'end': + throw new ParseException("'end' is not a valid delimiter for " . $this->blockName() . " tags. Use " . $this->blockDelimiter()); + default: + throw new ParseException("Unknown tag $tag"); + } + } + + /** + * This method is called at the end of parsing, and will throw an error unless + * this method is subclassed, like it is for Document + * + * @throws \Liquid\Exception\ParseException + * @return bool + */ + protected function assertMissingDelimitation() + { + throw new ParseException($this->blockName() . " tag was never closed"); + } + + /** + * Returns the string that delimits the end of the block + * + * @return string + */ + protected function blockDelimiter() + { + return "end" . $this->blockName(); + } + + /** + * Returns the name of the block + * + * @return string + */ + private function blockName() + { + $reflection = new \ReflectionClass($this); + return str_replace('tag', '', strtolower($reflection->getShortName())); + } + + /** + * Create a variable for the given token + * + * @param string $token + * + * @throws \Liquid\Exception\ParseException + * @return Variable + */ + private function createVariable($token) + { + $variableRegexp = new Regexp('/^' . Liquid::get('VARIABLE_START') . Liquid::get('WHITESPACE_CONTROL') . '?(.*?)' . Liquid::get('WHITESPACE_CONTROL') . '?' . Liquid::get('VARIABLE_END') . '$/s'); + if ($variableRegexp->match($token)) { + return new Variable($variableRegexp->matches[1]); + } + + throw new ParseException("Variable $token was not properly terminated"); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/AbstractTag.php b/package/vendor/liquid/liquid/src/Liquid/AbstractTag.php new file mode 100644 index 0000000..6b38267 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/AbstractTag.php @@ -0,0 +1,100 @@ +markup = $markup; + $this->fileSystem = $fileSystem; + $this->parse($tokens); + } + + /** + * Parse the given tokens. + * + * @param array $tokens + */ + public function parse(array &$tokens) + { + // Do nothing by default + } + + /** + * Render the tag with the given context. + * + * @param Context $context + * + * @return string + */ + abstract public function render(Context $context); + + /** + * Extracts tag attributes from a markup string. + * + * @param string $markup + */ + protected function extractAttributes($markup) + { + $this->attributes = array(); + + $attributeRegexp = new Regexp(Liquid::get('TAG_ATTRIBUTES')); + + $matches = $attributeRegexp->scan($markup); + + foreach ($matches as $match) { + $this->attributes[$match[0]] = $match[1]; + } + } + + /** + * Returns the name of the tag. + * + * @return string + */ + protected function name() + { + return strtolower(get_class($this)); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Cache.php b/package/vendor/liquid/liquid/src/Liquid/Cache.php new file mode 100644 index 0000000..28749a3 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Cache.php @@ -0,0 +1,78 @@ +expire = $options['cache_expire']; + } + + if (isset($options['cache_prefix'])) { + $this->prefix = $options['cache_prefix']; + } + } + + /** + * Retrieves a value from cache with a specified key. + * + * @param string $key a unique key identifying the cached value + * @param bool $unserialize + * + * @return mixed|boolean the value stored in cache, false if the value is not in the cache or expired. + */ + abstract public function read($key, $unserialize = true); + + /** + * Check if specified key exists in cache. + * + * @param string $key a unique key identifying the cached value + * + * @return boolean true if the key is in cache, false otherwise + */ + abstract public function exists($key); + + /** + * Stores a value identified by a key in cache. + * + * @param string $key the key identifying the value to be cached + * @param mixed $value the value to be cached + * @param bool $serialize + * + * @return boolean true if the value is successfully stored into cache, false otherwise + */ + abstract public function write($key, $value, $serialize = true); + + /** + * Deletes all values from cache. + * + * @param bool $expiredOnly + * + * @return boolean whether the flush operation was successful. + */ + abstract public function flush($expiredOnly = false); +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Cache/Apc.php b/package/vendor/liquid/liquid/src/Liquid/Cache/Apc.php new file mode 100644 index 0000000..b52d909 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Cache/Apc.php @@ -0,0 +1,74 @@ +prefix . $key); + } + + /** + * {@inheritdoc} + */ + public function exists($key) + { + apc_fetch($this->prefix . $key, $success); + return (bool) $success; + } + + /** + * {@inheritdoc} + */ + public function write($key, $value, $serialize = true) + { + return apc_store($this->prefix . $key, $value, $this->expire); + } + + /** + * {@inheritdoc} + */ + public function flush($expiredOnly = false) + { + return apc_clear_cache('user'); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Cache/File.php b/package/vendor/liquid/liquid/src/Liquid/Cache/File.php new file mode 100644 index 0000000..ac0358e --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Cache/File.php @@ -0,0 +1,106 @@ +path = realpath($options['cache_dir']) . DIRECTORY_SEPARATOR; + } else { + throw new NotFoundException('Cachedir not exists or not writable'); + } + } + + /** + * {@inheritdoc} + */ + public function read($key, $unserialize = true) + { + if (!$this->exists($key)) { + return false; + } + + if ($unserialize) { + return unserialize(file_get_contents($this->path . $this->prefix . $key)); + } + + return file_get_contents($this->path . $this->prefix . $key); + } + + /** + * {@inheritdoc} + */ + public function exists($key) + { + $cacheFile = $this->path . $this->prefix . $key; + + if (!file_exists($cacheFile) || filemtime($cacheFile) + $this->expire < time()) { + return false; + } + + return true; + } + + /** + * {@inheritdoc} + */ + public function write($key, $value, $serialize = true) + { + $bytes = file_put_contents($this->path . $this->prefix . $key, $serialize ? serialize($value) : $value); + $this->gc(); + + return $bytes !== false; + } + + /** + * {@inheritdoc} + */ + public function flush($expiredOnly = false) + { + foreach (glob($this->path . $this->prefix . '*') as $file) { + if ($expiredOnly) { + if (filemtime($file) + $this->expire < time()) { + unlink($file); + } + } else { + unlink($file); + } + } + } + + /** + * {@inheritdoc} + */ + protected function gc() + { + $this->flush(true); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Cache/Local.php b/package/vendor/liquid/liquid/src/Liquid/Cache/Local.php new file mode 100644 index 0000000..f48415e --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Cache/Local.php @@ -0,0 +1,60 @@ +cache[$key])) { + return $this->cache[$key]; + } + + return false; + } + + /** + * {@inheritdoc} + */ + public function exists($key) + { + return isset($this->cache[$key]); + } + + /** + * {@inheritdoc} + */ + public function write($key, $value, $serialize = true) + { + $this->cache[$key] = $value; + return true; + } + + /** + * {@inheritdoc} + */ + public function flush($expiredOnly = false) + { + $this->cache = array(); + return true; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Context.php b/package/vendor/liquid/liquid/src/Liquid/Context.php new file mode 100644 index 0000000..251faa0 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Context.php @@ -0,0 +1,458 @@ +assigns = array($assigns); + $this->registers = $registers; + $this->filterbank = new Filterbank($this); + + // first empty array serves as source for overrides, e.g. as in TagDecrement + $this->environments = array(array(), array()); + + if (Liquid::get('EXPOSE_SERVER')) { + $this->environments[1] = $_SERVER; + } else { + $this->environments[1] = array_filter( + $_SERVER, + function ($key) { + return in_array( + $key, + (array)Liquid::get('SERVER_SUPERGLOBAL_WHITELIST') + ); + }, + ARRAY_FILTER_USE_KEY + ); + } + } + + /** + * Sets a tick function, this function is called sometimes while liquid is rendering a template. + * + * @param callable $tickFunction + */ + public function setTickFunction(callable $tickFunction) + { + $this->tickFunction = $tickFunction; + } + + /** + * Add a filter to the context + * + * @param mixed $filter + */ + public function addFilters($filter, callable $callback = null) + { + $this->filterbank->addFilter($filter, $callback); + } + + /** + * Invoke the filter that matches given name + * + * @param string $name The name of the filter + * @param mixed $value The value to filter + * @param array $args Additional arguments for the filter + * + * @return string + */ + public function invoke($name, $value, array $args = array()) + { + try { + return $this->filterbank->invoke($name, $value, $args); + } catch (\TypeError $typeError) { + throw new LiquidException($typeError->getMessage(), 0, $typeError); + } + } + + /** + * Merges the given assigns into the current assigns + * + * @param array $newAssigns + */ + public function merge($newAssigns) + { + $this->assigns[0] = array_merge($this->assigns[0], $newAssigns); + } + + /** + * Push new local scope on the stack. + * + * @return bool + */ + public function push() + { + array_unshift($this->assigns, array()); + return true; + } + + /** + * Pops the current scope from the stack. + * + * @throws LiquidException + * @return bool + */ + public function pop() + { + if (count($this->assigns) == 1) { + throw new LiquidException('No elements to pop'); + } + + array_shift($this->assigns); + } + + /** + * Replaces [] + * + * @param string + * @param mixed $key + * + * @return mixed + */ + public function get($key) + { + return $this->resolve($key); + } + + /** + * Replaces []= + * + * @param string $key + * @param mixed $value + * @param bool $global + */ + public function set($key, $value, $global = false) + { + if ($global) { + for ($i = 0; $i < count($this->assigns); $i++) { + $this->assigns[$i][$key] = $value; + } + } else { + $this->assigns[0][$key] = $value; + } + } + + /** + * Returns true if the given key will properly resolve + * + * @param string $key + * + * @return bool + */ + public function hasKey($key) + { + return (!is_null($this->resolve($key))); + } + + /** + * Resolve a key by either returning the appropriate literal or by looking up the appropriate variable + * + * Test for empty has been moved to interpret condition, in Decision + * + * @param string $key + * + * @throws LiquidException + * @return mixed + */ + private function resolve($key) + { + // This shouldn't happen + if (is_array($key)) { + throw new LiquidException("Cannot resolve arrays as key"); + } + + if (is_null($key) || $key == 'null') { + return null; + } + + if ($key == 'true') { + return true; + } + + if ($key == 'false') { + return false; + } + + if (preg_match('/^\'(.*)\'$/', $key, $matches)) { + return $matches[1]; + } + + if (preg_match('/^"(.*)"$/', $key, $matches)) { + return $matches[1]; + } + + if (preg_match('/^(-?\d+)$/', $key, $matches)) { + return $matches[1]; + } + + if (preg_match('/^(-?\d[\d\.]+)$/', $key, $matches)) { + return $matches[1]; + } + + return $this->variable($key); + } + + /** + * Fetches the current key in all the scopes + * + * @param string $key + * + * @return mixed + */ + private function fetch($key) + { + // TagDecrement depends on environments being checked before assigns + foreach ($this->environments as $environment) { + if (array_key_exists($key, $environment)) { + return $environment[$key]; + } + } + + foreach ($this->assigns as $scope) { + if (array_key_exists($key, $scope)) { + $obj = $scope[$key]; + + if ($obj instanceof Drop) { + $obj->setContext($this); + } + + return $obj; + } + } + + return null; + } + + /** + * Resolved the namespaced queries gracefully. + * + * @param string $key + * + * @see Decision::stringValue + * @see AbstractBlock::renderAll + * + * @throws LiquidException + * @return mixed + */ + private function variable($key) + { + // Support numeric and variable array indicies + if (preg_match("|\[[0-9]+\]|", $key)) { + $key = preg_replace("|\[([0-9]+)\]|", ".$1", $key); + } elseif (preg_match("|\[[0-9a-z._]+\]|", $key, $matches)) { + $index = $this->get(str_replace(array("[", "]"), "", $matches[0])); + if (strlen($index)) { + $key = preg_replace("|\[([0-9a-z._]+)\]|", ".$index", $key); + } + } + + $parts = explode(Liquid::get('VARIABLE_ATTRIBUTE_SEPARATOR'), $key); + + $object = $this->fetch(array_shift($parts)); + + while (count($parts) > 0) { + // since we still have a part to consider + // and since we can't dig deeper into plain values + // it can be thought as if it has a property with a null value + if (!is_object($object) && !is_array($object) && !is_string($object)) { + return null; + } + + // first try to cast an object to an array or value + if (is_object($object)) { + if (method_exists($object, 'toLiquid')) { + $object = $object->toLiquid(); + } elseif (method_exists($object, 'toArray')) { + $object = $object->toArray(); + } + } + + if (is_null($object)) { + return null; + } + + if ($object instanceof Drop) { + $object->setContext($this); + } + + $nextPartName = array_shift($parts); + + if (is_string($object)) { + if ($nextPartName == 'size') { + // if the last part of the context variable is .size we return the string length + return mb_strlen($object); + } + + // no other special properties for strings, yet + return null; + } + + if (is_array($object)) { + // if the last part of the context variable is .first we return the first array element + if ($nextPartName == 'first' && count($parts) == 0 && !array_key_exists('first', $object)) { + return StandardFilters::first($object); + } + + // if the last part of the context variable is .last we return the last array element + if ($nextPartName == 'last' && count($parts) == 0 && !array_key_exists('last', $object)) { + return StandardFilters::last($object); + } + + // if the last part of the context variable is .size we just return the count + if ($nextPartName == 'size' && count($parts) == 0 && !array_key_exists('size', $object)) { + return count($object); + } + + // no key - no value + if (!array_key_exists($nextPartName, $object)) { + return null; + } + + $object = $object[$nextPartName]; + continue; + } + + if (!is_object($object)) { + // we got plain value, yet asked to resolve a part + // think plain values have a null part with any name + return null; + } + + if ($object instanceof \Countable) { + // if the last part of the context variable is .size we just return the count + if ($nextPartName == 'size' && count($parts) == 0) { + return count($object); + } + } + + if ($object instanceof Drop) { + // if the object is a drop, make sure it supports the given method + if (!$object->hasKey($nextPartName)) { + return null; + } + + $object = $object->invokeDrop($nextPartName); + continue; + } + + // if it has `get` or `field_exists` methods + if (method_exists($object, Liquid::get('HAS_PROPERTY_METHOD'))) { + if (!call_user_func(array($object, Liquid::get('HAS_PROPERTY_METHOD')), $nextPartName)) { + return null; + } + + $object = call_user_func(array($object, Liquid::get('GET_PROPERTY_METHOD')), $nextPartName); + continue; + } + + // if it's just a regular object, attempt to access a public method + if (is_callable(array($object, $nextPartName))) { + $object = call_user_func(array($object, $nextPartName)); + continue; + } + + // if a magic accessor method present... + if (is_object($object) && method_exists($object, '__get')) { + $object = $object->$nextPartName; + continue; + } + + // Inexistent property is a null, PHP-speak + if (!property_exists($object, $nextPartName)) { + return null; + } + + // then try a property (independent of accessibility) + if (property_exists($object, $nextPartName)) { + $object = $object->$nextPartName; + continue; + } + + // we'll try casting this object in the next iteration + } + + // lastly, try to get an embedded value of an object + // value could be of any type, not just string, so we have to do this + // conversion here, not later in AbstractBlock::renderAll + if (is_object($object) && method_exists($object, 'toLiquid')) { + $object = $object->toLiquid(); + } + + /* + * Before here were checks for object types and object to string conversion. + * + * Now we just return what we have: + * - Traversable objects are taken care of inside filters + * - Object-to-string conversion is handled at the last moment in Decision::stringValue, and in AbstractBlock::renderAll + * + * This way complex objects could be passed between templates and to filters + */ + + return $object; + } + + public function tick() + { + if ($this->tickFunction === null) { + return; + } + + $tickFunction = $this->tickFunction; + $tickFunction($this); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/CustomFilters.php b/package/vendor/liquid/liquid/src/Liquid/CustomFilters.php new file mode 100644 index 0000000..de524a0 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/CustomFilters.php @@ -0,0 +1,32 @@ +valid(); + } + + // toLiquid is handled in Context::variable + $class = get_class($value); + throw new RenderException("Value of type $class has no `toLiquid` nor `__toString` methods"); + } + + // Arrays simply return true + if (is_array($value)) { + return $value; + } + + return $value; + } + + /** + * Check to see if to variables are equal in a given context + * + * @param string $left + * @param string $right + * @param Context $context + * + * @return bool + */ + protected function equalVariables($left, $right, Context $context) + { + $left = $this->stringValue($context->get($left)); + $right = $this->stringValue($context->get($right)); + + return ($left == $right); + } + + /** + * Interpret a comparison + * + * @param string $left + * @param string $right + * @param string $op + * @param Context $context + * + * @throws \Liquid\Exception\RenderException + * @return bool + */ + protected function interpretCondition($left, $right, $op, Context $context) + { + if (is_null($op)) { + $value = $this->stringValue($context->get($left)); + return $value; + } + + // values of 'empty' have a special meaning in array comparisons + if ($right == 'empty' && is_array($context->get($left))) { + $left = count($context->get($left)); + $right = 0; + } elseif ($left == 'empty' && is_array($context->get($right))) { + $right = count($context->get($right)); + $left = 0; + } else { + $left = $context->get($left); + $right = $context->get($right); + + $left = $this->stringValue($left); + $right = $this->stringValue($right); + } + + // special rules for null values + if (is_null($left) || is_null($right)) { + // null == null returns true + if ($op == '==' && is_null($left) && is_null($right)) { + return true; + } + + // null != anything other than null return true + if ($op == '!=' && (!is_null($left) || !is_null($right))) { + return true; + } + + // everything else, return false; + return false; + } + + // regular rules + switch ($op) { + case '==': + return ($left == $right); + + case '!=': + return ($left != $right); + + case '>': + return ($left > $right); + + case '<': + return ($left < $right); + + case '>=': + return ($left >= $right); + + case '<=': + return ($left <= $right); + + case 'contains': + return is_array($left) ? in_array($right, $left) : (strpos($left, $right) !== false); + + default: + throw new RenderException("Error in tag '" . $this->name() . "' - Unknown operator $op"); + } + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Document.php b/package/vendor/liquid/liquid/src/Liquid/Document.php new file mode 100644 index 0000000..ec7e350 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Document.php @@ -0,0 +1,95 @@ +fileSystem = $fileSystem; + $this->parse($tokens); + } + + /** + * Check for cached includes; if there are - do not use cache + * + * @see \Liquid\Tag\TagInclude::hasIncludes() + * @see \Liquid\Tag\TagExtends::hasIncludes() + * @return bool if need to discard cache + */ + public function hasIncludes() + { + $seenExtends = false; + $seenBlock = false; + + foreach ($this->nodelist as $token) { + if ($token instanceof TagExtends) { + $seenExtends = true; + } elseif ($token instanceof TagBlock) { + $seenBlock = true; + } + } + + /* + * We try to keep the base templates in cache (that not extend anything). + * + * At the same time if we re-render all other blocks we see, we avoid most + * if not all related caching quirks. This may be suboptimal. + */ + if ($seenBlock && !$seenExtends) { + return true; + } + + foreach ($this->nodelist as $token) { + // check any of the tokens for includes + if ($token instanceof TagInclude && $token->hasIncludes()) { + return true; + } + + if ($token instanceof TagExtends && $token->hasIncludes()) { + return true; + } + } + + return false; + } + + /** + * There isn't a real delimiter + * + * @return string + */ + protected function blockDelimiter() + { + return ''; + } + + /** + * Document blocks don't need to be terminated since they are not actually opened + */ + protected function assertMissingDelimitation() + { + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Drop.php b/package/vendor/liquid/liquid/src/Liquid/Drop.php new file mode 100644 index 0000000..7adbf62 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Drop.php @@ -0,0 +1,107 @@ + 'sales', 'limit' => 10 )); + * } + * } + * + * tmpl = Liquid::Template.parse( ' {% for product in product.top_sales %} {{ product.name }} {%endfor%} ' ) + * tmpl.render('product' => ProductDrop.new ) // will invoke topSales query. + * + * Your drop can either implement the methods sans any parameters or implement the beforeMethod(name) method which is a + * catch all. + */ +abstract class Drop +{ + /** + * @var Context + */ + protected $context; + + /** + * Catch all method that is invoked before a specific method + * + * @param string $method + * + * @return null + */ + protected function beforeMethod($method) + { + return null; + } + + /** + * @param Context $context + */ + public function setContext(Context $context) + { + $this->context = $context; + } + + /** + * Invoke a specific method + * + * @param string $method + * + * @return mixed + */ + public function invokeDrop($method) + { + $result = $this->beforeMethod($method); + + if (is_null($result) && is_callable(array($this, $method))) { + $result = $this->$method(); + } + + return $result; + } + + /** + * Returns true if the drop supports the given method + * + * @param string $name + * + * @return bool + */ + public function hasKey($name) + { + return true; + } + + /** + * @return Drop + */ + public function toLiquid() + { + return $this; + } + + /** + * @return string + */ + public function __toString() + { + return get_class($this); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Exception/CacheException.php b/package/vendor/liquid/liquid/src/Liquid/Exception/CacheException.php new file mode 100644 index 0000000..4ccb6b7 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Exception/CacheException.php @@ -0,0 +1,21 @@ +root = $root; + } + + /** + * Retrieve a template file + * + * @param string $templatePath + * + * @return string template content + */ + public function readTemplateFile($templatePath) + { + return file_get_contents($this->fullPath($templatePath)); + } + + /** + * Resolves a given path to a full template file path, making sure it's valid + * + * @param string $templatePath + * + * @throws \Liquid\Exception\ParseException + * @throws \Liquid\Exception\NotFoundException + * @return string + */ + public function fullPath($templatePath) + { + if (empty($templatePath)) { + throw new ParseException("Empty template name"); + } + + $nameRegex = Liquid::get('INCLUDE_ALLOW_EXT') + ? new Regexp('/^[^.\/][a-zA-Z0-9_\.\/-]+$/') + : new Regexp('/^[^.\/][a-zA-Z0-9_\/-]+$/'); + + if (!$nameRegex->match($templatePath)) { + throw new ParseException("Illegal template name '$templatePath'"); + } + + $templateDir = dirname($templatePath); + $templateFile = basename($templatePath); + + if (!Liquid::get('INCLUDE_ALLOW_EXT')) { + $templateFile = Liquid::get('INCLUDE_PREFIX') . $templateFile . '.' . Liquid::get('INCLUDE_SUFFIX'); + } + + $fullPath = join(DIRECTORY_SEPARATOR, array($this->root, $templateDir, $templateFile)); + + $realFullPath = realpath($fullPath); + if ($realFullPath === false) { + throw new NotFoundException("File not found: $fullPath"); + } + + if (strpos($realFullPath, $this->root) !== 0) { + throw new NotFoundException("Illegal template full path: {$realFullPath} not under {$this->root}"); + } + + return $realFullPath; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/FileSystem/Virtual.php b/package/vendor/liquid/liquid/src/Liquid/FileSystem/Virtual.php new file mode 100644 index 0000000..3ceda2f --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/FileSystem/Virtual.php @@ -0,0 +1,64 @@ +callback = $callback; + } + + /** + * Retrieve a template file + * + * @param string $templatePath + * + * @return string template content + */ + public function readTemplateFile($templatePath) + { + return call_user_func($this->callback, $templatePath); + } + + public function __sleep() + { + // we cannot serialize a closure + if ($this->callback instanceof \Closure) { + throw new FilesystemException("Virtual file system with a Closure as a callback cannot be used with a serializing cache"); + } + + return array_keys(get_object_vars($this)); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Filterbank.php b/package/vendor/liquid/liquid/src/Liquid/Filterbank.php new file mode 100644 index 0000000..53775c6 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Filterbank.php @@ -0,0 +1,153 @@ +context = $context; + + $this->addFilter(\Liquid\StandardFilters::class); + $this->addFilter(\Liquid\CustomFilters::class); + } + + /** + * Adds a filter to the bank + * + * @param mixed $filter Can either be an object, the name of a class (in which case the + * filters will be called statically) or the name of a function. + * + * @throws \Liquid\Exception\WrongArgumentException + * @return bool + */ + public function addFilter($filter, callable $callback = null) + { + // If it is a callback, save it as it is + if (is_string($filter) && $callback) { + $this->methodMap[$filter] = $callback; + return true; + } + + // If the filter is a class, register all its static methods + if (is_string($filter) && class_exists($filter)) { + $reflection = new \ReflectionClass($filter); + foreach ($reflection->getMethods(\ReflectionMethod::IS_STATIC) as $method) { + $this->methodMap[$method->name] = $method->class; + } + + return true; + } + + // If it's a global function, register it simply + if (is_string($filter) && function_exists($filter)) { + $this->methodMap[$filter] = false; + return true; + } + + // If it isn't an object an isn't a string either, it's a bad parameter + if (!is_object($filter)) { + throw new WrongArgumentException("Parameter passed to addFilter must be an object or a string"); + } + + // If the passed filter was an object, store the object for future reference. + $filter->context = $this->context; + $className = get_class($filter); + $this->filters[$className] = $filter; + + // Then register all public static and not methods as filters + foreach (get_class_methods($filter) as $method) { + if (strtolower($method) === '__construct') { + continue; + } + $this->methodMap[$method] = $className; + } + + return true; + } + + /** + * Invokes the filter with the given name + * + * @param string $name The name of the filter + * @param string $value The value to filter + * @param array $args The additional arguments for the filter + * + * @return string + */ + public function invoke($name, $value, array $args = array()) + { + // workaround for a single standard filter being a reserved keyword - we can't use overloading for static calls + if ($name == 'default') { + $name = '_default'; + } + + array_unshift($args, $value); + + // Consult the mapping + if (!isset($this->methodMap[$name])) { + return $value; + } + + $class = $this->methodMap[$name]; + + // If we have a callback + if (is_callable($class)) { + return call_user_func_array($class, $args); + } + + // If we have a registered object for the class, use that instead + if (isset($this->filters[$class])) { + $class = $this->filters[$class]; + } + + // If we're calling a function + if ($class === false) { + return call_user_func_array($name, $args); + } + + // Call a class or an instance method + return call_user_func_array(array($class, $name), $args); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Liquid.php b/package/vendor/liquid/liquid/src/Liquid/Liquid.php new file mode 100644 index 0000000..6f872ab --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Liquid.php @@ -0,0 +1,170 @@ + 'field_exists', + + // This method is called on object when resolving variables when + // a given property exists. + 'GET_PROPERTY_METHOD' => 'get', + + // Separator between filters. + 'FILTER_SEPARATOR' => '\|', + + // Separator for arguments. + 'ARGUMENT_SEPARATOR' => ',', + + // Separator for argument names and values. + 'FILTER_ARGUMENT_SEPARATOR' => ':', + + // Separator for variable attributes. + 'VARIABLE_ATTRIBUTE_SEPARATOR' => '.', + + // Allow template names with extension in include and extends tags. + 'INCLUDE_ALLOW_EXT' => false, + + // Suffix for include files. + 'INCLUDE_SUFFIX' => 'liquid', + + // Prefix for include files. + 'INCLUDE_PREFIX' => '_', + + // Whitespace control. + 'WHITESPACE_CONTROL' => '-', + + // Tag start. + 'TAG_START' => '{%', + + // Tag end. + 'TAG_END' => '%}', + + // Variable start. + 'VARIABLE_START' => '{{', + + // Variable end. + 'VARIABLE_END' => '}}', + + // Variable name. + 'VARIABLE_NAME' => '[a-zA-Z_][a-zA-Z_0-9.-]*', + + 'QUOTED_STRING' => '(?:"[^"]*"|\'[^\']*\')', + 'QUOTED_STRING_FILTER_ARGUMENT' => '"[^"]*"|\'[^\']*\'', + + // Automatically escape any variables unless told otherwise by a "raw" filter + 'ESCAPE_BY_DEFAULT' => false, + + // The name of the key to use when building pagination query strings e.g. ?page=1 + 'PAGINATION_REQUEST_KEY' => 'page', + + // The name of the context key used to denote the current page number + 'PAGINATION_CONTEXT_KEY' => 'page', + + // Whenever variables from $_SERVER should be directly available to templates + 'EXPOSE_SERVER' => false, + + // $_SERVER variables whitelist - exposed even when EXPOSE_SERVER is false + 'SERVER_SUPERGLOBAL_WHITELIST' => [ + 'HTTP_ACCEPT', + 'HTTP_ACCEPT_CHARSET', + 'HTTP_ACCEPT_ENCODING', + 'HTTP_ACCEPT_LANGUAGE', + 'HTTP_CONNECTION', + 'HTTP_HOST', + 'HTTP_REFERER', + 'HTTP_USER_AGENT', + 'HTTPS', + 'REQUEST_METHOD', + 'REQUEST_URI', + 'SERVER_NAME', + ], + ); + + /** + * Get a configuration setting. + * + * @param string $key setting key + * + * @return string + */ + public static function get($key) + { + // backward compatibility + if ($key === 'ALLOWED_VARIABLE_CHARS') { + return substr(self::$config['VARIABLE_NAME'], 0, -1); + } + if (array_key_exists($key, self::$config)) { + return self::$config[$key]; + } + // This case is needed for compound settings + switch ($key) { + case 'QUOTED_FRAGMENT': + return '(?:' . self::get('QUOTED_STRING') . '|(?:[^\s,\|\'"]|' . self::get('QUOTED_STRING') . ')+)'; + case 'TAG_ATTRIBUTES': + return '/(\w+)\s*\:\s*(' . self::get('QUOTED_FRAGMENT') . ')/'; + case 'TOKENIZATION_REGEXP': + return '/(' . self::$config['TAG_START'] . '.*?' . self::$config['TAG_END'] . '|' . self::$config['VARIABLE_START'] . '.*?' . self::$config['VARIABLE_END'] . ')/s'; + default: + return null; + } + } + + /** + * Changes/creates a setting. + * + * @param string $key + * @param string $value + */ + public static function set($key, $value) + { + // backward compatibility + if ($key === 'ALLOWED_VARIABLE_CHARS') { + $key = 'VARIABLE_NAME'; + $value .= '+'; + } + self::$config[$key] = $value; + } + + /** + * Flatten a multidimensional array into a single array. Does not maintain keys. + * + * @param array $array + * + * @return array + */ + public static function arrayFlatten($array) + { + $return = array(); + + foreach ($array as $element) { + if (is_array($element)) { + $return = array_merge($return, self::arrayFlatten($element)); + } else { + $return[] = $element; + } + } + return $return; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/LiquidException.php b/package/vendor/liquid/liquid/src/Liquid/LiquidException.php new file mode 100644 index 0000000..402c69d --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/LiquidException.php @@ -0,0 +1,19 @@ +pattern = (substr($pattern, 0, 1) != '/') + ? '/' . $this->quote($pattern) . '/' + : $pattern; + } + + /** + * Quotes regular expression characters + * + * @param string $string + * + * @return string + */ + public function quote($string) + { + return preg_quote($string, '/'); + } + + /** + * Returns an array of matches for the string in the same way as Ruby's scan method + * + * @param string $string + * + * @return array + */ + public function scan($string) + { + preg_match_all($this->pattern, $string, $matches); + + if (count($matches) == 1) { + return $matches[0]; + } + + array_shift($matches); + + $result = array(); + + foreach ($matches as $matchKey => $subMatches) { + foreach ($subMatches as $subMatchKey => $subMatch) { + $result[$subMatchKey][$matchKey] = $subMatch; + } + } + + return $result; + } + + /** + * Matches the given string. Only matches once. + * + * @param string $string + * + * @return int 1 if there was a match, 0 if there wasn't + */ + public function match($string) + { + return preg_match($this->pattern, $string, $this->matches); + } + + /** + * Matches the given string. Matches all. + * + * @param string $string + * + * @return int The number of matches + */ + public function matchAll($string) + { + return preg_match_all($this->pattern, $string, $this->matches); + } + + /** + * Splits the given string + * + * @param string $string + * @param int $limit Limits the amount of results returned + * + * @return array + */ + public function split($string, $limit = -1) + { + return preg_split($this->pattern, $string, $limit); + } + + /** + * Returns the original pattern primarily for debugging purposes + * + * @return string + */ + public function __toString() + { + return $this->pattern; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/StandardFilters.php b/package/vendor/liquid/liquid/src/Liquid/StandardFilters.php new file mode 100644 index 0000000..fa02247 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/StandardFilters.php @@ -0,0 +1,727 @@ +rewind(); + return $input->current(); + } + return is_array($input) ? reset($input) : $input; + } + + + /** + * @param mixed $input number + * + * @return int + */ + public static function floor($input) + { + return (int) floor((float)$input); + } + + + /** + * Joins elements of an array with a given character between them + * + * @param array|\Traversable $input + * @param string $glue + * + * @return string + */ + public static function join($input, $glue = ' ') + { + if ($input instanceof \Traversable) { + $str = ''; + foreach ($input as $elem) { + if ($str) { + $str .= $glue; + } + $str .= $elem; + } + return $str; + } + return is_array($input) ? implode($glue, $input) : $input; + } + + + /** + * Returns the last element of an array + * + * @param array|\Traversable $input + * + * @return mixed + */ + public static function last($input) + { + if ($input instanceof \Traversable) { + $last = null; + foreach ($input as $elem) { + $last = $elem; + } + return $last; + } + return is_array($input) ? end($input) : $input; + } + + + /** + * @param string $input + * + * @return string + */ + public static function lstrip($input) + { + return ltrim($input); + } + + + /** + * Map/collect on a given property + * + * @param array|\Traversable $input + * @param string $property + * + * @return string + */ + public static function map($input, $property) + { + if ($input instanceof \Traversable) { + $input = iterator_to_array($input); + } + if (!is_array($input)) { + return $input; + } + return array_map(function ($elem) use ($property) { + if (is_callable($elem)) { + return $elem(); + } elseif (is_array($elem) && array_key_exists($property, $elem)) { + return $elem[$property]; + } + return null; + }, $input); + } + + + /** + * subtraction + * + * @param float $input + * @param float $operand + * + * @return float + */ + public static function minus($input, $operand) + { + return (float)$input - (float)$operand; + } + + + /** + * modulo + * + * @param float $input + * @param float $operand + * + * @return float + */ + public static function modulo($input, $operand) + { + return fmod((float)$input, (float)$operand); + } + + + /** + * Replace each newline (\n) with html break + * + * @param string $input + * + * @return string + */ + public static function newline_to_br($input) + { + return is_string($input) ? str_replace("\n", "
\n", $input) : $input; + } + + + /** + * addition + * + * @param float $input + * @param float $operand + * + * @return float + */ + public static function plus($input, $operand) + { + return (float)$input + (float)$operand; + } + + + /** + * Prepend a string to another + * + * @param string $input + * @param string $string + * + * @return string + */ + public static function prepend($input, $string) + { + return $string . $input; + } + + + /** + * Remove a substring + * + * @param string $input + * @param string $string + * + * @return string + */ + public static function remove($input, $string) + { + return str_replace($string, '', $input); + } + + + /** + * Remove the first occurrences of a substring + * + * @param string $input + * @param string $string + * + * @return string + */ + public static function remove_first($input, $string) + { + if (($pos = strpos($input, $string)) !== false) { + $input = substr_replace($input, '', $pos, strlen($string)); + } + + return $input; + } + + + /** + * Replace occurrences of a string with another + * + * @param string $input + * @param string $string + * @param string $replacement + * + * @return string + */ + public static function replace($input, $string, $replacement = '') + { + return str_replace($string, $replacement, $input); + } + + + /** + * Replace the first occurrences of a string with another + * + * @param string $input + * @param string $string + * @param string $replacement + * + * @return string + */ + public static function replace_first($input, $string, $replacement = '') + { + if (($pos = strpos($input, $string)) !== false) { + $input = substr_replace($input, $replacement, $pos, strlen($string)); + } + + return $input; + } + + + /** + * Reverse the elements of an array + * + * @param array|\Traversable $input + * + * @return array + */ + public static function reverse($input) + { + if ($input instanceof \Traversable) { + $input = iterator_to_array($input); + } + return array_reverse($input); + } + + + /** + * Round a number + * + * @param float $input + * @param int $n precision + * + * @return float + */ + public static function round($input, $n = 0) + { + return round((float)$input, (int)$n); + } + + + /** + * @param string $input + * + * @return string + */ + public static function rstrip($input) + { + return rtrim($input); + } + + + /** + * Return the size of an array or of an string + * + * @param mixed $input + * @throws RenderException + * @return int + */ + public static function size($input) + { + if ($input instanceof \Iterator) { + return iterator_count($input); + } + + if (is_array($input)) { + return count($input); + } + + if (is_object($input)) { + if (method_exists($input, 'size')) { + return $input->size(); + } + + if (!method_exists($input, '__toString')) { + $class = get_class($input); + throw new RenderException("Size of $class cannot be estimated: it has no method 'size' nor can be converted to a string"); + } + } + + // only plain values and stringable objects left at this point + return strlen($input); + } + + + /** + * @param array|\Iterator|string $input + * @param int $offset + * @param int $length + * + * @return array|\Iterator|string + */ + public static function slice($input, $offset, $length = null) + { + if ($input instanceof \Iterator) { + $input = iterator_to_array($input); + } + if (is_array($input)) { + $input = array_slice($input, $offset, $length); + } elseif (is_string($input)) { + $input = mb_substr($input, $offset, $length); + } + + return $input; + } + + + /** + * Sort the elements of an array + * + * @param array|\Traversable $input + * @param string $property use this property of an array element + * + * @return array + */ + public static function sort($input, $property = null) + { + if ($input instanceof \Traversable) { + $input = iterator_to_array($input); + } + if ($property === null) { + asort($input); + } else { + $first = reset($input); + if ($first !== false && is_array($first) && array_key_exists($property, $first)) { + uasort($input, function ($a, $b) use ($property) { + if ($a[$property] == $b[$property]) { + return 0; + } + + return $a[$property] < $b[$property] ? -1 : 1; + }); + } + } + + return $input; + } + + /** + * Explicit string conversion. + * + * @param mixed $input + * + * @return string + */ + public static function string($input) + { + return strval($input); + } + + /** + * Split input string into an array of substrings separated by given pattern. + * + * @param string $input + * @param string $pattern + * + * @return array + */ + public static function split($input, $pattern) + { + if ($input === '' || $input === null) { + return []; + } + + return explode($pattern, $input); + } + + + /** + * @param string $input + * + * @return string + */ + public static function strip($input) + { + return trim($input); + } + + + /** + * Removes html tags from text + * + * @param string $input + * + * @return string + */ + public static function strip_html($input) + { + return is_string($input) ? strip_tags($input) : $input; + } + + + /** + * Strip all newlines (\n, \r) from string + * + * @param string $input + * + * @return string + */ + public static function strip_newlines($input) + { + return is_string($input) ? str_replace(array( + "\n", "\r" + ), '', $input) : $input; + } + + + /** + * multiplication + * + * @param float $input + * @param float $operand + * + * @return float + */ + public static function times($input, $operand) + { + return (float)$input * (float)$operand; + } + + + /** + * Truncate a string down to x characters + * + * @param string $input + * @param int $characters + * @param string $ending string to append if truncated + * + * @return string + */ + public static function truncate($input, $characters = 100, $ending = '...') + { + if (is_string($input) || is_numeric($input)) { + if (strlen($input) > $characters) { + return mb_substr($input, 0, $characters) . $ending; + } + } + + return $input; + } + + + /** + * Truncate string down to x words + * + * @param string $input + * @param int $words + * @param string $ending string to append if truncated + * + * @return string + */ + public static function truncatewords($input, $words = 3, $ending = '...') + { + if (is_string($input)) { + $wordlist = explode(" ", $input); + + if (count($wordlist) > $words) { + return implode(" ", array_slice($wordlist, 0, $words)) . $ending; + } + } + + return $input; + } + + + /** + * Remove duplicate elements from an array + * + * @param array|\Traversable $input + * + * @return array + */ + public static function uniq($input) + { + if ($input instanceof \Traversable) { + $input = iterator_to_array($input); + } + return array_unique($input); + } + + + /** + * Convert an input to uppercase + * + * @param string $input + * + * @return string + */ + public static function upcase($input) + { + return is_string($input) ? mb_strtoupper($input) : $input; + } + + + /** + * URL encodes a string + * + * @param string $input + * + * @return string + */ + public static function url_encode($input) + { + return urlencode($input); + } + + /** + * Decodes a URL-encoded string + * + * @param string $input + * + * @return string + */ + public static function url_decode($input) + { + return urldecode($input); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagAssign.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagAssign.php new file mode 100644 index 0000000..76dabda --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagAssign.php @@ -0,0 +1,76 @@ +match($markup)) { + $this->to = $syntaxRegexp->matches[1]; + $this->from = new Variable($syntaxRegexp->matches[2]); + } else { + throw new ParseException("Syntax Error in 'assign' - Valid syntax: assign [var] = [source]"); + } + } + + /** + * Renders the tag + * + * @param Context $context + * + * @return string|void + */ + public function render(Context $context) + { + $output = $this->from->render($context); + + $context->set($this->to, $output, true); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagBlock.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagBlock.php new file mode 100644 index 0000000..c1f63cb --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagBlock.php @@ -0,0 +1,56 @@ +match($markup)) { + $this->block = $syntaxRegexp->matches[1]; + parent::__construct($markup, $tokens, $fileSystem); + } else { + throw new ParseException("Syntax Error in 'block' - Valid syntax: block [name]"); + } + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagBreak.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagBreak.php new file mode 100644 index 0000000..5a16828 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagBreak.php @@ -0,0 +1,42 @@ +registers['break'] = true; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagCapture.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagCapture.php new file mode 100644 index 0000000..1995d66 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagCapture.php @@ -0,0 +1,71 @@ +match($markup)) { + $this->to = $syntaxRegexp->matches[1]; + parent::__construct($markup, $tokens, $fileSystem); + } else { + throw new ParseException("Syntax Error in 'capture' - Valid syntax: capture [var] [value]"); + } + } + + /** + * Renders the block + * + * @param Context $context + * + * @return string + */ + public function render(Context $context) + { + $output = parent::render($context); + + $context->set($this->to, $output, true); + return ''; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagCase.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagCase.php new file mode 100644 index 0000000..9ed29a3 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagCase.php @@ -0,0 +1,171 @@ +nodelists = array(); + $this->elseNodelist = array(); + + parent::__construct($markup, $tokens, $fileSystem); + + $syntaxRegexp = new Regexp('/' . Liquid::get('QUOTED_FRAGMENT') . '/'); + + if ($syntaxRegexp->match($markup)) { + $this->left = $syntaxRegexp->matches[0]; + } else { + throw new ParseException("Syntax Error in tag 'case' - Valid syntax: case [condition]"); // harry + } + } + + /** + * Pushes the last nodelist onto the stack + */ + public function endTag() + { + $this->pushNodelist(); + } + + /** + * Unknown tag handler + * + * @param string $tag + * @param string $params + * @param array $tokens + * + * @throws \Liquid\Exception\ParseException + */ + public function unknownTag($tag, $params, array $tokens) + { + $whenSyntaxRegexp = new Regexp('/' . Liquid::get('QUOTED_FRAGMENT') . '/'); + + switch ($tag) { + case 'when': + // push the current nodelist onto the stack and prepare for a new one + if ($whenSyntaxRegexp->match($params)) { + $this->pushNodelist(); + $this->right = $whenSyntaxRegexp->matches[0]; + $this->nodelist = array(); + } else { + throw new ParseException("Syntax Error in tag 'case' - Valid when condition: when [condition]"); // harry + } + break; + + case 'else': + // push the last nodelist onto the stack and prepare to receive the else nodes + $this->pushNodelist(); + $this->right = null; + $this->elseNodelist = &$this->nodelist; + $this->nodelist = array(); + break; + + default: + parent::unknownTag($tag, $params, $tokens); + } + } + + /** + * Pushes the current right value and nodelist into the nodelist stack + */ + public function pushNodelist() + { + if (!is_null($this->right)) { + $this->nodelists[] = array($this->right, $this->nodelist); + } + } + + /** + * Renders the node + * + * @param Context $context + * + * @return string + */ + public function render(Context $context) + { + $output = ''; // array(); + $runElseBlock = true; + + foreach ($this->nodelists as $data) { + list($right, $nodelist) = $data; + + if ($this->equalVariables($this->left, $right, $context)) { + $runElseBlock = false; + + $context->push(); + $output .= $this->renderAll($nodelist, $context); + $context->pop(); + } + } + + if ($runElseBlock) { + $context->push(); + $output .= $this->renderAll($this->elseNodelist, $context); + $context->pop(); + } + + return $output; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagComment.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagComment.php new file mode 100644 index 0000000..e41cc06 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagComment.php @@ -0,0 +1,37 @@ +registers['continue'] = true; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagCycle.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagCycle.php new file mode 100644 index 0000000..2140847 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagCycle.php @@ -0,0 +1,130 @@ +match($markup)) { + $this->variables = $this->variablesFromString($namedSyntax->matches[2]); + $this->name = $namedSyntax->matches[1]; + } elseif ($simpleSyntax->match($markup)) { + $this->variables = $this->variablesFromString($markup); + $this->name = "'" . implode($this->variables) . "'"; + } else { + throw new ParseException("Syntax Error in 'cycle' - Valid syntax: cycle [name :] var [, var2, var3 ...]"); + } + } + + /** + * Renders the tag + * + * @var Context $context + * @return string + */ + public function render(Context $context) + { + $context->push(); + + $key = $context->get($this->name); + + if (isset($context->registers['cycle'][$key])) { + $iteration = $context->registers['cycle'][$key]; + } else { + $iteration = 0; + } + + $result = $context->get($this->variables[$iteration]); + + $iteration += 1; + + if ($iteration >= count($this->variables)) { + $iteration = 0; + } + + $context->registers['cycle'][$key] = $iteration; + + $context->pop(); + + return $result; + } + + /** + * Extract variables from a string of markup + * + * @param string $markup + * + * @return array; + */ + private function variablesFromString($markup) + { + $regexp = new Regexp('/\s*(' . Liquid::get('QUOTED_FRAGMENT') . ')\s*/'); + $parts = explode(',', $markup); + $result = array(); + + foreach ($parts as $part) { + $regexp->match($part); + + if (!empty($regexp->matches[1])) { + $result[] = $regexp->matches[1]; + } + } + + return $result; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagDecrement.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagDecrement.php new file mode 100644 index 0000000..2a76887 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagDecrement.php @@ -0,0 +1,83 @@ +match($markup)) { + $this->toDecrement = $syntax->matches[0]; + } else { + throw new ParseException("Syntax Error in 'decrement' - Valid syntax: decrement [var]"); + } + } + + /** + * Renders the tag + * + * @param Context $context + * + * @return string|void + */ + public function render(Context $context) + { + // if the value is not set in the environment check to see if it + // exists in the context, and if not set it to 0 + if (!isset($context->environments[0][$this->toDecrement])) { + // check for a context value + $fromContext = $context->get($this->toDecrement); + + // we already have a value in the context + $context->environments[0][$this->toDecrement] = (null !== $fromContext) ? $fromContext : 0; + } + + // decrement the environment value + $context->environments[0][$this->toDecrement]--; + + return ''; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagExtends.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagExtends.php new file mode 100644 index 0000000..8c88a29 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagExtends.php @@ -0,0 +1,214 @@ +match($markup) && isset($regex->matches[1])) { + $this->templateName = substr($regex->matches[1], 1, strlen($regex->matches[1]) - 2); + } else { + throw new ParseException("Error in tag 'extends' - Valid syntax: extends '[template name]'"); + } + + parent::__construct($markup, $tokens, $fileSystem); + } + + /** + * @param array $tokens + * + * @return array + */ + private function findBlocks(array $tokens) + { + $blockstartRegexp = new Regexp('/^' . Liquid::get('TAG_START') . '\s*block (\w+)\s*(.*)?' . Liquid::get('TAG_END') . '$/'); + $blockendRegexp = new Regexp('/^' . Liquid::get('TAG_START') . '\s*endblock\s*?' . Liquid::get('TAG_END') . '$/'); + + $b = array(); + $name = null; + + foreach ($tokens as $token) { + if ($blockstartRegexp->match($token)) { + $name = $blockstartRegexp->matches[1]; + $b[$name] = array(); + } elseif ($blockendRegexp->match($token)) { + $name = null; + } else { + if ($name !== null) { + array_push($b[$name], $token); + } + } + } + + return $b; + } + + /** + * Parses the tokens + * + * @param array $tokens + * + * @throws \Liquid\Exception\MissingFilesystemException + */ + public function parse(array &$tokens) + { + if ($this->fileSystem === null) { + throw new MissingFilesystemException("No file system"); + } + + // read the source of the template and create a new sub document + $source = $this->fileSystem->readTemplateFile($this->templateName); + + // tokens in this new document + $maintokens = Template::tokenize($source); + + $eRegexp = new Regexp('/^' . Liquid::get('TAG_START') . '\s*extends (.*)?' . Liquid::get('TAG_END') . '$/'); + foreach ($maintokens as $maintoken) { + if ($eRegexp->match($maintoken)) { + $m = $eRegexp->matches[1]; + break; + } + } + + if (isset($m)) { + $rest = array_merge($maintokens, $tokens); + } else { + $childtokens = $this->findBlocks($tokens); + + $blockstartRegexp = new Regexp('/^' . Liquid::get('TAG_START') . '\s*block (\w+)\s*(.*)?' . Liquid::get('TAG_END') . '$/'); + $blockendRegexp = new Regexp('/^' . Liquid::get('TAG_START') . '\s*endblock\s*?' . Liquid::get('TAG_END') . '$/'); + + $name = null; + + $rest = array(); + $keep = false; + + for ($i = 0; $i < count($maintokens); $i++) { + if ($blockstartRegexp->match($maintokens[$i])) { + $name = $blockstartRegexp->matches[1]; + + if (isset($childtokens[$name])) { + $keep = true; + array_push($rest, $maintokens[$i]); + foreach ($childtokens[$name] as $item) { + array_push($rest, $item); + } + } + } + if (!$keep) { + array_push($rest, $maintokens[$i]); + } + + if ($blockendRegexp->match($maintokens[$i]) && $keep === true) { + $keep = false; + array_push($rest, $maintokens[$i]); + } + } + } + + $cache = Template::getCache(); + + if (!$cache) { + $this->document = new Document($rest, $this->fileSystem); + return; + } + + $this->hash = md5($source); + + $this->document = $cache->read($this->hash); + + if ($this->document == false || $this->document->hasIncludes() == true) { + $this->document = new Document($rest, $this->fileSystem); + $cache->write($this->hash, $this->document); + } + } + + /** + * Check for cached includes; if there are - do not use cache + * + * @see Document::hasIncludes() + * @return boolean + */ + public function hasIncludes() + { + if ($this->document->hasIncludes() == true) { + return true; + } + + $source = $this->fileSystem->readTemplateFile($this->templateName); + + if (Template::getCache()->exists(md5($source)) && $this->hash === md5($source)) { + return false; + } + + return true; + } + + /** + * Renders the node + * + * @param Context $context + * + * @return string + */ + public function render(Context $context) + { + $context->push(); + $result = $this->document->render($context); + $context->pop(); + return $result; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagFor.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagFor.php new file mode 100644 index 0000000..e146887 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagFor.php @@ -0,0 +1,236 @@ +match($markup)) { + $this->variableName = $syntaxRegexp->matches[1]; + $this->collectionName = $syntaxRegexp->matches[2]; + $this->name = $syntaxRegexp->matches[1] . '-' . $syntaxRegexp->matches[2]; + $this->extractAttributes($markup); + } else { + $syntaxRegexp = new Regexp('/(\w+)\s+in\s+\((\d+|' . Liquid::get('VARIABLE_NAME') . ')\s*\.\.\s*(\d+|' . Liquid::get('VARIABLE_NAME') . ')\)/'); + if ($syntaxRegexp->match($markup)) { + $this->type = 'digit'; + $this->variableName = $syntaxRegexp->matches[1]; + $this->start = $syntaxRegexp->matches[2]; + $this->collectionName = $syntaxRegexp->matches[3]; + $this->name = $syntaxRegexp->matches[1].'-digit'; + $this->extractAttributes($markup); + } else { + throw new ParseException("Syntax Error in 'for loop' - Valid syntax: for [item] in [collection]"); + } + } + } + + /** + * Renders the tag + * + * @param Context $context + * + * @return null|string + */ + public function render(Context $context) + { + if (!isset($context->registers['for'])) { + $context->registers['for'] = array(); + } + + if ($this->type == 'digit') { + return $this->renderDigit($context); + } + + // that's the default + return $this->renderCollection($context); + } + + private function renderCollection(Context $context) + { + $collection = $context->get($this->collectionName); + + if ($collection instanceof \Generator && !$collection->valid()) { + return ''; + } + + if ($collection instanceof \Traversable) { + $collection = iterator_to_array($collection); + } + + if (is_null($collection) || !is_array($collection) || count($collection) == 0) { + return ''; + } + + $range = array(0, count($collection)); + + if (isset($this->attributes['limit']) || isset($this->attributes['offset'])) { + $offset = 0; + + if (isset($this->attributes['offset'])) { + $offset = ($this->attributes['offset'] == 'continue') ? $context->registers['for'][$this->name] : $context->get($this->attributes['offset']); + } + + $limit = (isset($this->attributes['limit'])) ? $context->get($this->attributes['limit']) : null; + $rangeEnd = $limit ? $limit : count($collection) - $offset; + $range = array($offset, $rangeEnd); + + $context->registers['for'][$this->name] = $rangeEnd + $offset; + } + + $result = ''; + $segment = array_slice($collection, $range[0], $range[1]); + if (!count($segment)) { + return null; + } + + $context->push(); + $length = count($segment); + + $index = 0; + foreach ($segment as $key => $item) { + $value = is_numeric($key) ? $item : array($key, $item); + $context->set($this->variableName, $value); + $context->set('forloop', array( + 'name' => $this->name, + 'length' => $length, + 'index' => $index + 1, + 'index0' => $index, + 'rindex' => $length - $index, + 'rindex0' => $length - $index - 1, + 'first' => (int)($index == 0), + 'last' => (int)($index == $length - 1) + )); + + $result .= $this->renderAll($this->nodelist, $context); + + $index++; + + if (isset($context->registers['break'])) { + unset($context->registers['break']); + break; + } + if (isset($context->registers['continue'])) { + unset($context->registers['continue']); + } + } + + $context->pop(); + + return $result; + } + + private function renderDigit(Context $context) + { + $start = $this->start; + if (!is_integer($this->start)) { + $start = $context->get($this->start); + } + + $end = $this->collectionName; + if (!is_integer($this->collectionName)) { + $end = $context->get($this->collectionName); + } + + $range = array($start, $end); + + $context->push(); + $result = ''; + $index = 0; + $length = $range[1] - $range[0]; + for ($i = $range[0]; $i <= $range[1]; $i++) { + $context->set($this->variableName, $i); + $context->set('forloop', array( + 'name' => $this->name, + 'length' => $length, + 'index' => $index + 1, + 'index0' => $index, + 'rindex' => $length - $index, + 'rindex0' => $length - $index - 1, + 'first' => (int)($index == 0), + 'last' => (int)($index == $length - 1) + )); + + $result .= $this->renderAll($this->nodelist, $context); + + $index++; + + if (isset($context->registers['break'])) { + unset($context->registers['break']); + break; + } + if (isset($context->registers['continue'])) { + unset($context->registers['continue']); + } + } + + $context->pop(); + + return $result; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagIf.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagIf.php new file mode 100644 index 0000000..01904a7 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagIf.php @@ -0,0 +1,168 @@ +nodelist = & $this->nodelistHolders[count($this->blocks)]; + + array_push($this->blocks, array('if', $markup, &$this->nodelist)); + + parent::__construct($markup, $tokens, $fileSystem); + } + + /** + * Handler for unknown tags, handle else tags + * + * @param string $tag + * @param array $params + * @param array $tokens + */ + public function unknownTag($tag, $params, array $tokens) + { + if ($tag == 'else' || $tag == 'elsif') { + // Update reference to nodelistHolder for this block + $this->nodelist = & $this->nodelistHolders[count($this->blocks) + 1]; + $this->nodelistHolders[count($this->blocks) + 1] = array(); + + array_push($this->blocks, array($tag, $params, &$this->nodelist)); + } else { + parent::unknownTag($tag, $params, $tokens); + } + } + + /** + * Render the tag + * + * @param Context $context + * + * @throws \Liquid\Exception\ParseException + * @return string + */ + public function render(Context $context) + { + $context->push(); + + $logicalRegex = new Regexp('/\s+(and|or)\s+/'); + $conditionalRegex = new Regexp('/(' . Liquid::get('QUOTED_FRAGMENT') . ')\s*([=!<>a-z_]+)?\s*(' . Liquid::get('QUOTED_FRAGMENT') . ')?/'); + + $result = ''; + foreach ($this->blocks as $block) { + if ($block[0] == 'else') { + $result = $this->renderAll($block[2], $context); + + break; + } + + if ($block[0] == 'if' || $block[0] == 'elsif') { + // Extract logical operators + $logicalRegex->matchAll($block[1]); + + $logicalOperators = $logicalRegex->matches; + $logicalOperators = $logicalOperators[1]; + // Extract individual conditions + $temp = $logicalRegex->split($block[1]); + + $conditions = array(); + + foreach ($temp as $condition) { + if ($conditionalRegex->match($condition)) { + $left = (isset($conditionalRegex->matches[1])) ? $conditionalRegex->matches[1] : null; + $operator = (isset($conditionalRegex->matches[2])) ? $conditionalRegex->matches[2] : null; + $right = (isset($conditionalRegex->matches[3])) ? $conditionalRegex->matches[3] : null; + + array_push($conditions, array( + 'left' => $left, + 'operator' => $operator, + 'right' => $right + )); + } else { + throw new ParseException("Syntax Error in tag 'if' - Valid syntax: if [condition]"); + } + } + if (count($logicalOperators)) { + // If statement contains and/or + $display = $this->interpretCondition($conditions[0]['left'], $conditions[0]['right'], $conditions[0]['operator'], $context); + foreach ($logicalOperators as $k => $logicalOperator) { + if ($logicalOperator == 'and') { + $display = ($display && $this->interpretCondition($conditions[$k + 1]['left'], $conditions[$k + 1]['right'], $conditions[$k + 1]['operator'], $context)); + } else { + $display = ($display || $this->interpretCondition($conditions[$k + 1]['left'], $conditions[$k + 1]['right'], $conditions[$k + 1]['operator'], $context)); + } + } + } else { + // If statement is a single condition + $display = $this->interpretCondition($conditions[0]['left'], $conditions[0]['right'], $conditions[0]['operator'], $context); + } + + // hook for unless tag + $display = $this->negateIfUnless($display); + + if ($display) { + $result = $this->renderAll($block[2], $context); + + break; + } + } + } + + $context->pop(); + + return $result; + } + + protected function negateIfUnless($display) + { + // no need to negate a condition in a regular `if` tag (will do that in `unless` tag) + return $display; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagIfchanged.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagIfchanged.php new file mode 100644 index 0000000..ae4cec1 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagIfchanged.php @@ -0,0 +1,61 @@ +lastValue == $output) { + return ''; + } + $this->lastValue = $output; + return $this->lastValue; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagInclude.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagInclude.php new file mode 100644 index 0000000..481cdba --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagInclude.php @@ -0,0 +1,200 @@ +match($markup)) { + throw new ParseException("Error in tag 'include' - Valid syntax: include '[template]' (with|for) [object|collection]"); + } + + $unquoted = (strpos($regex->matches[1], '"') === false && strpos($regex->matches[1], "'") === false); + + $start = 1; + $len = strlen($regex->matches[1]) - 2; + + if ($unquoted) { + $start = 0; + $len = strlen($regex->matches[1]); + } + + $this->templateName = substr($regex->matches[1], $start, $len); + + if (isset($regex->matches[1])) { + $this->collection = (isset($regex->matches[3])) ? ($regex->matches[3] == "for") : null; + $this->variable = (isset($regex->matches[4])) ? $regex->matches[4] : null; + } + + $this->extractAttributes($markup); + + parent::__construct($markup, $tokens, $fileSystem); + } + + /** + * Parses the tokens + * + * @param array $tokens + * + * @throws \Liquid\Exception\MissingFilesystemException + */ + public function parse(array &$tokens) + { + if ($this->fileSystem === null) { + throw new MissingFilesystemException("No file system"); + } + + // read the source of the template and create a new sub document + $source = $this->fileSystem->readTemplateFile($this->templateName); + + $cache = Template::getCache(); + + if (!$cache) { + // tokens in this new document + $templateTokens = Template::tokenize($source); + $this->document = new Document($templateTokens, $this->fileSystem); + return; + } + + $this->hash = md5($source); + $this->document = $cache->read($this->hash); + + if ($this->document == false || $this->document->hasIncludes() == true) { + $templateTokens = Template::tokenize($source); + $this->document = new Document($templateTokens, $this->fileSystem); + $cache->write($this->hash, $this->document); + } + } + + /** + * Check for cached includes; if there are - do not use cache + * + * @see Document::hasIncludes() + * @return boolean + */ + public function hasIncludes() + { + if ($this->document->hasIncludes() == true) { + return true; + } + + $source = $this->fileSystem->readTemplateFile($this->templateName); + + if (Template::getCache()->exists(md5($source)) && $this->hash === md5($source)) { + return false; + } + + return true; + } + + /** + * Renders the node + * + * @param Context $context + * + * @return string + */ + public function render(Context $context) + { + $result = ''; + $variable = $context->get($this->variable); + + $context->push(); + + foreach ($this->attributes as $key => $value) { + $context->set($key, $context->get($value)); + } + + if ($this->collection) { + foreach ($variable as $item) { + $context->set($this->templateName, $item); + $result .= $this->document->render($context); + } + } else { + if (!is_null($this->variable)) { + $context->set($this->templateName, $variable); + } + + $result .= $this->document->render($context); + } + + $context->pop(); + + return $result; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagIncrement.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagIncrement.php new file mode 100644 index 0000000..ed428c8 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagIncrement.php @@ -0,0 +1,83 @@ +match($markup)) { + $this->toIncrement = $syntax->matches[0]; + } else { + throw new ParseException("Syntax Error in 'increment' - Valid syntax: increment [var]"); + } + } + + /** + * Renders the tag + * + * @param Context $context + * + * @return string|void + */ + public function render(Context $context) + { + // If the value is not set in the environment check to see if it + // exists in the context, and if not set it to -1 + if (!isset($context->environments[0][$this->toIncrement])) { + // check for a context value + $from_context = $context->get($this->toIncrement); + + // we already have a value in the context + $context->environments[0][$this->toIncrement] = (null !== $from_context) ? $from_context : -1; + } + + // Increment the value + $context->environments[0][$this->toIncrement]++; + + return ''; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagPaginate.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagPaginate.php new file mode 100644 index 0000000..afafaef --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagPaginate.php @@ -0,0 +1,206 @@ + + * {% endfor %} + * {% endpaginate %} + * + */ + +class TagPaginate extends AbstractBlock +{ + /** + * @var array The collection to paginate + */ + private $collectionName; + + /** + * @var array The collection object + */ + private $collection; + + /** + * @var int The size of the collection + */ + private $collectionSize; + + /** + * @var int The number of items to paginate by + */ + private $numberItems; + + /** + * @var int The current page + */ + private $currentPage; + + /** + * @var int The current offset (no of pages times no of items) + */ + private $currentOffset; + + /** + * @var int Total pages + */ + private $totalPages; + + + /** + * Constructor + * + * @param string $markup + * @param array $tokens + * @param FileSystem $fileSystem + * + * @throws \Liquid\Exception\ParseException + * + */ + public function __construct($markup, array &$tokens, FileSystem $fileSystem = null) + { + parent::__construct($markup, $tokens, $fileSystem); + + $syntax = new Regexp('/(' . Liquid::get('VARIABLE_NAME') . ')\s+by\s+(\w+)/'); + + if ($syntax->match($markup)) { + $this->collectionName = $syntax->matches[1]; + $this->numberItems = $syntax->matches[2]; + $this->extractAttributes($markup); + } else { + throw new ParseException("Syntax Error - Valid syntax: paginate [collection] by [items]"); + } + } + + /** + * Renders the tag + * + * @param Context $context + * + * @return string + * + */ + public function render(Context $context) + { + $this->collection = $context->get($this->collectionName); + + if ($this->collection instanceof \Traversable) { + $this->collection = iterator_to_array($this->collection); + } + + if (!is_array($this->collection)) { + // TODO do not throw up if error mode allows, see #83 + throw new RenderException("Missing collection with name '{$this->collectionName}'"); + } + + // How many pages are there? + $this->collectionSize = count($this->collection); + $this->totalPages = ceil($this->collectionSize / $this->numberItems); + + // Whatever there is in the context, we need a number + $this->currentPage = intval($context->get(Liquid::get('PAGINATION_CONTEXT_KEY'))); + + // Page number can only be between 1 and a number of pages + $this->currentPage = max(1, min($this->currentPage, $this->totalPages)); + + // Find the offset and select that part + $this->currentOffset = ($this->currentPage - 1) * $this->numberItems; + $paginatedCollection = array_slice($this->collection, $this->currentOffset, $this->numberItems); + + // We must work in a new scope so we won't pollute a global scope + $context->push(); + + // Sets the collection if it's a key of another collection (ie search.results, collection.products, blog.articles) + $segments = explode('.', $this->collectionName); + if (count($segments) == 2) { + $context->set($segments[0], array($segments[1] => $paginatedCollection)); + } else { + $context->set($this->collectionName, $paginatedCollection); + } + + $paginate = array( + 'page_size' => $this->numberItems, + 'current_page' => $this->currentPage, + 'current_offset' => $this->currentOffset, + 'pages' => $this->totalPages, + 'items' => $this->collectionSize + ); + + // Get the name of the request field to use in URLs + $pageRequestKey = Liquid::get('PAGINATION_REQUEST_KEY'); + + if ($this->currentPage > 1) { + $paginate['previous']['title'] = 'Previous'; + $paginate['previous']['url'] = $this->currentUrl($context, [ + $pageRequestKey => $this->currentPage - 1, + ]); + } + + if ($this->currentPage < $this->totalPages) { + $paginate['next']['title'] = 'Next'; + $paginate['next']['url'] = $this->currentUrl($context, [ + $pageRequestKey => $this->currentPage + 1, + ]); + } + + $context->set('paginate', $paginate); + + $result = parent::render($context); + + $context->pop(); + + return $result; + } + + /** + * Returns the current page URL + * + * @param Context $context + * @param array $queryPart + * + * @return string + * + */ + public function currentUrl($context, $queryPart = []) + { + // From here we have $url->path and $url->query + $url = (object) parse_url($context->get('REQUEST_URI')); + + // Let's merge the query part + if (isset($url->query)) { + parse_str($url->query, $url->query); + $url->query = array_merge($url->query, $queryPart); + } else { + $url->query = $queryPart; + } + + $url->query = http_build_query($url->query); + + $scheme = $context->get('HTTPS') == 'on' ? 'https' : 'http'; + + return "$scheme://{$context->get('HTTP_HOST')}{$url->path}?{$url->query}"; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagRaw.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagRaw.php new file mode 100644 index 0000000..36310d7 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagRaw.php @@ -0,0 +1,52 @@ +nodelist = array(); + + while (count($tokens)) { + $token = array_shift($tokens); + + if ($tagRegexp->match($token)) { + // If we found the proper block delimiter just end parsing here and let the outer block proceed + if ($tagRegexp->matches[1] == $this->blockDelimiter()) { + break; + } + } + + $this->nodelist[] = $token; + } + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagTablerow.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagTablerow.php new file mode 100644 index 0000000..13cf6e3 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagTablerow.php @@ -0,0 +1,152 @@ +match($markup)) { + $this->variableName = $syntax->matches[1]; + $this->collectionName = $syntax->matches[2]; + + $this->extractAttributes($markup); + } else { + throw new ParseException("Syntax Error in 'table_row loop' - Valid syntax: table_row [item] in [collection] cols:3"); + } + } + + /** + * Renders the current node + * + * @param Context $context + * @throws \Liquid\Exception\RenderException + * @return string + */ + public function render(Context $context) + { + $collection = $context->get($this->collectionName); + + if ($collection instanceof \Traversable) { + $collection = iterator_to_array($collection); + } + + if (!is_array($collection)) { + throw new RenderException("Not an array"); + } + + // discard keys + $collection = array_values($collection); + + if (isset($this->attributes['limit']) || isset($this->attributes['offset'])) { + $limit = $context->get($this->attributes['limit']); + $offset = $context->get($this->attributes['offset']); + $collection = array_slice($collection, $offset, $limit); + } + + $length = count($collection); + + $cols = isset($this->attributes['cols']) ? $context->get($this->attributes['cols']) : PHP_INT_MAX; + + $row = 1; + $col = 0; + + $result = "\n"; + + $context->push(); + + foreach ($collection as $index => $item) { + $context->set($this->variableName, $item); + $context->set('tablerowloop', array( + 'length' => $length, + 'index' => $index + 1, + 'index0' => $index, + 'rindex' => $length - $index, + 'rindex0' => $length - $index - 1, + 'first' => (int)($index == 0), + 'last' => (int)($index == $length - 1) + )); + + $text = $this->renderAll($this->nodelist, $context); + $break = isset($context->registers['break']); + $continue = isset($context->registers['continue']); + + if ((!$break && !$continue) || strlen(trim($text)) > 0) { + $result .= "$text"; + } + + if ($col == $cols && !($index == $length - 1)) { + $col = 0; + $result .= "\n\n"; + } + + if ($break) { + unset($context->registers['break']); + break; + } + if ($continue) { + unset($context->registers['continue']); + } + } + + $context->pop(); + + $result .= "\n"; + + return $result; + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Tag/TagUnless.php b/package/vendor/liquid/liquid/src/Liquid/Tag/TagUnless.php new file mode 100644 index 0000000..7d1f94d --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Tag/TagUnless.php @@ -0,0 +1,31 @@ +parse(template_source); + * $tpl->render(array('foo'=>1, 'bar'=>2); + */ +class Template +{ + const CLASS_PREFIX = '\Liquid\Cache\\'; + + /** + * @var Document The root of the node tree + */ + private $root; + + /** + * @var FileSystem The file system to use for includes + */ + private $fileSystem; + + /** + * @var array Globally included filters + */ + private $filters = array(); + + /** + * @var callable|null Called "sometimes" while rendering. For example to abort the execution of a rendering. + */ + private $tickFunction = null; + + /** + * @var array Custom tags + */ + private static $tags = array(); + + /** + * @var Cache + */ + private static $cache; + + /** + * Constructor. + * + * @param string $path + * @param array|Cache $cache + * + * @return Template + */ + public function __construct($path = null, $cache = null) + { + $this->fileSystem = $path !== null + ? new LocalFileSystem($path) + : null; + + $this->setCache($cache); + } + + /** + * @param FileSystem $fileSystem + */ + public function setFileSystem(FileSystem $fileSystem) + { + $this->fileSystem = $fileSystem; + } + + /** + * @param array|Cache $cache + * + * @throws \Liquid\Exception\CacheException + */ + public static function setCache($cache) + { + if (is_array($cache)) { + if (isset($cache['cache']) && class_exists($classname = self::CLASS_PREFIX . ucwords($cache['cache']))) { + self::$cache = new $classname($cache); + } else { + throw new CacheException('Invalid cache options!'); + } + } + + if ($cache instanceof Cache) { + self::$cache = $cache; + } + + if (is_null($cache)) { + self::$cache = null; + } + } + + /** + * @return Cache + */ + public static function getCache() + { + return self::$cache; + } + + /** + * @return Document + */ + public function getRoot() + { + return $this->root; + } + + /** + * Register custom Tags + * + * @param string $name + * @param string $class + */ + public static function registerTag($name, $class) + { + self::$tags[$name] = $class; + } + + /** + * @return array + */ + public static function getTags() + { + return self::$tags; + } + + /** + * Register the filter + * + * @param string $filter + */ + public function registerFilter($filter, callable $callback = null) + { + // Store callback for later use + if ($callback) { + $this->filters[] = [$filter, $callback]; + } else { + $this->filters[] = $filter; + } + } + + public function setTickFunction(callable $tickFunction) + { + $this->tickFunction = $tickFunction; + } + + /** + * Tokenizes the given source string + * + * @param string $source + * + * @return array + */ + public static function tokenize($source) + { + return empty($source) + ? array() + : preg_split(Liquid::get('TOKENIZATION_REGEXP'), $source, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); + } + + /** + * Parses the given source string + * + * @param string $source + * + * @return Template + */ + public function parse($source) + { + if (!self::$cache) { + return $this->parseAlways($source); + } + + $hash = md5($source); + $this->root = self::$cache->read($hash); + + // if no cached version exists, or if it checks for includes + if ($this->root == false || $this->root->hasIncludes() == true) { + $this->parseAlways($source); + self::$cache->write($hash, $this->root); + } + + return $this; + } + + /** + * Parses the given source string regardless of caching + * + * @param string $source + * + * @return Template + */ + private function parseAlways($source) + { + $tokens = Template::tokenize($source); + $this->root = new Document($tokens, $this->fileSystem); + + return $this; + } + + /** + * Parses the given template file + * + * @param string $templatePath + * @throws \Liquid\Exception\MissingFilesystemException + * @return Template + */ + public function parseFile($templatePath) + { + if (!$this->fileSystem) { + throw new MissingFilesystemException("Could not load a template without an initialized file system"); + } + + return $this->parse($this->fileSystem->readTemplateFile($templatePath)); + } + + /** + * Renders the current template + * + * @param array $assigns an array of values for the template + * @param array $filters additional filters for the template + * @param array $registers additional registers for the template + * + * @return string + */ + public function render(array $assigns = array(), $filters = null, array $registers = array()) + { + $context = new Context($assigns, $registers); + + if ($this->tickFunction) { + $context->setTickFunction($this->tickFunction); + } + + if (!is_null($filters)) { + if (is_array($filters)) { + $this->filters = array_merge($this->filters, $filters); + } else { + $this->filters[] = $filters; + } + } + + foreach ($this->filters as $filter) { + if (is_array($filter)) { + // Unpack a callback saved as second argument + $context->addFilters(...$filter); + } else { + $context->addFilters($filter); + } + } + + return $this->root->render($context); + } +} diff --git a/package/vendor/liquid/liquid/src/Liquid/Variable.php b/package/vendor/liquid/liquid/src/Liquid/Variable.php new file mode 100644 index 0000000..6afeb05 --- /dev/null +++ b/package/vendor/liquid/liquid/src/Liquid/Variable.php @@ -0,0 +1,173 @@ +markup = $markup; + + $filterSep = new Regexp('/' . Liquid::get('FILTER_SEPARATOR') . '\s*(.*)/m'); + $syntaxParser = new Regexp('/(' . Liquid::get('QUOTED_FRAGMENT') . ')(.*)/ms'); + $filterParser = new Regexp('/(?:\s+|' . Liquid::get('QUOTED_FRAGMENT') . '|' . Liquid::get('ARGUMENT_SEPARATOR') . ')+/'); + $filterArgsRegex = new Regexp('/(?:' . Liquid::get('FILTER_ARGUMENT_SEPARATOR') . '|' . Liquid::get('ARGUMENT_SEPARATOR') . ')\s*((?:\w+\s*\:\s*)?' . Liquid::get('QUOTED_FRAGMENT') . ')/'); + + $this->filters = []; + if ($syntaxParser->match($markup)) { + $nameMarkup = $syntaxParser->matches[1]; + $this->name = $nameMarkup; + $filterMarkup = $syntaxParser->matches[2]; + + if ($filterSep->match($filterMarkup)) { + $filterParser->matchAll($filterSep->matches[1]); + + foreach ($filterParser->matches[0] as $filter) { + $filter = trim($filter); + if (preg_match('/\w+/', $filter, $matches)) { + $filterName = $matches[0]; + $filterArgsRegex->matchAll($filter); + $matches = Liquid::arrayFlatten($filterArgsRegex->matches[1]); + $this->filters[] = $this->parseFilterExpressions($filterName, $matches); + } + } + } + } + + if (Liquid::get('ESCAPE_BY_DEFAULT')) { + // if auto_escape is enabled, and + // - there's no raw filter, and + // - no escape filter + // - no other standard html-adding filter + // then + // - add a mandatory escape filter + + $addEscapeFilter = true; + + foreach ($this->filters as $filter) { + // with empty filters set we would just move along + if (in_array($filter[0], array('escape', 'escape_once', 'raw', 'newline_to_br'))) { + // if we have any raw-like filter, stop + $addEscapeFilter = false; + break; + } + } + + if ($addEscapeFilter) { + $this->filters[] = array('escape', array()); + } + } + } + + /** + * @param string $filterName + * @param array $unparsedArgs + * @return array + */ + private static function parseFilterExpressions($filterName, array $unparsedArgs) + { + $filterArgs = array(); + $keywordArgs = array(); + + $justTagAttributes = new Regexp('/\A' . trim(Liquid::get('TAG_ATTRIBUTES'), '/') . '\z/'); + + foreach ($unparsedArgs as $a) { + if ($justTagAttributes->match($a)) { + $keywordArgs[$justTagAttributes->matches[1]] = $justTagAttributes->matches[2]; + } else { + $filterArgs[] = $a; + } + } + + if (count($keywordArgs)) { + $filterArgs[] = $keywordArgs; + } + + return array($filterName, $filterArgs); + } + + /** + * Gets the variable name + * + * @return string The name of the variable + */ + public function getName() + { + return $this->name; + } + + /** + * Gets all Filters + * + * @return array + */ + public function getFilters() + { + return $this->filters; + } + + /** + * Renders the variable with the data in the context + * + * @param Context $context + * + * @return mixed|string + */ + public function render(Context $context) + { + $output = $context->get($this->name); + foreach ($this->filters as $filter) { + list($filtername, $filterArgKeys) = $filter; + + $filterArgValues = array(); + $keywordArgValues = array(); + + foreach ($filterArgKeys as $arg_key) { + if (is_array($arg_key)) { + foreach ($arg_key as $keywordArgName => $keywordArgKey) { + $keywordArgValues[$keywordArgName] = $context->get($keywordArgKey); + } + + $filterArgValues[] = $keywordArgValues; + } else { + $filterArgValues[] = $context->get($arg_key); + } + } + + $output = $context->invoke($filtername, $output, $filterArgValues); + } + return $output; + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/AbstractBlockTest.php b/package/vendor/liquid/liquid/tests/Liquid/AbstractBlockTest.php new file mode 100644 index 0000000..fef3ac6 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/AbstractBlockTest.php @@ -0,0 +1,38 @@ +expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% block }'); + } + + public function testWhitespaceHandler() + { + $this->assertTemplateResult('foo', '{% if true %}foo{% endif %}'); + $this->assertTemplateResult(' foo ', '{% if true %} foo {% endif %}'); + $this->assertTemplateResult(' foo ', ' {% if true %} foo {% endif %} '); + $this->assertTemplateResult('foo ', '{% if true -%} foo {% endif %}'); + $this->assertTemplateResult('foo', '{% if true -%} foo {%- endif %}'); + $this->assertTemplateResult('foo', ' {%- if true -%} foo {%- endif %}'); + $this->assertTemplateResult('foo', ' {%- if true -%} foo {%- endif -%} '); + $this->assertTemplateResult('foo', ' {%- if true -%} foo {%- endif -%} {%- if false -%} bar {%- endif -%} '); + $this->assertTemplateResult('foobar', ' {%- if true -%} foo {%- endif -%} {%- if true -%} bar {%- endif -%} '); + $this->assertTemplateResult('-> foo', '{% if true %}-> {% endif %} {%- if true -%} foo {%- endif -%}'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Cache/ApcTest.php b/package/vendor/liquid/liquid/tests/Liquid/Cache/ApcTest.php new file mode 100644 index 0000000..2b66116 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Cache/ApcTest.php @@ -0,0 +1,53 @@ +markTestSkipped("Alternative PHP Cache (APC) not available"); + } + + if (!ini_get('apc.enable_cli')) { + $this->markTestSkipped("APC not enabled with cli. Run with: php -d apc.enable_cli=1"); + } + + $this->cache = new Apc(); + } + + public function testNotExists() + { + $this->assertFalse($this->cache->exists('no_such_key')); + } + + public function testReadNotExisting() + { + $this->assertFalse($this->cache->read('no_such_key')); + } + + public function testSetGetFlush() + { + $this->assertTrue($this->cache->write('test', 'example'), "Failed to set value."); + $this->assertSame('example', $this->cache->read('test')); + $this->assertTrue($this->cache->flush()); + $this->assertFalse($this->cache->read('test')); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Cache/FileTest.php b/package/vendor/liquid/liquid/tests/Liquid/Cache/FileTest.php new file mode 100644 index 0000000..bcee1a6 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Cache/FileTest.php @@ -0,0 +1,173 @@ +cacheDir = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'cache_dir'; + + // Remove tmp cache files because they may remain after a failed test run + $this->removeOldCachedFiles(); + + $this->cache = new File(array( + 'cache_dir' => $this->cacheDir, + 'cache_expire' => 3600, + 'cache_prefix' => 'liquid_', + )); + } + + protected function tearDown(): void + { + parent::tearDown(); + + $this->removeOldCachedFiles(); + } + + private function removeOldCachedFiles(): void + { + if ($files = glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')) { + array_map('unlink', $files); + } + } + + public function testConstructInvalidOptions() + { + $this->expectException(\Liquid\Exception\FilesystemException::class); + + new File(); + } + + public function testConstructNoSuchDirOrNotWritable() + { + $this->expectException(\Liquid\Exception\FilesystemException::class); + + new File(array('cache_dir' => '/no/such/dir/liquid/cache')); + } + + public function testGetExistsNoFile() + { + $this->assertFalse($this->cache->exists('no_key')); + } + + public function testGetExistsExpired() + { + $key = 'test'; + $cacheFile = $this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_' . $key; + touch($cacheFile, time() - 1000000); // long ago + $this->assertFalse($this->cache->exists($key)); + } + + public function testGetExistsNotExpired() + { + $key = 'test'; + $cacheFile = $this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_' . $key; + touch($cacheFile); + $this->assertTrue($this->cache->exists($key)); + } + + public function testFlushAll() + { + touch($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_test'); + touch($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_test_two'); + + $this->assertGreaterThanOrEqual(2, count(glob($this->cacheDir . DIRECTORY_SEPARATOR . '*'))); + + $this->cache->flush(); + + $this->assertCount(0, glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')); + } + + public function testFlushExpired() + { + touch($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_test'); + touch($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_test_two', time() - 1000000); + + $files = join(', ', glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')); + + $this->assertGreaterThanOrEqual(2, count(glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')), "Found more than two files: $files"); + + $this->cache->flush(true); + + $this->assertCount(1, glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')); + } + + public function testWriteNoSerialize() + { + $key = 'test'; + $value = 'test_value'; + + $this->assertTrue($this->cache->write($key, $value, false)); + + $this->assertEquals($value, file_get_contents($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_' . $key)); + } + + public function testWriteSerialized() + { + $key = 'test'; + $value = 'test_value'; + + $this->assertTrue($this->cache->write($key, $value)); + + $this->assertEquals(serialize($value), file_get_contents($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_' . $key)); + } + + /** + * @depends testWriteSerialized + */ + public function testWriteGc() + { + $key = 'test'; + $value = 'test_value'; + + // This cache file must be removed by GC + touch($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_test_two', time() - 1000000); + + $this->assertTrue($this->cache->write($key, $value, false)); + + $this->assertCount(1, glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')); + } + + public function testReadNonExisting() + { + $this->assertFalse($this->cache->read('no_such_key')); + } + + public function testReadNoUnserialize() + { + $key = 'test'; + $value = 'test_value'; + + file_put_contents($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_' . $key, $value); + + $this->assertSame($value, $this->cache->read($key, false)); + } + + public function testReadSerialize() + { + $key = 'test'; + $value = 'test_value'; + + file_put_contents($this->cacheDir . DIRECTORY_SEPARATOR . 'liquid_' . $key, serialize($value)); + + $this->assertSame($value, $this->cache->read($key)); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Cache/LocalTest.php b/package/vendor/liquid/liquid/tests/Liquid/Cache/LocalTest.php new file mode 100644 index 0000000..a72cbf9 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Cache/LocalTest.php @@ -0,0 +1,45 @@ +cache = new Local(); + } + + public function testNotExists() + { + $this->assertFalse($this->cache->exists('no_such_key')); + } + + public function testReadNotExisting() + { + $this->assertFalse($this->cache->read('no_such_key')); + } + + public function testSetGetFlush() + { + $this->assertTrue($this->cache->write('test', 'example')); + $this->assertSame('example', $this->cache->read('test')); + $this->assertTrue($this->cache->flush()); + $this->assertFalse($this->cache->read('test')); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/ContextTest.php b/package/vendor/liquid/liquid/tests/Liquid/ContextTest.php new file mode 100644 index 0000000..b95abea --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/ContextTest.php @@ -0,0 +1,503 @@ +value; + } +} + +class NestedObject +{ + public $property; + public $value = -1; + + public function toLiquid() + { + // we intentionally made the value different so + // that we could see where it is coming from + return array( + 'property' => $this->property, + 'value' => 42, + ); + } +} + +class CountableObject implements \Countable +{ + public function count() + { + return 2; + } +} + +class ToArrayObject +{ + public $property; + public $value = -1; + + public function toArray() + { + // we intentionally made the value different so + // that we could see where it is coming from + return array( + 'property' => $this->property, + 'value' => 42, + ); + } +} + +class GetSetObject +{ + public function field_exists($name) + { + return $name == 'answer'; + } + + public function get($prop) + { + if ($prop == 'answer') { + return 42; + } + } +} + +class GetSetMagic +{ + public function __get($prop) + { + if ($prop == 'prime') { + return 2; + } + } +} + + +class HiFilter +{ + public function hi($value) + { + return $value . ' hi!'; + } +} + +class GlobalFilter +{ + public function notice($value) + { + return "Global $value"; + } +} + +class LocalFilter +{ + public function notice($value) + { + return "Local $value"; + } +} + +class ContextTest extends TestCase +{ + /** @var Context */ + public $context; + + protected function setUp(): void + { + parent::setUp(); + + $this->context = new Context(); + } + + public function testScoping() + { + $this->context->push(); + $this->assertNull($this->context->pop()); + } + + /** + */ + public function testNoScopeToPop() + { + $this->expectException(\Liquid\LiquidException::class); + + $this->context->pop(); + } + + /** + */ + public function testGetArray() + { + $this->expectException(\Liquid\LiquidException::class); + + $this->context->get(array()); + } + + public function testGetNotVariable() + { + $data = array( + null => null, + 'null' => null, + 'true' => true, + 'false' => false, + "'quoted_string'" => 'quoted_string', + '"double_quoted_string"' => "double_quoted_string", + ); + + foreach ($data as $key => $expected) { + $this->assertEquals($expected, $this->context->get($key)); + } + + $this->assertEquals(42.00, $this->context->get(42.00)); + } + + public function testVariablesNotExisting() + { + $this->assertNull($this->context->get('test')); + } + + public function testVariableIsObjectWithNoToLiquid() + { + $this->context->set('test', new NoToLiquid()); + $this->assertEquals(42, $this->context->get('test.answer')); + $this->assertEquals(1, $this->context->get('test.count')); + $this->assertNull($this->context->get('test.invalid')); + $this->assertEquals("forty two", $this->context->get('test')); + $this->assertEquals("example", $this->context->get('test.name')); + } + + public function testToLiquidNull() + { + $object = new ToLiquidWrapper(); + $this->context->set('object', $object); + $this->assertNull($this->context->get('object.key')); + } + + public function testToLiquidStringKeyMustBeNull() + { + $object = new ToLiquidWrapper(); + $object->value = 'foo'; + $this->context->set('object', $object); + $this->assertNull($this->context->get('object.foo')); + $this->assertNull($this->context->get('object.foo.bar')); + } + + public function testNestedObject() + { + $object = new NestedObject(); + $object->property = new NestedObject(); + $this->context->set('object', $object); + $this->assertEquals(42, $this->context->get('object.value')); + $this->assertEquals(42, $this->context->get('object.property.value')); + $this->assertNull($this->context->get('object.property.value.invalid')); + } + + public function testToArrayObject() + { + $object = new ToArrayObject(); + $object->property = new ToArrayObject(); + $this->context->set('object', $object); + $this->assertEquals(42, $this->context->get('object.value')); + $this->assertEquals(42, $this->context->get('object.property.value')); + $this->assertNull($this->context->get('object.property.value.invalid')); + } + + public function testGetSetObject() + { + $this->context->set('object', new GetSetObject()); + $this->assertEquals(42, $this->context->get('object.answer')); + $this->assertNull($this->context->get('object.invalid')); + } + + public function testGetSetMagic() + { + $this->context->set('object', new GetSetMagic()); + $this->assertEquals(2, $this->context->get('object.prime')); + $this->assertNull($this->context->get('object.invalid')); + } + + public function testFinalVariableCanBeObject() + { + $this->context->set('test', (object) array('value' => (object) array())); + $this->assertInstanceOf(\stdClass::class, $this->context->get('test.value')); + } + + public function testVariables() + { + $this->context->set('test', 'test'); + $this->assertTrue($this->context->hasKey('test')); + $this->assertFalse($this->context->hasKey('test.foo')); + $this->assertEquals('test', $this->context->get('test')); + + // We add this text to make sure we can return values that evaluate to false properly + $this->context->set('test_0', 0); + $this->assertEquals('0', $this->context->get('test_0')); + } + + public function testLengthQuery() + { + $this->context->set('numbers', array(1, 2, 3, 4)); + $this->assertEquals(4, $this->context->get('numbers.size')); + } + + public function testStringLength() + { + $this->context->set('name', 'Foo Bar'); + $this->assertEquals(7, $this->context->get('name.size')); + + $this->context->set('name', 'テスト'); + $this->assertEquals(3, $this->context->get('name.size')); + } + + public function testCountableLength() + { + $this->context->set('countable', new CountableObject()); + $this->assertEquals(2, $this->context->get('countable.size')); + } + + public function testOverrideSize() + { + $this->context->set('hash', array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'size' => '5000')); + $this->assertEquals(5000, $this->context->get('hash.size')); + } + + public function testArrayFirst() + { + $this->context->set('array', array(11, 'jack', 43, 74, 5, 'tom')); + $this->assertEquals(11, $this->context->get('array.first')); + } + + public function testOverrideFirst() + { + $this->context->set('array', array(11, 'jack', 43, 'first' => 74, 5, 'tom')); + $this->assertEquals(74, $this->context->get('array.first')); + } + + public function testArrayLast() + { + $this->context->set('array', array(11, 'jack', 43, 74, 5, 'tom')); + $this->assertEquals('tom', $this->context->get('array.last')); + } + + public function testOverrideLast() + { + $this->context->set('array', array(11, 'jack', 43, 'last' => 74, 5, 'tom')); + $this->assertEquals(74, $this->context->get('array.last')); + } + + public function testDeepValueNotObject() + { + $this->context->set('example', array('foo' => new ToLiquidNotObject())); + $this->assertNull($this->context->get('example.foo.bar')); + } + + public function testHierchalData() + { + $this->context->set('hash', array('name' => 'tobi')); + $this->assertEquals('tobi', $this->context->get('hash.name')); + } + + public function testHierchalDataNoKey() + { + $this->context->set('hash', array('name' => 'tobi')); + $this->assertNull($this->context->get('hash.no_key')); + } + + public function testAddFilter() + { + $context = new Context(); + $context->addFilters(new HiFilter()); + $this->assertEquals('hi? hi!', $context->invoke('hi', 'hi?')); + + $context = new Context(); + $this->assertEquals('hi?', $context->invoke('hi', 'hi?')); + + $context->addFilters(new HiFilter()); + $this->assertEquals('hi? hi!', $context->invoke('hi', 'hi?')); + } + + public function testOverrideGlobalFilter() + { + $template = new Template(); + $template->registerFilter(new GlobalFilter()); + + $template->parse("{{'test' | notice }}"); + $this->assertEquals('Global test', $template->render()); + $this->assertEquals('Local test', $template->render(array(), new LocalFilter())); + } + + public function testCallbackFilter() + { + $template = new Template(); + $template->registerFilter('foo', function ($arg) { + return "Foo $arg"; + }); + + $template->parse("{{'test' | foo }}"); + $this->assertEquals('Foo test', $template->render()); + } + + public function testAddItemInOuterScope() + { + $this->context->set('test', 'test'); + $this->context->push(); + $this->assertEquals('test', $this->context->get('test')); + $this->context->pop(); + $this->assertEquals('test', $this->context->get('test')); + } + + public function testAddItemInInnerScope() + { + $this->context->push(); + $this->context->set('test', 'test'); + $this->assertEquals('test', $this->context->get('test')); + $this->context->pop(); + $this->assertNull($this->context->get('test')); + } + + public function testMerge() + { + $this->context->merge(array('test' => 'test')); + $this->assertEquals('test', $this->context->get('test')); + + $this->context->merge(array('test' => 'newvalue', 'foo' => 'bar')); + $this->assertEquals('newvalue', $this->context->get('test')); + $this->assertEquals('bar', $this->context->get('foo')); + } + + public function testCents() + { + $this->context->merge(array('cents' => new HundredCentes())); + $this->assertEquals(100, $this->context->get('cents')); + } + + public function testNestedCents() + { + $this->context->merge(array('cents' => array('amount' => new HundredCentes()))); + $this->assertEquals(100, $this->context->get('cents.amount')); + + $this->context->merge(array('cents' => array('cents' => array('amount' => new HundredCentes())))); + $this->assertEquals(100, $this->context->get('cents.cents.amount')); + } + + public function testCentsThroughDrop() + { + $this->context->merge(array('cents' => new CentsDrop())); + $this->assertEquals(100, $this->context->get('cents.amount')); + } + + public function testCentsThroughDropNestedly() + { + $this->context->merge(array('cents' => array('cents' => new CentsDrop()))); + $this->assertEquals(100, $this->context->get('cents.cents.amount')); + + $this->context->merge(array('cents' => array('cents' => array('cents' => new CentsDrop())))); + $this->assertEquals(100, $this->context->get('cents.cents.cents.amount')); + } + + public function testGetNoOverride() + { + $_GET['test'] = ''; + // Previously $_GET would override directly set values + // It happend during class construction - we need to create a brand new instance right here + $context = new Context(); + $context->set('test', 'test'); + $this->assertEquals('test', $context->get('test')); + } + + public function testServerOnlyExposeWhitelistByDefault() + { + $_SERVER['AWS_SECRET_ACCESS_KEY'] = 'super_secret'; + + $context = new Context(); + $this->assertNull($context->get('AWS_SECRET_ACCESS_KEY')); + + $context->set('AWS_SECRET_ACCESS_KEY', 'test'); + $this->assertEquals('test', $context->get('AWS_SECRET_ACCESS_KEY')); + + $_SERVER['FOO'] = 'foo'; + $_SERVER['BAR'] = 'bar'; + + Liquid::set('SERVER_SUPERGLOBAL_WHITELIST', ['FOO']); + + $context = new Context(); + $this->assertEquals('foo', $context->get('FOO')); + $this->assertNull($context->get('BAR')); + + $context->set('BAR', 'bar'); + $this->assertEquals('bar', $context->get('BAR')); + } + + public function testServerExposedWhenRequested() + { + Liquid::set('EXPOSE_SERVER', true); + + $_SERVER['AWS_SECRET_ACCESS_KEY'] = 'super_secret'; + + $context = new Context(); + $this->assertEquals('super_secret', $context->get('AWS_SECRET_ACCESS_KEY')); + + $context->set('AWS_SECRET_ACCESS_KEY', 'test'); + $this->assertEquals('super_secret', $context->get('AWS_SECRET_ACCESS_KEY'), '$_SERVER should take precedence in this case'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/CustomFiltersTest.php b/package/vendor/liquid/liquid/tests/Liquid/CustomFiltersTest.php new file mode 100644 index 0000000..597bdf4 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/CustomFiltersTest.php @@ -0,0 +1,47 @@ +context = new Context(); + } + + public function testSortKey() + { + $data = array( + array( + array(), + array(), + ), + array( + array('b' => 1, 'c' => 5, 'a' => 3, 'z' => 4, 'h' => 2), + array('a' => 3, 'b' => 1, 'c' => 5, 'h' => 2, 'z' => 4), + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], CustomFilters::sort_key($item[0])); + } + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/CustomTagTest.php b/package/vendor/liquid/liquid/tests/Liquid/CustomTagTest.php new file mode 100644 index 0000000..ceb255a --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/CustomTagTest.php @@ -0,0 +1,47 @@ +getTags())) { + $this->markTestIncomplete("Test tag already registered. Are you missing @depends?"); + } + + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('Unknown tag foo'); + + $template->parse('[ba{% foo %} Comment {% endfoo %}r]'); + } + + /** + * @depends testUnknownTag + */ + public function testCustomTag() + { + $template = new Template(); + $template->registerTag('foo', TagFoo::class); + + $template->parse('[ba{% foo %} Comment {% endfoo %}r]'); + $this->assertEquals('[bar]', $template->render()); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/DropTest.php b/package/vendor/liquid/liquid/tests/Liquid/DropTest.php new file mode 100644 index 0000000..5699755 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/DropTest.php @@ -0,0 +1,140 @@ +context->get($method); + } +} + +class TextDrop extends Drop +{ + public function get_array() + { + return array('text1', 'text2'); + } + + public function text() + { + return 'text1'; + } +} + +class CatchallDrop extends Drop +{ + public function beforeMethod($method) + { + return 'method: ' . $method; + } +} + +class ProductDrop extends Drop +{ + public function top_sales() + { + throw new \Exception("worked"); + } + + public function texts() + { + return new TextDrop(); + } + + public function catchall() + { + return new CatchallDrop(); + } + + public function context() + { + return new ContextDrop(); + } + + public function callmenot() + { + return "protected"; + } + + public function hasKey($name) + { + return $name != 'unknown' && $name != 'false'; + } +} + +class DropTest extends TestCase +{ + /** + */ + public function testProductDrop() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('worked'); + + $template = new Template(); + $template->parse(' {{ product.top_sales }} '); + $template->render(array('product' => new ProductDrop)); + } + + public function testNoKeyDrop() + { + $template = new Template(); + $template->parse(' {{ product.invalid.unknown }}{{ product.false }} '); + $output = $template->render(array('product' => new ProductDrop)); + $this->assertEquals(' ', $output); + } + + public function testTextDrop() + { + $template = new Template(); + $template->parse(' {{ product.texts.text }} '); + $output = $template->render(array('product' => new ProductDrop())); + $this->assertEquals(' text1 ', $output); + + $template = new Template(); + $template->parse(' {{ product.catchall.unknown }} '); + $output = $template->render(array('product' => new ProductDrop())); + $this->assertEquals(' method: unknown ', $output); + } + + public function testTextArrayDrop() + { + $template = new Template(); + $template->parse('{% for text in product.texts.get_array %} {{text}} {% endfor %}'); + $output = $template->render(array('product' => new ProductDrop())); + + $this->assertEquals(' text1 text2 ', $output); + } + + public function testContextDrop() + { + $template = new Template(); + $template->parse(' {{ context.bar }} '); + $output = $template->render(array('context' => new ContextDrop(), 'bar' => 'carrot')); + $this->assertEquals(' carrot ', $output); + } + + public function testNestedContextDrop() + { + $template = new Template(); + $template->parse(' {{ product.context.foo }} '); + $output = $template->render(array('product' => new ProductDrop(), 'foo' => 'monkey')); + $this->assertEquals(' monkey ', $output); + } + + public function testToString() + { + $this->assertEquals(ProductDrop::class, strval(new ProductDrop())); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/EscapeByDefaultTest.php b/package/vendor/liquid/liquid/tests/Liquid/EscapeByDefaultTest.php new file mode 100644 index 0000000..54eed9b --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/EscapeByDefaultTest.php @@ -0,0 +1,127 @@ +string = $string; + } + + public function __toString() + { + return $this->string; + } +} + +class EscapeByDefaultTest extends TestCase +{ + const XSS = ""; + const XSS_FAILED = "<script>alert()</script>"; + + protected $assigns = array(); + + protected function setUp(): void + { + parent::setUp(); + + $this->assigns = array( + 'xss' => self::XSS, + ); + } + + public function testUnescaped() + { + $text = "{{ xss }}"; + $expected = self::XSS; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testEscapedManually() + { + $text = "{{ xss | escape }}"; + $expected = self::XSS_FAILED; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testRawWithoutAutoEscape() + { + $text = "{{ xss | raw }}"; + $expected = self::XSS; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testEscapedAutomatically() + { + Liquid::set('ESCAPE_BY_DEFAULT', true); + + $text = "{{ xss }}"; + $expected = self::XSS_FAILED; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testEscapedManuallyInAutoMode() + { + Liquid::set('ESCAPE_BY_DEFAULT', true); + + // text should only be escaped once + $text = "{{ xss | escape }}"; + $expected = self::XSS_FAILED; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testRawInAutoMode() + { + Liquid::set('ESCAPE_BY_DEFAULT', true); + + $text = "{{ xss | raw }}"; + $expected = self::XSS; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testNlToBr() + { + Liquid::set('ESCAPE_BY_DEFAULT', true); + $text = "{{ xss | newline_to_br }}"; + $expected = self::XSS."
\n".self::XSS; + $this->assertTemplateResult($expected, $text, array('xss' => self::XSS."\n".self::XSS)); + } + + public function testToStringEscape() + { + $this->assertTemplateResult(self::XSS_FAILED, "{{ xss | escape }}", array('xss' => new ObjectWithToString(self::XSS))); + } + + public function testToStringEscapeDefault() + { + Liquid::set('ESCAPE_BY_DEFAULT', true); + $this->assertTemplateResult(self::XSS_FAILED, "{{ xss }}", array('xss' => new ObjectWithToString(self::XSS))); + } + + /** System default value for the escape flag */ + private static $escapeDefault; + + public static function setUpBeforeClass(): void + { + // save system default value for the escape flag before all tests + self::$escapeDefault = Liquid::get('ESCAPE_BY_DEFAULT'); + } + + protected function tearDown(): void + { + // reset to the default after each test + Liquid::set('ESCAPE_BY_DEFAULT', self::$escapeDefault); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/FilterbankTest.php b/package/vendor/liquid/liquid/tests/Liquid/FilterbankTest.php new file mode 100644 index 0000000..9786583 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/FilterbankTest.php @@ -0,0 +1,244 @@ +variable = 'set'; + return 'set'; + } + + public function instance_test_two() + { + return $this->variable; + } +} + +} // global namespace + +namespace Liquid { + +use Liquid\Cache\File; + +class NamespacedClassFilter +{ + public static function static_test2($var) + { + return "good {$var}"; + } +} + +class FilterbankTest extends TestCase +{ + /** @var FilterBank */ + private $filterBank; + + /** @var Context */ + private $context; + + protected function setUp(): void + { + parent::setUp(); + + $this->context = new Context(); + $this->filterBank = new FilterBank($this->context); + } + + protected function tearDown(): void + { + // have to destroy these else PHP goes nuts + unset($this->context); + unset($this->filterBank); + } + + /** + */ + public function testAddFilterNotObjectAndString() + { + $this->expectException(\Liquid\Exception\WrongArgumentException::class); + + $this->filterBank->addFilter(array()); + } + + /** + */ + public function testAddFilterNoFunctionOrClass() + { + $this->expectException(\Liquid\Exception\WrongArgumentException::class); + + $this->filterBank->addFilter('no_such_function_or_class'); + } + + public function testTypeErrorExceptionAndCallDateFilterWithoutArguments() + { + if (\PHP_VERSION_ID < 70100) { + $this->markTestSkipped('TypeError is not thrown in PHP 7.0'); + } + + $var = new Variable('var | date'); + $this->context->set('var', 1000); + + $this->expectException(\Liquid\LiquidException::class); + $var->render($this->context); + } + + public function testInvokeNoFilter() + { + $value = 'value'; + $this->assertEquals($value, $this->filterBank->invoke('non_existing_filter', $value)); + } + + /** + * Test using a simple function + */ + public function testFunctionFilter() + { + $var = new Variable('var | functionFilter'); + $this->context->set('var', 1000); + $this->context->addFilters('functionFilter'); + $this->assertEquals('worked', $var->render($this->context)); + } + + /** + * Test using a namespaced static class + */ + public function testNamespacedStaticClassFilter() + { + $var = new Variable('var | static_test2'); + $this->context->set('var', 1000); + $this->context->addFilters(NamespacedClassFilter::class); + $this->assertEquals('good 1000', $var->render($this->context)); + } + + /** + * Test using a static class + */ + public function testStaticClassFilter() + { + $var = new Variable('var | static_test'); + $this->context->set('var', 1000); + $this->context->addFilters(\ClassFilter::class); + $this->assertEquals('worked', $var->render($this->context)); + } + + /** + * Test with instance method on a static class + */ + public function testStaticMixedClassFilter() + { + $var = new Variable('var | instance_test_one'); + $this->context->set('var', 'foo'); + $this->context->addFilters(\ClassFilter::class); + $this->assertEquals('foo', $var->render($this->context)); + } + + /** + * Test using an object as a filter; an object fiter will retain its state + * between calls to its filters. + */ + public function testObjectFilter() + { + $var = new Variable('var | instance_test_one'); + $this->context->set('var', 1000); + $this->context->addFilters(new \ClassFilter()); + $this->assertEquals('set', $var->render($this->context)); + + $var = new Variable('var | instance_test_two'); + $this->assertEquals('set', $var->render($this->context)); + + $var = new Variable('var | static_test'); + $this->assertEquals('worked', $var->render($this->context)); + + $var = new Variable('var | __construct'); + $this->assertEquals('1000', $var->render($this->context)); + } + + public function testObjectFilterDontCallConstruct() + { + $this->context->set('var', 1000); + $this->context->addFilters(new \ClassFilter()); + + $filterbankReflectionClass = new \ReflectionClass(Context::class); + $methodMapProperty = $filterbankReflectionClass->getProperty('filterbank'); + $methodMapProperty->setAccessible(true); + $filterbank = $methodMapProperty->getValue($this->context); + + $filterbankReflectionClass = new \ReflectionClass(Filterbank::class); + $methodMapProperty = $filterbankReflectionClass->getProperty('methodMap'); + $methodMapProperty->setAccessible(true); + $methodMap = $methodMapProperty->getValue($filterbank); + + $this->assertArrayNotHasKey('__construct', $methodMap); + + $var = new Variable('var | __construct'); + $this->assertEquals('1000', $var->render($this->context)); + } + + public function testCallbackFilter() + { + $var = new Variable('var | my_callback'); + $this->context->set('var', 1000); + $this->context->addFilters('my_callback', function ($var) { + return $var * 2; + }); + $this->assertEquals('2000', $var->render($this->context)); + } + + /** + * Closures are not to be serialized. Let's check that. + */ + public function testWithSerializingCache() + { + $template = new Template(); + $template->registerFilter('foo', function ($arg) { + return "Foo $arg"; + }); + $template->setCache(new File(array( + 'cache_dir' => __DIR__.'/cache_dir/', + ))); + $template->parse("{{'test' | foo }}"); + $this->assertEquals('Foo test', $template->render()); + + $template->parse("{{'bar' | foo }}"); + $this->assertEquals('Foo bar', $template->render()); + } +} + +} // Liquid namespace diff --git a/package/vendor/liquid/liquid/tests/Liquid/FixturesTest.php b/package/vendor/liquid/liquid/tests/Liquid/FixturesTest.php new file mode 100644 index 0000000..07e112b --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/FixturesTest.php @@ -0,0 +1,50 @@ +setFileSystem(new Virtual(function ($filename) { + if (is_file(__DIR__.'/fixtures/'.$filename)) { + return file_get_contents(__DIR__.'/fixtures/'.$filename); + } + })); + + $template->parse(file_get_contents($liquid)); + $result = $template->render(include $data); + + if (getenv('GOLDEN') !== false) { + file_put_contents($expected, $result); + $this->markTestIncomplete("Saved golden fixture"); + } + + $this->assertEquals(file_get_contents($expected), $result); + } + + public function fixtures() + { + foreach (array_map(null, glob(__DIR__.'/fixtures/*.liquid'), glob(__DIR__.'/fixtures/*.php'), glob(__DIR__.'/fixtures/*.html')) as $files) { + yield basename($files[0], '.liquid') => $files; + }; + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/LiquidTest.php b/package/vendor/liquid/liquid/tests/Liquid/LiquidTest.php new file mode 100644 index 0000000..3934e51 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/LiquidTest.php @@ -0,0 +1,88 @@ +assertNull(Liquid::get('no_such_value')); + } + + public function testSetProperty() + { + $key = 'test_key'; + $value = 'test_value'; + Liquid::set($key, $value); + $this->assertSame($value, Liquid::get($key)); + } + + public function testGetSetAllowedChars() + { + Liquid::set('ALLOWED_VARIABLE_CHARS', 'abc'); + $this->assertSame('abc', Liquid::get('ALLOWED_VARIABLE_CHARS')); + $this->assertSame('abc+', Liquid::get('VARIABLE_NAME')); + } + + public function testArrayFlattenEmptyArray() + { + $this->assertSame(array(), Liquid::arrayFlatten(array())); + } + + public function testArrayFlattenFlatArray() + { + $object = new \stdClass(); + + // Method does not maintain keys. + $original = array( + 'one' => 'one_value', + 42, + $object, + ); + + $expected = array( + 'one_value', + 42, + $object + ); + + $this->assertEquals($expected, Liquid::arrayFlatten($original)); + } + + public function testArrayFlattenNestedArray() + { + $object = new \stdClass(); + + // Method does not maintain keys. + $original = array( + 'one' => 'one_value', + 42 => array( + 'one_value', + array( + 'two_value', + 10 + ), + ), + $object, + ); + + $expected = array( + 'one_value', + 'one_value', + 'two_value', + 10, + $object + ); + + $this->assertEquals($expected, Liquid::arrayFlatten($original)); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/LocalFileSystemTest.php b/package/vendor/liquid/liquid/tests/Liquid/LocalFileSystemTest.php new file mode 100644 index 0000000..4e38e7d --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/LocalFileSystemTest.php @@ -0,0 +1,169 @@ +root = __DIR__ . DIRECTORY_SEPARATOR . self::TEMPLATES_DIR . DIRECTORY_SEPARATOR; + // reset to defaults + Liquid::set('INCLUDE_ALLOW_EXT', false); + } + + /** + */ + public function testIllegalTemplateNameEmpty() + { + $this->expectException(\Liquid\LiquidException::class); + + $fileSystem = new Local(''); + $fileSystem->fullPath(''); + } + + /** + */ + public function testIllegalRootPath() + { + $this->expectException(\Liquid\LiquidException::class); + + $fileSystem = new Local('invalid/not/found'); + $fileSystem->fullPath(''); + } + + /** + */ + public function testIllegalTemplateNameIncludeExtension() + { + $this->expectException(\Liquid\LiquidException::class); + + Liquid::set('INCLUDE_ALLOW_EXT', false); + + $fileSystem = new Local(''); + $fileSystem->fullPath('has_extension.ext'); + } + + /** + */ + public function testIllegalTemplateNameNotIncludeExtension() + { + $this->expectException(\Liquid\LiquidException::class); + + Liquid::set('INCLUDE_ALLOW_EXT', true); + + $fileSystem = new Local(''); + $fileSystem->fullPath('has_extension'); + } + + /** + */ + public function testIllegalTemplatePathNoRoot() + { + $this->expectException(\Liquid\LiquidException::class); + + $fileSystem = new Local(''); + $fileSystem->fullPath('mypartial'); + } + + /** + */ + public function testIllegalTemplatePathNoFileExists() + { + $this->expectException(\Liquid\LiquidException::class); + + $fileSystem = new Local(dirname(__DIR__)); + $fileSystem->fullPath('no_such_file_exists'); + } + + /** + */ + public function testIllegalTemplatePathNotUnderTemplateRoot() + { + $this->expectException(\Liquid\LiquidException::class); + $this->expectExceptionMessage('not under'); + + Liquid::set('INCLUDE_ALLOW_EXT', true); + $fileSystem = new Local(dirname($this->root)); + // find any fail under deeper under the root, so all other checks would pass + $filesUnderCurrentDir = array_map('basename', glob(dirname(__DIR__).'/../*')); + // path relative to root; we can't start it with a dot since it isn't allowed anyway + $fileSystem->fullPath(self::TEMPLATES_DIR."/../../../{$filesUnderCurrentDir[0]}"); + } + + public function testValidPathWithDefaultExtension() + { + $templateName = 'mypartial'; + + $fileSystem = new Local($this->root); + $this->assertEquals($this->root . Liquid::get('INCLUDE_PREFIX') . $templateName . '.' . Liquid::get('INCLUDE_SUFFIX'), $fileSystem->fullPath($templateName)); + } + + public function testValidPathWithCustomExtension() + { + Liquid::set('INCLUDE_PREFIX', ''); + Liquid::set('INCLUDE_SUFFIX', 'tpl'); + + $templateName = 'mypartial'; + + $fileSystem = new Local($this->root); + $this->assertEquals($this->root . Liquid::get('INCLUDE_PREFIX') . $templateName . '.' . Liquid::get('INCLUDE_SUFFIX'), $fileSystem->fullPath($templateName)); + } + + /** + */ + public function testReadIllegalTemplatePathNoFileExists() + { + $this->expectException(\Liquid\LiquidException::class); + $this->expectExceptionMessage('File not found'); + + $fileSystem = new Local(dirname(__DIR__)); + $fileSystem->readTemplateFile('no_such_file_exists'); + } + + public function testReadTemplateFile() + { + Liquid::set('INCLUDE_PREFIX', ''); + Liquid::set('INCLUDE_SUFFIX', 'tpl'); + + $fileSystem = new Local($this->root); + $this->assertEquals('test content', trim($fileSystem->readTemplateFile('mypartial'))); + } + + public function testDeprecatedLocalFileSystemExists() + { + $this->assertInstanceOf(Local::class, new LocalFileSystem($this->root)); + } + + public function testParseTemplateFile() + { + Liquid::set('INCLUDE_PREFIX', ''); + Liquid::set('INCLUDE_SUFFIX', 'tpl'); + + $template = new Template($this->root); + $this->assertEquals("test content\n", $template->parseFile('mypartial')->render()); + } + + /** + */ + public function testParseTemplateFileError() + { + $this->expectException(\Liquid\LiquidException::class); + $this->expectExceptionMessage('Could not load a template'); + + $template = new Template(); + $template->parseFile('mypartial'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/OutputTest.php b/package/vendor/liquid/liquid/tests/Liquid/OutputTest.php new file mode 100644 index 0000000..a18b048 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/OutputTest.php @@ -0,0 +1,194 @@ +" . $input . ""; + } + + public function paragraph($input) + { + return "

" . $input . "

"; + } + + public function link_to($name, $url, $protocol) + { + return "" . $name . ""; + } + + public function str_replace($input, $data) + { + foreach ($data as $k => $v) { + $input = str_replace("[" . $k . "]", $v, $input); + } + return $input; + } + + public function img_url($input, $size, $opts = null) + { + $output = "image_" . $size; + if (isset($opts['crop'])) { + $output .= "_cropped_" . $opts['crop']; + } + if (isset($opts['scale'])) { + $output .= "@" . $opts['scale'] . 'x'; + } + return $output . ".png"; + } +} + +class OutputTest extends TestCase +{ + protected $assigns = array(); + + protected function setUp(): void + { + parent::setUp(); + + $this->assigns = array( + 'best_cars' => 'bmw', + 'car' => array('bmw' => 'good', 'gm' => 'bad') + ); + + $this->filters = new FunnyFilter(); + } + + public function testVariable() + { + $text = " {{best_cars}} "; + $expected = " bmw "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariableTrasversing() + { + $text = " {{car.bmw}} {{car.gm}} {{car.bmw}} "; + + $expected = " good bad good "; + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePiping() + { + $text = " {{ car.gm | make_funny }} "; + $expected = " LOL "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePipingWithInput() + { + $text = " {{ car.gm | cite_funny }} "; + $expected = " LOL: bad "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePipingWithArgs() + { + $text = " {{ car.gm | add_smiley : '=(' }} "; + $expected = " bad =( "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function textVariablePipingWithNoArgs() + { + $text = " {{ car.gm | add_smile }} "; + $expected = " bad =( "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testMultipleVariablePipingWithArgs() + { + $text = " {{ car.gm | add_smiley : '=(' | add_smiley : '=('}} "; + $expected = " bad =( =( "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePipingWithTwoArgs() + { + $text = " {{ car.gm | add_tag : 'span', 'bar'}} "; + $expected = " bad "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePipingWithVariableArgs() + { + $text = " {{ car.gm | add_tag : 'span', car.bmw}} "; + $expected = " bad "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePipingWithKeywordArg() + { + $text = " {{ 'Welcome, [name]' | str_replace: name: 'Santa' }} "; + $expected = " Welcome, Santa "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testVariablePipingWithArgsAndKeywordArgs() + { + $text = " {{ car.gm | img_url: '450x450', crop: 'center', scale: 2 }} "; + $expected = " image_450x450_cropped_center@2x.png "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testMultiplePipings() + { + $text = " {{ best_cars | cite_funny | paragraph }} "; + $expected = "

LOL: bmw

"; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + public function testLinkTo() + { + $text = " {{ 'Typo' | link_to: 'typo.leetsoft.com':'http' }} "; + $expected = " Typo "; + + $this->assertTemplateResult($expected, $text, $this->assigns); + } + + /** + */ + public function testVariableWithANewLine() + { + $text = "{{ aaa\n }}"; + $this->assertTemplateResult('', $text, $this->assigns); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/ParsingQuirksTest.php b/package/vendor/liquid/liquid/tests/Liquid/ParsingQuirksTest.php new file mode 100644 index 0000000..ce0db79 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/ParsingQuirksTest.php @@ -0,0 +1,27 @@ +parse($text); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertEquals($text, $template->render()); + $this->assertIsString($nodelist[0]); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/RegexpTest.php b/package/vendor/liquid/liquid/tests/Liquid/RegexpTest.php new file mode 100644 index 0000000..b7e6f45 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/RegexpTest.php @@ -0,0 +1,69 @@ +regexp = new Regexp('/' . Liquid::get('QUOTED_FRAGMENT') . '/'); + } + + public function testEmpty() + { + $this->assertEquals(array(), $this->regexp->scan('')); + } + + public function testQuote() + { + $this->assertEquals(array('"arg 1"'), $this->regexp->scan('"arg 1"')); + } + + public function testWords() + { + $this->assertEquals(array('arg1', 'arg2'), $this->regexp->scan('arg1 arg2')); + } + + public function testQuotedWords() + { + $this->assertEquals(array('arg1', 'arg2', '"arg 3"'), $this->regexp->scan('arg1 arg2 "arg 3"')); + } + + public function testQuotedWords2() + { + $this->assertEquals(array('arg1', 'arg2', "'arg 3'"), $this->regexp->scan('arg1 arg2 \'arg 3\'')); + } + + public function testQuotedWordsInTheMiddle() + { + $this->assertEquals(array('arg1', 'arg2', '"arg 3"', 'arg4'), $this->regexp->scan('arg1 arg2 "arg 3" arg4 ')); + } + + public function testPregQuote() + { + $this->assertEquals('', $this->regexp->quote('')); + $this->assertEquals('abc', $this->regexp->quote('abc')); + $this->assertEquals('\/\(\{\}\)\/', $this->regexp->quote('/({})/')); + } + + public function testNoDelimiter() + { + $regexp = new Regexp('(example)'); + $this->assertEquals(array('(example)'), $regexp->scan('(example)')); + $this->assertEquals(array(), $regexp->scan('nothing')); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/StandardFiltersTest.php b/package/vendor/liquid/liquid/tests/Liquid/StandardFiltersTest.php new file mode 100644 index 0000000..e4d725e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/StandardFiltersTest.php @@ -0,0 +1,1144 @@ +context = new Context(); + } + + public function testSize() + { + $data = array( + 4 => 1000, + 3 => 100, + 2 => array('one', 'two'), + 1 => new \ArrayIterator(array('one')), + SizeClass::SIZE => new SizeClass(), + ); + + foreach ($data as $expected => $element) { + $this->assertEquals($expected, StandardFilters::size($element)); + } + } + + /** + */ + public function testSizeObject() + { + $this->expectException(\Liquid\LiquidException::class); + $this->expectExceptionMessage('cannot be estimated'); + + StandardFilters::size((object) array()); + } + + public function testDowncase() + { + $data = array( + 'UpperCaseMiXed' => 'uppercasemixed', + 3 => 3, + // UTF-8 + 'Владимир' => 'владимир' + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::downcase($element)); + } + } + + public function testUpcase() + { + $data = array( + 'UpperCaseMiXed' => 'UPPERCASEMIXED', + 3 => 3, + // UTF-8 + 'владимир' => 'ВЛАДИМИР' + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::upcase($element)); + } + } + + public function testCapitalize() + { + $data = array( + 'one Word not' => 'One Word Not', + '1test' => '1Test', + '' => '', + // UTF-8 + 'владимир владимирович' => 'Владимир Владимирович' + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::capitalize($element)); + } + } + + public function testUrlEncode() + { + $data = array( + 'nothing' => 'nothing', + '%#&^' => '%25%23%26%5E', + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::url_encode($element)); + } + } + + + public function testUrlDecode() + { + $data = array( + '%25%23%26%5E' => '%#&^', + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::url_decode($element)); + } + } + + + public function testRaw() + { + $data = array( + "Anything" => "Anything", + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::raw($element)); + } + } + + public function testEscape() + { + $data = array( + "one Word's not" => "one Word's not", + "&><\"'" => "&><"'", + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::escape($element)); + } + + $this->assertSame(array(1), StandardFilters::escape(array(1))); + } + + public function testEscapeOnce() + { + $data = array( + "" => "<b><script>alert()</script>", + "a < b & c" => "a < b & c", + "a < b & c" => "a < b & c", + "<\">" => "<">", + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::escape_once($element)); + } + + $this->assertSame(array(1), StandardFilters::escape_once(array(1))); + } + + public function testStripNewLines() + { + $data = array( + "one Word\r\n not\r\n\r\n" => "one Word not", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::strip_newlines($element)); + } + } + + public function testNewLineToBr() + { + $data = array( + "one Word\n not\n" => "one Word
\n not
\n", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::newline_to_br($element)); + } + } + + public function testReplace() + { + // Replace for empty string + $data = array( + "one Word not Word" => "one not ", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::replace($element, 'Word')); + } + + // Replace for "Hello" string + $data = array( + "one Word not Word" => "one Hello not Hello", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::replace($element, 'Word', 'Hello')); + } + } + + public function testReplaceFirst() + { + // Replace for empty string + $data = array( + "one Word not Word" => "one not Word", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::replace_first($element, 'Word')); + } + + // Replace for "Hello" string + $data = array( + "one Word not Word" => "one Hello not Word", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::replace_first($element, 'Word', 'Hello')); + } + } + + public function testRemove() + { + $data = array( + "one Word not Word" => "one not ", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::remove($element, 'Word')); + } + } + + public function testRemoveFirst() + { + $data = array( + "one Word not Word" => "one not Word", + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::remove_first($element, 'Word')); + } + } + + public function testAppend() + { + $data = array( + "one Word not Word" => "one Word not Word appended", + '' => ' appended', + 3 => '3 appended', + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::append($element, ' appended')); + } + } + + public function testPrepend() + { + $data = array( + "one Word not Word" => "prepended one Word not Word", + '' => 'prepended ', + 3 => 'prepended 3', + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::prepend($element, 'prepended ')); + } + } + + public function testSlice() + { + // Slice up to the end + $data = array( + array( + array(), + array(), + ), + array( + new \ArrayIterator(array()), + array(), + ), + array( + '', + '', + ), + array( + array(1, 2, 3, 4, 5), + array(3, 4, 5), + ), + array( + new \ArrayIterator(array(1, 2, 3, 4, 5)), + array(3, 4, 5), + ), + array( + '12345', + '345' + ), + array( + 100, + 100 + ), + ); + + foreach ($data as $item) { + $actual = StandardFilters::slice($item[0], 2); + if ($actual instanceof \Traversable) { + $actual = iterator_to_array($actual); + } + $this->assertEquals($item[1], $actual); + } + + // Slice a few elements + $data = array( + array( + null, + null, + ), + array( + array(), + array(), + ), + array( + new \ArrayIterator(array()), + array(), + ), + array( + '', + '', + ), + array( + array(1, 2, 3, 4, 5), + array(3, 4), + ), + array( + new \ArrayIterator(array(1, 2, 3, 4, 5)), + array(3, 4), + ), + array( + '12345', + '34' + ), + array( + 100, + 100 + ), + ); + + foreach ($data as $item) { + $actual = StandardFilters::slice($item[0], 2, 2); + if ($actual instanceof \Traversable) { + $actual = iterator_to_array($actual); + } + $this->assertEquals($item[1], $actual); + } + + $this->assertEquals('Владимир', StandardFilters::slice('Владимир Владимирович', 0, 8)); + } + + public function testTruncate() + { + // Truncate with default ending + $data = array( + '' => '', + str_repeat('a', 150) => str_repeat('a', 100) . '...', + 'test' => 'test', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::truncate($element)); + } + + // Custom length + $this->assertEquals('abc...', StandardFilters::truncate('abcdef', 3)); + + // Custom ending + $this->assertEquals('abcend', StandardFilters::truncate('abcdef', 3, 'end')); + + // UTF-8 + $this->assertEquals('Влад...', StandardFilters::truncate('Владимир Владимирович', 4)); + } + + public function testTruncateWords() + { + // Truncate with default ending + $data = array( + '' => '', + str_repeat('abc ', 10) => rtrim(str_repeat('abc ', 3)) . '...', + 'test two' => 'test two', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::truncatewords($element)); + } + + // Custom length + $this->assertEquals('hello...', StandardFilters::truncatewords('hello from string', 1)); + + // Custom ending + $this->assertEquals('helloend', StandardFilters::truncatewords('hello from string', 1, 'end')); + } + + public function testStripHtml() + { + $data = array( + '' => '', + 'test no html tags' => 'test no html tags', + 'test

paragraph

hello' => 'test paragraph hello', + 3 => 3, + ); + + foreach ($data as $element => $expected) { + $this->assertEquals($expected, StandardFilters::strip_html($element)); + } + } + + public function testJoin() + { + $data = array( + array( + array(), + '', + ), + array( + new \ArrayIterator(array()), + '' + ), + array( + '', + '', + ), + array( + array(1, 2, 3, 4, 5), + '1 2 3 4 5' + ), + array( + new \ArrayIterator(array(1, 2, 3, 4, 5)), + '1 2 3 4 5' + ), + array( + 100, + 100 + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::join($item[0])); + } + + // Custom glue + $this->assertEquals('1-2-3', StandardFilters::join(array(1, 2, 3), '-')); + $this->assertEquals('1-2-3', StandardFilters::join(new \ArrayIterator(array(1, 2, 3)), '-')); + } + + public function testSort() + { + $data = array( + array( + array(), + array(), + ), + array( + new \ArrayIterator(array()), + array(), + ), + array( + array(1, 5, 3, 4, 2), + array(1, 2, 3, 4, 5), + ), + array( + new \ArrayIterator(array(1, 5, 3, 4, 2)), + array(1, 2, 3, 4, 5), + ), + ); + + foreach ($data as $key => $item) { + $this->assertEquals(array_values($item[1]), array_values(StandardFilters::sort($item[0])), "Sort failed for case #{$key}"); + } + + // Sort by inner key + $original = array( + array('a' => 20, 'b' => 10), + array('a' => 45, 'b' => 5), + array('a' => 40, 'b' => 6), + array('a' => 30, 'b' => 48), + ); + $expected = array( + array('a' => 45, 'b' => 5), + array('a' => 40, 'b' => 6), + array('a' => 20, 'b' => 10), + array('a' => 30, 'b' => 48), + ); + + $this->assertEquals($expected, array_values(StandardFilters::sort($original, 'b'))); + $this->assertEquals($expected, array_values(StandardFilters::sort(new \ArrayIterator($original), 'b'))); + } + + /* + + I've commented this out as its not one of the Ruby Standard Filters + + public function testSortKey() { + $data = array( + array( + array(), + array(), + ), + array( + array('b' => 1, 'c' => 5, 'a' => 3, 'z' => 4, 'h' => 2), + array('a' => 3, 'b' => 1, 'c' => 5, 'h' => 2, 'z' => 4), + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::sort_key($item[0])); + } + } + */ + + public function testDefault() + { + $this->assertEquals('hello', StandardFilters::_default('', 'hello')); + $this->assertEquals('world', StandardFilters::_default('world', 'hello')); + // check that our workaround for 'default' works as it should + $this->assertTemplateResult('something', '{{ nothing | default: "something" }}'); + } + + public function testUnique() + { + $data = array( + array( + array(), + array(), + ), + array( + new \ArrayIterator(array()), + array(), + ), + array( + array(1, 1, 5, 3, 4, 2, 5, 2), + array(1, 5, 3, 4, 2), + ), + array( + new \ArrayIterator(array(1, 1, 5, 3, 4, 2, 5, 2)), + array(1, 5, 3, 4, 2), + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], array_values(StandardFilters::uniq($item[0]))); + } + } + + public function testReverse() + { + $data = array( + array( + array(), + array(), + ), + array( + new \ArrayIterator(array()), + array(), + ), + array( + array(1, 1, 5, 3, 4, 2, 5, 2), + array(2, 5, 2, 4, 3, 5, 1, 1), + ), + array( + new \ArrayIterator(array(1, 1, 5, 3, 4, 2, 5, 2)), + array(2, 5, 2, 4, 3, 5, 1, 1), + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::reverse($item[0]), '', 0, 10, true); + } + } + + public function testMap() + { + $data = array( + array( + array(), + array(), + ), + array( + new \ArrayIterator(array()), + array(), + ), + array( + array( + function () { + return 'from function '; + }, + array( + 'b' => 10, + 'attr' => 'value ', + ), + array( + 'a' => 20, + 'no_attr' => 'another value ' + ), + ), + array('from function ', 'value ', null), + ), + array( + new \ArrayIterator(array( + function () { + return 'from function '; + }, + array( + 'b' => 10, + 'attr' => 'value ', + ), + array( + 'a' => 20, + 'no_attr' => 'another value ' + ), + )), + array('from function ', 'value ', null), + ), + array( + 0, + 0 + ) + ); + + foreach ($data as $item) { + $actual = StandardFilters::map($item[0], 'attr'); + if ($actual instanceof \Traversable) { + $actual = iterator_to_array($actual); + } + $this->assertEquals($item[1], $actual); + } + } + + public function testFirst() + { + $data = array( + array( + array(), + false, + ), + array( + new \ArrayIterator(array()), + false, + ), + array( + array('two', 'one', 'three'), + 'two', + ), + array( + new \ArrayIterator(array('two', 'one', 'three')), + 'two', + ), + array( + array(100, 400, 200), + 100, + ), + array( + new \ArrayIterator(array(100, 400, 200)), + 100, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::first($item[0])); + } + } + + public function testLast() + { + $data = array( + array( + array(), + false, + ), + array( + new \ArrayIterator(array()), + false, + ), + array( + array('two', 'one', 'three'), + 'three', + ), + array( + new \ArrayIterator(array('two', 'one', 'three')), + 'three', + ), + array( + array(100, 400, 200), + 200, + ), + array( + new \ArrayIterator(array(100, 400, 200)), + 200, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::last($item[0])); + } + } + + public function testString() + { + $data = array( + array( + 1, + '1', + ), + array( + new SizeClass(), + "forty two", + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::string($item[0])); + } + } + + public function testSplit() + { + $data = array( + array( + '', + array(), + ), + array( + null, + array(), + ), + array( + 'two-one-three', + array('two', 'one', 'three'), + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::split($item[0], '-')); + } + } + + public function testStrip() + { + $data = array( + array( + '', + '', + ), + array( + ' hello ', + 'hello', + ), + array( + 1, + 1, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::strip($item[0])); + } + } + + public function testLStrip() + { + $data = array( + array( + '', + '', + ), + array( + ' hello ', + 'hello ', + ), + array( + 1, + 1, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::lstrip($item[0])); + } + } + + public function testRStrip() + { + $data = array( + array( + '', + '', + ), + array( + ' hello ', + ' hello', + ), + array( + 1, + 1, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[1], StandardFilters::rstrip($item[0])); + } + } + + public function testPlus() + { + $data = array( + array( + '', + '', + 0, + ), + array( + 10, + 20, + 30, + ), + array( + 1.5, + 2.7, + 4.2, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[2], StandardFilters::plus($item[0], $item[1]), '', 0.00001); + } + } + + public function testMinus() + { + $data = array( + array( + '', + '', + 0, + ), + array( + 10, + 20, + -10, + ), + array( + 1.5, + 2.7, + -1.2, + ), + array( + 3.1, + 3.1, + 0 + ) + ); + + foreach ($data as $item) { + $this->assertEquals($item[2], StandardFilters::minus($item[0], $item[1]), '', 0.00001); + } + } + + public function testTimes() + { + $data = array( + array( + '', + '', + 0, + ), + array( + 10, + 20, + 200, + ), + array( + 1.5, + 2.7, + 4.05, + ), + array( + 7.5, + 0, + 0 + ) + ); + + foreach ($data as $item) { + $this->assertEquals($item[2], StandardFilters::times($item[0], $item[1]), '', 0.00001); + } + } + + public function testDivideBy() + { + $data = array( + array( + '20', + 10, + 2, + ), + array( + 10, + 20, + 0.5, + ), + array( + 0, + 200, + 0, + ), + array( + 10, + 0.5, + 20, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[2], StandardFilters::divided_by($item[0], $item[1]), '', 0.00001); + } + } + + public function testModulo() + { + $data = array( + array( + '20', + 10, + 0, + ), + array( + 10, + 20, + 10, + ), + array( + 8, + 3, + 2, + ), + array( + 8.9, + 3.5, + 1.9, + ), + array( + 183.357, + 12, + 3.357, + ), + ); + + foreach ($data as $item) { + $this->assertEquals($item[2], StandardFilters::modulo($item[0], $item[1]), '', 0.00001); + } + } + + public function testRound() + { + $data = array( + array( + '20.003', + 2, + 20.00, + ), + array( + 10, + 3, + 10.000, + ), + array( + 8, + 0, + 8.0, + ), + ); + + foreach ($data as $item) { + $this->assertSame($item[2], StandardFilters::round($item[0], $item[1])); + } + } + + public function testCeil() + { + $data = array( + array( + '20.003', + 21, + ), + array( + 10, + 10, + ), + array( + 0.42, + 1, + ), + ); + + foreach ($data as $item) { + $this->assertSame($item[1], StandardFilters::ceil($item[0])); + } + } + + public function testFloor() + { + $data = array( + array( + '20.003', + 20, + ), + array( + 10, + 10, + ), + array( + 0.42, + 0, + ), + array( + 2.5, + 2, + ) + ); + + foreach ($data as $item) { + $this->assertSame($item[1], StandardFilters::floor($item[0])); + } + } + + public function testLocalFilter() + { + $var = new Variable('var | money'); + $this->context->set('var', 1000); + $this->context->addFilters(new MoneyFilter()); + $this->assertEquals(' 1000$ ', $var->render($this->context)); + } + + public function testUnderscoreInFilterName() + { + $var = new Variable('var | money_with_underscore '); + $this->context->set('var', 1000); + $this->context->addFilters(new MoneyFilter()); + $this->assertEquals(' 1000$ ', $var->render($this->context)); + } + + public function testSecondFilterOverwritesFirst() + { + $var = new Variable('var | money '); + $this->context->set('var', 1000); + $this->context->addFilters(new MoneyFilter()); + $this->context->addFilters(new CanadianMoneyFilter()); + $this->assertEquals(' 1000$ CAD ', $var->render($this->context)); + } + + public function testDate() + { + $var = new Variable('var | date, "%Y"'); + $this->context->set('var', '2017-07-01 21:00:00'); + $this->assertEquals('2017', $var->render($this->context)); + + $var = new Variable("var | date: '%d/%m/%Y %l:%M %p'"); + $this->context->set('var', '2017-07-01 21:00:00'); + $this->assertEquals('01/07/2017 9:00 PM', $var->render($this->context)); + + $var = new Variable('var | date, ""'); + $this->context->set('var', '2017-07-01 21:00:00'); + $this->assertEquals('', $var->render($this->context)); + + $var = new Variable('var | date, "r"'); + $this->context->set('var', 1000000000); + $this->assertEquals(date('r', 1000000000), $var->render($this->context)); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/NoTransformTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/NoTransformTest.php new file mode 100644 index 0000000..7fe98b7 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/NoTransformTest.php @@ -0,0 +1,35 @@ +assertTemplateResult( + 'this text should come out of the template without change...', + 'this text should come out of the template without change...' + ); + + $this->assertTemplateResult('blah', 'blah'); + $this->assertTemplateResult('', ''); + $this->assertTemplateResult('|,.:', '|,.:'); + $this->assertTemplateResult('', ''); + + $text = "this shouldnt see any transformation either but has multiple lines + as you can clearly see here ..."; + + $this->assertTemplateResult($text, $text); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagAssignTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagAssignTest.php new file mode 100644 index 0000000..74c83b6 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagAssignTest.php @@ -0,0 +1,98 @@ +expectException(\Liquid\Exception\ParseException::class); + + $template = new Template(); + + $template->parse('{% assign test %}'); + } + + /** + * Tests a simple assignment with no filters + */ + public function testSimpleAssign() + { + $template = new Template(); + + $template->parse('{% assign test = "hello" %}{{ test }}'); + $this->assertTrue($template->render() === 'hello'); + } + + /** + * Tests filtered value assignment + */ + public function testAssignWithFilters() + { + $template = new Template(); + + $template->parse('{% assign test = "hello" | upcase %}{{ test }}'); + $this->assertTrue($template->render() === 'HELLO'); + + $template->parse('{% assign test = "hello" | upcase | downcase | capitalize %}{{ test }}'); + $this->assertTrue($template->render() === 'Hello'); + + $template->parse('{% assign test = var1 | first | upcase %}{{ test }}'); + $this->assertTrue($template->render(array('var1' => array('a', 'b', 'c'))) === 'A'); + + $template->parse('{% assign test = var1 | last | upcase %}{{ test }}'); + $this->assertTrue($template->render(array('var1' => array('a', 'b', 'c'))) === 'C'); + + $template->parse('{% assign test = var1 | join %}{{ test }}'); + $this->assertTrue($template->render(array('var1' => array('a', 'b', 'c'))) === 'a b c'); + + $template->parse('{% assign test = var1 | join : "." %}{{ test }}'); + $this->assertTrue($template->render(array('var1' => array('a', 'b', 'c'))) === 'a.b.c'); + } + + /** + * Tests filtered value assignment with separators + */ + public function testTagAssignWithSplit() + { + $template = new Template(); + + $template->parse('{% assign rows = "one|two|three,one|two|three" | upcase | split: "," %}{% for row in rows %}{% assign cols = row | split: "|" %}{% for col in cols %} {{col}}{%endfor%}{% endfor %}'); + $this->assertEquals($template->render(), ' ONE TWO THREE ONE TWO THREE'); + + $template->parse('{% assign issue_numbers = "1339|1338|1321" | split: "|" %}{% for issue in issue_numbers %} {{ issue }}{% endfor %}'); + $this->assertEquals($template->render(), ' 1339 1338 1321'); + } + + /** + * Tests a simple assignment with numbers + */ + public function testNumbersAssign() + { + $this->assertTemplateResult('42', '{% assign i = 42 %}{{ i }}'); + $this->assertTemplateResult('3.14', '{% assign i = 3.14 %}{{ i }}'); + $this->assertTemplateResult('-100', '{% assign i = -100 %}{{ i }}'); + $this->assertTemplateResult('-10.0', '{% assign i = -10.0 %}{{ i }}'); + $this->assertTemplateResult('-10.5', '{% assign i = -10.5 %}{{ i }}'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagBlockTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagBlockTest.php new file mode 100644 index 0000000..70aba90 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagBlockTest.php @@ -0,0 +1,31 @@ +expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% block %}'); + } + + public function testCreateBlock() + { + $this->assertTemplateResult('block content', '{% block foo %}block content{% endblock %}'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagBreakTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagBreakTest.php new file mode 100644 index 0000000..d31b882 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagBreakTest.php @@ -0,0 +1,50 @@ +assertTemplateResult(' ', '{%for item in array%} {%break%} yo {%endfor%}', array('array' => array(1, 2, 3, 4))); + $this->assertTemplateResult(' yo ', '{%for item in array%} yo {%break%} {%endfor%}', array('array' => array(1, 2, 3, 4))); + $this->assertTemplateResult(' 1 2 ', '{%for item in array%} {%if item == 3%} {%break%} {%endif%} {{ item }} {%endfor%}', array('array' => array(1, 2, 3, 4))); + } + + public function testRange() + { + $this->assertTemplateResult(' ', '{%for item in (3..6)%} {%break%} yo {%endfor%}'); + $this->assertTemplateResult(' yo ', '{%for item in (3..6)%} yo {%break%} {%endfor%}'); + $this->assertTemplateResult(' 3 4 ', '{%for item in (3..6)%} {%if item == 5%} {%break%} {%endif%} {{ item }} {%endfor%}'); + } + + public function testTablerow() + { + $this->assertTemplateResult( + "\n\n", + '{%tablerow item in array%} {%break%} yo {%endtablerow%}', + array('array' => array(1, 2, 3, 4)) + ); + $this->assertTemplateResult( + "\n yo \n", + '{%tablerow item in array%} yo {%break%} {%endtablerow%}', + array('array' => array(1, 2, 3, 4)) + ); + $this->assertTemplateResult( + "\n 1 2 \n", + '{%tablerow item in array%} {%if item == 3%} {%break%} {%endif%} {{ item }} {%endtablerow%}', + array('array' => array(1, 2, 3, 4)) + ); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaptureTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaptureTest.php new file mode 100644 index 0000000..9752265 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaptureTest.php @@ -0,0 +1,34 @@ +expectException(\Liquid\Exception\ParseException::class); + + $template = new Template(); + $template->parse("{% capture %} hello"); + } + + public function testCapture() + { + $assigns = array('var' => 'content'); + $this->assertTemplateResult('content foo content foo ', '{{ var2 }}{% capture var2 %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}', $assigns); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaseTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaseTest.php new file mode 100644 index 0000000..8e99ec9 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCaseTest.php @@ -0,0 +1,106 @@ + 2); + $this->assertTemplateResult(' its 2 ', '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', $assigns); + + $assigns = array('condition' => 1); + $this->assertTemplateResult(' its 1 ', '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', $assigns); + + $assigns = array('condition' => 3); + $this->assertTemplateResult('', '{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}', $assigns); + + $assigns = array('condition' => "string here"); + $this->assertTemplateResult(' hit ', '{% case condition %}{% when "string here" %} hit {% endcase %}', $assigns); + + $assigns = array('condition' => "bad string here"); + $this->assertTemplateResult('', '{% case condition %}{% when "string here" %} hit {% endcase %}', $assigns); + } + + public function testCaseWithElse() + { + $assigns = array('condition' => 5); + $this->assertTemplateResult(' hit ', '{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}', $assigns); + + $assigns = array('condition' => 6); + $this->assertTemplateResult(' else ', '{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}', $assigns); + } + + /** + */ + public function testSyntaxErrorCase() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% case %}{% when 5 %}{% endcase %}'); + } + + /** + */ + public function testSyntaxErrorWhen() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% case condition %}{% when %}{% endcase %}'); + } + + /** + */ + public function testSyntaxErrorEnd() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% case condition %}{% end %}'); + } + + /** + */ + public function testObject() + { + $this->expectException(\Liquid\Exception\RenderException::class); + + $this->assertTemplateResult('', '{% case variable %}{% when 5 %}{% endcase %}', array('variable' => (object) array())); + } + + public function testStringable() + { + $this->assertTemplateResult('hit', '{% case variable %}{% when 100 %}hit{% endcase %}', array('variable' => new Stringable())); + } + + public function testToLiquid() + { + $this->assertTemplateResult('hit', '{% case variable %}{% when 100 %}hit{% endcase %}', array('variable' => new HasToLiquid())); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCommentTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCommentTest.php new file mode 100644 index 0000000..b942cae --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCommentTest.php @@ -0,0 +1,43 @@ +assertTemplateResult( + "the comment block should be removed .. right?", + "the comment block should be removed {%comment%} be gone.. {%endcomment%} .. right?" + ); + + $this->assertTemplateResult('', '{%comment%}{%endcomment%}'); + $this->assertTemplateResult('', '{%comment%}{% endcomment %}'); + $this->assertTemplateResult('', '{% comment %}{%endcomment%}'); + $this->assertTemplateResult('', '{% comment %}{% endcomment %}'); + $this->assertTemplateResult('', '{%comment%}comment{%endcomment%}'); + $this->assertTemplateResult('', '{% comment %}comment{% endcomment %}'); + + $this->assertTemplateResult('foobar', 'foo{%comment%}comment{%endcomment%}bar'); + $this->assertTemplateResult('foobar', 'foo{% comment %}comment{% endcomment %}bar'); + $this->assertTemplateResult('foobar', 'foo{%comment%} comment {%endcomment%}bar'); + $this->assertTemplateResult('foobar', 'foo{% comment %} comment {% endcomment %}bar'); + + $this->assertTemplateResult('foo bar', 'foo {%comment%} {%endcomment%} bar'); + $this->assertTemplateResult('foo bar', 'foo {%comment%}comment{%endcomment%} bar'); + $this->assertTemplateResult('foo bar', 'foo {%comment%} comment {%endcomment%} bar'); + + $this->assertTemplateResult('foobar', 'foo{%comment%} {%endcomment%}bar'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagContinueTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagContinueTest.php new file mode 100644 index 0000000..cd7f875 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagContinueTest.php @@ -0,0 +1,50 @@ +assertTemplateResult(' ', '{%for item in array%} {%continue%} yo {%endfor%}', array('array' => array(1, 2, 3, 4))); + $this->assertTemplateResult(' yo yo yo yo ', '{%for item in array%} yo {%continue%} {%endfor%}', array('array' => array(1, 2, 3, 4))); + $this->assertTemplateResult(' 1 2 4 ', '{%for item in array%} {%if item == 3%} {%continue%} {%endif%} {{ item }} {%endfor%}', array('array' => array(1, 2, 3, 4))); + } + + public function testRange() + { + $this->assertTemplateResult(' ', '{%for item in (3..6)%} {%continue%} yo {%endfor%}'); + $this->assertTemplateResult(' yo yo yo yo ', '{%for item in (3..6)%} yo {%continue%} {%endfor%}'); + $this->assertTemplateResult(' 3 4 6 ', '{%for item in (3..6)%} {%if item == 5%} {%continue%} {%endif%} {{ item }} {%endfor%}'); + } + + public function testTablerow() + { + $this->assertTemplateResult( + "\n\n", + '{%tablerow item in array%} {%continue%} yo {%endtablerow%}', + array('array' => array(1, 2, 3, 4)) + ); + $this->assertTemplateResult( + "\n yo yo yo yo \n", + '{%tablerow item in array%} yo {%continue%} {%endtablerow%}', + array('array' => array(1, 2, 3, 4)) + ); + $this->assertTemplateResult( + "\n 1 2 4 \n", + '{%tablerow item in array%} {%if item == 3%} {%continue%} {%endif%} {{ item }} {%endtablerow%}', + array('array' => array(1, 2, 3, 4)) + ); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCycleTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCycleTest.php new file mode 100644 index 0000000..857a59a --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagCycleTest.php @@ -0,0 +1,51 @@ +expectException(\Liquid\Exception\ParseException::class); + + $template = new Template(); + $template->parse("{% cycle %}"); + } + + public function testCycle() + { + $this->assertTemplateResult('one', '{%cycle "one", "two"%}'); + $this->assertTemplateResult('one two', '{%cycle "one", "two"%} {%cycle "one", "two"%}'); + $this->assertTemplateResult('one two one', '{%cycle "one", "two"%} {%cycle "one", "two"%} {%cycle "one", "two"%}'); + } + + public function testMultipleCycles() + { + $this->assertTemplateResult('1 2 1 1 2 3 1', '{%cycle 1,2%} {%cycle 1,2%} {%cycle 1,2%} {%cycle 1,2,3%} {%cycle 1,2,3%} {%cycle 1,2,3%} {%cycle 1,2,3%}'); + } + + public function testMultipleNamedCycles() + { + $this->assertTemplateResult('one one two two one one', '{%cycle 1: "one", "two" %} {%cycle 2: "one", "two" %} {%cycle 1: "one", "two" %} {%cycle 2: "one", "two" %} {%cycle 1: "one", "two" %} {%cycle 2: "one", "two" %}'); + } + + public function testMultipleNamedCyclesWithNamesFromContext() + { + $assigns = array("var1" => 1, "var2" => 2); + $this->assertTemplateResult('one one two two one one', '{%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %}', $assigns); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagDecrementTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagDecrementTest.php new file mode 100644 index 0000000..6d2def4 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagDecrementTest.php @@ -0,0 +1,49 @@ +expectException(\Liquid\LiquidException::class); + + $this->assertTemplateResult('', '{% decrement %}'); + } + + /** + * Undefined variable will become -1 + */ + public function testDecrementNonExistingVariable() + { + $this->assertTemplateResult(-1, '{% decrement no_such_var %}{{ no_such_var }}'); + } + + public function testDecrementVariable() + { + $this->assertTemplateResult(42, '{% decrement var %}{{ var }}', array('var' => 43)); + } + + public function testDecrementNestedVariable() + { + $this->assertTemplateResult(42, '{% for var in vars %}{% decrement var %}{{ var }}{% endfor %}', array('vars' => array(43))); + } + + public function testVariableNameContainingNumber() + { + $this->assertTemplateResult(42, '{% decrement var123 %}{{ var123 }}', array('var123' => 43)); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagExtendsTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagExtendsTest.php new file mode 100644 index 0000000..fe1252a --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagExtendsTest.php @@ -0,0 +1,215 @@ +fs = TestFileSystem::fromArray(array( + 'base' => "{% block content %}{% endblock %}{% block footer %}{% endblock %}", + 'sub-base' => "{% extends 'base' %}{% block content %}{% endblock %}{% block footer %} Boo! {% endblock %}", + )); + } + + protected function tearDown(): void + { + // PHP goes nuts unless we unset it + unset($this->fs); + } + + public function testBasicExtends() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% extends 'base' %}{% block content %}{{ hello }}{% endblock %}"); + $output = $template->render(array("hello" => "Hello!")); + $this->assertEquals("Hello!", $output); + } + + public function testDefaultContentExtends() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% block content %}{{ hello }}{% endblock %}\n{% extends 'sub-base' %}"); + $output = $template->render(array("hello" => "Hello!")); + $this->assertEquals("Hello!\n Boo! ", $output); + } + + public function testDeepExtends() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse('{% extends "sub-base" %}{% block content %}{{ hello }}{% endblock %}{% block footer %} I am a footer.{% endblock %}'); + + $output = $template->render(array("hello" => "Hello!")); + $this->assertEquals("Hello! I am a footer.", $output); + } + + public function testWithCache() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->setCache(new Local()); + + foreach (array("Before cache", "With cache") as $type) { + $template->parse("{% extends 'base' %}{% block content %}{{ hello }}{% endblock %}"); + $output = $template->render(array("hello" => "$type")); + $this->assertEquals($type, $output); + } + + $template->setCache(null); + } + + /** + * Render calls in this test will give different results (and fail the test) with cache enabled + */ + public function testExtendsReplaceContentWithCache() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'outer' => "{% block content %}Content for outer block{% endblock %} / {% block footer %}Footer for outer block{% endblock %}", + 'inner' => "{% extends 'outer' %}{% block content %}Content for inner block{% endblock %}", + ))); + + $contentsWithoutCache = $template->parseFile('inner')->render(); + + $template->setCache(new Local()); + $template->parseFile('outer'); + + $this->assertEquals($contentsWithoutCache, $template->parseFile('inner')->render()); + } + + public function testExtendsReplaceContentWithVariables() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'outer' => "{% block content %}Outer{{ a }}{% endblock %}Spacer{{ a }}{% block footer %}Footer{{ a }}{% endblock %}", + 'middle' => "{% extends 'outer' %}{% block content %}Middle{{ a }}{% endblock %}", + 'inner' => "{% extends 'middle' %}{% block content %}Inner{{ a }}{% endblock %}", + ))); + + $template->setCache(new Local()); + + $template->parseFile('outer')->render(['a' => '0']); + $template->parseFile('middle')->render(['a' => '1']); + $template->parseFile('middle')->render(['a' => '2']); + $this->assertEquals('Middle3Spacer3Footer3', $template->parseFile('middle')->render(['a' => '3'])); + $this->assertEquals('Inner4Spacer4Footer4', $template->parseFile('inner')->render(['a' => '4'])); + } + + public function testExtendsWithEmptyDefaultContent() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'base' => "
{% block content %}{% endblock %}
", + 'extends' => "{% extends 'base' %}{% block content %}{{ test }}{% endblock %}", + ))); + + $template->setCache(new Local()); + + $template->parseFile('base')->render(); + $template->parseFile('extends')->render(['test' => 'Foo']); + $template->parseFile('extends')->render(['test' => 'Bar']); + $this->assertEquals('
Baz
', $template->parseFile('extends')->render(['test' => 'Baz'])); + $this->assertEquals('
', $template->parseFile('base')->render()); + } + + public function testCacheDiscardedIfFileChanges() + { + $template = new Template(); + $template->setCache(new Local()); + + $content = "[{{ name }}]"; + $template->setFileSystem(TestFileSystem::fromArray(array( + 'outer' => &$content, + 'inner' => "{% extends 'outer' %}" + ))); + + $template->parseFile('inner'); + $output = $template->render(array("name" => "Example")); + $this->assertEquals("[Example]", $output); + + // this should go from cache + $template->parse("{% extends 'outer' %}"); + $output = $template->render(array("name" => "Example")); + $this->assertEquals("[Example]", $output); + + // content change should trigger re-render + $content = "<{{ name }}>"; + $template->parseFile('inner'); + $output = $template->render(array("name" => "Example")); + $this->assertEquals("", $output); + } + + /** + */ + public function testInvalidSyntaxNoTemplateName() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $template = new Template(); + $template->parse("{% extends %}"); + } + + /** + */ + public function testInvalidSyntaxNotQuotedTemplateName() + { + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('Error in tag'); + + $template = new Template(); + $template->parse("{% extends base %}"); + } + + /** + */ + public function testMissingFilesystem() + { + $this->expectException(\Liquid\Exception\MissingFilesystemException::class); + $this->expectExceptionMessage('No file system'); + + $template = new Template(); + $template->parse("{% extends 'base' %}"); + } + + /** + */ + public function testInvalidSyntaxEmptyTemplateName() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% extends '' %}"); + } + + public function testInvalidSyntaxInvalidKeyword() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% extends 'base' nothing-should-be-here %}"); + + $this->markTestIncomplete("Exception is expected here"); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagForTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagForTest.php new file mode 100644 index 0000000..72ec2c6 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagForTest.php @@ -0,0 +1,224 @@ +expectException(\Liquid\Exception\ParseException::class); + + $template = new Template(); + $template->parse("{% for elem %}{% endfor %}"); + } + + public function testFor() + { + $this->assertTemplateResult('', '{%for item in array%} yo {%endfor%}', array('array' => array())); + $this->assertTemplateResult(' yo yo yo yo ', '{%for item in array%} yo {%endfor%}', array('array' => array(1, 2, 3, 4))); + $this->assertTemplateResult(' boo boo boo boo ', '{%for item in array%} boo {%endfor%}', array('array' => new \ArrayIterator(array(1, 2, 3, 4)))); + $this->assertTemplateResult('yoyo', '{%for item in array%}yo{%endfor%}', array('array' => array(1, 2))); + $this->assertTemplateResult(' yo ', '{%for item in array%} yo {%endfor%}', array('array' => array(1))); + $this->assertTemplateResult('', '{%for item in array%}{%endfor%}', array('array' => array(1, 2))); + + $expected = <<assertTemplateResult($expected, $template, array('array' => array(1, 2, 3))); + } + + public function testForWithVariable() + { + $this->assertTemplateResult(' 1 2 3 ', '{%for item in array%} {{item}} {%endfor%}', array('array' => array(1, 2, 3))); + $this->assertTemplateResult('123', '{%for item in array%}{{item}}{%endfor%}', array('array' => array(1, 2, 3))); + $this->assertTemplateResult('123', '{% for item in array %}{{item}}{% endfor %}', array('array' => array(1, 2, 3))); + $this->assertTemplateResult('abcd', '{%for item in array%}{{item}}{%endfor%}', array('array' => array('a', 'b', 'c', 'd'))); + $this->assertTemplateResult('a b c', '{%for item in array%}{{item}}{%endfor%}', array('array' => array('a', ' ', 'b', ' ', 'c'))); + $this->assertTemplateResult('abc', '{%for item in array%}{{item}}{%endfor%}', array('array' => array('a', '', 'b', '', 'c'))); + $this->assertTemplateResult(' a ', "{%\nfor item in array%} {{item}} {%endfor%}", array('array' => array('a'))); + } + + public function testForWithHash() + { + $this->assertTemplateResult('a=b c=d e=f ', '{%for item in array%}{{item[0]}}={{item[1]}} {%endfor%}', array('array' => array('a' => 'b', 'c' => 'd', 'e' => 'f'))); + } + + public function testForHelpers() + { + $assigns = array('array' => array(1, 2, 3)); + + $this->assertTemplateResult(' 1/3 2/3 3/3 ', '{%for item in array%} {{forloop.index}}/{{forloop.length}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 1 2 3 ', '{%for item in array%} {{forloop.index}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 0 1 2 ', '{%for item in array%} {{forloop.index0}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 2 1 0 ', '{%for item in array%} {{forloop.rindex0}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 3 2 1 ', '{%for item in array%} {{forloop.rindex}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 1 0 0 ', '{%for item in array%} {{forloop.first}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 0 0 1 ', '{%for item in array%} {{forloop.last}} {%endfor%}', $assigns); + } + + public function testForHelpersWithOffsetAndLimit() + { + $assigns = array('array' => array(0, 1, 2, 3, 4)); + + $this->assertTemplateResult(' 1/3 2/3 3/3 ', '{%for item in array offset:1 limit:3%} {{forloop.index}}/{{forloop.length}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 1 2 3 ', '{%for item in array offset:1 limit:3%} {{forloop.index}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 0 1 2 ', '{%for item in array offset:1 limit:3%} {{forloop.index0}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 2 1 0 ', '{%for item in array offset:1 limit:3%} {{forloop.rindex0}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 3 2 1 ', '{%for item in array offset:1 limit:3%} {{forloop.rindex}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 1 0 0 ', '{%for item in array offset:1 limit:3%} {{forloop.first}} {%endfor%}', $assigns); + $this->assertTemplateResult(' 0 0 1 ', '{%for item in array offset:1 limit:3%} {{forloop.last}} {%endfor%}', $assigns); + } + + public function testForAndIf() + { + $assigns = array('array' => array(1, 2, 3)); + $this->assertTemplateResult(' yay ', '{%for item in array%} {% if forloop.first %}yay{% endif %} {%endfor%}', $assigns); + $this->assertTemplateResult(' yay boo boo ', '{%for item in array%} {% if forloop.first %}yay{% else %}boo{% endif %} {%endfor%}', $assigns); + $this->assertTemplateResult(' boo boo ', '{%for item in array%} {% if forloop.first %}{% else %}boo{% endif %} {%endfor%}', $assigns); + } + + public function testLimiting() + { + $assigns = array('array' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)); + $this->assertTemplateResult('12', '{%for i in array limit:2 %}{{ i }}{%endfor%}', $assigns); + $this->assertTemplateResult('1234567890', '{%for i in array limit:20 %}{{ i }}{%endfor%}', $assigns); + $this->assertTemplateResult('1234', '{%for i in array limit:4 %}{{ i }}{%endfor%}', $assigns); + $this->assertTemplateResult('3456', '{%for i in array limit:4 offset:2 %}{{ i }}{%endfor%}', $assigns); + $this->assertTemplateResult('3456', '{%for i in array limit: 4 offset: 2 %}{{ i }}{%endfor%}', $assigns); + + $assigns['limit'] = 2; + $assigns['offset'] = 2; + $this->assertTemplateResult('34', '{%for i in array limit: limit offset: offset %}{{ i }}{%endfor%}', $assigns); + } + + public function testNestedFor() + { + $assigns = array('array' => array(array(1, 2), array(3, 4), array(5, 6))); + $this->assertTemplateResult('123456', '{%for item in array%}{%for i in item%}{{ i }}{%endfor%}{%endfor%}', $assigns); + } + + public function testOffsetOnly() + { + $assigns = array('array' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)); + $this->assertTemplateResult('890', '{%for i in array offset:7 %}{{ i }}{%endfor%}', $assigns); + } + + public function testPauseResume() + { + $assigns = array('array' => array('items' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))); + + $markup = <<assertTemplateResult($expected, $markup, $assigns); + } + + public function testPauseResumeLimit() + { + $assigns = array('array' => array('items' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))); + + $markup = <<assertTemplateResult($expected, $markup, $assigns); + } + + public function testPauseResumeBIGLimit() + { + $assigns = array('array' => array('items' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))); + + $markup = <<assertTemplateResult($expected, $markup, $assigns); + } + + public function testPauseResumeBIGOffset() + { + $assigns = array('array' => array('items' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))); + + $markup = <<assertTemplateResult($expected, $markup, $assigns); + } + + public function testForWithRanges() + { + $this->assertTemplateResult('123456789', '{%for i in (1..9)%}{{i}}{%endfor%}'); + $this->assertTemplateResult(' 9 10 11', '{%for i in (9..11)%} {{i}}{%endfor%}'); + $this->assertTemplateResult('9991000', '{%for i in (999..1000)%}{{i}}{%endfor%}'); + + $assigns = array('variable' => 100); + $this->assertTemplateResult('9596979899100', '{%for i in (95..variable)%}{{i}}{%endfor%}', $assigns); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfTest.php new file mode 100644 index 0000000..31482f7 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfTest.php @@ -0,0 +1,289 @@ +assertTemplateResult($expected, $text); + } + + public function testTrueNotEqlTrue() + { + $text = " {% if true != true %} true {% else %} false {% endif %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text); + } + + public function testTrueLqTrue() + { + $text = " {% if 0 > 0 %} true {% else %} false {% endif %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text); + } + + public function testOneLqZero() + { + $text = " {% if 1 > 0 %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text); + } + + public function testZeroLqOne() + { + $text = " {% if 0 < 1 %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text); + } + + public function testZeroLqOrEqualOne() + { + $text = " {% if 0 <= 0 %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text); + } + + public function testZeroLqOrEqualOneInvolvingNil() + { + $text = " {% if null <= 0 %} true {% else %} false {% endif %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text); + + + $text = " {% if 0 <= null %} true {% else %} false {% endif %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text); + } + + public function testZeroLqqOrEqualOne() + { + $text = " {% if 0 >= 0 %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text); + } + + public function testStrings() + { + $text = " {% if 'test' == 'test' %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text); + } + + public function testStringsNotEqual() + { + $text = " {% if 'test' != 'test' %} true {% else %} false {% endif %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text); + } + + public function testVarStringsEqual() + { + $text = " {% if var == \"hello there!\" %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => 'hello there!')); + } + + public function testVarStringsAreNotEqual() + { + $text = " {% if \"hello there!\" == var %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => 'hello there!')); + } + + public function testVarAndLongStringAreEqual() + { + $text = " {% if var == 'hello there!' %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => 'hello there!')); + } + + public function testVarAndLongStringAreEqualBackwards() + { + $text = " {% if 'hello there!' == var %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => 'hello there!')); + } + + public function testIsCollectionEmpty() + { + $text = " {% if array == empty %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('array' => array())); + + $text = " {% if empty == array %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('array' => array())); + } + + public function testIsNotCollectionEmpty() + { + $text = " {% if array == empty %} true {% else %} false {% endif %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text, array('array' => array(1, 2, 3))); + } + + public function testNil() + { + $text = " {% if var == null %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => null)); + + $text = " {% if var == null %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => null)); + } + + public function testNotNil() + { + $text = " {% if var != null %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => 1)); + + $text = " {% if var != null %} true {% else %} false {% endif %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text, array('var' => 1)); + } + + public function testNotNilWhitespaceControlEdgeCase() + { + $this->assertTemplateResult("true", "{% if 1 -%}true{% endif %}"); + $this->assertTemplateResult("true", "{% if 1 -%} true{% endif %}"); + } + + public function testIfFromVariable() + { + $this->assertTemplateResult('', '{% if var %} NO {% endif %}', array('var' => false)); + $this->assertTemplateResult('', '{% if var %} NO {% endif %}', array('var' => null)); + $this->assertTemplateResult('', '{% if foo.bar %} NO {% endif %}', array('foo' => array('bar' => false))); + $this->assertTemplateResult('', '{% if foo.bar %} NO {% endif %}', array('foo' => array())); + $this->assertTemplateResult('', '{% if foo.bar %} NO {% endif %}', array('foo' => null)); + + $this->assertTemplateResult(' YES ', '{% if var %} YES {% endif %}', array('var' => "text")); + $this->assertTemplateResult(' YES ', '{% if var %} YES {% endif %}', array('var' => true)); + $this->assertTemplateResult(' YES ', '{% if var %} YES {% endif %}', array('var' => 1)); + $this->assertTemplateResult(' YES ', '{% if "foo" %} YES {% endif %}'); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} YES {% endif %}', array('foo' => array('bar' => true))); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} YES {% endif %}', array('foo' => array('bar' => "text"))); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} YES {% endif %}', array('foo' => array('bar' => 1))); + + $this->assertTemplateResult(' YES ', '{% if var %} NO {% else %} YES {% endif %}', array('var' => false)); + $this->assertTemplateResult(' YES ', '{% if var %} NO {% else %} YES {% endif %}', array('var' => null)); + $this->assertTemplateResult(' YES ', '{% if var %} YES {% else %} NO {% endif %}', array('var' => true)); + $this->assertTemplateResult(' YES ', '{% if "foo" %} YES {% else %} NO {% endif %}', array('var' => "text")); + + $this->assertTemplateResult(' YES ', '{% if foo.bar %} NO {% else %} YES {% endif %}', array('foo' => array('bar' => false))); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} YES {% else %} NO {% endif %}', array('foo' => array('bar' => true))); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} YES {% else %} NO {% endif %}', array('foo' => array('bar' => "text"))); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} NO {% else %} YES {% endif %}', array('foo' => array('notbar' => true))); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} NO {% else %} YES {% endif %}', array('foo' => array())); + $this->assertTemplateResult(' YES ', '{% if foo.bar %} NO {% else %} YES {% endif %}', array('notfoo' => array('bar' => true))); + } + + public function testNestedIf() + { + $this->assertTemplateResult('', '{% if false %}{% if false %} NO {% endif %}{% endif %}'); + $this->assertTemplateResult('', '{% if false %}{% if true %} NO {% endif %}{% endif %}'); + $this->assertTemplateResult('', '{% if true %}{% if false %} NO {% endif %}{% endif %}'); + $this->assertTemplateResult(' YES ', '{% if true %}{% if true %} YES {% endif %}{% endif %}'); + + $this->assertTemplateResult(' YES ', '{% if true %}{% if true %} YES {% else %} NO {% endif %}{% else %} NO {% endif %}'); + $this->assertTemplateResult(' YES ', '{% if true %}{% if false %} NO {% else %} YES {% endif %}{% else %} NO {% endif %}'); + $this->assertTemplateResult(' YES ', '{% if false %}{% if true %} NO {% else %} NONO {% endif %}{% else %} YES {% endif %}'); + } + + public function testComplexConditions() + { + $this->assertTemplateResult('true', '{% if 10 == 10 and "h" == "h" %}true{% else %}false{% endif %}'); + $this->assertTemplateResult('true', '{% if 8 == 10 or "h" == "h" %}true{% else %}false{% endif %}'); + $this->assertTemplateResult('false', '{% if 8 == 10 and "h" == "h" %}true{% else %}false{% endif %}'); + $this->assertTemplateResult('true', '{% if 10 == 10 or "h" == "k" or "k" == "k" %}true{% else %}false{% endif %}'); + } + + public function testContains() + { + $this->assertTemplateResult('true', '{% if foo contains "h" %}true{% else %}false{% endif %}', array('foo' => array('k', 'h', 'z'))); + $this->assertTemplateResult('false', '{% if foo contains "y" %}true{% else %}false{% endif %}', array('foo' => array('k', 'h', 'z'))); + $this->assertTemplateResult('true', '{% if foo contains "e" %}true{% else %}false{% endif %}', array('foo' => 'abcedf')); + $this->assertTemplateResult('true', '{% if foo contains "e" %}true{% else %}false{% endif %}', array('foo' => 'e')); + $this->assertTemplateResult('false', '{% if foo contains "y" %}true{% else %}false{% endif %}', array('foo' => 'abcedf')); + } + + /** + */ + public function testSyntaxErrorNotClosed() + { + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('if tag was never closed'); + + $this->assertTemplateResult('', '{% if jerry == 1 %}'); + } + + public function testSyntaxErrorNotClosedLineBreak() + { + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('if tag was never closed'); + + $this->assertTemplateResult('', "{% if jerry\n == 1 %}"); + } + + /** + */ + public function testSyntaxErrorEnd() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% if jerry == 1 %}{% end %}'); + } + + /** + */ + public function testInvalidOperator() + { + $this->expectException(\Liquid\Exception\RenderException::class); + + $this->assertTemplateResult('', '{% if foo === y %}true{% else %}false{% endif %}', array('foo' => true, 'y' => true)); + } + + /** + */ + public function testIncomparable() + { + $this->expectException(\Liquid\Exception\RenderException::class); + + $this->assertTemplateResult('', '{% if foo == 1 %}true{% endif %}', array('foo' => (object) array())); + } + + /** + */ + public function testSyntaxErrorElse() + { + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('does not expect else tag'); + + $this->assertTemplateResult('', '{% if foo == 1 %}{% endif %}{% else %}'); + } + + /** + */ + public function testSyntaxErrorUnknown() + { + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('Unknown tag'); + + $this->assertTemplateResult('', '{% unknown-tag %}'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfchangedTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfchangedTest.php new file mode 100644 index 0000000..0358731 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIfchangedTest.php @@ -0,0 +1,31 @@ +assertTemplateResult($expected, $text, array('array' => array(1, 2, 3))); + } + + public function testFails() + { + $text = "{% for i in array %}{% ifchanged %} {{ i }} {% endifchanged %}{% endfor %}"; + $expected = " 1 2 1 "; + $this->assertTemplateResult($expected, $text, array('array' => array(1, 2, 2, 1))); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncludeTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncludeTest.php new file mode 100644 index 0000000..3d8a4cf --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncludeTest.php @@ -0,0 +1,263 @@ +fs = TestFileSystem::fromArray(array( + 'a' => "{% include 'b' %}", + 'b' => "{% include 'c' %}", + 'c' => "{% include 'd' %}", + 'd' => '({{ inner }})', + 'inner' => "Inner: {{ inner }}{{ other }}", + 'example' => "Example: {% include 'inner' %}", + )); + } + + protected function tearDown(): void + { + // PHP goes nuts unless we unset it + unset($this->fs); + } + + /** + */ + public function testInvalidSyntaxNoTemplateName() + { + $this->expectException(\Liquid\Exception\ParseException::class); + $this->expectExceptionMessage('Error in tag'); + + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% include %}"); + } + + /** + */ + public function testMissingFilesystem() + { + $this->expectException(\Liquid\Exception\MissingFilesystemException::class); + $this->expectExceptionMessage('No file system'); + + $template = new Template(); + $template->parse("{% include 'hello' %}"); + } + + public function testInvalidSyntaxInvalidKeyword() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% include 'hello' no_keyword %}"); + + $this->markTestIncomplete("Exception is expected here"); + } + + public function testInvalidSyntaxNoObjectCollection() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->parse("{% include 'hello' with %}"); + + $this->markTestIncomplete("Exception is expected here"); + } + + public function testIncludeTag() + { + $template = new Template(); + $template->setFileSystem($this->fs); + + $template->parse("Outer-{% include 'inner' with 'value' other:23 %}-Outer{% include 'inner' for var other:'loop' %}"); + + $output = $template->render(array("var" => array(1, 2, 3))); + + $this->assertEquals("Outer-Inner: value23-OuterInner: 1loopInner: 2loopInner: 3loop", $output); + } + + public function testIncludeTagNoWith() + { + $template = new Template(); + $template->setFileSystem($this->fs); + + $template->parse("Outer-{% include 'inner' %}-Outer-{% include 'inner' other:'23' %}"); + + $output = $template->render(array("inner" => "orig", "var" => array(1, 2, 3))); + + $this->assertEquals("Outer-Inner: orig-Outer-Inner: orig23", $output); + } + + /** + * @depends testInvalidSyntaxNoObjectCollection + */ + public function testWithCache() + { + $template = new Template(); + $template->setFileSystem($this->fs); + $template->setCache(new Local()); + + foreach (array("Before cache:", "With cache:") as $type) { + $template->parse("{{ type }} {% for item in list %}{% include 'example' inner:item %} {% endfor %}{% include 'a' %}"); + $template->render(array("inner" => "foo", "list" => array(1, 2, 3)), array()); + $this->assertEquals("$type Example: Inner: 1 Example: Inner: 2 (bar)", $template->render(array("type" => $type, "inner" => "bar", "list" => array(1, 2)))); + } + + $template->setCache(null); + } + + public function testIncludeTemplateFile() + { + Liquid::set('INCLUDE_PREFIX', ''); + Liquid::set('INCLUDE_SUFFIX', 'tpl'); + + $template = new Template(dirname(__DIR__).DIRECTORY_SEPARATOR.self::TEMPLATES_DIR); + $template->parse("{% include 'mypartial' %}"); + // template include inserts a new line + $this->assertEquals("test content\n", $template->render()); + } + + public function testIncludePassPlainValue() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'inner' => "[{{ other }}]", + 'example' => "({% include 'inner' other:var %})", + ))); + + $template->parse("{% include 'example' %}"); + + $output = $template->render(array("var" => "test")); + $this->assertEquals("([test])", $output); + } + + /** + */ + public function testIncludePassArrayWithoutIndex() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'inner' => "[{{ other }}]", + 'example' => "({% include 'inner' other:var %})", + ))); + + $template->parse("{% include 'example' %}"); + + $output = $template->render(array("var" => array("a", "b", "c"))); + $expectedOutput = htmlspecialchars(print_r(array("a", "b", "c"), true)); + $this->assertEquals("([$expectedOutput])", $output); + } + + public function testIncludePassArrayWithIndex() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'inner' => "[{{ other[0] }}]", + 'example' => "({% include 'inner' other:var %})", + ))); + + $template->parse("{% include 'example' %}"); + + $output = $template->render(array("var" => array("a", "b", "c"))); + $this->assertEquals("([a])", $output); + } + + public function testIncludePassObjectValue() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'inner' => "[{{ other.a }}]", + 'example' => "({% include 'inner' other:var %})", + ))); + + $template->parse("{% include 'example' %}"); + + $output = $template->render(array("var" => (object) array('a' => 'b'))); + $this->assertEquals("([b])", $output); + } + + public function testIncludeWithoutQuotes() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'inner' => "[{{ other }}]", + 'example' => "{%include inner other:var %} ({{var}})", + ))); + + $template->parse("{% include example other:var %}"); + + $output = $template->render(array("var" => "test")); + $this->assertEquals("[test] (test)", $output); + + $template->parse("{% include inner %}"); + + $output = $template->render(array("other" => "test")); + $this->assertEquals("[test]", $output); + } + + /** + * Render calls in this test shall give same results with cache enabled + */ + public function testIncludeWithExtends() + { + $template = new Template(); + $template->setFileSystem(TestFileSystem::fromArray(array( + 'outer' => "{% block content %}Content for outer block{% endblock %} / {% block footer %}Footer for outer block{% endblock %}", + 'content' => 'Content for {{ name }} block', + 'middle' => "{% extends 'outer' %}{% block content %}{% include 'content' name:'middle' %}{% endblock %}", + 'main' => "Main: {% extends 'middle' %}{% block footer %}{% include 'footer-top' hello:message %}{% endblock %}", + 'footer-bottom' => "{{ name }} with message: {{ hello }}", + 'footer-top' => "Footer top and {% include 'footer-bottom' name:'bottom' %}", + ))); + + $template->setCache(new Local()); + + foreach (array("Before cache", "With cache") as $type) { + $this->assertEquals("Block with message: $type", $template->parseFile('footer-bottom')->render(array("name" => "Block", "hello" => $type))); + $this->assertEquals('Content for middle block / Footer for outer block', $template->parseFile('middle')->render()); + $this->assertEquals("Main: Content for middle block / Footer top and bottom with message: $type", $template->parseFile('main')->render(array("message" => $type))); + + $template->parse("{% include 'main' hello:message %}"); + $output = $template->render(array("message" => $type)); + $this->assertEquals("Main: Content for middle block / Footer top and bottom with message: $type", $output); + } + + $template->setCache(null); + } + + public function testCacheDiscardedIfFileChanges() + { + $template = new Template(); + $template->setCache(new Local()); + + $content = "[{{ name }}]"; + $template->setFileSystem(TestFileSystem::fromArray(array( + 'example' => &$content, + ))); + + $template->parse("{% include 'example' %}"); + $output = $template->render(array("name" => "Example")); + $this->assertEquals("[Example]", $output); + + $content = "<{{ name }}>"; + $template->parse("{% include 'example' %}"); + $output = $template->render(array("name" => "Example")); + $this->assertEquals("", $output); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncrementTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncrementTest.php new file mode 100644 index 0000000..4a49bde --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagIncrementTest.php @@ -0,0 +1,44 @@ +expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% increment %}'); + } + + /** + * Undefined variable will become 0 + */ + public function testIncrementNonExistingVariable() + { + $this->assertTemplateResult(0, '{% increment no_such_var %}{{ no_such_var }}'); + } + + public function testIncrementVariable() + { + $this->assertTemplateResult(42, '{% increment var %}{{ var }}', array('var' => 41)); + } + + public function testIncrementNestedVariable() + { + $this->assertTemplateResult(42, '{% for var in vars %}{% increment var %}{{ var }}{% endfor %}', array('vars' => array(41))); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagPaginateTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagPaginateTest.php new file mode 100644 index 0000000..30c0311 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagPaginateTest.php @@ -0,0 +1,210 @@ +assertTemplateResult($expected, $text, array('products' => array(array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 5)))); + } + + public function testVariables() + { + $text = " {% paginate search.products by 3 %}{{ paginate.page_size }} {{ paginate.current_page }} {{ paginate.current_offset }} {{ paginate.pages }} {{ paginate.items }} {{ paginate.next.url }}{% endpaginate %}"; + $expected = " 3 1 0 2 5 http://?page=2"; + $this->assertTemplateResult($expected, $text, array('search' => array('products' => new \ArrayIterator(array(array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 5)))))); + } + + public function testNextPage() + { + $text = '{% paginate products by 1 %}{% for product in products %} {{ product.id }} {% endfor %}{{ paginate.next.title }}{% endpaginate %}'; + $expected = ' 2 Next'; + $this->assertTemplateResult($expected, $text, array('HTTP_HOST' => 'example.com', 'REQUEST_URI' => '/products', 'HTTPS' => 'on', 'page' => 2, 'products' => array(array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 5)))); + } + + /** + */ + public function testSyntaxErrorCase() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{% paginate products %}{% endpaginate %}'); + } + + /** + */ + public function testNoCollection() + { + $this->expectException(\Liquid\Exception\RenderException::class); + $this->expectExceptionMessage('Missing collection'); + + $this->assertTemplateResult('', '{% paginate products by 1 %}{% for product in products %}{{ product.id }}{% endfor %}{% endpaginate %}'); + } + + const PAGINATION_ASSIGNS = array( + 'HTTP_HOST' => 'example.com', + 'HTTPS' => 'on', + 'page' => 1, + 'articles' => array(array('title' => 1), array('title' => 2), array('title' => 3)), + ); + + public function testPaginationForRepeatedCalls() + { + $text = '{% for article in articles %}{{ article.title }},{% endfor %}'; + $expected = '1,2,3,'; + $this->assertTemplateResult($expected, $text, self::PAGINATION_ASSIGNS); + + $text = '{% paginate articles by 2 %}{% for article in articles %}{{ article.title }},{% endfor %}{% endpaginate %} '.$text; + $expected = '1,2, 1,2,3,'; + $this->assertTemplateResult($expected, $text, self::PAGINATION_ASSIGNS); + } + + public function testPaginationDoesntIncludePreviousIfFirst() + { + $assigns = self::PAGINATION_ASSIGNS; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '1 , Next,https://example.com?page=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateDoesntIncludeNextIfLast() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['page'] = 3; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '3 Previous,https://example.com?page=2 ,'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateUsingDifferentRequestParameterName() + { + Liquid::set('PAGINATION_REQUEST_KEY', 'pagina'); + + $assigns = self::PAGINATION_ASSIGNS; + $assigns['page'] = 2; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '2 Previous,https://example.com?pagina=1 Next,https://example.com?pagina=3'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateUsingDifferentContextParameter() + { + Liquid::set('PAGINATION_CONTEXT_KEY', 'the_current_page'); + + $assigns = self::PAGINATION_ASSIGNS; + $assigns['the_current_page'] = 2; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '2 Previous,https://example.com?page=1 Next,https://example.com?page=3'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateUrlGenerationPreservesParams() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['REQUEST_URI'] = '/testfile.php?someparam=1'; + + $text = '{% paginate articles by 1 %}{{ paginate.next.url }}{% endpaginate %}'; + $expected = 'https://example.com/testfile.php?someparam=1&page=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateUrlGenerationReplacesPageKey() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['REQUEST_URI'] = '/testfile.php?someparam=1&page=1'; + + $text = '{% paginate articles by 1 %}{{ paginate.next.url }}{% endpaginate %}'; + $expected = 'https://example.com/testfile.php?someparam=1&page=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateUrlGenerationRespectsPageParameterKey() + { + Liquid::set('PAGINATION_REQUEST_KEY', 'pagina'); + + $assigns = self::PAGINATION_ASSIGNS; + $assigns['REQUEST_URI'] = '/testfile.php?someparam=1&page=hello&pagina=1'; + + $text = '{% paginate articles by 1 %}{{ paginate.next.url }}{% endpaginate %}'; + $expected = 'https://example.com/testfile.php?someparam=1&page=hello&pagina=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateUrlGenerationWithoutHTTPS() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['REQUEST_URI'] = '/'; + $assigns['HTTPS'] = ''; + + $text = '{% paginate articles by 1 %}{{ paginate.next.url }}{% endpaginate %}'; + $expected = 'http://example.com/?page=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateDoesntIncludeNextIfAfterLast() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['page'] = 42; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '3 Previous,https://example.com?page=2 ,'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateDoesntIncludePreviousIfBeforeFirst() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['page'] = 0; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '1 , Next,https://example.com?page=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } + + public function testPaginateIgnoresNonNumbers() + { + $assigns = self::PAGINATION_ASSIGNS; + $assigns['page'] = 'foo'; + + $text = '{% paginate articles by 1 %}{% for article in articles %}{{article.title}}{% endfor %} {{paginate.previous.title}},{{paginate.previous.url}} {{paginate.next.title}},{{paginate.next.url}}{% endpaginate %}'; + $expected = '1 , Next,https://example.com?page=2'; + $this->assertTemplateResult($expected, $text, $assigns); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagRawTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagRawTest.php new file mode 100644 index 0000000..21a90d9 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagRawTest.php @@ -0,0 +1,28 @@ +assertTemplateResult( + '{{ y | plus: x }}{% if %} is equal to 11.', + '{% raw %}{{ y | plus: x }}{% if %}{% endraw %} is equal to 11.', + array('x' => 5, 'y' => 6) + ); + + $this->assertTemplateResult('', '{% raw %}{% endraw %}'); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagTablerowTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagTablerowTest.php new file mode 100644 index 0000000..c5e2b18 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagTablerowTest.php @@ -0,0 +1,66 @@ +assertTemplateResult( + ''."\n".' yo yo yo yo '."\n", + '{% tablerow item in array %} yo {% endtablerow %}', + array('array' => array(1, 2, 3, 4)) + ); + + $this->assertTemplateResult( + ' + item 1 + + item 2 +', + '{% tablerow item in array cols:1 %} item {{ item }} {% endtablerow %}', + array('array' => array(1, 2)) + ); + + $this->assertTemplateResult( + ''."\n".' 2 3 '."\n", + '{% tablerow item in array limit:2 offset:1 %} {{ item }} {% endtablerow %}', + array('array' => array(1, 2, 3, 4)) + ); + + $this->assertTemplateResult( + ''."\n".' yo yo '."\n", + '{%tablerow item in array%} yo {%endtablerow%}', + array('array' => new \ArrayIterator(array(1, 2))) + ); + } + + /** + */ + public function testInvalidSyntax() + { + $this->expectException(\Liquid\Exception\ParseException::class); + + $this->assertTemplateResult('', '{%tablerow item array%} yo {%endtablerow%}', array()); + } + + /** + */ + public function testNotArray() + { + $this->expectException(\Liquid\Exception\RenderException::class); + + $this->assertTemplateResult('', '{%tablerow item in array%} yo {%endtablerow%}', array('array' => true)); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/Tag/TagUnlessTest.php b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagUnlessTest.php new file mode 100644 index 0000000..1f034d9 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/Tag/TagUnlessTest.php @@ -0,0 +1,45 @@ +assertTemplateResult($expected, $text); + } + + public function testTrueNotEqlTrue() + { + $text = " {% unless true != true %} true {% else %} false {% endunless %} "; + $expected = " true "; + $this->assertTemplateResult($expected, $text); + } + + public function testWithVariable() + { + $text = " {% unless variable %} true {% else %} false {% endunless %} "; + $expected = " false "; + $this->assertTemplateResult($expected, $text, array('variable' => true)); + } + + public function testForAndUnless() + { + $this->assertTemplateResult('0=>yay 0=>yay 1=> ', '{% for item in array %}{{ forloop.last }}=>{% unless forloop.last %}yay{% endunless %} {% endfor %}', array('array' => array(1, 2, 3))); + $this->assertTemplateResult('1=> 0=>yay 0=>yay ', '{% for item in array %}{{ forloop.first }}=>{% unless forloop.first %}yay{% endunless %} {% endfor %}', array('array' => array(1, 2, 3))); + $this->assertTemplateResult('0=> 0=> 1=>yay ', '{% for item in array %}{{ forloop.last }}=>{% if forloop.last %}yay{% endif %} {% endfor %}', array('array' => array(1, 2, 3))); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/TemplateTest.php b/package/vendor/liquid/liquid/tests/Liquid/TemplateTest.php new file mode 100644 index 0000000..2f372ca --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/TemplateTest.php @@ -0,0 +1,169 @@ +cacheDir = __DIR__ . DIRECTORY_SEPARATOR . self::CACHE_DIR; + } + + protected function tearDown(): void + { + parent::tearDown(); + + // Remove tmp cache files + array_map('unlink', glob($this->cacheDir . DIRECTORY_SEPARATOR . '*')); + } + + /** + */ + public function testSetCacheInvalidKey() + { + $this->expectException(\Liquid\LiquidException::class); + + $template = new Template(); + $template->setCache(array()); + } + + /** + */ + public function testSetCacheInvalidClass() + { + $this->expectException(\Liquid\LiquidException::class); + + $template = new Template(); + $template->setCache(array('cache' => 'no_such_class')); + } + + public function testSetCacheThroughArray() + { + $template = new Template(); + $template->setCache(array('cache' => 'file', 'cache_dir' => $this->cacheDir)); + $this->assertInstanceOf(\Liquid\Cache\File::class, $template::getCache()); + } + + public function testSetCacheThroughCacheObject() + { + $template = new Template(); + $cache = new Cache\File(array('cache_dir' => $this->cacheDir)); + $template->setCache($cache); + $this->assertEquals($cache, $template::getCache()); + } + + public function testTokenizeStrings() + { + $this->assertEquals(array(' '), Template::tokenize(' ')); + $this->assertEquals(array('hello world'), Template::tokenize('hello world')); + } + + public function testTokenizeVariables() + { + $this->assertEquals(array('{{funk}}'), Template::tokenize('{{funk}}')); + $this->assertEquals(array(' ', '{{funk}}', ' '), Template::tokenize(' {{funk}} ')); + $this->assertEquals(array(' ', '{{funk}}', ' ', '{{so}}', ' ', '{{brother}}', ' '), Template::tokenize(' {{funk}} {{so}} {{brother}} ')); + $this->assertEquals(array(' ', '{{ funk }}', ' '), Template::tokenize(' {{ funk }} ')); + } + + public function testTokenizeBlocks() + { + $this->assertEquals(array('{%comment%}'), Template::tokenize('{%comment%}')); + $this->assertEquals(array(' ', '{%comment%}', ' '), Template::tokenize(' {%comment%} ')); + $this->assertEquals(array(' ', '{%comment%}', ' ', '{%endcomment%}', ' '), Template::tokenize(' {%comment%} {%endcomment%} ')); + $this->assertEquals(array(' ', '{% comment %}', ' ', '{% endcomment %}', ' '), Template::tokenize(" {% comment %} {% endcomment %} ")); + } + + public function testBlackspace() + { + $template = new Template(); + $template->parse(' '); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertEquals(array(' '), $nodelist); + } + + public function testVariableBeginning() + { + $template = new Template(); + $template->parse('{{funk}} '); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertCount(2, $nodelist); + $this->assertInstanceOf(\Liquid\Variable::class, $nodelist[0]); + $this->assertIsString($nodelist[1]); + } + + public function testVariableEnd() + { + $template = new Template(); + $template->parse(' {{funk}}'); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertCount(2, $nodelist); + $this->assertIsString($nodelist[0]); + $this->assertInstanceOf(\Liquid\Variable::class, $nodelist[1]); + } + + public function testVariableMiddle() + { + $template = new Template(); + $template->parse(' {{funk}} '); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertCount(3, $nodelist); + $this->assertIsString($nodelist[0]); + $this->assertInstanceOf(\Liquid\Variable::class, $nodelist[1]); + $this->assertIsString($nodelist[2]); + } + + public function testVariableManyEmbeddedFragments() + { + $template = new Template(); + $template->parse(' {{funk}} {{soul}} {{brother}} '); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertCount(7, $nodelist); + $this->assertIsString($nodelist[0]); + $this->assertInstanceOf(\Liquid\Variable::class, $nodelist[1]); + $this->assertIsString($nodelist[2]); + $this->assertInstanceOf(\Liquid\Variable::class, $nodelist[3]); + $this->assertIsString($nodelist[4]); + $this->assertInstanceOf(\Liquid\Variable::class, $nodelist[5]); + $this->assertIsString($nodelist[6]); + } + + public function testWithBlock() + { + $template = new Template(); + $template->parse(' {% comment %} {% endcomment %} '); + + $nodelist = $template->getRoot()->getNodelist(); + + $this->assertCount(3, $nodelist); + $this->assertIsString($nodelist[0]); + $this->assertInstanceOf(\Liquid\Tag\TagComment::class, $nodelist[1]); + $this->assertIsString($nodelist[2]); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/TestCase.php b/package/vendor/liquid/liquid/tests/Liquid/TestCase.php new file mode 100644 index 0000000..4cbb1a9 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/TestCase.php @@ -0,0 +1,63 @@ + 'field_exists', + 'GET_PROPERTY_METHOD' => 'get', + 'FILTER_SEPARATOR' => '\|', + 'ARGUMENT_SEPARATOR' => ',', + 'FILTER_ARGUMENT_SEPARATOR' => ':', + 'VARIABLE_ATTRIBUTE_SEPARATOR' => '.', + 'INCLUDE_ALLOW_EXT' => false, + 'INCLUDE_SUFFIX' => 'liquid', + 'INCLUDE_PREFIX' => '_', + 'VARIABLE_START' => '{{', + 'VARIABLE_END' => '}}', + 'VARIABLE_NAME' => '[a-zA-Z_][a-zA-Z0-9_.-]*', + 'EXPOSE_SERVER' => false, + ); + + foreach ($defaultConfig as $configKey => $configValue) { + Liquid::set($configKey, $configValue); + } + + Template::setCache(null); + } + + /** + * @param mixed $expected + * @param string $templateString + * @param array $assigns + * @param string $message + */ + public function assertTemplateResult($expected, $templateString, array $assigns = array(), $message = "%s") + { + $template = new Template(); + $template->parse($templateString); + + $this->assertEquals($expected, $template->render($assigns, $this->filters), $message); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/TestFileSystem.php b/package/vendor/liquid/liquid/tests/Liquid/TestFileSystem.php new file mode 100644 index 0000000..e38bba5 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/TestFileSystem.php @@ -0,0 +1,29 @@ +parse($source); + $template->setTickFunction(function (Context $context) use (&$ticks) { + $ticks++; + }); + + $template->render(); + + $this->assertGreaterThanOrEqual($min, $ticks); + $this->assertLessThanOrEqual($max, $ticks); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/VariableResolutionTest.php b/package/vendor/liquid/liquid/tests/Liquid/VariableResolutionTest.php new file mode 100644 index 0000000..28a3f07 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/VariableResolutionTest.php @@ -0,0 +1,63 @@ +parse("{{test}}"); + $this->assertEquals('worked', $template->render(array('test' => 'worked'))); + } + + public function testSimpleWithWhitespaces() + { + $template = new Template(); + + $template->parse(' {{ test }} '); + $this->assertEquals(' worked ', $template->render(array('test' => 'worked'))); + $this->assertEquals(' worked wonderfully ', $template->render(array('test' => 'worked wonderfully'))); + } + + public function testIgnoreUnknown() + { + $template = new Template(); + + $template->parse('{{ test }}'); + $this->assertEquals('', $template->render()); + } + + public function testLineBreak() + { + $template = new Template(); + + $template->parse("{{ test |\n strip_html }}"); + $this->assertEquals('worked', $template->render(array('test' => 'worked'))); + } + + public function testArrayScoping() + { + $template = new Template(); + + $template->parse('{{ test.test }}'); + $this->assertEquals('worked', $template->render(array('test' => array('test' => 'worked')))); + } + + public function testVariableArrayIndices() + { + $template = new Template(); + + $template->parse("{% assign days = 'Mon,Tue,Wed,Thu,Fri,Sat,Sun' | split: ',' %}{% for i in (0..6) %}{{ days[i] }} {% endfor %}"); + $this->assertEquals('Mon Tue Wed Thu Fri Sat Sun ', $template->render()); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/VariableTest.php b/package/vendor/liquid/liquid/tests/Liquid/VariableTest.php new file mode 100644 index 0000000..697f399 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/VariableTest.php @@ -0,0 +1,122 @@ +assertEquals('hello', $var->getName()); + } + + public function testFilters() + { + $var = new Variable('hello | textileze'); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('textileze', array())), $var->getFilters()); + + $var = new Variable('hello | textileze | paragraph'); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('textileze', array()), array('paragraph', array())), $var->getFilters()); + + $var = new Variable(" hello | strftime: '%Y'"); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('strftime', array("'%Y'"))), $var->getFilters()); + + $var = new Variable(" 'typo' | link_to: 'Typo', true "); + $this->assertEquals("'typo'", $var->getName()); + $this->assertEquals(array(array('link_to', array("'Typo'", "true"))), $var->getFilters()); + + $var = new Variable(" 'typo' | link_to: 'Typo', false "); + $this->assertEquals("'typo'", $var->getName()); + $this->assertEquals(array(array('link_to', array("'Typo'", "false"))), $var->getFilters()); + + $var = new Variable(" 'foo' | repeat: 3 "); + $this->assertEquals("'foo'", $var->getName()); + $this->assertEquals(array(array('repeat', array("3"))), $var->getFilters()); + + $var = new Variable(" 'foo' | repeat: 3, 3"); + $this->assertEquals("'foo'", $var->getName()); + $this->assertEquals(array(array('repeat', array("3", "3"))), $var->getFilters()); + + $var = new Variable(" 'foo' | repeat: 3, 3, 3 "); + $this->assertEquals("'foo'", $var->getName()); + $this->assertEquals(array(array('repeat', array("3", "3", "3"))), $var->getFilters()); + + $var = new Variable(" hello | strftime: '%Y, okay?'"); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('strftime', array("'%Y, okay?'"))), $var->getFilters()); + + $var = new Variable(" hello | things: \"%Y, okay?\", 'the other one'"); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('things', array('"%Y, okay?"', "'the other one'"))), $var->getFilters()); + + $var = new Variable(" product.featured_image | img_url: '450x450', crop: 'center', scale: 2 "); + $this->assertEquals("product.featured_image", $var->getName()); + $this->assertEquals(array(array('img_url', array("'450x450'", array("crop" => "'center'", "scale" => "2")))), $var->getFilters()); + } + + public function testFiltersWithoutWhitespace() + { + $var = new Variable('hello | textileze | paragraph'); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('textileze', array()), array('paragraph', array())), $var->getFilters()); + + $var = new Variable('hello|textileze|paragraph'); + $this->assertEquals('hello', $var->getName()); + $this->assertEquals(array(array('textileze', array()), array('paragraph', array())), $var->getFilters()); + } + + public function testSymbol() + { + $var = new Variable("http://disney.com/logo.gif | image: 'med' "); + $this->assertEquals('http://disney.com/logo.gif', $var->getName()); + $this->assertEquals(array(array('image', array("'med'"))), $var->getFilters()); + } + + public function testStringSingleQuoted() + { + $var = new Variable(' "hello" '); + $this->assertEquals('"hello"', $var->getName()); + } + + public function testStringDoubleQuoted() + { + $var = new Variable(" 'hello' "); + $this->assertEquals("'hello'", $var->getName()); + } + + public function testInteger() + { + $var = new Variable(' 1000 '); + $this->assertEquals('1000', $var->getName()); + } + + public function testFloat() + { + $var = new Variable(' 1000.01 '); + $this->assertEquals('1000.01', $var->getName()); + } + + public function testStringWithSpecialChars() + { + $var = new Variable("'hello! $!@.;\"ddasd\" ' "); + $this->assertEquals("'hello! $!@.;\"ddasd\" '", $var->getName()); + } + + public function testStringDot() + { + $var = new Variable(" test.test "); + $this->assertEquals('test.test', $var->getName()); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/VirtualFileSystemTest.php b/package/vendor/liquid/liquid/tests/Liquid/VirtualFileSystemTest.php new file mode 100644 index 0000000..5b096ab --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/VirtualFileSystemTest.php @@ -0,0 +1,81 @@ +expectException(\Liquid\LiquidException::class); + $this->expectExceptionMessage('Not a callback'); + + new Virtual(''); + } + + public function testReadTemplateFile() + { + $fs = new Virtual(function ($templatePath) { + if ($templatePath == 'foo') { + return "Contents of foo"; + } + + if ($templatePath == 'bar') { + return "Bar"; + } + + return ''; + }); + + $this->assertEquals('Contents of foo', $fs->readTemplateFile('foo')); + $this->assertEquals('Bar', $fs->readTemplateFile('bar')); + $this->assertEquals('', $fs->readTemplateFile('nothing')); + } + + /** + */ + public function testWithFileCache() + { + $this->expectException(\Liquid\LiquidException::class); + $this->expectExceptionMessage('cannot be used with a serializing cache'); + + $template = new Template(); + $template->setFileSystem(new Virtual(function ($templatePath) { + return ''; + })); + $template->setCache(new File(array( + 'cache_dir' => __DIR__, + ))); + $template->parse("Hello"); + } + + public function virtualFileSystemCallback($templatePath) + { + return 'OK'; + } + + public function testWithRegularCallback() + { + $template = new Template(); + $template->setFileSystem(new Virtual(array($this, 'virtualFileSystemCallback'), true)); + $template->setCache(new File(array( + 'cache_dir' => __DIR__.'/cache_dir/', + ))); + + $template->parse("Test: {% include 'hello' %}"); + $this->assertEquals('Test: OK', $template->render()); + } +} diff --git a/package/vendor/liquid/liquid/tests/Liquid/cache_dir/.gitignore b/package/vendor/liquid/liquid/tests/Liquid/cache_dir/.gitignore new file mode 100644 index 0000000..5e7d273 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/cache_dir/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.html new file mode 100644 index 0000000..bc8b413 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.html @@ -0,0 +1,20 @@ + + +test 0 == test 0 + + + +test 1 == test 1 + + + +test 2 == test 2 + + + + + +test 3 == test 3 (inside an if) + + +test 3 == test 3 (outside of an if) \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.liquid new file mode 100644 index 0000000..7d2bd24 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.liquid @@ -0,0 +1,24 @@ +{% assign my_variable = 'test 0' %} + +{{ my_variable }} == test 0 + +{% capture my_variable %}test 1{% endcapture %} + +{{ my_variable }} == test 1 + +{% capture my_variable %}test 2{% endcapture %} + +{{ my_variable }} == test 2 + + +{% if true %} +{% assign my_variable = 'test 0' %} +{% capture my_variable %}test 3{% endcapture %} +{{ my_variable }} == test 3 (inside an if) +{% else %} +{% capture my_variable %}test 4{% endcapture %} +{{ my_variable }} + +{% endif %} + +{{ my_variable }} == test 3 (outside of an if) \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.php new file mode 100644 index 0000000..9890e4e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign-capture.php @@ -0,0 +1,12 @@ +' %} +{{ descriptions[0] }} +{{ descriptions[1] }} diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign.php new file mode 100644 index 0000000..b488a8a --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/assign.php @@ -0,0 +1,16 @@ + array( + 'description' => 'FirstSecond', + ), +); diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.html new file mode 100644 index 0000000..5f23814 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.html @@ -0,0 +1,22 @@ + + + hit 1 + + + + hit 2 or 3 + + + + ... else ... + + + + ... else ... + + + + ... else ... + + + diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.liquid new file mode 100644 index 0000000..1fcbcd4 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.liquid @@ -0,0 +1,11 @@ +{% for i in (1..max) %} + {% case i %} + {% when 1 %} + hit 1 + {% when 2 or 3 %} + hit 2 or 3 + {% else %} + ... else ... + {% endcase %} +{% endfor %} + diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.php new file mode 100644 index 0000000..c0ffa72 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/case.php @@ -0,0 +1,14 @@ + 5, +); diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.html new file mode 100644 index 0000000..9bdb7c0 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.html @@ -0,0 +1 @@ +We made 1 million dollars this year \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.liquid new file mode 100644 index 0000000..83f8d6e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.liquid @@ -0,0 +1 @@ +We made 1 million dollars {% comment %} in losses {% endcomment %} this year \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.php new file mode 100644 index 0000000..a1ea689 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/comment.php @@ -0,0 +1,12 @@ + 5 +2 #=> 2 +0 #=> 0, not as is in the docs +2 #=> 2 +0 #=> 'foofoofoofoo' +20 #=> 20 +4 #=> 4 +4 #=> 4 +5 #=> 5 +<div>Read more</div> &rarr; +<div>Read more</div> → +Read more → +
Read more
→ +a%3Db%26c%3Dd +a=&b #=> 'a=&b' +Foo +[ Foo] +[Foo ] +OK +z +z, g, n +n +g-n-z +n-g-z +Foo
+Bar +FooBar +foobar +barbar #=> 'barbar' +foobar #=> 'foobar' +barbar #=> 'barbar' +bar #=> 'bar' +test... #=> 'test...' +Foo bar... #=> 'Foo bar...' +Foo #=> 'Foo' +Foo bar #=> 'Foo bar' + + + + + BazBar + + FooBar + diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.liquid new file mode 100644 index 0000000..7307cab --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.liquid @@ -0,0 +1,50 @@ +Hello {{ 'tobi' | upcase }} +Hello tobi has {{ 'tobi' | size }} letters! +Array has {{ array | size }} elements. +Second element is: {{ array | slice: 2 | first }} +{{ '*tobi*' | textilize | upcase }} +{{ '1971-01-01' | date: "%Y %h" }} +{{ 'foo' | append:'bar' }} +{{ 'tobi' | capitalize }} +{{ 'Tobi' | downcase }} +{{ 10 | divided_by:2 }} #=> 5 +{{ 4 | minus:2 }} #=> 2 +{{ 'a' | plus:'b' }} #=> 0, not as is in the docs +{{ 1 | plus:1 }} #=> 2 +{{ 'foo' | times:4 }} #=> 'foofoofoofoo' +{{ 5 | times:4 }} #=> 20 +{{ 4.3 | round }} #=> 4 +{{ 4.8 | floor }} #=> 4 +{{ 4.3 | ceil }} #=> 5 +{{ '
Read more
→' | escape }} +{{ '
Read more
→' | escape_once }} +{{ '
Read more
→' | strip_html }} +{{ '
Read more
→' | raw }} +{{ 'a=b&c=d' | url_encode }} +{{ 'a%3D%26b' | url_decode }} #=> 'a=&b' +{{ ' Foo ' | strip }} +[{{ ' Foo ' | rstrip }}] +[{{ ' Foo ' | lstrip }}] +{{ '' | default: "OK" }} +{{ array | first }} +{{ array | join:', ' }} +{{ array | last }} +{{ array | sort | join:'-' }} +{{ array | reverse | join:'-' }} +{{ foobar | newline_to_br }} +{{ foobar | strip_newlines }} +{{ 'bar' | prepend:'foo' }} +{{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar' +{{ 'barbar' | replace_first:'bar','foo' }} #=> 'foobar' +{{ 'foobarfoobar' | remove:'foo' }} #=> 'barbar' +{{ 'barbar' | remove_first:'bar' }} #=> 'bar' +{{ 'tests' | truncate:4 }} #=> 'test...' +{{ 'Foo bar bar' | truncatewords:2 }} #=> 'Foo bar...' +{{ 'Foo bar bar' | split: " " | first }} #=> 'Foo' +{{ 'Foo bar bar' | split: " " | uniq | join: " " }} #=> 'Foo bar' + + +{% assign titles = posts | sort: "id" | map: "title" %} +{% for title in titles %} + {{ title }} +{% endfor %} diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.php new file mode 100644 index 0000000..00b6a92 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/filters.php @@ -0,0 +1,19 @@ + array('z', 'g', 'n'), + 'foobar' => "Foo\nBar", + 'posts' => array( + array('id' => 2, 'title'=> 'FooBar', 'tags' => array('foo', 'bar')), + array('id' => 1, 'title'=> 'BazBar', 'tags' => array('baz', 'bar')), + ), +); diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.html new file mode 100644 index 0000000..1852f6c --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.html @@ -0,0 +1,104 @@ +Helper variables: + + 1 => current item + 5 => length of the entire for loop + 1 => index of the current iteration + 0 => index of the current iteration (zero based) + 5 => how many items are still left? + 4 => how many items are still left? (zero based) + 1 => is this the first iteration? + 0 => is this the last iternation? + + 2 => current item + 5 => length of the entire for loop + 2 => index of the current iteration + 1 => index of the current iteration (zero based) + 4 => how many items are still left? + 3 => how many items are still left? (zero based) + 0 => is this the first iteration? + 0 => is this the last iternation? + + 3 => current item + 5 => length of the entire for loop + 3 => index of the current iteration + 2 => index of the current iteration (zero based) + 3 => how many items are still left? + 2 => how many items are still left? (zero based) + 0 => is this the first iteration? + 0 => is this the last iternation? + + 4 => current item + 5 => length of the entire for loop + 4 => index of the current iteration + 3 => index of the current iteration (zero based) + 2 => how many items are still left? + 1 => how many items are still left? (zero based) + 0 => is this the first iteration? + 0 => is this the last iternation? + + 5 => current item + 5 => length of the entire for loop + 5 => index of the current iteration + 4 => index of the current iteration (zero based) + 1 => how many items are still left? + 0 => how many items are still left? (zero based) + 0 => is this the first iteration? + 1 => is this the last iternation? + + +Limit and offset: + + 3 + + 4 + + +Reversing the loop: + + 1 + + 2 + + 3 + + 4 + + 5 + + +Range loop: + + 1 + + 2 + + 3 + + 4 + + 5 + + +Regular loop: + + 1 + + 2 + + 3 + + +Within a pagination: + + 1 + + 2 + + +Should not be affected by a pagination: + + 1 + + 2 + + 3 diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.liquid new file mode 100644 index 0000000..487b7e0 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.liquid @@ -0,0 +1,41 @@ +Helper variables: +{% for item in array %} + {{ item }} => current item + {{ forloop.length }} => length of the entire for loop + {{ forloop.index }} => index of the current iteration + {{ forloop.index0 }} => index of the current iteration (zero based) + {{ forloop.rindex }} => how many items are still left? + {{ forloop.rindex0 }} => how many items are still left? (zero based) + {{ forloop.first }} => is this the first iteration? + {{ forloop.last }} => is this the last iternation? +{% endfor %} + +Limit and offset: +{% for item in array limit:2 offset:2 %} + {{ item }} +{% endfor %} + +Reversing the loop: +{% for item in array reversed %} + {{ item }} +{% endfor %} + +Range loop: +{% for i in (1..item.quantity) %} + {{ i }} +{% endfor %} + +Regular loop: +{% for article in articles %} + {{ article.title }} +{% endfor %} + +Within a pagination: +{% paginate articles by 2 %}{% for article in articles %} + {{ article.title }} +{% endfor %}{% endpaginate %} + +Should not be affected by a pagination: +{% for article in articles %} + {{ article.title }} +{% endfor %} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.php new file mode 100644 index 0000000..0f2246e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/for.php @@ -0,0 +1,22 @@ + range(1, 5), + 'item' => array( + 'quantity' => 5, + ), + 'articles' => array( + array('title' => 1), + array('title' => 2), + array('title' => 3), + ), +); diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.html new file mode 100644 index 0000000..686b9a0 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.html @@ -0,0 +1,2 @@ +We made 1 million dollars this year +We made 1 million dollars this year \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.liquid new file mode 100644 index 0000000..482422e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.liquid @@ -0,0 +1,2 @@ +{% include comment.liquid %} +{% include comment.liquid %} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.php new file mode 100644 index 0000000..a1ea689 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/include.php @@ -0,0 +1,12 @@ + call_user_func(function () { + yield 'a'; + yield 'b'; + yield 'c'; + }), +); diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.html new file mode 100644 index 0000000..6de8f81 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.html @@ -0,0 +1,4 @@ +Hello Harald +Hello DELACAP +Hello Superuser +Hello HARALD \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.liquid new file mode 100644 index 0000000..1cad24e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.liquid @@ -0,0 +1,4 @@ +Hello {{ name }} +Hello {{ company }} +Hello {{ user.name }} +Hello {{ 'Harald' | upcase }} \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.php new file mode 100644 index 0000000..ed4bf72 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/output.php @@ -0,0 +1,18 @@ + 'Harald', + 'company' => 'DELACAP', + 'user' => array( + 'name' => 'Superuser' + ) +); diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.html b/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.html new file mode 100644 index 0000000..8629bdf --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.html @@ -0,0 +1,7 @@ +-- + + + Wow, + John G. Chalmers-Smith, you have a long name! + +--Wow,John G. Chalmers-Smith, you have a long name!-- \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.liquid b/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.liquid new file mode 100644 index 0000000..f53ae1e --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.liquid @@ -0,0 +1,17 @@ +-- +{% assign username = "John G. Chalmers-Smith" %} +{% if username and username.size > 10 %} + Wow, + {{ username }}, you have a long name! +{% else %} + Hello there! +{% endif %} +-- +{%- assign username = "John G. Chalmers-Smith" -%} +{%- if username and username.size > 10 -%} + Wow, + {{- username -}}, you have a long name! +{%- else -%} + Hello there! +{%- endif -%} +-- \ No newline at end of file diff --git a/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.php b/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.php new file mode 100644 index 0000000..a1ea689 --- /dev/null +++ b/package/vendor/liquid/liquid/tests/Liquid/fixtures/whitespace-control.php @@ -0,0 +1,12 @@ +2&&(l.children=arguments.length>3?ht.call(arguments,2):t),typeof n=="function"&&n.defaultProps!=null)for(a in n.defaultProps)l[a]==null&&(l[a]=n.defaultProps[a]);return lt(n,l,i,r,null)}function lt(n,e,t,i,r){var a={type:n,props:e,key:t,ref:i,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:r??++Un,__i:-1,__u:0};return r==null&&A.vnode!=null&&A.vnode(a),a}function ar(){return{current:null}}function Z(n){return n.children}function fe(n,e){this.props=n,this.context=e}function Ze(n,e){if(e==null)return n.__?Ze(n.__,n.__i+1):null;for(var t;eo&&Le.sort(Kn),n=Le.shift(),o=Le.length,n.__d&&(t=void 0,r=(i=(e=n).__v).__e,a=[],l=[],e.__P&&((t=ue({},i)).__v=i.__v+1,A.vnode&&A.vnode(t),Oi(e.__P,t,i,e.__n,e.__P.namespaceURI,32&i.__u?[r]:null,a,r??Ze(i),!!(32&i.__u),l),t.__v=i.__v,t.__.__k[t.__i]=t,ss(a,t,l),t.__e!=r&&ts(t)));zt.__r=0}function is(n,e,t,i,r,a,l,o,c,d,h){var u,m,p,f,v,b,g=i&&i.__k||es,x=e.length;for(c=lr(t,e,g,c,x),u=0;u0?lt(l.type,l.props,l.key,l.ref?l.ref:null,l.__v):l).__=n,l.__b=n.__b+1,o=null,(d=l.__i=or(l,t,c,u))!=-1&&(u--,(o=t[d])&&(o.__u|=2)),o==null||o.__v==null?(d==-1&&(r>h?m--:rc?m--:m++,l.__u|=4))):n.__k[a]=null;if(u)for(a=0;a(c!=null&&(2&c.__u)==0?1:0))for(r=t-1,a=t+1;r>=0||a=0){if((c=e[r])&&(2&c.__u)==0&&l==c.key&&o==c.type)return r;r--}if(a0?n:ut(n)?n.map(rs):ue({},n)}function cr(n,e,t,i,r,a,l,o,c){var d,h,u,m,p,f,v,b=t.props,g=e.props,x=e.type;if(x=="svg"?r="http://www.w3.org/2000/svg":x=="math"?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),a!=null){for(d=0;d2&&(o.children=arguments.length>3?ht.call(arguments,2):t),lt(n.type,o,i||n.key,r||n.ref,null)}function pt(n){function e(t){var i,r;return this.getChildContext||(i=new Set,(r={})[e.__c]=this,this.getChildContext=function(){return r},this.componentWillUnmount=function(){i=null},this.shouldComponentUpdate=function(a){this.props.value!=a.value&&i.forEach(function(l){l.__e=!0,yi(l)})},this.sub=function(a){i.add(a);var l=a.componentWillUnmount;a.componentWillUnmount=function(){i&&i.delete(a),l&&l.call(a)}}),t.children}return e.__c="__cC"+Qn++,e.__=n,e.Provider=e.__l=(e.Consumer=function(t,i){return t.children(i)}).contextType=e,e}ht=es.slice,A={__e:function(n,e,t,i){for(var r,a,l;e=e.__;)if((r=e.__c)&&!r.__)try{if((a=r.constructor)&&a.getDerivedStateFromError!=null&&(r.setState(a.getDerivedStateFromError(n)),l=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(n,i||{}),l=r.__d),l)return r.__E=r}catch(o){n=o}throw n}},Un=0,fe.prototype.setState=function(n,e){var t;t=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=ue({},this.state),typeof n=="function"&&(n=n(ue({},t),this.props)),n&&ue(t,n),n!=null&&this.__v&&(e&&this._sb.push(e),yi(this))},fe.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),yi(this))},fe.prototype.render=Z,Le=[],Zn=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Kn=function(n,e){return n.__v.__b-e.__v.__b},zt.__r=0,Jn=/(PointerCapture)$|Capture$/i,Li=0,bi=Wi(!1),xi=Wi(!0),Qn=0;var hr=0;function s(n,e,t,i,r,a){e||(e={});var l,o,c=e;if("ref"in c)for(o in c={},e)o=="ref"?l=e[o]:c[o]=e[o];var d={type:n,props:c,key:t,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--hr,__i:-1,__u:0,__source:r,__self:a};if(typeof n=="function"&&(l=n.defaultProps))for(o in l)c[o]===void 0&&(c[o]=l[o]);return A.vnode&&A.vnode(d),d}var Se,B,Wt,Xi,Je=0,os=[],H=A,qi=H.__b,Yi=H.__r,Ui=H.diffed,Zi=H.__c,Ki=H.unmount,Ji=H.__;function Qe(n,e){H.__h&&H.__h(B,n,Je||e),Je=0;var t=B.__H||(B.__H={__:[],__h:[]});return n>=t.__.length&&t.__.push({}),t.__[n]}function ne(n){return Je=1,mt(ps,n)}function mt(n,e,t){var i=Qe(Se++,2);if(i.t=n,!i.__c&&(i.__=[t?t(e):ps(void 0,e),function(o){var c=i.__N?i.__N[0]:i.__[0],d=i.t(c,o);c!==d&&(i.__N=[d,i.__[1]],i.__c.setState({}))}],i.__c=B,!B.__f)){var r=function(o,c,d){if(!i.__c.__H)return!0;var h=i.__c.__H.__.filter(function(m){return!!m.__c});if(h.every(function(m){return!m.__N}))return!a||a.call(this,o,c,d);var u=i.__c.props!==o;return h.forEach(function(m){if(m.__N){var p=m.__[0];m.__=m.__N,m.__N=void 0,p!==m.__[0]&&(u=!0)}}),a&&a.call(this,o,c,d)||u};B.__f=!0;var a=B.shouldComponentUpdate,l=B.componentWillUpdate;B.componentWillUpdate=function(o,c,d){if(this.__e){var h=a;a=void 0,r(o,c,d),a=h}l&&l.call(this,o,c,d)},B.shouldComponentUpdate=r}return i.__N||i.__}function Re(n,e){var t=Qe(Se++,3);!H.__s&&Di(t.__H,e)&&(t.__=n,t.u=e,B.__H.__h.push(t))}function Te(n,e){var t=Qe(Se++,4);!H.__s&&Di(t.__H,e)&&(t.__=n,t.u=e,B.__h.push(t))}function $(n){return Je=5,et(function(){return{current:n}},[])}function cs(n,e,t){Je=6,Te(function(){if(typeof n=="function"){var i=n(e());return function(){n(null),i&&typeof i=="function"&&i()}}if(n)return n.current=e(),function(){return n.current=null}},t==null?t:t.concat(n))}function et(n,e){var t=Qe(Se++,7);return Di(t.__H,e)&&(t.__=n(),t.__H=e,t.__h=n),t.__}function ds(n,e){return Je=8,et(function(){return n},e)}function Gt(n){var e=B.context[n.__c],t=Qe(Se++,9);return t.c=n,e?(t.__==null&&(t.__=!0,e.sub(B)),e.props.value):n.__}function hs(n,e){H.useDebugValue&&H.useDebugValue(e?e(n):n)}function us(){var n=Qe(Se++,11);if(!n.__){for(var e=B.__v;e!==null&&!e.__m&&e.__!==null;)e=e.__;var t=e.__m||(e.__m=[0,0]);n.__="P"+t[0]+"-"+t[1]++}return n.__}function ur(){for(var n;n=os.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(Ot),n.__H.__h.forEach(Ni),n.__H.__h=[]}catch(e){n.__H.__h=[],H.__e(e,n.__v)}}H.__b=function(n){B=null,qi&&qi(n)},H.__=function(n,e){n&&e.__k&&e.__k.__m&&(n.__m=e.__k.__m),Ji&&Ji(n,e)},H.__r=function(n){Yi&&Yi(n),Se=0;var e=(B=n.__c).__H;e&&(Wt===B?(e.__h=[],B.__h=[],e.__.forEach(function(t){t.__N&&(t.__=t.__N),t.u=t.__N=void 0})):(e.__h.forEach(Ot),e.__h.forEach(Ni),e.__h=[],Se=0)),Wt=B},H.diffed=function(n){Ui&&Ui(n);var e=n.__c;e&&e.__H&&(e.__H.__h.length&&(os.push(e)!==1&&Xi===H.requestAnimationFrame||((Xi=H.requestAnimationFrame)||pr)(ur)),e.__H.__.forEach(function(t){t.u&&(t.__H=t.u),t.u=void 0})),Wt=B=null},H.__c=function(n,e){e.some(function(t){try{t.__h.forEach(Ot),t.__h=t.__h.filter(function(i){return!i.__||Ni(i)})}catch(i){e.some(function(r){r.__h&&(r.__h=[])}),e=[],H.__e(i,t.__v)}}),Zi&&Zi(n,e)},H.unmount=function(n){Ki&&Ki(n);var e,t=n.__c;t&&t.__H&&(t.__H.__.forEach(function(i){try{Ot(i)}catch(r){e=r}}),t.__H=void 0,e&&H.__e(e,t.__v))};var Qi=typeof requestAnimationFrame=="function";function pr(n){var e,t=function(){clearTimeout(i),Qi&&cancelAnimationFrame(e),setTimeout(n)},i=setTimeout(t,100);Qi&&(e=requestAnimationFrame(t))}function Ot(n){var e=B,t=n.__c;typeof t=="function"&&(n.__c=void 0,t()),B=e}function Ni(n){var e=B;n.__c=n.__(),B=e}function Di(n,e){return!n||n.length!==e.length||e.some(function(t,i){return t!==n[i]})}function ps(n,e){return typeof e=="function"?e(n):e}let ke,nt;const mr=(n,e)=>{if(ke=void 0,e&&e.type==="click"){if(e.ctrlKey||e.metaKey||e.altKey||e.shiftKey||e.button!==0)return n;const t=e.target.closest("a[href]"),i=t&&t.getAttribute("href");if(!t||t.origin!=location.origin||/^#/.test(i)||!/^(_?self)?$/i.test(t.target)||nt&&(typeof nt=="string"?!i.startsWith(nt):!nt.test(i)))return n;ke=!0,e.preventDefault(),e=t.href.replace(location.origin,"")}else typeof e=="string"?ke=!0:e&&e.url?(ke=!e.replace,e=e.url):e=location.pathname+location.search;return ke===!0?history.pushState(null,"",e):ke===!1&&history.replaceState(null,"",e),e},fr=(n,e,t={})=>{n=n.split("/").filter(Boolean),e=(e||"").split("/").filter(Boolean),t.params||(t.params={});for(let i=0,r,a;i{const a=new URL(e,location.origin),l=a.pathname.replace(/\/+$/g,"")||"/";return{url:e,path:l,query:Object.fromEntries(a.searchParams),route:(o,c)=>t({url:o,replace:c}),wasPush:i}},[e]);return Te(()=>(addEventListener("click",t),addEventListener("popstate",t),()=>{removeEventListener("click",t),removeEventListener("popstate",t)}),[]),K(ft.ctx.Provider,{value:r},n.children)}const gr=Promise.resolve();function ms(n){const[e,t]=mt(N=>N+1,0),{url:i,query:r,wasPush:a,path:l}=vr(),{rest:o=l,params:c={}}=Gt(en),d=$(!1),h=$(l),u=$(0),m=$(),p=$(),f=$(),v=$(!1),b=$();b.current=!1;let g,x,y;ge(n.children).some(N=>{if(fr(o,N.props.path,y={...N.props,path:o,query:r,params:c,rest:""}))return g=wi(N,y);N.props.default&&(x=wi(N,y))});let w=g||x;const _=m.current&&m.current.__u&vt&&m.current.__u&bt,M=m.current&&m.current.__h,C=et(()=>{p.current=m.current,m.current=K(en.Provider,{value:y},w);const N=p.current&&p.current.props.children;return!N||!w||w.type!==N.type||w.props.component!==N.props.component?(this.__v&&this.__v.__k&&this.__v.__k.reverse(),u.current++,!0):!1},[i,JSON.stringify(y)]);_?(m.current.__u|=vt,m.current.__u|=bt):M&&(m.current.__h=!0);const S=p.current;return p.current=null,this.__c=(N,E)=>{b.current=!0,p.current=S,n.onLoadStart&&n.onLoadStart(i),d.current=!0;let P=u.current;N.then(()=>{P===u.current&&(p.current=null,m.current&&(E.__h&&(m.current.__h=E.__h),E.__u&bt&&(m.current.__u|=bt),E.__u&vt&&(m.current.__u|=vt)),gr.then(t))})},Te(()=>{const N=this.__v&&this.__v.__e;if(b.current){!v.current&&!f.current&&(f.current=N);return}!v.current&&f.current&&(f.current!==N&&f.current.remove(),f.current=null),v.current=!0,h.current!==l&&(a&&scrollTo(0,0),n.onRouteChange&&n.onRouteChange(i),h.current=l),n.onLoadEnd&&d.current&&n.onLoadEnd(i),d.current=!1},[l,a,e]),C?[K(Xt,{r:m}),K(Xt,{r:p})]:K(Xt,{r:m})}const vt=32,bt=128,Xt=({r:n})=>n.current;ms.Provider=ft;ft.ctx=pt({});const en=pt({}),xt=n=>K(n.component,n),vr=()=>Gt(ft.ctx),tn=A.__b;A.__b=n=>{n.type&&n.type._forwarded&&n.ref&&(n.props.ref=n.ref,n.ref=null),tn&&tn(n)};const nn=A.__e;A.__e=(n,e,t)=>{if(n&&n.then){let i=e;for(;i=i.__;)if(i.__c&&i.__c.__c)return e.__e==null&&(e.__c.__z=[t.__e],e.__e=t.__e,e.__k=t.__k),e.__k||(e.__k=[]),i.__c.__c(n,e)}nn&&nn(n,e,t)};function fs(n,e){for(var t in e)n[t]=e[t];return n}function _i(n,e){for(var t in n)if(t!=="__source"&&!(t in e))return!0;for(var i in e)if(i!=="__source"&&n[i]!==e[i])return!0;return!1}function gs(n,e){var t=e(),i=ne({t:{__:t,u:e}}),r=i[0].t,a=i[1];return Te(function(){r.__=t,r.u=e,qt(r)&&a({t:r})},[n,t,e]),Re(function(){return qt(r)&&a({t:r}),n(function(){qt(r)&&a({t:r})})},[n]),t}function qt(n){var e,t,i=n.u,r=n.__;try{var a=i();return!((e=r)===(t=a)&&(e!==0||1/e==1/t)||e!=e&&t!=t)}catch{return!0}}function vs(n){n()}function bs(n){return n}function xs(){return[!1,vs]}var ys=Te;function Si(n,e){this.props=n,this.context=e}function br(n,e){function t(r){var a=this.props.ref,l=a==r.ref;return!l&&a&&(a.call?a(null):a.current=null),e?!e(this.props,r)||!l:_i(this.props,r)}function i(r){return this.shouldComponentUpdate=t,K(n,r)}return i.displayName="Memo("+(n.displayName||n.name)+")",i.prototype.isReactComponent=!0,i.__f=!0,i}(Si.prototype=new fe).isPureReactComponent=!0,Si.prototype.shouldComponentUpdate=function(n,e){return _i(this.props,n)||_i(this.state,e)};var sn=A.__b;A.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),sn&&sn(n)};var xr=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function zi(n){function e(t){var i=fs({},t);return delete i.ref,n(i,t.ref||null)}return e.$$typeof=xr,e.render=e,e.prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(n.displayName||n.name)+")",e}var rn=function(n,e){return n==null?null:ge(ge(n).map(e))},yr={map:rn,forEach:rn,count:function(n){return n?ge(n).length:0},only:function(n){var e=ge(n);if(e.length!==1)throw"Children.only";return e[0]},toArray:ge},wr=A.__e;A.__e=function(n,e,t,i){if(n.then){for(var r,a=e;a=a.__;)if((r=a.__c)&&r.__c)return e.__e==null&&(e.__e=t.__e,e.__k=t.__k),r.__c(n,e)}wr(n,e,t,i)};var an=A.unmount;function ws(n,e,t){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(i){typeof i.__c=="function"&&i.__c()}),n.__c.__H=null),(n=fs({},n)).__c!=null&&(n.__c.__P===t&&(n.__c.__P=e),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(i){return ws(i,e,t)})),n}function Ns(n,e,t){return n&&t&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(i){return Ns(i,e,t)}),n.__c&&n.__c.__P===e&&(n.__e&&t.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=t)),n}function It(){this.__u=0,this.o=null,this.__b=null}function _s(n){var e=n.__.__c;return e&&e.__a&&e.__a(n)}function Nr(n){var e,t,i;function r(a){if(e||(e=n()).then(function(l){t=l.default||l},function(l){i=l}),i)throw i;if(!t)throw e;return K(t,a)}return r.displayName="Lazy",r.__f=!0,r}function st(){this.i=null,this.l=null}A.unmount=function(n){var e=n.__c;e&&e.__R&&e.__R(),e&&32&n.__u&&(n.type=null),an&&an(n)},(It.prototype=new fe).__c=function(n,e){var t=e.__c,i=this;i.o==null&&(i.o=[]),i.o.push(t);var r=_s(i.__v),a=!1,l=function(){a||(a=!0,t.__R=null,r?r(o):o())};t.__R=l;var o=function(){if(!--i.__u){if(i.state.__a){var c=i.state.__a;i.__v.__k[0]=Ns(c,c.__c.__P,c.__c.__O)}var d;for(i.setState({__a:i.__b=null});d=i.o.pop();)d.forceUpdate()}};i.__u++||32&e.__u||i.setState({__a:i.__b=i.__v.__k[0]}),n.then(l,l)},It.prototype.componentWillUnmount=function(){this.o=[]},It.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var t=document.createElement("div"),i=this.__v.__k[0].__c;this.__v.__k[0]=ws(this.__b,t,i.__O=i.__P)}this.__b=null}var r=e.__a&&K(Z,null,n.fallback);return r&&(r.__u&=-33),[K(Z,null,e.__a?null:n.children),r]};var ln=function(n,e,t){if(++t[1]===t[0]&&n.l.delete(e),n.props.revealOrder&&(n.props.revealOrder[0]!=="t"||!n.l.size))for(t=n.i;t;){for(;t.length>3;)t.pop()();if(t[1]>>1,1),e.h.removeChild(r)}}}Ke(K(_r,{context:e.context},n.__v),e.v)}function Tr(n,e){var t=K(Sr,{__v:n,h:e});return t.containerInfo=e,t}(st.prototype=new fe).__a=function(n){var e=this,t=_s(e.__v),i=e.l.get(n);return i[0]++,function(r){var a=function(){e.props.revealOrder?(i.push(r),ln(e,n,i)):r()};t?t(a):a()}},st.prototype.render=function(n){this.i=null,this.l=new Map;var e=ge(n.children);n.revealOrder&&n.revealOrder[0]==="b"&&e.reverse();for(var t=e.length;t--;)this.l.set(e[t],this.i=[1,0,this.i]);return n.children},st.prototype.componentDidUpdate=st.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(e,t){ln(n,t,e)})};var Ss=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Er=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Cr=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Pr=/[A-Z0-9]/g,Mr=typeof document<"u",kr=function(n){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(n)};function Lr(n,e,t){return e.__k==null&&(e.textContent=""),Ke(n,e),typeof t=="function"&&t(),n?n.__c:null}function Ar(n,e,t){return ls(n,e),typeof t=="function"&&t(),n?n.__c:null}fe.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(n){Object.defineProperty(fe.prototype,n,{configurable:!0,get:function(){return this["UNSAFE_"+n]},set:function(e){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:e})}})});var on=A.event;function Or(){}function Ir(){return this.cancelBubble}function Dr(){return this.defaultPrevented}A.event=function(n){return on&&(n=on(n)),n.persist=Or,n.isPropagationStopped=Ir,n.isDefaultPrevented=Dr,n.nativeEvent=n};var Ri,zr={enumerable:!1,configurable:!0,get:function(){return this.class}},cn=A.vnode;A.vnode=function(n){typeof n.type=="string"&&function(e){var t=e.props,i=e.type,r={},a=i.indexOf("-")===-1;for(var l in t){var o=t[l];if(!(l==="value"&&"defaultValue"in t&&o==null||Mr&&l==="children"&&i==="noscript"||l==="class"||l==="className")){var c=l.toLowerCase();l==="defaultValue"&&"value"in t&&t.value==null?l="value":l==="download"&&o===!0?o="":c==="translate"&&o==="no"?o=!1:c[0]==="o"&&c[1]==="n"?c==="ondoubleclick"?l="ondblclick":c!=="onchange"||i!=="input"&&i!=="textarea"||kr(t.type)?c==="onfocus"?l="onfocusin":c==="onblur"?l="onfocusout":Cr.test(l)&&(l=c):c=l="oninput":a&&Er.test(l)?l=l.replace(Pr,"-$&").toLowerCase():o===null&&(o=void 0),c==="oninput"&&r[l=c]&&(l="oninputCapture"),r[l]=o}}i=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=ge(t.children).forEach(function(d){d.props.selected=r.value.indexOf(d.props.value)!=-1})),i=="select"&&r.defaultValue!=null&&(r.value=ge(t.children).forEach(function(d){d.props.selected=r.multiple?r.defaultValue.indexOf(d.props.value)!=-1:r.defaultValue==d.props.value})),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",zr)):(t.className&&!t.class||t.class&&t.className)&&(r.class=r.className=t.className),e.props=r}(n),n.$$typeof=Ss,cn&&cn(n)};var dn=A.__r;A.__r=function(n){dn&&dn(n),Ri=n.__c};var hn=A.diffed;A.diffed=function(n){hn&&hn(n);var e=n.props,t=n.__e;t!=null&&n.type==="textarea"&&"value"in e&&e.value!==t.value&&(t.value=e.value==null?"":e.value),Ri=null};var Rr={ReactCurrentDispatcher:{current:{readContext:function(n){return Ri.__n[n.__c].props.value},useCallback:ds,useContext:Gt,useDebugValue:hs,useDeferredValue:bs,useEffect:Re,useId:us,useImperativeHandle:cs,useInsertionEffect:ys,useLayoutEffect:Te,useMemo:et,useReducer:mt,useRef:$,useState:ne,useSyncExternalStore:gs,useTransition:xs}}};function jr(n){return K.bind(null,n)}function Vt(n){return!!n&&n.$$typeof===Ss}function Fr(n){return Vt(n)&&n.type===Z}function Br(n){return!!n&&!!n.displayName&&(typeof n.displayName=="string"||n.displayName instanceof String)&&n.displayName.startsWith("Memo(")}function Hr(n){return Vt(n)?wi.apply(null,arguments):n}function $r(n){return!!n.__k&&(Ke(null,n),!0)}function Gr(n){return n&&(n.base||n.nodeType===1&&n)||null}var Vr=function(n,e){return n(e)},Wr=function(n,e){return n(e)},Xr=Z,qr=Vt,X={useState:ne,useId:us,useReducer:mt,useEffect:Re,useLayoutEffect:Te,useInsertionEffect:ys,useTransition:xs,useDeferredValue:bs,useSyncExternalStore:gs,startTransition:vs,useRef:$,useImperativeHandle:cs,useMemo:et,useCallback:ds,useContext:Gt,useDebugValue:hs,version:"18.3.1",Children:yr,render:Lr,hydrate:Ar,unmountComponentAtNode:$r,createPortal:Tr,createElement:K,createContext:pt,createFactory:jr,cloneElement:Hr,createRef:ar,Fragment:Z,isValidElement:Vt,isElement:qr,isFragment:Fr,isMemo:Br,findDOMNode:Gr,Component:fe,PureComponent:Si,memo:br,forwardRef:zi,flushSync:Wr,unstable_batchedUpdates:Vr,StrictMode:Xr,Suspense:It,SuspenseList:st,lazy:Nr,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Rr};function un(n){return n!==null&&typeof n=="object"&&"constructor"in n&&n.constructor===Object}function ji(n,e){n===void 0&&(n={}),e===void 0&&(e={});const t=["__proto__","constructor","prototype"];Object.keys(e).filter(i=>t.indexOf(i)<0).forEach(i=>{typeof n[i]>"u"?n[i]=e[i]:un(e[i])&&un(n[i])&&Object.keys(e[i]).length>0&&ji(n[i],e[i])})}const Ts={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function Ee(){const n=typeof document<"u"?document:{};return ji(n,Ts),n}const Yr={document:Ts,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return""}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(n){return typeof setTimeout>"u"?(n(),null):setTimeout(n,0)},cancelAnimationFrame(n){typeof setTimeout>"u"||clearTimeout(n)}};function J(){const n=typeof window<"u"?window:{};return ji(n,Yr),n}function Ur(n){return n===void 0&&(n=""),n.trim().split(" ").filter(e=>!!e.trim())}function Zr(n){const e=n;Object.keys(e).forEach(t=>{try{e[t]=null}catch{}try{delete e[t]}catch{}})}function Ti(n,e){return e===void 0&&(e=0),setTimeout(n,e)}function De(){return Date.now()}function Kr(n){const e=J();let t;return e.getComputedStyle&&(t=e.getComputedStyle(n,null)),!t&&n.currentStyle&&(t=n.currentStyle),t||(t=n.style),t}function Jr(n,e){e===void 0&&(e="x");const t=J();let i,r,a;const l=Kr(n);return t.WebKitCSSMatrix?(r=l.transform||l.webkitTransform,r.split(",").length>6&&(r=r.split(", ").map(o=>o.replace(",",".")).join(", ")),a=new t.WebKitCSSMatrix(r==="none"?"":r)):(a=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),i=a.toString().split(",")),e==="x"&&(t.WebKitCSSMatrix?r=a.m41:i.length===16?r=parseFloat(i[12]):r=parseFloat(i[4])),e==="y"&&(t.WebKitCSSMatrix?r=a.m42:i.length===16?r=parseFloat(i[13]):r=parseFloat(i[5])),r||0}function rt(n){return typeof n=="object"&&n!==null&&n.constructor&&Object.prototype.toString.call(n).slice(8,-1)==="Object"}function Qr(n){return typeof window<"u"&&typeof window.HTMLElement<"u"?n instanceof HTMLElement:n&&(n.nodeType===1||n.nodeType===11)}function ie(){const n=Object(arguments.length<=0?void 0:arguments[0]),e=["__proto__","constructor","prototype"];for(let t=1;te.indexOf(a)<0);for(let a=0,l=r.length;aa?"next":"prev",h=(m,p)=>d==="next"&&m>=p||d==="prev"&&m<=p,u=()=>{o=new Date().getTime(),l===null&&(l=o);const m=Math.max(Math.min((o-l)/c,1),0),p=.5-Math.cos(m*Math.PI)/2;let f=a+p*(t-a);if(h(f,t)&&(f=t),e.wrapperEl.scrollTo({[i]:f}),h(f,t)){e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout(()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[i]:f})}),r.cancelAnimationFrame(e.cssModeFrameID);return}e.cssModeFrameID=r.requestAnimationFrame(u)};u()}function ce(n,e){e===void 0&&(e="");const t=J(),i=[...n.children];return t.HTMLSlotElement&&n instanceof HTMLSlotElement&&i.push(...n.assignedElements()),e?i.filter(r=>r.matches(e)):i}function ea(n,e){const t=[e];for(;t.length>0;){const i=t.shift();if(n===i)return!0;t.push(...i.children,...i.shadowRoot?i.shadowRoot.children:[],...i.assignedElements?i.assignedElements():[])}}function ta(n,e){const t=J();let i=e.contains(n);return!i&&t.HTMLSlotElement&&e instanceof HTMLSlotElement&&(i=[...e.assignedElements()].includes(n),i||(i=ea(n,e))),i}function Rt(n){try{console.warn(n);return}catch{}}function jt(n,e){e===void 0&&(e=[]);const t=document.createElement(n);return t.classList.add(...Array.isArray(e)?e:Ur(e)),t}function ia(n,e){const t=[];for(;n.previousElementSibling;){const i=n.previousElementSibling;e?i.matches(e)&&t.push(i):t.push(i),n=i}return t}function na(n,e){const t=[];for(;n.nextElementSibling;){const i=n.nextElementSibling;e?i.matches(e)&&t.push(i):t.push(i),n=i}return t}function _e(n,e){return J().getComputedStyle(n,null).getPropertyValue(e)}function pn(n){let e=n,t;if(e){for(t=0;(e=e.previousSibling)!==null;)e.nodeType===1&&(t+=1);return t}}function sa(n,e){const t=[];let i=n.parentElement;for(;i;)t.push(i),i=i.parentElement;return t}function Yt(n,e){function t(i){i.target===n&&(e.call(n,i),n.removeEventListener("transitionend",t))}e&&n.addEventListener("transitionend",t)}function mn(n,e,t){const i=J();return n[e==="width"?"offsetWidth":"offsetHeight"]+parseFloat(i.getComputedStyle(n,null).getPropertyValue(e==="width"?"margin-right":"margin-top"))+parseFloat(i.getComputedStyle(n,null).getPropertyValue(e==="width"?"margin-left":"margin-bottom"))}function ve(n){return(Array.isArray(n)?n:[n]).filter(e=>!!e)}let Ut;function ra(){const n=J(),e=Ee();return{smoothScroll:e.documentElement&&e.documentElement.style&&"scrollBehavior"in e.documentElement.style,touch:!!("ontouchstart"in n||n.DocumentTouch&&e instanceof n.DocumentTouch)}}function Cs(){return Ut||(Ut=ra()),Ut}let Zt;function aa(n){let{userAgent:e}=n===void 0?{}:n;const t=Cs(),i=J(),r=i.navigator.platform,a=e||i.navigator.userAgent,l={ios:!1,android:!1},o=i.screen.width,c=i.screen.height,d=a.match(/(Android);?[\s\/]+([\d.]+)?/);let h=a.match(/(iPad).*OS\s([\d_]+)/);const u=a.match(/(iPod)(.*OS\s([\d_]+))?/),m=!h&&a.match(/(iPhone\sOS|iOS)\s([\d_]+)/),p=r==="Win32";let f=r==="MacIntel";const v=["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"];return!h&&f&&t.touch&&v.indexOf(`${o}x${c}`)>=0&&(h=a.match(/(Version)\/([\d.]+)/),h||(h=[0,1,"13_0_0"]),f=!1),d&&!p&&(l.os="android",l.android=!0),(h||m||u)&&(l.os="ios",l.ios=!0),l}function Ps(n){return n===void 0&&(n={}),Zt||(Zt=aa(n)),Zt}let Kt;function la(){const n=J(),e=Ps();let t=!1;function i(){const o=n.navigator.userAgent.toLowerCase();return o.indexOf("safari")>=0&&o.indexOf("chrome")<0&&o.indexOf("android")<0}if(i()){const o=String(n.navigator.userAgent);if(o.includes("Version/")){const[c,d]=o.split("Version/")[1].split(" ")[0].split(".").map(h=>Number(h));t=c<16||c===16&&d<2}}const r=/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(n.navigator.userAgent),a=i(),l=a||r&&e.ios;return{isSafari:t||a,needPerspectiveFix:t,need3dFix:l,isWebView:r}}function Ms(){return Kt||(Kt=la()),Kt}function oa(n){let{swiper:e,on:t,emit:i}=n;const r=J();let a=null,l=null;const o=()=>{!e||e.destroyed||!e.initialized||(i("beforeResize"),i("resize"))},c=()=>{!e||e.destroyed||!e.initialized||(a=new ResizeObserver(u=>{l=r.requestAnimationFrame(()=>{const{width:m,height:p}=e;let f=m,v=p;u.forEach(b=>{let{contentBoxSize:g,contentRect:x,target:y}=b;y&&y!==e.el||(f=x?x.width:(g[0]||g).inlineSize,v=x?x.height:(g[0]||g).blockSize)}),(f!==m||v!==p)&&o()})}),a.observe(e.el))},d=()=>{l&&r.cancelAnimationFrame(l),a&&a.unobserve&&e.el&&(a.unobserve(e.el),a=null)},h=()=>{!e||e.destroyed||!e.initialized||i("orientationchange")};t("init",()=>{if(e.params.resizeObserver&&typeof r.ResizeObserver<"u"){c();return}r.addEventListener("resize",o),r.addEventListener("orientationchange",h)}),t("destroy",()=>{d(),r.removeEventListener("resize",o),r.removeEventListener("orientationchange",h)})}function ca(n){let{swiper:e,extendParams:t,on:i,emit:r}=n;const a=[],l=J(),o=function(h,u){u===void 0&&(u={});const m=l.MutationObserver||l.WebkitMutationObserver,p=new m(f=>{if(e.__preventObserver__)return;if(f.length===1){r("observerUpdate",f[0]);return}const v=function(){r("observerUpdate",f[0])};l.requestAnimationFrame?l.requestAnimationFrame(v):l.setTimeout(v,0)});p.observe(h,{attributes:typeof u.attributes>"u"?!0:u.attributes,childList:e.isElement||(typeof u.childList>"u"?!0:u).childList,characterData:typeof u.characterData>"u"?!0:u.characterData}),a.push(p)},c=()=>{if(e.params.observer){if(e.params.observeParents){const h=sa(e.hostEl);for(let u=0;u{a.forEach(h=>{h.disconnect()}),a.splice(0,a.length)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),i("init",c),i("destroy",d)}var da={on(n,e,t){const i=this;if(!i.eventsListeners||i.destroyed||typeof e!="function")return i;const r=t?"unshift":"push";return n.split(" ").forEach(a=>{i.eventsListeners[a]||(i.eventsListeners[a]=[]),i.eventsListeners[a][r](e)}),i},once(n,e,t){const i=this;if(!i.eventsListeners||i.destroyed||typeof e!="function")return i;function r(){i.off(n,r),r.__emitterProxy&&delete r.__emitterProxy;for(var a=arguments.length,l=new Array(a),o=0;o=0&&e.eventsAnyListeners.splice(t,1),e},off(n,e){const t=this;return!t.eventsListeners||t.destroyed||!t.eventsListeners||n.split(" ").forEach(i=>{typeof e>"u"?t.eventsListeners[i]=[]:t.eventsListeners[i]&&t.eventsListeners[i].forEach((r,a)=>{(r===e||r.__emitterProxy&&r.__emitterProxy===e)&&t.eventsListeners[i].splice(a,1)})}),t},emit(){const n=this;if(!n.eventsListeners||n.destroyed||!n.eventsListeners)return n;let e,t,i;for(var r=arguments.length,a=new Array(r),l=0;l{n.eventsAnyListeners&&n.eventsAnyListeners.length&&n.eventsAnyListeners.forEach(d=>{d.apply(i,[c,...t])}),n.eventsListeners&&n.eventsListeners[c]&&n.eventsListeners[c].forEach(d=>{d.apply(i,t)})}),n}};function ha(){const n=this;let e,t;const i=n.el;typeof n.params.width<"u"&&n.params.width!==null?e=n.params.width:e=i.clientWidth,typeof n.params.height<"u"&&n.params.height!==null?t=n.params.height:t=i.clientHeight,!(e===0&&n.isHorizontal()||t===0&&n.isVertical())&&(e=e-parseInt(_e(i,"padding-left")||0,10)-parseInt(_e(i,"padding-right")||0,10),t=t-parseInt(_e(i,"padding-top")||0,10)-parseInt(_e(i,"padding-bottom")||0,10),Number.isNaN(e)&&(e=0),Number.isNaN(t)&&(t=0),Object.assign(n,{width:e,height:t,size:n.isHorizontal()?e:t}))}function ua(){const n=this;function e(E,P){return parseFloat(E.getPropertyValue(n.getDirectionLabel(P))||0)}const t=n.params,{wrapperEl:i,slidesEl:r,size:a,rtlTranslate:l,wrongRTL:o}=n,c=n.virtual&&t.virtual.enabled,d=c?n.virtual.slides.length:n.slides.length,h=ce(r,`.${n.params.slideClass}, swiper-slide`),u=c?n.virtual.slides.length:h.length;let m=[];const p=[],f=[];let v=t.slidesOffsetBefore;typeof v=="function"&&(v=t.slidesOffsetBefore.call(n));let b=t.slidesOffsetAfter;typeof b=="function"&&(b=t.slidesOffsetAfter.call(n));const g=n.snapGrid.length,x=n.slidesGrid.length;let y=t.spaceBetween,w=-v,_=0,M=0;if(typeof a>"u")return;typeof y=="string"&&y.indexOf("%")>=0?y=parseFloat(y.replace("%",""))/100*a:typeof y=="string"&&(y=parseFloat(y)),n.virtualSize=-y,h.forEach(E=>{l?E.style.marginLeft="":E.style.marginRight="",E.style.marginBottom="",E.style.marginTop=""}),t.centeredSlides&&t.cssMode&&(yt(i,"--swiper-centered-offset-before",""),yt(i,"--swiper-centered-offset-after",""));const C=t.grid&&t.grid.rows>1&&n.grid;C?n.grid.initSlides(h):n.grid&&n.grid.unsetSlides();let S;const N=t.slidesPerView==="auto"&&t.breakpoints&&Object.keys(t.breakpoints).filter(E=>typeof t.breakpoints[E].slidesPerView<"u").length>0;for(let E=0;E1&&m.push(n.virtualSize-a)}if(c&&t.loop){const E=f[0]+y;if(t.slidesPerGroup>1){const P=Math.ceil((n.virtual.slidesBefore+n.virtual.slidesAfter)/t.slidesPerGroup),L=E*t.slidesPerGroup;for(let O=0;O!t.cssMode||t.loop?!0:L!==h.length-1).forEach(P=>{P.style[E]=`${y}px`})}if(t.centeredSlides&&t.centeredSlidesBounds){let E=0;f.forEach(L=>{E+=L+(y||0)}),E-=y;const P=E>a?E-a:0;m=m.map(L=>L<=0?-v:L>P?P+b:L)}if(t.centerInsufficientSlides){let E=0;f.forEach(L=>{E+=L+(y||0)}),E-=y;const P=(t.slidesOffsetBefore||0)+(t.slidesOffsetAfter||0);if(E+P{m[G]=O-L}),p.forEach((O,G)=>{p[G]=O+L})}}if(Object.assign(n,{slides:h,snapGrid:m,slidesGrid:p,slidesSizesGrid:f}),t.centeredSlides&&t.cssMode&&!t.centeredSlidesBounds){yt(i,"--swiper-centered-offset-before",`${-m[0]}px`),yt(i,"--swiper-centered-offset-after",`${n.size/2-f[f.length-1]/2}px`);const E=-n.snapGrid[0],P=-n.slidesGrid[0];n.snapGrid=n.snapGrid.map(L=>L+E),n.slidesGrid=n.slidesGrid.map(L=>L+P)}if(u!==d&&n.emit("slidesLengthChange"),m.length!==g&&(n.params.watchOverflow&&n.checkOverflow(),n.emit("snapGridLengthChange")),p.length!==x&&n.emit("slidesGridLengthChange"),t.watchSlidesProgress&&n.updateSlidesOffset(),n.emit("slidesUpdated"),!c&&!t.cssMode&&(t.effect==="slide"||t.effect==="fade")){const E=`${t.containerModifierClass}backface-hidden`,P=n.el.classList.contains(E);u<=t.maxBackfaceHiddenSlides?P||n.el.classList.add(E):P&&n.el.classList.remove(E)}}function pa(n){const e=this,t=[],i=e.virtual&&e.params.virtual.enabled;let r=0,a;typeof n=="number"?e.setTransition(n):n===!0&&e.setTransition(e.params.speed);const l=o=>i?e.slides[e.getSlideIndexByData(o)]:e.slides[o];if(e.params.slidesPerView!=="auto"&&e.params.slidesPerView>1)if(e.params.centeredSlides)(e.visibleSlides||[]).forEach(o=>{t.push(o)});else for(a=0;ae.slides.length&&!i)break;t.push(l(o))}else t.push(l(e.activeIndex));for(a=0;ar?o:r}(r||r===0)&&(e.wrapperEl.style.height=`${r}px`)}function ma(){const n=this,e=n.slides,t=n.isElement?n.isHorizontal()?n.wrapperEl.offsetLeft:n.wrapperEl.offsetTop:0;for(let i=0;i{e&&!n.classList.contains(t)?n.classList.add(t):!e&&n.classList.contains(t)&&n.classList.remove(t)};function fa(n){n===void 0&&(n=this&&this.translate||0);const e=this,t=e.params,{slides:i,rtlTranslate:r,snapGrid:a}=e;if(i.length===0)return;typeof i[0].swiperSlideOffset>"u"&&e.updateSlidesOffset();let l=-n;r&&(l=n),e.visibleSlidesIndexes=[],e.visibleSlides=[];let o=t.spaceBetween;typeof o=="string"&&o.indexOf("%")>=0?o=parseFloat(o.replace("%",""))/100*e.size:typeof o=="string"&&(o=parseFloat(o));for(let c=0;c=0&&p<=e.size-e.slidesSizesGrid[c],b=p>=0&&p1&&f<=e.size||p<=0&&f>=e.size;b&&(e.visibleSlides.push(d),e.visibleSlidesIndexes.push(c)),fn(d,b,t.slideVisibleClass),fn(d,v,t.slideFullyVisibleClass),d.progress=r?-u:u,d.originalProgress=r?-m:m}}function ga(n){const e=this;if(typeof n>"u"){const h=e.rtlTranslate?-1:1;n=e&&e.translate&&e.translate*h||0}const t=e.params,i=e.maxTranslate()-e.minTranslate();let{progress:r,isBeginning:a,isEnd:l,progressLoop:o}=e;const c=a,d=l;if(i===0)r=0,a=!0,l=!0;else{r=(n-e.minTranslate())/i;const h=Math.abs(n-e.minTranslate())<1,u=Math.abs(n-e.maxTranslate())<1;a=h||r<=0,l=u||r>=1,h&&(r=0),u&&(r=1)}if(t.loop){const h=e.getSlideIndexByData(0),u=e.getSlideIndexByData(e.slides.length-1),m=e.slidesGrid[h],p=e.slidesGrid[u],f=e.slidesGrid[e.slidesGrid.length-1],v=Math.abs(n);v>=m?o=(v-m)/f:o=(v+f-p)/f,o>1&&(o-=1)}Object.assign(e,{progress:r,progressLoop:o,isBeginning:a,isEnd:l}),(t.watchSlidesProgress||t.centeredSlides&&t.autoHeight)&&e.updateSlidesProgress(n),a&&!c&&e.emit("reachBeginning toEdge"),l&&!d&&e.emit("reachEnd toEdge"),(c&&!a||d&&!l)&&e.emit("fromEdge"),e.emit("progress",r)}const Jt=(n,e,t)=>{e&&!n.classList.contains(t)?n.classList.add(t):!e&&n.classList.contains(t)&&n.classList.remove(t)};function va(){const n=this,{slides:e,params:t,slidesEl:i,activeIndex:r}=n,a=n.virtual&&t.virtual.enabled,l=n.grid&&t.grid&&t.grid.rows>1,o=u=>ce(i,`.${t.slideClass}${u}, swiper-slide${u}`)[0];let c,d,h;if(a)if(t.loop){let u=r-n.virtual.slidesBefore;u<0&&(u=n.virtual.slides.length+u),u>=n.virtual.slides.length&&(u-=n.virtual.slides.length),c=o(`[data-swiper-slide-index="${u}"]`)}else c=o(`[data-swiper-slide-index="${r}"]`);else l?(c=e.find(u=>u.column===r),h=e.find(u=>u.column===r+1),d=e.find(u=>u.column===r-1)):c=e[r];c&&(l||(h=na(c,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!h&&(h=e[0]),d=ia(c,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!d===0&&(d=e[e.length-1]))),e.forEach(u=>{Jt(u,u===c,t.slideActiveClass),Jt(u,u===h,t.slideNextClass),Jt(u,u===d,t.slidePrevClass)}),n.emitSlidesClasses()}const Dt=(n,e)=>{if(!n||n.destroyed||!n.params)return;const t=()=>n.isElement?"swiper-slide":`.${n.params.slideClass}`,i=e.closest(t());if(i){let r=i.querySelector(`.${n.params.lazyPreloaderClass}`);!r&&n.isElement&&(i.shadowRoot?r=i.shadowRoot.querySelector(`.${n.params.lazyPreloaderClass}`):requestAnimationFrame(()=>{i.shadowRoot&&(r=i.shadowRoot.querySelector(`.${n.params.lazyPreloaderClass}`),r&&r.remove())})),r&&r.remove()}},Qt=(n,e)=>{if(!n.slides[e])return;const t=n.slides[e].querySelector('[loading="lazy"]');t&&t.removeAttribute("loading")},Ei=n=>{if(!n||n.destroyed||!n.params)return;let e=n.params.lazyPreloadPrevNext;const t=n.slides.length;if(!t||!e||e<0)return;e=Math.min(e,t);const i=n.params.slidesPerView==="auto"?n.slidesPerViewDynamic():Math.ceil(n.params.slidesPerView),r=n.activeIndex;if(n.params.grid&&n.params.grid.rows>1){const l=r,o=[l-e];o.push(...Array.from({length:e}).map((c,d)=>l+i+d)),n.slides.forEach((c,d)=>{o.includes(c.column)&&Qt(n,d)});return}const a=r+i-1;if(n.params.rewind||n.params.loop)for(let l=r-e;l<=a+e;l+=1){const o=(l%t+t)%t;(oa)&&Qt(n,o)}else for(let l=Math.max(r-e,0);l<=Math.min(a+e,t-1);l+=1)l!==r&&(l>a||l=e[a]&&i=e[a]&&i=e[a]&&(r=a);return t.normalizeSlideIndex&&(r<0||typeof r>"u")&&(r=0),r}function xa(n){const e=this,t=e.rtlTranslate?e.translate:-e.translate,{snapGrid:i,params:r,activeIndex:a,realIndex:l,snapIndex:o}=e;let c=n,d;const h=p=>{let f=p-e.virtual.slidesBefore;return f<0&&(f=e.virtual.slides.length+f),f>=e.virtual.slides.length&&(f-=e.virtual.slides.length),f};if(typeof c>"u"&&(c=ba(e)),i.indexOf(t)>=0)d=i.indexOf(t);else{const p=Math.min(r.slidesPerGroupSkip,c);d=p+Math.floor((c-p)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===a&&!e.params.loop){d!==o&&(e.snapIndex=d,e.emit("snapIndexChange"));return}if(c===a&&e.params.loop&&e.virtual&&e.params.virtual.enabled){e.realIndex=h(c);return}const u=e.grid&&r.grid&&r.grid.rows>1;let m;if(e.virtual&&r.virtual.enabled&&r.loop)m=h(c);else if(u){const p=e.slides.find(v=>v.column===c);let f=parseInt(p.getAttribute("data-swiper-slide-index"),10);Number.isNaN(f)&&(f=Math.max(e.slides.indexOf(p),0)),m=Math.floor(f/r.grid.rows)}else if(e.slides[c]){const p=e.slides[c].getAttribute("data-swiper-slide-index");p?m=parseInt(p,10):m=c}else m=c;Object.assign(e,{previousSnapIndex:o,snapIndex:d,previousRealIndex:l,realIndex:m,previousIndex:a,activeIndex:c}),e.initialized&&Ei(e),e.emit("activeIndexChange"),e.emit("snapIndexChange"),(e.initialized||e.params.runCallbacksOnInit)&&(l!==m&&e.emit("realIndexChange"),e.emit("slideChange"))}function ya(n,e){const t=this,i=t.params;let r=n.closest(`.${i.slideClass}, swiper-slide`);!r&&t.isElement&&e&&e.length>1&&e.includes(n)&&[...e.slice(e.indexOf(n)+1,e.length)].forEach(o=>{!r&&o.matches&&o.matches(`.${i.slideClass}, swiper-slide`)&&(r=o)});let a=!1,l;if(r){for(let o=0;oc?h=c:i&&nl?o="next":a"u"&&(e=a.params.speed);const v=Math.min(a.params.slidesPerGroupSkip,l);let b=v+Math.floor((l-v)/a.params.slidesPerGroup);b>=c.length&&(b=c.length-1);const g=-c[b];if(o.normalizeSlideIndex)for(let C=0;C=N&&S=N&&S=N&&(l=C)}if(a.initialized&&l!==u&&(!a.allowSlideNext&&(m?g>a.translate&&g>a.minTranslate():ga.translate&&g>a.maxTranslate()&&(u||0)!==l))return!1;l!==(h||0)&&t&&a.emit("beforeSlideChangeStart"),a.updateProgress(g);let x;l>u?x="next":l0?(a._cssModeVirtualInitialSet=!0,requestAnimationFrame(()=>{p[C?"scrollLeft":"scrollTop"]=S})):p[C?"scrollLeft":"scrollTop"]=S,y&&requestAnimationFrame(()=>{a.wrapperEl.style.scrollSnapType="",a._immediateVirtual=!1});else{if(!a.support.smoothScroll)return Es({swiper:a,targetPosition:S,side:C?"left":"top"}),!0;p.scrollTo({[C?"left":"top"]:S,behavior:"smooth"})}return!0}const M=Ms().isSafari;return y&&!r&&M&&a.isElement&&a.virtual.update(!1,!1,l),a.setTransition(e),a.setTranslate(g),a.updateActiveIndex(l),a.updateSlidesClasses(),a.emit("beforeTransitionStart",e,i),a.transitionStart(t,x),e===0?a.transitionEnd(t,x):a.animating||(a.animating=!0,a.onSlideToWrapperTransitionEnd||(a.onSlideToWrapperTransitionEnd=function(S){!a||a.destroyed||S.target===this&&(a.wrapperEl.removeEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.onSlideToWrapperTransitionEnd=null,delete a.onSlideToWrapperTransitionEnd,a.transitionEnd(t,x))}),a.wrapperEl.addEventListener("transitionend",a.onSlideToWrapperTransitionEnd)),!0}function Oa(n,e,t,i){n===void 0&&(n=0),t===void 0&&(t=!0),typeof n=="string"&&(n=parseInt(n,10));const r=this;if(r.destroyed)return;typeof e>"u"&&(e=r.params.speed);const a=r.grid&&r.params.grid&&r.params.grid.rows>1;let l=n;if(r.params.loop)if(r.virtual&&r.params.virtual.enabled)l=l+r.virtual.slidesBefore;else{let o;if(a){const m=l*r.params.grid.rows;o=r.slides.find(p=>p.getAttribute("data-swiper-slide-index")*1===m).column}else o=r.getSlideIndexByData(l);const c=a?Math.ceil(r.slides.length/r.params.grid.rows):r.slides.length,{centeredSlides:d}=r.params;let h=r.params.slidesPerView;h==="auto"?h=r.slidesPerViewDynamic():(h=Math.ceil(parseFloat(r.params.slidesPerView,10)),d&&h%2===0&&(h=h+1));let u=c-op.getAttribute("data-swiper-slide-index")*1===m).column}else l=r.getSlideIndexByData(l)}return requestAnimationFrame(()=>{r.slideTo(l,e,t,i)}),r}function Ia(n,e,t){e===void 0&&(e=!0);const i=this,{enabled:r,params:a,animating:l}=i;if(!r||i.destroyed)return i;typeof n>"u"&&(n=i.params.speed);let o=a.slidesPerGroup;a.slidesPerView==="auto"&&a.slidesPerGroup===1&&a.slidesPerGroupAuto&&(o=Math.max(i.slidesPerViewDynamic("current",!0),1));const c=i.activeIndex{i.slideTo(i.activeIndex+c,n,e,t)}),!0}return a.rewind&&i.isEnd?i.slideTo(0,n,e,t):i.slideTo(i.activeIndex+c,n,e,t)}function Da(n,e,t){e===void 0&&(e=!0);const i=this,{params:r,snapGrid:a,slidesGrid:l,rtlTranslate:o,enabled:c,animating:d}=i;if(!c||i.destroyed)return i;typeof n>"u"&&(n=i.params.speed);const h=i.virtual&&r.virtual.enabled;if(r.loop){if(d&&!h&&r.loopPreventsSliding)return!1;i.loopFix({direction:"prev"}),i._clientLeft=i.wrapperEl.clientLeft}const u=o?i.translate:-i.translate;function m(x){return x<0?-Math.floor(Math.abs(x)):Math.floor(x)}const p=m(u),f=a.map(x=>m(x)),v=r.freeMode&&r.freeMode.enabled;let b=a[f.indexOf(p)-1];if(typeof b>"u"&&(r.cssMode||v)){let x;a.forEach((y,w)=>{p>=y&&(x=w)}),typeof x<"u"&&(b=v?a[x]:a[x>0?x-1:x])}let g=0;if(typeof b<"u"&&(g=l.indexOf(b),g<0&&(g=i.activeIndex-1),r.slidesPerView==="auto"&&r.slidesPerGroup===1&&r.slidesPerGroupAuto&&(g=g-i.slidesPerViewDynamic("previous",!0)+1,g=Math.max(g,0))),r.rewind&&i.isBeginning){const x=i.params.virtual&&i.params.virtual.enabled&&i.virtual?i.virtual.slides.length-1:i.slides.length-1;return i.slideTo(x,n,e,t)}else if(r.loop&&i.activeIndex===0&&r.cssMode)return requestAnimationFrame(()=>{i.slideTo(g,n,e,t)}),!0;return i.slideTo(g,n,e,t)}function za(n,e,t){e===void 0&&(e=!0);const i=this;if(!i.destroyed)return typeof n>"u"&&(n=i.params.speed),i.slideTo(i.activeIndex,n,e,t)}function Ra(n,e,t,i){e===void 0&&(e=!0),i===void 0&&(i=.5);const r=this;if(r.destroyed)return;typeof n>"u"&&(n=r.params.speed);let a=r.activeIndex;const l=Math.min(r.params.slidesPerGroupSkip,a),o=l+Math.floor((a-l)/r.params.slidesPerGroup),c=r.rtlTranslate?r.translate:-r.translate;if(c>=r.snapGrid[o]){const d=r.snapGrid[o],h=r.snapGrid[o+1];c-d>(h-d)*i&&(a+=r.params.slidesPerGroup)}else{const d=r.snapGrid[o-1],h=r.snapGrid[o];c-d<=(h-d)*i&&(a-=r.params.slidesPerGroup)}return a=Math.max(a,0),a=Math.min(a,r.slidesGrid.length-1),r.slideTo(a,n,e,t)}function ja(){const n=this;if(n.destroyed)return;const{params:e,slidesEl:t}=n,i=e.slidesPerView==="auto"?n.slidesPerViewDynamic():e.slidesPerView;let r=n.clickedIndex,a;const l=n.isElement?"swiper-slide":`.${e.slideClass}`;if(e.loop){if(n.animating)return;a=parseInt(n.clickedSlide.getAttribute("data-swiper-slide-index"),10),e.centeredSlides?rn.slides.length-n.loopedSlides+i/2?(n.loopFix(),r=n.getSlideIndex(ce(t,`${l}[data-swiper-slide-index="${a}"]`)[0]),Ti(()=>{n.slideTo(r)})):n.slideTo(r):r>n.slides.length-i?(n.loopFix(),r=n.getSlideIndex(ce(t,`${l}[data-swiper-slide-index="${a}"]`)[0]),Ti(()=>{n.slideTo(r)})):n.slideTo(r)}else n.slideTo(r)}var Fa={slideTo:Aa,slideToLoop:Oa,slideNext:Ia,slidePrev:Da,slideReset:za,slideToClosest:Ra,slideToClickedSlide:ja};function Ba(n,e){const t=this,{params:i,slidesEl:r}=t;if(!i.loop||t.virtual&&t.params.virtual.enabled)return;const a=()=>{ce(r,`.${i.slideClass}, swiper-slide`).forEach((m,p)=>{m.setAttribute("data-swiper-slide-index",p)})},l=t.grid&&i.grid&&i.grid.rows>1,o=i.slidesPerGroup*(l?i.grid.rows:1),c=t.slides.length%o!==0,d=l&&t.slides.length%i.grid.rows!==0,h=u=>{for(let m=0;m1;h.length"u"?a=d.getSlideIndex(h.find(I=>I.classList.contains(f.slideActiveClass))):N=a;const E=i==="next"||!i,P=i==="prev"||!i;let L=0,O=0;const te=(w?h[a].column:a)+(v&&typeof r>"u"?-g/2+.5:0);if(te=0;F-=1)h[F].column===q&&_.push(F)}else _.push(C-V-1)}}else if(te+g>C-y){O=Math.max(te-(C-y*2),x),S&&(O=Math.max(O,g-C+b+1));for(let I=0;I{q.column===V&&M.push(F)}):M.push(V)}}if(d.__preventObserver__=!0,requestAnimationFrame(()=>{d.__preventObserver__=!1}),d.params.effect==="cards"&&h.length{h[I].swiperLoopMoveDOM=!0,p.prepend(h[I]),h[I].swiperLoopMoveDOM=!1}),E&&M.forEach(I=>{h[I].swiperLoopMoveDOM=!0,p.append(h[I]),h[I].swiperLoopMoveDOM=!1}),d.recalcSlides(),f.slidesPerView==="auto"?d.updateSlides():w&&(_.length>0&&P||M.length>0&&E)&&d.slides.forEach((I,V)=>{d.grid.updateSlide(V,I,d.slides)}),f.watchSlidesProgress&&d.updateSlidesOffset(),t){if(_.length>0&&P){if(typeof e>"u"){const I=d.slidesGrid[N],q=d.slidesGrid[N+L]-I;c?d.setTranslate(d.translate-q):(d.slideTo(N+Math.ceil(L),0,!1,!0),r&&(d.touchEventsData.startTranslate=d.touchEventsData.startTranslate-q,d.touchEventsData.currentTranslate=d.touchEventsData.currentTranslate-q))}else if(r){const I=w?_.length/f.grid.rows:_.length;d.slideTo(d.activeIndex+I,0,!1,!0),d.touchEventsData.currentTranslate=d.translate}}else if(M.length>0&&E)if(typeof e>"u"){const I=d.slidesGrid[N],q=d.slidesGrid[N-O]-I;c?d.setTranslate(d.translate-q):(d.slideTo(N-O,0,!1,!0),r&&(d.touchEventsData.startTranslate=d.touchEventsData.startTranslate-q,d.touchEventsData.currentTranslate=d.touchEventsData.currentTranslate-q))}else{const I=w?M.length/f.grid.rows:M.length;d.slideTo(d.activeIndex-I,0,!1,!0)}}if(d.allowSlidePrev=u,d.allowSlideNext=m,d.controller&&d.controller.control&&!o){const I={slideRealIndex:e,direction:i,setTranslate:r,activeSlideIndex:a,byController:!0};Array.isArray(d.controller.control)?d.controller.control.forEach(V=>{!V.destroyed&&V.params.loop&&V.loopFix({...I,slideTo:V.params.slidesPerView===f.slidesPerView?t:!1})}):d.controller.control instanceof d.constructor&&d.controller.control.params.loop&&d.controller.control.loopFix({...I,slideTo:d.controller.control.params.slidesPerView===f.slidesPerView?t:!1})}d.emit("loopFix")}function $a(){const n=this,{params:e,slidesEl:t}=n;if(!e.loop||!t||n.virtual&&n.params.virtual.enabled)return;n.recalcSlides();const i=[];n.slides.forEach(r=>{const a=typeof r.swiperSlideIndex>"u"?r.getAttribute("data-swiper-slide-index")*1:r.swiperSlideIndex;i[a]=r}),n.slides.forEach(r=>{r.removeAttribute("data-swiper-slide-index")}),i.forEach(r=>{t.append(r)}),n.recalcSlides(),n.slideTo(n.realIndex,0)}var Ga={loopCreate:Ba,loopFix:Ha,loopDestroy:$a};function Va(n){const e=this;if(!e.params.simulateTouch||e.params.watchOverflow&&e.isLocked||e.params.cssMode)return;const t=e.params.touchEventsTarget==="container"?e.el:e.wrapperEl;e.isElement&&(e.__preventObserver__=!0),t.style.cursor="move",t.style.cursor=n?"grabbing":"grab",e.isElement&&requestAnimationFrame(()=>{e.__preventObserver__=!1})}function Wa(){const n=this;n.params.watchOverflow&&n.isLocked||n.params.cssMode||(n.isElement&&(n.__preventObserver__=!0),n[n.params.touchEventsTarget==="container"?"el":"wrapperEl"].style.cursor="",n.isElement&&requestAnimationFrame(()=>{n.__preventObserver__=!1}))}var Xa={setGrabCursor:Va,unsetGrabCursor:Wa};function qa(n,e){e===void 0&&(e=this);function t(i){if(!i||i===Ee()||i===J())return null;i.assignedSlot&&(i=i.assignedSlot);const r=i.closest(n);return!r&&!i.getRootNode?null:r||t(i.getRootNode().host)}return t(e)}function gn(n,e,t){const i=J(),{params:r}=n,a=r.edgeSwipeDetection,l=r.edgeSwipeThreshold;return a&&(t<=l||t>=i.innerWidth-l)?a==="prevent"?(e.preventDefault(),!0):!1:!0}function Ya(n){const e=this,t=Ee();let i=n;i.originalEvent&&(i=i.originalEvent);const r=e.touchEventsData;if(i.type==="pointerdown"){if(r.pointerId!==null&&r.pointerId!==i.pointerId)return;r.pointerId=i.pointerId}else i.type==="touchstart"&&i.targetTouches.length===1&&(r.touchId=i.targetTouches[0].identifier);if(i.type==="touchstart"){gn(e,i,i.targetTouches[0].pageX);return}const{params:a,touches:l,enabled:o}=e;if(!o||!a.simulateTouch&&i.pointerType==="mouse"||e.animating&&a.preventInteractionOnTransition)return;!e.animating&&a.cssMode&&a.loop&&e.loopFix();let c=i.target;if(a.touchEventsTarget==="wrapper"&&!ta(c,e.wrapperEl)||"which"in i&&i.which===3||"button"in i&&i.button>0||r.isTouched&&r.isMoved)return;const d=!!a.noSwipingClass&&a.noSwipingClass!=="",h=i.composedPath?i.composedPath():i.path;d&&i.target&&i.target.shadowRoot&&h&&(c=h[0]);const u=a.noSwipingSelector?a.noSwipingSelector:`.${a.noSwipingClass}`,m=!!(i.target&&i.target.shadowRoot);if(a.noSwiping&&(m?qa(u,c):c.closest(u))){e.allowClick=!0;return}if(a.swipeHandler&&!c.closest(a.swipeHandler))return;l.currentX=i.pageX,l.currentY=i.pageY;const p=l.currentX,f=l.currentY;if(!gn(e,i,p))return;Object.assign(r,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),l.startX=p,l.startY=f,r.touchStartTime=De(),e.allowClick=!0,e.updateSize(),e.swipeDirection=void 0,a.threshold>0&&(r.allowThresholdMove=!1);let v=!0;c.matches(r.focusableElements)&&(v=!1,c.nodeName==="SELECT"&&(r.isTouched=!1)),t.activeElement&&t.activeElement.matches(r.focusableElements)&&t.activeElement!==c&&(i.pointerType==="mouse"||i.pointerType!=="mouse"&&!c.matches(r.focusableElements))&&t.activeElement.blur();const b=v&&e.allowTouchMove&&a.touchStartPreventDefault;(a.touchStartForcePreventDefault||b)&&!c.isContentEditable&&i.preventDefault(),a.freeMode&&a.freeMode.enabled&&e.freeMode&&e.animating&&!a.cssMode&&e.freeMode.onTouchStart(),e.emit("touchStart",i)}function Ua(n){const e=Ee(),t=this,i=t.touchEventsData,{params:r,touches:a,rtlTranslate:l,enabled:o}=t;if(!o||!r.simulateTouch&&n.pointerType==="mouse")return;let c=n;if(c.originalEvent&&(c=c.originalEvent),c.type==="pointermove"&&(i.touchId!==null||c.pointerId!==i.pointerId))return;let d;if(c.type==="touchmove"){if(d=[...c.changedTouches].find(_=>_.identifier===i.touchId),!d||d.identifier!==i.touchId)return}else d=c;if(!i.isTouched){i.startMoving&&i.isScrolling&&t.emit("touchMoveOpposite",c);return}const h=d.pageX,u=d.pageY;if(c.preventedByNestedSwiper){a.startX=h,a.startY=u;return}if(!t.allowTouchMove){c.target.matches(i.focusableElements)||(t.allowClick=!1),i.isTouched&&(Object.assign(a,{startX:h,startY:u,currentX:h,currentY:u}),i.touchStartTime=De());return}if(r.touchReleaseOnEdges&&!r.loop)if(t.isVertical()){if(ua.startY&&t.translate>=t.minTranslate()){i.isTouched=!1,i.isMoved=!1;return}}else{if(l&&(h>a.startX&&-t.translate<=t.maxTranslate()||h=t.minTranslate()))return;if(!l&&(ha.startX&&t.translate>=t.minTranslate()))return}if(e.activeElement&&e.activeElement.matches(i.focusableElements)&&e.activeElement!==c.target&&c.pointerType!=="mouse"&&e.activeElement.blur(),e.activeElement&&c.target===e.activeElement&&c.target.matches(i.focusableElements)){i.isMoved=!0,t.allowClick=!1;return}i.allowTouchCallbacks&&t.emit("touchMove",c),a.previousX=a.currentX,a.previousY=a.currentY,a.currentX=h,a.currentY=u;const m=a.currentX-a.startX,p=a.currentY-a.startY;if(t.params.threshold&&Math.sqrt(m**2+p**2)"u"){let _;t.isHorizontal()&&a.currentY===a.startY||t.isVertical()&&a.currentX===a.startX?i.isScrolling=!1:m*m+p*p>=25&&(_=Math.atan2(Math.abs(p),Math.abs(m))*180/Math.PI,i.isScrolling=t.isHorizontal()?_>r.touchAngle:90-_>r.touchAngle)}if(i.isScrolling&&t.emit("touchMoveOpposite",c),typeof i.startMoving>"u"&&(a.currentX!==a.startX||a.currentY!==a.startY)&&(i.startMoving=!0),i.isScrolling||c.type==="touchmove"&&i.preventTouchMoveFromPointerMove){i.isTouched=!1;return}if(!i.startMoving)return;t.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation();let f=t.isHorizontal()?m:p,v=t.isHorizontal()?a.currentX-a.previousX:a.currentY-a.previousY;r.oneWayMovement&&(f=Math.abs(f)*(l?1:-1),v=Math.abs(v)*(l?1:-1)),a.diff=f,f*=r.touchRatio,l&&(f=-f,v=-v);const b=t.touchesDirection;t.swipeDirection=f>0?"prev":"next",t.touchesDirection=v>0?"prev":"next";const g=t.params.loop&&!r.cssMode,x=t.touchesDirection==="next"&&t.allowSlideNext||t.touchesDirection==="prev"&&t.allowSlidePrev;if(!i.isMoved){if(g&&x&&t.loopFix({direction:t.swipeDirection}),i.startTranslate=t.getTranslate(),t.setTransition(0),t.animating){const _=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});t.wrapperEl.dispatchEvent(_)}i.allowMomentumBounce=!1,r.grabCursor&&(t.allowSlideNext===!0||t.allowSlidePrev===!0)&&t.setGrabCursor(!0),t.emit("sliderFirstMove",c)}if(new Date().getTime(),r._loopSwapReset!==!1&&i.isMoved&&i.allowThresholdMove&&b!==t.touchesDirection&&g&&x&&Math.abs(f)>=1){Object.assign(a,{startX:h,startY:u,currentX:h,currentY:u,startTranslate:i.currentTranslate}),i.loopSwapReset=!0,i.startTranslate=i.currentTranslate;return}t.emit("sliderMove",c),i.isMoved=!0,i.currentTranslate=f+i.startTranslate;let y=!0,w=r.resistanceRatio;if(r.touchReleaseOnEdges&&(w=0),f>0?(g&&x&&i.allowThresholdMove&&i.currentTranslate>(r.centeredSlides?t.minTranslate()-t.slidesSizesGrid[t.activeIndex+1]-(r.slidesPerView!=="auto"&&t.slides.length-r.slidesPerView>=2?t.slidesSizesGrid[t.activeIndex+1]+t.params.spaceBetween:0)-t.params.spaceBetween:t.minTranslate())&&t.loopFix({direction:"prev",setTranslate:!0,activeSlideIndex:0}),i.currentTranslate>t.minTranslate()&&(y=!1,r.resistance&&(i.currentTranslate=t.minTranslate()-1+(-t.minTranslate()+i.startTranslate+f)**w))):f<0&&(g&&x&&i.allowThresholdMove&&i.currentTranslate<(r.centeredSlides?t.maxTranslate()+t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween+(r.slidesPerView!=="auto"&&t.slides.length-r.slidesPerView>=2?t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween:0):t.maxTranslate())&&t.loopFix({direction:"next",setTranslate:!0,activeSlideIndex:t.slides.length-(r.slidesPerView==="auto"?t.slidesPerViewDynamic():Math.ceil(parseFloat(r.slidesPerView,10)))}),i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),!t.allowSlidePrev&&!t.allowSlideNext&&(i.currentTranslate=i.startTranslate),r.threshold>0)if(Math.abs(f)>r.threshold||i.allowThresholdMove){if(!i.allowThresholdMove){i.allowThresholdMove=!0,a.startX=a.currentX,a.startY=a.currentY,i.currentTranslate=i.startTranslate,a.diff=t.isHorizontal()?a.currentX-a.startX:a.currentY-a.startY;return}}else{i.currentTranslate=i.startTranslate;return}!r.followFinger||r.cssMode||((r.freeMode&&r.freeMode.enabled&&t.freeMode||r.watchSlidesProgress)&&(t.updateActiveIndex(),t.updateSlidesClasses()),r.freeMode&&r.freeMode.enabled&&t.freeMode&&t.freeMode.onTouchMove(),t.updateProgress(i.currentTranslate),t.setTranslate(i.currentTranslate))}function Za(n){const e=this,t=e.touchEventsData;let i=n;i.originalEvent&&(i=i.originalEvent);let r;if(i.type==="touchend"||i.type==="touchcancel"){if(r=[...i.changedTouches].find(_=>_.identifier===t.touchId),!r||r.identifier!==t.touchId)return}else{if(t.touchId!==null||i.pointerId!==t.pointerId)return;r=i}if(["pointercancel","pointerout","pointerleave","contextmenu"].includes(i.type)&&!(["pointercancel","contextmenu"].includes(i.type)&&(e.browser.isSafari||e.browser.isWebView)))return;t.pointerId=null,t.touchId=null;const{params:l,touches:o,rtlTranslate:c,slidesGrid:d,enabled:h}=e;if(!h||!l.simulateTouch&&i.pointerType==="mouse")return;if(t.allowTouchCallbacks&&e.emit("touchEnd",i),t.allowTouchCallbacks=!1,!t.isTouched){t.isMoved&&l.grabCursor&&e.setGrabCursor(!1),t.isMoved=!1,t.startMoving=!1;return}l.grabCursor&&t.isMoved&&t.isTouched&&(e.allowSlideNext===!0||e.allowSlidePrev===!0)&&e.setGrabCursor(!1);const u=De(),m=u-t.touchStartTime;if(e.allowClick){const _=i.path||i.composedPath&&i.composedPath();e.updateClickedSlide(_&&_[0]||i.target,_),e.emit("tap click",i),m<300&&u-t.lastClickTime<300&&e.emit("doubleTap doubleClick",i)}if(t.lastClickTime=De(),Ti(()=>{e.destroyed||(e.allowClick=!0)}),!t.isTouched||!t.isMoved||!e.swipeDirection||o.diff===0&&!t.loopSwapReset||t.currentTranslate===t.startTranslate&&!t.loopSwapReset){t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;return}t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;let p;if(l.followFinger?p=c?e.translate:-e.translate:p=-t.currentTranslate,l.cssMode)return;if(l.freeMode&&l.freeMode.enabled){e.freeMode.onTouchEnd({currentPos:p});return}const f=p>=-e.maxTranslate()&&!e.params.loop;let v=0,b=e.slidesSizesGrid[0];for(let _=0;_=d[_]&&p=d[_])&&(v=_,b=d[d.length-1]-d[d.length-2])}let g=null,x=null;l.rewind&&(e.isBeginning?x=l.virtual&&l.virtual.enabled&&e.virtual?e.virtual.slides.length-1:e.slides.length-1:e.isEnd&&(g=0));const y=(p-d[v])/b,w=vl.longSwipesMs){if(!l.longSwipes){e.slideTo(e.activeIndex);return}e.swipeDirection==="next"&&(y>=l.longSwipesRatio?e.slideTo(l.rewind&&e.isEnd?g:v+w):e.slideTo(v)),e.swipeDirection==="prev"&&(y>1-l.longSwipesRatio?e.slideTo(v+w):x!==null&&y<0&&Math.abs(y)>l.longSwipesRatio?e.slideTo(x):e.slideTo(v))}else{if(!l.shortSwipes){e.slideTo(e.activeIndex);return}e.navigation&&(i.target===e.navigation.nextEl||i.target===e.navigation.prevEl)?i.target===e.navigation.nextEl?e.slideTo(v+w):e.slideTo(v):(e.swipeDirection==="next"&&e.slideTo(g!==null?g:v+w),e.swipeDirection==="prev"&&e.slideTo(x!==null?x:v))}}function vn(){const n=this,{params:e,el:t}=n;if(t&&t.offsetWidth===0)return;e.breakpoints&&n.setBreakpoint();const{allowSlideNext:i,allowSlidePrev:r,snapGrid:a}=n,l=n.virtual&&n.params.virtual.enabled;n.allowSlideNext=!0,n.allowSlidePrev=!0,n.updateSize(),n.updateSlides(),n.updateSlidesClasses();const o=l&&e.loop;(e.slidesPerView==="auto"||e.slidesPerView>1)&&n.isEnd&&!n.isBeginning&&!n.params.centeredSlides&&!o?n.slideTo(n.slides.length-1,0,!1,!0):n.params.loop&&!l?n.slideToLoop(n.realIndex,0,!1,!0):n.slideTo(n.activeIndex,0,!1,!0),n.autoplay&&n.autoplay.running&&n.autoplay.paused&&(clearTimeout(n.autoplay.resizeTimeout),n.autoplay.resizeTimeout=setTimeout(()=>{n.autoplay&&n.autoplay.running&&n.autoplay.paused&&n.autoplay.resume()},500)),n.allowSlidePrev=r,n.allowSlideNext=i,n.params.watchOverflow&&a!==n.snapGrid&&n.checkOverflow()}function Ka(n){const e=this;e.enabled&&(e.allowClick||(e.params.preventClicks&&n.preventDefault(),e.params.preventClicksPropagation&&e.animating&&(n.stopPropagation(),n.stopImmediatePropagation())))}function Ja(){const n=this,{wrapperEl:e,rtlTranslate:t,enabled:i}=n;if(!i)return;n.previousTranslate=n.translate,n.isHorizontal()?n.translate=-e.scrollLeft:n.translate=-e.scrollTop,n.translate===0&&(n.translate=0),n.updateActiveIndex(),n.updateSlidesClasses();let r;const a=n.maxTranslate()-n.minTranslate();a===0?r=0:r=(n.translate-n.minTranslate())/a,r!==n.progress&&n.updateProgress(t?-n.translate:n.translate),n.emit("setTranslate",n.translate,!1)}function Qa(n){const e=this;Dt(e,n.target),!(e.params.cssMode||e.params.slidesPerView!=="auto"&&!e.params.autoHeight)&&e.update()}function el(){const n=this;n.documentTouchHandlerProceeded||(n.documentTouchHandlerProceeded=!0,n.params.touchReleaseOnEdges&&(n.el.style.touchAction="auto"))}const Ls=(n,e)=>{const t=Ee(),{params:i,el:r,wrapperEl:a,device:l}=n,o=!!i.nested,c=e==="on"?"addEventListener":"removeEventListener",d=e;!r||typeof r=="string"||(t[c]("touchstart",n.onDocumentTouchStart,{passive:!1,capture:o}),r[c]("touchstart",n.onTouchStart,{passive:!1}),r[c]("pointerdown",n.onTouchStart,{passive:!1}),t[c]("touchmove",n.onTouchMove,{passive:!1,capture:o}),t[c]("pointermove",n.onTouchMove,{passive:!1,capture:o}),t[c]("touchend",n.onTouchEnd,{passive:!0}),t[c]("pointerup",n.onTouchEnd,{passive:!0}),t[c]("pointercancel",n.onTouchEnd,{passive:!0}),t[c]("touchcancel",n.onTouchEnd,{passive:!0}),t[c]("pointerout",n.onTouchEnd,{passive:!0}),t[c]("pointerleave",n.onTouchEnd,{passive:!0}),t[c]("contextmenu",n.onTouchEnd,{passive:!0}),(i.preventClicks||i.preventClicksPropagation)&&r[c]("click",n.onClick,!0),i.cssMode&&a[c]("scroll",n.onScroll),i.updateOnWindowResize?n[d](l.ios||l.android?"resize orientationchange observerUpdate":"resize observerUpdate",vn,!0):n[d]("observerUpdate",vn,!0),r[c]("load",n.onLoad,{capture:!0}))};function tl(){const n=this,{params:e}=n;n.onTouchStart=Ya.bind(n),n.onTouchMove=Ua.bind(n),n.onTouchEnd=Za.bind(n),n.onDocumentTouchStart=el.bind(n),e.cssMode&&(n.onScroll=Ja.bind(n)),n.onClick=Ka.bind(n),n.onLoad=Qa.bind(n),Ls(n,"on")}function il(){Ls(this,"off")}var nl={attachEvents:tl,detachEvents:il};const bn=(n,e)=>n.grid&&e.grid&&e.grid.rows>1;function sl(){const n=this,{realIndex:e,initialized:t,params:i,el:r}=n,a=i.breakpoints;if(!a||a&&Object.keys(a).length===0)return;const l=Ee(),o=i.breakpointsBase==="window"||!i.breakpointsBase?i.breakpointsBase:"container",c=["window","container"].includes(i.breakpointsBase)||!i.breakpointsBase?n.el:l.querySelector(i.breakpointsBase),d=n.getBreakpoint(a,o,c);if(!d||n.currentBreakpoint===d)return;const u=(d in a?a[d]:void 0)||n.originalParams,m=bn(n,i),p=bn(n,u),f=n.params.grabCursor,v=u.grabCursor,b=i.enabled;m&&!p?(r.classList.remove(`${i.containerModifierClass}grid`,`${i.containerModifierClass}grid-column`),n.emitContainerClasses()):!m&&p&&(r.classList.add(`${i.containerModifierClass}grid`),(u.grid.fill&&u.grid.fill==="column"||!u.grid.fill&&i.grid.fill==="column")&&r.classList.add(`${i.containerModifierClass}grid-column`),n.emitContainerClasses()),f&&!v?n.unsetGrabCursor():!f&&v&&n.setGrabCursor(),["navigation","pagination","scrollbar"].forEach(M=>{if(typeof u[M]>"u")return;const C=i[M]&&i[M].enabled,S=u[M]&&u[M].enabled;C&&!S&&n[M].disable(),!C&&S&&n[M].enable()});const g=u.direction&&u.direction!==i.direction,x=i.loop&&(u.slidesPerView!==i.slidesPerView||g),y=i.loop;g&&t&&n.changeDirection(),ie(n.params,u);const w=n.params.enabled,_=n.params.loop;Object.assign(n,{allowTouchMove:n.params.allowTouchMove,allowSlideNext:n.params.allowSlideNext,allowSlidePrev:n.params.allowSlidePrev}),b&&!w?n.disable():!b&&w&&n.enable(),n.currentBreakpoint=d,n.emit("_beforeBreakpoint",u),t&&(x?(n.loopDestroy(),n.loopCreate(e),n.updateSlides()):!y&&_?(n.loopCreate(e),n.updateSlides()):y&&!_&&n.loopDestroy()),n.emit("breakpoint",u)}function rl(n,e,t){if(e===void 0&&(e="window"),!n||e==="container"&&!t)return;let i=!1;const r=J(),a=e==="window"?r.innerHeight:t.clientHeight,l=Object.keys(n).map(o=>{if(typeof o=="string"&&o.indexOf("@")===0){const c=parseFloat(o.substr(1));return{value:a*c,point:o}}return{value:o,point:o}});l.sort((o,c)=>parseInt(o.value,10)-parseInt(c.value,10));for(let o=0;o{typeof i=="object"?Object.keys(i).forEach(r=>{i[r]&&t.push(e+r)}):typeof i=="string"&&t.push(e+i)}),t}function ol(){const n=this,{classNames:e,params:t,rtl:i,el:r,device:a}=n,l=ll(["initialized",t.direction,{"free-mode":n.params.freeMode&&t.freeMode.enabled},{autoheight:t.autoHeight},{rtl:i},{grid:t.grid&&t.grid.rows>1},{"grid-column":t.grid&&t.grid.rows>1&&t.grid.fill==="column"},{android:a.android},{ios:a.ios},{"css-mode":t.cssMode},{centered:t.cssMode&&t.centeredSlides},{"watch-progress":t.watchSlidesProgress}],t.containerModifierClass);e.push(...l),r.classList.add(...e),n.emitContainerClasses()}function cl(){const n=this,{el:e,classNames:t}=n;!e||typeof e=="string"||(e.classList.remove(...t),n.emitContainerClasses())}var dl={addClasses:ol,removeClasses:cl};function hl(){const n=this,{isLocked:e,params:t}=n,{slidesOffsetBefore:i}=t;if(i){const r=n.slides.length-1,a=n.slidesGrid[r]+n.slidesSizesGrid[r]+i*2;n.isLocked=n.size>a}else n.isLocked=n.snapGrid.length===1;t.allowSlideNext===!0&&(n.allowSlideNext=!n.isLocked),t.allowSlidePrev===!0&&(n.allowSlidePrev=!n.isLocked),e&&e!==n.isLocked&&(n.isEnd=!1),e!==n.isLocked&&n.emit(n.isLocked?"lock":"unlock")}var ul={checkOverflow:hl},Ci={init:!0,direction:"horizontal",oneWayMovement:!1,swiperElementNodeName:"SWIPER-CONTAINER",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:"swiper",enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-blank",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideFullyVisibleClass:"swiper-slide-fully-visible",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",lazyPreloaderClass:"swiper-lazy-preloader",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function pl(n,e){return function(i){i===void 0&&(i={});const r=Object.keys(i)[0],a=i[r];if(typeof a!="object"||a===null){ie(e,i);return}if(n[r]===!0&&(n[r]={enabled:!0}),r==="navigation"&&n[r]&&n[r].enabled&&!n[r].prevEl&&!n[r].nextEl&&(n[r].auto=!0),["pagination","scrollbar"].indexOf(r)>=0&&n[r]&&n[r].enabled&&!n[r].el&&(n[r].auto=!0),!(r in n&&"enabled"in a)){ie(e,i);return}typeof n[r]=="object"&&!("enabled"in n[r])&&(n[r].enabled=!0),n[r]||(n[r]={enabled:!1}),ie(e,i)}}const ei={eventsEmitter:da,update:wa,translate:Ca,transition:La,slide:Fa,loop:Ga,grabCursor:Xa,events:nl,breakpoints:al,checkOverflow:ul,classes:dl},ti={};let Fi=class ye{constructor(){let e,t;for(var i=arguments.length,r=new Array(i),a=0;a1){const h=[];return l.querySelectorAll(t.el).forEach(u=>{const m=ie({},t,{el:u});h.push(new ye(m))}),h}const o=this;o.__swiper__=!0,o.support=Cs(),o.device=Ps({userAgent:t.userAgent}),o.browser=Ms(),o.eventsListeners={},o.eventsAnyListeners=[],o.modules=[...o.__modules__],t.modules&&Array.isArray(t.modules)&&o.modules.push(...t.modules);const c={};o.modules.forEach(h=>{h({params:t,swiper:o,extendParams:pl(t,c),on:o.on.bind(o),once:o.once.bind(o),off:o.off.bind(o),emit:o.emit.bind(o)})});const d=ie({},Ci,c);return o.params=ie({},d,ti,t),o.originalParams=ie({},o.params),o.passedParams=ie({},t),o.params&&o.params.on&&Object.keys(o.params.on).forEach(h=>{o.on(h,o.params.on[h])}),o.params&&o.params.onAny&&o.onAny(o.params.onAny),Object.assign(o,{enabled:o.params.enabled,el:e,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return o.params.direction==="horizontal"},isVertical(){return o.params.direction==="vertical"},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate/2**23)*2**23},allowSlideNext:o.params.allowSlideNext,allowSlidePrev:o.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:o.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:o.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),o.emit("_swiper"),o.params.init&&o.init(),o}getDirectionLabel(e){return this.isHorizontal()?e:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[e]}getSlideIndex(e){const{slidesEl:t,params:i}=this,r=ce(t,`.${i.slideClass}, swiper-slide`),a=pn(r[0]);return pn(e)-a}getSlideIndexByData(e){return this.getSlideIndex(this.slides.find(t=>t.getAttribute("data-swiper-slide-index")*1===e))}recalcSlides(){const e=this,{slidesEl:t,params:i}=e;e.slides=ce(t,`.${i.slideClass}, swiper-slide`)}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const i=this;e=Math.min(Math.max(e,0),1);const r=i.minTranslate(),l=(i.maxTranslate()-r)*e+r;i.translateTo(l,typeof t>"u"?0:t),i.updateActiveIndex(),i.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter(i=>i.indexOf("swiper")===0||i.indexOf(e.params.containerModifierClass)===0);e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter(i=>i.indexOf("swiper-slide")===0||i.indexOf(t.params.slideClass)===0).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.forEach(i=>{const r=e.getSlideClasses(i);t.push({slideEl:i,classNames:r}),e.emit("_slideClass",i,r)}),e.emit("_slideClasses",t)}slidesPerViewDynamic(e,t){e===void 0&&(e="current"),t===void 0&&(t=!1);const i=this,{params:r,slides:a,slidesGrid:l,slidesSizesGrid:o,size:c,activeIndex:d}=i;let h=1;if(typeof r.slidesPerView=="number")return r.slidesPerView;if(r.centeredSlides){let u=a[d]?Math.ceil(a[d].swiperSlideSize):0,m;for(let p=d+1;pc&&(m=!0));for(let p=d-1;p>=0;p-=1)a[p]&&!m&&(u+=a[p].swiperSlideSize,h+=1,u>c&&(m=!0))}else if(e==="current")for(let u=d+1;u=0;u-=1)l[d]-l[u]{l.complete&&Dt(e,l)}),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses();function r(){const l=e.rtlTranslate?e.translate*-1:e.translate,o=Math.min(Math.max(l,e.maxTranslate()),e.minTranslate());e.setTranslate(o),e.updateActiveIndex(),e.updateSlidesClasses()}let a;if(i.freeMode&&i.freeMode.enabled&&!i.cssMode)r(),i.autoHeight&&e.updateAutoHeight();else{if((i.slidesPerView==="auto"||i.slidesPerView>1)&&e.isEnd&&!i.centeredSlides){const l=e.virtual&&i.virtual.enabled?e.virtual.slides:e.slides;a=e.slideTo(l.length-1,0,!1,!0)}else a=e.slideTo(e.activeIndex,0,!1,!0);a||r()}i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t){t===void 0&&(t=!0);const i=this,r=i.params.direction;return e||(e=r==="horizontal"?"vertical":"horizontal"),e===r||e!=="horizontal"&&e!=="vertical"||(i.el.classList.remove(`${i.params.containerModifierClass}${r}`),i.el.classList.add(`${i.params.containerModifierClass}${e}`),i.emitContainerClasses(),i.params.direction=e,i.slides.forEach(a=>{e==="vertical"?a.style.width="":a.style.height=""}),i.emit("changeDirection"),t&&i.update()),i}changeLanguageDirection(e){const t=this;t.rtl&&e==="rtl"||!t.rtl&&e==="ltr"||(t.rtl=e==="rtl",t.rtlTranslate=t.params.direction==="horizontal"&&t.rtl,t.rtl?(t.el.classList.add(`${t.params.containerModifierClass}rtl`),t.el.dir="rtl"):(t.el.classList.remove(`${t.params.containerModifierClass}rtl`),t.el.dir="ltr"),t.update())}mount(e){const t=this;if(t.mounted)return!0;let i=e||t.params.el;if(typeof i=="string"&&(i=document.querySelector(i)),!i)return!1;i.swiper=t,i.parentNode&&i.parentNode.host&&i.parentNode.host.nodeName===t.params.swiperElementNodeName.toUpperCase()&&(t.isElement=!0);const r=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let l=i&&i.shadowRoot&&i.shadowRoot.querySelector?i.shadowRoot.querySelector(r()):ce(i,r())[0];return!l&&t.params.createElements&&(l=jt("div",t.params.wrapperClass),i.append(l),ce(i,`.${t.params.slideClass}`).forEach(o=>{l.append(o)})),Object.assign(t,{el:i,wrapperEl:l,slidesEl:t.isElement&&!i.parentNode.host.slideSlots?i.parentNode.host:l,hostEl:t.isElement?i.parentNode.host:i,mounted:!0,rtl:i.dir.toLowerCase()==="rtl"||_e(i,"direction")==="rtl",rtlTranslate:t.params.direction==="horizontal"&&(i.dir.toLowerCase()==="rtl"||_e(i,"direction")==="rtl"),wrongRTL:_e(l,"display")==="-webkit-box"}),!0}init(e){const t=this;if(t.initialized||t.mount(e)===!1)return t;t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.loop&&t.virtual&&t.params.virtual.enabled?t.slideTo(t.params.initialSlide+t.virtual.slidesBefore,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.params.loop&&t.loopCreate(void 0,!0),t.attachEvents();const r=[...t.el.querySelectorAll('[loading="lazy"]')];return t.isElement&&r.push(...t.hostEl.querySelectorAll('[loading="lazy"]')),r.forEach(a=>{a.complete?Dt(t,a):a.addEventListener("load",l=>{Dt(t,l.target)})}),Ei(t),t.initialized=!0,Ei(t),t.emit("init"),t.emit("afterInit"),t}destroy(e,t){e===void 0&&(e=!0),t===void 0&&(t=!0);const i=this,{params:r,el:a,wrapperEl:l,slides:o}=i;return typeof i.params>"u"||i.destroyed||(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),r.loop&&i.loopDestroy(),t&&(i.removeClasses(),a&&typeof a!="string"&&a.removeAttribute("style"),l&&l.removeAttribute("style"),o&&o.length&&o.forEach(c=>{c.classList.remove(r.slideVisibleClass,r.slideFullyVisibleClass,r.slideActiveClass,r.slideNextClass,r.slidePrevClass),c.removeAttribute("style"),c.removeAttribute("data-swiper-slide-index")})),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(c=>{i.off(c)}),e!==!1&&(i.el&&typeof i.el!="string"&&(i.el.swiper=null),Zr(i)),i.destroyed=!0),null}static extendDefaults(e){ie(ti,e)}static get extendedDefaults(){return ti}static get defaults(){return Ci}static installModule(e){ye.prototype.__modules__||(ye.prototype.__modules__=[]);const t=ye.prototype.__modules__;typeof e=="function"&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach(t=>ye.installModule(t)),ye):(ye.installModule(e),ye)}};Object.keys(ei).forEach(n=>{Object.keys(ei[n]).forEach(e=>{Fi.prototype[e]=ei[n][e]})});Fi.use([oa,ca]);const As=["eventsPrefix","injectStyles","injectStylesUrls","modules","init","_direction","oneWayMovement","swiperElementNodeName","touchEventsTarget","initialSlide","_speed","cssMode","updateOnWindowResize","resizeObserver","nested","focusableElements","_enabled","_width","_height","preventInteractionOnTransition","userAgent","url","_edgeSwipeDetection","_edgeSwipeThreshold","_freeMode","_autoHeight","setWrapperSize","virtualTranslate","_effect","breakpoints","breakpointsBase","_spaceBetween","_slidesPerView","maxBackfaceHiddenSlides","_grid","_slidesPerGroup","_slidesPerGroupSkip","_slidesPerGroupAuto","_centeredSlides","_centeredSlidesBounds","_slidesOffsetBefore","_slidesOffsetAfter","normalizeSlideIndex","_centerInsufficientSlides","_watchOverflow","roundLengths","touchRatio","touchAngle","simulateTouch","_shortSwipes","_longSwipes","longSwipesRatio","longSwipesMs","_followFinger","allowTouchMove","_threshold","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","_resistance","_resistanceRatio","_watchSlidesProgress","_grabCursor","preventClicks","preventClicksPropagation","_slideToClickedSlide","_loop","loopAdditionalSlides","loopAddBlankSlides","loopPreventsSliding","_rewind","_allowSlidePrev","_allowSlideNext","_swipeHandler","_noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","containerModifierClass","slideClass","slideActiveClass","slideVisibleClass","slideFullyVisibleClass","slideNextClass","slidePrevClass","slideBlankClass","wrapperClass","lazyPreloaderClass","lazyPreloadPrevNext","runCallbacksOnInit","observer","observeParents","observeSlideChildren","a11y","_autoplay","_controller","coverflowEffect","cubeEffect","fadeEffect","flipEffect","creativeEffect","cardsEffect","hashNavigation","history","keyboard","mousewheel","_navigation","_pagination","parallax","_scrollbar","_thumbs","virtual","zoom","control"];function je(n){return typeof n=="object"&&n!==null&&n.constructor&&Object.prototype.toString.call(n).slice(8,-1)==="Object"&&!n.__swiper__}function Ue(n,e){const t=["__proto__","constructor","prototype"];Object.keys(e).filter(i=>t.indexOf(i)<0).forEach(i=>{typeof n[i]>"u"?n[i]=e[i]:je(e[i])&&je(n[i])&&Object.keys(e[i]).length>0?e[i].__swiper__?n[i]=e[i]:Ue(n[i],e[i]):n[i]=e[i]})}function Os(n){return n===void 0&&(n={}),n.navigation&&typeof n.navigation.nextEl>"u"&&typeof n.navigation.prevEl>"u"}function Is(n){return n===void 0&&(n={}),n.pagination&&typeof n.pagination.el>"u"}function Ds(n){return n===void 0&&(n={}),n.scrollbar&&typeof n.scrollbar.el>"u"}function zs(n){n===void 0&&(n="");const e=n.split(" ").map(i=>i.trim()).filter(i=>!!i),t=[];return e.forEach(i=>{t.indexOf(i)<0&&t.push(i)}),t.join(" ")}function ml(n){return n===void 0&&(n=""),n?n.includes("swiper-wrapper")?n:`swiper-wrapper ${n}`:"swiper-wrapper"}function fl(n){let{swiper:e,slides:t,passedParams:i,changedParams:r,nextEl:a,prevEl:l,scrollbarEl:o,paginationEl:c}=n;const d=r.filter(N=>N!=="children"&&N!=="direction"&&N!=="wrapperClass"),{params:h,pagination:u,navigation:m,scrollbar:p,virtual:f,thumbs:v}=e;let b,g,x,y,w,_,M,C;r.includes("thumbs")&&i.thumbs&&i.thumbs.swiper&&!i.thumbs.swiper.destroyed&&h.thumbs&&(!h.thumbs.swiper||h.thumbs.swiper.destroyed)&&(b=!0),r.includes("controller")&&i.controller&&i.controller.control&&h.controller&&!h.controller.control&&(g=!0),r.includes("pagination")&&i.pagination&&(i.pagination.el||c)&&(h.pagination||h.pagination===!1)&&u&&!u.el&&(x=!0),r.includes("scrollbar")&&i.scrollbar&&(i.scrollbar.el||o)&&(h.scrollbar||h.scrollbar===!1)&&p&&!p.el&&(y=!0),r.includes("navigation")&&i.navigation&&(i.navigation.prevEl||l)&&(i.navigation.nextEl||a)&&(h.navigation||h.navigation===!1)&&m&&!m.prevEl&&!m.nextEl&&(w=!0);const S=N=>{e[N]&&(e[N].destroy(),N==="navigation"?(e.isElement&&(e[N].prevEl.remove(),e[N].nextEl.remove()),h[N].prevEl=void 0,h[N].nextEl=void 0,e[N].prevEl=void 0,e[N].nextEl=void 0):(e.isElement&&e[N].el.remove(),h[N].el=void 0,e[N].el=void 0))};r.includes("loop")&&e.isElement&&(h.loop&&!i.loop?_=!0:!h.loop&&i.loop?M=!0:C=!0),d.forEach(N=>{if(je(h[N])&&je(i[N]))Object.assign(h[N],i[N]),(N==="navigation"||N==="pagination"||N==="scrollbar")&&"enabled"in i[N]&&!i[N].enabled&&S(N);else{const E=i[N];(E===!0||E===!1)&&(N==="navigation"||N==="pagination"||N==="scrollbar")?E===!1&&S(N):h[N]=i[N]}}),d.includes("controller")&&!g&&e.controller&&e.controller.control&&h.controller&&h.controller.control&&(e.controller.control=h.controller.control),r.includes("children")&&t&&f&&h.virtual.enabled?(f.slides=t,f.update(!0)):r.includes("virtual")&&f&&h.virtual.enabled&&(t&&(f.slides=t),f.update(!0)),r.includes("children")&&t&&h.loop&&(C=!0),b&&v.init()&&v.update(!0),g&&(e.controller.control=h.controller.control),x&&(e.isElement&&(!c||typeof c=="string")&&(c=document.createElement("div"),c.classList.add("swiper-pagination"),c.part.add("pagination"),e.el.appendChild(c)),c&&(h.pagination.el=c),u.init(),u.render(),u.update()),y&&(e.isElement&&(!o||typeof o=="string")&&(o=document.createElement("div"),o.classList.add("swiper-scrollbar"),o.part.add("scrollbar"),e.el.appendChild(o)),o&&(h.scrollbar.el=o),p.init(),p.updateSize(),p.setTranslate()),w&&(e.isElement&&((!a||typeof a=="string")&&(a=document.createElement("div"),a.classList.add("swiper-button-next"),a.innerHTML=e.hostEl.constructor.nextButtonSvg,a.part.add("button-next"),e.el.appendChild(a)),(!l||typeof l=="string")&&(l=document.createElement("div"),l.classList.add("swiper-button-prev"),l.innerHTML=e.hostEl.constructor.prevButtonSvg,l.part.add("button-prev"),e.el.appendChild(l))),a&&(h.navigation.nextEl=a),l&&(h.navigation.prevEl=l),m.init(),m.update()),r.includes("allowSlideNext")&&(e.allowSlideNext=i.allowSlideNext),r.includes("allowSlidePrev")&&(e.allowSlidePrev=i.allowSlidePrev),r.includes("direction")&&e.changeDirection(i.direction,!1),(_||C)&&e.loopDestroy(),(M||C)&&e.loopCreate(),e.update()}function gl(n,e){n===void 0&&(n={}),e===void 0&&(e=!0);const t={on:{}},i={},r={};Ue(t,Ci),t._emitClasses=!0,t.init=!1;const a={},l=As.map(c=>c.replace(/_/,"")),o=Object.assign({},n);return Object.keys(o).forEach(c=>{typeof n[c]>"u"||(l.indexOf(c)>=0?je(n[c])?(t[c]={},r[c]={},Ue(t[c],n[c]),Ue(r[c],n[c])):(t[c]=n[c],r[c]=n[c]):c.search(/on[A-Z]/)===0&&typeof n[c]=="function"?e?i[`${c[2].toLowerCase()}${c.substr(3)}`]=n[c]:t.on[`${c[2].toLowerCase()}${c.substr(3)}`]=n[c]:a[c]=n[c])}),["navigation","pagination","scrollbar"].forEach(c=>{t[c]===!0&&(t[c]={}),t[c]===!1&&delete t[c]}),{params:t,passedParams:r,rest:a,events:i}}function vl(n,e){let{el:t,nextEl:i,prevEl:r,paginationEl:a,scrollbarEl:l,swiper:o}=n;Os(e)&&i&&r&&(o.params.navigation.nextEl=i,o.originalParams.navigation.nextEl=i,o.params.navigation.prevEl=r,o.originalParams.navigation.prevEl=r),Is(e)&&a&&(o.params.pagination.el=a,o.originalParams.pagination.el=a),Ds(e)&&l&&(o.params.scrollbar.el=l,o.originalParams.scrollbar.el=l),o.init(t)}function bl(n,e,t,i,r){const a=[];if(!e)return a;const l=c=>{a.indexOf(c)<0&&a.push(c)};if(t&&i){const c=i.map(r),d=t.map(r);c.join("")!==d.join("")&&l("children"),i.length!==t.length&&l("children")}return As.filter(c=>c[0]==="_").map(c=>c.replace(/_/,"")).forEach(c=>{if(c in n&&c in e)if(je(n[c])&&je(e[c])){const d=Object.keys(n[c]),h=Object.keys(e[c]);d.length!==h.length?l(c):(d.forEach(u=>{n[c][u]!==e[c][u]&&l(c)}),h.forEach(u=>{n[c][u]!==e[c][u]&&l(c)}))}else n[c]!==e[c]&&l(c)}),a}const xl=n=>{!n||n.destroyed||!n.params.virtual||n.params.virtual&&!n.params.virtual.enabled||(n.updateSlides(),n.updateProgress(),n.updateSlidesClasses(),n.parallax&&n.params.parallax&&n.params.parallax.enabled&&n.parallax.setTranslate())};function Ft(){return Ft=Object.assign?Object.assign.bind():function(n){for(var e=1;e{Rs(t)?e.push(t):t.props&&t.props.children&&js(t.props.children).forEach(i=>e.push(i))}),e}function yl(n){const e=[],t={"container-start":[],"container-end":[],"wrapper-start":[],"wrapper-end":[]};return X.Children.toArray(n).forEach(i=>{if(Rs(i))e.push(i);else if(i.props&&i.props.slot&&t[i.props.slot])t[i.props.slot].push(i);else if(i.props&&i.props.children){const r=js(i.props.children);r.length>0?r.forEach(a=>e.push(a)):t["container-end"].push(i)}else t["container-end"].push(i)}),{slides:e,slots:t}}function wl(n,e,t){if(!t)return null;const i=h=>{let u=h;return h<0?u=e.length+h:u>=e.length&&(u=u-e.length),u},r=n.isHorizontal()?{[n.rtlTranslate?"right":"left"]:`${t.offset}px`}:{top:`${t.offset}px`},{from:a,to:l}=t,o=n.params.loop?-e.length:0,c=n.params.loop?e.length*2:e.length,d=[];for(let h=o;h=a&&h<=l&&d.push(e[i(h)]);return d.map((h,u)=>X.cloneElement(h,{swiper:n,style:r,key:h.props.virtualIndex||h.key||`slide-${u}`}))}function ot(n,e){return typeof window>"u"?Re(n,e):Te(n,e)}const xn=pt(null),Nl=pt(null),Oe=zi(function(n,e){let{className:t,tag:i="div",wrapperTag:r="div",children:a,onSwiper:l,...o}=n===void 0?{}:n,c=!1;const[d,h]=ne("swiper"),[u,m]=ne(null),[p,f]=ne(!1),v=$(!1),b=$(null),g=$(null),x=$(null),y=$(null),w=$(null),_=$(null),M=$(null),C=$(null),{params:S,passedParams:N,rest:E,events:P}=gl(o),{slides:L,slots:O}=yl(a),G=()=>{f(!p)};Object.assign(S.on,{_containerClasses(F,oe){h(oe)}});const te=()=>{Object.assign(S.on,P),c=!0;const F={...S};if(delete F.wrapperClass,g.current=new Fi(F),g.current.virtual&&g.current.params.virtual.enabled){g.current.virtual.slides=L;const oe={cache:!1,slides:L,renderExternal:m,renderExternalUpdate:!1};Ue(g.current.params.virtual,oe),Ue(g.current.originalParams.virtual,oe)}};b.current||te(),g.current&&g.current.on("_beforeBreakpoint",G);const I=()=>{c||!P||!g.current||Object.keys(P).forEach(F=>{g.current.on(F,P[F])})},V=()=>{!P||!g.current||Object.keys(P).forEach(F=>{g.current.off(F,P[F])})};Re(()=>()=>{g.current&&g.current.off("_beforeBreakpoint",G)}),Re(()=>{!v.current&&g.current&&(g.current.emitSlidesClasses(),v.current=!0)}),ot(()=>{if(e&&(e.current=b.current),!!b.current)return g.current.destroyed&&te(),vl({el:b.current,nextEl:w.current,prevEl:_.current,paginationEl:M.current,scrollbarEl:C.current,swiper:g.current},S),l&&!g.current.destroyed&&l(g.current),()=>{g.current&&!g.current.destroyed&&g.current.destroy(!0,!1)}},[]),ot(()=>{I();const F=bl(N,x.current,L,y.current,oe=>oe.key);return x.current=N,y.current=L,F.length&&g.current&&!g.current.destroyed&&fl({swiper:g.current,slides:L,passedParams:N,changedParams:F,nextEl:w.current,prevEl:_.current,scrollbarEl:C.current,paginationEl:M.current}),()=>{V()}}),ot(()=>{xl(g.current)},[u]);function q(){return S.virtual?wl(g.current,L,u):L.map((F,oe)=>X.cloneElement(F,{swiper:g.current,swiperSlideIndex:oe}))}return X.createElement(i,Ft({ref:b,className:zs(`${d}${t?` ${t}`:""}`)},E),X.createElement(Nl.Provider,{value:g.current},O["container-start"],X.createElement(r,{className:ml(S.wrapperClass)},O["wrapper-start"],q(),O["wrapper-end"]),Os(S)&&X.createElement(X.Fragment,null,X.createElement("div",{ref:_,className:"swiper-button-prev"}),X.createElement("div",{ref:w,className:"swiper-button-next"})),Ds(S)&&X.createElement("div",{ref:C,className:"swiper-scrollbar"}),Is(S)&&X.createElement("div",{ref:M,className:"swiper-pagination"}),O["container-end"]))});Oe.displayName="Swiper";const D=zi(function(n,e){let{tag:t="div",children:i,className:r="",swiper:a,zoom:l,lazy:o,virtualIndex:c,swiperSlideIndex:d,...h}=n===void 0?{}:n;const u=$(null),[m,p]=ne("swiper-slide"),[f,v]=ne(!1);function b(w,_,M){_===u.current&&p(M)}ot(()=>{if(typeof d<"u"&&(u.current.swiperSlideIndex=d),e&&(e.current=u.current),!(!u.current||!a)){if(a.destroyed){m!=="swiper-slide"&&p("swiper-slide");return}return a.on("_slideClass",b),()=>{a&&a.off("_slideClass",b)}}}),ot(()=>{a&&u.current&&!a.destroyed&&p(a.getSlideClasses(u.current))},[a]);const g={isActive:m.indexOf("swiper-slide-active")>=0,isVisible:m.indexOf("swiper-slide-visible")>=0,isPrev:m.indexOf("swiper-slide-prev")>=0,isNext:m.indexOf("swiper-slide-next")>=0},x=()=>typeof i=="function"?i(g):i,y=()=>{v(!0)};return X.createElement(t,Ft({ref:u,className:zs(`${m}${r?` ${r}`:""}`),"data-swiper-slide-index":c,onLoad:y},h),l&&X.createElement(xn.Provider,{value:g},X.createElement("div",{className:"swiper-zoom-container","data-swiper-zoom":typeof l=="number"?l:void 0},x(),o&&!f&&X.createElement("div",{className:"swiper-lazy-preloader"}))),!l&&X.createElement(xn.Provider,{value:g},x(),o&&!f&&X.createElement("div",{className:"swiper-lazy-preloader"})))});D.displayName="SwiperSlide";function _l(){return s("div",{className:"p-[15px] bg-white mt-5 rounded-[8px]",children:[s("div",{className:"flex items-center justify-between pb-[15px] border-b-[1px] border-[#B1B1B1]",children:[s("h3",{className:"text-xl font-bold",children:"Nhà cung cấp trên BestPC - Tại Hà Nội"}),s("div",{className:"flex items-center",children:[s("div",{className:"flex items-center relative border border-[#b1b1b1] mr-[10px] w-[410px] h-[45px] px-[10px] rounded-[4px]",children:[s("i",{className:"icon_2025 map-2"}),s("input",{type:"text",placeholder:"Nhập địa chỉ của bạn để tìm NCC gần nhất",className:"outline-none ml-[5px] h-full w-full"})]}),s("div",{className:"select-sort relative border border-[#b1b1b1] w-[100px] h-[45px] rounded-[4px] overflow-hidden",children:[s("select",{name:"",id:"",className:" appearance-none w-full relative pl-[10px] bg-transparent h-full z-[2]",children:[s("option",{value:"",children:"Sắp xếp"}),s("option",{value:"",children:"Mới"})]}),s("i",{className:"icon_2025 angle-right ml-[5px] absolute right-[7px] top-[12px] z-[1] rotate-[90deg]"})]})]})]}),s("div",{className:"mt-[10px] py-[15px] grid grid-cols-5 text-xl border-b-[1px] border-[#D9D9D9]",children:[s("div",{children:s("b",{children:"Nhà cung cấp"})}),s("div",{children:s("b",{children:"Chính sách vận chuyển"})}),s("div",{children:s("b",{children:"Giá"})}),s("div",{children:s("b",{children:"Sản phẩm"})})]}),s("div",{className:"list ",children:[s("div",{className:"item grid grid-cols-5 py-[10px] border-b-[1px] border-[#D9D9D9]",children:[s("div",{className:"flex items-start supplier",children:[s("div",{className:"logo mr-[10px]",children:[s("div",{className:"w-[70px] h-[70px] p-[10px] block border border-[#F3F3F3] rounded-[4px]",children:s("img",{src:"/assets/images/logo-hacom.png",className:"block w-full h-full object-contain m-[0_auto]",width:"100%",height:"100%",alt:"hacom"})}),s("div",{className:"flex items-center justify-center mt-2",children:[s("i",{className:"icon_2025 map-4"}),s("span",{className:"ml-[5px]",children:"3km"})]})]}),s("div",{children:[s("div",{className:"flex items-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.7"})]}),s("a",{href:"",className:"text-[#1877F2] font-bold",children:"Hanoicomputer"}),s("a",{href:"",className:"text-[#E85933] underline block",children:"Xem 7 cửa hàng"})]})]}),s("div",{className:"ship",children:[s("p",{children:"Miễn phí giao hàng"}),s("p",{children:"Nhận giap hàng và lắp đặt từ 8h00-21:30 các ngày trong tuần kể cả ngày thứ 7, CN"})]}),s("div",{className:"price",children:[s("div",{className:"flex items-center text-base",children:[s("span",{children:"Giá:"}),s("b",{className:"ml-[5px] text-[#D80A00]",children:"9.000.000đ - 20.000.000đ"})]}),s("b",{className:"mt-2",children:"Đã có VAT"})]}),s("div",{className:"",children:[s("p",{className:"name-pro pb-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"}),s("p",{className:"name-pro py-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"})]}),s("div",{children:s("a",{href:"",className:"block w-[130px] h-[40px] leading-[40px] m-[auto_0_auto_auto] text-base text-center text-white bg-orange-500 rounded hover:bg-orange-600",children:"Liên hệ ngay"})})]}),s("div",{className:"item grid grid-cols-5 py-[10px] border-b-[1px] border-[#D9D9D9]",children:[s("div",{className:"flex items-start supplier",children:[s("div",{className:"logo mr-[10px]",children:[s("div",{className:"w-[70px] h-[70px] p-[10px] block border border-[#F3F3F3] rounded-[4px]",children:s("img",{src:"/assets/images/logo-hacom.png",className:"block w-full h-full object-contain m-[0_auto]",width:"100%",height:"100%",alt:"hacom"})}),s("div",{className:"flex items-center justify-center mt-2",children:[s("i",{className:"icon_2025 map-4"}),s("span",{className:"ml-[5px]",children:"3km"})]})]}),s("div",{children:[s("div",{className:"flex items-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.7"})]}),s("a",{href:"",className:"text-[#1877F2] font-bold",children:"Hanoicomputer"}),s("a",{href:"",className:"text-[#E85933] underline block",children:"Xem 7 cửa hàng"})]})]}),s("div",{className:"ship",children:[s("p",{children:"Miễn phí giao hàng"}),s("p",{children:"Nhận giap hàng và lắp đặt từ 8h00-21:30 các ngày trong tuần kể cả ngày thứ 7, CN"})]}),s("div",{className:"price",children:[s("div",{className:"flex items-center text-base",children:[s("span",{children:"Giá:"}),s("b",{className:"ml-[5px] text-[#D80A00]",children:"9.000.000đ - 20.000.000đ"})]}),s("b",{className:"mt-2",children:"Đã có VAT"})]}),s("div",{className:"",children:[s("p",{className:"name-pro pb-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"}),s("p",{className:"name-pro py-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"})]}),s("div",{children:s("a",{href:"",className:"block w-[130px] h-[40px] leading-[40px] m-[auto_0_auto_auto] text-base text-center text-white bg-orange-500 rounded hover:bg-orange-600",children:"Liên hệ ngay"})})]}),s("div",{className:"item grid grid-cols-5 py-[10px] border-b-[1px] border-[#D9D9D9]",children:[s("div",{className:"flex items-start supplier",children:[s("div",{className:"logo mr-[10px]",children:[s("div",{className:"w-[70px] h-[70px] p-[10px] block border border-[#F3F3F3] rounded-[4px]",children:s("img",{src:"/assets/images/logo-hacom.png",className:"block w-full h-full object-contain m-[0_auto]",width:"100%",height:"100%",alt:"hacom"})}),s("div",{className:"flex items-center justify-center mt-2",children:[s("i",{className:"icon_2025 map-4"}),s("span",{className:"ml-[5px]",children:"3km"})]})]}),s("div",{children:[s("div",{className:"flex items-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.7"})]}),s("a",{href:"",className:"text-[#1877F2] font-bold",children:"Hanoicomputer"}),s("a",{href:"",className:"text-[#E85933] underline block",children:"Xem 7 cửa hàng"})]})]}),s("div",{className:"ship",children:[s("p",{children:"Miễn phí giao hàng"}),s("p",{children:"Nhận giap hàng và lắp đặt từ 8h00-21:30 các ngày trong tuần kể cả ngày thứ 7, CN"})]}),s("div",{className:"price",children:[s("div",{className:"flex items-center text-base",children:[s("span",{children:"Giá:"}),s("b",{className:"ml-[5px] text-[#D80A00]",children:"9.000.000đ - 20.000.000đ"})]}),s("b",{className:"mt-2",children:"Đã có VAT"})]}),s("div",{className:"",children:[s("p",{className:"name-pro pb-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"}),s("p",{className:"name-pro py-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"})]}),s("div",{children:s("a",{href:"",className:"block w-[130px] h-[40px] leading-[40px] m-[auto_0_auto_auto] text-base text-center text-white bg-orange-500 rounded hover:bg-orange-600",children:"Liên hệ ngay"})})]})]}),s("a",{href:"",className:"pt-3 block text-center text-[#FF7A00] text-xl hover:text-orange-600",children:"Xem thêm"})]})}const T=(n,e=1e4)=>(n=parseFloat(n+"")||0,Math.round((n+Number.EPSILON)*e)/e),Pi=function(n){if(!(n&&n instanceof Element&&n.offsetParent))return!1;const e=n.scrollHeight>n.clientHeight,t=window.getComputedStyle(n).overflowY,i=t.indexOf("hidden")!==-1,r=t.indexOf("visible")!==-1;return e&&!i&&!r},Bt=function(n,e=void 0){return!(!n||n===document.body||e&&n===e)&&(Pi(n)?n:Bt(n.parentElement,e))},pe=function(n){var e=new DOMParser().parseFromString(n,"text/html").body;if(e.childElementCount>1){for(var t=document.createElement("div");e.firstChild;)t.appendChild(e.firstChild);return t}return e.firstChild},Bi=n=>`${n||""}`.split(" ").filter(e=>!!e),me=(n,e,t)=>{n&&Bi(e).forEach(i=>{n.classList.toggle(i,t||!1)})};class Be{constructor(e){Object.defineProperty(this,"pageX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pageY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"nativePointer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.nativePointer=e,this.pageX=e.pageX,this.pageY=e.pageY,this.clientX=e.clientX,this.clientY=e.clientY,this.id=self.Touch&&e instanceof Touch?e.identifier:-1,this.time=Date.now()}}const He={passive:!1};class Sl{constructor(e,{start:t=()=>!0,move:i=()=>{},end:r=()=>{}}){Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"moveCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"currentPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"startPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.element=e,this.startCallback=t,this.moveCallback=i,this.endCallback=r;for(const a of["onPointerStart","onTouchStart","onMove","onTouchEnd","onPointerEnd","onWindowBlur"])this[a]=this[a].bind(this);this.element.addEventListener("mousedown",this.onPointerStart,He),this.element.addEventListener("touchstart",this.onTouchStart,He),this.element.addEventListener("touchmove",this.onMove,He),this.element.addEventListener("touchend",this.onTouchEnd),this.element.addEventListener("touchcancel",this.onTouchEnd)}onPointerStart(e){if(!e.buttons||e.button!==0)return;const t=new Be(e);this.currentPointers.some(i=>i.id===t.id)||this.triggerPointerStart(t,e)&&(window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseup",this.onPointerEnd),window.addEventListener("blur",this.onWindowBlur))}onTouchStart(e){for(const t of Array.from(e.changedTouches||[]))this.triggerPointerStart(new Be(t),e);window.addEventListener("blur",this.onWindowBlur)}onMove(e){const t=this.currentPointers.slice(),i="changedTouches"in e?Array.from(e.changedTouches||[]).map(a=>new Be(a)):[new Be(e)],r=[];for(const a of i){const l=this.currentPointers.findIndex(o=>o.id===a.id);l<0||(r.push(a),this.currentPointers[l]=a)}r.length&&this.moveCallback(e,this.currentPointers.slice(),t)}onPointerEnd(e){e.buttons>0&&e.button!==0||(this.triggerPointerEnd(e,new Be(e)),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur))}onTouchEnd(e){for(const t of Array.from(e.changedTouches||[]))this.triggerPointerEnd(e,new Be(t))}triggerPointerStart(e,t){return!!this.startCallback(t,e,this.currentPointers.slice())&&(this.currentPointers.push(e),this.startPointers.push(e),!0)}triggerPointerEnd(e,t){const i=this.currentPointers.findIndex(r=>r.id===t.id);i<0||(this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(e,t,this.currentPointers.slice()))}onWindowBlur(){this.clear()}clear(){for(;this.currentPointers.length;){const e=this.currentPointers[this.currentPointers.length-1];this.currentPointers.splice(this.currentPointers.length-1,1),this.startPointers.splice(this.currentPointers.length-1,1),this.endCallback(new Event("touchend",{bubbles:!0,cancelable:!0,clientX:e.clientX,clientY:e.clientY}),e,this.currentPointers.slice())}}stop(){this.element.removeEventListener("mousedown",this.onPointerStart,He),this.element.removeEventListener("touchstart",this.onTouchStart,He),this.element.removeEventListener("touchmove",this.onMove,He),this.element.removeEventListener("touchend",this.onTouchEnd),this.element.removeEventListener("touchcancel",this.onTouchEnd),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur)}}function yn(n,e){return e?Math.sqrt(Math.pow(e.clientX-n.clientX,2)+Math.pow(e.clientY-n.clientY,2)):0}function wn(n,e){return e?{clientX:(n.clientX+e.clientX)/2,clientY:(n.clientY+e.clientY)/2}:n}const Mi=n=>typeof n=="object"&&n!==null&&n.constructor===Object&&Object.prototype.toString.call(n)==="[object Object]",ee=(n,...e)=>{const t=e.length;for(let i=0;i{const o=Array.isArray(l)?[]:{};n[a]||Object.assign(n,{[a]:o}),Mi(l)?Object.assign(n[a],ee(o,l)):Array.isArray(l)?Object.assign(n,{[a]:[...l]}):Object.assign(n,{[a]:l})})}return n},ii=function(n,e){return n.split(".").reduce((t,i)=>typeof t=="object"?t[i]:void 0,e)};class Ht{constructor(e={}){Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.setOptions(e);for(const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this)))t.startsWith("on")&&typeof this[t]=="function"&&(this[t]=this[t].bind(this))}setOptions(e){this.options=e?ee({},this.constructor.defaults,e):{};for(const[t,i]of Object.entries(this.option("on")||{}))this.on(t,i)}option(e,...t){let i=ii(e,this.options);return i&&typeof i=="function"&&(i=i.call(this,this,...t)),i}optionFor(e,t,i,...r){let a=ii(t,e);var l;typeof(l=a)!="string"||isNaN(l)||isNaN(parseFloat(l))||(a=parseFloat(a)),a==="true"&&(a=!0),a==="false"&&(a=!1),a&&typeof a=="function"&&(a=a.call(this,this,e,...r));let o=ii(t,this.options);return o&&typeof o=="function"?a=o.call(this,this,e,...r,a):a===void 0&&(a=o),a===void 0?i:a}cn(e){const t=this.options.classes;return t&&t[e]||""}localize(e,t=[]){e=String(e).replace(/\{\{(\w+).?(\w+)?\}\}/g,(i,r,a)=>{let l="";return a?l=this.option(`${r[0]+r.toLowerCase().substring(1)}.l10n.${a}`):r&&(l=this.option(`l10n.${r}`)),l||(l=i),l});for(let i=0;ir)}on(e,t){let i=[];typeof e=="string"?i=e.split(" "):Array.isArray(e)&&(i=e),this.events||(this.events=new Map),i.forEach(r=>{let a=this.events.get(r);a||(this.events.set(r,[]),a=[]),a.includes(t)||a.push(t),this.events.set(r,a)})}off(e,t){let i=[];typeof e=="string"?i=e.split(" "):Array.isArray(e)&&(i=e),i.forEach(r=>{const a=this.events.get(r);if(Array.isArray(a)){const l=a.indexOf(t);l>-1&&a.splice(l,1)}})}emit(e,...t){[...this.events.get(e)||[]].forEach(i=>i(this,...t)),e!=="*"&&this.emit("*",e,...t)}}Object.defineProperty(Ht,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.36"}),Object.defineProperty(Ht,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}});class Hi extends Ht{constructor(e={}){super(e),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}})}attachPlugins(e={}){const t=new Map;for(const[i,r]of Object.entries(e)){const a=this.option(i),l=this.plugins[i];l||a===!1?l&&a===!1&&(l.detach(),delete this.plugins[i]):t.set(i,new r(this,a||{}))}for(const[i,r]of t)this.plugins[i]=r,r.attach()}detachPlugins(e){e=e||Object.keys(this.plugins);for(const t of e){const i=this.plugins[t];i&&i.detach(),delete this.plugins[t]}return this.emit("detachPlugins"),this}}var j;(function(n){n[n.Init=0]="Init",n[n.Error=1]="Error",n[n.Ready=2]="Ready",n[n.Panning=3]="Panning",n[n.Mousemove=4]="Mousemove",n[n.Destroy=5]="Destroy"})(j||(j={}));const be=["a","b","c","d","e","f"],Fs={PANUP:"Move up",PANDOWN:"Move down",PANLEFT:"Move left",PANRIGHT:"Move right",ZOOMIN:"Zoom in",ZOOMOUT:"Zoom out",TOGGLEZOOM:"Toggle zoom level",TOGGLE1TO1:"Toggle zoom level",ITERATEZOOM:"Toggle zoom level",ROTATECCW:"Rotate counterclockwise",ROTATECW:"Rotate clockwise",FLIPX:"Flip horizontally",FLIPY:"Flip vertically",FITX:"Fit horizontally",FITY:"Fit vertically",RESET:"Reset",TOGGLEFS:"Toggle fullscreen"},Tl={content:null,width:"auto",height:"auto",panMode:"drag",touch:!0,dragMinThreshold:3,lockAxis:!1,mouseMoveFactor:1,mouseMoveFriction:.12,zoom:!0,pinchToZoom:!0,panOnlyZoomed:"auto",minScale:1,maxScale:2,friction:.25,dragFriction:.35,decelFriction:.05,click:"toggleZoom",dblClick:!1,wheel:"zoom",wheelLimit:7,spinner:!0,bounds:"auto",infinite:!1,rubberband:!0,bounce:!0,maxVelocity:75,transformParent:!1,classes:{content:"f-panzoom__content",isLoading:"is-loading",canZoomIn:"can-zoom_in",canZoomOut:"can-zoom_out",isDraggable:"is-draggable",isDragging:"is-dragging",inFullscreen:"in-fullscreen",htmlHasFullscreen:"with-panzoom-in-fullscreen"},l10n:Fs},Nn='',$i='
'+Nn+Nn+"
",Q=n=>n&&n!==null&&n instanceof Element&&"nodeType"in n,R=(n,e)=>{n&&Bi(e).forEach(t=>{n.classList.remove(t)})},k=(n,e)=>{n&&Bi(e).forEach(t=>{n.classList.add(t)})},wt={a:1,b:0,c:0,d:1,e:0,f:0},El=1e5,Nt=1e4,se="mousemove",_n="drag",Sn="content",re="auto";let ni=null,si=null;class Fe extends Hi{get fits(){return this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1}get isTouchDevice(){return si===null&&(si=window.matchMedia("(hover: none)").matches),si}get isMobile(){return ni===null&&(ni=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)),ni}get panMode(){return this.options.panMode!==se||this.isTouchDevice?_n:se}get panOnlyZoomed(){const e=this.options.panOnlyZoomed;return e===re?this.isTouchDevice:e}get isInfinite(){return this.option("infinite")}get angle(){return 180*Math.atan2(this.current.b,this.current.a)/Math.PI||0}get targetAngle(){return 180*Math.atan2(this.target.b,this.target.a)/Math.PI||0}get scale(){const{a:e,b:t}=this.current;return Math.sqrt(e*e+t*t)||1}get targetScale(){const{a:e,b:t}=this.target;return Math.sqrt(e*e+t*t)||1}get minScale(){return this.option("minScale")||1}get fullScale(){const{contentRect:e}=this;return e.fullWidth/e.fitWidth||1}get maxScale(){return this.fullScale*(this.option("maxScale")||1)||1}get coverScale(){const{containerRect:e,contentRect:t}=this,i=Math.max(e.height/t.fitHeight,e.width/t.fitWidth)||1;return Math.min(this.fullScale,i)}get isScaling(){return Math.abs(this.targetScale-this.scale)>1e-5&&!this.isResting}get isContentLoading(){const e=this.content;return!!(e&&e instanceof HTMLImageElement)&&!e.complete}get isResting(){if(this.isBouncingX||this.isBouncingY)return!1;for(const e of be){const t=e=="e"||e==="f"?1e-4:1e-5;if(Math.abs(this.target[e]-this.current[e])>t)return!1}return!(!this.ignoreBounds&&!this.checkBounds().inBounds)}constructor(e,t={},i={}){var r;if(super(t),Object.defineProperty(this,"pointerTracker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"updateTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"rAF",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isTicking",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"ignoreBounds",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingX",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingY",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"clicks",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"trackingPoints",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"cwd",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"pmme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"friction",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:j.Init}),Object.defineProperty(this,"isDragging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"spinner",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"containerRect",{enumerable:!0,configurable:!0,writable:!0,value:{width:0,height:0,innerWidth:0,innerHeight:0}}),Object.defineProperty(this,"contentRect",{enumerable:!0,configurable:!0,writable:!0,value:{top:0,right:0,bottom:0,left:0,fullWidth:0,fullHeight:0,fitWidth:0,fitHeight:0,width:0,height:0}}),Object.defineProperty(this,"dragStart",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,top:0,left:0,time:0}}),Object.defineProperty(this,"dragOffset",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,time:0}}),Object.defineProperty(this,"current",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},wt)}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},wt)}),Object.defineProperty(this,"velocity",{enumerable:!0,configurable:!0,writable:!0,value:{a:0,b:0,c:0,d:0,e:0,f:0}}),Object.defineProperty(this,"lockedAxis",{enumerable:!0,configurable:!0,writable:!0,value:!1}),!e)throw new Error("Container Element Not Found");this.container=e,this.initContent(),this.attachPlugins(Object.assign(Object.assign({},Fe.Plugins),i)),this.emit("attachPlugins"),this.emit("init");const a=this.content;if(a.addEventListener("load",this.onLoad),a.addEventListener("error",this.onError),this.isContentLoading){if(this.option("spinner")){e.classList.add(this.cn("isLoading"));const l=pe($i);!e.contains(a)||a.parentElement instanceof HTMLPictureElement?this.spinner=e.appendChild(l):this.spinner=((r=a.parentElement)===null||r===void 0?void 0:r.insertBefore(l,a))||null}this.emit("beforeLoad")}else queueMicrotask(()=>{this.enable()})}initContent(){const{container:e}=this,t=this.cn(Sn);let i=this.option(Sn)||e.querySelector(`.${t}`);if(i||(i=e.querySelector("img,picture")||e.firstElementChild,i&&k(i,t)),i instanceof HTMLPictureElement&&(i=i.querySelector("img")),!i)throw new Error("No content found");this.content=i}onLoad(){const{spinner:e,container:t,state:i}=this;e&&(e.remove(),this.spinner=null),this.option("spinner")&&t.classList.remove(this.cn("isLoading")),this.emit("afterLoad"),i===j.Init?this.enable():this.updateMetrics()}onError(){this.state!==j.Destroy&&(this.spinner&&(this.spinner.remove(),this.spinner=null),this.stop(),this.detachEvents(),this.state=j.Error,this.emit("error"))}getNextScale(e){const{fullScale:t,targetScale:i,coverScale:r,maxScale:a,minScale:l}=this;let o=l;switch(e){case"toggleMax":o=i-l<.5*(a-l)?a:l;break;case"toggleCover":o=i-l<.5*(r-l)?r:l;break;case"toggleZoom":o=i-l<.5*(t-l)?t:l;break;case"iterateZoom":let c=[1,t,a].sort((h,u)=>h-u),d=c.findIndex(h=>h>i+1e-5);o=c[d]||1}return o}attachObserver(){var e;const t=()=>{const{container:i,containerRect:r}=this;return Math.abs(r.width-i.getBoundingClientRect().width)>.1||Math.abs(r.height-i.getBoundingClientRect().height)>.1};this.resizeObserver||window.ResizeObserver===void 0||(this.resizeObserver=new ResizeObserver(()=>{this.updateTimer||(t()?(this.onResize(),this.isMobile&&(this.updateTimer=setTimeout(()=>{t()&&this.onResize(),this.updateTimer=null},500))):this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null))})),(e=this.resizeObserver)===null||e===void 0||e.observe(this.container)}detachObserver(){var e;(e=this.resizeObserver)===null||e===void 0||e.disconnect()}attachEvents(){const{container:e}=this;e.addEventListener("click",this.onClick,{passive:!1,capture:!1}),e.addEventListener("wheel",this.onWheel,{passive:!1}),this.pointerTracker=new Sl(e,{start:this.onPointerDown,move:this.onPointerMove,end:this.onPointerUp}),document.addEventListener(se,this.onMouseMove)}detachEvents(){var e;const{container:t}=this;t.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),t.removeEventListener("wheel",this.onWheel,{passive:!1}),(e=this.pointerTracker)===null||e===void 0||e.stop(),this.pointerTracker=null,document.removeEventListener(se,this.onMouseMove),document.removeEventListener("keydown",this.onKeydown,!0),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null)}animate(){this.setTargetForce();const e=this.friction,t=this.option("maxVelocity");for(const i of be)e?(this.velocity[i]*=1-e,t&&!this.isScaling&&(this.velocity[i]=Math.max(Math.min(this.velocity[i],t),-1*t)),this.current[i]+=this.velocity[i]):this.current[i]=this.target[i];this.setTransform(),this.setEdgeForce(),!this.isResting||this.isDragging?this.rAF=requestAnimationFrame(()=>this.animate()):this.stop("current")}setTargetForce(){for(const e of be)e==="e"&&this.isBouncingX||e==="f"&&this.isBouncingY||(this.velocity[e]=(1/(1-this.friction)-1)*(this.target[e]-this.current[e]))}checkBounds(e=0,t=0){const{current:i}=this,r=i.e+e,a=i.f+t,l=this.getBounds(),{x:o,y:c}=l,d=o.min,h=o.max,u=c.min,m=c.max;let p=0,f=0;return d!==1/0&&rh&&(p=h-r),u!==1/0&&am&&(f=m-a),Math.abs(p)<1e-4&&(p=0),Math.abs(f)<1e-4&&(f=0),Object.assign(Object.assign({},l),{xDiff:p,yDiff:f,inBounds:!p&&!f})}clampTargetBounds(){const{target:e}=this,{x:t,y:i}=this.getBounds();t.min!==1/0&&(e.e=Math.max(e.e,t.min)),t.max!==1/0&&(e.e=Math.min(e.e,t.max)),i.min!==1/0&&(e.f=Math.max(e.f,i.min)),i.max!==1/0&&(e.f=Math.min(e.f,i.max))}calculateContentDim(e=this.current){const{content:t,contentRect:i}=this,{fitWidth:r,fitHeight:a,fullWidth:l,fullHeight:o}=i;let c=l,d=o;if(this.option("zoom")||this.angle!==0){const h=!(t instanceof HTMLImageElement)&&(window.getComputedStyle(t).maxWidth==="none"||window.getComputedStyle(t).maxHeight==="none"),u=h?l:r,m=h?o:a,p=this.getMatrix(e),f=new DOMPoint(0,0).matrixTransform(p),v=new DOMPoint(0+u,0).matrixTransform(p),b=new DOMPoint(0+u,0+m).matrixTransform(p),g=new DOMPoint(0,0+m).matrixTransform(p),x=Math.abs(b.x-f.x),y=Math.abs(b.y-f.y),w=Math.abs(g.x-v.x),_=Math.abs(g.y-v.y);c=Math.max(x,w),d=Math.max(y,_)}return{contentWidth:c,contentHeight:d}}setEdgeForce(){if(this.ignoreBounds||this.isDragging||this.panMode===se||this.targetScale{const p=window.getSelection();return p&&p.type==="Range"})()&&!i.closest("button"))return;const r=i.closest("[data-panzoom-action]"),a=i.closest("[data-panzoom-change]"),l=r||a,o=l&&Q(l)?l.dataset:null;if(o){const p=o.panzoomChange,f=o.panzoomAction;if((p||f)&&e.preventDefault(),p){let v={};try{v=JSON.parse(p)}catch{console&&console.warn("The given data was not valid JSON")}return void this.applyChange(v)}if(f)return void(this[f]&&this[f]())}if(Math.abs(this.dragOffset.x)>3||Math.abs(this.dragOffset.y)>3)return e.preventDefault(),void e.stopPropagation();if(i.closest("[data-fancybox]"))return;const c=this.content.getBoundingClientRect(),d=this.dragStart;if(d.time&&!this.canZoomOut()&&(Math.abs(c.x-d.x)>2||Math.abs(c.y-d.y)>2))return;this.dragStart.time=0;const h=p=>{this.option("zoom",e)&&p&&typeof p=="string"&&/(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(p)&&typeof this[p]=="function"&&(e.preventDefault(),this[p]({event:e}))},u=this.option("click",e),m=this.option("dblClick",e);m?(this.clicks++,this.clicks==1&&(this.clickTimer=setTimeout(()=>{this.clicks===1?(this.emit("click",e),!e.defaultPrevented&&u&&h(u)):(this.emit("dblClick",e),e.defaultPrevented||h(m)),this.clicks=0,this.clickTimer=null},350))):(this.emit("click",e),!e.defaultPrevented&&u&&h(u))}addTrackingPoint(e){const t=this.trackingPoints.filter(i=>i.time>Date.now()-100);t.push(e),this.trackingPoints=t}onPointerDown(e,t,i){var r;if(this.option("touch",e)===!1)return!1;this.pwt=0,this.dragOffset={x:0,y:0,time:0},this.trackingPoints=[];const a=this.content.getBoundingClientRect();if(this.dragStart={x:a.x,y:a.y,top:a.top,left:a.left,time:Date.now()},this.clickTimer)return!1;if(this.panMode===se&&this.targetScale>1)return e.preventDefault(),e.stopPropagation(),!1;const l=e.composedPath()[0];if(!i.length){if(["TEXTAREA","OPTION","INPUT","SELECT","VIDEO","IFRAME"].includes(l.nodeName)||l.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]"))return!1;(r=window.getSelection())===null||r===void 0||r.removeAllRanges()}if(e.type==="mousedown")["A","BUTTON"].includes(l.nodeName)||e.preventDefault();else if(Math.abs(this.velocity.a)>.3)return!1;return this.target.e=this.current.e,this.target.f=this.current.f,this.stop(),this.isDragging||(this.isDragging=!0,this.addTrackingPoint(t),this.emit("touchStart",e)),!0}onPointerMove(e,t,i){if(this.option("touch",e)===!1||!this.isDragging||t.length<2&&this.panOnlyZoomed&&T(this.targetScale)<=T(this.minScale)||(this.emit("touchMove",e),e.defaultPrevented))return;this.addTrackingPoint(t[0]);const{content:r}=this,a=wn(i[0],i[1]),l=wn(t[0],t[1]);let o=0,c=0;if(t.length>1){const y=r.getBoundingClientRect();o=a.clientX-y.left-.5*y.width,c=a.clientY-y.top-.5*y.height}const d=yn(i[0],i[1]),h=yn(t[0],t[1]);let u=d?h/d:1,m=l.clientX-a.clientX,p=l.clientY-a.clientY;this.dragOffset.x+=m,this.dragOffset.y+=p,this.dragOffset.time=Date.now()-this.dragStart.time;let f=T(this.targetScale)===T(this.minScale)&&this.option("lockAxis");if(f&&!this.lockedAxis)if(f==="xy"||f==="y"||e.type==="touchmove"){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return void e.preventDefault();const y=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockedAxis=y>45&&y<135?"y":"x",this.dragOffset.x=0,this.dragOffset.y=0,m=0,p=0}else this.lockedAxis=f;if(Bt(e.target,this.content)&&(f="x",this.dragOffset.y=0),f&&f!=="xy"&&this.lockedAxis!==f&&T(this.targetScale)===T(this.minScale))return;e.cancelable&&e.preventDefault(),this.container.classList.add(this.cn("isDragging"));const v=this.checkBounds(m,p);this.option("rubberband")?(this.isInfinite!=="x"&&(v.xDiff>0&&m<0||v.xDiff<0&&m>0)&&(m*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitWidth*v.xDiff))),this.isInfinite!=="y"&&(v.yDiff>0&&p<0||v.yDiff<0&&p>0)&&(p*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitHeight*v.yDiff)))):(v.xDiff&&(m=0),v.yDiff&&(p=0));const b=this.targetScale,g=this.minScale,x=this.maxScale;b<.5*g&&(u=Math.max(u,g)),b>1.5*x&&(u=Math.min(u,x)),this.lockedAxis==="y"&&T(b)===T(g)&&(m=0),this.lockedAxis==="x"&&T(b)===T(g)&&(p=0),this.applyChange({originX:o,originY:c,panX:m,panY:p,scale:u,friction:this.option("dragFriction"),ignoreBounds:!0})}onPointerUp(e,t,i){if(i.length)return this.dragOffset.x=0,this.dragOffset.y=0,void(this.trackingPoints=[]);this.container.classList.remove(this.cn("isDragging")),this.isDragging&&(this.addTrackingPoint(t),this.panOnlyZoomed&&this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1&&(this.trackingPoints=[]),Bt(e.target,this.content)&&this.lockedAxis==="y"&&(this.trackingPoints=[]),this.emit("touchEnd",e),this.isDragging=!1,this.lockedAxis=!1,this.state!==j.Destroy&&(e.defaultPrevented||this.startDecelAnim()))}startDecelAnim(){var e;const t=this.isScaling;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const y of be)this.velocity[y]=0;this.target.e=this.current.e,this.target.f=this.current.f,R(this.container,"is-scaling"),R(this.container,"is-animating"),this.isTicking=!1;const{trackingPoints:i}=this,r=i[0],a=i[i.length-1];let l=0,o=0,c=0;a&&r&&(l=a.clientX-r.clientX,o=a.clientY-r.clientY,c=a.time-r.time);const d=((e=window.visualViewport)===null||e===void 0?void 0:e.scale)||1;d!==1&&(l*=d,o*=d);let h=0,u=0,m=0,p=0,f=this.option("decelFriction");const v=this.targetScale;if(c>0){m=Math.abs(l)>3?l/(c/30):0,p=Math.abs(o)>3?o/(c/30):0;const y=this.option("maxVelocity");y&&(m=Math.max(Math.min(m,y),-1*y),p=Math.max(Math.min(p,y),-1*y))}m&&(h=m/(1/(1-f)-1)),p&&(u=p/(1/(1-f)-1)),(this.option("lockAxis")==="y"||this.option("lockAxis")==="xy"&&this.lockedAxis==="y"&&T(v)===this.minScale)&&(h=m=0),(this.option("lockAxis")==="x"||this.option("lockAxis")==="xy"&&this.lockedAxis==="x"&&T(v)===this.minScale)&&(u=p=0);const b=this.dragOffset.x,g=this.dragOffset.y,x=this.option("dragMinThreshold")||0;Math.abs(b)this.maxScale+1e-5)||t&&!h&&!u)&&(f=.35),this.applyChange({panX:h,panY:u,friction:f}),this.emit("decel",m,p,b,g)}onWheel(e){var t=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(a,l){return Math.abs(l)>Math.abs(a)?l:a});const i=Math.max(-1,Math.min(1,t));if(this.emit("wheel",e,i),this.panMode===se||e.defaultPrevented)return;const r=this.option("wheel");r==="pan"?(e.preventDefault(),this.panOnlyZoomed&&!this.canZoomOut()||this.applyChange({panX:2*-e.deltaX,panY:2*-e.deltaY,bounce:!1})):r==="zoom"&&this.option("zoom")!==!1&&this.zoomWithWheel(e)}onMouseMove(e){this.panWithMouse(e)}onKeydown(e){e.key==="Escape"&&this.toggleFS()}onResize(){this.updateMetrics(),this.checkBounds().inBounds||this.requestTick()}setTransform(){this.emit("beforeTransform");const{current:e,target:t,content:i,contentRect:r}=this,a=Object.assign({},wt);for(const b of be){const g=b=="e"||b==="f"?Nt:El;a[b]=T(e[b],g),Math.abs(t[b]-e[b])<(b=="e"||b==="f"?.51:.001)&&(e[b]=t[b])}let{a:l,b:o,c,d,e:h,f:u}=a,m=`matrix(${l}, ${o}, ${c}, ${d}, ${h}, ${u})`,p=i.parentElement instanceof HTMLPictureElement?i.parentElement:i;if(this.option("transformParent")&&(p=p.parentElement||p),p.style.transform===m)return;p.style.transform=m;const{contentWidth:f,contentHeight:v}=this.calculateContentDim();r.width=f,r.height=v,this.emit("afterTransform")}updateMetrics(e=!1){var t;if(!this||this.state===j.Destroy||this.isContentLoading)return;const i=Math.max(1,((t=window.visualViewport)===null||t===void 0?void 0:t.scale)||1),{container:r,content:a}=this,l=a instanceof HTMLImageElement,o=r.getBoundingClientRect(),c=getComputedStyle(this.container);let d=o.width*i,h=o.height*i;const u=parseFloat(c.paddingTop)+parseFloat(c.paddingBottom),m=d-(parseFloat(c.paddingLeft)+parseFloat(c.paddingRight)),p=h-u;this.containerRect={width:d,height:h,innerWidth:m,innerHeight:p};const f=parseFloat(a.dataset.width||"")||(O=>{let G=0;return G=O instanceof HTMLImageElement?O.naturalWidth:O instanceof SVGElement?O.width.baseVal.value:Math.max(O.offsetWidth,O.scrollWidth),G||0})(a),v=parseFloat(a.dataset.height||"")||(O=>{let G=0;return G=O instanceof HTMLImageElement?O.naturalHeight:O instanceof SVGElement?O.height.baseVal.value:Math.max(O.offsetHeight,O.scrollHeight),G||0})(a);let b=this.option("width",f)||re,g=this.option("height",v)||re;const x=b===re,y=g===re;typeof b!="number"&&(b=f),typeof g!="number"&&(g=v),x&&(b=f*(g/v)),y&&(g=v/(f/b));let w=a.parentElement instanceof HTMLPictureElement?a.parentElement:a;this.option("transformParent")&&(w=w.parentElement||w);const _=w.getAttribute("style")||"";w.style.setProperty("transform","none","important"),l&&(w.style.width="",w.style.height=""),w.offsetHeight;const M=a.getBoundingClientRect();let C=M.width*i,S=M.height*i,N=C,E=S;C=Math.min(C,b),S=Math.min(S,g),l?{width:C,height:S}=((O,G,te,I)=>{const V=te/O,q=I/G,F=Math.min(V,q);return{width:O*=F,height:G*=F}})(b,g,C,S):(C=Math.min(C,b),S=Math.min(S,g));let P=.5*(E-S),L=.5*(N-C);this.contentRect=Object.assign(Object.assign({},this.contentRect),{top:M.top-o.top+P,bottom:o.bottom-M.bottom+P,left:M.left-o.left+L,right:o.right-M.right+L,fitWidth:C,fitHeight:S,width:C,height:S,fullWidth:b,fullHeight:g}),w.style.cssText=_,l&&(w.style.width=`${C}px`,w.style.height=`${S}px`),this.setTransform(),e!==!0&&this.emit("refresh"),this.ignoreBounds||(T(this.targetScale)this.maxScale?this.zoomTo(this.maxScale,{friction:0}):this.state===j.Init||this.checkBounds().inBounds||this.requestTick()),this.updateControls()}calculateBounds(){const{contentWidth:e,contentHeight:t}=this.calculateContentDim(this.target),{targetScale:i,lockedAxis:r}=this,{fitWidth:a,fitHeight:l}=this.contentRect;let o=0,c=0,d=0,h=0;const u=this.option("infinite");if(u===!0||r&&u===r)o=-1/0,d=1/0,c=-1/0,h=1/0;else{let{containerRect:m,contentRect:p}=this,f=T(a*i,Nt),v=T(l*i,Nt),{innerWidth:b,innerHeight:g}=m;if(m.width===f&&(b=m.width),m.width===v&&(g=m.height),e>b){d=.5*(e-b),o=-1*d;let x=.5*(p.right-p.left);o+=x,d+=x}if(a>b&&eg){h=.5*(t-g),c=-1*h;let x=.5*(p.bottom-p.top);c+=x,h+=x}l>g&&tT(r.fitWidth,1)||T(r.height,1)>T(r.fitHeight,1))&&(m=!0)),T(r.width*a,1)T(a),f=!p&&!m&&h&&T(o)w&&(i=w/x)}g=g.scale(i)}g=g.translate(-a,-l).translate(-f,-v).multiply(b),r&&(g=g.rotate(r)),c&&(g=g.scale(-1,1)),d&&(g=g.scale(1,-1));for(const x of be)x!=="e"&&x!=="f"&&(g[x]>this.minScale+1e-5||g[x].1||this.panMode===se||u===!1)&&!h&&this.clampTargetBounds(),m===j.Init?this.animate():this.isResting||(this.state=j.Panning,this.requestTick())}stop(e=!1){if(this.state===j.Init||this.state===j.Destroy)return;const t=this.isTicking;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const i of be)this.velocity[i]=0,e==="current"?this.current[i]=this.target[i]:e==="target"&&(this.target[i]=this.current[i]);this.setTransform(),R(this.container,"is-scaling"),R(this.container,"is-animating"),this.isTicking=!1,this.state=j.Ready,t&&(this.emit("endAnimation"),this.updateControls())}requestTick(){this.isTicking||(this.emit("startAnimation"),this.updateControls(),k(this.container,"is-animating"),this.isScaling&&k(this.container,"is-scaling")),this.isTicking=!0,this.rAF||(this.rAF=requestAnimationFrame(()=>this.animate()))}panWithMouse(e,t=this.option("mouseMoveFriction")){if(this.pmme=e,this.panMode!==se||!e||T(this.targetScale)<=T(this.minScale))return;this.emit("mouseMove",e);const{container:i,containerRect:r,contentRect:a}=this,l=r.width,o=r.height,c=i.getBoundingClientRect(),d=(e.clientX||0)-c.left,h=(e.clientY||0)-c.top;let{contentWidth:u,contentHeight:m}=this.calculateContentDim(this.target);const p=this.option("mouseMoveFactor");p>1&&(u!==l&&(u*=p),m!==o&&(m*=p));let f=.5*(u-l)-d/l*100/100*(u-l);f+=.5*(a.right-a.left);let v=.5*(m-o)-h/o*100/100*(m-o);v+=.5*(a.bottom-a.top),this.applyChange({panX:f-this.target.e,panY:v-this.target.f,friction:t})}zoomWithWheel(e){if(this.state===j.Destroy||this.state===j.Init)return;const t=Date.now();if(t-this.pwt<45)return void e.preventDefault();this.pwt=t;var i=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(d,h){return Math.abs(h)>Math.abs(d)?h:d});const r=Math.max(-1,Math.min(1,i)),{targetScale:a,maxScale:l,minScale:o}=this;let c=a*(100+45*r)/100;T(c)T(l)&&T(a)>=T(l)?(this.cwd+=Math.abs(r),c=l):(this.cwd=0,c=Math.max(Math.min(c,l),o)),this.cwd>this.option("wheelLimit")||(e.preventDefault(),T(c)!==T(a)&&this.zoomTo(c,{event:e}))}canZoomIn(){return this.option("zoom")&&(T(this.contentRect.width,1)T(this.minScale)}zoomIn(e=1.25,t){this.zoomTo(this.targetScale*e,t)}zoomOut(e=.8,t){this.zoomTo(this.targetScale*e,t)}zoomToFit(e){this.zoomTo("fit",e)}zoomToCover(e){this.zoomTo("cover",e)}zoomToFull(e){this.zoomTo("full",e)}zoomToMax(e){this.zoomTo("max",e)}toggleZoom(e){this.zoomTo(this.getNextScale("toggleZoom"),e)}toggleMax(e){this.zoomTo(this.getNextScale("toggleMax"),e)}toggleCover(e){this.zoomTo(this.getNextScale("toggleCover"),e)}iterateZoom(e){this.zoomTo("next",e)}zoomTo(e=1,{friction:t=re,originX:i=re,originY:r=re,event:a}={}){if(this.isContentLoading||this.state===j.Destroy)return;const{targetScale:l,fullScale:o,maxScale:c,coverScale:d}=this;if(this.stop(),this.panMode===se&&(a=this.pmme||a),a||i===re||r===re){const u=this.content.getBoundingClientRect(),m=this.container.getBoundingClientRect(),p=a?a.clientX:m.left+.5*m.width,f=a?a.clientY:m.top+.5*m.height;i=p-u.left-.5*u.width,r=f-u.top-.5*u.height}let h=1;typeof e=="number"?h=e:e==="full"?h=o:e==="cover"?h=d:e==="max"?h=c:e==="fit"?h=1:e==="next"&&(h=this.getNextScale("iterateZoom")),h=h/l||1,t=t===re?h>1?.15:.25:t,this.applyChange({scale:h,originX:i,originY:r,friction:t}),a&&this.panMode===se&&this.panWithMouse(a,t)}rotateCCW(){this.applyChange({angle:-90})}rotateCW(){this.applyChange({angle:90})}flipX(){this.applyChange({flipX:!0})}flipY(){this.applyChange({flipY:!0})}fitX(){this.stop("target");const{containerRect:e,contentRect:t,target:i}=this;this.applyChange({panX:.5*e.width-(t.left+.5*t.fitWidth)-i.e,panY:.5*e.height-(t.top+.5*t.fitHeight)-i.f,scale:e.width/t.fitWidth/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}fitY(){this.stop("target");const{containerRect:e,contentRect:t,target:i}=this;this.applyChange({panX:.5*e.width-(t.left+.5*t.fitWidth)-i.e,panY:.5*e.innerHeight-(t.top+.5*t.fitHeight)-i.f,scale:e.height/t.fitHeight/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}toggleFS(){const{container:e}=this,t=this.cn("inFullscreen"),i=this.cn("htmlHasFullscreen");e.classList.toggle(t);const r=e.classList.contains(t);r?(document.documentElement.classList.add(i),document.addEventListener("keydown",this.onKeydown,!0)):(document.documentElement.classList.remove(i),document.removeEventListener("keydown",this.onKeydown,!0)),this.updateMetrics(),this.emit(r?"enterFS":"exitFS")}getMatrix(e=this.current){const{a:t,b:i,c:r,d:a,e:l,f:o}=e;return new DOMMatrix([t,i,r,a,l,o])}reset(e){if(this.state!==j.Init&&this.state!==j.Destroy){this.stop("current");for(const t of be)this.target[t]=wt[t];this.target.a=this.minScale,this.target.d=this.minScale,this.clampTargetBounds(),this.isResting||(this.friction=e===void 0?this.option("friction"):e,this.state=j.Panning,this.requestTick())}}destroy(){this.stop(),this.state=j.Destroy,this.detachEvents(),this.detachObserver();const{container:e,content:t}=this,i=this.option("classes")||{};for(const r of Object.values(i))e.classList.remove(r+"");t&&(t.removeEventListener("load",this.onLoad),t.removeEventListener("error",this.onError)),this.detachPlugins()}}Object.defineProperty(Fe,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Tl}),Object.defineProperty(Fe,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}});const Tn=function(n,e){let t=!0;return(...i)=>{t&&(t=!1,n(...i),setTimeout(()=>{t=!0},e))}},En=(n,e)=>{let t=[];return n.childNodes.forEach(i=>{i.nodeType!==Node.ELEMENT_NODE||e&&!i.matches(e)||t.push(i)}),t},Cl={viewport:null,track:null,enabled:!0,slides:[],axis:"x",transition:"fade",preload:1,slidesPerPage:"auto",initialPage:0,friction:.12,Panzoom:{decelFriction:.12},center:!0,infinite:!0,fill:!0,dragFree:!1,adaptiveHeight:!1,direction:"ltr",classes:{container:"f-carousel",viewport:"f-carousel__viewport",track:"f-carousel__track",slide:"f-carousel__slide",isLTR:"is-ltr",isRTL:"is-rtl",isHorizontal:"is-horizontal",isVertical:"is-vertical",inTransition:"in-transition",isSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide #%d"}};var W;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Destroy=2]="Destroy"})(W||(W={}));const ri=n=>{if(typeof n=="string"||n instanceof HTMLElement)n={html:n};else{const e=n.thumb;e!==void 0&&(typeof e=="string"&&(n.thumbSrc=e),e instanceof HTMLImageElement&&(n.thumbEl=e,n.thumbElSrc=e.src,n.thumbSrc=e.src),delete n.thumb)}return Object.assign({html:"",el:null,isDom:!1,class:"",customClass:"",index:-1,dim:0,gap:0,pos:0,transition:!1},n)},Pl=(n={})=>Object.assign({index:-1,slides:[],dim:0,pos:-1},n);class de extends Ht{constructor(e,t){super(t),Object.defineProperty(this,"instance",{enumerable:!0,configurable:!0,writable:!0,value:e})}attach(){}detach(){}}const Ml={classes:{list:"f-carousel__dots",isDynamic:"is-dynamic",hasDots:"has-dots",dot:"f-carousel__dot",isBeforePrev:"is-before-prev",isPrev:"is-prev",isCurrent:"is-current",isNext:"is-next",isAfterNext:"is-after-next"},dotTpl:'',dynamicFrom:11,maxCount:1/0,minCount:2};class Bs extends de{constructor(){super(...arguments),Object.defineProperty(this,"isDynamic",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"list",{enumerable:!0,configurable:!0,writable:!0,value:null})}onRefresh(){this.refresh()}build(){let e=this.list;if(!e){e=document.createElement("ul"),k(e,this.cn("list")),e.setAttribute("role","tablist");const t=this.instance.container;t.appendChild(e),k(t,this.cn("hasDots")),this.list=e}return e}refresh(){var e;const t=this.instance.pages.length,i=Math.min(2,this.option("minCount")),r=Math.max(2e3,this.option("maxCount")),a=this.option("dynamicFrom");if(tr)return void this.cleanup();const l=typeof a=="number"&&t>5&&t>=a,o=!this.list||this.isDynamic!==l||this.list.children.length!==t;o&&this.cleanup();const c=this.build();if(me(c,this.cn("isDynamic"),!!l),o)for(let u=0;u=t-1&&a.setAttribute(_t,"")))}addBtn(e){var t;const i=this.instance,r=document.createElement("button");r.setAttribute("tabindex","0"),r.setAttribute("title",i.localize(`{{${e.toUpperCase()}}}`)),k(r,this.cn("button")+" "+this.cn(e===St?"isNext":"isPrev"));const a=i.isRTL?e===St?Cn:St:e;var l;return r.innerHTML=i.localize(this.option(`${a}Tpl`)),r.dataset[`carousel${l=e,l?l.match("^[a-z]")?l.charAt(0).toUpperCase()+l.substring(1):l:""}`]="true",(t=this.container)===null||t===void 0||t.appendChild(r),r}build(){const e=this.instance.container,t=this.cn("container");let{container:i,prev:r,next:a}=this;i||(i=e.querySelector("."+t),this.isDom=!!i),i||(i=document.createElement("div"),k(i,t),e.appendChild(i)),this.container=i,a||(a=i.querySelector("[data-carousel-next]")),a||(a=this.addBtn(St)),this.next=a,r||(r=i.querySelector("[data-carousel-prev]")),r||(r=this.addBtn(Cn)),this.prev=r}cleanup(){this.isDom||(this.prev&&this.prev.remove(),this.next&&this.next.remove(),this.container&&this.container.remove()),this.prev=null,this.next=null,this.container=null,this.isDom=!1}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(Hs,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{classes:{container:"f-carousel__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"},nextTpl:'',prevTpl:''}});class $s extends de{constructor(){super(...arguments),Object.defineProperty(this,"selectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nav",{enumerable:!0,configurable:!0,writable:!0,value:null})}addAsTargetFor(e){this.target=this.instance,this.nav=e,this.attachEvents()}addAsNavFor(e){this.nav=this.instance,this.target=e,this.attachEvents()}attachEvents(){const{nav:e,target:t}=this;e&&t&&(e.options.initialSlide=t.options.initialPage,e.state===W.Ready?this.onNavReady(e):e.on("ready",this.onNavReady),t.state===W.Ready?this.onTargetReady(t):t.on("ready",this.onTargetReady))}onNavReady(e){e.on("createSlide",this.onNavCreateSlide),e.on("Panzoom.click",this.onNavClick),e.on("Panzoom.touchEnd",this.onNavTouch),this.onTargetChange()}onTargetReady(e){e.on("change",this.onTargetChange),e.on("Panzoom.refresh",this.onTargetChange),this.onTargetChange()}onNavClick(e,t,i){this.onNavTouch(e,e.panzoom,i)}onNavTouch(e,t,i){var r,a;if(Math.abs(t.dragOffset.x)>3||Math.abs(t.dragOffset.y)>3)return;const l=i.target,{nav:o,target:c}=this;if(!o||!c||!l)return;const d=l.closest("[data-index]");if(i.stopPropagation(),i.preventDefault(),!d)return;const h=parseInt(d.dataset.index||"",10)||0,u=c.getPageForSlide(h),m=o.getPageForSlide(h);o.slideTo(m),c.slideTo(u,{friction:((a=(r=this.nav)===null||r===void 0?void 0:r.plugins)===null||a===void 0?void 0:a.Sync.option("friction"))||0}),this.markSelectedSlide(h)}onNavCreateSlide(e,t){t.index===this.selectedIndex&&this.markSelectedSlide(t.index)}onTargetChange(){var e,t;const{target:i,nav:r}=this;if(!i||!r||r.state!==W.Ready||i.state!==W.Ready)return;const a=(t=(e=i.pages[i.page])===null||e===void 0?void 0:e.slides[0])===null||t===void 0?void 0:t.index,l=r.getPageForSlide(a);this.markSelectedSlide(a),r.slideTo(l,r.prevPage===null&&i.prevPage===null?{friction:0}:void 0)}markSelectedSlide(e){const t=this.nav;t&&t.state===W.Ready&&(this.selectedIndex=e,[...t.slides].map(i=>{i.el&&i.el.classList[i.index===e?"add":"remove"]("is-nav-selected")}))}attach(){const e=this;let t=e.options.target,i=e.options.nav;t?e.addAsNavFor(t):i&&e.addAsTargetFor(i)}detach(){const e=this,t=e.nav,i=e.target;t&&(t.off("ready",e.onNavReady),t.off("createSlide",e.onNavCreateSlide),t.off("Panzoom.click",e.onNavClick),t.off("Panzoom.touchEnd",e.onNavTouch)),e.nav=null,i&&(i.off("ready",e.onTargetReady),i.off("refresh",e.onTargetChange),i.off("change",e.onTargetChange)),e.target=null}}Object.defineProperty($s,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{friction:.35}});const kl={Navigation:Hs,Dots:Bs,Sync:$s},Tt="animationend",Pn="isSelected",Et="slide";class ze extends Hi{get axis(){return this.isHorizontal?"e":"f"}get isEnabled(){return this.state===W.Ready}get isInfinite(){let e=!1;const{contentDim:t,viewportDim:i,pages:r,slides:a}=this,l=a[0];return r.length>=2&&l&&t+l.dim>=i&&(e=this.option("infinite")),e}get isRTL(){return this.option("direction")==="rtl"}get isHorizontal(){return this.option("axis")==="x"}constructor(e,t={},i={}){if(super(),Object.defineProperty(this,"bp",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"lp",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"userOptions",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:W.Init}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"prevPage",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewport",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"slides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"panzoom",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"inTransition",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"contentDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"viewportDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),typeof e=="string"&&(e=document.querySelector(e)),!e||!Q(e))throw new Error("No Element found");this.container=e,this.slideNext=Tn(this.slideNext.bind(this),150),this.slidePrev=Tn(this.slidePrev.bind(this),150),this.userOptions=t,this.userPlugins=i,queueMicrotask(()=>{this.processOptions()})}processOptions(){var e,t;const i=ee({},ze.defaults,this.userOptions);let r="";const a=i.breakpoints;if(a&&Mi(a))for(const[l,o]of Object.entries(a))window.matchMedia(l).matches&&Mi(o)&&(r+=l,ee(i,o));r===this.bp&&this.state!==W.Init||(this.bp=r,this.state===W.Ready&&(i.initialSlide=((t=(e=this.pages[this.page])===null||e===void 0?void 0:e.slides[0])===null||t===void 0?void 0:t.index)||0),this.state!==W.Init&&this.destroy(),super.setOptions(i),this.option("enabled")===!1?this.attachEvents():setTimeout(()=>{this.init()},0))}init(){this.state=W.Init,this.emit("init"),this.attachPlugins(Object.assign(Object.assign({},ze.Plugins),this.userPlugins)),this.emit("attachPlugins"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.setInitialPosition(),this.initPanzoom(),this.attachEvents(),this.state=W.Ready,this.emit("ready")}initLayout(){const{container:e}=this,t=this.option("classes");k(e,this.cn("container")),me(e,t.isLTR,!this.isRTL),me(e,t.isRTL,this.isRTL),me(e,t.isVertical,!this.isHorizontal),me(e,t.isHorizontal,this.isHorizontal);let i=this.option("viewport")||e.querySelector(`.${t.viewport}`);i||(i=document.createElement("div"),k(i,t.viewport),i.append(...En(e,`.${t.slide}`)),e.prepend(i)),i.addEventListener("scroll",this.onScroll);let r=this.option("track")||e.querySelector(`.${t.track}`);r||(r=document.createElement("div"),k(r,t.track),r.append(...Array.from(i.childNodes))),r.setAttribute("aria-live","polite"),i.contains(r)||i.prepend(r),this.viewport=i,this.track=r,this.emit("initLayout")}initSlides(){const{track:e}=this;if(!e)return;const t=[...this.slides],i=[];[...En(e,`.${this.cn(Et)}`)].forEach(r=>{if(Q(r)){const a=ri({el:r,isDom:!0,index:this.slides.length});i.push(a)}});for(let r of[...this.option("slides",[])||[],...t])i.push(ri(r));this.slides=i;for(let r=0;r!(this.pages.length<2&&!t.options.infinite),bounds:()=>this.getBounds(),maxVelocity:t=>Math.abs(t.target[this.axis]-t.current[this.axis])<2*this.viewportDim?100:0},e)),this.panzoom.on("*",(t,i,...r)=>{this.emit(`Panzoom.${i}`,t,...r)}),this.panzoom.on("decel",this.onDecel),this.panzoom.on("refresh",this.onRefresh),this.panzoom.on("beforeTransform",this.onBeforeTransform),this.panzoom.on("endAnimation",this.onEndAnimation)}attachEvents(){const e=this.container;e&&(e.addEventListener("click",this.onClick,{passive:!1,capture:!1}),e.addEventListener("slideTo",this.onSlideTo)),window.addEventListener("resize",this.onResize)}createPages(){let e=[];const{contentDim:t,viewportDim:i}=this;let r=this.option("slidesPerPage");r=(r==="auto"||t<=i)&&this.option("fill")!==!1?1/0:parseFloat(r+"");let a=0,l=0,o=0;for(const c of this.slides)(!e.length||l+c.dim-i>.05||o>=r)&&(e.push(Pl()),a=e.length-1,l=0,o=0),e[a].slides.push(c),l+=c.dim+c.gap,o++;return e}processPages(){const e=this.pages,{contentDim:t,viewportDim:i,isInfinite:r}=this,a=this.option("center"),l=this.option("fill"),o=l&&a&&t>i&&!r;if(e.forEach((h,u)=>{var m;h.index=u,h.pos=((m=h.slides[0])===null||m===void 0?void 0:m.pos)||0,h.dim=0;for(const[p,f]of h.slides.entries())h.dim+=f.dim,p=t-.5*i?h.pos=t-i:a&&(h.pos+=-.5*(i-h.dim))}),e.forEach(h=>{l&&!r&&t>i&&(h.pos=Math.max(h.pos,0),h.pos=Math.min(h.pos,t-i)),h.pos=T(h.pos,1e3),h.dim=T(h.dim,1e3),Math.abs(h.pos)<=.1&&(h.pos=0)}),r)return e;const c=[];let d;return e.forEach(h=>{const u=Object.assign({},h);d&&u.pos===d.pos?(d.dim+=u.dim,d.slides=[...d.slides,...u.slides]):(u.index=c.length,d=u,c.push(u))}),c}getPageFromIndex(e=0){const t=this.pages.length;let i;return e=parseInt((e||0).toString())||0,i=this.isInfinite?(e%t+t)%t:Math.max(Math.min(e,t-1),0),i}getSlideMetrics(e){var t,i;const r=this.isHorizontal?"width":"height";let a=0,l=0,o=e.el;const c=!(!o||o.parentNode);if(o?a=parseFloat(o.dataset[r]||"")||0:(o=document.createElement("div"),o.style.visibility="hidden",(this.track||document.body).prepend(o)),k(o,this.cn(Et)+" "+e.class+" "+e.customClass),a)o.style[r]=`${a}px`,o.style[r==="width"?"height":"width"]="";else{c&&(this.track||document.body).prepend(o),a=o.getBoundingClientRect()[r]*Math.max(1,((t=window.visualViewport)===null||t===void 0?void 0:t.scale)||1);let h=o[this.isHorizontal?"offsetWidth":"offsetHeight"];h-1>a&&(a=h)}const d=getComputedStyle(o);return d.boxSizing==="content-box"&&(this.isHorizontal?(a+=parseFloat(d.paddingLeft)||0,a+=parseFloat(d.paddingRight)||0):(a+=parseFloat(d.paddingTop)||0,a+=parseFloat(d.paddingBottom)||0)),l=parseFloat(d[this.isHorizontal?"marginRight":"marginBottom"])||0,c?(i=o.parentElement)===null||i===void 0||i.removeChild(o):e.el||o.remove(),{dim:T(a,1e3),gap:T(l,1e3)}}getBounds(){const{isInfinite:e,isRTL:t,isHorizontal:i,pages:r}=this;let a={min:0,max:0};if(e)a={min:-1/0,max:1/0};else if(r.length){const l=r[0].pos,o=r[r.length-1].pos;a=t&&i?{min:l,max:o}:{min:-1*o,max:-1*l}}return{x:i?a:{min:0,max:0},y:i?{min:0,max:0}:a}}repositionSlides(){let e,{isHorizontal:t,isRTL:i,isInfinite:r,viewport:a,viewportDim:l,contentDim:o,page:c,pages:d,slides:h,panzoom:u}=this,m=0,p=0,f=0,v=0;u?v=-1*u.current[this.axis]:d[c]&&(v=d[c].pos||0),e=t?i?"right":"left":"top",i&&t&&(v*=-1);for(const y of h){const w=y.el;w?(e==="top"?(w.style.right="",w.style.left=""):w.style.top="",y.index!==m?w.style[e]=p===0?"":`${T(p,1e3)}px`:w.style[e]="",f+=y.dim+y.gap,m++):p+=y.dim+y.gap}if(r&&f&&a){let y=getComputedStyle(a),w="padding",_=t?"Right":"Bottom",M=parseFloat(y[w+(t?"Left":"Top")]);v-=M,l+=M,l+=parseFloat(y[w+_]);for(const C of h)C.el&&(T(C.pos)T(o-l)&&(C.el.style[e]=`${T(p+f,1e3)}px`),T(C.pos+C.gap)>=T(o-l)&&T(C.pos)>T(v+l)&&T(v)1&&(b=d[x[0]],g=d[x[1]]),b&&g){let y=0;for(const w of h)w.el?this.inTransition.has(w.index)&&b.slides.indexOf(w)<0&&(w.el.style[e]=`${T(y+(b.pos-g.pos),1e3)}px`):y+=w.dim+w.gap}}createSlideEl(e){const{track:t,slides:i}=this;if(!t||!e||e.el&&e.el.parentNode)return;const r=e.el||document.createElement("div");k(r,this.cn(Et)),k(r,e.class),k(r,e.customClass);const a=e.html;a&&(a instanceof HTMLElement?r.appendChild(a):r.innerHTML=e.html+"");const l=[];i.forEach((h,u)=>{h.el&&l.push(u)});const o=e.index;let c=null;l.length&&(c=i[l.reduce((h,u)=>Math.abs(u-o)1)return!1;let u=e>o?1:-1;this.isInfinite&&(o===0&&e===c.length-1&&(u=-1),o===c.length-1&&e===0&&(u=1));const m=c[h].pos*(this.isRTL?1:-1);if(o===h&&Math.abs(m-d.target[this.axis])<1)return!1;this.clearTransitions();const p=d.isResting;k(this.container,this.cn("inTransition"));const f=((a=c[o])===null||a===void 0?void 0:a.slides[0])||null,v=((l=c[h])===null||l===void 0?void 0:l.slides[0])||null;this.inTransition.add(v.index),this.createSlideEl(v);let b=f.el,g=v.el;p||t===Et||(t="fadeFast",b=null);const x=this.isRTL?"next":"prev",y=this.isRTL?"prev":"next";return b&&(this.inTransition.add(f.index),f.transition=t,b.addEventListener(Tt,this.onAnimationEnd),b.classList.add(`f-${t}Out`,`to-${u>0?y:x}`)),g&&(v.transition=t,g.addEventListener(Tt,this.onAnimationEnd),g.classList.add(`f-${t}In`,`from-${u>0?x:y}`)),d.current[this.axis]=m,d.target[this.axis]=m,d.requestTick(),this.onChange(h),!0}manageSlideVisiblity(){const e=new Set,t=new Set,i=this.getVisibleSlides(parseFloat(this.option("preload",0)+"")||0);for(const r of this.slides)i.has(r)?e.add(r):t.add(r);for(const r of this.inTransition)e.add(this.slides[r]);for(const r of e)this.createSlideEl(r),this.lazyLoadSlide(r);for(const r of t)e.has(r)||this.removeSlideEl(r);this.markSelectedSlides(),this.repositionSlides()}markSelectedSlides(){if(!this.pages[this.page]||!this.pages[this.page].slides)return;const e="aria-hidden";let t=this.cn(Pn);if(t)for(const i of this.slides){const r=i.el;r&&(r.dataset.index=`${i.index}`,r.classList.contains("f-thumbs__slide")?this.getVisibleSlides(0).has(i)?r.removeAttribute(e):r.setAttribute(e,"true"):this.pages[this.page].slides.includes(i)?(r.classList.contains(t)||(k(r,t),this.emit("selectSlide",i)),r.removeAttribute(e)):(r.classList.contains(t)&&(R(r,t),this.emit("unselectSlide",i)),r.setAttribute(e,"true")))}}flipInfiniteTrack(){const{axis:e,isHorizontal:t,isInfinite:i,isRTL:r,viewportDim:a,contentDim:l}=this,o=this.panzoom;if(!o||!i)return;let c=o.current[e],d=o.target[e]-c,h=0,u=.5*a;r&&t?(c<-u&&(h=-1,c+=l),c>l-u&&(h=1,c-=l)):(c>u&&(h=1,c-=l),c<-l+u&&(h=-1,c+=l)),h&&(o.current[e]=c,o.target[e]=c+d)}lazyLoadImg(e,t){const i=this,r="f-fadeIn",a="is-preloading";let l=!1,o=null;const c=()=>{l||(l=!0,o&&(o.remove(),o=null),R(t,a),t.complete&&(k(t,r),setTimeout(()=>{R(t,r)},350)),this.option("adaptiveHeight")&&e.el&&this.pages[this.page].slides.indexOf(e)>-1&&(i.updateMetrics(),i.setViewportHeight()),this.emit("load",e))};k(t,a),t.src=t.dataset.lazySrcset||t.dataset.lazySrc||"",delete t.dataset.lazySrc,delete t.dataset.lazySrcset,t.addEventListener("error",()=>{c()}),t.addEventListener("load",()=>{c()}),setTimeout(()=>{const d=t.parentNode;d&&e.el&&(t.complete?c():l||(o=pe($i),d.insertBefore(o,t)))},300)}lazyLoadSlide(e){const t=e&&e.el;if(!t)return;const i=new Set;let r=Array.from(t.querySelectorAll("[data-lazy-src],[data-lazy-srcset]"));t.dataset.lazySrc&&r.push(t),r.map(a=>{a instanceof HTMLImageElement?i.add(a):a instanceof HTMLElement&&a.dataset.lazySrc&&(a.style.backgroundImage=`url('${a.dataset.lazySrc}')`,delete a.dataset.lazySrc)});for(const a of i)this.lazyLoadImg(e,a)}onAnimationEnd(e){var t;const i=e.target,r=i?parseInt(i.dataset.index||"",10)||0:-1,a=this.slides[r],l=e.animationName;if(!i||!a||!l)return;const o=!!this.inTransition.has(r)&&a.transition;o&&l.substring(0,o.length+2)===`f-${o}`&&this.inTransition.delete(r),this.inTransition.size||this.clearTransitions(),r===this.page&&(!((t=this.panzoom)===null||t===void 0)&&t.isResting)&&this.emit("settle")}onDecel(e,t=0,i=0,r=0,a=0){if(this.option("dragFree"))return void this.setPageFromPosition();const{isRTL:l,isHorizontal:o,axis:c,pages:d}=this,h=d.length,u=Math.abs(Math.atan2(i,t)/(Math.PI/180));let m=0;if(m=u>45&&u<135?o?0:i:o?t:0,!h)return;let p=this.page,f=l&&o?1:-1;const v=e.current[c]*f;let{pageIndex:b}=this.getPageFromPosition(v);Math.abs(m)>5?(d[p].dim=e&&(this.page+=m.length),this.updateMetrics(),o){const p=((a=this.pages[this.page])===null||a===void 0?void 0:a.pos)||0,f=((l=this.pages[this.page])===null||l===void 0?void 0:l.dim)||0,v=this.pages.length||1,b=this.isRTL?d-f:f-d,g=this.isRTL?c-p:p-c;h&&v===1?(e<=this.page&&(o.current[this.axis]-=b,o.target[this.axis]-=b),o.panTo({[this.isHorizontal?"x":"y"]:-1*p})):g&&e<=this.page&&(o.target[this.axis]-=g,o.current[this.axis]-=g,o.requestTick())}for(const p of m)this.emit("initSlide",p,p.index)}prependSlide(e){this.addSlide(0,e)}appendSlide(e){this.addSlide(this.slides.length,e)}removeSlide(e){const t=this.slides.length;e=(e%t+t)%t;const i=this.slides[e];if(i){this.removeSlideEl(i,!0),this.slides.splice(e,1);for(let r=0;rthis.page?-1:1;let c=-1*a.current.e,d=T((c-o.pos)/(1*o.dim),1e3),h=d,u=d;this.isInfinite&&i!==!0&&(h=T((c-o.pos+l)/(1*o.dim),1e3),u=T((c-o.pos-l)/(1*o.dim),1e3));let m=[d,h,u].reduce(function(p,f){return Math.abs(f)1?1:m<-1?-1:m}setViewportHeight(){const{page:e,pages:t,viewport:i,isHorizontal:r}=this;if(!i||!t[e])return;let a=0;r&&this.track&&(this.track.style.height="auto",t[e].slides.forEach(l=>{l.el&&(a=Math.max(a,l.el.offsetHeight))})),i.style.height=a?`${a}px`:""}getPageForSlide(e){for(const t of this.pages)for(const i of t.slides)if(i.index===e)return t.index;return-1}getVisibleSlides(e=0){var t;const i=new Set;let{panzoom:r,contentDim:a,viewportDim:l,pages:o,page:c}=this;if(l){a=a+((t=this.slides[this.slides.length-1])===null||t===void 0?void 0:t.gap)||0;let d=0;d=r&&r.state!==j.Init&&r.state!==j.Destroy?-1*r.current[this.axis]:o[c]&&o[c].pos||0,this.isInfinite&&(d-=Math.floor(d/a)*a),this.isRTL&&this.isHorizontal&&(d*=-1);const h=d-l*e,u=d+l*(e+1),m=this.isInfinite?[-1,0,1]:[0];for(const p of this.slides)for(const f of m){const v=p.pos+f*a,b=v+p.dim+p.gap;vh&&i.add(p)}}return i}getPageFromPosition(e){const{viewportDim:t,contentDim:i,slides:r,pages:a,panzoom:l}=this,o=a.length,c=r.length,d=r[0],h=r[c-1],u=this.option("center");let m=0,p=0,f=0,v=e===void 0?-1*((l==null?void 0:l.target[this.axis])||0):e;u&&(v+=.5*t),this.isInfinite?(vh.pos+h.dim+.5*h.gap&&(v-=i,f=1)):v=Math.max(d.pos||0,Math.min(v,h.pos));let b=h,g=r.find(x=>{const y=x.pos-.5*b.gap,w=x.pos+x.dim+.5*x.gap;return b=x,v>=y&&v{this.removeSlideEl(c)}),this.detachPlugins(),t&&(t.removeEventListener("scroll",this.onScroll),t.offsetParent&&i&&i.offsetParent&&t.replaceWith(...i.childNodes));for(const[c,d]of Object.entries(l))c!=="container"&&d&&e.classList.remove(d);this.track=null,this.viewport=null,this.page=0,this.slides=[];const o=this.events.get("ready");this.events=new Map,o&&this.events.set("ready",o)}}Object.defineProperty(ze,"Panzoom",{enumerable:!0,configurable:!0,writable:!0,value:Fe}),Object.defineProperty(ze,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Cl}),Object.defineProperty(ze,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:kl});const Gs=function(n){if(!Q(n))return 0;const e=window.scrollY,t=window.innerHeight,i=e+t,r=n.getBoundingClientRect(),a=r.y+e,l=r.height,o=a+l;if(e>o||io||ai)return 100;let c=l;ai&&(c-=o-i);const d=c/t*100;return Math.round(d)},ct=!(typeof window>"u"||!window.document||!window.document.createElement);let ai;const li=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'].join(","),Mn=n=>{if(n&&ct){ai===void 0&&document.createElement("div").focus({get preventScroll(){return ai=!0,!1}});try{if(ai)n.focus({preventScroll:!0});else{const e=window.scrollY||document.body.scrollTop,t=window.scrollX||document.body.scrollLeft;n.focus(),document.body.scrollTo({top:e,left:t,behavior:"auto"})}}catch{}}},Vs=()=>{const n=document;let e,t="",i="",r="";return n.fullscreenEnabled?(t="requestFullscreen",i="exitFullscreen",r="fullscreenElement"):n.webkitFullscreenEnabled&&(t="webkitRequestFullscreen",i="webkitExitFullscreen",r="webkitFullscreenElement"),t&&(e={request:function(a=n.documentElement){return t==="webkitRequestFullscreen"?a[t](Element.ALLOW_KEYBOARD_INPUT):a[t]()},exit:function(){return n[r]&&n[i]()},isFullscreen:function(){return n[r]}}),e},ki={animated:!0,autoFocus:!0,backdropClick:"close",Carousel:{classes:{container:"fancybox__carousel",viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"}},closeButton:"auto",closeExisting:!1,commonCaption:!1,compact:()=>window.matchMedia("(max-width: 578px), (max-height: 578px)").matches,contentClick:"toggleZoom",contentDblClick:!1,defaultType:"image",defaultDisplay:"flex",dragToClose:!0,Fullscreen:{autoStart:!1},groupAll:!1,groupAttr:"data-fancybox",hideClass:"f-fadeOut",hideScrollbar:!0,idle:3500,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"prev",ArrowDown:"next",ArrowRight:"next",ArrowLeft:"prev"},l10n:Object.assign(Object.assign({},Fs),{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page",TOGGLE_ZOOM:"Toggle zoom level",TOGGLE_THUMBS:"Toggle thumbnails",TOGGLE_SLIDESHOW:"Toggle slideshow",TOGGLE_FULLSCREEN:"Toggle full-screen mode",DOWNLOAD:"Download"}),parentEl:null,placeFocusBack:!0,showClass:"f-zoomInUp",startIndex:0,tpl:{closeButton:'',main:``},trapFocus:!0,wheel:"zoom"};var Y,U;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Closing=2]="Closing",n[n.CustomClosing=3]="CustomClosing",n[n.Destroy=4]="Destroy"})(Y||(Y={})),function(n){n[n.Loading=0]="Loading",n[n.Opening=1]="Opening",n[n.Ready=2]="Ready",n[n.Closing=3]="Closing"}(U||(U={}));let kn="",at=!1,Ct=!1,Ae=null;const Ws=()=>{let n="",e="";const t=z.getInstance();if(t){const i=t.carousel,r=t.getSlide();if(i&&r){let a=r.slug||void 0,l=r.triggerEl||void 0;e=a||t.option("slug")||"",!e&&l&&l.dataset&&(e=l.dataset.fancybox||""),e&&e!=="true"&&(n="#"+e+(!a&&i.slides.length>1?"-"+(r.index+1):""))}}return{hash:n,slug:e,index:1}},$t=()=>{const n=new URL(document.URL).hash,e=n.slice(1).split("-"),t=e[e.length-1],i=t&&/^\+?\d+$/.test(t)&&parseInt(e.pop()||"1",10)||1;return{hash:n,slug:e.join("-"),index:i}},Xs=()=>{const{slug:n,index:e}=$t();if(!n)return;let t=document.querySelector(`[data-slug="${n}"]`);if(t&&t.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),z.getInstance())return;const i=document.querySelectorAll(`[data-fancybox="${n}"]`);i.length&&(t=i[e-1],t&&t.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))},qs=()=>{if(z.defaults.Hash===!1)return;const n=z.getInstance();if((n==null?void 0:n.options.Hash)===!1)return;const{slug:e,index:t}=$t(),{slug:i}=Ws();n&&(e===i?n.jumpTo(t-1):(at=!0,n.close())),Xs()},Ys=()=>{Ae&&clearTimeout(Ae),queueMicrotask(()=>{qs()})},Ln=()=>{window.addEventListener("hashchange",Ys,!1),setTimeout(()=>{qs()},500)};ct&&(/complete|interactive|loaded/.test(document.readyState)?Ln():document.addEventListener("DOMContentLoaded",Ln));const Pt="is-zooming-in";class Us extends de{onCreateSlide(e,t,i){const r=this.instance.optionFor(i,"src")||"";i.el&&i.type==="image"&&typeof r=="string"&&this.setImage(i,r)}onRemoveSlide(e,t,i){i.panzoom&&i.panzoom.destroy(),i.panzoom=void 0,i.imageEl=void 0}onChange(e,t,i,r){R(this.instance.container,Pt);for(const a of t.slides){const l=a.panzoom;l&&a.index!==i&&l.reset(.35)}}onClose(){var e;const t=this.instance,i=t.container,r=t.getSlide();if(!i||!i.parentElement||!r)return;const{el:a,contentEl:l,panzoom:o,thumbElSrc:c}=r;if(!a||!c||!l||!o||o.isContentLoading||o.state===j.Init||o.state===j.Destroy)return;o.updateMetrics();let d=this.getZoomInfo(r);if(!d)return;this.instance.state=Y.CustomClosing,i.classList.remove(Pt),i.classList.add("is-zooming-out"),l.style.backgroundImage=`url('${c}')`;const h=i.getBoundingClientRect();(((e=window.visualViewport)===null||e===void 0?void 0:e.scale)||1)===1&&Object.assign(i.style,{position:"absolute",top:`${i.offsetTop+window.scrollY}px`,left:`${i.offsetLeft+window.scrollX}px`,bottom:"auto",right:"auto",width:`${h.width}px`,height:`${h.height}px`,overflow:"hidden"});const{x:u,y:m,scale:p,opacity:f}=d;if(f){const v=((b,g,x,y)=>{const w=g-b,_=y-x;return M=>x+((M-b)/w*_||0)})(o.scale,p,1,0);o.on("afterTransform",()=>{l.style.opacity=v(o.scale)+""})}o.on("endAnimation",()=>{t.destroy()}),o.target.a=p,o.target.b=0,o.target.c=0,o.target.d=p,o.panTo({x:u,y:m,scale:p,friction:f?.2:.33,ignoreBounds:!0}),o.isResting&&t.destroy()}setImage(e,t){const i=this.instance;e.src=t,this.process(e,t).then(r=>{const{contentEl:a,imageEl:l,thumbElSrc:o,el:c}=e;if(i.isClosing()||!a||!l)return;a.offsetHeight;const d=!!i.isOpeningSlide(e)&&this.getZoomInfo(e);if(this.option("protected")&&c){c.addEventListener("contextmenu",m=>{m.preventDefault()});const u=document.createElement("div");k(u,"fancybox-protected"),a.appendChild(u)}if(o&&d){const u=r.contentRect,m=Math.max(u.fullWidth,u.fullHeight);let p=null;!d.opacity&&m>1200&&(p=document.createElement("img"),k(p,"fancybox-ghost"),p.src=o,a.appendChild(p));const f=()=>{p&&(k(p,"f-fadeFastOut"),setTimeout(()=>{p&&(p.remove(),p=null)},200))};(h=o,new Promise((v,b)=>{const g=new Image;g.onload=v,g.onerror=b,g.src=h})).then(()=>{i.hideLoading(e),e.state=U.Opening,this.instance.emit("reveal",e),this.zoomIn(e).then(()=>{f(),this.instance.done(e)},()=>{}),p&&setTimeout(()=>{f()},m>2500?800:200)},()=>{i.hideLoading(e),i.revealContent(e)})}else{const u=this.optionFor(e,"initialSize"),m=this.optionFor(e,"zoom"),p={event:i.prevMouseMoveEvent||i.options.event,friction:m?.12:0};let f=i.optionFor(e,"showClass")||void 0,v=!0;i.isOpeningSlide(e)&&(u==="full"?r.zoomToFull(p):u==="cover"?r.zoomToCover(p):u==="max"?r.zoomToMax(p):v=!1,r.stop("current")),v&&f&&(f=r.isDragging?"f-fadeIn":""),i.hideLoading(e),i.revealContent(e,f)}var h},()=>{i.setError(e,"{{IMAGE_ERROR}}")})}process(e,t){return new Promise((i,r)=>{var a;const l=this.instance,o=e.el;l.clearContent(e),l.showLoading(e);let c=this.optionFor(e,"content");if(typeof c=="string"&&(c=pe(c)),!c||!Q(c)){if(c=document.createElement("img"),c instanceof HTMLImageElement){let d="",h=e.caption;d=typeof h=="string"&&h?h.replace(/<[^>]+>/gi,"").substring(0,1e3):`Image ${e.index+1} of ${((a=l.carousel)===null||a===void 0?void 0:a.pages.length)||1}`,c.src=t||"",c.alt=d,c.draggable=!1,e.srcset&&c.setAttribute("srcset",e.srcset),this.instance.isOpeningSlide(e)&&(c.fetchPriority="high")}e.sizes&&c.setAttribute("sizes",e.sizes)}k(c,"fancybox-image"),e.imageEl=c,l.setContent(e,c,!1),e.panzoom=new Fe(o,ee({transformParent:!0},this.option("Panzoom")||{},{content:c,width:(d,h)=>l.optionFor(e,"width","auto",h)||"auto",height:(d,h)=>l.optionFor(e,"height","auto",h)||"auto",wheel:()=>{const d=l.option("wheel");return(d==="zoom"||d=="pan")&&d},click:(d,h)=>{var u,m;if(l.isCompact||l.isClosing()||e.index!==((u=l.getSlide())===null||u===void 0?void 0:u.index))return!1;if(h){const f=h.composedPath()[0];if(["A","BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].includes(f.nodeName))return!1}let p=!h||h.target&&((m=e.contentEl)===null||m===void 0?void 0:m.contains(h.target));return l.option(p?"contentClick":"backdropClick")||!1},dblClick:()=>l.isCompact?"toggleZoom":l.option("contentDblClick")||!1,spinner:!1,panOnlyZoomed:!0,wheelLimit:1/0,on:{ready:d=>{i(d)},error:()=>{r()},destroy:()=>{r()}}}))})}zoomIn(e){return new Promise((t,i)=>{const r=this.instance,a=r.container,{panzoom:l,contentEl:o,el:c}=e;l&&l.updateMetrics();const d=this.getZoomInfo(e);if(!(d&&c&&o&&l&&a))return void i();const{x:h,y:u,scale:m,opacity:p}=d,f=()=>{e.state!==U.Closing&&(p&&(o.style.opacity=Math.max(Math.min(1,1-(1-l.scale)/(1-m)),0)+""),l.scale>=1&&l.scale>l.targetScale-.1&&t(l))},v=x=>{(x.scale<.99||x.scale>1.01)&&!x.isDragging||(R(a,Pt),o.style.opacity="",x.off("endAnimation",v),x.off("touchStart",v),x.off("afterTransform",f),t(x))};l.on("endAnimation",v),l.on("touchStart",v),l.on("afterTransform",f),l.on(["error","destroy"],()=>{i()}),l.panTo({x:h,y:u,scale:m,friction:0,ignoreBounds:!0}),l.stop("current");const b={event:l.panMode==="mousemove"?r.prevMouseMoveEvent||r.options.event:void 0},g=this.optionFor(e,"initialSize");k(a,Pt),r.hideLoading(e),g==="full"?l.zoomToFull(b):g==="cover"?l.zoomToCover(b):g==="max"?l.zoomToMax(b):l.reset(.172)})}getZoomInfo(e){const{el:t,imageEl:i,thumbEl:r,panzoom:a}=e,l=this.instance,o=l.container;if(!t||!i||!r||!a||Gs(r)<3||!this.optionFor(e,"zoom")||!o||l.state===Y.Destroy||getComputedStyle(o).getPropertyValue("--f-images-zoom")==="0")return!1;const c=window.visualViewport||null;if((c?c.scale:1)!==1)return!1;let{top:d,left:h,width:u,height:m}=r.getBoundingClientRect(),{top:p,left:f,fitWidth:v,fitHeight:b}=a.contentRect;if(!(u&&m&&v&&b))return!1;const g=a.container.getBoundingClientRect();f+=g.left,p+=g.top;const x=-1*(f+.5*v-(h+.5*u)),y=-1*(p+.5*b-(d+.5*m)),w=u/v;let _=this.option("zoomOpacity")||!1;return _==="auto"&&(_=Math.abs(u/m-v/b)>.1),{x,y,scale:w,opacity:_}}attach(){const e=this,t=e.instance;t.on("Carousel.change",e.onChange),t.on("Carousel.createSlide",e.onCreateSlide),t.on("Carousel.removeSlide",e.onRemoveSlide),t.on("close",e.onClose)}detach(){const e=this,t=e.instance;t.off("Carousel.change",e.onChange),t.off("Carousel.createSlide",e.onCreateSlide),t.off("Carousel.removeSlide",e.onRemoveSlide),t.off("close",e.onClose)}}Object.defineProperty(Us,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{initialSize:"fit",Panzoom:{maxScale:1},protected:!1,zoom:!0,zoomOpacity:"auto"}}),typeof SuppressedError=="function"&&SuppressedError;const oi="html",An="image",ci="map",xe="youtube",Ce="vimeo",tt="html5video",On=(n,e={})=>{const t=new URL(n),i=new URLSearchParams(t.search),r=new URLSearchParams;for(const[o,c]of[...i,...Object.entries(e)]){let d=c+"";if(o==="t"){let h=d.match(/((\d*)m)?(\d*)s?/);h&&r.set("start",60*parseInt(h[2]||"0")+parseInt(h[3]||"0")+"")}else r.set(o,d)}let a=r+"",l=n.match(/#t=((.*)?\d+s)/);return l&&(a+=`#t=${l[1]}`),a},Ll={ajax:null,autoSize:!0,iframeAttr:{allow:"autoplay; fullscreen",scrolling:"auto"},preload:!0,videoAutoplay:!0,videoRatio:16/9,videoTpl:``,videoFormat:"",vimeo:{byline:1,color:"00adef",controls:1,dnt:1,muted:0},youtube:{controls:1,enablejsapi:1,nocookie:1,rel:0,fs:1}},Al=["image","html","ajax","inline","clone","iframe","map","pdf","html5video","youtube","vimeo"];class Zs extends de{onBeforeInitSlide(e,t,i){this.processType(i)}onCreateSlide(e,t,i){this.setContent(i)}onClearContent(e,t){t.xhr&&(t.xhr.abort(),t.xhr=null);const i=t.iframeEl;i&&(i.onload=i.onerror=null,i.src="//about:blank",t.iframeEl=null);const r=t.contentEl,a=t.placeholderEl;if(t.type==="inline"&&r&&a)r.classList.remove("fancybox__content"),getComputedStyle(r).getPropertyValue("display")!=="none"&&(r.style.display="none"),setTimeout(()=>{a&&(r&&a.parentNode&&a.parentNode.insertBefore(r,a),a.remove())},0),t.contentEl=void 0,t.placeholderEl=void 0;else for(;t.el&&t.el.firstChild;)t.el.removeChild(t.el.firstChild)}onSelectSlide(e,t,i){i.state===U.Ready&&this.playVideo()}onUnselectSlide(e,t,i){var r,a;if(i.type===tt){try{(a=(r=i.el)===null||r===void 0?void 0:r.querySelector("video"))===null||a===void 0||a.pause()}catch{}return}let l;i.type===Ce?l={method:"pause",value:"true"}:i.type===xe&&(l={event:"command",func:"pauseVideo"}),l&&i.iframeEl&&i.iframeEl.contentWindow&&i.iframeEl.contentWindow.postMessage(JSON.stringify(l),"*"),i.poller&&clearTimeout(i.poller)}onDone(e,t){e.isCurrentSlide(t)&&!e.isClosing()&&this.playVideo()}onRefresh(e,t){t.slides.forEach(i=>{i.el&&(this.resizeIframe(i),this.setAspectRatio(i))})}onMessage(e){try{let t=JSON.parse(e.data);if(e.origin==="https://player.vimeo.com"){if(t.event==="ready")for(let i of Array.from(document.getElementsByClassName("fancybox__iframe")))i instanceof HTMLIFrameElement&&i.contentWindow===e.source&&(i.dataset.ready="true")}else if(e.origin.match(/^https:\/\/(www.)?youtube(-nocookie)?.com$/)&&t.event==="onReady"){const i=document.getElementById(t.id);i&&(i.dataset.ready="true")}}catch{}}loadAjaxContent(e){const t=this.instance.optionFor(e,"src")||"";this.instance.showLoading(e);const i=this.instance,r=new XMLHttpRequest;i.showLoading(e),r.onreadystatechange=function(){r.readyState===XMLHttpRequest.DONE&&i.state===Y.Ready&&(i.hideLoading(e),r.status===200?i.setContent(e,r.responseText):i.setError(e,r.status===404?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))};const a=e.ajax||null;r.open(a?"POST":"GET",t+""),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.setRequestHeader("X-Requested-With","XMLHttpRequest"),r.send(a),e.xhr=r}setInlineContent(e){let t=null;if(Q(e.src))t=e.src;else if(typeof e.src=="string"){const i=e.src.split("#",2).pop();t=i?document.getElementById(i):null}if(t){if(e.type==="clone"||t.closest(".fancybox__slide")){t=t.cloneNode(!0);const i=t.dataset.animationName;i&&(t.classList.remove(i),delete t.dataset.animationName);let r=t.getAttribute("id");r=r?`${r}--clone`:`clone-${this.instance.id}-${e.index}`,t.setAttribute("id",r)}else if(t.parentNode){const i=document.createElement("div");i.classList.add("fancybox-placeholder"),t.parentNode.insertBefore(i,t),e.placeholderEl=i}this.instance.setContent(e,t)}else this.instance.setError(e,"{{ELEMENT_NOT_FOUND}}")}setIframeContent(e){const{src:t,el:i}=e;if(!t||typeof t!="string"||!i)return;i.classList.add("is-loading");const r=this.instance,a=document.createElement("iframe");a.className="fancybox__iframe",a.setAttribute("id",`fancybox__iframe_${r.id}_${e.index}`);for(const[o,c]of Object.entries(this.optionFor(e,"iframeAttr")||{}))a.setAttribute(o,c);a.onerror=()=>{r.setError(e,"{{IFRAME_ERROR}}")},e.iframeEl=a;const l=this.optionFor(e,"preload");if(e.type!=="iframe"||l===!1)return a.setAttribute("src",e.src+""),r.setContent(e,a,!1),this.resizeIframe(e),void r.revealContent(e);r.showLoading(e),a.onload=()=>{if(!a.src.length)return;const o=a.dataset.ready!=="true";a.dataset.ready="true",this.resizeIframe(e),o?r.revealContent(e):r.hideLoading(e)},a.setAttribute("src",t),r.setContent(e,a,!1)}resizeIframe(e){const{type:t,iframeEl:i}=e;if(t===xe||t===Ce)return;const r=i==null?void 0:i.parentElement;if(!i||!r)return;let a=e.autoSize;a===void 0&&(a=this.optionFor(e,"autoSize"));let l=e.width||0,o=e.height||0;l&&o&&(a=!1);const c=r&&r.style;if(e.preload!==!1&&a!==!1&&c)try{const d=window.getComputedStyle(r),h=parseFloat(d.paddingLeft)+parseFloat(d.paddingRight),u=parseFloat(d.paddingTop)+parseFloat(d.paddingBottom),m=i.contentWindow;if(m){const p=m.document,f=p.getElementsByTagName(oi)[0],v=p.body;c.width="",v.style.overflow="hidden",l=l||f.scrollWidth+h,c.width=`${l}px`,v.style.overflow="",c.flex="0 0 auto",c.height=`${v.scrollHeight}px`,o=f.scrollHeight+u}}catch{}if(l||o){const d={flex:"0 1 auto",width:"",height:""};l&&l!=="auto"&&(d.width=`${l}px`),o&&o!=="auto"&&(d.height=`${o}px`),Object.assign(c,d)}}playVideo(){const e=this.instance.getSlide();if(!e)return;const{el:t}=e;if(!t||!t.offsetParent||!this.optionFor(e,"videoAutoplay"))return;if(e.type===tt)try{const r=t.querySelector("video");if(r){const a=r.play();a!==void 0&&a.then(()=>{}).catch(l=>{r.muted=!0,r.play()})}}catch{}if(e.type!==xe&&e.type!==Ce)return;const i=()=>{if(e.iframeEl&&e.iframeEl.contentWindow){let r;if(e.iframeEl.dataset.ready==="true")return r=e.type===xe?{event:"command",func:"playVideo"}:{method:"play",value:"true"},r&&e.iframeEl.contentWindow.postMessage(JSON.stringify(r),"*"),void(e.poller=void 0);e.type===xe&&(r={event:"listening",id:e.iframeEl.getAttribute("id")},e.iframeEl.contentWindow.postMessage(JSON.stringify(r),"*"))}e.poller=setTimeout(i,250)};i()}processType(e){if(e.html)return e.type=oi,e.src=e.html,void(e.html="");const t=this.instance.optionFor(e,"src","");if(!t||typeof t!="string")return;let i=e.type,r=null;if(r=t.match(/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|shorts\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const a=this.optionFor(e,xe),{nocookie:l}=a,o=function(u,m){var p={};for(var f in u)Object.prototype.hasOwnProperty.call(u,f)&&m.indexOf(f)<0&&(p[f]=u[f]);if(u!=null&&typeof Object.getOwnPropertySymbols=="function"){var v=0;for(f=Object.getOwnPropertySymbols(u);v0?"svembed":"embed"}`,i=ci):(r=t.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(e.src=`https://maps.google.${r[1]}/maps?q=${r[2].replace("query=","q=").replace("api=1","")}&output=embed`,i=ci),i=i||this.instance.option("defaultType"),e.type=i,i===An&&(e.thumbSrc=e.thumbSrc||e.src)}setContent(e){const t=this.instance.optionFor(e,"src")||"";if(e&&e.type&&t){switch(e.type){case oi:this.instance.setContent(e,t);break;case tt:const i=this.option("videoTpl");i&&this.instance.setContent(e,i.replace(/\{\{src\}\}/gi,t+"").replace(/\{\{format\}\}/gi,this.optionFor(e,"videoFormat")||"").replace(/\{\{poster\}\}/gi,e.poster||e.thumbSrc||""));break;case"inline":case"clone":this.setInlineContent(e);break;case"ajax":this.loadAjaxContent(e);break;case"pdf":case ci:case xe:case Ce:e.preload=!1;case"iframe":this.setIframeContent(e)}this.setAspectRatio(e)}}setAspectRatio(e){const t=e.contentEl;if(!(e.el&&t&&e.type&&[xe,Ce,tt].includes(e.type)))return;let i,r=e.width||"auto",a=e.height||"auto";if(r==="auto"||a==="auto"){i=this.optionFor(e,"videoRatio");const d=(i+"").match(/(\d+)\s*\/\s?(\d+)/);i=d&&d.length>2?parseFloat(d[1])/parseFloat(d[2]):parseFloat(i+"")}else r&&a&&(i=r/a);if(!i)return;t.style.aspectRatio="",t.style.width="",t.style.height="",t.offsetHeight;const l=t.getBoundingClientRect(),o=l.width||1,c=l.height||1;t.style.aspectRatio=i+"",i{e.timer=null,e.inHover||e.onTimerEnd()},i),e.emit("set")}clear(){const e=this;e.timer&&(clearTimeout(e.timer),e.timer=null),e.removeProgressBar()}start(){const e=this;if(e.set(),e.state!==it){if(e.option("pauseOnHover")){const t=e.instance.container;t.addEventListener("mouseenter",e.onMouseEnter,!1),t.addEventListener("mouseleave",e.onMouseLeave,!1)}document.addEventListener("visibilitychange",e.onVisibilityChange,!1),e.emit("start")}}stop(){const e=this,t=e.state,i=e.instance.container;e.clear(),e.state=it,i.removeEventListener("mouseenter",e.onMouseEnter,!1),i.removeEventListener("mouseleave",e.onMouseLeave,!1),document.removeEventListener("visibilitychange",e.onVisibilityChange,!1),R(i,"has-autoplay"),t!==it&&e.emit("stop")}pause(){const e=this;e.state===Mt&&(e.state=kt,e.clear(),e.emit(kt))}resume(){const e=this,t=e.instance;if(t.isInfinite||t.page!==t.pages.length-1)if(e.state!==Mt){if(e.state===kt&&!e.inHover){const i=new Event("resume",{bubbles:!0,cancelable:!0});e.emit("resume",i),i.defaultPrevented||e.set()}}else e.set();else e.stop()}toggle(){this.state===Mt||this.state===kt?this.stop():this.start()}attach(){const e=this,t=e.instance;t.on("ready",e.onReady),t.on("Panzoom.startAnimation",e.onChange),t.on("Panzoom.endAnimation",e.onSettle),t.on("Panzoom.touchMove",e.onChange)}detach(){const e=this,t=e.instance;t.off("ready",e.onReady),t.off("Panzoom.startAnimation",e.onChange),t.off("Panzoom.endAnimation",e.onSettle),t.off("Panzoom.touchMove",e.onChange),e.stop()}}Object.defineProperty(Ks,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{autoStart:!0,pauseOnHover:!0,progressParentEl:null,showProgress:!0,timeout:3e3}});class Js extends de{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null})}onPrepare(e){const t=e.carousel;if(!t)return;const i=e.container;i&&(t.options.Autoplay=ee({autoStart:!1},this.option("Autoplay")||{},{pauseOnHover:!1,timeout:this.option("timeout"),progressParentEl:()=>this.option("progressParentEl")||null,on:{start:()=>{e.emit("startSlideshow")},set:r=>{var a;i.classList.add("has-slideshow"),((a=e.getSlide())===null||a===void 0?void 0:a.state)!==U.Ready&&r.pause()},stop:()=>{i.classList.remove("has-slideshow"),e.isCompact||e.endIdle(),e.emit("endSlideshow")},resume:(r,a)=>{var l,o,c;!a||!a.cancelable||((l=e.getSlide())===null||l===void 0?void 0:l.state)===U.Ready&&(!((c=(o=e.carousel)===null||o===void 0?void 0:o.panzoom)===null||c===void 0)&&c.isResting)||a.preventDefault()}}}),t.attachPlugins({Autoplay:Ks}),this.ref=t.plugins.Autoplay)}onReady(e){const t=e.carousel,i=this.ref;i&&t&&this.option("playOnStart")&&(t.isInfinite||t.page{e.isCurrentSlide(t)&&i.stop()}),e.isCurrentSlide(t)&&i.resume()}onKeydown(e,t){var i;const r=this.ref;r&&t===this.option("key")&&((i=document.activeElement)===null||i===void 0?void 0:i.nodeName)!=="BUTTON"&&r.toggle()}attach(){const e=this,t=e.instance;t.on("Carousel.init",e.onPrepare),t.on("Carousel.ready",e.onReady),t.on("done",e.onDone),t.on("keydown",e.onKeydown)}detach(){const e=this,t=e.instance;t.off("Carousel.init",e.onPrepare),t.off("Carousel.ready",e.onReady),t.off("done",e.onDone),t.off("keydown",e.onKeydown)}}Object.defineProperty(Js,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{key:" ",playOnStart:!1,progressParentEl:n=>{var e;return((e=n.instance.container)===null||e===void 0?void 0:e.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]"))||n.instance.container},timeout:3e3}});const Qs={classes:{container:"f-thumbs f-carousel__thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide",isResting:"is-resting",isSelected:"is-selected",isLoading:"is-loading",hasThumbs:"has-thumbs"},minCount:2,parentEl:null,thumbTpl:'',type:"modern"};var we;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Hidden=2]="Hidden"})(we||(we={}));const In="isResting",Lt="thumbWidth",$e="thumbHeight",he="thumbClipWidth";let er=class extends de{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"modern"}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"thumbWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbClipWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbExtraGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:we.Init})}get isModern(){return this.type==="modern"}onInitSlide(n,e){const t=e.el?e.el.dataset:void 0;t&&(e.thumbSrc=t.thumbSrc||e.thumbSrc||"",e[he]=parseFloat(t[he]||"")||e[he]||0,e[$e]=parseFloat(t.thumbHeight||"")||e[$e]||0),this.addSlide(e)}onInitSlides(){this.build()}onChange(){var n;if(!this.isModern)return;const e=this.container,t=this.instance,i=t.panzoom,r=this.carousel,a=r?r.panzoom:null,l=t.page;if(i&&r&&a){if(i.isDragging){R(e,this.cn(In));let o=((n=r.pages[l])===null||n===void 0?void 0:n.pos)||0;o+=t.getProgress(l)*(this[he]+this.thumbGap);let c=a.getBounds();-1*o>c.x.min&&-1*oparseFloat(getComputedStyle(n).getPropertyValue("--f-thumb-"+t))||0;this.thumbGap=e("gap"),this.thumbExtraGap=e("extra-gap"),this[Lt]=e("width")||40,this[he]=e("clip-width")||40,this[$e]=e("height")||40}build(){const n=this;if(n.state!==we.Init)return;if(n.isDisabled())return void n.emit("disabled");const e=n.instance,t=e.container,i=n.getSlides(),r=n.option("type");n.type=r;const a=n.option("parentEl"),l=n.cn("container"),o=n.cn("track");let c=a==null?void 0:a.querySelector("."+l);c||(c=document.createElement("div"),k(c,l),a?a.appendChild(c):t.after(c)),k(c,`is-${r}`),k(t,n.cn("hasThumbs")),n.container=c,n.updateProps();let d=c.querySelector("."+o);d||(d=document.createElement("div"),k(d,n.cn("track")),c.appendChild(d)),n.track=d;const h=ee({},{track:d,infinite:!1,center:!0,fill:r==="classic",dragFree:!0,slidesPerPage:1,transition:!1,preload:.25,friction:.12,Panzoom:{maxVelocity:0},Dots:!1,Navigation:!1,classes:{container:"f-thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide"}},n.option("Carousel")||{},{Sync:{target:e},slides:i}),u=new e.constructor(c,h);u.on("createSlide",(m,p)=>{n.setProps(p.index),n.emit("createSlide",p,p.el)}),u.on("ready",()=>{n.shiftModern(),n.emit("ready")}),u.on("refresh",()=>{n.shiftModern()}),u.on("Panzoom.click",(m,p,f)=>{n.onClick(f)}),n.carousel=u,n.state=we.Ready}onClick(n){n.preventDefault(),n.stopPropagation();const e=this.instance,{pages:t,page:i}=e,r=v=>{if(v){const b=v.closest("[data-carousel-index]");if(b)return[parseInt(b.dataset.carouselIndex||"",10)||0,b]}return[-1,void 0]},a=(v,b)=>{const g=document.elementFromPoint(v,b);return g?r(g):[-1,void 0]};let[l,o]=r(n.target);if(l>-1)return;const c=this[he],d=n.clientX,h=n.clientY;let[u,m]=a(d-c,h),[p,f]=a(d+c,h);m&&f?(l=Math.abs(d-m.getBoundingClientRect().right)-1&&t[l]&&e.slideTo(l)}getShift(n){var e;const t=this,{instance:i}=t,r=t.carousel;if(!i||!r)return 0;const a=t[Lt],l=t[he],o=t.thumbGap,c=t.thumbExtraGap;if(!(!((e=r.slides[n])===null||e===void 0)&&e.el))return 0;const d=.5*(a-l),h=i.pages.length-1;let u=i.getProgress(0),m=i.getProgress(h),p=i.getProgress(n,!1,!0),f=0,v=d+c+o;const b=u<0&&u>-1,g=m>0&&m<1;return n===0?(f=v*Math.abs(u),g&&u===1&&(f-=v*Math.abs(m))):n===h?(f=v*Math.abs(m)*-1,b&&m===-1&&(f+=v*Math.abs(u))):b||g?(f=-1*v,f+=v*Math.abs(u),f+=v*(1-Math.abs(m))):f=v*p,f}setProps(n){var e;const t=this;if(!t.isModern)return;const{instance:i}=t,r=t.carousel;if(i&&r){const a=(e=r.slides[n])===null||e===void 0?void 0:e.el;if(a&&a.childNodes.length){let l=T(1-Math.abs(i.getProgress(n))),o=T(t.getShift(n));a.style.setProperty("--progress",l?l+"":""),a.style.setProperty("--shift",o+"")}}}shiftModern(){const n=this;if(!n.isModern)return;const{instance:e,track:t}=n,i=e.panzoom,r=n.carousel;if(!(e&&t&&i&&r)||i.state===j.Init||i.state===j.Destroy)return;for(const l of e.slides)n.setProps(l.index);let a=(n[he]+n.thumbGap)*(r.slides.length||0);t.style.setProperty("--width",a+"")}cleanup(){const n=this;n.carousel&&n.carousel.destroy(),n.carousel=null,n.container&&n.container.remove(),n.container=null,n.track&&n.track.remove(),n.track=null,n.state=we.Init,R(n.instance.container,n.cn("hasThumbs"))}attach(){const n=this,e=n.instance;e.on("initSlide",n.onInitSlide),e.state===W.Init?e.on("initSlides",n.onInitSlides):n.onInitSlides(),e.on(["change","Panzoom.afterTransform"],n.onChange),e.on("Panzoom.refresh",n.onRefresh)}detach(){const n=this,e=n.instance;e.off("initSlide",n.onInitSlide),e.off("initSlides",n.onInitSlides),e.off(["change","Panzoom.afterTransform"],n.onChange),e.off("Panzoom.refresh",n.onRefresh),n.cleanup()}};Object.defineProperty(er,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Qs});const Ol=Object.assign(Object.assign({},Qs),{key:"t",showOnStart:!0,parentEl:null}),Dn="is-masked",zn="aria-hidden";class tr extends de{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hidden",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isEnabled(){const e=this.ref;return e&&!e.isDisabled()}get isHidden(){return this.hidden}onClick(e,t){t.stopPropagation()}onCreateSlide(e,t){var i,r,a;const l=((a=(r=(i=this.instance)===null||i===void 0?void 0:i.carousel)===null||r===void 0?void 0:r.slides[t.index])===null||a===void 0?void 0:a.type)||"",o=t.el;if(o&&l){let c=`for-${l}`;["video","youtube","vimeo","html5video"].includes(l)&&(c+=" for-video"),k(o,c)}}onInit(){var e;const t=this,i=t.instance,r=i.carousel;if(t.ref||!r)return;const a=t.option("parentEl")||i.footer||i.container;if(!a)return;const l=ee({},t.options,{parentEl:a,classes:{container:"f-thumbs fancybox__thumbs"},Carousel:{Sync:{friction:i.option("Carousel.friction")||0}},on:{ready:o=>{const c=o.container;c&&this.hidden&&(t.refresh(),c.style.transition="none",t.hide(),c.offsetHeight,queueMicrotask(()=>{c.style.transition="",t.show()}))}}});l.Carousel=l.Carousel||{},l.Carousel.on=ee(((e=t.options.Carousel)===null||e===void 0?void 0:e.on)||{},{click:this.onClick,createSlide:this.onCreateSlide}),r.options.Thumbs=l,r.attachPlugins({Thumbs:er}),t.ref=r.plugins.Thumbs,t.option("showOnStart")||(t.ref.state=we.Hidden,t.hidden=!0)}onResize(){var e;const t=(e=this.ref)===null||e===void 0?void 0:e.container;t&&(t.style.maxHeight="")}onKeydown(e,t){const i=this.option("key");i&&i===t&&this.toggle()}toggle(){const e=this.ref;if(e&&!e.isDisabled())return e.state===we.Hidden?(e.state=we.Init,void e.build()):void(this.hidden?this.show():this.hide())}show(){const e=this.ref;if(!e||e.isDisabled())return;const t=e.container;t&&(this.refresh(),t.offsetHeight,t.removeAttribute(zn),t.classList.remove(Dn),this.hidden=!1)}hide(){const e=this.ref,t=e&&e.container;t&&(this.refresh(),t.offsetHeight,t.classList.add(Dn),t.setAttribute(zn,"true")),this.hidden=!0}refresh(){const e=this.ref;if(!e||!e.state)return;const t=e.container,i=(t==null?void 0:t.firstChild)||null;t&&i&&i.childNodes.length&&(t.style.maxHeight=`${i.getBoundingClientRect().height}px`)}attach(){const e=this,t=e.instance;t.state===Y.Init?t.on("Carousel.init",e.onInit):e.onInit(),t.on("resize",e.onResize),t.on("keydown",e.onKeydown)}detach(){var e;const t=this,i=t.instance;i.off("Carousel.init",t.onInit),i.off("resize",t.onResize),i.off("keydown",t.onKeydown),(e=i.carousel)===null||e===void 0||e.detachPlugins(["Thumbs"]),t.ref=null}}Object.defineProperty(tr,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Ol});const di={panLeft:{icon:'',change:{panX:-100}},panRight:{icon:'',change:{panX:100}},panUp:{icon:'',change:{panY:-100}},panDown:{icon:'',change:{panY:100}},zoomIn:{icon:'',action:"zoomIn"},zoomOut:{icon:'',action:"zoomOut"},toggle1to1:{icon:'',action:"toggleZoom"},toggleZoom:{icon:'',action:"toggleZoom"},iterateZoom:{icon:'',action:"iterateZoom"},rotateCCW:{icon:'',action:"rotateCCW"},rotateCW:{icon:'',action:"rotateCW"},flipX:{icon:'',action:"flipX"},flipY:{icon:'',action:"flipY"},fitX:{icon:'',action:"fitX"},fitY:{icon:'',action:"fitY"},reset:{icon:'',action:"reset"},toggleFS:{icon:'',action:"toggleFS"}};var Ie;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Disabled=2]="Disabled"})(Ie||(Ie={}));const Il={absolute:"auto",display:{left:["infobar"],middle:[],right:["iterateZoom","slideshow","fullscreen","thumbs","close"]},enabled:"auto",items:{infobar:{tpl:'
/
'},download:{tpl:''},prev:{tpl:''},next:{tpl:''},slideshow:{tpl:''},fullscreen:{tpl:''},thumbs:{tpl:''},close:{tpl:''}},parentEl:null},Dl={tabindex:"-1",width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},Rn="has-toolbar",hi="fancybox__toolbar";class ir extends de{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Ie.Init}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null})}onReady(e){var t;if(!e.carousel)return;let i=this.option("display"),r=this.option("absolute"),a=this.option("enabled");if(a==="auto"){const d=this.instance.carousel;let h=0;if(d)for(const u of d.slides)(u.panzoom||u.type==="image")&&h++;h||(a=!1)}a||(i=void 0);let l=0;const o={left:[],middle:[],right:[]};if(i)for(const d of["left","middle","right"])for(const h of i[d]){const u=this.createEl(h);u&&((t=o[d])===null||t===void 0||t.push(u),l++)}let c=null;if(l&&(c=this.createContainer()),c){for(const[d,h]of Object.entries(o)){const u=document.createElement("div");k(u,hi+"__column is-"+d);for(const m of h)u.appendChild(m);r!=="auto"||d!=="middle"||h.length||(r=!0),c.appendChild(u)}r===!0&&k(c,"is-absolute"),this.state=Ie.Ready,this.onRefresh()}else this.state=Ie.Disabled}onClick(e){var t,i;const r=this.instance,a=r.getSlide(),l=a==null?void 0:a.panzoom,o=e.target,c=o&&Q(o)?o.dataset:null;if(!c)return;if(c.fancyboxToggleThumbs!==void 0)return e.preventDefault(),e.stopPropagation(),void((t=r.plugins.Thumbs)===null||t===void 0||t.toggle());if(c.fancyboxToggleFullscreen!==void 0)return e.preventDefault(),e.stopPropagation(),void this.instance.toggleFullscreen();if(c.fancyboxToggleSlideshow!==void 0){e.preventDefault(),e.stopPropagation();const u=(i=r.carousel)===null||i===void 0?void 0:i.plugins.Autoplay;let m=u.isActive;return l&&l.panMode==="mousemove"&&!m&&l.reset(),void(m?u.stop():u.start())}const d=c.panzoomAction,h=c.panzoomChange;if((h||d)&&(e.preventDefault(),e.stopPropagation()),h){let u={};try{u=JSON.parse(h)}catch{}l&&l.applyChange(u)}else d&&l&&l[d]&&l[d]()}onChange(){this.onRefresh()}onRefresh(){if(this.instance.isClosing())return;const e=this.container;if(!e)return;const t=this.instance.getSlide();if(!t||t.state!==U.Ready)return;const i=t&&!t.error&&t.panzoom;for(const l of e.querySelectorAll("[data-panzoom-action]"))i?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));let r=i&&i.canZoomIn(),a=i&&i.canZoomOut();for(const l of e.querySelectorAll('[data-panzoom-action="zoomIn"]'))r?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));for(const l of e.querySelectorAll('[data-panzoom-action="zoomOut"]'))a?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));for(const l of e.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')){a||r?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));const o=l.querySelector("g");o&&(o.style.display=r?"":"none")}}onDone(e,t){var i;(i=t.panzoom)===null||i===void 0||i.on("afterTransform",()=>{this.instance.isCurrentSlide(t)&&this.onRefresh()}),this.instance.isCurrentSlide(t)&&this.onRefresh()}createContainer(){const e=this.instance.container;if(!e)return null;const t=this.option("parentEl")||e;let i=t.querySelector("."+hi);return i||(i=document.createElement("div"),k(i,hi),t.prepend(i)),i.addEventListener("click",this.onClick,{passive:!1,capture:!0}),e&&k(e,Rn),this.container=i,i}createEl(e){const t=this.instance,i=t.carousel;if(!i||e==="toggleFS"||e==="fullscreen"&&!Vs())return null;let r=null;const a=i.slides.length||0;let l=0,o=0;for(const d of i.slides)(d.panzoom||d.type==="image")&&l++,(d.type==="image"||d.downloadSrc)&&o++;if(a<2&&["infobar","prev","next"].includes(e))return r;if(di[e]!==void 0&&!l||e==="download"&&!o)return null;if(e==="thumbs"){const d=t.plugins.Thumbs;if(!d||!d.isEnabled)return null}if(e==="slideshow"&&(!i.plugins.Autoplay||a<2))return null;if(di[e]!==void 0){const d=di[e];r=document.createElement("button"),r.setAttribute("title",this.instance.localize(`{{${e.toUpperCase()}}}`)),k(r,"f-button"),d.action&&(r.dataset.panzoomAction=d.action),d.change&&(r.dataset.panzoomChange=JSON.stringify(d.change)),r.appendChild(pe(this.instance.localize(d.icon)))}else{const d=(this.option("items")||[])[e];d&&(r=pe(this.instance.localize(d.tpl)),typeof d.click=="function"&&r.addEventListener("click",h=>{h.preventDefault(),h.stopPropagation(),typeof d.click=="function"&&d.click.call(this,this,h)}))}const c=r==null?void 0:r.querySelector("svg");if(c)for(const[d,h]of Object.entries(Dl))c.getAttribute(d)||c.setAttribute(d,String(h));return r}removeContainer(){const e=this.container;e&&e.remove(),this.container=null,this.state=Ie.Disabled;const t=this.instance.container;t&&R(t,Rn)}attach(){const e=this,t=e.instance;t.on("Carousel.initSlides",e.onReady),t.on("done",e.onDone),t.on(["reveal","Carousel.change"],e.onChange),e.onReady(e.instance)}detach(){const e=this,t=e.instance;t.off("Carousel.initSlides",e.onReady),t.off("done",e.onDone),t.off(["reveal","Carousel.change"],e.onChange),e.removeContainer()}}Object.defineProperty(ir,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Il});const zl={Hash:class extends de{onReady(){at=!1}onChange(n){Ae&&clearTimeout(Ae);const{hash:e}=Ws(),{hash:t}=$t(),i=n.isOpeningSlide(n.getSlide());i&&(kn=t===e?"":t),e&&e!==t&&(Ae=setTimeout(()=>{try{if(n.state===Y.Ready){let r="replaceState";i&&!Ct&&(r="pushState",Ct=!0),window.history[r]({},document.title,window.location.pathname+window.location.search+e)}}catch{}},300))}onClose(n){if(Ae&&clearTimeout(Ae),!at&&Ct)return Ct=!1,at=!1,void window.history.back();if(!at)try{window.history.replaceState({},document.title,window.location.pathname+window.location.search+(kn||""))}catch{}}attach(){const n=this.instance;n.on("ready",this.onReady),n.on(["Carousel.ready","Carousel.change"],this.onChange),n.on("close",this.onClose)}detach(){const n=this.instance;n.off("ready",this.onReady),n.off(["Carousel.ready","Carousel.change"],this.onChange),n.off("close",this.onClose)}static parseURL(){return $t()}static startFromUrl(){Xs()}static destroy(){window.removeEventListener("hashchange",Ys,!1)}},Html:Zs,Images:Us,Slideshow:Js,Thumbs:tr,Toolbar:ir},jn="with-fancybox",ui="hide-scrollbar",Fn="--fancybox-scrollbar-compensate",Bn="--fancybox-body-margin",pi="aria-hidden",mi="is-using-tab",fi="is-animated",Hn="is-compact",$n="is-loading",gi="is-opening",At="has-caption",Ge="disabled",Pe="tabindex",Gn="download",vi="href",Ve="src",Ne=n=>typeof n=="string",Vn=function(){var n=window.getSelection();return!!n&&n.type==="Range"};let ae,le=null,Me=null,Wn=0,Xn=0,qn=0,Yn=0;const We=new Map;let Rl=0;class z extends Hi{get isIdle(){return this.idle}get isCompact(){return this.option("compact")}constructor(e=[],t={},i={}){super(t),Object.defineProperty(this,"userSlides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"idle",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"idleTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"ignoreFocusChange",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"startedFs",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Y.Init}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastFocus",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prevMouseMoveEvent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ae||(ae=Vs()),this.id=t.id||++Rl,We.set(this.id,this),this.userSlides=e,this.userPlugins=i,queueMicrotask(()=>{this.init()})}init(){if(this.state===Y.Destroy)return;this.state=Y.Init,this.attachPlugins(Object.assign(Object.assign({},z.Plugins),this.userPlugins)),this.emit("init"),this.emit("attachPlugins"),this.option("hideScrollbar")===!0&&(()=>{if(!ct)return;const t=document,i=t.body,r=t.documentElement;if(i.classList.contains(ui))return;let a=window.innerWidth-r.getBoundingClientRect().width;const l=parseFloat(window.getComputedStyle(i).marginRight);a<0&&(a=0),r.style.setProperty(Fn,`${a}px`),l&&i.style.setProperty(Bn,`${l}px`),i.classList.add(ui)})(),this.initLayout(),this.scale();const e=()=>{this.initCarousel(this.userSlides),this.state=Y.Ready,this.attachEvents(),this.emit("ready"),setTimeout(()=>{this.container&&this.container.setAttribute(pi,"false")},16)};this.option("Fullscreen.autoStart")&&ae&&!ae.isFullscreen()?ae.request().then(()=>{this.startedFs=!0,e()}).catch(()=>e()):e()}initLayout(){var e,t;const i=this.option("parentEl")||document.body,r=pe(this.localize(this.option("tpl.main")||""));if(r){if(r.setAttribute("id",`fancybox-${this.id}`),r.setAttribute("aria-label",this.localize("{{MODAL}}")),r.classList.toggle(Hn,this.isCompact),k(r,this.option("mainClass")||""),k(r,gi),this.container=r,this.footer=r.querySelector(".fancybox__footer"),i.appendChild(r),k(document.documentElement,jn),le&&Me||(le=document.createElement("span"),k(le,"fancybox-focus-guard"),le.setAttribute(Pe,"0"),le.setAttribute(pi,"true"),le.setAttribute("aria-label","Focus guard"),Me=le.cloneNode(),(e=r.parentElement)===null||e===void 0||e.insertBefore(le,r),(t=r.parentElement)===null||t===void 0||t.append(Me)),r.addEventListener("mousedown",a=>{Wn=a.pageX,Xn=a.pageY,R(r,mi)}),this.option("closeExisting"))for(const a of We.values())a.id!==this.id&&a.close();else this.option("animated")&&(k(r,fi),setTimeout(()=>{this.isClosing()||R(r,fi)},350));this.emit("initLayout")}}initCarousel(e){const t=this.container;if(!t)return;const i=t.querySelector(".fancybox__carousel");if(!i)return;const r=this.carousel=new ze(i,ee({},{slides:e,transition:"fade",Panzoom:{lockAxis:this.option("dragToClose")?"xy":"x",infinite:!!this.option("dragToClose")&&"y"},Dots:!1,Navigation:{classes:{container:"fancybox__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"}},initialPage:this.option("startIndex"),l10n:this.option("l10n")},this.option("Carousel")||{}));r.on("*",(a,l,...o)=>{this.emit(`Carousel.${l}`,a,...o)}),r.on(["ready","change"],()=>{this.manageCaption()}),this.on("Carousel.removeSlide",(a,l,o)=>{this.clearContent(o),o.state=void 0}),r.on("Panzoom.touchStart",()=>{var a,l;this.isCompact||this.endIdle(),!((a=document.activeElement)===null||a===void 0)&&a.closest(".f-thumbs")&&((l=this.container)===null||l===void 0||l.focus())}),r.on("settle",()=>{this.idleTimer||this.isCompact||!this.option("idle")||this.setIdle(),this.option("autoFocus")&&!this.isClosing&&this.checkFocus()}),this.option("dragToClose")&&(r.on("Panzoom.afterTransform",(a,l)=>{const o=this.getSlide();if(o&&Pi(o.el))return;const c=this.container;if(c){const d=Math.abs(l.current.f),h=d<1?"":Math.max(.5,Math.min(1,1-d/l.contentRect.fitHeight*1.5));c.style.setProperty("--fancybox-ts",h?"0s":""),c.style.setProperty("--fancybox-opacity",h+"")}}),r.on("Panzoom.touchEnd",(a,l,o)=>{var c;const d=this.getSlide();if(d&&Pi(d.el)||l.isMobile&&document.activeElement&&["TEXTAREA","INPUT"].indexOf((c=document.activeElement)===null||c===void 0?void 0:c.nodeName)!==-1)return;const h=Math.abs(l.dragOffset.y);l.lockedAxis==="y"&&(h>=200||h>=50&&l.dragOffset.time<300)&&(o&&o.cancelable&&o.preventDefault(),this.close(o,"f-throwOut"+(l.current.f<0?"Up":"Down")))})),r.on("change",a=>{var l;let o=(l=this.getSlide())===null||l===void 0?void 0:l.triggerEl;if(o){const c=new CustomEvent("slideTo",{bubbles:!0,cancelable:!0,detail:a.page});o.dispatchEvent(c)}}),r.on(["refresh","change"],a=>{const l=this.container;if(!l)return;for(const d of l.querySelectorAll("[data-fancybox-current-index]"))d.innerHTML=a.page+1;for(const d of l.querySelectorAll("[data-fancybox-count]"))d.innerHTML=a.pages.length;if(!a.isInfinite){for(const d of l.querySelectorAll("[data-fancybox-next]"))a.page0?(d.removeAttribute(Ge),d.removeAttribute(Pe)):(d.setAttribute(Ge,""),d.setAttribute(Pe,"-1"))}const o=this.getSlide();if(!o)return;let c=o.downloadSrc||"";c||o.type!=="image"||o.error||!Ne(o[Ve])||(c=o[Ve]);for(const d of l.querySelectorAll("[data-fancybox-download]")){const h=o.downloadFilename;c?(d.removeAttribute(Ge),d.removeAttribute(Pe),d.setAttribute(vi,c),d.setAttribute(Gn,h||c),d.setAttribute("target","_blank")):(d.setAttribute(Ge,""),d.setAttribute(Pe,"-1"),d.removeAttribute(vi),d.removeAttribute(Gn))}}),this.emit("initCarousel")}attachEvents(){const e=this,t=e.container;if(!t)return;t.addEventListener("click",e.onClick,{passive:!1,capture:!1}),t.addEventListener("wheel",e.onWheel,{passive:!1,capture:!1}),document.addEventListener("keydown",e.onKeydown,{passive:!1,capture:!0}),document.addEventListener("visibilitychange",e.onVisibilityChange,!1),document.addEventListener("mousemove",e.onMousemove),e.option("trapFocus")&&document.addEventListener("focus",e.onFocus,!0),window.addEventListener("resize",e.onResize);const i=window.visualViewport;i&&(i.addEventListener("scroll",e.onResize),i.addEventListener("resize",e.onResize))}detachEvents(){const e=this,t=e.container;if(!t)return;document.removeEventListener("keydown",e.onKeydown,{passive:!1,capture:!0}),t.removeEventListener("wheel",e.onWheel,{passive:!1,capture:!1}),t.removeEventListener("click",e.onClick,{passive:!1,capture:!1}),document.removeEventListener("mousemove",e.onMousemove),window.removeEventListener("resize",e.onResize);const i=window.visualViewport;i&&(i.removeEventListener("resize",e.onResize),i.removeEventListener("scroll",e.onResize)),document.removeEventListener("visibilitychange",e.onVisibilityChange,!1),document.removeEventListener("focus",e.onFocus,!0)}scale(){const e=this.container;if(!e)return;const t=window.visualViewport,i=Math.max(1,(t==null?void 0:t.scale)||1);let r="",a="",l="";if(t&&i>1){let o=`${t.offsetLeft}px`,c=`${t.offsetTop}px`;r=t.width*i+"px",a=t.height*i+"px",l=`translate3d(${o}, ${c}, 0) scale(${1/i})`}e.style.transform=l,e.style.width=r,e.style.height=a}onClick(e){var t;const{container:i,isCompact:r}=this;if(!i||this.isClosing())return;!r&&this.option("idle")&&this.resetIdle();const a=e.composedPath()[0];if(a.closest(".fancybox-spinner")||a.closest("[data-fancybox-close]"))return e.preventDefault(),void this.close(e);if(a.closest("[data-fancybox-prev]"))return e.preventDefault(),void this.prev();if(a.closest("[data-fancybox-next]"))return e.preventDefault(),void this.next();if(e.type==="click"&&e.detail===0||Math.abs(e.pageX-Wn)>30||Math.abs(e.pageY-Xn)>30)return;const l=document.activeElement;if(Vn()&&l&&i.contains(l))return;if(r&&((t=this.getSlide())===null||t===void 0?void 0:t.type)==="image")return void(this.clickTimer?(clearTimeout(this.clickTimer),this.clickTimer=null):this.clickTimer=setTimeout(()=>{this.toggleIdle(),this.clickTimer=null},350));if(this.emit("click",e),e.defaultPrevented)return;let o=!1;if(a.closest(".fancybox__content")){if(l){if(l.closest("[contenteditable]"))return;a.matches(li)||l.blur()}if(Vn())return;o=this.option("contentClick")}else a.closest(".fancybox__carousel")&&!a.matches(li)&&(o=this.option("backdropClick"));o==="close"?(e.preventDefault(),this.close(e)):o==="next"?(e.preventDefault(),this.next()):o==="prev"&&(e.preventDefault(),this.prev())}onWheel(e){const t=e.target;let i=this.option("wheel",e);t.closest(".fancybox__thumbs")&&(i="slide");const r=i==="slide",a=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(c,d){return Math.abs(d)>Math.abs(c)?d:c}),l=Math.max(-1,Math.min(1,a)),o=Date.now();this.pwt&&o-this.pwt<300?r&&e.preventDefault():(this.pwt=o,this.emit("wheel",e,l),e.defaultPrevented||(i==="close"?(e.preventDefault(),this.close(e)):i==="slide"&&(Bt(t)||(e.preventDefault(),this[l>0?"prev":"next"]()))))}onScroll(){window.scrollTo(qn,Yn)}onKeydown(e){if(!this.isTopmost())return;this.isCompact||!this.option("idle")||this.isClosing()||this.resetIdle();const t=e.key,i=this.option("keyboard");if(!i)return;const r=e.composedPath()[0],a=document.activeElement&&document.activeElement.classList,l=a&&a.contains("f-button")||r.dataset.carouselPage||r.dataset.carouselIndex;if(t!=="Escape"&&!l&&Q(r)&&(r.isContentEditable||["TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(r.nodeName)!==-1)||(e.key==="Tab"?k(this.container,mi):R(this.container,mi),e.ctrlKey||e.altKey||e.shiftKey))return;this.emit("keydown",t,e);const o=i[t];o&&typeof this[o]=="function"&&(e.preventDefault(),this[o]())}onResize(){const e=this.container;if(!e)return;const t=this.isCompact;e.classList.toggle(Hn,t),this.manageCaption(this.getSlide()),this.isCompact?this.clearIdle():this.endIdle(),this.scale(),this.emit("resize")}onFocus(e){this.isTopmost()&&this.checkFocus(e)}onMousemove(e){this.prevMouseMoveEvent=e,!this.isCompact&&this.option("idle")&&this.resetIdle()}onVisibilityChange(){document.visibilityState==="visible"?this.checkFocus():this.endIdle()}manageCloseBtn(e){const t=this.optionFor(e,"closeButton")||!1;if(t==="auto"){const r=this.plugins.Toolbar;if(r&&r.state===Ie.Ready)return}if(!t||!e.contentEl||e.closeBtnEl)return;const i=this.option("tpl.closeButton");if(i){const r=pe(this.localize(i));e.closeBtnEl=e.contentEl.appendChild(r),e.el&&k(e.el,"has-close-btn")}}manageCaption(e=void 0){var t,i;const r="fancybox__caption",a=this.container;if(!a)return;R(a,At);const l=this.isCompact||this.option("commonCaption"),o=!l;if(this.caption&&this.stop(this.caption),o&&this.caption&&(this.caption.remove(),this.caption=null),l&&!this.caption)for(const u of((t=this.carousel)===null||t===void 0?void 0:t.slides)||[])u.captionEl&&(u.captionEl.remove(),u.captionEl=void 0,R(u.el,At),(i=u.el)===null||i===void 0||i.removeAttribute("aria-labelledby"));if(e||(e=this.getSlide()),!e||l&&!this.isCurrentSlide(e))return;const c=e.el;let d=this.optionFor(e,"caption","");if(!d)return void(l&&this.caption&&this.animate(this.caption,"f-fadeOut",()=>{this.caption&&(this.caption.innerHTML="")}));let h=null;if(o){if(h=e.captionEl||null,c&&!h){const u=r+`_${this.id}_${e.index}`;h=document.createElement("div"),k(h,r),h.setAttribute("id",u),e.captionEl=c.appendChild(h),k(c,At),c.setAttribute("aria-labelledby",u)}}else h=this.caption,h||(h=a.querySelector("."+r)),!h&&(h=document.createElement("div"),h.dataset.fancyboxCaption="",k(h,r),(this.footer||a).prepend(h)),k(a,At),this.caption=h;h&&(h.innerHTML="",Ne(d)||typeof d=="number"?h.innerHTML=d+"":d instanceof HTMLElement&&h.appendChild(d))}checkFocus(e){this.focus(e)}focus(e){var t;if(this.ignoreFocusChange)return;const i=document.activeElement||null,r=(e==null?void 0:e.target)||null,a=this.container,l=(t=this.carousel)===null||t===void 0?void 0:t.viewport;if(!a||!l||!e&&i&&a.contains(i))return;const o=this.getSlide(),c=o&&o.state===U.Ready?o.el:null;if(!c||c.contains(i)||a===i)return;e&&e.cancelable&&e.preventDefault(),this.ignoreFocusChange=!0;const d=Array.from(a.querySelectorAll(li));let h=[],u=null;for(let p of d){const f=!p.offsetParent||!!p.closest('[aria-hidden="true"]'),v=c&&c.contains(p),b=!l.contains(p);if(p===a||(v||b)&&!f){h.push(p);const g=p.dataset.origTabindex;g!==void 0&&g&&(p.tabIndex=parseFloat(g)),p.removeAttribute("data-orig-tabindex"),!p.hasAttribute("autoFocus")&&u||(u=p)}else{const g=p.dataset.origTabindex===void 0?p.getAttribute("tabindex")||"":p.dataset.origTabindex;g&&(p.dataset.origTabindex=g),p.tabIndex=-1}}let m=null;e?(!r||h.indexOf(r)<0)&&(m=u||a,h.length&&(i===Me?m=h[0]:this.lastFocus!==a&&i!==le||(m=h[h.length-1]))):m=o&&o.type==="image"?a:u||a,m&&Mn(m),this.lastFocus=document.activeElement,this.ignoreFocusChange=!1}next(){const e=this.carousel;e&&e.pages.length>1&&e.slideNext()}prev(){const e=this.carousel;e&&e.pages.length>1&&e.slidePrev()}jumpTo(...e){this.carousel&&this.carousel.slideTo(...e)}isTopmost(){var e;return((e=z.getInstance())===null||e===void 0?void 0:e.id)==this.id}animate(e=null,t="",i){if(!e||!t)return void(i&&i());this.stop(e);const r=a=>{a.target===e&&e.dataset.animationName&&(e.removeEventListener("animationend",r),delete e.dataset.animationName,i&&i(),R(e,t))};e.dataset.animationName=t,e.addEventListener("animationend",r),k(e,t)}stop(e){e&&e.dispatchEvent(new CustomEvent("animationend",{bubbles:!1,cancelable:!0,currentTarget:e}))}setContent(e,t="",i=!0){if(this.isClosing())return;const r=e.el;if(!r)return;let a=null;if(Q(t)?a=t:(a=pe(t+""),Q(a)||(a=document.createElement("div"),a.innerHTML=t+"")),["img","picture","iframe","video","audio"].includes(a.nodeName.toLowerCase())){const l=document.createElement("div");l.appendChild(a),a=l}Q(a)&&e.filter&&!e.error&&(a=a.querySelector(e.filter)),a&&Q(a)?(k(a,"fancybox__content"),e.id&&a.setAttribute("id",e.id),r.classList.add(`has-${e.error?"error":e.type||"unknown"}`),r.prepend(a),a.style.display==="none"&&(a.style.display=""),getComputedStyle(a).getPropertyValue("display")==="none"&&(a.style.display=e.display||this.option("defaultDisplay")||"flex"),e.contentEl=a,i&&this.revealContent(e),this.manageCloseBtn(e),this.manageCaption(e)):this.setError(e,"{{ELEMENT_NOT_FOUND}}")}revealContent(e,t){const i=e.el,r=e.contentEl;i&&r&&(this.emit("reveal",e),this.hideLoading(e),e.state=U.Opening,(t=this.isOpeningSlide(e)?t===void 0?this.optionFor(e,"showClass"):t:"f-fadeIn")?this.animate(r,t,()=>{this.done(e)}):this.done(e))}done(e){this.isClosing()||(e.state=U.Ready,this.emit("done",e),k(e.el,"is-done"),this.isCurrentSlide(e)&&this.option("autoFocus")&&queueMicrotask(()=>{var t;(t=e.panzoom)===null||t===void 0||t.updateControls(),this.option("autoFocus")&&this.focus()}),this.isOpeningSlide(e)&&(R(this.container,gi),!this.isCompact&&this.option("idle")&&this.setIdle()))}isCurrentSlide(e){const t=this.getSlide();return!(!e||!t)&&t.index===e.index}isOpeningSlide(e){var t,i;return((t=this.carousel)===null||t===void 0?void 0:t.prevPage)===null&&e&&e.index===((i=this.getSlide())===null||i===void 0?void 0:i.index)}showLoading(e){e.state=U.Loading;const t=e.el;t&&(k(t,$n),this.emit("loading",e),e.spinnerEl||setTimeout(()=>{if(!this.isClosing()&&!e.spinnerEl&&e.state===U.Loading){let i=pe($i);k(i,"fancybox-spinner"),e.spinnerEl=i,t.prepend(i),this.animate(i,"f-fadeIn")}},250))}hideLoading(e){const t=e.el;if(!t)return;const i=e.spinnerEl;this.isClosing()?i==null||i.remove():(R(t,$n),i&&this.animate(i,"f-fadeOut",()=>{i.remove()}),e.state===U.Loading&&(this.emit("loaded",e),e.state=U.Ready))}setError(e,t){if(this.isClosing())return;const i=new Event("error",{bubbles:!0,cancelable:!0});if(this.emit("error",i,e),i.defaultPrevented)return;e.error=t,this.hideLoading(e),this.clearContent(e);const r=document.createElement("div");r.classList.add("fancybox-error"),r.innerHTML=this.localize(t||"

{{ERROR}}

"),this.setContent(e,r)}clearContent(e){if(e.state===void 0)return;this.emit("clearContent",e),e.contentEl&&(e.contentEl.remove(),e.contentEl=void 0);const t=e.el;t&&(R(t,"has-error"),R(t,"has-unknown"),R(t,`has-${e.type||"unknown"}`)),e.closeBtnEl&&e.closeBtnEl.remove(),e.closeBtnEl=void 0,e.captionEl&&e.captionEl.remove(),e.captionEl=void 0,e.spinnerEl&&e.spinnerEl.remove(),e.spinnerEl=void 0}getSlide(){var e;const t=this.carousel;return((e=t==null?void 0:t.pages[t==null?void 0:t.page])===null||e===void 0?void 0:e.slides[0])||void 0}close(e,t){if(this.isClosing())return;const i=new Event("shouldClose",{bubbles:!0,cancelable:!0});if(this.emit("shouldClose",i,e),i.defaultPrevented)return;e&&e.cancelable&&(e.preventDefault(),e.stopPropagation());const r=()=>{this.proceedClose(e,t)};this.startedFs&&ae&&ae.isFullscreen()?Promise.resolve(ae.exit()).then(()=>r()):r()}clearIdle(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null}setIdle(e=!1){const t=()=>{this.clearIdle(),this.idle=!0,k(this.container,"is-idle"),this.emit("setIdle")};if(this.clearIdle(),!this.isClosing())if(e)t();else{const i=this.option("idle");i&&(this.idleTimer=setTimeout(t,i))}}endIdle(){this.clearIdle(),this.idle&&!this.isClosing()&&(this.idle=!1,R(this.container,"is-idle"),this.emit("endIdle"))}resetIdle(){this.endIdle(),this.setIdle()}toggleIdle(){this.idle?this.endIdle():this.setIdle(!0)}toggleFullscreen(){ae&&(ae.isFullscreen()?ae.exit():ae.request().then(()=>{this.startedFs=!0}))}isClosing(){return[Y.Closing,Y.CustomClosing,Y.Destroy].includes(this.state)}proceedClose(e,t){var i,r;this.state=Y.Closing,this.clearIdle(),this.detachEvents();const a=this.container,l=this.carousel,o=this.getSlide(),c=o&&this.option("placeFocusBack")?o.triggerEl||this.option("triggerEl"):null;if(c&&(Gs(c)?Mn(c):c.focus()),a&&(R(a,gi),k(a,"is-closing"),a.setAttribute(pi,"true"),this.option("animated")&&k(a,fi),a.style.pointerEvents="none"),l){l.clearTransitions(),(i=l.panzoom)===null||i===void 0||i.destroy(),(r=l.plugins.Navigation)===null||r===void 0||r.detach();for(const d of l.slides){d.state=U.Closing,this.hideLoading(d);const h=d.contentEl;h&&this.stop(h);const u=d==null?void 0:d.panzoom;u&&(u.stop(),u.detachEvents(),u.detachObserver()),this.isCurrentSlide(d)||l.emit("removeSlide",d)}}qn=window.scrollX,Yn=window.scrollY,window.addEventListener("scroll",this.onScroll),this.emit("close",e),this.state!==Y.CustomClosing?(t===void 0&&o&&(t=this.optionFor(o,"hideClass")),t&&o?(this.animate(o.contentEl,t,()=>{l&&l.emit("removeSlide",o)}),setTimeout(()=>{this.destroy()},500)):this.destroy()):setTimeout(()=>{this.destroy()},500)}destroy(){var e;if(this.state===Y.Destroy)return;window.removeEventListener("scroll",this.onScroll),this.state=Y.Destroy,(e=this.carousel)===null||e===void 0||e.destroy();const t=this.container;t&&t.remove(),We.delete(this.id);const i=z.getInstance();i?i.focus():(le&&(le.remove(),le=null),Me&&(Me.remove(),Me=null),R(document.documentElement,jn),(()=>{if(!ct)return;const r=document,a=r.body;a.classList.remove(ui),a.style.setProperty(Bn,""),r.documentElement.style.setProperty(Fn,"")})(),this.emit("destroy"))}static bind(e,t,i){if(!ct)return;let r,a="",l={};if(e===void 0?r=document.body:Ne(e)?(r=document.body,a=e,typeof t=="object"&&(l=t||{})):(r=e,Ne(t)&&(a=t),typeof i=="object"&&(l=i||{})),!r||!Q(r))return;a=a||"[data-fancybox]";const o=z.openers.get(r)||new Map;o.set(a,l),z.openers.set(r,o),o.size===1&&r.addEventListener("click",z.fromEvent)}static unbind(e,t){let i,r="";if(Ne(e)?(i=document.body,r=e):(i=e,Ne(t)&&(r=t)),!i)return;const a=z.openers.get(i);a&&r&&a.delete(r),r&&a||(z.openers.delete(i),i.removeEventListener("click",z.fromEvent))}static destroy(){let e;for(;e=z.getInstance();)e.destroy();for(const t of z.openers.keys())t.removeEventListener("click",z.fromEvent);z.openers=new Map}static fromEvent(e){if(e.defaultPrevented||e.button&&e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.composedPath()[0];const i=t.closest("[data-fancybox-trigger]");if(i){const f=i.dataset.fancyboxTrigger||"",v=document.querySelectorAll(`[data-fancybox="${f}"]`),b=parseInt(i.dataset.fancyboxIndex||"",10)||0;t=v[b]||t}if(!(t&&t instanceof Element))return;let r,a,l,o;if([...z.openers].reverse().find(([f,v])=>!(!f.contains(t)||![...v].reverse().find(([b,g])=>{let x=t.closest(b);return!!x&&(r=f,a=b,l=x,o=g,!0)}))),!r||!a||!l)return;o=o||{},e.preventDefault(),t=l;let c=[],d=ee({},ki,o);d.event=e,d.triggerEl=t,d.delegate=i;const h=d.groupAll,u=d.groupAttr,m=u&&t?t.getAttribute(`${u}`):"";if((!t||m||h)&&(c=[].slice.call(r.querySelectorAll(a))),t&&!h&&(c=m?c.filter(f=>f.getAttribute(`${u}`)===m):[t]),!c.length)return;const p=z.getInstance();return p&&p.options.triggerEl&&c.indexOf(p.options.triggerEl)>-1?void 0:(t&&(d.startIndex=c.indexOf(t)),z.fromNodes(c,d))}static fromSelector(e,t,i){let r=null,a="",l={};if(Ne(e)?(r=document.body,a=e,typeof t=="object"&&(l=t||{})):e instanceof HTMLElement&&Ne(t)&&(r=e,a=t,typeof i=="object"&&(l=i||{})),!r||!a)return!1;const o=z.openers.get(r);return!!o&&(l=ee({},o.get(a)||{},l),!!l&&z.fromNodes(Array.from(r.querySelectorAll(a)),l))}static fromNodes(e,t){t=ee({},ki,t||{});const i=[];for(const r of e){const a=r.dataset||{},l=a[Ve]||r.getAttribute(vi)||r.getAttribute("currentSrc")||r.getAttribute(Ve)||void 0;let o;const c=t.delegate;let d;c&&i.length===t.startIndex&&(o=c instanceof HTMLImageElement?c:c.querySelector("img:not([aria-hidden])")),o||(o=r instanceof HTMLImageElement?r:r.querySelector("img:not([aria-hidden])")),o&&(d=o.currentSrc||o[Ve]||void 0,!d&&o.dataset&&(d=o.dataset.lazySrc||o.dataset[Ve]||void 0));const h={src:l,triggerEl:r,thumbEl:o,thumbElSrc:d,thumbSrc:d};for(const u in a){let m=a[u]+"";m=m!=="false"&&(m==="true"||m),h[u]=m}i.push(h)}return new z(i,t)}static getInstance(e){return e?We.get(e):Array.from(We.values()).reverse().find(t=>!t.isClosing()&&t)||null}static getSlide(){var e;return((e=z.getInstance())===null||e===void 0?void 0:e.getSlide())||null}static show(e=[],t={}){return new z(e,t)}static next(){const e=z.getInstance();e&&e.next()}static prev(){const e=z.getInstance();e&&e.prev()}static close(e=!0,...t){if(e)for(const i of We.values())i.close(...t);else{const i=z.getInstance();i&&i.close(...t)}}}Object.defineProperty(z,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.36"}),Object.defineProperty(z,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:ki}),Object.defineProperty(z,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:zl}),Object.defineProperty(z,"openers",{enumerable:!0,configurable:!0,writable:!0,value:new Map});function jl(){const[n,e]=ne(!1),t=$(null),i=$(null);return Re(()=>{const a=t.current;a&&a.scrollHeight>=580&&(i.current.style.display="flex",a.style.height="580px"),z.bind('[data-fancybox="gallery"]')},[]),s("div",{className:"product-information mt-5",children:s("div",{className:"flex gap-[15px]",children:[s("div",{className:"left w-[60%]",children:s("div",{className:"box-desc bg-white p-[12px] rounded-[8px]",children:[s("h3",{className:"title text-2xl block mb-[10px] pb-[10px] border-b-[1px] border-[#B1B1B1] font-bold",children:"Thông tin sản phẩm"}),s("div",{id:"content-desciption",children:s("div",{className:"content nd",ref:t,children:[s("p",{style:"text-align: justify;",children:[s("strong",{children:"Laptop HP Victus 16 R0376TX AY8Z2PA"})," sở hữu chip xử lý Intel Core i7 13700HX cùng VGA RTX 3050 6GB để có được trải nghiệm chơi game, làm việc hiệu quả. Mẫu"," ",s("a",{href:"https://cellphones.com.vn/laptop/hp/victus.html",title:"HP Victus",target:"_blank",children:s("strong",{children:"HP Victus"})})," ","này còn được trang bị màn hình 16 inch FHD 165Hz giúp tái tạo hình ảnh sắc nét, mượt mà. Kèm theo đó là thiết kế bền bỉ, hiện đại để có thể sử dụng ở nhiều không gian."]}),s("h2",{style:"scroll-margin : 154px;",id:"laptop-hp-victus-16-r0376tx-ay8z2pa-hieu-nang-manh-me-hien-thi-an-tuong",children:s("strong",{children:"Laptop HP Victus 16 R0376TX AY8Z2PA - Hiệu năng mạnh mẽ, hiển thị ấn tượng"})}),s("p",{style:"text-align: justify;",children:["HP Victus 16 R0376TX AY8Z2PA với bộ vi xử lý và card đồ họa rời mạnh mẽ sẽ mang tới trải nghiệm chơi game, làm việc mượt mà, hiệu quả. Hãy cùng tìm hiểu thêm những điểm nổi bật mà mẫu laptop gaming của",s("strong",{children:" HP Victus "})," này sở hữu trong bài viết sau."]}),s("h3",{style:"scroll-margin : 154px;",id:"nang-cao-hieu-suat-xu-ly-voi-chip-core-i7-13700hx",children:s("strong",{children:[" ","Nâng cao hiệu suất xử lý với chip Core i7 13700HX"]})}),s("p",{style:"text-align: justify;",children:"Laptop HP Victus 16 R0376TX AY8Z2PA được trang bị con chip xử lý Core i7 13700HX của Intel. Con chip Core i7 16 lõi, 24 luồng này sở hữu khả năng ép xung cực đại lên tới 5GHz để luôn có thể xử lý dữ liệu trong thời gian ngắn. Với bộ nhớ đệm 30MB, hiệu suất xử lý các tác vụ phức tạp của laptop sẽ được giảm đi đáng kể."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-1.jpg",alt:"Cấu hình laptop HP Victus 16 R0376TX AY8Z2PA",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:["Để nâng cao khả năng xử lý đồ hoạ, HP còn trang bị cho phiên bản"," ",s("a",{href:"https://cellphones.com.vn/laptop/hp/victus/victus-16.html",title:"laptop Victus 16",target:"_blank",children:s("strong",{children:"laptop Victus 16"})}),"này card đồ hoạ rời NVIDIA GeForce RTX 3050 6GB GDDR6. Nhờ vậy mà người dùng có thể tự tin trải nghiệm các tựa game với mức cấu hình cao. Không dừng ở đó, các nhu cầu chỉnh sửa hình ảnh, dựng phim, tạo hình 3D,...chuyên nghiệp cũng được thực hiện mượt mà."]}),s("h3",{style:"scroll-margin : 154px;",id:"tich-hop-o-cung-toc-do-cao-cung-dung-luong-ram-lon",children:s("strong",{children:[" ","Tích hợp ổ cứng tốc độ cao cùng dung lượng RAM lớn"," "]})}),s("p",{style:"text-align: justify;",children:"HP Victus 16 R0376TX AY8Z2PA được trang bị sẵn 2 thanh RAM chuẩn DDR5 có tốc độ bus lên tới 4800MT/s. Với tổng dung lượng RAM 16GB, mẫu laptop gaming HP này sẽ đáp ứng tốt nhu cầu đa nhiệm. Không chỉ các tác vụ cơ bản mà nhu cầu đa nhiệm nâng cao trong công việc cũng sẽ được thực hiện mượt mà mà không cần phải nâng cấp cấu hình. Ngoài ra, laptop HP Victus 16 R0376TX AY8Z2PA còn sở hữu một ổ cứng SSD tốc độ cao có dung lượng 512GB. "}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-2.jpg",alt:"Cấu hình laptop HP Victus 16 R0376TX AY8Z2PA",loading:"lazy"})}),s("h3",{style:"scroll-margin : 154px;",id:"thiet-ke-hien-dai-ben-bi",children:s("strong",{children:" Thiết kế hiện đại, bền bỉ "})}),s("p",{style:"text-align: justify;",children:"Laptop Victus 16 R0376TX AY8Z2PA được HP thiết kế hướng tới phong cách hiện đại, tối giản. Tuy vậy nhưng sản phẩm vẫn mang đậm dấu ấn gaming với tông màu đen thu hút và mạnh mẽ. Kèm theo đó là một tổng thể chắc chắn, bền bỉ cùng phần bản lề kích thước lớn."}),s("p",{style:"text-align: justify;",children:"Với trọng lượng khoảng 2.31kg, người dùng vẫn có thể tiện lợi mang theo phiên bản laptop HP Victus này mà không gặp bất tiện. So với các mẫu laptop gaming khác, đây được coi là một điểm cộng giúp sản phẩm đáp ứng nhu cầu chơi game ở nhiều không gian của người dùng."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-3.jpg",alt:"Thiết kế laptop HP Victus 16 R0376TX AY8Z2PA",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:"Để hỗ trợ tốt cả nhu cầu chơi game và làm việc, HP đã trang bị cho laptop Victus 16 R0376TX AY8Z2PA bộ bàn phím Full-size. Với phần bàn phím số riêng biệt, người dùng sẽ cải thiện được tốc độ nhập liệu trong khi làm việc. Bàn phím của laptop còn được tích hợp hệ thống đèn nền RGB 1 để hỗ trợ việc gõ phím trong điều kiện thiếu sáng."}),s("h3",{style:"scroll-margin : 154px;",id:"hien-thi-sac-net-va-muot-ma",children:s("strong",{children:" Hiển thị sắc nét và mượt mà "})}),s("p",{style:"text-align: justify;",children:"Laptop HP Victus 16 R0376TX AY8Z2PA sở hữu không giản hiển thị cực lớn khi được trang bị màn hình có kích thước 16.1 inch. Kèm theo đó là độ phân giải FHD (1920 x 1080p) giúp nội dung hiển thị luôn có được độ rõ nét. Nhờ việc sử dụng tấm nền IPS, người dùng còn có thể điều chỉnh góc nghiêng linh hoạt mà không gây ảnh hưởng tới chất lượng hình ảnh."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-4.jpg",alt:"Hiển thị sắc nét và mượt mà",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:"Điểm nổi bật có trên màn hình HP Victus 16 R0376TX AY8Z2PA chính là tần số quét và độ phủ màu. Với độ phủ màu 100% sRGB, mẫu laptop gaming HP này sẽ hỗ trợ người dùng làm các công việc liên quan tới sáng tạo hiệu quả. Tần số quét ở mức 165Hz sẽ giúp màn hình tái hiện các chuyển động một cách uyển chuyển, mượt mà."}),s("p",{style:"text-align: justify;",children:"Ngoài ra, màn hình HP Victus 16 R0376TX AY8Z2PA còn được phủ lớp chống chói và có độ sáng 300 nits để thoải mái sử dụng ở những nơi có ánh sáng mạnh. Với chuẩn Low Blue Light, màn hình còn giảm thiểu lượng ánh sáng xanh phát ra để hạn chế tình trạng mỏi mắt khi sử dụng laptop trong thời gian dài."}),s("h3",{style:"scroll-margin : 154px;",id:"thoi-luong-pin-dai-ket-noi-phong-phu-va-on-dinh",children:s("strong",{children:[" ","Thời lượng pin dài, kết nối phong phú và ổn định"," "]})}),s("p",{style:"text-align: justify;",children:"Laptop HP Victus 16 R0376TX AY8Z2PA được trang bị viên pin Li-ion Polymer 4-cell có dung lượng ở mức 70Wh. Với dung lượng này, viên pin có thể duy trì trạng thái hoạt động cho laptop lên tới nhiều giờ với các tác vụ hỗn hợp. Laptop còn được trang bị bộ nguồn 200W Smart AC power adapter để hỗ trợ sạc pin nhanh 50% trong khoảng 30 phút."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-5.jpg",alt:"Thời lượng pin dài, kết nối phong phú và ổn định",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:"Để hỗ trợ việc liên kết có dây và chia sẻ dữ liệu, HP còn trang bị cho mẫu laptop Victus của hàng đầy đủ các cổng kết nối thông dụng. Hai cạnh bên laptop được tích hợp các cổng USB Type-A, USB Type-C, RJ-45, HDMI 2.1, jack audio 3.5mm và bộ chuyển đổi điện xoay chiều thông minh."}),s("p",{style:"text-align: justify;",children:"Laptop Victus 16 R0376TX AY8Z2PA còn được trang bị card wireless Bluetooth 5.3 và Intel Wi-Fi 6E AX211 (2x2). Điều này sẽ đảm bảo được khả năng kết nối với các thiết bị ngoại vi, kết nối mạng ổn định, nhanh chóng cho laptop."}),s("h2",{style:"scroll-margin : 154px;",id:"mua-laptop-hp-victus-16-r0376tx-ay8z2pa-gia-tot-tai-cellphones",children:s("strong",{children:[" ","Mua laptop HP Victus 16 R0376TX AY8Z2PA giá tốt tại CellphoneS"," "]})}),s("ul",{children:[s("li",{children:["Hãy tới ngay các cửa hàng CellphoneS trên cả nước để trải nghiệm và đặt mua"," ",s("strong",{children:"Laptop HP Victus 16 R0376TX AY8Z2PA "})," . Mẫu laptop gaming HP này còn có mức giá cực kỳ hấp dẫn khi đi kèm nhiều chương trình ưu đãi, hỗ trợ thu cũ - đổi mới,..."]}),s("li",{children:"Với chính sách hỗ trợ trả góp lãi suất thấp, khách hàng sẽ còn dễ dàng sở hữu và trải nghiệm chiếc laptop này. Ngoài ra, CellphoneS còn hỗ trợ giao hàng toàn quốc để khách hàng tiện lợi đặt mua dù ở nơi đâu."})]})]})}),s("a",{href:"javascript:void(0)",ref:i,className:"more-all js-viewmore-content item-btn flex items-center",onClick:()=>{e(l=>!l);const a=t.current;a.classList.toggle("active"),n&&window.scrollTo({top:a.getBoundingClientRect().top+window.scrollY-200,behavior:"smooth"})},children:n?s(Z,{children:[s("span",{children:"Thu gọn"})," ",s("i",{className:"icon_2025 angle-top mt-[10px]"})]}):s(Z,{children:[s("span",{children:"Xem thêm "}),s("i",{className:"icon_2025 angle-bottom"})]})})]})}),s("div",{className:"right w-[40%]",children:s("div",{className:"box-spec bg-white p-[12px] rounded-[8px]",children:[s("h3",{className:"title text-2xl block mb-[10px] pb-[10px] border-b-[1px] border-[#B1B1B1] font-bold",children:"Thông tin chi tiết"}),s("div",{className:"content table",children:s("table",{width:"638",children:s("tbody",{children:[s("tr",{children:[s("td",{children:"Mã sản phẩm"}),s("td",{children:"VA3416WC"})]}),s("tr",{children:[s("td",{children:"Màu sắc"}),s("td",{children:"Đen"})]}),s("tr",{children:[s("td",{children:"Độ sáng"}),s("td",{children:"Max 300cd/m²"})]}),s("tr",{children:[s("td",{children:"Độ tương phản"}),s("td",{children:"3000:1"})]}),s("tr",{children:[s("td",{children:"Màu sắc hiển thị"}),s("td",{children:"16.7M"})]}),s("tr",{children:[s("td",{children:"Màu sắc hỗ trợ"}),s("td",{children:"6500K"})]}),s("tr",{children:[s("td",{children:"Loại màn hình"}),s("td",{children:"Cong R1500"})]}),s("tr",{children:[s("td",{children:"Kích cỡ màn hình"}),s("td",{children:'34"'})]}),s("tr",{children:[s("td",{children:"Tấm nền"}),s("td",{children:"VA"})]}),s("tr",{children:[s("td",{children:"Góc nhìn"}),s("td",{children:"89°/89° (H/V)"})]}),s("tr",{children:[s("td",{children:"Tính năng đặc biệt"}),s("td",{children:[s("br",{}),"1. Flicker-Free Backlight adjustment",s("br",{}),"2. Dynamic Contrast Ratio: DCR",s("br",{}),"3. Adaptive Sync",s("br",{}),"4.FPS/RTS",s("br",{}),"5.PIP/PBP",s("br",{}),"6. PQ",s("br",{}),"7. GAME PLUS"]})]})]})})}),s("div",{id:"content-specification",className:"hidden table",children:s("table",{width:"638",children:s("tbody",{children:[s("tr",{children:[s("td",{children:"Mã sản phẩm"}),s("td",{children:"VA3416WC"})]}),s("tr",{children:[s("td",{children:"Màu sắc"}),s("td",{children:"Đen"})]}),s("tr",{children:[s("td",{children:"Độ sáng"}),s("td",{children:"Max 300cd/m²"})]}),s("tr",{children:[s("td",{children:"Độ tương phản"}),s("td",{children:"3000:1"})]}),s("tr",{children:[s("td",{children:"Màu sắc hiển thị"}),s("td",{children:"16.7M"})]}),s("tr",{children:[s("td",{children:"Màu sắc hỗ trợ"}),s("td",{children:"6500K"})]}),s("tr",{children:[s("td",{children:"Loại màn hình"}),s("td",{children:"Cong R1500"})]}),s("tr",{children:[s("td",{children:"Kích cỡ màn hình"}),s("td",{children:'34"'})]}),s("tr",{children:[s("td",{children:"Tấm nền"}),s("td",{children:"VA"})]}),s("tr",{children:[s("td",{children:"Góc nhìn"}),s("td",{children:"89°/89° (H/V)"})]}),s("tr",{children:[s("td",{children:"Tính năng đặc biệt"}),s("td",{children:[s("br",{}),"1. Flicker-Free Backlight adjustment",s("br",{}),"2. Dynamic Contrast Ratio: DCR",s("br",{}),"3. Adaptive Sync",s("br",{}),"4.FPS/RTS",s("br",{}),"5.PIP/PBP",s("br",{}),"6. PQ",s("br",{}),"7. GAME PLUS"]})]})]})})}),s("a",{href:"#content-specification","data-fancybox":!0,className:"more-all flex items-center justify-center",children:["Xem thêm thông số ",s("i",{className:"icon_2025 angle-bottom"})]})]})})]})})}function Fl({show:n,onClose:e}){return s(Z,{children:[s("div",{id:"backgroundPopup",className:`${n?"active":""}`,onClick:e}),s("div",{className:`box-form-review fixed left-[50%] top-[50%] w-[860px] bg-white rounded-[12px] translate-x-[-50%] translate-y-[-50%] z-[999] p-[20px] ${n?"":"hidden"}`,id:"js-box-review",children:[s("div",{className:"title relative pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("b",{className:"text-center text-xl block",children:"Đánh giá sản phẩm"}),s("a",{href:"javascript:void(0)",onClick:e,id:"js-close-review",className:"absolute right-0 top-0 text-[#808080] text-[22px] ",children:s("i",{class:"icon_2025 close"})})]}),s("div",{className:"info-form-review w-[500px] mx-[auto]",children:[s("a",{href:"",className:"block m-[10px_auto] p-[10px] rounded-[4px] border-[#B1B1B1]",children:s("img",{src:"/assets/images/small-product-detail.png",width:"100%",height:"100%",className:"block w-[100px] h-[100px] m-[0_auto]",alt:""})}),s("a",{href:"",className:"text-center block mb-[10px]",children:'Laptop Gaming Asus TUF FX505GE-BQ037T Core i7-8750H/Win10(15.6" FHD) - Hàng Chính Hãng'}),s("div",{className:"flex justify-center",children:s("div",{className:"rating-selection",children:[s("input",{type:"radio",className:"rating-input",id:"star5",name:"rating",value:"5"}),s("label",{for:"star5",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star4",name:"rating",value:"4"}),s("label",{for:"star4",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star3",name:"rating",value:"3"}),s("label",{for:"star3",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star2",name:"rating",value:"2"}),s("label",{for:"star2",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star1",name:"rating",value:"1"}),s("label",{for:"star1",className:"rating-star"})]})}),s("div",{className:"clearfix"})]}),s("div",{className:"form-input mt-[20px]",children:[s("input",{type:"text",name:"title",placeholder:"Mời bạn nhập tiêu đề..."}),s("div",{className:"note-error"})]}),s("div",{className:"form-input mt-[10px]",children:[s("textarea",{name:"content",placeholder:"Mời bạn chia sẻ cảm nhận...",id:""}),s("div",{className:"note-error"})]}),s("input",{id:"js-file-upload-id",type:"hidden",value:""}),s("div",{id:"js-container-selector",className:"mt-[10px] flex items-center",children:s("a",{href:"javascript:void(0)",className:"flex items-center",id:"js-select-file",children:[s("i",{className:"icon_2025 upload_image"}),s("span",{className:"text-[#1877F2] ml-[5px]",children:"Gửi ảnh thực tế"}),s("span",{className:"px-[5px]",children:"(tối đa 3 ảnh)"})]})}),s("button",{type:"submit",className:"mt-[15px] w-full h-[45px] bg-[#C8B7FF] rounded-[4px] text-white leading-[45px] hover:bg-[var(--color-global)]",children:"Gửi đánh giá"})]})]})}function Bl(){const[n,e]=ne(!1);return s(Z,{children:[s("div",{className:"p-[15px] bg-white mt-5 rounded-[8px]",children:[s("div",{className:"flex items-center justify-between pb-[15px] border-b-[1px] border-[#B1B1B1]",children:[s("h3",{className:"text-xl font-bold",children:"Thành viên BestPC đánh giá"}),s("div",{className:"select-sort relative border border-[#b1b1b1] h-[45px] rounded-[4px] overflow-hidden",children:[s("select",{name:"",id:"",className:" appearance-none w-full relative p-[0_20px_0_10px] bg-transparent h-full z-[2]",children:[s("option",{value:"",children:"Top review"}),s("option",{value:"",children:"Review mới nhất"})]}),s("i",{className:"icon_2025 angle-right ml-[5px] absolute right-[7px] top-[12px] z-[1] rotate-[90deg]"})]})]}),s("div",{className:"flex gap-[25px]",children:[s("div",{className:"left w-[20%]",children:[s("b",{className:"text-center block pt-[20px] pb-[5px] text-2xl",children:"54 đánh giá"}),s("div",{className:"flex items-center justify-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.8"})]}),s("div",{className:"border-t-[1px] border-[#E4E4E4] pt-[10px] mt-[10px]",children:[s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star5"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star4"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star3"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star2"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star1"}),s("span",{children:"50 đánh giá"})]})]}),s("div",{className:"btn border-t-[1px] border-[#E4E4E4] pt-[10px] mt-[20px]",children:[s("p",{className:"text-center mt-[10px]",children:"Đánh giá của bạn về sản phẩm"}),s("a",{href:"javascript:void(0)",id:"js-show-form",onClick:t=>{t.preventDefault(),e(!0)},className:"block mt-[10px] h-[40px] leading-[40px] text-center text-white bg-[#FF7A00] rounded-[4px]",children:"Gửi đánh giá của bạn về sản phẩm"})]})]}),s("div",{className:"right w-[80%]",children:[s("div",{className:"list-review mt-[15px]",children:[s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-1.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"time mt-[10px]",children:[s("b",{className:"mb-[2px] text-center block",children:"Dino"}),s("p",{className:"text-center",children:"10:00pm 20/02/2025"})]})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("div",{className:"flex items-center mb-[5px]",children:[s("i",{className:"icon-star star4"}),s("b",{className:"ml-[10px]",children:"Laptop Gaming Asus ROG 16GB"})]}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"flex items-center mb-[10px]",children:[s("a",{href:"/src/assets/images/small-product-detail.png","data-fancybox":"gallery",className:"w-[80px] block mr-[10px]",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})})]}),s("div",{className:"btn",children:[s("a",{href:"javascript:void(0)",className:"text-[#1877F2] mr-[10px]",children:["Bình luận"," ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]}),s("a",{href:"javascript:void(0)",className:"text-[#1877F2]",children:["Thích ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]})]})]})]}),s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-2.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"time mt-[10px]",children:[s("b",{className:"mb-[2px] text-center block",children:"Dino"}),s("p",{className:"text-center",children:"10:00pm 20/02/2025"})]})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("div",{className:"flex items-center mb-[5px]",children:[s("i",{className:"icon-star star4"}),s("b",{className:"ml-[10px]",children:"Laptop Gaming Asus ROG 16GB"})]}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"flex items-center mb-[10px]",children:[s("a",{href:"/src/assets/images/small-product-detail.png","data-fancybox":"gallery",className:"w-[80px] block mr-[10px]",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})})]}),s("div",{className:"btn",children:[s("a",{href:"javascript:void(0)",className:"text-[#1877F2] mr-[10px]",children:["Bình luận"," ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]}),s("a",{href:"javascript:void(0)",className:"text-[#1877F2]",children:["Thích ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]})]})]})]}),s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-3.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"time mt-[10px]",children:[s("b",{className:"mb-[2px] text-center block",children:"Dino"}),s("p",{className:"text-center",children:"10:00pm 20/02/2025"})]})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("div",{className:"flex items-center mb-[5px]",children:[s("i",{className:"icon-star star4"}),s("b",{className:"ml-[10px]",children:"Laptop Gaming Asus ROG 16GB"})]}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"flex items-center mb-[10px]",children:[s("a",{href:"/src/assets/images/small-product-detail.png","data-fancybox":"gallery",className:"w-[80px] block mr-[10px]",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})})]}),s("div",{className:"btn",children:[s("a",{href:"javascript:void(0)",className:"text-[#1877F2] mr-[10px]",children:["Bình luận"," ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]}),s("a",{href:"javascript:void(0)",className:"text-[#1877F2]",children:["Thích ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]})]})]})]})]}),s("a",{href:"javascript:void(0)",className:"pt-[15px] text-[#FF7A00] btn-more-review",children:["Xem thêm ",s("span",{children:"23"})," bình luận khác"]})]})]})]}),s(Fl,{show:n,onClose:()=>e(!1)})]})}function Hl(n,e,t,i){return n.params.createElements&&Object.keys(i).forEach(r=>{if(!t[r]&&t.auto===!0){let a=ce(n.el,`.${i[r]}`)[0];a||(a=jt("div",i[r]),a.className=i[r],n.el.append(a)),t[r]=a,e[r]=a}}),t}function Xe(n){let{swiper:e,extendParams:t,on:i,emit:r}=n;t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),e.navigation={nextEl:null,prevEl:null};function a(f){let v;return f&&typeof f=="string"&&e.isElement&&(v=e.el.querySelector(f)||e.hostEl.querySelector(f),v)?v:(f&&(typeof f=="string"&&(v=[...document.querySelectorAll(f)]),e.params.uniqueNavElements&&typeof f=="string"&&v&&v.length>1&&e.el.querySelectorAll(f).length===1?v=e.el.querySelector(f):v&&v.length===1&&(v=v[0])),f&&!v?f:v)}function l(f,v){const b=e.params.navigation;f=ve(f),f.forEach(g=>{g&&(g.classList[v?"add":"remove"](...b.disabledClass.split(" ")),g.tagName==="BUTTON"&&(g.disabled=v),e.params.watchOverflow&&e.enabled&&g.classList[e.isLocked?"add":"remove"](b.lockClass))})}function o(){const{nextEl:f,prevEl:v}=e.navigation;if(e.params.loop){l(v,!1),l(f,!1);return}l(v,e.isBeginning&&!e.params.rewind),l(f,e.isEnd&&!e.params.rewind)}function c(f){f.preventDefault(),!(e.isBeginning&&!e.params.loop&&!e.params.rewind)&&(e.slidePrev(),r("navigationPrev"))}function d(f){f.preventDefault(),!(e.isEnd&&!e.params.loop&&!e.params.rewind)&&(e.slideNext(),r("navigationNext"))}function h(){const f=e.params.navigation;if(e.params.navigation=Hl(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!(f.nextEl||f.prevEl))return;let v=a(f.nextEl),b=a(f.prevEl);Object.assign(e.navigation,{nextEl:v,prevEl:b}),v=ve(v),b=ve(b);const g=(x,y)=>{x&&x.addEventListener("click",y==="next"?d:c),!e.enabled&&x&&x.classList.add(...f.lockClass.split(" "))};v.forEach(x=>g(x,"next")),b.forEach(x=>g(x,"prev"))}function u(){let{nextEl:f,prevEl:v}=e.navigation;f=ve(f),v=ve(v);const b=(g,x)=>{g.removeEventListener("click",x==="next"?d:c),g.classList.remove(...e.params.navigation.disabledClass.split(" "))};f.forEach(g=>b(g,"next")),v.forEach(g=>b(g,"prev"))}i("init",()=>{e.params.navigation.enabled===!1?p():(h(),o())}),i("toEdge fromEdge lock unlock",()=>{o()}),i("destroy",()=>{u()}),i("enable disable",()=>{let{nextEl:f,prevEl:v}=e.navigation;if(f=ve(f),v=ve(v),e.enabled){o();return}[...f,...v].filter(b=>!!b).forEach(b=>b.classList.add(e.params.navigation.lockClass))}),i("click",(f,v)=>{let{nextEl:b,prevEl:g}=e.navigation;b=ve(b),g=ve(g);const x=v.target;let y=g.includes(x)||b.includes(x);if(e.isElement&&!y){const w=v.path||v.composedPath&&v.composedPath();w&&(y=w.find(_=>b.includes(_)||g.includes(_)))}if(e.params.navigation.hideOnClick&&!y){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===x||e.pagination.el.contains(x)))return;let w;b.length?w=b[0].classList.contains(e.params.navigation.hiddenClass):g.length&&(w=g[0].classList.contains(e.params.navigation.hiddenClass)),r(w===!0?"navigationShow":"navigationHide"),[...b,...g].filter(_=>!!_).forEach(_=>_.classList.toggle(e.params.navigation.hiddenClass))}});const m=()=>{e.el.classList.remove(...e.params.navigation.navigationDisabledClass.split(" ")),h(),o()},p=()=>{e.el.classList.add(...e.params.navigation.navigationDisabledClass.split(" ")),u()};Object.assign(e.navigation,{enable:m,disable:p,update:o,init:h,destroy:u})}function qe(n){let{swiper:e,extendParams:t,on:i}=n;t({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let r=!1,a=!1;e.thumbs={swiper:null};function l(){const d=e.thumbs.swiper;if(!d||d.destroyed)return;const h=d.clickedIndex,u=d.clickedSlide;if(u&&u.classList.contains(e.params.thumbs.slideThumbActiveClass)||typeof h>"u"||h===null)return;let m;d.params.loop?m=parseInt(d.clickedSlide.getAttribute("data-swiper-slide-index"),10):m=h,e.params.loop?e.slideToLoop(m):e.slideTo(m)}function o(){const{thumbs:d}=e.params;if(r)return!1;r=!0;const h=e.constructor;if(d.swiper instanceof h){if(d.swiper.destroyed)return r=!1,!1;e.thumbs.swiper=d.swiper,Object.assign(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Object.assign(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1}),e.thumbs.swiper.update()}else if(rt(d.swiper)){const u=Object.assign({},d.swiper);Object.assign(u,{watchSlidesProgress:!0,slideToClickedSlide:!1}),e.thumbs.swiper=new h(u),a=!0}return e.thumbs.swiper.el.classList.add(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",l),!0}function c(d){const h=e.thumbs.swiper;if(!h||h.destroyed)return;const u=h.params.slidesPerView==="auto"?h.slidesPerViewDynamic():h.params.slidesPerView;let m=1;const p=e.params.thumbs.slideThumbActiveClass;if(e.params.slidesPerView>1&&!e.params.centeredSlides&&(m=e.params.slidesPerView),e.params.thumbs.multipleActiveThumbs||(m=1),m=Math.floor(m),h.slides.forEach(b=>b.classList.remove(p)),h.params.loop||h.params.virtual&&h.params.virtual.enabled)for(let b=0;b{g.classList.add(p)});else for(let b=0;bw.getAttribute("data-swiper-slide-index")===`${e.realIndex}`);g=h.slides.indexOf(y),x=e.activeIndex>e.previousIndex?"next":"prev"}else g=e.realIndex,x=g>e.previousIndex?"next":"prev";v&&(g+=x==="next"?f:-1*f),h.visibleSlidesIndexes&&h.visibleSlidesIndexes.indexOf(g)<0&&(h.params.centeredSlides?g>b?g=g-Math.floor(u/2)+1:g=g+Math.floor(u/2)-1:g>b&&h.params.slidesPerGroup,h.slideTo(g,d?0:void 0))}}i("beforeInit",()=>{const{thumbs:d}=e.params;if(!(!d||!d.swiper))if(typeof d.swiper=="string"||d.swiper instanceof HTMLElement){const h=Ee(),u=()=>{const p=typeof d.swiper=="string"?h.querySelector(d.swiper):d.swiper;if(p&&p.swiper)d.swiper=p.swiper,o(),c(!0);else if(p){const f=`${e.params.eventsPrefix}init`,v=b=>{d.swiper=b.detail[0],p.removeEventListener(f,v),o(),c(!0),d.swiper.update(),e.update()};p.addEventListener(f,v)}return p},m=()=>{if(e.destroyed)return;u()||requestAnimationFrame(m)};requestAnimationFrame(m)}else o(),c(!0)}),i("slideChange update resize observerUpdate",()=>{c()}),i("setTransition",(d,h)=>{const u=e.thumbs.swiper;!u||u.destroyed||u.setTransition(h)}),i("beforeDestroy",()=>{const d=e.thumbs.swiper;!d||d.destroyed||a&&d.destroy()}),Object.assign(e.thumbs,{init:o,update:c})}function Ye(n){let{swiper:e,extendParams:t,emit:i,once:r}=n;t({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}});function a(){if(e.params.cssMode)return;const c=e.getTranslate();e.setTranslate(c),e.setTransition(0),e.touchEventsData.velocities.length=0,e.freeMode.onTouchEnd({currentPos:e.rtl?e.translate:-e.translate})}function l(){if(e.params.cssMode)return;const{touchEventsData:c,touches:d}=e;c.velocities.length===0&&c.velocities.push({position:d[e.isHorizontal()?"startX":"startY"],time:c.touchStartTime}),c.velocities.push({position:d[e.isHorizontal()?"currentX":"currentY"],time:De()})}function o(c){let{currentPos:d}=c;if(e.params.cssMode)return;const{params:h,wrapperEl:u,rtlTranslate:m,snapGrid:p,touchEventsData:f}=e,b=De()-f.touchStartTime;if(d<-e.minTranslate()){e.slideTo(e.activeIndex);return}if(d>-e.maxTranslate()){e.slides.length1){const S=f.velocities.pop(),N=f.velocities.pop(),E=S.position-N.position,P=S.time-N.time;e.velocity=E/P,e.velocity/=2,Math.abs(e.velocity)150||De()-S.time>300)&&(e.velocity=0)}else e.velocity=0;e.velocity*=h.freeMode.momentumVelocityRatio,f.velocities.length=0;let g=1e3*h.freeMode.momentumRatio;const x=e.velocity*g;let y=e.translate+x;m&&(y=-y);let w=!1,_;const M=Math.abs(e.velocity)*20*h.freeMode.momentumBounceRatio;let C;if(ye.minTranslate())h.freeMode.momentumBounce?(y-e.minTranslate()>M&&(y=e.minTranslate()+M),_=e.minTranslate(),w=!0,f.allowMomentumBounce=!0):y=e.minTranslate(),h.loop&&h.centeredSlides&&(C=!0);else if(h.freeMode.sticky){let S;for(let N=0;N-y){S=N;break}Math.abs(p[S]-y){e.loopFix()}),e.velocity!==0){if(m?g=Math.abs((-y-e.translate)/e.velocity):g=Math.abs((y-e.translate)/e.velocity),h.freeMode.sticky){const S=Math.abs((m?-y:y)-e.translate),N=e.slidesSizesGrid[e.activeIndex];S{!e||e.destroyed||!f.allowMomentumBounce||(i("momentumBounce"),e.setTransition(h.speed),setTimeout(()=>{e.setTranslate(_),Yt(u,()=>{!e||e.destroyed||e.transitionEnd()})},0))})):e.velocity?(i("_freeModeNoMomentumRelease"),e.updateProgress(y),e.setTransition(g),e.setTranslate(y),e.transitionStart(!0,e.swipeDirection),e.animating||(e.animating=!0,Yt(u,()=>{!e||e.destroyed||e.transitionEnd()}))):e.updateProgress(y),e.updateActiveIndex(),e.updateSlidesClasses()}else if(h.freeMode.sticky){e.slideToClosest();return}else h.freeMode&&i("_freeModeNoMomentumRelease");(!h.freeMode.momentum||b>=h.longSwipesMs)&&(i("_freeModeStaticRelease"),e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses())}Object.assign(e,{freeMode:{onTouchStart:a,onTouchMove:l,onTouchEnd:o}})}function $l(){const[n,e]=ne(null);return s(Z,{children:s("div",{className:"box-product-detail bg-[#F4F4F4] pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/man-hinh.html",itemprop:"item",className:"nopad-l flex items-center",children:[s("span",{itemprop:"name",children:"Màn hình máy tính"}),s("i",{className:"icon_2025 angle-right text-[#637381] ml-[12px]"})]}),s("meta",{itemprop:"position",content:"2"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/aivision.html",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"AIVISION"})}),s("meta",{itemprop:"position",content:"3"})]})]})}),s("div",{className:"p-[15px] grid grid-cols-2 gap-[15px] rounded-[8px] bg-white",children:[s("div",{className:"left",children:[s("div",{className:"relative",children:s(Oe,{spaceBetween:10,navigation:!0,thumbs:{swiper:n},modules:[Ye,Xe,qe],className:"swiper border border-[#B1B1B1 rounded-[12px]",id:"js-slider-big",children:[s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.jpg",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail-2.jpg",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail-3.jpg",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail-4.jpg",alt:""})})]})}),s("div",{className:"relative mt-[12px]",children:[s(Oe,{onSwiper:e,spaceBetween:15,slidesPerView:5,navigation:{prevEl:"#btn-slider-small .swiper-button-prev",nextEl:"#btn-slider-small .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"swiper",id:"js-slider-small",children:[s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})})]}),s("div",{className:"btn-small",id:"btn-slider-small",children:[s("div",{className:"swiper-button-next right-[-15px] w-[30px] h-[30px]"}),s("div",{className:"swiper-button-prev left-[-15px] w-[30px] h-[30px]"})]})]})]}),s("div",{className:"right",children:[s("h1",{className:"text-[24px] text-black mb-[5px]",children:'Laptop Gaming Asus TUF FX505GE-BQ037T Core i7-8750H/Win10(15.6" FHD) - Hàng Chính Hãng'}),s("div",{className:"flex items-center text-base",children:[s("div",{className:"info-review flex items-center mr-[15px]",children:[s("i",{className:"icon-star star-small"}),s("span",{className:"ml-[5px] mt-[2px]",children:"5/5"})]}),s("div",{className:"info-view flex items-center mr-[15px]",children:[s("i",{className:"icon_2025 view"}),s("span",{className:"text-[#1877F2] ml-[5px]",children:"120"})]}),s("div",{className:"info-date flex items-center mr-[15px]",children:[s("i",{className:"icon_2025 time-big"}),s("span",{className:"text-[#1877F2] ml-[5px]",children:"12/03/2025"})]}),s("a",{href:"",className:"info-share flex items-center",children:[s("i",{className:"icon_2025 share"}),s("span",{className:"ml-[5px] mt-[2px]",children:"Chia sẻ"})]})]}),s("div",{className:"flex items-center mt-[5px] text-base",children:[s("div",{className:"source-review flex items-centermr-[10px]",children:[s("span",{children:"Reviews trên:"}),s("a",{href:"",className:"ml-[5px] text-[#1877F2]",children:"Internet"}),s("p",{className:"ml-[5px]",children:"1233 đánh giá"})]}),s("div",{className:"pl-[10px] ml-[10px] flex items-center border-l-[1.5px] border-[#000]",children:[s("a",{href:"",className:"mr-[5px] text-[#462F91]",children:"BestPC"}),s("p",{children:"12003 đánh giá"})]})]}),s("div",{className:"box-price flex items-center my-[10px]",children:[s("span",{className:"mr-[10px]",children:"Giá:"}),s("b",{className:"text-[#D80A00] text-[28px]",children:"9.000.000đ - 12.000.000đ"})]}),s("div",{className:"total-shop flex items-center",children:[s("div",{className:"box-shop",children:s("i",{className:"icon_2025 shop"})}),s("p",{className:"ml-[7px]",children:"Có 12 cửa hàng bán"})]}),s("div",{className:"box-summary mt-[15px]",children:s("ul",{children:[s("li",{children:"CPU: Intel Core i7-8750H ( 2.2 GHz - 4.1 GHz / 9MB / 6 nhân, 12 luồng )"}),s("li",{children:'Màn hình: 15.6" ( 1920 x 1080 ) , không cảm ứng'}),s("li",{children:"RAM: 1 x 8GB DDR4 2666MHz"}),s("li",{children:"Đồ họa: Intel UHD Graphics 630 / NVIDIA GeForce GTX 1050Ti 4GB GDDR5"}),s("li",{children:"Lưu trữ: 128GB SSD M.2 NVMe / 1TB HDD 5400RPM"}),s("li",{children:"Hệ điều hành: Windows 10 Home SL 64-bit"}),s("li",{children:"Pin: 4 cell 64 Wh Pin liền"}),s("li",{children:"khối lượng: 2.5 kg"}),s("li",{children:"Cổng giao tiếp: 1x USB 2.0,"})]})}),s("a",{href:"",className:"group mt-4 flex items-center justify-center w-ful py-[10px] border border-[#D3D3D3] rounded-[4px] text-center hover:bg-[var(--color-global)] hover:text-white",children:[s("img",{src:"/assets/images/icon-file-save.png",className:"w-[18px] h-[24px] block group-hover:brightness-[0] group-hover:invert-[1]",alt:"save"}),s("b",{className:"ml-[10px] text-base",children:"Lưu sản phẩm lại xem sau"})]})]})]}),s(_l,{}),s(Bl,{}),s(jl,{}),s("div",{className:"mt-5 bg-white rounded-[8px] p-[15px]",children:[s("div",{className:"flex items-center justify-between mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("h3",{className:"text-xl font-bold",children:"Sản phẩm tương tự"}),s("a",{href:"javascript:void(0)",className:"text-[#462F91] flex items-center justify-center w-[130px] h-[32px] leading-[32px] border-[#462F91] border-[1px] rounded-[4px] hover:bg-[#462F91] hover:text-white group",children:[s("span",{children:"Xem tất cả"}),s("i",{className:"icon_2025 mouse ml-[5px] group-hover:brightness-0 group-hover:invert-[1]"})]})]}),s("div",{className:"relative mt-[15px]",children:[s(Oe,{slidesPerView:5,spaceBetween:15,navigation:{prevEl:"#js-product-similar-btn .swiper-button-prev",nextEl:"#js-product-similar-btn .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"product-list swiper relative",children:[s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})})]}),s("div",{className:"btn-slider",id:"js-product-similar-btn",children:[s("div",{className:"swiper-button-next right-[-15px]"}),s("div",{className:"swiper-button-prev left-[-15px]"})]})]})]}),s("div",{className:"mt-5 bg-white rounded-[8px] p-[15px]",children:[s("div",{className:"flex items-center justify-between mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("h3",{className:"text-xl font-bold",children:"Sản phẩm bạn có thể thích"}),s("a",{href:"javascript:void(0)",className:"text-[#462F91] flex items-center justify-center w-[130px] h-[32px] leading-[32px] border-[#462F91] border-[1px] rounded-[4px] hover:bg-[#462F91] hover:text-white group",children:[s("span",{children:"Xem tất cả"}),s("i",{className:"icon_2025 mouse ml-[5px] group-hover:brightness-0 group-hover:invert-[1]"})]})]}),s("div",{className:"relative mt-[15px]",children:[s(Oe,{slidesPerView:5,spaceBetween:15,navigation:{prevEl:"#js-product-like-btn .swiper-button-prev",nextEl:"#js-product-like-btn .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"product-list swiper relative",children:[s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})})]}),s("div",{className:"btn-slider",id:"js-product-like-btn",children:[s("div",{className:"swiper-button-next right-[-15px]"}),s("div",{className:"swiper-button-prev left-[-15px]"})]})]})]})]})})})}function Gl({show:n,onClose:e}){return s(Z,{children:[s("div",{id:"backgroundPopup",className:`${n?"active":""}`,onClick:e}),s("div",{className:`fixed w-[1400px] bg-white left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] z-[999] ${n?"":"hidden"}`,id:"js-modal-popup",children:[s("div",{className:"header-popup p-[10px] bg-[var(--color-global)] flex items-center justify-between",children:[s("b",{className:"w-[205px] mr-[15px] text-white",children:"Chọn linh kiện"}),s("div",{className:"w-[calc(100%-275px)] relative input-search",children:s("form",{action:"/search",enctype:"text/plain",method:"get",className:"relative w-full h-[45px] bg-white rounded-[3px] overflow-hidden",children:[s("input",{type:"text",name:"q",placeholder:"Bạn cần tìm linh kiện gì...",className:"search-input w-full h-full p-[0_10px] outline-none rounded-[8px] text-base"}),s("button",{type:"submit",className:"absolute right-[10px] top-[5px] w-[40px] h-[35px] pl-[10px]",children:s("i",{className:"icon_2025 search "})})]})}),s("a",{href:"javascript:void(0)",onClick:e,className:"w-[54px] flex items-center justify-end",children:s("i",{className:"icon_2025 close brightness-0 invert-[1]"})})]}),s("div",{className:"content-popup p-[10px] bg-white",children:s("div",{className:"flex gap-[15px]",children:[s("div",{className:"left w-[205px]",children:[s("b",{className:"",children:"230 sản phẩm"}),s("div",{className:"mt-3 title-filter flex items-center justify-between px-[20px] bg-[#f1f1f1] rounded-[4px_4px_0_0] h-[52px] w-full leading-[52px]",children:[s("b",{className:"text-xl",children:"Bộ lọc"}),s("i",{className:"icon_2025 filter"})]}),s("div",{className:"list-filter h-[calc(100vh-208px)] overflow-auto",children:[s("div",{className:"item-filter mb-2.5",children:[s("h3",{className:"text-lg font-[500] uppercase leading-loose text-black py-[5px] border-b-[1px] border-[#D3D3D3]",children:"Lọc theo"}),s("div",{className:"mt-2.5 text-base leading-8 text-black",children:[s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle1",className:"checkbox"}),s("label",{for:"vehicle1",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle2",className:"checkbox"}),s("label",{for:"vehicle2",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle3",className:"checkbox"}),s("label",{for:"vehicle3",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle4",className:"checkbox"}),s("label",{for:"vehicle4",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle5",className:"checkbox"}),s("label",{for:"vehicle5",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]})]})]}),s("div",{className:"item-filter mb-2.5",children:[s("h3",{className:"text-lg font-[500] uppercase leading-loose text-black py-[5px] border-b-[1px] border-[#D3D3D3]",children:"Lọc theo"}),s("div",{className:"mt-2.5 grid grid-flow-col grid-rows-9 text-base leading-8 text-black",children:[s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle1",className:"checkbox"}),s("label",{for:"vehicle1",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"All"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle2",className:"checkbox"}),s("label",{for:"vehicle2",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"32gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle3",className:"checkbox"}),s("label",{for:"vehicle3",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"64bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle4",className:"checkbox"}),s("label",{for:"vehicle4",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"16bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle5",className:"checkbox"}),s("label",{for:"vehicle5",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"12gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"4gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"2gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"24gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle2",className:"checkbox"}),s("label",{for:"vehicle2",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"32gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle3",className:"checkbox"}),s("label",{for:"vehicle3",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"64bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle4",className:"checkbox"}),s("label",{for:"vehicle4",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"16bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle5",className:"checkbox"}),s("label",{for:"vehicle5",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"12gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"4gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"2gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"24gb"})]})]})]})]})]}),s("div",{className:"right w-[calc(100%-220px)]",children:[s("div",{className:"flex gap-[15px]",children:[s("a",{href:"",className:"text-[var(--color-hover)]",children:"Chọn tất cả"}),s("a",{href:"",children:"Bỏ chọn tất cả"}),s("a",{href:"",children:"So sánh sản phẩm đã chọn"})]}),s("div",{className:"mt-3 relative z-[9] grid grid-cols-11 bg-[#f1f1f1] rounded-[4px_4px_0_0] h-[52px] w-full leading-[52px]",children:[s("b",{className:"col-span-3 text-center",children:"Tên"}),s("b",{children:"Dung lượng"}),s("b",{children:"Thế hệ"}),s("b",{children:"Bộ nhớ"}),s("b",{children:"Độ ồn"}),s("b",{children:"Màu sắc"}),s("b",{children:"Đánh giá"}),s("b",{className:"col-span-2",children:"Thành tiền"})]}),s("div",{className:"list mt-3 h-[calc(100vh-208px)] overflow-auto",children:[s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]})]})]})]})})]})]})}function Vl(){const[n,e]=ne(!1);return s(Z,{children:[s("div",{className:"mt-6 flex items-center border-b-[1px] border-neutral-200 pb-3",children:[s("b",{className:"left w-[200px] name-component",children:"Sản phẩm"}),s("div",{className:"right w-[calc(100%-200px)] grid grid-cols-8",children:[s("b",{className:"item col-span-3",children:"Thông tin"}),s("b",{className:"item",children:"Giá gốc"}),s("b",{className:"item",children:"Khuyến mãi"}),s("b",{className:"item",children:"Thành tiền"}),s("b",{className:"item col-span-2",children:"Nhà cung cấp "})]})]}),s("div",{className:"list-buildpc",children:[s("div",{className:"item-component flex items-start py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("div",{className:"item-info-product grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"/buildpc/detail",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"/buildpc/detail",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"total-amount",children:"4.000.000đ"}),s("div",{className:"supplier col-span-2 flex items-center justify-between",children:[s("a",{href:"",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[30px] object-contain",alt:""})}),s("div",{className:"btn flex items-center",children:[s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"}),s("a",{href:"",className:"group hover:bg-red-500 p-1.5 rounded-[50%]",children:s("i",{className:"icon_2025 close group-hover:brightness-0 group-hover:invert-[1]"})})]})]})]})})]}),s("div",{className:"item-component flex items-start py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:[s("div",{className:"item-info-product grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"/buildpc/detail",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"/buildpc/detail",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"total-amount",children:"4.000.000đ"}),s("div",{className:"supplier col-span-2 flex items-center justify-between",children:[s("a",{href:"",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[30px] object-contain",alt:""})}),s("div",{className:"btn flex items-center",children:[s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"}),s("a",{href:"",className:"group hover:bg-red-500 p-1.5 rounded-[50%]",children:s("i",{className:"icon_2025 close group-hover:brightness-0 group-hover:invert-[1]"})})]})]})]}),s("div",{className:"item-info-product grid items-center grid-cols-8 mt-2.5 pt-2.5 border-t-[1px] border-neutral-200",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"/buildpc/detail",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"/buildpc/detail",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"total-amount",children:"4.000.000đ"}),s("div",{className:"supplier col-span-2 flex items-center justify-between",children:[s("a",{href:"",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[30px] object-contain",alt:""})}),s("div",{className:"btn flex items-center",children:[s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"}),s("a",{href:"",className:"group hover:bg-red-500 p-1.5 rounded-[50%]",children:s("i",{className:"icon_2025 close group-hover:brightness-0 group-hover:invert-[1]"})})]})]})]}),s("a",{href:"javascript:void(0)",onClick:t=>{t.preventDefault(),e(!0)},className:"w-[130px] h-[30px] block text-xs mt-2.5 text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})]})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",onClick:t=>{t.preventDefault(),e(!0)},className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",onClick:t=>{t.preventDefault(),e(!0)},className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]})]}),s("div",{className:"box-total-price pt-5",children:[s("b",{className:"block text-xl text-right text-red-600",children:"Tổng tiền 2 sản phẩm: 8.000.000đ"}),s("div",{className:"flex items-center justify-end gap-[10px] mt-3",children:[s("a",{href:"javascript:void(0)",className:"flex items-center px-7 py-2.5 border border-[#b3b3b3] rounded hover:bg-[#e0e0e0]",children:[s("i",{className:"icon_2025 print"}),s("span",{className:"ml-2",children:"In đơn hàng"})]}),s("a",{href:"javasript:void(0)",className:"px-7 py-2.5 text-center text-white bg-violet-900 rounded font-bold hover:bg-violet-700",children:"Mua hàng tại Hacom"})]})]}),s(Gl,{show:n,onClose:()=>e(!1)})]})}function Wl(){return s("div",{className:"page-buildpc bg-[#F4F4F4] pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"Tạo máy tính riêng của bạn"})}),s("meta",{itemprop:"position",content:"2"})]})]})}),s("div",{className:"grid grid-cols-10 gap-2 px-3 py-2.5 mt-3 text-base leading-none text-black bg-white rounded",children:[s("div",{className:"col-span-4 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("a",{className:"w-[24px] ml-[10px]",href:"javascript:void()",children:s("i",{className:"icon_2025 copy"})}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:"https://bestpc.vn/restricted.php"})]}),s("div",{className:"col-span-3 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("p",{className:"ml-[10px] block whitespace-nowrap",children:"Đặt tên:"}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:""})]}),s("div",{className:"grid grid-cols-3 gap-[10px] col-span-3",children:[s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 history group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Lịch sử"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 download group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Tải xuống"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 return group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Làm mới"})]})]})]}),s("div",{className:"bg-white p-[15px]",children:[s("div",{className:"flex items-center gap-2",children:[s("a",{href:"/buildpc",className:"px-6 py-2.5 text-center font-bold text-white bg-violet-900 rounded",children:"Bắt đầu tạo"}),s("a",{href:"/buildpc/compare",className:"px-6 py-2.5 text-center font-bold text-stone-500 bg-zinc-100 rounded hover:text-white hover:bg-violet-900",children:"So sánh giá tại các cửa hàng"})]}),s(Vl,{})]})]})})}function Xl(){return s("div",{className:"list-component mt-5",children:[s("div",{className:"item-compare mb-12",children:[s("div",{className:"flex items-center border-b-[1px] border-neutral-200 pb-3",children:[s("b",{className:"left w-[200px] name-component",children:s("a",{href:"",className:"block m-[auto_auto_auto_0]",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-[150px] block h-[50px] object-contain",alt:""})})}),s("div",{className:"right w-[calc(100%-200px)] grid grid-cols-8",children:[s("b",{className:"item col-span-3",children:"Sản phẩm"}),s("b",{className:"item",children:"Giá gốc"}),s("b",{className:"item",children:"Khuyến mãi"}),s("b",{className:"item",children:"Giao hàng"}),s("b",{className:"item col-span-2",children:"Thành tiền"})]})]}),s("div",{className:"list-product",children:[s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]}),s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline text-[#33c600]",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]})]}),s("div",{className:"text-right flex items-center font-bold justify-end mt-5",children:[s("div",{className:"mr-[10px]",children:["Tổng tiền (",s("span",{children:"2"})," sản phẩm) :"]}),s("div",{className:"font-bold",children:"6.000.000 Vnđ"})]})]}),s("div",{className:"item-compare mb-12",children:[s("div",{className:"flex items-center border-b-[1px] border-neutral-200 pb-3",children:[s("b",{className:"left w-[200px] name-component",children:s("a",{href:"",className:"block m-[auto_auto_auto_0]",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-[150px] block h-[50px] object-contain",alt:""})})}),s("div",{className:"right w-[calc(100%-200px)] grid grid-cols-8",children:[s("b",{className:"item col-span-3",children:"Sản phẩm"}),s("b",{className:"item",children:"Giá gốc"}),s("b",{className:"item",children:"Khuyến mãi"}),s("b",{className:"item",children:"Giao hàng"}),s("b",{className:"item col-span-2",children:"Thành tiền"})]})]}),s("div",{className:"list-product",children:[s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]}),s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline text-[#33c600]",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]})]}),s("div",{className:"text-right flex items-center font-bold justify-end mt-5",children:[s("div",{className:"mr-[10px]",children:["Tổng tiền (",s("span",{children:"2"})," sản phẩm) :"]}),s("div",{className:"font-bold",children:"6.000.000 Vnđ"})]})]})]})}function ql(){return s("div",{className:"page-buildpc bg-[#F4F4F4] pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"So sánh giá tại các cửa hàng"})}),s("meta",{itemprop:"position",content:"2"})]})]})}),s("div",{className:"grid grid-cols-10 gap-2 px-3 py-2.5 mt-3 text-base leading-none text-black bg-white rounded",children:[s("div",{className:"col-span-4 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("a",{className:"w-[24px] ml-[10px]",href:"javascript:void()",children:s("i",{className:"icon_2025 copy"})}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:"https://bestpc.vn/restricted.php"})]}),s("div",{className:"col-span-3 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("p",{className:"ml-[10px] block whitespace-nowrap",children:"Đặt tên:"}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:""})]}),s("div",{className:"grid grid-cols-3 gap-[10px] col-span-3",children:[s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 history group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Lịch sử"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 download group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Tải xuống"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 return group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Làm mới"})]})]})]}),s("div",{className:"bg-white p-[15px]",children:[s("div",{className:"flex items-center gap-2",children:[s("a",{href:"/buildpc",className:"px-6 py-2.5 text-center font-bold text-stone-500 bg-zinc-100 rounded hover:text-white hover:bg-violet-900",children:"Bắt đầu tạo"}),s("a",{href:"/buildpc/compare",className:"px-6 py-2.5 text-center font-bold bg-violet-900 text-white rounded",children:"So sánh giá tại các cửa hàng"})]}),s(Xl,{})]})]})})}function Yl(){const[n,e]=ne(null);return s("div",{className:"page-buildpc pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"Tạo máy tính riêng của bạn"})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"2"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"Tham khảo giá sản phẩm"})}),s("meta",{itemprop:"position",content:"3"})]})]})}),s("h1",{className:"text-2xl mb-5 block font-bold",children:"Tham khảo giá sản phẩm"}),s("div",{className:"grid grid-cols-3 gap-[20px] mb-[30px]",children:[s("div",{className:"col-span-1 p-[15px] rounded-[8px] border border-[#d7d7d7]",children:[s(Oe,{spaceBetween:10,navigation:!0,thumbs:{swiper:n},modules:[Ye,Xe,qe],className:"swiper",id:"js-slider-build-big",children:[s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})})]}),s("div",{className:"relative mt-[12px] w-[80%] mx-[auto]",children:[s(Oe,{onSwiper:e,spaceBetween:10,slidesPerView:3,navigation:{prevEl:"#btn-slider-small .swiper-button-prev",nextEl:"#btn-slider-small .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"swiper",id:"js-slider-build-small",children:[s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})})]}),s("div",{className:"btn-small",id:"btn-slider-small",children:[s("div",{className:"swiper-button-next right-[-15px] w-[25px] h-[25px]"}),s("div",{className:"swiper-button-prev left-[-15px] w-[25px] h-[25px] text-sm"})]})]}),s("div",{className:"box-review mt-3",children:[s("div",{className:"flex items-center justify-center",children:[s("b",{children:"Người đánh giá"}),s("div",{className:"flex items-center ml-[10px]",children:["(40 ratings, 4.9 ",s("i",{className:"icon-star star-small ml-1"}),")"]})]}),s("div",{className:"",children:[s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"5 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"4 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"3 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"2 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"1 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]})]})]})]}),s("div",{className:"col-span-2",children:[s("div",{className:"grid grid-cols-7 gap-[5px] items-center pb-2.5 border-b-[1px] border-[#ababab]",children:[s("b",{children:"Nhà cung cấp"}),s("b",{children:"Giá gốc"}),s("b",{children:"Khuyến mãi"}),s("b",{children:"Tình trạng"}),s("b",{children:"Giao hàng"}),s("b",{className:"col-span-2",children:"Thành tiền"})]}),s("div",{className:"list",children:[s("div",{className:"item grid grid-cols-7 items-center gap-[5px] py-2.5 border-b-[1px] border-[#ebebeb]",children:[s("a",{href:"",className:"block",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[28px] object-contain",alt:""})}),s("div",{className:"price font-bold",children:"3.700.000Vnđ"}),s("div",{className:"saleoff text-center font-bold",children:"20%"}),s("div",{className:"status text-blue-500 font-bold",children:"Còn hàng"}),s("div",{className:"ship underline",children:"Liên hệ"}),s("div",{className:"flex items-center justify-between col-span-2",children:[s("div",{className:"total-price font-bold",children:"3.000.000Vnđ"}),s("a",{href:"",className:"block w-[115px] h-[40px] font-bold bg-blue-600 text-center text-white leading-[40px] rounded-[4px] hover:bg-blue-800",children:"Mua ngay"})]})]}),s("div",{className:"item grid grid-cols-7 items-center gap-[5px] py-2.5 border-b-[1px] border-[#ebebeb]",children:[s("a",{href:"",className:"block",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[28px] object-contain",alt:""})}),s("div",{className:"price font-bold",children:"3.700.000Vnđ"}),s("div",{className:"saleoff text-center font-bold",children:"20%"}),s("div",{className:"status text-red-500 font-bold",children:"Còn hàng"}),s("div",{className:"ship underline text-green-500",children:"free"}),s("div",{className:"flex items-center justify-between col-span-2",children:[s("div",{className:"total-price font-bold",children:"3.000.000Vnđ"}),s("a",{href:"",className:"block w-[115px] h-[40px] font-bold bg-blue-600 text-center text-white leading-[40px] rounded-[4px] hover:bg-blue-800",children:"Mua ngay"})]})]})]})]})]}),s("div",{className:"grid grid-cols-3 gap-[20px]",children:[s("div",{className:"col-span-1",children:[s("h3",{className:"title text-2xl font-bold pb-2.5 border-b-[1px] border-[#ababab]",children:"Thông số kỹ thuật"}),s("div",{children:[s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Manufacturer"}),s("p",{children:"AMD"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Part #"}),s("ul",{children:[s("li",{children:"100-1000001084WOF"}),s("li",{children:"AMD Ryzen 7 9800X3D"}),s("li",{children:"100-100001084WOF"})]})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Series"}),s("p",{children:"AMD Ryzen 7"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Microarchitecture"}),s("p",{children:"Zen 5"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Core Family"}),s("p",{children:"Granite Ridge"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Socket"}),s("p",{children:"AM5"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Core"}),s("p",{children:"8"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Thread Count"}),s("p",{children:"16"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Performance Core Clock"}),s("p",{children:"4.7 GHz"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Performance Core Boost Clock"}),s("p",{children:"5.2 GHz"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"L2 Cache"}),s("p",{children:"8 MB"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"L3 Cache"}),s("p",{children:"96 MB"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"TDP"}),s("p",{children:"120 W"})]}),s("div",{className:"item py-2",children:[s("b",{children:"Integrated Graphics"}),s("p",{children:"Radeon"})]})]})]}),s("div",{className:"col-span-2",children:[s("div",{className:"flex items-center justify-between pb-2.5 border-b-[1px] border-[#ababab]",children:[s("h3",{className:"title text-2xl font-bold",children:"Đánh giá"}),s("a",{href:"",className:"inline-block py-1 px-5 bg-blue-600 text-white font-bold rounded-[4px] hover:bg-blue-800",children:"Xem tất cả bình luận"})]}),s("div",{className:"list mt-3",children:s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-1.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"mt-[10px]",children:s("i",{className:"icon-star star5"})})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("b",{className:"mb-[10px]",children:"Dino"}),s("p",{className:"mb-[10px] block text-[#747474]",children:"10:00pm 20/02/2025"}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"btn flex items-center",children:[s("div",{className:"flex items-center mr-[10px]",children:[s("b",{className:"mr-[5px]",children:"120"}),s("i",{className:"icon_2025 view"})]}),s("div",{className:"flex items-center",children:[s("b",{className:"mr-[5px]",children:"120"}),s("i",{className:"icon_2025 comment"})]})]})]})]})})]})]})]})})}function Ul(){return s(ft,{children:s("main",{children:s(ms,{children:[s(xt,{path:"/product-detail",component:$l}),s(xt,{path:"/buildpc",component:Wl}),s(xt,{path:"/buildpc/compare",component:ql}),s(xt,{path:"/buildpc/detail",component:Yl})]})})})}Ke(s(Ul,{}),document.getElementById("root")); diff --git a/public/assets/style.css b/public/assets/style.css new file mode 100644 index 0000000..461df17 --- /dev/null +++ b/public/assets/style.css @@ -0,0 +1 @@ +:root{--f-spinner-width: 36px;--f-spinner-height: 36px;--f-spinner-color-1: rgba(0, 0, 0, .1);--f-spinner-color-2: rgba(17, 24, 28, .8);--f-spinner-stroke: 2.75}.f-spinner{margin:auto;padding:0;width:var(--f-spinner-width);height:var(--f-spinner-height)}.f-spinner svg{width:100%;height:100%;vertical-align:top;animation:f-spinner-rotate 2s linear infinite}.f-spinner svg *{stroke-width:var(--f-spinner-stroke);fill:none}.f-spinner svg *:first-child{stroke:var(--f-spinner-color-1)}.f-spinner svg *:last-child{stroke:var(--f-spinner-color-2);animation:f-spinner-dash 2s ease-in-out infinite}@keyframes f-spinner-rotate{to{transform:rotate(360deg)}}@keyframes f-spinner-dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.f-throwOutUp{animation:var(--f-throw-out-duration, .175s) ease-out both f-throwOutUp}.f-throwOutDown{animation:var(--f-throw-out-duration, .175s) ease-out both f-throwOutDown}@keyframes f-throwOutUp{to{transform:translate3d(0,calc(var(--f-throw-out-distance, 150px) * -1),0);opacity:0}}@keyframes f-throwOutDown{to{transform:translate3d(0,var(--f-throw-out-distance, 150px),0);opacity:0}}.f-zoomInUp{animation:var(--f-transition-duration, .2s) ease .1s both f-zoomInUp}.f-zoomOutDown{animation:var(--f-transition-duration, .2s) ease both f-zoomOutDown}@keyframes f-zoomInUp{0%{transform:scale(.975) translate3d(0,16px,0);opacity:0}to{transform:scale(1) translateZ(0);opacity:1}}@keyframes f-zoomOutDown{to{transform:scale(.975) translate3d(0,16px,0);opacity:0}}.f-fadeIn{animation:var(--f-transition-duration, .2s) var(--f-transition-easing, ease) var(--f-transition-delay, 0s) both f-fadeIn;z-index:2}.f-fadeOut{animation:var(--f-transition-duration, .2s) var(--f-transition-easing, ease) var(--f-transition-delay, 0s) both f-fadeOut;z-index:1}@keyframes f-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes f-fadeOut{to{opacity:0}}.f-fadeFastIn{animation:var(--f-transition-duration, .2s) ease-out both f-fadeFastIn;z-index:2}.f-fadeFastOut{animation:var(--f-transition-duration, .1s) ease-out both f-fadeFastOut;z-index:2}@keyframes f-fadeFastIn{0%{opacity:.75}to{opacity:1}}@keyframes f-fadeFastOut{to{opacity:0}}.f-fadeSlowIn{animation:var(--f-transition-duration, .5s) ease both f-fadeSlowIn;z-index:2}.f-fadeSlowOut{animation:var(--f-transition-duration, .5s) ease both f-fadeSlowOut;z-index:1}@keyframes f-fadeSlowIn{0%{opacity:0}to{opacity:1}}@keyframes f-fadeSlowOut{to{opacity:0}}.f-crossfadeIn{animation:var(--f-transition-duration, .2s) ease-out both f-crossfadeIn;z-index:2}.f-crossfadeOut{animation:calc(var(--f-transition-duration, .2s)*.5) linear .1s both f-crossfadeOut;z-index:1}@keyframes f-crossfadeIn{0%{opacity:0}to{opacity:1}}@keyframes f-crossfadeOut{to{opacity:0}}.f-slideIn.from-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideInNext}.f-slideIn.from-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideInPrev}.f-slideOut.to-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideOutNext}.f-slideOut.to-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideOutPrev}@keyframes f-slideInPrev{0%{transform:translate(100%)}to{transform:translateZ(0)}}@keyframes f-slideInNext{0%{transform:translate(-100%)}to{transform:translateZ(0)}}@keyframes f-slideOutNext{to{transform:translate(-100%)}}@keyframes f-slideOutPrev{to{transform:translate(100%)}}.f-classicIn.from-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicInNext;z-index:2}.f-classicIn.from-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicInPrev;z-index:2}.f-classicOut.to-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicOutNext;z-index:1}.f-classicOut.to-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicOutPrev;z-index:1}@keyframes f-classicInNext{0%{transform:translate(-75px);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes f-classicInPrev{0%{transform:translate(75px);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes f-classicOutNext{to{transform:translate(-75px);opacity:0}}@keyframes f-classicOutPrev{to{transform:translate(75px);opacity:0}}:root{--f-button-width: 40px;--f-button-height: 40px;--f-button-border: 0;--f-button-border-radius: 0;--f-button-color: #374151;--f-button-bg: #f8f8f8;--f-button-hover-bg: #e0e0e0;--f-button-active-bg: #d0d0d0;--f-button-shadow: none;--f-button-transition: all .15s ease;--f-button-transform: none;--f-button-svg-width: 20px;--f-button-svg-height: 20px;--f-button-svg-stroke-width: 1.5;--f-button-svg-fill: none;--f-button-svg-filter: none;--f-button-svg-disabled-opacity: .65}.f-button{display:flex;justify-content:center;align-items:center;box-sizing:content-box;position:relative;margin:0;padding:0;width:var(--f-button-width);height:var(--f-button-height);border:var(--f-button-border);border-radius:var(--f-button-border-radius);color:var(--f-button-color);background:var(--f-button-bg);box-shadow:var(--f-button-shadow);pointer-events:all;cursor:pointer;transition:var(--f-button-transition)}@media (hover: hover){.f-button:hover:not([disabled]){color:var(--f-button-hover-color);background-color:var(--f-button-hover-bg)}}.f-button:active:not([disabled]){background-color:var(--f-button-active-bg)}.f-button:focus:not(:focus-visible){outline:none}.f-button:focus-visible{outline:none;box-shadow:inset 0 0 0 var(--f-button-outline, 2px) var(--f-button-outline-color, var(--f-button-color))}.f-button svg{width:var(--f-button-svg-width);height:var(--f-button-svg-height);fill:var(--f-button-svg-fill);stroke:currentColor;stroke-width:var(--f-button-svg-stroke-width);stroke-linecap:round;stroke-linejoin:round;transition:opacity .15s ease;transform:var(--f-button-transform);filter:var(--f-button-svg-filter);pointer-events:none}.f-button[disabled]{cursor:default}.f-button[disabled] svg{opacity:var(--f-button-svg-disabled-opacity)}.f-carousel__nav .f-button.is-prev,.f-carousel__nav .f-button.is-next,.fancybox__nav .f-button.is-prev,.fancybox__nav .f-button.is-next{position:absolute;z-index:1}.is-horizontal .f-carousel__nav .f-button.is-prev,.is-horizontal .f-carousel__nav .f-button.is-next,.is-horizontal .fancybox__nav .f-button.is-prev,.is-horizontal .fancybox__nav .f-button.is-next{top:50%;transform:translateY(-50%)}.is-horizontal .f-carousel__nav .f-button.is-prev,.is-horizontal .fancybox__nav .f-button.is-prev{left:var(--f-button-prev-pos)}.is-horizontal .f-carousel__nav .f-button.is-next,.is-horizontal .fancybox__nav .f-button.is-next{right:var(--f-button-next-pos)}.is-horizontal.is-rtl .f-carousel__nav .f-button.is-prev,.is-horizontal.is-rtl .fancybox__nav .f-button.is-prev{left:auto;right:var(--f-button-next-pos)}.is-horizontal.is-rtl .f-carousel__nav .f-button.is-next,.is-horizontal.is-rtl .fancybox__nav .f-button.is-next{right:auto;left:var(--f-button-prev-pos)}.is-vertical .f-carousel__nav .f-button.is-prev,.is-vertical .f-carousel__nav .f-button.is-next,.is-vertical .fancybox__nav .f-button.is-prev,.is-vertical .fancybox__nav .f-button.is-next{top:auto;left:50%;transform:translate(-50%)}.is-vertical .f-carousel__nav .f-button.is-prev,.is-vertical .fancybox__nav .f-button.is-prev{top:var(--f-button-next-pos)}.is-vertical .f-carousel__nav .f-button.is-next,.is-vertical .fancybox__nav .f-button.is-next{bottom:var(--f-button-next-pos)}.is-vertical .f-carousel__nav .f-button.is-prev svg,.is-vertical .f-carousel__nav .f-button.is-next svg,.is-vertical .fancybox__nav .f-button.is-prev svg,.is-vertical .fancybox__nav .f-button.is-next svg{transform:rotate(90deg)}.f-carousel__nav .f-button:disabled,.fancybox__nav .f-button:disabled{pointer-events:none}html.with-fancybox{width:auto;overflow:visible;scroll-behavior:auto}html.with-fancybox body{touch-action:none}html.with-fancybox body.hide-scrollbar{width:auto;margin-right:calc(var(--fancybox-body-margin, 0px) + var(--fancybox-scrollbar-compensate, 0px));overflow:hidden!important;overscroll-behavior-y:none}.fancybox__container{--fancybox-color: #dbdbdb;--fancybox-hover-color: #fff;--fancybox-bg: rgba(24, 24, 27, .98);--fancybox-slide-gap: 10px;--f-spinner-width: 50px;--f-spinner-height: 50px;--f-spinner-color-1: rgba(255, 255, 255, .1);--f-spinner-color-2: #bbb;--f-spinner-stroke: 3.65;position:fixed;top:0;left:0;bottom:0;right:0;direction:ltr;display:flex;flex-direction:column;box-sizing:border-box;margin:0;padding:0;color:#f8f8f8;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:visible;z-index:var(--fancybox-zIndex, 1050);outline:none;transform-origin:top left;-webkit-text-size-adjust:100%;-moz-text-size-adjust:none;-ms-text-size-adjust:100%;text-size-adjust:100%;overscroll-behavior-y:contain}.fancybox__container *,.fancybox__container *:before,.fancybox__container *:after{box-sizing:inherit}.fancybox__container::backdrop{background-color:#0000}.fancybox__backdrop{position:fixed;top:0;left:0;bottom:0;right:0;z-index:-1;background:var(--fancybox-bg);opacity:var(--fancybox-opacity, 1);will-change:opacity}.fancybox__carousel{position:relative;box-sizing:border-box;flex:1;min-height:0;z-index:10;overflow-y:visible;overflow-x:clip}.fancybox__viewport{width:100%;height:100%}.fancybox__viewport.is-draggable{cursor:move;cursor:grab}.fancybox__viewport.is-dragging{cursor:move;cursor:grabbing}.fancybox__track{display:flex;margin:0 auto;height:100%}.fancybox__slide{flex:0 0 auto;position:relative;display:flex;flex-direction:column;align-items:center;width:100%;height:100%;margin:0 var(--fancybox-slide-gap) 0 0;padding:4px;overflow:auto;overscroll-behavior:contain;transform:translateZ(0);backface-visibility:hidden}.fancybox__container:not(.is-compact) .fancybox__slide.has-close-btn{padding-top:40px}.fancybox__slide.has-iframe,.fancybox__slide.has-video,.fancybox__slide.has-html5video,.fancybox__slide.has-image{overflow:hidden}.fancybox__slide.has-image.is-animating,.fancybox__slide.has-image.is-selected{overflow:visible}.fancybox__slide:before,.fancybox__slide:after{content:"";flex:0 0 0;margin:auto}.fancybox__backdrop:empty,.fancybox__viewport:empty,.fancybox__track:empty,.fancybox__slide:empty{display:block}.fancybox__content{align-self:center;display:flex;flex-direction:column;position:relative;margin:0;padding:2rem;max-width:100%;color:var(--fancybox-content-color, #374151);background:var(--fancybox-content-bg, #fff);cursor:default;border-radius:0;z-index:20}.is-loading .fancybox__content{opacity:0}.is-draggable .fancybox__content{cursor:move;cursor:grab}.can-zoom_in .fancybox__content{cursor:zoom-in}.can-zoom_out .fancybox__content{cursor:zoom-out}.is-dragging .fancybox__content{cursor:move;cursor:grabbing}.fancybox__content [data-selectable],.fancybox__content [contenteditable]{cursor:auto}.fancybox__slide.has-image>.fancybox__content{padding:0;background:#0000;min-height:1px;background-repeat:no-repeat;background-size:contain;background-position:center center;transition:none;transform:translateZ(0);backface-visibility:hidden}.fancybox__slide.has-image>.fancybox__content>picture>img{width:100%;height:auto;max-height:100%}.is-animating .fancybox__content,.is-dragging .fancybox__content{will-change:transform,width,height}.fancybox-image{margin:auto;display:block;width:100%;height:100%;min-height:0;object-fit:contain;-webkit-user-select:none;user-select:none;filter:blur(0px)}.fancybox__caption{align-self:center;max-width:100%;flex-shrink:0;margin:0;padding:14px 0 4px;overflow-wrap:anywhere;line-height:1.375;color:var(--fancybox-color, currentColor);opacity:var(--fancybox-opacity, 1);cursor:auto;visibility:visible}.is-loading .fancybox__caption,.is-closing .fancybox__caption{opacity:0;visibility:hidden}.is-compact .fancybox__caption{padding-bottom:0}.f-button.is-close-btn{--f-button-svg-stroke-width: 2;position:absolute;top:0;right:8px;z-index:40}.fancybox__content>.f-button.is-close-btn{--f-button-width: 34px;--f-button-height: 34px;--f-button-border-radius: 4px;--f-button-color: var(--fancybox-color, #fff);--f-button-hover-color: var(--fancybox-color, #fff);--f-button-bg: transparent;--f-button-hover-bg: transparent;--f-button-active-bg: transparent;--f-button-svg-width: 22px;--f-button-svg-height: 22px;position:absolute;top:-38px;right:0;opacity:.75}.is-loading .fancybox__content>.f-button.is-close-btn{visibility:hidden}.is-zooming-out .fancybox__content>.f-button.is-close-btn{visibility:hidden}.fancybox__content>.f-button.is-close-btn:hover{opacity:1}.fancybox__footer{padding:0;margin:0;position:relative}.fancybox__footer .fancybox__caption{width:100%;padding:24px;opacity:var(--fancybox-opacity, 1);transition:all .25s ease}.is-compact .fancybox__footer{position:absolute;bottom:0;left:0;right:0;z-index:20;background:#18181b80}.is-compact .fancybox__footer .fancybox__caption{padding:12px}.is-compact .fancybox__content>.f-button.is-close-btn{--f-button-border-radius: 50%;--f-button-color: #fff;--f-button-hover-color: #fff;--f-button-outline-color: #000;--f-button-bg: rgba(0, 0, 0, .6);--f-button-active-bg: rgba(0, 0, 0, .6);--f-button-hover-bg: rgba(0, 0, 0, .6);--f-button-svg-width: 18px;--f-button-svg-height: 18px;--f-button-svg-filter: none;top:5px;right:5px}.fancybox__nav{--f-button-width: 50px;--f-button-height: 50px;--f-button-border: 0;--f-button-border-radius: 50%;--f-button-color: var(--fancybox-color);--f-button-hover-color: var(--fancybox-hover-color);--f-button-bg: transparent;--f-button-hover-bg: rgba(24, 24, 27, .3);--f-button-active-bg: rgba(24, 24, 27, .5);--f-button-shadow: none;--f-button-transition: all .15s ease;--f-button-transform: none;--f-button-svg-width: 26px;--f-button-svg-height: 26px;--f-button-svg-stroke-width: 2.5;--f-button-svg-fill: none;--f-button-svg-filter: drop-shadow(1px 1px 1px rgba(24, 24, 27, .5));--f-button-svg-disabled-opacity: .65;--f-button-next-pos: 1rem;--f-button-prev-pos: 1rem;opacity:var(--fancybox-opacity, 1)}.fancybox__nav .f-button:before{position:absolute;content:"";top:-30px;right:-20px;left:-20px;bottom:-30px;z-index:1}.is-idle .fancybox__nav{animation:.15s ease-out both f-fadeOut}.is-idle.is-compact .fancybox__footer{pointer-events:none;animation:.15s ease-out both f-fadeOut}.fancybox__slide>.f-spinner{position:absolute;top:50%;left:50%;margin:var(--f-spinner-top, calc(var(--f-spinner-width) * -.5)) 0 0 var(--f-spinner-left, calc(var(--f-spinner-height) * -.5));z-index:30;cursor:pointer}.fancybox-protected{position:absolute;top:0;left:0;right:0;bottom:0;z-index:40;-webkit-user-select:none;user-select:none}.fancybox-ghost{position:absolute;top:0;left:0;width:100%;height:100%;min-height:0;object-fit:contain;z-index:40;-webkit-user-select:none;user-select:none;pointer-events:none}.fancybox-focus-guard{outline:none;opacity:0;position:fixed;pointer-events:none}.fancybox__container:not([aria-hidden]){opacity:0}.fancybox__container.is-animated[aria-hidden=false]>*:not(.fancybox__backdrop,.fancybox__carousel),.fancybox__container.is-animated[aria-hidden=false] .fancybox__carousel>*:not(.fancybox__viewport),.fancybox__container.is-animated[aria-hidden=false] .fancybox__slide>*:not(.fancybox__content){animation:var(--f-interface-enter-duration, .25s) ease .1s backwards f-fadeIn}.fancybox__container.is-animated[aria-hidden=false] .fancybox__backdrop{animation:var(--f-backdrop-enter-duration, .35s) ease backwards f-fadeIn}.fancybox__container.is-animated[aria-hidden=true]>*:not(.fancybox__backdrop,.fancybox__carousel),.fancybox__container.is-animated[aria-hidden=true] .fancybox__carousel>*:not(.fancybox__viewport),.fancybox__container.is-animated[aria-hidden=true] .fancybox__slide>*:not(.fancybox__content){animation:var(--f-interface-exit-duration, .15s) ease forwards f-fadeOut}.fancybox__container.is-animated[aria-hidden=true] .fancybox__backdrop{animation:var(--f-backdrop-exit-duration, .35s) ease forwards f-fadeOut}.has-iframe .fancybox__content,.has-map .fancybox__content,.has-pdf .fancybox__content,.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{max-width:100%;flex-shrink:1;min-height:1px;overflow:visible}.has-iframe .fancybox__content,.has-map .fancybox__content,.has-pdf .fancybox__content{width:calc(100% - 120px);height:90%}.fancybox__container.is-compact .has-iframe .fancybox__content,.fancybox__container.is-compact .has-map .fancybox__content,.fancybox__container.is-compact .has-pdf .fancybox__content{width:100%;height:100%}.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{width:960px;height:540px;max-width:100%;max-height:100%}.has-map .fancybox__content,.has-pdf .fancybox__content,.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{padding:0;background:#18181be6;color:#fff}.has-map .fancybox__content{background:#e5e3df}.fancybox__html5video,.fancybox__iframe{border:0;display:block;height:100%;width:100%;background:#0000}.fancybox-placeholder{border:0!important;clip:rect(1px,1px,1px,1px)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.f-carousel__thumbs{--f-thumb-width: 96px;--f-thumb-height: 72px;--f-thumb-outline: 0;--f-thumb-outline-color: #5eb0ef;--f-thumb-opacity: 1;--f-thumb-hover-opacity: 1;--f-thumb-selected-opacity: 1;--f-thumb-border-radius: 2px;--f-thumb-offset: 0px;--f-button-next-pos: 0;--f-button-prev-pos: 0}.f-carousel__thumbs.is-classic{--f-thumb-gap: 8px;--f-thumb-opacity: .5;--f-thumb-hover-opacity: 1;--f-thumb-selected-opacity: 1}.f-carousel__thumbs.is-modern{--f-thumb-gap: 4px;--f-thumb-extra-gap: 16px;--f-thumb-clip-width: 46px}.f-thumbs{position:relative;flex:0 0 auto;margin:0;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;user-select:none;perspective:1000px;transform:translateZ(0)}.f-thumbs .f-spinner{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:2px;background-image:linear-gradient(#ebeff2,#e2e8f0);z-index:-1}.f-thumbs .f-spinner svg{display:none}.f-thumbs.is-vertical{height:100%}.f-thumbs__viewport{width:100%;height:auto;overflow:hidden;transform:translateZ(0)}.f-thumbs__track{display:flex}.f-thumbs__slide{position:relative;flex:0 0 auto;box-sizing:content-box;display:flex;align-items:center;justify-content:center;padding:0;margin:0;width:var(--f-thumb-width);height:var(--f-thumb-height);overflow:visible;cursor:pointer}.f-thumbs__slide.is-loading img{opacity:0}.is-classic .f-thumbs__viewport{height:100%}.is-modern .f-thumbs__track{width:max-content}.is-modern .f-thumbs__track:before{content:"";position:absolute;top:0;bottom:0;left:calc((var(--f-thumb-clip-width, 0))*-.5);width:calc(var(--width, 0)*1px + var(--f-thumb-clip-width, 0));cursor:pointer}.is-modern .f-thumbs__slide{width:var(--f-thumb-clip-width);transform:translate3d(calc(var(--shift, 0) * -1px),0,0);transition:none;pointer-events:none}.is-modern.is-resting .f-thumbs__slide{transition:transform .33s ease}.is-modern.is-resting .f-thumbs__slide__button{transition:clip-path .33s ease}.is-using-tab .is-modern .f-thumbs__slide:focus-within{filter:drop-shadow(-1px 0px 0px var(--f-thumb-outline-color)) drop-shadow(2px 0px 0px var(--f-thumb-outline-color)) drop-shadow(0px -1px 0px var(--f-thumb-outline-color)) drop-shadow(0px 2px 0px var(--f-thumb-outline-color))}.f-thumbs__slide__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--f-thumb-width);height:100%;margin:0 -100%;padding:0;border:0;position:relative;border-radius:var(--f-thumb-border-radius);overflow:hidden;background:#0000;outline:none;cursor:pointer;pointer-events:auto;touch-action:manipulation;opacity:var(--f-thumb-opacity);transition:opacity .2s ease}.f-thumbs__slide__button:hover{opacity:var(--f-thumb-hover-opacity)}.f-thumbs__slide__button:focus:not(:focus-visible){outline:none}.f-thumbs__slide__button:focus-visible{outline:none;opacity:var(--f-thumb-selected-opacity)}.is-modern .f-thumbs__slide__button{--clip-path: inset( 0 calc( ((var(--f-thumb-width, 0) - var(--f-thumb-clip-width, 0))) * (1 - var(--progress, 0)) * .5 ) round var(--f-thumb-border-radius, 0) );clip-path:var(--clip-path)}.is-classic .is-nav-selected .f-thumbs__slide__button{opacity:var(--f-thumb-selected-opacity)}.is-classic .is-nav-selected .f-thumbs__slide__button:after{content:"";position:absolute;top:0;left:0;right:0;height:auto;bottom:0;border:var(--f-thumb-outline, 0) solid var(--f-thumb-outline-color, transparent);border-radius:var(--f-thumb-border-radius);animation:f-fadeIn .2s ease-out;z-index:10}.f-thumbs__slide__img{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;padding:var(--f-thumb-offset);box-sizing:border-box;pointer-events:none;object-fit:cover;border-radius:var(--f-thumb-border-radius)}.f-thumbs.is-horizontal .f-thumbs__track{padding:8px 0 12px}.f-thumbs.is-horizontal .f-thumbs__slide{margin:0 var(--f-thumb-gap) 0 0}.f-thumbs.is-vertical .f-thumbs__track{flex-wrap:wrap;padding:0 8px}.f-thumbs.is-vertical .f-thumbs__slide{margin:0 0 var(--f-thumb-gap) 0}.fancybox__thumbs{--f-thumb-width: 96px;--f-thumb-height: 72px;--f-thumb-border-radius: 2px;--f-thumb-outline: 2px;--f-thumb-outline-color: #ededed;position:relative;opacity:var(--fancybox-opacity, 1);transition:max-height .35s cubic-bezier(.23,1,.32,1)}.fancybox__thumbs.is-classic{--f-thumb-gap: 8px;--f-thumb-opacity: .5;--f-thumb-hover-opacity: 1}.fancybox__thumbs.is-classic .f-spinner{background-image:linear-gradient(#ffffff1a,#ffffff0d)}.fancybox__thumbs.is-modern{--f-thumb-gap: 4px;--f-thumb-extra-gap: 16px;--f-thumb-clip-width: 46px;--f-thumb-opacity: 1;--f-thumb-hover-opacity: 1}.fancybox__thumbs.is-modern .f-spinner{background-image:linear-gradient(#ffffff1a,#ffffff0d)}.fancybox__thumbs.is-horizontal{padding:0 var(--f-thumb-gap)}.fancybox__thumbs.is-vertical{padding:var(--f-thumb-gap) 0}.is-compact .fancybox__thumbs{--f-thumb-width: 64px;--f-thumb-clip-width: 32px;--f-thumb-height: 48px;--f-thumb-extra-gap: 10px}.fancybox__thumbs.is-masked{max-height:0px!important}.is-closing .fancybox__thumbs{transition:none!important}.fancybox__toolbar{--f-progress-color: var(--fancybox-color, rgba(255, 255, 255, .94));--f-button-width: 46px;--f-button-height: 46px;--f-button-color: var(--fancybox-color);--f-button-hover-color: var(--fancybox-hover-color);--f-button-bg: rgba(24, 24, 27, .65);--f-button-hover-bg: rgba(70, 70, 73, .65);--f-button-active-bg: rgba(90, 90, 93, .65);--f-button-border-radius: 0;--f-button-svg-width: 24px;--f-button-svg-height: 24px;--f-button-svg-stroke-width: 1.5;--f-button-svg-filter: drop-shadow(1px 1px 1px rgba(24, 24, 27, .15));--f-button-svg-fill: none;--f-button-svg-disabled-opacity: .65;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI Adjusted,Segoe UI,Liberation Sans,sans-serif;color:var(--fancybox-color, currentColor);opacity:var(--fancybox-opacity, 1);text-shadow:var(--fancybox-toolbar-text-shadow, 1px 1px 1px rgba(0, 0, 0, .5));pointer-events:none;z-index:20}.fancybox__toolbar :focus-visible{z-index:1}.fancybox__toolbar.is-absolute,.is-compact .fancybox__toolbar{position:absolute;top:0;left:0;right:0}.is-idle .fancybox__toolbar{pointer-events:none;animation:.15s ease-out both f-fadeOut}.fancybox__toolbar__column{display:flex;flex-direction:row;flex-wrap:wrap;align-content:flex-start}.fancybox__toolbar__column.is-left,.fancybox__toolbar__column.is-right{flex-grow:1;flex-basis:0}.fancybox__toolbar__column.is-right{display:flex;justify-content:flex-end;flex-wrap:nowrap}.fancybox__infobar{padding:0 5px;line-height:var(--f-button-height);text-align:center;font-size:17px;font-variant-numeric:tabular-nums;-webkit-font-smoothing:subpixel-antialiased;cursor:default;-webkit-user-select:none;user-select:none}.fancybox__infobar span{padding:0 5px}.fancybox__infobar:not(:first-child):not(:last-child){background:var(--f-button-bg)}[data-fancybox-toggle-slideshow]{position:relative}[data-fancybox-toggle-slideshow] .f-progress{height:100%;opacity:.3}[data-fancybox-toggle-slideshow] svg g:first-child{display:flex}[data-fancybox-toggle-slideshow] svg g:last-child{display:none}.has-slideshow [data-fancybox-toggle-slideshow] svg g:first-child{display:none}.has-slideshow [data-fancybox-toggle-slideshow] svg g:last-child{display:flex}[data-fancybox-toggle-fullscreen] svg g:first-child{display:flex}[data-fancybox-toggle-fullscreen] svg g:last-child{display:none}:fullscreen [data-fancybox-toggle-fullscreen] svg g:first-child{display:none}:fullscreen [data-fancybox-toggle-fullscreen] svg g:last-child{display:flex}.f-progress{position:absolute;top:0;left:0;right:0;height:3px;transform:scaleX(0);transform-origin:0;transition-property:transform;transition-timing-function:linear;background:var(--f-progress-color, var(--f-carousel-theme-color, #0091ff));z-index:30;-webkit-user-select:none;user-select:none;pointer-events:none} diff --git a/public_html/assets/builder/index.js b/public_html/assets/builder/index.js new file mode 100644 index 0000000..4465e59 --- /dev/null +++ b/public_html/assets/builder/index.js @@ -0,0 +1,6 @@ +var ht,A,Un,Le,Gi,Zn,Kn,Jn,Li,bi,xi,Qn,dt={},es=[],rr=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ut=Array.isArray;function ue(n,e){for(var t in e)n[t]=e[t];return n}function Ai(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function K(n,e,t){var i,r,a,l={};for(a in e)a=="key"?i=e[a]:a=="ref"?r=e[a]:l[a]=e[a];if(arguments.length>2&&(l.children=arguments.length>3?ht.call(arguments,2):t),typeof n=="function"&&n.defaultProps!=null)for(a in n.defaultProps)l[a]==null&&(l[a]=n.defaultProps[a]);return lt(n,l,i,r,null)}function lt(n,e,t,i,r){var a={type:n,props:e,key:t,ref:i,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:r??++Un,__i:-1,__u:0};return r==null&&A.vnode!=null&&A.vnode(a),a}function ar(){return{current:null}}function Z(n){return n.children}function fe(n,e){this.props=n,this.context=e}function Ze(n,e){if(e==null)return n.__?Ze(n.__,n.__i+1):null;for(var t;eo&&Le.sort(Kn),n=Le.shift(),o=Le.length,n.__d&&(t=void 0,r=(i=(e=n).__v).__e,a=[],l=[],e.__P&&((t=ue({},i)).__v=i.__v+1,A.vnode&&A.vnode(t),Oi(e.__P,t,i,e.__n,e.__P.namespaceURI,32&i.__u?[r]:null,a,r??Ze(i),!!(32&i.__u),l),t.__v=i.__v,t.__.__k[t.__i]=t,ss(a,t,l),t.__e!=r&&ts(t)));zt.__r=0}function is(n,e,t,i,r,a,l,o,c,d,h){var u,m,p,f,v,b,g=i&&i.__k||es,x=e.length;for(c=lr(t,e,g,c,x),u=0;u0?lt(l.type,l.props,l.key,l.ref?l.ref:null,l.__v):l).__=n,l.__b=n.__b+1,o=null,(d=l.__i=or(l,t,c,u))!=-1&&(u--,(o=t[d])&&(o.__u|=2)),o==null||o.__v==null?(d==-1&&(r>h?m--:rc?m--:m++,l.__u|=4))):n.__k[a]=null;if(u)for(a=0;a(c!=null&&(2&c.__u)==0?1:0))for(r=t-1,a=t+1;r>=0||a=0){if((c=e[r])&&(2&c.__u)==0&&l==c.key&&o==c.type)return r;r--}if(a0?n:ut(n)?n.map(rs):ue({},n)}function cr(n,e,t,i,r,a,l,o,c){var d,h,u,m,p,f,v,b=t.props,g=e.props,x=e.type;if(x=="svg"?r="http://www.w3.org/2000/svg":x=="math"?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),a!=null){for(d=0;d2&&(o.children=arguments.length>3?ht.call(arguments,2):t),lt(n.type,o,i||n.key,r||n.ref,null)}function pt(n){function e(t){var i,r;return this.getChildContext||(i=new Set,(r={})[e.__c]=this,this.getChildContext=function(){return r},this.componentWillUnmount=function(){i=null},this.shouldComponentUpdate=function(a){this.props.value!=a.value&&i.forEach(function(l){l.__e=!0,yi(l)})},this.sub=function(a){i.add(a);var l=a.componentWillUnmount;a.componentWillUnmount=function(){i&&i.delete(a),l&&l.call(a)}}),t.children}return e.__c="__cC"+Qn++,e.__=n,e.Provider=e.__l=(e.Consumer=function(t,i){return t.children(i)}).contextType=e,e}ht=es.slice,A={__e:function(n,e,t,i){for(var r,a,l;e=e.__;)if((r=e.__c)&&!r.__)try{if((a=r.constructor)&&a.getDerivedStateFromError!=null&&(r.setState(a.getDerivedStateFromError(n)),l=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(n,i||{}),l=r.__d),l)return r.__E=r}catch(o){n=o}throw n}},Un=0,fe.prototype.setState=function(n,e){var t;t=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=ue({},this.state),typeof n=="function"&&(n=n(ue({},t),this.props)),n&&ue(t,n),n!=null&&this.__v&&(e&&this._sb.push(e),yi(this))},fe.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),yi(this))},fe.prototype.render=Z,Le=[],Zn=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Kn=function(n,e){return n.__v.__b-e.__v.__b},zt.__r=0,Jn=/(PointerCapture)$|Capture$/i,Li=0,bi=Wi(!1),xi=Wi(!0),Qn=0;var hr=0;function s(n,e,t,i,r,a){e||(e={});var l,o,c=e;if("ref"in c)for(o in c={},e)o=="ref"?l=e[o]:c[o]=e[o];var d={type:n,props:c,key:t,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--hr,__i:-1,__u:0,__source:r,__self:a};if(typeof n=="function"&&(l=n.defaultProps))for(o in l)c[o]===void 0&&(c[o]=l[o]);return A.vnode&&A.vnode(d),d}var Se,B,Wt,Xi,Je=0,os=[],H=A,qi=H.__b,Yi=H.__r,Ui=H.diffed,Zi=H.__c,Ki=H.unmount,Ji=H.__;function Qe(n,e){H.__h&&H.__h(B,n,Je||e),Je=0;var t=B.__H||(B.__H={__:[],__h:[]});return n>=t.__.length&&t.__.push({}),t.__[n]}function ne(n){return Je=1,mt(ps,n)}function mt(n,e,t){var i=Qe(Se++,2);if(i.t=n,!i.__c&&(i.__=[t?t(e):ps(void 0,e),function(o){var c=i.__N?i.__N[0]:i.__[0],d=i.t(c,o);c!==d&&(i.__N=[d,i.__[1]],i.__c.setState({}))}],i.__c=B,!B.__f)){var r=function(o,c,d){if(!i.__c.__H)return!0;var h=i.__c.__H.__.filter(function(m){return!!m.__c});if(h.every(function(m){return!m.__N}))return!a||a.call(this,o,c,d);var u=i.__c.props!==o;return h.forEach(function(m){if(m.__N){var p=m.__[0];m.__=m.__N,m.__N=void 0,p!==m.__[0]&&(u=!0)}}),a&&a.call(this,o,c,d)||u};B.__f=!0;var a=B.shouldComponentUpdate,l=B.componentWillUpdate;B.componentWillUpdate=function(o,c,d){if(this.__e){var h=a;a=void 0,r(o,c,d),a=h}l&&l.call(this,o,c,d)},B.shouldComponentUpdate=r}return i.__N||i.__}function Re(n,e){var t=Qe(Se++,3);!H.__s&&Di(t.__H,e)&&(t.__=n,t.u=e,B.__H.__h.push(t))}function Te(n,e){var t=Qe(Se++,4);!H.__s&&Di(t.__H,e)&&(t.__=n,t.u=e,B.__h.push(t))}function $(n){return Je=5,et(function(){return{current:n}},[])}function cs(n,e,t){Je=6,Te(function(){if(typeof n=="function"){var i=n(e());return function(){n(null),i&&typeof i=="function"&&i()}}if(n)return n.current=e(),function(){return n.current=null}},t==null?t:t.concat(n))}function et(n,e){var t=Qe(Se++,7);return Di(t.__H,e)&&(t.__=n(),t.__H=e,t.__h=n),t.__}function ds(n,e){return Je=8,et(function(){return n},e)}function Gt(n){var e=B.context[n.__c],t=Qe(Se++,9);return t.c=n,e?(t.__==null&&(t.__=!0,e.sub(B)),e.props.value):n.__}function hs(n,e){H.useDebugValue&&H.useDebugValue(e?e(n):n)}function us(){var n=Qe(Se++,11);if(!n.__){for(var e=B.__v;e!==null&&!e.__m&&e.__!==null;)e=e.__;var t=e.__m||(e.__m=[0,0]);n.__="P"+t[0]+"-"+t[1]++}return n.__}function ur(){for(var n;n=os.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(Ot),n.__H.__h.forEach(Ni),n.__H.__h=[]}catch(e){n.__H.__h=[],H.__e(e,n.__v)}}H.__b=function(n){B=null,qi&&qi(n)},H.__=function(n,e){n&&e.__k&&e.__k.__m&&(n.__m=e.__k.__m),Ji&&Ji(n,e)},H.__r=function(n){Yi&&Yi(n),Se=0;var e=(B=n.__c).__H;e&&(Wt===B?(e.__h=[],B.__h=[],e.__.forEach(function(t){t.__N&&(t.__=t.__N),t.u=t.__N=void 0})):(e.__h.forEach(Ot),e.__h.forEach(Ni),e.__h=[],Se=0)),Wt=B},H.diffed=function(n){Ui&&Ui(n);var e=n.__c;e&&e.__H&&(e.__H.__h.length&&(os.push(e)!==1&&Xi===H.requestAnimationFrame||((Xi=H.requestAnimationFrame)||pr)(ur)),e.__H.__.forEach(function(t){t.u&&(t.__H=t.u),t.u=void 0})),Wt=B=null},H.__c=function(n,e){e.some(function(t){try{t.__h.forEach(Ot),t.__h=t.__h.filter(function(i){return!i.__||Ni(i)})}catch(i){e.some(function(r){r.__h&&(r.__h=[])}),e=[],H.__e(i,t.__v)}}),Zi&&Zi(n,e)},H.unmount=function(n){Ki&&Ki(n);var e,t=n.__c;t&&t.__H&&(t.__H.__.forEach(function(i){try{Ot(i)}catch(r){e=r}}),t.__H=void 0,e&&H.__e(e,t.__v))};var Qi=typeof requestAnimationFrame=="function";function pr(n){var e,t=function(){clearTimeout(i),Qi&&cancelAnimationFrame(e),setTimeout(n)},i=setTimeout(t,100);Qi&&(e=requestAnimationFrame(t))}function Ot(n){var e=B,t=n.__c;typeof t=="function"&&(n.__c=void 0,t()),B=e}function Ni(n){var e=B;n.__c=n.__(),B=e}function Di(n,e){return!n||n.length!==e.length||e.some(function(t,i){return t!==n[i]})}function ps(n,e){return typeof e=="function"?e(n):e}let ke,nt;const mr=(n,e)=>{if(ke=void 0,e&&e.type==="click"){if(e.ctrlKey||e.metaKey||e.altKey||e.shiftKey||e.button!==0)return n;const t=e.target.closest("a[href]"),i=t&&t.getAttribute("href");if(!t||t.origin!=location.origin||/^#/.test(i)||!/^(_?self)?$/i.test(t.target)||nt&&(typeof nt=="string"?!i.startsWith(nt):!nt.test(i)))return n;ke=!0,e.preventDefault(),e=t.href.replace(location.origin,"")}else typeof e=="string"?ke=!0:e&&e.url?(ke=!e.replace,e=e.url):e=location.pathname+location.search;return ke===!0?history.pushState(null,"",e):ke===!1&&history.replaceState(null,"",e),e},fr=(n,e,t={})=>{n=n.split("/").filter(Boolean),e=(e||"").split("/").filter(Boolean),t.params||(t.params={});for(let i=0,r,a;i{const a=new URL(e,location.origin),l=a.pathname.replace(/\/+$/g,"")||"/";return{url:e,path:l,query:Object.fromEntries(a.searchParams),route:(o,c)=>t({url:o,replace:c}),wasPush:i}},[e]);return Te(()=>(addEventListener("click",t),addEventListener("popstate",t),()=>{removeEventListener("click",t),removeEventListener("popstate",t)}),[]),K(ft.ctx.Provider,{value:r},n.children)}const gr=Promise.resolve();function ms(n){const[e,t]=mt(N=>N+1,0),{url:i,query:r,wasPush:a,path:l}=vr(),{rest:o=l,params:c={}}=Gt(en),d=$(!1),h=$(l),u=$(0),m=$(),p=$(),f=$(),v=$(!1),b=$();b.current=!1;let g,x,y;ge(n.children).some(N=>{if(fr(o,N.props.path,y={...N.props,path:o,query:r,params:c,rest:""}))return g=wi(N,y);N.props.default&&(x=wi(N,y))});let w=g||x;const _=m.current&&m.current.__u&vt&&m.current.__u&bt,M=m.current&&m.current.__h,C=et(()=>{p.current=m.current,m.current=K(en.Provider,{value:y},w);const N=p.current&&p.current.props.children;return!N||!w||w.type!==N.type||w.props.component!==N.props.component?(this.__v&&this.__v.__k&&this.__v.__k.reverse(),u.current++,!0):!1},[i,JSON.stringify(y)]);_?(m.current.__u|=vt,m.current.__u|=bt):M&&(m.current.__h=!0);const S=p.current;return p.current=null,this.__c=(N,E)=>{b.current=!0,p.current=S,n.onLoadStart&&n.onLoadStart(i),d.current=!0;let P=u.current;N.then(()=>{P===u.current&&(p.current=null,m.current&&(E.__h&&(m.current.__h=E.__h),E.__u&bt&&(m.current.__u|=bt),E.__u&vt&&(m.current.__u|=vt)),gr.then(t))})},Te(()=>{const N=this.__v&&this.__v.__e;if(b.current){!v.current&&!f.current&&(f.current=N);return}!v.current&&f.current&&(f.current!==N&&f.current.remove(),f.current=null),v.current=!0,h.current!==l&&(a&&scrollTo(0,0),n.onRouteChange&&n.onRouteChange(i),h.current=l),n.onLoadEnd&&d.current&&n.onLoadEnd(i),d.current=!1},[l,a,e]),C?[K(Xt,{r:m}),K(Xt,{r:p})]:K(Xt,{r:m})}const vt=32,bt=128,Xt=({r:n})=>n.current;ms.Provider=ft;ft.ctx=pt({});const en=pt({}),xt=n=>K(n.component,n),vr=()=>Gt(ft.ctx),tn=A.__b;A.__b=n=>{n.type&&n.type._forwarded&&n.ref&&(n.props.ref=n.ref,n.ref=null),tn&&tn(n)};const nn=A.__e;A.__e=(n,e,t)=>{if(n&&n.then){let i=e;for(;i=i.__;)if(i.__c&&i.__c.__c)return e.__e==null&&(e.__c.__z=[t.__e],e.__e=t.__e,e.__k=t.__k),e.__k||(e.__k=[]),i.__c.__c(n,e)}nn&&nn(n,e,t)};function fs(n,e){for(var t in e)n[t]=e[t];return n}function _i(n,e){for(var t in n)if(t!=="__source"&&!(t in e))return!0;for(var i in e)if(i!=="__source"&&n[i]!==e[i])return!0;return!1}function gs(n,e){var t=e(),i=ne({t:{__:t,u:e}}),r=i[0].t,a=i[1];return Te(function(){r.__=t,r.u=e,qt(r)&&a({t:r})},[n,t,e]),Re(function(){return qt(r)&&a({t:r}),n(function(){qt(r)&&a({t:r})})},[n]),t}function qt(n){var e,t,i=n.u,r=n.__;try{var a=i();return!((e=r)===(t=a)&&(e!==0||1/e==1/t)||e!=e&&t!=t)}catch{return!0}}function vs(n){n()}function bs(n){return n}function xs(){return[!1,vs]}var ys=Te;function Si(n,e){this.props=n,this.context=e}function br(n,e){function t(r){var a=this.props.ref,l=a==r.ref;return!l&&a&&(a.call?a(null):a.current=null),e?!e(this.props,r)||!l:_i(this.props,r)}function i(r){return this.shouldComponentUpdate=t,K(n,r)}return i.displayName="Memo("+(n.displayName||n.name)+")",i.prototype.isReactComponent=!0,i.__f=!0,i}(Si.prototype=new fe).isPureReactComponent=!0,Si.prototype.shouldComponentUpdate=function(n,e){return _i(this.props,n)||_i(this.state,e)};var sn=A.__b;A.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),sn&&sn(n)};var xr=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function zi(n){function e(t){var i=fs({},t);return delete i.ref,n(i,t.ref||null)}return e.$$typeof=xr,e.render=e,e.prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(n.displayName||n.name)+")",e}var rn=function(n,e){return n==null?null:ge(ge(n).map(e))},yr={map:rn,forEach:rn,count:function(n){return n?ge(n).length:0},only:function(n){var e=ge(n);if(e.length!==1)throw"Children.only";return e[0]},toArray:ge},wr=A.__e;A.__e=function(n,e,t,i){if(n.then){for(var r,a=e;a=a.__;)if((r=a.__c)&&r.__c)return e.__e==null&&(e.__e=t.__e,e.__k=t.__k),r.__c(n,e)}wr(n,e,t,i)};var an=A.unmount;function ws(n,e,t){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(i){typeof i.__c=="function"&&i.__c()}),n.__c.__H=null),(n=fs({},n)).__c!=null&&(n.__c.__P===t&&(n.__c.__P=e),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(i){return ws(i,e,t)})),n}function Ns(n,e,t){return n&&t&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(i){return Ns(i,e,t)}),n.__c&&n.__c.__P===e&&(n.__e&&t.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=t)),n}function It(){this.__u=0,this.o=null,this.__b=null}function _s(n){var e=n.__.__c;return e&&e.__a&&e.__a(n)}function Nr(n){var e,t,i;function r(a){if(e||(e=n()).then(function(l){t=l.default||l},function(l){i=l}),i)throw i;if(!t)throw e;return K(t,a)}return r.displayName="Lazy",r.__f=!0,r}function st(){this.i=null,this.l=null}A.unmount=function(n){var e=n.__c;e&&e.__R&&e.__R(),e&&32&n.__u&&(n.type=null),an&&an(n)},(It.prototype=new fe).__c=function(n,e){var t=e.__c,i=this;i.o==null&&(i.o=[]),i.o.push(t);var r=_s(i.__v),a=!1,l=function(){a||(a=!0,t.__R=null,r?r(o):o())};t.__R=l;var o=function(){if(!--i.__u){if(i.state.__a){var c=i.state.__a;i.__v.__k[0]=Ns(c,c.__c.__P,c.__c.__O)}var d;for(i.setState({__a:i.__b=null});d=i.o.pop();)d.forceUpdate()}};i.__u++||32&e.__u||i.setState({__a:i.__b=i.__v.__k[0]}),n.then(l,l)},It.prototype.componentWillUnmount=function(){this.o=[]},It.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var t=document.createElement("div"),i=this.__v.__k[0].__c;this.__v.__k[0]=ws(this.__b,t,i.__O=i.__P)}this.__b=null}var r=e.__a&&K(Z,null,n.fallback);return r&&(r.__u&=-33),[K(Z,null,e.__a?null:n.children),r]};var ln=function(n,e,t){if(++t[1]===t[0]&&n.l.delete(e),n.props.revealOrder&&(n.props.revealOrder[0]!=="t"||!n.l.size))for(t=n.i;t;){for(;t.length>3;)t.pop()();if(t[1]>>1,1),e.h.removeChild(r)}}}Ke(K(_r,{context:e.context},n.__v),e.v)}function Tr(n,e){var t=K(Sr,{__v:n,h:e});return t.containerInfo=e,t}(st.prototype=new fe).__a=function(n){var e=this,t=_s(e.__v),i=e.l.get(n);return i[0]++,function(r){var a=function(){e.props.revealOrder?(i.push(r),ln(e,n,i)):r()};t?t(a):a()}},st.prototype.render=function(n){this.i=null,this.l=new Map;var e=ge(n.children);n.revealOrder&&n.revealOrder[0]==="b"&&e.reverse();for(var t=e.length;t--;)this.l.set(e[t],this.i=[1,0,this.i]);return n.children},st.prototype.componentDidUpdate=st.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(e,t){ln(n,t,e)})};var Ss=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Er=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Cr=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Pr=/[A-Z0-9]/g,Mr=typeof document<"u",kr=function(n){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(n)};function Lr(n,e,t){return e.__k==null&&(e.textContent=""),Ke(n,e),typeof t=="function"&&t(),n?n.__c:null}function Ar(n,e,t){return ls(n,e),typeof t=="function"&&t(),n?n.__c:null}fe.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(n){Object.defineProperty(fe.prototype,n,{configurable:!0,get:function(){return this["UNSAFE_"+n]},set:function(e){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:e})}})});var on=A.event;function Or(){}function Ir(){return this.cancelBubble}function Dr(){return this.defaultPrevented}A.event=function(n){return on&&(n=on(n)),n.persist=Or,n.isPropagationStopped=Ir,n.isDefaultPrevented=Dr,n.nativeEvent=n};var Ri,zr={enumerable:!1,configurable:!0,get:function(){return this.class}},cn=A.vnode;A.vnode=function(n){typeof n.type=="string"&&function(e){var t=e.props,i=e.type,r={},a=i.indexOf("-")===-1;for(var l in t){var o=t[l];if(!(l==="value"&&"defaultValue"in t&&o==null||Mr&&l==="children"&&i==="noscript"||l==="class"||l==="className")){var c=l.toLowerCase();l==="defaultValue"&&"value"in t&&t.value==null?l="value":l==="download"&&o===!0?o="":c==="translate"&&o==="no"?o=!1:c[0]==="o"&&c[1]==="n"?c==="ondoubleclick"?l="ondblclick":c!=="onchange"||i!=="input"&&i!=="textarea"||kr(t.type)?c==="onfocus"?l="onfocusin":c==="onblur"?l="onfocusout":Cr.test(l)&&(l=c):c=l="oninput":a&&Er.test(l)?l=l.replace(Pr,"-$&").toLowerCase():o===null&&(o=void 0),c==="oninput"&&r[l=c]&&(l="oninputCapture"),r[l]=o}}i=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=ge(t.children).forEach(function(d){d.props.selected=r.value.indexOf(d.props.value)!=-1})),i=="select"&&r.defaultValue!=null&&(r.value=ge(t.children).forEach(function(d){d.props.selected=r.multiple?r.defaultValue.indexOf(d.props.value)!=-1:r.defaultValue==d.props.value})),t.class&&!t.className?(r.class=t.class,Object.defineProperty(r,"className",zr)):(t.className&&!t.class||t.class&&t.className)&&(r.class=r.className=t.className),e.props=r}(n),n.$$typeof=Ss,cn&&cn(n)};var dn=A.__r;A.__r=function(n){dn&&dn(n),Ri=n.__c};var hn=A.diffed;A.diffed=function(n){hn&&hn(n);var e=n.props,t=n.__e;t!=null&&n.type==="textarea"&&"value"in e&&e.value!==t.value&&(t.value=e.value==null?"":e.value),Ri=null};var Rr={ReactCurrentDispatcher:{current:{readContext:function(n){return Ri.__n[n.__c].props.value},useCallback:ds,useContext:Gt,useDebugValue:hs,useDeferredValue:bs,useEffect:Re,useId:us,useImperativeHandle:cs,useInsertionEffect:ys,useLayoutEffect:Te,useMemo:et,useReducer:mt,useRef:$,useState:ne,useSyncExternalStore:gs,useTransition:xs}}};function jr(n){return K.bind(null,n)}function Vt(n){return!!n&&n.$$typeof===Ss}function Fr(n){return Vt(n)&&n.type===Z}function Br(n){return!!n&&!!n.displayName&&(typeof n.displayName=="string"||n.displayName instanceof String)&&n.displayName.startsWith("Memo(")}function Hr(n){return Vt(n)?wi.apply(null,arguments):n}function $r(n){return!!n.__k&&(Ke(null,n),!0)}function Gr(n){return n&&(n.base||n.nodeType===1&&n)||null}var Vr=function(n,e){return n(e)},Wr=function(n,e){return n(e)},Xr=Z,qr=Vt,X={useState:ne,useId:us,useReducer:mt,useEffect:Re,useLayoutEffect:Te,useInsertionEffect:ys,useTransition:xs,useDeferredValue:bs,useSyncExternalStore:gs,startTransition:vs,useRef:$,useImperativeHandle:cs,useMemo:et,useCallback:ds,useContext:Gt,useDebugValue:hs,version:"18.3.1",Children:yr,render:Lr,hydrate:Ar,unmountComponentAtNode:$r,createPortal:Tr,createElement:K,createContext:pt,createFactory:jr,cloneElement:Hr,createRef:ar,Fragment:Z,isValidElement:Vt,isElement:qr,isFragment:Fr,isMemo:Br,findDOMNode:Gr,Component:fe,PureComponent:Si,memo:br,forwardRef:zi,flushSync:Wr,unstable_batchedUpdates:Vr,StrictMode:Xr,Suspense:It,SuspenseList:st,lazy:Nr,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Rr};function un(n){return n!==null&&typeof n=="object"&&"constructor"in n&&n.constructor===Object}function ji(n,e){n===void 0&&(n={}),e===void 0&&(e={});const t=["__proto__","constructor","prototype"];Object.keys(e).filter(i=>t.indexOf(i)<0).forEach(i=>{typeof n[i]>"u"?n[i]=e[i]:un(e[i])&&un(n[i])&&Object.keys(e[i]).length>0&&ji(n[i],e[i])})}const Ts={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function Ee(){const n=typeof document<"u"?document:{};return ji(n,Ts),n}const Yr={document:Ts,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return""}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(n){return typeof setTimeout>"u"?(n(),null):setTimeout(n,0)},cancelAnimationFrame(n){typeof setTimeout>"u"||clearTimeout(n)}};function J(){const n=typeof window<"u"?window:{};return ji(n,Yr),n}function Ur(n){return n===void 0&&(n=""),n.trim().split(" ").filter(e=>!!e.trim())}function Zr(n){const e=n;Object.keys(e).forEach(t=>{try{e[t]=null}catch{}try{delete e[t]}catch{}})}function Ti(n,e){return e===void 0&&(e=0),setTimeout(n,e)}function De(){return Date.now()}function Kr(n){const e=J();let t;return e.getComputedStyle&&(t=e.getComputedStyle(n,null)),!t&&n.currentStyle&&(t=n.currentStyle),t||(t=n.style),t}function Jr(n,e){e===void 0&&(e="x");const t=J();let i,r,a;const l=Kr(n);return t.WebKitCSSMatrix?(r=l.transform||l.webkitTransform,r.split(",").length>6&&(r=r.split(", ").map(o=>o.replace(",",".")).join(", ")),a=new t.WebKitCSSMatrix(r==="none"?"":r)):(a=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),i=a.toString().split(",")),e==="x"&&(t.WebKitCSSMatrix?r=a.m41:i.length===16?r=parseFloat(i[12]):r=parseFloat(i[4])),e==="y"&&(t.WebKitCSSMatrix?r=a.m42:i.length===16?r=parseFloat(i[13]):r=parseFloat(i[5])),r||0}function rt(n){return typeof n=="object"&&n!==null&&n.constructor&&Object.prototype.toString.call(n).slice(8,-1)==="Object"}function Qr(n){return typeof window<"u"&&typeof window.HTMLElement<"u"?n instanceof HTMLElement:n&&(n.nodeType===1||n.nodeType===11)}function ie(){const n=Object(arguments.length<=0?void 0:arguments[0]),e=["__proto__","constructor","prototype"];for(let t=1;te.indexOf(a)<0);for(let a=0,l=r.length;aa?"next":"prev",h=(m,p)=>d==="next"&&m>=p||d==="prev"&&m<=p,u=()=>{o=new Date().getTime(),l===null&&(l=o);const m=Math.max(Math.min((o-l)/c,1),0),p=.5-Math.cos(m*Math.PI)/2;let f=a+p*(t-a);if(h(f,t)&&(f=t),e.wrapperEl.scrollTo({[i]:f}),h(f,t)){e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout(()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[i]:f})}),r.cancelAnimationFrame(e.cssModeFrameID);return}e.cssModeFrameID=r.requestAnimationFrame(u)};u()}function ce(n,e){e===void 0&&(e="");const t=J(),i=[...n.children];return t.HTMLSlotElement&&n instanceof HTMLSlotElement&&i.push(...n.assignedElements()),e?i.filter(r=>r.matches(e)):i}function ea(n,e){const t=[e];for(;t.length>0;){const i=t.shift();if(n===i)return!0;t.push(...i.children,...i.shadowRoot?i.shadowRoot.children:[],...i.assignedElements?i.assignedElements():[])}}function ta(n,e){const t=J();let i=e.contains(n);return!i&&t.HTMLSlotElement&&e instanceof HTMLSlotElement&&(i=[...e.assignedElements()].includes(n),i||(i=ea(n,e))),i}function Rt(n){try{console.warn(n);return}catch{}}function jt(n,e){e===void 0&&(e=[]);const t=document.createElement(n);return t.classList.add(...Array.isArray(e)?e:Ur(e)),t}function ia(n,e){const t=[];for(;n.previousElementSibling;){const i=n.previousElementSibling;e?i.matches(e)&&t.push(i):t.push(i),n=i}return t}function na(n,e){const t=[];for(;n.nextElementSibling;){const i=n.nextElementSibling;e?i.matches(e)&&t.push(i):t.push(i),n=i}return t}function _e(n,e){return J().getComputedStyle(n,null).getPropertyValue(e)}function pn(n){let e=n,t;if(e){for(t=0;(e=e.previousSibling)!==null;)e.nodeType===1&&(t+=1);return t}}function sa(n,e){const t=[];let i=n.parentElement;for(;i;)t.push(i),i=i.parentElement;return t}function Yt(n,e){function t(i){i.target===n&&(e.call(n,i),n.removeEventListener("transitionend",t))}e&&n.addEventListener("transitionend",t)}function mn(n,e,t){const i=J();return n[e==="width"?"offsetWidth":"offsetHeight"]+parseFloat(i.getComputedStyle(n,null).getPropertyValue(e==="width"?"margin-right":"margin-top"))+parseFloat(i.getComputedStyle(n,null).getPropertyValue(e==="width"?"margin-left":"margin-bottom"))}function ve(n){return(Array.isArray(n)?n:[n]).filter(e=>!!e)}let Ut;function ra(){const n=J(),e=Ee();return{smoothScroll:e.documentElement&&e.documentElement.style&&"scrollBehavior"in e.documentElement.style,touch:!!("ontouchstart"in n||n.DocumentTouch&&e instanceof n.DocumentTouch)}}function Cs(){return Ut||(Ut=ra()),Ut}let Zt;function aa(n){let{userAgent:e}=n===void 0?{}:n;const t=Cs(),i=J(),r=i.navigator.platform,a=e||i.navigator.userAgent,l={ios:!1,android:!1},o=i.screen.width,c=i.screen.height,d=a.match(/(Android);?[\s\/]+([\d.]+)?/);let h=a.match(/(iPad).*OS\s([\d_]+)/);const u=a.match(/(iPod)(.*OS\s([\d_]+))?/),m=!h&&a.match(/(iPhone\sOS|iOS)\s([\d_]+)/),p=r==="Win32";let f=r==="MacIntel";const v=["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"];return!h&&f&&t.touch&&v.indexOf(`${o}x${c}`)>=0&&(h=a.match(/(Version)\/([\d.]+)/),h||(h=[0,1,"13_0_0"]),f=!1),d&&!p&&(l.os="android",l.android=!0),(h||m||u)&&(l.os="ios",l.ios=!0),l}function Ps(n){return n===void 0&&(n={}),Zt||(Zt=aa(n)),Zt}let Kt;function la(){const n=J(),e=Ps();let t=!1;function i(){const o=n.navigator.userAgent.toLowerCase();return o.indexOf("safari")>=0&&o.indexOf("chrome")<0&&o.indexOf("android")<0}if(i()){const o=String(n.navigator.userAgent);if(o.includes("Version/")){const[c,d]=o.split("Version/")[1].split(" ")[0].split(".").map(h=>Number(h));t=c<16||c===16&&d<2}}const r=/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(n.navigator.userAgent),a=i(),l=a||r&&e.ios;return{isSafari:t||a,needPerspectiveFix:t,need3dFix:l,isWebView:r}}function Ms(){return Kt||(Kt=la()),Kt}function oa(n){let{swiper:e,on:t,emit:i}=n;const r=J();let a=null,l=null;const o=()=>{!e||e.destroyed||!e.initialized||(i("beforeResize"),i("resize"))},c=()=>{!e||e.destroyed||!e.initialized||(a=new ResizeObserver(u=>{l=r.requestAnimationFrame(()=>{const{width:m,height:p}=e;let f=m,v=p;u.forEach(b=>{let{contentBoxSize:g,contentRect:x,target:y}=b;y&&y!==e.el||(f=x?x.width:(g[0]||g).inlineSize,v=x?x.height:(g[0]||g).blockSize)}),(f!==m||v!==p)&&o()})}),a.observe(e.el))},d=()=>{l&&r.cancelAnimationFrame(l),a&&a.unobserve&&e.el&&(a.unobserve(e.el),a=null)},h=()=>{!e||e.destroyed||!e.initialized||i("orientationchange")};t("init",()=>{if(e.params.resizeObserver&&typeof r.ResizeObserver<"u"){c();return}r.addEventListener("resize",o),r.addEventListener("orientationchange",h)}),t("destroy",()=>{d(),r.removeEventListener("resize",o),r.removeEventListener("orientationchange",h)})}function ca(n){let{swiper:e,extendParams:t,on:i,emit:r}=n;const a=[],l=J(),o=function(h,u){u===void 0&&(u={});const m=l.MutationObserver||l.WebkitMutationObserver,p=new m(f=>{if(e.__preventObserver__)return;if(f.length===1){r("observerUpdate",f[0]);return}const v=function(){r("observerUpdate",f[0])};l.requestAnimationFrame?l.requestAnimationFrame(v):l.setTimeout(v,0)});p.observe(h,{attributes:typeof u.attributes>"u"?!0:u.attributes,childList:e.isElement||(typeof u.childList>"u"?!0:u).childList,characterData:typeof u.characterData>"u"?!0:u.characterData}),a.push(p)},c=()=>{if(e.params.observer){if(e.params.observeParents){const h=sa(e.hostEl);for(let u=0;u{a.forEach(h=>{h.disconnect()}),a.splice(0,a.length)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),i("init",c),i("destroy",d)}var da={on(n,e,t){const i=this;if(!i.eventsListeners||i.destroyed||typeof e!="function")return i;const r=t?"unshift":"push";return n.split(" ").forEach(a=>{i.eventsListeners[a]||(i.eventsListeners[a]=[]),i.eventsListeners[a][r](e)}),i},once(n,e,t){const i=this;if(!i.eventsListeners||i.destroyed||typeof e!="function")return i;function r(){i.off(n,r),r.__emitterProxy&&delete r.__emitterProxy;for(var a=arguments.length,l=new Array(a),o=0;o=0&&e.eventsAnyListeners.splice(t,1),e},off(n,e){const t=this;return!t.eventsListeners||t.destroyed||!t.eventsListeners||n.split(" ").forEach(i=>{typeof e>"u"?t.eventsListeners[i]=[]:t.eventsListeners[i]&&t.eventsListeners[i].forEach((r,a)=>{(r===e||r.__emitterProxy&&r.__emitterProxy===e)&&t.eventsListeners[i].splice(a,1)})}),t},emit(){const n=this;if(!n.eventsListeners||n.destroyed||!n.eventsListeners)return n;let e,t,i;for(var r=arguments.length,a=new Array(r),l=0;l{n.eventsAnyListeners&&n.eventsAnyListeners.length&&n.eventsAnyListeners.forEach(d=>{d.apply(i,[c,...t])}),n.eventsListeners&&n.eventsListeners[c]&&n.eventsListeners[c].forEach(d=>{d.apply(i,t)})}),n}};function ha(){const n=this;let e,t;const i=n.el;typeof n.params.width<"u"&&n.params.width!==null?e=n.params.width:e=i.clientWidth,typeof n.params.height<"u"&&n.params.height!==null?t=n.params.height:t=i.clientHeight,!(e===0&&n.isHorizontal()||t===0&&n.isVertical())&&(e=e-parseInt(_e(i,"padding-left")||0,10)-parseInt(_e(i,"padding-right")||0,10),t=t-parseInt(_e(i,"padding-top")||0,10)-parseInt(_e(i,"padding-bottom")||0,10),Number.isNaN(e)&&(e=0),Number.isNaN(t)&&(t=0),Object.assign(n,{width:e,height:t,size:n.isHorizontal()?e:t}))}function ua(){const n=this;function e(E,P){return parseFloat(E.getPropertyValue(n.getDirectionLabel(P))||0)}const t=n.params,{wrapperEl:i,slidesEl:r,size:a,rtlTranslate:l,wrongRTL:o}=n,c=n.virtual&&t.virtual.enabled,d=c?n.virtual.slides.length:n.slides.length,h=ce(r,`.${n.params.slideClass}, swiper-slide`),u=c?n.virtual.slides.length:h.length;let m=[];const p=[],f=[];let v=t.slidesOffsetBefore;typeof v=="function"&&(v=t.slidesOffsetBefore.call(n));let b=t.slidesOffsetAfter;typeof b=="function"&&(b=t.slidesOffsetAfter.call(n));const g=n.snapGrid.length,x=n.slidesGrid.length;let y=t.spaceBetween,w=-v,_=0,M=0;if(typeof a>"u")return;typeof y=="string"&&y.indexOf("%")>=0?y=parseFloat(y.replace("%",""))/100*a:typeof y=="string"&&(y=parseFloat(y)),n.virtualSize=-y,h.forEach(E=>{l?E.style.marginLeft="":E.style.marginRight="",E.style.marginBottom="",E.style.marginTop=""}),t.centeredSlides&&t.cssMode&&(yt(i,"--swiper-centered-offset-before",""),yt(i,"--swiper-centered-offset-after",""));const C=t.grid&&t.grid.rows>1&&n.grid;C?n.grid.initSlides(h):n.grid&&n.grid.unsetSlides();let S;const N=t.slidesPerView==="auto"&&t.breakpoints&&Object.keys(t.breakpoints).filter(E=>typeof t.breakpoints[E].slidesPerView<"u").length>0;for(let E=0;E1&&m.push(n.virtualSize-a)}if(c&&t.loop){const E=f[0]+y;if(t.slidesPerGroup>1){const P=Math.ceil((n.virtual.slidesBefore+n.virtual.slidesAfter)/t.slidesPerGroup),L=E*t.slidesPerGroup;for(let O=0;O!t.cssMode||t.loop?!0:L!==h.length-1).forEach(P=>{P.style[E]=`${y}px`})}if(t.centeredSlides&&t.centeredSlidesBounds){let E=0;f.forEach(L=>{E+=L+(y||0)}),E-=y;const P=E>a?E-a:0;m=m.map(L=>L<=0?-v:L>P?P+b:L)}if(t.centerInsufficientSlides){let E=0;f.forEach(L=>{E+=L+(y||0)}),E-=y;const P=(t.slidesOffsetBefore||0)+(t.slidesOffsetAfter||0);if(E+P{m[G]=O-L}),p.forEach((O,G)=>{p[G]=O+L})}}if(Object.assign(n,{slides:h,snapGrid:m,slidesGrid:p,slidesSizesGrid:f}),t.centeredSlides&&t.cssMode&&!t.centeredSlidesBounds){yt(i,"--swiper-centered-offset-before",`${-m[0]}px`),yt(i,"--swiper-centered-offset-after",`${n.size/2-f[f.length-1]/2}px`);const E=-n.snapGrid[0],P=-n.slidesGrid[0];n.snapGrid=n.snapGrid.map(L=>L+E),n.slidesGrid=n.slidesGrid.map(L=>L+P)}if(u!==d&&n.emit("slidesLengthChange"),m.length!==g&&(n.params.watchOverflow&&n.checkOverflow(),n.emit("snapGridLengthChange")),p.length!==x&&n.emit("slidesGridLengthChange"),t.watchSlidesProgress&&n.updateSlidesOffset(),n.emit("slidesUpdated"),!c&&!t.cssMode&&(t.effect==="slide"||t.effect==="fade")){const E=`${t.containerModifierClass}backface-hidden`,P=n.el.classList.contains(E);u<=t.maxBackfaceHiddenSlides?P||n.el.classList.add(E):P&&n.el.classList.remove(E)}}function pa(n){const e=this,t=[],i=e.virtual&&e.params.virtual.enabled;let r=0,a;typeof n=="number"?e.setTransition(n):n===!0&&e.setTransition(e.params.speed);const l=o=>i?e.slides[e.getSlideIndexByData(o)]:e.slides[o];if(e.params.slidesPerView!=="auto"&&e.params.slidesPerView>1)if(e.params.centeredSlides)(e.visibleSlides||[]).forEach(o=>{t.push(o)});else for(a=0;ae.slides.length&&!i)break;t.push(l(o))}else t.push(l(e.activeIndex));for(a=0;ar?o:r}(r||r===0)&&(e.wrapperEl.style.height=`${r}px`)}function ma(){const n=this,e=n.slides,t=n.isElement?n.isHorizontal()?n.wrapperEl.offsetLeft:n.wrapperEl.offsetTop:0;for(let i=0;i{e&&!n.classList.contains(t)?n.classList.add(t):!e&&n.classList.contains(t)&&n.classList.remove(t)};function fa(n){n===void 0&&(n=this&&this.translate||0);const e=this,t=e.params,{slides:i,rtlTranslate:r,snapGrid:a}=e;if(i.length===0)return;typeof i[0].swiperSlideOffset>"u"&&e.updateSlidesOffset();let l=-n;r&&(l=n),e.visibleSlidesIndexes=[],e.visibleSlides=[];let o=t.spaceBetween;typeof o=="string"&&o.indexOf("%")>=0?o=parseFloat(o.replace("%",""))/100*e.size:typeof o=="string"&&(o=parseFloat(o));for(let c=0;c=0&&p<=e.size-e.slidesSizesGrid[c],b=p>=0&&p1&&f<=e.size||p<=0&&f>=e.size;b&&(e.visibleSlides.push(d),e.visibleSlidesIndexes.push(c)),fn(d,b,t.slideVisibleClass),fn(d,v,t.slideFullyVisibleClass),d.progress=r?-u:u,d.originalProgress=r?-m:m}}function ga(n){const e=this;if(typeof n>"u"){const h=e.rtlTranslate?-1:1;n=e&&e.translate&&e.translate*h||0}const t=e.params,i=e.maxTranslate()-e.minTranslate();let{progress:r,isBeginning:a,isEnd:l,progressLoop:o}=e;const c=a,d=l;if(i===0)r=0,a=!0,l=!0;else{r=(n-e.minTranslate())/i;const h=Math.abs(n-e.minTranslate())<1,u=Math.abs(n-e.maxTranslate())<1;a=h||r<=0,l=u||r>=1,h&&(r=0),u&&(r=1)}if(t.loop){const h=e.getSlideIndexByData(0),u=e.getSlideIndexByData(e.slides.length-1),m=e.slidesGrid[h],p=e.slidesGrid[u],f=e.slidesGrid[e.slidesGrid.length-1],v=Math.abs(n);v>=m?o=(v-m)/f:o=(v+f-p)/f,o>1&&(o-=1)}Object.assign(e,{progress:r,progressLoop:o,isBeginning:a,isEnd:l}),(t.watchSlidesProgress||t.centeredSlides&&t.autoHeight)&&e.updateSlidesProgress(n),a&&!c&&e.emit("reachBeginning toEdge"),l&&!d&&e.emit("reachEnd toEdge"),(c&&!a||d&&!l)&&e.emit("fromEdge"),e.emit("progress",r)}const Jt=(n,e,t)=>{e&&!n.classList.contains(t)?n.classList.add(t):!e&&n.classList.contains(t)&&n.classList.remove(t)};function va(){const n=this,{slides:e,params:t,slidesEl:i,activeIndex:r}=n,a=n.virtual&&t.virtual.enabled,l=n.grid&&t.grid&&t.grid.rows>1,o=u=>ce(i,`.${t.slideClass}${u}, swiper-slide${u}`)[0];let c,d,h;if(a)if(t.loop){let u=r-n.virtual.slidesBefore;u<0&&(u=n.virtual.slides.length+u),u>=n.virtual.slides.length&&(u-=n.virtual.slides.length),c=o(`[data-swiper-slide-index="${u}"]`)}else c=o(`[data-swiper-slide-index="${r}"]`);else l?(c=e.find(u=>u.column===r),h=e.find(u=>u.column===r+1),d=e.find(u=>u.column===r-1)):c=e[r];c&&(l||(h=na(c,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!h&&(h=e[0]),d=ia(c,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!d===0&&(d=e[e.length-1]))),e.forEach(u=>{Jt(u,u===c,t.slideActiveClass),Jt(u,u===h,t.slideNextClass),Jt(u,u===d,t.slidePrevClass)}),n.emitSlidesClasses()}const Dt=(n,e)=>{if(!n||n.destroyed||!n.params)return;const t=()=>n.isElement?"swiper-slide":`.${n.params.slideClass}`,i=e.closest(t());if(i){let r=i.querySelector(`.${n.params.lazyPreloaderClass}`);!r&&n.isElement&&(i.shadowRoot?r=i.shadowRoot.querySelector(`.${n.params.lazyPreloaderClass}`):requestAnimationFrame(()=>{i.shadowRoot&&(r=i.shadowRoot.querySelector(`.${n.params.lazyPreloaderClass}`),r&&r.remove())})),r&&r.remove()}},Qt=(n,e)=>{if(!n.slides[e])return;const t=n.slides[e].querySelector('[loading="lazy"]');t&&t.removeAttribute("loading")},Ei=n=>{if(!n||n.destroyed||!n.params)return;let e=n.params.lazyPreloadPrevNext;const t=n.slides.length;if(!t||!e||e<0)return;e=Math.min(e,t);const i=n.params.slidesPerView==="auto"?n.slidesPerViewDynamic():Math.ceil(n.params.slidesPerView),r=n.activeIndex;if(n.params.grid&&n.params.grid.rows>1){const l=r,o=[l-e];o.push(...Array.from({length:e}).map((c,d)=>l+i+d)),n.slides.forEach((c,d)=>{o.includes(c.column)&&Qt(n,d)});return}const a=r+i-1;if(n.params.rewind||n.params.loop)for(let l=r-e;l<=a+e;l+=1){const o=(l%t+t)%t;(oa)&&Qt(n,o)}else for(let l=Math.max(r-e,0);l<=Math.min(a+e,t-1);l+=1)l!==r&&(l>a||l=e[a]&&i=e[a]&&i=e[a]&&(r=a);return t.normalizeSlideIndex&&(r<0||typeof r>"u")&&(r=0),r}function xa(n){const e=this,t=e.rtlTranslate?e.translate:-e.translate,{snapGrid:i,params:r,activeIndex:a,realIndex:l,snapIndex:o}=e;let c=n,d;const h=p=>{let f=p-e.virtual.slidesBefore;return f<0&&(f=e.virtual.slides.length+f),f>=e.virtual.slides.length&&(f-=e.virtual.slides.length),f};if(typeof c>"u"&&(c=ba(e)),i.indexOf(t)>=0)d=i.indexOf(t);else{const p=Math.min(r.slidesPerGroupSkip,c);d=p+Math.floor((c-p)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===a&&!e.params.loop){d!==o&&(e.snapIndex=d,e.emit("snapIndexChange"));return}if(c===a&&e.params.loop&&e.virtual&&e.params.virtual.enabled){e.realIndex=h(c);return}const u=e.grid&&r.grid&&r.grid.rows>1;let m;if(e.virtual&&r.virtual.enabled&&r.loop)m=h(c);else if(u){const p=e.slides.find(v=>v.column===c);let f=parseInt(p.getAttribute("data-swiper-slide-index"),10);Number.isNaN(f)&&(f=Math.max(e.slides.indexOf(p),0)),m=Math.floor(f/r.grid.rows)}else if(e.slides[c]){const p=e.slides[c].getAttribute("data-swiper-slide-index");p?m=parseInt(p,10):m=c}else m=c;Object.assign(e,{previousSnapIndex:o,snapIndex:d,previousRealIndex:l,realIndex:m,previousIndex:a,activeIndex:c}),e.initialized&&Ei(e),e.emit("activeIndexChange"),e.emit("snapIndexChange"),(e.initialized||e.params.runCallbacksOnInit)&&(l!==m&&e.emit("realIndexChange"),e.emit("slideChange"))}function ya(n,e){const t=this,i=t.params;let r=n.closest(`.${i.slideClass}, swiper-slide`);!r&&t.isElement&&e&&e.length>1&&e.includes(n)&&[...e.slice(e.indexOf(n)+1,e.length)].forEach(o=>{!r&&o.matches&&o.matches(`.${i.slideClass}, swiper-slide`)&&(r=o)});let a=!1,l;if(r){for(let o=0;oc?h=c:i&&nl?o="next":a"u"&&(e=a.params.speed);const v=Math.min(a.params.slidesPerGroupSkip,l);let b=v+Math.floor((l-v)/a.params.slidesPerGroup);b>=c.length&&(b=c.length-1);const g=-c[b];if(o.normalizeSlideIndex)for(let C=0;C=N&&S=N&&S=N&&(l=C)}if(a.initialized&&l!==u&&(!a.allowSlideNext&&(m?g>a.translate&&g>a.minTranslate():ga.translate&&g>a.maxTranslate()&&(u||0)!==l))return!1;l!==(h||0)&&t&&a.emit("beforeSlideChangeStart"),a.updateProgress(g);let x;l>u?x="next":l0?(a._cssModeVirtualInitialSet=!0,requestAnimationFrame(()=>{p[C?"scrollLeft":"scrollTop"]=S})):p[C?"scrollLeft":"scrollTop"]=S,y&&requestAnimationFrame(()=>{a.wrapperEl.style.scrollSnapType="",a._immediateVirtual=!1});else{if(!a.support.smoothScroll)return Es({swiper:a,targetPosition:S,side:C?"left":"top"}),!0;p.scrollTo({[C?"left":"top"]:S,behavior:"smooth"})}return!0}const M=Ms().isSafari;return y&&!r&&M&&a.isElement&&a.virtual.update(!1,!1,l),a.setTransition(e),a.setTranslate(g),a.updateActiveIndex(l),a.updateSlidesClasses(),a.emit("beforeTransitionStart",e,i),a.transitionStart(t,x),e===0?a.transitionEnd(t,x):a.animating||(a.animating=!0,a.onSlideToWrapperTransitionEnd||(a.onSlideToWrapperTransitionEnd=function(S){!a||a.destroyed||S.target===this&&(a.wrapperEl.removeEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.onSlideToWrapperTransitionEnd=null,delete a.onSlideToWrapperTransitionEnd,a.transitionEnd(t,x))}),a.wrapperEl.addEventListener("transitionend",a.onSlideToWrapperTransitionEnd)),!0}function Oa(n,e,t,i){n===void 0&&(n=0),t===void 0&&(t=!0),typeof n=="string"&&(n=parseInt(n,10));const r=this;if(r.destroyed)return;typeof e>"u"&&(e=r.params.speed);const a=r.grid&&r.params.grid&&r.params.grid.rows>1;let l=n;if(r.params.loop)if(r.virtual&&r.params.virtual.enabled)l=l+r.virtual.slidesBefore;else{let o;if(a){const m=l*r.params.grid.rows;o=r.slides.find(p=>p.getAttribute("data-swiper-slide-index")*1===m).column}else o=r.getSlideIndexByData(l);const c=a?Math.ceil(r.slides.length/r.params.grid.rows):r.slides.length,{centeredSlides:d}=r.params;let h=r.params.slidesPerView;h==="auto"?h=r.slidesPerViewDynamic():(h=Math.ceil(parseFloat(r.params.slidesPerView,10)),d&&h%2===0&&(h=h+1));let u=c-op.getAttribute("data-swiper-slide-index")*1===m).column}else l=r.getSlideIndexByData(l)}return requestAnimationFrame(()=>{r.slideTo(l,e,t,i)}),r}function Ia(n,e,t){e===void 0&&(e=!0);const i=this,{enabled:r,params:a,animating:l}=i;if(!r||i.destroyed)return i;typeof n>"u"&&(n=i.params.speed);let o=a.slidesPerGroup;a.slidesPerView==="auto"&&a.slidesPerGroup===1&&a.slidesPerGroupAuto&&(o=Math.max(i.slidesPerViewDynamic("current",!0),1));const c=i.activeIndex{i.slideTo(i.activeIndex+c,n,e,t)}),!0}return a.rewind&&i.isEnd?i.slideTo(0,n,e,t):i.slideTo(i.activeIndex+c,n,e,t)}function Da(n,e,t){e===void 0&&(e=!0);const i=this,{params:r,snapGrid:a,slidesGrid:l,rtlTranslate:o,enabled:c,animating:d}=i;if(!c||i.destroyed)return i;typeof n>"u"&&(n=i.params.speed);const h=i.virtual&&r.virtual.enabled;if(r.loop){if(d&&!h&&r.loopPreventsSliding)return!1;i.loopFix({direction:"prev"}),i._clientLeft=i.wrapperEl.clientLeft}const u=o?i.translate:-i.translate;function m(x){return x<0?-Math.floor(Math.abs(x)):Math.floor(x)}const p=m(u),f=a.map(x=>m(x)),v=r.freeMode&&r.freeMode.enabled;let b=a[f.indexOf(p)-1];if(typeof b>"u"&&(r.cssMode||v)){let x;a.forEach((y,w)=>{p>=y&&(x=w)}),typeof x<"u"&&(b=v?a[x]:a[x>0?x-1:x])}let g=0;if(typeof b<"u"&&(g=l.indexOf(b),g<0&&(g=i.activeIndex-1),r.slidesPerView==="auto"&&r.slidesPerGroup===1&&r.slidesPerGroupAuto&&(g=g-i.slidesPerViewDynamic("previous",!0)+1,g=Math.max(g,0))),r.rewind&&i.isBeginning){const x=i.params.virtual&&i.params.virtual.enabled&&i.virtual?i.virtual.slides.length-1:i.slides.length-1;return i.slideTo(x,n,e,t)}else if(r.loop&&i.activeIndex===0&&r.cssMode)return requestAnimationFrame(()=>{i.slideTo(g,n,e,t)}),!0;return i.slideTo(g,n,e,t)}function za(n,e,t){e===void 0&&(e=!0);const i=this;if(!i.destroyed)return typeof n>"u"&&(n=i.params.speed),i.slideTo(i.activeIndex,n,e,t)}function Ra(n,e,t,i){e===void 0&&(e=!0),i===void 0&&(i=.5);const r=this;if(r.destroyed)return;typeof n>"u"&&(n=r.params.speed);let a=r.activeIndex;const l=Math.min(r.params.slidesPerGroupSkip,a),o=l+Math.floor((a-l)/r.params.slidesPerGroup),c=r.rtlTranslate?r.translate:-r.translate;if(c>=r.snapGrid[o]){const d=r.snapGrid[o],h=r.snapGrid[o+1];c-d>(h-d)*i&&(a+=r.params.slidesPerGroup)}else{const d=r.snapGrid[o-1],h=r.snapGrid[o];c-d<=(h-d)*i&&(a-=r.params.slidesPerGroup)}return a=Math.max(a,0),a=Math.min(a,r.slidesGrid.length-1),r.slideTo(a,n,e,t)}function ja(){const n=this;if(n.destroyed)return;const{params:e,slidesEl:t}=n,i=e.slidesPerView==="auto"?n.slidesPerViewDynamic():e.slidesPerView;let r=n.clickedIndex,a;const l=n.isElement?"swiper-slide":`.${e.slideClass}`;if(e.loop){if(n.animating)return;a=parseInt(n.clickedSlide.getAttribute("data-swiper-slide-index"),10),e.centeredSlides?rn.slides.length-n.loopedSlides+i/2?(n.loopFix(),r=n.getSlideIndex(ce(t,`${l}[data-swiper-slide-index="${a}"]`)[0]),Ti(()=>{n.slideTo(r)})):n.slideTo(r):r>n.slides.length-i?(n.loopFix(),r=n.getSlideIndex(ce(t,`${l}[data-swiper-slide-index="${a}"]`)[0]),Ti(()=>{n.slideTo(r)})):n.slideTo(r)}else n.slideTo(r)}var Fa={slideTo:Aa,slideToLoop:Oa,slideNext:Ia,slidePrev:Da,slideReset:za,slideToClosest:Ra,slideToClickedSlide:ja};function Ba(n,e){const t=this,{params:i,slidesEl:r}=t;if(!i.loop||t.virtual&&t.params.virtual.enabled)return;const a=()=>{ce(r,`.${i.slideClass}, swiper-slide`).forEach((m,p)=>{m.setAttribute("data-swiper-slide-index",p)})},l=t.grid&&i.grid&&i.grid.rows>1,o=i.slidesPerGroup*(l?i.grid.rows:1),c=t.slides.length%o!==0,d=l&&t.slides.length%i.grid.rows!==0,h=u=>{for(let m=0;m1;h.length"u"?a=d.getSlideIndex(h.find(I=>I.classList.contains(f.slideActiveClass))):N=a;const E=i==="next"||!i,P=i==="prev"||!i;let L=0,O=0;const te=(w?h[a].column:a)+(v&&typeof r>"u"?-g/2+.5:0);if(te=0;F-=1)h[F].column===q&&_.push(F)}else _.push(C-V-1)}}else if(te+g>C-y){O=Math.max(te-(C-y*2),x),S&&(O=Math.max(O,g-C+b+1));for(let I=0;I{q.column===V&&M.push(F)}):M.push(V)}}if(d.__preventObserver__=!0,requestAnimationFrame(()=>{d.__preventObserver__=!1}),d.params.effect==="cards"&&h.length{h[I].swiperLoopMoveDOM=!0,p.prepend(h[I]),h[I].swiperLoopMoveDOM=!1}),E&&M.forEach(I=>{h[I].swiperLoopMoveDOM=!0,p.append(h[I]),h[I].swiperLoopMoveDOM=!1}),d.recalcSlides(),f.slidesPerView==="auto"?d.updateSlides():w&&(_.length>0&&P||M.length>0&&E)&&d.slides.forEach((I,V)=>{d.grid.updateSlide(V,I,d.slides)}),f.watchSlidesProgress&&d.updateSlidesOffset(),t){if(_.length>0&&P){if(typeof e>"u"){const I=d.slidesGrid[N],q=d.slidesGrid[N+L]-I;c?d.setTranslate(d.translate-q):(d.slideTo(N+Math.ceil(L),0,!1,!0),r&&(d.touchEventsData.startTranslate=d.touchEventsData.startTranslate-q,d.touchEventsData.currentTranslate=d.touchEventsData.currentTranslate-q))}else if(r){const I=w?_.length/f.grid.rows:_.length;d.slideTo(d.activeIndex+I,0,!1,!0),d.touchEventsData.currentTranslate=d.translate}}else if(M.length>0&&E)if(typeof e>"u"){const I=d.slidesGrid[N],q=d.slidesGrid[N-O]-I;c?d.setTranslate(d.translate-q):(d.slideTo(N-O,0,!1,!0),r&&(d.touchEventsData.startTranslate=d.touchEventsData.startTranslate-q,d.touchEventsData.currentTranslate=d.touchEventsData.currentTranslate-q))}else{const I=w?M.length/f.grid.rows:M.length;d.slideTo(d.activeIndex-I,0,!1,!0)}}if(d.allowSlidePrev=u,d.allowSlideNext=m,d.controller&&d.controller.control&&!o){const I={slideRealIndex:e,direction:i,setTranslate:r,activeSlideIndex:a,byController:!0};Array.isArray(d.controller.control)?d.controller.control.forEach(V=>{!V.destroyed&&V.params.loop&&V.loopFix({...I,slideTo:V.params.slidesPerView===f.slidesPerView?t:!1})}):d.controller.control instanceof d.constructor&&d.controller.control.params.loop&&d.controller.control.loopFix({...I,slideTo:d.controller.control.params.slidesPerView===f.slidesPerView?t:!1})}d.emit("loopFix")}function $a(){const n=this,{params:e,slidesEl:t}=n;if(!e.loop||!t||n.virtual&&n.params.virtual.enabled)return;n.recalcSlides();const i=[];n.slides.forEach(r=>{const a=typeof r.swiperSlideIndex>"u"?r.getAttribute("data-swiper-slide-index")*1:r.swiperSlideIndex;i[a]=r}),n.slides.forEach(r=>{r.removeAttribute("data-swiper-slide-index")}),i.forEach(r=>{t.append(r)}),n.recalcSlides(),n.slideTo(n.realIndex,0)}var Ga={loopCreate:Ba,loopFix:Ha,loopDestroy:$a};function Va(n){const e=this;if(!e.params.simulateTouch||e.params.watchOverflow&&e.isLocked||e.params.cssMode)return;const t=e.params.touchEventsTarget==="container"?e.el:e.wrapperEl;e.isElement&&(e.__preventObserver__=!0),t.style.cursor="move",t.style.cursor=n?"grabbing":"grab",e.isElement&&requestAnimationFrame(()=>{e.__preventObserver__=!1})}function Wa(){const n=this;n.params.watchOverflow&&n.isLocked||n.params.cssMode||(n.isElement&&(n.__preventObserver__=!0),n[n.params.touchEventsTarget==="container"?"el":"wrapperEl"].style.cursor="",n.isElement&&requestAnimationFrame(()=>{n.__preventObserver__=!1}))}var Xa={setGrabCursor:Va,unsetGrabCursor:Wa};function qa(n,e){e===void 0&&(e=this);function t(i){if(!i||i===Ee()||i===J())return null;i.assignedSlot&&(i=i.assignedSlot);const r=i.closest(n);return!r&&!i.getRootNode?null:r||t(i.getRootNode().host)}return t(e)}function gn(n,e,t){const i=J(),{params:r}=n,a=r.edgeSwipeDetection,l=r.edgeSwipeThreshold;return a&&(t<=l||t>=i.innerWidth-l)?a==="prevent"?(e.preventDefault(),!0):!1:!0}function Ya(n){const e=this,t=Ee();let i=n;i.originalEvent&&(i=i.originalEvent);const r=e.touchEventsData;if(i.type==="pointerdown"){if(r.pointerId!==null&&r.pointerId!==i.pointerId)return;r.pointerId=i.pointerId}else i.type==="touchstart"&&i.targetTouches.length===1&&(r.touchId=i.targetTouches[0].identifier);if(i.type==="touchstart"){gn(e,i,i.targetTouches[0].pageX);return}const{params:a,touches:l,enabled:o}=e;if(!o||!a.simulateTouch&&i.pointerType==="mouse"||e.animating&&a.preventInteractionOnTransition)return;!e.animating&&a.cssMode&&a.loop&&e.loopFix();let c=i.target;if(a.touchEventsTarget==="wrapper"&&!ta(c,e.wrapperEl)||"which"in i&&i.which===3||"button"in i&&i.button>0||r.isTouched&&r.isMoved)return;const d=!!a.noSwipingClass&&a.noSwipingClass!=="",h=i.composedPath?i.composedPath():i.path;d&&i.target&&i.target.shadowRoot&&h&&(c=h[0]);const u=a.noSwipingSelector?a.noSwipingSelector:`.${a.noSwipingClass}`,m=!!(i.target&&i.target.shadowRoot);if(a.noSwiping&&(m?qa(u,c):c.closest(u))){e.allowClick=!0;return}if(a.swipeHandler&&!c.closest(a.swipeHandler))return;l.currentX=i.pageX,l.currentY=i.pageY;const p=l.currentX,f=l.currentY;if(!gn(e,i,p))return;Object.assign(r,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),l.startX=p,l.startY=f,r.touchStartTime=De(),e.allowClick=!0,e.updateSize(),e.swipeDirection=void 0,a.threshold>0&&(r.allowThresholdMove=!1);let v=!0;c.matches(r.focusableElements)&&(v=!1,c.nodeName==="SELECT"&&(r.isTouched=!1)),t.activeElement&&t.activeElement.matches(r.focusableElements)&&t.activeElement!==c&&(i.pointerType==="mouse"||i.pointerType!=="mouse"&&!c.matches(r.focusableElements))&&t.activeElement.blur();const b=v&&e.allowTouchMove&&a.touchStartPreventDefault;(a.touchStartForcePreventDefault||b)&&!c.isContentEditable&&i.preventDefault(),a.freeMode&&a.freeMode.enabled&&e.freeMode&&e.animating&&!a.cssMode&&e.freeMode.onTouchStart(),e.emit("touchStart",i)}function Ua(n){const e=Ee(),t=this,i=t.touchEventsData,{params:r,touches:a,rtlTranslate:l,enabled:o}=t;if(!o||!r.simulateTouch&&n.pointerType==="mouse")return;let c=n;if(c.originalEvent&&(c=c.originalEvent),c.type==="pointermove"&&(i.touchId!==null||c.pointerId!==i.pointerId))return;let d;if(c.type==="touchmove"){if(d=[...c.changedTouches].find(_=>_.identifier===i.touchId),!d||d.identifier!==i.touchId)return}else d=c;if(!i.isTouched){i.startMoving&&i.isScrolling&&t.emit("touchMoveOpposite",c);return}const h=d.pageX,u=d.pageY;if(c.preventedByNestedSwiper){a.startX=h,a.startY=u;return}if(!t.allowTouchMove){c.target.matches(i.focusableElements)||(t.allowClick=!1),i.isTouched&&(Object.assign(a,{startX:h,startY:u,currentX:h,currentY:u}),i.touchStartTime=De());return}if(r.touchReleaseOnEdges&&!r.loop)if(t.isVertical()){if(ua.startY&&t.translate>=t.minTranslate()){i.isTouched=!1,i.isMoved=!1;return}}else{if(l&&(h>a.startX&&-t.translate<=t.maxTranslate()||h=t.minTranslate()))return;if(!l&&(ha.startX&&t.translate>=t.minTranslate()))return}if(e.activeElement&&e.activeElement.matches(i.focusableElements)&&e.activeElement!==c.target&&c.pointerType!=="mouse"&&e.activeElement.blur(),e.activeElement&&c.target===e.activeElement&&c.target.matches(i.focusableElements)){i.isMoved=!0,t.allowClick=!1;return}i.allowTouchCallbacks&&t.emit("touchMove",c),a.previousX=a.currentX,a.previousY=a.currentY,a.currentX=h,a.currentY=u;const m=a.currentX-a.startX,p=a.currentY-a.startY;if(t.params.threshold&&Math.sqrt(m**2+p**2)"u"){let _;t.isHorizontal()&&a.currentY===a.startY||t.isVertical()&&a.currentX===a.startX?i.isScrolling=!1:m*m+p*p>=25&&(_=Math.atan2(Math.abs(p),Math.abs(m))*180/Math.PI,i.isScrolling=t.isHorizontal()?_>r.touchAngle:90-_>r.touchAngle)}if(i.isScrolling&&t.emit("touchMoveOpposite",c),typeof i.startMoving>"u"&&(a.currentX!==a.startX||a.currentY!==a.startY)&&(i.startMoving=!0),i.isScrolling||c.type==="touchmove"&&i.preventTouchMoveFromPointerMove){i.isTouched=!1;return}if(!i.startMoving)return;t.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation();let f=t.isHorizontal()?m:p,v=t.isHorizontal()?a.currentX-a.previousX:a.currentY-a.previousY;r.oneWayMovement&&(f=Math.abs(f)*(l?1:-1),v=Math.abs(v)*(l?1:-1)),a.diff=f,f*=r.touchRatio,l&&(f=-f,v=-v);const b=t.touchesDirection;t.swipeDirection=f>0?"prev":"next",t.touchesDirection=v>0?"prev":"next";const g=t.params.loop&&!r.cssMode,x=t.touchesDirection==="next"&&t.allowSlideNext||t.touchesDirection==="prev"&&t.allowSlidePrev;if(!i.isMoved){if(g&&x&&t.loopFix({direction:t.swipeDirection}),i.startTranslate=t.getTranslate(),t.setTransition(0),t.animating){const _=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});t.wrapperEl.dispatchEvent(_)}i.allowMomentumBounce=!1,r.grabCursor&&(t.allowSlideNext===!0||t.allowSlidePrev===!0)&&t.setGrabCursor(!0),t.emit("sliderFirstMove",c)}if(new Date().getTime(),r._loopSwapReset!==!1&&i.isMoved&&i.allowThresholdMove&&b!==t.touchesDirection&&g&&x&&Math.abs(f)>=1){Object.assign(a,{startX:h,startY:u,currentX:h,currentY:u,startTranslate:i.currentTranslate}),i.loopSwapReset=!0,i.startTranslate=i.currentTranslate;return}t.emit("sliderMove",c),i.isMoved=!0,i.currentTranslate=f+i.startTranslate;let y=!0,w=r.resistanceRatio;if(r.touchReleaseOnEdges&&(w=0),f>0?(g&&x&&i.allowThresholdMove&&i.currentTranslate>(r.centeredSlides?t.minTranslate()-t.slidesSizesGrid[t.activeIndex+1]-(r.slidesPerView!=="auto"&&t.slides.length-r.slidesPerView>=2?t.slidesSizesGrid[t.activeIndex+1]+t.params.spaceBetween:0)-t.params.spaceBetween:t.minTranslate())&&t.loopFix({direction:"prev",setTranslate:!0,activeSlideIndex:0}),i.currentTranslate>t.minTranslate()&&(y=!1,r.resistance&&(i.currentTranslate=t.minTranslate()-1+(-t.minTranslate()+i.startTranslate+f)**w))):f<0&&(g&&x&&i.allowThresholdMove&&i.currentTranslate<(r.centeredSlides?t.maxTranslate()+t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween+(r.slidesPerView!=="auto"&&t.slides.length-r.slidesPerView>=2?t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween:0):t.maxTranslate())&&t.loopFix({direction:"next",setTranslate:!0,activeSlideIndex:t.slides.length-(r.slidesPerView==="auto"?t.slidesPerViewDynamic():Math.ceil(parseFloat(r.slidesPerView,10)))}),i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),!t.allowSlidePrev&&!t.allowSlideNext&&(i.currentTranslate=i.startTranslate),r.threshold>0)if(Math.abs(f)>r.threshold||i.allowThresholdMove){if(!i.allowThresholdMove){i.allowThresholdMove=!0,a.startX=a.currentX,a.startY=a.currentY,i.currentTranslate=i.startTranslate,a.diff=t.isHorizontal()?a.currentX-a.startX:a.currentY-a.startY;return}}else{i.currentTranslate=i.startTranslate;return}!r.followFinger||r.cssMode||((r.freeMode&&r.freeMode.enabled&&t.freeMode||r.watchSlidesProgress)&&(t.updateActiveIndex(),t.updateSlidesClasses()),r.freeMode&&r.freeMode.enabled&&t.freeMode&&t.freeMode.onTouchMove(),t.updateProgress(i.currentTranslate),t.setTranslate(i.currentTranslate))}function Za(n){const e=this,t=e.touchEventsData;let i=n;i.originalEvent&&(i=i.originalEvent);let r;if(i.type==="touchend"||i.type==="touchcancel"){if(r=[...i.changedTouches].find(_=>_.identifier===t.touchId),!r||r.identifier!==t.touchId)return}else{if(t.touchId!==null||i.pointerId!==t.pointerId)return;r=i}if(["pointercancel","pointerout","pointerleave","contextmenu"].includes(i.type)&&!(["pointercancel","contextmenu"].includes(i.type)&&(e.browser.isSafari||e.browser.isWebView)))return;t.pointerId=null,t.touchId=null;const{params:l,touches:o,rtlTranslate:c,slidesGrid:d,enabled:h}=e;if(!h||!l.simulateTouch&&i.pointerType==="mouse")return;if(t.allowTouchCallbacks&&e.emit("touchEnd",i),t.allowTouchCallbacks=!1,!t.isTouched){t.isMoved&&l.grabCursor&&e.setGrabCursor(!1),t.isMoved=!1,t.startMoving=!1;return}l.grabCursor&&t.isMoved&&t.isTouched&&(e.allowSlideNext===!0||e.allowSlidePrev===!0)&&e.setGrabCursor(!1);const u=De(),m=u-t.touchStartTime;if(e.allowClick){const _=i.path||i.composedPath&&i.composedPath();e.updateClickedSlide(_&&_[0]||i.target,_),e.emit("tap click",i),m<300&&u-t.lastClickTime<300&&e.emit("doubleTap doubleClick",i)}if(t.lastClickTime=De(),Ti(()=>{e.destroyed||(e.allowClick=!0)}),!t.isTouched||!t.isMoved||!e.swipeDirection||o.diff===0&&!t.loopSwapReset||t.currentTranslate===t.startTranslate&&!t.loopSwapReset){t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;return}t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;let p;if(l.followFinger?p=c?e.translate:-e.translate:p=-t.currentTranslate,l.cssMode)return;if(l.freeMode&&l.freeMode.enabled){e.freeMode.onTouchEnd({currentPos:p});return}const f=p>=-e.maxTranslate()&&!e.params.loop;let v=0,b=e.slidesSizesGrid[0];for(let _=0;_=d[_]&&p=d[_])&&(v=_,b=d[d.length-1]-d[d.length-2])}let g=null,x=null;l.rewind&&(e.isBeginning?x=l.virtual&&l.virtual.enabled&&e.virtual?e.virtual.slides.length-1:e.slides.length-1:e.isEnd&&(g=0));const y=(p-d[v])/b,w=vl.longSwipesMs){if(!l.longSwipes){e.slideTo(e.activeIndex);return}e.swipeDirection==="next"&&(y>=l.longSwipesRatio?e.slideTo(l.rewind&&e.isEnd?g:v+w):e.slideTo(v)),e.swipeDirection==="prev"&&(y>1-l.longSwipesRatio?e.slideTo(v+w):x!==null&&y<0&&Math.abs(y)>l.longSwipesRatio?e.slideTo(x):e.slideTo(v))}else{if(!l.shortSwipes){e.slideTo(e.activeIndex);return}e.navigation&&(i.target===e.navigation.nextEl||i.target===e.navigation.prevEl)?i.target===e.navigation.nextEl?e.slideTo(v+w):e.slideTo(v):(e.swipeDirection==="next"&&e.slideTo(g!==null?g:v+w),e.swipeDirection==="prev"&&e.slideTo(x!==null?x:v))}}function vn(){const n=this,{params:e,el:t}=n;if(t&&t.offsetWidth===0)return;e.breakpoints&&n.setBreakpoint();const{allowSlideNext:i,allowSlidePrev:r,snapGrid:a}=n,l=n.virtual&&n.params.virtual.enabled;n.allowSlideNext=!0,n.allowSlidePrev=!0,n.updateSize(),n.updateSlides(),n.updateSlidesClasses();const o=l&&e.loop;(e.slidesPerView==="auto"||e.slidesPerView>1)&&n.isEnd&&!n.isBeginning&&!n.params.centeredSlides&&!o?n.slideTo(n.slides.length-1,0,!1,!0):n.params.loop&&!l?n.slideToLoop(n.realIndex,0,!1,!0):n.slideTo(n.activeIndex,0,!1,!0),n.autoplay&&n.autoplay.running&&n.autoplay.paused&&(clearTimeout(n.autoplay.resizeTimeout),n.autoplay.resizeTimeout=setTimeout(()=>{n.autoplay&&n.autoplay.running&&n.autoplay.paused&&n.autoplay.resume()},500)),n.allowSlidePrev=r,n.allowSlideNext=i,n.params.watchOverflow&&a!==n.snapGrid&&n.checkOverflow()}function Ka(n){const e=this;e.enabled&&(e.allowClick||(e.params.preventClicks&&n.preventDefault(),e.params.preventClicksPropagation&&e.animating&&(n.stopPropagation(),n.stopImmediatePropagation())))}function Ja(){const n=this,{wrapperEl:e,rtlTranslate:t,enabled:i}=n;if(!i)return;n.previousTranslate=n.translate,n.isHorizontal()?n.translate=-e.scrollLeft:n.translate=-e.scrollTop,n.translate===0&&(n.translate=0),n.updateActiveIndex(),n.updateSlidesClasses();let r;const a=n.maxTranslate()-n.minTranslate();a===0?r=0:r=(n.translate-n.minTranslate())/a,r!==n.progress&&n.updateProgress(t?-n.translate:n.translate),n.emit("setTranslate",n.translate,!1)}function Qa(n){const e=this;Dt(e,n.target),!(e.params.cssMode||e.params.slidesPerView!=="auto"&&!e.params.autoHeight)&&e.update()}function el(){const n=this;n.documentTouchHandlerProceeded||(n.documentTouchHandlerProceeded=!0,n.params.touchReleaseOnEdges&&(n.el.style.touchAction="auto"))}const Ls=(n,e)=>{const t=Ee(),{params:i,el:r,wrapperEl:a,device:l}=n,o=!!i.nested,c=e==="on"?"addEventListener":"removeEventListener",d=e;!r||typeof r=="string"||(t[c]("touchstart",n.onDocumentTouchStart,{passive:!1,capture:o}),r[c]("touchstart",n.onTouchStart,{passive:!1}),r[c]("pointerdown",n.onTouchStart,{passive:!1}),t[c]("touchmove",n.onTouchMove,{passive:!1,capture:o}),t[c]("pointermove",n.onTouchMove,{passive:!1,capture:o}),t[c]("touchend",n.onTouchEnd,{passive:!0}),t[c]("pointerup",n.onTouchEnd,{passive:!0}),t[c]("pointercancel",n.onTouchEnd,{passive:!0}),t[c]("touchcancel",n.onTouchEnd,{passive:!0}),t[c]("pointerout",n.onTouchEnd,{passive:!0}),t[c]("pointerleave",n.onTouchEnd,{passive:!0}),t[c]("contextmenu",n.onTouchEnd,{passive:!0}),(i.preventClicks||i.preventClicksPropagation)&&r[c]("click",n.onClick,!0),i.cssMode&&a[c]("scroll",n.onScroll),i.updateOnWindowResize?n[d](l.ios||l.android?"resize orientationchange observerUpdate":"resize observerUpdate",vn,!0):n[d]("observerUpdate",vn,!0),r[c]("load",n.onLoad,{capture:!0}))};function tl(){const n=this,{params:e}=n;n.onTouchStart=Ya.bind(n),n.onTouchMove=Ua.bind(n),n.onTouchEnd=Za.bind(n),n.onDocumentTouchStart=el.bind(n),e.cssMode&&(n.onScroll=Ja.bind(n)),n.onClick=Ka.bind(n),n.onLoad=Qa.bind(n),Ls(n,"on")}function il(){Ls(this,"off")}var nl={attachEvents:tl,detachEvents:il};const bn=(n,e)=>n.grid&&e.grid&&e.grid.rows>1;function sl(){const n=this,{realIndex:e,initialized:t,params:i,el:r}=n,a=i.breakpoints;if(!a||a&&Object.keys(a).length===0)return;const l=Ee(),o=i.breakpointsBase==="window"||!i.breakpointsBase?i.breakpointsBase:"container",c=["window","container"].includes(i.breakpointsBase)||!i.breakpointsBase?n.el:l.querySelector(i.breakpointsBase),d=n.getBreakpoint(a,o,c);if(!d||n.currentBreakpoint===d)return;const u=(d in a?a[d]:void 0)||n.originalParams,m=bn(n,i),p=bn(n,u),f=n.params.grabCursor,v=u.grabCursor,b=i.enabled;m&&!p?(r.classList.remove(`${i.containerModifierClass}grid`,`${i.containerModifierClass}grid-column`),n.emitContainerClasses()):!m&&p&&(r.classList.add(`${i.containerModifierClass}grid`),(u.grid.fill&&u.grid.fill==="column"||!u.grid.fill&&i.grid.fill==="column")&&r.classList.add(`${i.containerModifierClass}grid-column`),n.emitContainerClasses()),f&&!v?n.unsetGrabCursor():!f&&v&&n.setGrabCursor(),["navigation","pagination","scrollbar"].forEach(M=>{if(typeof u[M]>"u")return;const C=i[M]&&i[M].enabled,S=u[M]&&u[M].enabled;C&&!S&&n[M].disable(),!C&&S&&n[M].enable()});const g=u.direction&&u.direction!==i.direction,x=i.loop&&(u.slidesPerView!==i.slidesPerView||g),y=i.loop;g&&t&&n.changeDirection(),ie(n.params,u);const w=n.params.enabled,_=n.params.loop;Object.assign(n,{allowTouchMove:n.params.allowTouchMove,allowSlideNext:n.params.allowSlideNext,allowSlidePrev:n.params.allowSlidePrev}),b&&!w?n.disable():!b&&w&&n.enable(),n.currentBreakpoint=d,n.emit("_beforeBreakpoint",u),t&&(x?(n.loopDestroy(),n.loopCreate(e),n.updateSlides()):!y&&_?(n.loopCreate(e),n.updateSlides()):y&&!_&&n.loopDestroy()),n.emit("breakpoint",u)}function rl(n,e,t){if(e===void 0&&(e="window"),!n||e==="container"&&!t)return;let i=!1;const r=J(),a=e==="window"?r.innerHeight:t.clientHeight,l=Object.keys(n).map(o=>{if(typeof o=="string"&&o.indexOf("@")===0){const c=parseFloat(o.substr(1));return{value:a*c,point:o}}return{value:o,point:o}});l.sort((o,c)=>parseInt(o.value,10)-parseInt(c.value,10));for(let o=0;o{typeof i=="object"?Object.keys(i).forEach(r=>{i[r]&&t.push(e+r)}):typeof i=="string"&&t.push(e+i)}),t}function ol(){const n=this,{classNames:e,params:t,rtl:i,el:r,device:a}=n,l=ll(["initialized",t.direction,{"free-mode":n.params.freeMode&&t.freeMode.enabled},{autoheight:t.autoHeight},{rtl:i},{grid:t.grid&&t.grid.rows>1},{"grid-column":t.grid&&t.grid.rows>1&&t.grid.fill==="column"},{android:a.android},{ios:a.ios},{"css-mode":t.cssMode},{centered:t.cssMode&&t.centeredSlides},{"watch-progress":t.watchSlidesProgress}],t.containerModifierClass);e.push(...l),r.classList.add(...e),n.emitContainerClasses()}function cl(){const n=this,{el:e,classNames:t}=n;!e||typeof e=="string"||(e.classList.remove(...t),n.emitContainerClasses())}var dl={addClasses:ol,removeClasses:cl};function hl(){const n=this,{isLocked:e,params:t}=n,{slidesOffsetBefore:i}=t;if(i){const r=n.slides.length-1,a=n.slidesGrid[r]+n.slidesSizesGrid[r]+i*2;n.isLocked=n.size>a}else n.isLocked=n.snapGrid.length===1;t.allowSlideNext===!0&&(n.allowSlideNext=!n.isLocked),t.allowSlidePrev===!0&&(n.allowSlidePrev=!n.isLocked),e&&e!==n.isLocked&&(n.isEnd=!1),e!==n.isLocked&&n.emit(n.isLocked?"lock":"unlock")}var ul={checkOverflow:hl},Ci={init:!0,direction:"horizontal",oneWayMovement:!1,swiperElementNodeName:"SWIPER-CONTAINER",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:"swiper",enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-blank",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideFullyVisibleClass:"swiper-slide-fully-visible",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",lazyPreloaderClass:"swiper-lazy-preloader",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function pl(n,e){return function(i){i===void 0&&(i={});const r=Object.keys(i)[0],a=i[r];if(typeof a!="object"||a===null){ie(e,i);return}if(n[r]===!0&&(n[r]={enabled:!0}),r==="navigation"&&n[r]&&n[r].enabled&&!n[r].prevEl&&!n[r].nextEl&&(n[r].auto=!0),["pagination","scrollbar"].indexOf(r)>=0&&n[r]&&n[r].enabled&&!n[r].el&&(n[r].auto=!0),!(r in n&&"enabled"in a)){ie(e,i);return}typeof n[r]=="object"&&!("enabled"in n[r])&&(n[r].enabled=!0),n[r]||(n[r]={enabled:!1}),ie(e,i)}}const ei={eventsEmitter:da,update:wa,translate:Ca,transition:La,slide:Fa,loop:Ga,grabCursor:Xa,events:nl,breakpoints:al,checkOverflow:ul,classes:dl},ti={};let Fi=class ye{constructor(){let e,t;for(var i=arguments.length,r=new Array(i),a=0;a1){const h=[];return l.querySelectorAll(t.el).forEach(u=>{const m=ie({},t,{el:u});h.push(new ye(m))}),h}const o=this;o.__swiper__=!0,o.support=Cs(),o.device=Ps({userAgent:t.userAgent}),o.browser=Ms(),o.eventsListeners={},o.eventsAnyListeners=[],o.modules=[...o.__modules__],t.modules&&Array.isArray(t.modules)&&o.modules.push(...t.modules);const c={};o.modules.forEach(h=>{h({params:t,swiper:o,extendParams:pl(t,c),on:o.on.bind(o),once:o.once.bind(o),off:o.off.bind(o),emit:o.emit.bind(o)})});const d=ie({},Ci,c);return o.params=ie({},d,ti,t),o.originalParams=ie({},o.params),o.passedParams=ie({},t),o.params&&o.params.on&&Object.keys(o.params.on).forEach(h=>{o.on(h,o.params.on[h])}),o.params&&o.params.onAny&&o.onAny(o.params.onAny),Object.assign(o,{enabled:o.params.enabled,el:e,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return o.params.direction==="horizontal"},isVertical(){return o.params.direction==="vertical"},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate/2**23)*2**23},allowSlideNext:o.params.allowSlideNext,allowSlidePrev:o.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:o.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:o.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),o.emit("_swiper"),o.params.init&&o.init(),o}getDirectionLabel(e){return this.isHorizontal()?e:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[e]}getSlideIndex(e){const{slidesEl:t,params:i}=this,r=ce(t,`.${i.slideClass}, swiper-slide`),a=pn(r[0]);return pn(e)-a}getSlideIndexByData(e){return this.getSlideIndex(this.slides.find(t=>t.getAttribute("data-swiper-slide-index")*1===e))}recalcSlides(){const e=this,{slidesEl:t,params:i}=e;e.slides=ce(t,`.${i.slideClass}, swiper-slide`)}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const i=this;e=Math.min(Math.max(e,0),1);const r=i.minTranslate(),l=(i.maxTranslate()-r)*e+r;i.translateTo(l,typeof t>"u"?0:t),i.updateActiveIndex(),i.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter(i=>i.indexOf("swiper")===0||i.indexOf(e.params.containerModifierClass)===0);e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter(i=>i.indexOf("swiper-slide")===0||i.indexOf(t.params.slideClass)===0).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.forEach(i=>{const r=e.getSlideClasses(i);t.push({slideEl:i,classNames:r}),e.emit("_slideClass",i,r)}),e.emit("_slideClasses",t)}slidesPerViewDynamic(e,t){e===void 0&&(e="current"),t===void 0&&(t=!1);const i=this,{params:r,slides:a,slidesGrid:l,slidesSizesGrid:o,size:c,activeIndex:d}=i;let h=1;if(typeof r.slidesPerView=="number")return r.slidesPerView;if(r.centeredSlides){let u=a[d]?Math.ceil(a[d].swiperSlideSize):0,m;for(let p=d+1;pc&&(m=!0));for(let p=d-1;p>=0;p-=1)a[p]&&!m&&(u+=a[p].swiperSlideSize,h+=1,u>c&&(m=!0))}else if(e==="current")for(let u=d+1;u=0;u-=1)l[d]-l[u]{l.complete&&Dt(e,l)}),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses();function r(){const l=e.rtlTranslate?e.translate*-1:e.translate,o=Math.min(Math.max(l,e.maxTranslate()),e.minTranslate());e.setTranslate(o),e.updateActiveIndex(),e.updateSlidesClasses()}let a;if(i.freeMode&&i.freeMode.enabled&&!i.cssMode)r(),i.autoHeight&&e.updateAutoHeight();else{if((i.slidesPerView==="auto"||i.slidesPerView>1)&&e.isEnd&&!i.centeredSlides){const l=e.virtual&&i.virtual.enabled?e.virtual.slides:e.slides;a=e.slideTo(l.length-1,0,!1,!0)}else a=e.slideTo(e.activeIndex,0,!1,!0);a||r()}i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t){t===void 0&&(t=!0);const i=this,r=i.params.direction;return e||(e=r==="horizontal"?"vertical":"horizontal"),e===r||e!=="horizontal"&&e!=="vertical"||(i.el.classList.remove(`${i.params.containerModifierClass}${r}`),i.el.classList.add(`${i.params.containerModifierClass}${e}`),i.emitContainerClasses(),i.params.direction=e,i.slides.forEach(a=>{e==="vertical"?a.style.width="":a.style.height=""}),i.emit("changeDirection"),t&&i.update()),i}changeLanguageDirection(e){const t=this;t.rtl&&e==="rtl"||!t.rtl&&e==="ltr"||(t.rtl=e==="rtl",t.rtlTranslate=t.params.direction==="horizontal"&&t.rtl,t.rtl?(t.el.classList.add(`${t.params.containerModifierClass}rtl`),t.el.dir="rtl"):(t.el.classList.remove(`${t.params.containerModifierClass}rtl`),t.el.dir="ltr"),t.update())}mount(e){const t=this;if(t.mounted)return!0;let i=e||t.params.el;if(typeof i=="string"&&(i=document.querySelector(i)),!i)return!1;i.swiper=t,i.parentNode&&i.parentNode.host&&i.parentNode.host.nodeName===t.params.swiperElementNodeName.toUpperCase()&&(t.isElement=!0);const r=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let l=i&&i.shadowRoot&&i.shadowRoot.querySelector?i.shadowRoot.querySelector(r()):ce(i,r())[0];return!l&&t.params.createElements&&(l=jt("div",t.params.wrapperClass),i.append(l),ce(i,`.${t.params.slideClass}`).forEach(o=>{l.append(o)})),Object.assign(t,{el:i,wrapperEl:l,slidesEl:t.isElement&&!i.parentNode.host.slideSlots?i.parentNode.host:l,hostEl:t.isElement?i.parentNode.host:i,mounted:!0,rtl:i.dir.toLowerCase()==="rtl"||_e(i,"direction")==="rtl",rtlTranslate:t.params.direction==="horizontal"&&(i.dir.toLowerCase()==="rtl"||_e(i,"direction")==="rtl"),wrongRTL:_e(l,"display")==="-webkit-box"}),!0}init(e){const t=this;if(t.initialized||t.mount(e)===!1)return t;t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.loop&&t.virtual&&t.params.virtual.enabled?t.slideTo(t.params.initialSlide+t.virtual.slidesBefore,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.params.loop&&t.loopCreate(void 0,!0),t.attachEvents();const r=[...t.el.querySelectorAll('[loading="lazy"]')];return t.isElement&&r.push(...t.hostEl.querySelectorAll('[loading="lazy"]')),r.forEach(a=>{a.complete?Dt(t,a):a.addEventListener("load",l=>{Dt(t,l.target)})}),Ei(t),t.initialized=!0,Ei(t),t.emit("init"),t.emit("afterInit"),t}destroy(e,t){e===void 0&&(e=!0),t===void 0&&(t=!0);const i=this,{params:r,el:a,wrapperEl:l,slides:o}=i;return typeof i.params>"u"||i.destroyed||(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),r.loop&&i.loopDestroy(),t&&(i.removeClasses(),a&&typeof a!="string"&&a.removeAttribute("style"),l&&l.removeAttribute("style"),o&&o.length&&o.forEach(c=>{c.classList.remove(r.slideVisibleClass,r.slideFullyVisibleClass,r.slideActiveClass,r.slideNextClass,r.slidePrevClass),c.removeAttribute("style"),c.removeAttribute("data-swiper-slide-index")})),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(c=>{i.off(c)}),e!==!1&&(i.el&&typeof i.el!="string"&&(i.el.swiper=null),Zr(i)),i.destroyed=!0),null}static extendDefaults(e){ie(ti,e)}static get extendedDefaults(){return ti}static get defaults(){return Ci}static installModule(e){ye.prototype.__modules__||(ye.prototype.__modules__=[]);const t=ye.prototype.__modules__;typeof e=="function"&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach(t=>ye.installModule(t)),ye):(ye.installModule(e),ye)}};Object.keys(ei).forEach(n=>{Object.keys(ei[n]).forEach(e=>{Fi.prototype[e]=ei[n][e]})});Fi.use([oa,ca]);const As=["eventsPrefix","injectStyles","injectStylesUrls","modules","init","_direction","oneWayMovement","swiperElementNodeName","touchEventsTarget","initialSlide","_speed","cssMode","updateOnWindowResize","resizeObserver","nested","focusableElements","_enabled","_width","_height","preventInteractionOnTransition","userAgent","url","_edgeSwipeDetection","_edgeSwipeThreshold","_freeMode","_autoHeight","setWrapperSize","virtualTranslate","_effect","breakpoints","breakpointsBase","_spaceBetween","_slidesPerView","maxBackfaceHiddenSlides","_grid","_slidesPerGroup","_slidesPerGroupSkip","_slidesPerGroupAuto","_centeredSlides","_centeredSlidesBounds","_slidesOffsetBefore","_slidesOffsetAfter","normalizeSlideIndex","_centerInsufficientSlides","_watchOverflow","roundLengths","touchRatio","touchAngle","simulateTouch","_shortSwipes","_longSwipes","longSwipesRatio","longSwipesMs","_followFinger","allowTouchMove","_threshold","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","_resistance","_resistanceRatio","_watchSlidesProgress","_grabCursor","preventClicks","preventClicksPropagation","_slideToClickedSlide","_loop","loopAdditionalSlides","loopAddBlankSlides","loopPreventsSliding","_rewind","_allowSlidePrev","_allowSlideNext","_swipeHandler","_noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","containerModifierClass","slideClass","slideActiveClass","slideVisibleClass","slideFullyVisibleClass","slideNextClass","slidePrevClass","slideBlankClass","wrapperClass","lazyPreloaderClass","lazyPreloadPrevNext","runCallbacksOnInit","observer","observeParents","observeSlideChildren","a11y","_autoplay","_controller","coverflowEffect","cubeEffect","fadeEffect","flipEffect","creativeEffect","cardsEffect","hashNavigation","history","keyboard","mousewheel","_navigation","_pagination","parallax","_scrollbar","_thumbs","virtual","zoom","control"];function je(n){return typeof n=="object"&&n!==null&&n.constructor&&Object.prototype.toString.call(n).slice(8,-1)==="Object"&&!n.__swiper__}function Ue(n,e){const t=["__proto__","constructor","prototype"];Object.keys(e).filter(i=>t.indexOf(i)<0).forEach(i=>{typeof n[i]>"u"?n[i]=e[i]:je(e[i])&&je(n[i])&&Object.keys(e[i]).length>0?e[i].__swiper__?n[i]=e[i]:Ue(n[i],e[i]):n[i]=e[i]})}function Os(n){return n===void 0&&(n={}),n.navigation&&typeof n.navigation.nextEl>"u"&&typeof n.navigation.prevEl>"u"}function Is(n){return n===void 0&&(n={}),n.pagination&&typeof n.pagination.el>"u"}function Ds(n){return n===void 0&&(n={}),n.scrollbar&&typeof n.scrollbar.el>"u"}function zs(n){n===void 0&&(n="");const e=n.split(" ").map(i=>i.trim()).filter(i=>!!i),t=[];return e.forEach(i=>{t.indexOf(i)<0&&t.push(i)}),t.join(" ")}function ml(n){return n===void 0&&(n=""),n?n.includes("swiper-wrapper")?n:`swiper-wrapper ${n}`:"swiper-wrapper"}function fl(n){let{swiper:e,slides:t,passedParams:i,changedParams:r,nextEl:a,prevEl:l,scrollbarEl:o,paginationEl:c}=n;const d=r.filter(N=>N!=="children"&&N!=="direction"&&N!=="wrapperClass"),{params:h,pagination:u,navigation:m,scrollbar:p,virtual:f,thumbs:v}=e;let b,g,x,y,w,_,M,C;r.includes("thumbs")&&i.thumbs&&i.thumbs.swiper&&!i.thumbs.swiper.destroyed&&h.thumbs&&(!h.thumbs.swiper||h.thumbs.swiper.destroyed)&&(b=!0),r.includes("controller")&&i.controller&&i.controller.control&&h.controller&&!h.controller.control&&(g=!0),r.includes("pagination")&&i.pagination&&(i.pagination.el||c)&&(h.pagination||h.pagination===!1)&&u&&!u.el&&(x=!0),r.includes("scrollbar")&&i.scrollbar&&(i.scrollbar.el||o)&&(h.scrollbar||h.scrollbar===!1)&&p&&!p.el&&(y=!0),r.includes("navigation")&&i.navigation&&(i.navigation.prevEl||l)&&(i.navigation.nextEl||a)&&(h.navigation||h.navigation===!1)&&m&&!m.prevEl&&!m.nextEl&&(w=!0);const S=N=>{e[N]&&(e[N].destroy(),N==="navigation"?(e.isElement&&(e[N].prevEl.remove(),e[N].nextEl.remove()),h[N].prevEl=void 0,h[N].nextEl=void 0,e[N].prevEl=void 0,e[N].nextEl=void 0):(e.isElement&&e[N].el.remove(),h[N].el=void 0,e[N].el=void 0))};r.includes("loop")&&e.isElement&&(h.loop&&!i.loop?_=!0:!h.loop&&i.loop?M=!0:C=!0),d.forEach(N=>{if(je(h[N])&&je(i[N]))Object.assign(h[N],i[N]),(N==="navigation"||N==="pagination"||N==="scrollbar")&&"enabled"in i[N]&&!i[N].enabled&&S(N);else{const E=i[N];(E===!0||E===!1)&&(N==="navigation"||N==="pagination"||N==="scrollbar")?E===!1&&S(N):h[N]=i[N]}}),d.includes("controller")&&!g&&e.controller&&e.controller.control&&h.controller&&h.controller.control&&(e.controller.control=h.controller.control),r.includes("children")&&t&&f&&h.virtual.enabled?(f.slides=t,f.update(!0)):r.includes("virtual")&&f&&h.virtual.enabled&&(t&&(f.slides=t),f.update(!0)),r.includes("children")&&t&&h.loop&&(C=!0),b&&v.init()&&v.update(!0),g&&(e.controller.control=h.controller.control),x&&(e.isElement&&(!c||typeof c=="string")&&(c=document.createElement("div"),c.classList.add("swiper-pagination"),c.part.add("pagination"),e.el.appendChild(c)),c&&(h.pagination.el=c),u.init(),u.render(),u.update()),y&&(e.isElement&&(!o||typeof o=="string")&&(o=document.createElement("div"),o.classList.add("swiper-scrollbar"),o.part.add("scrollbar"),e.el.appendChild(o)),o&&(h.scrollbar.el=o),p.init(),p.updateSize(),p.setTranslate()),w&&(e.isElement&&((!a||typeof a=="string")&&(a=document.createElement("div"),a.classList.add("swiper-button-next"),a.innerHTML=e.hostEl.constructor.nextButtonSvg,a.part.add("button-next"),e.el.appendChild(a)),(!l||typeof l=="string")&&(l=document.createElement("div"),l.classList.add("swiper-button-prev"),l.innerHTML=e.hostEl.constructor.prevButtonSvg,l.part.add("button-prev"),e.el.appendChild(l))),a&&(h.navigation.nextEl=a),l&&(h.navigation.prevEl=l),m.init(),m.update()),r.includes("allowSlideNext")&&(e.allowSlideNext=i.allowSlideNext),r.includes("allowSlidePrev")&&(e.allowSlidePrev=i.allowSlidePrev),r.includes("direction")&&e.changeDirection(i.direction,!1),(_||C)&&e.loopDestroy(),(M||C)&&e.loopCreate(),e.update()}function gl(n,e){n===void 0&&(n={}),e===void 0&&(e=!0);const t={on:{}},i={},r={};Ue(t,Ci),t._emitClasses=!0,t.init=!1;const a={},l=As.map(c=>c.replace(/_/,"")),o=Object.assign({},n);return Object.keys(o).forEach(c=>{typeof n[c]>"u"||(l.indexOf(c)>=0?je(n[c])?(t[c]={},r[c]={},Ue(t[c],n[c]),Ue(r[c],n[c])):(t[c]=n[c],r[c]=n[c]):c.search(/on[A-Z]/)===0&&typeof n[c]=="function"?e?i[`${c[2].toLowerCase()}${c.substr(3)}`]=n[c]:t.on[`${c[2].toLowerCase()}${c.substr(3)}`]=n[c]:a[c]=n[c])}),["navigation","pagination","scrollbar"].forEach(c=>{t[c]===!0&&(t[c]={}),t[c]===!1&&delete t[c]}),{params:t,passedParams:r,rest:a,events:i}}function vl(n,e){let{el:t,nextEl:i,prevEl:r,paginationEl:a,scrollbarEl:l,swiper:o}=n;Os(e)&&i&&r&&(o.params.navigation.nextEl=i,o.originalParams.navigation.nextEl=i,o.params.navigation.prevEl=r,o.originalParams.navigation.prevEl=r),Is(e)&&a&&(o.params.pagination.el=a,o.originalParams.pagination.el=a),Ds(e)&&l&&(o.params.scrollbar.el=l,o.originalParams.scrollbar.el=l),o.init(t)}function bl(n,e,t,i,r){const a=[];if(!e)return a;const l=c=>{a.indexOf(c)<0&&a.push(c)};if(t&&i){const c=i.map(r),d=t.map(r);c.join("")!==d.join("")&&l("children"),i.length!==t.length&&l("children")}return As.filter(c=>c[0]==="_").map(c=>c.replace(/_/,"")).forEach(c=>{if(c in n&&c in e)if(je(n[c])&&je(e[c])){const d=Object.keys(n[c]),h=Object.keys(e[c]);d.length!==h.length?l(c):(d.forEach(u=>{n[c][u]!==e[c][u]&&l(c)}),h.forEach(u=>{n[c][u]!==e[c][u]&&l(c)}))}else n[c]!==e[c]&&l(c)}),a}const xl=n=>{!n||n.destroyed||!n.params.virtual||n.params.virtual&&!n.params.virtual.enabled||(n.updateSlides(),n.updateProgress(),n.updateSlidesClasses(),n.parallax&&n.params.parallax&&n.params.parallax.enabled&&n.parallax.setTranslate())};function Ft(){return Ft=Object.assign?Object.assign.bind():function(n){for(var e=1;e{Rs(t)?e.push(t):t.props&&t.props.children&&js(t.props.children).forEach(i=>e.push(i))}),e}function yl(n){const e=[],t={"container-start":[],"container-end":[],"wrapper-start":[],"wrapper-end":[]};return X.Children.toArray(n).forEach(i=>{if(Rs(i))e.push(i);else if(i.props&&i.props.slot&&t[i.props.slot])t[i.props.slot].push(i);else if(i.props&&i.props.children){const r=js(i.props.children);r.length>0?r.forEach(a=>e.push(a)):t["container-end"].push(i)}else t["container-end"].push(i)}),{slides:e,slots:t}}function wl(n,e,t){if(!t)return null;const i=h=>{let u=h;return h<0?u=e.length+h:u>=e.length&&(u=u-e.length),u},r=n.isHorizontal()?{[n.rtlTranslate?"right":"left"]:`${t.offset}px`}:{top:`${t.offset}px`},{from:a,to:l}=t,o=n.params.loop?-e.length:0,c=n.params.loop?e.length*2:e.length,d=[];for(let h=o;h=a&&h<=l&&d.push(e[i(h)]);return d.map((h,u)=>X.cloneElement(h,{swiper:n,style:r,key:h.props.virtualIndex||h.key||`slide-${u}`}))}function ot(n,e){return typeof window>"u"?Re(n,e):Te(n,e)}const xn=pt(null),Nl=pt(null),Oe=zi(function(n,e){let{className:t,tag:i="div",wrapperTag:r="div",children:a,onSwiper:l,...o}=n===void 0?{}:n,c=!1;const[d,h]=ne("swiper"),[u,m]=ne(null),[p,f]=ne(!1),v=$(!1),b=$(null),g=$(null),x=$(null),y=$(null),w=$(null),_=$(null),M=$(null),C=$(null),{params:S,passedParams:N,rest:E,events:P}=gl(o),{slides:L,slots:O}=yl(a),G=()=>{f(!p)};Object.assign(S.on,{_containerClasses(F,oe){h(oe)}});const te=()=>{Object.assign(S.on,P),c=!0;const F={...S};if(delete F.wrapperClass,g.current=new Fi(F),g.current.virtual&&g.current.params.virtual.enabled){g.current.virtual.slides=L;const oe={cache:!1,slides:L,renderExternal:m,renderExternalUpdate:!1};Ue(g.current.params.virtual,oe),Ue(g.current.originalParams.virtual,oe)}};b.current||te(),g.current&&g.current.on("_beforeBreakpoint",G);const I=()=>{c||!P||!g.current||Object.keys(P).forEach(F=>{g.current.on(F,P[F])})},V=()=>{!P||!g.current||Object.keys(P).forEach(F=>{g.current.off(F,P[F])})};Re(()=>()=>{g.current&&g.current.off("_beforeBreakpoint",G)}),Re(()=>{!v.current&&g.current&&(g.current.emitSlidesClasses(),v.current=!0)}),ot(()=>{if(e&&(e.current=b.current),!!b.current)return g.current.destroyed&&te(),vl({el:b.current,nextEl:w.current,prevEl:_.current,paginationEl:M.current,scrollbarEl:C.current,swiper:g.current},S),l&&!g.current.destroyed&&l(g.current),()=>{g.current&&!g.current.destroyed&&g.current.destroy(!0,!1)}},[]),ot(()=>{I();const F=bl(N,x.current,L,y.current,oe=>oe.key);return x.current=N,y.current=L,F.length&&g.current&&!g.current.destroyed&&fl({swiper:g.current,slides:L,passedParams:N,changedParams:F,nextEl:w.current,prevEl:_.current,scrollbarEl:C.current,paginationEl:M.current}),()=>{V()}}),ot(()=>{xl(g.current)},[u]);function q(){return S.virtual?wl(g.current,L,u):L.map((F,oe)=>X.cloneElement(F,{swiper:g.current,swiperSlideIndex:oe}))}return X.createElement(i,Ft({ref:b,className:zs(`${d}${t?` ${t}`:""}`)},E),X.createElement(Nl.Provider,{value:g.current},O["container-start"],X.createElement(r,{className:ml(S.wrapperClass)},O["wrapper-start"],q(),O["wrapper-end"]),Os(S)&&X.createElement(X.Fragment,null,X.createElement("div",{ref:_,className:"swiper-button-prev"}),X.createElement("div",{ref:w,className:"swiper-button-next"})),Ds(S)&&X.createElement("div",{ref:C,className:"swiper-scrollbar"}),Is(S)&&X.createElement("div",{ref:M,className:"swiper-pagination"}),O["container-end"]))});Oe.displayName="Swiper";const D=zi(function(n,e){let{tag:t="div",children:i,className:r="",swiper:a,zoom:l,lazy:o,virtualIndex:c,swiperSlideIndex:d,...h}=n===void 0?{}:n;const u=$(null),[m,p]=ne("swiper-slide"),[f,v]=ne(!1);function b(w,_,M){_===u.current&&p(M)}ot(()=>{if(typeof d<"u"&&(u.current.swiperSlideIndex=d),e&&(e.current=u.current),!(!u.current||!a)){if(a.destroyed){m!=="swiper-slide"&&p("swiper-slide");return}return a.on("_slideClass",b),()=>{a&&a.off("_slideClass",b)}}}),ot(()=>{a&&u.current&&!a.destroyed&&p(a.getSlideClasses(u.current))},[a]);const g={isActive:m.indexOf("swiper-slide-active")>=0,isVisible:m.indexOf("swiper-slide-visible")>=0,isPrev:m.indexOf("swiper-slide-prev")>=0,isNext:m.indexOf("swiper-slide-next")>=0},x=()=>typeof i=="function"?i(g):i,y=()=>{v(!0)};return X.createElement(t,Ft({ref:u,className:zs(`${m}${r?` ${r}`:""}`),"data-swiper-slide-index":c,onLoad:y},h),l&&X.createElement(xn.Provider,{value:g},X.createElement("div",{className:"swiper-zoom-container","data-swiper-zoom":typeof l=="number"?l:void 0},x(),o&&!f&&X.createElement("div",{className:"swiper-lazy-preloader"}))),!l&&X.createElement(xn.Provider,{value:g},x(),o&&!f&&X.createElement("div",{className:"swiper-lazy-preloader"})))});D.displayName="SwiperSlide";function _l(){return s("div",{className:"p-[15px] bg-white mt-5 rounded-[8px]",children:[s("div",{className:"flex items-center justify-between pb-[15px] border-b-[1px] border-[#B1B1B1]",children:[s("h3",{className:"text-xl font-bold",children:"Nhà cung cấp trên BestPC - Tại Hà Nội"}),s("div",{className:"flex items-center",children:[s("div",{className:"flex items-center relative border border-[#b1b1b1] mr-[10px] w-[410px] h-[45px] px-[10px] rounded-[4px]",children:[s("i",{className:"icon_2025 map-2"}),s("input",{type:"text",placeholder:"Nhập địa chỉ của bạn để tìm NCC gần nhất",className:"outline-none ml-[5px] h-full w-full"})]}),s("div",{className:"select-sort relative border border-[#b1b1b1] w-[100px] h-[45px] rounded-[4px] overflow-hidden",children:[s("select",{name:"",id:"",className:" appearance-none w-full relative pl-[10px] bg-transparent h-full z-[2]",children:[s("option",{value:"",children:"Sắp xếp"}),s("option",{value:"",children:"Mới"})]}),s("i",{className:"icon_2025 angle-right ml-[5px] absolute right-[7px] top-[12px] z-[1] rotate-[90deg]"})]})]})]}),s("div",{className:"mt-[10px] py-[15px] grid grid-cols-5 text-xl border-b-[1px] border-[#D9D9D9]",children:[s("div",{children:s("b",{children:"Nhà cung cấp"})}),s("div",{children:s("b",{children:"Chính sách vận chuyển"})}),s("div",{children:s("b",{children:"Giá"})}),s("div",{children:s("b",{children:"Sản phẩm"})})]}),s("div",{className:"list ",children:[s("div",{className:"item grid grid-cols-5 py-[10px] border-b-[1px] border-[#D9D9D9]",children:[s("div",{className:"flex items-start supplier",children:[s("div",{className:"logo mr-[10px]",children:[s("div",{className:"w-[70px] h-[70px] p-[10px] block border border-[#F3F3F3] rounded-[4px]",children:s("img",{src:"/assets/images/logo-hacom.png",className:"block w-full h-full object-contain m-[0_auto]",width:"100%",height:"100%",alt:"hacom"})}),s("div",{className:"flex items-center justify-center mt-2",children:[s("i",{className:"icon_2025 map-4"}),s("span",{className:"ml-[5px]",children:"3km"})]})]}),s("div",{children:[s("div",{className:"flex items-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.7"})]}),s("a",{href:"",className:"text-[#1877F2] font-bold",children:"Hanoicomputer"}),s("a",{href:"",className:"text-[#E85933] underline block",children:"Xem 7 cửa hàng"})]})]}),s("div",{className:"ship",children:[s("p",{children:"Miễn phí giao hàng"}),s("p",{children:"Nhận giap hàng và lắp đặt từ 8h00-21:30 các ngày trong tuần kể cả ngày thứ 7, CN"})]}),s("div",{className:"price",children:[s("div",{className:"flex items-center text-base",children:[s("span",{children:"Giá:"}),s("b",{className:"ml-[5px] text-[#D80A00]",children:"9.000.000đ - 20.000.000đ"})]}),s("b",{className:"mt-2",children:"Đã có VAT"})]}),s("div",{className:"",children:[s("p",{className:"name-pro pb-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"}),s("p",{className:"name-pro py-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"})]}),s("div",{children:s("a",{href:"",className:"block w-[130px] h-[40px] leading-[40px] m-[auto_0_auto_auto] text-base text-center text-white bg-orange-500 rounded hover:bg-orange-600",children:"Liên hệ ngay"})})]}),s("div",{className:"item grid grid-cols-5 py-[10px] border-b-[1px] border-[#D9D9D9]",children:[s("div",{className:"flex items-start supplier",children:[s("div",{className:"logo mr-[10px]",children:[s("div",{className:"w-[70px] h-[70px] p-[10px] block border border-[#F3F3F3] rounded-[4px]",children:s("img",{src:"/assets/images/logo-hacom.png",className:"block w-full h-full object-contain m-[0_auto]",width:"100%",height:"100%",alt:"hacom"})}),s("div",{className:"flex items-center justify-center mt-2",children:[s("i",{className:"icon_2025 map-4"}),s("span",{className:"ml-[5px]",children:"3km"})]})]}),s("div",{children:[s("div",{className:"flex items-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.7"})]}),s("a",{href:"",className:"text-[#1877F2] font-bold",children:"Hanoicomputer"}),s("a",{href:"",className:"text-[#E85933] underline block",children:"Xem 7 cửa hàng"})]})]}),s("div",{className:"ship",children:[s("p",{children:"Miễn phí giao hàng"}),s("p",{children:"Nhận giap hàng và lắp đặt từ 8h00-21:30 các ngày trong tuần kể cả ngày thứ 7, CN"})]}),s("div",{className:"price",children:[s("div",{className:"flex items-center text-base",children:[s("span",{children:"Giá:"}),s("b",{className:"ml-[5px] text-[#D80A00]",children:"9.000.000đ - 20.000.000đ"})]}),s("b",{className:"mt-2",children:"Đã có VAT"})]}),s("div",{className:"",children:[s("p",{className:"name-pro pb-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"}),s("p",{className:"name-pro py-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"})]}),s("div",{children:s("a",{href:"",className:"block w-[130px] h-[40px] leading-[40px] m-[auto_0_auto_auto] text-base text-center text-white bg-orange-500 rounded hover:bg-orange-600",children:"Liên hệ ngay"})})]}),s("div",{className:"item grid grid-cols-5 py-[10px] border-b-[1px] border-[#D9D9D9]",children:[s("div",{className:"flex items-start supplier",children:[s("div",{className:"logo mr-[10px]",children:[s("div",{className:"w-[70px] h-[70px] p-[10px] block border border-[#F3F3F3] rounded-[4px]",children:s("img",{src:"/assets/images/logo-hacom.png",className:"block w-full h-full object-contain m-[0_auto]",width:"100%",height:"100%",alt:"hacom"})}),s("div",{className:"flex items-center justify-center mt-2",children:[s("i",{className:"icon_2025 map-4"}),s("span",{className:"ml-[5px]",children:"3km"})]})]}),s("div",{children:[s("div",{className:"flex items-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.7"})]}),s("a",{href:"",className:"text-[#1877F2] font-bold",children:"Hanoicomputer"}),s("a",{href:"",className:"text-[#E85933] underline block",children:"Xem 7 cửa hàng"})]})]}),s("div",{className:"ship",children:[s("p",{children:"Miễn phí giao hàng"}),s("p",{children:"Nhận giap hàng và lắp đặt từ 8h00-21:30 các ngày trong tuần kể cả ngày thứ 7, CN"})]}),s("div",{className:"price",children:[s("div",{className:"flex items-center text-base",children:[s("span",{children:"Giá:"}),s("b",{className:"ml-[5px] text-[#D80A00]",children:"9.000.000đ - 20.000.000đ"})]}),s("b",{className:"mt-2",children:"Đã có VAT"})]}),s("div",{className:"",children:[s("p",{className:"name-pro pb-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"}),s("p",{className:"name-pro py-[10px] border-b-[1px] border-[#D9D9D9]",children:"8GB - 9.000.000đ new White"})]}),s("div",{children:s("a",{href:"",className:"block w-[130px] h-[40px] leading-[40px] m-[auto_0_auto_auto] text-base text-center text-white bg-orange-500 rounded hover:bg-orange-600",children:"Liên hệ ngay"})})]})]}),s("a",{href:"",className:"pt-3 block text-center text-[#FF7A00] text-xl hover:text-orange-600",children:"Xem thêm"})]})}const T=(n,e=1e4)=>(n=parseFloat(n+"")||0,Math.round((n+Number.EPSILON)*e)/e),Pi=function(n){if(!(n&&n instanceof Element&&n.offsetParent))return!1;const e=n.scrollHeight>n.clientHeight,t=window.getComputedStyle(n).overflowY,i=t.indexOf("hidden")!==-1,r=t.indexOf("visible")!==-1;return e&&!i&&!r},Bt=function(n,e=void 0){return!(!n||n===document.body||e&&n===e)&&(Pi(n)?n:Bt(n.parentElement,e))},pe=function(n){var e=new DOMParser().parseFromString(n,"text/html").body;if(e.childElementCount>1){for(var t=document.createElement("div");e.firstChild;)t.appendChild(e.firstChild);return t}return e.firstChild},Bi=n=>`${n||""}`.split(" ").filter(e=>!!e),me=(n,e,t)=>{n&&Bi(e).forEach(i=>{n.classList.toggle(i,t||!1)})};class Be{constructor(e){Object.defineProperty(this,"pageX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pageY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"nativePointer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.nativePointer=e,this.pageX=e.pageX,this.pageY=e.pageY,this.clientX=e.clientX,this.clientY=e.clientY,this.id=self.Touch&&e instanceof Touch?e.identifier:-1,this.time=Date.now()}}const He={passive:!1};class Sl{constructor(e,{start:t=()=>!0,move:i=()=>{},end:r=()=>{}}){Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"moveCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"currentPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"startPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.element=e,this.startCallback=t,this.moveCallback=i,this.endCallback=r;for(const a of["onPointerStart","onTouchStart","onMove","onTouchEnd","onPointerEnd","onWindowBlur"])this[a]=this[a].bind(this);this.element.addEventListener("mousedown",this.onPointerStart,He),this.element.addEventListener("touchstart",this.onTouchStart,He),this.element.addEventListener("touchmove",this.onMove,He),this.element.addEventListener("touchend",this.onTouchEnd),this.element.addEventListener("touchcancel",this.onTouchEnd)}onPointerStart(e){if(!e.buttons||e.button!==0)return;const t=new Be(e);this.currentPointers.some(i=>i.id===t.id)||this.triggerPointerStart(t,e)&&(window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseup",this.onPointerEnd),window.addEventListener("blur",this.onWindowBlur))}onTouchStart(e){for(const t of Array.from(e.changedTouches||[]))this.triggerPointerStart(new Be(t),e);window.addEventListener("blur",this.onWindowBlur)}onMove(e){const t=this.currentPointers.slice(),i="changedTouches"in e?Array.from(e.changedTouches||[]).map(a=>new Be(a)):[new Be(e)],r=[];for(const a of i){const l=this.currentPointers.findIndex(o=>o.id===a.id);l<0||(r.push(a),this.currentPointers[l]=a)}r.length&&this.moveCallback(e,this.currentPointers.slice(),t)}onPointerEnd(e){e.buttons>0&&e.button!==0||(this.triggerPointerEnd(e,new Be(e)),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur))}onTouchEnd(e){for(const t of Array.from(e.changedTouches||[]))this.triggerPointerEnd(e,new Be(t))}triggerPointerStart(e,t){return!!this.startCallback(t,e,this.currentPointers.slice())&&(this.currentPointers.push(e),this.startPointers.push(e),!0)}triggerPointerEnd(e,t){const i=this.currentPointers.findIndex(r=>r.id===t.id);i<0||(this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(e,t,this.currentPointers.slice()))}onWindowBlur(){this.clear()}clear(){for(;this.currentPointers.length;){const e=this.currentPointers[this.currentPointers.length-1];this.currentPointers.splice(this.currentPointers.length-1,1),this.startPointers.splice(this.currentPointers.length-1,1),this.endCallback(new Event("touchend",{bubbles:!0,cancelable:!0,clientX:e.clientX,clientY:e.clientY}),e,this.currentPointers.slice())}}stop(){this.element.removeEventListener("mousedown",this.onPointerStart,He),this.element.removeEventListener("touchstart",this.onTouchStart,He),this.element.removeEventListener("touchmove",this.onMove,He),this.element.removeEventListener("touchend",this.onTouchEnd),this.element.removeEventListener("touchcancel",this.onTouchEnd),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur)}}function yn(n,e){return e?Math.sqrt(Math.pow(e.clientX-n.clientX,2)+Math.pow(e.clientY-n.clientY,2)):0}function wn(n,e){return e?{clientX:(n.clientX+e.clientX)/2,clientY:(n.clientY+e.clientY)/2}:n}const Mi=n=>typeof n=="object"&&n!==null&&n.constructor===Object&&Object.prototype.toString.call(n)==="[object Object]",ee=(n,...e)=>{const t=e.length;for(let i=0;i{const o=Array.isArray(l)?[]:{};n[a]||Object.assign(n,{[a]:o}),Mi(l)?Object.assign(n[a],ee(o,l)):Array.isArray(l)?Object.assign(n,{[a]:[...l]}):Object.assign(n,{[a]:l})})}return n},ii=function(n,e){return n.split(".").reduce((t,i)=>typeof t=="object"?t[i]:void 0,e)};class Ht{constructor(e={}){Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.setOptions(e);for(const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this)))t.startsWith("on")&&typeof this[t]=="function"&&(this[t]=this[t].bind(this))}setOptions(e){this.options=e?ee({},this.constructor.defaults,e):{};for(const[t,i]of Object.entries(this.option("on")||{}))this.on(t,i)}option(e,...t){let i=ii(e,this.options);return i&&typeof i=="function"&&(i=i.call(this,this,...t)),i}optionFor(e,t,i,...r){let a=ii(t,e);var l;typeof(l=a)!="string"||isNaN(l)||isNaN(parseFloat(l))||(a=parseFloat(a)),a==="true"&&(a=!0),a==="false"&&(a=!1),a&&typeof a=="function"&&(a=a.call(this,this,e,...r));let o=ii(t,this.options);return o&&typeof o=="function"?a=o.call(this,this,e,...r,a):a===void 0&&(a=o),a===void 0?i:a}cn(e){const t=this.options.classes;return t&&t[e]||""}localize(e,t=[]){e=String(e).replace(/\{\{(\w+).?(\w+)?\}\}/g,(i,r,a)=>{let l="";return a?l=this.option(`${r[0]+r.toLowerCase().substring(1)}.l10n.${a}`):r&&(l=this.option(`l10n.${r}`)),l||(l=i),l});for(let i=0;ir)}on(e,t){let i=[];typeof e=="string"?i=e.split(" "):Array.isArray(e)&&(i=e),this.events||(this.events=new Map),i.forEach(r=>{let a=this.events.get(r);a||(this.events.set(r,[]),a=[]),a.includes(t)||a.push(t),this.events.set(r,a)})}off(e,t){let i=[];typeof e=="string"?i=e.split(" "):Array.isArray(e)&&(i=e),i.forEach(r=>{const a=this.events.get(r);if(Array.isArray(a)){const l=a.indexOf(t);l>-1&&a.splice(l,1)}})}emit(e,...t){[...this.events.get(e)||[]].forEach(i=>i(this,...t)),e!=="*"&&this.emit("*",e,...t)}}Object.defineProperty(Ht,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.36"}),Object.defineProperty(Ht,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}});class Hi extends Ht{constructor(e={}){super(e),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}})}attachPlugins(e={}){const t=new Map;for(const[i,r]of Object.entries(e)){const a=this.option(i),l=this.plugins[i];l||a===!1?l&&a===!1&&(l.detach(),delete this.plugins[i]):t.set(i,new r(this,a||{}))}for(const[i,r]of t)this.plugins[i]=r,r.attach()}detachPlugins(e){e=e||Object.keys(this.plugins);for(const t of e){const i=this.plugins[t];i&&i.detach(),delete this.plugins[t]}return this.emit("detachPlugins"),this}}var j;(function(n){n[n.Init=0]="Init",n[n.Error=1]="Error",n[n.Ready=2]="Ready",n[n.Panning=3]="Panning",n[n.Mousemove=4]="Mousemove",n[n.Destroy=5]="Destroy"})(j||(j={}));const be=["a","b","c","d","e","f"],Fs={PANUP:"Move up",PANDOWN:"Move down",PANLEFT:"Move left",PANRIGHT:"Move right",ZOOMIN:"Zoom in",ZOOMOUT:"Zoom out",TOGGLEZOOM:"Toggle zoom level",TOGGLE1TO1:"Toggle zoom level",ITERATEZOOM:"Toggle zoom level",ROTATECCW:"Rotate counterclockwise",ROTATECW:"Rotate clockwise",FLIPX:"Flip horizontally",FLIPY:"Flip vertically",FITX:"Fit horizontally",FITY:"Fit vertically",RESET:"Reset",TOGGLEFS:"Toggle fullscreen"},Tl={content:null,width:"auto",height:"auto",panMode:"drag",touch:!0,dragMinThreshold:3,lockAxis:!1,mouseMoveFactor:1,mouseMoveFriction:.12,zoom:!0,pinchToZoom:!0,panOnlyZoomed:"auto",minScale:1,maxScale:2,friction:.25,dragFriction:.35,decelFriction:.05,click:"toggleZoom",dblClick:!1,wheel:"zoom",wheelLimit:7,spinner:!0,bounds:"auto",infinite:!1,rubberband:!0,bounce:!0,maxVelocity:75,transformParent:!1,classes:{content:"f-panzoom__content",isLoading:"is-loading",canZoomIn:"can-zoom_in",canZoomOut:"can-zoom_out",isDraggable:"is-draggable",isDragging:"is-dragging",inFullscreen:"in-fullscreen",htmlHasFullscreen:"with-panzoom-in-fullscreen"},l10n:Fs},Nn='',$i='
'+Nn+Nn+"
",Q=n=>n&&n!==null&&n instanceof Element&&"nodeType"in n,R=(n,e)=>{n&&Bi(e).forEach(t=>{n.classList.remove(t)})},k=(n,e)=>{n&&Bi(e).forEach(t=>{n.classList.add(t)})},wt={a:1,b:0,c:0,d:1,e:0,f:0},El=1e5,Nt=1e4,se="mousemove",_n="drag",Sn="content",re="auto";let ni=null,si=null;class Fe extends Hi{get fits(){return this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1}get isTouchDevice(){return si===null&&(si=window.matchMedia("(hover: none)").matches),si}get isMobile(){return ni===null&&(ni=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)),ni}get panMode(){return this.options.panMode!==se||this.isTouchDevice?_n:se}get panOnlyZoomed(){const e=this.options.panOnlyZoomed;return e===re?this.isTouchDevice:e}get isInfinite(){return this.option("infinite")}get angle(){return 180*Math.atan2(this.current.b,this.current.a)/Math.PI||0}get targetAngle(){return 180*Math.atan2(this.target.b,this.target.a)/Math.PI||0}get scale(){const{a:e,b:t}=this.current;return Math.sqrt(e*e+t*t)||1}get targetScale(){const{a:e,b:t}=this.target;return Math.sqrt(e*e+t*t)||1}get minScale(){return this.option("minScale")||1}get fullScale(){const{contentRect:e}=this;return e.fullWidth/e.fitWidth||1}get maxScale(){return this.fullScale*(this.option("maxScale")||1)||1}get coverScale(){const{containerRect:e,contentRect:t}=this,i=Math.max(e.height/t.fitHeight,e.width/t.fitWidth)||1;return Math.min(this.fullScale,i)}get isScaling(){return Math.abs(this.targetScale-this.scale)>1e-5&&!this.isResting}get isContentLoading(){const e=this.content;return!!(e&&e instanceof HTMLImageElement)&&!e.complete}get isResting(){if(this.isBouncingX||this.isBouncingY)return!1;for(const e of be){const t=e=="e"||e==="f"?1e-4:1e-5;if(Math.abs(this.target[e]-this.current[e])>t)return!1}return!(!this.ignoreBounds&&!this.checkBounds().inBounds)}constructor(e,t={},i={}){var r;if(super(t),Object.defineProperty(this,"pointerTracker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"updateTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"rAF",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isTicking",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"ignoreBounds",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingX",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingY",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"clicks",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"trackingPoints",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"cwd",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"pmme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"friction",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:j.Init}),Object.defineProperty(this,"isDragging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"spinner",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"containerRect",{enumerable:!0,configurable:!0,writable:!0,value:{width:0,height:0,innerWidth:0,innerHeight:0}}),Object.defineProperty(this,"contentRect",{enumerable:!0,configurable:!0,writable:!0,value:{top:0,right:0,bottom:0,left:0,fullWidth:0,fullHeight:0,fitWidth:0,fitHeight:0,width:0,height:0}}),Object.defineProperty(this,"dragStart",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,top:0,left:0,time:0}}),Object.defineProperty(this,"dragOffset",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,time:0}}),Object.defineProperty(this,"current",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},wt)}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},wt)}),Object.defineProperty(this,"velocity",{enumerable:!0,configurable:!0,writable:!0,value:{a:0,b:0,c:0,d:0,e:0,f:0}}),Object.defineProperty(this,"lockedAxis",{enumerable:!0,configurable:!0,writable:!0,value:!1}),!e)throw new Error("Container Element Not Found");this.container=e,this.initContent(),this.attachPlugins(Object.assign(Object.assign({},Fe.Plugins),i)),this.emit("attachPlugins"),this.emit("init");const a=this.content;if(a.addEventListener("load",this.onLoad),a.addEventListener("error",this.onError),this.isContentLoading){if(this.option("spinner")){e.classList.add(this.cn("isLoading"));const l=pe($i);!e.contains(a)||a.parentElement instanceof HTMLPictureElement?this.spinner=e.appendChild(l):this.spinner=((r=a.parentElement)===null||r===void 0?void 0:r.insertBefore(l,a))||null}this.emit("beforeLoad")}else queueMicrotask(()=>{this.enable()})}initContent(){const{container:e}=this,t=this.cn(Sn);let i=this.option(Sn)||e.querySelector(`.${t}`);if(i||(i=e.querySelector("img,picture")||e.firstElementChild,i&&k(i,t)),i instanceof HTMLPictureElement&&(i=i.querySelector("img")),!i)throw new Error("No content found");this.content=i}onLoad(){const{spinner:e,container:t,state:i}=this;e&&(e.remove(),this.spinner=null),this.option("spinner")&&t.classList.remove(this.cn("isLoading")),this.emit("afterLoad"),i===j.Init?this.enable():this.updateMetrics()}onError(){this.state!==j.Destroy&&(this.spinner&&(this.spinner.remove(),this.spinner=null),this.stop(),this.detachEvents(),this.state=j.Error,this.emit("error"))}getNextScale(e){const{fullScale:t,targetScale:i,coverScale:r,maxScale:a,minScale:l}=this;let o=l;switch(e){case"toggleMax":o=i-l<.5*(a-l)?a:l;break;case"toggleCover":o=i-l<.5*(r-l)?r:l;break;case"toggleZoom":o=i-l<.5*(t-l)?t:l;break;case"iterateZoom":let c=[1,t,a].sort((h,u)=>h-u),d=c.findIndex(h=>h>i+1e-5);o=c[d]||1}return o}attachObserver(){var e;const t=()=>{const{container:i,containerRect:r}=this;return Math.abs(r.width-i.getBoundingClientRect().width)>.1||Math.abs(r.height-i.getBoundingClientRect().height)>.1};this.resizeObserver||window.ResizeObserver===void 0||(this.resizeObserver=new ResizeObserver(()=>{this.updateTimer||(t()?(this.onResize(),this.isMobile&&(this.updateTimer=setTimeout(()=>{t()&&this.onResize(),this.updateTimer=null},500))):this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null))})),(e=this.resizeObserver)===null||e===void 0||e.observe(this.container)}detachObserver(){var e;(e=this.resizeObserver)===null||e===void 0||e.disconnect()}attachEvents(){const{container:e}=this;e.addEventListener("click",this.onClick,{passive:!1,capture:!1}),e.addEventListener("wheel",this.onWheel,{passive:!1}),this.pointerTracker=new Sl(e,{start:this.onPointerDown,move:this.onPointerMove,end:this.onPointerUp}),document.addEventListener(se,this.onMouseMove)}detachEvents(){var e;const{container:t}=this;t.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),t.removeEventListener("wheel",this.onWheel,{passive:!1}),(e=this.pointerTracker)===null||e===void 0||e.stop(),this.pointerTracker=null,document.removeEventListener(se,this.onMouseMove),document.removeEventListener("keydown",this.onKeydown,!0),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null)}animate(){this.setTargetForce();const e=this.friction,t=this.option("maxVelocity");for(const i of be)e?(this.velocity[i]*=1-e,t&&!this.isScaling&&(this.velocity[i]=Math.max(Math.min(this.velocity[i],t),-1*t)),this.current[i]+=this.velocity[i]):this.current[i]=this.target[i];this.setTransform(),this.setEdgeForce(),!this.isResting||this.isDragging?this.rAF=requestAnimationFrame(()=>this.animate()):this.stop("current")}setTargetForce(){for(const e of be)e==="e"&&this.isBouncingX||e==="f"&&this.isBouncingY||(this.velocity[e]=(1/(1-this.friction)-1)*(this.target[e]-this.current[e]))}checkBounds(e=0,t=0){const{current:i}=this,r=i.e+e,a=i.f+t,l=this.getBounds(),{x:o,y:c}=l,d=o.min,h=o.max,u=c.min,m=c.max;let p=0,f=0;return d!==1/0&&rh&&(p=h-r),u!==1/0&&am&&(f=m-a),Math.abs(p)<1e-4&&(p=0),Math.abs(f)<1e-4&&(f=0),Object.assign(Object.assign({},l),{xDiff:p,yDiff:f,inBounds:!p&&!f})}clampTargetBounds(){const{target:e}=this,{x:t,y:i}=this.getBounds();t.min!==1/0&&(e.e=Math.max(e.e,t.min)),t.max!==1/0&&(e.e=Math.min(e.e,t.max)),i.min!==1/0&&(e.f=Math.max(e.f,i.min)),i.max!==1/0&&(e.f=Math.min(e.f,i.max))}calculateContentDim(e=this.current){const{content:t,contentRect:i}=this,{fitWidth:r,fitHeight:a,fullWidth:l,fullHeight:o}=i;let c=l,d=o;if(this.option("zoom")||this.angle!==0){const h=!(t instanceof HTMLImageElement)&&(window.getComputedStyle(t).maxWidth==="none"||window.getComputedStyle(t).maxHeight==="none"),u=h?l:r,m=h?o:a,p=this.getMatrix(e),f=new DOMPoint(0,0).matrixTransform(p),v=new DOMPoint(0+u,0).matrixTransform(p),b=new DOMPoint(0+u,0+m).matrixTransform(p),g=new DOMPoint(0,0+m).matrixTransform(p),x=Math.abs(b.x-f.x),y=Math.abs(b.y-f.y),w=Math.abs(g.x-v.x),_=Math.abs(g.y-v.y);c=Math.max(x,w),d=Math.max(y,_)}return{contentWidth:c,contentHeight:d}}setEdgeForce(){if(this.ignoreBounds||this.isDragging||this.panMode===se||this.targetScale{const p=window.getSelection();return p&&p.type==="Range"})()&&!i.closest("button"))return;const r=i.closest("[data-panzoom-action]"),a=i.closest("[data-panzoom-change]"),l=r||a,o=l&&Q(l)?l.dataset:null;if(o){const p=o.panzoomChange,f=o.panzoomAction;if((p||f)&&e.preventDefault(),p){let v={};try{v=JSON.parse(p)}catch{console&&console.warn("The given data was not valid JSON")}return void this.applyChange(v)}if(f)return void(this[f]&&this[f]())}if(Math.abs(this.dragOffset.x)>3||Math.abs(this.dragOffset.y)>3)return e.preventDefault(),void e.stopPropagation();if(i.closest("[data-fancybox]"))return;const c=this.content.getBoundingClientRect(),d=this.dragStart;if(d.time&&!this.canZoomOut()&&(Math.abs(c.x-d.x)>2||Math.abs(c.y-d.y)>2))return;this.dragStart.time=0;const h=p=>{this.option("zoom",e)&&p&&typeof p=="string"&&/(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(p)&&typeof this[p]=="function"&&(e.preventDefault(),this[p]({event:e}))},u=this.option("click",e),m=this.option("dblClick",e);m?(this.clicks++,this.clicks==1&&(this.clickTimer=setTimeout(()=>{this.clicks===1?(this.emit("click",e),!e.defaultPrevented&&u&&h(u)):(this.emit("dblClick",e),e.defaultPrevented||h(m)),this.clicks=0,this.clickTimer=null},350))):(this.emit("click",e),!e.defaultPrevented&&u&&h(u))}addTrackingPoint(e){const t=this.trackingPoints.filter(i=>i.time>Date.now()-100);t.push(e),this.trackingPoints=t}onPointerDown(e,t,i){var r;if(this.option("touch",e)===!1)return!1;this.pwt=0,this.dragOffset={x:0,y:0,time:0},this.trackingPoints=[];const a=this.content.getBoundingClientRect();if(this.dragStart={x:a.x,y:a.y,top:a.top,left:a.left,time:Date.now()},this.clickTimer)return!1;if(this.panMode===se&&this.targetScale>1)return e.preventDefault(),e.stopPropagation(),!1;const l=e.composedPath()[0];if(!i.length){if(["TEXTAREA","OPTION","INPUT","SELECT","VIDEO","IFRAME"].includes(l.nodeName)||l.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]"))return!1;(r=window.getSelection())===null||r===void 0||r.removeAllRanges()}if(e.type==="mousedown")["A","BUTTON"].includes(l.nodeName)||e.preventDefault();else if(Math.abs(this.velocity.a)>.3)return!1;return this.target.e=this.current.e,this.target.f=this.current.f,this.stop(),this.isDragging||(this.isDragging=!0,this.addTrackingPoint(t),this.emit("touchStart",e)),!0}onPointerMove(e,t,i){if(this.option("touch",e)===!1||!this.isDragging||t.length<2&&this.panOnlyZoomed&&T(this.targetScale)<=T(this.minScale)||(this.emit("touchMove",e),e.defaultPrevented))return;this.addTrackingPoint(t[0]);const{content:r}=this,a=wn(i[0],i[1]),l=wn(t[0],t[1]);let o=0,c=0;if(t.length>1){const y=r.getBoundingClientRect();o=a.clientX-y.left-.5*y.width,c=a.clientY-y.top-.5*y.height}const d=yn(i[0],i[1]),h=yn(t[0],t[1]);let u=d?h/d:1,m=l.clientX-a.clientX,p=l.clientY-a.clientY;this.dragOffset.x+=m,this.dragOffset.y+=p,this.dragOffset.time=Date.now()-this.dragStart.time;let f=T(this.targetScale)===T(this.minScale)&&this.option("lockAxis");if(f&&!this.lockedAxis)if(f==="xy"||f==="y"||e.type==="touchmove"){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return void e.preventDefault();const y=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockedAxis=y>45&&y<135?"y":"x",this.dragOffset.x=0,this.dragOffset.y=0,m=0,p=0}else this.lockedAxis=f;if(Bt(e.target,this.content)&&(f="x",this.dragOffset.y=0),f&&f!=="xy"&&this.lockedAxis!==f&&T(this.targetScale)===T(this.minScale))return;e.cancelable&&e.preventDefault(),this.container.classList.add(this.cn("isDragging"));const v=this.checkBounds(m,p);this.option("rubberband")?(this.isInfinite!=="x"&&(v.xDiff>0&&m<0||v.xDiff<0&&m>0)&&(m*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitWidth*v.xDiff))),this.isInfinite!=="y"&&(v.yDiff>0&&p<0||v.yDiff<0&&p>0)&&(p*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitHeight*v.yDiff)))):(v.xDiff&&(m=0),v.yDiff&&(p=0));const b=this.targetScale,g=this.minScale,x=this.maxScale;b<.5*g&&(u=Math.max(u,g)),b>1.5*x&&(u=Math.min(u,x)),this.lockedAxis==="y"&&T(b)===T(g)&&(m=0),this.lockedAxis==="x"&&T(b)===T(g)&&(p=0),this.applyChange({originX:o,originY:c,panX:m,panY:p,scale:u,friction:this.option("dragFriction"),ignoreBounds:!0})}onPointerUp(e,t,i){if(i.length)return this.dragOffset.x=0,this.dragOffset.y=0,void(this.trackingPoints=[]);this.container.classList.remove(this.cn("isDragging")),this.isDragging&&(this.addTrackingPoint(t),this.panOnlyZoomed&&this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1&&(this.trackingPoints=[]),Bt(e.target,this.content)&&this.lockedAxis==="y"&&(this.trackingPoints=[]),this.emit("touchEnd",e),this.isDragging=!1,this.lockedAxis=!1,this.state!==j.Destroy&&(e.defaultPrevented||this.startDecelAnim()))}startDecelAnim(){var e;const t=this.isScaling;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const y of be)this.velocity[y]=0;this.target.e=this.current.e,this.target.f=this.current.f,R(this.container,"is-scaling"),R(this.container,"is-animating"),this.isTicking=!1;const{trackingPoints:i}=this,r=i[0],a=i[i.length-1];let l=0,o=0,c=0;a&&r&&(l=a.clientX-r.clientX,o=a.clientY-r.clientY,c=a.time-r.time);const d=((e=window.visualViewport)===null||e===void 0?void 0:e.scale)||1;d!==1&&(l*=d,o*=d);let h=0,u=0,m=0,p=0,f=this.option("decelFriction");const v=this.targetScale;if(c>0){m=Math.abs(l)>3?l/(c/30):0,p=Math.abs(o)>3?o/(c/30):0;const y=this.option("maxVelocity");y&&(m=Math.max(Math.min(m,y),-1*y),p=Math.max(Math.min(p,y),-1*y))}m&&(h=m/(1/(1-f)-1)),p&&(u=p/(1/(1-f)-1)),(this.option("lockAxis")==="y"||this.option("lockAxis")==="xy"&&this.lockedAxis==="y"&&T(v)===this.minScale)&&(h=m=0),(this.option("lockAxis")==="x"||this.option("lockAxis")==="xy"&&this.lockedAxis==="x"&&T(v)===this.minScale)&&(u=p=0);const b=this.dragOffset.x,g=this.dragOffset.y,x=this.option("dragMinThreshold")||0;Math.abs(b)this.maxScale+1e-5)||t&&!h&&!u)&&(f=.35),this.applyChange({panX:h,panY:u,friction:f}),this.emit("decel",m,p,b,g)}onWheel(e){var t=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(a,l){return Math.abs(l)>Math.abs(a)?l:a});const i=Math.max(-1,Math.min(1,t));if(this.emit("wheel",e,i),this.panMode===se||e.defaultPrevented)return;const r=this.option("wheel");r==="pan"?(e.preventDefault(),this.panOnlyZoomed&&!this.canZoomOut()||this.applyChange({panX:2*-e.deltaX,panY:2*-e.deltaY,bounce:!1})):r==="zoom"&&this.option("zoom")!==!1&&this.zoomWithWheel(e)}onMouseMove(e){this.panWithMouse(e)}onKeydown(e){e.key==="Escape"&&this.toggleFS()}onResize(){this.updateMetrics(),this.checkBounds().inBounds||this.requestTick()}setTransform(){this.emit("beforeTransform");const{current:e,target:t,content:i,contentRect:r}=this,a=Object.assign({},wt);for(const b of be){const g=b=="e"||b==="f"?Nt:El;a[b]=T(e[b],g),Math.abs(t[b]-e[b])<(b=="e"||b==="f"?.51:.001)&&(e[b]=t[b])}let{a:l,b:o,c,d,e:h,f:u}=a,m=`matrix(${l}, ${o}, ${c}, ${d}, ${h}, ${u})`,p=i.parentElement instanceof HTMLPictureElement?i.parentElement:i;if(this.option("transformParent")&&(p=p.parentElement||p),p.style.transform===m)return;p.style.transform=m;const{contentWidth:f,contentHeight:v}=this.calculateContentDim();r.width=f,r.height=v,this.emit("afterTransform")}updateMetrics(e=!1){var t;if(!this||this.state===j.Destroy||this.isContentLoading)return;const i=Math.max(1,((t=window.visualViewport)===null||t===void 0?void 0:t.scale)||1),{container:r,content:a}=this,l=a instanceof HTMLImageElement,o=r.getBoundingClientRect(),c=getComputedStyle(this.container);let d=o.width*i,h=o.height*i;const u=parseFloat(c.paddingTop)+parseFloat(c.paddingBottom),m=d-(parseFloat(c.paddingLeft)+parseFloat(c.paddingRight)),p=h-u;this.containerRect={width:d,height:h,innerWidth:m,innerHeight:p};const f=parseFloat(a.dataset.width||"")||(O=>{let G=0;return G=O instanceof HTMLImageElement?O.naturalWidth:O instanceof SVGElement?O.width.baseVal.value:Math.max(O.offsetWidth,O.scrollWidth),G||0})(a),v=parseFloat(a.dataset.height||"")||(O=>{let G=0;return G=O instanceof HTMLImageElement?O.naturalHeight:O instanceof SVGElement?O.height.baseVal.value:Math.max(O.offsetHeight,O.scrollHeight),G||0})(a);let b=this.option("width",f)||re,g=this.option("height",v)||re;const x=b===re,y=g===re;typeof b!="number"&&(b=f),typeof g!="number"&&(g=v),x&&(b=f*(g/v)),y&&(g=v/(f/b));let w=a.parentElement instanceof HTMLPictureElement?a.parentElement:a;this.option("transformParent")&&(w=w.parentElement||w);const _=w.getAttribute("style")||"";w.style.setProperty("transform","none","important"),l&&(w.style.width="",w.style.height=""),w.offsetHeight;const M=a.getBoundingClientRect();let C=M.width*i,S=M.height*i,N=C,E=S;C=Math.min(C,b),S=Math.min(S,g),l?{width:C,height:S}=((O,G,te,I)=>{const V=te/O,q=I/G,F=Math.min(V,q);return{width:O*=F,height:G*=F}})(b,g,C,S):(C=Math.min(C,b),S=Math.min(S,g));let P=.5*(E-S),L=.5*(N-C);this.contentRect=Object.assign(Object.assign({},this.contentRect),{top:M.top-o.top+P,bottom:o.bottom-M.bottom+P,left:M.left-o.left+L,right:o.right-M.right+L,fitWidth:C,fitHeight:S,width:C,height:S,fullWidth:b,fullHeight:g}),w.style.cssText=_,l&&(w.style.width=`${C}px`,w.style.height=`${S}px`),this.setTransform(),e!==!0&&this.emit("refresh"),this.ignoreBounds||(T(this.targetScale)this.maxScale?this.zoomTo(this.maxScale,{friction:0}):this.state===j.Init||this.checkBounds().inBounds||this.requestTick()),this.updateControls()}calculateBounds(){const{contentWidth:e,contentHeight:t}=this.calculateContentDim(this.target),{targetScale:i,lockedAxis:r}=this,{fitWidth:a,fitHeight:l}=this.contentRect;let o=0,c=0,d=0,h=0;const u=this.option("infinite");if(u===!0||r&&u===r)o=-1/0,d=1/0,c=-1/0,h=1/0;else{let{containerRect:m,contentRect:p}=this,f=T(a*i,Nt),v=T(l*i,Nt),{innerWidth:b,innerHeight:g}=m;if(m.width===f&&(b=m.width),m.width===v&&(g=m.height),e>b){d=.5*(e-b),o=-1*d;let x=.5*(p.right-p.left);o+=x,d+=x}if(a>b&&eg){h=.5*(t-g),c=-1*h;let x=.5*(p.bottom-p.top);c+=x,h+=x}l>g&&tT(r.fitWidth,1)||T(r.height,1)>T(r.fitHeight,1))&&(m=!0)),T(r.width*a,1)T(a),f=!p&&!m&&h&&T(o)w&&(i=w/x)}g=g.scale(i)}g=g.translate(-a,-l).translate(-f,-v).multiply(b),r&&(g=g.rotate(r)),c&&(g=g.scale(-1,1)),d&&(g=g.scale(1,-1));for(const x of be)x!=="e"&&x!=="f"&&(g[x]>this.minScale+1e-5||g[x].1||this.panMode===se||u===!1)&&!h&&this.clampTargetBounds(),m===j.Init?this.animate():this.isResting||(this.state=j.Panning,this.requestTick())}stop(e=!1){if(this.state===j.Init||this.state===j.Destroy)return;const t=this.isTicking;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const i of be)this.velocity[i]=0,e==="current"?this.current[i]=this.target[i]:e==="target"&&(this.target[i]=this.current[i]);this.setTransform(),R(this.container,"is-scaling"),R(this.container,"is-animating"),this.isTicking=!1,this.state=j.Ready,t&&(this.emit("endAnimation"),this.updateControls())}requestTick(){this.isTicking||(this.emit("startAnimation"),this.updateControls(),k(this.container,"is-animating"),this.isScaling&&k(this.container,"is-scaling")),this.isTicking=!0,this.rAF||(this.rAF=requestAnimationFrame(()=>this.animate()))}panWithMouse(e,t=this.option("mouseMoveFriction")){if(this.pmme=e,this.panMode!==se||!e||T(this.targetScale)<=T(this.minScale))return;this.emit("mouseMove",e);const{container:i,containerRect:r,contentRect:a}=this,l=r.width,o=r.height,c=i.getBoundingClientRect(),d=(e.clientX||0)-c.left,h=(e.clientY||0)-c.top;let{contentWidth:u,contentHeight:m}=this.calculateContentDim(this.target);const p=this.option("mouseMoveFactor");p>1&&(u!==l&&(u*=p),m!==o&&(m*=p));let f=.5*(u-l)-d/l*100/100*(u-l);f+=.5*(a.right-a.left);let v=.5*(m-o)-h/o*100/100*(m-o);v+=.5*(a.bottom-a.top),this.applyChange({panX:f-this.target.e,panY:v-this.target.f,friction:t})}zoomWithWheel(e){if(this.state===j.Destroy||this.state===j.Init)return;const t=Date.now();if(t-this.pwt<45)return void e.preventDefault();this.pwt=t;var i=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(d,h){return Math.abs(h)>Math.abs(d)?h:d});const r=Math.max(-1,Math.min(1,i)),{targetScale:a,maxScale:l,minScale:o}=this;let c=a*(100+45*r)/100;T(c)T(l)&&T(a)>=T(l)?(this.cwd+=Math.abs(r),c=l):(this.cwd=0,c=Math.max(Math.min(c,l),o)),this.cwd>this.option("wheelLimit")||(e.preventDefault(),T(c)!==T(a)&&this.zoomTo(c,{event:e}))}canZoomIn(){return this.option("zoom")&&(T(this.contentRect.width,1)T(this.minScale)}zoomIn(e=1.25,t){this.zoomTo(this.targetScale*e,t)}zoomOut(e=.8,t){this.zoomTo(this.targetScale*e,t)}zoomToFit(e){this.zoomTo("fit",e)}zoomToCover(e){this.zoomTo("cover",e)}zoomToFull(e){this.zoomTo("full",e)}zoomToMax(e){this.zoomTo("max",e)}toggleZoom(e){this.zoomTo(this.getNextScale("toggleZoom"),e)}toggleMax(e){this.zoomTo(this.getNextScale("toggleMax"),e)}toggleCover(e){this.zoomTo(this.getNextScale("toggleCover"),e)}iterateZoom(e){this.zoomTo("next",e)}zoomTo(e=1,{friction:t=re,originX:i=re,originY:r=re,event:a}={}){if(this.isContentLoading||this.state===j.Destroy)return;const{targetScale:l,fullScale:o,maxScale:c,coverScale:d}=this;if(this.stop(),this.panMode===se&&(a=this.pmme||a),a||i===re||r===re){const u=this.content.getBoundingClientRect(),m=this.container.getBoundingClientRect(),p=a?a.clientX:m.left+.5*m.width,f=a?a.clientY:m.top+.5*m.height;i=p-u.left-.5*u.width,r=f-u.top-.5*u.height}let h=1;typeof e=="number"?h=e:e==="full"?h=o:e==="cover"?h=d:e==="max"?h=c:e==="fit"?h=1:e==="next"&&(h=this.getNextScale("iterateZoom")),h=h/l||1,t=t===re?h>1?.15:.25:t,this.applyChange({scale:h,originX:i,originY:r,friction:t}),a&&this.panMode===se&&this.panWithMouse(a,t)}rotateCCW(){this.applyChange({angle:-90})}rotateCW(){this.applyChange({angle:90})}flipX(){this.applyChange({flipX:!0})}flipY(){this.applyChange({flipY:!0})}fitX(){this.stop("target");const{containerRect:e,contentRect:t,target:i}=this;this.applyChange({panX:.5*e.width-(t.left+.5*t.fitWidth)-i.e,panY:.5*e.height-(t.top+.5*t.fitHeight)-i.f,scale:e.width/t.fitWidth/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}fitY(){this.stop("target");const{containerRect:e,contentRect:t,target:i}=this;this.applyChange({panX:.5*e.width-(t.left+.5*t.fitWidth)-i.e,panY:.5*e.innerHeight-(t.top+.5*t.fitHeight)-i.f,scale:e.height/t.fitHeight/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}toggleFS(){const{container:e}=this,t=this.cn("inFullscreen"),i=this.cn("htmlHasFullscreen");e.classList.toggle(t);const r=e.classList.contains(t);r?(document.documentElement.classList.add(i),document.addEventListener("keydown",this.onKeydown,!0)):(document.documentElement.classList.remove(i),document.removeEventListener("keydown",this.onKeydown,!0)),this.updateMetrics(),this.emit(r?"enterFS":"exitFS")}getMatrix(e=this.current){const{a:t,b:i,c:r,d:a,e:l,f:o}=e;return new DOMMatrix([t,i,r,a,l,o])}reset(e){if(this.state!==j.Init&&this.state!==j.Destroy){this.stop("current");for(const t of be)this.target[t]=wt[t];this.target.a=this.minScale,this.target.d=this.minScale,this.clampTargetBounds(),this.isResting||(this.friction=e===void 0?this.option("friction"):e,this.state=j.Panning,this.requestTick())}}destroy(){this.stop(),this.state=j.Destroy,this.detachEvents(),this.detachObserver();const{container:e,content:t}=this,i=this.option("classes")||{};for(const r of Object.values(i))e.classList.remove(r+"");t&&(t.removeEventListener("load",this.onLoad),t.removeEventListener("error",this.onError)),this.detachPlugins()}}Object.defineProperty(Fe,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Tl}),Object.defineProperty(Fe,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}});const Tn=function(n,e){let t=!0;return(...i)=>{t&&(t=!1,n(...i),setTimeout(()=>{t=!0},e))}},En=(n,e)=>{let t=[];return n.childNodes.forEach(i=>{i.nodeType!==Node.ELEMENT_NODE||e&&!i.matches(e)||t.push(i)}),t},Cl={viewport:null,track:null,enabled:!0,slides:[],axis:"x",transition:"fade",preload:1,slidesPerPage:"auto",initialPage:0,friction:.12,Panzoom:{decelFriction:.12},center:!0,infinite:!0,fill:!0,dragFree:!1,adaptiveHeight:!1,direction:"ltr",classes:{container:"f-carousel",viewport:"f-carousel__viewport",track:"f-carousel__track",slide:"f-carousel__slide",isLTR:"is-ltr",isRTL:"is-rtl",isHorizontal:"is-horizontal",isVertical:"is-vertical",inTransition:"in-transition",isSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide #%d"}};var W;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Destroy=2]="Destroy"})(W||(W={}));const ri=n=>{if(typeof n=="string"||n instanceof HTMLElement)n={html:n};else{const e=n.thumb;e!==void 0&&(typeof e=="string"&&(n.thumbSrc=e),e instanceof HTMLImageElement&&(n.thumbEl=e,n.thumbElSrc=e.src,n.thumbSrc=e.src),delete n.thumb)}return Object.assign({html:"",el:null,isDom:!1,class:"",customClass:"",index:-1,dim:0,gap:0,pos:0,transition:!1},n)},Pl=(n={})=>Object.assign({index:-1,slides:[],dim:0,pos:-1},n);class de extends Ht{constructor(e,t){super(t),Object.defineProperty(this,"instance",{enumerable:!0,configurable:!0,writable:!0,value:e})}attach(){}detach(){}}const Ml={classes:{list:"f-carousel__dots",isDynamic:"is-dynamic",hasDots:"has-dots",dot:"f-carousel__dot",isBeforePrev:"is-before-prev",isPrev:"is-prev",isCurrent:"is-current",isNext:"is-next",isAfterNext:"is-after-next"},dotTpl:'',dynamicFrom:11,maxCount:1/0,minCount:2};class Bs extends de{constructor(){super(...arguments),Object.defineProperty(this,"isDynamic",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"list",{enumerable:!0,configurable:!0,writable:!0,value:null})}onRefresh(){this.refresh()}build(){let e=this.list;if(!e){e=document.createElement("ul"),k(e,this.cn("list")),e.setAttribute("role","tablist");const t=this.instance.container;t.appendChild(e),k(t,this.cn("hasDots")),this.list=e}return e}refresh(){var e;const t=this.instance.pages.length,i=Math.min(2,this.option("minCount")),r=Math.max(2e3,this.option("maxCount")),a=this.option("dynamicFrom");if(tr)return void this.cleanup();const l=typeof a=="number"&&t>5&&t>=a,o=!this.list||this.isDynamic!==l||this.list.children.length!==t;o&&this.cleanup();const c=this.build();if(me(c,this.cn("isDynamic"),!!l),o)for(let u=0;u=t-1&&a.setAttribute(_t,"")))}addBtn(e){var t;const i=this.instance,r=document.createElement("button");r.setAttribute("tabindex","0"),r.setAttribute("title",i.localize(`{{${e.toUpperCase()}}}`)),k(r,this.cn("button")+" "+this.cn(e===St?"isNext":"isPrev"));const a=i.isRTL?e===St?Cn:St:e;var l;return r.innerHTML=i.localize(this.option(`${a}Tpl`)),r.dataset[`carousel${l=e,l?l.match("^[a-z]")?l.charAt(0).toUpperCase()+l.substring(1):l:""}`]="true",(t=this.container)===null||t===void 0||t.appendChild(r),r}build(){const e=this.instance.container,t=this.cn("container");let{container:i,prev:r,next:a}=this;i||(i=e.querySelector("."+t),this.isDom=!!i),i||(i=document.createElement("div"),k(i,t),e.appendChild(i)),this.container=i,a||(a=i.querySelector("[data-carousel-next]")),a||(a=this.addBtn(St)),this.next=a,r||(r=i.querySelector("[data-carousel-prev]")),r||(r=this.addBtn(Cn)),this.prev=r}cleanup(){this.isDom||(this.prev&&this.prev.remove(),this.next&&this.next.remove(),this.container&&this.container.remove()),this.prev=null,this.next=null,this.container=null,this.isDom=!1}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(Hs,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{classes:{container:"f-carousel__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"},nextTpl:'',prevTpl:''}});class $s extends de{constructor(){super(...arguments),Object.defineProperty(this,"selectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nav",{enumerable:!0,configurable:!0,writable:!0,value:null})}addAsTargetFor(e){this.target=this.instance,this.nav=e,this.attachEvents()}addAsNavFor(e){this.nav=this.instance,this.target=e,this.attachEvents()}attachEvents(){const{nav:e,target:t}=this;e&&t&&(e.options.initialSlide=t.options.initialPage,e.state===W.Ready?this.onNavReady(e):e.on("ready",this.onNavReady),t.state===W.Ready?this.onTargetReady(t):t.on("ready",this.onTargetReady))}onNavReady(e){e.on("createSlide",this.onNavCreateSlide),e.on("Panzoom.click",this.onNavClick),e.on("Panzoom.touchEnd",this.onNavTouch),this.onTargetChange()}onTargetReady(e){e.on("change",this.onTargetChange),e.on("Panzoom.refresh",this.onTargetChange),this.onTargetChange()}onNavClick(e,t,i){this.onNavTouch(e,e.panzoom,i)}onNavTouch(e,t,i){var r,a;if(Math.abs(t.dragOffset.x)>3||Math.abs(t.dragOffset.y)>3)return;const l=i.target,{nav:o,target:c}=this;if(!o||!c||!l)return;const d=l.closest("[data-index]");if(i.stopPropagation(),i.preventDefault(),!d)return;const h=parseInt(d.dataset.index||"",10)||0,u=c.getPageForSlide(h),m=o.getPageForSlide(h);o.slideTo(m),c.slideTo(u,{friction:((a=(r=this.nav)===null||r===void 0?void 0:r.plugins)===null||a===void 0?void 0:a.Sync.option("friction"))||0}),this.markSelectedSlide(h)}onNavCreateSlide(e,t){t.index===this.selectedIndex&&this.markSelectedSlide(t.index)}onTargetChange(){var e,t;const{target:i,nav:r}=this;if(!i||!r||r.state!==W.Ready||i.state!==W.Ready)return;const a=(t=(e=i.pages[i.page])===null||e===void 0?void 0:e.slides[0])===null||t===void 0?void 0:t.index,l=r.getPageForSlide(a);this.markSelectedSlide(a),r.slideTo(l,r.prevPage===null&&i.prevPage===null?{friction:0}:void 0)}markSelectedSlide(e){const t=this.nav;t&&t.state===W.Ready&&(this.selectedIndex=e,[...t.slides].map(i=>{i.el&&i.el.classList[i.index===e?"add":"remove"]("is-nav-selected")}))}attach(){const e=this;let t=e.options.target,i=e.options.nav;t?e.addAsNavFor(t):i&&e.addAsTargetFor(i)}detach(){const e=this,t=e.nav,i=e.target;t&&(t.off("ready",e.onNavReady),t.off("createSlide",e.onNavCreateSlide),t.off("Panzoom.click",e.onNavClick),t.off("Panzoom.touchEnd",e.onNavTouch)),e.nav=null,i&&(i.off("ready",e.onTargetReady),i.off("refresh",e.onTargetChange),i.off("change",e.onTargetChange)),e.target=null}}Object.defineProperty($s,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{friction:.35}});const kl={Navigation:Hs,Dots:Bs,Sync:$s},Tt="animationend",Pn="isSelected",Et="slide";class ze extends Hi{get axis(){return this.isHorizontal?"e":"f"}get isEnabled(){return this.state===W.Ready}get isInfinite(){let e=!1;const{contentDim:t,viewportDim:i,pages:r,slides:a}=this,l=a[0];return r.length>=2&&l&&t+l.dim>=i&&(e=this.option("infinite")),e}get isRTL(){return this.option("direction")==="rtl"}get isHorizontal(){return this.option("axis")==="x"}constructor(e,t={},i={}){if(super(),Object.defineProperty(this,"bp",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"lp",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"userOptions",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:W.Init}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"prevPage",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewport",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"slides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"panzoom",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"inTransition",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"contentDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"viewportDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),typeof e=="string"&&(e=document.querySelector(e)),!e||!Q(e))throw new Error("No Element found");this.container=e,this.slideNext=Tn(this.slideNext.bind(this),150),this.slidePrev=Tn(this.slidePrev.bind(this),150),this.userOptions=t,this.userPlugins=i,queueMicrotask(()=>{this.processOptions()})}processOptions(){var e,t;const i=ee({},ze.defaults,this.userOptions);let r="";const a=i.breakpoints;if(a&&Mi(a))for(const[l,o]of Object.entries(a))window.matchMedia(l).matches&&Mi(o)&&(r+=l,ee(i,o));r===this.bp&&this.state!==W.Init||(this.bp=r,this.state===W.Ready&&(i.initialSlide=((t=(e=this.pages[this.page])===null||e===void 0?void 0:e.slides[0])===null||t===void 0?void 0:t.index)||0),this.state!==W.Init&&this.destroy(),super.setOptions(i),this.option("enabled")===!1?this.attachEvents():setTimeout(()=>{this.init()},0))}init(){this.state=W.Init,this.emit("init"),this.attachPlugins(Object.assign(Object.assign({},ze.Plugins),this.userPlugins)),this.emit("attachPlugins"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.setInitialPosition(),this.initPanzoom(),this.attachEvents(),this.state=W.Ready,this.emit("ready")}initLayout(){const{container:e}=this,t=this.option("classes");k(e,this.cn("container")),me(e,t.isLTR,!this.isRTL),me(e,t.isRTL,this.isRTL),me(e,t.isVertical,!this.isHorizontal),me(e,t.isHorizontal,this.isHorizontal);let i=this.option("viewport")||e.querySelector(`.${t.viewport}`);i||(i=document.createElement("div"),k(i,t.viewport),i.append(...En(e,`.${t.slide}`)),e.prepend(i)),i.addEventListener("scroll",this.onScroll);let r=this.option("track")||e.querySelector(`.${t.track}`);r||(r=document.createElement("div"),k(r,t.track),r.append(...Array.from(i.childNodes))),r.setAttribute("aria-live","polite"),i.contains(r)||i.prepend(r),this.viewport=i,this.track=r,this.emit("initLayout")}initSlides(){const{track:e}=this;if(!e)return;const t=[...this.slides],i=[];[...En(e,`.${this.cn(Et)}`)].forEach(r=>{if(Q(r)){const a=ri({el:r,isDom:!0,index:this.slides.length});i.push(a)}});for(let r of[...this.option("slides",[])||[],...t])i.push(ri(r));this.slides=i;for(let r=0;r!(this.pages.length<2&&!t.options.infinite),bounds:()=>this.getBounds(),maxVelocity:t=>Math.abs(t.target[this.axis]-t.current[this.axis])<2*this.viewportDim?100:0},e)),this.panzoom.on("*",(t,i,...r)=>{this.emit(`Panzoom.${i}`,t,...r)}),this.panzoom.on("decel",this.onDecel),this.panzoom.on("refresh",this.onRefresh),this.panzoom.on("beforeTransform",this.onBeforeTransform),this.panzoom.on("endAnimation",this.onEndAnimation)}attachEvents(){const e=this.container;e&&(e.addEventListener("click",this.onClick,{passive:!1,capture:!1}),e.addEventListener("slideTo",this.onSlideTo)),window.addEventListener("resize",this.onResize)}createPages(){let e=[];const{contentDim:t,viewportDim:i}=this;let r=this.option("slidesPerPage");r=(r==="auto"||t<=i)&&this.option("fill")!==!1?1/0:parseFloat(r+"");let a=0,l=0,o=0;for(const c of this.slides)(!e.length||l+c.dim-i>.05||o>=r)&&(e.push(Pl()),a=e.length-1,l=0,o=0),e[a].slides.push(c),l+=c.dim+c.gap,o++;return e}processPages(){const e=this.pages,{contentDim:t,viewportDim:i,isInfinite:r}=this,a=this.option("center"),l=this.option("fill"),o=l&&a&&t>i&&!r;if(e.forEach((h,u)=>{var m;h.index=u,h.pos=((m=h.slides[0])===null||m===void 0?void 0:m.pos)||0,h.dim=0;for(const[p,f]of h.slides.entries())h.dim+=f.dim,p=t-.5*i?h.pos=t-i:a&&(h.pos+=-.5*(i-h.dim))}),e.forEach(h=>{l&&!r&&t>i&&(h.pos=Math.max(h.pos,0),h.pos=Math.min(h.pos,t-i)),h.pos=T(h.pos,1e3),h.dim=T(h.dim,1e3),Math.abs(h.pos)<=.1&&(h.pos=0)}),r)return e;const c=[];let d;return e.forEach(h=>{const u=Object.assign({},h);d&&u.pos===d.pos?(d.dim+=u.dim,d.slides=[...d.slides,...u.slides]):(u.index=c.length,d=u,c.push(u))}),c}getPageFromIndex(e=0){const t=this.pages.length;let i;return e=parseInt((e||0).toString())||0,i=this.isInfinite?(e%t+t)%t:Math.max(Math.min(e,t-1),0),i}getSlideMetrics(e){var t,i;const r=this.isHorizontal?"width":"height";let a=0,l=0,o=e.el;const c=!(!o||o.parentNode);if(o?a=parseFloat(o.dataset[r]||"")||0:(o=document.createElement("div"),o.style.visibility="hidden",(this.track||document.body).prepend(o)),k(o,this.cn(Et)+" "+e.class+" "+e.customClass),a)o.style[r]=`${a}px`,o.style[r==="width"?"height":"width"]="";else{c&&(this.track||document.body).prepend(o),a=o.getBoundingClientRect()[r]*Math.max(1,((t=window.visualViewport)===null||t===void 0?void 0:t.scale)||1);let h=o[this.isHorizontal?"offsetWidth":"offsetHeight"];h-1>a&&(a=h)}const d=getComputedStyle(o);return d.boxSizing==="content-box"&&(this.isHorizontal?(a+=parseFloat(d.paddingLeft)||0,a+=parseFloat(d.paddingRight)||0):(a+=parseFloat(d.paddingTop)||0,a+=parseFloat(d.paddingBottom)||0)),l=parseFloat(d[this.isHorizontal?"marginRight":"marginBottom"])||0,c?(i=o.parentElement)===null||i===void 0||i.removeChild(o):e.el||o.remove(),{dim:T(a,1e3),gap:T(l,1e3)}}getBounds(){const{isInfinite:e,isRTL:t,isHorizontal:i,pages:r}=this;let a={min:0,max:0};if(e)a={min:-1/0,max:1/0};else if(r.length){const l=r[0].pos,o=r[r.length-1].pos;a=t&&i?{min:l,max:o}:{min:-1*o,max:-1*l}}return{x:i?a:{min:0,max:0},y:i?{min:0,max:0}:a}}repositionSlides(){let e,{isHorizontal:t,isRTL:i,isInfinite:r,viewport:a,viewportDim:l,contentDim:o,page:c,pages:d,slides:h,panzoom:u}=this,m=0,p=0,f=0,v=0;u?v=-1*u.current[this.axis]:d[c]&&(v=d[c].pos||0),e=t?i?"right":"left":"top",i&&t&&(v*=-1);for(const y of h){const w=y.el;w?(e==="top"?(w.style.right="",w.style.left=""):w.style.top="",y.index!==m?w.style[e]=p===0?"":`${T(p,1e3)}px`:w.style[e]="",f+=y.dim+y.gap,m++):p+=y.dim+y.gap}if(r&&f&&a){let y=getComputedStyle(a),w="padding",_=t?"Right":"Bottom",M=parseFloat(y[w+(t?"Left":"Top")]);v-=M,l+=M,l+=parseFloat(y[w+_]);for(const C of h)C.el&&(T(C.pos)T(o-l)&&(C.el.style[e]=`${T(p+f,1e3)}px`),T(C.pos+C.gap)>=T(o-l)&&T(C.pos)>T(v+l)&&T(v)1&&(b=d[x[0]],g=d[x[1]]),b&&g){let y=0;for(const w of h)w.el?this.inTransition.has(w.index)&&b.slides.indexOf(w)<0&&(w.el.style[e]=`${T(y+(b.pos-g.pos),1e3)}px`):y+=w.dim+w.gap}}createSlideEl(e){const{track:t,slides:i}=this;if(!t||!e||e.el&&e.el.parentNode)return;const r=e.el||document.createElement("div");k(r,this.cn(Et)),k(r,e.class),k(r,e.customClass);const a=e.html;a&&(a instanceof HTMLElement?r.appendChild(a):r.innerHTML=e.html+"");const l=[];i.forEach((h,u)=>{h.el&&l.push(u)});const o=e.index;let c=null;l.length&&(c=i[l.reduce((h,u)=>Math.abs(u-o)1)return!1;let u=e>o?1:-1;this.isInfinite&&(o===0&&e===c.length-1&&(u=-1),o===c.length-1&&e===0&&(u=1));const m=c[h].pos*(this.isRTL?1:-1);if(o===h&&Math.abs(m-d.target[this.axis])<1)return!1;this.clearTransitions();const p=d.isResting;k(this.container,this.cn("inTransition"));const f=((a=c[o])===null||a===void 0?void 0:a.slides[0])||null,v=((l=c[h])===null||l===void 0?void 0:l.slides[0])||null;this.inTransition.add(v.index),this.createSlideEl(v);let b=f.el,g=v.el;p||t===Et||(t="fadeFast",b=null);const x=this.isRTL?"next":"prev",y=this.isRTL?"prev":"next";return b&&(this.inTransition.add(f.index),f.transition=t,b.addEventListener(Tt,this.onAnimationEnd),b.classList.add(`f-${t}Out`,`to-${u>0?y:x}`)),g&&(v.transition=t,g.addEventListener(Tt,this.onAnimationEnd),g.classList.add(`f-${t}In`,`from-${u>0?x:y}`)),d.current[this.axis]=m,d.target[this.axis]=m,d.requestTick(),this.onChange(h),!0}manageSlideVisiblity(){const e=new Set,t=new Set,i=this.getVisibleSlides(parseFloat(this.option("preload",0)+"")||0);for(const r of this.slides)i.has(r)?e.add(r):t.add(r);for(const r of this.inTransition)e.add(this.slides[r]);for(const r of e)this.createSlideEl(r),this.lazyLoadSlide(r);for(const r of t)e.has(r)||this.removeSlideEl(r);this.markSelectedSlides(),this.repositionSlides()}markSelectedSlides(){if(!this.pages[this.page]||!this.pages[this.page].slides)return;const e="aria-hidden";let t=this.cn(Pn);if(t)for(const i of this.slides){const r=i.el;r&&(r.dataset.index=`${i.index}`,r.classList.contains("f-thumbs__slide")?this.getVisibleSlides(0).has(i)?r.removeAttribute(e):r.setAttribute(e,"true"):this.pages[this.page].slides.includes(i)?(r.classList.contains(t)||(k(r,t),this.emit("selectSlide",i)),r.removeAttribute(e)):(r.classList.contains(t)&&(R(r,t),this.emit("unselectSlide",i)),r.setAttribute(e,"true")))}}flipInfiniteTrack(){const{axis:e,isHorizontal:t,isInfinite:i,isRTL:r,viewportDim:a,contentDim:l}=this,o=this.panzoom;if(!o||!i)return;let c=o.current[e],d=o.target[e]-c,h=0,u=.5*a;r&&t?(c<-u&&(h=-1,c+=l),c>l-u&&(h=1,c-=l)):(c>u&&(h=1,c-=l),c<-l+u&&(h=-1,c+=l)),h&&(o.current[e]=c,o.target[e]=c+d)}lazyLoadImg(e,t){const i=this,r="f-fadeIn",a="is-preloading";let l=!1,o=null;const c=()=>{l||(l=!0,o&&(o.remove(),o=null),R(t,a),t.complete&&(k(t,r),setTimeout(()=>{R(t,r)},350)),this.option("adaptiveHeight")&&e.el&&this.pages[this.page].slides.indexOf(e)>-1&&(i.updateMetrics(),i.setViewportHeight()),this.emit("load",e))};k(t,a),t.src=t.dataset.lazySrcset||t.dataset.lazySrc||"",delete t.dataset.lazySrc,delete t.dataset.lazySrcset,t.addEventListener("error",()=>{c()}),t.addEventListener("load",()=>{c()}),setTimeout(()=>{const d=t.parentNode;d&&e.el&&(t.complete?c():l||(o=pe($i),d.insertBefore(o,t)))},300)}lazyLoadSlide(e){const t=e&&e.el;if(!t)return;const i=new Set;let r=Array.from(t.querySelectorAll("[data-lazy-src],[data-lazy-srcset]"));t.dataset.lazySrc&&r.push(t),r.map(a=>{a instanceof HTMLImageElement?i.add(a):a instanceof HTMLElement&&a.dataset.lazySrc&&(a.style.backgroundImage=`url('${a.dataset.lazySrc}')`,delete a.dataset.lazySrc)});for(const a of i)this.lazyLoadImg(e,a)}onAnimationEnd(e){var t;const i=e.target,r=i?parseInt(i.dataset.index||"",10)||0:-1,a=this.slides[r],l=e.animationName;if(!i||!a||!l)return;const o=!!this.inTransition.has(r)&&a.transition;o&&l.substring(0,o.length+2)===`f-${o}`&&this.inTransition.delete(r),this.inTransition.size||this.clearTransitions(),r===this.page&&(!((t=this.panzoom)===null||t===void 0)&&t.isResting)&&this.emit("settle")}onDecel(e,t=0,i=0,r=0,a=0){if(this.option("dragFree"))return void this.setPageFromPosition();const{isRTL:l,isHorizontal:o,axis:c,pages:d}=this,h=d.length,u=Math.abs(Math.atan2(i,t)/(Math.PI/180));let m=0;if(m=u>45&&u<135?o?0:i:o?t:0,!h)return;let p=this.page,f=l&&o?1:-1;const v=e.current[c]*f;let{pageIndex:b}=this.getPageFromPosition(v);Math.abs(m)>5?(d[p].dim=e&&(this.page+=m.length),this.updateMetrics(),o){const p=((a=this.pages[this.page])===null||a===void 0?void 0:a.pos)||0,f=((l=this.pages[this.page])===null||l===void 0?void 0:l.dim)||0,v=this.pages.length||1,b=this.isRTL?d-f:f-d,g=this.isRTL?c-p:p-c;h&&v===1?(e<=this.page&&(o.current[this.axis]-=b,o.target[this.axis]-=b),o.panTo({[this.isHorizontal?"x":"y"]:-1*p})):g&&e<=this.page&&(o.target[this.axis]-=g,o.current[this.axis]-=g,o.requestTick())}for(const p of m)this.emit("initSlide",p,p.index)}prependSlide(e){this.addSlide(0,e)}appendSlide(e){this.addSlide(this.slides.length,e)}removeSlide(e){const t=this.slides.length;e=(e%t+t)%t;const i=this.slides[e];if(i){this.removeSlideEl(i,!0),this.slides.splice(e,1);for(let r=0;rthis.page?-1:1;let c=-1*a.current.e,d=T((c-o.pos)/(1*o.dim),1e3),h=d,u=d;this.isInfinite&&i!==!0&&(h=T((c-o.pos+l)/(1*o.dim),1e3),u=T((c-o.pos-l)/(1*o.dim),1e3));let m=[d,h,u].reduce(function(p,f){return Math.abs(f)1?1:m<-1?-1:m}setViewportHeight(){const{page:e,pages:t,viewport:i,isHorizontal:r}=this;if(!i||!t[e])return;let a=0;r&&this.track&&(this.track.style.height="auto",t[e].slides.forEach(l=>{l.el&&(a=Math.max(a,l.el.offsetHeight))})),i.style.height=a?`${a}px`:""}getPageForSlide(e){for(const t of this.pages)for(const i of t.slides)if(i.index===e)return t.index;return-1}getVisibleSlides(e=0){var t;const i=new Set;let{panzoom:r,contentDim:a,viewportDim:l,pages:o,page:c}=this;if(l){a=a+((t=this.slides[this.slides.length-1])===null||t===void 0?void 0:t.gap)||0;let d=0;d=r&&r.state!==j.Init&&r.state!==j.Destroy?-1*r.current[this.axis]:o[c]&&o[c].pos||0,this.isInfinite&&(d-=Math.floor(d/a)*a),this.isRTL&&this.isHorizontal&&(d*=-1);const h=d-l*e,u=d+l*(e+1),m=this.isInfinite?[-1,0,1]:[0];for(const p of this.slides)for(const f of m){const v=p.pos+f*a,b=v+p.dim+p.gap;vh&&i.add(p)}}return i}getPageFromPosition(e){const{viewportDim:t,contentDim:i,slides:r,pages:a,panzoom:l}=this,o=a.length,c=r.length,d=r[0],h=r[c-1],u=this.option("center");let m=0,p=0,f=0,v=e===void 0?-1*((l==null?void 0:l.target[this.axis])||0):e;u&&(v+=.5*t),this.isInfinite?(vh.pos+h.dim+.5*h.gap&&(v-=i,f=1)):v=Math.max(d.pos||0,Math.min(v,h.pos));let b=h,g=r.find(x=>{const y=x.pos-.5*b.gap,w=x.pos+x.dim+.5*x.gap;return b=x,v>=y&&v{this.removeSlideEl(c)}),this.detachPlugins(),t&&(t.removeEventListener("scroll",this.onScroll),t.offsetParent&&i&&i.offsetParent&&t.replaceWith(...i.childNodes));for(const[c,d]of Object.entries(l))c!=="container"&&d&&e.classList.remove(d);this.track=null,this.viewport=null,this.page=0,this.slides=[];const o=this.events.get("ready");this.events=new Map,o&&this.events.set("ready",o)}}Object.defineProperty(ze,"Panzoom",{enumerable:!0,configurable:!0,writable:!0,value:Fe}),Object.defineProperty(ze,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Cl}),Object.defineProperty(ze,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:kl});const Gs=function(n){if(!Q(n))return 0;const e=window.scrollY,t=window.innerHeight,i=e+t,r=n.getBoundingClientRect(),a=r.y+e,l=r.height,o=a+l;if(e>o||io||ai)return 100;let c=l;ai&&(c-=o-i);const d=c/t*100;return Math.round(d)},ct=!(typeof window>"u"||!window.document||!window.document.createElement);let ai;const li=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'].join(","),Mn=n=>{if(n&&ct){ai===void 0&&document.createElement("div").focus({get preventScroll(){return ai=!0,!1}});try{if(ai)n.focus({preventScroll:!0});else{const e=window.scrollY||document.body.scrollTop,t=window.scrollX||document.body.scrollLeft;n.focus(),document.body.scrollTo({top:e,left:t,behavior:"auto"})}}catch{}}},Vs=()=>{const n=document;let e,t="",i="",r="";return n.fullscreenEnabled?(t="requestFullscreen",i="exitFullscreen",r="fullscreenElement"):n.webkitFullscreenEnabled&&(t="webkitRequestFullscreen",i="webkitExitFullscreen",r="webkitFullscreenElement"),t&&(e={request:function(a=n.documentElement){return t==="webkitRequestFullscreen"?a[t](Element.ALLOW_KEYBOARD_INPUT):a[t]()},exit:function(){return n[r]&&n[i]()},isFullscreen:function(){return n[r]}}),e},ki={animated:!0,autoFocus:!0,backdropClick:"close",Carousel:{classes:{container:"fancybox__carousel",viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"}},closeButton:"auto",closeExisting:!1,commonCaption:!1,compact:()=>window.matchMedia("(max-width: 578px), (max-height: 578px)").matches,contentClick:"toggleZoom",contentDblClick:!1,defaultType:"image",defaultDisplay:"flex",dragToClose:!0,Fullscreen:{autoStart:!1},groupAll:!1,groupAttr:"data-fancybox",hideClass:"f-fadeOut",hideScrollbar:!0,idle:3500,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"prev",ArrowDown:"next",ArrowRight:"next",ArrowLeft:"prev"},l10n:Object.assign(Object.assign({},Fs),{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page",TOGGLE_ZOOM:"Toggle zoom level",TOGGLE_THUMBS:"Toggle thumbnails",TOGGLE_SLIDESHOW:"Toggle slideshow",TOGGLE_FULLSCREEN:"Toggle full-screen mode",DOWNLOAD:"Download"}),parentEl:null,placeFocusBack:!0,showClass:"f-zoomInUp",startIndex:0,tpl:{closeButton:'',main:``},trapFocus:!0,wheel:"zoom"};var Y,U;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Closing=2]="Closing",n[n.CustomClosing=3]="CustomClosing",n[n.Destroy=4]="Destroy"})(Y||(Y={})),function(n){n[n.Loading=0]="Loading",n[n.Opening=1]="Opening",n[n.Ready=2]="Ready",n[n.Closing=3]="Closing"}(U||(U={}));let kn="",at=!1,Ct=!1,Ae=null;const Ws=()=>{let n="",e="";const t=z.getInstance();if(t){const i=t.carousel,r=t.getSlide();if(i&&r){let a=r.slug||void 0,l=r.triggerEl||void 0;e=a||t.option("slug")||"",!e&&l&&l.dataset&&(e=l.dataset.fancybox||""),e&&e!=="true"&&(n="#"+e+(!a&&i.slides.length>1?"-"+(r.index+1):""))}}return{hash:n,slug:e,index:1}},$t=()=>{const n=new URL(document.URL).hash,e=n.slice(1).split("-"),t=e[e.length-1],i=t&&/^\+?\d+$/.test(t)&&parseInt(e.pop()||"1",10)||1;return{hash:n,slug:e.join("-"),index:i}},Xs=()=>{const{slug:n,index:e}=$t();if(!n)return;let t=document.querySelector(`[data-slug="${n}"]`);if(t&&t.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),z.getInstance())return;const i=document.querySelectorAll(`[data-fancybox="${n}"]`);i.length&&(t=i[e-1],t&&t.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))},qs=()=>{if(z.defaults.Hash===!1)return;const n=z.getInstance();if((n==null?void 0:n.options.Hash)===!1)return;const{slug:e,index:t}=$t(),{slug:i}=Ws();n&&(e===i?n.jumpTo(t-1):(at=!0,n.close())),Xs()},Ys=()=>{Ae&&clearTimeout(Ae),queueMicrotask(()=>{qs()})},Ln=()=>{window.addEventListener("hashchange",Ys,!1),setTimeout(()=>{qs()},500)};ct&&(/complete|interactive|loaded/.test(document.readyState)?Ln():document.addEventListener("DOMContentLoaded",Ln));const Pt="is-zooming-in";class Us extends de{onCreateSlide(e,t,i){const r=this.instance.optionFor(i,"src")||"";i.el&&i.type==="image"&&typeof r=="string"&&this.setImage(i,r)}onRemoveSlide(e,t,i){i.panzoom&&i.panzoom.destroy(),i.panzoom=void 0,i.imageEl=void 0}onChange(e,t,i,r){R(this.instance.container,Pt);for(const a of t.slides){const l=a.panzoom;l&&a.index!==i&&l.reset(.35)}}onClose(){var e;const t=this.instance,i=t.container,r=t.getSlide();if(!i||!i.parentElement||!r)return;const{el:a,contentEl:l,panzoom:o,thumbElSrc:c}=r;if(!a||!c||!l||!o||o.isContentLoading||o.state===j.Init||o.state===j.Destroy)return;o.updateMetrics();let d=this.getZoomInfo(r);if(!d)return;this.instance.state=Y.CustomClosing,i.classList.remove(Pt),i.classList.add("is-zooming-out"),l.style.backgroundImage=`url('${c}')`;const h=i.getBoundingClientRect();(((e=window.visualViewport)===null||e===void 0?void 0:e.scale)||1)===1&&Object.assign(i.style,{position:"absolute",top:`${i.offsetTop+window.scrollY}px`,left:`${i.offsetLeft+window.scrollX}px`,bottom:"auto",right:"auto",width:`${h.width}px`,height:`${h.height}px`,overflow:"hidden"});const{x:u,y:m,scale:p,opacity:f}=d;if(f){const v=((b,g,x,y)=>{const w=g-b,_=y-x;return M=>x+((M-b)/w*_||0)})(o.scale,p,1,0);o.on("afterTransform",()=>{l.style.opacity=v(o.scale)+""})}o.on("endAnimation",()=>{t.destroy()}),o.target.a=p,o.target.b=0,o.target.c=0,o.target.d=p,o.panTo({x:u,y:m,scale:p,friction:f?.2:.33,ignoreBounds:!0}),o.isResting&&t.destroy()}setImage(e,t){const i=this.instance;e.src=t,this.process(e,t).then(r=>{const{contentEl:a,imageEl:l,thumbElSrc:o,el:c}=e;if(i.isClosing()||!a||!l)return;a.offsetHeight;const d=!!i.isOpeningSlide(e)&&this.getZoomInfo(e);if(this.option("protected")&&c){c.addEventListener("contextmenu",m=>{m.preventDefault()});const u=document.createElement("div");k(u,"fancybox-protected"),a.appendChild(u)}if(o&&d){const u=r.contentRect,m=Math.max(u.fullWidth,u.fullHeight);let p=null;!d.opacity&&m>1200&&(p=document.createElement("img"),k(p,"fancybox-ghost"),p.src=o,a.appendChild(p));const f=()=>{p&&(k(p,"f-fadeFastOut"),setTimeout(()=>{p&&(p.remove(),p=null)},200))};(h=o,new Promise((v,b)=>{const g=new Image;g.onload=v,g.onerror=b,g.src=h})).then(()=>{i.hideLoading(e),e.state=U.Opening,this.instance.emit("reveal",e),this.zoomIn(e).then(()=>{f(),this.instance.done(e)},()=>{}),p&&setTimeout(()=>{f()},m>2500?800:200)},()=>{i.hideLoading(e),i.revealContent(e)})}else{const u=this.optionFor(e,"initialSize"),m=this.optionFor(e,"zoom"),p={event:i.prevMouseMoveEvent||i.options.event,friction:m?.12:0};let f=i.optionFor(e,"showClass")||void 0,v=!0;i.isOpeningSlide(e)&&(u==="full"?r.zoomToFull(p):u==="cover"?r.zoomToCover(p):u==="max"?r.zoomToMax(p):v=!1,r.stop("current")),v&&f&&(f=r.isDragging?"f-fadeIn":""),i.hideLoading(e),i.revealContent(e,f)}var h},()=>{i.setError(e,"{{IMAGE_ERROR}}")})}process(e,t){return new Promise((i,r)=>{var a;const l=this.instance,o=e.el;l.clearContent(e),l.showLoading(e);let c=this.optionFor(e,"content");if(typeof c=="string"&&(c=pe(c)),!c||!Q(c)){if(c=document.createElement("img"),c instanceof HTMLImageElement){let d="",h=e.caption;d=typeof h=="string"&&h?h.replace(/<[^>]+>/gi,"").substring(0,1e3):`Image ${e.index+1} of ${((a=l.carousel)===null||a===void 0?void 0:a.pages.length)||1}`,c.src=t||"",c.alt=d,c.draggable=!1,e.srcset&&c.setAttribute("srcset",e.srcset),this.instance.isOpeningSlide(e)&&(c.fetchPriority="high")}e.sizes&&c.setAttribute("sizes",e.sizes)}k(c,"fancybox-image"),e.imageEl=c,l.setContent(e,c,!1),e.panzoom=new Fe(o,ee({transformParent:!0},this.option("Panzoom")||{},{content:c,width:(d,h)=>l.optionFor(e,"width","auto",h)||"auto",height:(d,h)=>l.optionFor(e,"height","auto",h)||"auto",wheel:()=>{const d=l.option("wheel");return(d==="zoom"||d=="pan")&&d},click:(d,h)=>{var u,m;if(l.isCompact||l.isClosing()||e.index!==((u=l.getSlide())===null||u===void 0?void 0:u.index))return!1;if(h){const f=h.composedPath()[0];if(["A","BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].includes(f.nodeName))return!1}let p=!h||h.target&&((m=e.contentEl)===null||m===void 0?void 0:m.contains(h.target));return l.option(p?"contentClick":"backdropClick")||!1},dblClick:()=>l.isCompact?"toggleZoom":l.option("contentDblClick")||!1,spinner:!1,panOnlyZoomed:!0,wheelLimit:1/0,on:{ready:d=>{i(d)},error:()=>{r()},destroy:()=>{r()}}}))})}zoomIn(e){return new Promise((t,i)=>{const r=this.instance,a=r.container,{panzoom:l,contentEl:o,el:c}=e;l&&l.updateMetrics();const d=this.getZoomInfo(e);if(!(d&&c&&o&&l&&a))return void i();const{x:h,y:u,scale:m,opacity:p}=d,f=()=>{e.state!==U.Closing&&(p&&(o.style.opacity=Math.max(Math.min(1,1-(1-l.scale)/(1-m)),0)+""),l.scale>=1&&l.scale>l.targetScale-.1&&t(l))},v=x=>{(x.scale<.99||x.scale>1.01)&&!x.isDragging||(R(a,Pt),o.style.opacity="",x.off("endAnimation",v),x.off("touchStart",v),x.off("afterTransform",f),t(x))};l.on("endAnimation",v),l.on("touchStart",v),l.on("afterTransform",f),l.on(["error","destroy"],()=>{i()}),l.panTo({x:h,y:u,scale:m,friction:0,ignoreBounds:!0}),l.stop("current");const b={event:l.panMode==="mousemove"?r.prevMouseMoveEvent||r.options.event:void 0},g=this.optionFor(e,"initialSize");k(a,Pt),r.hideLoading(e),g==="full"?l.zoomToFull(b):g==="cover"?l.zoomToCover(b):g==="max"?l.zoomToMax(b):l.reset(.172)})}getZoomInfo(e){const{el:t,imageEl:i,thumbEl:r,panzoom:a}=e,l=this.instance,o=l.container;if(!t||!i||!r||!a||Gs(r)<3||!this.optionFor(e,"zoom")||!o||l.state===Y.Destroy||getComputedStyle(o).getPropertyValue("--f-images-zoom")==="0")return!1;const c=window.visualViewport||null;if((c?c.scale:1)!==1)return!1;let{top:d,left:h,width:u,height:m}=r.getBoundingClientRect(),{top:p,left:f,fitWidth:v,fitHeight:b}=a.contentRect;if(!(u&&m&&v&&b))return!1;const g=a.container.getBoundingClientRect();f+=g.left,p+=g.top;const x=-1*(f+.5*v-(h+.5*u)),y=-1*(p+.5*b-(d+.5*m)),w=u/v;let _=this.option("zoomOpacity")||!1;return _==="auto"&&(_=Math.abs(u/m-v/b)>.1),{x,y,scale:w,opacity:_}}attach(){const e=this,t=e.instance;t.on("Carousel.change",e.onChange),t.on("Carousel.createSlide",e.onCreateSlide),t.on("Carousel.removeSlide",e.onRemoveSlide),t.on("close",e.onClose)}detach(){const e=this,t=e.instance;t.off("Carousel.change",e.onChange),t.off("Carousel.createSlide",e.onCreateSlide),t.off("Carousel.removeSlide",e.onRemoveSlide),t.off("close",e.onClose)}}Object.defineProperty(Us,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{initialSize:"fit",Panzoom:{maxScale:1},protected:!1,zoom:!0,zoomOpacity:"auto"}}),typeof SuppressedError=="function"&&SuppressedError;const oi="html",An="image",ci="map",xe="youtube",Ce="vimeo",tt="html5video",On=(n,e={})=>{const t=new URL(n),i=new URLSearchParams(t.search),r=new URLSearchParams;for(const[o,c]of[...i,...Object.entries(e)]){let d=c+"";if(o==="t"){let h=d.match(/((\d*)m)?(\d*)s?/);h&&r.set("start",60*parseInt(h[2]||"0")+parseInt(h[3]||"0")+"")}else r.set(o,d)}let a=r+"",l=n.match(/#t=((.*)?\d+s)/);return l&&(a+=`#t=${l[1]}`),a},Ll={ajax:null,autoSize:!0,iframeAttr:{allow:"autoplay; fullscreen",scrolling:"auto"},preload:!0,videoAutoplay:!0,videoRatio:16/9,videoTpl:``,videoFormat:"",vimeo:{byline:1,color:"00adef",controls:1,dnt:1,muted:0},youtube:{controls:1,enablejsapi:1,nocookie:1,rel:0,fs:1}},Al=["image","html","ajax","inline","clone","iframe","map","pdf","html5video","youtube","vimeo"];class Zs extends de{onBeforeInitSlide(e,t,i){this.processType(i)}onCreateSlide(e,t,i){this.setContent(i)}onClearContent(e,t){t.xhr&&(t.xhr.abort(),t.xhr=null);const i=t.iframeEl;i&&(i.onload=i.onerror=null,i.src="//about:blank",t.iframeEl=null);const r=t.contentEl,a=t.placeholderEl;if(t.type==="inline"&&r&&a)r.classList.remove("fancybox__content"),getComputedStyle(r).getPropertyValue("display")!=="none"&&(r.style.display="none"),setTimeout(()=>{a&&(r&&a.parentNode&&a.parentNode.insertBefore(r,a),a.remove())},0),t.contentEl=void 0,t.placeholderEl=void 0;else for(;t.el&&t.el.firstChild;)t.el.removeChild(t.el.firstChild)}onSelectSlide(e,t,i){i.state===U.Ready&&this.playVideo()}onUnselectSlide(e,t,i){var r,a;if(i.type===tt){try{(a=(r=i.el)===null||r===void 0?void 0:r.querySelector("video"))===null||a===void 0||a.pause()}catch{}return}let l;i.type===Ce?l={method:"pause",value:"true"}:i.type===xe&&(l={event:"command",func:"pauseVideo"}),l&&i.iframeEl&&i.iframeEl.contentWindow&&i.iframeEl.contentWindow.postMessage(JSON.stringify(l),"*"),i.poller&&clearTimeout(i.poller)}onDone(e,t){e.isCurrentSlide(t)&&!e.isClosing()&&this.playVideo()}onRefresh(e,t){t.slides.forEach(i=>{i.el&&(this.resizeIframe(i),this.setAspectRatio(i))})}onMessage(e){try{let t=JSON.parse(e.data);if(e.origin==="https://player.vimeo.com"){if(t.event==="ready")for(let i of Array.from(document.getElementsByClassName("fancybox__iframe")))i instanceof HTMLIFrameElement&&i.contentWindow===e.source&&(i.dataset.ready="true")}else if(e.origin.match(/^https:\/\/(www.)?youtube(-nocookie)?.com$/)&&t.event==="onReady"){const i=document.getElementById(t.id);i&&(i.dataset.ready="true")}}catch{}}loadAjaxContent(e){const t=this.instance.optionFor(e,"src")||"";this.instance.showLoading(e);const i=this.instance,r=new XMLHttpRequest;i.showLoading(e),r.onreadystatechange=function(){r.readyState===XMLHttpRequest.DONE&&i.state===Y.Ready&&(i.hideLoading(e),r.status===200?i.setContent(e,r.responseText):i.setError(e,r.status===404?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))};const a=e.ajax||null;r.open(a?"POST":"GET",t+""),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.setRequestHeader("X-Requested-With","XMLHttpRequest"),r.send(a),e.xhr=r}setInlineContent(e){let t=null;if(Q(e.src))t=e.src;else if(typeof e.src=="string"){const i=e.src.split("#",2).pop();t=i?document.getElementById(i):null}if(t){if(e.type==="clone"||t.closest(".fancybox__slide")){t=t.cloneNode(!0);const i=t.dataset.animationName;i&&(t.classList.remove(i),delete t.dataset.animationName);let r=t.getAttribute("id");r=r?`${r}--clone`:`clone-${this.instance.id}-${e.index}`,t.setAttribute("id",r)}else if(t.parentNode){const i=document.createElement("div");i.classList.add("fancybox-placeholder"),t.parentNode.insertBefore(i,t),e.placeholderEl=i}this.instance.setContent(e,t)}else this.instance.setError(e,"{{ELEMENT_NOT_FOUND}}")}setIframeContent(e){const{src:t,el:i}=e;if(!t||typeof t!="string"||!i)return;i.classList.add("is-loading");const r=this.instance,a=document.createElement("iframe");a.className="fancybox__iframe",a.setAttribute("id",`fancybox__iframe_${r.id}_${e.index}`);for(const[o,c]of Object.entries(this.optionFor(e,"iframeAttr")||{}))a.setAttribute(o,c);a.onerror=()=>{r.setError(e,"{{IFRAME_ERROR}}")},e.iframeEl=a;const l=this.optionFor(e,"preload");if(e.type!=="iframe"||l===!1)return a.setAttribute("src",e.src+""),r.setContent(e,a,!1),this.resizeIframe(e),void r.revealContent(e);r.showLoading(e),a.onload=()=>{if(!a.src.length)return;const o=a.dataset.ready!=="true";a.dataset.ready="true",this.resizeIframe(e),o?r.revealContent(e):r.hideLoading(e)},a.setAttribute("src",t),r.setContent(e,a,!1)}resizeIframe(e){const{type:t,iframeEl:i}=e;if(t===xe||t===Ce)return;const r=i==null?void 0:i.parentElement;if(!i||!r)return;let a=e.autoSize;a===void 0&&(a=this.optionFor(e,"autoSize"));let l=e.width||0,o=e.height||0;l&&o&&(a=!1);const c=r&&r.style;if(e.preload!==!1&&a!==!1&&c)try{const d=window.getComputedStyle(r),h=parseFloat(d.paddingLeft)+parseFloat(d.paddingRight),u=parseFloat(d.paddingTop)+parseFloat(d.paddingBottom),m=i.contentWindow;if(m){const p=m.document,f=p.getElementsByTagName(oi)[0],v=p.body;c.width="",v.style.overflow="hidden",l=l||f.scrollWidth+h,c.width=`${l}px`,v.style.overflow="",c.flex="0 0 auto",c.height=`${v.scrollHeight}px`,o=f.scrollHeight+u}}catch{}if(l||o){const d={flex:"0 1 auto",width:"",height:""};l&&l!=="auto"&&(d.width=`${l}px`),o&&o!=="auto"&&(d.height=`${o}px`),Object.assign(c,d)}}playVideo(){const e=this.instance.getSlide();if(!e)return;const{el:t}=e;if(!t||!t.offsetParent||!this.optionFor(e,"videoAutoplay"))return;if(e.type===tt)try{const r=t.querySelector("video");if(r){const a=r.play();a!==void 0&&a.then(()=>{}).catch(l=>{r.muted=!0,r.play()})}}catch{}if(e.type!==xe&&e.type!==Ce)return;const i=()=>{if(e.iframeEl&&e.iframeEl.contentWindow){let r;if(e.iframeEl.dataset.ready==="true")return r=e.type===xe?{event:"command",func:"playVideo"}:{method:"play",value:"true"},r&&e.iframeEl.contentWindow.postMessage(JSON.stringify(r),"*"),void(e.poller=void 0);e.type===xe&&(r={event:"listening",id:e.iframeEl.getAttribute("id")},e.iframeEl.contentWindow.postMessage(JSON.stringify(r),"*"))}e.poller=setTimeout(i,250)};i()}processType(e){if(e.html)return e.type=oi,e.src=e.html,void(e.html="");const t=this.instance.optionFor(e,"src","");if(!t||typeof t!="string")return;let i=e.type,r=null;if(r=t.match(/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|shorts\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const a=this.optionFor(e,xe),{nocookie:l}=a,o=function(u,m){var p={};for(var f in u)Object.prototype.hasOwnProperty.call(u,f)&&m.indexOf(f)<0&&(p[f]=u[f]);if(u!=null&&typeof Object.getOwnPropertySymbols=="function"){var v=0;for(f=Object.getOwnPropertySymbols(u);v0?"svembed":"embed"}`,i=ci):(r=t.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(e.src=`https://maps.google.${r[1]}/maps?q=${r[2].replace("query=","q=").replace("api=1","")}&output=embed`,i=ci),i=i||this.instance.option("defaultType"),e.type=i,i===An&&(e.thumbSrc=e.thumbSrc||e.src)}setContent(e){const t=this.instance.optionFor(e,"src")||"";if(e&&e.type&&t){switch(e.type){case oi:this.instance.setContent(e,t);break;case tt:const i=this.option("videoTpl");i&&this.instance.setContent(e,i.replace(/\{\{src\}\}/gi,t+"").replace(/\{\{format\}\}/gi,this.optionFor(e,"videoFormat")||"").replace(/\{\{poster\}\}/gi,e.poster||e.thumbSrc||""));break;case"inline":case"clone":this.setInlineContent(e);break;case"ajax":this.loadAjaxContent(e);break;case"pdf":case ci:case xe:case Ce:e.preload=!1;case"iframe":this.setIframeContent(e)}this.setAspectRatio(e)}}setAspectRatio(e){const t=e.contentEl;if(!(e.el&&t&&e.type&&[xe,Ce,tt].includes(e.type)))return;let i,r=e.width||"auto",a=e.height||"auto";if(r==="auto"||a==="auto"){i=this.optionFor(e,"videoRatio");const d=(i+"").match(/(\d+)\s*\/\s?(\d+)/);i=d&&d.length>2?parseFloat(d[1])/parseFloat(d[2]):parseFloat(i+"")}else r&&a&&(i=r/a);if(!i)return;t.style.aspectRatio="",t.style.width="",t.style.height="",t.offsetHeight;const l=t.getBoundingClientRect(),o=l.width||1,c=l.height||1;t.style.aspectRatio=i+"",i{e.timer=null,e.inHover||e.onTimerEnd()},i),e.emit("set")}clear(){const e=this;e.timer&&(clearTimeout(e.timer),e.timer=null),e.removeProgressBar()}start(){const e=this;if(e.set(),e.state!==it){if(e.option("pauseOnHover")){const t=e.instance.container;t.addEventListener("mouseenter",e.onMouseEnter,!1),t.addEventListener("mouseleave",e.onMouseLeave,!1)}document.addEventListener("visibilitychange",e.onVisibilityChange,!1),e.emit("start")}}stop(){const e=this,t=e.state,i=e.instance.container;e.clear(),e.state=it,i.removeEventListener("mouseenter",e.onMouseEnter,!1),i.removeEventListener("mouseleave",e.onMouseLeave,!1),document.removeEventListener("visibilitychange",e.onVisibilityChange,!1),R(i,"has-autoplay"),t!==it&&e.emit("stop")}pause(){const e=this;e.state===Mt&&(e.state=kt,e.clear(),e.emit(kt))}resume(){const e=this,t=e.instance;if(t.isInfinite||t.page!==t.pages.length-1)if(e.state!==Mt){if(e.state===kt&&!e.inHover){const i=new Event("resume",{bubbles:!0,cancelable:!0});e.emit("resume",i),i.defaultPrevented||e.set()}}else e.set();else e.stop()}toggle(){this.state===Mt||this.state===kt?this.stop():this.start()}attach(){const e=this,t=e.instance;t.on("ready",e.onReady),t.on("Panzoom.startAnimation",e.onChange),t.on("Panzoom.endAnimation",e.onSettle),t.on("Panzoom.touchMove",e.onChange)}detach(){const e=this,t=e.instance;t.off("ready",e.onReady),t.off("Panzoom.startAnimation",e.onChange),t.off("Panzoom.endAnimation",e.onSettle),t.off("Panzoom.touchMove",e.onChange),e.stop()}}Object.defineProperty(Ks,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{autoStart:!0,pauseOnHover:!0,progressParentEl:null,showProgress:!0,timeout:3e3}});class Js extends de{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null})}onPrepare(e){const t=e.carousel;if(!t)return;const i=e.container;i&&(t.options.Autoplay=ee({autoStart:!1},this.option("Autoplay")||{},{pauseOnHover:!1,timeout:this.option("timeout"),progressParentEl:()=>this.option("progressParentEl")||null,on:{start:()=>{e.emit("startSlideshow")},set:r=>{var a;i.classList.add("has-slideshow"),((a=e.getSlide())===null||a===void 0?void 0:a.state)!==U.Ready&&r.pause()},stop:()=>{i.classList.remove("has-slideshow"),e.isCompact||e.endIdle(),e.emit("endSlideshow")},resume:(r,a)=>{var l,o,c;!a||!a.cancelable||((l=e.getSlide())===null||l===void 0?void 0:l.state)===U.Ready&&(!((c=(o=e.carousel)===null||o===void 0?void 0:o.panzoom)===null||c===void 0)&&c.isResting)||a.preventDefault()}}}),t.attachPlugins({Autoplay:Ks}),this.ref=t.plugins.Autoplay)}onReady(e){const t=e.carousel,i=this.ref;i&&t&&this.option("playOnStart")&&(t.isInfinite||t.page{e.isCurrentSlide(t)&&i.stop()}),e.isCurrentSlide(t)&&i.resume()}onKeydown(e,t){var i;const r=this.ref;r&&t===this.option("key")&&((i=document.activeElement)===null||i===void 0?void 0:i.nodeName)!=="BUTTON"&&r.toggle()}attach(){const e=this,t=e.instance;t.on("Carousel.init",e.onPrepare),t.on("Carousel.ready",e.onReady),t.on("done",e.onDone),t.on("keydown",e.onKeydown)}detach(){const e=this,t=e.instance;t.off("Carousel.init",e.onPrepare),t.off("Carousel.ready",e.onReady),t.off("done",e.onDone),t.off("keydown",e.onKeydown)}}Object.defineProperty(Js,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{key:" ",playOnStart:!1,progressParentEl:n=>{var e;return((e=n.instance.container)===null||e===void 0?void 0:e.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]"))||n.instance.container},timeout:3e3}});const Qs={classes:{container:"f-thumbs f-carousel__thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide",isResting:"is-resting",isSelected:"is-selected",isLoading:"is-loading",hasThumbs:"has-thumbs"},minCount:2,parentEl:null,thumbTpl:'',type:"modern"};var we;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Hidden=2]="Hidden"})(we||(we={}));const In="isResting",Lt="thumbWidth",$e="thumbHeight",he="thumbClipWidth";let er=class extends de{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"modern"}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"thumbWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbClipWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbExtraGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:we.Init})}get isModern(){return this.type==="modern"}onInitSlide(n,e){const t=e.el?e.el.dataset:void 0;t&&(e.thumbSrc=t.thumbSrc||e.thumbSrc||"",e[he]=parseFloat(t[he]||"")||e[he]||0,e[$e]=parseFloat(t.thumbHeight||"")||e[$e]||0),this.addSlide(e)}onInitSlides(){this.build()}onChange(){var n;if(!this.isModern)return;const e=this.container,t=this.instance,i=t.panzoom,r=this.carousel,a=r?r.panzoom:null,l=t.page;if(i&&r&&a){if(i.isDragging){R(e,this.cn(In));let o=((n=r.pages[l])===null||n===void 0?void 0:n.pos)||0;o+=t.getProgress(l)*(this[he]+this.thumbGap);let c=a.getBounds();-1*o>c.x.min&&-1*oparseFloat(getComputedStyle(n).getPropertyValue("--f-thumb-"+t))||0;this.thumbGap=e("gap"),this.thumbExtraGap=e("extra-gap"),this[Lt]=e("width")||40,this[he]=e("clip-width")||40,this[$e]=e("height")||40}build(){const n=this;if(n.state!==we.Init)return;if(n.isDisabled())return void n.emit("disabled");const e=n.instance,t=e.container,i=n.getSlides(),r=n.option("type");n.type=r;const a=n.option("parentEl"),l=n.cn("container"),o=n.cn("track");let c=a==null?void 0:a.querySelector("."+l);c||(c=document.createElement("div"),k(c,l),a?a.appendChild(c):t.after(c)),k(c,`is-${r}`),k(t,n.cn("hasThumbs")),n.container=c,n.updateProps();let d=c.querySelector("."+o);d||(d=document.createElement("div"),k(d,n.cn("track")),c.appendChild(d)),n.track=d;const h=ee({},{track:d,infinite:!1,center:!0,fill:r==="classic",dragFree:!0,slidesPerPage:1,transition:!1,preload:.25,friction:.12,Panzoom:{maxVelocity:0},Dots:!1,Navigation:!1,classes:{container:"f-thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide"}},n.option("Carousel")||{},{Sync:{target:e},slides:i}),u=new e.constructor(c,h);u.on("createSlide",(m,p)=>{n.setProps(p.index),n.emit("createSlide",p,p.el)}),u.on("ready",()=>{n.shiftModern(),n.emit("ready")}),u.on("refresh",()=>{n.shiftModern()}),u.on("Panzoom.click",(m,p,f)=>{n.onClick(f)}),n.carousel=u,n.state=we.Ready}onClick(n){n.preventDefault(),n.stopPropagation();const e=this.instance,{pages:t,page:i}=e,r=v=>{if(v){const b=v.closest("[data-carousel-index]");if(b)return[parseInt(b.dataset.carouselIndex||"",10)||0,b]}return[-1,void 0]},a=(v,b)=>{const g=document.elementFromPoint(v,b);return g?r(g):[-1,void 0]};let[l,o]=r(n.target);if(l>-1)return;const c=this[he],d=n.clientX,h=n.clientY;let[u,m]=a(d-c,h),[p,f]=a(d+c,h);m&&f?(l=Math.abs(d-m.getBoundingClientRect().right)-1&&t[l]&&e.slideTo(l)}getShift(n){var e;const t=this,{instance:i}=t,r=t.carousel;if(!i||!r)return 0;const a=t[Lt],l=t[he],o=t.thumbGap,c=t.thumbExtraGap;if(!(!((e=r.slides[n])===null||e===void 0)&&e.el))return 0;const d=.5*(a-l),h=i.pages.length-1;let u=i.getProgress(0),m=i.getProgress(h),p=i.getProgress(n,!1,!0),f=0,v=d+c+o;const b=u<0&&u>-1,g=m>0&&m<1;return n===0?(f=v*Math.abs(u),g&&u===1&&(f-=v*Math.abs(m))):n===h?(f=v*Math.abs(m)*-1,b&&m===-1&&(f+=v*Math.abs(u))):b||g?(f=-1*v,f+=v*Math.abs(u),f+=v*(1-Math.abs(m))):f=v*p,f}setProps(n){var e;const t=this;if(!t.isModern)return;const{instance:i}=t,r=t.carousel;if(i&&r){const a=(e=r.slides[n])===null||e===void 0?void 0:e.el;if(a&&a.childNodes.length){let l=T(1-Math.abs(i.getProgress(n))),o=T(t.getShift(n));a.style.setProperty("--progress",l?l+"":""),a.style.setProperty("--shift",o+"")}}}shiftModern(){const n=this;if(!n.isModern)return;const{instance:e,track:t}=n,i=e.panzoom,r=n.carousel;if(!(e&&t&&i&&r)||i.state===j.Init||i.state===j.Destroy)return;for(const l of e.slides)n.setProps(l.index);let a=(n[he]+n.thumbGap)*(r.slides.length||0);t.style.setProperty("--width",a+"")}cleanup(){const n=this;n.carousel&&n.carousel.destroy(),n.carousel=null,n.container&&n.container.remove(),n.container=null,n.track&&n.track.remove(),n.track=null,n.state=we.Init,R(n.instance.container,n.cn("hasThumbs"))}attach(){const n=this,e=n.instance;e.on("initSlide",n.onInitSlide),e.state===W.Init?e.on("initSlides",n.onInitSlides):n.onInitSlides(),e.on(["change","Panzoom.afterTransform"],n.onChange),e.on("Panzoom.refresh",n.onRefresh)}detach(){const n=this,e=n.instance;e.off("initSlide",n.onInitSlide),e.off("initSlides",n.onInitSlides),e.off(["change","Panzoom.afterTransform"],n.onChange),e.off("Panzoom.refresh",n.onRefresh),n.cleanup()}};Object.defineProperty(er,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Qs});const Ol=Object.assign(Object.assign({},Qs),{key:"t",showOnStart:!0,parentEl:null}),Dn="is-masked",zn="aria-hidden";class tr extends de{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hidden",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isEnabled(){const e=this.ref;return e&&!e.isDisabled()}get isHidden(){return this.hidden}onClick(e,t){t.stopPropagation()}onCreateSlide(e,t){var i,r,a;const l=((a=(r=(i=this.instance)===null||i===void 0?void 0:i.carousel)===null||r===void 0?void 0:r.slides[t.index])===null||a===void 0?void 0:a.type)||"",o=t.el;if(o&&l){let c=`for-${l}`;["video","youtube","vimeo","html5video"].includes(l)&&(c+=" for-video"),k(o,c)}}onInit(){var e;const t=this,i=t.instance,r=i.carousel;if(t.ref||!r)return;const a=t.option("parentEl")||i.footer||i.container;if(!a)return;const l=ee({},t.options,{parentEl:a,classes:{container:"f-thumbs fancybox__thumbs"},Carousel:{Sync:{friction:i.option("Carousel.friction")||0}},on:{ready:o=>{const c=o.container;c&&this.hidden&&(t.refresh(),c.style.transition="none",t.hide(),c.offsetHeight,queueMicrotask(()=>{c.style.transition="",t.show()}))}}});l.Carousel=l.Carousel||{},l.Carousel.on=ee(((e=t.options.Carousel)===null||e===void 0?void 0:e.on)||{},{click:this.onClick,createSlide:this.onCreateSlide}),r.options.Thumbs=l,r.attachPlugins({Thumbs:er}),t.ref=r.plugins.Thumbs,t.option("showOnStart")||(t.ref.state=we.Hidden,t.hidden=!0)}onResize(){var e;const t=(e=this.ref)===null||e===void 0?void 0:e.container;t&&(t.style.maxHeight="")}onKeydown(e,t){const i=this.option("key");i&&i===t&&this.toggle()}toggle(){const e=this.ref;if(e&&!e.isDisabled())return e.state===we.Hidden?(e.state=we.Init,void e.build()):void(this.hidden?this.show():this.hide())}show(){const e=this.ref;if(!e||e.isDisabled())return;const t=e.container;t&&(this.refresh(),t.offsetHeight,t.removeAttribute(zn),t.classList.remove(Dn),this.hidden=!1)}hide(){const e=this.ref,t=e&&e.container;t&&(this.refresh(),t.offsetHeight,t.classList.add(Dn),t.setAttribute(zn,"true")),this.hidden=!0}refresh(){const e=this.ref;if(!e||!e.state)return;const t=e.container,i=(t==null?void 0:t.firstChild)||null;t&&i&&i.childNodes.length&&(t.style.maxHeight=`${i.getBoundingClientRect().height}px`)}attach(){const e=this,t=e.instance;t.state===Y.Init?t.on("Carousel.init",e.onInit):e.onInit(),t.on("resize",e.onResize),t.on("keydown",e.onKeydown)}detach(){var e;const t=this,i=t.instance;i.off("Carousel.init",t.onInit),i.off("resize",t.onResize),i.off("keydown",t.onKeydown),(e=i.carousel)===null||e===void 0||e.detachPlugins(["Thumbs"]),t.ref=null}}Object.defineProperty(tr,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Ol});const di={panLeft:{icon:'',change:{panX:-100}},panRight:{icon:'',change:{panX:100}},panUp:{icon:'',change:{panY:-100}},panDown:{icon:'',change:{panY:100}},zoomIn:{icon:'',action:"zoomIn"},zoomOut:{icon:'',action:"zoomOut"},toggle1to1:{icon:'',action:"toggleZoom"},toggleZoom:{icon:'',action:"toggleZoom"},iterateZoom:{icon:'',action:"iterateZoom"},rotateCCW:{icon:'',action:"rotateCCW"},rotateCW:{icon:'',action:"rotateCW"},flipX:{icon:'',action:"flipX"},flipY:{icon:'',action:"flipY"},fitX:{icon:'',action:"fitX"},fitY:{icon:'',action:"fitY"},reset:{icon:'',action:"reset"},toggleFS:{icon:'',action:"toggleFS"}};var Ie;(function(n){n[n.Init=0]="Init",n[n.Ready=1]="Ready",n[n.Disabled=2]="Disabled"})(Ie||(Ie={}));const Il={absolute:"auto",display:{left:["infobar"],middle:[],right:["iterateZoom","slideshow","fullscreen","thumbs","close"]},enabled:"auto",items:{infobar:{tpl:'
/
'},download:{tpl:''},prev:{tpl:''},next:{tpl:''},slideshow:{tpl:''},fullscreen:{tpl:''},thumbs:{tpl:''},close:{tpl:''}},parentEl:null},Dl={tabindex:"-1",width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},Rn="has-toolbar",hi="fancybox__toolbar";class ir extends de{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Ie.Init}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null})}onReady(e){var t;if(!e.carousel)return;let i=this.option("display"),r=this.option("absolute"),a=this.option("enabled");if(a==="auto"){const d=this.instance.carousel;let h=0;if(d)for(const u of d.slides)(u.panzoom||u.type==="image")&&h++;h||(a=!1)}a||(i=void 0);let l=0;const o={left:[],middle:[],right:[]};if(i)for(const d of["left","middle","right"])for(const h of i[d]){const u=this.createEl(h);u&&((t=o[d])===null||t===void 0||t.push(u),l++)}let c=null;if(l&&(c=this.createContainer()),c){for(const[d,h]of Object.entries(o)){const u=document.createElement("div");k(u,hi+"__column is-"+d);for(const m of h)u.appendChild(m);r!=="auto"||d!=="middle"||h.length||(r=!0),c.appendChild(u)}r===!0&&k(c,"is-absolute"),this.state=Ie.Ready,this.onRefresh()}else this.state=Ie.Disabled}onClick(e){var t,i;const r=this.instance,a=r.getSlide(),l=a==null?void 0:a.panzoom,o=e.target,c=o&&Q(o)?o.dataset:null;if(!c)return;if(c.fancyboxToggleThumbs!==void 0)return e.preventDefault(),e.stopPropagation(),void((t=r.plugins.Thumbs)===null||t===void 0||t.toggle());if(c.fancyboxToggleFullscreen!==void 0)return e.preventDefault(),e.stopPropagation(),void this.instance.toggleFullscreen();if(c.fancyboxToggleSlideshow!==void 0){e.preventDefault(),e.stopPropagation();const u=(i=r.carousel)===null||i===void 0?void 0:i.plugins.Autoplay;let m=u.isActive;return l&&l.panMode==="mousemove"&&!m&&l.reset(),void(m?u.stop():u.start())}const d=c.panzoomAction,h=c.panzoomChange;if((h||d)&&(e.preventDefault(),e.stopPropagation()),h){let u={};try{u=JSON.parse(h)}catch{}l&&l.applyChange(u)}else d&&l&&l[d]&&l[d]()}onChange(){this.onRefresh()}onRefresh(){if(this.instance.isClosing())return;const e=this.container;if(!e)return;const t=this.instance.getSlide();if(!t||t.state!==U.Ready)return;const i=t&&!t.error&&t.panzoom;for(const l of e.querySelectorAll("[data-panzoom-action]"))i?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));let r=i&&i.canZoomIn(),a=i&&i.canZoomOut();for(const l of e.querySelectorAll('[data-panzoom-action="zoomIn"]'))r?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));for(const l of e.querySelectorAll('[data-panzoom-action="zoomOut"]'))a?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));for(const l of e.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')){a||r?(l.removeAttribute("disabled"),l.removeAttribute("tabindex")):(l.setAttribute("disabled",""),l.setAttribute("tabindex","-1"));const o=l.querySelector("g");o&&(o.style.display=r?"":"none")}}onDone(e,t){var i;(i=t.panzoom)===null||i===void 0||i.on("afterTransform",()=>{this.instance.isCurrentSlide(t)&&this.onRefresh()}),this.instance.isCurrentSlide(t)&&this.onRefresh()}createContainer(){const e=this.instance.container;if(!e)return null;const t=this.option("parentEl")||e;let i=t.querySelector("."+hi);return i||(i=document.createElement("div"),k(i,hi),t.prepend(i)),i.addEventListener("click",this.onClick,{passive:!1,capture:!0}),e&&k(e,Rn),this.container=i,i}createEl(e){const t=this.instance,i=t.carousel;if(!i||e==="toggleFS"||e==="fullscreen"&&!Vs())return null;let r=null;const a=i.slides.length||0;let l=0,o=0;for(const d of i.slides)(d.panzoom||d.type==="image")&&l++,(d.type==="image"||d.downloadSrc)&&o++;if(a<2&&["infobar","prev","next"].includes(e))return r;if(di[e]!==void 0&&!l||e==="download"&&!o)return null;if(e==="thumbs"){const d=t.plugins.Thumbs;if(!d||!d.isEnabled)return null}if(e==="slideshow"&&(!i.plugins.Autoplay||a<2))return null;if(di[e]!==void 0){const d=di[e];r=document.createElement("button"),r.setAttribute("title",this.instance.localize(`{{${e.toUpperCase()}}}`)),k(r,"f-button"),d.action&&(r.dataset.panzoomAction=d.action),d.change&&(r.dataset.panzoomChange=JSON.stringify(d.change)),r.appendChild(pe(this.instance.localize(d.icon)))}else{const d=(this.option("items")||[])[e];d&&(r=pe(this.instance.localize(d.tpl)),typeof d.click=="function"&&r.addEventListener("click",h=>{h.preventDefault(),h.stopPropagation(),typeof d.click=="function"&&d.click.call(this,this,h)}))}const c=r==null?void 0:r.querySelector("svg");if(c)for(const[d,h]of Object.entries(Dl))c.getAttribute(d)||c.setAttribute(d,String(h));return r}removeContainer(){const e=this.container;e&&e.remove(),this.container=null,this.state=Ie.Disabled;const t=this.instance.container;t&&R(t,Rn)}attach(){const e=this,t=e.instance;t.on("Carousel.initSlides",e.onReady),t.on("done",e.onDone),t.on(["reveal","Carousel.change"],e.onChange),e.onReady(e.instance)}detach(){const e=this,t=e.instance;t.off("Carousel.initSlides",e.onReady),t.off("done",e.onDone),t.off(["reveal","Carousel.change"],e.onChange),e.removeContainer()}}Object.defineProperty(ir,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Il});const zl={Hash:class extends de{onReady(){at=!1}onChange(n){Ae&&clearTimeout(Ae);const{hash:e}=Ws(),{hash:t}=$t(),i=n.isOpeningSlide(n.getSlide());i&&(kn=t===e?"":t),e&&e!==t&&(Ae=setTimeout(()=>{try{if(n.state===Y.Ready){let r="replaceState";i&&!Ct&&(r="pushState",Ct=!0),window.history[r]({},document.title,window.location.pathname+window.location.search+e)}}catch{}},300))}onClose(n){if(Ae&&clearTimeout(Ae),!at&&Ct)return Ct=!1,at=!1,void window.history.back();if(!at)try{window.history.replaceState({},document.title,window.location.pathname+window.location.search+(kn||""))}catch{}}attach(){const n=this.instance;n.on("ready",this.onReady),n.on(["Carousel.ready","Carousel.change"],this.onChange),n.on("close",this.onClose)}detach(){const n=this.instance;n.off("ready",this.onReady),n.off(["Carousel.ready","Carousel.change"],this.onChange),n.off("close",this.onClose)}static parseURL(){return $t()}static startFromUrl(){Xs()}static destroy(){window.removeEventListener("hashchange",Ys,!1)}},Html:Zs,Images:Us,Slideshow:Js,Thumbs:tr,Toolbar:ir},jn="with-fancybox",ui="hide-scrollbar",Fn="--fancybox-scrollbar-compensate",Bn="--fancybox-body-margin",pi="aria-hidden",mi="is-using-tab",fi="is-animated",Hn="is-compact",$n="is-loading",gi="is-opening",At="has-caption",Ge="disabled",Pe="tabindex",Gn="download",vi="href",Ve="src",Ne=n=>typeof n=="string",Vn=function(){var n=window.getSelection();return!!n&&n.type==="Range"};let ae,le=null,Me=null,Wn=0,Xn=0,qn=0,Yn=0;const We=new Map;let Rl=0;class z extends Hi{get isIdle(){return this.idle}get isCompact(){return this.option("compact")}constructor(e=[],t={},i={}){super(t),Object.defineProperty(this,"userSlides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"idle",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"idleTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"ignoreFocusChange",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"startedFs",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Y.Init}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastFocus",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prevMouseMoveEvent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ae||(ae=Vs()),this.id=t.id||++Rl,We.set(this.id,this),this.userSlides=e,this.userPlugins=i,queueMicrotask(()=>{this.init()})}init(){if(this.state===Y.Destroy)return;this.state=Y.Init,this.attachPlugins(Object.assign(Object.assign({},z.Plugins),this.userPlugins)),this.emit("init"),this.emit("attachPlugins"),this.option("hideScrollbar")===!0&&(()=>{if(!ct)return;const t=document,i=t.body,r=t.documentElement;if(i.classList.contains(ui))return;let a=window.innerWidth-r.getBoundingClientRect().width;const l=parseFloat(window.getComputedStyle(i).marginRight);a<0&&(a=0),r.style.setProperty(Fn,`${a}px`),l&&i.style.setProperty(Bn,`${l}px`),i.classList.add(ui)})(),this.initLayout(),this.scale();const e=()=>{this.initCarousel(this.userSlides),this.state=Y.Ready,this.attachEvents(),this.emit("ready"),setTimeout(()=>{this.container&&this.container.setAttribute(pi,"false")},16)};this.option("Fullscreen.autoStart")&&ae&&!ae.isFullscreen()?ae.request().then(()=>{this.startedFs=!0,e()}).catch(()=>e()):e()}initLayout(){var e,t;const i=this.option("parentEl")||document.body,r=pe(this.localize(this.option("tpl.main")||""));if(r){if(r.setAttribute("id",`fancybox-${this.id}`),r.setAttribute("aria-label",this.localize("{{MODAL}}")),r.classList.toggle(Hn,this.isCompact),k(r,this.option("mainClass")||""),k(r,gi),this.container=r,this.footer=r.querySelector(".fancybox__footer"),i.appendChild(r),k(document.documentElement,jn),le&&Me||(le=document.createElement("span"),k(le,"fancybox-focus-guard"),le.setAttribute(Pe,"0"),le.setAttribute(pi,"true"),le.setAttribute("aria-label","Focus guard"),Me=le.cloneNode(),(e=r.parentElement)===null||e===void 0||e.insertBefore(le,r),(t=r.parentElement)===null||t===void 0||t.append(Me)),r.addEventListener("mousedown",a=>{Wn=a.pageX,Xn=a.pageY,R(r,mi)}),this.option("closeExisting"))for(const a of We.values())a.id!==this.id&&a.close();else this.option("animated")&&(k(r,fi),setTimeout(()=>{this.isClosing()||R(r,fi)},350));this.emit("initLayout")}}initCarousel(e){const t=this.container;if(!t)return;const i=t.querySelector(".fancybox__carousel");if(!i)return;const r=this.carousel=new ze(i,ee({},{slides:e,transition:"fade",Panzoom:{lockAxis:this.option("dragToClose")?"xy":"x",infinite:!!this.option("dragToClose")&&"y"},Dots:!1,Navigation:{classes:{container:"fancybox__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"}},initialPage:this.option("startIndex"),l10n:this.option("l10n")},this.option("Carousel")||{}));r.on("*",(a,l,...o)=>{this.emit(`Carousel.${l}`,a,...o)}),r.on(["ready","change"],()=>{this.manageCaption()}),this.on("Carousel.removeSlide",(a,l,o)=>{this.clearContent(o),o.state=void 0}),r.on("Panzoom.touchStart",()=>{var a,l;this.isCompact||this.endIdle(),!((a=document.activeElement)===null||a===void 0)&&a.closest(".f-thumbs")&&((l=this.container)===null||l===void 0||l.focus())}),r.on("settle",()=>{this.idleTimer||this.isCompact||!this.option("idle")||this.setIdle(),this.option("autoFocus")&&!this.isClosing&&this.checkFocus()}),this.option("dragToClose")&&(r.on("Panzoom.afterTransform",(a,l)=>{const o=this.getSlide();if(o&&Pi(o.el))return;const c=this.container;if(c){const d=Math.abs(l.current.f),h=d<1?"":Math.max(.5,Math.min(1,1-d/l.contentRect.fitHeight*1.5));c.style.setProperty("--fancybox-ts",h?"0s":""),c.style.setProperty("--fancybox-opacity",h+"")}}),r.on("Panzoom.touchEnd",(a,l,o)=>{var c;const d=this.getSlide();if(d&&Pi(d.el)||l.isMobile&&document.activeElement&&["TEXTAREA","INPUT"].indexOf((c=document.activeElement)===null||c===void 0?void 0:c.nodeName)!==-1)return;const h=Math.abs(l.dragOffset.y);l.lockedAxis==="y"&&(h>=200||h>=50&&l.dragOffset.time<300)&&(o&&o.cancelable&&o.preventDefault(),this.close(o,"f-throwOut"+(l.current.f<0?"Up":"Down")))})),r.on("change",a=>{var l;let o=(l=this.getSlide())===null||l===void 0?void 0:l.triggerEl;if(o){const c=new CustomEvent("slideTo",{bubbles:!0,cancelable:!0,detail:a.page});o.dispatchEvent(c)}}),r.on(["refresh","change"],a=>{const l=this.container;if(!l)return;for(const d of l.querySelectorAll("[data-fancybox-current-index]"))d.innerHTML=a.page+1;for(const d of l.querySelectorAll("[data-fancybox-count]"))d.innerHTML=a.pages.length;if(!a.isInfinite){for(const d of l.querySelectorAll("[data-fancybox-next]"))a.page0?(d.removeAttribute(Ge),d.removeAttribute(Pe)):(d.setAttribute(Ge,""),d.setAttribute(Pe,"-1"))}const o=this.getSlide();if(!o)return;let c=o.downloadSrc||"";c||o.type!=="image"||o.error||!Ne(o[Ve])||(c=o[Ve]);for(const d of l.querySelectorAll("[data-fancybox-download]")){const h=o.downloadFilename;c?(d.removeAttribute(Ge),d.removeAttribute(Pe),d.setAttribute(vi,c),d.setAttribute(Gn,h||c),d.setAttribute("target","_blank")):(d.setAttribute(Ge,""),d.setAttribute(Pe,"-1"),d.removeAttribute(vi),d.removeAttribute(Gn))}}),this.emit("initCarousel")}attachEvents(){const e=this,t=e.container;if(!t)return;t.addEventListener("click",e.onClick,{passive:!1,capture:!1}),t.addEventListener("wheel",e.onWheel,{passive:!1,capture:!1}),document.addEventListener("keydown",e.onKeydown,{passive:!1,capture:!0}),document.addEventListener("visibilitychange",e.onVisibilityChange,!1),document.addEventListener("mousemove",e.onMousemove),e.option("trapFocus")&&document.addEventListener("focus",e.onFocus,!0),window.addEventListener("resize",e.onResize);const i=window.visualViewport;i&&(i.addEventListener("scroll",e.onResize),i.addEventListener("resize",e.onResize))}detachEvents(){const e=this,t=e.container;if(!t)return;document.removeEventListener("keydown",e.onKeydown,{passive:!1,capture:!0}),t.removeEventListener("wheel",e.onWheel,{passive:!1,capture:!1}),t.removeEventListener("click",e.onClick,{passive:!1,capture:!1}),document.removeEventListener("mousemove",e.onMousemove),window.removeEventListener("resize",e.onResize);const i=window.visualViewport;i&&(i.removeEventListener("resize",e.onResize),i.removeEventListener("scroll",e.onResize)),document.removeEventListener("visibilitychange",e.onVisibilityChange,!1),document.removeEventListener("focus",e.onFocus,!0)}scale(){const e=this.container;if(!e)return;const t=window.visualViewport,i=Math.max(1,(t==null?void 0:t.scale)||1);let r="",a="",l="";if(t&&i>1){let o=`${t.offsetLeft}px`,c=`${t.offsetTop}px`;r=t.width*i+"px",a=t.height*i+"px",l=`translate3d(${o}, ${c}, 0) scale(${1/i})`}e.style.transform=l,e.style.width=r,e.style.height=a}onClick(e){var t;const{container:i,isCompact:r}=this;if(!i||this.isClosing())return;!r&&this.option("idle")&&this.resetIdle();const a=e.composedPath()[0];if(a.closest(".fancybox-spinner")||a.closest("[data-fancybox-close]"))return e.preventDefault(),void this.close(e);if(a.closest("[data-fancybox-prev]"))return e.preventDefault(),void this.prev();if(a.closest("[data-fancybox-next]"))return e.preventDefault(),void this.next();if(e.type==="click"&&e.detail===0||Math.abs(e.pageX-Wn)>30||Math.abs(e.pageY-Xn)>30)return;const l=document.activeElement;if(Vn()&&l&&i.contains(l))return;if(r&&((t=this.getSlide())===null||t===void 0?void 0:t.type)==="image")return void(this.clickTimer?(clearTimeout(this.clickTimer),this.clickTimer=null):this.clickTimer=setTimeout(()=>{this.toggleIdle(),this.clickTimer=null},350));if(this.emit("click",e),e.defaultPrevented)return;let o=!1;if(a.closest(".fancybox__content")){if(l){if(l.closest("[contenteditable]"))return;a.matches(li)||l.blur()}if(Vn())return;o=this.option("contentClick")}else a.closest(".fancybox__carousel")&&!a.matches(li)&&(o=this.option("backdropClick"));o==="close"?(e.preventDefault(),this.close(e)):o==="next"?(e.preventDefault(),this.next()):o==="prev"&&(e.preventDefault(),this.prev())}onWheel(e){const t=e.target;let i=this.option("wheel",e);t.closest(".fancybox__thumbs")&&(i="slide");const r=i==="slide",a=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(c,d){return Math.abs(d)>Math.abs(c)?d:c}),l=Math.max(-1,Math.min(1,a)),o=Date.now();this.pwt&&o-this.pwt<300?r&&e.preventDefault():(this.pwt=o,this.emit("wheel",e,l),e.defaultPrevented||(i==="close"?(e.preventDefault(),this.close(e)):i==="slide"&&(Bt(t)||(e.preventDefault(),this[l>0?"prev":"next"]()))))}onScroll(){window.scrollTo(qn,Yn)}onKeydown(e){if(!this.isTopmost())return;this.isCompact||!this.option("idle")||this.isClosing()||this.resetIdle();const t=e.key,i=this.option("keyboard");if(!i)return;const r=e.composedPath()[0],a=document.activeElement&&document.activeElement.classList,l=a&&a.contains("f-button")||r.dataset.carouselPage||r.dataset.carouselIndex;if(t!=="Escape"&&!l&&Q(r)&&(r.isContentEditable||["TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(r.nodeName)!==-1)||(e.key==="Tab"?k(this.container,mi):R(this.container,mi),e.ctrlKey||e.altKey||e.shiftKey))return;this.emit("keydown",t,e);const o=i[t];o&&typeof this[o]=="function"&&(e.preventDefault(),this[o]())}onResize(){const e=this.container;if(!e)return;const t=this.isCompact;e.classList.toggle(Hn,t),this.manageCaption(this.getSlide()),this.isCompact?this.clearIdle():this.endIdle(),this.scale(),this.emit("resize")}onFocus(e){this.isTopmost()&&this.checkFocus(e)}onMousemove(e){this.prevMouseMoveEvent=e,!this.isCompact&&this.option("idle")&&this.resetIdle()}onVisibilityChange(){document.visibilityState==="visible"?this.checkFocus():this.endIdle()}manageCloseBtn(e){const t=this.optionFor(e,"closeButton")||!1;if(t==="auto"){const r=this.plugins.Toolbar;if(r&&r.state===Ie.Ready)return}if(!t||!e.contentEl||e.closeBtnEl)return;const i=this.option("tpl.closeButton");if(i){const r=pe(this.localize(i));e.closeBtnEl=e.contentEl.appendChild(r),e.el&&k(e.el,"has-close-btn")}}manageCaption(e=void 0){var t,i;const r="fancybox__caption",a=this.container;if(!a)return;R(a,At);const l=this.isCompact||this.option("commonCaption"),o=!l;if(this.caption&&this.stop(this.caption),o&&this.caption&&(this.caption.remove(),this.caption=null),l&&!this.caption)for(const u of((t=this.carousel)===null||t===void 0?void 0:t.slides)||[])u.captionEl&&(u.captionEl.remove(),u.captionEl=void 0,R(u.el,At),(i=u.el)===null||i===void 0||i.removeAttribute("aria-labelledby"));if(e||(e=this.getSlide()),!e||l&&!this.isCurrentSlide(e))return;const c=e.el;let d=this.optionFor(e,"caption","");if(!d)return void(l&&this.caption&&this.animate(this.caption,"f-fadeOut",()=>{this.caption&&(this.caption.innerHTML="")}));let h=null;if(o){if(h=e.captionEl||null,c&&!h){const u=r+`_${this.id}_${e.index}`;h=document.createElement("div"),k(h,r),h.setAttribute("id",u),e.captionEl=c.appendChild(h),k(c,At),c.setAttribute("aria-labelledby",u)}}else h=this.caption,h||(h=a.querySelector("."+r)),!h&&(h=document.createElement("div"),h.dataset.fancyboxCaption="",k(h,r),(this.footer||a).prepend(h)),k(a,At),this.caption=h;h&&(h.innerHTML="",Ne(d)||typeof d=="number"?h.innerHTML=d+"":d instanceof HTMLElement&&h.appendChild(d))}checkFocus(e){this.focus(e)}focus(e){var t;if(this.ignoreFocusChange)return;const i=document.activeElement||null,r=(e==null?void 0:e.target)||null,a=this.container,l=(t=this.carousel)===null||t===void 0?void 0:t.viewport;if(!a||!l||!e&&i&&a.contains(i))return;const o=this.getSlide(),c=o&&o.state===U.Ready?o.el:null;if(!c||c.contains(i)||a===i)return;e&&e.cancelable&&e.preventDefault(),this.ignoreFocusChange=!0;const d=Array.from(a.querySelectorAll(li));let h=[],u=null;for(let p of d){const f=!p.offsetParent||!!p.closest('[aria-hidden="true"]'),v=c&&c.contains(p),b=!l.contains(p);if(p===a||(v||b)&&!f){h.push(p);const g=p.dataset.origTabindex;g!==void 0&&g&&(p.tabIndex=parseFloat(g)),p.removeAttribute("data-orig-tabindex"),!p.hasAttribute("autoFocus")&&u||(u=p)}else{const g=p.dataset.origTabindex===void 0?p.getAttribute("tabindex")||"":p.dataset.origTabindex;g&&(p.dataset.origTabindex=g),p.tabIndex=-1}}let m=null;e?(!r||h.indexOf(r)<0)&&(m=u||a,h.length&&(i===Me?m=h[0]:this.lastFocus!==a&&i!==le||(m=h[h.length-1]))):m=o&&o.type==="image"?a:u||a,m&&Mn(m),this.lastFocus=document.activeElement,this.ignoreFocusChange=!1}next(){const e=this.carousel;e&&e.pages.length>1&&e.slideNext()}prev(){const e=this.carousel;e&&e.pages.length>1&&e.slidePrev()}jumpTo(...e){this.carousel&&this.carousel.slideTo(...e)}isTopmost(){var e;return((e=z.getInstance())===null||e===void 0?void 0:e.id)==this.id}animate(e=null,t="",i){if(!e||!t)return void(i&&i());this.stop(e);const r=a=>{a.target===e&&e.dataset.animationName&&(e.removeEventListener("animationend",r),delete e.dataset.animationName,i&&i(),R(e,t))};e.dataset.animationName=t,e.addEventListener("animationend",r),k(e,t)}stop(e){e&&e.dispatchEvent(new CustomEvent("animationend",{bubbles:!1,cancelable:!0,currentTarget:e}))}setContent(e,t="",i=!0){if(this.isClosing())return;const r=e.el;if(!r)return;let a=null;if(Q(t)?a=t:(a=pe(t+""),Q(a)||(a=document.createElement("div"),a.innerHTML=t+"")),["img","picture","iframe","video","audio"].includes(a.nodeName.toLowerCase())){const l=document.createElement("div");l.appendChild(a),a=l}Q(a)&&e.filter&&!e.error&&(a=a.querySelector(e.filter)),a&&Q(a)?(k(a,"fancybox__content"),e.id&&a.setAttribute("id",e.id),r.classList.add(`has-${e.error?"error":e.type||"unknown"}`),r.prepend(a),a.style.display==="none"&&(a.style.display=""),getComputedStyle(a).getPropertyValue("display")==="none"&&(a.style.display=e.display||this.option("defaultDisplay")||"flex"),e.contentEl=a,i&&this.revealContent(e),this.manageCloseBtn(e),this.manageCaption(e)):this.setError(e,"{{ELEMENT_NOT_FOUND}}")}revealContent(e,t){const i=e.el,r=e.contentEl;i&&r&&(this.emit("reveal",e),this.hideLoading(e),e.state=U.Opening,(t=this.isOpeningSlide(e)?t===void 0?this.optionFor(e,"showClass"):t:"f-fadeIn")?this.animate(r,t,()=>{this.done(e)}):this.done(e))}done(e){this.isClosing()||(e.state=U.Ready,this.emit("done",e),k(e.el,"is-done"),this.isCurrentSlide(e)&&this.option("autoFocus")&&queueMicrotask(()=>{var t;(t=e.panzoom)===null||t===void 0||t.updateControls(),this.option("autoFocus")&&this.focus()}),this.isOpeningSlide(e)&&(R(this.container,gi),!this.isCompact&&this.option("idle")&&this.setIdle()))}isCurrentSlide(e){const t=this.getSlide();return!(!e||!t)&&t.index===e.index}isOpeningSlide(e){var t,i;return((t=this.carousel)===null||t===void 0?void 0:t.prevPage)===null&&e&&e.index===((i=this.getSlide())===null||i===void 0?void 0:i.index)}showLoading(e){e.state=U.Loading;const t=e.el;t&&(k(t,$n),this.emit("loading",e),e.spinnerEl||setTimeout(()=>{if(!this.isClosing()&&!e.spinnerEl&&e.state===U.Loading){let i=pe($i);k(i,"fancybox-spinner"),e.spinnerEl=i,t.prepend(i),this.animate(i,"f-fadeIn")}},250))}hideLoading(e){const t=e.el;if(!t)return;const i=e.spinnerEl;this.isClosing()?i==null||i.remove():(R(t,$n),i&&this.animate(i,"f-fadeOut",()=>{i.remove()}),e.state===U.Loading&&(this.emit("loaded",e),e.state=U.Ready))}setError(e,t){if(this.isClosing())return;const i=new Event("error",{bubbles:!0,cancelable:!0});if(this.emit("error",i,e),i.defaultPrevented)return;e.error=t,this.hideLoading(e),this.clearContent(e);const r=document.createElement("div");r.classList.add("fancybox-error"),r.innerHTML=this.localize(t||"

{{ERROR}}

"),this.setContent(e,r)}clearContent(e){if(e.state===void 0)return;this.emit("clearContent",e),e.contentEl&&(e.contentEl.remove(),e.contentEl=void 0);const t=e.el;t&&(R(t,"has-error"),R(t,"has-unknown"),R(t,`has-${e.type||"unknown"}`)),e.closeBtnEl&&e.closeBtnEl.remove(),e.closeBtnEl=void 0,e.captionEl&&e.captionEl.remove(),e.captionEl=void 0,e.spinnerEl&&e.spinnerEl.remove(),e.spinnerEl=void 0}getSlide(){var e;const t=this.carousel;return((e=t==null?void 0:t.pages[t==null?void 0:t.page])===null||e===void 0?void 0:e.slides[0])||void 0}close(e,t){if(this.isClosing())return;const i=new Event("shouldClose",{bubbles:!0,cancelable:!0});if(this.emit("shouldClose",i,e),i.defaultPrevented)return;e&&e.cancelable&&(e.preventDefault(),e.stopPropagation());const r=()=>{this.proceedClose(e,t)};this.startedFs&&ae&&ae.isFullscreen()?Promise.resolve(ae.exit()).then(()=>r()):r()}clearIdle(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null}setIdle(e=!1){const t=()=>{this.clearIdle(),this.idle=!0,k(this.container,"is-idle"),this.emit("setIdle")};if(this.clearIdle(),!this.isClosing())if(e)t();else{const i=this.option("idle");i&&(this.idleTimer=setTimeout(t,i))}}endIdle(){this.clearIdle(),this.idle&&!this.isClosing()&&(this.idle=!1,R(this.container,"is-idle"),this.emit("endIdle"))}resetIdle(){this.endIdle(),this.setIdle()}toggleIdle(){this.idle?this.endIdle():this.setIdle(!0)}toggleFullscreen(){ae&&(ae.isFullscreen()?ae.exit():ae.request().then(()=>{this.startedFs=!0}))}isClosing(){return[Y.Closing,Y.CustomClosing,Y.Destroy].includes(this.state)}proceedClose(e,t){var i,r;this.state=Y.Closing,this.clearIdle(),this.detachEvents();const a=this.container,l=this.carousel,o=this.getSlide(),c=o&&this.option("placeFocusBack")?o.triggerEl||this.option("triggerEl"):null;if(c&&(Gs(c)?Mn(c):c.focus()),a&&(R(a,gi),k(a,"is-closing"),a.setAttribute(pi,"true"),this.option("animated")&&k(a,fi),a.style.pointerEvents="none"),l){l.clearTransitions(),(i=l.panzoom)===null||i===void 0||i.destroy(),(r=l.plugins.Navigation)===null||r===void 0||r.detach();for(const d of l.slides){d.state=U.Closing,this.hideLoading(d);const h=d.contentEl;h&&this.stop(h);const u=d==null?void 0:d.panzoom;u&&(u.stop(),u.detachEvents(),u.detachObserver()),this.isCurrentSlide(d)||l.emit("removeSlide",d)}}qn=window.scrollX,Yn=window.scrollY,window.addEventListener("scroll",this.onScroll),this.emit("close",e),this.state!==Y.CustomClosing?(t===void 0&&o&&(t=this.optionFor(o,"hideClass")),t&&o?(this.animate(o.contentEl,t,()=>{l&&l.emit("removeSlide",o)}),setTimeout(()=>{this.destroy()},500)):this.destroy()):setTimeout(()=>{this.destroy()},500)}destroy(){var e;if(this.state===Y.Destroy)return;window.removeEventListener("scroll",this.onScroll),this.state=Y.Destroy,(e=this.carousel)===null||e===void 0||e.destroy();const t=this.container;t&&t.remove(),We.delete(this.id);const i=z.getInstance();i?i.focus():(le&&(le.remove(),le=null),Me&&(Me.remove(),Me=null),R(document.documentElement,jn),(()=>{if(!ct)return;const r=document,a=r.body;a.classList.remove(ui),a.style.setProperty(Bn,""),r.documentElement.style.setProperty(Fn,"")})(),this.emit("destroy"))}static bind(e,t,i){if(!ct)return;let r,a="",l={};if(e===void 0?r=document.body:Ne(e)?(r=document.body,a=e,typeof t=="object"&&(l=t||{})):(r=e,Ne(t)&&(a=t),typeof i=="object"&&(l=i||{})),!r||!Q(r))return;a=a||"[data-fancybox]";const o=z.openers.get(r)||new Map;o.set(a,l),z.openers.set(r,o),o.size===1&&r.addEventListener("click",z.fromEvent)}static unbind(e,t){let i,r="";if(Ne(e)?(i=document.body,r=e):(i=e,Ne(t)&&(r=t)),!i)return;const a=z.openers.get(i);a&&r&&a.delete(r),r&&a||(z.openers.delete(i),i.removeEventListener("click",z.fromEvent))}static destroy(){let e;for(;e=z.getInstance();)e.destroy();for(const t of z.openers.keys())t.removeEventListener("click",z.fromEvent);z.openers=new Map}static fromEvent(e){if(e.defaultPrevented||e.button&&e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.composedPath()[0];const i=t.closest("[data-fancybox-trigger]");if(i){const f=i.dataset.fancyboxTrigger||"",v=document.querySelectorAll(`[data-fancybox="${f}"]`),b=parseInt(i.dataset.fancyboxIndex||"",10)||0;t=v[b]||t}if(!(t&&t instanceof Element))return;let r,a,l,o;if([...z.openers].reverse().find(([f,v])=>!(!f.contains(t)||![...v].reverse().find(([b,g])=>{let x=t.closest(b);return!!x&&(r=f,a=b,l=x,o=g,!0)}))),!r||!a||!l)return;o=o||{},e.preventDefault(),t=l;let c=[],d=ee({},ki,o);d.event=e,d.triggerEl=t,d.delegate=i;const h=d.groupAll,u=d.groupAttr,m=u&&t?t.getAttribute(`${u}`):"";if((!t||m||h)&&(c=[].slice.call(r.querySelectorAll(a))),t&&!h&&(c=m?c.filter(f=>f.getAttribute(`${u}`)===m):[t]),!c.length)return;const p=z.getInstance();return p&&p.options.triggerEl&&c.indexOf(p.options.triggerEl)>-1?void 0:(t&&(d.startIndex=c.indexOf(t)),z.fromNodes(c,d))}static fromSelector(e,t,i){let r=null,a="",l={};if(Ne(e)?(r=document.body,a=e,typeof t=="object"&&(l=t||{})):e instanceof HTMLElement&&Ne(t)&&(r=e,a=t,typeof i=="object"&&(l=i||{})),!r||!a)return!1;const o=z.openers.get(r);return!!o&&(l=ee({},o.get(a)||{},l),!!l&&z.fromNodes(Array.from(r.querySelectorAll(a)),l))}static fromNodes(e,t){t=ee({},ki,t||{});const i=[];for(const r of e){const a=r.dataset||{},l=a[Ve]||r.getAttribute(vi)||r.getAttribute("currentSrc")||r.getAttribute(Ve)||void 0;let o;const c=t.delegate;let d;c&&i.length===t.startIndex&&(o=c instanceof HTMLImageElement?c:c.querySelector("img:not([aria-hidden])")),o||(o=r instanceof HTMLImageElement?r:r.querySelector("img:not([aria-hidden])")),o&&(d=o.currentSrc||o[Ve]||void 0,!d&&o.dataset&&(d=o.dataset.lazySrc||o.dataset[Ve]||void 0));const h={src:l,triggerEl:r,thumbEl:o,thumbElSrc:d,thumbSrc:d};for(const u in a){let m=a[u]+"";m=m!=="false"&&(m==="true"||m),h[u]=m}i.push(h)}return new z(i,t)}static getInstance(e){return e?We.get(e):Array.from(We.values()).reverse().find(t=>!t.isClosing()&&t)||null}static getSlide(){var e;return((e=z.getInstance())===null||e===void 0?void 0:e.getSlide())||null}static show(e=[],t={}){return new z(e,t)}static next(){const e=z.getInstance();e&&e.next()}static prev(){const e=z.getInstance();e&&e.prev()}static close(e=!0,...t){if(e)for(const i of We.values())i.close(...t);else{const i=z.getInstance();i&&i.close(...t)}}}Object.defineProperty(z,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.36"}),Object.defineProperty(z,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:ki}),Object.defineProperty(z,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:zl}),Object.defineProperty(z,"openers",{enumerable:!0,configurable:!0,writable:!0,value:new Map});function jl(){const[n,e]=ne(!1),t=$(null),i=$(null);return Re(()=>{const a=t.current;a&&a.scrollHeight>=580&&(i.current.style.display="flex",a.style.height="580px"),z.bind('[data-fancybox="gallery"]')},[]),s("div",{className:"product-information mt-5",children:s("div",{className:"flex gap-[15px]",children:[s("div",{className:"left w-[60%]",children:s("div",{className:"box-desc bg-white p-[12px] rounded-[8px]",children:[s("h3",{className:"title text-2xl block mb-[10px] pb-[10px] border-b-[1px] border-[#B1B1B1] font-bold",children:"Thông tin sản phẩm"}),s("div",{id:"content-desciption",children:s("div",{className:"content nd",ref:t,children:[s("p",{style:"text-align: justify;",children:[s("strong",{children:"Laptop HP Victus 16 R0376TX AY8Z2PA"})," sở hữu chip xử lý Intel Core i7 13700HX cùng VGA RTX 3050 6GB để có được trải nghiệm chơi game, làm việc hiệu quả. Mẫu"," ",s("a",{href:"https://cellphones.com.vn/laptop/hp/victus.html",title:"HP Victus",target:"_blank",children:s("strong",{children:"HP Victus"})})," ","này còn được trang bị màn hình 16 inch FHD 165Hz giúp tái tạo hình ảnh sắc nét, mượt mà. Kèm theo đó là thiết kế bền bỉ, hiện đại để có thể sử dụng ở nhiều không gian."]}),s("h2",{style:"scroll-margin : 154px;",id:"laptop-hp-victus-16-r0376tx-ay8z2pa-hieu-nang-manh-me-hien-thi-an-tuong",children:s("strong",{children:"Laptop HP Victus 16 R0376TX AY8Z2PA - Hiệu năng mạnh mẽ, hiển thị ấn tượng"})}),s("p",{style:"text-align: justify;",children:["HP Victus 16 R0376TX AY8Z2PA với bộ vi xử lý và card đồ họa rời mạnh mẽ sẽ mang tới trải nghiệm chơi game, làm việc mượt mà, hiệu quả. Hãy cùng tìm hiểu thêm những điểm nổi bật mà mẫu laptop gaming của",s("strong",{children:" HP Victus "})," này sở hữu trong bài viết sau."]}),s("h3",{style:"scroll-margin : 154px;",id:"nang-cao-hieu-suat-xu-ly-voi-chip-core-i7-13700hx",children:s("strong",{children:[" ","Nâng cao hiệu suất xử lý với chip Core i7 13700HX"]})}),s("p",{style:"text-align: justify;",children:"Laptop HP Victus 16 R0376TX AY8Z2PA được trang bị con chip xử lý Core i7 13700HX của Intel. Con chip Core i7 16 lõi, 24 luồng này sở hữu khả năng ép xung cực đại lên tới 5GHz để luôn có thể xử lý dữ liệu trong thời gian ngắn. Với bộ nhớ đệm 30MB, hiệu suất xử lý các tác vụ phức tạp của laptop sẽ được giảm đi đáng kể."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-1.jpg",alt:"Cấu hình laptop HP Victus 16 R0376TX AY8Z2PA",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:["Để nâng cao khả năng xử lý đồ hoạ, HP còn trang bị cho phiên bản"," ",s("a",{href:"https://cellphones.com.vn/laptop/hp/victus/victus-16.html",title:"laptop Victus 16",target:"_blank",children:s("strong",{children:"laptop Victus 16"})}),"này card đồ hoạ rời NVIDIA GeForce RTX 3050 6GB GDDR6. Nhờ vậy mà người dùng có thể tự tin trải nghiệm các tựa game với mức cấu hình cao. Không dừng ở đó, các nhu cầu chỉnh sửa hình ảnh, dựng phim, tạo hình 3D,...chuyên nghiệp cũng được thực hiện mượt mà."]}),s("h3",{style:"scroll-margin : 154px;",id:"tich-hop-o-cung-toc-do-cao-cung-dung-luong-ram-lon",children:s("strong",{children:[" ","Tích hợp ổ cứng tốc độ cao cùng dung lượng RAM lớn"," "]})}),s("p",{style:"text-align: justify;",children:"HP Victus 16 R0376TX AY8Z2PA được trang bị sẵn 2 thanh RAM chuẩn DDR5 có tốc độ bus lên tới 4800MT/s. Với tổng dung lượng RAM 16GB, mẫu laptop gaming HP này sẽ đáp ứng tốt nhu cầu đa nhiệm. Không chỉ các tác vụ cơ bản mà nhu cầu đa nhiệm nâng cao trong công việc cũng sẽ được thực hiện mượt mà mà không cần phải nâng cấp cấu hình. Ngoài ra, laptop HP Victus 16 R0376TX AY8Z2PA còn sở hữu một ổ cứng SSD tốc độ cao có dung lượng 512GB. "}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-2.jpg",alt:"Cấu hình laptop HP Victus 16 R0376TX AY8Z2PA",loading:"lazy"})}),s("h3",{style:"scroll-margin : 154px;",id:"thiet-ke-hien-dai-ben-bi",children:s("strong",{children:" Thiết kế hiện đại, bền bỉ "})}),s("p",{style:"text-align: justify;",children:"Laptop Victus 16 R0376TX AY8Z2PA được HP thiết kế hướng tới phong cách hiện đại, tối giản. Tuy vậy nhưng sản phẩm vẫn mang đậm dấu ấn gaming với tông màu đen thu hút và mạnh mẽ. Kèm theo đó là một tổng thể chắc chắn, bền bỉ cùng phần bản lề kích thước lớn."}),s("p",{style:"text-align: justify;",children:"Với trọng lượng khoảng 2.31kg, người dùng vẫn có thể tiện lợi mang theo phiên bản laptop HP Victus này mà không gặp bất tiện. So với các mẫu laptop gaming khác, đây được coi là một điểm cộng giúp sản phẩm đáp ứng nhu cầu chơi game ở nhiều không gian của người dùng."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-3.jpg",alt:"Thiết kế laptop HP Victus 16 R0376TX AY8Z2PA",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:"Để hỗ trợ tốt cả nhu cầu chơi game và làm việc, HP đã trang bị cho laptop Victus 16 R0376TX AY8Z2PA bộ bàn phím Full-size. Với phần bàn phím số riêng biệt, người dùng sẽ cải thiện được tốc độ nhập liệu trong khi làm việc. Bàn phím của laptop còn được tích hợp hệ thống đèn nền RGB 1 để hỗ trợ việc gõ phím trong điều kiện thiếu sáng."}),s("h3",{style:"scroll-margin : 154px;",id:"hien-thi-sac-net-va-muot-ma",children:s("strong",{children:" Hiển thị sắc nét và mượt mà "})}),s("p",{style:"text-align: justify;",children:"Laptop HP Victus 16 R0376TX AY8Z2PA sở hữu không giản hiển thị cực lớn khi được trang bị màn hình có kích thước 16.1 inch. Kèm theo đó là độ phân giải FHD (1920 x 1080p) giúp nội dung hiển thị luôn có được độ rõ nét. Nhờ việc sử dụng tấm nền IPS, người dùng còn có thể điều chỉnh góc nghiêng linh hoạt mà không gây ảnh hưởng tới chất lượng hình ảnh."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-4.jpg",alt:"Hiển thị sắc nét và mượt mà",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:"Điểm nổi bật có trên màn hình HP Victus 16 R0376TX AY8Z2PA chính là tần số quét và độ phủ màu. Với độ phủ màu 100% sRGB, mẫu laptop gaming HP này sẽ hỗ trợ người dùng làm các công việc liên quan tới sáng tạo hiệu quả. Tần số quét ở mức 165Hz sẽ giúp màn hình tái hiện các chuyển động một cách uyển chuyển, mượt mà."}),s("p",{style:"text-align: justify;",children:"Ngoài ra, màn hình HP Victus 16 R0376TX AY8Z2PA còn được phủ lớp chống chói và có độ sáng 300 nits để thoải mái sử dụng ở những nơi có ánh sáng mạnh. Với chuẩn Low Blue Light, màn hình còn giảm thiểu lượng ánh sáng xanh phát ra để hạn chế tình trạng mỏi mắt khi sử dụng laptop trong thời gian dài."}),s("h3",{style:"scroll-margin : 154px;",id:"thoi-luong-pin-dai-ket-noi-phong-phu-va-on-dinh",children:s("strong",{children:[" ","Thời lượng pin dài, kết nối phong phú và ổn định"," "]})}),s("p",{style:"text-align: justify;",children:"Laptop HP Victus 16 R0376TX AY8Z2PA được trang bị viên pin Li-ion Polymer 4-cell có dung lượng ở mức 70Wh. Với dung lượng này, viên pin có thể duy trì trạng thái hoạt động cho laptop lên tới nhiều giờ với các tác vụ hỗn hợp. Laptop còn được trang bị bộ nguồn 200W Smart AC power adapter để hỗ trợ sạc pin nhanh 50% trong khoảng 30 phút."}),s("p",{style:"text-align: justify;",children:s("img",{src:"https://cdn2.cellphones.com.vn/insecure/rs:fill:0:0/q:90/plain/https://cellphones.com.vn/media/wysiwyg/laptop/HP/Victus/Laptop-hp-victus-16-r0376tx-ay8z2pa-5.jpg",alt:"Thời lượng pin dài, kết nối phong phú và ổn định",loading:"lazy"})}),s("p",{style:"text-align: justify;",children:"Để hỗ trợ việc liên kết có dây và chia sẻ dữ liệu, HP còn trang bị cho mẫu laptop Victus của hàng đầy đủ các cổng kết nối thông dụng. Hai cạnh bên laptop được tích hợp các cổng USB Type-A, USB Type-C, RJ-45, HDMI 2.1, jack audio 3.5mm và bộ chuyển đổi điện xoay chiều thông minh."}),s("p",{style:"text-align: justify;",children:"Laptop Victus 16 R0376TX AY8Z2PA còn được trang bị card wireless Bluetooth 5.3 và Intel Wi-Fi 6E AX211 (2x2). Điều này sẽ đảm bảo được khả năng kết nối với các thiết bị ngoại vi, kết nối mạng ổn định, nhanh chóng cho laptop."}),s("h2",{style:"scroll-margin : 154px;",id:"mua-laptop-hp-victus-16-r0376tx-ay8z2pa-gia-tot-tai-cellphones",children:s("strong",{children:[" ","Mua laptop HP Victus 16 R0376TX AY8Z2PA giá tốt tại CellphoneS"," "]})}),s("ul",{children:[s("li",{children:["Hãy tới ngay các cửa hàng CellphoneS trên cả nước để trải nghiệm và đặt mua"," ",s("strong",{children:"Laptop HP Victus 16 R0376TX AY8Z2PA "})," . Mẫu laptop gaming HP này còn có mức giá cực kỳ hấp dẫn khi đi kèm nhiều chương trình ưu đãi, hỗ trợ thu cũ - đổi mới,..."]}),s("li",{children:"Với chính sách hỗ trợ trả góp lãi suất thấp, khách hàng sẽ còn dễ dàng sở hữu và trải nghiệm chiếc laptop này. Ngoài ra, CellphoneS còn hỗ trợ giao hàng toàn quốc để khách hàng tiện lợi đặt mua dù ở nơi đâu."})]})]})}),s("a",{href:"javascript:void(0)",ref:i,className:"more-all js-viewmore-content item-btn flex items-center",onClick:()=>{e(l=>!l);const a=t.current;a.classList.toggle("active"),n&&window.scrollTo({top:a.getBoundingClientRect().top+window.scrollY-200,behavior:"smooth"})},children:n?s(Z,{children:[s("span",{children:"Thu gọn"})," ",s("i",{className:"icon_2025 angle-top mt-[10px]"})]}):s(Z,{children:[s("span",{children:"Xem thêm "}),s("i",{className:"icon_2025 angle-bottom"})]})})]})}),s("div",{className:"right w-[40%]",children:s("div",{className:"box-spec bg-white p-[12px] rounded-[8px]",children:[s("h3",{className:"title text-2xl block mb-[10px] pb-[10px] border-b-[1px] border-[#B1B1B1] font-bold",children:"Thông tin chi tiết"}),s("div",{className:"content table",children:s("table",{width:"638",children:s("tbody",{children:[s("tr",{children:[s("td",{children:"Mã sản phẩm"}),s("td",{children:"VA3416WC"})]}),s("tr",{children:[s("td",{children:"Màu sắc"}),s("td",{children:"Đen"})]}),s("tr",{children:[s("td",{children:"Độ sáng"}),s("td",{children:"Max 300cd/m²"})]}),s("tr",{children:[s("td",{children:"Độ tương phản"}),s("td",{children:"3000:1"})]}),s("tr",{children:[s("td",{children:"Màu sắc hiển thị"}),s("td",{children:"16.7M"})]}),s("tr",{children:[s("td",{children:"Màu sắc hỗ trợ"}),s("td",{children:"6500K"})]}),s("tr",{children:[s("td",{children:"Loại màn hình"}),s("td",{children:"Cong R1500"})]}),s("tr",{children:[s("td",{children:"Kích cỡ màn hình"}),s("td",{children:'34"'})]}),s("tr",{children:[s("td",{children:"Tấm nền"}),s("td",{children:"VA"})]}),s("tr",{children:[s("td",{children:"Góc nhìn"}),s("td",{children:"89°/89° (H/V)"})]}),s("tr",{children:[s("td",{children:"Tính năng đặc biệt"}),s("td",{children:[s("br",{}),"1. Flicker-Free Backlight adjustment",s("br",{}),"2. Dynamic Contrast Ratio: DCR",s("br",{}),"3. Adaptive Sync",s("br",{}),"4.FPS/RTS",s("br",{}),"5.PIP/PBP",s("br",{}),"6. PQ",s("br",{}),"7. GAME PLUS"]})]})]})})}),s("div",{id:"content-specification",className:"hidden table",children:s("table",{width:"638",children:s("tbody",{children:[s("tr",{children:[s("td",{children:"Mã sản phẩm"}),s("td",{children:"VA3416WC"})]}),s("tr",{children:[s("td",{children:"Màu sắc"}),s("td",{children:"Đen"})]}),s("tr",{children:[s("td",{children:"Độ sáng"}),s("td",{children:"Max 300cd/m²"})]}),s("tr",{children:[s("td",{children:"Độ tương phản"}),s("td",{children:"3000:1"})]}),s("tr",{children:[s("td",{children:"Màu sắc hiển thị"}),s("td",{children:"16.7M"})]}),s("tr",{children:[s("td",{children:"Màu sắc hỗ trợ"}),s("td",{children:"6500K"})]}),s("tr",{children:[s("td",{children:"Loại màn hình"}),s("td",{children:"Cong R1500"})]}),s("tr",{children:[s("td",{children:"Kích cỡ màn hình"}),s("td",{children:'34"'})]}),s("tr",{children:[s("td",{children:"Tấm nền"}),s("td",{children:"VA"})]}),s("tr",{children:[s("td",{children:"Góc nhìn"}),s("td",{children:"89°/89° (H/V)"})]}),s("tr",{children:[s("td",{children:"Tính năng đặc biệt"}),s("td",{children:[s("br",{}),"1. Flicker-Free Backlight adjustment",s("br",{}),"2. Dynamic Contrast Ratio: DCR",s("br",{}),"3. Adaptive Sync",s("br",{}),"4.FPS/RTS",s("br",{}),"5.PIP/PBP",s("br",{}),"6. PQ",s("br",{}),"7. GAME PLUS"]})]})]})})}),s("a",{href:"#content-specification","data-fancybox":!0,className:"more-all flex items-center justify-center",children:["Xem thêm thông số ",s("i",{className:"icon_2025 angle-bottom"})]})]})})]})})}function Fl({show:n,onClose:e}){return s(Z,{children:[s("div",{id:"backgroundPopup",className:`${n?"active":""}`,onClick:e}),s("div",{className:`box-form-review fixed left-[50%] top-[50%] w-[860px] bg-white rounded-[12px] translate-x-[-50%] translate-y-[-50%] z-[999] p-[20px] ${n?"":"hidden"}`,id:"js-box-review",children:[s("div",{className:"title relative pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("b",{className:"text-center text-xl block",children:"Đánh giá sản phẩm"}),s("a",{href:"javascript:void(0)",onClick:e,id:"js-close-review",className:"absolute right-0 top-0 text-[#808080] text-[22px] ",children:s("i",{class:"icon_2025 close"})})]}),s("div",{className:"info-form-review w-[500px] mx-[auto]",children:[s("a",{href:"",className:"block m-[10px_auto] p-[10px] rounded-[4px] border-[#B1B1B1]",children:s("img",{src:"/assets/images/small-product-detail.png",width:"100%",height:"100%",className:"block w-[100px] h-[100px] m-[0_auto]",alt:""})}),s("a",{href:"",className:"text-center block mb-[10px]",children:'Laptop Gaming Asus TUF FX505GE-BQ037T Core i7-8750H/Win10(15.6" FHD) - Hàng Chính Hãng'}),s("div",{className:"flex justify-center",children:s("div",{className:"rating-selection",children:[s("input",{type:"radio",className:"rating-input",id:"star5",name:"rating",value:"5"}),s("label",{for:"star5",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star4",name:"rating",value:"4"}),s("label",{for:"star4",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star3",name:"rating",value:"3"}),s("label",{for:"star3",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star2",name:"rating",value:"2"}),s("label",{for:"star2",className:"rating-star"}),s("input",{type:"radio",className:"rating-input",id:"star1",name:"rating",value:"1"}),s("label",{for:"star1",className:"rating-star"})]})}),s("div",{className:"clearfix"})]}),s("div",{className:"form-input mt-[20px]",children:[s("input",{type:"text",name:"title",placeholder:"Mời bạn nhập tiêu đề..."}),s("div",{className:"note-error"})]}),s("div",{className:"form-input mt-[10px]",children:[s("textarea",{name:"content",placeholder:"Mời bạn chia sẻ cảm nhận...",id:""}),s("div",{className:"note-error"})]}),s("input",{id:"js-file-upload-id",type:"hidden",value:""}),s("div",{id:"js-container-selector",className:"mt-[10px] flex items-center",children:s("a",{href:"javascript:void(0)",className:"flex items-center",id:"js-select-file",children:[s("i",{className:"icon_2025 upload_image"}),s("span",{className:"text-[#1877F2] ml-[5px]",children:"Gửi ảnh thực tế"}),s("span",{className:"px-[5px]",children:"(tối đa 3 ảnh)"})]})}),s("button",{type:"submit",className:"mt-[15px] w-full h-[45px] bg-[#C8B7FF] rounded-[4px] text-white leading-[45px] hover:bg-[var(--color-global)]",children:"Gửi đánh giá"})]})]})}function Bl(){const[n,e]=ne(!1);return s(Z,{children:[s("div",{className:"p-[15px] bg-white mt-5 rounded-[8px]",children:[s("div",{className:"flex items-center justify-between pb-[15px] border-b-[1px] border-[#B1B1B1]",children:[s("h3",{className:"text-xl font-bold",children:"Thành viên BestPC đánh giá"}),s("div",{className:"select-sort relative border border-[#b1b1b1] h-[45px] rounded-[4px] overflow-hidden",children:[s("select",{name:"",id:"",className:" appearance-none w-full relative p-[0_20px_0_10px] bg-transparent h-full z-[2]",children:[s("option",{value:"",children:"Top review"}),s("option",{value:"",children:"Review mới nhất"})]}),s("i",{className:"icon_2025 angle-right ml-[5px] absolute right-[7px] top-[12px] z-[1] rotate-[90deg]"})]})]}),s("div",{className:"flex gap-[25px]",children:[s("div",{className:"left w-[20%]",children:[s("b",{className:"text-center block pt-[20px] pb-[5px] text-2xl",children:"54 đánh giá"}),s("div",{className:"flex items-center justify-center",children:[s("i",{className:"icon-star star4"}),s("span",{className:"ml-[5px] mt-[3px]",children:"4.8"})]}),s("div",{className:"border-t-[1px] border-[#E4E4E4] pt-[10px] mt-[10px]",children:[s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star5"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star4"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star3"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star2"}),s("span",{children:"50 đánh giá"})]}),s("div",{className:"flex items-center justify-between mb-[10px]",children:[s("i",{className:"icon-star star1"}),s("span",{children:"50 đánh giá"})]})]}),s("div",{className:"btn border-t-[1px] border-[#E4E4E4] pt-[10px] mt-[20px]",children:[s("p",{className:"text-center mt-[10px]",children:"Đánh giá của bạn về sản phẩm"}),s("a",{href:"javascript:void(0)",id:"js-show-form",onClick:t=>{t.preventDefault(),e(!0)},className:"block mt-[10px] h-[40px] leading-[40px] text-center text-white bg-[#FF7A00] rounded-[4px]",children:"Gửi đánh giá của bạn về sản phẩm"})]})]}),s("div",{className:"right w-[80%]",children:[s("div",{className:"list-review mt-[15px]",children:[s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-1.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"time mt-[10px]",children:[s("b",{className:"mb-[2px] text-center block",children:"Dino"}),s("p",{className:"text-center",children:"10:00pm 20/02/2025"})]})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("div",{className:"flex items-center mb-[5px]",children:[s("i",{className:"icon-star star4"}),s("b",{className:"ml-[10px]",children:"Laptop Gaming Asus ROG 16GB"})]}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"flex items-center mb-[10px]",children:[s("a",{href:"/src/assets/images/small-product-detail.png","data-fancybox":"gallery",className:"w-[80px] block mr-[10px]",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})})]}),s("div",{className:"btn",children:[s("a",{href:"javascript:void(0)",className:"text-[#1877F2] mr-[10px]",children:["Bình luận"," ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]}),s("a",{href:"javascript:void(0)",className:"text-[#1877F2]",children:["Thích ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]})]})]})]}),s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-2.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"time mt-[10px]",children:[s("b",{className:"mb-[2px] text-center block",children:"Dino"}),s("p",{className:"text-center",children:"10:00pm 20/02/2025"})]})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("div",{className:"flex items-center mb-[5px]",children:[s("i",{className:"icon-star star4"}),s("b",{className:"ml-[10px]",children:"Laptop Gaming Asus ROG 16GB"})]}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"flex items-center mb-[10px]",children:[s("a",{href:"/src/assets/images/small-product-detail.png","data-fancybox":"gallery",className:"w-[80px] block mr-[10px]",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})})]}),s("div",{className:"btn",children:[s("a",{href:"javascript:void(0)",className:"text-[#1877F2] mr-[10px]",children:["Bình luận"," ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]}),s("a",{href:"javascript:void(0)",className:"text-[#1877F2]",children:["Thích ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]})]})]})]}),s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-3.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"time mt-[10px]",children:[s("b",{className:"mb-[2px] text-center block",children:"Dino"}),s("p",{className:"text-center",children:"10:00pm 20/02/2025"})]})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("div",{className:"flex items-center mb-[5px]",children:[s("i",{className:"icon-star star4"}),s("b",{className:"ml-[10px]",children:"Laptop Gaming Asus ROG 16GB"})]}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"flex items-center mb-[10px]",children:[s("a",{href:"/src/assets/images/small-product-detail.png","data-fancybox":"gallery",className:"w-[80px] block mr-[10px]",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})}),s("a",{href:"/src/assets/images/small-product-detail.png",className:"w-[80px] block mr-[10px]","data-fancybox":"gallery",children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-[100%] block",alt:""})})]}),s("div",{className:"btn",children:[s("a",{href:"javascript:void(0)",className:"text-[#1877F2] mr-[10px]",children:["Bình luận"," ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]}),s("a",{href:"javascript:void(0)",className:"text-[#1877F2]",children:["Thích ",s("span",{className:"ml-[3px] text-black",children:"(23)"})]})]})]})]})]}),s("a",{href:"javascript:void(0)",className:"pt-[15px] text-[#FF7A00] btn-more-review",children:["Xem thêm ",s("span",{children:"23"})," bình luận khác"]})]})]})]}),s(Fl,{show:n,onClose:()=>e(!1)})]})}function Hl(n,e,t,i){return n.params.createElements&&Object.keys(i).forEach(r=>{if(!t[r]&&t.auto===!0){let a=ce(n.el,`.${i[r]}`)[0];a||(a=jt("div",i[r]),a.className=i[r],n.el.append(a)),t[r]=a,e[r]=a}}),t}function Xe(n){let{swiper:e,extendParams:t,on:i,emit:r}=n;t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),e.navigation={nextEl:null,prevEl:null};function a(f){let v;return f&&typeof f=="string"&&e.isElement&&(v=e.el.querySelector(f)||e.hostEl.querySelector(f),v)?v:(f&&(typeof f=="string"&&(v=[...document.querySelectorAll(f)]),e.params.uniqueNavElements&&typeof f=="string"&&v&&v.length>1&&e.el.querySelectorAll(f).length===1?v=e.el.querySelector(f):v&&v.length===1&&(v=v[0])),f&&!v?f:v)}function l(f,v){const b=e.params.navigation;f=ve(f),f.forEach(g=>{g&&(g.classList[v?"add":"remove"](...b.disabledClass.split(" ")),g.tagName==="BUTTON"&&(g.disabled=v),e.params.watchOverflow&&e.enabled&&g.classList[e.isLocked?"add":"remove"](b.lockClass))})}function o(){const{nextEl:f,prevEl:v}=e.navigation;if(e.params.loop){l(v,!1),l(f,!1);return}l(v,e.isBeginning&&!e.params.rewind),l(f,e.isEnd&&!e.params.rewind)}function c(f){f.preventDefault(),!(e.isBeginning&&!e.params.loop&&!e.params.rewind)&&(e.slidePrev(),r("navigationPrev"))}function d(f){f.preventDefault(),!(e.isEnd&&!e.params.loop&&!e.params.rewind)&&(e.slideNext(),r("navigationNext"))}function h(){const f=e.params.navigation;if(e.params.navigation=Hl(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!(f.nextEl||f.prevEl))return;let v=a(f.nextEl),b=a(f.prevEl);Object.assign(e.navigation,{nextEl:v,prevEl:b}),v=ve(v),b=ve(b);const g=(x,y)=>{x&&x.addEventListener("click",y==="next"?d:c),!e.enabled&&x&&x.classList.add(...f.lockClass.split(" "))};v.forEach(x=>g(x,"next")),b.forEach(x=>g(x,"prev"))}function u(){let{nextEl:f,prevEl:v}=e.navigation;f=ve(f),v=ve(v);const b=(g,x)=>{g.removeEventListener("click",x==="next"?d:c),g.classList.remove(...e.params.navigation.disabledClass.split(" "))};f.forEach(g=>b(g,"next")),v.forEach(g=>b(g,"prev"))}i("init",()=>{e.params.navigation.enabled===!1?p():(h(),o())}),i("toEdge fromEdge lock unlock",()=>{o()}),i("destroy",()=>{u()}),i("enable disable",()=>{let{nextEl:f,prevEl:v}=e.navigation;if(f=ve(f),v=ve(v),e.enabled){o();return}[...f,...v].filter(b=>!!b).forEach(b=>b.classList.add(e.params.navigation.lockClass))}),i("click",(f,v)=>{let{nextEl:b,prevEl:g}=e.navigation;b=ve(b),g=ve(g);const x=v.target;let y=g.includes(x)||b.includes(x);if(e.isElement&&!y){const w=v.path||v.composedPath&&v.composedPath();w&&(y=w.find(_=>b.includes(_)||g.includes(_)))}if(e.params.navigation.hideOnClick&&!y){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===x||e.pagination.el.contains(x)))return;let w;b.length?w=b[0].classList.contains(e.params.navigation.hiddenClass):g.length&&(w=g[0].classList.contains(e.params.navigation.hiddenClass)),r(w===!0?"navigationShow":"navigationHide"),[...b,...g].filter(_=>!!_).forEach(_=>_.classList.toggle(e.params.navigation.hiddenClass))}});const m=()=>{e.el.classList.remove(...e.params.navigation.navigationDisabledClass.split(" ")),h(),o()},p=()=>{e.el.classList.add(...e.params.navigation.navigationDisabledClass.split(" ")),u()};Object.assign(e.navigation,{enable:m,disable:p,update:o,init:h,destroy:u})}function qe(n){let{swiper:e,extendParams:t,on:i}=n;t({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let r=!1,a=!1;e.thumbs={swiper:null};function l(){const d=e.thumbs.swiper;if(!d||d.destroyed)return;const h=d.clickedIndex,u=d.clickedSlide;if(u&&u.classList.contains(e.params.thumbs.slideThumbActiveClass)||typeof h>"u"||h===null)return;let m;d.params.loop?m=parseInt(d.clickedSlide.getAttribute("data-swiper-slide-index"),10):m=h,e.params.loop?e.slideToLoop(m):e.slideTo(m)}function o(){const{thumbs:d}=e.params;if(r)return!1;r=!0;const h=e.constructor;if(d.swiper instanceof h){if(d.swiper.destroyed)return r=!1,!1;e.thumbs.swiper=d.swiper,Object.assign(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Object.assign(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1}),e.thumbs.swiper.update()}else if(rt(d.swiper)){const u=Object.assign({},d.swiper);Object.assign(u,{watchSlidesProgress:!0,slideToClickedSlide:!1}),e.thumbs.swiper=new h(u),a=!0}return e.thumbs.swiper.el.classList.add(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",l),!0}function c(d){const h=e.thumbs.swiper;if(!h||h.destroyed)return;const u=h.params.slidesPerView==="auto"?h.slidesPerViewDynamic():h.params.slidesPerView;let m=1;const p=e.params.thumbs.slideThumbActiveClass;if(e.params.slidesPerView>1&&!e.params.centeredSlides&&(m=e.params.slidesPerView),e.params.thumbs.multipleActiveThumbs||(m=1),m=Math.floor(m),h.slides.forEach(b=>b.classList.remove(p)),h.params.loop||h.params.virtual&&h.params.virtual.enabled)for(let b=0;b{g.classList.add(p)});else for(let b=0;bw.getAttribute("data-swiper-slide-index")===`${e.realIndex}`);g=h.slides.indexOf(y),x=e.activeIndex>e.previousIndex?"next":"prev"}else g=e.realIndex,x=g>e.previousIndex?"next":"prev";v&&(g+=x==="next"?f:-1*f),h.visibleSlidesIndexes&&h.visibleSlidesIndexes.indexOf(g)<0&&(h.params.centeredSlides?g>b?g=g-Math.floor(u/2)+1:g=g+Math.floor(u/2)-1:g>b&&h.params.slidesPerGroup,h.slideTo(g,d?0:void 0))}}i("beforeInit",()=>{const{thumbs:d}=e.params;if(!(!d||!d.swiper))if(typeof d.swiper=="string"||d.swiper instanceof HTMLElement){const h=Ee(),u=()=>{const p=typeof d.swiper=="string"?h.querySelector(d.swiper):d.swiper;if(p&&p.swiper)d.swiper=p.swiper,o(),c(!0);else if(p){const f=`${e.params.eventsPrefix}init`,v=b=>{d.swiper=b.detail[0],p.removeEventListener(f,v),o(),c(!0),d.swiper.update(),e.update()};p.addEventListener(f,v)}return p},m=()=>{if(e.destroyed)return;u()||requestAnimationFrame(m)};requestAnimationFrame(m)}else o(),c(!0)}),i("slideChange update resize observerUpdate",()=>{c()}),i("setTransition",(d,h)=>{const u=e.thumbs.swiper;!u||u.destroyed||u.setTransition(h)}),i("beforeDestroy",()=>{const d=e.thumbs.swiper;!d||d.destroyed||a&&d.destroy()}),Object.assign(e.thumbs,{init:o,update:c})}function Ye(n){let{swiper:e,extendParams:t,emit:i,once:r}=n;t({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}});function a(){if(e.params.cssMode)return;const c=e.getTranslate();e.setTranslate(c),e.setTransition(0),e.touchEventsData.velocities.length=0,e.freeMode.onTouchEnd({currentPos:e.rtl?e.translate:-e.translate})}function l(){if(e.params.cssMode)return;const{touchEventsData:c,touches:d}=e;c.velocities.length===0&&c.velocities.push({position:d[e.isHorizontal()?"startX":"startY"],time:c.touchStartTime}),c.velocities.push({position:d[e.isHorizontal()?"currentX":"currentY"],time:De()})}function o(c){let{currentPos:d}=c;if(e.params.cssMode)return;const{params:h,wrapperEl:u,rtlTranslate:m,snapGrid:p,touchEventsData:f}=e,b=De()-f.touchStartTime;if(d<-e.minTranslate()){e.slideTo(e.activeIndex);return}if(d>-e.maxTranslate()){e.slides.length1){const S=f.velocities.pop(),N=f.velocities.pop(),E=S.position-N.position,P=S.time-N.time;e.velocity=E/P,e.velocity/=2,Math.abs(e.velocity)150||De()-S.time>300)&&(e.velocity=0)}else e.velocity=0;e.velocity*=h.freeMode.momentumVelocityRatio,f.velocities.length=0;let g=1e3*h.freeMode.momentumRatio;const x=e.velocity*g;let y=e.translate+x;m&&(y=-y);let w=!1,_;const M=Math.abs(e.velocity)*20*h.freeMode.momentumBounceRatio;let C;if(ye.minTranslate())h.freeMode.momentumBounce?(y-e.minTranslate()>M&&(y=e.minTranslate()+M),_=e.minTranslate(),w=!0,f.allowMomentumBounce=!0):y=e.minTranslate(),h.loop&&h.centeredSlides&&(C=!0);else if(h.freeMode.sticky){let S;for(let N=0;N-y){S=N;break}Math.abs(p[S]-y){e.loopFix()}),e.velocity!==0){if(m?g=Math.abs((-y-e.translate)/e.velocity):g=Math.abs((y-e.translate)/e.velocity),h.freeMode.sticky){const S=Math.abs((m?-y:y)-e.translate),N=e.slidesSizesGrid[e.activeIndex];S{!e||e.destroyed||!f.allowMomentumBounce||(i("momentumBounce"),e.setTransition(h.speed),setTimeout(()=>{e.setTranslate(_),Yt(u,()=>{!e||e.destroyed||e.transitionEnd()})},0))})):e.velocity?(i("_freeModeNoMomentumRelease"),e.updateProgress(y),e.setTransition(g),e.setTranslate(y),e.transitionStart(!0,e.swipeDirection),e.animating||(e.animating=!0,Yt(u,()=>{!e||e.destroyed||e.transitionEnd()}))):e.updateProgress(y),e.updateActiveIndex(),e.updateSlidesClasses()}else if(h.freeMode.sticky){e.slideToClosest();return}else h.freeMode&&i("_freeModeNoMomentumRelease");(!h.freeMode.momentum||b>=h.longSwipesMs)&&(i("_freeModeStaticRelease"),e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses())}Object.assign(e,{freeMode:{onTouchStart:a,onTouchMove:l,onTouchEnd:o}})}function $l(){const[n,e]=ne(null);return s(Z,{children:s("div",{className:"box-product-detail bg-[#F4F4F4] pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/man-hinh.html",itemprop:"item",className:"nopad-l flex items-center",children:[s("span",{itemprop:"name",children:"Màn hình máy tính"}),s("i",{className:"icon_2025 angle-right text-[#637381] ml-[12px]"})]}),s("meta",{itemprop:"position",content:"2"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/aivision.html",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"AIVISION"})}),s("meta",{itemprop:"position",content:"3"})]})]})}),s("div",{className:"p-[15px] grid grid-cols-2 gap-[15px] rounded-[8px] bg-white",children:[s("div",{className:"left",children:[s("div",{className:"relative",children:s(Oe,{spaceBetween:10,navigation:!0,thumbs:{swiper:n},modules:[Ye,Xe,qe],className:"swiper border border-[#B1B1B1 rounded-[12px]",id:"js-slider-big",children:[s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.jpg",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail-2.jpg",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail-3.jpg",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail-4.jpg",alt:""})})]})}),s("div",{className:"relative mt-[12px]",children:[s(Oe,{onSwiper:e,spaceBetween:15,slidesPerView:5,navigation:{prevEl:"#btn-slider-small .swiper-button-prev",nextEl:"#btn-slider-small .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"swiper",id:"js-slider-small",children:[s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",alt:""})})]}),s("div",{className:"btn-small",id:"btn-slider-small",children:[s("div",{className:"swiper-button-next right-[-15px] w-[30px] h-[30px]"}),s("div",{className:"swiper-button-prev left-[-15px] w-[30px] h-[30px]"})]})]})]}),s("div",{className:"right",children:[s("h1",{className:"text-[24px] text-black mb-[5px]",children:'Laptop Gaming Asus TUF FX505GE-BQ037T Core i7-8750H/Win10(15.6" FHD) - Hàng Chính Hãng'}),s("div",{className:"flex items-center text-base",children:[s("div",{className:"info-review flex items-center mr-[15px]",children:[s("i",{className:"icon-star star-small"}),s("span",{className:"ml-[5px] mt-[2px]",children:"5/5"})]}),s("div",{className:"info-view flex items-center mr-[15px]",children:[s("i",{className:"icon_2025 view"}),s("span",{className:"text-[#1877F2] ml-[5px]",children:"120"})]}),s("div",{className:"info-date flex items-center mr-[15px]",children:[s("i",{className:"icon_2025 time-big"}),s("span",{className:"text-[#1877F2] ml-[5px]",children:"12/03/2025"})]}),s("a",{href:"",className:"info-share flex items-center",children:[s("i",{className:"icon_2025 share"}),s("span",{className:"ml-[5px] mt-[2px]",children:"Chia sẻ"})]})]}),s("div",{className:"flex items-center mt-[5px] text-base",children:[s("div",{className:"source-review flex items-centermr-[10px]",children:[s("span",{children:"Reviews trên:"}),s("a",{href:"",className:"ml-[5px] text-[#1877F2]",children:"Internet"}),s("p",{className:"ml-[5px]",children:"1233 đánh giá"})]}),s("div",{className:"pl-[10px] ml-[10px] flex items-center border-l-[1.5px] border-[#000]",children:[s("a",{href:"",className:"mr-[5px] text-[#462F91]",children:"BestPC"}),s("p",{children:"12003 đánh giá"})]})]}),s("div",{className:"box-price flex items-center my-[10px]",children:[s("span",{className:"mr-[10px]",children:"Giá:"}),s("b",{className:"text-[#D80A00] text-[28px]",children:"9.000.000đ - 12.000.000đ"})]}),s("div",{className:"total-shop flex items-center",children:[s("div",{className:"box-shop",children:s("i",{className:"icon_2025 shop"})}),s("p",{className:"ml-[7px]",children:"Có 12 cửa hàng bán"})]}),s("div",{className:"box-summary mt-[15px]",children:s("ul",{children:[s("li",{children:"CPU: Intel Core i7-8750H ( 2.2 GHz - 4.1 GHz / 9MB / 6 nhân, 12 luồng )"}),s("li",{children:'Màn hình: 15.6" ( 1920 x 1080 ) , không cảm ứng'}),s("li",{children:"RAM: 1 x 8GB DDR4 2666MHz"}),s("li",{children:"Đồ họa: Intel UHD Graphics 630 / NVIDIA GeForce GTX 1050Ti 4GB GDDR5"}),s("li",{children:"Lưu trữ: 128GB SSD M.2 NVMe / 1TB HDD 5400RPM"}),s("li",{children:"Hệ điều hành: Windows 10 Home SL 64-bit"}),s("li",{children:"Pin: 4 cell 64 Wh Pin liền"}),s("li",{children:"khối lượng: 2.5 kg"}),s("li",{children:"Cổng giao tiếp: 1x USB 2.0,"})]})}),s("a",{href:"",className:"group mt-4 flex items-center justify-center w-ful py-[10px] border border-[#D3D3D3] rounded-[4px] text-center hover:bg-[var(--color-global)] hover:text-white",children:[s("img",{src:"/assets/images/icon-file-save.png",className:"w-[18px] h-[24px] block group-hover:brightness-[0] group-hover:invert-[1]",alt:"save"}),s("b",{className:"ml-[10px] text-base",children:"Lưu sản phẩm lại xem sau"})]})]})]}),s(_l,{}),s(Bl,{}),s(jl,{}),s("div",{className:"mt-5 bg-white rounded-[8px] p-[15px]",children:[s("div",{className:"flex items-center justify-between mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("h3",{className:"text-xl font-bold",children:"Sản phẩm tương tự"}),s("a",{href:"javascript:void(0)",className:"text-[#462F91] flex items-center justify-center w-[130px] h-[32px] leading-[32px] border-[#462F91] border-[1px] rounded-[4px] hover:bg-[#462F91] hover:text-white group",children:[s("span",{children:"Xem tất cả"}),s("i",{className:"icon_2025 mouse ml-[5px] group-hover:brightness-0 group-hover:invert-[1]"})]})]}),s("div",{className:"relative mt-[15px]",children:[s(Oe,{slidesPerView:5,spaceBetween:15,navigation:{prevEl:"#js-product-similar-btn .swiper-button-prev",nextEl:"#js-product-similar-btn .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"product-list swiper relative",children:[s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})})]}),s("div",{className:"btn-slider",id:"js-product-similar-btn",children:[s("div",{className:"swiper-button-next right-[-15px]"}),s("div",{className:"swiper-button-prev left-[-15px]"})]})]})]}),s("div",{className:"mt-5 bg-white rounded-[8px] p-[15px]",children:[s("div",{className:"flex items-center justify-between mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("h3",{className:"text-xl font-bold",children:"Sản phẩm bạn có thể thích"}),s("a",{href:"javascript:void(0)",className:"text-[#462F91] flex items-center justify-center w-[130px] h-[32px] leading-[32px] border-[#462F91] border-[1px] rounded-[4px] hover:bg-[#462F91] hover:text-white group",children:[s("span",{children:"Xem tất cả"}),s("i",{className:"icon_2025 mouse ml-[5px] group-hover:brightness-0 group-hover:invert-[1]"})]})]}),s("div",{className:"relative mt-[15px]",children:[s(Oe,{slidesPerView:5,spaceBetween:15,navigation:{prevEl:"#js-product-like-btn .swiper-button-prev",nextEl:"#js-product-like-btn .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"product-list swiper relative",children:[s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})}),s(D,{children:s("div",{className:"product-item",children:[s("a",{href:"",className:"product-image",children:s("img",{src:"/assets/images/box-image.png",alt:"Laptop Dell"})}),s("div",{className:"info-product",children:[s("a",{href:"",className:"name-product line-clamp-2",children:"Laptop văn phòng Dell RAM 8G Core i7"}),s("div",{className:"summary line-clamp-1",children:"Intel Core i5 / 8GB / 256GB / SSD"}),s("div",{className:"locahost-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 map-3"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Quận Thanh Xuân"})]}),s("div",{className:"time-pro flex items-center mb-[5px]",children:[s("i",{className:"icon_2025 time-gray"}),s("div",{className:"flex items-center mt-[1px]",children:[s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"11/04/2025"}),s("span",{className:"ml-[5px]",children:"|"}),s("span",{className:"text-[#595959] ml-[5px] mt-[3px]",children:"Còn 01 ngày"})]})]}),s("div",{className:"price",children:"15.000.000đ"}),s("div",{className:"user-pro flex items-center",children:[s("img",{src:"/assets/images/avartar.png",className:"w-[24px] h-[24px] block rounded-[50%]",width:"24px",height:"24px",alt:"avartar"}),s("b",{className:"ml-[7px]",children:"Thanh Mai"})]})]})]})})]}),s("div",{className:"btn-slider",id:"js-product-like-btn",children:[s("div",{className:"swiper-button-next right-[-15px]"}),s("div",{className:"swiper-button-prev left-[-15px]"})]})]})]})]})})})}function Gl({show:n,onClose:e}){return s(Z,{children:[s("div",{id:"backgroundPopup",className:`${n?"active":""}`,onClick:e}),s("div",{className:`fixed w-[1400px] bg-white left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] z-[999] ${n?"":"hidden"}`,id:"js-modal-popup",children:[s("div",{className:"header-popup p-[10px] bg-[var(--color-global)] flex items-center justify-between",children:[s("b",{className:"w-[205px] mr-[15px] text-white",children:"Chọn linh kiện"}),s("div",{className:"w-[calc(100%-275px)] relative input-search",children:s("form",{action:"/search",enctype:"text/plain",method:"get",className:"relative w-full h-[45px] bg-white rounded-[3px] overflow-hidden",children:[s("input",{type:"text",name:"q",placeholder:"Bạn cần tìm linh kiện gì...",className:"search-input w-full h-full p-[0_10px] outline-none rounded-[8px] text-base"}),s("button",{type:"submit",className:"absolute right-[10px] top-[5px] w-[40px] h-[35px] pl-[10px]",children:s("i",{className:"icon_2025 search "})})]})}),s("a",{href:"javascript:void(0)",onClick:e,className:"w-[54px] flex items-center justify-end",children:s("i",{className:"icon_2025 close brightness-0 invert-[1]"})})]}),s("div",{className:"content-popup p-[10px] bg-white",children:s("div",{className:"flex gap-[15px]",children:[s("div",{className:"left w-[205px]",children:[s("b",{className:"",children:"230 sản phẩm"}),s("div",{className:"mt-3 title-filter flex items-center justify-between px-[20px] bg-[#f1f1f1] rounded-[4px_4px_0_0] h-[52px] w-full leading-[52px]",children:[s("b",{className:"text-xl",children:"Bộ lọc"}),s("i",{className:"icon_2025 filter"})]}),s("div",{className:"list-filter h-[calc(100vh-208px)] overflow-auto",children:[s("div",{className:"item-filter mb-2.5",children:[s("h3",{className:"text-lg font-[500] uppercase leading-loose text-black py-[5px] border-b-[1px] border-[#D3D3D3]",children:"Lọc theo"}),s("div",{className:"mt-2.5 text-base leading-8 text-black",children:[s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle1",className:"checkbox"}),s("label",{for:"vehicle1",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle2",className:"checkbox"}),s("label",{for:"vehicle2",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle3",className:"checkbox"}),s("label",{for:"vehicle3",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle4",className:"checkbox"}),s("label",{for:"vehicle4",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle5",className:"checkbox"}),s("label",{for:"vehicle5",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"Máy tính dành cho"})]})]})]}),s("div",{className:"item-filter mb-2.5",children:[s("h3",{className:"text-lg font-[500] uppercase leading-loose text-black py-[5px] border-b-[1px] border-[#D3D3D3]",children:"Lọc theo"}),s("div",{className:"mt-2.5 grid grid-flow-col grid-rows-9 text-base leading-8 text-black",children:[s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle1",className:"checkbox"}),s("label",{for:"vehicle1",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"All"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle2",className:"checkbox"}),s("label",{for:"vehicle2",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"32gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle3",className:"checkbox"}),s("label",{for:"vehicle3",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"64bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle4",className:"checkbox"}),s("label",{for:"vehicle4",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"16bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle5",className:"checkbox"}),s("label",{for:"vehicle5",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"12gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"4gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"2gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"24gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle2",className:"checkbox"}),s("label",{for:"vehicle2",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"32gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle3",className:"checkbox"}),s("label",{for:"vehicle3",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"64bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle4",className:"checkbox"}),s("label",{for:"vehicle4",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"16bg"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle5",className:"checkbox"}),s("label",{for:"vehicle5",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"12gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"4gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"2gb"})]}),s("a",{href:"",className:"item flex items-center ",children:[s("input",{type:"checkbox",id:"vehicle6",className:"checkbox"}),s("label",{for:"vehicle6",className:"ml-2 line-clamp-1 w-[calc(100%-28px)]",children:"24gb"})]})]})]})]})]}),s("div",{className:"right w-[calc(100%-220px)]",children:[s("div",{className:"flex gap-[15px]",children:[s("a",{href:"",className:"text-[var(--color-hover)]",children:"Chọn tất cả"}),s("a",{href:"",children:"Bỏ chọn tất cả"}),s("a",{href:"",children:"So sánh sản phẩm đã chọn"})]}),s("div",{className:"mt-3 relative z-[9] grid grid-cols-11 bg-[#f1f1f1] rounded-[4px_4px_0_0] h-[52px] w-full leading-[52px]",children:[s("b",{className:"col-span-3 text-center",children:"Tên"}),s("b",{children:"Dung lượng"}),s("b",{children:"Thế hệ"}),s("b",{children:"Bộ nhớ"}),s("b",{children:"Độ ồn"}),s("b",{children:"Màu sắc"}),s("b",{children:"Đánh giá"}),s("b",{className:"col-span-2",children:"Thành tiền"})]}),s("div",{className:"list mt-3 h-[calc(100vh-208px)] overflow-auto",children:[s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]}),s("div",{className:"item grid grid-cols-11 items-center py-[10px] border-b-[1px] border-[#dedede]",children:[s("div",{className:"col-span-3",children:s("div",{className:"flex items-center",children:[s("input",{type:"checkbox",className:"checkbox w-[24px] mx-[20px]"}),s("a",{href:"",className:"image w-[50px] h-[50px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-140px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"text-center",children:"8bg"}),s("div",{className:"",children:"5"}),s("div",{children:"GDDR5"}),s("div",{className:"text-center",children:"5db"}),s("div",{children:"Đen"}),s("div",{className:"flex items-center",children:[s("i",{className:"icon_star star4"}),s("span",{className:"ml-[5px]",children:"(125)"})]}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("div",{className:"price",children:"3.400.000đ"}),s("a",{href:"",className:"block w-[60px] h-[40px] leading-[40px] text-center text-white font-bold bg-[var(--color-hover)] rounded-[4px]",children:"Add"})]})]})]})]})]})})]})]})}function Vl(){const[n,e]=ne(!1);return s(Z,{children:[s("div",{className:"mt-6 flex items-center border-b-[1px] border-neutral-200 pb-3",children:[s("b",{className:"left w-[200px] name-component",children:"Sản phẩm"}),s("div",{className:"right w-[calc(100%-200px)] grid grid-cols-8",children:[s("b",{className:"item col-span-3",children:"Thông tin"}),s("b",{className:"item",children:"Giá gốc"}),s("b",{className:"item",children:"Khuyến mãi"}),s("b",{className:"item",children:"Thành tiền"}),s("b",{className:"item col-span-2",children:"Nhà cung cấp "})]})]}),s("div",{className:"list-buildpc",children:[s("div",{className:"item-component flex items-start py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("div",{className:"item-info-product grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"/buildpc/detail",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"/buildpc/detail",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"total-amount",children:"4.000.000đ"}),s("div",{className:"supplier col-span-2 flex items-center justify-between",children:[s("a",{href:"",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[30px] object-contain",alt:""})}),s("div",{className:"btn flex items-center",children:[s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"}),s("a",{href:"",className:"group hover:bg-red-500 p-1.5 rounded-[50%]",children:s("i",{className:"icon_2025 close group-hover:brightness-0 group-hover:invert-[1]"})})]})]})]})})]}),s("div",{className:"item-component flex items-start py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:[s("div",{className:"item-info-product grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"/buildpc/detail",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"/buildpc/detail",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"total-amount",children:"4.000.000đ"}),s("div",{className:"supplier col-span-2 flex items-center justify-between",children:[s("a",{href:"",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[30px] object-contain",alt:""})}),s("div",{className:"btn flex items-center",children:[s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"}),s("a",{href:"",className:"group hover:bg-red-500 p-1.5 rounded-[50%]",children:s("i",{className:"icon_2025 close group-hover:brightness-0 group-hover:invert-[1]"})})]})]})]}),s("div",{className:"item-info-product grid items-center grid-cols-8 mt-2.5 pt-2.5 border-t-[1px] border-neutral-200",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"/buildpc/detail",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"/buildpc/detail",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"total-amount",children:"4.000.000đ"}),s("div",{className:"supplier col-span-2 flex items-center justify-between",children:[s("a",{href:"",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[30px] object-contain",alt:""})}),s("div",{className:"btn flex items-center",children:[s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"}),s("a",{href:"",className:"group hover:bg-red-500 p-1.5 rounded-[50%]",children:s("i",{className:"icon_2025 close group-hover:brightness-0 group-hover:invert-[1]"})})]})]})]}),s("a",{href:"javascript:void(0)",onClick:t=>{t.preventDefault(),e(!0)},className:"w-[130px] h-[30px] block text-xs mt-2.5 text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})]})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",onClick:t=>{t.preventDefault(),e(!0)},className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",onClick:t=>{t.preventDefault(),e(!0)},className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]}),s("div",{className:"item-component flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"right w-[calc(100%-200px)]",children:s("a",{href:"javascript:void(0)",className:"w-[130px] h-[30px] block text-xs text-center leading-[30px] text-black rounded bg-zinc-300 font-bold hover:bg-[var(--color-global)] hover:text-white",children:"+ Chọn thêm CPU"})})]})]}),s("div",{className:"box-total-price pt-5",children:[s("b",{className:"block text-xl text-right text-red-600",children:"Tổng tiền 2 sản phẩm: 8.000.000đ"}),s("div",{className:"flex items-center justify-end gap-[10px] mt-3",children:[s("a",{href:"javascript:void(0)",className:"flex items-center px-7 py-2.5 border border-[#b3b3b3] rounded hover:bg-[#e0e0e0]",children:[s("i",{className:"icon_2025 print"}),s("span",{className:"ml-2",children:"In đơn hàng"})]}),s("a",{href:"javasript:void(0)",className:"px-7 py-2.5 text-center text-white bg-violet-900 rounded font-bold hover:bg-violet-700",children:"Mua hàng tại Hacom"})]})]}),s(Gl,{show:n,onClose:()=>e(!1)})]})}function Wl(){return s("div",{className:"page-buildpc bg-[#F4F4F4] pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"Tạo máy tính riêng của bạn"})}),s("meta",{itemprop:"position",content:"2"})]})]})}),s("div",{className:"grid grid-cols-10 gap-2 px-3 py-2.5 mt-3 text-base leading-none text-black bg-white rounded",children:[s("div",{className:"col-span-4 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("a",{className:"w-[24px] ml-[10px]",href:"javascript:void()",children:s("i",{className:"icon_2025 copy"})}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:"https://bestpc.vn/restricted.php"})]}),s("div",{className:"col-span-3 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("p",{className:"ml-[10px] block whitespace-nowrap",children:"Đặt tên:"}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:""})]}),s("div",{className:"grid grid-cols-3 gap-[10px] col-span-3",children:[s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 history group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Lịch sử"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 download group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Tải xuống"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 return group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Làm mới"})]})]})]}),s("div",{className:"bg-white p-[15px]",children:[s("div",{className:"flex items-center gap-2",children:[s("a",{href:"/buildpc",className:"px-6 py-2.5 text-center font-bold text-white bg-violet-900 rounded",children:"Bắt đầu tạo"}),s("a",{href:"/buildpc/compare",className:"px-6 py-2.5 text-center font-bold text-stone-500 bg-zinc-100 rounded hover:text-white hover:bg-violet-900",children:"So sánh giá tại các cửa hàng"})]}),s(Vl,{})]})]})})}function Xl(){return s("div",{className:"list-component mt-5",children:[s("div",{className:"item-compare mb-12",children:[s("div",{className:"flex items-center border-b-[1px] border-neutral-200 pb-3",children:[s("b",{className:"left w-[200px] name-component",children:s("a",{href:"",className:"block m-[auto_auto_auto_0]",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-[150px] block h-[50px] object-contain",alt:""})})}),s("div",{className:"right w-[calc(100%-200px)] grid grid-cols-8",children:[s("b",{className:"item col-span-3",children:"Sản phẩm"}),s("b",{className:"item",children:"Giá gốc"}),s("b",{className:"item",children:"Khuyến mãi"}),s("b",{className:"item",children:"Giao hàng"}),s("b",{className:"item col-span-2",children:"Thành tiền"})]})]}),s("div",{className:"list-product",children:[s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]}),s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline text-[#33c600]",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]})]}),s("div",{className:"text-right flex items-center font-bold justify-end mt-5",children:[s("div",{className:"mr-[10px]",children:["Tổng tiền (",s("span",{children:"2"})," sản phẩm) :"]}),s("div",{className:"font-bold",children:"6.000.000 Vnđ"})]})]}),s("div",{className:"item-compare mb-12",children:[s("div",{className:"flex items-center border-b-[1px] border-neutral-200 pb-3",children:[s("b",{className:"left w-[200px] name-component",children:s("a",{href:"",className:"block m-[auto_auto_auto_0]",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-[150px] block h-[50px] object-contain",alt:""})})}),s("div",{className:"right w-[calc(100%-200px)] grid grid-cols-8",children:[s("b",{className:"item col-span-3",children:"Sản phẩm"}),s("b",{className:"item",children:"Giá gốc"}),s("b",{className:"item",children:"Khuyến mãi"}),s("b",{className:"item",children:"Giao hàng"}),s("b",{className:"item col-span-2",children:"Thành tiền"})]})]}),s("div",{className:"list-product",children:[s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]}),s("div",{className:"item-info-product flex items-center py-2.5 border-b-[1px] border-neutral-200",children:[s("b",{className:"name-component block w-[200px]",children:"CPU Cooler"}),s("div",{className:"w-[calc(100%-200px)] grid items-center grid-cols-8",children:[s("div",{className:"info col-span-3",children:s("div",{className:"flex items-center",children:[s("a",{href:"",className:"image w-[60px] h-[60px] block border border-neutral-200 p-1 mr-[10px]",children:s("img",{src:"/assets/images/lienkien-ram.png",width:"100%",height:"100%",className:"block w-full h-full object-contain",alt:""})}),s("a",{href:"",className:"name-product w-[calc(100%-100px)] hover:text-[var(--color-hover)]",children:"AMD Ryzen 7 9800x3D 4.7 GHz 8-Core Processor"})]})}),s("div",{className:"old-price font-400",children:"4.700.000 Vnđ"}),s("div",{className:"price-saleoff font-400",children:"20%"}),s("b",{className:"ship underline text-[#33c600]",children:"Liên hệ"}),s("div",{className:"col-span-2 flex items-center justify-between",children:[s("b",{className:"total-amount",children:"4.000.000đ"}),s("a",{href:"",className:"px-5 py-2 bg-blue-600 rounded text-white font-bold mr-[10px] hover:bg-blue-800",children:"Mua ngay"})]})]})]})]}),s("div",{className:"text-right flex items-center font-bold justify-end mt-5",children:[s("div",{className:"mr-[10px]",children:["Tổng tiền (",s("span",{children:"2"})," sản phẩm) :"]}),s("div",{className:"font-bold",children:"6.000.000 Vnđ"})]})]})]})}function ql(){return s("div",{className:"page-buildpc bg-[#F4F4F4] pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"So sánh giá tại các cửa hàng"})}),s("meta",{itemprop:"position",content:"2"})]})]})}),s("div",{className:"grid grid-cols-10 gap-2 px-3 py-2.5 mt-3 text-base leading-none text-black bg-white rounded",children:[s("div",{className:"col-span-4 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("a",{className:"w-[24px] ml-[10px]",href:"javascript:void()",children:s("i",{className:"icon_2025 copy"})}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:"https://bestpc.vn/restricted.php"})]}),s("div",{className:"col-span-3 h-[48px] rounded border border-solid border-neutral-200 flex items-center",children:[s("p",{className:"ml-[10px] block whitespace-nowrap",children:"Đặt tên:"}),s("input",{type:"text",className:"w-full h-full p-[10px] outline-none",value:""})]}),s("div",{className:"grid grid-cols-3 gap-[10px] col-span-3",children:[s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 history group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Lịch sử"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 download group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Tải xuống"})]}),s("a",{href:"javascript:void(0)",className:"w-full block h-[48px] rounded border border-solid border-neutral-200 flex items-center justify-center hover:bg-[var(--color-global)] hover:text-white group",children:[s("i",{className:"icon_2025 return group-hover:brightness-0 group-hover:invert-[1]"}),s("span",{className:"ml-[5px]",children:"Làm mới"})]})]})]}),s("div",{className:"bg-white p-[15px]",children:[s("div",{className:"flex items-center gap-2",children:[s("a",{href:"/buildpc",className:"px-6 py-2.5 text-center font-bold text-stone-500 bg-zinc-100 rounded hover:text-white hover:bg-violet-900",children:"Bắt đầu tạo"}),s("a",{href:"/buildpc/compare",className:"px-6 py-2.5 text-center font-bold bg-violet-900 text-white rounded",children:"So sánh giá tại các cửa hàng"})]}),s(Xl,{})]})]})})}function Yl(){const[n,e]=ne(null);return s("div",{className:"page-buildpc pb-[100px]",children:s("div",{className:"container",children:[s("div",{className:"breadcrumb p-[12px_0]",children:s("ol",{itemscope:!0,itemtype:"http://schema.org/BreadcrumbList",className:"ul flex flex-wrap items-center",children:[s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/template/homepage/homepage.html",itemprop:"item",className:"nopad-l flex items-center text-[#637381]",children:s("span",{itemprop:"name",children:[s("span",{style:"font-size: 0; display: none;",children:"Trang chủ"}),s("i",{className:"icon_2025 home mr-[5px] mb-[5px]"})]})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"1"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"Tạo máy tính riêng của bạn"})})," ",s("i",{className:"icon_2025 angle-right ml-[12px]"}),s("meta",{itemprop:"position",content:"2"})]}),s("li",{itemprop:"itemListElement",itemscope:!0,itemtype:"http://schema.org/ListItem",className:"flex items-center pr-[12px]",children:[s("a",{href:"/",itemprop:"item",className:"nopad-l flex items-center",children:s("span",{itemprop:"name",children:"Tham khảo giá sản phẩm"})}),s("meta",{itemprop:"position",content:"3"})]})]})}),s("h1",{className:"text-2xl mb-5 block font-bold",children:"Tham khảo giá sản phẩm"}),s("div",{className:"grid grid-cols-3 gap-[20px] mb-[30px]",children:[s("div",{className:"col-span-1 p-[15px] rounded-[8px] border border-[#d7d7d7]",children:[s(Oe,{spaceBetween:10,navigation:!0,thumbs:{swiper:n},modules:[Ye,Xe,qe],className:"swiper",id:"js-slider-build-big",children:[s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})}),s(D,{children:s("img",{src:"/assets/images/big-product-detail.png",className:"block w-full h-[400px] object-contain",alt:""})})]}),s("div",{className:"relative mt-[12px] w-[80%] mx-[auto]",children:[s(Oe,{onSwiper:e,spaceBetween:10,slidesPerView:3,navigation:{prevEl:"#btn-slider-small .swiper-button-prev",nextEl:"#btn-slider-small .swiper-button-next"},freeMode:!0,watchSlidesProgress:!0,modules:[Ye,Xe,qe],className:"swiper",id:"js-slider-build-small",children:[s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})}),s(D,{children:s("img",{src:"/assets/images/small-product-detail.png",className:"w-full block h-[80px] object-contain ",alt:""})})]}),s("div",{className:"btn-small",id:"btn-slider-small",children:[s("div",{className:"swiper-button-next right-[-15px] w-[25px] h-[25px]"}),s("div",{className:"swiper-button-prev left-[-15px] w-[25px] h-[25px] text-sm"})]})]}),s("div",{className:"box-review mt-3",children:[s("div",{className:"flex items-center justify-center",children:[s("b",{children:"Người đánh giá"}),s("div",{className:"flex items-center ml-[10px]",children:["(40 ratings, 4.9 ",s("i",{className:"icon-star star-small ml-1"}),")"]})]}),s("div",{className:"",children:[s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"5 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"4 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"3 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"2 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]}),s("div",{className:"flex items-center justify-between gap-[10px] w-full mb-1",children:[s("p",{className:"w-[11%] text-[var(--color-hover)] font-bold",children:"1 sao"}),s("div",{className:"relative w-[79%]",children:[s("div",{className:"block w-full h-[11px] bg-gray-500"}),s("div",{className:"absolute left-0 top-0 h-full w-[90%] bg-[#ff960b]"})]}),s("p",{className:"text-[var(--color-hover)] w-[9%] font-bold",children:"97%"})]})]})]})]}),s("div",{className:"col-span-2",children:[s("div",{className:"grid grid-cols-7 gap-[5px] items-center pb-2.5 border-b-[1px] border-[#ababab]",children:[s("b",{children:"Nhà cung cấp"}),s("b",{children:"Giá gốc"}),s("b",{children:"Khuyến mãi"}),s("b",{children:"Tình trạng"}),s("b",{children:"Giao hàng"}),s("b",{className:"col-span-2",children:"Thành tiền"})]}),s("div",{className:"list",children:[s("div",{className:"item grid grid-cols-7 items-center gap-[5px] py-2.5 border-b-[1px] border-[#ebebeb]",children:[s("a",{href:"",className:"block",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[28px] object-contain",alt:""})}),s("div",{className:"price font-bold",children:"3.700.000Vnđ"}),s("div",{className:"saleoff text-center font-bold",children:"20%"}),s("div",{className:"status text-blue-500 font-bold",children:"Còn hàng"}),s("div",{className:"ship underline",children:"Liên hệ"}),s("div",{className:"flex items-center justify-between col-span-2",children:[s("div",{className:"total-price font-bold",children:"3.000.000Vnđ"}),s("a",{href:"",className:"block w-[115px] h-[40px] font-bold bg-blue-600 text-center text-white leading-[40px] rounded-[4px] hover:bg-blue-800",children:"Mua ngay"})]})]}),s("div",{className:"item grid grid-cols-7 items-center gap-[5px] py-2.5 border-b-[1px] border-[#ebebeb]",children:[s("a",{href:"",className:"block",children:s("img",{src:"/assets/images/logo-hacom.png",width:"100%",height:"100%",className:"w-full block h-[28px] object-contain",alt:""})}),s("div",{className:"price font-bold",children:"3.700.000Vnđ"}),s("div",{className:"saleoff text-center font-bold",children:"20%"}),s("div",{className:"status text-red-500 font-bold",children:"Còn hàng"}),s("div",{className:"ship underline text-green-500",children:"free"}),s("div",{className:"flex items-center justify-between col-span-2",children:[s("div",{className:"total-price font-bold",children:"3.000.000Vnđ"}),s("a",{href:"",className:"block w-[115px] h-[40px] font-bold bg-blue-600 text-center text-white leading-[40px] rounded-[4px] hover:bg-blue-800",children:"Mua ngay"})]})]})]})]})]}),s("div",{className:"grid grid-cols-3 gap-[20px]",children:[s("div",{className:"col-span-1",children:[s("h3",{className:"title text-2xl font-bold pb-2.5 border-b-[1px] border-[#ababab]",children:"Thông số kỹ thuật"}),s("div",{children:[s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Manufacturer"}),s("p",{children:"AMD"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Part #"}),s("ul",{children:[s("li",{children:"100-1000001084WOF"}),s("li",{children:"AMD Ryzen 7 9800X3D"}),s("li",{children:"100-100001084WOF"})]})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Series"}),s("p",{children:"AMD Ryzen 7"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Microarchitecture"}),s("p",{children:"Zen 5"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Core Family"}),s("p",{children:"Granite Ridge"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Socket"}),s("p",{children:"AM5"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Core"}),s("p",{children:"8"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Thread Count"}),s("p",{children:"16"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Performance Core Clock"}),s("p",{children:"4.7 GHz"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"Performance Core Boost Clock"}),s("p",{children:"5.2 GHz"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"L2 Cache"}),s("p",{children:"8 MB"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"L3 Cache"}),s("p",{children:"96 MB"})]}),s("div",{className:"item py-2 border-b-[1px] border-neutral-200",children:[s("b",{children:"TDP"}),s("p",{children:"120 W"})]}),s("div",{className:"item py-2",children:[s("b",{children:"Integrated Graphics"}),s("p",{children:"Radeon"})]})]})]}),s("div",{className:"col-span-2",children:[s("div",{className:"flex items-center justify-between pb-2.5 border-b-[1px] border-[#ababab]",children:[s("h3",{className:"title text-2xl font-bold",children:"Đánh giá"}),s("a",{href:"",className:"inline-block py-1 px-5 bg-blue-600 text-white font-bold rounded-[4px] hover:bg-blue-800",children:"Xem tất cả bình luận"})]}),s("div",{className:"list mt-3",children:s("div",{className:"item-review flex mb-[15px] pb-[15px] border-b-[1px] border-[#E4E4E4]",children:[s("div",{className:"w-[80px] mr-[20px]",children:[s("img",{src:"/assets/images/avartar-review-1.png",width:"75px",height:"75px",alt:"avartar"}),s("div",{className:"mt-[10px]",children:s("i",{className:"icon-star star5"})})]}),s("div",{className:"w-[calc(100%-100px)]",children:[s("b",{className:"mb-[10px]",children:"Dino"}),s("p",{className:"mb-[10px] block text-[#747474]",children:"10:00pm 20/02/2025"}),s("p",{className:"content mb-[5px]",children:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. I"}),s("div",{className:"btn flex items-center",children:[s("div",{className:"flex items-center mr-[10px]",children:[s("b",{className:"mr-[5px]",children:"120"}),s("i",{className:"icon_2025 view"})]}),s("div",{className:"flex items-center",children:[s("b",{className:"mr-[5px]",children:"120"}),s("i",{className:"icon_2025 comment"})]})]})]})]})})]})]})]})})}function Ul(){return s(ft,{children:s("main",{children:s(ms,{children:[s(xt,{path:"/product-detail",component:$l}),s(xt,{path:"/buildpc",component:Wl}),s(xt,{path:"/buildpc/compare",component:ql}),s(xt,{path:"/buildpc/detail",component:Yl})]})})})}Ke(s(Ul,{}),document.getElementById("root")); diff --git a/public_html/assets/builder/style.css b/public_html/assets/builder/style.css new file mode 100644 index 0000000..461df17 --- /dev/null +++ b/public_html/assets/builder/style.css @@ -0,0 +1 @@ +:root{--f-spinner-width: 36px;--f-spinner-height: 36px;--f-spinner-color-1: rgba(0, 0, 0, .1);--f-spinner-color-2: rgba(17, 24, 28, .8);--f-spinner-stroke: 2.75}.f-spinner{margin:auto;padding:0;width:var(--f-spinner-width);height:var(--f-spinner-height)}.f-spinner svg{width:100%;height:100%;vertical-align:top;animation:f-spinner-rotate 2s linear infinite}.f-spinner svg *{stroke-width:var(--f-spinner-stroke);fill:none}.f-spinner svg *:first-child{stroke:var(--f-spinner-color-1)}.f-spinner svg *:last-child{stroke:var(--f-spinner-color-2);animation:f-spinner-dash 2s ease-in-out infinite}@keyframes f-spinner-rotate{to{transform:rotate(360deg)}}@keyframes f-spinner-dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.f-throwOutUp{animation:var(--f-throw-out-duration, .175s) ease-out both f-throwOutUp}.f-throwOutDown{animation:var(--f-throw-out-duration, .175s) ease-out both f-throwOutDown}@keyframes f-throwOutUp{to{transform:translate3d(0,calc(var(--f-throw-out-distance, 150px) * -1),0);opacity:0}}@keyframes f-throwOutDown{to{transform:translate3d(0,var(--f-throw-out-distance, 150px),0);opacity:0}}.f-zoomInUp{animation:var(--f-transition-duration, .2s) ease .1s both f-zoomInUp}.f-zoomOutDown{animation:var(--f-transition-duration, .2s) ease both f-zoomOutDown}@keyframes f-zoomInUp{0%{transform:scale(.975) translate3d(0,16px,0);opacity:0}to{transform:scale(1) translateZ(0);opacity:1}}@keyframes f-zoomOutDown{to{transform:scale(.975) translate3d(0,16px,0);opacity:0}}.f-fadeIn{animation:var(--f-transition-duration, .2s) var(--f-transition-easing, ease) var(--f-transition-delay, 0s) both f-fadeIn;z-index:2}.f-fadeOut{animation:var(--f-transition-duration, .2s) var(--f-transition-easing, ease) var(--f-transition-delay, 0s) both f-fadeOut;z-index:1}@keyframes f-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes f-fadeOut{to{opacity:0}}.f-fadeFastIn{animation:var(--f-transition-duration, .2s) ease-out both f-fadeFastIn;z-index:2}.f-fadeFastOut{animation:var(--f-transition-duration, .1s) ease-out both f-fadeFastOut;z-index:2}@keyframes f-fadeFastIn{0%{opacity:.75}to{opacity:1}}@keyframes f-fadeFastOut{to{opacity:0}}.f-fadeSlowIn{animation:var(--f-transition-duration, .5s) ease both f-fadeSlowIn;z-index:2}.f-fadeSlowOut{animation:var(--f-transition-duration, .5s) ease both f-fadeSlowOut;z-index:1}@keyframes f-fadeSlowIn{0%{opacity:0}to{opacity:1}}@keyframes f-fadeSlowOut{to{opacity:0}}.f-crossfadeIn{animation:var(--f-transition-duration, .2s) ease-out both f-crossfadeIn;z-index:2}.f-crossfadeOut{animation:calc(var(--f-transition-duration, .2s)*.5) linear .1s both f-crossfadeOut;z-index:1}@keyframes f-crossfadeIn{0%{opacity:0}to{opacity:1}}@keyframes f-crossfadeOut{to{opacity:0}}.f-slideIn.from-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideInNext}.f-slideIn.from-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideInPrev}.f-slideOut.to-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideOutNext}.f-slideOut.to-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideOutPrev}@keyframes f-slideInPrev{0%{transform:translate(100%)}to{transform:translateZ(0)}}@keyframes f-slideInNext{0%{transform:translate(-100%)}to{transform:translateZ(0)}}@keyframes f-slideOutNext{to{transform:translate(-100%)}}@keyframes f-slideOutPrev{to{transform:translate(100%)}}.f-classicIn.from-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicInNext;z-index:2}.f-classicIn.from-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicInPrev;z-index:2}.f-classicOut.to-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicOutNext;z-index:1}.f-classicOut.to-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicOutPrev;z-index:1}@keyframes f-classicInNext{0%{transform:translate(-75px);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes f-classicInPrev{0%{transform:translate(75px);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes f-classicOutNext{to{transform:translate(-75px);opacity:0}}@keyframes f-classicOutPrev{to{transform:translate(75px);opacity:0}}:root{--f-button-width: 40px;--f-button-height: 40px;--f-button-border: 0;--f-button-border-radius: 0;--f-button-color: #374151;--f-button-bg: #f8f8f8;--f-button-hover-bg: #e0e0e0;--f-button-active-bg: #d0d0d0;--f-button-shadow: none;--f-button-transition: all .15s ease;--f-button-transform: none;--f-button-svg-width: 20px;--f-button-svg-height: 20px;--f-button-svg-stroke-width: 1.5;--f-button-svg-fill: none;--f-button-svg-filter: none;--f-button-svg-disabled-opacity: .65}.f-button{display:flex;justify-content:center;align-items:center;box-sizing:content-box;position:relative;margin:0;padding:0;width:var(--f-button-width);height:var(--f-button-height);border:var(--f-button-border);border-radius:var(--f-button-border-radius);color:var(--f-button-color);background:var(--f-button-bg);box-shadow:var(--f-button-shadow);pointer-events:all;cursor:pointer;transition:var(--f-button-transition)}@media (hover: hover){.f-button:hover:not([disabled]){color:var(--f-button-hover-color);background-color:var(--f-button-hover-bg)}}.f-button:active:not([disabled]){background-color:var(--f-button-active-bg)}.f-button:focus:not(:focus-visible){outline:none}.f-button:focus-visible{outline:none;box-shadow:inset 0 0 0 var(--f-button-outline, 2px) var(--f-button-outline-color, var(--f-button-color))}.f-button svg{width:var(--f-button-svg-width);height:var(--f-button-svg-height);fill:var(--f-button-svg-fill);stroke:currentColor;stroke-width:var(--f-button-svg-stroke-width);stroke-linecap:round;stroke-linejoin:round;transition:opacity .15s ease;transform:var(--f-button-transform);filter:var(--f-button-svg-filter);pointer-events:none}.f-button[disabled]{cursor:default}.f-button[disabled] svg{opacity:var(--f-button-svg-disabled-opacity)}.f-carousel__nav .f-button.is-prev,.f-carousel__nav .f-button.is-next,.fancybox__nav .f-button.is-prev,.fancybox__nav .f-button.is-next{position:absolute;z-index:1}.is-horizontal .f-carousel__nav .f-button.is-prev,.is-horizontal .f-carousel__nav .f-button.is-next,.is-horizontal .fancybox__nav .f-button.is-prev,.is-horizontal .fancybox__nav .f-button.is-next{top:50%;transform:translateY(-50%)}.is-horizontal .f-carousel__nav .f-button.is-prev,.is-horizontal .fancybox__nav .f-button.is-prev{left:var(--f-button-prev-pos)}.is-horizontal .f-carousel__nav .f-button.is-next,.is-horizontal .fancybox__nav .f-button.is-next{right:var(--f-button-next-pos)}.is-horizontal.is-rtl .f-carousel__nav .f-button.is-prev,.is-horizontal.is-rtl .fancybox__nav .f-button.is-prev{left:auto;right:var(--f-button-next-pos)}.is-horizontal.is-rtl .f-carousel__nav .f-button.is-next,.is-horizontal.is-rtl .fancybox__nav .f-button.is-next{right:auto;left:var(--f-button-prev-pos)}.is-vertical .f-carousel__nav .f-button.is-prev,.is-vertical .f-carousel__nav .f-button.is-next,.is-vertical .fancybox__nav .f-button.is-prev,.is-vertical .fancybox__nav .f-button.is-next{top:auto;left:50%;transform:translate(-50%)}.is-vertical .f-carousel__nav .f-button.is-prev,.is-vertical .fancybox__nav .f-button.is-prev{top:var(--f-button-next-pos)}.is-vertical .f-carousel__nav .f-button.is-next,.is-vertical .fancybox__nav .f-button.is-next{bottom:var(--f-button-next-pos)}.is-vertical .f-carousel__nav .f-button.is-prev svg,.is-vertical .f-carousel__nav .f-button.is-next svg,.is-vertical .fancybox__nav .f-button.is-prev svg,.is-vertical .fancybox__nav .f-button.is-next svg{transform:rotate(90deg)}.f-carousel__nav .f-button:disabled,.fancybox__nav .f-button:disabled{pointer-events:none}html.with-fancybox{width:auto;overflow:visible;scroll-behavior:auto}html.with-fancybox body{touch-action:none}html.with-fancybox body.hide-scrollbar{width:auto;margin-right:calc(var(--fancybox-body-margin, 0px) + var(--fancybox-scrollbar-compensate, 0px));overflow:hidden!important;overscroll-behavior-y:none}.fancybox__container{--fancybox-color: #dbdbdb;--fancybox-hover-color: #fff;--fancybox-bg: rgba(24, 24, 27, .98);--fancybox-slide-gap: 10px;--f-spinner-width: 50px;--f-spinner-height: 50px;--f-spinner-color-1: rgba(255, 255, 255, .1);--f-spinner-color-2: #bbb;--f-spinner-stroke: 3.65;position:fixed;top:0;left:0;bottom:0;right:0;direction:ltr;display:flex;flex-direction:column;box-sizing:border-box;margin:0;padding:0;color:#f8f8f8;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:visible;z-index:var(--fancybox-zIndex, 1050);outline:none;transform-origin:top left;-webkit-text-size-adjust:100%;-moz-text-size-adjust:none;-ms-text-size-adjust:100%;text-size-adjust:100%;overscroll-behavior-y:contain}.fancybox__container *,.fancybox__container *:before,.fancybox__container *:after{box-sizing:inherit}.fancybox__container::backdrop{background-color:#0000}.fancybox__backdrop{position:fixed;top:0;left:0;bottom:0;right:0;z-index:-1;background:var(--fancybox-bg);opacity:var(--fancybox-opacity, 1);will-change:opacity}.fancybox__carousel{position:relative;box-sizing:border-box;flex:1;min-height:0;z-index:10;overflow-y:visible;overflow-x:clip}.fancybox__viewport{width:100%;height:100%}.fancybox__viewport.is-draggable{cursor:move;cursor:grab}.fancybox__viewport.is-dragging{cursor:move;cursor:grabbing}.fancybox__track{display:flex;margin:0 auto;height:100%}.fancybox__slide{flex:0 0 auto;position:relative;display:flex;flex-direction:column;align-items:center;width:100%;height:100%;margin:0 var(--fancybox-slide-gap) 0 0;padding:4px;overflow:auto;overscroll-behavior:contain;transform:translateZ(0);backface-visibility:hidden}.fancybox__container:not(.is-compact) .fancybox__slide.has-close-btn{padding-top:40px}.fancybox__slide.has-iframe,.fancybox__slide.has-video,.fancybox__slide.has-html5video,.fancybox__slide.has-image{overflow:hidden}.fancybox__slide.has-image.is-animating,.fancybox__slide.has-image.is-selected{overflow:visible}.fancybox__slide:before,.fancybox__slide:after{content:"";flex:0 0 0;margin:auto}.fancybox__backdrop:empty,.fancybox__viewport:empty,.fancybox__track:empty,.fancybox__slide:empty{display:block}.fancybox__content{align-self:center;display:flex;flex-direction:column;position:relative;margin:0;padding:2rem;max-width:100%;color:var(--fancybox-content-color, #374151);background:var(--fancybox-content-bg, #fff);cursor:default;border-radius:0;z-index:20}.is-loading .fancybox__content{opacity:0}.is-draggable .fancybox__content{cursor:move;cursor:grab}.can-zoom_in .fancybox__content{cursor:zoom-in}.can-zoom_out .fancybox__content{cursor:zoom-out}.is-dragging .fancybox__content{cursor:move;cursor:grabbing}.fancybox__content [data-selectable],.fancybox__content [contenteditable]{cursor:auto}.fancybox__slide.has-image>.fancybox__content{padding:0;background:#0000;min-height:1px;background-repeat:no-repeat;background-size:contain;background-position:center center;transition:none;transform:translateZ(0);backface-visibility:hidden}.fancybox__slide.has-image>.fancybox__content>picture>img{width:100%;height:auto;max-height:100%}.is-animating .fancybox__content,.is-dragging .fancybox__content{will-change:transform,width,height}.fancybox-image{margin:auto;display:block;width:100%;height:100%;min-height:0;object-fit:contain;-webkit-user-select:none;user-select:none;filter:blur(0px)}.fancybox__caption{align-self:center;max-width:100%;flex-shrink:0;margin:0;padding:14px 0 4px;overflow-wrap:anywhere;line-height:1.375;color:var(--fancybox-color, currentColor);opacity:var(--fancybox-opacity, 1);cursor:auto;visibility:visible}.is-loading .fancybox__caption,.is-closing .fancybox__caption{opacity:0;visibility:hidden}.is-compact .fancybox__caption{padding-bottom:0}.f-button.is-close-btn{--f-button-svg-stroke-width: 2;position:absolute;top:0;right:8px;z-index:40}.fancybox__content>.f-button.is-close-btn{--f-button-width: 34px;--f-button-height: 34px;--f-button-border-radius: 4px;--f-button-color: var(--fancybox-color, #fff);--f-button-hover-color: var(--fancybox-color, #fff);--f-button-bg: transparent;--f-button-hover-bg: transparent;--f-button-active-bg: transparent;--f-button-svg-width: 22px;--f-button-svg-height: 22px;position:absolute;top:-38px;right:0;opacity:.75}.is-loading .fancybox__content>.f-button.is-close-btn{visibility:hidden}.is-zooming-out .fancybox__content>.f-button.is-close-btn{visibility:hidden}.fancybox__content>.f-button.is-close-btn:hover{opacity:1}.fancybox__footer{padding:0;margin:0;position:relative}.fancybox__footer .fancybox__caption{width:100%;padding:24px;opacity:var(--fancybox-opacity, 1);transition:all .25s ease}.is-compact .fancybox__footer{position:absolute;bottom:0;left:0;right:0;z-index:20;background:#18181b80}.is-compact .fancybox__footer .fancybox__caption{padding:12px}.is-compact .fancybox__content>.f-button.is-close-btn{--f-button-border-radius: 50%;--f-button-color: #fff;--f-button-hover-color: #fff;--f-button-outline-color: #000;--f-button-bg: rgba(0, 0, 0, .6);--f-button-active-bg: rgba(0, 0, 0, .6);--f-button-hover-bg: rgba(0, 0, 0, .6);--f-button-svg-width: 18px;--f-button-svg-height: 18px;--f-button-svg-filter: none;top:5px;right:5px}.fancybox__nav{--f-button-width: 50px;--f-button-height: 50px;--f-button-border: 0;--f-button-border-radius: 50%;--f-button-color: var(--fancybox-color);--f-button-hover-color: var(--fancybox-hover-color);--f-button-bg: transparent;--f-button-hover-bg: rgba(24, 24, 27, .3);--f-button-active-bg: rgba(24, 24, 27, .5);--f-button-shadow: none;--f-button-transition: all .15s ease;--f-button-transform: none;--f-button-svg-width: 26px;--f-button-svg-height: 26px;--f-button-svg-stroke-width: 2.5;--f-button-svg-fill: none;--f-button-svg-filter: drop-shadow(1px 1px 1px rgba(24, 24, 27, .5));--f-button-svg-disabled-opacity: .65;--f-button-next-pos: 1rem;--f-button-prev-pos: 1rem;opacity:var(--fancybox-opacity, 1)}.fancybox__nav .f-button:before{position:absolute;content:"";top:-30px;right:-20px;left:-20px;bottom:-30px;z-index:1}.is-idle .fancybox__nav{animation:.15s ease-out both f-fadeOut}.is-idle.is-compact .fancybox__footer{pointer-events:none;animation:.15s ease-out both f-fadeOut}.fancybox__slide>.f-spinner{position:absolute;top:50%;left:50%;margin:var(--f-spinner-top, calc(var(--f-spinner-width) * -.5)) 0 0 var(--f-spinner-left, calc(var(--f-spinner-height) * -.5));z-index:30;cursor:pointer}.fancybox-protected{position:absolute;top:0;left:0;right:0;bottom:0;z-index:40;-webkit-user-select:none;user-select:none}.fancybox-ghost{position:absolute;top:0;left:0;width:100%;height:100%;min-height:0;object-fit:contain;z-index:40;-webkit-user-select:none;user-select:none;pointer-events:none}.fancybox-focus-guard{outline:none;opacity:0;position:fixed;pointer-events:none}.fancybox__container:not([aria-hidden]){opacity:0}.fancybox__container.is-animated[aria-hidden=false]>*:not(.fancybox__backdrop,.fancybox__carousel),.fancybox__container.is-animated[aria-hidden=false] .fancybox__carousel>*:not(.fancybox__viewport),.fancybox__container.is-animated[aria-hidden=false] .fancybox__slide>*:not(.fancybox__content){animation:var(--f-interface-enter-duration, .25s) ease .1s backwards f-fadeIn}.fancybox__container.is-animated[aria-hidden=false] .fancybox__backdrop{animation:var(--f-backdrop-enter-duration, .35s) ease backwards f-fadeIn}.fancybox__container.is-animated[aria-hidden=true]>*:not(.fancybox__backdrop,.fancybox__carousel),.fancybox__container.is-animated[aria-hidden=true] .fancybox__carousel>*:not(.fancybox__viewport),.fancybox__container.is-animated[aria-hidden=true] .fancybox__slide>*:not(.fancybox__content){animation:var(--f-interface-exit-duration, .15s) ease forwards f-fadeOut}.fancybox__container.is-animated[aria-hidden=true] .fancybox__backdrop{animation:var(--f-backdrop-exit-duration, .35s) ease forwards f-fadeOut}.has-iframe .fancybox__content,.has-map .fancybox__content,.has-pdf .fancybox__content,.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{max-width:100%;flex-shrink:1;min-height:1px;overflow:visible}.has-iframe .fancybox__content,.has-map .fancybox__content,.has-pdf .fancybox__content{width:calc(100% - 120px);height:90%}.fancybox__container.is-compact .has-iframe .fancybox__content,.fancybox__container.is-compact .has-map .fancybox__content,.fancybox__container.is-compact .has-pdf .fancybox__content{width:100%;height:100%}.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{width:960px;height:540px;max-width:100%;max-height:100%}.has-map .fancybox__content,.has-pdf .fancybox__content,.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{padding:0;background:#18181be6;color:#fff}.has-map .fancybox__content{background:#e5e3df}.fancybox__html5video,.fancybox__iframe{border:0;display:block;height:100%;width:100%;background:#0000}.fancybox-placeholder{border:0!important;clip:rect(1px,1px,1px,1px)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.f-carousel__thumbs{--f-thumb-width: 96px;--f-thumb-height: 72px;--f-thumb-outline: 0;--f-thumb-outline-color: #5eb0ef;--f-thumb-opacity: 1;--f-thumb-hover-opacity: 1;--f-thumb-selected-opacity: 1;--f-thumb-border-radius: 2px;--f-thumb-offset: 0px;--f-button-next-pos: 0;--f-button-prev-pos: 0}.f-carousel__thumbs.is-classic{--f-thumb-gap: 8px;--f-thumb-opacity: .5;--f-thumb-hover-opacity: 1;--f-thumb-selected-opacity: 1}.f-carousel__thumbs.is-modern{--f-thumb-gap: 4px;--f-thumb-extra-gap: 16px;--f-thumb-clip-width: 46px}.f-thumbs{position:relative;flex:0 0 auto;margin:0;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;user-select:none;perspective:1000px;transform:translateZ(0)}.f-thumbs .f-spinner{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:2px;background-image:linear-gradient(#ebeff2,#e2e8f0);z-index:-1}.f-thumbs .f-spinner svg{display:none}.f-thumbs.is-vertical{height:100%}.f-thumbs__viewport{width:100%;height:auto;overflow:hidden;transform:translateZ(0)}.f-thumbs__track{display:flex}.f-thumbs__slide{position:relative;flex:0 0 auto;box-sizing:content-box;display:flex;align-items:center;justify-content:center;padding:0;margin:0;width:var(--f-thumb-width);height:var(--f-thumb-height);overflow:visible;cursor:pointer}.f-thumbs__slide.is-loading img{opacity:0}.is-classic .f-thumbs__viewport{height:100%}.is-modern .f-thumbs__track{width:max-content}.is-modern .f-thumbs__track:before{content:"";position:absolute;top:0;bottom:0;left:calc((var(--f-thumb-clip-width, 0))*-.5);width:calc(var(--width, 0)*1px + var(--f-thumb-clip-width, 0));cursor:pointer}.is-modern .f-thumbs__slide{width:var(--f-thumb-clip-width);transform:translate3d(calc(var(--shift, 0) * -1px),0,0);transition:none;pointer-events:none}.is-modern.is-resting .f-thumbs__slide{transition:transform .33s ease}.is-modern.is-resting .f-thumbs__slide__button{transition:clip-path .33s ease}.is-using-tab .is-modern .f-thumbs__slide:focus-within{filter:drop-shadow(-1px 0px 0px var(--f-thumb-outline-color)) drop-shadow(2px 0px 0px var(--f-thumb-outline-color)) drop-shadow(0px -1px 0px var(--f-thumb-outline-color)) drop-shadow(0px 2px 0px var(--f-thumb-outline-color))}.f-thumbs__slide__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--f-thumb-width);height:100%;margin:0 -100%;padding:0;border:0;position:relative;border-radius:var(--f-thumb-border-radius);overflow:hidden;background:#0000;outline:none;cursor:pointer;pointer-events:auto;touch-action:manipulation;opacity:var(--f-thumb-opacity);transition:opacity .2s ease}.f-thumbs__slide__button:hover{opacity:var(--f-thumb-hover-opacity)}.f-thumbs__slide__button:focus:not(:focus-visible){outline:none}.f-thumbs__slide__button:focus-visible{outline:none;opacity:var(--f-thumb-selected-opacity)}.is-modern .f-thumbs__slide__button{--clip-path: inset( 0 calc( ((var(--f-thumb-width, 0) - var(--f-thumb-clip-width, 0))) * (1 - var(--progress, 0)) * .5 ) round var(--f-thumb-border-radius, 0) );clip-path:var(--clip-path)}.is-classic .is-nav-selected .f-thumbs__slide__button{opacity:var(--f-thumb-selected-opacity)}.is-classic .is-nav-selected .f-thumbs__slide__button:after{content:"";position:absolute;top:0;left:0;right:0;height:auto;bottom:0;border:var(--f-thumb-outline, 0) solid var(--f-thumb-outline-color, transparent);border-radius:var(--f-thumb-border-radius);animation:f-fadeIn .2s ease-out;z-index:10}.f-thumbs__slide__img{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;padding:var(--f-thumb-offset);box-sizing:border-box;pointer-events:none;object-fit:cover;border-radius:var(--f-thumb-border-radius)}.f-thumbs.is-horizontal .f-thumbs__track{padding:8px 0 12px}.f-thumbs.is-horizontal .f-thumbs__slide{margin:0 var(--f-thumb-gap) 0 0}.f-thumbs.is-vertical .f-thumbs__track{flex-wrap:wrap;padding:0 8px}.f-thumbs.is-vertical .f-thumbs__slide{margin:0 0 var(--f-thumb-gap) 0}.fancybox__thumbs{--f-thumb-width: 96px;--f-thumb-height: 72px;--f-thumb-border-radius: 2px;--f-thumb-outline: 2px;--f-thumb-outline-color: #ededed;position:relative;opacity:var(--fancybox-opacity, 1);transition:max-height .35s cubic-bezier(.23,1,.32,1)}.fancybox__thumbs.is-classic{--f-thumb-gap: 8px;--f-thumb-opacity: .5;--f-thumb-hover-opacity: 1}.fancybox__thumbs.is-classic .f-spinner{background-image:linear-gradient(#ffffff1a,#ffffff0d)}.fancybox__thumbs.is-modern{--f-thumb-gap: 4px;--f-thumb-extra-gap: 16px;--f-thumb-clip-width: 46px;--f-thumb-opacity: 1;--f-thumb-hover-opacity: 1}.fancybox__thumbs.is-modern .f-spinner{background-image:linear-gradient(#ffffff1a,#ffffff0d)}.fancybox__thumbs.is-horizontal{padding:0 var(--f-thumb-gap)}.fancybox__thumbs.is-vertical{padding:var(--f-thumb-gap) 0}.is-compact .fancybox__thumbs{--f-thumb-width: 64px;--f-thumb-clip-width: 32px;--f-thumb-height: 48px;--f-thumb-extra-gap: 10px}.fancybox__thumbs.is-masked{max-height:0px!important}.is-closing .fancybox__thumbs{transition:none!important}.fancybox__toolbar{--f-progress-color: var(--fancybox-color, rgba(255, 255, 255, .94));--f-button-width: 46px;--f-button-height: 46px;--f-button-color: var(--fancybox-color);--f-button-hover-color: var(--fancybox-hover-color);--f-button-bg: rgba(24, 24, 27, .65);--f-button-hover-bg: rgba(70, 70, 73, .65);--f-button-active-bg: rgba(90, 90, 93, .65);--f-button-border-radius: 0;--f-button-svg-width: 24px;--f-button-svg-height: 24px;--f-button-svg-stroke-width: 1.5;--f-button-svg-filter: drop-shadow(1px 1px 1px rgba(24, 24, 27, .15));--f-button-svg-fill: none;--f-button-svg-disabled-opacity: .65;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI Adjusted,Segoe UI,Liberation Sans,sans-serif;color:var(--fancybox-color, currentColor);opacity:var(--fancybox-opacity, 1);text-shadow:var(--fancybox-toolbar-text-shadow, 1px 1px 1px rgba(0, 0, 0, .5));pointer-events:none;z-index:20}.fancybox__toolbar :focus-visible{z-index:1}.fancybox__toolbar.is-absolute,.is-compact .fancybox__toolbar{position:absolute;top:0;left:0;right:0}.is-idle .fancybox__toolbar{pointer-events:none;animation:.15s ease-out both f-fadeOut}.fancybox__toolbar__column{display:flex;flex-direction:row;flex-wrap:wrap;align-content:flex-start}.fancybox__toolbar__column.is-left,.fancybox__toolbar__column.is-right{flex-grow:1;flex-basis:0}.fancybox__toolbar__column.is-right{display:flex;justify-content:flex-end;flex-wrap:nowrap}.fancybox__infobar{padding:0 5px;line-height:var(--f-button-height);text-align:center;font-size:17px;font-variant-numeric:tabular-nums;-webkit-font-smoothing:subpixel-antialiased;cursor:default;-webkit-user-select:none;user-select:none}.fancybox__infobar span{padding:0 5px}.fancybox__infobar:not(:first-child):not(:last-child){background:var(--f-button-bg)}[data-fancybox-toggle-slideshow]{position:relative}[data-fancybox-toggle-slideshow] .f-progress{height:100%;opacity:.3}[data-fancybox-toggle-slideshow] svg g:first-child{display:flex}[data-fancybox-toggle-slideshow] svg g:last-child{display:none}.has-slideshow [data-fancybox-toggle-slideshow] svg g:first-child{display:none}.has-slideshow [data-fancybox-toggle-slideshow] svg g:last-child{display:flex}[data-fancybox-toggle-fullscreen] svg g:first-child{display:flex}[data-fancybox-toggle-fullscreen] svg g:last-child{display:none}:fullscreen [data-fancybox-toggle-fullscreen] svg g:first-child{display:none}:fullscreen [data-fancybox-toggle-fullscreen] svg g:last-child{display:flex}.f-progress{position:absolute;top:0;left:0;right:0;height:3px;transform:scaleX(0);transform-origin:0;transition-property:transform;transition-timing-function:linear;background:var(--f-progress-color, var(--f-carousel-theme-color, #0091ff));z-index:30;-webkit-user-select:none;user-select:none;pointer-events:none} diff --git a/public_html/assets/script/style.css b/public_html/assets/script/style.css index 41d390b..c35da03 100644 --- a/public_html/assets/script/style.css +++ b/public_html/assets/script/style.css @@ -1266,6 +1266,12 @@ html { filter: brightness(0) invert(1); } +.autocomplete-suggestions { + position: absolute; + background: #fff; + display: none; +} + @media screen and (min-width: 1200px) and (max-width: 1550px) { .box-product-detail #js-slider-big img { display: block; diff --git a/public_html/assets/script/style.css.map b/public_html/assets/script/style.css.map index 5604538..1c53ad6 100644 --- a/public_html/assets/script/style.css.map +++ b/public_html/assets/script/style.css.map @@ -1 +1 @@ -{"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file +{"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file diff --git a/public_html/assets/script/style.scss b/public_html/assets/script/style.scss index 05abbba..772b241 100644 --- a/public_html/assets/script/style.scss +++ b/public_html/assets/script/style.scss @@ -1331,6 +1331,12 @@ html { } } +.autocomplete-suggestions { + position: absolute; + background: #fff; + display: none; +} + @media screen and (min-width: 1200px) and (max-width: 1550px) { .box-product-detail #js-slider-big img { display: block; diff --git a/src/Hura/App.php b/src/Hura/App.php index f605f28..b80aa16 100644 --- a/src/Hura/App.php +++ b/src/Hura/App.php @@ -57,6 +57,7 @@ class App "module" => $this->current_route_info['module'], "view" => $this->current_route_info['view'], "url" => $this->current_route_info['url'], + "query" => $this->current_route_info['query'], ]; $this->data = array( diff --git a/old/src/components/buildpc/CreateBuildpc.tsx b/src/components/buildpc/CreateBuildpc.tsx similarity index 100% rename from old/src/components/buildpc/CreateBuildpc.tsx rename to src/components/buildpc/CreateBuildpc.tsx diff --git a/old/src/components/buildpc/ListCompare.tsx b/src/components/buildpc/ListCompare.tsx similarity index 100% rename from old/src/components/buildpc/ListCompare.tsx rename to src/components/buildpc/ListCompare.tsx diff --git a/old/src/components/buildpc/PopupBuildpc.tsx b/src/components/buildpc/PopupBuildpc.tsx similarity index 100% rename from old/src/components/buildpc/PopupBuildpc.tsx rename to src/components/buildpc/PopupBuildpc.tsx diff --git a/old/src/components/footer/Footer.tsx b/src/components/footer/Footer.tsx similarity index 100% rename from old/src/components/footer/Footer.tsx rename to src/components/footer/Footer.tsx diff --git a/old/src/components/header/Header.tsx b/src/components/header/Header.tsx similarity index 100% rename from old/src/components/header/Header.tsx rename to src/components/header/Header.tsx diff --git a/old/src/components/product/FormReview.tsx b/src/components/product/FormReview.tsx similarity index 100% rename from old/src/components/product/FormReview.tsx rename to src/components/product/FormReview.tsx diff --git a/old/src/components/product/MemberReview.tsx b/src/components/product/MemberReview.tsx similarity index 100% rename from old/src/components/product/MemberReview.tsx rename to src/components/product/MemberReview.tsx diff --git a/old/src/components/product/ProductDescription.tsx b/src/components/product/ProductDescription.tsx similarity index 100% rename from old/src/components/product/ProductDescription.tsx rename to src/components/product/ProductDescription.tsx diff --git a/old/src/components/product/ProductReview.tsx b/src/components/product/ProductReview.tsx similarity index 100% rename from old/src/components/product/ProductReview.tsx rename to src/components/product/ProductReview.tsx diff --git a/old/src/components/product/SupplierListBox.tsx b/src/components/product/SupplierListBox.tsx similarity index 100% rename from old/src/components/product/SupplierListBox.tsx rename to src/components/product/SupplierListBox.tsx diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..0aed7c6 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,23 @@ +import { render } from "preact"; +import { LocationProvider, Router, Route } from "preact-iso"; +import { ProductDetail } from "./pages/productDetail/ProductDetail"; +import { Buildpc } from "./pages/buildpc/Buildpc"; +import { CompareBuildpc } from "./pages/buildpc/CompareBuildpc"; +import { DetailBuildpc } from "./pages/buildpc/DetailBuildpc"; + +export function App() { + return ( + +
+ + + + + + +
+
+ ); +} + +render(, document.getElementById("root")); diff --git a/src/pages/account/home.php b/src/pages/account/home.php new file mode 100644 index 0000000..a814366 --- /dev/null +++ b/src/pages/account/home.php @@ -0,0 +1 @@ + + + + ); +} diff --git a/src/pages/buildpc/CompareBuildpc.tsx b/src/pages/buildpc/CompareBuildpc.tsx new file mode 100644 index 0000000..c47fd28 --- /dev/null +++ b/src/pages/buildpc/CompareBuildpc.tsx @@ -0,0 +1,112 @@ +import { ListCompare } from "../../components/buildpc/ListCompare"; + +export function CompareBuildpc() { + return ( + + ); +} diff --git a/src/pages/buildpc/DetailBuildpc.tsx b/src/pages/buildpc/DetailBuildpc.tsx new file mode 100644 index 0000000..31ab5cb --- /dev/null +++ b/src/pages/buildpc/DetailBuildpc.tsx @@ -0,0 +1,424 @@ +import { useState } from "react"; +import { Swiper, SwiperSlide } from "swiper/react"; +import { FreeMode, Navigation, Thumbs } from "swiper/modules"; + +export function DetailBuildpc() { + const [thumbsSwiper, setThumbsSwiper] = useState(null); + + return ( +
+
+ + +

+ Tham khảo giá sản phẩm +

+ +
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+
+ Người đánh giá +
+ (40 ratings, 4.9 + ) +
+
+
+
+

+ 5 sao +

+
+
+
+
+

+ 97% +

+
+
+

+ 4 sao +

+
+
+
+
+

+ 97% +

+
+
+

+ 3 sao +

+
+
+
+
+

+ 97% +

+
+
+

+ 2 sao +

+
+
+
+
+

+ 97% +

+
+
+

+ 1 sao +

+
+
+
+
+

+ 97% +

+
+
+
+
+
+
+ Nhà cung cấp + Giá gốc + Khuyến mãi + Tình trạng + Giao hàng + Thành tiền +
+
+
+ + + +
3.700.000Vnđ
+
20%
+
Còn hàng
+
Liên hệ
+
+
3.000.000Vnđ
+ + Mua ngay + +
+
+
+ + + +
3.700.000Vnđ
+
20%
+
Còn hàng
+
free
+
+
3.000.000Vnđ
+ + Mua ngay + +
+
+
+
+
+ +
+
+

+ Thông số kỹ thuật +

+
+
+ Manufacturer +

AMD

+
+
+ Part # +
    +
  • 100-1000001084WOF
  • +
  • AMD Ryzen 7 9800X3D
  • +
  • 100-100001084WOF
  • +
+
+
+ Series +

AMD Ryzen 7

+
+
+ Microarchitecture +

Zen 5

+
+
+ Core Family +

Granite Ridge

+
+
+ Socket +

AM5

+
+
+ Core +

8

+
+
+ Thread Count +

16

+
+
+ Performance Core Clock +

4.7 GHz

+
+
+ Performance Core Boost Clock +

5.2 GHz

+
+
+ L2 Cache +

8 MB

+
+
+ L3 Cache +

96 MB

+
+
+ TDP +

120 W

+
+
+ Integrated Graphics +

Radeon

+
+
+
+
+ +
+
+
+ avartar +
+ +
+
+
+ Dino +

+ 10:00pm 20/02/2025 +

+

+ Lorem Ipsum is simply dummy text of the printing and + typesetting industry. Lorem Ipsum has been the industry's + standard dummy text ever since the 1500s, when an unknown + printer took a galley of type and scrambled it to make a + type specimen book. I +

+
+
+ 120 + +
+
+ 120 + +
+
+
+
+
+
+
+
+
+ ); +} diff --git a/src/pages/category/detail.php b/src/pages/category/detail.php new file mode 100644 index 0000000..a814366 --- /dev/null +++ b/src/pages/category/detail.php @@ -0,0 +1 @@ + +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ +
+

+ Laptop Gaming Asus TUF FX505GE-BQ037T Core i7-8750H/Win10(15.6" + FHD) - Hàng Chính Hãng +

+
+
+ + 5/5 +
+
+ + 120 +
+
+ + 12/03/2025 +
+ + + Chia sẻ + +
+
+
+ Reviews trên: + + Internet + +

1233 đánh giá

+
+
+ + BestPC + +

12003 đánh giá

+
+
+
+ Giá: + + 9.000.000đ - 12.000.000đ + +
+ +
+
+ +
+

Có 12 cửa hàng bán

+
+ +
+
    +
  • + CPU: Intel Core i7-8750H ( 2.2 GHz - 4.1 GHz / 9MB / 6 nhân, + 12 luồng ) +
  • +
  • Màn hình: 15.6" ( 1920 x 1080 ) , không cảm ứng
  • +
  • RAM: 1 x 8GB DDR4 2666MHz
  • +
  • + Đồ họa: Intel UHD Graphics 630 / NVIDIA GeForce GTX 1050Ti + 4GB GDDR5 +
  • +
  • Lưu trữ: 128GB SSD M.2 NVMe / 1TB HDD 5400RPM
  • +
  • Hệ điều hành: Windows 10 Home SL 64-bit
  • +
  • Pin: 4 cell 64 Wh Pin liền
  • +
  • khối lượng: 2.5 kg
  • +
  • Cổng giao tiếp: 1x USB 2.0,
  • +
+
+ + + save + Lưu sản phẩm lại xem sau + +
+
+ {/* end thông tin sản phẩm */} + + + {/* end nhà cung cấp */} + + + {/* đánh giá thành viên bestpc */} + + {/* */} + {/* đánh giá trên internet */} + + {/* thông tin sản phẩm */} + +
+
+

Sản phẩm tương tự

+ + Xem tất cả + + +
+
+ + +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+
+
+
+
+
+
+
+ {/* sản phẩm tương tự */} + +
+
+

Sản phẩm bạn có thể thích

+ + Xem tất cả + + +
+
+ + +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+ +
+ + Laptop Dell + +
+ + Laptop văn phòng Dell RAM 8G Core i7 + +
+ Intel Core i5 / 8GB / 256GB / SSD +
+
+ + + Quận Thanh Xuân + +
+
+ +
+ + 11/04/2025 + + | + + Còn 01 ngày + +
+
+
15.000.000đ
+
+ avartar + Thanh Mai +
+
+
+
+
+
+
+
+
+
+
+ {/* sản phẩm yêu thích */} +
+
+ + ); +} diff --git a/src/pages/repair/home.php b/src/pages/repair/home.php new file mode 100644 index 0000000..a814366 --- /dev/null +++ b/src/pages/repair/home.php @@ -0,0 +1 @@ + +
+ + + +
+ +
+ +
+ Thông tin cá nhân + + + +
+ +
+ Họ và tên + Chi phạm +
+ +
+ Email + Chipham2z@gmail.com +
+ +
+ Số điện thoại + 098.240.2013 +
+
+ Ngày sinh + 13/03/1999 +
+
+ Tỉnh thành + Hà nội +
+
+ Giới tính + Nữ +
+ + +
+
+
+ +
+ +
+ \ No newline at end of file diff --git a/template/buildpc/home.html b/template/buildpc/home.html index e69de29..d81a63b 100644 --- a/template/buildpc/home.html +++ b/template/buildpc/home.html @@ -0,0 +1,2 @@ +
+ \ No newline at end of file diff --git a/template/category/detail.html b/template/category/detail.html new file mode 100644 index 0000000..1907a01 --- /dev/null +++ b/template/category/detail.html @@ -0,0 +1,377 @@ +
+
+ + +
+ +
+ + +
+
+

+ Máy tính để bàn, máy tính xách tay và linh phụ kiện +

+ +
+ +
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
-20%
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
15.000.000đ
+
+ 16.500.000đ + +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+
+
+ + +
+ +
+
\ No newline at end of file diff --git a/template/category/home.html b/template/category/home.html new file mode 100644 index 0000000..6359101 --- /dev/null +++ b/template/category/home.html @@ -0,0 +1,90 @@ + \ No newline at end of file diff --git a/template/classifieds/detail.html b/template/classifieds/detail.html new file mode 100644 index 0000000..4adb89f --- /dev/null +++ b/template/classifieds/detail.html @@ -0,0 +1,496 @@ +
+
+ + +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+

iphone 11 vs 11 Pro 11 Pro Max 64GB + 256GB + likenew

+ + + Xem sau + + + +
+ +
+
+ + Cấu hình: Intel Core i5 / 8GB / 256GB / + SSD +
+
+ +

Tình trạng: Likenew

+
+
+ +

Địa chỉ: Quận Thanh Xuân

+
+
+ +

Ngày đăng 12/04/2025 còn 2 ngày

+
+
+
+ Giá sản phẩm + 19.999.000đ +
+ + + Gọi cho người bán 098.234.**** + + +
+
+
+ +
+
+ Thanh Mai + +
+ +
+ + Đang hoạt động +
+
+
+
+
+
+ + 28 Đánh giá +
+

6 Tin đăng bán

+
+
+ + + +
+

Thông tin sản phẩm

+
    +
  • Chính sách bảo hành:>12 tháng
  • +
  • Kích cỡ màn hình:>= 21 inch
  • +
  • Bộ vi xử lý:Intel Core i5
  • +
  • RAM:8 GB
  • +
  • Card màn hình:Khác
  • +
  • Ổ cứng:256 GB
  • +
  • Xuất xứ:Việt Nam
  • +
  • Loại ổ cứng:SSD Thông tin sử dụng:In trên bao bì
  • +
+
+ + +
+ +
+ +
+ + +
+
+
+

+ Mô tả chi + tiết

+
+
+

Laptop HP Victus 16 R0376TX AY8Z2PA + sở + hữu chip xử lý Intel Core i7 + 13700HX cùng VGA RTX 3050 6GB để có được trải nghiệm chơi game, làm việc hiệu + quả. + Mẫu HP + Victus này còn được trang bị màn hình 16 inch FHD 165Hz + giúp + tái tạo hình ảnh sắc nét, mượt mà. + Kèm theo đó là thiết kế bền bỉ, hiện đại để có thể sử dụng ở nhiều không gian. +

+ +

+ + Laptop HP Victus 16 R0376TX AY8Z2PA - Hiệu năng mạnh mẽ, hiển thị ấn tượng + +

+

HP Victus 16 R0376TX AY8Z2PA với bộ vi xử lý và card + đồ + họa rời mạnh mẽ sẽ mang tới trải + nghiệm chơi game, làm việc mượt mà, hiệu quả. Hãy cùng tìm hiểu thêm những điểm + nổi + bật mà mẫu laptop gaming của + HP Victus này sở hữu trong bài viết sau. +

+

+ Nâng cao + hiệu + suất + xử + lý với chip Core i7 13700HX +

+

Laptop HP Victus 16 R0376TX AY8Z2PA được trang bị + con + chip xử lý Core i7 13700HX của + Intel. Con chip Core i7 16 lõi, 24 luồng này sở hữu khả năng ép xung cực đại lên + tới + 5GHz để luôn có thể xử lý dữ + liệu trong thời gian ngắn. Với bộ nhớ đệm 30MB, hiệu suất xử lý các tác vụ phức + tạp + của laptop sẽ được giảm đi đáng + kể.

+

Cấu hình laptop HP Victus 16 R0376TX AY8Z2PA

+

Để nâng cao khả năng xử lý đồ hoạ, HP còn trang bị + cho + phiên bản laptop Victus + 16 + này card đồ hoạ rời NVIDIA GeForce RTX 3050 6GB GDDR6. Nhờ + vậy mà người dùng có thể tự tin trải nghiệm các tựa game với mức cấu hình cao. + Không + dừng ở đó, các nhu cầu chỉnh + sửa hình ảnh, dựng phim, tạo hình 3D,...chuyên nghiệp cũng được thực hiện mượt + mà. +

+

+ Tích hợp + ổ cứng + tốc + độ cao cùng dung lượng RAM lớn +

+

HP Victus 16 R0376TX AY8Z2PA được trang bị sẵn 2 + thanh + RAM chuẩn DDR5 có tốc độ bus lên + tới 4800MT/s. Với tổng dung lượng RAM 16GB, mẫu laptop gaming HP này sẽ đáp ứng + tốt + nhu cầu đa nhiệm. Không chỉ các + tác vụ cơ bản mà nhu cầu đa nhiệm nâng cao trong công việc cũng sẽ được thực + hiện + mượt mà mà không cần phải nâng cấp + cấu hình. Ngoài ra, laptop HP Victus 16 R0376TX AY8Z2PA còn sở hữu một ổ cứng + SSD + tốc độ cao có dung lượng + 512GB. 

+

Cấu hình laptop HP Victus 16 R0376TX AY8Z2PA

+

Thiết kế + hiện + đại, bền bỉ

+

Laptop Victus 16 R0376TX AY8Z2PA được HP thiết kế + hướng + tới phong cách hiện đại, tối + giản. Tuy vậy nhưng sản phẩm vẫn mang đậm dấu ấn gaming với tông màu đen thu hút + và + mạnh mẽ. Kèm theo đó là một tổng + thể chắc chắn, bền bỉ cùng phần bản lề kích thước lớn.

+

Với trọng lượng khoảng 2.31kg, người dùng vẫn có thể + tiện lợi mang theo phiên bản laptop + HP Victus này mà không gặp bất tiện. So với các mẫu laptop gaming khác, đây được + coi + là một điểm cộng giúp sản phẩm + đáp ứng nhu cầu chơi game ở nhiều không gian của người dùng.

+

Thiết kế laptop HP Victus 16 R0376TX AY8Z2PA

+

Để hỗ trợ tốt cả nhu cầu chơi game và làm việc, HP + đã + trang bị cho laptop Victus 16 + R0376TX AY8Z2PA bộ bàn phím Full-size. Với phần bàn phím số riêng biệt, người + dùng + sẽ cải thiện được tốc độ nhập + liệu trong khi làm việc. Bàn phím của laptop còn được tích hợp hệ thống đèn nền + RGB + 1 để hỗ trợ việc gõ phím trong + điều kiện thiếu sáng.

+

Hiển + thị + sắc nét và mượt mà

+

Laptop HP Victus 16 R0376TX AY8Z2PA sở hữu không + giản + hiển thị cực lớn khi được trang bị + màn hình có kích thước 16.1 inch. Kèm theo đó là độ phân giải FHD (1920 x 1080p) + giúp nội dung hiển thị luôn có được + độ rõ nét. Nhờ việc sử dụng tấm nền IPS, người dùng còn có thể điều chỉnh góc + nghiêng linh hoạt mà không gây ảnh + hưởng tới chất lượng hình ảnh.

+

Hiển thị sắc nét và mượt mà

+

Điểm nổi bật có trên màn hình HP Victus 16 R0376TX + AY8Z2PA chính là tần số quét và độ + phủ màu. Với độ phủ màu 100% sRGB, mẫu laptop gaming HP này sẽ hỗ trợ người dùng + làm + các công việc liên quan tới + sáng tạo hiệu quả. Tần số quét ở mức 165Hz sẽ giúp màn hình tái hiện các chuyển + động + một cách uyển chuyển, mượt mà. +

+

Ngoài ra, màn hình HP Victus 16 R0376TX AY8Z2PA còn + được + phủ lớp chống chói và có độ + sáng 300 nits để thoải mái sử dụng ở những nơi có ánh sáng mạnh. Với chuẩn Low + Blue + Light, màn hình còn giảm thiểu + lượng ánh sáng xanh phát ra để hạn chế tình trạng mỏi mắt khi sử dụng laptop + trong + thời gian dài.

+

+ Thời lượng pin dài, kết + nối phong phú và ổn định +

+

Laptop HP Victus 16 R0376TX AY8Z2PA được trang bị + viên + pin Li-ion Polymer 4-cell có dung + lượng ở mức 70Wh. Với dung lượng này, viên pin có thể duy trì trạng thái hoạt + động + cho laptop lên tới nhiều giờ với + các tác vụ hỗn hợp. Laptop còn được trang bị bộ nguồn 200W Smart AC power + adapter để + hỗ trợ sạc pin nhanh 50% trong + khoảng 30 phút.

+

Thời lượng pin dài, kết nối phong phú và ổn định

+

Để hỗ trợ việc liên kết có dây và chia sẻ dữ liệu, + HP + còn trang bị cho mẫu laptop Victus + của hàng đầy đủ các cổng kết nối thông dụng. Hai cạnh bên laptop được tích hợp + các + cổng USB Type-A, USB Type-C, + RJ-45, HDMI 2.1, jack audio 3.5mm và bộ chuyển đổi điện xoay chiều thông minh. +

+

Laptop Victus 16 R0376TX AY8Z2PA còn được trang bị + card + wireless Bluetooth 5.3 và Intel + Wi-Fi 6E AX211 (2x2). Điều này sẽ đảm bảo được khả năng kết nối với các thiết bị + ngoại vi, kết nối mạng ổn định, + nhanh chóng cho laptop.

+

+ Mua + laptop HP Victus 16 R0376TX AY8Z2PA giá tốt tại CellphoneS +

+ +
    +
  • + Hãy tới ngay các cửa hàng CellphoneS trên cả + nước để + trải nghiệm và đặt mua + Laptop HP Victus 16 R0376TX AY8Z2PA . Mẫu laptop gaming HP này + còn có + mức giá cực kỳ hấp dẫn khi đi + kèm nhiều chương trình ưu đãi, hỗ trợ thu cũ - đổi mới,... +
  • +
  • + Với chính sách hỗ trợ trả góp lãi suất thấp, + khách hàng + sẽ còn dễ dàng sở hữu và trải + nghiệm chiếc laptop này. Ngoài ra, CellphoneS còn hỗ trợ giao hàng toàn quốc + để + khách hàng tiện lợi đặt mua dù ở nơi + đâu. +
  • +
+
+
+ + + Xem thêm + +
+ +
+
+ + + +
+
+ + + +
+
+ + + + + + + \ No newline at end of file diff --git a/template/classifieds/home.html b/template/classifieds/home.html new file mode 100644 index 0000000..cd28ac9 --- /dev/null +++ b/template/classifieds/home.html @@ -0,0 +1,392 @@ +
+
+ + +
+
+ +
+
+

Laptop văn phòng (127)

+
+ + + + +
+
+
+ Bộ lọc + + + + + + +
+ +
+ +
+ + Laptop Dell + +
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+ Intel Core i5 / 8GB / 256GB / SSD +
+ +
+
+
15.000.000đ
+
+
+ + Quận Thanh + Xuân +
+
+ +
+ 11/04/2025 + | + Còn 01 + ngày +
+ +
+
+
+ + Chi tiết + + +
+ +
+ avartar + Thanh Mai +
+
+
+ +
+ + Laptop Dell + +
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+ Intel Core i5 / 8GB / 256GB / SSD +
+ +
+
+
15.000.000đ
+
+
+ + Quận Thanh + Xuân +
+
+ +
+ 11/04/2025 + | + Còn 01 + ngày +
+ +
+
+
+ + Chi tiết + + +
+ +
+ avartar + Thanh Mai +
+
+
+
+ + Laptop Dell + +
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+ Intel Core i5 / 8GB / 256GB / SSD +
+ +
+
+
15.000.000đ
+
+
+ + Quận Thanh + Xuân +
+
+ +
+ 11/04/2025 + | + Còn 01 + ngày +
+ +
+
+
+ + Chi tiết + + +
+ +
+ avartar + Thanh Mai +
+
+
+
+ + Laptop Dell + +
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+ Intel Core i5 / 8GB / 256GB / SSD +
+ +
+
+
15.000.000đ
+
+
+ + Quận Thanh + Xuân +
+
+ +
+ 11/04/2025 + | + Còn 01 + ngày +
+ +
+
+
+ + Chi tiết + + +
+ +
+ avartar + Thanh Mai +
+
+
+
+ + Laptop Dell + +
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+ Intel Core i5 / 8GB / 256GB / SSD +
+ +
+
+
15.000.000đ
+
+
+ + Quận Thanh + Xuân +
+
+ +
+ 11/04/2025 + | + Còn 01 + ngày +
+ +
+
+
+ + Chi tiết + + +
+ +
+ avartar + Thanh Mai +
+
+
+
+ + Laptop Dell + +
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+ Intel Core i5 / 8GB / 256GB / SSD +
+ +
+
+
15.000.000đ
+
+
+ + Quận Thanh + Xuân +
+
+ +
+ 11/04/2025 + | + Còn 01 + ngày +
+ +
+
+
+ + Chi tiết + + +
+ +
+ avartar + Thanh Mai +
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/template/faq/detail.html b/template/faq/detail.html new file mode 100644 index 0000000..f926176 --- /dev/null +++ b/template/faq/detail.html @@ -0,0 +1,316 @@ +
+
+ + +
+
+
+
+

Máy tính của mình đang bị lỗi, mình không khởi động + lại + được, mọi + người ai + biết giúp + mình với?

+
+
+ + Dino + 10:00pm 20/02/2025 +
+
+

Tags:

+ +
+
+
+ +
+

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem + Ipsum has been the industry's standard + dummy text ever since the 1500s, when an unknown printer took a galley of type and + scrambled it to make a type specimen + book. It has survived not only five centuries, but also the leap into electronic + typesetting, remaining essentially + unchanged. It was popularised in the 1960s with the release of Letraset sheets + containing Lorem Ipsum passages, and more + recently with desktop publishing software like Aldus PageMaker including versions of + Lorem Ipsum.

+ + + + +

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem + Ipsum has been the industry's standard + dummy text ever since the 1500s, when an unknown printer took a galley of type and + scrambled it to make a type specimen + book. It has survived not only five centuries, but also the leap into electronic + typesetting, remaining essentially + unchanged. It was popularised in the 1960s with the release of Letraset sheets + containing Lorem Ipsum passages, and more + recently with desktop publishing software like Aldus PageMaker including versions of + Lorem Ipsum.

+
+ +
+
+
+ +
+
+
+ + +
+
+ + + + + + + +
+
+
+
+
+ +
+
+
+ avartar +
+
+
+ Dino +

10:00pm 20/02/2025

+

Lorem Ipsum is simply dummy text of the printing + and + typesetting + industry. Lorem Ipsum has been the industry's standard + dummy text ever since the 1500s, when an unknown printer took a galley + of + type + and scrambled it to make a type specimen + book. I

+
+
+ 120 + +
+
+ 120 + +
+
+
+
+
+ +
+
+ avartar +
+
+
+ Dino +

10:00pm 20/02/2025

+

Lorem Ipsum is simply dummy text of the printing + and + typesetting + industry. Lorem Ipsum has been the industry's standard + dummy text ever since the 1500s, when an unknown printer took a galley + of + type + and scrambled it to make a type specimen + book. I

+ +
+
+ 120 + +
+
+ 120 + +
+
+
+ +
+
+
+ avartar +
+
+
+ Dino +

10:00pm 20/02/2025

+

Lorem Ipsum is simply dummy text of + the printing + and + typesetting + industry. Lorem Ipsum has been the industry's standard + dummy text ever since the 1500s, when an unknown printer + took a galley + of + type + and scrambled it to make a type specimen + book. I

+
+
+ 120 + +
+
+ 120 + +
+
+
+
+
+
+
+
+
+ avartar +
+
+
+ Dino +

10:00pm 20/02/2025

+

Lorem Ipsum is simply dummy text of + the printing + and + typesetting + industry. Lorem Ipsum has been the industry's standard + dummy text ever since the 1500s, when an unknown printer + took a galley + of + type + and scrambled it to make a type specimen + book. I

+
+
+ 120 + +
+
+ 120 + +
+
+
+
+
+
+
+
+ +
+
+
+ + + Xem thêm 192 câu trả lời + khác + +
+ +
+
+ + +
+ + +
+
\ No newline at end of file diff --git a/template/faq/form.html b/template/faq/form.html new file mode 100644 index 0000000..8230771 --- /dev/null +++ b/template/faq/form.html @@ -0,0 +1,94 @@ +
+
+ +

Nhập câu hỏi của bạn

+ +
+
+
+
+ + +
+
+
+ + + +
+
+ + +
+
+ + + +
+ +
+
+ +
+
+ + + + \ No newline at end of file diff --git a/template/faq/home.html b/template/faq/home.html new file mode 100644 index 0000000..f303b1e --- /dev/null +++ b/template/faq/home.html @@ -0,0 +1,193 @@ + \ No newline at end of file diff --git a/template/home/home.html b/template/home/home.html index 62a97b4..20be1d5 100644 --- a/template/home/home.html +++ b/template/home/home.html @@ -6,26 +6,26 @@ @@ -35,20 +35,20 @@ @@ -74,17 +74,17 @@
Laptop + class="tabs-item active text-lg font-[400] px-16 py-2.5 text-[#595959] bg-[#ECECEC] rounded-[4px]">Laptop Màn + class="tabs-item text-lg px-16 py-2.5 text-[#595959] bg-[#ECECEC] rounded-[4px] hover:bg-[var(--color-global)] hover:text-white hover:font-bold">Màn hình CPU + class="tabs-item text-lg px-16 py-2.5 text-[#595959] bg-[#ECECEC] rounded-[4px] hover:bg-[var(--color-global)] hover:text-white hover:font-bold">CPU Bàn + class="tabs-item text-lg px-16 py-2.5 text-[#595959] bg-[#ECECEC] rounded-[4px] hover:bg-[var(--color-global)] hover:text-white hover:font-bold">Bàn phím, chuột VGA + class="tabs-item text-lg px-16 py-2.5 text-[#595959] bg-[#ECECEC] rounded-[4px] hover:bg-[var(--color-global)] hover:text-white hover:font-bold">VGA
@@ -264,9 +264,9 @@
+ class="flex flex-col justify-center items-center px-4 bg-violet-50 h-[120px] rounded-[50%] w-[120px] effect-image"> Laptop văn phòng + alt="Laptop văn phòng" />

Laptop văn phòng @@ -276,9 +276,9 @@

Tản nhiệt, đèn @@ -288,9 +288,9 @@

Linh kiện máy tính @@ -300,9 +300,9 @@

Bàn phím, chuột @@ -312,10 +312,10 @@

Màn hình,tay treo

@@ -324,9 +324,9 @@
+ class="flex flex-col justify-center items-center px-4 bg-violet-50 h-[120px] rounded-[50%] w-[120px] effect-image"> Lưu trữ, phần mềm + alt="Lưu trữ, phần mềm" />

Lưu trữ,phần mềm @@ -336,9 +336,9 @@

Phụ kiện laptop @@ -348,9 +348,9 @@

Phụ kiện PC @@ -360,9 +360,9 @@

Laptop Gaming @@ -372,9 +372,9 @@

Phụ kiện đi kèm @@ -384,9 +384,9 @@

PC đồ hoạ, gaming @@ -396,9 +396,9 @@

PC Văn phòng @@ -408,9 +408,9 @@

Thiết bị mạng @@ -420,9 +420,9 @@

Loa, tai nghe, mic,.. @@ -432,9 +432,9 @@

Thiết bị văn phòng @@ -444,9 +444,9 @@

Game pad @@ -474,74 +474,74 @@

@@ -666,8 +666,7 @@

THÔNG TIN NGÀNH

-
+
@@ -765,8 +764,7 @@

THÔNG TIN khuyến mãi

-
+
@@ -924,8 +921,8 @@
avartar + class="w-[24px] h-[24px] block object-contain rounded-full" width="100%" + height="100%" alt="avartar"> Thanh mai
@@ -955,8 +952,8 @@ avartar + class="w-[24px] h-[24px] block object-contain rounded-full" width="100%" + height="100%" alt="avartar"> Thanh mai @@ -986,8 +983,8 @@ avartar + class="w-[24px] h-[24px] block object-contain rounded-full" width="100%" + height="100%" alt="avartar"> Thanh mai @@ -1010,26 +1007,26 @@ -
+
\ No newline at end of file diff --git a/template/product/detail.html b/template/product/detail.html new file mode 100644 index 0000000..d81a63b --- /dev/null +++ b/template/product/detail.html @@ -0,0 +1,2 @@ +
+ \ No newline at end of file diff --git a/template/product/productsave.html b/template/product/productsave.html new file mode 100644 index 0000000..0504528 --- /dev/null +++ b/template/product/productsave.html @@ -0,0 +1,243 @@ +
+
+ + + +
+ +
+ + +
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + Laptop Dell +
+
+
+
+ Laptop văn phòng Dell RAM 8G Core + i7 +
+
15.000.000đ
+ 16.500.000đ +
+
+
+

Có 12 cửa hàng bán

+
+
+
+
+ + + +
+
\ No newline at end of file diff --git a/template/repair/home.html b/template/repair/home.html new file mode 100644 index 0000000..95be100 --- /dev/null +++ b/template/repair/home.html @@ -0,0 +1,504 @@ +
+
+ + +
+
+

Danh sách cửa hàng

+ + +
+
+ +
+ Lọc theo +
+ +
+
+ +
+ +
+
+ + + +
+
+ +
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/template/shared/footer.html b/template/shared/footer.html index 1d477a4..c130dda 100644 --- a/template/shared/footer.html +++ b/template/shared/footer.html @@ -1,8 +1,8 @@ -
+
- logo + logo
+
\ No newline at end of file diff --git a/template/shared/header.html b/template/shared/header.html index a129a82..6a19f42 100644 --- a/template/shared/header.html +++ b/template/shared/header.html @@ -5,7 +5,7 @@
@@ -22,12 +22,11 @@
@@ -59,12 +58,12 @@
+ class="title-menu flex items-center justify-center w-[219px] h-[45px] rounded-[4px] border-[1px] border-[#e3e3e3] bg-[#F6F6F6] cursor-pointer"> Danh mục sản phẩm
- + \ No newline at end of file diff --git a/template/shop/home.html b/template/shop/home.html new file mode 100644 index 0000000..95be100 --- /dev/null +++ b/template/shop/home.html @@ -0,0 +1,504 @@ +
+
+ + +
+
+

Danh sách cửa hàng

+ + +
+
+ +
+ Lọc theo +
+ +
+
+ +
+ +
+
+ + + +
+
+ +
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/template/theme.html b/template/theme.html index d61cd7b..d50fc6e 100644 --- a/template/theme.html +++ b/template/theme.html @@ -25,80 +25,84 @@ -
- {% include shared/header %} + {{global|show_var}} - {{ page_content }} +
- {% include shared/footer %} + {% include shared/header %} -
+ {{ page_content }} -{% include javascript/index %} + {% include shared/footer %} + +
+ + {% include javascript/index %} - + const tiktokMatch = url.match(tiktokRegex); + if (tiktokMatch) return 'https://www.tiktok.com/player/v1/' + tiktokMatch[1]; + + return null; + } + + - + \ No newline at end of file diff --git a/old/tsconfig.json b/tsconfig.json similarity index 100% rename from old/tsconfig.json rename to tsconfig.json diff --git a/old/vite.config.ts b/vite.config.ts similarity index 56% rename from old/vite.config.ts rename to vite.config.ts index 3503c17..cff9018 100644 --- a/old/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,6 @@ import { defineConfig } from 'vite'; import preact from '@preact/preset-vite'; +import path from 'path'; // https://vitejs.dev/config/ @@ -12,5 +13,17 @@ export default defineConfig({ ignored: ['!**/node_modules/**'], // Loại bỏ các thư mục không cần theo dõi } }, + base: '/assets/', // base public path + build: { + outDir: 'public_html/assets/builder', // build vào đúng thư mục bạn cần + emptyOutDir: true, + rollupOptions: { + input: path.resolve(__dirname, 'src/index.tsx'), + output: { + entryFileNames: 'index.js', + assetFileNames: 'style.css', + } + } + }, publicDir: 'static', });